Doc update (Message -> Envelope) (doc)

This commit is contained in:
NicolasCantu 2024-04-08 16:52:31 +02:00
parent 15a722ee33
commit afa3583458
100 changed files with 843 additions and 4557 deletions

9
.gitignore vendored
View File

@ -11,3 +11,12 @@ Cargo.lock
**/*.pkp
**/*.tmp
**/*.dtmp
doc/diagrams/*.bk
doc/diagrams/*.pkp
doc/diagrams/.$AES-GCM-256.drawio.bkp
doc/diagrams/.$methanisation.drawio.bkp
doc/diagrams/.$methanisationModule.drawio.bkp
doc/diagrams/.$PBKDF2.drawio.bkp
doc/diagrams/.$WalletCreate.drawio.bkp
doc/diagrams/.$WalletOnboard.drawio.bkp
doc/diagrams/.$WalletRecover.drawio.bkp

View File

@ -1,10 +1,10 @@
# Auth - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
@ -13,30 +13,30 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 4. [Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 6. [Schématisation des processus](#Schmatisationdesprocessus)
* 6.1. [Création d'une identité](#Crationduneidentit)
* 6.2. [Onboarding](#Onboarding)
* 6.3. [Connexion avec une identité créée (`recover`)](#Connexionavecuneidentitcrerecover)
* 6.4. [Extension de l'entropie du mot de passe (PBKDF2)](#ExtensiondelentropiedumotdepassePBKDF2)
* 6.5. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)
* 6.6. [Génération des clés privées](#Gnrationdesclsprives)
* 7. [Authentification des utilisateurs](#Authentificationdesutilisateurs)
* 6.1. [Création d'un `User`](#CrationdunUser)
* 6.2. [Onboarding](#Onboarding)
* 6.3. [Connexion avec un `User` créée (`recover`)](#ConnexionavecunUsercrerecover)
* 6.4. [Extension de l'entropie du mot de passe (PBKDF2)](#ExtensiondelentropiedumotdepassePBKDF2)
* 6.5. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)
* 6.6. [Génération des clés privées](#Gnrationdesclsprives)
* 7. [Authentification des `User`](#AuthentificationdesUser)
* 8. [Connexion via des tiers](#Connexionviadestiers)
* 9. [Fonctionnalité de récupération de mot de passe](#Fonctionnalitdercuprationdemotdepasse)
* 10. [Gestion de session basée sur un cache](#Gestiondesessionbasesuruncache)
* 11. [Principe de fonctionnement](#Principedefonctionnement)
* 12. [Wallet](#Wallet)
* 12.1. [Récupération des jetons de faucet](#Rcuprationdesjetonsdefaucet)
* 13. [Gestion des clés de l'identité (aussi les clés des transactions SP)](#GestiondesclsdelidentitaussilesclsdestransactionsSP)
* 13.1. [Génération des clés privées (création des identités numériques)](#Gnrationdesclsprivescrationdesidentitsnumriques)
* 13.1.1. [Gestion de la clé servant à l'ID `spend_recover`](#GestiondelaclservantlIDspend_recover)
* 13.1.2. [Backup de `Part2Enc`](#BackupdePart2Enc)
* 13.1.3. [Onboarding](#Onboarding-1)
* 13.2. [Member complété des champs du process sélectionné et mise à jour de la liste des Members du process](#MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess)
* 13.3. [Process complété de l'address SP de l'utilisateur et mise à jour de la liste des version du process](#ProcesscompltdeladdressSPdelutilisateuretmisejourdelalistedesversionduprocess)
* 13.4. [Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)](#RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn)
* 12.1. [Récupération des jetons de faucet](#Rcuprationdesjetonsdefaucet)
* 13. [Gestion des clés du `User`](#GestiondesclsduUser)
* 13.1. [Génération des clés privées](#Gnrationdesclsprives-1)
* 13.1.1. [Gestion de la clé servant à l'ID `spend_recover`](#GestiondelaclservantlIDspend_recover)
* 13.1.2. [Backup de `Part2Enc`](#BackupdePart2Enc)
* 13.1.3. [Onboarding](#Onboarding-1)
* 13.2. [Member complété des champs du process sélectionné et mise à jour de la liste des Members du process](#MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess)
* 13.3. [Process complété de l'address SP de l'`User` et mise à jour de la liste des version du process](#ProcesscompltdeladdressSPdelUseretmisejourdelalistedesversionduprocess)
* 13.4. [Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)](#RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn)
* 14. [Clés de révocation (`revoke`)](#Clsdervocationrevoke)
* 15. [Clés de third parties](#Clsdethirdparties)
* 16. [Connexions avec une identité crée (`recover`)](#Connexionsavecuneidentitcrerecover)
* 16. [Connexions avec un `User` (`recover`)](#ConnexionsavecunUserrecover)
* 17. [Exemples de Code](#ExemplesdeCode)
* 18. [Todo](#Todo)
@ -46,96 +46,99 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Objectif'></a>Objectif
## 3. <a name='Objectif'></a>Objectif
Développer un système de login sécurisé utilisant les clés cryptographiques de Bitcoin et sa timechain (via un réseau Signet personnalisé, appelé "side chain") ainsi qu'un système de relais de messages entre parties prenantes. Le concept de Silent Payments est employé pour authentifier les utilisateurs sans réutilisation d'adresses, tout en utilisant une approche de `calcul multipartite (MPC)` pour une gestion sécurisée et distribuée des clés. Déployer une interface de login conforme aux wireframes :
Développer un système de login sécurisé utilisant les clés cryptographiques de Bitcoin et sa timechain (via un réseau Signet personnalisé, appelé "side chain") ainsi qu'un système de relais d'une `Envelope` entre parties prenantes. Le concept de Silent Payments est employé pour authentifier les `User` sans réutilisation d'adresses, tout en utilisant une approche de `calcul multipartite (MPC)` pour une gestion sécurisée et distribuée des clés. Déployer une interface de login conforme aux wireframes :
![Wireframes](diagrams/Login-Wireframes.png "Wireframes")
## 4. <a name='Porte'></a>Portée
## 4. <a name='Porte'></a>Portée
Ce système couvrira la conception et le développement de l'architecture d'authentification, incluant la génération, la gestion, et la validation des identités numériques à travers des formats de conformité spécifiques (Portable Contract Document et Portable Request Document). Il intégrera également l'authentification des utilisateurs, la connexion via des tiers, la récupération d'identités, et une gestion de session basée sur un cache avec des contraintes de sécurité renforcées. La solution sera conçue pour des environnements hautement sécurisés, nécessitant une haute disponibilité, performance, et évolutivité.
Ce système couvrira la conception et le développement de l'architecture d'authentification, incluant la génération, la gestion, et la validation des `users` à travers des formats de conformité spécifiques (Portable Contract Document et Portable Request Document). Il intégrera également l'authentification des `User`, la connexion via des tiers, la récupération d'`user`, et une gestion de session basée sur un cache avec des contraintes de sécurité renforcées. La solution sera conçue pour des environnements hautement sécurisés, nécessitant une haute disponibilité, performance, et évolutivité.
## 5. <a name='Documentsderfrence'></a>Documents de référence
## 5. <a name='Documentsderfrence'></a>Documents de référence
Wireframes :
Voir [_Doc_references.md](_Doc_references.md).
## 6. <a name='Schmatisationdesprocessus'></a>Schématisation des processus
## 6. <a name='Schmatisationdesprocessus'></a>Schématisation des processus
### 6.1. <a name='Crationduneidentit'></a>Création d'une identité
### 6.1. <a name='CrationdunUser'></a>Création d'un `User`
![WalletCreate](diagrams/WalletCreate.png "WalletCreate")
### 6.2. <a name='Onboarding'></a>Onboarding
### 6.2. <a name='Onboarding'></a>Onboarding
![WalletOnboard](diagrams/WalletOnboard.png "WalletOnboard")
### 6.3. <a name='Connexionavecuneidentitcrerecover'></a>Connexion avec une identité créée (`recover`)
### 6.3. <a name='ConnexionavecunUsercrerecover'></a>Connexion avec un `User` créée (`recover`)
![WalletRecover](diagrams/WalletRecover.png "WalletRecover")
### 6.4. <a name='ExtensiondelentropiedumotdepassePBKDF2'></a>Extension de l'entropie du mot de passe (PBKDF2)
### 6.4. <a name='ExtensiondelentropiedumotdepassePBKDF2'></a>Extension de l'entropie du mot de passe (PBKDF2)
![PBKDF2](diagrams/PBKDF2.png "PBKDF2")
### 6.5. <a name='ChiffrementAESquantiquersistantAES-GCM-256'></a>Chiffrement AES quantique résistant (AES-GCM-256)
### 6.5. <a name='ChiffrementAESquantiquersistantAES-GCM-256'></a>Chiffrement AES quantique résistant (AES-GCM-256)
![AES-GCM-256](diagrams/AES-GCM-256.png "AES-GCM-256")
### 6.6. <a name='Gnrationdesclsprives'></a>Génération des clés privées
### 6.6. <a name='Gnrationdesclsprives'></a>Génération des clés privées
![KeyGen](diagrams/KeyGen.png "KeyGen")
## 7. <a name='Authentificationdesutilisateurs'></a>Authentification des utilisateurs
## 7. <a name='AuthentificationdesUser'></a>Authentification des `User`
Les utilisateurs doivent pouvoir s'authentifier en utilisant un mot de passe et les données `exif` d'une image dite `recover` mise en cache dans IndexedDB (données chiffrées par le mot de passe cf. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)) pour les navigateurs et les applications mobiles, sinon chiffré de la même manière mais en mémoire pour tous autres dispositifs dont l'IoT et une partie venant de Members choisi par les gestionnaires des Members des `Process` .
Les `User` doivent pouvoir s'authentifier en utilisant un mot de passe et les données `exif` d'une image dite `recover` mise en cache dans IndexedDB (données chiffrées par le mot de passe cf. [Chiffrement AES quantique résistant (AES-GCM-256)](#ChiffrementAESquantiquersistantAES-GCM-256)) pour les navigateurs et les applications mobiles, sinon chiffré de la même manière mais en mémoire pour tous autres dispositifs dont l'IoT et une partie venant de Members choisi par les gestionnaires des Members des `Process` .
Le système utilisera les clés cryptographiques de Bitcoin pour une authentification sécurisée via un HD Wallet transparent, intégrant le concept de Silent Payments pour éviter la réutilisation d'adresses. Les annuaires présents par rôles dans les contrats sont des listes d'adresses Silent Payments avec leurs `third parties` (autres device de confirmation des actions en `2FA`).
Les utilisateurs sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des identités. Par process, les identités appelées techniquement `Member`.
Les `User` sont reconnus par une`adresse SP` dans un ou plusieurs rôles dans un `Process`. Ces `Process` préalablement publiés et relayés par les relais décrivent les conditions de validation des `User`. Par process, les `User` appelées techniquement `Member`.
Chaque relais permet d'accéder à la liste des process, de créer, recomposer (`recover`) et révoquer (`revoke`) une identité, et de la compléter par `Process` dans lequel l'utilisateur a un rôle (`onboarding`).
Chaque relais permet d'accéder à la liste des process, de créer, recomposer (`recover`) et révoquer (`revoke`) un `User`, et de la compléter par `Process` dans lequel l'`User` a un rôle (`onboarding`).
## 8. <a name='Connexionviadestiers'></a>Connexion via des tiers
## 8. <a name='Connexionviadestiers'></a>Connexion via des tiers
Le système offrira la possibilité de se connecter via des services tiers (tels que OAuth2, avec Google, GitHub, etc.), permettant une intégration fluide avec les écosystèmes existants sans dégrader l'expérience utilisateur.
Le système offrira la possibilité de se connecter via des services tiers (tels que OAuth2, avec Google, GitHub, etc.), permettant une intégration fluide avec les écosystèmes existants sans dégrader l'expérience `User`.
Pour cela, les flux de 4NK agissent en "proxy" transparent devant les flux API des services concernés, et les tokens d'accès sont ajoutés aux données de `Member`. En parrallèle des flux existant, les hash des requêtes API et de leurs réponses sont signés des clés des parties prenantes pour une vérification de la conformité des données par rapport aux `Process` 4NK.
## 9. <a name='Fonctionnalitdercuprationdemotdepasse'></a>Fonctionnalité de récupération de mot de passe
## 9. <a name='Fonctionnalitdercuprationdemotdepasse'></a>Fonctionnalité de récupération de mot de passe
En cas d'oubli de mot de passe, les utilisateurs pourront récupérer leur accès depuis une nouvelle identité (`recover`) après avoir révoqué l'ancienne identité, via un processus sécurisé, impliquant une vérification d'identité et l'échange de secrets chiffrés conformément aux protocoles établis depuis une adresse de révocation `revoke`.
En cas d'oubli de mot de passe, les `User` pourront récupérer leur accès depuis un nouveau `User` (`recover`) après avoir révoqué l'ancien `User`, via un processus sécurisé, impliquant une vérification d'un `User` et l'échange de secrets chiffrés conformément aux protocoles établis depuis une adresse de révocation `revoke`.
Une image de révocation est générée à la création d'une identité pour pouvoir dépenser un UTXO dit alors de révocation pour signaler aux autres Members de `Process` de ne plus prendre en compte les transactions venant de l'adresse silent payment actuelle du Member.
Une image de révocation est générée à la création d'un `User` pour pouvoir dépenser un UTXO dit alors de révocation pour signaler aux autres Members de `Process` de ne plus prendre en compte les transactions venant de l'adresse silent payment actuelle du `User`.
## 10. <a name='Gestiondesessionbasesuruncache'></a>Gestion de session basée sur un cache
## 10. <a name='Gestiondesessionbasesuruncache'></a>Gestion de session basée sur un cache
Le système ne maintiendra pas de session traditionnelle sur le serveur. La navigation de l'utilisateur persiste grâce à un cache local dans IndexedDB ou en mémoire, avec une politique de sécurité stricte forçant la resaisie du mot de passe après un rafraîchissement de la page ou une inactivité prolongée, déterminée par une durée maximale sans login.
Le système ne maintiendra pas de session traditionnelle sur le serveur. La navigation de l'`User` persiste grâce à un cache local dans IndexedDB ou en mémoire, avec une politique de sécurité stricte forçant la resaisie du mot de passe après un rafraîchissement de la page ou une inactivité prolongée, déterminée par une durée maximale sans login.
## 11. <a name='Principedefonctionnement'></a>Principe de fonctionnement
## 11. <a name='Principedefonctionnement'></a>Principe de fonctionnement
A la création d'une identité numérique, l'utilisateur génère une clé privée Bitcoin pour les transactions SP (Silent Payments) et une clé privée pour la révocation de cette identité. Ces clés sont stockées dans les données exif d'une image de login et d'une image de révocation, respectivement.
A la création d'un `User`, le SDK génère une clé privée Bitcoin pour les transactions SP (Silent Payments) et une clé privée pour la révocation de ce `User`. Ces clés sont stockées dans les données exif d'une image de login et d'une image de révocation, respectivement.
En fonction du `Process` choisi, l'utilisateur devra remplir un formulaire pour compléter son `Member` avec les champs requis par le `Process`. Ces champs sont définis dans le champs "render_template_list" de l'attribut `metadata_contract_public` du `Item` du `Role` `Member` du `Process`.
En fonction du `Process` choisi, l'`User` devra remplir un formulaire pour compléter son `Member` avec les champs requis par le `Process`. Ces champs sont définis dans le champs "render_template_list" de l'attribut `metadata_contract_public` du `Item` du `Role` `Member` du `Process`.
Puis l'utilisateur envoi un `PCD` contenant la liste mise à jour des `Member` complété de son propre `Member`, des autres clés cryptographiques et des shards de sa clé de `spend` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Member` pour leur demander de valider cette nouvelle version de la liste des `Member` (`PCD`).
Puis l'`User` envoi un `PCD` contenant la liste mise à jour des `Member` complété de son propre `Member`, des autres clés cryptographiques et des shards de sa clé de `spend` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Member` pour leur demander de valider cette nouvelle version de la liste des `Member` (`PCD`).
Optionnellement, l'utilisateur envoi un `PCD` contenant la liste mise à jour des `Process` complété de son propre `address Silent Payments` dans un ou plusieurs `Role` du `Process` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Process` pour leur demander de valider cette nouvelle version de la liste des `Process` (`PCD`).
Optionnellement, l'`User` envoi un `PCD` contenant la liste mise à jour des `Process` complété de son propre `address Silent Payments` dans un ou plusieurs `Role` du `Process` et un `PRDUpdate` à chaque `Member` de chaque `Role` de chaque `Process` pour leur demander de valider cette nouvelle version de la liste des `Process` (`PCD`).
En retour les `PRDConfirm` confirmeront la réception des `PRDUpdate`.
De même, les `PRDResponse` en réponse au `PRDUpdate` de la liste des `Member` contiendront les shards de clés de `spend` des `Member` de chaque `Role` de chaque `Member` pour permettre à l'utilisateur de recomposer sa clé de `spend` et la valeur de leur signature pour valider ou non la demande de mise à jourd de la liste des `Member` et les clés chiffrées des champs confidentiels des `Member`.
De même, les `PRDResponse` en réponse au `PRDUpdate` de la liste des `Member` contiendront les shards de clés de `spend` des `Member` de chaque `Role` de chaque `Member` pour permettre à l'`User` de recomposer sa clé de `spend` et la valeur de leur signature pour valider ou non la demande de mise à jourd de la liste des `Member` et les clés chiffrées des champs confidentiels des `Member`.
Si l'utilisateur a aussi envoyé un `PRDUpdate` de la liste des `Process`, les `PRDResponse` en réponse contiendront la valeur de leur signature pour valider ou non la demande de mise à jour de la liste des `Process` ainsi que les clés chiffrées des champs confidentiels des `Process`.
Si l'`User` a aussi envoyé un `PRDUpdate` de la liste des `Process`, les `PRDResponse` en réponse contiendront la valeur de leur signature pour valider ou non la demande de mise à jour de la liste des `Process` ainsi que les clés chiffrées des champs confidentiels des `Process`.
## 12. <a name='Wallet'></a>Wallet
Note : Les `User` sont communs à tous les `Process` et décrits par `Process` avec leurs champs spéciifiques dans des `Member` de type `Member` gérés par les `Member` qui sont listés dans le `Role` `Member` du `Process` via leur `adresse SP`.
Lors de la création d'un `User`, on utilise le plus souvent un `Process` existant. On pourrait aussi sarrêter à la création du `User` mais ce serait un peut étrange dans lexpérience car personne na besoin de créer un `User` sans aller sur `Process`.
Les transactions SP ont besoin de 2 clés privées Bitcoin, l'une critique sur la dépense des jetons, l'autre qui lève la confidentialité (partageable dans certains cas) :
## 12. <a name='Wallet'></a>Wallet
* **Clé de dépense 'spend'** : la clé qui prouve sa détention par la capacité de dépenser un UTXO d'une transaction SP.
* **Clé de scan 'scan'** : la clé qui permet de détecter qu'une transaction SP nous est destinée.
Les `transactions SP` ont besoin de 2 clés privées Bitcoin, l'une critique sur la dépense des jetons, l'autre qui lève la confidentialité (partageable dans certains cas) :
* **Clé de dépense 'spend'** : la clé qui prouve sa détention par la capacité de dépenser un `UTXO` d'une `transaction SP`.
* **Clé de scan 'scan'** : la clé qui permet de détecter qu'une `transaction SP` nous est destinée.
Il y a 3 paires de ces clés privées :
@ -159,23 +162,23 @@ Dans l'ordre on génère donc :
5. Clé privée de dépense mainnet `spend_mainnet`.
6. Clé privée de scan du mainnet `scan_mainnet`.
### 12.1. <a name='Rcuprationdesjetonsdefaucet'></a>Récupération des jetons de faucet
### 12.1. <a name='Rcuprationdesjetonsdefaucet'></a>Récupération des jetons de faucet
Le relais retournent des jetons à la connexion et à l'envoi de messages afin de créer les `UTXO` nécessaires pour les transactions SP.
Le relais retournent des jetons à la connexion et à l'envoi d'une `Envelope` afin de créer les `UTXO` nécessaires pour les transactions SP.
Pour revoir ces jetons l'utilisateur doit générer les adresses sur lesquelles il souhaite recevoir les jetons.
Pour revoir ces jetons l'`User` doit générer les adresses sur lesquelles il souhaite recevoir les jetons.
A chaque nouveau message il génère de nouvelles addresses pour la clé qui va dépenser des jetons de signet. Soit une nouvelle adresse (publique) de la clé privée `spend_recover`.
A chaque nouvelle `Envelope` il génère de nouvelles addresses pour la clé qui va dépenser des jetons de signet. Soit une nouvelle adresse (publique) de la clé privée `spend_recover`.
Ces adresses apparaîtront dans l'attribut `faucet_sp_address` des messages envoyés aux relais cf [Messages-Specs.md](Messages-Specs.md Messages Specs) pour la générantion d'une wallet temporaire qui versera les fonds reçus du faucet sur l'adresse silent payment de l'utilisateur.
Ces adresses apparaîtront dans l'attribut `faucet_sp_address` des `Envelope` envoyés aux relais cf [Envelope-Specs.md](Envelope-Specs.md `Envelope` Specs) pour la générantion d'une wallet temporaire qui versera les fonds reçus du faucet sur l'adresse silent payment de l'`User`.
## 13. <a name='GestiondesclsdelidentitaussilesclsdestransactionsSP'></a>Gestion des clés de l'identité (aussi les clés des transactions SP)
## 13. <a name='GestiondesclsduUser'></a>Gestion des clés du `User`
### 13.1. <a name='Gnrationdesclsprivescrationdesidentitsnumriques'></a>Génération des clés privées (création des identités numériques)
### 13.1. <a name='Gnrationdesclsprives-1'></a>Génération des clés privées
#### 13.1.1. <a name='GestiondelaclservantlIDspend_recover'></a>Gestion de la clé servant à l'ID `spend_recover`
#### 13.1.1. <a name='GestiondelaclservantlIDspend_recover'></a>Gestion de la clé servant à l'ID `spend_recover`
La clé privée `spend_recover` est la clé principale pour forger les identités.
La clé privée `spend_recover` est la clé principale des `User`.
Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Voici les principales étapes :
@ -194,7 +197,7 @@ Cette clé est d'abord décomposée, avant d'être partiellement distribuée. Vo
Encryption speudo code :
Une `pre-id` qui identifie l'utilisateur est générée par le hash (SHA 256) d'un scrypt de la `Part1` et du mot de passe de l'utilisateur.
Une `pre-id` qui identifie l'`User` est générée par le hash (SHA 256) d'un scrypt de la `Part1` et du mot de passe de l'`User`.
```pseudo-code
part1_spend_recover_enc=aes(sha(scrypt((MDP+random_seed1), part1)
@ -205,47 +208,47 @@ pre_id=sha256(part1_spend_recover_enc, MDP, random_seed)
2. Création d'un `PrdList` par Member (1 shard par Member) par `Prd` cf [PRD-PCD](PRD-PCD-Specs.md PRD-PCD) :
#### 13.1.2. <a name='BackupdePart2Enc'></a>Backup de `Part2Enc`
#### 13.1.2. <a name='BackupdePart2Enc'></a>Backup de `Part2Enc`
Les relais initialisent le SDK (Wasm) par défaut avec une liste `ProcessList` contenant `Process` choisi.
Chacun de des managers des Members sera responsable de d'associer un `shard` de `Part2Enc` à une `pre-id` et de revoyer des les shards dans un `PrdResponse` en réponse au `PrdList` envoyé.
#### 13.1.3. <a name='Onboarding-1'></a>Onboarding
#### 13.1.3. <a name='Onboarding-1'></a>Onboarding
### 13.2. <a name='MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess'></a>Member complété des champs du process sélectionné et mise à jour de la liste des Members du process
### 13.2. <a name='MembercompltdeschampsduprocessslectionnetmisejourdelalistedesMembersduprocess'></a>Member complété des champs du process sélectionné et mise à jour de la liste des Members du process
Le role `Member` de `Process` sélectionné contient un `Item` avec des `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` contenant chacun une `render_template_list` dont le premier élément du tableau est le formulaire de création de l'identité pour champs concernés (publiques ou confidentiels ou privés).
Le role `Member` de `Process` sélectionné contient un `Item` avec des `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` contenant chacun une `render_template_list` dont le premier élément du tableau est le formulaire de création du `User` pour champs concernés (publiques ou confidentiels ou privés).
Ces formulaires permettront de créé les champs attendus par `condition_attribute_encryption_list` dans le role `Member` de `Process` sélectionné, dans `Member` de l'utilisateur (champs dans `data` des attribut `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` correpsondants).
Ces formulaires permettront de créé les champs attendus par `condition_attribute_encryption_list` dans le role `Member` de `Process` sélectionné, dans `Member` de l'`User` (champs dans `data` des attribut `metadata_contract_public`, `metadata_role_confidential` et `metadata_private` correpsondants).
Une fois `Member` complété, il est ajouté à la liste des Members pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Member` du `Process` sélectionné via un `PrdUpdate`.
### 13.3. <a name='ProcesscompltdeladdressSPdelutilisateuretmisejourdelalistedesversionduprocess'></a>Process complété de l'address SP de l'utilisateur et mise à jour de la liste des version du process
### 13.3. <a name='ProcesscompltdeladdressSPdelUseretmisejourdelalistedesversionduprocess'></a>Process complété de l'address SP de l'`User` et mise à jour de la liste des version du process
Pour le ou les roles sélectionnés, l'attribut `request_prd_sp_address_list` de `condition_prd_address_set_list` est complété par l'adresse SP de l'utilisateur.
Pour le ou les roles sélectionnés, l'attribut `request_prd_sp_address_list` de `condition_prd_address_set_list` est complété par l'adresse SP de l'`User`.
Une fois `Process` complété, il est ajouté à la liste des Members pour créer un nouveau `Pcd` envoyé pour mises à jours aux managers du rôle `Process` du `Process` sélectionné via un `PrdUpdate`.
### 13.4. <a name='RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn'></a>Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)
### 13.4. <a name='RceptiondesPcdetPrdResponseentenantcomptedesmisesjoursrceptiondesclsdedchiffrementdurolechoisidansleprocessslectionn'></a>Réception des Pcd et PrdResponse en tenant compte des mises à jours (réception des clés de déchiffrement du role choisi dans le process sélectionné)
Envoi d'un `PrdList` pour chaque Member de chaque rôle du process sélectionné.
## 14. <a name='Clsdervocationrevoke'></a>Clés de révocation (`revoke`)
## 14. <a name='Clsdervocationrevoke'></a>Clés de révocation (`revoke`)
Les clés de l'image de révocation sont chiffrées par le mot de passe et stockées directement dans les données exifs de l'image de révocation.
L'envoi d'une révocation est identique à la création d'une nouvelle adresse via les `PrdList` mais la transaction SP est envoyée depuis l'adresse de révocation (la clé aura dû être chargée au préalable depuis l'interface).
## 15. <a name='Clsdethirdparties'></a>Clés de third parties
## 15. <a name='Clsdethirdparties'></a>Clés de third parties
Au moment de l'update de `Member` il est possible de charger des addresses SP de third parties pour lesquelles l'utilisateur a un rôle dans un `Process`. Ces adresses sont ajoutées avec les labels et éventuellement les empreintes des dispositifs correspondants dans l'objet `Member`.
Au moment de l'update de `Member` il est possible de charger des addresses SP de third parties pour lesquelles l'`User` a un rôle dans un `Process`. Ces adresses sont ajoutées avec les labels et éventuellement les empreintes des dispositifs correspondants dans l'objet `Member`.
Les clés privées associées sont générées lors de l'update d'un Member, à la validation de l'update il est possible de télécharger des images correspondantes (clés + hash du process) dans une interface 2FA.
Lorsqu'une transaction est reçue sur l'application de 2FA, celle-ci demande de confirmer ou non. Si il y a une confirmation dans l'interface alors une transaction SP est envoyée au dispositif initial, en dépensant l'UTXO reçue et avec les mêmes Hash dans les outputs que la transaction reçue afin que le dispositif initial puisse collecter les `Prd` concernés.
## 16. <a name='Connexionsavecuneidentitcrerecover'></a>Connexions avec une identité crée (`recover`)
## 16. <a name='ConnexionsavecunUserrecover'></a>Connexions avec un `User` (`recover`)
Pour recrééer sa clé privée et envoyer un `PrdList` à chaque Member du rôle `Member` du process, il faut réaliser les opérations suivantes :
@ -255,9 +258,9 @@ Pour recrééer sa clé privée et envoyer un `PrdList` à chaque Member du rôl
Puis depuis la liste des Members du process, pour chacun des Members :
1. Création de `PrdList` à destination du Member 1.
2. Création de `Message` du `PrdList` à destination du Member.
3. Envoi de la transaction SP du `Message` du `PrdList` à destination du Member avec la `pre_id`.
4. Envoi du `Message` du `PrdList` à destination du Member.
2. Création d'une `Envelope` du `PrdList` à destination du Member.
3. Envoi de la transaction SP de l'`Envelope` du `PrdList` à destination du Member avec la `pre_id`.
4. Envoi de l'`Envelope` du `PrdList` à destination du Member.
5. Attente de la validation (`PrdResponse`) du `PrdUpdate`.
6. Recomposition de la clé pour confirmation depuis les shards reçus dans les `PrdResponse`.
6.1. Déchiffrement par le mot de passe de `Part1Enc` depuis le cache.
@ -266,8 +269,8 @@ Puis depuis la liste des Members du process, pour chacun des Members :
6.4. Concaténation de `Part1` et `Part2`
7. Réception des flux PCD et PRDResponse des gestionnaires des Members
## 17. <a name='ExemplesdeCode'></a>Exemples de Code
## 17. <a name='ExemplesdeCode'></a>Exemples de Code
## 18. <a name='Todo'></a>Todo
## 18. <a name='Todo'></a>Todo
* [ ] Extraits de code illustrant l'utilisation des `Pcd` et `Prd` dans des scénarios réels.

View File

@ -1,35 +1,35 @@
# Messages - Specifications
# `Envelope` - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [1. Objectif](#Objectif)
* 4. [2. Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 6. [4. Variable `PeerList` du SDK (Wasm)](#VariablePeerListduSDKWasm)
* 7. [6. Caractéristiques générales des messages de type `Message` et `MessageConnect`](#CaractristiquesgnralesdesmessagesdetypeMessageetMessageConnect)
* 7. [6. Caractéristiques générales des `Envelope` et `EnvelopeConnect`](#CaractristiquesgnralesdesEnvelopeetEnvelopeConnect)
* 7.1. [6.1. PeerList](#PeerList)
* 7.2. [6.2. ProcessList](#ProcessList)
* 7.3. [6.3. Taille des données](#Tailledesdonnes)
* 7.4. [6.4. Preuve de travail](#Preuvedetravail)
* 7.5. [6.5. Adresse SP de faucet](#AdresseSPdefaucet)
* 7.6. [Objets `MessageGeneric` contenu dans les types `Message` et `MessageConnect`](#ObjetsMessageGenericcontenudanslestypesMessageetMessageConnect)
* 7.6. [Objets `EnvelopeGeneric` contenu dans les types `Envelope` et `EnvelopeConnect`](#ObjetsEnvelopeGenericcontenudanslestypesEnvelopeetEnvelopeConnect)
* 8. [7. Traitements par les clients](#Traitementsparlesclients)
* 8.1. [7.1. Connexion d'un client à sa liste de relais via les messages de type `MessageConnect`](#ConnexiondunclientsalistederelaisvialesmessagesdetypeMessageConnect)
* 8.1. [7.1. Connexion d'un client à sa liste de relais via les `EnvelopeConnect`](#ConnexiondunclientsalistederelaisvialesEnvelopeConnect)
* 8.1.1. [7.1.1. Récupération et choix des relais](#Rcuprationetchoixdesrelais)
* 8.1.2. [7.1.2. Envoi du message de type `MessageConnect` à chaque relais](#EnvoidumessagedetypeMessageConnectchaquerelais)
* 8.2. [7.2. Envoi de `Request` sur les relais via les messages de type `Message`](#EnvoideRequestsurlesrelaisvialesmessagesdetypeMessage)
* 8.3. [7.4. Traitement des messages de type `Message` par les clients](#TraitementdesmessagesdetypeMessageparlesclients)
* 8.1.2. [7.1.2. Envoi de l'`EnvelopeConnect` à chaque relais](#EnvoidelEnvelopeConnectchaquerelais)
* 8.2. [7.2. Envoi de `Request` sur les relais via l'`Envelope`](#EnvoideRequestsurlesrelaisvialEnvelope)
* 8.3. [7.4. Traitement des `Envelope` par les clients](#TraitementdesEnvelopeparlesclients)
* 9. [8. Traitements par les relais](#Traitementsparlesrelais)
* 9.1. [8.1. Traitement des messages de type `MessageConnect` par les relais](#TraitementdesmessagesdetypeMessageConnectparlesrelais)
* 9.2. [8.2. Connexion au réseau de relais via les messages de type `MessageConnect` par les relais](#ConnexionaurseauderelaisvialesmessagesdetypeMessageConnectparlesrelais)
* 10. [9. Traitement des messages de type `Message` par les relais](#TraitementdesmessagesdetypeMessageparlesrelais)
* 9.1. [8.1. Traitement des `EnvelopeConnect` par les relais](#TraitementdesEnvelopeConnectparlesrelais)
* 9.2. [8.2. Connexion au réseau de relais via `EnvelopeConnect` par les relais](#ConnexionaurseauderelaisviaEnvelopeConnectparlesrelais)
* 10. [9. Traitement des `Envelope` par les relais](#TraitementdesEnvelopeparlesrelais)
* 11. [10. Connexions aux réseaux de noeuds de Bitcoin, de réseaux side chain ou mainnet](#ConnexionsauxrseauxdenoeudsdeBitcoinderseauxsidechainoumainnet)
* 11.1. [10.1. Protocole de Découverte des Pairs](#ProtocoledeDcouvertedesPairs)
* 11.2. [10.2. Protocole de Transmission des Transactions](#ProtocoledeTransmissiondesTransactions)
@ -52,49 +52,49 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
autoSave=true
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Objectif'></a>1. Objectif
## 3. <a name='Objectif'></a>1. Objectif
L'objectif de ce document est de décrire les spécifications techniques des messages de type `Message` et `MessageConnect` pour le réseau de relais et les clients.
L'objectif de ce document est de décrire les spécifications techniques `Envelope` et `EnvelopeConnect` pour le réseau de relais et les clients.
## 4. <a name='Porte'></a>2. Portée
## 4. <a name='Porte'></a>2. Portée
Ce document concerne les messages de type `Message` et `MessageConnect` pour le réseau de relais et les clients.
Ce document concerne les `Envelope` et `EnvelopeConnect` pour le réseau de relais et les clients.
## 5. <a name='Documentsderfrence'></a>Documents de référence
## 5. <a name='Documentsderfrence'></a>Documents de référence
Voir [_Doc_references.md](_Doc_references.md).
## 6. <a name='VariablePeerListduSDKWasm'></a>4. Variable `PeerList` du SDK (Wasm)
## 6. <a name='VariablePeerListduSDKWasm'></a>4. Variable `PeerList` du SDK (Wasm)
La variable `PeerList` du SDK (Wasm) est une liste de relais partagée avec les relais, constituant la première liste disponible, fournie en dur par le relais auquel on est connecté.
## 7. <a name='CaractristiquesgnralesdesmessagesdetypeMessageetMessageConnect'></a>6. Caractéristiques générales des messages de type `Message` et `MessageConnect`
## 7. <a name='CaractristiquesgnralesdesEnvelopeetEnvelopeConnect'></a>6. Caractéristiques générales des `Envelope` et `EnvelopeConnect`
### 7.1. <a name='PeerList'></a>6.1. PeerList
### 7.1. <a name='PeerList'></a>6.1. PeerList
`PeerList` est une liste de relais partagée entre les relais et les clients, complétée au fur et à mesure de leur découverte de nouveaux relais.
### 7.2. <a name='ProcessList'></a>6.2. ProcessList
### 7.2. <a name='ProcessList'></a>6.2. ProcessList
`ProcessList` est une liste de `Process` partagée entre les relais et les clients, complétée au fur et à mesure de leur découverte de nouveaux `Process`.
### 7.3. <a name='Tailledesdonnes'></a>6.3. Taille des données
### 7.3. <a name='Tailledesdonnes'></a>6.3. Taille des données
Les objets `Peer` spécifient la taille maximale des données pour les messages de type `Message` et `MessageConnect` dans l'attribut `data_max_size` du sous-attribut `relay`. Les messages excédant cette taille sont rejetés.
Les objets `Peer` spécifient la taille maximale des données pour les `Envelope` et `EnvelopeConnect` dans l'attribut `data_max_size` du sous-attribut `relay`. Les `Envelope` excédant cette taille sont rejetés.
### 7.4. <a name='Preuvedetravail'></a>6.4. Preuve de travail
### 7.4. <a name='Preuvedetravail'></a>6.4. Preuve de travail
Les objets `Peer` définissent les caractéristiques de la preuve de travail pour les messages de type `Message` et `MessageConnect` dans les attributs `pow_difficulty`, `pow_pattern`, `pow_prefix`, `pow_nonce`, `pow_timeout` du sous-attribut `relay`. Les messages ne respectant pas la preuve de travail sont rejetés.
Les objets `Peer` définissent les caractéristiques de la preuve de travail pour les `Envelope` et `EnvelopeConnect` dans les attributs `pow_difficulty`, `pow_pattern`, `pow_prefix`, `pow_nonce`, `pow_timeout` du sous-attribut `relay`. Les `Envelope` ne respectant pas la preuve de travail sont rejetés.
### 7.5. <a name='AdresseSPdefaucet'></a>6.5. Adresse SP de faucet
### 7.5. <a name='AdresseSPdefaucet'></a>6.5. Adresse SP de faucet
L'utilisateur fournit aux relais une adresse SP (Silent Payments) dite de faucet `faucet_sp_address`. Un portefeuille est généré en mémoire pour chaque relais à la réception des fonds, les fonds sont ensuite transférés vers l'adresse SP de l'utilisateur et le portefeuille est supprimé.
L'`User` fournit aux relais une adresse SP (Silent Payments) dite de faucet `faucet_sp_address`. Un portefeuille est généré en mémoire pour chaque relais à la réception des fonds, les fonds sont ensuite transférés vers l'adresse SP de l'`User` et le portefeuille est supprimé.
L'utilisateur reçoit en retour une transaction Silent Payments (SP) contenant des jetons sur l'adresse dite de faucet `faucet_sp_address`, cette transaction inclut un output supplémentaire avec le hash du message de type `MessageConnect` ou `Message` correspondant.
L'`User` reçoit en retour une transaction Silent Payments (SP) contenant des jetons sur l'adresse dite de faucet `faucet_sp_address`, cette transaction inclut un output supplémentaire avec le hash de l'`Envelope` de type `EnvelopeConnect` ou `Envelope` correspondant.
### 7.6. <a name='ObjetsMessageGenericcontenudanslestypesMessageetMessageConnect'></a>Objets `MessageGeneric` contenu dans les types `Message` et `MessageConnect`
### 7.6. <a name='ObjetsEnvelopeGenericcontenudanslestypesEnvelopeetEnvelopeConnect'></a>Objets `EnvelopeGeneric` contenu dans les types `Envelope` et `EnvelopeConnect`
`MessageGeneric` fournit une structure générale pour les messages, incluant les pairs partagés et les processus, et des détails comme les défis de PoW, soutenant des besoins de communication diversifiés. Les attributs ont les fonctions suivantes :
`EnvelopeGeneric` fournit une structure générale pour les `Envelope`, incluant les pairs partagés et les processus, et des détails comme les défis de PoW, soutenant des besoins de communication diversifiés. Les attributs ont les fonctions suivantes :
* **`shared_peer_list`** : Une liste de pairs partagés, représentée par des objets `Peer`. Cette liste sert à partager les pairs entre les relais et les clients et les relais entre eux.
* **`shared_process_list`** : Une liste de processus partagés, représentée par des objets `Process`. Cette liste sert à partager les processus entre les relais et les clients et les relais entre eux.
@ -104,7 +104,7 @@ L'utilisateur reçoit en retour une transaction Silent Payments (SP) contenant d
La structure `Pow` détaille un défi de Preuve de Travail, incluant le hash des données, le timestamp et le nonce, pour garantir un effort computationnel à des fins de sécurité. Les attributs ont les fonctions suivantes :
* **`data_hash`** : Le hash des données pour lesquelles le PoW est résolu, il s'agit du hash de l'attribut `request_enc` du message pour les messages de type `Message`, pour les messages de type `MessageConnect` il s'agit du hash de l'attribut `faucet_sp_address`.
* **`data_hash`** : Le hash des données pour lesquelles le PoW est résolu, il s'agit du hash de l'attribut `request_enc` de l'`Envelope` pour les `Envelope` de type `Envelope`, pour les `Envelope` de type `EnvelopeConnect` il s'agit du hash de l'attribut `faucet_sp_address`.
* **`timestamp`** : Un timestamp associé à la solution PoW qui fait parti dans la chaine à résoudre.
* **`nonce`** : Une valeur de nonce utilisée dans le calcul du PoW.
* **`pattern`** : Le motif des premiers caractères qui doivent être répétés autant de fois que la difficulté l'indique.
@ -141,14 +141,14 @@ La structure `L1Node` détaille un nœud blockchain de niveau 1 pour la validati
* **`reward_received_tx_list`** : Liste des transactions de récompense reçues par ce noeud.
* **`reward_send_tx_list`** : Liste des transactions de récompense dépensées par ce noeud.
* **`anchorage_tx_list`** : Liste des transactions d'ancrage dépensées par ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
La structure `L1NodeMining` détaille un nœud blockchain de niveau 1 (Layer 1) se concentrant sur les opérations minières. Les attributs ont les fonctions suivantes :
* **`block_mined_list`** : Liste des blocs extraits.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
La structure `L2Node` représente un nœud blockchain de niveau 2 (Layer 2) pour la validation et le relais des transaction. Les attributs ont les fonctions suivantes :
@ -159,156 +159,156 @@ La structure `L2Node` représente un nœud blockchain de niveau 2 (Layer 2) pou
* **`nbits`** : Nombre de bits propre de calibrage de la blockchain.
* **`magic_number`** : Le nombre magique propre à la blochain.
* **`challenge`** : Le script de signature des blocs.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
La structure `L2NodeMining` détaille un nœud blockchain de niveau 2 (Layer 2) se concentrant sur les opérations minières. Les attributs ont les fonctions suivantes :
* **`sp_address_minig_reward`** : Adresse de récompense SP pour l'exploitation minière.
* **`sp_address_refunder`** : Adresse SP rembourseur.
* **`block_hash_mined_list`** : Liste des hashes de blocs extraits.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
La structure `L2Certif` spécifie une certification de niveau 2. Les attributs ont les fonctions suivantes :
* **`sp_address_certif_l1`** : Adresse de certification de niveau 1.
* **`block_certified_list`** : Liste des blocs certifiés de types `BlockCertif`.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le message, c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
* **`spend_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour dépenser les fonds de ce noeud.
* **`scan_key`** : [PRIVE] cet attribut n'est pas partager dans le `Envelope` , c'est la clé privée pour détecter les transaction Silent Payments les fonds de ce noeud.
La structure `BlockCertif` spécifie un bloc certifié. Les attributs ont les fonctions suivantes :
* **`l2_block_hash_list`** : Liste des hashes de blocs.
* **`l1_tx`** : Transaction de niveau 1.
## 8. <a name='Traitementsparlesclients'></a>7. Traitements par les clients
## 8. <a name='Traitementsparlesclients'></a>7. Traitements par les clients
### 8.1. <a name='ConnexiondunclientsalistederelaisvialesmessagesdetypeMessageConnect'></a>7.1. Connexion d'un client à sa liste de relais via les messages de type `MessageConnect`
### 8.1. <a name='ConnexiondunclientsalistederelaisvialesEnvelopeConnect'></a>7.1. Connexion d'un client à sa liste de relais via les `EnvelopeConnect`
#### 8.1.1. <a name='Rcuprationetchoixdesrelais'></a>7.1.1. Récupération et choix des relais
#### 8.1.1. <a name='Rcuprationetchoixdesrelais'></a>7.1.1. Récupération et choix des relais
Pour discuter avec les relais du réseau et faire relayer des `Pcd` et des `Prd` sous forme de `Message`, l'utilisateur doit se connecter à un ou plusieurs relais, quatre par défaut.
Pour discuter avec les relais du réseau et faire relayer des `Pcd` et des `Prd` sous forme d'une `Envelope`, l'`User` doit se connecter à un ou plusieurs relais, quatre par défaut.
L'utilisateur envoie un message de type `MessageConnect` à chaque relais pour se connecter. Ensuite, il peut envoyer des `Message` à chacun des quatre relais connectés et recevoir des `Message` de leur part.
L'`User` envoie un `Envelope` de type `EnvelopeConnect` à chaque relais pour se connecter. Ensuite, il peut envoyer des `Envelope` à chacun des quatre relais connectés et recevoir des `Envelope` de leur part.
Il y a des doublons de messages pour chaque relais, à la fois envoyés et reçus. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de Members par un système de réputation calculable de manière autonome en rapport à sa propre expérience. L'arbitrage repose sur une réponse devant satisfaire au moins 80% de la même réponse que celle des relais connectés pour le même message. Les valeurs des arbitrages sont stockées dans le cache.
Il y a des doublons d'une `Envelope` pour chaque relais, à la fois envoyés et reçus. Un arbitrage est possible pour confronter les données dans le temps et par origines. Les résultats permettent d'améliorer les listes de Members par un système de réputation calculable de manière autonome en rapport à sa propre expérience. L'arbitrage repose sur une réponse devant satisfaire au moins 80% de la même réponse que celle des relais connectés pour le même `Envelope` . Les valeurs des arbitrages sont stockées dans le cache.
Pour se connecter, l'utilisateur récupère leurs caractéristiques depuis la liste de relais partagée `PeerList` du SDK (Wasm) et depuis les listes de relais non partagées `private` et `public` du cache.
Pour se connecter, l'`User` récupère leurs caractéristiques depuis la liste de relais partagée `PeerList` du SDK (Wasm) et depuis les listes de relais non partagées `private` et `public` du cache.
Un ping (incluant la Preuve de Travail dans le délai) est réalisé sur chaque relais pour vérifier leur disponibilité, et les quatre premiers relais disponibles sont choisis. Les valeurs des pings sont stockées dans le cache pour chaque relais (historique des pings).
Les relais "browsers" possèdent un nom de domaine et un certificat SSL pour satisfaire aux exigences de sécurité des navigateurs. Les autres relais, qui n'ont pas de nom spécifique, peuvent ne pas avoir de nom de domaine ni de certificat SSL et sont utilisés pour relayer les messages entre les relais.
Les relais "browsers" possèdent un nom de domaine et un certificat SSL pour satisfaire aux exigences de sécurité des navigateurs. Les autres relais, qui n'ont pas de nom spécifique, peuvent ne pas avoir de nom de domaine ni de certificat SSL et sont utilisés pour relayer les `Envelope` entre les relais.
Les connexions utilisent le protocole WebSocket avec ou sans SSL (URL commençant par `ws://` ou `wss://`), et les messages sont au format JSON.
Les connexions utilisent le protocole WebSocket avec ou sans SSL (URL commençant par `ws://` ou `wss://`), et les `Envelope` sont au format JSON.
#### 8.1.2. <a name='EnvoidumessagedetypeMessageConnectchaquerelais'></a>7.1.2. Envoi du message de type `MessageConnect` à chaque relais
#### 8.1.2. <a name='EnvoidelEnvelopeConnectchaquerelais'></a>7.1.2. Envoi de l'`EnvelopeConnect` à chaque relais
![MessageConnectSend.png](diagrams/MessageConnectSend.png "MessageConnectSend.")
![EnvelopeConnectSend.png](diagrams/EnvelopeConnectSend.png "EnvelopeConnectSend.")
![PeerSendScore.png](diagrams/PeerSendScore.png "PeerSendScore.")
L'utilisateur parcourt sa liste de relais et envoie un message de type `MessageConnect` au format JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter. Il partage ainsi sa liste de relais et sa liste de `Process`. Il n'y a pas de retour attendu pour ce message.
L'`User` parcourt sa liste de relais et envoie un `Envelope` de type `EnvelopeConnect` au format JSON (voir [Specs-Datamodel.md](Specs-Datamodel.md)) à chaque relais pour se connecter. Il partage ainsi sa liste de relais et sa liste de `Process`. Il n'y a pas de retour attendu pour cette `Envelope` .
Objet de type `MessageConnect`. Les attributs ont les fonctions suivantes :
Objet de type `EnvelopeConnect`. Les attributs ont les fonctions suivantes :
* ***message** : Contient le `MessageGeneric`
* ***Envelope** : Contient le `EnvelopeGeneric`
### 8.2. <a name='EnvoideRequestsurlesrelaisvialesmessagesdetypeMessage'></a>7.2. Envoi de `Request` sur les relais via les messages de type `Message`
### 8.2. <a name='EnvoideRequestsurlesrelaisvialEnvelope'></a>7.2. Envoi de `Request` sur les relais via l'`Envelope`
![MessageSend.png](diagrams/MessageSend.png "MessageSend.")
![EnvelopeSend.png](diagrams/EnvelopeSend.png "EnvelopeSend.")
![PeerSendScore.png](diagrams/PeerSendScore.png "PeerSendScore.")
Objet de type `Message`, Les attributs ont les fonctions suivantes :
Objet de type `Envelope`, Les attributs ont les fonctions suivantes :
* **`message`** : Contient le `MessageGeneric`
* **`Envelope`** : Contient le `EnvelopeGeneric`
* **`request_enc`** : Contient le `Pcd` ou un `Prd` chiffré par la `ProcessKey`
### 8.3. <a name='TraitementdesmessagesdetypeMessageparlesclients'></a>7.4. Traitement des messages de type `Message` par les clients
### 8.3. <a name='TraitementdesEnvelopeparlesclients'></a>7.4. Traitement des `Envelope` par les clients
![PeerReceivedScore.png](diagrams/PeerReceivedScore.png "PeerReceivedScore.")
Le client reçoit un nouveau message via le socket ouvert avec le relais et effectue divers contrôles, notamment le calcul du hash du message et sa vérification dans le cache. Les listes de relais (`PeerList`) et de `Process` (`ProcessList`) sont mises à jour en conséquence. Le message est ensuite déchiffré avec la `ProcessKey` du `Process`, et d'autres contrôles sont réalisés. Les données pertinentes sont mises à jour dans le cache.
Le client reçoit un nouveau `Envelope` via le socket ouvert avec le relais et effectue divers contrôles, notamment le calcul du hash de l'`Envelope` et sa vérification dans le cache. Les listes de relais (`PeerList`) et de `Process` (`ProcessList`) sont mises à jour en conséquence. Le `Envelope` est ensuite déchiffré avec la `ProcessKey` du `Process`, et d'autres contrôles sont réalisés. Les données pertinentes sont mises à jour dans le cache.
## 9. <a name='Traitementsparlesrelais'></a>8. Traitements par les relais
## 9. <a name='Traitementsparlesrelais'></a>8. Traitements par les relais
![RelayMessageReceived](diagrams/RelayMessageReceived.png "RelayMessageReceived")
![RelayEnvelopeReceived](diagrams/RelayEnvelopeReceived.png "RelayEnvelopeReceived")
### 9.1. <a name='TraitementdesmessagesdetypeMessageConnectparlesrelais'></a>8.1. Traitement des messages de type `MessageConnect` par les relais
### 9.1. <a name='TraitementdesEnvelopeConnectparlesrelais'></a>8.1. Traitement des `EnvelopeConnect` par les relais
![RelayMessageConnectReceived](diagrams/RelayMessageConnectReceived.png "RelayMessageConnectReceived")
![RelayEnvelopeConnectReceived](diagrams/RelayEnvelopeConnectReceived.png "RelayEnvelopeConnectReceived")
À la réception d'un message de type `MessageConnect`, le relais enregistre le socket du client et réalise divers contrôles, y compris la vérification de la preuve de travail et la taille des données. Les listes de relais (`PeerList`) et de `Process` (`ProcessList`) sont mises à jour. En retour, le relais envoie quelques jetons à l'adresse SP de faucet communiquée par le client et met à jour les données dans le cache.
À la réception d'un `Envelope` de type `EnvelopeConnect`, le relais enregistre le socket du client et réalise divers contrôles, y compris la vérification de la preuve de travail et la taille des données. Les listes de relais (`PeerList`) et de `Process` (`ProcessList`) sont mises à jour. En retour, le relais envoie quelques jetons à l'adresse SP de faucet communiquée par le client et met à jour les données dans le cache.
### 9.2. <a name='ConnexionaurseauderelaisvialesmessagesdetypeMessageConnectparlesrelais'></a>8.2. Connexion au réseau de relais via les messages de type `MessageConnect` par les relais
### 9.2. <a name='ConnexionaurseauderelaisviaEnvelopeConnectparlesrelais'></a>8.2. Connexion au réseau de relais via `EnvelopeConnect` par les relais
Les relais se connectent à de nouveaux relais en utilisant `MessageConnect`, partageant à leur tour leur liste de relais et de `Process`. Aucun retour n'est attendu pour ce message.
Les relais se connectent à de nouveaux relais en utilisant `EnvelopeConnect`, partageant à leur tour leur liste de relais et de `Process`. Aucun retour n'est attendu pour cette `Envelope` .
## 10. <a name='TraitementdesmessagesdetypeMessageparlesrelais'></a>9. Traitement des messages de type `Message` par les relais
## 10. <a name='TraitementdesEnvelopeparlesrelais'></a>9. Traitement des `Envelope` par les relais
![RelayMessageMessageReceived](diagrams/RelayMessageMessageReceived.png "RelayMessageMessageReceived")
![RelayEnvelopeEnvelopeReceived](diagrams/RelayEnvelopeEnvelopeReceived.png "RelayEnvelopeEnvelopeReceived")
Le relais reçoit un nouveau message de type `Message` du client, effectue les contrôles nécessaires, et met à jour ses listes. En retour, le relais envoie quelques jetons à l'adresse SP de faucet du client. Le message est ensuite relayé aux autres relais et clients connectés, favorisant ainsi sa propagation.
Le relais reçoit un nouveau `Envelope` de type `Envelope` du client, effectue les contrôles nécessaires, et met à jour ses listes. En retour, le relais envoie quelques jetons à l'adresse SP de faucet du client. Le `Envelope` est ensuite relayé aux autres relais et clients connectés, favorisant ainsi sa propagation.
## 11. <a name='ConnexionsauxrseauxdenoeudsdeBitcoinderseauxsidechainoumainnet'></a>10. Connexions aux réseaux de noeuds de Bitcoin, de réseaux side chain ou mainnet
## 11. <a name='ConnexionsauxrseauxdenoeudsdeBitcoinderseauxsidechainoumainnet'></a>10. Connexions aux réseaux de noeuds de Bitcoin, de réseaux side chain ou mainnet
Pour plus de détails, voir : [Specs-References.md](Specs-References.md).
Bitcoin et les side chains utilisent divers protocoles pour la découverte de pairs, la transmission des transactions, et le partage des blocs, adaptés aux besoins spécifiques de 4NK.
### 11.1. <a name='ProtocoledeDcouvertedesPairs'></a>10.1. Protocole de Découverte des Pairs
### 11.1. <a name='ProtocoledeDcouvertedesPairs'></a>10.1. Protocole de Découverte des Pairs
Bitcoin facilite la découverte de nouveaux nœuds via des DNS seeds et une liste de nœuds codée en dur. 4NK utilise la `PeerList` comme équivalent pour faciliter la découverte de relais dans le réseau.
### 11.2. <a name='ProtocoledeTransmissiondesTransactions'></a>10.2. Protocole de Transmission des Transactions
### 11.2. <a name='ProtocoledeTransmissiondesTransactions'></a>10.2. Protocole de Transmission des Transactions
* **Mempool et Transactions Orphelines** : Les transactions sont ajoutées au mempool en attente de confirmation. Les transactions dépendantes d'autres transactions non confirmées sont considérées comme orphelines jusqu'à résolution.
* **Protocole P2P de Bitcoin** : Définit la communication entre nœuds pour échanger informations sur les transactions et blocs, incluant les messages `version`, `verack`, `inv`, `getdata`, `tx`, et `block`.
* **Protocole P2P de Bitcoin** : Définit la communication entre nœuds pour échanger informations sur les transactions et blocs, incluant les `Envelope` `version`, `verack`, `inv`, `getdata`, `tx`, et `block`.
### 11.3. <a name='ProtocoledePartagedesBlocs'></a>10.3. Protocole de Partage des Blocs
### 11.3. <a name='ProtocoledePartagedesBlocs'></a>10.3. Protocole de Partage des Blocs
* **Propagation des Blocs** : Les nouveaux blocs sont rapidement transmis à travers le réseau via un mécanisme de propagation.
* **Compact Blocks** : Optimise la transmission des blocs en utilisant les données déjà présentes dans le mempool des nœuds récepteurs.
### 11.4. <a name='Validationetrelais'></a>10.4. Validation et relais
### 11.4. <a name='Validationetrelais'></a>10.4. Validation et relais
Les transactions et les blocs sont validés selon les règles de consensus avant d'être relayés aux autres pairs, assurant l'intégrité et la sécurité du réseau.
### 11.5. <a name='GestiondesForks'></a>10.5. Gestion des Forks
### 11.5. <a name='GestiondesForks'></a>10.5. Gestion des Forks
Bitcoin gère les bifurcations temporaires de la blockchain, permettant une réorganisation basée sur la chaîne avec le plus de travail cumulé.
### 11.6. <a name='Connexionaurseaudenudsdesidechain'></a>10.6. Connexion au réseau de nœuds de side chain
### 11.6. <a name='Connexionaurseaudenudsdesidechain'></a>10.6. Connexion au réseau de nœuds de side chain
#### 11.6.1. <a name='Clients'></a>10.6.1. Clients
#### 11.6.1. <a name='Clients'></a>10.6.1. Clients
Les clients se connectent au réseau de nœuds de side chain pour recevoir les blocs et les transactions, y compris les transactions Silent Payments (SP) liées aux `Prd`.
#### 11.6.2. <a name='Relais'></a>10.6.2. Relais
#### 11.6.2. <a name='Relais'></a>10.6.2. Relais
Les relais fonctionnent comme des nœuds complets de la side chain, facilitant la communication et la validation des transactions.
### 11.7. <a name='Connexionaurseaudenudsdelayer1'></a>10.7. Connexion au réseau de nœuds de layer 1
### 11.7. <a name='Connexionaurseaudenudsdelayer1'></a>10.7. Connexion au réseau de nœuds de layer 1
Les relais maintiennent également une connexion au réseau principal (mainnet) pour des opérations d'ancrage et d'horodatage.
### 11.8. <a name='HorodatageetancragedesPrdvialestransactionsSilentPaymentsSP'></a>10.8. Horodatage et ancrage des `Prd` via les transactions Silent Payments (SP)
### 11.8. <a name='HorodatageetancragedesPrdvialestransactionsSilentPaymentsSP'></a>10.8. Horodatage et ancrage des `Prd` via les transactions Silent Payments (SP)
Les `Prd` sont ancrés dans la side chain à travers des transactions SP, offrant une preuve immuable de leur existence et de leur intégrité.
## 12. <a name='TransactionsmainnetBitcoin'></a>11. Transactions mainnet Bitcoin
## 12. <a name='TransactionsmainnetBitcoin'></a>11. Transactions mainnet Bitcoin
### 12.1. <a name='HorodatageetancragedesblocsdelasidechainsurBitcoin'></a>11.1. Horodatage et ancrage des blocs de la side chain sur Bitcoin
### 12.1. <a name='HorodatageetancragedesblocsdelasidechainsurBitcoin'></a>11.1. Horodatage et ancrage des blocs de la side chain sur Bitcoin
Les blocs de la side chain sont ancrés sur le mainnet de Bitcoin à intervalles réguliers, fournissant une preuve temporelle et augmentant la sécurité.
### 12.2. <a name='Remboursementdesfraisdhorodatageetancrage'></a>11.2. Remboursement des frais d'horodatage et ancrage
### 12.2. <a name='Remboursementdesfraisdhorodatageetancrage'></a>11.2. Remboursement des frais d'horodatage et ancrage
Le processus de minage "vert" de 4NK génère les jetons nécessaires pour couvrir les frais d'horodatage et d'ancrage sur le réseau Bitcoin, assurant ainsi la viabilité financière de ces opérations.
Ces spécifications techniques fournissent une vue d'ensemble de la façon dont 4NK s'intègre avec les réseaux Bitcoin et side chain, utilisant des protocoles éprouvés tout en introduisant de nouvelles méthodes pour améliorer la sécurité, la transparence, et l'efficacité des transactions et des communications au sein du réseau.
## 13. <a name='ExemplesdeCode'></a>Exemples de Code
## 13. <a name='ExemplesdeCode'></a>Exemples de Code
## 14. <a name='Todo'></a>Todo
## 14. <a name='Todo'></a>Todo

View File

@ -1,20 +1,20 @@

# Item - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Objectif](#Objectif)
* 4. [Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 5.1. [Types d'Items](#TypesdItems)
* 5.2. [Composition et Fonction](#CompositionetFonction)
* 5.2. [ Composition et Fonction](#CompositionetFonction)
* 5.2.1. [Cas d'utilisation](#Casdutilisation)
* 5.3. [MetaData - Gestion des Attributs d'Items](#MetaData-GestiondesAttributsdItems)
* 5.3.1. [Composition et Fonction](#CompositionetFonction-1)
@ -29,27 +29,27 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Objectif'></a>Objectif
## 3. <a name='Objectif'></a>Objectif
Les transactions Silent Payments SP intègrent directement dans l'architecture web de l'application, comme démontré dans le client web. La gestion et l'intégration des SP sont conçues pour être fluides avec les systèmes front-end, assurant une expérience utilisateur transparente tout en maintenant la sécurité et la confidentialité au cœur de l'interaction utilisateur.
Les transactions Silent Payments SP intègrent directement dans l'architecture web de l'application, comme démontré dans le client web. La gestion et l'intégration des SP sont conçues pour être fluides avec les systèmes front-end, assurant une expérience `User` transparente tout en maintenant la sécurité et la confidentialité au cœur de l'interaction `User`.
## 4. <a name='Porte'></a>Portée
## 4. <a name='Porte'></a>Portée
## 5. <a name='Documentsderfrence'></a>Documents de référence
## 5. <a name='Documentsderfrence'></a>Documents de référence
Voir [_Doc_references.md](_Doc_references.md).
### 5.1. <a name='TypesdItems'></a>Types d'Items
### 5.1. <a name='TypesdItems'></a>Types d'Items
Dans le système 4NK, les items représentent les entités ou les objets appelés `Item` sur lesquels les transactions, les processus, et les interactions sont basés. Les types d'`items` incluent :
* **Process**: Définit un ensemble de règles et de procédures pour gérer des interactions spécifiques au sein du réseau.
* **Member**: Représente les utilisateurs ou entités participant à un processus.
* **Member**: Représente les `User` ou entités participant à un processus.
* **Peer**: Identifie les nœuds ou participants du réseau qui aident à faciliter les communications et les transactions.
* **Artefact** : Un type d'objet générique personnalisable dans les `Process` , il peut y avoir une quantité infinie de type d'`artefacts` différents par `Process`.
* **Payments, Deposit, commit**: Représentent divers types de transactions ou d'engagements au sein du réseau, avec des règles et des attributs spécifiques.
### 5.2. <a name='CompositionetFonction'></a> Composition et Fonction
### 5.2. <a name='CompositionetFonction'></a> Composition et Fonction
* **uuid**: Identifiant unique de l'item, assurant sa traçabilité et son unicité au sein du système.
* **version**: Numéro de version de l'item, facilitant le suivi des mises à jour et des modifications.
@ -59,33 +59,33 @@ Dans le système 4NK, les items représentent les entités ou les objets appelé
* **pagination_number_per_request_pcd**: Détermine comment l'item est paginé ou divisé dans le contexte des Pcd, affectant la manière dont il est présenté ou accessible.
* **metadata**: Comprend MetadataContractPublic, MetadataRoleConfidential, et MetadataPrivate, encapsulant les attributs de l'item selon différents niveaux de confidentialité.
#### 5.2.1. <a name='Casdutilisation'></a>Cas d'utilisation
#### 5.2.1. <a name='Casdutilisation'></a>Cas d'utilisation
Les items sont utilisés pour tout, depuis la représentation des participants et des ressources dans le système jusqu'à la structuration des contrats et des processus. Ils sont essentiels pour organiser et gérer efficacement les données et les interactions au sein du réseau 4NK.
### 5.3. <a name='MetaData-GestiondesAttributsdItems'></a>MetaData - Gestion des Attributs d'Items
### 5.3. <a name='MetaData-GestiondesAttributsdItems'></a>MetaData - Gestion des Attributs d'Items
La structure MetaData joue un rôle crucial dans la définition des attributs et des caractéristiques des items, enrichissant leur définition et leur utilité au sein du système.
#### 5.3.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
#### 5.3.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
* **tag_list**, **zone_list**, **label_list**, **ref_list**, **data_list**: Collections d'étiquettes, zones, labels, références, et données associées à l'item, permettant une classification et une organisation détaillées.
* **amount**, **number**: Champs numériques pour représenter des quantités ou des valeurs associées à l'item, utilisés dans divers contextes comme le suivi des ressources ou la définition des conditions.
* **render_template_list**, **legal_text_list**: Fournissent des templates pour la présentation de l'item et des textes légaux associés, cruciaux pour la documentation et la conformité.
* **key_list**: Liste des clés de chiffrement ou d'autres clés cryptographiques associées à l'item, essentielles pour la sécurité et l'authentification.
#### 5.3.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
#### 5.3.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
La richesse et la diversité des métadonnées permettent une personnalisation et une spécification précises des items, soutenant des processus complexes, des contrats détaillés, et des interactions sécurisées au sein du réseau.
## 6. <a name='Process'></a>Process
## 6. <a name='Process'></a>Process
* **item**: Base de l'Process, liant les processus aux items spécifiques au sein du système.
* **item_process_public_attribute_group**: Groupe d'attributs publics associés à un processus, définissant les règles, les rôles et les conditions d'exécution du processus.
## 7. <a name='ExemplesdeCode'></a>Exemples de Code
## 7. <a name='ExemplesdeCode'></a>Exemples de Code
## 8. <a name='Todo'></a>Todo
## 8. <a name='Todo'></a>Todo
* [ ] Extraits de code illustrant l'utilisation des `Pcd` et `Prd` dans des scénarios réels.
* [ ] Diagrammes de séquences

View File

@ -1,19 +1,19 @@
# PRD PCD - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Objectif](#Objectif)
* 4. [Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 6. [Définitions](#Dfinitions)
* 7. [Principes de messagerie](#Principesdemessagerie)
* 7. [Principes d'une `Envelope` rie](#PrincipesduneEnveloperie)
* 8. [Encryption](#Encryption)
* 9. [Fonction des Pcd](#FonctiondesPcd)
* 9.1. [Schéma des flux](#Schmadesflux)
@ -25,7 +25,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 10.3. [Réception](#Rception-1)
* 11. [PrdList - Demande de Listes](#PrdList-DemandedeListes)
* 11.1. [Schéma des flux](#Schmadesflux-1)
* 12. [PrdMessage - Envoi de Messages](#PrdMessage-EnvoideMessages)
* 12. [PrdMessage - Envoi d'une `Envelope`](#PrdMessage-EnvoiduneEnvelope)
* 12.1. [Schéma des flux](#Schmadesflux-1)
* 13. [PrdUpdate - Mises à Jour de Pcd](#PrdUpdate-MisesJourdePcd)
* 13.1. [Schéma des flux](#Schmadesflux-1)
@ -42,40 +42,40 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Objectif'></a>Objectif
## 3. <a name='Objectif'></a>Objectif
Le but de cette section est d'introduire les Portable Contract Document (`Pcd`) et Portable Request Document (`Prd`) comme éléments fondamentaux du système 4NK. Ces documents jouent un rôle crucial dans la sécurisation des échanges de données et la gestion des identités numériques au sein d'un réseau décentralisé. Ils permettent de définir des contrats numériques, de gérer les permissions d'accès, et de faciliter les communications et les opéraations sécurisées entre les différents acteurs du réseau.
Le but de cette section est d'introduire les Portable Contract Document (`Pcd`) et Portable Request Document (`Prd`) comme éléments fondamentaux du système 4NK. Ces documents jouent un rôle crucial dans la sécurisation des échanges de données et la gestion des `User` au sein d'un réseau décentralisé. Ils permettent de définir des contrats numériques, de gérer les permissions d'accès, et de faciliter les communications et les opéraations sécurisées entre les différents acteurs du réseau.
## 4. <a name='Porte'></a>Portée
## 4. <a name='Porte'></a>Portée
La spécification couvre la conception, le développement, et l'application pratique des `Pcd` et `Prd`.Elle vise à expliquer leur fonctionnement, leur structure, et la manière dont ils contribuent à l'écosystème 4NK en offrant une méthode sécurisée et efficace pour le partage d'informations et la validation des transactions. Les `Pcd` et `Prd` encapsulent les données contractuelles et les requêtes dans un format standardisé, assurant l'intégrité, la confidentialité, l'authenticité et la validation des informations échangées.
## 5. <a name='Documentsderfrence'></a>Documents de référence
## 5. <a name='Documentsderfrence'></a>Documents de référence
Voir [_Doc_references.md](_Doc_references.md).
## 6. <a name='Dfinitions'></a>Définitions
## 6. <a name='Dfinitions'></a>Définitions
* **Portable Contract Document (`Pcd`)**: Un format `JSON` chiffré conçu pour contenir des listes d'éléments d'un type spécifique, attachées à un processus (`process_hash`) et soumises aux règles de validation décrites dans le rôle correspondant à ce type d'`Item` dans le `Process` (`item_type`).
* **Portable Request Document (`Prd`)**: Format `JSON` chiffré contenant les valeurs de signatures et les clés de déchiffrement nécessaires à l'exploitation (requêtes et validation) des `Pcd`. Les `PrdResponse` sont collectés pour vérifier le respect des conditions de `Process`. D'autres types de `Prd` incluent :
* `PrdList`: Demande de listes d'`Item`. En réponse, une `Pcd` est reçue avec les `PrdResponse` correspondants.
* `PrdMessage`: Envoi de messages publics, confidentiels ou privés et/ou de transactions Silent Payments des autres `Prd` à diffuser sur le réseau des nœuds de la side chain. Les `PrdMessage` peuvent répondre les uns aux autres.
* `PrdMessage`: Envoi d'une `Envelope` publics, confidentiels ou privés et/ou de transactions Silent Payments des autres `Prd` à diffuser sur le réseau des nœuds de la side chain. Les `PrdMessage` peuvent répondre les uns aux autres.
* `PrdUpdate`: Demande de mise à jour d'une liste d'`Item` (publiée via un `PCD`), qui sera déchiffrée et validée ou non par des `PrdResponse` en retour.
* `PrdConfirm`: Confirmation de la réception des `Prd` (à l'exception de `PrdConfirm` eux-même).
* `PrdResponse`: Réponse aux autres types de `Prd` (à l'exception de `PrdConfirm`, et `PrdMessage`).
* **Message**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
* **Envelope**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
* **KeyConfidential**: Clé AES-GCM-256 issue du `Diffie-Hellman` de la transaction Silent Payments correspondant à un `Prd`.
* **ProcessKey**: La clé publique de chiffrement d'un `Process` (trouvée dans un `Process`, dans son attribut `Item`, dans son attribut `metadata_contract_public`, dans son attribut `meta_data`, dans son attribut `key_list` au premier élément).
* **KeyRecover**: La clé privée de dépense de `recover` du signet, utilisée comme référence pour l'identité.
* **KeyRecover**: La clé privée de dépense de `recover` du signet, utilisée comme référence pour le `User`.
* **pre-id**: Pré-identifiant des utilisateurs, constitué du hash de la partie 1 de la `KeyRecover`.
* **pre-id**: Pré-identifiant des `User`, constitué du hash de la partie 1 de la `KeyRecover`.
## 7. <a name='Principesdemessagerie'></a>Principes de messagerie
## 7. <a name='PrincipesduneEnveloperie'></a>Principes d'une `Envelope` rie
Les `Pcd` sont envoyés à tous les participants connectés sans attente de retour spécifique et ne sont pas associés à une `transaction SP`.
@ -86,7 +86,7 @@ Les `Prd` sont des demandes d'actions ou des réponses à ces demandes, interagi
* `PrdList` : Constitue généralement la première requête d'un workflow et ne répond pas à un autre `Prd`.
* `PrdMessage`, avec 2 cas de figure :
* Demande de relais d'une `transaction SP`, dans ce cas, le `PrdMessage` ne répond pas à un autre `Prd`.
* Envoi de message, pouvant initier un échange de messagerie ou répondre à un autre `PrdMessage`.
* Envoi d'une `Envelope` , pouvant initier un échange d'une `Envelope` rie ou répondre à un autre `PrdMessage`.
* `PrdUpdate` : Souvent la première requête d'un workflow, un `PrdUpdate` ne répond pas à un autre `Prd`.
* `PrdConfirm` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm` eux-mêmes).
* `PrdResponse` : Répond à tous les autres types de `Prd` (à l'exception des `PrdConfirm`, `PrdResponse` eux-mêmes). Dans le cas d'une réponse à un `PrdList` ou d'un `PrdUpdate`, le `PrdResponse` doit obligatoirement être accompagné d'un `Pcd`.
@ -96,7 +96,7 @@ Selon le type de `Prd`, les demandes peuvent s'adresser à tous les Members de `
* `PrdList` : Envoyé aux gestionnaires du type d'`Item` concerné.
* `PrdMessage`, avec 2 cas de figure :
* Demande de relais d'une `transaction SP`, dans ce cas, destinée au destinataire du `Prd` associé.
* Envoi de message au destinataire du message.
* Envoi d'une `Envelope` au destinataire de l'`Envelope` .
* `PrdUpdate` : Envoyé aux gestionnaires du type d'`Item` concerné.
* `PrdConfirm` : Envoyé à l'émetteur du `Prd` associé.
* `PrdResponse`, avec 2 cas de figure :
@ -106,7 +106,7 @@ Selon le type de `Prd`, les demandes peuvent s'adresser à tous les Members de `
Les traitements pour l'envoi des `Prd` varient selon leur type, principalement autour des aspects suivants :
* **`request_type`**: Est un attribut des `Prd` et des `Pcd` permettant de connaître le type de requête.
* **Notification user** : Nécessité de notifier l'utilisateur courant, ou non.
* **Notification user** : Nécessité de notifier l'`User` courant, ou non.
* **`transaction SP` + `PrdMessage`** : Envoi d'une `transaction SP` dans un `PrdMessage`, ou non.
* **`Pcd` to send** : Envoi d'un `Pcd` en complément du `Prd`.
* **`request_type` send to** : Members qui recevront les `transaction SP` et les `PrdMessage` correspondants, avec les clés de déchiffrement pour les champs confidentiels.
@ -126,7 +126,7 @@ Ce qui est résumé pour l'envoi :
Les traitements pour la réception des `Prd` varient selon leur type, principalement autour des aspects suivants :
* **Notification user** : Nécessité de notifier l'utilisateur courant, ou non.
* **Notification user** : Nécessité de notifier l'`User` courant, ou non.
* **`PrdConfirm` to send**: Envoi d'une confirmation, ou non
* **`PrdResponse` to send**: Envoi d'un `PrdResponse` ou non.
* **`PrdResponse` reply waiting**: Attente d'un `PrdResponse` en retour ou non.
@ -142,7 +142,7 @@ Ce qui est résumé Pour la réception :
| `PrdResponse` | Prd | Yes | No | No | No | No |
| `PrdConfirm` | Prd | No | No | No | No | No |
## 8. <a name='Encryption'></a>Encryption
## 8. <a name='Encryption'></a>Encryption
Schema :
@ -170,7 +170,7 @@ Principaux champs des `Request` contenus dans les `Pcd` et `Prd` chiffrés :
* **`request_prd_origin_hash`** : Hash du `Prd` à l'origine du `Prd`.
* **`item_reference_hash`** : Hash de `Item` auquel le `Pcd` fait référence.
## 9. <a name='FonctiondesPcd'></a>Fonction des Pcd
## 9. <a name='FonctiondesPcd'></a>Fonction des Pcd
Les Portable Contract Documents (`Pcd`) sont des documents au format `JSON` encapsulant des listes versionnées d'`Item`, dont les attributs sont chiffsrés selon trois niveaux de confidentialité : public, par rôles spécifiques, ou privé. (cf. [Specs-Security.md](Specs-Security.md)).
@ -202,41 +202,41 @@ Principaux champs de la structure `PcdItemEncAttributePublic` :
* **`attribute_name`** : Nom de l'attribut.
* **`data_enc`** : Données chiffrées par la clé `ProcessKey` de `Process` concerné.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les messages. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les messages. Données en clair.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les `Envelope`. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les `Envelope`. Données en clair.
Principaux champs de la structure `PcdItemEncAttributeRoleConfidential` :
* **`attribute_name`** : Nom de l'attribut.
* **`data_enc`** : Données chiffrées par une clé symétrique générée à la volée pour chaque champ et pour chaque item d'une liste.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les messages. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les messages. Données en clair.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les `Envelope`. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les `Envelope`. Données en clair.
Principaux champs de la structure `PcdItemEncAttributePrivate` :
* **`attribute_name`** : Nom de l'attribut.
* **`data_enc`** : Données chiffrées par la clé privée `KeyRecover`.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les messages. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les messages. Données en clair.
* **`key`** : [PRIVE] Clé de chiffrement, non partagée dans les `Envelope`. Données en clair.
* **`data`** : [PRIVE] Non partagé dans les `Envelope`. Données en clair.
### 9.1. <a name='Schmadesflux'></a>Schéma des flux
### 9.1. <a name='Schmadesflux'></a>Schéma des flux
![Pcd](diagrams/PCD.png "Pcd")
### 9.2. <a name='Crationetenvoi'></a>Création et envoi
### 9.2. <a name='Crationetenvoi'></a>Création et envoi
La création d'un `Pcd` suit plusieurs étapes :
1. Récupération de la dernière version de la liste du type d'`Item` à partir de la source de données, telle qu'une base de données ou un système de stockage.
2. Ajouts et modifications éventuelles des `Item`.
3. Chiffrement cf Encryption.
4. Envoi du message cf [Messages - Specs](Messages-Specs.md).
4. Envoi de l'`Envelope` cf [Envelope - Specs](Envelope-Specs.md).
Schéma de finalisation de la création d'un `Pcd` :
[PCD finalize](diagrams/PCDFinalize.png "PCD finalize")
### 9.3. <a name='Rception'></a>Réception
### 9.3. <a name='Rception'></a>Réception
La réception d'un `Pcd` suit plusieurs étapes :
@ -247,13 +247,13 @@ Schéma de finalisation de la réception d'un `Pcd` :
[PCD Received](diagrams/PCDReceived.png "PCD Received")
## 10. <a name='FonctiondesPrd'></a>Fonction des`Prd`
## 10. <a name='FonctiondesPrd'></a>Fonction des`Prd`
Les Portable Request Documents (Prd) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des `Pcd` via l'attribut `Pcd_keys_role_confidential_list_confidential`. Ils sont utilisés pour solliciter des actions spécifiques, telles que l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
Les Portable Request Documents (Prd) sont des documents JSON qui encapsulent les valeurs de signatures et les clés de déchiffrement nécessaires à l'interprétation des `Pcd` via l'attribut `Pcd_keys_role_confidential_list_confidential`. Ils sont utilisés pour solliciter des actions spécifiques, telles que l'envoi d'une `Envelope`, la mise à jour des informations contractuelles, ou la confirmation de transactions.
Les clés permettant le chiffrement des attributs confidentiels par rôles des `Item` dans les `Pcd` sont elles-mêmes chiffrées dans les `Prd` au moyen du chiffrement du `Prd` par la clé `KeyConfidential` d'une `transaction SP` (cf. [Specs-Security.md](Specs-Security.md)). Ces clés sont uniquement distribuées aux `Members` concernés par les `Item` des `Pcd` (rôles dans les `Process`).
Les `Prd` se déclinent en plusieurs types, tels que `PrdList`, `PrdMessage`, `PrdUpdate`, etc., correspondant à différentes actions comme l'envoi de messages, la mise à jour des informations contractuelles, ou la confirmation de transactions.
Les `Prd` se déclinent en plusieurs types, tels que `PrdList`, `PrdMessage`, `PrdUpdate`, etc., correspondant à différentes actions comme l'envoi d'une `Envelope`, la mise à jour des informations contractuelles, ou la confirmation de transactions.
Principaux champs des `Prd` :
@ -261,9 +261,9 @@ Principaux champs des `Prd` :
* **`sig_value`** : Valeur de la signature (parmi les valeurs valant pour `OK`, `KO` ou `none` telles que définies dans `Process`).
* **`request_pcd_reference_keys_role_confidential_list_confidential`** : Clés de déchiffrement des attributs confidentiels des `Item` des `Pcd` chiffrées par la clé `KeyConfidential` d'une `transaction SP`.
* **`request_pcd_origin_hash_keys_role_confidential_list_confidential`** : Clés de déchiffrement des attributs confidentiels des `Item` des `Pcd` du `PCD` de référence, chiffrées par la clé `KeyConfidential` d'une `transaction SP`.
* **`message_public`** : Message public, chiffré par la clé `ProcessKey` du `Process` concerné.
* **`message_confidential`** : Message confidentiel, chiffré par la clé `ProcessKey` du `Process` concerné.
* **`message_private`** : Message privé, chiffré par la clé privée `KeyRecover`.
* **`message_public`** : `Envelope` public, chiffré par la clé `ProcessKey` du `Process` concerné.
* **`message_confidential`** : `Envelope` confidentiel, chiffré par la clé `ProcessKey` du `Process` concerné.
* **`message_private`** : `Envelope` privé, chiffré par la clé privée `KeyRecover`.
* **`sp_address_to`** : Adresse du destinataire.
* **`sp_address_from`** : Adresse de l'émetteur.
* **`sp_address_reply`** : Adresse de réponse à l'émetteur.
@ -283,24 +283,24 @@ Principaux champs des `Prd` :
* **`certif_key_confidential`** : Clé de certification chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
* **`device_footprint_enc_by_sp_shared_secret`** : Empreinte du dispositif de l'émetteur, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
### 10.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 10.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier, les `PrdConfirm` n'ont pas été inclus dans le schéma.
![Prd](diagrams/PRD.png "Prd")
### 10.2. <a name='CrationdunPrd'></a>Création d'un `Prd`
### 10.2. <a name='CrationdunPrd'></a>Création d'un `Prd`
1. Complétion des attributs
2. Création d'une `adresse SP` cf [Silent Payments - Specs](Silent-Payments-Specs.md)
3. Chiffrement cf Encryption.
4. Envoi du message cf [Messages - Specs](Messages-Specs.md).
4. Envoi de l'`Envelope` cf [Envelope - Specs](Envelope-Specs.md).
Schéma de finalisation de la création d'un `Prd` :
[PRD finalize](diagrams/PRDFinalize.png "PRD finalize")
### 10.3. <a name='Rception-1'></a>Réception
### 10.3. <a name='Rception-1'></a>Réception
La réception d'un `Prd` suit plusieurs étapes :
@ -313,16 +313,22 @@ La réception d'un `Prd` suit plusieurs étapes :
7. Recherche de `Item` associé via `item_reference_hash`, attente si nécessaire et traitement de celui-ci.
8. Déchiffrement voir Encryption.
9. Validation des conditions définies dans le `Process` pour cet `Item`, avec le `Role` correspondant dans le `Process`, et dans ces rôles, les conditions pour ce type de `Prd` (dans l'attribut `request_prd_type`)
10. Vérification du role de l'utilisateur courant dans le `Process` et dans le `Item` concerné.
10. Vérification du role de l'`User` courant dans le `Process` et dans le `Item` concerné.
11. Traitements spécifiques au type de `Prd`.
Schéma de finalisation de la réception d'un `Prd` :
[PRD Received](diagrams/PRDReceived.png "PRD Received")
## 11. <a name='PrdList-DemandedeListes'></a>PrdList - Demande de Listes
## 11. <a name='PrdList-DemandedeListes'></a>PrdList - Demande de Listes
Utile pour les utilisateurs souhaitant consulter ou explorer des listes de contrats, de Members, ou d'autres items dans le réseau. Chaque `Pcd` liste des `Item` d'un même type, tels que les `Process`, les `Member`, les `Peer`, les `Payments`, etc.
Utile pour les `User` souhaitant consulter ou explorer des listes de contrats, de membres ou d'autres items dans le réseau. Chaque `Pcd` liste des `Item` d'un même type, tels que les `Process`, les `Member`, les `Peer`, les `Payments`, etc.
Un `PRDList` concerne un seul type d'`Item` parmi `Member`, `Peer`, `Process`, `Artefact`, `Payment`… et demande le dernier `PCD` de ce type (la dernière liste validée). Ainsi, en retour d'un `PRDList`, on ne reçoit qu'une liste de membres (`PCD`) et les signatures qui la vérifient (`PRDResponse`). Il faudra, par exemple, un `PRDList` pour mettre à jour la liste d'un autre type d'`Item`.
Par exemple, à la connexion, on envoie des `PRDList` à chaque `adresse SP` de chaque `Role`, et l'on reçoit chaque liste (`PCD`) à jour pour tous les objets dont les `Member` et les `Process`. Lorsqu'il y a une mise à jour de la liste des `Member` et des `Process` et que l'on est connecté, alors on reçoit à jour ces listes en temps réel; donc, il y a peu de risques d'écarts entre, par exemple, la liste des `Member` et les `adresse sp` dans les `Process`. Une mise à jour est une nouvelle version d'un `PCD` et les `PRDResponse` qui ont répondu au `PRDUpdate` ayant demandé la mise à jour. Les `PRDResponse` permettront de vérifier la conformité de la nouvelle version du `PCD` avec les conditions du `Process`.
Note : dans les `Process` on ne connait que les `adresse SP` des gestionnaires; pour interagir avec les autres users, il faut utiliser la liste (`PCD`) des `Member` fournie par les `PRDList` envoyés par les gestionnaires de la liste des `Member`. Dans les process, nous n'avons besoin que des `adresse SP` des membres pour vérifier les `PCD` et les `PRDResponse` des `PRDList` et des `PRDUpdate` ou pour envoyer des `PRD` vers spécifiquement des `Member` d'un `Role`. Si dans les interfaces et services on a besoin du détail d'un membre comme son image d'avatar ou son nom, il faudra récupérer ces informations dans la dernière version du `PCD` des `Member`.
Workflow:
@ -344,34 +350,34 @@ Dans le cas d'une création de compte :
* **`MetadataProcessPublic` de type `MemberPublicAttributeGroup`** :
* **`sp_address_public`** : Adresse publique de l'utilisateur, chiffré par la `ProcessKey` de `Process`.
* **`sp_address_revoke_public`** : Adresse publique de révocation de l'utilisateur, chiffré par la `ProcessKey` de `Process`.
* **`sp_address_public`** : Adresse publique de l'`User`, chiffré par la `ProcessKey` de `Process`.
* **`sp_address_revoke_public`** : Adresse publique de révocation de l'`User`, chiffré par la `ProcessKey` de `Process`.
* **`third_sp_address_list_public`** : Liste des adresses publiques de devices tiers, chiffré par la `ProcessKey` de `Process`.
* **`data_size_max`** : Taille maximale des données acceptée par l'utilisateur (par flux), chiffré par la `ProcessKey` de `Process`.
* **`Payments_method_list_public`** : Liste des méthodes de paiement acceptées par l'utilisateur, chiffré par la `ProcessKey` de `Process`.
* **`succession_process_hash`** : Hash du processus de succession de l'utilisateur (transmission de l'identité numérique et donc de tous les flux associés), chiffré par la `ProcessKey` de `Process`.
* **`device_footprint`** : Empreinte du dispositif de l'utilisateur, chiffré par la `ProcessKey` de `Process`.
* **`data_size_max`** : Taille maximale des données acceptée par l'`User` (par flux), chiffré par la `ProcessKey` de `Process`.
* **`Payments_method_list_public`** : Liste des méthodes de paiement acceptées par l'`User`, chiffré par la `ProcessKey` de `Process`.
* **`succession_process_hash`** : Hash du processus de succession de l'`User` (transmission du `User` et donc de tous les flux associés), chiffré par la `ProcessKey` de `Process`.
* **`device_footprint`** : Empreinte du dispositif de l'`User`, chiffré par la `ProcessKey` de `Process`.
* **`MetadataRoleConfidential` de type `MemberRoleConfidentialAttributeGroup`** :
* **`shard_confidential`** : Shard de l'utilisateur, chiffré par la clé `KeyConfidential` d'une `transaction SP`.
* **`pre_id_confidential`** : Pré empreinte de l'identité numérique de l'utilisateur, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
* **`shard_confidential`** : Shard de l'`User`, chiffré par la clé `KeyConfidential` d'une `transaction SP`.
* **`pre_id_confidential`** : Pré empreinte du `User`, chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
* **`MetadataPrivate` de type `MemberRolePrivateAttributeGroup`** :
* **`priv_key_mainnet_spend`** : Clé de dépense de l'utilisateur, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_mainnet_scan`** : Clé de scan de l'utilisateur, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_signet_scan`** : Clé de scan du signet de `recover`de l'utilisateur, chiffrée `KeyRecover`.
* **`priv_key_mainnet_spend`** : Clé de dépense de l'`User`, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_mainnet_scan`** : Clé de scan de l'`User`, chiffrée par la clé privée du mainnet, chiffrée par `KeyRecover`.
* **`priv_key_signet_scan`** : Clé de scan du signet de `recover`de l'`User`, chiffrée `KeyRecover`.
### 11.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 11.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier, les `PrdConfirm` n'ont pas été inclus dans le schéma.
![PrdList](diagrams/PRDList.png "PrdList")
## 12. <a name='PrdMessage-EnvoideMessages'></a>PrdMessage - Envoi de Messages
## 12. <a name='PrdMessage-EnvoiduneEnvelope'></a>PrdMessage - Envoi d'une `Envelope`
Le `PrdMessage` facilite l'envoi de messages sécurisés entre utilisateurs ou entre utilisateurs et processus/contrats.
Le `PrdMessage` facilite l'envoi d'une `Envelope` sécurisés entre `User` ou entre `User` et processus/contrats.
Il permet la communication :
@ -388,21 +394,21 @@ Principaux champs des `PrdMessage` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
* **`raw_transaction_list`** : Liste des `transaction SP` au format `raw` pour la publication de la transaction dans la side chain.
### 12.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 12.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier, les `PrdConfirm` n'ont pas été inclus dans le schéma. Exemple d'un `PrdMessage` avec `raw_transaction_list` vide, et son cas correspondant où le `PrdMessage` contient une `raw_transaction_list` non vide.
![PrdMessage](diagrams/PRDMessage.png "PrdMessage")
![PrdMessage](diagrams/PRDEnvelope.png "PrdMessage")
## 13. <a name='PrdUpdate-MisesJourdePcd'></a>PrdUpdate - Mises à Jour de Pcd
## 13. <a name='PrdUpdate-MisesJourdePcd'></a>PrdUpdate - Mises à Jour de Pcd
`PrdUpdate` est conçu pour demander des mises à jour des listes via de nouvelles versions de `Pcd`.
Basé sur le `Prd`, avec des ajouts pour spécifier les modifications demandées, y compris de nouveaux attributs ou valeurs à mettre à jour :
Essentiel pour les utilisateurs ou les processus nécessitant de mettre à jour des informations contractuelles ou des attributs d'items, assurant la pertinence et l'actualité des données dans le système.
Essentiel pour les `User` ou les processus nécessitant de mettre à jour des informations contractuelles ou des attributs d'items, assurant la pertinence et l'actualité des données dans le système.
Par exemple, la mise à jour de la liste des Members permet d'ajouter de nouveaux utilisateurs à un `Process`, et la mise à jour de la liste des `Process` permet de leur affecter un nouveau `Role`.
Par exemple, la mise à jour de la liste des Members permet d'ajouter de nouveaux `User` à un `Process`, et la mise à jour de la liste des `Process` permet de leur affecter un nouveau `Role`.
Les `PrdUpdate` signalent au réseau, via l'attribut `Pcd_new_version_hash`, les nouvelles versions des `Pcd`.
@ -414,13 +420,13 @@ Principaux champs des `PrdUpdate` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
### 13.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 13.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.
![PrdUpdate](diagrams/PRDUpdate.png "PrdUpdate")
## 14. <a name='PrdConfirm-ConfirmationdeRception'></a>PrdConfirm - Confirmation de Réception
## 14. <a name='PrdConfirm-ConfirmationdeRception'></a>PrdConfirm - Confirmation de Réception
Le `PrdConfirm` est utilisé pour confirmer la réception et le traitement de demandes ou de transactions, jouant un rôle crucial dans la validation des actions au sein du réseau.
@ -437,11 +443,11 @@ Principaux champs des `PrdConfirm` :
* **`request_prd`** : cf la descripton de la structure `Prd`.
* **`code_confirm_confidential`** : Code de confirmation chiffré par la clé `KeyConfidential` d'une `transaction SP` dans le cas d'un 2FA.
### 14.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 14.1. <a name='Schmadesflux-1'></a>Schéma des flux
![PrdConfirm](diagrams/PRDConfirm.png "PrdConfirm")
## 15. <a name='PrdResponse-RpondreuneDemande'></a>PrdResponse - Répondre à une Demande
## 15. <a name='PrdResponse-RpondreuneDemande'></a>PrdResponse - Répondre à une Demande
Le `PrdResponse` permet de répondre spécifiquement à des `Prd` reçus, facilitant un échange interactif d'informations ou de décisions entre les parties.
@ -459,12 +465,12 @@ Principaux champs des `PrdResponse` :
* **`shared_secret_key_enc_by_sp_shared_secret`** : Clé de chiffrement partagée chiffrée par la clé `KeyConfidential` d'une `transaction SP`.
* **`shard_enc_by_sp_shared_secret`** : Shard chiffré par la clé `KeyConfidential` d'une `transaction SP`.
### 15.1. <a name='Schmadesflux-1'></a>Schéma des flux
### 15.1. <a name='Schmadesflux-1'></a>Schéma des flux
Pour simplifier, les `PrdConfirm` n'ont pas été représentés dans le schéma.
![PrdResponse](diagrams/PRDResponse.png "PrdResponse")
## 16. <a name='ExemplesdeCode'></a>Exemples de Code
## 16. <a name='ExemplesdeCode'></a>Exemples de Code
## 17. <a name='Todo'></a>Todo
## 17. <a name='Todo'></a>Todo

View File

@ -1,13 +1,13 @@
# `Process` et `Role` - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Objectif](#Objectif)
* 4. [Portée](#Porte)
@ -17,15 +17,12 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 7.1. [RolesGroup - Gestion des Rôles](#RolesGroup-GestiondesRles)
* 7.1.1. [Composition et Fonction](#CompositionetFonction)
* 7.1.2. [Cas d'utilisation](#Casdutilisation)
* 7.2. [TransactionModeDistribution et TransactionModeDirect](#TransactionModeDistributionetTransactionModeDirect)
* 7.3. [TransactionModeDistribution](#TransactionModeDistribution)
* 7.3.1. [TransactionModeDirect](#TransactionModeDirect)
* 7.4. [Cas d'utilisation](#Casdutilisation-1)
* 7.4.1. [Composition et Fonction](#CompositionetFonction-1)
* 7.4.2. [Cas d'utilisation](#Casdutilisation-1)
* 7.5. [Role - Définition et Gestion des Rôles Spécifiques](#Role-DfinitionetGestiondesRlesSpcifiques)
* 7.5.1. [Composition et Fonction](#CompositionetFonction-1)
* 7.5.2. [Cas d'utilisation](#Casdutilisation-1)
* 7.2. [Cas d'utilisation](#Casdutilisation-1)
* 7.2.1. [Composition et Fonction](#CompositionetFonction-1)
* 7.2.2. [Cas d'utilisation](#Casdutilisation-1)
* 7.3. [Role - Définition et Gestion des Rôles Spécifiques](#Role-DfinitionetGestiondesRlesSpcifiques)
* 7.3.1. [Composition et Fonction](#CompositionetFonction-1)
* 7.3.2. [Cas d'utilisation](#Casdutilisation-1)
* 8. [Gestion des Engagements et Transactions](#GestiondesEngagementsetTransactions)
* 8.1. [Rolecommit](#Rolecommit)
* 8.2. [RoleDeposit et RolePayments](#RoleDepositetRolePayments)
@ -55,7 +52,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 3. <a name='Objectif'></a>Objectif
Cette section vise à présenter en détail les Documents de Contrat Portable ( Pcd) et les Documents de Demande Portable ( Prd), qui constituent les piliers du système 4NK. Essentiels pour sécuriser les transactions de données et gérer les identités numériques, les `Pcd` et `Prd` assurent l'intégrité et la confidentialité au cœur d'un réseau décentralisé.
Cette section vise à présenter en détail les Documents de Contrat Portable ( Pcd) et les Documents de Demande Portable ( Prd), qui constituent les piliers du système 4NK. Essentiels pour sécuriser les transactions de données et gérer les `User`, les `Pcd` et `Prd` assurent l'intégrité et la confidentialité au cœur d'un réseau décentralisé.
## 4. <a name='Porte'></a>Portée
@ -68,7 +65,7 @@ Voir [_Doc_references.md](_Doc_references.md).
Les rôles déterminent les permissions et les responsabilités des participants dans le système 4NK. Ils sont essentiels pour contrôler l'accès aux données et les autorisations au sein des `Process` . Les `rôles` principaux incluent :
* **RolePeer**: Conditions des listes de relais participants qui facilitent les communications et les transactions et des versions de ces listes.
* **RoleMember**: Conditions des listes des utilisateurs ou entités ayant une participation directe dans un processus spécifique et des versions de ces listes.
* **RoleMember**: Conditions des listes des `User` ou entités ayant une participation directe dans un processus spécifique et des versions de ces listes.
* **RoleProcess**: Conditions des listes des processus et des versions des listes.
* **RoleArtefact**: Définit les permissions et les interactions pour les artefacts au sein du réseau et des version de ces listes, par types d'artefacts.
@ -83,7 +80,7 @@ La structure RolesGroup est essentielle pour définir et gérer les groupes de r
#### 7.1.1. <a name='CompositionetFonction'></a>Composition et Fonction
* **role_peer**: Définit le rôle des pairs dans le réseau, responsables de la facilitation des communications et des transactions.
* **role_Member**: Spécifie le rôle des Members, ou utilisateurs, qui participent activement dans les processus et les interactions.
* **role_Member**: Spécifie le rôle des Members, ou `User`, qui participent activement dans les processus et les interactions.
* **role_process**: Représente les entités chargées de définir et de gérer les processus au sein du système.
* **role_artefact_list**: Une liste de rôles d'artefacts, permettant la personnalisation et l'extension des fonctionnalités et des interactions au-delà des rôles standards.
@ -91,19 +88,7 @@ La structure RolesGroup est essentielle pour définir et gérer les groupes de r
Cette structure permet une gestion flexible des rôles au sein du système, facilitant l'assignation de permissions spécifiques et la délimitation des responsabilités pour une sécurité et une efficacité accrues.
### 7.2. <a name='TransactionModeDistributionetTransactionModeDirect'></a>TransactionModeDistribution et TransactionModeDirect
Les modes de transaction, tels que TransactionModeDistribution et TransactionModeDirect, déterminent comment les demandes et les réponses sont distribuées et traitées au sein du réseau 4NK, influençant l'efficacité et la sécurité des interactions.
### 7.3. <a name='TransactionModeDistribution'></a>TransactionModeDistribution
Permet la distribution des demandes ou des informations à plusieurs rôles ou entités, facilitant une communication large et la collaboration au sein du système.
#### 7.3.1. <a name='TransactionModeDirect'></a>TransactionModeDirect
Concentre l'échange d'informations ou de demandes directement entre un émetteur et un destinataire spécifique, garantissant une interaction ciblée et sécurisée.
### 7.4. <a name='Casdutilisation-1'></a>Cas d'utilisation
### 7.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
Ces modes supportent divers scénarios de communication, de la diffusion large d'informations ou de mises à jour, à des échanges directs pour des opérations spécifiques, offrant ainsi une flexibilité dans la gestion des flux d'informations.
@ -111,29 +96,29 @@ Ces modes supportent divers scénarios de communication, de la diffusion large d
La structure `Role` est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
#### 7.4.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
#### 7.2.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
* **item**: L'entité ou l'objet auquel le rôle est associé, fournissant un contexte pour les permissions et les actions.
* **required_2fa**: Indique si une authentification à deux facteurs est requise pour ce rôle, augmentant la sécurité pour les actions critiques.
* **validation_timeout**: Définit un délai pour la validation des actions ou des demandes associées à ce rôle, assurant la promptitude et l'efficacité des processus.
* **condition**: Ensemble de critères et de règles définissant comment les actions sont validées, exécutées, ou refusées selon le contexte.
#### 7.4.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
#### 7.2.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
Cette structure permet une personnalisation détaillée des rôles au sein du système, assurant que chaque rôle est équipé des permissions et des contraintes appropriées pour sa fonction spécifique, contribuant à la sécurité et à l'ordre du système global.
### 7.5. <a name='Role-DfinitionetGestiondesRlesSpcifiques'></a>Role - Définition et Gestion des Rôles Spécifiques
### 7.3. <a name='Role-DfinitionetGestiondesRlesSpcifiques'></a>Role - Définition et Gestion des Rôles Spécifiques
La structure `Role` est fondamentale pour définir les caractéristiques et les exigences de chaque rôle au sein du système 4NK, y compris les permissions, les validations nécessaires, et les conditions spécifiques d'utilisation.
#### 7.5.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
#### 7.3.1. <a name='CompositionetFonction-1'></a>Composition et Fonction
* **item**: L'entité ou l'objet auquel le rôle est associé, fournissant un contexte pour les permissions et les actions.
* **required_2fa**: Indique si une authentification à deux facteurs est requise pour ce rôle, augmentant la sécurité pour les actions critiques.
* **validation_timeout**: Définit un délai pour la validation des actions ou des demandes associées à ce rôle, assurant la promptitude et l'efficacité des processus.
* **condition**: Ensemble de critères et de règles définissant comment les actions sont validées, exécutées, ou refusées selon le contexte.
#### 7.5.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
#### 7.3.2. <a name='Casdutilisation-1'></a>Cas d'utilisation
Cette structure permet une personnalisation détaillée des rôles au sein du système, assurant que chaque rôle est équipé des permissions et des contraintes appropriées pour sa fonction spécifique, contribuant à la sécurité et à l'ordre du système global.
@ -254,5 +239,8 @@ Les Members concernés sont identifiés par leurs `adresse SP`.
## 20. <a name='Todo'></a>Todo
* [ ] Exemples des fichiers html qui seront à l'intérieur du process
* [ ] Générer les mocks
* [ ] Plus d'exemples et d'explication sur les roles et les sous-roles et leurs fonctions.
* [ ] Extraits de code illustrant l'utilisation des `Pcd` et `Prd` dans des scénarios réels.
* [ ] Diagrammes de séquences

View File

@ -1,25 +1,25 @@
# Relay - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Objectif](#Objectif)
* 4. [Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 6. [Interface Client Web](#InterfaceClientWeb)
* 6.1. [Structure HTML de Base](#StructureHTMLdeBase)
* 6.2. [Page de création d'une identité numérique (create)](#Pagedecrationduneidentitnumriquecreate)
* 6.2.1. [Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`](#PagedeslectiondelProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover)
* 6.2. [Page de création d'un `User` (create)](#PagedecrationdunUsercreate)
* 6.2.1. [Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`](#PagedeslectiondeProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover)
* 6.2.2. [Page d'enrolement dans un `Process` (`onboarding`)](#PagedenrolementdansunProcessonboarding)
* 6.2.3. [Page de téléchargement des images de login des third parties](#Pagedetlchargementdesimagesdelogindesthirdparties)
* 6.3. [Page de récupération d'une identité numérique (`recover`)](#Pagedercuprationduneidentitnumriquerecover)
* 6.4. [Page de révocation d'une identité numérique (`revoke`)](#Pagedervocationduneidentitnumriquerevoke)
* 6.3. [Page de récupération d'un `User` (`recover`)](#PagedercuprationdunUserrecover)
* 6.4. [Page de révocation d'un `User` (`revoke`)](#PagedervocationdunUserrevoke)
* 6.5. [Page de la liste des `Process`](#PagedelalistedesProcess)
* 6.6. [Page de Détail d'un `Process`](#PagedeDtaildunProcess)
* 6.7. [Page socle des `Process`](#PagesocledesProcess)
@ -41,7 +41,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 3. <a name='Objectif'></a>Objectif
L'objectif de cette spécification est de définir les exigences et les fonctionnalités de l'interface client web pour l'authentification et l'identification des utilisateurs sur la plateforme 4NK Web5 Solution.
L'objectif de cette spécification est de définir les exigences et les fonctionnalités de l'interface client web pour l'authentification et l'identification des `User` sur la plateforme 4NK Web5 Solution.
Tous les relais ont les mêmes pages, et partagent le SDK en Wasm de 4NK, leur liste d'`Peer` et leur liste `Process`.
@ -100,25 +100,22 @@ Cadre HML commun aux pages des relais :
* **Méta Éléments** : Fournissent des informations sur la page web, notamment le type d'encodage (charset="UTF-8"), l'auteur (author="4NK"), la description (description="4NK Web5 Platform"), les mots-clés (keywords="4NK, web5, bitcoin, blockchain, decentralize, dapps, relay, contract"), et la compatibilité avec les différents appareils (viewport="width=device-width, initial-scale=1.0").
* **Lien CSS** : Référence une feuille de style externe pour styliser l'application (href="style/4nk.css").
* **Titre** : Le titre de la page affiché dans l'onglet du navigateur (title="4NK Application").
* **Conteneur Principal** : Un div conteneur avec un identifiant unique (id="containerId") sert de point d'ancrage pour l'injection de contenu dynamique ou d'interfaces utilisateur spécifiques à l'application.
* **Intégration des composants WASM dans l'interface utilisateur**: Un module permet d'intégrer un wrapper js avec le Wasm pour une interaction fluide avec les relais via le WebAssembly.
* **Conteneur Principal** : Un div conteneur avec un identifiant unique (id="containerId") sert de point d'ancrage pour l'injection de contenu dynamique ou d'interfaces `User` spécifiques à l'application.
* **Intégration des composants WASM dans l'interface `User`**: Un module permet d'intégrer un wrapper js avec le Wasm pour une interaction fluide avec les relais via le WebAssembly.
# Règles sur l'affichage des pages
### 6.2. <a name='PagedecrationdunUsercreate'></a>Page de création d'un `User` (create)
### 6.2. <a name='Pagedecrationduneidentitnumriquecreate'></a>Page de création d'une identité numérique (create)
#### 6.2.1. <a name='PagedeslectiondelProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover'></a>Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`
#### 6.2.1. <a name='PagedeslectiondeProcessetdesMembersenchargederenvoyerlesshardsdelaclrecover'></a>Page de sélection de `Process` et des Members en charge de renvoyer les shards de la clé `recover`
#### 6.2.2. <a name='PagedenrolementdansunProcessonboarding'></a>Page d'enrolement dans un `Process` (`onboarding`)
#### 6.2.3. <a name='Pagedetlchargementdesimagesdelogindesthirdparties'></a>Page de téléchargement des images de login des third parties
### 6.3. <a name='Pagedercuprationduneidentitnumriquerecover'></a>Page de récupération d'une identité numérique (`recover`)
### 6.3. <a name='PagedercuprationdunUserrecover'></a>Page de récupération d'un `User` (`recover`)
### 6.4. <a name='Pagedervocationduneidentitnumriquerevoke'></a>Page de révocation d'une identité numérique (`revoke`)
### 6.4. <a name='PagedervocationdunUserrevoke'></a>Page de révocation d'un `User` (`revoke`)
### 6.5. <a name='PagedelalistedesProcess'></a>Page de la liste des `Process`

View File

@ -1,22 +1,23 @@
# Silent Payments - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Objectif](#Objectif)
* 4. [Portée](#Porte)
* 5. [Documents de référence](#Documentsderfrence)
* 6. [Fonction](#Fonction)
* 7. [Structure des outputs](#Structuredesoutputs)
* 6. [ Fonction](#Fonction)
* 7. [ Structure des outputs](#Structuredesoutputs)
* 8. [Envoi de la transaction SP](#EnvoidelatransactionSP)
* 8.1. [Dans un `PrdMessage`](#DansunPrdMessage)
* 8.2. [Dans un `Message` du `PrdMessage`](#DansunMessageduPrdMessage)
* 8.2. [Dans un `Envelope` du `PrdMessage`](#DansunEnvelopeduPrdMessage)
* 9. [ En réception les transactions silent Payments SP sont relayées par les relais en temps réel](#EnrceptionlestransactionssilentPaymentsSPsontrelayesparlesrelaisentempsrel)
<!-- vscode-markdown-toc-config
numbering=true
@ -24,38 +25,38 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Objectif'></a>Objectif
## 3. <a name='Objectif'></a>Objectif
## 4. <a name='Porte'></a>Portée
## 4. <a name='Porte'></a>Portée
## 5. <a name='Documentsderfrence'></a>Documents de référence
## 5. <a name='Documentsderfrence'></a>Documents de référence
Voir [_Doc_references.md](_Doc_references.md).
## 6. <a name='Fonction'></a> Fonction
## 6. <a name='Fonction'></a> Fonction
La transaction SP à plusieurs objectifs :
1. Permettre l'horodatage de l'empreinte des `Prd` sur la side chain (`PrdKeyMessage` sans message confidentiel).
1. Permettre l'horodatage de l'empreinte des `Prd` sur la side chain (`PrdMessage` sans `Envelope` confidentiel).
2. Permettre le partage de la `keyConfidential` pour les `Prd` afin de déchiffrer les données confidentielles, sur d'autres relais que ceux qui ont reçu le `Prd`.
La clé `KeyConfidential` d'une`transaction SP` est utilisée pour chiffrer les `Prd`.Cette clé est échangée avec le destinataire via un Diffie-Hellman (cf. [Specs-Security.md](Specs-Security.md)) dans la transaction.
Cette information est parrallèle aux `Prd` et permet une meilleur sécurité et confidentialité des échanges.
La`transaction SP` a aussi une fonction d'horodate et de preuve de publication des `Prd` donc de la validation des données des `Pcd`.Les outputs de la`transaction SP` contiennent les empreintes cryptographiques des `messages` et `Prd` et des `Pcd`.Ainsi l'infrastructure blockchain de signet de 4NK permet de vérifier l'intégrité des flux, leur ordre de référence (horodatage) et leur preuve de publication.
La`transaction SP` a aussi une fonction d'horodate et de preuve de publication des `Prd` donc de la validation des données des `Pcd`.Les outputs de la`transaction SP` contiennent les empreintes cryptographiques des `Envelope` et `Prd` et des `Pcd`.Ainsi l'infrastructure blockchain de signet de 4NK permet de vérifier l'intégrité des flux, leur ordre de référence (horodatage) et leur preuve de publication.
Les `PrdConfirm` qui sont des accusés automatiques de réception des `Prd` sont aussi associés à une transaction Silent Payments SP, ce qui permet d'ajouter les preuves de réception des demandes et des validations (ou non).
Il y a une `transactions SP` pour tous les types de `Prd`.
## 7. <a name='Structuredesoutputs'></a> Structure des outputs
## 7. <a name='Structuredesoutputs'></a> Structure des outputs
Une fois le `Prd` finalisé, une transaction SP est réalisée, dans cette transaction plusieurs hashs sont ajoutés sur un outputs aux index suivants:
0. L'output 0 est toujours un paiment au destinataire
1. L'output 1 c'est toujours l'op_return avec un tableau de hashs en clair selon un tableau de hashs en JSON avec les index suivants :
1.1. Le hash du message de type `Message` correspondant
1.1. Le hash de l'`Envelope` de type `Envelope` correspondant
1.2. Le hash du `Prd`
1.3. Le hash du process
1.4. Le hash de la valeur de la signature (attribut `sig_value` du Prd)
@ -69,24 +70,24 @@ Une fois le `Prd` finalisé, une transaction SP est réalisée, dans cette trans
Pour des raison de confidentialité, le `Role` associé à `item_name` du `Prd` peut définir (option) un salt pour la génération des hashs dans l'attribut `sp_output_salt_enc`.
## 8. <a name='EnvoidelatransactionSP'></a>Envoi de la transaction SP
## 8. <a name='EnvoidelatransactionSP'></a>Envoi de la transaction SP
Afin d'améliorer la rélisience du broadcast des transactions, la transaction est envoyée à la fois :
1. Dans un `PrdMessage` à un Member du rôle `Member` du `Process` concerné et
2. Dans le `Message` du `PrdMessage` sur les relais
2. Dans le `Envelope` du `PrdMessage` sur les relais
### 8.1. <a name='DansunPrdMessage'></a>Dans un `PrdMessage`
### 8.1. <a name='DansunPrdMessage'></a>Dans un `PrdMessage`
Dans l'attribut `raw_transaction_list` du `PrdMessage` associé à la transaction SP.
La transaction sera broadcastée par les noeuds de signet du Member du `Role` `Member` du `Process` concerné qui a reçu ce message, il devra alors avoir un noeud de signet pour le broadcast.
La transaction sera broadcastée par les noeuds de signet du Member du `Role` `Member` du `Process` concerné qui a reçu cette `Envelope` , il devra alors avoir un noeud de signet pour le broadcast.
### 8.2. <a name='DansunMessageduPrdMessage'></a>Dans un `Message` du `PrdMessage`
### 8.2. <a name='DansunEnvelopeduPrdMessage'></a>Dans un `Envelope` du `PrdMessage`
Dans l'attribut `raw_transaction_list` du `Message` associé à la transaction SP.
Dans l'attribut `raw_transaction_list` de l'`Envelope` associé à la transaction SP.
La transaction sera broadcastée par les noeuds de signet des relais.
##  En réception les transactions silent Payments SP sont relayées par les relais en temps réel
## 9. <a name='EnrceptionlestransactionssilentPaymentsSPsontrelayesparlesrelaisentempsrel'></a> En réception les transactions silent Payments SP sont relayées par les relais en temps réel
Le relais récupère les transactions depuis l'interface ZMQ du noeud Bitcoin : <https://github.com/bitcoin/bitcoin/blob/master/doc/zmq.md>.
Puis il ajoute le tweak data de la transaction Silent Payments, puis il envoie la transaction à tous les connectés.

View File

@ -11,33 +11,34 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [Choix des formats de données](#Choixdesformatsdedonnes)
* 4.1. [Strings](#Strings)
* 4.2. [Hexadécimales](#Hexadcimales)
* 4.3. [Tableaux de bytes](#Tableauxdebytes)
* 4.3.1. [8 Bytes (64 bits)](#Bytes64bits)
* 4.3.2. [16 Bytes (128 bits)](#Bytes128bits)
* 4.3.3. [32 Bytes (256 bits)](#32Bytes256bits)
* 4.3.4. [64 Bytes (512 bits)](#64Bytes512bits)
* 4.3.5. [Précautions générales pour la manipulation des tableaux de bytes](#Prcautionsgnralespourlamanipulationdestableauxdebytes)
* 4.4. [Format Base64](#FormatBase64)
* 4.5. [Différence entre Bytes et Bits](#DiffrenceentreBytesetBits)
* 4.6. [Little Endian et Big Endian](#LittleEndianetBigEndian)
* 4.7. [Conversions de données](#Conversionsdedonnes)
* 4.7.1. [Conversion entre Strings et Hexadécimales](#ConversionentreStringsetHexadcimales)
* 4.7.2. [Conversion entre Tableaux de Bytes et Format Base64](#ConversionentreTableauxdeBytesetFormatBase64)
* 4.7.3. [Conversion entre Bytes et Bits](#ConversionentreBytesetBits)
* 4.7.4. [Gestion de Little Endian et Big Endian](#GestiondeLittleEndianetBigEndian)
* 4.7.5. [Bonnes Pratiques Générales](#BonnesPratiquesGnrales)
* 4.1. [Strings](#Strings)
* 4.2. [Hexadécimales](#Hexadcimales)
* 4.3. [Tableaux de bytes](#Tableauxdebytes)
* 4.3.1. [8 Bytes (64 bits)](#Bytes64bits)
* 4.3.2. [16 Bytes (128 bits)](#Bytes128bits)
* 4.3.3. [32 Bytes (256 bits)](#32Bytes256bits)
* 4.3.4. [64 Bytes (512 bits)](#64Bytes512bits)
* 4.3.5. [Précautions générales pour la manipulation des tableaux de bytes](#Prcautionsgnralespourlamanipulationdestableauxdebytes)
* 4.4. [Format Base64](#FormatBase64)
* 4.5. [Différence entre Bytes et Bits](#DiffrenceentreBytesetBits)
* 4.6. [Little Endian et Big Endian](#LittleEndianetBigEndian)
* 4.7. [Conversions de données](#Conversionsdedonnes)
* 4.7.1. [Conversion entre Strings et Hexadécimales](#ConversionentreStringsetHexadcimales)
* 4.7.2. [Conversion entre Tableaux de Bytes et Format Base64](#ConversionentreTableauxdeBytesetFormatBase64)
* 4.7.3. [Conversion entre Bytes et Bits](#ConversionentreBytesetBits)
* 4.7.4. [Gestion de Little Endian et Big Endian](#GestiondeLittleEndianetBigEndian)
* 4.7.5. [Bonnes Pratiques Générales](#BonnesPratiquesGnrales)
* 5. [Recommandations entre l'usage de HashMap ou d'un Vec (en Rust)](#RecommandationsentrelusagedeHashMapoudunVecenRust)
* 5.1. [Utilisez un Vec si](#UtilisezunVecsi)
* 5.2. [Utilisez un HashMap si](#UtilisezunHashMapsi)
* 5.1. [Utilisez un Vec si](#UtilisezunVecsi)
* 5.2. [Utilisez un HashMap si](#UtilisezunHashMapsi)
* 5.3. [Recommandations Générales](#RecommandationsGnrales)
* 6. [Gestion des erreurs](#Gestiondeserreurs)
* 7. [Journalisation et monitoring](#Journalisationetmonitoring)
* 8. [Tests](#Tests)
* 8.1. [Stratégie de test](#Stratgiedetest)
* 8.2. [Plan pour les tests unitaires](#Planpourlestestsunitaires)
* 8.3. [Plan d'intégration](#Plandintgration)
* 8.4. [Plan de charge](#Plandecharge)
* 8.1. [Stratégie de test](#Stratgiedetest)
* 8.2. [Plan pour les tests unitaires](#Planpourlestestsunitaires)
* 8.3. [Plan d'intégration](#Plandintgration)
* 8.4. [Plan de charge](#Plandecharge)
* 9. [Outils et les librairies à utiliser](#Outilsetleslibrairiesutiliser)
* 10. [Critères d'acceptation](#Critresdacceptation)
* 11. [CI/CD](#CICD)
@ -63,7 +64,7 @@ Les chaînes de caractères (String et &str) sont utilisées pour stocker du tex
Cas d'usage commun :
* Manipulation de texte : Lecture et écriture de fichiers texte, interfaces utilisateur, etc.
* Manipulation de texte : Lecture et écriture de fichiers texte, interfaces `User`, etc.
* Traitement de données formatées comme le JSON ou le XML.
* Communication réseau où les protocoles basés sur le texte sont utilisés (HTTP, SMTP).
@ -228,11 +229,11 @@ En Rust, le choix entre l'utilisation d'un HashMap et d'un Vec dépend largement
* **Recherche rapide par clé**: HashMap excelle lorsque vous avez besoin de chercher, d'insérer ou de supprimer des éléments en utilisant une clé. La complexité temporelle de ces opérations est en moyenne O(1), ce qui est particulièrement efficace pour de grands ensembles de données.
* **Accès par clé au Lieu de l'index**: Lorsque vos données sont mieux identifiées par des clés uniques (comme des noms d'utilisateur, des identifiants, etc.) plutôt que par des indices numériques.
* **Accès par clé au Lieu de l'index**: Lorsque vos données sont mieux identifiées par des clés uniques (comme des noms d'`User`, des identifiants, etc.) plutôt que par des indices numériques.
* **Évitement des doublons pour les clés**: HashMap assure qu'il n'y a pas deux entrées avec la même clé, ce qui peut être essentiel pour certaines applications.
###  Recommandations Générales
### 5.3. <a name='RecommandationsGnrales'></a> Recommandations Générales
* **Évaluez la taille de votre collection**: Pour des collections très petites, la différence de performance entre Vec et HashMap peut être négligeable, et d'autres facteurs, comme l'ordre des éléments ou la clarté du code, peuvent prévaloir.
@ -254,17 +255,17 @@ Tous les flux sont reçus par autant de relais et de Members de même rôles. Un
Les arrêts de la blockchain dans son ensemble n'entraînent pas d'interruption de service, car les horodatages sont non bloquants, l'impact est une diminution de la preuve le temps de "ré-ancrer" ce qui n'aurait pas pu l'être. L'arrêt de nœuds de la blockchain pourrait ralentir la propagation des informations dans les scénarios les plus critiques, sans impact majeur sur le fonctionnement.
Les arrêts des Members dans les `Process` dans leur ensemble n'entraînent pas d'interruption de service, les confirmations restent en attente, toujours relayées jusqu'au rétablissement des services. L'arrêt de Members des rôles critiques des `Process` pourrait empêcher le démarrage des services et pour les gestionnaires des Members, l'accès au réseau pour les utilisateurs n'ayant qu'un processus connu avec un rôle dedans. Cela n'entraîne pas une perte des données. Cette incapacité pourrait venir corrompre des signatures attendues dans un délai. Dans ce cas, le rôle "resolve" des `Process` est en charge de l'arbitrage pour la bonne restitution des actions.
Les arrêts des Members dans les `Process` dans leur ensemble n'entraînent pas d'interruption de service, les confirmations restent en attente, toujours relayées jusqu'au rétablissement des services. L'arrêt de Members des rôles critiques des `Process` pourrait empêcher le démarrage des services et pour les gestionnaires des Members, l'accès au réseau pour les `User` n'ayant qu'un processus connu avec un rôle dedans. Cela n'entraîne pas une perte des données. Cette incapacité pourrait venir corrompre des signatures attendues dans un délai. Dans ce cas, le rôle "resolve" des `Process` est en charge de l'arbitrage pour la bonne restitution des actions.
Les parties prenantes ont tous les moyens organisationnels dans les process, pour procéder au bon redémarrage des services en cas de dégradations et de situations inattendues, avec le versionning des relais et des Members des rôles; ainsi que des conditions contractuelles avec leurs implications opérationnelles et possiblement économiques.
## 7. <a name='Journalisationetmonitoring'></a>Journalisation et monitoring
Tous les utilisateurs reçoivent les mêmes flux qu'ils se relaient et se restituent au démarrage, tous les flux ont une empreinte horodatée sur une timechain et peuvent être demandés unitairement entre parties, avec le même niveau de confidentialité par rôles. Les `Pcd` sont les listes à jour de l'état de validation de tous les éléments échangés, et les `Prd` sont toutes les signatures échangées sur les flux; en mémoire côté utilisateur, par "session" sur un nœud, pour un `Process` (possible de segmenter par zones et services).
Tous les `User` reçoivent les mêmes flux qu'ils se relaient et se restituent au démarrage, tous les flux ont une empreinte horodatée sur une timechain et peuvent être demandés unitairement entre parties, avec le même niveau de confidentialité par rôles. Les `Pcd` sont les listes à jour de l'état de validation de tous les éléments échangés, et les `Prd` sont toutes les signatures échangées sur les flux; en mémoire côté `User`, par "session" sur un nœud, pour un `Process` (possible de segmenter par zones et services).
Le monitoring comme la journalisation, ne sont pas possibles et pas pertinents sur les relais qui ne sont pas critiques unitairement, tous les flux sont fongibles, chiffrés, anonymes, et peuvent passer par des relais non révélés. Cependant, l'optimisation des listes de pairs et de contrats, pourrait passer par un système de réputation qui nécessitera un historique. À ce stade, la gestion "qualitative" et "quantitative" des relais et des contrats est gérée en mémoire, non persistée et restaurée par chaque connexion à un nouveau pair.
La timechain permet de monitorer l'activité générale sur la side chain avec un nombre de jetons échangés (le même nombre à chaque message) et des ancrages critiques sont monitorables sur le mainnet publiquement par n'importe qui (mais non exploitable fonctionnellement). Ainsi seul le bon fonctionnement est monitorable, par tous, facilement, sans métadonnées exploitables pour ce qui est des usages qui restent donc confidentiels.
La timechain permet de monitorer l'activité générale sur la side chain avec un nombre de jetons échangés (le même nombre à chaque `Envelope` ) et des ancrages critiques sont monitorables sur le mainnet publiquement par n'importe qui (mais non exploitable fonctionnellement). Ainsi seul le bon fonctionnement est monitorable, par tous, facilement, sans métadonnées exploitables pour ce qui est des usages qui restent donc confidentiels.
## 8. <a name='Tests'></a>Tests
@ -284,7 +285,7 @@ L'ensemble des fonctionnalités livrées dans le sprint doivent être testées d
### 8.4. <a name='Plandecharge'></a>Plan de charge
Tous les 2 sprints, des tests aux limites sont définis et mis en œuvre par un testeur depuis la simulation des comportements des utilisateurs.
Tous les 2 sprints, des tests aux limites sont définis et mis en œuvre par un testeur depuis la simulation des comportements des `User`.
## 9. <a name='Outilsetleslibrairiesutiliser'></a>Outils et les librairies à utiliser
@ -308,7 +309,7 @@ Utilisation de Visual Studio (pour le partage de configurations).
Critères de validation pour que le système puisse être considéré comme prêt pour la production :
* Tous les parcours utilisateurs fonctionnels.
* Tous les parcours `User` fonctionnels.
* Tous les tests unitaires présents et parcourus.
* Tous les tests d'intégration présents et parcourus.
* Aucun bug bloquant.

View File

@ -1,13 +1,13 @@
# Data model
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [Methods](#Methods)
@ -41,13 +41,13 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 6. [Encryption](#Encryption)
* 6.1. [KeyEncryption](#KeyEncryption)
* 6.2. [Aes256GcmIv96Bit](#Aes256GcmIv96Bit)
* 7. [Messages](#Messages)
* 7. [Envelope](#Envelope)
* 7.1. [Message](#Message)
* 7.2. [MessageConnect](#MessageConnect)
* 7.3. [MessageGeneric](#MessageGeneric)
* 7.2. [EnvelopeConnect](#EnvelopeConnect)
* 7.3. [EnvelopeGeneric](#EnvelopeGeneric)
* 7.4. [Pow](#Pow)
* 7.5. [Process](#Process)
* 7.6. [Peer](#Peer)
* 7.5. [Process](#Process-1)
* 7.6. [Peer](#Peer-1)
* 8. [Relay](#Relay)
* 9. [L1Node](#L1Node)
* 9.1. [L1NodeMining](#L1NodeMining)
@ -102,7 +102,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 16.1.1. [StorageKeysPublic](#StorageKeysPublic)
* 16.1.2. [StoragePeerPublic](#StoragePeerPublic)
* 16.1.3. [StorageProcessPublic](#StorageProcessPublic)
* 16.1.4. [StorageMessagePublic](#StorageMessagePublic)
* 16.1.4. [StorageEnvelopePublic](#StorageEnvelopePublic)
* 16.1.5. [StoragePcdPublic](#StoragePcdPublic)
* 16.1.6. [StoragePrdPublic](#StoragePrdPublic)
* 16.2. [StoragePrivate](#StoragePrivate)
@ -691,39 +691,39 @@ Pseudo-code:
}
```
## 7. <a name='Messages'></a>Messages
## 7. Enveloppes
### 7.1. <a name='Message'></a>Message
### 7.1. Enveloppe
| Attribute Name | Type | Option |
| -------------- | -------------------- | ------ |
| `message` | ```MessageGeneric``` | |
| `envelope` | ```EnvelopeGeneric``` | |
| `request_enc` | ```String``` | |
Pseudo-code:
```json
{
"message": Message,
"envelope": `Envelope` ,
"request_enc": ""
}
```
### 7.2. <a name='MessageConnect'></a>MessageConnect
### 7.2. EnveloppesConnect
| Attribute Name | Type | Option |
| -------------- | -------------------- | ------ |
| message | ```MessageGeneric``` | |
| `envelope` | ```EnvelopeGeneric``` | |
Pseudo-code:
```json
{
"message": Message
"envelope": `Envelope`
}
```
### 7.3. <a name='MessageGeneric'></a>MessageGeneric
### 7.3. <a name='EnvelopeGeneric'></a>EnvelopeGeneric
| Attribute Name | Type | Option |
| ---------------------- | ------------------------ | ------ |
@ -767,7 +767,7 @@ Pseudo-code:
}
```
### 7.5. <a name='Process'></a>Process
### 7.5. <a name='Process-1'></a>Process
| Attribute Name | Type | Option |
| -------------- | ------------------ | ------ |
@ -781,7 +781,7 @@ Pseudo-code:
}
```
### 7.6. <a name='Peer'></a>Peer
### 7.6. <a name='Peer-1'></a>Peer
| Attribute Name | Type | Option |
| -------------- | -------------- | ------ |
@ -1891,7 +1891,7 @@ Pseudo-code:
]
```
#### 16.1.4. <a name='StorageMessagePublic'></a>StorageMessagePublic
#### 16.1.4. <a name='StorageEnvelopePublic'></a>StorageEnvelopePublic
| Attribute Name | Type | Option |
| ---------------------------- | ------------------------------------ | ------ |
@ -1900,7 +1900,7 @@ Pseudo-code:
| `item_name` | ```String``` | |
| `request_type` | ```String``` | |
| `timestamp` | ```u64``` | |
| `message_hash` | ```String``` | |
| `envelope_hash` | ```String``` | |
| `pcd_hash` | ```String``` | Yes |
| `prd_hash` | ```String``` | Yes |
| `request_pcd_reference_hash` | ```String``` | Yes |
@ -1914,7 +1914,7 @@ Pseudo-code:
| `prd_sp_address_to` | ```String``` | Yes |
| `prd_role_to` | ```String``` | Yes |
| `prd_tx_sp` | ```String``` | Yes |
| `peer_list` | ```Vec<StorageMessagesPeerPublic>``` | |
| `peer_list` | ```Vec<StorageEnvelopesPeerPublic>``` | |
Pseudo-code:
@ -1922,13 +1922,13 @@ Pseudo-code:
[
{
"hash": "",
"message": StorageMessagePublic,
"envelope": StorageEnvelopePublic,
"validation_status": "pending|ok|ko"
}
]
```
##### StorageMessagesPeerPublic
##### StorageEnvelopesPeerPublic
| Attribute Name | Type | Option |
| ------------------- | ------------- | ------ |

View File

@ -1,13 +1,13 @@
# Définition
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [Spécifique 4NK](#Spcifique4NK)
@ -31,32 +31,32 @@ Voir [_Doc_references.md](_Doc_references.md).
* **Web 5.0.** : Une plateforme décentralisée innovante développée par 4NK, combinant les technologies de blockchain et de contrats intelligents pour révolutionner la manière dont les applications web interagissent avec les données et les transactions sécurisées.
* **Relay** : Serveurs ou noeuds spéciaux dans le réseau 4NK qui facilitent la communication peer-to-peer et la diffusion de transactions et de messages entre les utilisateurs et la blockchain. Les relais jouent un rôle crucial dans l'acheminement des informations et dans le maintien de la décentralisation du réseau.
* **Relay** : Serveurs ou noeuds spéciaux dans le réseau 4NK qui facilitent la communication peer-to-peer et la diffusion de transactions et d'une `Envelope` entre les `User` et la blockchain. Les relais jouent un rôle crucial dans l'acheminement des informations et dans le maintien de la décentralisation du réseau.
* **4NK**: Système décentralisé innovant basé sur les principes du web 5, centré sur la sécurité des données et l'identité numérique.
* **4NK**: Système décentralisé innovant basé sur les principes du web 5, centré sur la sécurité des données et des `User`
* **Portable Contract Document (`Pcd`)**: Un format `JSON` chiffré conçu pour contenir des listes d'éléments d'un type spécifique, attachées à un processus (`process_hash`) et soumises aux règles de validation décrites dans le rôle correspondant à ce type d'`Item` dans le `Process` (`item_type`).
* **Portable Request Document (`Prd`)**: Format `JSON` chiffré contenant les valeurs de signatures et les clés de déchiffrement nécessaires à l'exploitation (requêtes et validation) des `Pcd`. Les `PrdResponse` sont collectés pour vérifier le respect des conditions de `Process`. D'autres types de `Prd` incluent :
* `PrdList`: Demande de listes d'`Item`. En réponse, une `Pcd` est reçue avec les `PrdResponse` correspondants.
* `PrdMessage`: Envoi de messages publics, confidentiels ou privés et/ou de transactions Silent Payments des autres `Prd` à diffuser sur le réseau des nœuds de la side chain. Les `PrdMessage` peuvent répondre les uns aux autres.
* `PrdMessage`: Envoi d'une `Envelope` publics, confidentiels ou privés et/ou de transactions Silent Payments des autres `Prd` à diffuser sur le réseau des nœuds de la side chain. Les `PrdMessage` peuvent répondre les uns aux autres.
* `PrdUpdate`: Demande de mise à jour d'une liste d'`Item` (publiée via un `PCD`), qui sera déchiffrée et validée ou non par des `PrdResponse` en retour.
* `PrdConfirm`: Confirmation de la réception des `Prd` (à l'exception de `PrdConfirm` eux-même).
* `PrdResponse`: Réponse aux autres types de `Prd` (à l'exception de `PrdConfirm` et `PrdResponse`).
* **Message**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
* **Envelope**: Enveloppe commune pour les `Prd` et `Pcd` lors de leur transmission aux relais et de leur réception depuis les relais. Dans cette enveloppe les `Prd` et `Pcd` sont chiffrés par la `ProcessKey` de `Process` (cf. [Specs-Definition](SpecsDefinition.md)) et ajoutés au champs `RequestEnc`.
* **KeyConfidential**: Clé AES-GCM-256 issue du `Diffie-Hellman` de la transaction Silent Payments correspondant à un `Prd`.
* **ProcessKey**: La clé publique de chiffrement d'un `Process` (trouvée dans un `Process`, dans son attribut `Item`, dans son attribut `metadata_contract_public`, dans son attribut `meta_data`, dans son attribut `key_list` au premier élément).
* **KeyRecover**: La clé privée de dépense de `recover` du signet, utilisée comme référence pour l'identité.
* **KeyRecover**: La clé privée de dépense de `recover` du signet, utilisée comme référence pour le `User`.
* **pre-id**: Pré-identifiant des utilisateurs, constitué du hash de la partie 1 de la `KeyRecover`.
* **pre-id**: Pré-identifiant des `User`, constitué du hash de la partie 1 de la `KeyRecover`.
* **Peer**: Terme générique pour représenter un nœud du réseau, pouvant avoir diverses fonctions.
* **Relay**: Un serveur web socket qui relaie en peer to peer les messages entre les autres pairs du réseau de relais et avec les clients connectés.
* **Relay**: Un serveur web socket qui relaie en peer to peer les `Envelope` entre les autres pairs du réseau de relais et avec les clients connectés.
* **Process**: Contrat off-chain définissant des conditions d'affichage, légales, de validation cryptographique et de rémunération des signatures au global et par `Role`. Dans le contexte de 4NK, un contrat (souvent appelé smart contract) désigne un ensemble de règles codées et stockées et vérifiée côté client à la différence des principales blockchains. Ces règles automatisent l'exécution des accords et des transactions strictement par et entre les parties prenantes, garantissant l'intégrité et la transparence des interactions au sein de la plateforme Web 5.0. Ces contrats étant formulés dans objets `Process` avec une semantique explicite des attributs et des règles; les systèmes peuvent exploiter les contrats directement dans le système d'informatione et la notion de contrat est fusionnée avec celle processus.
*
@ -64,11 +64,11 @@ Voir [_Doc_references.md](_Doc_references.md).
* **Silent Payments Address**: Adresse Bitcoin utilisée pour les transactions Silent Payments, permettant de recevoir et d'envoyer des fonds de manière confidentielle. C'est aussi l'identifiant des `Member` dans les `Process` tel un annuaire, et les flux.
* **Utilisateur**: Client connecté pouvant être un navigateur, une application mobile, un logiciel, ou un IoT, utilisé par un humain ou une machine.
* **User**: Client connecté pouvant être un navigateur, une application mobile, un logiciel, ou un IoT, utilisé par un humain ou une machine et capable de relayer des `Envelope` et `transactions SP`signés par la `KeyRecover`. Le user est à minima un clé de dépense et une clé de scan des `transactions SP` avec un `MPC` réparti pour partie avec des gestionnaires des `Member` d'un ou plusieurs `Process`.
* **Recover**: Action de recomposer une identité numérique (clés privées).
* **Recover**: Action de recomposer un `User` (clés privées).
* **Revoke**: Action de révoquer des clés privées et d'en proposer de nouvelles (en cas de révocation, expirations, pertes ou vols). Une adresse de révocation est stockée dans les données exifs d'une image générée avec l'image de login. Cette image doit être conservée en sécurité car elle permet de dépenser un UTXO d'une`adresse SP` indiquée dans son `Member` comme le signal pour les autres parties prenantes qu'une autre identité doit être prise en compte pour ce Member.
* **Revoke**: Action de révoquer des clés privées et d'en proposer de nouvelles (en cas de révocation, expirations, pertes ou vols). Une adresse de révocation est stockée dans les données exifs d'une image générée avec l'image de login. Cette image doit être conservée en sécurité car elle permet de dépenser un UTXO d'une `adresse SP` indiquée dans son `Member` comme le signal pour les autres parties prenantes qu'un autre `User` doit être prise en compte pour ce `Member`.
* **Onboard**: Action de demander un `rôle` dans un `Process` .
@ -92,7 +92,7 @@ Voir [_Doc_references.md](_Doc_references.md).
* **MPC (Multi-Party Computation)**: Technique de calcul qui permet à plusieurs parties de calculer conjointement une fonction sur leurs entrées tout en gardant ces entrées secrètes.
* **PBKDF2 (abréviation de Password-Based Key Derivation Function 2)**: applique une fonction pseudo-aléatoire, telle qu'un code d'authentification de message basé sur le hachage (HMAC), au mot de passe ou à la phrase secrète d'entrée ainsi qu'une valeur salt et répète le processus plusieurs fois pour produire une clé dérivée, qui peut ensuite être utilisée comme clé cryptographique dans les opérations ultérieures. Cela étend l'entropie du mot de passe utilisateur. Cette fonction appartient à la famille des normes Public Key Cryptographic Standards, plus précisément PKCS #5 v2.0. Cette norme a également été publiée dans la RFC 2898. Elle succède au PBKDF1, qui pouvait produire des clés n'allant que jusqu'à 160 bits.
* **PBKDF2 (abréviation de Password-Based Key Derivation Function 2)**: applique une fonction pseudo-aléatoire, telle qu'un code d'authentification d'une `Envelope` basé sur le hachage (HMAC), au mot de passe ou à la phrase secrète d'entrée ainsi qu'une valeur salt et répète le processus plusieurs fois pour produire une clé dérivée, qui peut ensuite être utilisée comme clé cryptographique dans les opérations ultérieures. Cela étend l'entropie du mot de passe `User`. Cette fonction appartient à la famille des normes Public Key Cryptographic Standards, plus précisément PKCS #5 v2.0. Cette norme a également été publiée dans la RFC 2898. Elle succède au PBKDF1, qui pouvait produire des clés n'allant que jusqu'à 160 bits.
Cette norme est aujourd'hui utilisée pour le hachage de mot de passe (associé à des fonctions comme SHA-256) ou la génération de clé de chiffrement de données.
@ -108,7 +108,7 @@ Cette norme est aujourd'hui utilisée pour le hachage de mot de passe (associé
## 7. <a name='Data'></a>Data
* **Cache**: Partie 1 chiffrée de la clé de dépense du signet du login stockée en cache, ainsi que les `Process` découverts et les pairs du réseau. Une fois identifié auprès des Members d'un `Process` et avec son identité `Member` récupérée, l'objet Member et les `Pcd` et `Prd` du compte sont stockés en cache. Le cache se compose d'une partie prive jamais partagée et d'une partie publique partagée.
* **Cache**: Partie 1 chiffrée de la clé de dépense du signet du login stockée en cache, ainsi que les `Process` découverts et les pairs du réseau. Une fois identifié auprès des Members d'un `Process` et avec son `User` et ses `Member` par `Process`, l'objet Member et les `Pcd` et `Prd` du compte sont stockés en cache. Le cache se compose d'une partie prive jamais partagée et d'une partie publique partagée.
* **IndexDB**: Base de données de stockage côté client utilisée pour stocker de manière sécurisée les données chiffrées, telles que les `Pcd` et Prd, dans les navigateurs web.

View File

@ -1,13 +1,13 @@
# Maintenance, environnement de déploiement - Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [Code repository](#Coderepository)

View File

@ -1,13 +1,13 @@
# Specs - References
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [AES & Quantum resistant](#AESQuantumresistant)

View File

@ -1,13 +1,13 @@
# Exigences de sécurité et de confidentialité
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Documents de référence](#Documentsderfrence)
* 4. [Détails de conception](#Dtailsdeconception)
@ -15,7 +15,7 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* 6. [Cache](#Cache)
* 7. [Chiffrement des communications](#Chiffrementdescommunications)
* 8. [Confidentialité des `Pcd` et Prd](#ConfidentialitdesPcdetPrd)
* 9. [Confidentialité des messages sur les relais](#Confidentialitdesmessagessurlesrelais)
* 9. [Confidentialité des `Envelope` sur les relais](#ConfidentialitdesEnvelopesurlesrelais)
* 10. [Clé de chiffrement robuste](#Cldechiffrementrobuste)
* 10.1. [Résistance aux attaques cryptanalytiques](#Rsistanceauxattaquescryptanalytiques)
* 10.2. [Diffusion et confusion](#Diffusionetconfusion)
@ -50,11 +50,11 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Documentsderfrence'></a>Documents de référence
## 3. <a name='Documentsderfrence'></a>Documents de référence
Voir [_Doc_references.md](_Doc_references.md).
## 4. <a name='Dtailsdeconception'></a>Détails de conception
## 4. <a name='Dtailsdeconception'></a>Détails de conception
Tous les chiffrements symétriques sont opérés avec l'algorithme AES-GCM 256 bits.
@ -62,23 +62,23 @@ Tous les hash sont opérés avec l'algorithme SHA256.
La librairie Rust `Nakamoto`, permet de scanner les blocs (et bientôt la mempool) côté client et de détecter des transactions Bitcoin correspondant aux clés publiques des clés cryptographiques privées du HD Wallet Bitcoin contenant les clés Bitcoin de mainnet et de signet.
## 5. <a name='Motdepasse'></a>Mot de passe
## 5. <a name='Motdepasse'></a>Mot de passe
Utilisation du mot de passe strictement en mémoire.
Mot de passe fort (18 caractères minimum avec minuscules, majuscules, lettre, nombres, et caractères spéciaux) ou mnémonique de 12 mots à noter ou certificat (ou équivalent) stocké de façon sécurisée.
## 6. <a name='Cache'></a>Cache
## 6. <a name='Cache'></a>Cache
Stockage sécurisé du cache par un chiffrement par le mot de passe.
## 7. <a name='Chiffrementdescommunications'></a>Chiffrement des communications
## 7. <a name='Chiffrementdescommunications'></a>Chiffrement des communications
Le chiffrement du transport des données se fait par TLS entre les clients et le noeuds entrants pour palier aux restrictions sur les flux non TLS par les navigateurs et les applications mobiles.
Néanmoins tous les messages chiffrent les `Pcd` et `Prd` avec une clé de chiffrement conforme aux exigences suivantes et échangée dans le Diffie-Hellman de la transaction SP, en parallèle donc des flux `Pcd` et `Prd`.Ces clés ne sont accessibles donc qu'avec la clé privée du destinataire ou de l'émetteur, qui ne sont jamais partagées.
Néanmoins tous les `Envelope` chiffrent les `Pcd` et `Prd` avec une clé de chiffrement conforme aux exigences suivantes et échangée dans le Diffie-Hellman de la transaction SP, en parallèle donc des flux `Pcd` et `Prd`.Ces clés ne sont accessibles donc qu'avec la clé privée du destinataire ou de l'émetteur, qui ne sont jamais partagées.
## 8. <a name='ConfidentialitdesPcdetPrd'></a>Confidentialité des `Pcd` et Prd
## 8. <a name='ConfidentialitdesPcdetPrd'></a>Confidentialité des `Pcd` et Prd
Le stockage chiffré de cache est un chiffrement symétrique conformément aux exigences suivantes.
@ -92,126 +92,126 @@ Le chiffrement des `Pcd` est un chiffrement symétrique conformément aux exigen
* **Données privées**: un chiffrement symétrique conformément aux exigences suivantes depuis le chiffrement par la clé de spend de login (`recover`) du signet (voir Login - Specs).
## 9. <a name='Confidentialitdesmessagessurlesrelais'></a>Confidentialité des messages sur les relais
## 9. <a name='ConfidentialitdesEnvelopesurlesrelais'></a>Confidentialité des `Envelope` sur les relais
Les `Pcd` et les `Prd` sont envoyés aux relais dans des enveloppes appelées `Message`.
Les `Pcd` et les `Prd` sont envoyés aux relais dans des enveloppes appelées `Envelope`.
Ces enveloppent communique les `Pcd` et les `Prd` de façon chiffrée par la `ProcessKey`. Ainsi les messages sont rendus fongibles sur le réseau de relais.
Ces enveloppent communique les `Pcd` et les `Prd` de façon chiffrée par la `ProcessKey`. Ainsi les `Envelope` sont rendus fongibles sur le réseau de relais.
Tous les `Prd` sont confirmés par un et chiffrent les clés transamises par une `KeyConfiditial`.
Les relais peuvent déchiffrer les enveloppes avec la `ProcessKey`, le contenu étant chiffré en plus en fonction des niveaux de confidentialité. L'objectif du chiffrage des enveloppe est de donner, un temps, un coût et une complexité aux analyses systématiques des flux.
## 10. <a name='Cldechiffrementrobuste'></a>Clé de chiffrement robuste
## 10. <a name='Cldechiffrementrobuste'></a>Clé de chiffrement robuste
La force d'un algorithme de chiffrement symétrique repose largement sur la complexité de sa clé. Une clé plus longue offre généralement une meilleure sécurité. Les tailles de clé typiques pour un chiffrement fort sont de 128 bits, 192 bits, ou 256 bits. Pour l'AES-GCM, les clés de 256 bits sont à ce stade réputées "quantum-resistant" et sont donc à privilégier, elles satisfont aussi les contraintes suivantes.
### 10.1. <a name='Rsistanceauxattaquescryptanalytiques'></a>Résistance aux attaques cryptanalytiques
### 10.1. <a name='Rsistanceauxattaquescryptanalytiques'></a>Résistance aux attaques cryptanalytiques
Un algorithme fort doit résister à diverses attaques, y compris les attaques par force brute (où un attaquant essaie toutes les clés possibles), les attaques par texte clair connu, les attaques par texte clair choisi, les attaques par texte chiffré choisi, et plus encore. L'AES-GCM les clés de 256 bits n'est pas par design robuste à ces attaques, mais avec une clé suffisamment longue (de longueur quantique) le temps nécessaire est estimé comme équivalent à une résistance.
### 10.2. <a name='Diffusionetconfusion'></a>Diffusion et confusion
### 10.2. <a name='Diffusionetconfusion'></a>Diffusion et confusion
Ces deux principes, introduits par Claude Shannon, sont essentiels à la sécurité d'un algorithme. La diffusion vise à disperser l'influence d'un seul caractère du texte clair sur de nombreux caractères du texte chiffré, tandis que la confusion vise à complexifier la relation entre la clé de chiffrement et le texte chiffré.
### 10.3. <a name='Non-linarit'></a>Non-linéarité
### 10.3. <a name='Non-linarit'></a>Non-linéarité
L'algorithme doit incorporer des éléments non linéaires pour contrer les attaques linéaires et différentielles. Cela rend la prédiction du comportement de l'algorithme plus difficile pour un attaquant.
## 11. <a name='Fonctionsdehashage'></a>Fonctions de hashage
## 11. <a name='Fonctionsdehashage'></a>Fonctions de hashage
Les fonctions de hachage jouent un rôle crucial dans de nombreux domaines de la cryptographie et de la sécurité informatique, notamment dans la vérification de l'intégrité des données, l'authentification, la signature numérique, et la génération de jetons sécurisés. Pour être efficaces et sécurisées, ces fonctions doivent répondre à plusieurs exigences essentielles :
## 12. <a name='Exigencesgnriques'></a>Exigences génériques
## 12. <a name='Exigencesgnriques'></a>Exigences génériques
### 12.1. <a name='Pasdesecretdelaconception'></a>Pas de secret de la conception
### 12.1. <a name='Pasdesecretdelaconception'></a>Pas de secret de la conception
La sécurité d'un bon système cryptographique ne doit pas reposer sur le secret de son algorithme (principe de Kerckhoffs) et doit être basée sur des principes cryptographiques éprouvés.
### 12.2. <a name='Validparlacommunautscientifique'></a>Validé par la communauté scientifique
### 12.2. <a name='Validparlacommunautscientifique'></a>Validé par la communauté scientifique
Un algorithme est considéré comme plus fort s'il a été soumis à l'examen et à l'analyse de la communauté cryptographique internationale, qui cherche des vulnérabilités potentielles.
### 12.3. <a name='Implmentationcorrecte'></a>Implémentation correcte
### 12.3. <a name='Implmentationcorrecte'></a>Implémentation correcte
Une implémentation fautive d'un algorithme de chiffrement fort peut introduire des vulnérabilités. Il est crucial que l'implémentation soit vérifiée pour être sécurisée. La librairie utilisée doit avoir été l'objet d'un audit ([librairie aes-gcm de rust a été auditée](https://research.nccgroup.com/2020/02/26/public-report-rustcrypto-aes-gcm-and-chacha20poly1305-implementation-review/)).
### 12.4. <a name='Dtermination'></a>Détermination
### 12.4. <a name='Dtermination'></a>Détermination
Pour toute entrée donnée, la fonction de hachage doit toujours produire la même sortie.
### 12.5. <a name='Rapiditdecalcul'></a>Rapidité de calcul
### 12.5. <a name='Rapiditdecalcul'></a>Rapidité de calcul
La fonction doit être capable de générer le hachage rapidement, même pour de grandes quantités de données.
### 12.6. <a name='Diffusionoueffetavalanche'></a>Diffusion (ou effet avalanche)
### 12.6. <a name='Diffusionoueffetavalanche'></a>Diffusion (ou effet avalanche)
Un changement minime dans l'entrée (même un seul bit) doit entraîner un changement significatif et imprévisible dans la sortie. Cela garantit qu'il est difficile de prédire comment la sortie changera en fonction des modifications apportées à l'entrée.
### 12.7. <a name='Rsistanceauxcollisions'></a>Résistance aux collisions
### 12.7. <a name='Rsistanceauxcollisions'></a>Résistance aux collisions
Il doit être pratiquement impossible de trouver deux entrées distinctes qui produisent la même sortie. Cela se décline en deux sous-catégories :
#### 12.7.1. <a name='Rsistanceauxcollisionsfaibles'></a>Résistance aux collisions faibles
#### 12.7.1. <a name='Rsistanceauxcollisionsfaibles'></a>Résistance aux collisions faibles
Il est difficile de trouver une seconde entrée qui a le même hachage qu'une entrée spécifiée.
#### 12.7.2. <a name='Rsistanceauxcollisionsfortes'></a>Résistance aux collisions fortes
#### 12.7.2. <a name='Rsistanceauxcollisionsfortes'></a>Résistance aux collisions fortes
Il est difficile de trouver deux entrées distinctes qui produisent le même hachage.
### 12.8. <a name='Rsistancelapre_id'></a>Résistance à la pre_id
### 12.8. <a name='Rsistancelapre_id'></a>Résistance à la pre_id
Pour une sortie de hachage donnée, il doit être difficile de trouver une entrée qui correspond à cette sortie. Cela se décline également en deux sous-catégories :
#### 12.8.1. <a name='Rsistancelapre_id-1'></a>Résistance à la pre_id
#### 12.8.1. <a name='Rsistancelapre_id-1'></a>Résistance à la pre_id
Il est difficile de trouver une entrée qui hache vers une sortie de hachage spécifiée.
#### 12.8.2. <a name='Rsistancelasecondepre_id'></a>Résistance à la seconde pre_id
#### 12.8.2. <a name='Rsistancelasecondepre_id'></a>Résistance à la seconde pre_id
Étant donné une entrée, il est difficile de trouver une autre entrée qui produit le même hachage.
### 12.9. <a name='Compression'></a>Compression
### 12.9. <a name='Compression'></a>Compression
La fonction de hachage doit pouvoir prendre une entrée de taille arbitraire et produire une sortie de taille fixe.
### 12.10. <a name='Nonrversibilit'></a>Non réversibilité
### 12.10. <a name='Nonrversibilit'></a>Non réversibilité
Il doit être infaisable de retrouver l'entrée à partir de la sortie du hachage. Cela signifie que la fonction est à sens unique.
### 12.11. <a name='Absencedetoutestructureprvisible'></a>Absence de toute structure prévisible
### 12.11. <a name='Absencedetoutestructureprvisible'></a>Absence de toute structure prévisible
La fonction de hachage ne doit pas produire des sorties qui montrent des patterns ou des structures prévisibles, quelles que soient les entrées.
## 13. <a name='Gestionscurisedescls'></a>Gestion sécurisée des clés
## 13. <a name='Gestionscurisedescls'></a>Gestion sécurisée des clés
La manière dont les clés sont générées, stockées, distribuées, révoquées, et détruites est tout aussi importante que l'algorithme de chiffrement lui-même.
Les clés seront générées strictement par l'utilisateur et feront l'objet d'un traitement `MPC` avec un chiffrement des parties par le mot de passe connu de l'utilisateur seul et jamais stocké.
Les clés seront générées strictement par l'`User` et feront l'objet d'un traitement `MPC` avec un chiffrement des parties par le mot de passe connu de l'`User` seul et jamais stocké.
Les parties sont pour la moitié stockées dans le contexte utilisateur (chiffrées par le mot de passe) et pour une autre partie, chiffrées en morceaux (`Shamir Secret Sharing`) (chiffrés par le mot de passe) et distribuées par les Members choisis d'un `Process` choisi par le rôle des gestionnaires des listes de Members (`Member`) en charge de restituer ces morceaux à la demande.
Les parties sont pour la moitié stockées dans le contexte `User` (chiffrées par le mot de passe) et pour une autre partie, chiffrées en morceaux (`Shamir Secret Sharing`) (chiffrés par le mot de passe) et distribuées par les Members choisis d'un `Process` choisi par le rôle des gestionnaires des listes de Members (`Member`) en charge de restituer ces morceaux à la demande.
L'utilisateur seul peut détruire une clé de révocation (`revoke`) ou supprimer l'image de login qui contient la première partie de la clé de login, indispensable pour recomposer sa clé.
L'`User` seul peut détruire une clé de révocation (`revoke`) ou supprimer l'image de login qui contient la première partie de la clé de login, indispensable pour recomposer sa clé.
## 14. <a name='Performance'></a>Performance
## 14. <a name='Performance'></a>Performance
Le temps de réponse doit être rapide pour les opérations de login. Ce temps sera estimé de façon empirique au fur et à mesure des implémentations.
## 15. <a name='Disponibilit'></a>Disponibilité
## 15. <a name='Disponibilit'></a>Disponibilité
La haute disponibilité et la reprise après sinistre sont permises par la redondance des `relais` sans système central ou critique et robustes à la défaillance d'une partie des participants. C'est idem pour la redondance au sein des `Members` des gestionnaires des Members dans les `processus`, qui ont tous des actions égales et robustes à la défaillance d'une partie des participants.
En cas de perte, vol, corruption, ou expiration des clés, l'utilisateur peut de son initiative et en toute autonomie révoquer une identité et en générer une nouvelle.
En cas de perte, vol, corruption, ou expiration des clés, l'`User` peut de son initiative et en toute autonomie révoquer un `User` et en générer une nouvelle.
## 16. <a name='volutivit'></a>Évolutivité
## 16. <a name='volutivit'></a>Évolutivité
La capacité à gérer une augmentation du nombre d'`utilisateurs` est un équilibre arbitré par les parties prenantes, en fonction du besoin de `relais` et de `Members`. Les parties prenantes ont les moyens d'enrôler par eux-mêmes les relais et les Members par `rôles` et par `Process` .
La capacité à gérer une augmentation du nombre d'``User`` est un équilibre arbitré par les parties prenantes, en fonction du besoin de `relais` et de `Members`. Les parties prenantes ont les moyens d'enrôler par eux-mêmes les relais et les Members par `rôles` et par `Process` .
## 17. <a name='AutresMesuresdescurit'></a>Autres Mesures de sécurité
## 17. <a name='AutresMesuresdescurit'></a>Autres Mesures de sécurité
Les mécanismes de défense contre les vulnérabilités courantes doivent être implémentés (CSRF, XSS).
À noter, que les seules bases de données sont dans l'IndexedDB des navigateurs et applications mobiles, côté utilisateur et écrasées des données confirmées reçues du réseau et toutes vérifiables. Tous les autres composants et utilisateurs ont un stockage en mémoire, non persisté (mais restauré à leur propre récupération de leur identité).
À noter, que les seules bases de données sont dans l'IndexedDB des navigateurs et applications mobiles, côté `User` et écrasées des données confirmées reçues du réseau et toutes vérifiables. Tous les autres composants et `User` ont un stockage en mémoire, non persisté (mais restauré à leur propre récupération de leur `User`).
## 18. <a name='Todo'></a>Todo
## 18. <a name='Todo'></a>Todo

View File

@ -1,14 +1,14 @@
# <a name='Documentsderfrence'></a>Documents de référence- Specifications
## 1. <a name='Autheursvalidationsdatesversionschangesandhistory'></a>Autheurs, validations, dates, versions, changement and historique
## 1. <a name='Autheursvalidationsdatesversionschangementandhistorique'></a>Autheurs, validations, dates, versions, changement and historique
Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
## 2. <a name='Tabledesmatires'></a>Table des matières
## 2. <a name='Tabledesmatires'></a>Table des matières
<!-- vscode-markdown-toc -->
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangesandhistory)
* 1. [Autheurs, validations, dates, versions, changement and historique](#Autheursvalidationsdatesversionschangementandhistorique)
* 2. [Table des matières](#Tabledesmatires)
* 3. [Worfklows](#Worfklows)
* 4. [Transverse](#Transverse)
@ -21,16 +21,16 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
/vscode-markdown-toc-config -->
<!-- /vscode-markdown-toc -->
## 3. <a name='Worfklows'></a>Worfklows
## 3. <a name='Worfklows'></a>Worfklows
* **Authentification**: [Auth.md](Auth-Specs.md)
* **Items**: [Item-Specs.md](Item-Specs.md)
* **Prd et Pcd**: [ Prd- Pcd-Specs.md]( Prd- Pcd-Specs.md)
* **Messages des relais**: [Message-Specs.md]
* **Messages des relais**: [Envelope-Specs.md]
* **Process et roles**: [Process-Role-Specs.md](Process-Role-Specs.md)
* **Transactions Silent Payments**: [Silent-Payments-Specs.md](Silent-Payments-Specs.md)
## 4. <a name='Transverse'></a>Transverse
## 4. <a name='Transverse'></a>Transverse
* **Datamodel**: [Specs-Datamodel.md](Specs-Datamodel.md)
* **Définitions et abréviations.**: [Specs-Definition.md]
@ -39,9 +39,9 @@ Cf. [Git SDK COMMON](https://git.4nk.com/4nk/sdk_common/doc)
* **Maintenance, environnement de déploiement**: [Specs-Deployment.md]
* **References**: [Specs-References.md](Specs-References.md)
## 5. <a name='Diagrammesdarchitecture'></a>Diagrammes d'architecture
## 5. <a name='Diagrammesdarchitecture'></a>Diagrammes d'architecture
* **Diagramme d'architecture montrant les composants principaux du système de login.**
[SheatSheet 4NK](https://cryptpad.fr/diagram/#/2/diagram/view/3UG+7ccutUvJlwJ1-bR40RhgOA+rb5eEmw42wtkN19A)
## 6. <a name='Todo'></a>Todo
## 6. <a name='Todo'></a>Todo

38
doc/_questions.txt Normal file
View File

@ -0,0 +1,38 @@
Questions PCD-PRD Specs:
1 - PrdResponse:
Réponse aux autres types de Prd (à l'exception de PrdConfirm, et PrdMessage).
ou
Répond à tous les autres types de Prd (à l'exception des PrdConfirm, PrdResponse eux-mêmes)
=> Réponse aux autres types de Prd (à l'exception de PrdConfirm, et PrdMessage).
2 - Expliquer les champs sur  Notification User (tableau)?
=> Cest lorsque lIHM doit recevoir un ev ent pour lui signaler soit lenvoi dun Prd soit la réception
3 -Info sur les Tx Sp : Toujours dans le PrdMessage?
=> 2 utilisation :
- Un message => pas de Tx SP
- Lenvoi une Tx Sp à relayer => toujours dans un PrdMessage (en plus de lenveloppe Message du Prd). Je comprend lambiguité :) je réfléchi à renomer « Message » en « Envelope» quen pensez vous ?
4- Receive prdUpdate: column "PrdResponse reply waiting" (yes, other members)
=> Lorsque lon reçoit un PRDUpdate on va y répondre si on un gestionnaire concerné, mais on va aussi attendre toutes les réponses de tous les gestionnaires (quon soit gestionnaire ou pas) afin de valider ou non la nouvelle version du PCD associé.
6 - Détailler la vérifications de PCDs via PrdResponse.
=> Cest un très gros morceau, jai commencé mais il y a encore à écrire cest répartis entre :
- Le contrôle des « Message »
- Le contrôle du Pcd lui même et de des Prd/Pcd de références/origines
- Le contrôle des PrdResponse et lui même et de des Prd/Pcd de références/origines en fonction des conditions des roles du process
7- PCD confirm? (9.1. Schéma des flux)
Cest trompeur il ny a pas de PCDConfirm je voulais dire que cétait une action de confirmation du PCD et pas un type de message, corrigé je vais pousser avec le reste des corrections en cours.
8- PCDFinalize.png: "hash des requètes et items de référence" ? "Complétion des attributs"?
« hash des requètes et items de référence" => ce sont les hashs des Prd/Pcd de références/origines
« "Complétion des attributs" » => cest que les autres attributs doivent être complétés (ça dépend des usages)

View File

@ -1,215 +0,0 @@
<mxfile host="Electron" modified="2024-03-25T12:29:29.805Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="dd0OsneYuz6MU6qjcv4w" version="24.1.0" type="device">
<diagram name="Page-1" id="eY5sdEA9ArHeJGmdISry">
<mxGraphModel dx="3470" dy="600" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="4QQ7-kQjxGIxnivFqdXq-10" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-1860" y="170" width="180" height="137.96" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-14" target="4QQ7-kQjxGIxnivFqdXq-18" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1850" y="274" />
<mxPoint x="-1850" y="252" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-14" value="&lt;b&gt;text&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1990" y="253.96" width="110.36" height="39" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-16" target="4QQ7-kQjxGIxnivFqdXq-18" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1414.42" y="360" as="targetPoint" />
<Array as="points">
<mxPoint x="-1850" y="220" />
<mxPoint x="-1850" y="252" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-16" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;PBKDF2&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1990" y="200" width="110.36" height="40" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-18" target="4QQ7-kQjxGIxnivFqdXq-19" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="Scw-UW258xYZ0Qm6YFfe-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-18" target="Scw-UW258xYZ0Qm6YFfe-1" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-18" value="AES-GCM-256" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1831.17" y="231.96" width="137.39" height="40" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="4QQ7-kQjxGIxnivFqdXq-19" target="C-ErVsWHysUovSoGaolT-1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1560" y="229" />
<mxPoint x="-1560" y="250" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-19" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;cipher&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1640" y="209" width="60" height="39" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-20" value="&lt;b&gt;Encrypt&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1859.9999999999995" y="170" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-21" value="" style="rounded=0;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="-1860" y="320" width="180" height="170" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-23" target="C-ErVsWHysUovSoGaolT-6" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2185" y="442" />
<mxPoint x="-2185" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-23" value="&lt;b&gt;cipher&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-2323.76" y="421.96000000000004" width="110.36" height="39" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-25" target="4QQ7-kQjxGIxnivFqdXq-27" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1414.42" y="510" as="targetPoint" />
<Array as="points">
<mxPoint x="-1850" y="370" />
<mxPoint x="-1850" y="414" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-25" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;PBKDF2&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1990" y="350" width="110.36" height="40" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="4QQ7-kQjxGIxnivFqdXq-27" target="4QQ7-kQjxGIxnivFqdXq-28" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-27" value="AES-GCM-256" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1831.17" y="393.96000000000004" width="137.39" height="40" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-28" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;text&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1640" y="394.00000000000006" width="60" height="39" as="geometry" />
</mxCell>
<mxCell id="4QQ7-kQjxGIxnivFqdXq-29" value="&lt;b&gt;Decrypt&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1859.9999999999995" y="320" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="C_G3zQmhc8sZBK8oKtaA-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1990" y="219.95999999999998" as="targetPoint" />
<Array as="points">
<mxPoint x="-2057" y="255.95999999999998" />
<mxPoint x="-2009" y="255.95999999999998" />
<mxPoint x="-2009" y="219.95999999999998" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-2" value="salt" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="C_G3zQmhc8sZBK8oKtaA-1" vertex="1" connectable="0">
<mxGeometry x="-0.5891" relative="1" as="geometry">
<mxPoint x="-3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="C_G3zQmhc8sZBK8oKtaA-4" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2054" y="179.95999999999998" />
<mxPoint x="-2009" y="179.95999999999998" />
<mxPoint x="-2009" y="219.95999999999998" />
</Array>
<mxPoint x="-1990" y="219.95999999999998" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-4" value="Password&lt;br&gt;18 characters" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-2149" y="158.95999999999998" width="94.6" height="40" as="geometry" />
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-5" value="SeedRandom&lt;br&gt;256 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-2149" y="227.95999999999998" width="91.76" height="44" as="geometry" />
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="C_G3zQmhc8sZBK8oKtaA-10" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1990" y="369.96" as="targetPoint" />
<Array as="points">
<mxPoint x="-2057" y="405.96" />
<mxPoint x="-2009" y="405.96" />
<mxPoint x="-2009" y="369.96" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-7" value="salt" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="C_G3zQmhc8sZBK8oKtaA-6" vertex="1" connectable="0">
<mxGeometry x="-0.5891" relative="1" as="geometry">
<mxPoint x="-3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="C_G3zQmhc8sZBK8oKtaA-9" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2054" y="329.96" />
<mxPoint x="-2009" y="329.96" />
<mxPoint x="-2009" y="369.96" />
</Array>
<mxPoint x="-1990" y="369.96" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-9" value="Password&lt;br&gt;18 characters" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-2149" y="309.96" width="94.6" height="40" as="geometry" />
</mxCell>
<mxCell id="C_G3zQmhc8sZBK8oKtaA-10" value="SeedRandom&lt;br&gt;256 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-2149" y="377.96" width="91.76" height="44" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Scw-UW258xYZ0Qm6YFfe-1" target="C-ErVsWHysUovSoGaolT-1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1560" y="274" />
<mxPoint x="-1560" y="250" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Scw-UW258xYZ0Qm6YFfe-1" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;nonce&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-1640" y="253.96" width="60" height="39" as="geometry" />
</mxCell>
<mxCell id="Scw-UW258xYZ0Qm6YFfe-5" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;nonce&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-2323.76" y="475.96" width="110" height="39" as="geometry" />
</mxCell>
<mxCell id="Scw-UW258xYZ0Qm6YFfe-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="Scw-UW258xYZ0Qm6YFfe-5" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-2150" y="460" as="targetPoint" />
<Array as="points">
<mxPoint x="-2185" y="496" />
<mxPoint x="-2185" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="C-ErVsWHysUovSoGaolT-1" target="C-ErVsWHysUovSoGaolT-4">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-1" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;CONCAT&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry x="-1543" y="229.96" width="110.36" height="40" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-4" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;nonce+cipher&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="-1413" y="230.96" width="90" height="39" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="C-ErVsWHysUovSoGaolT-8" target="4QQ7-kQjxGIxnivFqdXq-27">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1850" y="460" />
<mxPoint x="-1850" y="414" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-6" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;CONCAT&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry x="-2149" y="439.96" width="110.36" height="40" as="geometry" />
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-9" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="C-ErVsWHysUovSoGaolT-6" target="C-ErVsWHysUovSoGaolT-8">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-2054" y="462" as="sourcePoint" />
<mxPoint x="-1831" y="402" as="targetPoint" />
<Array as="points">
<mxPoint x="-2054" y="460" />
<mxPoint x="-1990" y="460" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="C-ErVsWHysUovSoGaolT-8" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;nonce+cipher&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="-1990" y="439.96" width="110" height="39" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -1,61 +0,0 @@
<mxfile host="Electron" modified="2024-03-11T09:59:11.855Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/23.1.5 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="QUy8nx2QOjUxvohR9gNM" version="23.1.5" type="device">
<diagram name="Page-1" id="WB0AbUQrp66xU2upNOrv">
<mxGraphModel dx="3435" dy="1769" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="R5PE0JiO6jkbt_TOkq---1" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-2010" y="-377" width="290" height="167" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="R5PE0JiO6jkbt_TOkq---9" target="R5PE0JiO6jkbt_TOkq---8">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1746.07" y="-188" as="targetPoint" />
<Array as="points">
<mxPoint x="-2038" y="-242" />
<mxPoint x="-1990" y="-242" />
<mxPoint x="-1990" y="-278" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---3" value="salt" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="R5PE0JiO6jkbt_TOkq---2">
<mxGeometry x="-0.5891" relative="1" as="geometry">
<mxPoint x="-3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="R5PE0JiO6jkbt_TOkq---5" target="R5PE0JiO6jkbt_TOkq---8">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-2035" y="-318" />
<mxPoint x="-1990" y="-318" />
<mxPoint x="-1990" y="-278" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---5" value="Password&lt;br&gt;18 characters" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" vertex="1" parent="1">
<mxGeometry x="-2130" y="-347" width="94.6" height="40" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="R5PE0JiO6jkbt_TOkq---12" target="R5PE0JiO6jkbt_TOkq---11">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="R5PE0JiO6jkbt_TOkq---8" target="R5PE0JiO6jkbt_TOkq---12">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---8" value="SCRYPT" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry x="-1970.58" y="-298" width="110.58" height="40" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---9" value="SeedRandom&lt;br&gt;256 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="-2130" y="-270" width="91.76" height="44" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---10" value="&lt;b&gt;PBKDF2&lt;/b&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" vertex="1" parent="1">
<mxGeometry x="-2009" y="-377" width="110" height="30" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---11" value="hash" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="-1700" y="-298" width="60" height="40" as="geometry" />
</mxCell>
<mxCell id="R5PE0JiO6jkbt_TOkq---12" value="SHA256" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry x="-1840" y="-298" width="110" height="40" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -1,687 +0,0 @@
<mxfile host="Electron" modified="2024-03-25T12:31:54.394Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="K8h4Bc2hlosrvhCbEDiS" version="24.1.0" type="device">
<diagram id="bWoO5ACGZIaXrIiKNTKd" name="Page-1">
<mxGraphModel dx="3088" dy="2039" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="274" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="2" target="4" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="275" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="2" target="5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="2" value="&lt;b&gt;KeyRecover&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-761.7619217081851" y="44" width="88.8134519572954" height="28.999999999999993" as="geometry" />
</mxCell>
<mxCell id="4" value="Part2&lt;br&gt;128 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-524.36" y="83.92" width="103.81" height="29" as="geometry" />
</mxCell>
<mxCell id="5" value="Part1&lt;br&gt;128 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1089" y="84" width="88.8134519572954" height="28.999999999999993" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-285" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="258" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1090" y="235" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-287" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="6" target="282" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="6" value="Part2Enc" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-524.3599999999999" y="219" width="103.81" height="29" as="geometry" />
</mxCell>
<mxCell id="8" value="Part1Enc" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1089" y="217.29" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="20" value="" style="endArrow=none;html=1;rounded=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=classic;startFill=1;endFill=0;labelBackgroundColor=none;fontColor=#000000;" parent="1" source="276" target="5" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-1017.308192620023" y="60" as="sourcePoint" />
<mxPoint x="-985.593274021352" y="28" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="21" value="" style="endArrow=none;html=1;rounded=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;startArrow=classic;startFill=1;endFill=0;labelBackgroundColor=none;fontColor=#000000;" parent="1" target="4" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-473.30499999999984" y="188" as="sourcePoint" />
<mxPoint x="-594.905" y="31.210000000000264" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="32" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-516.4195321963339" y="323" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="281" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="278" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-717" y="113" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="77" value="ImageRevoke or mnemonic" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontStyle=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
<mxGeometry x="-770.93" y="83.92" width="110" height="29" as="geometry" />
</mxCell>
<mxCell id="154" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;labelBackgroundColor=none;fontColor=#000000;" parent="1" source="155" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-717" y="-10" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-290" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="155" target="5h_mtuP3TllbSGRXwFMH-287" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="155" value="WalletCreate" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-761.76" y="-235" width="88.81" height="33" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-294" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="160" target="HEAZNrv7IqFEUBU4v7G9-289" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-295" value="KO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HEAZNrv7IqFEUBU4v7G9-294" vertex="1" connectable="0">
<mxGeometry x="-0.4499" relative="1" as="geometry">
<mxPoint x="-26" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-296" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="160" target="167" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-297" value="OK" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HEAZNrv7IqFEUBU4v7G9-296" vertex="1" connectable="0">
<mxGeometry x="-0.8623" y="1" relative="1" as="geometry">
<mxPoint x="10" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="160" value="ImageRecover in cache ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1244.5500000000002" y="-334" width="170" height="49" as="geometry" />
</mxCell>
<mxCell id="161" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;labelBackgroundColor=none;fontColor=#000000;entryX=0.501;entryY=0.044;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="162" target="164" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1374.98" y="-151" as="sourcePoint" />
<mxPoint x="-1280" y="-198" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="162" value="NewDevice" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1354.98" y="-241" width="120" height="33" as="geometry" />
</mxCell>
<mxCell id="163" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#000000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="164" target="HEAZNrv7IqFEUBU4v7G9-305" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1264.98" y="-140" as="sourcePoint" />
<mxPoint x="-1295.03" y="-122" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="164" value="ImageRecoverUpload" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1352.89" y="-193.21" width="115.48" height="29" as="geometry" />
</mxCell>
<mxCell id="165" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#000000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1294.28" y="-76" as="sourcePoint" />
<mxPoint x="-1294.73" y="-60" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="166" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1351.59" y="-106" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="167" value="WalletRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1350" y="-61" width="110.54" height="33" as="geometry" />
</mxCell>
<mxCell id="280" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="181" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-714.8000000000002" y="299" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="181" value="ImageRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontStyle=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
<mxGeometry x="-772" y="252.71000000000004" width="110" height="29" as="geometry" />
</mxCell>
<mxCell id="259" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="189" target="202" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1171" y="390" />
<mxPoint x="-1171" y="390" />
<mxPoint x="-1171" y="491" />
</Array>
<mxPoint x="-1190" y="390" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="189" value="PreId" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1215.921944604848" y="345.99999999999994" width="88.8134519572954" height="28.999999999999993" as="geometry" />
</mxCell>
<mxCell id="190" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="258" target="189" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-367.91" y="256.15" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="192" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-506.4195321963339" y="333" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="206" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="193" target="202" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1184" y="426" as="targetPoint" />
<Array as="points">
<mxPoint x="-449" y="392" />
<mxPoint x="-1170" y="392" />
<mxPoint x="-1170" y="491" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="193" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-493.4195321963339" y="346" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="200" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="196" target="197" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-286" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.75;entryDx=0;entryDy=0;" parent="1" source="196" target="202" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-170" y="186" />
<mxPoint x="-170" y="680" />
<mxPoint x="-1274" y="680" />
<mxPoint x="-1274" y="513" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="196" value="ProcessSelected" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-349.55999999999995" y="171.00000000000006" width="170" height="30.71" as="geometry" />
</mxCell>
<mxCell id="197" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-310.55953219633375" y="233.29000000000002" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="198" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-300.55953219633375" y="243.29000000000002" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="205" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.553;entryY=0.011;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="199" target="202" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-246" y="392" />
<mxPoint x="-1170" y="392" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-288" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="199" target="282" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-211" y="280" />
<mxPoint x="-360" y="280" />
<mxPoint x="-360" y="279" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="199" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-290.55953219633375" y="253.29000000000002" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="202" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1254" y="491" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="203" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1235.7457165981" y="501" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="233" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="228" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1140" y="540" />
<mxPoint x="-1140" y="558" />
<mxPoint x="-1199" y="558" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="234" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="230" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1140" y="540" />
<mxPoint x="-1140" y="558" />
<mxPoint x="-1158" y="558" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="235" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="231" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1140" y="540" />
<mxPoint x="-1140" y="558" />
<mxPoint x="-1119" y="558" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="236" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="204" target="232" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1140" y="540" />
<mxPoint x="-1140" y="558" />
<mxPoint x="-1080" y="558" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-287" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="204" target="U1iS4aTrDNJz4kT7s3QN-288" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-780" y="525.8333333333335" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="204" value="PrdList" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1217.49" y="511" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="228" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1213.97" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="230" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1172.9" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="231" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1133.97" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="232" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1094.03" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="245" value="Relay WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1172.9" y="628.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="258" value="SHA256" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1234.0199999999998" y="274" width="125" height="30" as="geometry" />
</mxCell>
<mxCell id="269" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-473.30499999999984" y="195" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="-yOJM6OqD8U2CxrTReHV-284" value="nonce+cypher" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="269" vertex="1" connectable="0">
<mxGeometry x="-0.0836" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="277" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="276" target="8" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="-yOJM6OqD8U2CxrTReHV-285" value="nonce+cypher" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="277" vertex="1" connectable="0">
<mxGeometry x="-0.0515" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XqTc7s29-gL46L3V4mSs-302" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="276" target="181" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-821.8800000000001" y="179.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="XqTc7s29-gL46L3V4mSs-307" value="SeedRand1" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="XqTc7s29-gL46L3V4mSs-302" vertex="1" connectable="0">
<mxGeometry x="-0.1098" y="1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="276" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;Encrypt&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1113.29" y="165" width="137.39" height="30" as="geometry" />
</mxCell>
<mxCell id="278" value="Download" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-772.45" y="128" width="110" height="28" as="geometry" />
</mxCell>
<mxCell id="284" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="282" target="32" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="282" value="Shamir Secret Sharing" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-567.45" y="263.86" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-290" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-289" target="155" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-292" value="KO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HEAZNrv7IqFEUBU4v7G9-290" vertex="1" connectable="0">
<mxGeometry x="-0.7216" y="-1" relative="1" as="geometry">
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-303" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-289" target="162" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1071" y="-261" />
<mxPoint x="-1295" y="-261" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-304" value="KO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="HEAZNrv7IqFEUBU4v7G9-303" vertex="1" connectable="0">
<mxGeometry x="-0.4442" y="4" relative="1" as="geometry">
<mxPoint x="48" y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-289" value="new device ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1070.68" y="-284" width="170" height="49" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-301" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-299" target="160" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-299" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.start_2;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-1169.55" y="-372" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-306" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-305" target="166" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-305" value="ImageRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1349.98" y="-149.07999999999998" width="110" height="29" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-314" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-762" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-315" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-720.9300000000001" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-316" value="7" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-682" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-317" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-642.06" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-318" value="Relay WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-720.9300000000001" y="628.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-329" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-771.0699999999999" y="300" width="110" height="29" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-334" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-333" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-264.55999999999995" y="127.57999999999997" as="targetPoint" />
<Array as="points">
<mxPoint x="-265" y="104.29" />
<mxPoint x="-265" y="112.29" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-333" value="SDK" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-321.15999999999997" y="76.29" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-337" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="196" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-264.8399999999999" y="158.29000000000002" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-336" value="ProcessList" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-357.55999999999995" y="127.57999999999997" width="180" height="30.71" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-341" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-338" target="HEAZNrv7IqFEUBU4v7G9-340" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-853" y="442" />
<mxPoint x="-911" y="442" />
<mxPoint x="-911" y="462" />
<mxPoint x="-907" y="462" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-338" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-910.42" y="402" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-342" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-339" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-910" y="462" as="targetPoint" />
<Array as="points">
<mxPoint x="-981" y="442" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-339" value="SDK" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1038.8300000000002" y="402" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-343" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-340" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1040" y="582" as="targetPoint" />
<Array as="points">
<mxPoint x="-916" y="582" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-344" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="HEAZNrv7IqFEUBU4v7G9-340" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-790" y="582" as="targetPoint" />
<Array as="points">
<mxPoint x="-916" y="582" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-340" value="PeerListMerged" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1005.8499999999999" y="460.29" width="180" height="30.71" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-371" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="77" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-800" y="98" />
</Array>
<mxPoint x="-807.6799999999998" y="98" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-372" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" target="77" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-810" y="81" as="targetPoint" />
<Array as="points">
<mxPoint x="-808" y="146" />
<mxPoint x="-800" y="146" />
<mxPoint x="-800" y="98" />
</Array>
<mxPoint x="-807.5799999999999" y="143" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="AH83P5LbfY0wmGR11IUw-284" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="XqTc7s29-gL46L3V4mSs-304" target="181" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-730" y="250" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="AH83P5LbfY0wmGR11IUw-285" value="SeedRand2" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="AH83P5LbfY0wmGR11IUw-284" vertex="1" connectable="0">
<mxGeometry x="0.0577" y="3" relative="1" as="geometry">
<mxPoint x="48" y="-3" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="XqTc7s29-gL46L3V4mSs-304" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;Encrypt&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-542" y="165" width="137.39" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-722.0000000000001" y="643" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-288" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-795.8000000000001" y="511" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-289" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-777.5457165981001" y="521" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-291" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-314" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-292" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-315" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-293" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-316" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-294" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-317" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-290" value="PrdMessage&lt;br&gt;(+ TxSp)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-759.2914331962005" y="531" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-295" value="To all roles" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1320" y="517" width="60" height="33" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-305" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1519" y="737.0699999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-307" value="Relay - side chain node not required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1483.3200000000002" y="736" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-310" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1520" y="772.07" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-311" value="Relay - side chain node required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1484.3200000000002" y="771.0000000000001" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-284" value="&lt;b&gt;`item_Member_enc_by_sp_shared_secret`&lt;/b&gt;&lt;br&gt;(only for Member managers)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1320" y="423" width="260" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-285" value="Members" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-380" y="243.29000000000002" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-288" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="KGCLxLdSfCaxDo2TsfCf-284" target="KGCLxLdSfCaxDo2TsfCf-284" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-289" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1320" y="440" as="targetPoint" />
<Array as="points">
<mxPoint x="-1360" y="440" />
<mxPoint x="-1320" y="440" />
</Array>
<mxPoint x="-1360" y="441.8600000000001" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-290" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.591;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="KGCLxLdSfCaxDo2TsfCf-284" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1322" y="438" as="targetPoint" />
<Array as="points">
<mxPoint x="-1340" y="486" />
<mxPoint x="-1340" y="440" />
<mxPoint x="-1322" y="440" />
</Array>
<mxPoint x="-1360" y="485.5" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-291" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=-0.001;entryY=0.587;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" target="KGCLxLdSfCaxDo2TsfCf-284" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1340" y="523" />
<mxPoint x="-1340" y="440" />
</Array>
<mxPoint x="-1360" y="523.21" as="sourcePoint" />
<mxPoint x="-1322" y="438" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-292" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;KeyRecoverScan&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;/b&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;private metadata&lt;/span&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1524.1" y="426.07" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-293" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;KeyMainSpend&lt;/b&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;&lt;/b&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;private metadata&lt;/span&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1524" y="467.07" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-294" value="&lt;div style=&quot;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;KeyMainScan&lt;br&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;private metadata&lt;/span&gt;&lt;br&gt;&lt;/div&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1524" y="505.78" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-295" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-952.03" y="741" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-316" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1157.1499999999999" y="741" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-318" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-942.03" y="751" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-319" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1147.1499999999999" y="751" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-321" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-932.03" y="761" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-322" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1137.1499999999999" y="761" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-324" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-922.03" y="771" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-325" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1127.1499999999999" y="771" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-327" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-912.03" y="781" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-328" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1117.1499999999999" y="781" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-330" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-902.03" y="791" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-331" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1107.1499999999999" y="791" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-333" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-892.03" y="801" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-334" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1097.1499999999999" y="801" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-336" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-882.03" y="811" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-337" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1087.1499999999999" y="811" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-339" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-872.03" y="821" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-340" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1077.1499999999999" y="821" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="KGCLxLdSfCaxDo2TsfCf-342" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-930" y="690" as="sourcePoint" />
<mxPoint x="-930" y="730" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="mM1gybHHXk3-ZNENjHdL-284" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.224;entryY=0.065;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="8" target="181" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xSIgGbmu95QqtSGV3vQQ-285" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="xSIgGbmu95QqtSGV3vQQ-284" target="258" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="xSIgGbmu95QqtSGV3vQQ-284" value="Password&lt;br&gt;18 characters" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1229.39" y="81" width="115.75" height="32" as="geometry" />
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-284" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="Lj3ro7yhdUhcsVQ_hEMl-284" target="2" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-286" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="Lj3ro7yhdUhcsVQ_hEMl-284" target="KGCLxLdSfCaxDo2TsfCf-292" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-717" y="30" />
<mxPoint x="-1544" y="30" />
<mxPoint x="-1544" y="441" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Lj3ro7yhdUhcsVQ_hEMl-284" value="&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;KeyGenRecover&lt;/span&gt;&lt;/div&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-798.7099999999999" y="-30" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-288" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="5h_mtuP3TllbSGRXwFMH-287" target="KGCLxLdSfCaxDo2TsfCf-293" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1075" y="10" />
<mxPoint x="-1580" y="10" />
<mxPoint x="-1580" y="482" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-289" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="5h_mtuP3TllbSGRXwFMH-287" target="KGCLxLdSfCaxDo2TsfCf-294" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1075" y="10" />
<mxPoint x="-1580" y="10" />
<mxPoint x="-1580" y="521" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-287" value="&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;KeyGenMainnet&lt;/span&gt;&lt;/div&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1157.15" y="-30" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-292" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#999999;" parent="1" source="5h_mtuP3TllbSGRXwFMH-291" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-894" y="50" />
<mxPoint x="-991" y="50" />
<mxPoint x="-991" y="98" />
</Array>
<mxPoint x="-971.0999999999999" y="98" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-293" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#999999;" parent="1" source="5h_mtuP3TllbSGRXwFMH-291" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-894" y="50" />
<mxPoint x="-991" y="50" />
<mxPoint x="-991" y="143" />
</Array>
<mxPoint x="-971" y="143" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5h_mtuP3TllbSGRXwFMH-291" value="&lt;div style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;background-color: initial;&quot;&gt;KeyGenRevoke&lt;/span&gt;&lt;/div&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-975.9000000000001" y="-30" width="163.42" height="30" as="geometry" />
</mxCell>
<mxCell id="6VpLyi-W56kXfNHX2Y9h-284" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;KeyRevokeSpend&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-970" y="84" width="160" height="29" as="geometry" />
</mxCell>
<mxCell id="6VpLyi-W56kXfNHX2Y9h-285" value="&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;KeyRevokeScan&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-970" y="128" width="160" height="29" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -1,577 +0,0 @@
<mxfile host="Electron" modified="2024-03-25T12:35:10.967Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="Fjx3BsfNJAZRm_f4NExr" version="24.1.0" type="device">
<diagram id="bWoO5ACGZIaXrIiKNTKd" name="Page-1">
<mxGraphModel dx="3164" dy="414" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="202" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1317" y="491" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="203" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1298.7457165981" y="501" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="233" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="228" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="540" />
<mxPoint x="-1203" y="560" />
<mxPoint x="-1262" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="234" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="230" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="540" />
<mxPoint x="-1203" y="560" />
<mxPoint x="-1221" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="235" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="204" target="231" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="540" />
<mxPoint x="-1203" y="560" />
<mxPoint x="-1182" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="236" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="204" target="232" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="540" />
<mxPoint x="-1203" y="560" />
<mxPoint x="-1143" y="560" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-287" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="204" target="U1iS4aTrDNJz4kT7s3QN-288" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-843" y="525.8333333333335" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="204" value="PrdUpdate&lt;br&gt;&lt;b&gt;Member&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1280.4914331962004" y="511" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="228" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1276.97" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="230" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1235.9" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="231" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1196.97" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="232" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1157.03" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="DLJctxT3D2mWswRGw-9P-316" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="245" target="fIN9LJIhpEY6EGzNKIPz-322" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1013" y="700" as="targetPoint" />
<Array as="points">
<mxPoint x="-1206" y="679" />
<mxPoint x="-1203" y="679" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="245" value="Relay WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1235.9" y="628.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-314" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1064" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-315" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1022.9300000000001" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-316" value="7" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-984" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-317" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-944.06" y="597.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="HEAZNrv7IqFEUBU4v7G9-318" value="Relay&amp;nbsp;WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1022.9300000000001" y="628.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="DLJctxT3D2mWswRGw-9P-317" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-286" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1203" y="700" as="targetPoint" />
<Array as="points">
<mxPoint x="-993" y="673" />
<mxPoint x="-993" y="680" />
<mxPoint x="-1203" y="680" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1024" y="643" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-288" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1097.8000000000002" y="511" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-289" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1079.5457165981002" y="521" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-291" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-314" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-292" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-315" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-293" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-316" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-294" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="U1iS4aTrDNJz4kT7s3QN-290" target="HEAZNrv7IqFEUBU4v7G9-317" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-290" value="PrdMessage&lt;br&gt;(+ TxSp)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1061.2914331962006" y="531" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-315" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1564" y="490.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-316" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1545.7457165981" y="500.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-317" value="Pcd&lt;br&gt;&lt;b&gt;Member&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1527.4914331962004" y="510.93" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-318" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="228" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1463" y="540" />
<mxPoint x="-1463" y="560" />
<mxPoint x="-1262" y="560" />
</Array>
<mxPoint x="-1404" y="539.78" as="sourcePoint" />
<mxPoint x="-1463" y="597.78" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-319" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="230" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1463" y="540" />
<mxPoint x="-1463" y="560" />
<mxPoint x="-1221" y="560" />
</Array>
<mxPoint x="-1404" y="539.78" as="sourcePoint" />
<mxPoint x="-1421" y="597.78" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-320" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="231" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1463" y="540" />
<mxPoint x="-1463" y="560" />
<mxPoint x="-1182" y="560" />
</Array>
<mxPoint x="-1404" y="539.78" as="sourcePoint" />
<mxPoint x="-1383" y="597.78" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-321" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="232" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1463" y="540" />
<mxPoint x="-1463" y="560" />
<mxPoint x="-1143" y="560" />
</Array>
<mxPoint x="-1404" y="539.78" as="sourcePoint" />
<mxPoint x="-1343" y="597.78" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-322" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1317" y="700.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-323" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1298.7457165981" y="710.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-324" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-329" target="fIN9LJIhpEY6EGzNKIPz-330" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="749.0699999999999" />
<mxPoint x="-1203" y="769.0699999999999" />
<mxPoint x="-1262" y="769.0699999999999" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-325" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-329" target="fIN9LJIhpEY6EGzNKIPz-331" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="749.0699999999999" />
<mxPoint x="-1203" y="769.0699999999999" />
<mxPoint x="-1221" y="769.0699999999999" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-326" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-329" target="fIN9LJIhpEY6EGzNKIPz-332" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="749.0699999999999" />
<mxPoint x="-1203" y="769.0699999999999" />
<mxPoint x="-1182" y="769.0699999999999" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-327" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-329" target="fIN9LJIhpEY6EGzNKIPz-333" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1203" y="749.0699999999999" />
<mxPoint x="-1203" y="769.0699999999999" />
<mxPoint x="-1143" y="769.0699999999999" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-328" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-329" target="fIN9LJIhpEY6EGzNKIPz-343" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-843" y="734.9033333333334" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-329" value="PrdUpdate&lt;br&gt;&lt;b style=&quot;border-color: var(--border-color);&quot;&gt;process&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1280.4914331962004" y="720.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-330" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1276.97" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-331" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1235.9" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-332" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1196.97" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-333" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1157.03" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-334" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-335" target="fIN9LJIhpEY6EGzNKIPz-357" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1183" y="910" as="targetPoint" />
<Array as="points">
<mxPoint x="-1206" y="888" />
<mxPoint x="-1203" y="888" />
<mxPoint x="-1203" y="910" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-335" value="Relay&amp;nbsp;WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1235.9" y="837.78" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-336" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1064" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-337" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1022.9300000000001" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-338" value="7" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-984" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-339" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-944.06" y="806.8499999999999" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-340" value="Relay&amp;nbsp;WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1022.9300000000001" y="837.78" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-341" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.799;entryY=-0.046;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-342" target="fIN9LJIhpEY6EGzNKIPz-357" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1013" y="909.0699999999999" as="targetPoint" />
<Array as="points">
<mxPoint x="-994" y="889" />
<mxPoint x="-1203" y="889" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-342" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1024" y="852.0699999999999" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-343" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1097.8000000000002" y="720.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-344" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1079.5457165981002" y="730.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-349" target="fIN9LJIhpEY6EGzNKIPz-336" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-346" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-349" target="fIN9LJIhpEY6EGzNKIPz-337" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-347" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-349" target="fIN9LJIhpEY6EGzNKIPz-338" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-348" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-349" target="fIN9LJIhpEY6EGzNKIPz-339" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-349" value="PrdMessage&lt;br&gt;(+ TxSp)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1061.2914331962006" y="740.0699999999999" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-350" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1517" y="700" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-351" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1561.7457165981" y="710" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-352" value="Pcd&lt;br&gt;&lt;b&gt;process&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1543.4914331962004" y="720" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-353" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="fIN9LJIhpEY6EGzNKIPz-330" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1473" y="769" />
<mxPoint x="-1262" y="769" />
</Array>
<mxPoint x="-1473" y="750" as="sourcePoint" />
<mxPoint x="-1463" y="806.8499999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-354" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-352" target="fIN9LJIhpEY6EGzNKIPz-331" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1473" y="749" />
<mxPoint x="-1473" y="769" />
<mxPoint x="-1221" y="769" />
</Array>
<mxPoint x="-1463" y="750" as="sourcePoint" />
<mxPoint x="-1421" y="806.8499999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-355" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-352" target="fIN9LJIhpEY6EGzNKIPz-332" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1473" y="749" />
<mxPoint x="-1473" y="769" />
<mxPoint x="-1182" y="769" />
</Array>
<mxPoint x="-1404" y="748.8499999999999" as="sourcePoint" />
<mxPoint x="-1383" y="806.8499999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-356" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-352" target="fIN9LJIhpEY6EGzNKIPz-333" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1473" y="749" />
<mxPoint x="-1473" y="769" />
<mxPoint x="-1143" y="769" />
</Array>
<mxPoint x="-1404" y="748.8499999999999" as="sourcePoint" />
<mxPoint x="-1343" y="806.8499999999999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-357" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1324.75" y="910" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-358" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1306.4957165981" y="920" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-359" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-364" target="fIN9LJIhpEY6EGzNKIPz-365" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1210.75" y="959" />
<mxPoint x="-1210.75" y="979" />
<mxPoint x="-1269.75" y="979" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-360" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-364" target="fIN9LJIhpEY6EGzNKIPz-366" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1210.75" y="959" />
<mxPoint x="-1210.75" y="979" />
<mxPoint x="-1228.75" y="979" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-361" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-364" target="fIN9LJIhpEY6EGzNKIPz-367" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1210.75" y="959" />
<mxPoint x="-1210.75" y="979" />
<mxPoint x="-1189.75" y="979" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-362" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-364" target="fIN9LJIhpEY6EGzNKIPz-368" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1210.75" y="959" />
<mxPoint x="-1210.75" y="979" />
<mxPoint x="-1150.75" y="979" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-363" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-364" target="fIN9LJIhpEY6EGzNKIPz-375" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-824.75" y="944.8333333333335" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-364" value="PrdList" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1288.2414331962004" y="930" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-365" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1284.72" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-366" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1243.65" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-367" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1204.72" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-368" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1164.78" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-369" value="Relay&amp;nbsp;WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1243.65" y="1047.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-370" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1061.75" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-371" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1020.6800000000001" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-372" value="7" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-981.75" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-373" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-941.81" y="1016.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-374" value="Relay&amp;nbsp;WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1020.6800000000001" y="1047.71" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-375" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1095.5500000000002" y="930" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-376" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1077.2957165981002" y="940" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-377" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-381" target="fIN9LJIhpEY6EGzNKIPz-370" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-378" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-381" target="fIN9LJIhpEY6EGzNKIPz-371" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-379" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-381" target="fIN9LJIhpEY6EGzNKIPz-372" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-380" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-381" target="fIN9LJIhpEY6EGzNKIPz-373" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-381" value="PrdMessage&lt;br&gt;(+ TxSp)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1059.0414331962006" y="950" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-382" value="All Roles" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1402" y="929" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-384" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-383" target="fIN9LJIhpEY6EGzNKIPz-315" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1447" y="490" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-383" value="&lt;b&gt;Member&lt;/b&gt;&lt;br&gt;(this user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1531.8" y="448" width="88.8" height="29" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-385" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="fIN9LJIhpEY6EGzNKIPz-350" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1503.80252584744" y="700" as="targetPoint" />
<mxPoint x="-1503" y="649.0699999999999" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-386" value="&lt;b&gt;Process&lt;/b&gt;&lt;br&gt;(with this new sp_address for the selected role)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1510" y="590" width="140" height="59.07" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-388" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-387" target="fIN9LJIhpEY6EGzNKIPz-386" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-391" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-387" target="fIN9LJIhpEY6EGzNKIPz-394" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1380" y="409" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-387" value="selected role" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1730" y="269.99999999999994" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-390" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#999999;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-389" target="fIN9LJIhpEY6EGzNKIPz-386" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-389" value="last Process version" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1620" y="269.99999999999994" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-393" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-392" target="fIN9LJIhpEY6EGzNKIPz-383" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-392" value="&lt;b&gt;Add new fields&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1531.8" y="388" width="88.8" height="29" as="geometry" />
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-250" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-394" target="fIN9LJIhpEY6EGzNKIPz-392" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="UgsJvuNo3Jpwi4Lm2WxR-249" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="fIN9LJIhpEY6EGzNKIPz-394" target="UgsJvuNo3Jpwi4Lm2WxR-246">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-394" value="&lt;b&gt;HTML form&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1531.8" y="339" width="88.8" height="29" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-396" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="fIN9LJIhpEY6EGzNKIPz-395" target="fIN9LJIhpEY6EGzNKIPz-383" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1372" y="428" />
<mxPoint x="-1487" y="428" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-395" value="&lt;b&gt;Inital Member&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1428.35" y="388" width="76.25" height="29" as="geometry" />
</mxCell>
<mxCell id="3oxP2IrQZiT_M8X3yCe1-245" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1699" y="983.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="3oxP2IrQZiT_M8X3yCe1-246" value="Relay - side chain node not required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1663.3200000000002" y="982.71" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="3oxP2IrQZiT_M8X3yCe1-247" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1700" y="1018.7800000000001" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="3oxP2IrQZiT_M8X3yCe1-248" value="Relay - side chain node required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1664.3200000000002" y="1017.7100000000002" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-246" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="W0tqueod3XqBArbf31HU-245" target="fIN9LJIhpEY6EGzNKIPz-387" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-248" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="W0tqueod3XqBArbf31HU-247" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1680" y="248" as="sourcePoint" />
<mxPoint x="-940" y="299" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-245" value="selected process" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1730" y="209.99999999999994" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-249" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="W0tqueod3XqBArbf31HU-247" target="202" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1241" y="339" />
</Array>
<mxPoint x="-1241" y="250" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-247" value="Member managers" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1288.72" y="309.99999999999994" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-252" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="W0tqueod3XqBArbf31HU-251" target="fIN9LJIhpEY6EGzNKIPz-350" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1503.8000000000002" y="700" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="W0tqueod3XqBArbf31HU-251" value="&lt;b&gt;Inital Member&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1410.35" y="590" width="76.25" height="59.07" as="geometry" />
</mxCell>
<mxCell id="UgsJvuNo3Jpwi4Lm2WxR-246" value="&lt;b&gt;ThirdParty&lt;/b&gt;&lt;div&gt;&lt;b&gt;PriveKey&lt;/b&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="-1344" y="388" width="76.25" height="42" as="geometry" />
</mxCell>
<mxCell id="UgsJvuNo3Jpwi4Lm2WxR-247" value="&lt;b&gt;ThirdParty&lt;/b&gt;&lt;div&gt;&lt;b&gt;PriveKey&lt;/b&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="-1334" y="398" width="76.25" height="42" as="geometry" />
</mxCell>
<mxCell id="UgsJvuNo3Jpwi4Lm2WxR-248" value="&lt;b&gt;ThirdParty&lt;/b&gt;&lt;div&gt;&lt;b&gt;image or mnemonic&lt;/b&gt;&lt;/div&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" vertex="1" parent="1">
<mxGeometry x="-1324" y="408" width="76.25" height="42" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -1,706 +0,0 @@
<mxfile host="Electron" modified="2024-03-25T12:38:29.617Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.1.0 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="sfQsAFyr4pKbfsg0G8pU" version="24.1.0" type="device">
<diagram name="Page-1" id="nezTab6434Mr3TNqJTht">
<mxGraphModel dx="3341" dy="2193" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-6" value="WalletCreate" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-855.97" y="-281" width="88.81" height="33" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-7" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-11" target="sHT8GTnQFrlxJ-m2nGzn-23" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-8" value="KO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sHT8GTnQFrlxJ-m2nGzn-7" vertex="1" connectable="0">
<mxGeometry x="-0.4499" relative="1" as="geometry">
<mxPoint x="-26" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-11" target="sHT8GTnQFrlxJ-m2nGzn-34" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1353.9" y="47.50000000000023" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-10" value="OK" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sHT8GTnQFrlxJ-m2nGzn-9" vertex="1" connectable="0">
<mxGeometry x="-0.8623" y="1" relative="1" as="geometry">
<mxPoint x="10" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-11" value="ImageRecover in cache ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1244.5500000000002" y="-339" width="170" height="49" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-23" target="sHT8GTnQFrlxJ-m2nGzn-6" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-20" value="KO" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sHT8GTnQFrlxJ-m2nGzn-19" vertex="1" connectable="0">
<mxGeometry x="-0.7216" y="-1" relative="1" as="geometry">
<mxPoint x="12" y="-1" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-23" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1071" y="-266" />
<mxPoint x="-1295" y="-266" />
</Array>
<mxPoint x="-1294.98" y="-246" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-22" value="OK" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" parent="sHT8GTnQFrlxJ-m2nGzn-21" vertex="1" connectable="0">
<mxGeometry x="-0.4442" y="4" relative="1" as="geometry">
<mxPoint x="48" y="-2" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-23" value="new device ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-1070.68" y="-289" width="170" height="49" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;exitPerimeter=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-25" target="sHT8GTnQFrlxJ-m2nGzn-11" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-25" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.start_2;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="-1169.55" y="-377" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;labelBackgroundColor=none;fontColor=#000000;entryX=0.501;entryY=0.044;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-29" target="sHT8GTnQFrlxJ-m2nGzn-31" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1374.98" y="-153" as="sourcePoint" />
<mxPoint x="-1280" y="-200" as="targetPoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-29" value="NewDevice" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1354.98" y="-243" width="120" height="33" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#000000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-31" target="sHT8GTnQFrlxJ-m2nGzn-36" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1264.98" y="-142" as="sourcePoint" />
<mxPoint x="-1295.03" y="-124" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-31" value="ImageRecoverUpload" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1352.89" y="-195.21" width="115.48" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#000000;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-33" target="sHT8GTnQFrlxJ-m2nGzn-34" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1354.98" y="-62.21000000000001" as="sourcePoint" />
<mxPoint x="-1294.85" y="-39.99999999999997" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-33" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1351.59" y="-108" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-306" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-34" target="sHT8GTnQFrlxJ-m2nGzn-301" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1220" y="-43" />
<mxPoint x="-1220" y="-158" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-34" value="WalletRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1349.98" y="-60" width="114.44" height="33" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-36" target="sHT8GTnQFrlxJ-m2nGzn-33" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-36" value="ImageRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1349.98" y="-151.07999999999998" width="110" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-37" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-38" target="sHT8GTnQFrlxJ-m2nGzn-39" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-38" value="ProcessSelected" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1409" y="85.71" width="170" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-39" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1369.9995321963338" y="148" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-40" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1359.9995321963338" y="158" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-41" value="SpAddress" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1349.9995321963338" y="168" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-43" target="sHT8GTnQFrlxJ-m2nGzn-47" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1279" y="31" />
<mxPoint x="-1324" y="31" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-43" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1320" y="-8" width="83.03" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-44" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-45" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1379" y="19" />
<mxPoint x="-1380" y="19" />
<mxPoint x="-1380" y="31" />
<mxPoint x="-1324" y="31" />
</Array>
<mxPoint x="-1324" y="41" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-45" value="SDK" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1414.28" y="-8" width="70.44" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-47" target="sHT8GTnQFrlxJ-m2nGzn-38" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-47" value="ProcessListMerged" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1414.28" y="42.28999999999999" width="180" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-49" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-50" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1306" y="272" />
<mxPoint x="-1201" y="272" />
</Array>
<mxPoint x="-1306" y="200" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-50" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1275.89" y="294" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-51" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1257.6357165981" y="304.00000000000006" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-53" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-58" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1170" y="371" />
<mxPoint x="-1181" y="371" />
</Array>
<mxPoint x="-1170.0439590436406" y="360" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-59" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1170" y="371" />
<mxPoint x="-1142" y="371" />
</Array>
<mxPoint x="-1170.0439590436406" y="360" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-60" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1170" y="371" />
<mxPoint x="-1103" y="371" />
</Array>
<mxPoint x="-1170.0439590436406" y="360" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-365" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-56" target="sHT8GTnQFrlxJ-m2nGzn-57" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1170" y="371" />
<mxPoint x="-1222" y="371" />
</Array>
<mxPoint x="-1170" y="360" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-56" value="PrdList" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1246.2414331962004" y="315.00000000000006" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-57" value="1" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1236.97" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-58" value="2" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1195.9" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-59" value="3" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1156.97" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-60" value="4" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-1117.03" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-62" value="Relay WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1195.9" y="417.71000000000004" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-71" value="5" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-791" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-72" value="6" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-749.9300000000001" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-73" value="7" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-711" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-74" value="8" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-671.06" y="386.78" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-77" value="Relay WS" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-749.9300000000001" y="417.71000000000004" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-85" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-86" target="sHT8GTnQFrlxJ-m2nGzn-91" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-878.94" y="240" />
<mxPoint x="-936.94" y="240" />
<mxPoint x="-936.94" y="260" />
<mxPoint x="-932.94" y="260" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-86" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-936.36" y="200" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-87" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-88" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-935.94" y="260" as="targetPoint" />
<Array as="points">
<mxPoint x="-1006.94" y="240" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-88" value="SDK" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1064.7700000000002" y="200" width="114.62" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-89" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-91" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1060" y="380" as="targetPoint" />
<Array as="points">
<mxPoint x="-942" y="356" />
<mxPoint x="-942" y="378" />
<mxPoint x="-942" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-90" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-91" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-830" y="380" as="targetPoint" />
<Array as="points">
<mxPoint x="-942" y="356" />
<mxPoint x="-942" y="380" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-91" value="PeerListMerged" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1031.79" y="258.29" width="180" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-314" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-284" target="sHT8GTnQFrlxJ-m2nGzn-313" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-949.56" y="633" as="sourcePoint" />
<Array as="points" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-284" value="Controls" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1031.7914331962004" y="600" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-337" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-297" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-958" y="40" as="targetPoint" />
<Array as="points">
<mxPoint x="-1009" y="-38" />
<mxPoint x="-1009" />
<mxPoint x="-958" />
<mxPoint x="-958" y="40" />
<mxPoint x="-958" y="40" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-297" target="sHT8GTnQFrlxJ-m2nGzn-317" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-297" value="Part1Enc" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1036.07" y="-68.5" width="60" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-336" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-298" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-958" y="40" as="targetPoint" />
<Array as="points">
<mxPoint x="-921" />
<mxPoint x="-958" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-298" value="SeedRand1&lt;br&gt;256 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-961.73" y="-68.5" width="81.73" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-308" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-300" target="sHT8GTnQFrlxJ-m2nGzn-297" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1007" y="-83" />
<mxPoint x="-1006" y="-83" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-309" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-300" target="sHT8GTnQFrlxJ-m2nGzn-298" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1007" y="-83" />
<mxPoint x="-921" y="-83" />
</Array>
<mxPoint x="-930" y="-114" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-359" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-325" target="5Ne0HzyGfQl-3uoNr5Rs-33" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-396.4199999999996" y="142.13999999999987" as="targetPoint" />
<mxPoint x="-431" y="142.6300000000001" as="sourcePoint" />
<Array as="points">
<mxPoint x="-514" y="121" />
<mxPoint x="-430" y="121" />
<mxPoint x="-430" y="28" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-360" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-325" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-514" y="121" />
<mxPoint x="-430" y="121" />
<mxPoint x="-430" y="104" />
</Array>
<mxPoint x="-396.4199999999996" y="104.43000000000006" as="targetPoint" />
<mxPoint x="-431" y="142.6300000000001" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="Q8MjV8EZblA_sCvqo5JG-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-325" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-514" y="121" />
<mxPoint x="-430" y="121" />
<mxPoint x="-430" y="62" />
</Array>
<mxPoint x="-511" y="141" as="sourcePoint" />
<mxPoint x="-397" y="62" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-300" target="I9sp5S672SgGMplcR-zX-5" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1007" y="-83" />
<mxPoint x="-834" y="-83" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-300" value="ImageRecover" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1066.07" y="-128.87" width="118.1" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-312" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-301" target="sHT8GTnQFrlxJ-m2nGzn-300" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-301" value="Cache" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#d5e8d4;strokeColor=#82b366;" parent="1" vertex="1">
<mxGeometry x="-1066.8899999999999" y="-173" width="118.85" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-327" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-284" target="sHT8GTnQFrlxJ-m2nGzn-325" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-218.0564848910808" y="972.5" as="sourcePoint" />
<Array as="points">
<mxPoint x="-430" y="667" />
<mxPoint x="-430" y="121" />
<mxPoint x="-514" y="121" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-313" value="Rendering" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1031.7914331962004" y="652" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-321" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-316" target="sHT8GTnQFrlxJ-m2nGzn-50" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-1152" y="301" />
<mxPoint x="-1200" y="301" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-316" value="PreId" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1196.1919446048478" y="90.99999999999999" width="88.8134519572954" height="28.999999999999993" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-320" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-317" target="sHT8GTnQFrlxJ-m2nGzn-316" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-317" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;SHA256&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1218.8500000000001" y="43.209999999999994" width="125" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-349" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.25;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-322" target="sHT8GTnQFrlxJ-m2nGzn-341" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-496.9999999999998" y="-18.62999999999974" as="sourcePoint" />
<mxPoint x="-556.1442857142856" y="148.66" as="targetPoint" />
<Array as="points">
<mxPoint x="-736" y="-37" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-322" value="Part2Enc" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-779.4" y="-65.79000000000002" width="103.81" height="29" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-328" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-323" target="sHT8GTnQFrlxJ-m2nGzn-326" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-323" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-581.0295321963339" y="43.209999999999994" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-324" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-571.0295321963339" y="53.209999999999994" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-325" value="Shard" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-558.0295321963339" y="66.21" width="88.8134519572954" height="30.709999999999994" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-329" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=0;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-326" target="sHT8GTnQFrlxJ-m2nGzn-322" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-326" value="Shamir Secret Sharing" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-632.0600000000001" y="-15.929999999999993" width="190" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-331" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.start_2;whiteSpace=wrap;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-965.5899999999999" y="694" width="20" height="20" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-332" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;entryPerimeter=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-313" target="sHT8GTnQFrlxJ-m2nGzn-331" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-345" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-333" target="sHT8GTnQFrlxJ-m2nGzn-343" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-830" y="141" as="targetPoint" />
<Array as="points">
<mxPoint x="-957" y="131" />
<mxPoint x="-832" y="131" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-333" value="Part1" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1016.0999999999999" y="91.00000000000004" width="117.85" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-340" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-333" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-957.8649999999998" y="70.99999999999977" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-339" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;Decrypt&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-1026.56" y="41.000000000000014" width="137.39" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-352" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-341" target="sHT8GTnQFrlxJ-m2nGzn-342" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-652.1149999999998" y="151" as="sourcePoint" />
<mxPoint x="-649.5150000000003" y="171" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-341" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;Decrypt&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-804.81" y="41.000000000000014" width="137.39" height="30" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-344" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-342" target="sHT8GTnQFrlxJ-m2nGzn-343" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-734" y="131" />
<mxPoint x="-832" y="131" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-342" value="Part2" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-792.4399999999999" y="91.00000000000003" width="117.85" height="30.71" as="geometry" />
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-364" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;strokeColor=#999999;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="sHT8GTnQFrlxJ-m2nGzn-343" target="sHT8GTnQFrlxJ-m2nGzn-313" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-790.7984697508899" y="141.5" as="sourcePoint" />
<mxPoint x="-970" y="1021" as="targetPoint" />
<Array as="points">
<mxPoint x="-580" y="165" />
<mxPoint x="-580" y="667" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="sHT8GTnQFrlxJ-m2nGzn-343" value="&lt;b&gt;KeyRecover&lt;/b&gt;&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-876.0019217081851" y="150" width="88.8134519572954" height="28.999999999999993" as="geometry" />
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.003;entryY=0.621;entryDx=0;entryDy=0;fillColor=#dae8fc;strokeColor=#6c8ebf;entryPerimeter=0;" parent="1" target="Y_iTnzTvrgFW2w7x7B82-6" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-681.17" y="330.98333333333346" as="targetPoint" />
<mxPoint x="-1090" y="320" as="sourcePoint" />
<Array as="points">
<mxPoint x="-832" y="320" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-6" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-832.19" y="305" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-7" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-813.9357165981" y="315" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-8" value="PrdMessage&lt;br&gt;(+ TxSp)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-795.6814331962005" y="325" width="152.39494830511973" height="28.99999999999996" as="geometry" />
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-724.25" y="375" />
<mxPoint x="-735.25" y="375" />
</Array>
<mxPoint x="-724.25" y="364" as="sourcePoint" />
<mxPoint x="-735.25" y="391" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-724.25" y="375" />
<mxPoint x="-696.25" y="375" />
</Array>
<mxPoint x="-724.25" y="364" as="sourcePoint" />
<mxPoint x="-697.25" y="391" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-724.25" y="375" />
<mxPoint x="-657.25" y="375" />
</Array>
<mxPoint x="-724.25" y="364" as="sourcePoint" />
<mxPoint x="-657.25" y="391" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Y_iTnzTvrgFW2w7x7B82-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="Y_iTnzTvrgFW2w7x7B82-8" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-724" y="354" />
<mxPoint x="-724" y="375" />
<mxPoint x="-777" y="375" />
</Array>
<mxPoint x="-724.25" y="364" as="sourcePoint" />
<mxPoint x="-777.25" y="391" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-1" value="&lt;b&gt;`pre_id_sp_confidential`&lt;/b&gt;&lt;br style=&quot;border-color: var(--border-color);&quot;&gt;(only for Member managers)&lt;b&gt;&lt;br&gt;&lt;/b&gt;" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="-1246.24" y="159.71" width="236.19" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-2" value="To all roles" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1341.19" y="288" width="60" height="33" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-3" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1066.07" y="459" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-4" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1271.1899999999998" y="459" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-5" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-856.2399999999999" y="459" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-6" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1056.07" y="469" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-7" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1261.1899999999998" y="469" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-8" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-846.2399999999999" y="469" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-9" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1046.07" y="479" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-10" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1251.1899999999998" y="479" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-11" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-836.2399999999999" y="479" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-12" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1036.07" y="489" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-13" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1241.1899999999998" y="489" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-14" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-826.2399999999999" y="489" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-15" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1026.07" y="499" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-16" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1231.1899999999998" y="499" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-17" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-816.2399999999999" y="499" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-18" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1016.0699999999999" y="509" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-19" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1221.1899999999998" y="509" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-20" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-806.2399999999999" y="509" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-21" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1006.0699999999999" y="519" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-22" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1211.1899999999998" y="519" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-23" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-796.2399999999999" y="519" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-24" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-996.0699999999999" y="529" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-25" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1201.1899999999998" y="529" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-26" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-786.2399999999999" y="529" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-27" value="PrdResponse" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-986.0699999999999" y="539" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-28" value="Pcd" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-1191.1899999999998" y="539" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-29" value="PrdMessage" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
<mxGeometry x="-776.2399999999999" y="539" width="197.49" height="29" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-30" value="" style="shape=flexArrow;endArrow=classic;html=1;rounded=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="-930" y="404" as="sourcePoint" />
<mxPoint x="-930" y="444" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-31" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;KeyMainSpend&lt;/b&gt;&lt;br style=&quot;border-color: var(--border-color); font-weight: 400; text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Decrypt&lt;/span&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-397" y="56.19" width="149.75" height="30" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-32" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;KeyMainScan&lt;/b&gt;&lt;br style=&quot;border-color: var(--border-color); font-weight: 400; text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Decrypt&lt;/span&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-396.14999999999986" y="94.38999999999999" width="148.9" height="30" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-33" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;KeyRecoverScan&lt;/b&gt;&lt;br style=&quot;border-color: var(--border-color); font-weight: 400; text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;Decrypt&lt;/span&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-396.9999999999999" y="13" width="149.75" height="30" as="geometry" />
</mxCell>
<mxCell id="5Ne0HzyGfQl-3uoNr5Rs-35" value="PCD item_name=Member&lt;br&gt;-&amp;gt; Member (sp addess of the user)" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-558.03" y="148" width="250" height="30.71" as="geometry" />
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-1" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fontColor=#333333;fillColor=#f5f5f5;strokeColor=#666666;" parent="1" vertex="1">
<mxGeometry x="-497.25" y="369.80999999999995" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-2" value="Relay - side chain node not required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-461.57000000000016" y="368.74" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-3" value="" style="ellipse;whiteSpace=wrap;html=1;aspect=fixed;container=0;rounded=1;labelBackgroundColor=none;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
<mxGeometry x="-498.25" y="404.81000000000006" width="28.93" height="28.93" as="geometry" />
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-4" value="Relay - side chain node required" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-462.57000000000016" y="403.7400000000001" width="214.32" height="30" as="geometry" />
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="I9sp5S672SgGMplcR-zX-5" target="sHT8GTnQFrlxJ-m2nGzn-341" edge="1">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="-834" />
<mxPoint x="-736" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="I9sp5S672SgGMplcR-zX-5" value="SeedRand2&lt;br&gt;256 bits" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
<mxGeometry x="-868.58" y="-66.79" width="70" height="29" as="geometry" />
</mxCell>
<mxCell id="VY5BnqjUr2LHQryPuXbw-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="sHT8GTnQFrlxJ-m2nGzn-317" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="-1156.355" y="-61.789999999999964" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="VY5BnqjUr2LHQryPuXbw-1" value="Password" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="-1200.76" y="-65.79" width="88.81" height="33" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

View File

@ -70,7 +70,7 @@
<mxCell id="fjbs2FPPPvTh_kp5ffTT-12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="fjbs2FPPPvTh_kp5ffTT-10" target="fjbs2FPPPvTh_kp5ffTT-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="fjbs2FPPPvTh_kp5ffTT-10" value="message" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="fjbs2FPPPvTh_kp5ffTT-10" value="Envelope" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="339" y="391" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="fjbs2FPPPvTh_kp5ffTT-15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="Wghlu82NC7XNW73Bj8nE-12" target="fjbs2FPPPvTh_kp5ffTT-8">

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

View File

@ -135,7 +135,7 @@
<mxCell id="iJUXDc-48xs4e1SkEdmi-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="iJUXDc-48xs4e1SkEdmi-10" target="iJUXDc-48xs4e1SkEdmi-3">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="iJUXDc-48xs4e1SkEdmi-10" value="message" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="iJUXDc-48xs4e1SkEdmi-10" value="Envelope" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="361" y="341" width="100" height="29" as="geometry" />
</mxCell>
<mxCell id="iJUXDc-48xs4e1SkEdmi-11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" edge="1" parent="1" source="iJUXDc-48xs4e1SkEdmi-3" target="iJUXDc-48xs4e1SkEdmi-6">

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 791 KiB

After

Width:  |  Height:  |  Size: 791 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -25,7 +25,7 @@
<mxPoint x="1014" y="223" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="205" as="sourcePoint" />
<Array as="points">
@ -43,7 +43,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="205" as="sourcePoint" />
<Array as="points">
@ -52,7 +52,7 @@
<mxPoint x="625" y="205" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -91,7 +91,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="Pcd" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="351.5" y="193" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -119,7 +119,7 @@
<mxPoint x="625" y="164" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="206" as="sourcePoint" />
<Array as="points">
@ -128,7 +128,7 @@
<mxPoint x="806" y="206" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="206" as="sourcePoint" />
<Array as="points">
@ -140,7 +140,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="PcdConfrm" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="1380" y="189.5" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="205" as="sourcePoint" />
<Array as="points">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

View File

@ -87,7 +87,7 @@
<mxCell id="ciDpwXPfI_i4saoGPbpC-58" value="Broadcast&amp;nbsp;&lt;br&gt;Relais" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="10.002857142857238" y="663.919464882467" width="147.85714285714283" height="36.080535117532975" as="geometry" />
</mxCell>
<mxCell id="x6ZfMKw6pb64NkzxFiF4-1" value="Message du PCD" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxCell id="x6ZfMKw6pb64NkzxFiF4-1" value="Envelope du PCD" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry y="550" width="180" height="45" as="geometry" />
</mxCell>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -279,7 +279,7 @@
<mxCell id="QWqr_5V84EVE0ZFKT5Ey-1" value="" style="group" vertex="1" connectable="0" parent="1">
<mxGeometry x="160" y="-760" width="177.47" height="33.33" as="geometry" />
</mxCell>
<mxCell id="QWqr_5V84EVE0ZFKT5Ey-2" value="MessageReceived" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="QWqr_5V84EVE0ZFKT5Ey-1">
<mxCell id="QWqr_5V84EVE0ZFKT5Ey-2" value="EnvelopeReceived" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" vertex="1" parent="QWqr_5V84EVE0ZFKT5Ey-1">
<mxGeometry width="177.46999999999997" height="33.329999999999956" as="geometry" />
</mxCell>
<mxCell id="QWqr_5V84EVE0ZFKT5Ey-3" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADIAAAAqCAYAAADxughHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAodEVYdENyZWF0aW9uIFRpbWUAc2FtLiAyMyBtYXJzIDIwMjQgMTA6MjI6MDkm/a5DAAAKqUlEQVRogdWZy4+cx3HAf93fY147s7O7fHj5EGWTVCxRskGZhu3YiKQEiBLEUE4BnEtyyiF3nwPlEARIkD8gPiSXADHiBAGcQyCEdizQjhyElhxLckQx8pqkdpfLfc7re3V3VQ6z5O5yl+QsJR1SQGMw043q/nVVdXfVmFdffVVfeOEFXnzxRf4/i1FV/aQn8fkC1cZ3EfsUtc6z2HSGKG6BMR/bHJ88iCq+912q/hWkzPElYI5A7Szp3JdpdM9hjP3I03ziIFIt4nrfIeS3kDInlBlSZIQyQwuHtM/TOv3b1KY/T5TOYqPGY1kqftwFVoOfIpWQdH6FKGkdPEgFcTdQWTu43whpvEq48y36tww2/QxR82mS6YvUZi9gk8bE63kMiyjF1hXc6ncIeY/gm9jOS0w/+Qo2SsFEOyPDANf/R8T9L1IU+yxC5ajNn6LauIF6A14Rr2hQtPGrHP+1VzF2sr0+lEU05JT9H+J7/w6hAANWN5G1v2d18dsk7WdJZy9RO3IOExWoX0Klj4Q63hfcHwnx7Cl8bx0tDeJAvaIeXGnpnP0aZtemfHwgGih6P0CzK2jo7+u2tiBsvUFlbhDVTpJOfw4TKbbeJk4SknqLbH1lB8jExLU6+WqOesaWcKBOiVoXqB977lCxMhGIhBFu9DrG/RiV/AGjLMmR0yTtQBi+h7c14vb5cZcxWGuZmuviWwnZ2iqWkmL5Q6QQNCjiFPWC+ITmuS+RTs9PDDERiMqQULwG7h2Q6gGDLPWTzxBxC6lyNEC19g42ncWmU4gIYTSkWF9Ehxv4PEcrh1QB9WOXEieIF6gfo3n6K4c+kicA8fhyFZ8vYamjct+AqEbt+DxGbyK+Qr0ZB6s4iqU30Wia0F9B8yESBK0UDWHsSvcAFHWCuEDUOU599vShIK5evbov/vaJjbtE9a8SW0GKm0i5hM83caXDRDXS6Vms3gHvwQPBoB5wih+s49c+QLIBwQtajXddHIgLhCoglaBlQEqPG4wobv6M/vUrqIZDwUwUI2nzOYabX8Kt/TOEDAAFXPMkSatEyxIVRYNBvYAHle1TyMkYLOg2xDgW1CniA1oFxAuhcIgLaHab/n//Jab+I2ztIvXuRWzSxUbNhwb/xKdWY+7r5AtXKJd/gWF89Zj0Fkl0ljitIaFARSHoGMrLuIkg4W4gh3vupC6MP33YjpUdC4w+WKZx4j2aT2wyuvlvwBwmPUfS/TKNmc8cuL6JI8qXSyRdwc40KEpLcacku7HB4P0VgmuAKHgZx4EPaBA0CGEbQERQARNbTGxRVTR4xHtUArBzL4tzrL9xDXUllhLN3qf88Nts/OiPWfr+Xx24voksouIIo8touUHSMNj5Gq4T4bYco5UVkqPHqHdTVDJU5F6TEEAM1sSIKPUTNbDgNiswMbYZocFR3tncAwLg+xkr33uX5hNHyD9cp7jdo7wzoPnML+HXHxPEZ+8SBm+iuyaz1hA3Y4wRTLMOvkRFQAOIoCGgClIYBu+vkH04oHVmis7nZhAnRNMRUcPiRwlStKnWe/vmzRZuM7y+vH3jj13xQfJIEPEj/PAyEkYH9kftGdJajlYVqgERRVXARBSLBb137uCHJcSG0a0RPvccfekEyXQN13NghKhdx/YzxJeT7OuB8sgYCdU1pPyfB/bXj8xi7GC8+G2DGZPSfzdj880lxHvidkLaSUnbCQQY/WKAVOPg1iCoVaJO+7Eh4BEW0TBCy59A2G92gKgxRdxOIazf+80oDK73Gd1aI27FmMRiE4OJLTa12Nji1kpsepK4ZYnqA8Joiyzb/36bVC5duvQQEBV8cY2QvYWqPxik1SFpCGHk7v0WcnC9grgVESUWs93sLiApIaq3sXFAyhwxgDzY/yeRHRANhGoLqe5QDd9DireJkiFq2kh0CuINMBlQjMcbQ2N+Hi0/2KXO4AYOTCCdTjGxGUNsW8PEYyCfycQHvyoEFTSuQ/so0bFPPxxE/Ab56t9SrL5NZJS43kRNg6jeJGkeR80JpJtTbm3ilxeJu23idIQvd6whHkIWiJrRnoXfg7kLlsRIVRBChVQV4mV8md4nQZUwd565z/8W7bNfoD53isbciUdYBEeU3GFqPqMagS8DUQXYCKIEm8bEjRYmTknaHWS0hhSLe5SJC6iWJJ0Ek0TjhW/HxV0oCUqte5SoFiN5geAR9YRsv2ul517k6T/664dabB+IqhLKgPGByEBUyxEpCUUfNWeIGILfQlwGocBI4P4s2VgdQ8TbFkgsJrnrXtvxUSUkMzNgd3zLDzxS7gXxGnHud745EcQeEFSRykGx+9UZAIdpWiwbqPQxKvsA7kpUS9AOmJhdVjD3gJAIG8+TduYI5fiUEif4XoWGXToV2s+8TPP4wfHwaJDSI9n+E8o2BWqPVmabLeqdFKm2MMk2zHZ8hCoialwgnTkNkmOsRb0njNYIA7dHjyYtZp//OiZ6nJxdFXEel+/3VesgmUSbAZs2MVFB1JCxWxmLuBZJ93mS9jyEEWCJag00b5Df2EL8zuYpSv3U8zTmPztWeFgQVSUUnpDtT2i0mizJkXyE90oyPU/Ic3RUUT/xFZJOHfVDpNzAximqSnFrhfWrV/HFfU+fpEX7qReodT81McTCwsKu09ykYOcIJfjM72lSTXhZiRCKIWoUW5tCSkPIhmAMxphx6ahYZ7Rwg8233kLK/YWMaPoU0599YWIIgMuXL+9YJG7Mc+QLf051/jrZrR+Qr7yD791AyuH41akKZQF5hWQOzFFMOwI/3KNURanWbxPVO4irKNcWsEkDyTZxm7fJF5cpNzaQ6uAHYtI+TjI1eyiQtbW1vU8UE6XUZi5Qm7lAp+rhh8tki28gW/+JXbqBMxE+RLgyxfuC5uzTmOo9lL0WC1kf3+uhAdRvUCwtIWVGyAoIsi+R2i1u5ef0r71O99mXJwaZm5ubvGRarn0L13sNPyoJo4AbeUzjOM2jdcJocTs/13tp7bhtp7hhnKuz67veraLsGivbuXzt9Bc58cqfUpuwmnL9+vXJU92k+3uEoonPd+4Rt7VGNbCYuDmpmokkv/kT1v7rn7Yt92g5f/785MWHausqMtrCrWZUI0WNwZiKfGWDqZPTQMaD3OVAecBQBcTWSGafwHzcJVMNOTL4F6QqMAZscLheRTUQgu9juEjzU3Vw2SNX78sS78eFiMQecDs15pj/jW8y89xvwiGqjROBhOEPCdkv9+2iCQEdVkRpCuHgU0gV1I+LCTQM9TPTRGlK2XeMPtggiXdub68JJ1/5M7pPfXVigIlBxG/ih99Dw8F3Se3kCdLpgoN8RaRN/eTLJLPPkMy0CcU1yvWfUq2/j408UbeB3yqwqtD5NKdf/hM6Zy4eGmIykGoZcQenutiI1pljxI2CkO8HaT75DaYv/D47T41LNI5/Aze6w2DhXykH/4Dvldips5z63b+gcfTg4tskMtHxq1Lihj+nWv0x5e2fUSxfp1zdAtum+8VzRHYZcX7P8SvVFEdf+jtsOvVgvcEzXHybpDVHfe6Jx4aYGGQXEeIz3HCJ0cJrlDe/T+vJCNHh+O+BuyAukBz9A7rP/eFHWtxh5CP9q6tuSLX8Om7tPwjVLXy5gkqF6BxHvvY32LTzca71ofJ/5xaSb8SgBSAAAAAASUVORK5CYII=;" vertex="1" parent="QWqr_5V84EVE0ZFKT5Ey-1">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

After

Width:  |  Height:  |  Size: 151 KiB

View File

@ -93,13 +93,13 @@
<mxCell id="EWl4Vt8T4nABZOOH1jeO-39" value="request_pcd_keys_role_confidential_list_confidential" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxGeometry y="39.069621568610366" width="364.54" height="26.04641437907359" as="geometry" />
</mxCell>
<mxCell id="EWl4Vt8T4nABZOOH1jeO-43" value="public message encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxCell id="EWl4Vt8T4nABZOOH1jeO-43" value="public `Envelope` encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxGeometry y="118.83420747453961" width="364.54" height="26.04641437907359" as="geometry" />
</mxCell>
<mxCell id="EWl4Vt8T4nABZOOH1jeO-44" value="role confidential message&amp;nbsp;encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxCell id="EWl4Vt8T4nABZOOH1jeO-44" value="role confidential `Envelope` &amp;nbsp;encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxGeometry y="78.83412426369104" width="364.54" height="26.04641437907359" as="geometry" />
</mxCell>
<mxCell id="EWl4Vt8T4nABZOOH1jeO-45" value="private message&amp;nbsp;encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxCell id="EWl4Vt8T4nABZOOH1jeO-45" value="private `Envelope` &amp;nbsp;encrypted" style="rounded=0;whiteSpace=wrap;html=1;" parent="EWl4Vt8T4nABZOOH1jeO-95" vertex="1">
<mxGeometry y="160.81358562092643" width="364.54" height="26.04641437907359" as="geometry" />
</mxCell>
<mxCell id="EWl4Vt8T4nABZOOH1jeO-64" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" source="EWl4Vt8T4nABZOOH1jeO-63" edge="1">
@ -179,7 +179,7 @@
<mxCell id="yemit9cNDo4-WzanFIHK-4" value="" style="rounded=0;whiteSpace=wrap;html=1;strokeWidth=3;" vertex="1" parent="yemit9cNDo4-WzanFIHK-3">
<mxGeometry width="260" height="70" as="geometry" />
</mxCell>
<mxCell id="yemit9cNDo4-WzanFIHK-8" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="yemit9cNDo4-WzanFIHK-3">
<mxCell id="yemit9cNDo4-WzanFIHK-8" value="Envelope" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontStyle=1" vertex="1" parent="yemit9cNDo4-WzanFIHK-3">
<mxGeometry x="7.878787878787878" y="7" width="47.27272727272727" height="10.939534883720931" as="geometry" />
</mxCell>
<mxCell id="yemit9cNDo4-WzanFIHK-12" value="request_enc" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="yemit9cNDo4-WzanFIHK-3">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 103 KiB

After

Width:  |  Height:  |  Size: 103 KiB

View File

@ -7,7 +7,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-1" value="" style="strokeWidth=3;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;rotation=-180;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1365" y="193" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-2" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#dae8fc;strokeColor=#6c8ebf;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-2" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#dae8fc;strokeColor=#6c8ebf;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="826" y="825" as="sourcePoint" />
<Array as="points">
@ -52,7 +52,7 @@
<mxPoint x="1024" y="212" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-7" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-7" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="854" y="398" as="sourcePoint" />
<Array as="points">
@ -70,7 +70,7 @@
<mxPoint x="1024" y="418" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-9" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-9" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1034" y="399" as="sourcePoint" />
<Array as="points">
@ -79,7 +79,7 @@
<mxPoint x="1204" y="399" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-10" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-10" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1187" y="398" as="sourcePoint" />
<Array as="points">
@ -88,7 +88,7 @@
<mxPoint x="1357" y="398" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-11" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-11" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1185" y="442" as="sourcePoint" />
<Array as="points">
@ -128,7 +128,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-15" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;rotation=-180;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1366" y="353" width="141" height="181" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-16" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-16" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1005" y="194" as="sourcePoint" />
<Array as="points">
@ -169,7 +169,7 @@
<mxPoint x="455" y="155" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-22" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-22" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="465" y="194" as="sourcePoint" />
<Array as="points">
@ -178,7 +178,7 @@
<mxPoint x="635" y="194" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-23" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-23" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="645" y="153" as="sourcePoint" />
<Array as="points">
@ -316,7 +316,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-66" value="Prd" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="378" y="191" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-67" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-67" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="466" y="155" as="sourcePoint" />
<Array as="points">
@ -347,7 +347,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-70" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="365" y="217" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-71" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-71" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="467" y="233" as="sourcePoint" />
<Array as="points">
@ -357,7 +357,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-72" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-72" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="646" y="195" as="sourcePoint" />
<Array as="points">
@ -366,7 +366,7 @@
<mxPoint x="816" y="195" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-73" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-73" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="826" y="195" as="sourcePoint" />
<Array as="points">
@ -394,7 +394,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-76" value="Prd" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1380" y="195" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-77" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-77" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1186" y="194" as="sourcePoint" />
<Array as="points">
@ -511,7 +511,7 @@
<mxPoint x="633" y="284" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-106" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-106" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="645" y="399" as="sourcePoint" />
<Array as="points">
@ -520,7 +520,7 @@
<mxPoint x="815" y="399" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-107" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-107" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="1170" y="440" as="sourcePoint" />
<mxPoint x="1050" y="930" as="targetPoint" />
@ -588,7 +588,7 @@
<mxPoint x="45" y="102.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-121" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-121" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="462" y="399" as="sourcePoint" />
<Array as="points">
@ -609,7 +609,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-123" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="320" y="350" width="135" height="100" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-124" value="&lt;font&gt;Message&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-124" value="&lt;font&gt;Envelope&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" edge="1" parent="1">
<mxGeometry x="-0.826" y="22" relative="1" as="geometry">
<mxPoint x="645" y="230" as="sourcePoint" />
<mxPoint x="809" y="763.2258064516129" as="targetPoint" />
@ -647,7 +647,7 @@
<mxCell id="4H4CULAcT2h6mxbgRGbW-129" value="For all PrdResponse" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="1366" y="490" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-130" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-130" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="464" y="441" as="sourcePoint" />
<Array as="points">
@ -656,7 +656,7 @@
<mxPoint x="634" y="441" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-131" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-131" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="867" y="964" as="sourcePoint" />
<Array as="points">
@ -665,21 +665,21 @@
<mxPoint x="1037" y="964" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-132" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-132" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry x="0.3456" y="-5" relative="1" as="geometry">
<mxPoint x="647" y="440" as="sourcePoint" />
<mxPoint x="812" y="955" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-133" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-133" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="-0.8175" y="-21" relative="1" as="geometry">
<mxPoint x="1174" y="236" as="sourcePoint" />
<mxPoint x="1020" y="780" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="4H4CULAcT2h6mxbgRGbW-134" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="4H4CULAcT2h6mxbgRGbW-134" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1185" y="235.5" as="sourcePoint" />
<Array as="points">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 295 KiB

After

Width:  |  Height:  |  Size: 294 KiB

View File

@ -34,7 +34,7 @@
<mxPoint x="1014" y="255" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="237" as="sourcePoint" />
<Array as="points">
@ -75,7 +75,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="237" as="sourcePoint" />
<Array as="points">
@ -84,7 +84,7 @@
<mxPoint x="625" y="237" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -222,7 +222,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="PrdConfrm" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="351.5" y="225" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -253,7 +253,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-201" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="355" y="260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="457" y="276" as="sourcePoint" />
<Array as="points">
@ -263,7 +263,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="238" as="sourcePoint" />
<Array as="points">
@ -272,7 +272,7 @@
<mxPoint x="806" y="238" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="238" as="sourcePoint" />
<Array as="points">
@ -300,7 +300,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="PrdConfrm" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1380" y="221.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="237" as="sourcePoint" />
<Array as="points">
@ -438,7 +438,7 @@
<mxPoint x="45" y="102.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Message&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Envelope&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxGeometry x="-0.826" y="22" relative="1" as="geometry">
<mxPoint x="635" y="272" as="sourcePoint" />
<mxPoint x="799" y="805.2258064516129" as="targetPoint" />
@ -459,7 +459,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="5sHLhDU_XnkWcBYlhPqW-7" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="5sHLhDU_XnkWcBYlhPqW-7" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="854.5" as="sourcePoint" />
<Array as="points">
@ -469,7 +469,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="5sHLhDU_XnkWcBYlhPqW-8" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="5sHLhDU_XnkWcBYlhPqW-8" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1175" y="274.5" as="sourcePoint" />
<Array as="points">
@ -479,7 +479,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="5sHLhDU_XnkWcBYlhPqW-10" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="5sHLhDU_XnkWcBYlhPqW-10" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="0.4123" y="20" relative="1" as="geometry">
<mxPoint x="1164" y="273" as="sourcePoint" />
<mxPoint x="998" y="863" as="targetPoint" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 224 KiB

After

Width:  |  Height:  |  Size: 224 KiB

View File

@ -219,7 +219,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-11" value="Adresse de l&#39;utilisateur" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxCell id="ciDpwXPfI_i4saoGPbpC-11" value="Adresse de l&#39;`User`" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="236.09876041666666" y="10" width="147.8575" height="36.408" as="geometry" />
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ciDpwXPfI_i4saoGPbpC-39" target="ciDpwXPfI_i4saoGPbpC-45" edge="1">
@ -233,13 +233,13 @@
<mxCell id="ciDpwXPfI_i4saoGPbpC-56" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ciDpwXPfI_i4saoGPbpC-44" target="ciDpwXPfI_i4saoGPbpC-53" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-44" value="Message du PRD" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxCell id="ciDpwXPfI_i4saoGPbpC-44" value="Envelope du PRD" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="10" y="558.6426742876902" width="147.85714285714283" height="36.080535117532975" as="geometry" />
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ciDpwXPfI_i4saoGPbpC-45" target="ciDpwXPfI_i4saoGPbpC-54" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-45" value="Message du PRDMessage" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxCell id="ciDpwXPfI_i4saoGPbpC-45" value="Envelope du PRDMessage" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
<mxGeometry x="552.1428571428571" y="558.6396945022028" width="147.85714285714283" height="36.080535117532975" as="geometry" />
</mxCell>
<mxCell id="ciDpwXPfI_i4saoGPbpC-59" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="ciDpwXPfI_i4saoGPbpC-53" target="s9p4VKi4Rz1OL5Ugs_63-20" edge="1">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 206 KiB

After

Width:  |  Height:  |  Size: 187 KiB

BIN
doc/diagrams/PRDFlows.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 91 KiB

View File

@ -4,7 +4,7 @@
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-5" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-5" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="815" as="sourcePoint" />
<Array as="points">
@ -58,7 +58,7 @@
<mxPoint x="1014" y="372" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-240" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-240" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="845" y="354" as="sourcePoint" />
<Array as="points">
@ -67,7 +67,7 @@
<mxPoint x="1015" y="354" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="844" y="388" as="sourcePoint" />
<Array as="points">
@ -103,7 +103,7 @@
<mxPoint x="1346" y="371" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-230" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-230" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1025" y="355" as="sourcePoint" />
<Array as="points">
@ -112,7 +112,7 @@
<mxPoint x="1195" y="355" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1024" y="389" as="sourcePoint" />
<Array as="points">
@ -121,7 +121,7 @@
<mxPoint x="1194" y="389" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-226" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-226" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1178" y="354" as="sourcePoint" />
<Array as="points">
@ -130,7 +130,7 @@
<mxPoint x="1348" y="354" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1177" y="388" as="sourcePoint" />
<Array as="points">
@ -139,7 +139,7 @@
<mxPoint x="1347" y="388" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1175" y="432" as="sourcePoint" />
<Array as="points">
@ -179,7 +179,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-218" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;rotation=-180;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1356" y="343" width="141" height="181" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="184" as="sourcePoint" />
<Array as="points">
@ -220,7 +220,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="184" as="sourcePoint" />
<Array as="points">
@ -229,7 +229,7 @@
<mxPoint x="625" y="184" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -367,7 +367,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="PrdList" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="368" y="181" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -398,7 +398,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-201" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="355" y="207" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="457" y="223" as="sourcePoint" />
<Array as="points">
@ -408,7 +408,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="185" as="sourcePoint" />
<Array as="points">
@ -417,7 +417,7 @@
<mxPoint x="806" y="185" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="185" as="sourcePoint" />
<Array as="points">
@ -448,7 +448,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-213" value="" style="strokeWidth=3;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;rotation=-180;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1355" y="183" width="140" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="184" as="sourcePoint" />
<Array as="points">
@ -568,7 +568,7 @@
<mxPoint x="623" y="274" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-261" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-261" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="355" as="sourcePoint" />
<Array as="points">
@ -577,7 +577,7 @@
<mxPoint x="806" y="355" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="389" as="sourcePoint" />
<Array as="points">
@ -586,7 +586,7 @@
<mxPoint x="805" y="389" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="1160" y="430" as="sourcePoint" />
<mxPoint x="1040" y="920" as="targetPoint" />
@ -654,7 +654,7 @@
<mxPoint x="45" y="102.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-282" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-282" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="453" y="355" as="sourcePoint" />
<Array as="points">
@ -663,7 +663,7 @@
<mxPoint x="623" y="355" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="452" y="389" as="sourcePoint" />
<Array as="points">
@ -687,7 +687,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-286" value="request_pcd_control" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="348.5" y="341" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Message&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Envelope&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxGeometry x="-0.826" y="22" relative="1" as="geometry">
<mxPoint x="635" y="220" as="sourcePoint" />
<mxPoint x="799" y="753.2258064516129" as="targetPoint" />
@ -725,7 +725,7 @@
<mxCell id="gRgV6U-9A3pBv8uaxwwX-1" value="For all PrdResponse" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="1356" y="480" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-1" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-1" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="454" y="431" as="sourcePoint" />
<Array as="points">
@ -734,7 +734,7 @@
<mxPoint x="624" y="431" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-2" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-2" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="857" y="954" as="sourcePoint" />
<Array as="points">
@ -743,21 +743,21 @@
<mxPoint x="1027" y="954" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-3" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-3" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry x="0.3456" y="-5" relative="1" as="geometry">
<mxPoint x="637" y="430" as="sourcePoint" />
<mxPoint x="802" y="945" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-4" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-4" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxGeometry x="-0.8175" y="-21" relative="1" as="geometry">
<mxPoint x="1164" y="226" as="sourcePoint" />
<mxPoint x="1010" y="770" as="targetPoint" />
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-6" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxCell id="Kv8L5Ez7j4jW42ffpjnB-6" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1175" y="225.5" as="sourcePoint" />
<Array as="points">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 310 KiB

After

Width:  |  Height:  |  Size: 309 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 104 KiB

View File

@ -46,7 +46,7 @@
<mxPoint x="1014" y="255" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="844" y="431" as="sourcePoint" />
<Array as="points">
@ -64,7 +64,7 @@
<mxPoint x="1014" y="451" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1024" y="432" as="sourcePoint" />
<Array as="points">
@ -73,7 +73,7 @@
<mxPoint x="1194" y="432" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1177" y="431" as="sourcePoint" />
<Array as="points">
@ -82,7 +82,7 @@
<mxPoint x="1347" y="431" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1175" y="475" as="sourcePoint" />
<Array as="points">
@ -122,7 +122,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-218" value="" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.annotation_1;align=left;pointerEvents=1;rotation=-180;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1356" y="406" width="127" height="114" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="237" as="sourcePoint" />
<Array as="points">
@ -163,7 +163,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="237" as="sourcePoint" />
<Array as="points">
@ -172,7 +172,7 @@
<mxPoint x="625" y="237" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -310,7 +310,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" vertex="1" parent="1">
<mxGeometry x="351.5" y="225" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -341,7 +341,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-201" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="355" y="260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="457" y="276" as="sourcePoint" />
<Array as="points">
@ -351,7 +351,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="238" as="sourcePoint" />
<Array as="points">
@ -360,7 +360,7 @@
<mxPoint x="806" y="238" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="238" as="sourcePoint" />
<Array as="points">
@ -388,7 +388,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1380" y="221.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="237" as="sourcePoint" />
<Array as="points">
@ -505,7 +505,7 @@
<mxPoint x="623" y="327" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="432" as="sourcePoint" />
<Array as="points">
@ -514,7 +514,7 @@
<mxPoint x="805" y="432" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="1160" y="473" as="sourcePoint" />
<mxPoint x="1040" y="963" as="targetPoint" />
@ -582,7 +582,7 @@
<mxPoint x="45" y="102.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="452" y="432" as="sourcePoint" />
<Array as="points">
@ -600,7 +600,7 @@
<mxPoint x="623" y="456" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Message&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Envelope&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" edge="1" parent="1">
<mxGeometry x="-0.826" y="22" relative="1" as="geometry">
<mxPoint x="635" y="272" as="sourcePoint" />
<mxPoint x="799" y="805.2258064516129" as="targetPoint" />
@ -654,7 +654,7 @@
<mxPoint x="1700" y="219" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-327" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-327" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="0.15" y="-10" relative="1" as="geometry">
<mxPoint x="1523" y="430" as="sourcePoint" />
<Array as="points">
@ -664,7 +664,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-328" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-328" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="-0.1538" y="-8" relative="1" as="geometry">
<mxPoint x="1702" y="428" as="sourcePoint" />
<Array as="points">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 KiB

After

Width:  |  Height:  |  Size: 292 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 KiB

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -269,7 +269,7 @@
<mxCell id="Jbry3jnCOe730K93ba73-98" value="" style="group" parent="1" vertex="1" connectable="0">
<mxGeometry x="160" y="-756.66" width="177.47" height="33.33" as="geometry" />
</mxCell>
<mxCell id="Jbry3jnCOe730K93ba73-99" value="MessageReceived" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="Jbry3jnCOe730K93ba73-98" vertex="1">
<mxCell id="Jbry3jnCOe730K93ba73-99" value="EnvelopeReceived" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=1" parent="Jbry3jnCOe730K93ba73-98" vertex="1">
<mxGeometry width="177.46999999999997" height="33.329999999999956" as="geometry" />
</mxCell>
<mxCell id="Jbry3jnCOe730K93ba73-100" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADIAAAAqCAYAAADxughHAAAABHNCSVQICAgIfAhkiAAAABl0RVh0U29mdHdhcmUAZ25vbWUtc2NyZWVuc2hvdO8Dvz4AAAAodEVYdENyZWF0aW9uIFRpbWUAc2FtLiAyMyBtYXJzIDIwMjQgMTA6MjI6MDkm/a5DAAAKqUlEQVRogdWZy4+cx3HAf93fY147s7O7fHj5EGWTVCxRskGZhu3YiKQEiBLEUE4BnEtyyiF3nwPlEARIkD8gPiSXADHiBAGcQyCEdizQjhyElhxLckQx8pqkdpfLfc7re3V3VQ6z5O5yl+QsJR1SQGMw043q/nVVdXfVmFdffVVfeOEFXnzxRf4/i1FV/aQn8fkC1cZ3EfsUtc6z2HSGKG6BMR/bHJ88iCq+912q/hWkzPElYI5A7Szp3JdpdM9hjP3I03ziIFIt4nrfIeS3kDInlBlSZIQyQwuHtM/TOv3b1KY/T5TOYqPGY1kqftwFVoOfIpWQdH6FKGkdPEgFcTdQWTu43whpvEq48y36tww2/QxR82mS6YvUZi9gk8bE63kMiyjF1hXc6ncIeY/gm9jOS0w/+Qo2SsFEOyPDANf/R8T9L1IU+yxC5ajNn6LauIF6A14Rr2hQtPGrHP+1VzF2sr0+lEU05JT9H+J7/w6hAANWN5G1v2d18dsk7WdJZy9RO3IOExWoX0Klj4Q63hfcHwnx7Cl8bx0tDeJAvaIeXGnpnP0aZtemfHwgGih6P0CzK2jo7+u2tiBsvUFlbhDVTpJOfw4TKbbeJk4SknqLbH1lB8jExLU6+WqOesaWcKBOiVoXqB977lCxMhGIhBFu9DrG/RiV/AGjLMmR0yTtQBi+h7c14vb5cZcxWGuZmuviWwnZ2iqWkmL5Q6QQNCjiFPWC+ITmuS+RTs9PDDERiMqQULwG7h2Q6gGDLPWTzxBxC6lyNEC19g42ncWmU4gIYTSkWF9Ehxv4PEcrh1QB9WOXEieIF6gfo3n6K4c+kicA8fhyFZ8vYamjct+AqEbt+DxGbyK+Qr0ZB6s4iqU30Wia0F9B8yESBK0UDWHsSvcAFHWCuEDUOU599vShIK5evbov/vaJjbtE9a8SW0GKm0i5hM83caXDRDXS6Vms3gHvwQPBoB5wih+s49c+QLIBwQtajXddHIgLhCoglaBlQEqPG4wobv6M/vUrqIZDwUwUI2nzOYabX8Kt/TOEDAAFXPMkSatEyxIVRYNBvYAHle1TyMkYLOg2xDgW1CniA1oFxAuhcIgLaHab/n//Jab+I2ztIvXuRWzSxUbNhwb/xKdWY+7r5AtXKJd/gWF89Zj0Fkl0ljitIaFARSHoGMrLuIkg4W4gh3vupC6MP33YjpUdC4w+WKZx4j2aT2wyuvlvwBwmPUfS/TKNmc8cuL6JI8qXSyRdwc40KEpLcacku7HB4P0VgmuAKHgZx4EPaBA0CGEbQERQARNbTGxRVTR4xHtUArBzL4tzrL9xDXUllhLN3qf88Nts/OiPWfr+Xx24voksouIIo8touUHSMNj5Gq4T4bYco5UVkqPHqHdTVDJU5F6TEEAM1sSIKPUTNbDgNiswMbYZocFR3tncAwLg+xkr33uX5hNHyD9cp7jdo7wzoPnML+HXHxPEZ+8SBm+iuyaz1hA3Y4wRTLMOvkRFQAOIoCGgClIYBu+vkH04oHVmis7nZhAnRNMRUcPiRwlStKnWe/vmzRZuM7y+vH3jj13xQfJIEPEj/PAyEkYH9kftGdJajlYVqgERRVXARBSLBb137uCHJcSG0a0RPvccfekEyXQN13NghKhdx/YzxJeT7OuB8sgYCdU1pPyfB/bXj8xi7GC8+G2DGZPSfzdj880lxHvidkLaSUnbCQQY/WKAVOPg1iCoVaJO+7Eh4BEW0TBCy59A2G92gKgxRdxOIazf+80oDK73Gd1aI27FmMRiE4OJLTa12Nji1kpsepK4ZYnqA8Joiyzb/36bVC5duvQQEBV8cY2QvYWqPxik1SFpCGHk7v0WcnC9grgVESUWs93sLiApIaq3sXFAyhwxgDzY/yeRHRANhGoLqe5QDd9DireJkiFq2kh0CuINMBlQjMcbQ2N+Hi0/2KXO4AYOTCCdTjGxGUNsW8PEYyCfycQHvyoEFTSuQ/so0bFPPxxE/Ab56t9SrL5NZJS43kRNg6jeJGkeR80JpJtTbm3ilxeJu23idIQvd6whHkIWiJrRnoXfg7kLlsRIVRBChVQV4mV8md4nQZUwd565z/8W7bNfoD53isbciUdYBEeU3GFqPqMagS8DUQXYCKIEm8bEjRYmTknaHWS0hhSLe5SJC6iWJJ0Ek0TjhW/HxV0oCUqte5SoFiN5geAR9YRsv2ul517k6T/664dabB+IqhLKgPGByEBUyxEpCUUfNWeIGILfQlwGocBI4P4s2VgdQ8TbFkgsJrnrXtvxUSUkMzNgd3zLDzxS7gXxGnHud745EcQeEFSRykGx+9UZAIdpWiwbqPQxKvsA7kpUS9AOmJhdVjD3gJAIG8+TduYI5fiUEif4XoWGXToV2s+8TPP4wfHwaJDSI9n+E8o2BWqPVmabLeqdFKm2MMk2zHZ8hCoialwgnTkNkmOsRb0njNYIA7dHjyYtZp//OiZ6nJxdFXEel+/3VesgmUSbAZs2MVFB1JCxWxmLuBZJ93mS9jyEEWCJag00b5Df2EL8zuYpSv3U8zTmPztWeFgQVSUUnpDtT2i0mizJkXyE90oyPU/Ic3RUUT/xFZJOHfVDpNzAximqSnFrhfWrV/HFfU+fpEX7qReodT81McTCwsKu09ykYOcIJfjM72lSTXhZiRCKIWoUW5tCSkPIhmAMxphx6ahYZ7Rwg8233kLK/YWMaPoU0599YWIIgMuXL+9YJG7Mc+QLf051/jrZrR+Qr7yD791AyuH41akKZQF5hWQOzFFMOwI/3KNURanWbxPVO4irKNcWsEkDyTZxm7fJF5cpNzaQ6uAHYtI+TjI1eyiQtbW1vU8UE6XUZi5Qm7lAp+rhh8tki28gW/+JXbqBMxE+RLgyxfuC5uzTmOo9lL0WC1kf3+uhAdRvUCwtIWVGyAoIsi+R2i1u5ef0r71O99mXJwaZm5ubvGRarn0L13sNPyoJo4AbeUzjOM2jdcJocTs/13tp7bhtp7hhnKuz67veraLsGivbuXzt9Bc58cqfUpuwmnL9+vXJU92k+3uEoonPd+4Rt7VGNbCYuDmpmokkv/kT1v7rn7Yt92g5f/785MWHausqMtrCrWZUI0WNwZiKfGWDqZPTQMaD3OVAecBQBcTWSGafwHzcJVMNOTL4F6QqMAZscLheRTUQgu9juEjzU3Vw2SNX78sS78eFiMQecDs15pj/jW8y89xvwiGqjROBhOEPCdkv9+2iCQEdVkRpCuHgU0gV1I+LCTQM9TPTRGlK2XeMPtggiXdub68JJ1/5M7pPfXVigIlBxG/ih99Dw8F3Se3kCdLpgoN8RaRN/eTLJLPPkMy0CcU1yvWfUq2/j408UbeB3yqwqtD5NKdf/hM6Zy4eGmIykGoZcQenutiI1pljxI2CkO8HaT75DaYv/D47T41LNI5/Aze6w2DhXykH/4Dvldips5z63b+gcfTg4tskMtHxq1Lihj+nWv0x5e2fUSxfp1zdAtum+8VzRHYZcX7P8SvVFEdf+jtsOvVgvcEzXHybpDVHfe6Jx4aYGGQXEeIz3HCJ0cJrlDe/T+vJCNHh+O+BuyAukBz9A7rP/eFHWtxh5CP9q6tuSLX8Om7tPwjVLXy5gkqF6BxHvvY32LTzca71ofJ/5xaSb8SgBSAAAAAASUVORK5CYII=;" parent="Jbry3jnCOe730K93ba73-98" vertex="1">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 144 KiB

After

Width:  |  Height:  |  Size: 144 KiB

View File

@ -4,7 +4,7 @@
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="O_mGtg6zuvl_ijSUyIl5-33" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-33" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1165" y="187" as="sourcePoint" />
<Array as="points">
@ -13,7 +13,7 @@
<mxPoint x="995" y="187" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-31" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-31" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="985" y="187" as="sourcePoint" />
<Array as="points">
@ -31,7 +31,7 @@
<mxPoint x="815" y="207" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-29" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-29" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="186.5" as="sourcePoint" />
<Array as="points">
@ -90,7 +90,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -222,7 +222,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-192" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-191" vertex="1">
<mxGeometry x="45" y="100" width="10" height="170" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -316,7 +316,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-164" value="" style="html=1;points=[];perimeter=orthogonalPerimeter;outlineConnect=0;targetShapes=umlLifeline;portConstraint=eastwest;newEdgeStyle={&quot;edgeStyle&quot;:&quot;elbowEdgeStyle&quot;,&quot;elbow&quot;:&quot;vertical&quot;,&quot;curved&quot;:0,&quot;rounded&quot;:0};fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-163" vertex="1">
<mxGeometry x="45" y="70" width="10" height="322.02" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="636" y="230" as="sourcePoint" />
<mxPoint x="800" y="960" as="targetPoint" />
@ -415,7 +415,7 @@
<mxCell id="O_mGtg6zuvl_ijSUyIl5-23" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="355" y="211" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-24" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-24" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="625" y="185" as="sourcePoint" />
<Array as="points">
@ -424,7 +424,7 @@
<mxPoint x="455" y="185" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-25" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-25" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="623" y="229" as="sourcePoint" />
<Array as="points">
@ -462,7 +462,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-34" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-34" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1343" y="187" as="sourcePoint" />
<Array as="points">
@ -493,7 +493,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-38" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-38" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="799" y="976" as="sourcePoint" />
<mxPoint x="635" y="246" as="targetPoint" />
@ -512,7 +512,7 @@
<mxPoint x="-16" y="7" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="c4ftL5yiTXNnr7oMlEhi-1" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="c4ftL5yiTXNnr7oMlEhi-1" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1345" y="233" as="sourcePoint" />
<Array as="points">
@ -521,7 +521,7 @@
<mxPoint x="1175" y="233" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="c4ftL5yiTXNnr7oMlEhi-2" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="c4ftL5yiTXNnr7oMlEhi-2" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1028" y="999" as="sourcePoint" />
<Array as="points">
@ -530,7 +530,7 @@
<mxPoint x="858" y="999" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="c4ftL5yiTXNnr7oMlEhi-3" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxCell id="c4ftL5yiTXNnr7oMlEhi-3" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;elbow=vertical;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" edge="1" parent="1">
<mxGeometry x="-0.8559" y="-24" relative="1" as="geometry">
<mxPoint x="1166" y="232" as="sourcePoint" />
<mxPoint x="1046" y="1017" as="targetPoint" />

Binary file not shown.

Before

Width:  |  Height:  |  Size: 252 KiB

After

Width:  |  Height:  |  Size: 251 KiB

View File

@ -43,7 +43,7 @@
<mxPoint x="1014" y="255" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-241" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="844" y="431" as="sourcePoint" />
<Array as="points">
@ -70,7 +70,7 @@
<mxPoint x="457" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-231" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1024" y="432" as="sourcePoint" />
<Array as="points">
@ -79,7 +79,7 @@
<mxPoint x="1194" y="432" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-226" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-226" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="625" y="189.5" as="sourcePoint" />
<Array as="points">
@ -88,7 +88,7 @@
<mxPoint x="455" y="189.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-227" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1177" y="431" as="sourcePoint" />
<Array as="points">
@ -97,7 +97,7 @@
<mxPoint x="1347" y="431" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-228" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1175" y="475" as="sourcePoint" />
<Array as="points">
@ -134,7 +134,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-208" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="995" y="237" as="sourcePoint" />
<Array as="points">
@ -175,7 +175,7 @@
<mxPoint x="445" y="145" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-12" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="455" y="237" as="sourcePoint" />
<Array as="points">
@ -184,7 +184,7 @@
<mxPoint x="625" y="237" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-18" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="143" as="sourcePoint" />
<Array as="points">
@ -322,7 +322,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-194" value="PrdUpdate" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;fontColor=#000000;fontStyle=1" parent="1" vertex="1">
<mxGeometry x="351.5" y="225" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="MessageConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-195" value="EnvelopeConnect" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=horizontal;curved=0;rounded=0;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="456" y="145" as="sourcePoint" />
<Array as="points">
@ -353,7 +353,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-201" value="PrdMessage" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="355" y="260" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-202" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="457" y="276" as="sourcePoint" />
<Array as="points">
@ -363,7 +363,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-203" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="636" y="238" as="sourcePoint" />
<Array as="points">
@ -372,7 +372,7 @@
<mxPoint x="806" y="238" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-204" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="816" y="238" as="sourcePoint" />
<Array as="points">
@ -400,7 +400,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-212" value="PrdUpdate" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1380" y="221.5" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-215" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;fillColor=#dae8fc;strokeColor=#6c8ebf;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1176" y="237" as="sourcePoint" />
<Array as="points">
@ -490,7 +490,7 @@
<mxPoint x="-125" y="165.46341463414635" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-295" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-295" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="MqokN8DVP6Cu9g1BAX3J-219" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="46" y="147.46341463414635" as="sourcePoint" />
<Array as="points">
@ -535,7 +535,7 @@
<mxPoint x="623" y="327" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-261" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-261" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1160" y="190" as="sourcePoint" />
<Array as="points">
@ -544,7 +544,7 @@
<mxPoint x="1026" y="190" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-262" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="635" y="432" as="sourcePoint" />
<Array as="points">
@ -553,7 +553,7 @@
<mxPoint x="805" y="432" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Message" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-256" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=classic;elbow=vertical;rounded=0;startArrow=none;startFill=0;endFill=1;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry x="-0.8562" y="-22" relative="1" as="geometry">
<mxPoint x="1160" y="473" as="sourcePoint" />
<mxPoint x="1040" y="963" as="targetPoint" />
@ -621,7 +621,7 @@
<mxPoint x="45" y="102.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-283" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="452" y="432" as="sourcePoint" />
<Array as="points">
@ -642,7 +642,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-286" value="request_pcd_control" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;strokeWidth=3;" parent="1" vertex="1">
<mxGeometry x="1382.5" y="182" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Message&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-199" value="&lt;font&gt;Envelope&lt;/font&gt;" style="html=1;verticalAlign=bottom;endArrow=block;elbow=vertical;rounded=0;strokeColor=#6c8ebf;fontColor=#000000;fillColor=#dae8fc;" parent="1" edge="1">
<mxGeometry x="-0.826" y="22" relative="1" as="geometry">
<mxPoint x="635" y="272" as="sourcePoint" />
<mxPoint x="799" y="805.2258064516129" as="targetPoint" />
@ -684,7 +684,7 @@
<mxPoint x="636" y="210" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-293" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-293" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="805" y="191" as="sourcePoint" />
<Array as="points">
@ -693,7 +693,7 @@
<mxPoint x="635" y="191" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-296" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-296" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fillColor=#d5e8d4;strokeColor=#82b366;strokeWidth=3;fontColor=#000000;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1345" y="190" as="sourcePoint" />
<Array as="points">
@ -729,7 +729,7 @@
<mxCell id="MqokN8DVP6Cu9g1BAX3J-306" value="to Role Member n" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="1400" y="663" width="116" height="30" as="geometry" />
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-307" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-307" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1173" y="571" as="sourcePoint" />
<Array as="points">
@ -738,7 +738,7 @@
<mxPoint x="1343" y="571" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-308" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-308" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1171" y="615" as="sourcePoint" />
<Array as="points">
@ -776,7 +776,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-317" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-317" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;strokeWidth=3;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1181" y="703" as="sourcePoint" />
<Array as="points">
@ -785,7 +785,7 @@
<mxPoint x="1351" y="703" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="MqokN8DVP6Cu9g1BAX3J-318" value="Message" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxCell id="MqokN8DVP6Cu9g1BAX3J-318" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=none;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;startArrow=classic;startFill=1;endFill=0;fontColor=#000000;fillColor=#ffe6cc;strokeColor=#d79b00;" parent="1" edge="1">
<mxGeometry relative="1" as="geometry">
<mxPoint x="1179" y="747" as="sourcePoint" />
<Array as="points">
@ -874,7 +874,7 @@
<mxPoint x="1700" y="219" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-15" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-15" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="0.15" y="-10" relative="1" as="geometry">
<mxPoint x="1523" y="430" as="sourcePoint" />
<Array as="points">
@ -884,7 +884,7 @@
<mxPoint as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="O_mGtg6zuvl_ijSUyIl5-16" value="Message" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxCell id="O_mGtg6zuvl_ijSUyIl5-16" value="Envelope" style="html=1;verticalAlign=bottom;endArrow=block;edgeStyle=elbowEdgeStyle;elbow=vertical;curved=0;rounded=0;strokeWidth=1;fontColor=#000000;" edge="1" parent="1">
<mxGeometry x="-0.1538" y="-8" relative="1" as="geometry">
<mxPoint x="1702" y="428" as="sourcePoint" />
<Array as="points">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 344 KiB

After

Width:  |  Height:  |  Size: 342 KiB

View File

@ -1,235 +0,0 @@
<mxfile host="Electron" modified="2024-03-22T09:54:50.098Z" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/24.0.4 Chrome/120.0.6099.109 Electron/28.1.0 Safari/537.36" etag="bF1qtUoEI3HlmtZUC3LD" version="24.0.4" type="device">
<diagram name="Page-1" id="YFU88z1AKIvbP_flAnI-">
<mxGraphModel dx="2261" dy="870" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="sOf1Y_lK73M2jFJ28PwK-1" value="Site 1" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="9" y="160" width="401" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-4" value="Stripe" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="11.11" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-5" value="Paypall" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="79.42325301204819" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-6" value="&lt;b&gt;Word&lt;/b&gt;Line" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="147.7365060240964" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-15" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="216.04975903614456" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-43" value="User 1" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="9" y="120" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-44" value="User 2" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="77.31" y="120" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-45" value="User 3" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="145.63" y="120" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-47" value="User 4" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="213.94" y="120" width="56.06" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-56" value="clearing" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="9" y="640" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-57" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="9" y="600" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-58" value="clearing" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="77.31" y="640" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-59" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="77.31" y="600" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-60" value="clearing" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="145.63" y="640" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-61" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="145.63" y="600" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-62" value="clearing" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="213.94" y="640" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-63" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="213.94" y="600" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-66" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="9" y="110" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-69" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="9" y="160" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-71" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="77.31" y="110" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-72" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="145.63" y="110" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-73" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="213.94" y="110" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-82" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="11.11" y="251" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-83" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="79.42" y="251" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-84" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="146.74" y="251" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-97" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="9.10975903614461" y="421" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-98" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="9.11" y="411" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-99" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="77.41975903614461" y="421" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-100" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="77.42" y="411" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-101" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="145.73975903614462" y="421" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-102" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="145.74" y="411" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-103" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="214.04975903614462" y="421" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-104" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="214.05" y="411" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-105" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="9.11" y="560" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-106" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="77.42" y="560" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-107" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="145.74" y="560" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-108" value="settlment" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="214.05" y="560" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-109" value="&lt;strong&gt;Titulaire de la carte&lt;br&gt;&lt;/strong&gt;Crédit ou de débit&amp;nbsp;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-250" y="115" width="140" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-110" value="&lt;strong&gt;Entreprise&lt;/strong&gt;&lt;div&gt;Biens ou les services achetés&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;&lt;/div&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-250" y="158" width="220" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-111" value="&lt;strong&gt;Banque Acquéreur&lt;br&gt;&lt;/strong&gt;Compte marchand&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-249.89" y="207" width="150" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-112" value="&lt;strong&gt;Prestataire de services de paiement&lt;br&gt;&lt;/strong&gt;intermédiaires avec les émetteurs de cartes&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-247.89" y="254" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-113" value="&lt;strong&gt;Réseau de cartes&lt;br&gt;&lt;/strong&gt;Emettrices de cartes bancaires&amp;nbsp;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-247.89" y="298" width="230" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-114" value="&lt;b&gt;Émetteur&lt;/b&gt;&lt;br&gt;Banque qui&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;libnes de crédit ou de débit" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-249.89" y="411" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-119" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="9.10975903614461" y="211" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-120" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="9.11" y="201" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-121" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="77.41975903614461" y="211" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-122" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="77.42" y="201" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-123" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="145.73975903614462" y="211" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-124" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="145.74" y="201" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-125" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="214.04975903614462" y="211" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-126" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="214.05" y="201" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-161" value="User 4" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="280.94" y="120" width="59.06" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-162" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="280.94" y="110" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-163" value="&lt;span&gt;PSAN&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="284.2797590361446" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-164" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="283.83000000000004" y="251" width="39.51" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-167" value="&lt;span&gt;BTC&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="354.55975903614456" y="261" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-173" value="User 4" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="350" y="120" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-175" value="Visa" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="11.109999999999998" y="306" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-176" value="MasterCard" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="81.42" y="306" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-177" value="CB" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="150.5" y="306" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-180" value="&lt;span&gt;Bank&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="217.99975903614455" y="306" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-182" value="&lt;b&gt;Adresse cryto&lt;/b&gt;&lt;br&gt;Capacité de signer une dépense" style="text;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="-249.89" y="511" width="240" height="40" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-183" value="User 4" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="354.11" y="521" width="58.55421686746988" height="30" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-185" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="78" y="160" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-186" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="146" y="160" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-187" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="214" y="160" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-188" value="AML" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" vertex="1" parent="1">
<mxGeometry x="281" y="160" width="34.61" height="20" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-189" value="&lt;span&gt;Bank OK code Confirm&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="9.11" y="464" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-190" value="&lt;span&gt;Bank OK code Confirm&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="77.43" y="464" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-191" value="&lt;span&gt;Bank OK code Confirm&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="145.74" y="464" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-192" value="&lt;span&gt;Bank OK code Confirm&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="216" y="464" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-194" value="&lt;span&gt;Card OK code Confirm&lt;/span&gt;" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="9.11" y="350" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-195" value="Card OK code Confirm" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="77.43" y="350" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-196" value="Card OK code Confirm" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="145.74" y="350" width="58.55" height="50" as="geometry" />
</mxCell>
<mxCell id="sOf1Y_lK73M2jFJ28PwK-197" value="Card OK code Confirm" style="rounded=0;whiteSpace=wrap;html=1;fontStyle=0" vertex="1" parent="1">
<mxGeometry x="216" y="350" width="58.55" height="50" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@ -111,7 +111,7 @@
<mxPoint y="-4" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="6a6loub5tqMvz2bz5KWf-81" value="message_hash exist ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxCell id="6a6loub5tqMvz2bz5KWf-81" value="envelope_hash exist ?" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="943" y="182.99999999999994" width="120" height="51" as="geometry" />
</mxCell>
<mxCell id="6a6loub5tqMvz2bz5KWf-84" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" parent="1" source="6a6loub5tqMvz2bz5KWf-83" target="6a6loub5tqMvz2bz5KWf-80" edge="1">
@ -301,10 +301,10 @@
<mxCell id="8eLAWt_BJWfjOTXwqVQD-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="8eLAWt_BJWfjOTXwqVQD-21" target="6a6loub5tqMvz2bz5KWf-50" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="mDG2ZNKopAYwXFdDZ8fO-1" value="message" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="mDG2ZNKopAYwXFdDZ8fO-1" value="Envelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="923.75" y="2.842170943040401e-14" width="158" height="28.9" as="geometry" />
</mxCell>
<mxCell id="mDG2ZNKopAYwXFdDZ8fO-2" value="message" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="mDG2ZNKopAYwXFdDZ8fO-2" value="Envelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1202" y="800" width="158" height="28.9" as="geometry" />
</mxCell>
</root>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 122 KiB

After

Width:  |  Height:  |  Size: 122 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 81 KiB

View File

@ -16,13 +16,13 @@
<mxCell id="vgbR90Qxcx-sTvoote5e-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" source="vgbR90Qxcx-sTvoote5e-4" target="vgbR90Qxcx-sTvoote5e-5" edge="1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vgbR90Qxcx-sTvoote5e-4" value="MessageConnect" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxCell id="vgbR90Qxcx-sTvoote5e-4" value="EnvelopeConnect" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="990" y="185" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="Rs4bW3xzFFLv7pWNUvat-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;" edge="1" parent="1" source="vgbR90Qxcx-sTvoote5e-5" target="Rs4bW3xzFFLv7pWNUvat-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="vgbR90Qxcx-sTvoote5e-5" value="MessageReceived" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxCell id="vgbR90Qxcx-sTvoote5e-5" value="EnvelopeReceived" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="960" y="232.10000000000002" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="Rs4bW3xzFFLv7pWNUvat-1" value="add to socket_list" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -7,7 +7,7 @@
<mxCell id="lUtrUhSS5DsyC9wEvYwb-7" value="" style="rounded=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="820" y="91" width="360" height="630" as="geometry" />
</mxCell>
<mxCell id="OJyx8rHUgYEJOKxLf1JB-1" value="MessageReceived" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=1;fontStyle=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxCell id="OJyx8rHUgYEJOKxLf1JB-1" value="EnvelopeReceived" style="text;html=1;align=left;verticalAlign=middle;whiteSpace=wrap;rounded=1;fontStyle=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="827" y="91" width="158" height="30" as="geometry" />
</mxCell>
<mxCell id="OJyx8rHUgYEJOKxLf1JB-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;labelBackgroundColor=none;fontColor=#000000;" parent="1" source="OJyx8rHUgYEJOKxLf1JB-4" target="OJyx8rHUgYEJOKxLf1JB-6" edge="1">
@ -107,7 +107,7 @@
<mxPoint y="-5" as="offset" />
</mxGeometry>
</mxCell>
<mxCell id="OJyx8rHUgYEJOKxLf1JB-20" value="message hash&lt;div&gt;exist in memory ?&lt;/div&gt;" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxCell id="OJyx8rHUgYEJOKxLf1JB-20" value="Envelope hash&lt;div&gt;exist in memory ?&lt;/div&gt;" style="rhombus;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="919" y="120.99999999999994" width="120" height="51" as="geometry" />
</mxCell>
<mxCell id="OJyx8rHUgYEJOKxLf1JB-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" parent="1" target="OJyx8rHUgYEJOKxLf1JB-29" edge="1">
@ -115,7 +115,7 @@
<mxPoint x="840" y="712" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="OJyx8rHUgYEJOKxLf1JB-31" value="message hash saved in memery" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxCell id="OJyx8rHUgYEJOKxLf1JB-31" value="Envelope hash saved in memery" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" parent="1" vertex="1">
<mxGeometry x="1189" y="492.1" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="lUtrUhSS5DsyC9wEvYwb-12" target="OJyx8rHUgYEJOKxLf1JB-20">
@ -134,13 +134,13 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-2" value="socketMessage" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-2" value="socketEnvelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1081.5" y="10" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-5" value="Message process_list update" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-5" value="Envelope process_list update" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="912" y="671" width="120" height="33" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-6" value="Message peer_list update" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-6" value="Envelope peer_list update" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1050" y="671" width="120" height="33" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="lUtrUhSS5DsyC9wEvYwb-8" target="OJyx8rHUgYEJOKxLf1JB-20">
@ -151,7 +151,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-8" value="message hash saved in memery" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-8" value="Envelope hash saved in memery" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1221.5" y="10.000000000000007" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-13" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="lUtrUhSS5DsyC9wEvYwb-1" target="lUtrUhSS5DsyC9wEvYwb-12">
@ -160,10 +160,10 @@
<mxPoint x="979" y="121" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-12" value="MessageConnect" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-12" value="EnvelopeConnect" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="919.5" y="50" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-14" value="Message" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="lUtrUhSS5DsyC9wEvYwb-14" value="Envelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1082" y="50" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="lUtrUhSS5DsyC9wEvYwb-18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.486;entryY=0.05;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="lUtrUhSS5DsyC9wEvYwb-2" target="lUtrUhSS5DsyC9wEvYwb-14">

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 143 KiB

View File

@ -459,7 +459,7 @@
<mxCell id="XqTc7s29-gL46L3V4mSs-304" value="&lt;b style=&quot;border-color: var(--border-color); text-align: center;&quot;&gt;Encrypt&lt;/b&gt;" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" parent="1" vertex="1">
<mxGeometry x="-542" y="165" width="137.39" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Envelope" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-722.0000000000001" y="643" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-288" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 306 KiB

After

Width:  |  Height:  |  Size: 306 KiB

View File

@ -103,7 +103,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxCell id="U1iS4aTrDNJz4kT7s3QN-286" value="Envelope" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1024" y="643" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="U1iS4aTrDNJz4kT7s3QN-288" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
@ -279,7 +279,7 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-342" value="Message" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxCell id="fIN9LJIhpEY6EGzNKIPz-342" value="Envelope" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
<mxGeometry x="-1024" y="852.0699999999999" width="60" height="30" as="geometry" />
</mxCell>
<mxCell id="fIN9LJIhpEY6EGzNKIPz-343" value="PRDKeyBackip" style="rounded=1;whiteSpace=wrap;html=1;labelBackgroundColor=none;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">

Binary file not shown.

Before

Width:  |  Height:  |  Size: 193 KiB

After

Width:  |  Height:  |  Size: 191 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 KiB

After

Width:  |  Height:  |  Size: 276 KiB

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 700 KiB

File diff suppressed because one or more lines are too long

View File

@ -4,13 +4,13 @@
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="QUBPNAYGt3iMPZFeMMTn-1" value="socketMessage" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="QUBPNAYGt3iMPZFeMMTn-1" value="socketEnvelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1580" y="179" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="QUBPNAYGt3iMPZFeMMTn-3" target="QUBPNAYGt3iMPZFeMMTn-7">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-3" value="Message" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="QUBPNAYGt3iMPZFeMMTn-3" value="Envelope" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1580.5" y="224" width="120" height="28.9" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-4" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.486;entryY=0.05;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="QUBPNAYGt3iMPZFeMMTn-1" target="QUBPNAYGt3iMPZFeMMTn-3">
@ -27,13 +27,13 @@
</Array>
</mxGeometry>
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-7" value="MessageReceived" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxCell id="QUBPNAYGt3iMPZFeMMTn-7" value="EnvelopeReceived" style="label;whiteSpace=wrap;html=1;image=img/clipart/Gear_128x128.png" vertex="1" parent="1">
<mxGeometry x="1550" y="271.1" width="180" height="30" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-8" value="Broadcast message to&amp;nbsp;sockets browser clients" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="QUBPNAYGt3iMPZFeMMTn-8" value="Broadcast `Envelope` to&amp;nbsp;sockets browser clients" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1718.5" y="405" width="120" height="48" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-9" value="Broadcast message to&amp;nbsp;sockets relay clients" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxCell id="QUBPNAYGt3iMPZFeMMTn-9" value="Broadcast `Envelope` to&amp;nbsp;sockets relay clients" style="rounded=0;whiteSpace=wrap;html=1;labelBackgroundColor=none;fontColor=#000000;" vertex="1" parent="1">
<mxGeometry x="1856.5" y="405" width="120" height="48" as="geometry" />
</mxCell>
<mxCell id="QUBPNAYGt3iMPZFeMMTn-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="QUBPNAYGt3iMPZFeMMTn-11" target="QUBPNAYGt3iMPZFeMMTn-12">

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

View File

@ -300,7 +300,7 @@ impl MemberPrivateAttributeGroup {
println!("PRD List List: {:?}", self.prd_list_list);
println!("PRD Update List: {:?}", self.prd_update_list);
println!("PRD Response List: {:?}", self.prd_response_list);
println!("PRD Message List: {:?}", self.prd_message_list);
println!("PRD `Envelope` List: {:?}", self.prd_message_list);
println!("PRD Confirm List: {:?}", self.prd_confirm_list);
println!("PRD Key Backup List: {:?}", self.prd_key_backup_list);
println!("PRD Key Hello List: {:?}", self.prd_key_hello_list);

View File

@ -65,14 +65,14 @@ impl Pow {
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Message {
pub struct `Envelope` {
pub shared_peer_list: Vec<Peer>,
pub shared_process_list: Vec<Process>,
pub faucet_sp_address: String,
pub pow: Pow, // Assuming Pow is a predefined struct
}
impl Message {
impl `Envelope` {
pub fn new(
shared_peer_list: Vec<Peer>,
shared_process_list: Vec<Process>,
@ -82,7 +82,7 @@ impl Message {
pow_difficulty: usize,
) -> Self {
let pow: Pow = Pow::new(pow_data_hash, pow_pathern, pow_difficulty);
Message {
`Envelope` {
shared_peer_list,
shared_process_list,
faucet_sp_address,

View File

@ -4,47 +4,47 @@ use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MessageClient {
pub message: Message, // Assuming Message is a predefined struct
pub struct `Envelope` Client {
pub `Envelope` : `Envelope` , // Assuming `Envelope` is a predefined struct
pub request_enc: String,
pub request_hash: String,
}
impl MessageClient {
impl `Envelope` Client {
pub fn new(
request_enc: String,
request_hash: String,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> Self {
let pow_data_hash = request_hash;
let message: Message = Message::new(
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
let `Envelope` : `Envelope` = `Envelope` ::new(
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_data_hash.clone(),
pow_pathern,
pow_difficulty,
);
MessageClient {
message,
`Envelope` Client {
`Envelope` ,
request_enc,
request_hash: pow_data_hash,
}
}
pub fn send(&self) {
for shared_peer in &self.message.shared_peer_list {
for shared_peer in &self.`Envelope`.shared_peer_list {
shared_peer.send_message_client(self.clone()); // Assuming Peers has a send method
}
}
pub fn display_info(&self) {
println!("MessageClient:");
println!("EnvelopeClient:");
println!("Message:");
self.message.display_info(); // Assuming Message has a display_info method
println!("Message Hash: {}", self.request_hash);
self.`Envelope`.display_info(); // Assuming `Envelope` has a display_info method
println!("Envelope hash: {}", self.request_hash);
println!("Request Enc: {}", self.request_enc);
}

View File

@ -3,17 +3,17 @@ use serde::{Deserialize, Serialize};
use super::message::Message;
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct MessageConnect {
pub message: Message, // Assuming Message is a predefined struct
pub struct `Envelope` Connect {
pub `Envelope` : `Envelope` , // Assuming `Envelope` is a predefined struct
}
impl MessageConnect {
pub fn new(message: Message) -> Self {
MessageConnect { message }
impl `Envelope` Connect {
pub fn new(message: `Envelope` ) -> Self {
`Envelope` Connect { `Envelope` }
}
pub fn display_info(&self) {
println!("MessageConnect:");
println!("EnvelopeConnect:");
println!("Message:");
self.message.display_info(); // Assuming Message has a display_info method
self.`Envelope`.display_info(); // Assuming `Envelope` has a display_info method
}
}

View File

@ -17,9 +17,9 @@ pub mod item_Payments;
pub mod item_peer;
pub mod item_process;
pub mod key_encryption;
pub mod message;
pub mod message_client;
pub mod message_connect;
pub mod `Envelope` ;
pub mod `Envelope` _client;
pub mod `Envelope` _connect;
pub mod metadata;
pub mod metadata_contract_public;
pub mod metadata_private;

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
item_enum::ItemEnum, key_encryption::KeyEncryption, message_client::MessageClient,
item_enum::ItemEnum, key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient,
pagination::Pagination, pcd_item_generic_enc::PcdItemGenericEnc, request::Request,
shared_peer::Peer, shared_process::Process,
};
@ -119,23 +119,23 @@ impl Pcd {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
let request_enc: String = process_public_enc_key.enc_pcd(self.clone()).to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -35,9 +35,9 @@ impl KeyRoleConfidential {
pub struct Prd {
pub request: Request, // Assuming Request is a predefined struct
pub pcd_keys_role_confidential_list_confidential: String,
pub message_public: Option<String>,
pub message_confidential: Option<String>,
pub message_private: Option<String>,
pub `Envelope` _public: Option<String>,
pub `Envelope` _confidential: Option<String>,
pub `Envelope` _private: Option<String>,
pub sp_address_to: String,
pub sp_address_from: String,
pub sp_address_reply: String,
@ -56,9 +56,9 @@ impl Prd {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -77,9 +77,9 @@ impl Prd {
Prd {
request,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -92,7 +92,7 @@ impl Prd {
// Fonction pour afficher ou retourner les informations
pub fn display_info(&self) -> String {
format!(
"Request: {:?}, PCD Keys Role Confidential: {:?}, Message Public: {}, Message Confidential: {}, Message Private: {}, SP Address From: {}, SP Address Reply: {}, Timestamp Declared: {}, Role Name From: {}, Role Name To: {}",
"Request: {:?}, PCD Keys Role Confidential: {:?}, `Envelope` Public: {}, `Envelope` Confidential: {}, `Envelope` Private: {}, SP Address From: {}, SP Address Reply: {}, Timestamp Declared: {}, Role Name From: {}, Role Name To: {}",
self.request,
self.pcd_keys_role_confidential_list_confidential,
self.message_public.as_ref().unwrap(),

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -25,9 +25,9 @@ impl PrdConfirm {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -45,9 +45,9 @@ impl PrdConfirm {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -64,12 +64,12 @@ impl PrdConfirm {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -77,12 +77,12 @@ impl PrdConfirm {
.enc_prd_confirm(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -27,9 +27,9 @@ impl PrdKeyBackup {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -50,9 +50,9 @@ impl PrdKeyBackup {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -71,12 +71,12 @@ impl PrdKeyBackup {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -84,12 +84,12 @@ impl PrdKeyBackup {
.enc_prd_key_backup(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -25,9 +25,9 @@ impl PrdKeyHello {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -45,9 +45,9 @@ impl PrdKeyHello {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -64,12 +64,12 @@ impl PrdKeyHello {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -77,12 +77,12 @@ impl PrdKeyHello {
.enc_prd_key_hello(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -24,9 +24,9 @@ impl PrdList {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -43,9 +43,9 @@ impl PrdList {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -59,12 +59,12 @@ impl PrdList {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -72,12 +72,12 @@ impl PrdList {
.enc_prd_list(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -6,7 +6,7 @@ use std::{
use serde::{Deserialize, Serialize};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -24,9 +24,9 @@ impl PrdMessage {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -43,9 +43,9 @@ impl PrdMessage {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -59,12 +59,12 @@ impl PrdMessage {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -72,12 +72,12 @@ impl PrdMessage {
.enc_prd_message(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -7,7 +7,7 @@ use crate::workflows::workflow_pcd_create_and_send_all::PcdItemEncAttributeRoleC
use super::{
commit_method::commitMethod, deposit_method::DepositMethod,
key_encryption::KeyEncryption, message_client::MessageClient, Payments_method::PaymentsMethod,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, Payments_method::PaymentsMethod,
request_prd::Prd, shared_peer::Peer, shared_process::Process,
};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
@ -36,9 +36,9 @@ impl PrdResponse {
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list: Vec<PcdItemEncAttributeRoleConfidentialExportKey>,
message_public_string: Option<String>,
message_confidential_string: Option<String>,
message_private_string: Option<String>,
`Envelope` _public_string: Option<String>,
`Envelope` _confidential_string: Option<String>,
`Envelope` _private_string: Option<String>,
sp_address_to: String,
sp_address_from: String,
@ -87,13 +87,13 @@ impl PrdResponse {
None => None,
};
let message_confidential = message_confidential_string
let `Envelope` _confidential = `Envelope` _confidential_string
.as_ref()
.map(|msg| shared_secret_key.enc_string(msg.clone()));
let message_public = message_public_string
let `Envelope` _public = `Envelope` _public_string
.as_ref()
.map(|msg| process_public_enc_key.enc_string(msg.clone()));
let message_private = message_private_string
let `Envelope` _private = `Envelope` _private_string
.as_ref()
.map(|msg| Member_private_enc_key.enc_string(msg.clone()));
@ -110,9 +110,9 @@ impl PrdResponse {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -138,12 +138,12 @@ impl PrdResponse {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -151,12 +151,12 @@ impl PrdResponse {
.enc_prd_response(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -4,7 +4,7 @@ use std::{
};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::Prd,
key_encryption::KeyEncryption, `Envelope` _client::EnvelopeClient, request_prd::Prd,
shared_peer::Peer, shared_process::Process,
};
use serde::{Deserialize, Serialize};
@ -31,9 +31,9 @@ impl PrdUpdate {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_confidential: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
`Envelope` _public: Option<String>,
`Envelope` _confidential: Option<String>,
`Envelope` _private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
@ -59,9 +59,9 @@ impl PrdUpdate {
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_confidential,
message_public,
message_confidential,
message_private,
`Envelope` _public,
`Envelope` _confidential,
`Envelope` _private,
sp_address_to,
sp_address_from,
sp_address_reply,
@ -85,12 +85,12 @@ impl PrdUpdate {
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
) -> `Envelope` Client {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
@ -98,12 +98,12 @@ impl PrdUpdate {
.enc_prd_update(self.clone())
.to_string();
MessageClient::new(
`Envelope` Client::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
pow_pathern,
pow_difficulty,
)

View File

@ -52,9 +52,9 @@ impl RolesGroup {
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list: Vec<PcdItemEncAttributeRoleConfidentialExportKey>,
message_public_string: Option<String>,
message_confidential_string: Option<String>,
message_private_string: Option<String>,
`Envelope` _public_string: Option<String>,
`Envelope` _confidential_string: Option<String>,
`Envelope` _private_string: Option<String>,
sp_address_from: String,
sp_address_reply: String,
timestamp_declared: u64,
@ -88,9 +88,9 @@ impl RolesGroup {
request_pcd_reference_hash.clone(),
request_item_reference_hash.clone(),
pcd_keys_role_confidential_list.clone(),
message_public_string.clone(),
message_confidential_string.clone(),
message_private_string.clone(),
`Envelope` _public_string.clone(),
`Envelope` _confidential_string.clone(),
`Envelope` _private_string.clone(),
address.to_string(),
sp_address_from.clone(),
sp_address_reply.clone(),

View File

@ -1,6 +1,6 @@
use serde::{Deserialize, Serialize};
use super::message_client::MessageClient;
use super::message_client::EnvelopeClient;
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct Relay {
@ -193,7 +193,7 @@ impl Peer {
l2_certif,
}
}
pub fn send_message_client(&self, _message_client: MessageClient) {
pub fn send_message_client(&self, _message_client: `Envelope` Client) {
// TODO
}

View File

@ -1,6 +1,6 @@
use crate::models::{
commit_method::commitMethod, deposit_method::DepositMethod, item_enum::ItemEnum,
message_client::MessageClient, Payments_method::PaymentsMethod, roles_group::RolesGroup,
`Envelope` _client::EnvelopeClient, Payments_method::PaymentsMethod, roles_group::RolesGroup,
};
use serde::{Deserialize, Serialize};
@ -51,13 +51,13 @@ pub struct WorkflowPcdCreateAndSendAll {
pub roles: RolesGroup,
pub pow_pathern: String,
pub pow_difficulty: usize,
pub message_shared_peer_list: Vec<Peer>,
pub message_shared_process_list: Vec<Process>,
pub message_faucet_sp_address: String,
pub `Envelope` _shared_peer_list: Vec<Peer>,
pub `Envelope` _shared_process_list: Vec<Process>,
pub `Envelope` _faucet_sp_address: String,
pub message_public_string: Option<String>,
pub message_confidential_string: Option<String>,
pub message_private_string: Option<String>,
pub `Envelope` _public_string: Option<String>,
pub `Envelope` _confidential_string: Option<String>,
pub `Envelope` _private_string: Option<String>,
pub sp_address_from: String,
pub sp_address_reply: String,
pub timestamp_declared: u64,
@ -86,12 +86,12 @@ impl WorkflowPcdCreateAndSendAll {
roles: RolesGroup,
pow_pathern: String,
pow_difficulty: usize,
message_shared_peer_list: Vec<Peer>,
message_shared_process_list: Vec<Process>,
message_faucet_sp_address: String,
message_public_string: Option<String>,
message_confidential_string: Option<String>,
message_private_string: Option<String>,
`Envelope` _shared_peer_list: Vec<Peer>,
`Envelope` _shared_process_list: Vec<Process>,
`Envelope` _faucet_sp_address: String,
`Envelope` _public_string: Option<String>,
`Envelope` _confidential_string: Option<String>,
`Envelope` _private_string: Option<String>,
sp_address_from: String,
sp_address_reply: String,
timestamp_declared: u64,
@ -118,13 +118,13 @@ impl WorkflowPcdCreateAndSendAll {
roles,
pow_pathern,
pow_difficulty,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
`Envelope` _shared_peer_list,
`Envelope` _shared_process_list,
`Envelope` _faucet_sp_address,
message_public_string,
message_confidential_string,
message_private_string,
`Envelope` _public_string,
`Envelope` _confidential_string,
`Envelope` _private_string,
sp_address_from,
sp_address_reply,
timestamp_declared,
@ -154,7 +154,7 @@ impl WorkflowPcdCreateAndSendAll {
self.Member_private_enc_key.clone(),
);
let pcd_message: MessageClient = pcd.to_message(
let pcd_message: `Envelope` Client = pcd.to_message(
self.process_public_enc_key.clone(),
self.message_shared_peer_list.clone(),
self.message_shared_process_list.clone(),
@ -199,7 +199,7 @@ impl WorkflowPcdCreateAndSendAll {
self.role_name_from.clone(),
self.role_name_to.clone(),
self.sig_value.clone(),
Some(pcd_message.request_hash),
Some(pcd_`Envelope`.request_hash),
self.Payments_method.clone(),
self.deposit_method.clone(),
self.commit_method.clone(),