From 2b8206d1c574ec82b3d1687515d1e4db8652573b Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:30:40 -0500 Subject: [PATCH 01/21] fix: old state passed to connection error --- packages/backend/src/AutomergeBackend.ts | 5 +- packages/backend/src/SocketIOConnection.ts | 2 +- .../bridge/src/connection/connection.spec.ts | 51 +++++++ packages/bridge/src/cursor/index.ts | 37 ++--- packages/client/package.json | 26 +++- packages/client/src/automerge-editor.ts | 20 ++- packages/client/src/client.spec.ts | 136 ++++++++++++++++++ packages/client/src/withAutomerge.ts | 32 +++-- packages/client/src/withSocketIO.ts | 1 + 9 files changed, 265 insertions(+), 45 deletions(-) create mode 100644 packages/bridge/src/connection/connection.spec.ts create mode 100644 packages/client/src/client.spec.ts diff --git a/packages/backend/src/AutomergeBackend.ts b/packages/backend/src/AutomergeBackend.ts index adba9ac..df07069 100644 --- a/packages/backend/src/AutomergeBackend.ts +++ b/packages/backend/src/AutomergeBackend.ts @@ -93,10 +93,7 @@ class AutomergeBackend { const sync = toSync({ cursors: {}, children: data }) const doc = Automerge.from(sync) - - if (!this.documentSetMap[docId]) { - this.documentSetMap[docId] = new Automerge.DocSet() - } + this.documentSetMap[docId] = new Automerge.DocSet() this.documentSetMap[docId].setDoc(docId, doc) } catch (e) { console.error(e, docId) diff --git a/packages/backend/src/SocketIOConnection.ts b/packages/backend/src/SocketIOConnection.ts index e32c9a2..afdd17b 100644 --- a/packages/backend/src/SocketIOConnection.ts +++ b/packages/backend/src/SocketIOConnection.ts @@ -10,7 +10,7 @@ import { SyncDoc, CollabAction, toJS } from '@hiveteams/collab-bridge' import { getClients } from './utils' import AutomergeBackend from './AutomergeBackend' -import { debugCollabBackend } from 'utils/debug' +import { debugCollabBackend } from './utils/debug' export interface SocketIOCollaborationOptions { entry: Server diff --git a/packages/bridge/src/connection/connection.spec.ts b/packages/bridge/src/connection/connection.spec.ts new file mode 100644 index 0000000..387610b --- /dev/null +++ b/packages/bridge/src/connection/connection.spec.ts @@ -0,0 +1,51 @@ +import * as Automerge from 'automerge' + +interface TestDoc { + _id: string + status: string +} + +// TODO: delete this? +describe('old state error replication', () => { + const clientDocSet = new Automerge.DocSet() + const serverDocSet = new Automerge.DocSet() + + const docId = 'test' + let clientDoc = Automerge.from({ + _id: docId, + status: 'Unstarted' + }) + let serverDoc = Automerge.from({ + _id: docId, + status: 'Unstarted' + }) + + it('replicate old state error', () => { + clientDocSet.setDoc(docId, clientDoc) + serverDocSet.setDoc(docId, serverDoc) + + let clientMessages: string[] = [] + const clientConnection = new Automerge.Connection(clientDocSet, msg => { + clientMessages.push(JSON.stringify(msg)) + }) + clientConnection.open() + let serverMessages: string[] = [] + const serverConnection = new Automerge.Connection(serverDocSet, msg => { + serverMessages.push(JSON.stringify(msg)) + }) + serverConnection.open() + + let oldClientDoc = clientDoc + clientDoc = Automerge.change(clientDoc, newClientDoc => { + newClientDoc.status = 'In progress' + }) + clientDocSet.setDoc(docId, clientDoc) + + expect(clientMessages.length).toEqual(2) + expect(serverMessages.length).toEqual(1) + + expect(() => { + clientDocSet.setDoc(docId, oldClientDoc) + }).toThrow() + }) +}) diff --git a/packages/bridge/src/cursor/index.ts b/packages/bridge/src/cursor/index.ts index 3c56b73..81e6054 100644 --- a/packages/bridge/src/cursor/index.ts +++ b/packages/bridge/src/cursor/index.ts @@ -1,6 +1,7 @@ import { Operation, Range } from 'slate' import { CursorData } from '../model' +import { toJS } from '../utils' export const setCursor = ( id: string, @@ -9,26 +10,30 @@ export const setCursor = ( operations: Operation[], cursorData: CursorData ) => { - const cursorOps = operations.filter(op => op.type === 'set_selection') + try { + const cursorOps = operations.filter(op => op.type === 'set_selection') - if (!doc.cursors) doc.cursors = {} + if (!doc.cursors) doc.cursors = {} - const newCursor = cursorOps[cursorOps.length - 1]?.newProperties || {} + const newCursor = cursorOps[cursorOps.length - 1]?.newProperties || {} - if (selection) { - const newCursorData = Object.assign( - (doc.cursors[id] && JSON.parse(doc.cursors[id])) || {}, - newCursor, - selection, - { - ...cursorData, - isForward: Range.isForward(selection) - } - ) + if (selection) { + const newCursorData = Object.assign( + (doc.cursors[id] && JSON.parse(doc.cursors[id])) || {}, + newCursor, + selection, + { + ...cursorData, + isForward: Range.isForward(selection) + } + ) - doc.cursors[id] = JSON.stringify(newCursorData) - } else { - delete doc.cursors[id] + doc.cursors[id] = JSON.stringify(newCursorData) + } else { + delete doc.cursors[id] + } + } catch (e) { + console.error(e, toJS(doc)) } return doc diff --git a/packages/client/package.json b/packages/client/package.json index da9b6e4..fa2dcbb 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -21,7 +21,8 @@ "build:module": "npm run build:types && npm run build:js", "build:types": "tsc --emitDeclarationOnly", "build:js": "babel src --out-dir lib --extensions \".ts,.tsx\" --source-maps inline", - "watch": "yarn build:js -w" + "watch": "yarn build:js -w", + "test": "jest" }, "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", @@ -41,10 +42,29 @@ "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", "@types/react": "^16.9.34", - "@types/socket.io-client": "^1.4.32" + "@types/socket.io-client": "^1.4.32", + "@hiveteams/collab-backend": "^0.7.16", + "@types/jest": "^24.9.0", + "jest": "^26.6.3", + "ts-jest": "^26.4.4" }, "directories": { "lib": "lib" }, - "gitHead": "89dd1657ba1b39db298e00a380f45089b8b52a91" + "gitHead": "89dd1657ba1b39db298e00a380f45089b8b52a91", + "jest": { + "preset": "ts-jest", + "globals": { + "ts-jest": { + "babelConfig": ".babelrc" + } + }, + "roots": [ + "/src" + ], + "transform": { + "^.+\\.ts?$": "ts-jest" + }, + "testRegex": "(/__tests__/.*|(\\.|/)(test|spec))\\.tsx?$" + } } diff --git a/packages/client/src/automerge-editor.ts b/packages/client/src/automerge-editor.ts index 4926229..31d4260 100644 --- a/packages/client/src/automerge-editor.ts +++ b/packages/client/src/automerge-editor.ts @@ -33,6 +33,8 @@ export interface AutomergeEditor extends Editor { gabageCursor: () => void onCursor: (data: any) => void + + automergeCleanup: () => void } /** @@ -51,7 +53,7 @@ export const AutomergeEditor = { * Apply Slate operations to Automerge */ - applySlateOps: async ( + applySlateOps: ( e: AutomergeEditor, docId: string, operations: Operation[], @@ -63,19 +65,19 @@ export const AutomergeEditor = { throw new TypeError(`Unknown docId: ${docId}!`) } - let changed + let changed: any - for await (let op of operations) { + operations.forEach(op => { changed = Automerge.change(changed || doc, d => applyOperation(d.children, op) ) - } + }) changed = Automerge.change(changed || doc, d => { setCursor(e.clientId, e.selection, d, operations, cursorData || {}) }) - e.docSet.setDoc(docId, changed as any) + e.docSet.setDoc(docId, changed) }, /** @@ -150,14 +152,18 @@ export const AutomergeEditor = { garbageCursor: (e: AutomergeEditor, docId: string) => { const doc = e.docSet.getDoc(docId) + // if the document has already been cleaned up + // return early and do nothing + if (!doc) return + const changed = Automerge.change(doc, (d: any) => { delete d.cursors }) - e.onCursor && e.onCursor(null) - e.docSet.setDoc(docId, changed) + e.onCursor && e.onCursor(null) + e.onChange() } } diff --git a/packages/client/src/client.spec.ts b/packages/client/src/client.spec.ts new file mode 100644 index 0000000..87546d8 --- /dev/null +++ b/packages/client/src/client.spec.ts @@ -0,0 +1,136 @@ +import { createEditor, Element, Node, Transforms } from 'slate' +import * as Automerge from 'automerge' +import withAutomerge, { AutomergeOptions } from './withAutomerge' +import { SyncDoc, toJS } from '@hiveteams/collab-bridge' +import AutomergeBackend from '@hiveteams/collab-backend/lib/AutomergeBackend' +import { insertText } from '../../bridge/src/apply/text' + +describe('automerge editor client tests', () => { + const docId = 'test' + const automergeOptions: AutomergeOptions = { + docId, + onError: msg => console.log('Encountered test error', msg) + } + const editor = withAutomerge(createEditor(), automergeOptions) + const automergeBackend = new AutomergeBackend() + const clientId = 'test-client' + + /** + * Initialize a basic automerge backend + */ + + // Create a new server automerge connection with a basic send function + let serverMessages: any[] = [] + automergeBackend.appendDocument(docId, [ + { type: 'paragraph', children: [{ text: 'Hi' }] } + ]) + automergeBackend.createConnection(clientId, docId, (msg: any) => { + serverMessages.push(msg) + }) + automergeBackend.openConnection(clientId) + + // define an editor send function for the clientside automerge editor + let clientMessages: any[] = [] + editor.send = (msg: any) => { + clientMessages.push(msg) + } + + // open the editor connection + editor.openConnection() + + /** + * Helper function to flush client messages and send them to the server + */ + const sendClientMessagesToServer = () => { + // console.log('clientMessages', JSON.stringify(clientMessages)) + clientMessages.forEach(msg => { + automergeBackend.receiveOperation(clientId, msg) + }) + clientMessages = [] + } + + /** + * Helper function to flush server messages and send them to the client + */ + const receiveMessagesFromServer = () => { + console.log('serverMessages', JSON.stringify(serverMessages)) + serverMessages.forEach(msg => { + editor.receiveOperation(msg) + }) + serverMessages = [] + } + + afterEach(() => { + sendClientMessagesToServer() + receiveMessagesFromServer() + }) + + it('should properly receiveDocument', () => { + const initialDocData = Automerge.save(automergeBackend.getDocument(docId)) + editor.receiveDocument(initialDocData) + + expect(editor.children.length).toEqual(1) + const paragraphNode = editor.children[0] as Element + expect(paragraphNode.type).toEqual('paragraph') + expect(paragraphNode.children.length).toEqual(1) + expect(Node.string(paragraphNode)).toEqual('Hi') + }) + + it('should sync insert node operation with server', done => { + Transforms.insertNodes(editor, { + type: 'paragraph', + children: [{ text: 'a' }] + }) + + // ensure that we eventually send a message for the insert_node oepration + const handle = setInterval(() => { + sendClientMessagesToServer() + receiveMessagesFromServer() + + const serverDoc = toJS(automergeBackend.getDocument(docId)) + if (serverDoc.children.length === 2) { + const paragraphNode = serverDoc.children[1] + expect(Node.string(paragraphNode)).toEqual('a') + clearInterval(handle) + done() + } + }, 10) + }) + + it('should sync insert text operation with client', done => { + const serverDoc = automergeBackend.getDocument(docId) + + const updatedServerDoc = Automerge.change(serverDoc, newServerDoc => { + insertText(newServerDoc as any, { + type: 'insert_text', + path: [1, 0], + offset: 1, + text: 'b' + }) + }) + automergeBackend.documentSetMap[docId].setDoc(docId, updatedServerDoc) + + // ensure that we eventually send a message for the insert_node oepration + const handle = setInterval(() => { + sendClientMessagesToServer() + receiveMessagesFromServer() + const [, secondParagraph] = editor.children + console.log(secondParagraph) + if (Node.string(secondParagraph) === 'ab') { + clearInterval(handle) + done() + } + }, 10) + }) + + // it('replicate old state error', done => { + // serverConnection.close() + // serverConnection = new Automerge.Connection(serverDocSet, msg => { + // serverMessages.push(msg) + // }) + // serverConnection.open() + + // sendClientMessagesToServer() + // receiveMessagesFromServer() + // }) +}) diff --git a/packages/client/src/withAutomerge.ts b/packages/client/src/withAutomerge.ts index e822cf1..4dea830 100644 --- a/packages/client/src/withAutomerge.ts +++ b/packages/client/src/withAutomerge.ts @@ -34,21 +34,15 @@ const withAutomerge = ( e.docSet = new Automerge.DocSet() - const createConnection = () => { - e.connection = AutomergeEditor.createConnection(e, (data: CollabAction) => - //@ts-ignore - e.send(data) - ) - - e.connection.open() - } - /** * Open Automerge Connection */ e.openConnection = () => { - createConnection() + e.connection = AutomergeEditor.createConnection(e, (data: CollabAction) => + //@ts-ignore + e.send(data) + ) e.connection.open() } @@ -76,6 +70,10 @@ const withAutomerge = ( } } + e.automergeCleanup = () => { + e.docSet = new Automerge.DocSet() + } + /** * Editor onChange */ @@ -84,9 +82,11 @@ const withAutomerge = ( const operations: any = e.operations if (!e.isRemote) { - AutomergeEditor.applySlateOps(e, docId, operations, cursorData).catch( - onError - ) + try { + AutomergeEditor.applySlateOps(e, docId, operations, cursorData) + } catch (err) { + onError(err) + } onChange() } @@ -97,7 +97,11 @@ const withAutomerge = ( */ e.receiveDocument = data => { - AutomergeEditor.receiveDocument(e, docId, data) + try { + AutomergeEditor.receiveDocument(e, docId, data) + } catch (err) { + onError(err) + } } /** diff --git a/packages/client/src/withSocketIO.ts b/packages/client/src/withSocketIO.ts index a93c4fc..621f6a2 100644 --- a/packages/client/src/withSocketIO.ts +++ b/packages/client/src/withSocketIO.ts @@ -115,6 +115,7 @@ const withSocketIO = ( e.destroy = () => { socket.close() e.closeConnection() + e.automergeCleanup() } return e From 217864dc69613ae6467a14f68cc5c01015dd5000 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:43:59 -0500 Subject: [PATCH 02/21] fix: package json and version --- CHANGELOG.md | 8 +++++++- lerna.json | 2 +- packages/backend/package.json | 4 ++-- packages/bridge/package.json | 2 +- packages/client/package.json | 8 ++++---- packages/example/package.json | 6 +++--- 6 files changed, 18 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eeee87a..bfc6999 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,13 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.16](https://github.com/hiveteams/slate-collaborative/compare/v0.7.16...v0.7.16) +#### [v0.7.18](https://github.com/hiveteams/slate-collaborative/compare/v0.7.17...v0.7.18) + +- fix: old state passed to connection error [`2b8206d`](https://github.com/hiveteams/slate-collaborative/commit/2b8206d1c574ec82b3d1687515d1e4db8652573b) + +#### [v0.7.17](https://github.com/hiveteams/slate-collaborative/compare/v0.7.16...v0.7.17) + +> 2 November 2020 - fix: close connection error [`31a14e2`](https://github.com/hiveteams/slate-collaborative/commit/31a14e2a3519ea3076071a4d8fdfd48b26bb3d34) diff --git a/lerna.json b/lerna.json index 8200583..6bedbbb 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.17", + "version": "0.7.18", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index e05caf5..1bee331 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.16", + "version": "0.7.18", "files": [ "lib" ], @@ -26,7 +26,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/runtime": "^7.6.3", - "@hiveteams/collab-bridge": "^0.7.16", + "@hiveteams/collab-bridge": "^0.7.18", "@types/debug": "^4.1.5", "@types/lodash": "^4.14.150", "@types/socket.io": "^2.1.4", diff --git a/packages/bridge/package.json b/packages/bridge/package.json index af1df08..e47a80f 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-bridge", - "version": "0.7.16", + "version": "0.7.18", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index fa2dcbb..168832c 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.17", + "version": "0.7.18", "files": [ "lib" ], @@ -27,7 +27,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/preset-react": "^7.0.0", - "@hiveteams/collab-bridge": "^0.7.16", + "@hiveteams/collab-bridge": "^0.7.18", "automerge": "0.14.0", "slate": "0.58.3", "slate-history": "0.58.3", @@ -41,10 +41,10 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", + "@hiveteams/collab-backend": "^0.7.18", + "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", - "@hiveteams/collab-backend": "^0.7.16", - "@types/jest": "^24.9.0", "jest": "^26.6.3", "ts-jest": "^26.4.4" }, diff --git a/packages/example/package.json b/packages/example/package.json index c9d3f6a..522653b 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.17", + "version": "0.7.18", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.16", - "@hiveteams/collab-client": "^0.7.17", + "@hiveteams/collab-backend": "^0.7.18", + "@hiveteams/collab-client": "^0.7.18", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From e735ddb219912c5310dd45c128123625b4edb47b Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:44:59 -0500 Subject: [PATCH 03/21] fix: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc6999..6216917 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). #### [v0.7.18](https://github.com/hiveteams/slate-collaborative/compare/v0.7.17...v0.7.18) - fix: old state passed to connection error [`2b8206d`](https://github.com/hiveteams/slate-collaborative/commit/2b8206d1c574ec82b3d1687515d1e4db8652573b) +- fix: package json and version [`217864d`](https://github.com/hiveteams/slate-collaborative/commit/217864dc69613ae6467a14f68cc5c01015dd5000) #### [v0.7.17](https://github.com/hiveteams/slate-collaborative/compare/v0.7.16...v0.7.17) From d7e01518a8f3972369424a3143fadc21158940ba Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:50:40 -0500 Subject: [PATCH 04/21] fix: bump package version --- CHANGELOG.md | 3 ++- lerna.json | 2 +- packages/backend/package.json | 4 ++-- packages/bridge/package.json | 2 +- packages/client/package.json | 6 +++--- packages/example/package.json | 6 +++--- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6216917..23d0e9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,10 +2,11 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.18](https://github.com/hiveteams/slate-collaborative/compare/v0.7.17...v0.7.18) +#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.17...v0.7.19) - fix: old state passed to connection error [`2b8206d`](https://github.com/hiveteams/slate-collaborative/commit/2b8206d1c574ec82b3d1687515d1e4db8652573b) - fix: package json and version [`217864d`](https://github.com/hiveteams/slate-collaborative/commit/217864dc69613ae6467a14f68cc5c01015dd5000) +- fix: update changelog [`e735ddb`](https://github.com/hiveteams/slate-collaborative/commit/e735ddb219912c5310dd45c128123625b4edb47b) #### [v0.7.17](https://github.com/hiveteams/slate-collaborative/compare/v0.7.16...v0.7.17) diff --git a/lerna.json b/lerna.json index 6bedbbb..fe0823c 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.18", + "version": "0.7.19", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index 1bee331..cc9eaa8 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.18", + "version": "0.7.19", "files": [ "lib" ], @@ -26,7 +26,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/runtime": "^7.6.3", - "@hiveteams/collab-bridge": "^0.7.18", + "@hiveteams/collab-bridge": "^0.7.19", "@types/debug": "^4.1.5", "@types/lodash": "^4.14.150", "@types/socket.io": "^2.1.4", diff --git a/packages/bridge/package.json b/packages/bridge/package.json index e47a80f..971d443 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-bridge", - "version": "0.7.18", + "version": "0.7.19", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 168832c..8ccc536 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.18", + "version": "0.7.19", "files": [ "lib" ], @@ -27,7 +27,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/preset-react": "^7.0.0", - "@hiveteams/collab-bridge": "^0.7.18", + "@hiveteams/collab-bridge": "^0.7.19", "automerge": "0.14.0", "slate": "0.58.3", "slate-history": "0.58.3", @@ -41,7 +41,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.18", + "@hiveteams/collab-backend": "^0.7.19", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 522653b..61a47f7 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.18", + "version": "0.7.19", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.18", - "@hiveteams/collab-client": "^0.7.18", + "@hiveteams/collab-backend": "^0.7.19", + "@hiveteams/collab-client": "^0.7.19", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From 83a20f59a58291a88b5b1fb95f5ac965382aa380 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:51:09 -0500 Subject: [PATCH 05/21] v0.7.19 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23d0e9c..8f87a4f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). - fix: old state passed to connection error [`2b8206d`](https://github.com/hiveteams/slate-collaborative/commit/2b8206d1c574ec82b3d1687515d1e4db8652573b) - fix: package json and version [`217864d`](https://github.com/hiveteams/slate-collaborative/commit/217864dc69613ae6467a14f68cc5c01015dd5000) -- fix: update changelog [`e735ddb`](https://github.com/hiveteams/slate-collaborative/commit/e735ddb219912c5310dd45c128123625b4edb47b) +- fix: bump package version [`d7e0151`](https://github.com/hiveteams/slate-collaborative/commit/d7e01518a8f3972369424a3143fadc21158940ba) #### [v0.7.17](https://github.com/hiveteams/slate-collaborative/compare/v0.7.16...v0.7.17) From 2f05bced2bb3f89df829408ecb146fbc51004bd0 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:54:10 -0500 Subject: [PATCH 06/21] fix: automerge backend import --- packages/backend/src/AutomergeBackend.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/AutomergeBackend.ts b/packages/backend/src/AutomergeBackend.ts index df07069..6a83b4e 100644 --- a/packages/backend/src/AutomergeBackend.ts +++ b/packages/backend/src/AutomergeBackend.ts @@ -8,7 +8,7 @@ import { SyncDoc, CollabAction } from '@hiveteams/collab-bridge' -import { debugCollabBackend } from 'utils/debug' +import { debugCollabBackend } from './utils/debug' /** * AutomergeBackend contains collaboration with Automerge From 60f7fb21ba23c8d5eb10d1a92982dd8af9e8120c Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 5 Jan 2021 18:54:47 -0500 Subject: [PATCH 07/21] v0.7.20-alpha.0 --- CHANGELOG.md | 6 ++++++ lerna.json | 2 +- packages/backend/package.json | 2 +- packages/client/package.json | 4 ++-- packages/example/package.json | 6 +++--- 5 files changed, 13 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8f87a4f..021c8f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,14 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.19...v0.7.19) + +- fix: automerge backend import [`2f05bce`](https://github.com/hiveteams/slate-collaborative/commit/2f05bced2bb3f89df829408ecb146fbc51004bd0) + #### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.17...v0.7.19) +> 5 January 2021 + - fix: old state passed to connection error [`2b8206d`](https://github.com/hiveteams/slate-collaborative/commit/2b8206d1c574ec82b3d1687515d1e4db8652573b) - fix: package json and version [`217864d`](https://github.com/hiveteams/slate-collaborative/commit/217864dc69613ae6467a14f68cc5c01015dd5000) - fix: bump package version [`d7e0151`](https://github.com/hiveteams/slate-collaborative/commit/d7e01518a8f3972369424a3143fadc21158940ba) diff --git a/lerna.json b/lerna.json index fe0823c..3f786a6 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.19", + "version": "0.7.20-alpha.0", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index cc9eaa8..cd19737 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.19", + "version": "0.7.20-alpha.0", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 8ccc536..0640d7c 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.19", + "version": "0.7.20-alpha.0", "files": [ "lib" ], @@ -41,7 +41,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.19", + "@hiveteams/collab-backend": "^0.7.20-alpha.0", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 61a47f7..484ea4b 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.19", + "version": "0.7.20-alpha.0", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.19", - "@hiveteams/collab-client": "^0.7.19", + "@hiveteams/collab-backend": "^0.7.20-alpha.0", + "@hiveteams/collab-client": "^0.7.20-alpha.0", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From 0894a7a917949e3ef08a5cd9533258a59b7a3486 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Wed, 6 Jan 2021 15:09:27 -0500 Subject: [PATCH 08/21] feat: automerge collaboration to backend --- packages/backend/src/AutomergeBackend.ts | 2 +- .../backend/src/AutomergeCollaboration.ts | 289 ++++++++++++++++++ packages/client/src/client-copy.spec.ts | 185 +++++++++++ packages/client/src/client.spec.ts | 79 ++++- 4 files changed, 539 insertions(+), 16 deletions(-) create mode 100644 packages/backend/src/AutomergeCollaboration.ts create mode 100644 packages/client/src/client-copy.spec.ts diff --git a/packages/backend/src/AutomergeBackend.ts b/packages/backend/src/AutomergeBackend.ts index 6a83b4e..3583d4c 100644 --- a/packages/backend/src/AutomergeBackend.ts +++ b/packages/backend/src/AutomergeBackend.ts @@ -45,7 +45,7 @@ class AutomergeBackend { * Start Automerge Connection */ - openConnection = (id: string) => this.connectionMap[id].open() + openConnection = (id: string) => this.connectionMap[id]?.open() /** * Close Automerge Connection and remove it from connections diff --git a/packages/backend/src/AutomergeCollaboration.ts b/packages/backend/src/AutomergeCollaboration.ts new file mode 100644 index 0000000..5c84e2f --- /dev/null +++ b/packages/backend/src/AutomergeCollaboration.ts @@ -0,0 +1,289 @@ +import io from 'socket.io' +import * as Automerge from 'automerge' +import { Node } from 'slate' +import { Server } from 'http' +import throttle from 'lodash/throttle' +import { SyncDoc, CollabAction, toJS } from '@hiveteams/collab-bridge' +import { getClients } from './utils/index' +import { debugCollabBackend } from './utils/debug' +import AutomergeBackend from './AutomergeBackend' + +export interface IAutomergeCollaborationOptions { + entry: Server + connectOpts?: SocketIO.ServerOptions + defaultValue: Node[] + saveFrequency?: number + onAuthRequest?: (query: any, socket?: SocketIO.Socket) => Promise + onDocumentLoad?: (pathname: string, query?: any) => Promise | Node[] + onDocumentSave?: ( + pathname: string, + doc: Node[], + user: any + ) => Promise | void + onDisconnect?: (pathname: string, user: any) => Promise | void +} + +export default class AutomergeCollaboration { + private io: SocketIO.Server + private options: IAutomergeCollaborationOptions + private backend: AutomergeBackend + private userMap: { [key: string]: any | undefined } + + /** + * Constructor + */ + + constructor(options: IAutomergeCollaborationOptions) { + this.io = io(options.entry, options.connectOpts) + + this.backend = new AutomergeBackend() + + this.options = options + + this.configure() + + this.userMap = {} + + return this + } + + /** + * Initial IO configuration + */ + + private configure = () => + this.io + .of(this.nspMiddleware) + .use(this.authMiddleware) + .on('connect', this.onConnect) + + /** + * Namespace SocketIO middleware. Load document value and append it to CollaborationBackend. + */ + + private nspMiddleware = async (path: string, query: any, next: any) => { + return next(null, true) + } + + /** + * SocketIO auth middleware. Used for user authentification. + */ + + private authMiddleware = async ( + socket: SocketIO.Socket, + next: (e?: any) => void + ) => { + const { id } = socket + const { query } = socket.handshake + const { onAuthRequest } = this.options + + // we connect before any async logic so that we + // never miss a socket disconnection event + socket.on('disconnect', this.onDisconnect(id, socket)) + + if (onAuthRequest) { + const user = await onAuthRequest(query, socket) + + if (!user) return next(new Error(`Authentification error: ${socket.id}`)) + + this.userMap[socket.id] = user + } + + return next() + } + + /** + * On 'connect' handler. + */ + + private onConnect = async (socket: SocketIO.Socket) => { + const { id, conn } = socket + // do nothing if the socket connection has already been closed + if (conn.readyState === 'closed') { + return + } + + const { name } = socket.nsp + const { onDocumentLoad } = this.options + + if (!this.backend.getDocument(name)) { + const doc = onDocumentLoad + ? await onDocumentLoad(name) + : this.options.defaultValue + + // Ensure socket is still opened + // recheck ready state after async operation + if (conn.readyState === 'closed') { + return + } + + // recheck backend getDocument after async operation + if (!this.backend.getDocument(name)) { + debugCollabBackend('Append document\t\t%s', id) + this.backend.appendDocument(name, doc) + } + } + + debugCollabBackend('Create connection\t%s', id) + this.backend.createConnection( + id, + name, + ({ type, payload }: CollabAction) => { + socket.emit('msg', { type, payload: { id: conn.id, ...payload } }) + } + ) + + socket.on('msg', this.onMessage(id, name)) + + socket.join(id, () => { + const doc = this.backend.getDocument(name) + + if (!doc) { + debugCollabBackend( + 'onConnect: No document available at the time of socket.io join docId=%s socketId=%s', + name, + id + ) + return + } + + socket.emit('msg', { + type: 'document', + payload: Automerge.save(doc) + }) + + debugCollabBackend('Open connection\t\t%s', id) + this.backend.openConnection(id) + }) + + this.garbageCursors(name) + } + + /** + * On 'message' handler + */ + + private onMessage = (id: string, name: string) => (data: any) => { + switch (data.type) { + case 'operation': + try { + this.backend.receiveOperation(id, data) + + this.autoSaveDoc(id, name) + + this.garbageCursors(name) + } catch (e) { + console.log(e) + } + } + } + + /** + * Save document with throttle + */ + + private autoSaveDoc = throttle( + async (id: string, docId: string) => + this.backend.getDocument(docId) && this.saveDocument(id, docId), + // @ts-ignore: property used before initialization + this.options?.saveFrequency || 2000 + ) + + /** + * Save document + */ + + private saveDocument = async (id: string, docId: string) => { + try { + const { onDocumentSave } = this.options + + const doc = this.backend.getDocument(docId) + + // Return early if there is no valid document in our crdt backend + // Note: this will happen when user disconnects from the collab server + // before document load has completed + if (!doc) { + return + } + + const user = this.userMap[id] + + if (onDocumentSave && user) { + await onDocumentSave(docId, toJS(doc.children), user) + } + } catch (e) { + console.error(e, docId) + } + } + + /** + * On 'disconnect' handler + */ + + private onDisconnect = (id: string, socket: SocketIO.Socket) => async () => { + debugCollabBackend('Connection closed\t%s', id) + this.backend.closeConnection(id) + + await this.saveDocument(id, socket.nsp.name) + + // trigger onDisconnect callback if one was provided + // and if a user has been loaded for this socket connection + const user = this.userMap[id] + if (this.options.onDisconnect && user) { + await this.options.onDisconnect(socket.nsp.name, user) + } + + // cleanup automerge cursor and socket connection + this.garbageCursors(socket.nsp.name) + socket.leave(id) + this.garbageNsp(id) + + // cleanup usermap + delete this.userMap[id] + } + + /** + * Clean up unused SocketIO namespaces. + */ + + garbageNsp = (id: string) => { + Object.keys(this.io.nsps) + .filter(n => n !== '/') + .forEach(nsp => { + getClients(this.io, nsp).then((clientsList: any) => { + if (!clientsList.length) { + debugCollabBackend('Removing document\t%s', id) + this.backend.removeDocument(nsp) + delete this.io.nsps[nsp] + } + }) + }) + } + + /** + * Clean up unused cursor data. + */ + + garbageCursors = (nsp: string) => { + const doc = this.backend.getDocument(nsp) + // if document has already been cleaned up, it is safe to return early + if (!doc || !doc.cursors) return + + const namespace = this.io.of(nsp) + + Object.keys(doc?.cursors)?.forEach(key => { + if (!namespace.sockets[key]) { + debugCollabBackend('Garbage cursor\t\t%s', key) + this.backend.garbageCursor(nsp, key) + } + }) + } + + /** + * Destroy SocketIO connection + */ + + destroy = async () => { + this.io.close() + } +} diff --git a/packages/client/src/client-copy.spec.ts b/packages/client/src/client-copy.spec.ts new file mode 100644 index 0000000..5320745 --- /dev/null +++ b/packages/client/src/client-copy.spec.ts @@ -0,0 +1,185 @@ +// import { createEditor, Element, Node, Transforms } from 'slate' +// import * as Automerge from 'automerge' +// import withAutomerge, { AutomergeOptions } from './withAutomerge' +// import { SyncDoc, toJS } from '@hiveteams/collab-bridge' +// import AutomergeCollaboration from '@hiveteams/collab-backend/lib/AutomergeCollaboration' +// import { insertText } from '../../bridge/src/apply/text' + +// describe('automerge editor client tests', () => { +// const docId = 'test' +// const automergeOptions: AutomergeOptions = { +// docId, +// onError: msg => console.log('Encountered test error', msg) +// } +// const editor = withAutomerge(createEditor(), automergeOptions) +// const automergeBackend = new AutomergeBackend() +// const backendSend = (msg: any) => { +// serverMessages.push(msg) +// } +// const clientId = 'test-client' +// editor.clientId = clientId + +// /** +// * Initialize a basic automerge backend +// */ + +// // Create a new server automerge connection with a basic send function +// let serverMessages: any[] = [] +// automergeBackend.appendDocument(docId, [ +// { type: 'paragraph', children: [{ text: 'Hi' }] } +// ]) +// automergeBackend.createConnection(clientId, docId, backendSend) + +// // define an editor send function for the clientside automerge editor +// let clientMessages: any[] = [] +// editor.send = (msg: any) => { +// clientMessages.push(msg) +// } + +// automergeBackend.openConnection(clientId) +// // open the editor connection +// editor.openConnection() + +// /** +// * Helper function to flush client messages and send them to the server +// */ +// const sendClientMessagesToServer = () => { +// if (!clientMessages.length) return + +// console.log('clientMessages', JSON.stringify(clientMessages)) +// clientMessages.forEach(msg => { +// automergeBackend.receiveOperation(clientId, msg) +// }) +// clientMessages = [] +// } + +// /** +// * Helper function to flush server messages and send them to the client +// */ +// const receiveMessagesFromServer = () => { +// if (!serverMessages.length) return + +// console.log('serverMessages', JSON.stringify(serverMessages)) +// serverMessages.forEach(msg => { +// editor.receiveOperation(msg.payload) +// }) +// serverMessages = [] +// } + +// afterEach(() => { +// sendClientMessagesToServer() +// receiveMessagesFromServer() +// }) + +// it('should properly receiveDocument', () => { +// const initialDocData = Automerge.save(automergeBackend.getDocument(docId)) +// editor.receiveDocument(initialDocData) + +// expect(editor.children.length).toEqual(1) +// const paragraphNode = editor.children[0] as Element +// expect(paragraphNode.type).toEqual('paragraph') +// expect(paragraphNode.children.length).toEqual(1) +// expect(Node.string(paragraphNode)).toEqual('Hi') +// }) + +// it('should sync insert node operation with server', done => { +// Transforms.insertNodes(editor, { +// type: 'paragraph', +// children: [{ text: 'a' }] +// }) + +// // ensure that we eventually send a message for the insert_node oepration +// const handle = setInterval(() => { +// sendClientMessagesToServer() +// receiveMessagesFromServer() + +// const serverDoc = toJS(automergeBackend.getDocument(docId)) +// if (serverDoc.children.length === 2) { +// const paragraphNode = serverDoc.children[1] +// expect(Node.string(paragraphNode)).toEqual('a') +// clearInterval(handle) +// done() +// } +// }, 10) +// }) + +// it('should sync insert text operation with client', done => { +// const serverDoc = automergeBackend.getDocument(docId) + +// const updatedServerDoc = Automerge.change(serverDoc, newServerDoc => { +// insertText(newServerDoc as any, { +// type: 'insert_text', +// path: [1, 0], +// offset: 1, +// text: 'b' +// }) +// }) +// automergeBackend.documentSetMap[docId].setDoc(docId, updatedServerDoc) + +// // ensure that we eventually send a message for the insert_node oepration +// const handle = setInterval(() => { +// sendClientMessagesToServer() +// receiveMessagesFromServer() +// const [, secondParagraph] = editor.children +// if (Node.string(secondParagraph) === 'ab') { +// clearInterval(handle) +// done() +// } +// }, 10) +// }) + +// it('should reapply server state client side when server restarts', done => { +// automergeBackend.closeConnection(clientId) +// automergeBackend.removeDocument(docId) +// automergeBackend.appendDocument(docId, [ +// { type: 'paragraph', children: [{ text: 'Hi' }] } +// ]) +// automergeBackend.createConnection(clientId, docId, backendSend) +// automergeBackend.openConnection(clientId) + +// const docData = Automerge.save(automergeBackend.getDocument(docId)) +// editor.receiveDocument(docData) + +// const handle = setInterval(() => { +// sendClientMessagesToServer() +// receiveMessagesFromServer() +// console.log('server doc', toJS(automergeBackend.getDocument(docId))) +// if (editor.children.length === 1) { +// done() +// clearInterval(handle) +// } +// }, 1000) +// }) + +// // it('should ? on client restart', done => { +// // editor.closeConnection() + +// // Transforms.insertNodes( +// // editor, +// // { +// // type: 'paragraph', +// // children: [{ text: 'a' }] +// // }, +// // { at: [1] } +// // ) + +// // editor.openConnection() +// // const docData = Automerge.save(automergeBackend.getDocument(docId)) +// // editor.receiveDocument(docData) +// // // ensure that we eventually send a message for the insert_node operation +// // const handle = setInterval(() => { +// // sendClientMessagesToServer() +// // receiveMessagesFromServer() + +// // const serverDoc = toJS(automergeBackend.getDocument(docId)) +// // console.log(JSON.stringify(serverDoc)) +// // console.log(editor.children) +// // if (serverDoc.children.length === 2) { +// // const paragraphNode = serverDoc.children[1] +// // expect(Node.string(paragraphNode)).toEqual('a') +// // clearInterval(handle) +// // done() +// // } +// // }, 1000) +// // }) +// }) diff --git a/packages/client/src/client.spec.ts b/packages/client/src/client.spec.ts index 87546d8..0074703 100644 --- a/packages/client/src/client.spec.ts +++ b/packages/client/src/client.spec.ts @@ -13,7 +13,11 @@ describe('automerge editor client tests', () => { } const editor = withAutomerge(createEditor(), automergeOptions) const automergeBackend = new AutomergeBackend() + const backendSend = (msg: any) => { + serverMessages.push(msg) + } const clientId = 'test-client' + editor.clientId = clientId /** * Initialize a basic automerge backend @@ -24,10 +28,7 @@ describe('automerge editor client tests', () => { automergeBackend.appendDocument(docId, [ { type: 'paragraph', children: [{ text: 'Hi' }] } ]) - automergeBackend.createConnection(clientId, docId, (msg: any) => { - serverMessages.push(msg) - }) - automergeBackend.openConnection(clientId) + automergeBackend.createConnection(clientId, docId, backendSend) // define an editor send function for the clientside automerge editor let clientMessages: any[] = [] @@ -35,6 +36,7 @@ describe('automerge editor client tests', () => { clientMessages.push(msg) } + automergeBackend.openConnection(clientId) // open the editor connection editor.openConnection() @@ -42,7 +44,9 @@ describe('automerge editor client tests', () => { * Helper function to flush client messages and send them to the server */ const sendClientMessagesToServer = () => { - // console.log('clientMessages', JSON.stringify(clientMessages)) + if (!clientMessages.length) return + + console.log('clientMessages', JSON.stringify(clientMessages)) clientMessages.forEach(msg => { automergeBackend.receiveOperation(clientId, msg) }) @@ -53,9 +57,11 @@ describe('automerge editor client tests', () => { * Helper function to flush server messages and send them to the client */ const receiveMessagesFromServer = () => { + if (!serverMessages.length) return + console.log('serverMessages', JSON.stringify(serverMessages)) serverMessages.forEach(msg => { - editor.receiveOperation(msg) + editor.receiveOperation(msg.payload) }) serverMessages = [] } @@ -115,7 +121,6 @@ describe('automerge editor client tests', () => { sendClientMessagesToServer() receiveMessagesFromServer() const [, secondParagraph] = editor.children - console.log(secondParagraph) if (Node.string(secondParagraph) === 'ab') { clearInterval(handle) done() @@ -123,14 +128,58 @@ describe('automerge editor client tests', () => { }, 10) }) - // it('replicate old state error', done => { - // serverConnection.close() - // serverConnection = new Automerge.Connection(serverDocSet, msg => { - // serverMessages.push(msg) - // }) - // serverConnection.open() + it('should reapply server state client side when server restarts', done => { + automergeBackend.closeConnection(clientId) + automergeBackend.removeDocument(docId) + automergeBackend.appendDocument(docId, [ + { type: 'paragraph', children: [{ text: 'Hi' }] } + ]) + automergeBackend.createConnection(clientId, docId, backendSend) + automergeBackend.openConnection(clientId) - // sendClientMessagesToServer() - // receiveMessagesFromServer() + const docData = Automerge.save(automergeBackend.getDocument(docId)) + editor.receiveDocument(docData) + + const handle = setInterval(() => { + sendClientMessagesToServer() + receiveMessagesFromServer() + console.log('server doc', toJS(automergeBackend.getDocument(docId))) + if (editor.children.length === 1) { + done() + clearInterval(handle) + } + }, 1000) + }) + + // it('should ? on client restart', done => { + // editor.closeConnection() + + // Transforms.insertNodes( + // editor, + // { + // type: 'paragraph', + // children: [{ text: 'a' }] + // }, + // { at: [1] } + // ) + + // editor.openConnection() + // const docData = Automerge.save(automergeBackend.getDocument(docId)) + // editor.receiveDocument(docData) + // // ensure that we eventually send a message for the insert_node operation + // const handle = setInterval(() => { + // sendClientMessagesToServer() + // receiveMessagesFromServer() + + // const serverDoc = toJS(automergeBackend.getDocument(docId)) + // console.log(JSON.stringify(serverDoc)) + // console.log(editor.children) + // if (serverDoc.children.length === 2) { + // const paragraphNode = serverDoc.children[1] + // expect(Node.string(paragraphNode)).toEqual('a') + // clearInterval(handle) + // done() + // } + // }, 1000) // }) }) From c8df4f7ad02599e515864e387ab11bbbb34117ea Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Wed, 6 Jan 2021 15:10:45 -0500 Subject: [PATCH 09/21] v0.7.20-alpha.1 --- CHANGELOG.md | 8 +++++++- lerna.json | 2 +- packages/backend/package.json | 2 +- packages/client/package.json | 4 ++-- packages/example/package.json | 6 +++--- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 021c8f4..bde3e05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,13 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.19...v0.7.19) +#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.0...v0.7.19) + +- feat: automerge collaboration to backend [`0894a7a`](https://github.com/hiveteams/slate-collaborative/commit/0894a7a917949e3ef08a5cd9533258a59b7a3486) + +#### [v0.7.20-alpha.0](https://github.com/hiveteams/slate-collaborative/compare/v0.7.19...v0.7.20-alpha.0) + +> 5 January 2021 - fix: automerge backend import [`2f05bce`](https://github.com/hiveteams/slate-collaborative/commit/2f05bced2bb3f89df829408ecb146fbc51004bd0) diff --git a/lerna.json b/lerna.json index 3f786a6..55a8112 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.20-alpha.0", + "version": "0.7.20-alpha.1", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index cd19737..c879400 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.20-alpha.0", + "version": "0.7.20-alpha.1", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 0640d7c..13d5ef6 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.20-alpha.0", + "version": "0.7.20-alpha.1", "files": [ "lib" ], @@ -41,7 +41,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.20-alpha.0", + "@hiveteams/collab-backend": "^0.7.20-alpha.1", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 484ea4b..28f5b5b 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.20-alpha.0", + "version": "0.7.20-alpha.1", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.20-alpha.0", - "@hiveteams/collab-client": "^0.7.20-alpha.0", + "@hiveteams/collab-backend": "^0.7.20-alpha.1", + "@hiveteams/collab-client": "^0.7.20-alpha.1", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From f425635cf849718aa863402ec6450f9a35353fbb Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 8 Jan 2021 17:27:57 -0500 Subject: [PATCH 10/21] feat: cleaner error handling and basic client tests --- README.md | 4 +- packages/backend/src/AutomergeBackend.ts | 58 ++-- .../backend/src/AutomergeCollaboration.ts | 241 ++++++++----- packages/backend/src/SocketIOConnection.ts | 282 --------------- packages/backend/src/index.ts | 4 +- packages/backend/src/utils/debug.ts | 2 +- packages/client/package.json | 1 + ...merge-editor.ts => automerge-connector.ts} | 32 +- packages/client/src/client-copy.spec.ts | 185 ---------- packages/client/src/client.spec.ts | 328 +++++++++--------- packages/client/src/interfaces.ts | 58 ++++ packages/client/src/useCursor.ts | 2 +- packages/client/src/withAutomerge.ts | 106 +++--- packages/client/src/withIOCollaboration.ts | 14 +- packages/client/src/withSocketIO.ts | 82 ++--- packages/client/tsconfig.json | 5 +- packages/example/server.js | 4 +- 17 files changed, 512 insertions(+), 896 deletions(-) delete mode 100644 packages/backend/src/SocketIOConnection.ts rename packages/client/src/{automerge-editor.ts => automerge-connector.ts} (82%) delete mode 100644 packages/client/src/client-copy.spec.ts create mode 100644 packages/client/src/interfaces.ts diff --git a/README.md b/README.md index 704e899..9aec0b2 100644 --- a/README.md +++ b/README.md @@ -48,9 +48,9 @@ const decorator = useCursor(editor) ## Backend ```ts -const { SocketIOConnection } = require('@hiveteams/collab-backend') +const { AutomergeCollaboration } = require('@hiveteams/collab-backend') -const connection = new SocketIOConnection(options) +const collabBackend = new AutomergeCollaboration(options) ``` ### options: diff --git a/packages/backend/src/AutomergeBackend.ts b/packages/backend/src/AutomergeBackend.ts index 3583d4c..5caa586 100644 --- a/packages/backend/src/AutomergeBackend.ts +++ b/packages/backend/src/AutomergeBackend.ts @@ -53,7 +53,6 @@ class AutomergeBackend { closeConnection(id: string) { this.connectionMap[id]?.close() - delete this.connectionMap[id] } @@ -62,16 +61,12 @@ class AutomergeBackend { */ receiveOperation = (id: string, data: CollabAction) => { - try { - if (!this.connectionMap[id]) { - debugCollabBackend('Could not receive op for closed connection %s', id) - return - } - - this.connectionMap[id].receiveMsg(data.payload) - } catch (e) { - console.error('Unexpected error in receiveOperation', e) + if (!this.connectionMap[id]) { + debugCollabBackend('Could not receive op for closed connection %s', id) + return } + + this.connectionMap[id].receiveMsg(data.payload) } /** @@ -85,19 +80,15 @@ class AutomergeBackend { */ appendDocument = (docId: string, data: Node[]) => { - try { - if (this.getDocument(docId)) { - throw new Error(`Already has document with id: ${docId}`) - } - - const sync = toSync({ cursors: {}, children: data }) - - const doc = Automerge.from(sync) - this.documentSetMap[docId] = new Automerge.DocSet() - this.documentSetMap[docId].setDoc(docId, doc) - } catch (e) { - console.error(e, docId) + if (this.getDocument(docId)) { + throw new Error(`Already has document with id: ${docId}`) } + + const sync = toSync({ cursors: {}, children: data }) + + const doc = Automerge.from(sync) + this.documentSetMap[docId] = new Automerge.DocSet() + this.documentSetMap[docId].setDoc(docId, doc) } /** @@ -105,10 +96,8 @@ class AutomergeBackend { */ removeDocument = (docId: string) => { - if (this.documentSetMap[docId]) { - this.documentSetMap[docId].removeDoc(docId) - delete this.documentSetMap[docId] - } + this.documentSetMap[docId]?.removeDoc(docId) + delete this.documentSetMap[docId] } /** @@ -116,19 +105,16 @@ class AutomergeBackend { */ garbageCursor = (docId: string, id: string) => { - try { - const doc = this.getDocument(docId) + const doc = this.getDocument(docId) - if (!doc || !doc.cursors) return + // no need to delete cursor if the document or cursors have already been deleted + if (!doc || !doc.cursors) return - const change = Automerge.change(doc, (d: any) => { - delete d.cursors[id] - }) + const change = Automerge.change(doc, (d: any) => { + delete d.cursors[id] + }) - this.documentSetMap[docId].setDoc(docId, change) - } catch (e) { - console.error('Unexpected error in garbageCursor', e) - } + this.documentSetMap[docId].setDoc(docId, change) } } diff --git a/packages/backend/src/AutomergeCollaboration.ts b/packages/backend/src/AutomergeCollaboration.ts index 5c84e2f..3d5cd33 100644 --- a/packages/backend/src/AutomergeCollaboration.ts +++ b/packages/backend/src/AutomergeCollaboration.ts @@ -1,4 +1,4 @@ -import io from 'socket.io' +import io, { Socket } from 'socket.io' import * as Automerge from 'automerge' import { Node } from 'slate' import { Server } from 'http' @@ -8,26 +8,35 @@ import { getClients } from './utils/index' import { debugCollabBackend } from './utils/debug' import AutomergeBackend from './AutomergeBackend' +interface ErrorData { + user: any + docId: string + serializedData: string + opData?: string +} + export interface IAutomergeCollaborationOptions { entry: Server connectOpts?: SocketIO.ServerOptions defaultValue: Node[] saveFrequency?: number onAuthRequest?: (query: any, socket?: SocketIO.Socket) => Promise - onDocumentLoad?: (pathname: string, query?: any) => Promise | Node[] + onDocumentLoad?: (docId: string, query?: any) => Promise | Node[] onDocumentSave?: ( - pathname: string, + docId: string, doc: Node[], user: any ) => Promise | void - onDisconnect?: (pathname: string, user: any) => Promise | void + onDisconnect?: (docId: string, user: any) => Promise | void + onError: (error: Error, data: ErrorData) => Promise | void } export default class AutomergeCollaboration { private io: SocketIO.Server private options: IAutomergeCollaborationOptions - private backend: AutomergeBackend + public backend: AutomergeBackend private userMap: { [key: string]: any | undefined } + private autoSaveDoc: (socket: SocketIO.Socket, docId: string) => void /** * Constructor @@ -44,6 +53,15 @@ export default class AutomergeCollaboration { this.userMap = {} + /** + * Save document with throttle + */ + this.autoSaveDoc = throttle( + async (socket: SocketIO.Socket, docId: string) => + this.backend.getDocument(docId) && this.saveDocument(socket, docId), + this.options?.saveFrequency || 2000 + ) + return this } @@ -57,6 +75,24 @@ export default class AutomergeCollaboration { .use(this.authMiddleware) .on('connect', this.onConnect) + /** + * Construct error data and call onError callback + */ + private handleError(socket: SocketIO.Socket, err: Error, opData?: string) { + const { id } = socket + const { name: docId } = socket.nsp + + if (this.options.onError) { + const document = this.backend.getDocument(docId) + this.options.onError(err, { + user: this.userMap[id], + docId: docId, + serializedData: document ? Automerge.save(document) : 'No document', + opData + }) + } + } + /** * Namespace SocketIO middleware. Load document value and append it to CollaborationBackend. */ @@ -73,13 +109,12 @@ export default class AutomergeCollaboration { socket: SocketIO.Socket, next: (e?: any) => void ) => { - const { id } = socket const { query } = socket.handshake const { onAuthRequest } = this.options // we connect before any async logic so that we // never miss a socket disconnection event - socket.on('disconnect', this.onDisconnect(id, socket)) + socket.on('disconnect', this.onDisconnect(socket)) if (onAuthRequest) { const user = await onAuthRequest(query, socket) @@ -98,55 +133,65 @@ export default class AutomergeCollaboration { private onConnect = async (socket: SocketIO.Socket) => { const { id, conn } = socket + // do nothing if the socket connection has already been closed if (conn.readyState === 'closed') { return } - const { name } = socket.nsp + const { name: docId } = socket.nsp const { onDocumentLoad } = this.options - if (!this.backend.getDocument(name)) { - const doc = onDocumentLoad - ? await onDocumentLoad(name) - : this.options.defaultValue + try { + // Load document if no document state is already stored in our automerge backend + if (!this.backend.getDocument(docId)) { + // If the user provided an onDocumentLoad function use that, otherwise use the + // default value that was provided in the options + const doc = onDocumentLoad + ? await onDocumentLoad(docId) + : this.options.defaultValue - // Ensure socket is still opened - // recheck ready state after async operation - if (conn.readyState === 'closed') { - return + // Ensure socket is still opened + // recheck websocket connection state after the previous potentially async document load + if (conn.readyState === 'closed') { + return + } + + // recheck backend getDocument after async operation + // to avoid duplicatively loading a document + if (!this.backend.getDocument(docId)) { + debugCollabBackend('Append document\t\t%s', id) + this.backend.appendDocument(docId, doc) + } } - // recheck backend getDocument after async operation - if (!this.backend.getDocument(name)) { - debugCollabBackend('Append document\t\t%s', id) - this.backend.appendDocument(name, doc) - } - } + // Create a new backend connection for this socketId and docId + debugCollabBackend('Create connection\t%s', id) + this.backend.createConnection( + id, + docId, + ({ type, payload }: CollabAction) => { + if (payload.docId === docId) { + socket.emit('msg', { type, payload: { id: conn.id, ...payload } }) + } + } + ) - debugCollabBackend('Create connection\t%s', id) - this.backend.createConnection( - id, - name, - ({ type, payload }: CollabAction) => { - socket.emit('msg', { type, payload: { id: conn.id, ...payload } }) - } - ) - - socket.on('msg', this.onMessage(id, name)) - - socket.join(id, () => { - const doc = this.backend.getDocument(name) + // Setup the on message callback + socket.on('msg', this.onMessage(socket, docId)) + const doc = this.backend.getDocument(docId) if (!doc) { debugCollabBackend( 'onConnect: No document available at the time of socket.io join docId=%s socketId=%s', - name, + docId, id ) return } + // Emit the socket message needed for receiving the automerge document + // on connect and reconnect socket.emit('msg', { type: 'document', payload: Automerge.save(doc) @@ -154,47 +199,41 @@ export default class AutomergeCollaboration { debugCollabBackend('Open connection\t\t%s', id) this.backend.openConnection(id) - }) - - this.garbageCursors(name) + this.garbageCursors(socket) + } catch (err) { + this.handleError(socket, err) + } } /** * On 'message' handler */ - private onMessage = (id: string, name: string) => (data: any) => { + private onMessage = (socket: SocketIO.Socket, docId: string) => ( + data: any + ) => { + const { id } = socket switch (data.type) { case 'operation': try { this.backend.receiveOperation(id, data) - this.autoSaveDoc(id, name) + this.autoSaveDoc(socket, docId) - this.garbageCursors(name) + this.garbageCursors(socket) } catch (e) { - console.log(e) + this.handleError(socket, e, JSON.stringify(data)) } } } - /** - * Save document with throttle - */ - - private autoSaveDoc = throttle( - async (id: string, docId: string) => - this.backend.getDocument(docId) && this.saveDocument(id, docId), - // @ts-ignore: property used before initialization - this.options?.saveFrequency || 2000 - ) - /** * Save document */ - private saveDocument = async (id: string, docId: string) => { + private saveDocument = async (socket: SocketIO.Socket, docId: string) => { try { + const { id } = socket const { onDocumentSave } = this.options const doc = this.backend.getDocument(docId) @@ -212,7 +251,7 @@ export default class AutomergeCollaboration { await onDocumentSave(docId, toJS(doc.children), user) } } catch (e) { - console.error(e, docId) + this.handleError(socket, e) } } @@ -220,43 +259,56 @@ export default class AutomergeCollaboration { * On 'disconnect' handler */ - private onDisconnect = (id: string, socket: SocketIO.Socket) => async () => { - debugCollabBackend('Connection closed\t%s', id) - this.backend.closeConnection(id) + private onDisconnect = (socket: SocketIO.Socket) => async () => { + try { + const { id } = socket + const { name: docId } = socket.nsp + socket.leave(docId) - await this.saveDocument(id, socket.nsp.name) + debugCollabBackend('Connection closed\t%s', id) + this.backend.closeConnection(id) - // trigger onDisconnect callback if one was provided - // and if a user has been loaded for this socket connection - const user = this.userMap[id] - if (this.options.onDisconnect && user) { - await this.options.onDisconnect(socket.nsp.name, user) + await this.saveDocument(socket, docId) + + // trigger onDisconnect callback if one was provided + // and if a user has been loaded for this socket connection + const user = this.userMap[id] + if (this.options.onDisconnect && user) { + await this.options.onDisconnect(docId, user) + } + + // cleanup automerge cursor and socket connection + this.garbageCursors(socket) + socket.leave(id) + this.garbageNsp(socket) + + // cleanup usermap + delete this.userMap[id] + } catch (err) { + this.handleError(socket, err) } - - // cleanup automerge cursor and socket connection - this.garbageCursors(socket.nsp.name) - socket.leave(id) - this.garbageNsp(id) - - // cleanup usermap - delete this.userMap[id] } /** * Clean up unused SocketIO namespaces. */ - garbageNsp = (id: string) => { + garbageNsp = (socket: SocketIO.Socket) => { + const { name: docId } = socket.nsp Object.keys(this.io.nsps) .filter(n => n !== '/') .forEach(nsp => { - getClients(this.io, nsp).then((clientsList: any) => { - if (!clientsList.length) { - debugCollabBackend('Removing document\t%s', id) - this.backend.removeDocument(nsp) - delete this.io.nsps[nsp] - } - }) + getClients(this.io, nsp) + .then((clientsList: any) => { + if (!clientsList.length) { + debugCollabBackend('Removing document\t%s', docId) + this.backend.removeDocument(nsp) + delete this.io.nsps[nsp] + } + }) + .catch(err => { + this.handleError(socket, err) + }) }) } @@ -264,19 +316,24 @@ export default class AutomergeCollaboration { * Clean up unused cursor data. */ - garbageCursors = (nsp: string) => { - const doc = this.backend.getDocument(nsp) - // if document has already been cleaned up, it is safe to return early - if (!doc || !doc.cursors) return + garbageCursors = (socket: SocketIO.Socket) => { + const { name: docId } = socket.nsp + try { + const doc = this.backend.getDocument(docId) + // if document has already been cleaned up, it is safe to return early + if (!doc || !doc.cursors) return - const namespace = this.io.of(nsp) + const namespace = this.io.of(docId) - Object.keys(doc?.cursors)?.forEach(key => { - if (!namespace.sockets[key]) { - debugCollabBackend('Garbage cursor\t\t%s', key) - this.backend.garbageCursor(nsp, key) - } - }) + Object.keys(doc?.cursors)?.forEach(key => { + if (!namespace.sockets[key]) { + debugCollabBackend('Garbage cursor\t\t%s', key) + this.backend.garbageCursor(docId, key) + } + }) + } catch (err) { + this.handleError(socket, err) + } } /** diff --git a/packages/backend/src/SocketIOConnection.ts b/packages/backend/src/SocketIOConnection.ts deleted file mode 100644 index afdd17b..0000000 --- a/packages/backend/src/SocketIOConnection.ts +++ /dev/null @@ -1,282 +0,0 @@ -import io from 'socket.io' -import * as Automerge from 'automerge' -import { Node } from 'slate' -import { Server } from 'http' - -import throttle from 'lodash/throttle' - -import { SyncDoc, CollabAction, toJS } from '@hiveteams/collab-bridge' - -import { getClients } from './utils' - -import AutomergeBackend from './AutomergeBackend' -import { debugCollabBackend } from './utils/debug' - -export interface SocketIOCollaborationOptions { - entry: Server - connectOpts?: SocketIO.ServerOptions - defaultValue: Node[] - saveFrequency?: number - onAuthRequest?: ( - query: Object, - socket?: SocketIO.Socket - ) => Promise | boolean - onDocumentLoad?: ( - pathname: string, - query?: Object - ) => Promise | Node[] - onDocumentSave?: (pathname: string, doc: Node[]) => Promise | void -} - -export default class SocketIOCollaboration { - private io: SocketIO.Server - private options: SocketIOCollaborationOptions - private backend: AutomergeBackend - private autoSaveDoc: (id: string, docId: string) => void - - /** - * Constructor - */ - - constructor(options: SocketIOCollaborationOptions) { - this.io = io(options.entry, options.connectOpts) - - this.backend = new AutomergeBackend() - - this.options = options - - /** - * Save document with throttle - */ - this.autoSaveDoc = throttle( - async (id: string, docId: string) => - this.backend.getDocument(docId) && this.saveDocument(id, docId), - this.options?.saveFrequency || 2000 - ) - - this.configure() - - return this - } - - /** - * Initial IO configuration - */ - - private configure = () => - this.io - .of(this.nspMiddleware) - .use(this.authMiddleware) - .on('connect', this.onConnect) - - /** - * Namespace SocketIO middleware. Load document value and append it to CollaborationBackend. - */ - - private nspMiddleware = async (path: string, query: any, next: any) => { - return next(null, true) - } - - /** - * SocketIO auth middleware. Used for user authentification. - */ - - private authMiddleware = async ( - socket: SocketIO.Socket, - next: (e?: any) => void - ) => { - const { id } = socket - const { query } = socket.handshake - const { onAuthRequest } = this.options - - // we connect before any async logic so that we - // never miss a socket disconnection event - socket.on('disconnect', this.onDisconnect(id, socket)) - - if (onAuthRequest) { - const permit = await onAuthRequest(query, socket) - - if (!permit) - return next(new Error(`Authentification error: ${socket.id}`)) - } - - return next() - } - - /** - * On 'connect' handler. - */ - - private onConnect = async (socket: SocketIO.Socket) => { - const { id, conn } = socket - // do nothing if the socket connection has already been closed - if (conn.readyState === 'closed') { - return - } - - const { name } = socket.nsp - const { onDocumentLoad } = this.options - - if (!this.backend.getDocument(name)) { - const doc = onDocumentLoad - ? await onDocumentLoad(name) - : this.options.defaultValue - - // Ensure socket is still opened - // recheck ready state after async operation - if (conn.readyState === 'closed') { - return - } - - // recheck backend getDocument after async operation - if (!this.backend.getDocument(name)) { - debugCollabBackend('Append document\t\t%s', id) - this.backend.appendDocument(name, doc) - } - } - - debugCollabBackend('Create connection\t%s', id) - this.backend.createConnection( - id, - name, - ({ type, payload }: CollabAction) => { - socket.emit('msg', { type, payload: { id: conn.id, ...payload } }) - } - ) - - socket.on('msg', this.onMessage(id, name)) - - socket.join(id, () => { - const doc = this.backend.getDocument(name) - - if (!doc) { - debugCollabBackend( - 'onConnect: No document available at the time of socket.io join docId=%s socketId=%s', - name, - id - ) - return - } - - socket.emit('msg', { - type: 'document', - payload: Automerge.save(doc) - }) - - debugCollabBackend('Open connection\t\t%s', id) - this.backend.openConnection(id) - }) - - this.garbageCursors(name) - } - - /** - * On 'message' handler - */ - - private onMessage = (id: string, name: string) => (data: any) => { - switch (data.type) { - case 'operation': - try { - this.backend.receiveOperation(id, data) - - this.autoSaveDoc(id, name) - - this.garbageCursors(name) - } catch (e) { - console.log(e) - } - } - } - - /** - * Save document - */ - - private saveDocument = async (id: string, docId: string) => { - try { - const { onDocumentSave } = this.options - - const doc = this.backend.getDocument(docId) - - // Return early if there is no valid document in our crdt backend - // Note: this will happen when user disconnects from the collab server - // before document load has completed - if (!doc) { - return - } - - onDocumentSave && (await onDocumentSave(docId, toJS(doc.children))) - } catch (e) { - console.error(e, docId) - } - } - - /** - * On 'disconnect' handler - */ - - private onDisconnect = (id: string, socket: SocketIO.Socket) => async () => { - debugCollabBackend('Connection closed\t%s', id) - this.backend.closeConnection(id) - - await this.saveDocument(id, socket.nsp.name) - - // cleanup automerge cursor and socket connection - this.garbageCursors(socket.nsp.name) - - socket.leave(id) - this.garbageNsp(id) - } - - /** - * Clean up unused SocketIO namespaces. - */ - - garbageNsp = (id: string) => { - Object.keys(this.io.nsps) - .filter(n => n !== '/') - .forEach(nsp => { - getClients(this.io, nsp).then((clientsList: any) => { - debugCollabBackend( - 'Garbage namespace\t%s clientsList=%o %s', - id, - clientsList, - nsp - ) - if (!clientsList.length) { - debugCollabBackend('Removing document\t%s', id) - this.backend.removeDocument(nsp) - delete this.io.nsps[nsp] - } - }) - }) - } - - /** - * Clean up unused cursor data. - */ - - garbageCursors = (nsp: string) => { - const doc = this.backend.getDocument(nsp) - // if document has already been cleaned up, it is safe to return early - if (!doc || !doc.cursors) return - - const namespace = this.io.of(nsp) - - Object.keys(doc?.cursors)?.forEach(key => { - if (!namespace.sockets[key]) { - debugCollabBackend('Garbage cursor\t\t%s', key) - this.backend.garbageCursor(nsp, key) - } - }) - } - - /** - * Destroy SocketIO connection - */ - - destroy = async () => { - this.io.close() - } -} diff --git a/packages/backend/src/index.ts b/packages/backend/src/index.ts index 9794ea9..f25625d 100644 --- a/packages/backend/src/index.ts +++ b/packages/backend/src/index.ts @@ -1,3 +1,3 @@ -import SocketIOConnection from './SocketIOConnection' +import AutomergeCollaboration from './AutomergeCollaboration' -export { SocketIOConnection } +export { AutomergeCollaboration } diff --git a/packages/backend/src/utils/debug.ts b/packages/backend/src/utils/debug.ts index 455d4aa..5b8bf9f 100644 --- a/packages/backend/src/utils/debug.ts +++ b/packages/backend/src/utils/debug.ts @@ -1,3 +1,3 @@ import debug from 'debug' -export const debugCollabBackend = debug('collab-backend') +export const debugCollabBackend = debug('app-collab') diff --git a/packages/client/package.json b/packages/client/package.json index 13d5ef6..00d4667 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -29,6 +29,7 @@ "@babel/preset-react": "^7.0.0", "@hiveteams/collab-bridge": "^0.7.19", "automerge": "0.14.0", + "lodash": "^4.17.20", "slate": "0.58.3", "slate-history": "0.58.3", "socket.io-client": "^2.3.0", diff --git a/packages/client/src/automerge-editor.ts b/packages/client/src/automerge-connector.ts similarity index 82% rename from packages/client/src/automerge-editor.ts rename to packages/client/src/automerge-connector.ts index 31d4260..773d4b9 100644 --- a/packages/client/src/automerge-editor.ts +++ b/packages/client/src/automerge-connector.ts @@ -13,35 +13,13 @@ import { toSlateOp, CursorData } from '@hiveteams/collab-bridge' - -export interface AutomergeEditor extends Editor { - clientId: string - - isRemote: boolean - - docSet: Automerge.DocSet - connection: Automerge.Connection - - onConnectionMsg: (msg: Automerge.Message) => void - - openConnection: () => void - closeConnection: () => void - - receiveDocument: (data: string) => void - receiveOperation: (data: Automerge.Message) => void - - gabageCursor: () => void - - onCursor: (data: any) => void - - automergeCleanup: () => void -} +import { AutomergeEditor } from './interfaces' /** * `AutomergeEditor` contains methods for collaboration-enabled editors. */ -export const AutomergeEditor = { +export const AutomergeConnector = { /** * Create Automerge connection */ @@ -62,7 +40,7 @@ export const AutomergeEditor = { const doc = e.docSet.getDoc(docId) if (!doc) { - throw new TypeError(`Unknown docId: ${docId}!`) + throw new TypeError('Cannot apply slate ops for missing docId') } let changed: any @@ -114,7 +92,7 @@ export const AutomergeEditor = { preserveExternalHistory?: boolean ) => { try { - const current: any = e.docSet.getDoc(docId) + const current = e.docSet.getDoc(docId) const updated = e.connection.receiveMsg(data) @@ -160,7 +138,7 @@ export const AutomergeEditor = { delete d.cursors }) - e.docSet.setDoc(docId, changed) + e.docSet.setDoc(docId, changed as any) e.onCursor && e.onCursor(null) diff --git a/packages/client/src/client-copy.spec.ts b/packages/client/src/client-copy.spec.ts deleted file mode 100644 index 5320745..0000000 --- a/packages/client/src/client-copy.spec.ts +++ /dev/null @@ -1,185 +0,0 @@ -// import { createEditor, Element, Node, Transforms } from 'slate' -// import * as Automerge from 'automerge' -// import withAutomerge, { AutomergeOptions } from './withAutomerge' -// import { SyncDoc, toJS } from '@hiveteams/collab-bridge' -// import AutomergeCollaboration from '@hiveteams/collab-backend/lib/AutomergeCollaboration' -// import { insertText } from '../../bridge/src/apply/text' - -// describe('automerge editor client tests', () => { -// const docId = 'test' -// const automergeOptions: AutomergeOptions = { -// docId, -// onError: msg => console.log('Encountered test error', msg) -// } -// const editor = withAutomerge(createEditor(), automergeOptions) -// const automergeBackend = new AutomergeBackend() -// const backendSend = (msg: any) => { -// serverMessages.push(msg) -// } -// const clientId = 'test-client' -// editor.clientId = clientId - -// /** -// * Initialize a basic automerge backend -// */ - -// // Create a new server automerge connection with a basic send function -// let serverMessages: any[] = [] -// automergeBackend.appendDocument(docId, [ -// { type: 'paragraph', children: [{ text: 'Hi' }] } -// ]) -// automergeBackend.createConnection(clientId, docId, backendSend) - -// // define an editor send function for the clientside automerge editor -// let clientMessages: any[] = [] -// editor.send = (msg: any) => { -// clientMessages.push(msg) -// } - -// automergeBackend.openConnection(clientId) -// // open the editor connection -// editor.openConnection() - -// /** -// * Helper function to flush client messages and send them to the server -// */ -// const sendClientMessagesToServer = () => { -// if (!clientMessages.length) return - -// console.log('clientMessages', JSON.stringify(clientMessages)) -// clientMessages.forEach(msg => { -// automergeBackend.receiveOperation(clientId, msg) -// }) -// clientMessages = [] -// } - -// /** -// * Helper function to flush server messages and send them to the client -// */ -// const receiveMessagesFromServer = () => { -// if (!serverMessages.length) return - -// console.log('serverMessages', JSON.stringify(serverMessages)) -// serverMessages.forEach(msg => { -// editor.receiveOperation(msg.payload) -// }) -// serverMessages = [] -// } - -// afterEach(() => { -// sendClientMessagesToServer() -// receiveMessagesFromServer() -// }) - -// it('should properly receiveDocument', () => { -// const initialDocData = Automerge.save(automergeBackend.getDocument(docId)) -// editor.receiveDocument(initialDocData) - -// expect(editor.children.length).toEqual(1) -// const paragraphNode = editor.children[0] as Element -// expect(paragraphNode.type).toEqual('paragraph') -// expect(paragraphNode.children.length).toEqual(1) -// expect(Node.string(paragraphNode)).toEqual('Hi') -// }) - -// it('should sync insert node operation with server', done => { -// Transforms.insertNodes(editor, { -// type: 'paragraph', -// children: [{ text: 'a' }] -// }) - -// // ensure that we eventually send a message for the insert_node oepration -// const handle = setInterval(() => { -// sendClientMessagesToServer() -// receiveMessagesFromServer() - -// const serverDoc = toJS(automergeBackend.getDocument(docId)) -// if (serverDoc.children.length === 2) { -// const paragraphNode = serverDoc.children[1] -// expect(Node.string(paragraphNode)).toEqual('a') -// clearInterval(handle) -// done() -// } -// }, 10) -// }) - -// it('should sync insert text operation with client', done => { -// const serverDoc = automergeBackend.getDocument(docId) - -// const updatedServerDoc = Automerge.change(serverDoc, newServerDoc => { -// insertText(newServerDoc as any, { -// type: 'insert_text', -// path: [1, 0], -// offset: 1, -// text: 'b' -// }) -// }) -// automergeBackend.documentSetMap[docId].setDoc(docId, updatedServerDoc) - -// // ensure that we eventually send a message for the insert_node oepration -// const handle = setInterval(() => { -// sendClientMessagesToServer() -// receiveMessagesFromServer() -// const [, secondParagraph] = editor.children -// if (Node.string(secondParagraph) === 'ab') { -// clearInterval(handle) -// done() -// } -// }, 10) -// }) - -// it('should reapply server state client side when server restarts', done => { -// automergeBackend.closeConnection(clientId) -// automergeBackend.removeDocument(docId) -// automergeBackend.appendDocument(docId, [ -// { type: 'paragraph', children: [{ text: 'Hi' }] } -// ]) -// automergeBackend.createConnection(clientId, docId, backendSend) -// automergeBackend.openConnection(clientId) - -// const docData = Automerge.save(automergeBackend.getDocument(docId)) -// editor.receiveDocument(docData) - -// const handle = setInterval(() => { -// sendClientMessagesToServer() -// receiveMessagesFromServer() -// console.log('server doc', toJS(automergeBackend.getDocument(docId))) -// if (editor.children.length === 1) { -// done() -// clearInterval(handle) -// } -// }, 1000) -// }) - -// // it('should ? on client restart', done => { -// // editor.closeConnection() - -// // Transforms.insertNodes( -// // editor, -// // { -// // type: 'paragraph', -// // children: [{ text: 'a' }] -// // }, -// // { at: [1] } -// // ) - -// // editor.openConnection() -// // const docData = Automerge.save(automergeBackend.getDocument(docId)) -// // editor.receiveDocument(docData) -// // // ensure that we eventually send a message for the insert_node operation -// // const handle = setInterval(() => { -// // sendClientMessagesToServer() -// // receiveMessagesFromServer() - -// // const serverDoc = toJS(automergeBackend.getDocument(docId)) -// // console.log(JSON.stringify(serverDoc)) -// // console.log(editor.children) -// // if (serverDoc.children.length === 2) { -// // const paragraphNode = serverDoc.children[1] -// // expect(Node.string(paragraphNode)).toEqual('a') -// // clearInterval(handle) -// // done() -// // } -// // }, 1000) -// // }) -// }) diff --git a/packages/client/src/client.spec.ts b/packages/client/src/client.spec.ts index 0074703..f7f1975 100644 --- a/packages/client/src/client.spec.ts +++ b/packages/client/src/client.spec.ts @@ -1,185 +1,193 @@ -import { createEditor, Element, Node, Transforms } from 'slate' -import * as Automerge from 'automerge' -import withAutomerge, { AutomergeOptions } from './withAutomerge' -import { SyncDoc, toJS } from '@hiveteams/collab-bridge' -import AutomergeBackend from '@hiveteams/collab-backend/lib/AutomergeBackend' -import { insertText } from '../../bridge/src/apply/text' +import { createServer } from 'http' +import isEqual from 'lodash/isEqual' +import { createEditor, Node, Transforms } from 'slate' +import { toJS } from '@hiveteams/collab-bridge' +import AutomergeCollaboration from '@hiveteams/collab-backend/lib/AutomergeCollaboration' +import withIOCollaboration from './withIOCollaboration' +import { AutomergeOptions, SocketIOPluginOptions } from './interfaces' + +const connectionSlug = 'test' +const docId = `/${connectionSlug}` +const options: AutomergeOptions & SocketIOPluginOptions = { + docId, + onError: msg => console.log('Encountered test error', msg), + url: `http://localhost:5000/${connectionSlug}`, + connectOpts: { + query: { + name: 'test-user', + slug: connectionSlug + }, + forceNew: true + } +} + +const waitForCondition = (condition: () => boolean, ms = 10) => + new Promise(resolve => { + const handle = setInterval(() => { + if (condition()) { + clearInterval(handle) + resolve() + } + }, ms) + }) + +const server = createServer(function(req, res) { + res.writeHead(200, { 'Content-Type': 'text/plain' }) + res.write('Hello World!') + res.end() +}) + +const defaultSlateJson = [{ type: 'paragraph', children: [{ text: '' }] }] +const collabBackend = new AutomergeCollaboration({ + entry: server, + defaultValue: defaultSlateJson, + saveFrequency: 1000, + async onAuthRequest(query) { + return { _id: 'test-id', name: 'Eric' } + }, + async onDocumentLoad(pathname) { + return defaultSlateJson + } +}) describe('automerge editor client tests', () => { - const docId = 'test' - const automergeOptions: AutomergeOptions = { - docId, - onError: msg => console.log('Encountered test error', msg) - } - const editor = withAutomerge(createEditor(), automergeOptions) - const automergeBackend = new AutomergeBackend() - const backendSend = (msg: any) => { - serverMessages.push(msg) - } - const clientId = 'test-client' - editor.clientId = clientId - - /** - * Initialize a basic automerge backend - */ - - // Create a new server automerge connection with a basic send function - let serverMessages: any[] = [] - automergeBackend.appendDocument(docId, [ - { type: 'paragraph', children: [{ text: 'Hi' }] } - ]) - automergeBackend.createConnection(clientId, docId, backendSend) - - // define an editor send function for the clientside automerge editor - let clientMessages: any[] = [] - editor.send = (msg: any) => { - clientMessages.push(msg) - } - - automergeBackend.openConnection(clientId) - // open the editor connection - editor.openConnection() - - /** - * Helper function to flush client messages and send them to the server - */ - const sendClientMessagesToServer = () => { - if (!clientMessages.length) return - - console.log('clientMessages', JSON.stringify(clientMessages)) - clientMessages.forEach(msg => { - automergeBackend.receiveOperation(clientId, msg) - }) - clientMessages = [] - } - - /** - * Helper function to flush server messages and send them to the client - */ - const receiveMessagesFromServer = () => { - if (!serverMessages.length) return - - console.log('serverMessages', JSON.stringify(serverMessages)) - serverMessages.forEach(msg => { - editor.receiveOperation(msg.payload) - }) - serverMessages = [] - } - - afterEach(() => { - sendClientMessagesToServer() - receiveMessagesFromServer() + beforeAll(done => { + //pass a callback to tell jest it is async + //start the server before any test + server.listen(5000, () => done()) }) - it('should properly receiveDocument', () => { - const initialDocData = Automerge.save(automergeBackend.getDocument(docId)) - editor.receiveDocument(initialDocData) + const createCollabEditor = async ( + editorOptions: AutomergeOptions & SocketIOPluginOptions = options + ) => { + const editor = withIOCollaboration(createEditor(), editorOptions) + const oldReceiveDocument = editor.receiveDocument + const promise = new Promise(resolve => { + editor.receiveDocument = data => { + oldReceiveDocument(data) + resolve() + } + }) + editor.connect() + + await promise + return editor + } + + it('should receiveDocument', async () => { + const editor = await createCollabEditor() expect(editor.children.length).toEqual(1) - const paragraphNode = editor.children[0] as Element - expect(paragraphNode.type).toEqual('paragraph') - expect(paragraphNode.children.length).toEqual(1) - expect(Node.string(paragraphNode)).toEqual('Hi') + editor.destroy() }) - it('should sync insert node operation with server', done => { - Transforms.insertNodes(editor, { - type: 'paragraph', - children: [{ text: 'a' }] + it('should send client update to server', async () => { + const editor = await createCollabEditor() + + editor.insertNode({ type: 'paragraph', children: [{ text: 'hi' }] }) + + await waitForCondition(() => { + const serverDoc = toJS(collabBackend.backend.getDocument(docId)) + return serverDoc.children.length === 2 }) - // ensure that we eventually send a message for the insert_node oepration - const handle = setInterval(() => { - sendClientMessagesToServer() - receiveMessagesFromServer() - - const serverDoc = toJS(automergeBackend.getDocument(docId)) - if (serverDoc.children.length === 2) { - const paragraphNode = serverDoc.children[1] - expect(Node.string(paragraphNode)).toEqual('a') - clearInterval(handle) - done() - } - }, 10) + editor.destroy() }) - it('should sync insert text operation with client', done => { - const serverDoc = automergeBackend.getDocument(docId) + it('should sync updates across two clients', async () => { + const editor1 = await createCollabEditor() + const editor2 = await createCollabEditor() - const updatedServerDoc = Automerge.change(serverDoc, newServerDoc => { - insertText(newServerDoc as any, { - type: 'insert_text', - path: [1, 0], - offset: 1, - text: 'b' - }) + editor1.insertNode({ type: 'paragraph', children: [{ text: 'hi' }] }) + + await waitForCondition(() => { + const serverDoc = toJS(collabBackend.backend.getDocument(docId)) + return serverDoc.children.length === 2 && editor2.children.length === 2 }) - automergeBackend.documentSetMap[docId].setDoc(docId, updatedServerDoc) - // ensure that we eventually send a message for the insert_node oepration - const handle = setInterval(() => { - sendClientMessagesToServer() - receiveMessagesFromServer() - const [, secondParagraph] = editor.children - if (Node.string(secondParagraph) === 'ab') { - clearInterval(handle) - done() - } - }, 10) + editor1.destroy() + editor2.destroy() }) - it('should reapply server state client side when server restarts', done => { - automergeBackend.closeConnection(clientId) - automergeBackend.removeDocument(docId) - automergeBackend.appendDocument(docId, [ - { type: 'paragraph', children: [{ text: 'Hi' }] } - ]) - automergeBackend.createConnection(clientId, docId, backendSend) - automergeBackend.openConnection(clientId) + it('should sync offline changes on reconnect', async () => { + const editor1 = await createCollabEditor() + const editor2 = await createCollabEditor() - const docData = Automerge.save(automergeBackend.getDocument(docId)) - editor.receiveDocument(docData) + editor1.insertNode({ type: 'paragraph', children: [{ text: 'hi' }] }) - const handle = setInterval(() => { - sendClientMessagesToServer() - receiveMessagesFromServer() - console.log('server doc', toJS(automergeBackend.getDocument(docId))) - if (editor.children.length === 1) { - done() - clearInterval(handle) - } - }, 1000) + await waitForCondition(() => { + const serverDoc = toJS(collabBackend.backend.getDocument(docId)) + return serverDoc.children.length === 2 && editor2.children.length === 2 + }) + + editor1.destroy() + + editor1.insertNode({ type: 'paragraph', children: [{ text: 'offline' }] }) + + editor1.connect() + + await waitForCondition(() => { + const serverDoc = toJS(collabBackend.backend.getDocument(docId)) + return serverDoc.children.length === 3 && editor2.children.length === 3 + }) + + expect(Node.string(editor2.children[2])).toEqual('offline') + + editor1.destroy() + editor2.destroy() }) - // it('should ? on client restart', done => { - // editor.closeConnection() + it('should work with concurrent edits', async () => { + const editor1 = await createCollabEditor() + const editor2 = await createCollabEditor() - // Transforms.insertNodes( - // editor, - // { - // type: 'paragraph', - // children: [{ text: 'a' }] - // }, - // { at: [1] } - // ) + const numEdits = 10 + for (let i = 0; i < numEdits; i++) { + editor1.insertNode({ type: 'paragraph', children: [{ text: '' }] }) + editor2.insertNode({ type: 'paragraph', children: [{ text: '' }] }) + } - // editor.openConnection() - // const docData = Automerge.save(automergeBackend.getDocument(docId)) - // editor.receiveDocument(docData) - // // ensure that we eventually send a message for the insert_node operation - // const handle = setInterval(() => { - // sendClientMessagesToServer() - // receiveMessagesFromServer() + await waitForCondition(() => { + return ( + editor1.children.length === numEdits * 2 + 1 && + editor2.children.length === numEdits * 2 + 1 + ) + }) - // const serverDoc = toJS(automergeBackend.getDocument(docId)) - // console.log(JSON.stringify(serverDoc)) - // console.log(editor.children) - // if (serverDoc.children.length === 2) { - // const paragraphNode = serverDoc.children[1] - // expect(Node.string(paragraphNode)).toEqual('a') - // clearInterval(handle) - // done() - // } - // }, 1000) - // }) + expect(isEqual(editor1.children, editor2.children)).toBeTruthy() + + editor1.destroy() + editor2.destroy() + }) + + it('should work with concurrent insert text operations', async () => { + const editor1 = await createCollabEditor() + const editor2 = await createCollabEditor() + + Transforms.select(editor1, [0, 0]) + Transforms.select(editor2, [0, 0]) + + const numEdits = 10 + for (let i = 0; i < numEdits; i++) { + editor1.insertText('a') + editor2.insertText('b') + } + + await waitForCondition(() => { + return ( + Node.string(editor1.children[0]).length === numEdits * 2 && + Node.string(editor2.children[0]).length === numEdits * 2 + ) + }) + + expect(isEqual(editor1.children, editor2.children)).toBeTruthy() + + editor1.destroy() + editor2.destroy() + }) + + afterAll(() => { + collabBackend.destroy() + server.close() + }) }) diff --git a/packages/client/src/interfaces.ts b/packages/client/src/interfaces.ts new file mode 100644 index 0000000..5fd3104 --- /dev/null +++ b/packages/client/src/interfaces.ts @@ -0,0 +1,58 @@ +import Automerge from 'automerge' +import { Editor } from 'slate' +import { CollabAction, CursorData, SyncDoc } from '@hiveteams/collab-bridge' + +interface ErrorData { + docId: string + serializedData: string + opData?: string + slateOperations?: string +} + +export interface AutomergeOptions { + docId: string + cursorData?: CursorData + preserveExternalHistory?: boolean + onError?: (msg: string | Error, data: ErrorData) => void +} + +export interface AutomergeEditor extends Editor { + clientId: string + + isRemote: boolean + + docSet: Automerge.DocSet + connection: Automerge.Connection + + onConnectionMsg: (msg: Automerge.Message) => void + + openConnection: () => void + closeConnection: () => void + + receiveDocument: (data: string) => void + receiveOperation: (data: Automerge.Message) => void + + gabageCursor: () => void + + onCursor: (data: any) => void + + handleError: (err: Error | string, opData?: string) => void +} + +export interface SocketIOPluginOptions { + url: string + connectOpts: SocketIOClient.ConnectOpts + onConnect?: () => void + onDisconnect?: () => void + onError?: (msg: string | Error, data: ErrorData) => void +} + +export interface WithSocketIOEditor { + clientId: string + socket: SocketIOClient.Socket + connect: () => void + disconnect: () => void + send: (op: CollabAction) => void + receive: (op: CollabAction) => void + destroy: () => void +} diff --git a/packages/client/src/useCursor.ts b/packages/client/src/useCursor.ts index 3907661..b29e073 100644 --- a/packages/client/src/useCursor.ts +++ b/packages/client/src/useCursor.ts @@ -4,8 +4,8 @@ import { Text, Range, Path, NodeEntry } from 'slate' import { toJS, Cursor, Cursors } from '@hiveteams/collab-bridge' -import { AutomergeEditor } from './automerge-editor' import useMounted from './useMounted' +import { AutomergeEditor } from './interfaces' const useCursor = ( e: AutomergeEditor diff --git a/packages/client/src/withAutomerge.ts b/packages/client/src/withAutomerge.ts index 4dea830..0ab1914 100644 --- a/packages/client/src/withAutomerge.ts +++ b/packages/client/src/withAutomerge.ts @@ -2,59 +2,69 @@ import Automerge from 'automerge' import { Editor } from 'slate' -import { AutomergeEditor } from './automerge-editor' +import { AutomergeConnector } from './automerge-connector' -import { CursorData, CollabAction } from '@hiveteams/collab-bridge' - -export interface AutomergeOptions { - docId: string - cursorData?: CursorData - preserveExternalHistory?: boolean - onError?: (msg: string | Error) => void -} +import { CollabAction } from '@hiveteams/collab-bridge' +import { + AutomergeEditor, + AutomergeOptions, + WithSocketIOEditor +} from './interfaces' /** * The `withAutomerge` plugin contains core collaboration logic. */ const withAutomerge = ( - editor: T, + slateEditor: T, options: AutomergeOptions ) => { - const e = editor as T & AutomergeEditor + const { docId, cursorData, preserveExternalHistory } = options || {} - const { onChange } = e + const editor = slateEditor as T & AutomergeEditor & WithSocketIOEditor - const { - docId, - cursorData, - preserveExternalHistory, - onError = (err: string | Error) => console.log('AutomergeEditor error', err) - } = options || {} + const { onChange } = editor - e.docSet = new Automerge.DocSet() + editor.docSet = new Automerge.DocSet() + + /** + * Helper function for handling errors + */ + + editor.handleError = (err: Error | string, opData?: string) => { + const { docId, cursorData, onError } = options + if (onError && cursorData) { + const document = editor.docSet.getDoc(docId) + onError(err, { + docId: docId, + serializedData: document ? Automerge.save(document) : 'No document', + opData, + slateOperations: JSON.stringify(editor.operations) + }) + } + } /** * Open Automerge Connection */ - e.openConnection = () => { - e.connection = AutomergeEditor.createConnection(e, (data: CollabAction) => - //@ts-ignore - e.send(data) + editor.openConnection = () => { + editor.connection = AutomergeConnector.createConnection( + editor, + (data: CollabAction) => editor.send(data) ) - e.connection.open() + editor.connection.open() } /** * Close Automerge Connection */ - e.closeConnection = () => { + editor.closeConnection = () => { // close any actively open connections - if (e.connection) { - e.connection.close() + if (editor.connection) { + editor.connection.close() } } @@ -62,30 +72,25 @@ const withAutomerge = ( * Clear cursor data */ - e.gabageCursor = () => { + editor.gabageCursor = () => { try { - AutomergeEditor.garbageCursor(e, docId) + AutomergeConnector.garbageCursor(editor, docId) } catch (err) { - console.log('garbageCursor error', err) + editor.handleError(err) } } - e.automergeCleanup = () => { - e.docSet = new Automerge.DocSet() - } - /** * Editor onChange */ + editor.onChange = () => { + const operations = editor.operations - e.onChange = () => { - const operations: any = e.operations - - if (!e.isRemote) { + if (!editor.isRemote) { try { - AutomergeEditor.applySlateOps(e, docId, operations, cursorData) + AutomergeConnector.applySlateOps(editor, docId, operations, cursorData) } catch (err) { - onError(err) + editor.handleError(err) } onChange() @@ -96,11 +101,11 @@ const withAutomerge = ( * Receive document value */ - e.receiveDocument = data => { + editor.receiveDocument = data => { try { - AutomergeEditor.receiveDocument(e, docId, data) + AutomergeConnector.receiveDocument(editor, docId, data) } catch (err) { - onError(err) + editor.handleError(err, JSON.stringify(data)) } } @@ -108,18 +113,23 @@ const withAutomerge = ( * Receive Automerge sync operations */ - e.receiveOperation = data => { + editor.receiveOperation = data => { + // ignore document updates for differnt docIds if (docId !== data.docId) return try { - AutomergeEditor.applyOperation(e, docId, data, preserveExternalHistory) + AutomergeConnector.applyOperation( + editor, + docId, + data, + preserveExternalHistory + ) } catch (err) { - // report any errors during apply operation - onError(err) + editor.handleError(err, JSON.stringify(data)) } } - return e + return editor } export default withAutomerge diff --git a/packages/client/src/withIOCollaboration.ts b/packages/client/src/withIOCollaboration.ts index cd18012..3f5fab6 100644 --- a/packages/client/src/withIOCollaboration.ts +++ b/packages/client/src/withIOCollaboration.ts @@ -1,11 +1,13 @@ import { Editor } from 'slate' -import { AutomergeEditor } from './automerge-editor' -import withAutomerge, { AutomergeOptions } from './withAutomerge' -import withSocketIO, { - WithSocketIOEditor, - SocketIOPluginOptions -} from './withSocketIO' +import withAutomerge from './withAutomerge' +import { + AutomergeEditor, + AutomergeOptions, + SocketIOPluginOptions, + WithSocketIOEditor +} from './interfaces' +import withSocketIO from './withSocketIO' /** * The `withIOCollaboration` plugin contains collaboration with SocketIO. diff --git a/packages/client/src/withSocketIO.ts b/packages/client/src/withSocketIO.ts index 621f6a2..777507a 100644 --- a/packages/client/src/withSocketIO.ts +++ b/packages/client/src/withSocketIO.ts @@ -1,102 +1,85 @@ import io from 'socket.io-client' -import { AutomergeEditor } from './automerge-editor' - +import Automerge from 'automerge' import { CollabAction } from '@hiveteams/collab-bridge' - -export interface SocketIOPluginOptions { - url: string - connectOpts: SocketIOClient.ConnectOpts - - onConnect?: () => void - onDisconnect?: () => void - - onError?: (msg: string | Error) => void -} - -export interface WithSocketIOEditor { - socket: SocketIOClient.Socket - - connect: () => void - disconnect: () => void - - send: (op: CollabAction) => void - receive: (op: CollabAction) => void - - destroy: () => void -} +import { + AutomergeEditor, + AutomergeOptions, + SocketIOPluginOptions, + WithSocketIOEditor +} from './interfaces' /** * The `withSocketIO` plugin contains SocketIO layer logic. */ const withSocketIO = ( - editor: T, - options: SocketIOPluginOptions + slateEditor: T, + options: SocketIOPluginOptions & AutomergeOptions ) => { - const e = editor as T & WithSocketIOEditor + const { onConnect, onDisconnect, connectOpts, url } = options + const editor = slateEditor as T & WithSocketIOEditor & AutomergeEditor let socket: SocketIOClient.Socket - const { onConnect, onDisconnect, onError, connectOpts, url } = options - /** * Connect to Socket. */ - e.connect = () => { + editor.connect = () => { socket = io(url, { ...connectOpts }) + // On socket io connect, open a new automerge connection socket.on('connect', () => { - e.clientId = socket.id - - e.openConnection() - + editor.clientId = socket.id + editor.openConnection() onConnect && onConnect() }) + // On socket io error socket.on('error', (msg: string) => { - onError && onError(msg) + editor.handleError(msg) }) + // On socket io msg, process the collab operation socket.on('msg', (data: CollabAction) => { - e.receive(data) + editor.receive(data) }) + // On socket io disconnect, cleanup cursor and call the provided onDisconnect callback socket.on('disconnect', () => { - e.gabageCursor() - + editor.gabageCursor() onDisconnect && onDisconnect() }) socket.connect() - return e + return editor } /** * Disconnect from Socket. */ - e.disconnect = () => { + editor.disconnect = () => { socket.removeListener('msg') socket.close() - e.closeConnection() + editor.closeConnection() - return e + return editor } /** * Receive transport msg. */ - e.receive = (msg: CollabAction) => { + editor.receive = (msg: CollabAction) => { switch (msg.type) { case 'operation': - return e.receiveOperation(msg.payload) + return editor.receiveOperation(msg.payload) case 'document': - return e.receiveDocument(msg.payload) + return editor.receiveDocument(msg.payload) } } @@ -104,7 +87,7 @@ const withSocketIO = ( * Send message to socket. */ - e.send = (msg: CollabAction) => { + editor.send = (msg: CollabAction) => { socket.emit('msg', msg) } @@ -112,13 +95,12 @@ const withSocketIO = ( * Close socket and connection. */ - e.destroy = () => { + editor.destroy = () => { socket.close() - e.closeConnection() - e.automergeCleanup() + editor.closeConnection() } - return e + return editor } export default withSocketIO diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json index 3f968f9..9b88382 100644 --- a/packages/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -7,8 +7,9 @@ "outDir": "./lib", "composite": true, "paths": { - "@hiveteams/collab-bridge": ["../../bridge"] + "@hiveteams/collab-bridge": ["../../bridge"], + "@hiveteams/collab-backend": ["../../backend"] } }, - "references": [{ "path": "../bridge" }] + "references": [{ "path": "../bridge" }, { "path": "../backend" }] } diff --git a/packages/example/server.js b/packages/example/server.js index 898dafb..a6606b7 100644 --- a/packages/example/server.js +++ b/packages/example/server.js @@ -1,4 +1,4 @@ -const { SocketIOConnection } = require('@hiveteams/collab-backend') +const { AutomergeCollaboration } = require('@hiveteams/collab-backend') const express = require('express') const defaultValue = [ @@ -36,4 +36,4 @@ const config = { } } -const connection = new SocketIOConnection(config) +const connection = new AutomergeCollaboration(config) From 2faeda163b955341d2d5c066158973939fe0baad Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 8 Jan 2021 17:31:02 -0500 Subject: [PATCH 11/21] fix: make onError optional --- packages/backend/src/AutomergeCollaboration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend/src/AutomergeCollaboration.ts b/packages/backend/src/AutomergeCollaboration.ts index 3d5cd33..3938551 100644 --- a/packages/backend/src/AutomergeCollaboration.ts +++ b/packages/backend/src/AutomergeCollaboration.ts @@ -28,7 +28,7 @@ export interface IAutomergeCollaborationOptions { user: any ) => Promise | void onDisconnect?: (docId: string, user: any) => Promise | void - onError: (error: Error, data: ErrorData) => Promise | void + onError?: (error: Error, data: ErrorData) => Promise | void } export default class AutomergeCollaboration { From d4dc99f6b2d8c0d1169e26f43a2df33408c93ac2 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 8 Jan 2021 17:33:22 -0500 Subject: [PATCH 12/21] v0.7.20 --- CHANGELOG.md | 9 ++++++++- lerna.json | 2 +- packages/backend/package.json | 2 +- packages/client/package.json | 4 ++-- packages/example/package.json | 6 +++--- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bde3e05..5baa5ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,14 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.0...v0.7.19) +#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.1...v0.7.19) + +- feat: cleaner error handling and basic client tests [`f425635`](https://github.com/hiveteams/slate-collaborative/commit/f425635cf849718aa863402ec6450f9a35353fbb) +- fix: make onError optional [`2faeda1`](https://github.com/hiveteams/slate-collaborative/commit/2faeda163b955341d2d5c066158973939fe0baad) + +#### [v0.7.20-alpha.1](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.0...v0.7.20-alpha.1) + +> 6 January 2021 - feat: automerge collaboration to backend [`0894a7a`](https://github.com/hiveteams/slate-collaborative/commit/0894a7a917949e3ef08a5cd9533258a59b7a3486) diff --git a/lerna.json b/lerna.json index 55a8112..106118f 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.20-alpha.1", + "version": "0.7.20", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index c879400..7db8aad 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.20-alpha.1", + "version": "0.7.20", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 00d4667..6b322ec 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.20-alpha.1", + "version": "0.7.20", "files": [ "lib" ], @@ -42,7 +42,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.20-alpha.1", + "@hiveteams/collab-backend": "^0.7.20", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 28f5b5b..ea0a099 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.20-alpha.1", + "version": "0.7.20", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.20-alpha.1", - "@hiveteams/collab-client": "^0.7.20-alpha.1", + "@hiveteams/collab-backend": "^0.7.20", + "@hiveteams/collab-client": "^0.7.20", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From f6d3af83c95ff825f8a7fcaf4daef0afba3c155a Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 8 Jan 2021 18:20:08 -0500 Subject: [PATCH 13/21] fix: tsconfigs for packages --- packages/backend/tsconfig.json | 2 +- packages/client/tsconfig.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend/tsconfig.json b/packages/backend/tsconfig.json index 3f968f9..76f8c0f 100644 --- a/packages/backend/tsconfig.json +++ b/packages/backend/tsconfig.json @@ -7,7 +7,7 @@ "outDir": "./lib", "composite": true, "paths": { - "@hiveteams/collab-bridge": ["../../bridge"] + "@hiveteams/collab-bridge": ["../../collab-bridge"] } }, "references": [{ "path": "../bridge" }] diff --git a/packages/client/tsconfig.json b/packages/client/tsconfig.json index 9b88382..11681f8 100644 --- a/packages/client/tsconfig.json +++ b/packages/client/tsconfig.json @@ -7,8 +7,8 @@ "outDir": "./lib", "composite": true, "paths": { - "@hiveteams/collab-bridge": ["../../bridge"], - "@hiveteams/collab-backend": ["../../backend"] + "@hiveteams/collab-bridge": ["../../collab-bridge"], + "@hiveteams/collab-backend": ["../../collab-backend"] } }, "references": [{ "path": "../bridge" }, { "path": "../backend" }] From c72c42ec050fb7f67b99c23bdf1659b07926b2c6 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 8 Jan 2021 18:20:34 -0500 Subject: [PATCH 14/21] v0.7.21 --- CHANGELOG.md | 8 +++++++- lerna.json | 2 +- packages/backend/package.json | 2 +- packages/client/package.json | 4 ++-- packages/example/package.json | 6 +++--- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5baa5ac..e97e552 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,13 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.1...v0.7.19) +#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20...v0.7.19) + +- fix: tsconfigs for packages [`f6d3af8`](https://github.com/hiveteams/slate-collaborative/commit/f6d3af83c95ff825f8a7fcaf4daef0afba3c155a) + +#### [v0.7.20](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20-alpha.1...v0.7.20) + +> 8 January 2021 - feat: cleaner error handling and basic client tests [`f425635`](https://github.com/hiveteams/slate-collaborative/commit/f425635cf849718aa863402ec6450f9a35353fbb) - fix: make onError optional [`2faeda1`](https://github.com/hiveteams/slate-collaborative/commit/2faeda163b955341d2d5c066158973939fe0baad) diff --git a/lerna.json b/lerna.json index 106118f..26ea2ba 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.20", + "version": "0.7.21", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index 7db8aad..76877cf 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.20", + "version": "0.7.21", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 6b322ec..4df47fe 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.20", + "version": "0.7.21", "files": [ "lib" ], @@ -42,7 +42,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.20", + "@hiveteams/collab-backend": "^0.7.21", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index ea0a099..33d5c1a 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.20", + "version": "0.7.21", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.20", - "@hiveteams/collab-client": "^0.7.20", + "@hiveteams/collab-backend": "^0.7.21", + "@hiveteams/collab-client": "^0.7.21", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From d4b089a4805fd25347764948b287c9f5802f2ead Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 09:25:52 -0500 Subject: [PATCH 15/21] feat: better client side error handling --- packages/bridge/src/utils/index.ts | 9 +- packages/client/src/automerge-connector.ts | 99 ++++++++++++++++------ packages/client/src/interfaces.ts | 15 +--- packages/client/src/withAutomerge.ts | 51 +++-------- packages/client/src/withSocketIO.ts | 2 +- 5 files changed, 92 insertions(+), 84 deletions(-) diff --git a/packages/bridge/src/utils/index.ts b/packages/bridge/src/utils/index.ts index 137a2c4..a5b0d7f 100644 --- a/packages/bridge/src/utils/index.ts +++ b/packages/bridge/src/utils/index.ts @@ -5,14 +5,7 @@ import { CollabAction } from '../model' export * from './testUtils' -const toJS = (node: any) => { - try { - return JSON.parse(JSON.stringify(node)) - } catch (e) { - console.error('Convert to js failed!!! Return null') - return null - } -} +const toJS = (node: any) => JSON.parse(JSON.stringify(node)) const cloneNode = (node: any) => toSync(toJS(node)) diff --git a/packages/client/src/automerge-connector.ts b/packages/client/src/automerge-connector.ts index 773d4b9..8815fde 100644 --- a/packages/client/src/automerge-connector.ts +++ b/packages/client/src/automerge-connector.ts @@ -45,15 +45,38 @@ export const AutomergeConnector = { let changed: any - operations.forEach(op => { - changed = Automerge.change(changed || doc, d => - applyOperation(d.children, op) - ) - }) + for (let i = 0; i < operations.length; i++) { + const op = operations[i] - changed = Automerge.change(changed || doc, d => { - setCursor(e.clientId, e.selection, d, operations, cursorData || {}) - }) + try { + changed = Automerge.change(changed || doc, d => + applyOperation(d.children, op) + ) + } catch (err) { + e.handleError(err, { + type: 'applySlateOps - applyOperation', + automergeChanged: Automerge.save(changed || doc), + operation: op + }) + + // return early to avoid applying any further operations after we encounter an error + return + } + } + + try { + changed = Automerge.change(changed || doc, d => { + setCursor(e.clientId, e.selection, d, operations, cursorData || {}) + }) + } catch (err) { + e.handleError(err, { + type: 'applySlateOps - setCursor', + clientId: e.clientId, + automergeDocument: Automerge.save(changed || doc), + operations, + cursorData + }) + } e.docSet.setDoc(docId, changed) }, @@ -63,22 +86,32 @@ export const AutomergeConnector = { */ receiveDocument: (e: AutomergeEditor, docId: string, data: string) => { - const currentDoc = e.docSet.getDoc(docId) + let currentDoc: Automerge.FreezeObject | null = null + let externalDoc: Automerge.FreezeObject | null = null + let mergedDoc: Automerge.FreezeObject | null = null - const externalDoc = Automerge.load(data) + try { + currentDoc = e.docSet.getDoc(docId) + externalDoc = Automerge.load(data) + mergedDoc = Automerge.merge( + externalDoc, + currentDoc || Automerge.init() + ) - const mergedDoc = Automerge.merge( - externalDoc, - currentDoc || Automerge.init() - ) + e.docSet.setDoc(docId, mergedDoc) - e.docSet.setDoc(docId, mergedDoc) - - Editor.withoutNormalizing(e, () => { - e.children = toJS(mergedDoc).children - - e.onChange() - }) + Editor.withoutNormalizing(e, () => { + e.children = toJS(mergedDoc).children + e.onChange() + }) + } catch (err) { + e.handleError(err, { + type: 'receiveDocument', + currentDoc: currentDoc && Automerge.save(currentDoc), + externalDoc: externalDoc && Automerge.save(externalDoc), + mergedDoc: mergedDoc && Automerge.save(mergedDoc) + }) + } }, /** @@ -93,13 +126,20 @@ export const AutomergeConnector = { ) => { try { const current = e.docSet.getDoc(docId) - const updated = e.connection.receiveMsg(data) - const operations = Automerge.diff(current, updated) if (operations.length) { - const slateOps = toSlateOp(operations, current) + let slateOps: any[] + try { + slateOps = toSlateOp(operations, current) + } catch (err) { + e.handleError(err, { + type: 'applyOperation - toSlateOp', + operations, + current: Automerge.save(current) + }) + } e.isRemote = true @@ -117,13 +157,18 @@ export const AutomergeConnector = { Promise.resolve().then(_ => (e.isRemote = false)) } - } catch (e) { - // unset remove flag + } catch (err) { + // unset remote flag if (e.isRemote) { e.isRemote = false } - throw e + const current = e.docSet.getDoc(docId) + e.handleError(err, { + type: 'applyOperation', + data, + current: current ? Automerge.save(current) : null + }) } }, diff --git a/packages/client/src/interfaces.ts b/packages/client/src/interfaces.ts index 5fd3104..6a37942 100644 --- a/packages/client/src/interfaces.ts +++ b/packages/client/src/interfaces.ts @@ -2,18 +2,11 @@ import Automerge from 'automerge' import { Editor } from 'slate' import { CollabAction, CursorData, SyncDoc } from '@hiveteams/collab-bridge' -interface ErrorData { - docId: string - serializedData: string - opData?: string - slateOperations?: string -} - export interface AutomergeOptions { docId: string cursorData?: CursorData preserveExternalHistory?: boolean - onError?: (msg: string | Error, data: ErrorData) => void + onError?: (msg: string | Error, data: any) => void } export interface AutomergeEditor extends Editor { @@ -32,11 +25,11 @@ export interface AutomergeEditor extends Editor { receiveDocument: (data: string) => void receiveOperation: (data: Automerge.Message) => void - gabageCursor: () => void + garbageCursor: () => void onCursor: (data: any) => void - handleError: (err: Error | string, opData?: string) => void + handleError: (err: Error | string, data?: any) => void } export interface SocketIOPluginOptions { @@ -44,7 +37,7 @@ export interface SocketIOPluginOptions { connectOpts: SocketIOClient.ConnectOpts onConnect?: () => void onDisconnect?: () => void - onError?: (msg: string | Error, data: ErrorData) => void + onError?: (msg: string | Error, data: any) => void } export interface WithSocketIOEditor { diff --git a/packages/client/src/withAutomerge.ts b/packages/client/src/withAutomerge.ts index 0ab1914..4682a59 100644 --- a/packages/client/src/withAutomerge.ts +++ b/packages/client/src/withAutomerge.ts @@ -31,16 +31,10 @@ const withAutomerge = ( * Helper function for handling errors */ - editor.handleError = (err: Error | string, opData?: string) => { - const { docId, cursorData, onError } = options - if (onError && cursorData) { - const document = editor.docSet.getDoc(docId) - onError(err, { - docId: docId, - serializedData: document ? Automerge.save(document) : 'No document', - opData, - slateOperations: JSON.stringify(editor.operations) - }) + editor.handleError = (err: Error | string, data: any = {}) => { + const { onError } = options + if (onError) { + onError(err, data) } } @@ -72,12 +66,8 @@ const withAutomerge = ( * Clear cursor data */ - editor.gabageCursor = () => { - try { - AutomergeConnector.garbageCursor(editor, docId) - } catch (err) { - editor.handleError(err) - } + editor.garbageCursor = () => { + AutomergeConnector.garbageCursor(editor, docId) } /** @@ -87,12 +77,7 @@ const withAutomerge = ( const operations = editor.operations if (!editor.isRemote) { - try { - AutomergeConnector.applySlateOps(editor, docId, operations, cursorData) - } catch (err) { - editor.handleError(err) - } - + AutomergeConnector.applySlateOps(editor, docId, operations, cursorData) onChange() } } @@ -102,11 +87,7 @@ const withAutomerge = ( */ editor.receiveDocument = data => { - try { - AutomergeConnector.receiveDocument(editor, docId, data) - } catch (err) { - editor.handleError(err, JSON.stringify(data)) - } + AutomergeConnector.receiveDocument(editor, docId, data) } /** @@ -117,16 +98,12 @@ const withAutomerge = ( // ignore document updates for differnt docIds if (docId !== data.docId) return - try { - AutomergeConnector.applyOperation( - editor, - docId, - data, - preserveExternalHistory - ) - } catch (err) { - editor.handleError(err, JSON.stringify(data)) - } + AutomergeConnector.applyOperation( + editor, + docId, + data, + preserveExternalHistory + ) } return editor diff --git a/packages/client/src/withSocketIO.ts b/packages/client/src/withSocketIO.ts index 777507a..4dad0fc 100644 --- a/packages/client/src/withSocketIO.ts +++ b/packages/client/src/withSocketIO.ts @@ -47,7 +47,7 @@ const withSocketIO = ( // On socket io disconnect, cleanup cursor and call the provided onDisconnect callback socket.on('disconnect', () => { - editor.gabageCursor() + editor.garbageCursor() onDisconnect && onDisconnect() }) From c29df0d8e72349edd5893a1ab8640745ac2acc4e Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 09:33:10 -0500 Subject: [PATCH 16/21] feat: update backend error handling --- .../backend/src/AutomergeCollaboration.ts | 25 +++++++------------ 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/packages/backend/src/AutomergeCollaboration.ts b/packages/backend/src/AutomergeCollaboration.ts index 3938551..c7f2f5e 100644 --- a/packages/backend/src/AutomergeCollaboration.ts +++ b/packages/backend/src/AutomergeCollaboration.ts @@ -8,13 +8,6 @@ import { getClients } from './utils/index' import { debugCollabBackend } from './utils/debug' import AutomergeBackend from './AutomergeBackend' -interface ErrorData { - user: any - docId: string - serializedData: string - opData?: string -} - export interface IAutomergeCollaborationOptions { entry: Server connectOpts?: SocketIO.ServerOptions @@ -28,7 +21,7 @@ export interface IAutomergeCollaborationOptions { user: any ) => Promise | void onDisconnect?: (docId: string, user: any) => Promise | void - onError?: (error: Error, data: ErrorData) => Promise | void + onError?: (error: Error, data: any) => Promise | void } export default class AutomergeCollaboration { @@ -78,7 +71,7 @@ export default class AutomergeCollaboration { /** * Construct error data and call onError callback */ - private handleError(socket: SocketIO.Socket, err: Error, opData?: string) { + private handleError(socket: SocketIO.Socket, err: Error, data: any = {}) { const { id } = socket const { name: docId } = socket.nsp @@ -86,9 +79,9 @@ export default class AutomergeCollaboration { const document = this.backend.getDocument(docId) this.options.onError(err, { user: this.userMap[id], - docId: docId, - serializedData: document ? Automerge.save(document) : 'No document', - opData + docId, + automergeDocument: document ? Automerge.save(document) : null, + ...data }) } } @@ -221,8 +214,8 @@ export default class AutomergeCollaboration { this.autoSaveDoc(socket, docId) this.garbageCursors(socket) - } catch (e) { - this.handleError(socket, e, JSON.stringify(data)) + } catch (err) { + this.handleError(socket, err, { onMessageData: data }) } } } @@ -250,8 +243,8 @@ export default class AutomergeCollaboration { if (onDocumentSave && user) { await onDocumentSave(docId, toJS(doc.children), user) } - } catch (e) { - this.handleError(socket, e) + } catch (err) { + this.handleError(socket, err) } } From 5832eee291e9f9e7bd19cb86eda0dc857038e607 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 09:33:55 -0500 Subject: [PATCH 17/21] v0.7.22 --- CHANGELOG.md | 9 ++++++++- lerna.json | 2 +- packages/backend/package.json | 4 ++-- packages/bridge/package.json | 2 +- packages/client/package.json | 6 +++--- packages/example/package.json | 6 +++--- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e97e552..0da4c58 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,14 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v0.7.19](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20...v0.7.19) +#### [v0.7.22](https://github.com/hiveteams/slate-collaborative/compare/v0.7.21...v0.7.22) + +- feat: better client side error handling [`d4b089a`](https://github.com/hiveteams/slate-collaborative/commit/d4b089a4805fd25347764948b287c9f5802f2ead) +- feat: update backend error handling [`c29df0d`](https://github.com/hiveteams/slate-collaborative/commit/c29df0d8e72349edd5893a1ab8640745ac2acc4e) + +#### [v0.7.21](https://github.com/hiveteams/slate-collaborative/compare/v0.7.20...v0.7.21) + +> 8 January 2021 - fix: tsconfigs for packages [`f6d3af8`](https://github.com/hiveteams/slate-collaborative/commit/f6d3af83c95ff825f8a7fcaf4daef0afba3c155a) diff --git a/lerna.json b/lerna.json index 26ea2ba..074ad42 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.21", + "version": "0.7.22", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index 76877cf..e9e1260 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.21", + "version": "0.7.22", "files": [ "lib" ], @@ -26,7 +26,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/runtime": "^7.6.3", - "@hiveteams/collab-bridge": "^0.7.19", + "@hiveteams/collab-bridge": "^0.7.22", "@types/debug": "^4.1.5", "@types/lodash": "^4.14.150", "@types/socket.io": "^2.1.4", diff --git a/packages/bridge/package.json b/packages/bridge/package.json index 971d443..fdf8177 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-bridge", - "version": "0.7.19", + "version": "0.7.22", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index 4df47fe..a9f0600 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.21", + "version": "0.7.22", "files": [ "lib" ], @@ -27,7 +27,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/preset-react": "^7.0.0", - "@hiveteams/collab-bridge": "^0.7.19", + "@hiveteams/collab-bridge": "^0.7.22", "automerge": "0.14.0", "lodash": "^4.17.20", "slate": "0.58.3", @@ -42,7 +42,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.21", + "@hiveteams/collab-backend": "^0.7.22", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 33d5c1a..07e4cce 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.21", + "version": "0.7.22", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.21", - "@hiveteams/collab-client": "^0.7.21", + "@hiveteams/collab-backend": "^0.7.22", + "@hiveteams/collab-client": "^0.7.22", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From 89dafd78b989227b3f02ab77c2deb73d23e4cd88 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 09:48:08 -0500 Subject: [PATCH 18/21] fix: slateOps undefined on toSlateOp error --- packages/client/src/automerge-connector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/client/src/automerge-connector.ts b/packages/client/src/automerge-connector.ts index 8815fde..9db0207 100644 --- a/packages/client/src/automerge-connector.ts +++ b/packages/client/src/automerge-connector.ts @@ -132,7 +132,7 @@ export const AutomergeConnector = { if (operations.length) { let slateOps: any[] try { - slateOps = toSlateOp(operations, current) + slateOps = toSlateOp(operations, current) || [] } catch (err) { e.handleError(err, { type: 'applyOperation - toSlateOp', From eb6f39679b9b4f9dfb652f25ffd0429abcde5b0c Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 11:26:12 -0500 Subject: [PATCH 19/21] fix: remove node and remove text errors --- packages/bridge/src/apply/text.ts | 4 + packages/bridge/src/convert/remove.ts | 15 +- packages/bridge/src/path/index.ts | 6 +- packages/client/src/client.spec.ts | 21 +- packages/client/src/test-json/deep-tree.json | 403 +++++++++++++++++++ 5 files changed, 439 insertions(+), 10 deletions(-) create mode 100644 packages/client/src/test-json/deep-tree.json diff --git a/packages/bridge/src/apply/text.ts b/packages/bridge/src/apply/text.ts index 004da2c..3615c8a 100644 --- a/packages/bridge/src/apply/text.ts +++ b/packages/bridge/src/apply/text.ts @@ -22,6 +22,10 @@ export const removeText = ( ): SyncValue => { const node = getTarget(doc, op.path) + // if we are removing text for a node that no longer exists + // treat this as a noop + if (!node) return doc + const offset = Math.min(node.text.length, op.offset) node.text.deleteAt(offset, op.text.length) diff --git a/packages/bridge/src/convert/remove.ts b/packages/bridge/src/convert/remove.ts index bb7518a..db302eb 100644 --- a/packages/bridge/src/convert/remove.ts +++ b/packages/bridge/src/convert/remove.ts @@ -10,12 +10,12 @@ const removeTextOp = (op: Automerge.Diff) => (map: any, doc: Element) => { const slatePath = toSlatePath(path).slice(0, path?.length) - let node + const node = getTarget(doc, slatePath) || map[obj] - try { - node = getTarget(doc, slatePath) || map[obj] - } catch (e) { - console.error(e, op, doc) + // if we are removing text for a node that has already been removed + // treat this as a noop + if (!node) { + return } if (typeof index !== 'number') return @@ -41,6 +41,11 @@ const removeNodeOp = ({ index, obj, path }: Automerge.Diff) => ( const slatePath = toSlatePath(path) const parent = getTarget(doc, slatePath) + + // if we are removing a node that has already been removed + // treat this as a noop + if (!parent) return + const target = parent?.children?.[index as number] || { children: [] } if (!map.hasOwnProperty(obj)) { diff --git a/packages/bridge/src/path/index.ts b/packages/bridge/src/path/index.ts index ea4f554..2d7bc0f 100644 --- a/packages/bridge/src/path/index.ts +++ b/packages/bridge/src/path/index.ts @@ -6,10 +6,8 @@ export const isTree = (node: Node): boolean => Boolean(node?.children) export const getTarget = (doc: SyncValue | Element, path: Path) => { const iterate = (current: any, idx: number) => { - if (!(isTree(current) || current[idx])) { - throw new TypeError( - `path ${path.toString()} does not match tree ${JSON.stringify(current)}` - ) + if (current === null || !(isTree(current) || current[idx])) { + return null } return current[idx] || current?.children[idx] diff --git a/packages/client/src/client.spec.ts b/packages/client/src/client.spec.ts index f7f1975..736da09 100644 --- a/packages/client/src/client.spec.ts +++ b/packages/client/src/client.spec.ts @@ -1,7 +1,9 @@ +import Automerge, { Frontend } from 'automerge' import { createServer } from 'http' +import fs from 'fs' import isEqual from 'lodash/isEqual' import { createEditor, Node, Transforms } from 'slate' -import { toJS } from '@hiveteams/collab-bridge' +import { SyncDoc, toJS, toSlateOp } from '@hiveteams/collab-bridge' import AutomergeCollaboration from '@hiveteams/collab-backend/lib/AutomergeCollaboration' import withIOCollaboration from './withIOCollaboration' import { AutomergeOptions, SocketIOPluginOptions } from './interfaces' @@ -186,6 +188,23 @@ describe('automerge editor client tests', () => { editor2.destroy() }) + it('deep nested tree error', () => { + // Ready from our test json file for the deep tree error + // This allows us to easily reproduce real production errors + // and create test cases that resolve those errors + const rawData = fs.readFileSync( + `${__dirname}/test-json/deep-tree.json`, + 'utf-8' + ) + const parsedData = JSON.parse(rawData) + const { current, operations } = parsedData + const currentDoc = Automerge.load(current) + + // ensure no errors throw when removing a deep tree node + // that has already been removed + toSlateOp(operations, currentDoc) + }) + afterAll(() => { collabBackend.destroy() server.close() diff --git a/packages/client/src/test-json/deep-tree.json b/packages/client/src/test-json/deep-tree.json new file mode 100644 index 0000000..5ceafe9 --- /dev/null +++ b/packages/client/src/test-json/deep-tree.json @@ -0,0 +1,403 @@ +{ + "type": "applyOperation - toSlateOp", + "operations": [ + { + "action": "remove", + "type": "text", + "obj": "3d6284c9-2666-4b2c-afec-8fecb7c7d2ea", + "index": 1, + "path": [ + "children", + 3, + "children", + 1, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "3d6284c9-2666-4b2c-afec-8fecb7c7d2ea", + "index": 1, + "path": [ + "children", + 3, + "children", + 1, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "3d6284c9-2666-4b2c-afec-8fecb7c7d2ea", + "index": 1, + "path": [ + "children", + 3, + "children", + 1, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "list", + "obj": "267c1aab-5def-4d5f-ae49-ae4a416cbd13", + "index": 0, + "path": ["children", 3, "children", 1, "children", 1, "children"] + }, + { + "action": "remove", + "type": "list", + "obj": "9bf08ad0-36d2-4e10-b027-450d9afb0aba", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children" + ] + }, + { + "action": "remove", + "type": "list", + "obj": "55ed6915-932a-42fd-98d9-38c6f045b282", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children" + ] + }, + { + "action": "remove", + "type": "list", + "obj": "7074e1e3-0842-434f-9731-46dd9d74072f", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "01a42ea2-0eb0-48cc-812e-c23e9ad40add", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "01a42ea2-0eb0-48cc-812e-c23e9ad40add", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "01a42ea2-0eb0-48cc-812e-c23e9ad40add", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "01a42ea2-0eb0-48cc-812e-c23e9ad40add", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "text", + "obj": "01a42ea2-0eb0-48cc-812e-c23e9ad40add", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "text" + ] + }, + { + "action": "remove", + "type": "list", + "obj": "15a87233-6c30-40e3-a974-34eb5e4bf4b0", + "index": 0, + "path": [ + "children", + 3, + "children", + 1, + "children", + 1, + "children", + 0, + "children", + 0, + "children", + 0, + "children", + 0, + "children" + ] + }, + { + "action": "create", + "obj": "420fc34a-7e55-47fe-829b-96f38bab4a0c", + "type": "map" + }, + { + "action": "set", + "type": "map", + "obj": "420fc34a-7e55-47fe-829b-96f38bab4a0c", + "key": "type", + "path": null, + "value": "list-item" + }, + { + "action": "create", + "obj": "7ebbcdcb-80d5-4470-81f8-2bd5bb5d99a7", + "type": "list" + }, + { + "action": "create", + "obj": "b80a70f5-8770-4bd8-8a29-e1766fdc4552", + "type": "map" + }, + { + "action": "create", + "obj": "c65cbc03-e828-43ca-ae59-e539dcc046c8", + "type": "text" + }, + { + "action": "set", + "type": "map", + "obj": "b80a70f5-8770-4bd8-8a29-e1766fdc4552", + "key": "text", + "path": null, + "value": "c65cbc03-e828-43ca-ae59-e539dcc046c8", + "link": true + }, + { + "action": "insert", + "type": "list", + "obj": "7ebbcdcb-80d5-4470-81f8-2bd5bb5d99a7", + "index": 0, + "path": null, + "link": true, + "elemId": "f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1", + "value": "b80a70f5-8770-4bd8-8a29-e1766fdc4552" + }, + { + "action": "set", + "type": "map", + "obj": "420fc34a-7e55-47fe-829b-96f38bab4a0c", + "key": "children", + "path": null, + "value": "7ebbcdcb-80d5-4470-81f8-2bd5bb5d99a7", + "link": true + }, + { + "action": "insert", + "type": "list", + "obj": "0c26567c-e80f-45fa-bccb-8372b38459ca", + "index": 1, + "path": ["children", 3, "children", 1, "children"], + "link": true, + "elemId": "f4a3508f-05f7-4156-b2a4-9b02581eb0ef:8", + "value": "420fc34a-7e55-47fe-829b-96f38bab4a0c" + }, + { + "action": "remove", + "type": "list", + "obj": "0c26567c-e80f-45fa-bccb-8372b38459ca", + "index": 2, + "path": ["children", 3, "children", 1, "children"] + }, + { + "action": "create", + "obj": "e349333f-f111-4746-a1a2-05251245f7b2", + "type": "map" + }, + { + "action": "create", + "obj": "61a0082f-14e7-497c-81ca-a2dd6fee815d", + "type": "text" + }, + { + "action": "set", + "type": "map", + "obj": "e349333f-f111-4746-a1a2-05251245f7b2", + "key": "text", + "path": null, + "value": "61a0082f-14e7-497c-81ca-a2dd6fee815d", + "link": true + }, + { + "action": "insert", + "type": "list", + "obj": "e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5", + "index": 1, + "path": ["children", 3, "children", 1, "children", 0, "children"], + "link": true, + "elemId": "f4a3508f-05f7-4156-b2a4-9b02581eb0ef:3", + "value": "e349333f-f111-4746-a1a2-05251245f7b2" + }, + { + "action": "remove", + "type": "list", + "obj": "0c26567c-e80f-45fa-bccb-8372b38459ca", + "index": 1, + "path": ["children", 3, "children", 1, "children"] + }, + { + "action": "remove", + "type": "list", + "obj": "e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5", + "index": 1, + "path": ["children", 3, "children", 1, "children", 0, "children"] + }, + { + "action": "set", + "type": "map", + "obj": "3a24909a-56d6-4be0-be63-14e51b071f88", + "key": "/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb", + "path": ["cursors"], + "value": "{\"anchor\":{\"path\":[3,1,0,0],\"offset\":1},\"focus\":{\"path\":[3,1,0,0],\"offset\":1},\"name\":\"Eric Maciel\",\"color\":\"rgba(229, 138, 54, 1)\",\"alphaColor\":\"rgba(229, 138, 54, 0.2)\",\"isForward\":true}" + } + ], + "current": "[\"~#iL\",[[\"~#iM\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"makeMap\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"00000000-0000-0000-0000-000000000000\",\"key\",\"cursors\",\"value\",\"3a24909a-56d6-4be0-be63-14e51b071f88\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"06d568d1-966e-4dbf-ab37-fdbb777344bf\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"06d568d1-966e-4dbf-ab37-fdbb777344bf\",\"key\",\"type\",\"value\",\"title\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"3170281c-a9bf-4f77-9b8f-788690679339\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"3170281c-a9bf-4f77-9b8f-788690679339\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"c52d325d-454c-4a46-b0ce-7e63b09c297d\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:5\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:5\",\"elem\",6]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:6\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:6\",\"elem\",7]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:7\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:7\",\"elem\",8]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:8\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:8\",\"elem\",9]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:9\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:9\",\"elem\",10]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:10\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:10\",\"elem\",11]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:11\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:11\",\"elem\",12]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:12\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:12\",\"elem\",13]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:13\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:13\",\"elem\",14]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:14\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:14\",\"elem\",15]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:15\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:15\",\"elem\",16]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:16\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:16\",\"elem\",17]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:17\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:17\",\"elem\",18]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:18\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:18\",\"elem\",19]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:19\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:19\",\"elem\",20]],[\"^1\",[\"action\",\"set\",\"obj\",\"8c1d60d8-c977-4141-8187-42595224b231\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:20\",\"value\",\"s\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c52d325d-454c-4a46-b0ce-7e63b09c297d\",\"key\",\"text\",\"value\",\"8c1d60d8-c977-4141-8187-42595224b231\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"3170281c-a9bf-4f77-9b8f-788690679339\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"c52d325d-454c-4a46-b0ce-7e63b09c297d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"06d568d1-966e-4dbf-ab37-fdbb777344bf\",\"key\",\"children\",\"value\",\"3170281c-a9bf-4f77-9b8f-788690679339\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"06d568d1-966e-4dbf-ab37-fdbb777344bf\",\"key\",\"id\",\"value\",\"zeZdPcwqhee3xAr9Q\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"06d568d1-966e-4dbf-ab37-fdbb777344bf\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"840392aa-7fbd-4c24-9194-9586eb26e9d7\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"840392aa-7fbd-4c24-9194-9586eb26e9d7\",\"key\",\"type\",\"value\",\"paragraph\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"b851418d-4b6c-477f-94ad-7b783f5de398\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"b851418d-4b6c-477f-94ad-7b783f5de398\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b24dca39-40de-4e81-aaa1-b34d076e4dcf\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:5\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:5\",\"elem\",6]],[\"^1\",[\"action\",\"set\",\"obj\",\"bd121adc-2815-4087-a29a-712af32488d4\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:6\",\"value\",\"f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b24dca39-40de-4e81-aaa1-b34d076e4dcf\",\"key\",\"text\",\"value\",\"bd121adc-2815-4087-a29a-712af32488d4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b851418d-4b6c-477f-94ad-7b783f5de398\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"b24dca39-40de-4e81-aaa1-b34d076e4dcf\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"840392aa-7fbd-4c24-9194-9586eb26e9d7\",\"key\",\"children\",\"value\",\"b851418d-4b6c-477f-94ad-7b783f5de398\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"840392aa-7fbd-4c24-9194-9586eb26e9d7\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"af9e3da9-38be-4261-bec4-e0f77307ad2f\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"af9e3da9-38be-4261-bec4-e0f77307ad2f\",\"key\",\"type\",\"value\",\"paragraph\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"5e716777-7689-47e3-8c12-8c921960eb7d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5e716777-7689-47e3-8c12-8c921960eb7d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6c241cd9-9c3e-4cea-8c05-b2b59c3a5e11\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"b83acef8-c2be-4a88-a9ac-b944fb779631\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6c241cd9-9c3e-4cea-8c05-b2b59c3a5e11\",\"key\",\"text\",\"value\",\"b83acef8-c2be-4a88-a9ac-b944fb779631\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5e716777-7689-47e3-8c12-8c921960eb7d\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"6c241cd9-9c3e-4cea-8c05-b2b59c3a5e11\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"af9e3da9-38be-4261-bec4-e0f77307ad2f\",\"key\",\"children\",\"value\",\"5e716777-7689-47e3-8c12-8c921960eb7d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"af9e3da9-38be-4261-bec4-e0f77307ad2f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f43e7d0f-6433-4d8c-9948-108fc1bc5763\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"f43e7d0f-6433-4d8c-9948-108fc1bc5763\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4af1fb46-5c90-49c2-99dc-f8e8308f45b2\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4af1fb46-5c90-49c2-99dc-f8e8308f45b2\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d800ee36-7b09-4f39-b4ca-a6556fc718db\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d800ee36-7b09-4f39-b4ca-a6556fc718db\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d40896e4-87f0-487c-b48c-84a2c279fc3f\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"t\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"value\",\"t\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d40896e4-87f0-487c-b48c-84a2c279fc3f\",\"key\",\"text\",\"value\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d800ee36-7b09-4f39-b4ca-a6556fc718db\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"d40896e4-87f0-487c-b48c-84a2c279fc3f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4af1fb46-5c90-49c2-99dc-f8e8308f45b2\",\"key\",\"children\",\"value\",\"d800ee36-7b09-4f39-b4ca-a6556fc718db\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"4af1fb46-5c90-49c2-99dc-f8e8308f45b2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ea9959c4-670d-4c50-8733-ad37d75e1c0c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"ea9959c4-670d-4c50-8733-ad37d75e1c0c\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f4e1b41a-b802-4dbe-b74c-93bf5168b629\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"f4e1b41a-b802-4dbe-b74c-93bf5168b629\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f566c0ec-2846-43d1-b7f3-40862e146f40\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f566c0ec-2846-43d1-b7f3-40862e146f40\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f4f64cbc-7143-4c44-9619-a033e9fa9403\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"84f66072-f85e-420d-9a9c-d252a1dc910f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f4f64cbc-7143-4c44-9619-a033e9fa9403\",\"key\",\"text\",\"value\",\"84f66072-f85e-420d-9a9c-d252a1dc910f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f566c0ec-2846-43d1-b7f3-40862e146f40\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"f4f64cbc-7143-4c44-9619-a033e9fa9403\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f4e1b41a-b802-4dbe-b74c-93bf5168b629\",\"key\",\"children\",\"value\",\"f566c0ec-2846-43d1-b7f3-40862e146f40\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"f4e1b41a-b802-4dbe-b74c-93bf5168b629\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"cab967b8-1880-41bb-af62-5e744cacf3e9\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"cab967b8-1880-41bb-af62-5e744cacf3e9\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"8a15bb58-43a2-4a90-9364-aec108a25e55\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8a15bb58-43a2-4a90-9364-aec108a25e55\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9d7e19da-d98a-45e3-aa54-9a0c6dc3bb59\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9d7e19da-d98a-45e3-aa54-9a0c6dc3bb59\",\"key\",\"text\",\"value\",\"1b73d2d8-4767-4322-b483-2720f4c29c78\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8a15bb58-43a2-4a90-9364-aec108a25e55\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"9d7e19da-d98a-45e3-aa54-9a0c6dc3bb59\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cab967b8-1880-41bb-af62-5e744cacf3e9\",\"key\",\"children\",\"value\",\"8a15bb58-43a2-4a90-9364-aec108a25e55\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"cab967b8-1880-41bb-af62-5e744cacf3e9\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"0b78035d-963c-406e-b9c0-4c6f09d34285\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"0b78035d-963c-406e-b9c0-4c6f09d34285\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"6a6b4b5f-1146-4fd2-b6b6-cfd6aa664e51\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"6a6b4b5f-1146-4fd2-b6b6-cfd6aa664e51\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f706c990-9644-4a6a-8aed-6f7fc1e358f5\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"01be878a-d3a3-4696-8dd6-521af1998a74\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f706c990-9644-4a6a-8aed-6f7fc1e358f5\",\"key\",\"text\",\"value\",\"01be878a-d3a3-4696-8dd6-521af1998a74\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6a6b4b5f-1146-4fd2-b6b6-cfd6aa664e51\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"f706c990-9644-4a6a-8aed-6f7fc1e358f5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0b78035d-963c-406e-b9c0-4c6f09d34285\",\"key\",\"children\",\"value\",\"6a6b4b5f-1146-4fd2-b6b6-cfd6aa664e51\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"0b78035d-963c-406e-b9c0-4c6f09d34285\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4ba72acb-5c56-4091-82e9-f7bbe739d8d9\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4ba72acb-5c56-4091-82e9-f7bbe739d8d9\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"231fe28d-8db8-450c-b166-bfb943a0b194\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"231fe28d-8db8-450c-b166-bfb943a0b194\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"c365abcc-d93b-46b4-968a-4c73b4f4829d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"c365abcc-d93b-46b4-968a-4c73b4f4829d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4c219e48-73ac-45ec-acd9-311265be52cc\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"44af477c-bbe2-42ed-9556-1e9b3e06bf69\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"44af477c-bbe2-42ed-9556-1e9b3e06bf69\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"44af477c-bbe2-42ed-9556-1e9b3e06bf69\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4c219e48-73ac-45ec-acd9-311265be52cc\",\"key\",\"text\",\"value\",\"44af477c-bbe2-42ed-9556-1e9b3e06bf69\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c365abcc-d93b-46b4-968a-4c73b4f4829d\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"4c219e48-73ac-45ec-acd9-311265be52cc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"231fe28d-8db8-450c-b166-bfb943a0b194\",\"key\",\"children\",\"value\",\"c365abcc-d93b-46b4-968a-4c73b4f4829d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"231fe28d-8db8-450c-b166-bfb943a0b194\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"2f8b7e65-a3eb-46dd-ae44-75ef9c430afc\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"2f8b7e65-a3eb-46dd-ae44-75ef9c430afc\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"fcfe2d79-7f6a-479b-83dc-0ec39ce5d596\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\",\"value\",\"f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fcfe2d79-7f6a-479b-83dc-0ec39ce5d596\",\"key\",\"text\",\"value\",\"30acbe4d-dc73-4e35-bf6b-46c7781e37ce\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"value\",\"fcfe2d79-7f6a-479b-83dc-0ec39ce5d596\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2f8b7e65-a3eb-46dd-ae44-75ef9c430afc\",\"key\",\"children\",\"value\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"2f8b7e65-a3eb-46dd-ae44-75ef9c430afc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4ba72acb-5c56-4091-82e9-f7bbe739d8d9\",\"key\",\"children\",\"value\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"value\",\"4ba72acb-5c56-4091-82e9-f7bbe739d8d9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ea9959c4-670d-4c50-8733-ad37d75e1c0c\",\"key\",\"children\",\"value\",\"8257b1fa-75e3-494c-9c43-a01859691df8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"value\",\"ea9959c4-670d-4c50-8733-ad37d75e1c0c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f43e7d0f-6433-4d8c-9948-108fc1bc5763\",\"key\",\"children\",\"value\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2fcef87a-d453-4f18-aa04-627795a22a25\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\",\"value\",\"f43e7d0f-6433-4d8c-9948-108fc1bc5763\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"00000000-0000-0000-0000-000000000000\",\"key\",\"children\",\"value\",\"2fcef87a-d453-4f18-aa04-627795a22a25\"]]]],\"actor\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",\"seq\",1,\"deps\",[\"^1\",[]],\"message\",\"Initialization\",\"undoable\",false]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#X7IsnWed8dBg_kH3AAAU\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"fd3143b4-048f-4934-8f99-4403c03b2cf8\",\"seq\",1,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#tCMG2WCYWolCFnXDAAAV\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"31ad4f6b-e6a3-409e-a4a2-0288dc51f928\",\"seq\",1,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#tCMG2WCYWolCFnXDAAAV\"]]]],\"actor\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",\"seq\",2,\"deps\",[\"^1\",[\"fd3143b4-048f-4934-8f99-4403c03b2cf8\",1,\"31ad4f6b-e6a3-409e-a4a2-0288dc51f928\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",1,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",2]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#BlNav00ZmK8hGv3hAAAX\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"dadc6a0e-6760-4b3e-904a-412c785df077\",\"seq\",1,\"deps\",[\"^1\",[\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#X7IsnWed8dBg_kH3AAAU\"]]]],\"actor\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",\"seq\",3,\"deps\",[\"^1\",[\"dadc6a0e-6760-4b3e-904a-412c785df077\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#BlNav00ZmK8hGv3hAAAX\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"dadc6a0e-6760-4b3e-904a-412c785df077\",\"seq\",2,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",3]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4472cdab-e6a8-47f8-bfb1-1641956f2463\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"0dcf51b4-c6ef-4659-bb45-69c7269c3218\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4472cdab-e6a8-47f8-bfb1-1641956f2463\",\"key\",\"text\",\"value\",\"0dcf51b4-c6ef-4659-bb45-69c7269c3218\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"4472cdab-e6a8-47f8-bfb1-1641956f2463\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",2,\"deps\",[\"^1\",[\"dadc6a0e-6760-4b3e-904a-412c785df077\",2]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"e0a726e3-5097-49b7-9cdd-35da60473ddd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"18d9242a-7340-4089-a2a6-116567866f30\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"18d9242a-7340-4089-a2a6-116567866f30\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"1e28ab00-7fc3-4637-a3d4-3de128bff1a5\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1e28ab00-7fc3-4637-a3d4-3de128bff1a5\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8f001c21-d459-44e5-a2ee-d6cab102dfdc\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"6deb6807-300c-4a0c-9a4f-1c30a6375495\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8f001c21-d459-44e5-a2ee-d6cab102dfdc\",\"key\",\"text\",\"value\",\"6deb6807-300c-4a0c-9a4f-1c30a6375495\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"1e28ab00-7fc3-4637-a3d4-3de128bff1a5\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"8f001c21-d459-44e5-a2ee-d6cab102dfdc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"18d9242a-7340-4089-a2a6-116567866f30\",\"key\",\"children\",\"value\",\"1e28ab00-7fc3-4637-a3d4-3de128bff1a5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"18d9242a-7340-4089-a2a6-116567866f30\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",3,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",4,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"54efd4be-8c25-424d-8e23-eeb1433705a6\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"54efd4be-8c25-424d-8e23-eeb1433705a6\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"54efd4be-8c25-424d-8e23-eeb1433705a6\",\"key\",\"children\",\"value\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"54efd4be-8c25-424d-8e23-eeb1433705a6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",5,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6e124010-14d2-4567-a630-b56c121151ed\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"6e124010-14d2-4567-a630-b56c121151ed\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"03efcc06-0101-4bfd-a69e-9215072b3642\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"60830d87-d387-4850-bd8f-d50c4340b194\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"03efcc06-0101-4bfd-a69e-9215072b3642\",\"key\",\"text\",\"value\",\"60830d87-d387-4850-bd8f-d50c4340b194\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"03efcc06-0101-4bfd-a69e-9215072b3642\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6e124010-14d2-4567-a630-b56c121151ed\",\"key\",\"children\",\"value\",\"f1354552-ffda-476a-aa39-3be0de9976fd\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"6e124010-14d2-4567-a630-b56c121151ed\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",6,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",7,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"1cda008f-fedb-4b1c-a5ba-2ca14e4b9841\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a567b18d-1cf5-4fe4-8b77-eda7621d9985\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"1cda008f-fedb-4b1c-a5ba-2ca14e4b9841\",\"key\",\"text\",\"value\",\"a567b18d-1cf5-4fe4-8b77-eda7621d9985\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"1cda008f-fedb-4b1c-a5ba-2ca14e4b9841\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",8,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f1354552-ffda-476a-aa39-3be0de9976fd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"1fb6c089-ff1a-4fd8-83a1-fcf3301ff237\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"1fb6c089-ff1a-4fd8-83a1-fcf3301ff237\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"0bc11ff6-602d-4107-97d0-be3eb1b63263\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"221653b4-5c6a-4cc6-b4d9-5b8478bf71bd\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0bc11ff6-602d-4107-97d0-be3eb1b63263\",\"key\",\"text\",\"value\",\"221653b4-5c6a-4cc6-b4d9-5b8478bf71bd\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"0bc11ff6-602d-4107-97d0-be3eb1b63263\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"1fb6c089-ff1a-4fd8-83a1-fcf3301ff237\",\"key\",\"children\",\"value\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"1fb6c089-ff1a-4fd8-83a1-fcf3301ff237\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",9,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",10,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"221653b4-5c6a-4cc6-b4d9-5b8478bf71bd\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"221653b4-5c6a-4cc6-b4d9-5b8478bf71bd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",11,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",12,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e0b8894a-90c3-49ce-9dd0-7749ed377d51\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"dbe56caf-f2e3-46a2-98cf-2916cbe3dbdb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e0b8894a-90c3-49ce-9dd0-7749ed377d51\",\"key\",\"text\",\"value\",\"dbe56caf-f2e3-46a2-98cf-2916cbe3dbdb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"e0b8894a-90c3-49ce-9dd0-7749ed377d51\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",13,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"dd318223-f3bc-40c7-8c72-296128b89d5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d6df7cce-47a0-4590-8c55-5ae0e6527457\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"d6df7cce-47a0-4590-8c55-5ae0e6527457\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"87303c90-de66-4d17-8fa9-e391a9111478\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"87303c90-de66-4d17-8fa9-e391a9111478\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4ea97ebd-8d7c-4da9-b6bf-d66da0a5814b\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"dcfe05b5-d0e8-4286-a290-8353ce8fdcc4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4ea97ebd-8d7c-4da9-b6bf-d66da0a5814b\",\"key\",\"text\",\"value\",\"dcfe05b5-d0e8-4286-a290-8353ce8fdcc4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"87303c90-de66-4d17-8fa9-e391a9111478\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"4ea97ebd-8d7c-4da9-b6bf-d66da0a5814b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d6df7cce-47a0-4590-8c55-5ae0e6527457\",\"key\",\"children\",\"value\",\"87303c90-de66-4d17-8fa9-e391a9111478\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"d6df7cce-47a0-4590-8c55-5ae0e6527457\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",14,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,2,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,2,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",15,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"7ad2b220-0b4b-42f9-9b37-56c1528f55a8\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"7ad2b220-0b4b-42f9-9b37-56c1528f55a8\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7ad2b220-0b4b-42f9-9b37-56c1528f55a8\",\"key\",\"children\",\"value\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"7ad2b220-0b4b-42f9-9b37-56c1528f55a8\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",16,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ec8d86c6-c1e1-4b47-8312-05db6d4788de\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"ec8d86c6-c1e1-4b47-8312-05db6d4788de\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"466460d4-d28d-4423-99cf-025eeb900a36\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"422d88ed-65c8-4007-8a73-bca4d2456b94\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"466460d4-d28d-4423-99cf-025eeb900a36\",\"key\",\"text\",\"value\",\"422d88ed-65c8-4007-8a73-bca4d2456b94\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"466460d4-d28d-4423-99cf-025eeb900a36\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ec8d86c6-c1e1-4b47-8312-05db6d4788de\",\"key\",\"children\",\"value\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"ec8d86c6-c1e1-4b47-8312-05db6d4788de\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",17,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,2,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",18,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8c0bc13d-8231-4b9d-b5ed-e92d12551550\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"94290ddd-1037-4bfa-8929-bbc3a3344153\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8c0bc13d-8231-4b9d-b5ed-e92d12551550\",\"key\",\"text\",\"value\",\"94290ddd-1037-4bfa-8929-bbc3a3344153\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"8c0bc13d-8231-4b9d-b5ed-e92d12551550\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",19,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a55e73a3-16db-46e7-88ea-c645266d1b9a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"562545cd-1e18-4580-884f-e4ba8d5ed8c0\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"562545cd-1e18-4580-884f-e4ba8d5ed8c0\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"968da3a5-d000-48f1-a516-d145080d6f0e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"968da3a5-d000-48f1-a516-d145080d6f0e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8a919e52-e418-4cd4-9b90-245b7920d257\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"94ba8cad-14b4-4e51-aafb-2275ad974ec4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8a919e52-e418-4cd4-9b90-245b7920d257\",\"key\",\"text\",\"value\",\"94ba8cad-14b4-4e51-aafb-2275ad974ec4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"968da3a5-d000-48f1-a516-d145080d6f0e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"8a919e52-e418-4cd4-9b90-245b7920d257\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"562545cd-1e18-4580-884f-e4ba8d5ed8c0\",\"key\",\"children\",\"value\",\"968da3a5-d000-48f1-a516-d145080d6f0e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"562545cd-1e18-4580-884f-e4ba8d5ed8c0\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",20,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,2,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,2,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",21,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"ac898c2a-c0a0-4bfa-868f-41dd8b775d57\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6187ba1d-526a-484a-ba2f-1fea011902e9\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"6187ba1d-526a-484a-ba2f-1fea011902e9\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"bc0f3650-911d-4ad8-a409-4f1a4624c0d2\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bc0f3650-911d-4ad8-a409-4f1a4624c0d2\",\"key\",\"text\",\"value\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"bc0f3650-911d-4ad8-a409-4f1a4624c0d2\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6187ba1d-526a-484a-ba2f-1fea011902e9\",\"key\",\"children\",\"value\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"6187ba1d-526a-484a-ba2f-1fea011902e9\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",22,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",23,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",24,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",25,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"a7a71adf-11ab-41ca-8767-509c8f27fb00\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",26,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,3,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",27,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d1fd727f-757b-4da3-aca4-08feed5e995c\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"9bebd36e-52c8-4d49-972f-bada3b3eecbf\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d1fd727f-757b-4da3-aca4-08feed5e995c\",\"key\",\"text\",\"value\",\"9bebd36e-52c8-4d49-972f-bada3b3eecbf\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"d1fd727f-757b-4da3-aca4-08feed5e995c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",28,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f2f4b7e9-2eb4-4547-b3aa-c27cda732e4e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"elem\",6]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"581a76fa-a0de-45ce-b1e6-6120d1d59fb9\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"581a76fa-a0de-45ce-b1e6-6120d1d59fb9\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9357ccbc-facb-4bc1-b2e1-345b2955153f\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"abc9c11f-e8d7-4962-8a04-49e560e0532c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9357ccbc-facb-4bc1-b2e1-345b2955153f\",\"key\",\"text\",\"value\",\"abc9c11f-e8d7-4962-8a04-49e560e0532c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"9357ccbc-facb-4bc1-b2e1-345b2955153f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"581a76fa-a0de-45ce-b1e6-6120d1d59fb9\",\"key\",\"children\",\"value\",\"baba6b40-64cc-492c-926e-08862acbc22b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"value\",\"581a76fa-a0de-45ce-b1e6-6120d1d59fb9\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",29,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,4,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,4,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",30,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"abc9c11f-e8d7-4962-8a04-49e560e0532c\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"abc9c11f-e8d7-4962-8a04-49e560e0532c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",31,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,4,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,4,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",32,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"78fa937e-11d8-4a72-bced-dabe6c902c59\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"05bd9239-d053-4541-a198-0e4cbad8bd51\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"78fa937e-11d8-4a72-bced-dabe6c902c59\",\"key\",\"text\",\"value\",\"05bd9239-d053-4541-a198-0e4cbad8bd51\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"78fa937e-11d8-4a72-bced-dabe6c902c59\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",33,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"baba6b40-64cc-492c-926e-08862acbc22b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"elem\",7]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"62943c86-f57b-4f17-af8a-b59095e19019\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"62943c86-f57b-4f17-af8a-b59095e19019\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"22b6e6c4-aed9-4176-9125-ddf41e8e0ebb\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"22b6e6c4-aed9-4176-9125-ddf41e8e0ebb\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9da95c7d-86f8-45e5-a0a3-328c4c3d3b26\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"62aff0ee-35e5-4127-9d4a-681ca3bbfd76\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9da95c7d-86f8-45e5-a0a3-328c4c3d3b26\",\"key\",\"text\",\"value\",\"62aff0ee-35e5-4127-9d4a-681ca3bbfd76\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"22b6e6c4-aed9-4176-9125-ddf41e8e0ebb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"9da95c7d-86f8-45e5-a0a3-328c4c3d3b26\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"62943c86-f57b-4f17-af8a-b59095e19019\",\"key\",\"children\",\"value\",\"22b6e6c4-aed9-4176-9125-ddf41e8e0ebb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"value\",\"62943c86-f57b-4f17-af8a-b59095e19019\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",34,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",35,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"62aff0ee-35e5-4127-9d4a-681ca3bbfd76\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"62aff0ee-35e5-4127-9d4a-681ca3bbfd76\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"~`\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",36,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",37,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"elem\",8]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5af86039-dfdf-404e-bc19-a654b42f7262\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"5af86039-dfdf-404e-bc19-a654b42f7262\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5af86039-dfdf-404e-bc19-a654b42f7262\",\"key\",\"children\",\"value\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:8\",\"value\",\"5af86039-dfdf-404e-bc19-a654b42f7262\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",38,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"fac8cbae-e2d2-4f64-b844-9e3e29272de1\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"fac8cbae-e2d2-4f64-b844-9e3e29272de1\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"89b19ef9-351d-4ba3-8766-f0fca73d5947\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"89b19ef9-351d-4ba3-8766-f0fca73d5947\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"45143345-84d9-4d57-942c-fb2bb5a1390e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"000e2e34-7d5c-40bf-a327-6570285507ad\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"000e2e34-7d5c-40bf-a327-6570285507ad\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"000e2e34-7d5c-40bf-a327-6570285507ad\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"~`\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"45143345-84d9-4d57-942c-fb2bb5a1390e\",\"key\",\"text\",\"value\",\"000e2e34-7d5c-40bf-a327-6570285507ad\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"89b19ef9-351d-4ba3-8766-f0fca73d5947\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"45143345-84d9-4d57-942c-fb2bb5a1390e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fac8cbae-e2d2-4f64-b844-9e3e29272de1\",\"key\",\"children\",\"value\",\"89b19ef9-351d-4ba3-8766-f0fca73d5947\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"fac8cbae-e2d2-4f64-b844-9e3e29272de1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",39,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",40,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e018438a-59e8-4f37-874b-457a524af012\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"e018438a-59e8-4f37-874b-457a524af012\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f57df88c-06bf-4cf8-a153-24c37ee42f59\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e018438a-59e8-4f37-874b-457a524af012\",\"key\",\"children\",\"value\",\"f57df88c-06bf-4cf8-a153-24c37ee42f59\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"e018438a-59e8-4f37-874b-457a524af012\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",41,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f57df88c-06bf-4cf8-a153-24c37ee42f59\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"48725c7a-1f3d-442e-9059-1ec8edab4438\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"48725c7a-1f3d-442e-9059-1ec8edab4438\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"bde2f67c-a8b5-4069-a820-96ae6aeb7481\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bde2f67c-a8b5-4069-a820-96ae6aeb7481\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"06b3ea03-e30b-4c38-a39b-b9533431f831\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"bc6dad14-f663-4172-965c-766d3bd64d94\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bc6dad14-f663-4172-965c-766d3bd64d94\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"bc6dad14-f663-4172-965c-766d3bd64d94\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"~`\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"06b3ea03-e30b-4c38-a39b-b9533431f831\",\"key\",\"text\",\"value\",\"bc6dad14-f663-4172-965c-766d3bd64d94\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bde2f67c-a8b5-4069-a820-96ae6aeb7481\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"06b3ea03-e30b-4c38-a39b-b9533431f831\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"48725c7a-1f3d-442e-9059-1ec8edab4438\",\"key\",\"children\",\"value\",\"bde2f67c-a8b5-4069-a820-96ae6aeb7481\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f57df88c-06bf-4cf8-a153-24c37ee42f59\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"48725c7a-1f3d-442e-9059-1ec8edab4438\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",42,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f57df88c-06bf-4cf8-a153-24c37ee42f59\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9f3ecacc-d053-4f2a-b45e-add0751e25e6\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"9f3ecacc-d053-4f2a-b45e-add0751e25e6\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"c325abbf-a745-4576-b19d-e21e6403cda1\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"28d05c02-fc70-49f0-98ea-b07f72ce64e6\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"28d05c02-fc70-49f0-98ea-b07f72ce64e6\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"28d05c02-fc70-49f0-98ea-b07f72ce64e6\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"~`\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c325abbf-a745-4576-b19d-e21e6403cda1\",\"key\",\"text\",\"value\",\"28d05c02-fc70-49f0-98ea-b07f72ce64e6\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"c325abbf-a745-4576-b19d-e21e6403cda1\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9f3ecacc-d053-4f2a-b45e-add0751e25e6\",\"key\",\"children\",\"value\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"9f3ecacc-d053-4f2a-b45e-add0751e25e6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",43,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",44,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"bdc2e003-3f0c-4294-8915-d6ec238a3d3a\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"85a36828-d2dc-47a8-bb22-7a83e076132a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bdc2e003-3f0c-4294-8915-d6ec238a3d3a\",\"key\",\"text\",\"value\",\"85a36828-d2dc-47a8-bb22-7a83e076132a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"bdc2e003-3f0c-4294-8915-d6ec238a3d3a\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",45,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"8cb93edf-38d7-4fb9-9b5f-1b77c74ccf83\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"0a320c38-0167-4525-83ef-f74b4b9a57e6\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"0a320c38-0167-4525-83ef-f74b4b9a57e6\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"bd3bb4d9-9c47-41f9-af80-b6e8d14673dc\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bd3bb4d9-9c47-41f9-af80-b6e8d14673dc\",\"key\",\"text\",\"value\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"bd3bb4d9-9c47-41f9-af80-b6e8d14673dc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0a320c38-0167-4525-83ef-f74b4b9a57e6\",\"key\",\"children\",\"value\",\"80cb16b3-1661-4913-91d9-7052d54829b6\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"0a320c38-0167-4525-83ef-f74b4b9a57e6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",46,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",47,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",48,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",49,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",50,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",51,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"7726b64b-e2dd-44f4-8f46-594b58bd72d4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",52,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",53,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5d7bb36f-e8ae-4c19-a696-6457d170beca\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"644bdc1e-a4b8-4b5a-a7e7-3d834f61566d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5d7bb36f-e8ae-4c19-a696-6457d170beca\",\"key\",\"text\",\"value\",\"644bdc1e-a4b8-4b5a-a7e7-3d834f61566d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"5d7bb36f-e8ae-4c19-a696-6457d170beca\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",54,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"80cb16b3-1661-4913-91d9-7052d54829b6\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"548e3395-18ac-4bea-8a61-e124adc70a74\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"548e3395-18ac-4bea-8a61-e124adc70a74\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"4b496f36-1022-4d56-b253-ccec2cde9029\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"4b496f36-1022-4d56-b253-ccec2cde9029\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"cad07011-b159-47e7-8d45-2cd31a355149\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a6dfee5c-ed36-4f87-8b1a-6d4e494c40b0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cad07011-b159-47e7-8d45-2cd31a355149\",\"key\",\"text\",\"value\",\"a6dfee5c-ed36-4f87-8b1a-6d4e494c40b0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4b496f36-1022-4d56-b253-ccec2cde9029\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"cad07011-b159-47e7-8d45-2cd31a355149\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"548e3395-18ac-4bea-8a61-e124adc70a74\",\"key\",\"children\",\"value\",\"4b496f36-1022-4d56-b253-ccec2cde9029\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"548e3395-18ac-4bea-8a61-e124adc70a74\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",55,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",56,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"elem\",6]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"737c2e57-c8d0-45a2-9d77-11791a9032f2\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"737c2e57-c8d0-45a2-9d77-11791a9032f2\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"737c2e57-c8d0-45a2-9d77-11791a9032f2\",\"key\",\"children\",\"value\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"value\",\"737c2e57-c8d0-45a2-9d77-11791a9032f2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",57,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d75ac80b-ef67-4a73-b117-4aafe2a058da\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"d75ac80b-ef67-4a73-b117-4aafe2a058da\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"90afdc13-af9b-4710-8a89-1f9bcfa5ae9f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"90afdc13-af9b-4710-8a89-1f9bcfa5ae9f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f3c06c83-5ffd-42c5-b0d1-c3c32eac86ad\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"c918f816-efce-429d-8251-6806fa47e847\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f3c06c83-5ffd-42c5-b0d1-c3c32eac86ad\",\"key\",\"text\",\"value\",\"c918f816-efce-429d-8251-6806fa47e847\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"90afdc13-af9b-4710-8a89-1f9bcfa5ae9f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f3c06c83-5ffd-42c5-b0d1-c3c32eac86ad\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d75ac80b-ef67-4a73-b117-4aafe2a058da\",\"key\",\"children\",\"value\",\"90afdc13-af9b-4710-8a89-1f9bcfa5ae9f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d75ac80b-ef67-4a73-b117-4aafe2a058da\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",58,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",59,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b5795d66-c1f3-4c76-9515-f08723f7d0ec\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b5795d66-c1f3-4c76-9515-f08723f7d0ec\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a2a2fe7b-3a34-4853-87ca-6bada676553c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b5795d66-c1f3-4c76-9515-f08723f7d0ec\",\"key\",\"children\",\"value\",\"a2a2fe7b-3a34-4853-87ca-6bada676553c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"b5795d66-c1f3-4c76-9515-f08723f7d0ec\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",60,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a2a2fe7b-3a34-4853-87ca-6bada676553c\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"0e55532a-d17b-4ed8-95fd-5626edb301bf\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"0e55532a-d17b-4ed8-95fd-5626edb301bf\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"2e05639f-4386-44d0-98cd-2ba3647a0668\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2e05639f-4386-44d0-98cd-2ba3647a0668\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d5413b71-707b-4b69-b367-844ec67ff21e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"3f8eb46c-2a0a-4ead-a72e-8a15be7c489a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d5413b71-707b-4b69-b367-844ec67ff21e\",\"key\",\"text\",\"value\",\"3f8eb46c-2a0a-4ead-a72e-8a15be7c489a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2e05639f-4386-44d0-98cd-2ba3647a0668\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d5413b71-707b-4b69-b367-844ec67ff21e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0e55532a-d17b-4ed8-95fd-5626edb301bf\",\"key\",\"children\",\"value\",\"2e05639f-4386-44d0-98cd-2ba3647a0668\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a2a2fe7b-3a34-4853-87ca-6bada676553c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"0e55532a-d17b-4ed8-95fd-5626edb301bf\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",61,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a2a2fe7b-3a34-4853-87ca-6bada676553c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"c878352b-f1c9-4072-adb3-d23403b707d2\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"c878352b-f1c9-4072-adb3-d23403b707d2\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f446fa65-31ae-44dc-81f0-15ca888ea0d2\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"c546350c-5632-4b4a-8cc4-60100161b8ed\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f446fa65-31ae-44dc-81f0-15ca888ea0d2\",\"key\",\"text\",\"value\",\"c546350c-5632-4b4a-8cc4-60100161b8ed\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f446fa65-31ae-44dc-81f0-15ca888ea0d2\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c878352b-f1c9-4072-adb3-d23403b707d2\",\"key\",\"children\",\"value\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"c878352b-f1c9-4072-adb3-d23403b707d2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",62,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",63,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f6c5d67d-21eb-4474-8d0e-4a8569944ebc\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"59bcca2d-5fb2-4842-9f7a-3d3f35f5d724\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f6c5d67d-21eb-4474-8d0e-4a8569944ebc\",\"key\",\"text\",\"value\",\"59bcca2d-5fb2-4842-9f7a-3d3f35f5d724\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"f6c5d67d-21eb-4474-8d0e-4a8569944ebc\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",64,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0d373dcc-0f7b-4234-8429-4490d45c75d3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"1c89890e-6c3c-4c73-ac6a-133a37f87efc\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"1c89890e-6c3c-4c73-ac6a-133a37f87efc\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f5c21e6b-bf64-4750-917f-979a0accac18\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f5c21e6b-bf64-4750-917f-979a0accac18\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b59649de-b8f8-45cb-99c3-9be89be631f9\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"4b45f656-bb3c-443d-b20a-037bcbea55a7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b59649de-b8f8-45cb-99c3-9be89be631f9\",\"key\",\"text\",\"value\",\"4b45f656-bb3c-443d-b20a-037bcbea55a7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f5c21e6b-bf64-4750-917f-979a0accac18\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"b59649de-b8f8-45cb-99c3-9be89be631f9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"1c89890e-6c3c-4c73-ac6a-133a37f87efc\",\"key\",\"children\",\"value\",\"f5c21e6b-bf64-4750-917f-979a0accac18\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"1c89890e-6c3c-4c73-ac6a-133a37f87efc\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",65,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",66,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"7fee1deb-3919-4bfc-9642-4a8b4b5836f4\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"7fee1deb-3919-4bfc-9642-4a8b4b5836f4\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7fee1deb-3919-4bfc-9642-4a8b4b5836f4\",\"key\",\"children\",\"value\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"7fee1deb-3919-4bfc-9642-4a8b4b5836f4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",67,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4ebe93fc-0984-4c5c-869d-e95602ab01b5\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4ebe93fc-0984-4c5c-869d-e95602ab01b5\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"405372ce-b191-4491-abfb-3e7156614d9b\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"7eb55dec-17ee-4aa9-adc8-7567e399eb98\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"405372ce-b191-4491-abfb-3e7156614d9b\",\"key\",\"text\",\"value\",\"7eb55dec-17ee-4aa9-adc8-7567e399eb98\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"405372ce-b191-4491-abfb-3e7156614d9b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4ebe93fc-0984-4c5c-869d-e95602ab01b5\",\"key\",\"children\",\"value\",\"54e20233-07ab-4dc3-9ce9-171225888a47\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"4ebe93fc-0984-4c5c-869d-e95602ab01b5\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",68,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",69,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"63551bb2-5a4b-4aed-ad58-fc9ce877eb6c\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"8c990ed1-c8e2-4a82-830d-0959319c052d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"63551bb2-5a4b-4aed-ad58-fc9ce877eb6c\",\"key\",\"text\",\"value\",\"8c990ed1-c8e2-4a82-830d-0959319c052d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"63551bb2-5a4b-4aed-ad58-fc9ce877eb6c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",70,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"54e20233-07ab-4dc3-9ce9-171225888a47\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"add02ab4-ec95-4e06-8743-80048008a65a\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"add02ab4-ec95-4e06-8743-80048008a65a\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"c014e9f6-daa8-4e88-b033-4d4f0a42b9fc\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"c014e9f6-daa8-4e88-b033-4d4f0a42b9fc\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"2898f277-d0d3-4f7a-938a-68dea39466df\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"5c9b80e3-8e90-470f-8b46-1764c4b58e4d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2898f277-d0d3-4f7a-938a-68dea39466df\",\"key\",\"text\",\"value\",\"5c9b80e3-8e90-470f-8b46-1764c4b58e4d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c014e9f6-daa8-4e88-b033-4d4f0a42b9fc\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"2898f277-d0d3-4f7a-938a-68dea39466df\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"add02ab4-ec95-4e06-8743-80048008a65a\",\"key\",\"children\",\"value\",\"c014e9f6-daa8-4e88-b033-4d4f0a42b9fc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"add02ab4-ec95-4e06-8743-80048008a65a\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",71,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",72,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"a255d1de-fb2d-4315-a74e-6859c23d3076\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"a255d1de-fb2d-4315-a74e-6859c23d3076\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a255d1de-fb2d-4315-a74e-6859c23d3076\",\"key\",\"children\",\"value\",\"cfc9e01a-313f-45bd-9cab-19358d037476\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"a255d1de-fb2d-4315-a74e-6859c23d3076\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",73,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"521b5247-d71f-4b6a-97f6-58711f05550a\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"521b5247-d71f-4b6a-97f6-58711f05550a\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9f1dd894-10ad-4c99-ae4b-909597d92e03\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"dfe4207d-92fe-49cd-b3ab-d1380330aef8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9f1dd894-10ad-4c99-ae4b-909597d92e03\",\"key\",\"text\",\"value\",\"dfe4207d-92fe-49cd-b3ab-d1380330aef8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"9f1dd894-10ad-4c99-ae4b-909597d92e03\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"521b5247-d71f-4b6a-97f6-58711f05550a\",\"key\",\"children\",\"value\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"521b5247-d71f-4b6a-97f6-58711f05550a\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",74,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",75,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"7ce4a0a0-3454-49c7-89be-86094efdb05c\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a80e3456-6fc7-4bf6-958b-41f87d44365b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7ce4a0a0-3454-49c7-89be-86094efdb05c\",\"key\",\"text\",\"value\",\"a80e3456-6fc7-4bf6-958b-41f87d44365b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"7ce4a0a0-3454-49c7-89be-86094efdb05c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",76,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a8be02ce-e516-456f-ae15-fb3049915fbd\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"3734b960-09ce-41af-8310-3c00e42e561d\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"3734b960-09ce-41af-8310-3c00e42e561d\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a973430d-c222-4175-bd18-459b7d219e3d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a973430d-c222-4175-bd18-459b7d219e3d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"bcedc17b-2835-4dd1-a92a-8b0062fdffff\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"eac7969e-702f-47f1-87f4-08a0cc6b7bcb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bcedc17b-2835-4dd1-a92a-8b0062fdffff\",\"key\",\"text\",\"value\",\"eac7969e-702f-47f1-87f4-08a0cc6b7bcb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a973430d-c222-4175-bd18-459b7d219e3d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"bcedc17b-2835-4dd1-a92a-8b0062fdffff\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"3734b960-09ce-41af-8310-3c00e42e561d\",\"key\",\"children\",\"value\",\"a973430d-c222-4175-bd18-459b7d219e3d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"3734b960-09ce-41af-8310-3c00e42e561d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",77,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",78,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"080afa86-f7f8-4fb3-82c2-9d321dbd5405\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"080afa86-f7f8-4fb3-82c2-9d321dbd5405\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"080afa86-f7f8-4fb3-82c2-9d321dbd5405\",\"key\",\"children\",\"value\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"080afa86-f7f8-4fb3-82c2-9d321dbd5405\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",79,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"0c8f1c6d-9458-48a3-9511-a8f7b1fd33b8\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"0c8f1c6d-9458-48a3-9511-a8f7b1fd33b8\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b537de53-944d-4238-ad79-fc42842e30c5\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"91cb1153-f915-423c-bcc6-4828f94a8731\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b537de53-944d-4238-ad79-fc42842e30c5\",\"key\",\"text\",\"value\",\"91cb1153-f915-423c-bcc6-4828f94a8731\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"b537de53-944d-4238-ad79-fc42842e30c5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c8f1c6d-9458-48a3-9511-a8f7b1fd33b8\",\"key\",\"children\",\"value\",\"d7361003-b876-4329-b64e-0e924ace4a3e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"0c8f1c6d-9458-48a3-9511-a8f7b1fd33b8\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",80,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",81,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4bc5300a-c525-4993-8a1b-24b0fbb5ce85\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"428ec480-82cd-4615-b3dd-9dac503918dc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4bc5300a-c525-4993-8a1b-24b0fbb5ce85\",\"key\",\"text\",\"value\",\"428ec480-82cd-4615-b3dd-9dac503918dc\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"4bc5300a-c525-4993-8a1b-24b0fbb5ce85\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",82,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"d7361003-b876-4329-b64e-0e924ace4a3e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"08db83f8-f918-42b6-8a8b-f72bb46eaaa7\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"08db83f8-f918-42b6-8a8b-f72bb46eaaa7\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4b5742a1-bc35-4a9b-adc1-0463efdc55af\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4b5742a1-bc35-4a9b-adc1-0463efdc55af\",\"key\",\"text\",\"value\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"4b5742a1-bc35-4a9b-adc1-0463efdc55af\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"08db83f8-f918-42b6-8a8b-f72bb46eaaa7\",\"key\",\"children\",\"value\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"08db83f8-f918-42b6-8a8b-f72bb46eaaa7\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",83,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",84,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",85,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",86,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"e544a0b5-777e-4b5b-8bc8-ba368e0ba2ac\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",87,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,1,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",88,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"92ee3dc0-26f7-4da8-9111-7f196ca984df\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"ef08d4e3-249d-423b-8481-0f9601283c2f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"92ee3dc0-26f7-4da8-9111-7f196ca984df\",\"key\",\"text\",\"value\",\"ef08d4e3-249d-423b-8481-0f9601283c2f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"92ee3dc0-26f7-4da8-9111-7f196ca984df\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",89,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"2bf78e92-4815-4101-9e2b-183cf0b77102\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"67e28b13-f05e-4efd-b228-abb1509a0a3a\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"67e28b13-f05e-4efd-b228-abb1509a0a3a\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"86a1e5f8-db6b-4f52-8932-fb668b102548\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"86a1e5f8-db6b-4f52-8932-fb668b102548\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"689a9cc2-2fd5-406e-86c5-d8e4475806e7\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"13d15017-f698-4a43-849d-7fce60f23ec4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"689a9cc2-2fd5-406e-86c5-d8e4475806e7\",\"key\",\"text\",\"value\",\"13d15017-f698-4a43-849d-7fce60f23ec4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"86a1e5f8-db6b-4f52-8932-fb668b102548\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"689a9cc2-2fd5-406e-86c5-d8e4475806e7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"67e28b13-f05e-4efd-b228-abb1509a0a3a\",\"key\",\"children\",\"value\",\"86a1e5f8-db6b-4f52-8932-fb668b102548\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"67e28b13-f05e-4efd-b228-abb1509a0a3a\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",90,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",91,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"7444bf9c-f704-44f1-8776-d363cf383195\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"7444bf9c-f704-44f1-8776-d363cf383195\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7444bf9c-f704-44f1-8776-d363cf383195\",\"key\",\"children\",\"value\",\"0217469b-9235-4742-9d9a-74632e3148e9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"7444bf9c-f704-44f1-8776-d363cf383195\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",92,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e3ff62ee-c658-43c8-bb38-9e1826a3201c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"e3ff62ee-c658-43c8-bb38-9e1826a3201c\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"310bee6c-1512-4af3-8213-37c109a4bf7d\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"8021ecab-5ea8-4e2f-ae34-1493e5bff52f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"310bee6c-1512-4af3-8213-37c109a4bf7d\",\"key\",\"text\",\"value\",\"8021ecab-5ea8-4e2f-ae34-1493e5bff52f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"310bee6c-1512-4af3-8213-37c109a4bf7d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e3ff62ee-c658-43c8-bb38-9e1826a3201c\",\"key\",\"children\",\"value\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"e3ff62ee-c658-43c8-bb38-9e1826a3201c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",93,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",94,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"339f7363-db0f-4082-9470-805edae11678\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"25fbdbd0-42a9-42fd-a6d8-4ee26dfc4e4b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"339f7363-db0f-4082-9470-805edae11678\",\"key\",\"text\",\"value\",\"25fbdbd0-42a9-42fd-a6d8-4ee26dfc4e4b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"339f7363-db0f-4082-9470-805edae11678\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",95,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"aa6b7478-25a0-48a6-8a7e-b17b80390f71\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9b2ae65c-b312-4d04-a30a-9aa17da7314d\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"9b2ae65c-b312-4d04-a30a-9aa17da7314d\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"b3be3d1a-4d31-4174-9e2c-81883d9ca72d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"b3be3d1a-4d31-4174-9e2c-81883d9ca72d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e476be36-78a2-44fe-909a-23bed981c752\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"66f49726-12da-4f43-b49e-2fa5db66de5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e476be36-78a2-44fe-909a-23bed981c752\",\"key\",\"text\",\"value\",\"66f49726-12da-4f43-b49e-2fa5db66de5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b3be3d1a-4d31-4174-9e2c-81883d9ca72d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"e476be36-78a2-44fe-909a-23bed981c752\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9b2ae65c-b312-4d04-a30a-9aa17da7314d\",\"key\",\"children\",\"value\",\"b3be3d1a-4d31-4174-9e2c-81883d9ca72d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"9b2ae65c-b312-4d04-a30a-9aa17da7314d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",96,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",97,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"66f49726-12da-4f43-b49e-2fa5db66de5e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"66f49726-12da-4f43-b49e-2fa5db66de5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",98,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",99,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b824f23c-a0db-40ae-baa5-30432844594f\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b824f23c-a0db-40ae-baa5-30432844594f\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b824f23c-a0db-40ae-baa5-30432844594f\",\"key\",\"children\",\"value\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"b824f23c-a0db-40ae-baa5-30432844594f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",100,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8f608f07-1843-4484-a074-d986b8d16657\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"8f608f07-1843-4484-a074-d986b8d16657\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"c3b7cb57-2607-463e-82ed-fc1daf405a46\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c3b7cb57-2607-463e-82ed-fc1daf405a46\",\"key\",\"text\",\"value\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"c3b7cb57-2607-463e-82ed-fc1daf405a46\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8f608f07-1843-4484-a074-d986b8d16657\",\"key\",\"children\",\"value\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"8f608f07-1843-4484-a074-d986b8d16657\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",101,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",102,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",103,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",104,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"1188a000-d9ea-4831-9e7e-7704c5ebf79d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",105,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",106,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8d288bcd-d272-4358-9221-fa4785c61f3e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"2cef33aa-ccdd-4d01-b34b-aee968d75739\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8d288bcd-d272-4358-9221-fa4785c61f3e\",\"key\",\"text\",\"value\",\"2cef33aa-ccdd-4d01-b34b-aee968d75739\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"8d288bcd-d272-4358-9221-fa4785c61f3e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",107,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"8574fdca-55bb-4c85-aa5c-4243d2e18537\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b169a364-b1f6-44d4-8142-492bdaedc0bf\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b169a364-b1f6-44d4-8142-492bdaedc0bf\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"49d04e3e-64e5-4c69-87bb-2909d3e8eaf9\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"49d04e3e-64e5-4c69-87bb-2909d3e8eaf9\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6f03000a-b3b6-47ff-9ced-2d283bfae190\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"43723126-0fa8-4545-9dc5-907cd699112e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6f03000a-b3b6-47ff-9ced-2d283bfae190\",\"key\",\"text\",\"value\",\"43723126-0fa8-4545-9dc5-907cd699112e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"49d04e3e-64e5-4c69-87bb-2909d3e8eaf9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"6f03000a-b3b6-47ff-9ced-2d283bfae190\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b169a364-b1f6-44d4-8142-492bdaedc0bf\",\"key\",\"children\",\"value\",\"49d04e3e-64e5-4c69-87bb-2909d3e8eaf9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"b169a364-b1f6-44d4-8142-492bdaedc0bf\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",108,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",109,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5596f4ad-eb5c-44ee-ad1e-9d4772ad1da5\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"5596f4ad-eb5c-44ee-ad1e-9d4772ad1da5\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5596f4ad-eb5c-44ee-ad1e-9d4772ad1da5\",\"key\",\"children\",\"value\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"5596f4ad-eb5c-44ee-ad1e-9d4772ad1da5\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",110,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"af11c310-214e-47e7-adf5-69abd6a1150c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"af11c310-214e-47e7-adf5-69abd6a1150c\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"798d9b5e-41c2-4892-80b3-63b65f4336a3\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"07843c69-f25e-4990-acfd-7ef8fc345398\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"798d9b5e-41c2-4892-80b3-63b65f4336a3\",\"key\",\"text\",\"value\",\"07843c69-f25e-4990-acfd-7ef8fc345398\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"798d9b5e-41c2-4892-80b3-63b65f4336a3\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"af11c310-214e-47e7-adf5-69abd6a1150c\",\"key\",\"children\",\"value\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"af11c310-214e-47e7-adf5-69abd6a1150c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",111,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",112,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"d702f0ed-1e84-4d7f-a5e5-d1e584222643\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"881ebb81-1bcf-43d9-8021-9980b01e7d92\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d702f0ed-1e84-4d7f-a5e5-d1e584222643\",\"key\",\"text\",\"value\",\"881ebb81-1bcf-43d9-8021-9980b01e7d92\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"d702f0ed-1e84-4d7f-a5e5-d1e584222643\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",113,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"790aeef8-eb85-4cd0-86b0-a0ea5582bb2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"cf998e0b-d3dc-4c3e-a253-e82926ee8de7\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"cf998e0b-d3dc-4c3e-a253-e82926ee8de7\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"f953dea9-2680-455d-ac47-10eaa0e3cf5b\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f953dea9-2680-455d-ac47-10eaa0e3cf5b\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"83d0318d-0315-4820-9471-bba52790d6ce\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a4224fd3-f47f-4cf5-8dd9-286b39164ad5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"83d0318d-0315-4820-9471-bba52790d6ce\",\"key\",\"text\",\"value\",\"a4224fd3-f47f-4cf5-8dd9-286b39164ad5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f953dea9-2680-455d-ac47-10eaa0e3cf5b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"83d0318d-0315-4820-9471-bba52790d6ce\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cf998e0b-d3dc-4c3e-a253-e82926ee8de7\",\"key\",\"children\",\"value\",\"f953dea9-2680-455d-ac47-10eaa0e3cf5b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"cf998e0b-d3dc-4c3e-a253-e82926ee8de7\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",114,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",115,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a4224fd3-f47f-4cf5-8dd9-286b39164ad5\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"a4224fd3-f47f-4cf5-8dd9-286b39164ad5\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",116,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",117,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,3,2,2,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",118,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",119,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",120,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,2,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",121,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,1,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",122,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",123,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",124,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",125,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",126,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,3,2,5,2,1,1,1,2,1,1,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",127,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"48e72a39-c4cc-4964-96e4-fb16ab82bb27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",128,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",129,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",130,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"8257b1fa-75e3-494c-9c43-a01859691df8\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:3\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",131,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",132,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"e8c12d96-62a0-407e-a622-a5dbc598bbc7\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",133,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",134,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",135,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",136,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",137,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7e225e8b-0c8f-4e45-8c19-5d9aa084d848\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",138,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",139,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f8502a53-1e31-4e51-97b9-aba34a3b025c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",140,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"ae705476-0f4b-49cc-b057-50094f97b4e3\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",141,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"bca042cb-805f-448c-b9bf-1dcc253ab35c\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",142,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"cfc9e01a-313f-45bd-9cab-19358d037476\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",143,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",144,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"975f7dd8-910f-4f4a-a3c8-9cb0b58a9cfe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",145,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0217469b-9235-4742-9d9a-74632e3148e9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",146,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"5f75a2c3-7df2-4ded-af34-7e857b83f951\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",147,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",148,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a4224fd3-f47f-4cf5-8dd9-286b39164ad5\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",149,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"5cd8aaf0-14ff-4084-be16-087caeed5d7f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"3ba849ea-b524-464c-95f8-db56f128b002\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"3ba849ea-b524-464c-95f8-db56f128b002\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"04b73655-10b7-46a4-afb6-5b954a622152\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"04b73655-10b7-46a4-afb6-5b954a622152\",\"key\",\"text\",\"value\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"04b73655-10b7-46a4-afb6-5b954a622152\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"3ba849ea-b524-464c-95f8-db56f128b002\",\"key\",\"children\",\"value\",\"71d73746-de67-46b6-8073-5a4d07c221f2\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"3ba849ea-b524-464c-95f8-db56f128b002\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",150,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",151,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",152,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",153,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#BlNav00ZmK8hGv3hAAAX\"]]]],\"actor\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",\"seq\",4,\"deps\",[\"^1\",[\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",153]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",1,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",4]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"o\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",154,\"deps\",[\"^1\",[\"8128a4fb-7226-43c1-91d5-40effc660552\",1]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",155,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"n\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",156,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",157,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"d29c1b68-8d0d-4a0d-83d2-899629a0f054\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",158,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",159,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"31022add-06db-4c05-a28e-a4aad168b0b9\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"b8d87a76-5995-4c4c-a62a-a24ea23d508e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"31022add-06db-4c05-a28e-a4aad168b0b9\",\"key\",\"text\",\"value\",\"b8d87a76-5995-4c4c-a62a-a24ea23d508e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"31022add-06db-4c05-a28e-a4aad168b0b9\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",160,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4a39e539-56b5-49d6-8d54-3e79f17916a5\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4a39e539-56b5-49d6-8d54-3e79f17916a5\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a523e38e-db8a-43f2-bcd6-e4c1f20e4f4e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a523e38e-db8a-43f2-bcd6-e4c1f20e4f4e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"04b2bb06-5e35-477e-bded-9b9d85fe232c\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"39c75ede-ea5b-4dcf-8473-f0bf1e08c546\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"04b2bb06-5e35-477e-bded-9b9d85fe232c\",\"key\",\"text\",\"value\",\"39c75ede-ea5b-4dcf-8473-f0bf1e08c546\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a523e38e-db8a-43f2-bcd6-e4c1f20e4f4e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"04b2bb06-5e35-477e-bded-9b9d85fe232c\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4a39e539-56b5-49d6-8d54-3e79f17916a5\",\"key\",\"children\",\"value\",\"a523e38e-db8a-43f2-bcd6-e4c1f20e4f4e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"4a39e539-56b5-49d6-8d54-3e79f17916a5\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",161,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",162,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"39c75ede-ea5b-4dcf-8473-f0bf1e08c546\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"39c75ede-ea5b-4dcf-8473-f0bf1e08c546\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",163,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",164,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"39c75ede-ea5b-4dcf-8473-f0bf1e08c546\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",165,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",166,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"22d04215-337b-440c-9dd2-22408fde6ebb\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"22d04215-337b-440c-9dd2-22408fde6ebb\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"22d04215-337b-440c-9dd2-22408fde6ebb\",\"key\",\"children\",\"value\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"22d04215-337b-440c-9dd2-22408fde6ebb\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",167,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4e597a40-07fc-4e23-af4c-0b313efef637\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4e597a40-07fc-4e23-af4c-0b313efef637\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f59eb71d-cbec-4cf3-a9a8-df32f0dc8008\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f59eb71d-cbec-4cf3-a9a8-df32f0dc8008\",\"key\",\"text\",\"value\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f59eb71d-cbec-4cf3-a9a8-df32f0dc8008\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4e597a40-07fc-4e23-af4c-0b313efef637\",\"key\",\"children\",\"value\",\"d07c5cec-c517-4c02-b987-b9988813ff22\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"4e597a40-07fc-4e23-af4c-0b313efef637\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",168,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",169,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",170,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",171,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"w\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",172,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",173,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"o\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",174,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",175,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5ac45e12-d120-497a-a43c-eb0a819094e6\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"a2b754d7-a299-400b-9c04-e4ff4cb7b0ae\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5ac45e12-d120-497a-a43c-eb0a819094e6\",\"key\",\"text\",\"value\",\"a2b754d7-a299-400b-9c04-e4ff4cb7b0ae\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"5ac45e12-d120-497a-a43c-eb0a819094e6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",176,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"d07c5cec-c517-4c02-b987-b9988813ff22\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"28373452-3bb0-47bc-82da-a0717444d300\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"28373452-3bb0-47bc-82da-a0717444d300\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"32b1b9d6-d942-4fbe-ac1d-1277e85ebd7d\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"32b1b9d6-d942-4fbe-ac1d-1277e85ebd7d\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"efda4cb9-afaf-41cd-a5f5-a2c8089b001a\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"2ae7324f-a91c-474f-bf12-646e9d241a77\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"efda4cb9-afaf-41cd-a5f5-a2c8089b001a\",\"key\",\"text\",\"value\",\"2ae7324f-a91c-474f-bf12-646e9d241a77\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"32b1b9d6-d942-4fbe-ac1d-1277e85ebd7d\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"efda4cb9-afaf-41cd-a5f5-a2c8089b001a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"28373452-3bb0-47bc-82da-a0717444d300\",\"key\",\"children\",\"value\",\"32b1b9d6-d942-4fbe-ac1d-1277e85ebd7d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"28373452-3bb0-47bc-82da-a0717444d300\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",177,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",178,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"2679c1d3-84ce-4418-af15-15fc0a4f5213\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"2679c1d3-84ce-4418-af15-15fc0a4f5213\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2679c1d3-84ce-4418-af15-15fc0a4f5213\",\"key\",\"children\",\"value\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"2679c1d3-84ce-4418-af15-15fc0a4f5213\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",179,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"a29d5c91-2b35-4e8e-b2eb-372a6130f021\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"a29d5c91-2b35-4e8e-b2eb-372a6130f021\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b72c4a27-ce2e-4384-99de-83ba5f65b038\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b72c4a27-ce2e-4384-99de-83ba5f65b038\",\"key\",\"text\",\"value\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"b72c4a27-ce2e-4384-99de-83ba5f65b038\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a29d5c91-2b35-4e8e-b2eb-372a6130f021\",\"key\",\"children\",\"value\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"a29d5c91-2b35-4e8e-b2eb-372a6130f021\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",180,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",181,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",182,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",183,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"h\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",184,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",185,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"r\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",186,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",187,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",188,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",189,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",190,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",191,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"56dc953a-ef3c-4947-b3aa-59d6f6ffb46c\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"224bc6d6-239c-4e2e-855f-8ca7d69a8534\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"56dc953a-ef3c-4947-b3aa-59d6f6ffb46c\",\"key\",\"text\",\"value\",\"224bc6d6-239c-4e2e-855f-8ca7d69a8534\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"56dc953a-ef3c-4947-b3aa-59d6f6ffb46c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",192,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"65ef7dde-d772-494a-83a7-7c3cc909dcba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"93bb26d8-a9c2-493e-981e-25c8aa1a333c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"93bb26d8-a9c2-493e-981e-25c8aa1a333c\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"5e1364bb-68d2-4a3c-b0d2-f1c7e67ba350\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5e1364bb-68d2-4a3c-b0d2-f1c7e67ba350\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"db610333-ecc5-41d8-84a1-887c2d283a78\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"4b287cf1-6b19-4e64-b8aa-d43a915548b9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"db610333-ecc5-41d8-84a1-887c2d283a78\",\"key\",\"text\",\"value\",\"4b287cf1-6b19-4e64-b8aa-d43a915548b9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5e1364bb-68d2-4a3c-b0d2-f1c7e67ba350\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"db610333-ecc5-41d8-84a1-887c2d283a78\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"93bb26d8-a9c2-493e-981e-25c8aa1a333c\",\"key\",\"children\",\"value\",\"5e1364bb-68d2-4a3c-b0d2-f1c7e67ba350\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"93bb26d8-a9c2-493e-981e-25c8aa1a333c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",193,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",194,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ad967e0b-d2a9-4f89-8e57-421b51b462c0\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"ad967e0b-d2a9-4f89-8e57-421b51b462c0\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d2e40572-9f6b-4467-bb42-b339a7aa43ee\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ad967e0b-d2a9-4f89-8e57-421b51b462c0\",\"key\",\"children\",\"value\",\"d2e40572-9f6b-4467-bb42-b339a7aa43ee\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"ad967e0b-d2a9-4f89-8e57-421b51b462c0\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",195,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d2e40572-9f6b-4467-bb42-b339a7aa43ee\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"51437b0b-0b8b-4742-9e5e-73231364df10\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"51437b0b-0b8b-4742-9e5e-73231364df10\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d50797e3-70bb-41bb-9957-a34f4cc10352\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d50797e3-70bb-41bb-9957-a34f4cc10352\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9e2c41b2-8331-4ebf-bf5b-0520dd3696fa\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9e2c41b2-8331-4ebf-bf5b-0520dd3696fa\",\"key\",\"text\",\"value\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d50797e3-70bb-41bb-9957-a34f4cc10352\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"9e2c41b2-8331-4ebf-bf5b-0520dd3696fa\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"51437b0b-0b8b-4742-9e5e-73231364df10\",\"key\",\"children\",\"value\",\"d50797e3-70bb-41bb-9957-a34f4cc10352\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d2e40572-9f6b-4467-bb42-b339a7aa43ee\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"51437b0b-0b8b-4742-9e5e-73231364df10\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",196,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",197,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",198,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",199,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"o\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",200,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",201,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"u\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",202,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",203,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"0cf93107-9c81-4256-bf2b-aa6aa3f9ad5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"r\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",204,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",205,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",2,\"deps\",[\"^1\",[\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",205]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",3,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",4,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",5,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",6,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"aeabeca6-1f41-46d0-a35c-c82567bd48d7\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",7,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"52297cde-ed55-4eb0-9f51-23be21be2ffb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",8,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b74ac427-6bf2-4ced-a8b9-fa7c51f5cff1\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b74ac427-6bf2-4ced-a8b9-fa7c51f5cff1\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"6c1f638b-12b2-4d43-a287-64db5904d6bb\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"6c1f638b-12b2-4d43-a287-64db5904d6bb\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"26b7292f-c173-47a2-a62c-81629f2453f2\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"f4e13d5e-c252-4d30-8a49-faf3f283bb7f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"26b7292f-c173-47a2-a62c-81629f2453f2\",\"key\",\"text\",\"value\",\"f4e13d5e-c252-4d30-8a49-faf3f283bb7f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6c1f638b-12b2-4d43-a287-64db5904d6bb\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:1\",\"value\",\"26b7292f-c173-47a2-a62c-81629f2453f2\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b74ac427-6bf2-4ced-a8b9-fa7c51f5cff1\",\"key\",\"children\",\"value\",\"6c1f638b-12b2-4d43-a287-64db5904d6bb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:4\",\"value\",\"b74ac427-6bf2-4ced-a8b9-fa7c51f5cff1\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",9,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",10,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",11,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",6]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"c78a22dd-c1e6-464c-9aa6-15a5f573dce5\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"c78a22dd-c1e6-464c-9aa6-15a5f573dce5\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"fb90b970-95e8-4954-b5a8-6f47bc1bf980\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"fb90b970-95e8-4954-b5a8-6f47bc1bf980\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f6aaf443-00ba-47f7-8f37-1eb4a7081a15\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"4c99852c-ce63-4243-ab51-86d7d75bc93f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f6aaf443-00ba-47f7-8f37-1eb4a7081a15\",\"key\",\"text\",\"value\",\"4c99852c-ce63-4243-ab51-86d7d75bc93f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fb90b970-95e8-4954-b5a8-6f47bc1bf980\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:1\",\"value\",\"f6aaf443-00ba-47f7-8f37-1eb4a7081a15\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"c78a22dd-c1e6-464c-9aa6-15a5f573dce5\",\"key\",\"children\",\"value\",\"fb90b970-95e8-4954-b5a8-6f47bc1bf980\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:6\",\"value\",\"c78a22dd-c1e6-464c-9aa6-15a5f573dce5\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",12,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e2f73871-3456-4f45-92c8-c1862f9c0221\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"c77a02d0-0ce2-44eb-9608-2ac8e7451163\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e2f73871-3456-4f45-92c8-c1862f9c0221\",\"key\",\"text\",\"value\",\"c77a02d0-0ce2-44eb-9608-2ac8e7451163\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:3\",\"value\",\"e2f73871-3456-4f45-92c8-c1862f9c0221\"]],[\"^1\",[\"action\",\"del\",\"obj\",\"a80f2b38-7482-4e61-9379-f0f06ccdba27\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:6\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",13,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"71d73746-de67-46b6-8073-5a4d07c221f2\",\"key\",\"8128a4fb-7226-43c1-91d5-40effc660552:3\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",14,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"8128a4fb-7226-43c1-91d5-40effc660552\",\"seq\",15,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#lcgx6WHty0RU6un2AAAa\"]]]],\"actor\",\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",\"seq\",5,\"deps\",[\"^1\",[\"8128a4fb-7226-43c1-91d5-40effc660552\",15]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"d2e40572-9f6b-4467-bb42-b339a7aa43ee\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"aa4e02bc-e7c2-4c08-84d4-412884f7d94f\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"aa4e02bc-e7c2-4c08-84d4-412884f7d94f\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"9471a433-1fac-498b-8d3f-fd38e633c7aa\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"9471a433-1fac-498b-8d3f-fd38e633c7aa\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5dbb33da-b5c3-4606-b0b8-90a35f0dd8ba\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:2\",\"value\",\"o\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:3\",\"value\",\"u\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:4\",\"value\",\"r\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5dbb33da-b5c3-4606-b0b8-90a35f0dd8ba\",\"key\",\"text\",\"value\",\"87ebe298-b1a6-4008-92ed-ddbd1d3c9d87\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9471a433-1fac-498b-8d3f-fd38e633c7aa\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"value\",\"5dbb33da-b5c3-4606-b0b8-90a35f0dd8ba\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"aa4e02bc-e7c2-4c08-84d4-412884f7d94f\",\"key\",\"children\",\"value\",\"9471a433-1fac-498b-8d3f-fd38e633c7aa\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:4\",\"value\",\"aa4e02bc-e7c2-4c08-84d4-412884f7d94f\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",1,\"deps\",[\"^1\",[\"31e6cbf9-a531-4760-8cc8-a6ff503fce37\",5]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",2,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"b14afd68-286f-4ee5-9b6c-d88126b44625\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"9f9a4b44-6bf2-480f-bed5-c7ac69889f39\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"9f9a4b44-6bf2-480f-bed5-c7ac69889f39\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"97dd80cd-51e4-48f9-a07c-233240a98354\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"value\",\"f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:2\",\"value\",\"o\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:3\",\"value\",\"u\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:4\",\"value\",\"r\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"97dd80cd-51e4-48f9-a07c-233240a98354\",\"key\",\"text\",\"value\",\"3d6284c9-2666-4b2c-afec-8fecb7c7d2ea\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"value\",\"97dd80cd-51e4-48f9-a07c-233240a98354\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9f9a4b44-6bf2-480f-bed5-c7ac69889f39\",\"key\",\"children\",\"value\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:5\",\"value\",\"9f9a4b44-6bf2-480f-bed5-c7ac69889f39\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",3,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",4,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",5,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",206,\"deps\",[\"^1\",[\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",5]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6cee00e9-e8a0-4463-a880-ff69c07b16d2\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"4e118a0b-7726-4b05-90da-9023191eea10\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6cee00e9-e8a0-4463-a880-ff69c07b16d2\",\"key\",\"text\",\"value\",\"4e118a0b-7726-4b05-90da-9023191eea10\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"6cee00e9-e8a0-4463-a880-ff69c07b16d2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",207,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"e83263e2-76b9-4bcd-bfd4-a454f6cbf7f5\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef:5\",\"elem\",6]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"443eeba2-e90a-40b6-844c-f93a96b83e41\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"443eeba2-e90a-40b6-844c-f93a96b83e41\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"19753a9e-c492-4125-a0d3-62d4facc4371\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"19753a9e-c492-4125-a0d3-62d4facc4371\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ee7257d7-3468-4cf0-b79c-70696d21374e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"eafdc134-39ad-4f8b-b512-ddaf42f75343\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ee7257d7-3468-4cf0-b79c-70696d21374e\",\"key\",\"text\",\"value\",\"eafdc134-39ad-4f8b-b512-ddaf42f75343\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"19753a9e-c492-4125-a0d3-62d4facc4371\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"ee7257d7-3468-4cf0-b79c-70696d21374e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"443eeba2-e90a-40b6-844c-f93a96b83e41\",\"key\",\"children\",\"value\",\"19753a9e-c492-4125-a0d3-62d4facc4371\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"value\",\"443eeba2-e90a-40b6-844c-f93a96b83e41\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",208,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",209,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"elem\",7]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4d400ce2-0fae-4a14-8e3d-3a376f2077ea\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4d400ce2-0fae-4a14-8e3d-3a376f2077ea\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4d400ce2-0fae-4a14-8e3d-3a376f2077ea\",\"key\",\"children\",\"value\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"value\",\"4d400ce2-0fae-4a14-8e3d-3a376f2077ea\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",210,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"0c26567c-e80f-45fa-bccb-8372b38459ca\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"2f92bb79-1c49-4781-8e52-d07abffa0c35\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"2f92bb79-1c49-4781-8e52-d07abffa0c35\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"a9d5fead-8dfd-4a71-8823-4b939b470d3b\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a9d5fead-8dfd-4a71-8823-4b939b470d3b\",\"key\",\"text\",\"value\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"a9d5fead-8dfd-4a71-8823-4b939b470d3b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2f92bb79-1c49-4781-8e52-d07abffa0c35\",\"key\",\"children\",\"value\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"2f92bb79-1c49-4781-8e52-d07abffa0c35\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",211,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",212,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",213,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",214,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"h\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",215,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",216,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"r\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",217,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",218,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",219,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",220,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"772d7e92-6695-4cbb-8d10-212ca8f71026\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",221,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",222,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ad5387dc-ff0a-4f5b-8e35-b8b59e93968e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"80b45ced-9472-471a-a1c0-8d7bef5015e5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ad5387dc-ff0a-4f5b-8e35-b8b59e93968e\",\"key\",\"text\",\"value\",\"80b45ced-9472-471a-a1c0-8d7bef5015e5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"ad5387dc-ff0a-4f5b-8e35-b8b59e93968e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",223,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"fc664ea6-ea1d-41cc-adc8-a5cfd0b11389\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4644414d-03ea-4363-8269-7af160ec128b\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4644414d-03ea-4363-8269-7af160ec128b\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"bf6374e7-b3b8-4f34-9887-ec999712bc86\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"bf6374e7-b3b8-4f34-9887-ec999712bc86\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"cbaa6c73-557c-4e38-b0ff-b45085b85a89\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"96492792-7b38-4bad-a389-9ec768a64219\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"cbaa6c73-557c-4e38-b0ff-b45085b85a89\",\"key\",\"text\",\"value\",\"96492792-7b38-4bad-a389-9ec768a64219\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"bf6374e7-b3b8-4f34-9887-ec999712bc86\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"cbaa6c73-557c-4e38-b0ff-b45085b85a89\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4644414d-03ea-4363-8269-7af160ec128b\",\"key\",\"children\",\"value\",\"bf6374e7-b3b8-4f34-9887-ec999712bc86\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"4644414d-03ea-4363-8269-7af160ec128b\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",224,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",225,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"67bdce53-908d-448c-ae79-a4f0c3fadeb2\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"67bdce53-908d-448c-ae79-a4f0c3fadeb2\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"67bdce53-908d-448c-ae79-a4f0c3fadeb2\",\"key\",\"children\",\"value\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"67bdce53-908d-448c-ae79-a4f0c3fadeb2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",226,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"267c1aab-5def-4d5f-ae49-ae4a416cbd13\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"f4627f31-59da-494e-897f-9075e62e25d7\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"f4627f31-59da-494e-897f-9075e62e25d7\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5917313f-7b73-4293-b45c-5c6350d2b7d5\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5917313f-7b73-4293-b45c-5c6350d2b7d5\",\"key\",\"text\",\"value\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"5917313f-7b73-4293-b45c-5c6350d2b7d5\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"f4627f31-59da-494e-897f-9075e62e25d7\",\"key\",\"children\",\"value\",\"9333ba16-8e34-4972-9948-de748f55ce33\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f4627f31-59da-494e-897f-9075e62e25d7\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",227,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",228,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",229,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",230,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"o\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",231,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",232,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"u\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",233,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",234,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"d3f51c73-b0a6-4025-9d1d-307b04caf4f0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"r\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",235,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",236,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ebbe3170-c405-4c0b-9062-484c8bc168c6\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"821a10d4-2350-42d7-a22a-f2664285947a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ebbe3170-c405-4c0b-9062-484c8bc168c6\",\"key\",\"text\",\"value\",\"821a10d4-2350-42d7-a22a-f2664285947a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"ebbe3170-c405-4c0b-9062-484c8bc168c6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",237,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"9333ba16-8e34-4972-9948-de748f55ce33\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"a2ece7aa-3daa-447a-8778-9deadda8e02c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"a2ece7aa-3daa-447a-8778-9deadda8e02c\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"27427c2b-ccf8-4505-a8f2-6696f6974abe\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"27427c2b-ccf8-4505-a8f2-6696f6974abe\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"2f2011cc-9bff-4110-8f08-379c2b4ff67d\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"baa99edb-9f62-45d9-9244-05802c9a4523\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"2f2011cc-9bff-4110-8f08-379c2b4ff67d\",\"key\",\"text\",\"value\",\"baa99edb-9f62-45d9-9244-05802c9a4523\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"27427c2b-ccf8-4505-a8f2-6696f6974abe\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"2f2011cc-9bff-4110-8f08-379c2b4ff67d\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a2ece7aa-3daa-447a-8778-9deadda8e02c\",\"key\",\"children\",\"value\",\"27427c2b-ccf8-4505-a8f2-6696f6974abe\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"a2ece7aa-3daa-447a-8778-9deadda8e02c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",238,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",239,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"baa99edb-9f62-45d9-9244-05802c9a4523\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"baa99edb-9f62-45d9-9244-05802c9a4523\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",240,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",241,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"baa99edb-9f62-45d9-9244-05802c9a4523\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",242,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",243,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b9ace68b-9767-43d3-b932-a11ad5bfc888\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b9ace68b-9767-43d3-b932-a11ad5bfc888\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b9ace68b-9767-43d3-b932-a11ad5bfc888\",\"key\",\"children\",\"value\",\"55ed6915-932a-42fd-98d9-38c6f045b282\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"b9ace68b-9767-43d3-b932-a11ad5bfc888\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",244,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"9bf08ad0-36d2-4e10-b027-450d9afb0aba\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e5b7fd17-a8de-449c-a50a-4dd61bbf710f\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"e5b7fd17-a8de-449c-a50a-4dd61bbf710f\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ab6fa29c-7822-470e-bf8a-8f6a5c11e9a2\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ab6fa29c-7822-470e-bf8a-8f6a5c11e9a2\",\"key\",\"text\",\"value\",\"e946a881-a873-4e32-99e6-ab524295d14a\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"ab6fa29c-7822-470e-bf8a-8f6a5c11e9a2\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e5b7fd17-a8de-449c-a50a-4dd61bbf710f\",\"key\",\"children\",\"value\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"e5b7fd17-a8de-449c-a50a-4dd61bbf710f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",245,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",246,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"f\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",247,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",248,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",249,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",250,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"v\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",251,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",252,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"e946a881-a873-4e32-99e6-ab524295d14a\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",253,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",254,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e76ee53d-2e0f-4aa6-aa89-9a908ac8727e\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"c90338bb-d10a-4489-978d-db25e442ff38\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e76ee53d-2e0f-4aa6-aa89-9a908ac8727e\",\"key\",\"text\",\"value\",\"c90338bb-d10a-4489-978d-db25e442ff38\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"e76ee53d-2e0f-4aa6-aa89-9a908ac8727e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",255,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"362f6c3d-8e0a-4ad5-8057-f7ac6170c37f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"6043188f-d961-45a8-aa60-fdc7dfef86f0\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"6043188f-d961-45a8-aa60-fdc7dfef86f0\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"4d881785-3ec1-4e7b-9682-921182a62739\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"4d881785-3ec1-4e7b-9682-921182a62739\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8e7f172d-9e35-4b92-b1dd-0b38dba617ca\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"36b0d31c-ab36-4ee1-b271-43c9883945b7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8e7f172d-9e35-4b92-b1dd-0b38dba617ca\",\"key\",\"text\",\"value\",\"36b0d31c-ab36-4ee1-b271-43c9883945b7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4d881785-3ec1-4e7b-9682-921182a62739\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"8e7f172d-9e35-4b92-b1dd-0b38dba617ca\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"6043188f-d961-45a8-aa60-fdc7dfef86f0\",\"key\",\"children\",\"value\",\"4d881785-3ec1-4e7b-9682-921182a62739\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"6043188f-d961-45a8-aa60-fdc7dfef86f0\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",256,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",257,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"e7608500-0eda-40e9-af98-699763d35fbd\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"e7608500-0eda-40e9-af98-699763d35fbd\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"e7608500-0eda-40e9-af98-699763d35fbd\",\"key\",\"children\",\"value\",\"7074e1e3-0842-434f-9731-46dd9d74072f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"e7608500-0eda-40e9-af98-699763d35fbd\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",258,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"55ed6915-932a-42fd-98d9-38c6f045b282\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"358720c4-4523-4f46-a447-206cd1feb2e2\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"358720c4-4523-4f46-a447-206cd1feb2e2\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"d24ad498-cabf-49c8-ae9d-20b06731e93e\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"d24ad498-cabf-49c8-ae9d-20b06731e93e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"efdf5fa1-e364-4f4b-9d41-d72226fea375\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"efdf5fa1-e364-4f4b-9d41-d72226fea375\",\"key\",\"text\",\"value\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"d24ad498-cabf-49c8-ae9d-20b06731e93e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"efdf5fa1-e364-4f4b-9d41-d72226fea375\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"358720c4-4523-4f46-a447-206cd1feb2e2\",\"key\",\"children\",\"value\",\"d24ad498-cabf-49c8-ae9d-20b06731e93e\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"358720c4-4523-4f46-a447-206cd1feb2e2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",259,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",260,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",261,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",262,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",263,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",264,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"ee4f0ebd-7760-4216-baaf-679131134f5e\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"x\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",265,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",266,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b35d7a42-ec65-4dc7-99fa-fdb251166490\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b35d7a42-ec65-4dc7-99fa-fdb251166490\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"a6ac79f0-00d5-4524-bba9-6615093a6e26\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b35d7a42-ec65-4dc7-99fa-fdb251166490\",\"key\",\"children\",\"value\",\"a6ac79f0-00d5-4524-bba9-6615093a6e26\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"b35d7a42-ec65-4dc7-99fa-fdb251166490\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",267,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"a6ac79f0-00d5-4524-bba9-6615093a6e26\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"70541258-5d56-4fcb-aa9b-4a5ce80bc4c4\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"70541258-5d56-4fcb-aa9b-4a5ce80bc4c4\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"0785d7eb-fe9a-46f8-b187-18212278988f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"0785d7eb-fe9a-46f8-b187-18212278988f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"23c62a83-eadd-4e4e-98a2-496197226490\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"x\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"23c62a83-eadd-4e4e-98a2-496197226490\",\"key\",\"text\",\"value\",\"f6ddb449-78e5-4fba-898c-d5b6cc4f3f2b\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"0785d7eb-fe9a-46f8-b187-18212278988f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"23c62a83-eadd-4e4e-98a2-496197226490\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"70541258-5d56-4fcb-aa9b-4a5ce80bc4c4\",\"key\",\"children\",\"value\",\"0785d7eb-fe9a-46f8-b187-18212278988f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"a6ac79f0-00d5-4524-bba9-6615093a6e26\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"70541258-5d56-4fcb-aa9b-4a5ce80bc4c4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",268,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"a6ac79f0-00d5-4524-bba9-6615093a6e26\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"49b5f3bb-33a8-4d8c-ab72-3199bffd8fa7\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"49b5f3bb-33a8-4d8c-ab72-3199bffd8fa7\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5d2bf6c4-ed62-4692-837e-e3601c7bc580\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"x\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5d2bf6c4-ed62-4692-837e-e3601c7bc580\",\"key\",\"text\",\"value\",\"4edbf586-6761-423f-8fa7-3966ffb275eb\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"5d2bf6c4-ed62-4692-837e-e3601c7bc580\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"49b5f3bb-33a8-4d8c-ab72-3199bffd8fa7\",\"key\",\"children\",\"value\",\"30449231-6208-474a-863e-eae1716ad5e0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"49b5f3bb-33a8-4d8c-ab72-3199bffd8fa7\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",269,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",270,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ecaa1a5e-8ef8-4e9f-afb2-4622d7646a7d\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"c9b0832d-fb28-4bac-8103-422a27e6cdb8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ecaa1a5e-8ef8-4e9f-afb2-4622d7646a7d\",\"key\",\"text\",\"value\",\"c9b0832d-fb28-4bac-8103-422a27e6cdb8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"ecaa1a5e-8ef8-4e9f-afb2-4622d7646a7d\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",271,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"30449231-6208-474a-863e-eae1716ad5e0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"4c19e006-32af-41c3-b306-97d634d2e260\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"4c19e006-32af-41c3-b306-97d634d2e260\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"1093ab6b-dc8a-4185-9e11-618afa6af9b4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"1093ab6b-dc8a-4185-9e11-618afa6af9b4\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"16ef9c5a-8c82-49d9-a8f6-6ec166141971\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"0f9bd984-f2ff-498f-a0a1-a1f7145b74de\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"16ef9c5a-8c82-49d9-a8f6-6ec166141971\",\"key\",\"text\",\"value\",\"0f9bd984-f2ff-498f-a0a1-a1f7145b74de\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"1093ab6b-dc8a-4185-9e11-618afa6af9b4\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"16ef9c5a-8c82-49d9-a8f6-6ec166141971\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"4c19e006-32af-41c3-b306-97d634d2e260\",\"key\",\"children\",\"value\",\"1093ab6b-dc8a-4185-9e11-618afa6af9b4\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"4c19e006-32af-41c3-b306-97d634d2e260\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",272,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",273,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"7bdded67-5243-40d3-916a-d87285157dcf\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"7bdded67-5243-40d3-916a-d87285157dcf\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7bdded67-5243-40d3-916a-d87285157dcf\",\"key\",\"children\",\"value\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"7bdded67-5243-40d3-916a-d87285157dcf\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",274,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"7074e1e3-0842-434f-9731-46dd9d74072f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"566c57de-1a0a-47bb-b1e3-619539174f3c\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"566c57de-1a0a-47bb-b1e3-619539174f3c\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"5ede587d-2372-4e6b-83f6-99cc26c9a3ad\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5ede587d-2372-4e6b-83f6-99cc26c9a3ad\",\"key\",\"text\",\"value\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"5ede587d-2372-4e6b-83f6-99cc26c9a3ad\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"566c57de-1a0a-47bb-b1e3-619539174f3c\",\"key\",\"children\",\"value\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"566c57de-1a0a-47bb-b1e3-619539174f3c\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",275,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",276,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"s\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",277,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",278,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",279,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",280,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"v\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",281,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",282,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",283,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",284,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",285,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",286,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",287,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",288,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"v\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",289,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",290,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"elem\",6]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",291,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",292,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"elem\",7]],[\"^1\",[\"action\",\"set\",\"obj\",\"01a42ea2-0eb0-48cc-812e-c23e9ad40add\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"value\",\"n\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",293,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",294,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"161e5e7f-bfd5-4b4f-9852-3af45c71bb93\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"5d710810-93b4-429f-bfd8-2615e68758ff\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"161e5e7f-bfd5-4b4f-9852-3af45c71bb93\",\"key\",\"text\",\"value\",\"5d710810-93b4-429f-bfd8-2615e68758ff\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"161e5e7f-bfd5-4b4f-9852-3af45c71bb93\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",295,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"5bc1ca8e-7825-44a1-b131-26bbd2f0195f\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b1b2aee4-c4b5-48a7-8124-fb7f10038c21\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"b1b2aee4-c4b5-48a7-8124-fb7f10038c21\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"72cc3d74-f37b-422d-b7de-efb5713dbbd8\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"72cc3d74-f37b-422d-b7de-efb5713dbbd8\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"b56329c4-034d-4534-8a37-7fc7c56968fe\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"d993ddd3-d556-4cec-a9e7-69767cf07666\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b56329c4-034d-4534-8a37-7fc7c56968fe\",\"key\",\"text\",\"value\",\"d993ddd3-d556-4cec-a9e7-69767cf07666\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"72cc3d74-f37b-422d-b7de-efb5713dbbd8\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"b56329c4-034d-4534-8a37-7fc7c56968fe\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"b1b2aee4-c4b5-48a7-8124-fb7f10038c21\",\"key\",\"children\",\"value\",\"72cc3d74-f37b-422d-b7de-efb5713dbbd8\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"b1b2aee4-c4b5-48a7-8124-fb7f10038c21\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",296,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",297,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"ed3d6127-f555-4ddf-b86a-5a0721b4957b\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"ed3d6127-f555-4ddf-b86a-5a0721b4957b\",\"key\",\"type\",\"value\",\"bulleted-list\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"8c9712a1-b50d-46a6-9aaf-751fce0f8995\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"ed3d6127-f555-4ddf-b86a-5a0721b4957b\",\"key\",\"children\",\"value\",\"8c9712a1-b50d-46a6-9aaf-751fce0f8995\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"ed3d6127-f555-4ddf-b86a-5a0721b4957b\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",298,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"15a87233-6c30-40e3-a974-34eb5e4bf4b0\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"8c9712a1-b50d-46a6-9aaf-751fce0f8995\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"8fa28659-3cb2-477f-b63c-7b5793ff19b8\"]],[\"^1\",[\"action\",\"set\",\"obj\",\"8fa28659-3cb2-477f-b63c-7b5793ff19b8\",\"key\",\"type\",\"value\",\"list-item\"]],[\"^1\",[\"action\",\"makeList\",\"obj\",\"fb3f6ec9-73e7-4431-b5df-f20dfe22dc73\"]],[\"^1\",[\"action\",\"ins\",\"obj\",\"fb3f6ec9-73e7-4431-b5df-f20dfe22dc73\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"makeMap\",\"obj\",\"870e6aee-7d22-48a6-98f6-aad1ac3613b7\"]],[\"^1\",[\"action\",\"makeText\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"870e6aee-7d22-48a6-98f6-aad1ac3613b7\",\"key\",\"text\",\"value\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"fb3f6ec9-73e7-4431-b5df-f20dfe22dc73\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"870e6aee-7d22-48a6-98f6-aad1ac3613b7\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8fa28659-3cb2-477f-b63c-7b5793ff19b8\",\"key\",\"children\",\"value\",\"fb3f6ec9-73e7-4431-b5df-f20dfe22dc73\"]],[\"^1\",[\"action\",\"link\",\"obj\",\"8c9712a1-b50d-46a6-9aaf-751fce0f8995\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"8fa28659-3cb2-477f-b63c-7b5793ff19b8\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",299,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",300,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"_head\",\"elem\",1]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",301,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",302,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:1\",\"elem\",2]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"value\",\"i\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",303,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",304,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",3]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",305,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",306,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\",\"elem\",4]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"value\",\"h\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",307,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",308,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\",\"elem\",5]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"value\",\"e\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",309,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",310,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\",\"elem\",6]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\",\"value\",\"r\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",311,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":6},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":6},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",312,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:6\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",313,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",314,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:5\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",315,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",316,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:4\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",317,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",318,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"del\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:3\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",319,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",320,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:2\",\"elem\",7]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"value\",\"g\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",321,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":3},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",322,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:7\",\"elem\",8]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:8\",\"value\",\"h\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",323,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",324,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"ins\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:8\",\"elem\",9]],[\"^1\",[\"action\",\"set\",\"obj\",\"f6f4d80b-f319-402d-9fc8-37b12dc5a7d9\",\"key\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4:9\",\"value\",\"t\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",325,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#PaCeUdkrkXeIzdJpAAAW\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(38, 49, 143, 1)\\\",\\\"alphaColor\\\":\\\"rgba(38, 49, 143, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",\"seq\",326,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":true}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",6,\"deps\",[\"^1\",[\"1c01a55b-e5d1-479e-b55f-670f5ed91bc4\",326]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",7,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":2},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",8,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",9,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",10,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",11,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":5},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",12,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,1,0,0],\\\"offset\\\":0},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",13,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":4},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",14,\"deps\",[\"^1\",[]]]],[\"^1\",[\"ops\",[\"^0\",[[\"^1\",[\"action\",\"set\",\"obj\",\"3a24909a-56d6-4be0-be63-14e51b071f88\",\"key\",\"/notes/4KL6gg8KhHhzbyFJB#Tdd5sPa3TyAO43YWAAAb\",\"value\",\"{\\\"anchor\\\":{\\\"path\\\":[3,1,1,1,1,1,1,0,0],\\\"offset\\\":5},\\\"focus\\\":{\\\"path\\\":[3,1,0,0],\\\"offset\\\":1},\\\"name\\\":\\\"Eric Maciel\\\",\\\"color\\\":\\\"rgba(229, 138, 54, 1)\\\",\\\"alphaColor\\\":\\\"rgba(229, 138, 54, 0.2)\\\",\\\"isForward\\\":false}\"]]]],\"actor\",\"f4a3508f-05f7-4156-b2a4-9b02581eb0ef\",\"seq\",15,\"deps\",[\"^1\",[]]]]]]" +} From 77b82ea041d2985330553e3e94550b2b63c03d47 Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Tue, 12 Jan 2021 11:31:47 -0500 Subject: [PATCH 20/21] v0.7.23 --- CHANGELOG.md | 7 +++++++ lerna.json | 2 +- packages/backend/package.json | 4 ++-- packages/bridge/package.json | 2 +- packages/client/package.json | 6 +++--- packages/example/package.json | 6 +++--- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0da4c58..2e45327 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,15 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v0.7.23](https://github.com/hiveteams/slate-collaborative/compare/v0.7.22...v0.7.23) + +- fix: remove node and remove text errors [`eb6f396`](https://github.com/hiveteams/slate-collaborative/commit/eb6f39679b9b4f9dfb652f25ffd0429abcde5b0c) +- fix: slateOps undefined on toSlateOp error [`89dafd7`](https://github.com/hiveteams/slate-collaborative/commit/89dafd78b989227b3f02ab77c2deb73d23e4cd88) + #### [v0.7.22](https://github.com/hiveteams/slate-collaborative/compare/v0.7.21...v0.7.22) +> 12 January 2021 + - feat: better client side error handling [`d4b089a`](https://github.com/hiveteams/slate-collaborative/commit/d4b089a4805fd25347764948b287c9f5802f2ead) - feat: update backend error handling [`c29df0d`](https://github.com/hiveteams/slate-collaborative/commit/c29df0d8e72349edd5893a1ab8640745ac2acc4e) diff --git a/lerna.json b/lerna.json index 074ad42..651c08e 100644 --- a/lerna.json +++ b/lerna.json @@ -1,6 +1,6 @@ { "lerna": "2.7.1", - "version": "0.7.22", + "version": "0.7.23", "npmClient": "yarn", "useWorkspaces": true } diff --git a/packages/backend/package.json b/packages/backend/package.json index e9e1260..96f6cdb 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-backend", - "version": "0.7.22", + "version": "0.7.23", "files": [ "lib" ], @@ -26,7 +26,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/runtime": "^7.6.3", - "@hiveteams/collab-bridge": "^0.7.22", + "@hiveteams/collab-bridge": "^0.7.23", "@types/debug": "^4.1.5", "@types/lodash": "^4.14.150", "@types/socket.io": "^2.1.4", diff --git a/packages/bridge/package.json b/packages/bridge/package.json index fdf8177..9b6e3f9 100644 --- a/packages/bridge/package.json +++ b/packages/bridge/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-bridge", - "version": "0.7.22", + "version": "0.7.23", "files": [ "lib" ], diff --git a/packages/client/package.json b/packages/client/package.json index a9f0600..f362157 100644 --- a/packages/client/package.json +++ b/packages/client/package.json @@ -1,6 +1,6 @@ { "name": "@hiveteams/collab-client", - "version": "0.7.22", + "version": "0.7.23", "files": [ "lib" ], @@ -27,7 +27,7 @@ "dependencies": { "@babel/plugin-proposal-optional-chaining": "^7.9.0", "@babel/preset-react": "^7.0.0", - "@hiveteams/collab-bridge": "^0.7.22", + "@hiveteams/collab-bridge": "^0.7.23", "automerge": "0.14.0", "lodash": "^4.17.20", "slate": "0.58.3", @@ -42,7 +42,7 @@ "@babel/plugin-proposal-object-rest-spread": "^7.5.5", "@babel/preset-env": "^7.6.0", "@babel/preset-typescript": "^7.6.0", - "@hiveteams/collab-backend": "^0.7.22", + "@hiveteams/collab-backend": "^0.7.23", "@types/jest": "^24.9.0", "@types/react": "^16.9.34", "@types/socket.io-client": "^1.4.32", diff --git a/packages/example/package.json b/packages/example/package.json index 07e4cce..23a0242 100644 --- a/packages/example/package.json +++ b/packages/example/package.json @@ -1,12 +1,12 @@ { "name": "@hiveteams/collab-example", - "version": "0.7.22", + "version": "0.7.23", "private": true, "dependencies": { "@emotion/core": "^10.0.17", "@emotion/styled": "^10.0.17", - "@hiveteams/collab-backend": "^0.7.22", - "@hiveteams/collab-client": "^0.7.22", + "@hiveteams/collab-backend": "^0.7.23", + "@hiveteams/collab-client": "^0.7.23", "@types/faker": "^4.1.5", "@types/is-url": "^1.2.28", "@types/jest": "24.0.18", From 2e0e8f03526e2565d2ba683b20ca83d9b093bb6f Mon Sep 17 00:00:00 2001 From: Eric Maciel Date: Fri, 15 Jan 2021 17:15:50 -0500 Subject: [PATCH 21/21] fix: cleanup logic to avoid race conditions --- .../backend/src/AutomergeCollaboration.ts | 71 ++++++++++--------- packages/client/src/automerge-connector.ts | 4 +- 2 files changed, 40 insertions(+), 35 deletions(-) diff --git a/packages/backend/src/AutomergeCollaboration.ts b/packages/backend/src/AutomergeCollaboration.ts index c7f2f5e..3d149a4 100644 --- a/packages/backend/src/AutomergeCollaboration.ts +++ b/packages/backend/src/AutomergeCollaboration.ts @@ -4,7 +4,6 @@ import { Node } from 'slate' import { Server } from 'http' import throttle from 'lodash/throttle' import { SyncDoc, CollabAction, toJS } from '@hiveteams/collab-bridge' -import { getClients } from './utils/index' import { debugCollabBackend } from './utils/debug' import AutomergeBackend from './AutomergeBackend' @@ -153,13 +152,13 @@ export default class AutomergeCollaboration { // recheck backend getDocument after async operation // to avoid duplicatively loading a document if (!this.backend.getDocument(docId)) { - debugCollabBackend('Append document\t\t%s', id) + debugCollabBackend('Append document %s', id) this.backend.appendDocument(docId, doc) } } // Create a new backend connection for this socketId and docId - debugCollabBackend('Create connection\t%s', id) + debugCollabBackend('Create connection %s', id) this.backend.createConnection( id, docId, @@ -190,7 +189,7 @@ export default class AutomergeCollaboration { payload: Automerge.save(doc) }) - debugCollabBackend('Open connection\t\t%s', id) + debugCollabBackend('Open connection %s', id) this.backend.openConnection(id) this.garbageCursors(socket) } catch (err) { @@ -256,27 +255,33 @@ export default class AutomergeCollaboration { try { const { id } = socket const { name: docId } = socket.nsp - socket.leave(docId) - debugCollabBackend('Connection closed\t%s', id) + // promises for the cleanup operations so that we + // perform all the necessary cleanup here synchronously + const cleanupPromises: (Promise | void)[] = [] + cleanupPromises.push(this.saveDocument(socket, docId)) + + // Note not sure if both of these are necessary + socket.leave(id) + + // close automerge connection + debugCollabBackend('Connection closed %s', id) this.backend.closeConnection(id) - await this.saveDocument(socket, docId) + // cleanup cursors and namespace for socket + this.garbageCursors(socket) + this.garbageNsp(socket) + + // grab current user and cleanup the user map + const user = this.userMap[id] + delete this.userMap[id] // trigger onDisconnect callback if one was provided // and if a user has been loaded for this socket connection - const user = this.userMap[id] if (this.options.onDisconnect && user) { - await this.options.onDisconnect(docId, user) + cleanupPromises.push(this.options.onDisconnect(docId, user)) } - - // cleanup automerge cursor and socket connection - this.garbageCursors(socket) - socket.leave(id) - this.garbageNsp(socket) - - // cleanup usermap - delete this.userMap[id] + await Promise.all(cleanupPromises) } catch (err) { this.handleError(socket, err) } @@ -288,21 +293,21 @@ export default class AutomergeCollaboration { garbageNsp = (socket: SocketIO.Socket) => { const { name: docId } = socket.nsp - Object.keys(this.io.nsps) - .filter(n => n !== '/') - .forEach(nsp => { - getClients(this.io, nsp) - .then((clientsList: any) => { - if (!clientsList.length) { - debugCollabBackend('Removing document\t%s', docId) - this.backend.removeDocument(nsp) - delete this.io.nsps[nsp] - } - }) - .catch(err => { - this.handleError(socket, err) - }) - }) + + // This is the only way to synchronously check the number of active Automerge.Connections + // for this docId. + // @ts-ignore + const activeConnectionsCount = this.backend.documentSetMap[docId]?.handlers + .size + + debugCollabBackend( + 'Garbage namespace activeConnections=%s', + activeConnectionsCount + ) + // If we have no more active connections for this docId, removeDocument from our backend + if (activeConnectionsCount === 0) { + this.backend.removeDocument(docId) + } } /** @@ -320,7 +325,7 @@ export default class AutomergeCollaboration { Object.keys(doc?.cursors)?.forEach(key => { if (!namespace.sockets[key]) { - debugCollabBackend('Garbage cursor\t\t%s', key) + debugCollabBackend('Garbage cursor %s', key) this.backend.garbageCursor(docId, key) } }) diff --git a/packages/client/src/automerge-connector.ts b/packages/client/src/automerge-connector.ts index 9db0207..ad47def 100644 --- a/packages/client/src/automerge-connector.ts +++ b/packages/client/src/automerge-connector.ts @@ -130,9 +130,9 @@ export const AutomergeConnector = { const operations = Automerge.diff(current, updated) if (operations.length) { - let slateOps: any[] + let slateOps: any[] = [] try { - slateOps = toSlateOp(operations, current) || [] + slateOps = toSlateOp(operations, current) } catch (err) { e.handleError(err, { type: 'applyOperation - toSlateOp',