{
  "type": "excalidraw",
  "version": 2,
  "source": "https://excalidraw.com",
  "elements": [
    {
      "type": "rectangle",
      "version": 200,
      "versionNonce": 1478144314,
      "isDeleted": false,
      "id": "xzSfOhwq9GQ1SzuXs70RJ",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 442.3333333333335,
      "y": 419.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 215,
      "height": 400,
      "seed": 1164051706,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "B--BjFzQMQc47qGbEDuXD"
      ]
    },
    {
      "type": "rectangle",
      "version": 422,
      "versionNonce": 1716633318,
      "isDeleted": false,
      "id": "HUJlI3uD7iLyfRrPhz9aD",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1677.3333333333335,
      "y": 379.7777777777779,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 215,
      "height": 400,
      "seed": 1669821414,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "B--BjFzQMQc47qGbEDuXD",
        "Aoq2DigvuDq2EtHki8dt-"
      ]
    },
    {
      "type": "text",
      "version": 27,
      "versionNonce": 988051962,
      "isDeleted": false,
      "id": "B_urPQ4MYsggER-liphmf",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 490.3333333333335,
      "y": 422.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 130,
      "height": 25,
      "seed": 1719018618,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "Feature form",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 247,
      "versionNonce": 1473719098,
      "isDeleted": false,
      "id": "OZAthh0ADjuqWEzXwbo52",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1725.3333333333335,
      "y": 382.7777777777779,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 130,
      "height": 25,
      "seed": 298231162,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "Feature form",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "rectangle",
      "version": 109,
      "versionNonce": 1526147770,
      "isDeleted": false,
      "id": "7kti4dT1dRmXtB9kTtF07",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 455.3333333333335,
      "y": 471.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 1626790502,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 329,
      "versionNonce": 351255910,
      "isDeleted": false,
      "id": "0zq9JuecRYzGO9KLnq50W",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1690.3333333333335,
      "y": 431.7777777777779,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 1333528358,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 140,
      "versionNonce": 1861600122,
      "isDeleted": false,
      "id": "o5OrCwFpmksJTtLQuCm1d",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 455.3333333333335,
      "y": 528.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 2005813114,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 377,
      "versionNonce": 1090630650,
      "isDeleted": false,
      "id": "TXIGV4dEJCKpUYCMtz7oG",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1689.6190476190477,
      "y": 501.6349206349208,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 2072503866,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 179,
      "versionNonce": 1629701178,
      "isDeleted": false,
      "id": "14Eh2r-ksFn9VA1KlvImV",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 454.3333333333335,
      "y": 587.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 1035303206,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 416,
      "versionNonce": 270475430,
      "isDeleted": false,
      "id": "QqCRmrWlsUDuaBpQ9UKOC",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1688.6190476190477,
      "y": 560.6349206349207,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 35,
      "seed": 1308373606,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 265,
      "versionNonce": 1533193466,
      "isDeleted": false,
      "id": "znMS94F9_J9F4AdZ0TDhp",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 455.3333333333335,
      "y": 641.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 110,
      "seed": 1963127610,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 502,
      "versionNonce": 1566385338,
      "isDeleted": false,
      "id": "bGHR8cgZKyG2dTcsjfzUN",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1689.6190476190477,
      "y": 614.6349206349207,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 191,
      "height": 110,
      "seed": 1155731194,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 70,
      "versionNonce": 1396112826,
      "isDeleted": false,
      "id": "-VDdh7MQW8h967t3q4YLG",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 441.3333333333335,
      "y": 785.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 217,
      "height": 34,
      "seed": 842605222,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 290,
      "versionNonce": 234888166,
      "isDeleted": false,
      "id": "QqKi30OzfH1py4NC9nqJ1",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1676.3333333333335,
      "y": 745.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 217,
      "height": 34,
      "seed": 970257830,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": []
    },
    {
      "type": "text",
      "version": 39,
      "versionNonce": 365115002,
      "isDeleted": false,
      "id": "vmWo4NFz_Zl9mGURLmrxA",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 527.3333333333335,
      "y": 475.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 34,
      "height": 25,
      "seed": 1502537338,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "abc",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 259,
      "versionNonce": 1720483194,
      "isDeleted": false,
      "id": "u17q3QzZkSEg9PpaLfE7m",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1762.3333333333335,
      "y": 435.7777777777779,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 34,
      "height": 25,
      "seed": 844832698,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "abc",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 71,
      "versionNonce": 1778699386,
      "isDeleted": false,
      "id": "Z7LRyMXJcGQAk_4_441rI",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 522.4583333333335,
      "y": 536.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 45,
      "height": 25,
      "seed": 89784294,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "3POPI3FiSVcZlBFub7V16"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "1500",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 285,
      "versionNonce": 1956622118,
      "isDeleted": false,
      "id": "NEQEzNboCkcM2gQxcMlyd",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1757.904761904762,
      "y": 509.63492063492066,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 51,
      "height": 25,
      "seed": 204689638,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "1500.",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 40,
      "versionNonce": 1085314790,
      "isDeleted": false,
      "id": "drj7hujYfLIS3vetAYGtC",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 517.3333333333335,
      "y": 594.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 69,
      "height": 25,
      "seed": 335953786,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "3POPI3FiSVcZlBFub7V16"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "<date>",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 276,
      "versionNonce": 1775418938,
      "isDeleted": false,
      "id": "YKrWVUVPTbuTZR7UGXSoD",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1751.6190476190477,
      "y": 567.6349206349207,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 69,
      "height": 25,
      "seed": 1251450,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "<date>",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 41,
      "versionNonce": 1064652986,
      "isDeleted": false,
      "id": "0On0B9CMPjD4IOxQkP_Tx",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 495.3333333333335,
      "y": 688.7777777777778,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 107,
      "height": 25,
      "seed": 208303078,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "<relations>",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 278,
      "versionNonce": 1617615462,
      "isDeleted": false,
      "id": "8PDZAu4s4WZYqb_N9SkJN",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1729.6190476190477,
      "y": 661.6349206349207,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 107,
      "height": 25,
      "seed": 279200806,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "<relations>",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "arrow",
      "version": 356,
      "versionNonce": 750725498,
      "isDeleted": false,
      "id": "B--BjFzQMQc47qGbEDuXD",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 674.8611846393682,
      "y": 546.8407503576386,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 239.81177340360125,
      "height": 31.438613741809263,
      "seed": 1617067194,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "xzSfOhwq9GQ1SzuXs70RJ",
        "focus": -0.2641200980454536,
        "gap": 17.527851306034677
      },
      "endBinding": {
        "elementId": "mR2h3UDCTnKp1ys9GrQzw",
        "focus": 0.08387418231356618,
        "gap": 19.04926417925276
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          239.81177340360125,
          -31.438613741809263
        ]
      ]
    },
    {
      "type": "text",
      "version": 264,
      "versionNonce": 65466790,
      "isDeleted": false,
      "id": "F3zVC_E9Qe_O-wcV-ZuXb",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 684.7619047619048,
      "y": 563.2063492063493,
      "strokeColor": "#000000",
      "backgroundColor": "#40c057",
      "width": 302,
      "height": 125,
      "seed": 1079075386,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "B--BjFzQMQc47qGbEDuXD"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "Each change is\npropagated to \nAttributeController\nvia editorValueChanged\nsignal and set in setFormValue",
      "baseline": 118,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "rectangle",
      "version": 183,
      "versionNonce": 751823418,
      "isDeleted": false,
      "id": "mR2h3UDCTnKp1ys9GrQzw",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 933.7222222222222,
      "y": 370.55555555555554,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 257.7777777777778,
      "height": 276.96969696969705,
      "seed": 1716464166,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "B--BjFzQMQc47qGbEDuXD"
      ]
    },
    {
      "type": "rectangle",
      "version": 270,
      "versionNonce": 942042726,
      "isDeleted": false,
      "id": "23q8nZyTchm_8aITmucGy",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1215.7857142857144,
      "y": 734.8412698412699,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 257.7777777777778,
      "height": 233.33333333333337,
      "seed": 29708346,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "VA-MY9HtJuAR5Nkia64cv",
        "jfi7DjgUi-jNb5iwvJGFX"
      ]
    },
    {
      "type": "text",
      "version": 38,
      "versionNonce": 378180346,
      "isDeleted": false,
      "id": "AgzE5U0RW4mDysF8kClmr",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 972.6111111111111,
      "y": 383.7777777777777,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 187,
      "height": 25,
      "seed": 289302650,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "AttributeController",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 191,
      "versionNonce": 1424844666,
      "isDeleted": false,
      "id": "BRflEcTz-Lxk_cJM8muPt",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1281.8174603174602,
      "y": 749.4920634920636,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 132,
      "height": 25,
      "seed": 1679976550,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "DJVdeojUnfHhmdrqmhzmw"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "FieldValidator",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 18,
      "versionNonce": 1819419578,
      "isDeleted": false,
      "id": "5vsPldUL4mrD6TRvKt7Pu",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 948.1666666666672,
      "y": 431.55555555555577,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 151,
      "height": 25,
      "seed": 366088442,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "TMNYWUKuqfwlo_1B_4YOR"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "+ setFormValue",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 154,
      "versionNonce": 1711181030,
      "isDeleted": false,
      "id": "7gJdSdg3OCri3pG8PDS38",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1230.2301587301595,
      "y": 795.8412698412701,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 103,
      "height": 25,
      "seed": 870529274,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "cXJd9FuqaBz-kC9Oo05ww"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "+ validate",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "rectangle",
      "version": 149,
      "versionNonce": 1755946106,
      "isDeleted": false,
      "id": "YlYXR057IkGYmRN-3RQYH",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1141.4999999999995,
      "y": 435.0000000000001,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 311.1111111111113,
      "height": 200.60606060606057,
      "seed": 828673446,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "TMNYWUKuqfwlo_1B_4YOR",
        "VA-MY9HtJuAR5Nkia64cv",
        "jfi7DjgUi-jNb5iwvJGFX"
      ]
    },
    {
      "type": "text",
      "version": 53,
      "versionNonce": 94896166,
      "isDeleted": false,
      "id": "shYVVvGTplH-7BqZkKjDW",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1212.6111111111109,
      "y": 404.888888888889,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 205,
      "height": 25,
      "seed": 1363012538,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "setFormValue method",
      "baseline": 18,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "arrow",
      "version": 282,
      "versionNonce": 150207802,
      "isDeleted": false,
      "id": "TMNYWUKuqfwlo_1B_4YOR",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1034.633117015979,
      "y": 467.8489337822673,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 78.6334374172418,
      "height": 34.17305051122031,
      "seed": 1858357818,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "5vsPldUL4mrD6TRvKt7Pu",
        "gap": 11.293378226711498,
        "focus": 0.41996381313627296
      },
      "endBinding": {
        "elementId": "YlYXR057IkGYmRN-3RQYH",
        "gap": 28.233445566778848,
        "focus": -0.27748491584630114
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          78.6334374172418,
          34.17305051122031
        ]
      ]
    },
    {
      "type": "text",
      "version": 205,
      "versionNonce": 448022010,
      "isDeleted": false,
      "id": "IDmC1UdiVi4AB8qIO_Y7M",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1203.1085858585852,
      "y": 452.115800865801,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 243,
      "height": 175,
      "seed": 1412461030,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [
        "VA-MY9HtJuAR5Nkia64cv",
        "Aoq2DigvuDq2EtHki8dt-"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "- Saves whatever value\n  it receives\n- Runs validation of the\n  entire form via \n  FieldValidator::validate\n- Propagates validation\n  result to form model",
      "baseline": 168,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 168,
      "versionNonce": 1310109350,
      "isDeleted": false,
      "id": "ssZIgc_9sXAQH9BwHdGD-",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1234.8708513708514,
      "y": 851.0833333333335,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 174,
      "height": 75,
      "seed": 2039505402,
      "groupIds": [],
      "strokeSharpness": "sharp",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "+ validateNumeric\n+ validateText\n+ validateGeneric",
      "baseline": 68,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "arrow",
      "version": 341,
      "versionNonce": 1189967546,
      "isDeleted": false,
      "id": "VA-MY9HtJuAR5Nkia64cv",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1322.1694870921037,
      "y": 652.2710636181511,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 1.1240922637177846,
      "height": 68.81119330148454,
      "seed": 976058918,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "YlYXR057IkGYmRN-3RQYH",
        "gap": 16.665003012090335,
        "focus": -0.17192051249004453
      },
      "endBinding": {
        "elementId": "23q8nZyTchm_8aITmucGy",
        "gap": 13.759012921634302,
        "focus": -0.19694849842426293
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          -1.1240922637177846,
          68.81119330148454
        ]
      ]
    },
    {
      "type": "arrow",
      "version": 489,
      "versionNonce": 30796262,
      "isDeleted": false,
      "id": "jfi7DjgUi-jNb5iwvJGFX",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "dashed",
      "roughness": 1,
      "opacity": 100,
      "angle": 3.1238672600785993,
      "x": 1358.714901948383,
      "y": 649.9274982084027,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 1.2783962970229368,
      "height": 69.10767969956112,
      "seed": 1331303418,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "23q8nZyTchm_8aITmucGy",
        "gap": 16.090998844753955,
        "focus": 0.10844435171013694
      },
      "endBinding": {
        "elementId": "YlYXR057IkGYmRN-3RQYH",
        "gap": 14.315536242923047,
        "focus": -0.3928165648816558
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          -1.2783962970229368,
          69.10767969956112
        ]
      ]
    },
    {
      "type": "arrow",
      "version": 503,
      "versionNonce": 930257402,
      "isDeleted": false,
      "id": "Aoq2DigvuDq2EtHki8dt-",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1470.3841991341997,
      "y": 536.5953159757598,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 192.22222222222217,
      "height": 7.516099283866197,
      "seed": 1688838694,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "IDmC1UdiVi4AB8qIO_Y7M",
        "focus": 0.029045643696903132,
        "gap": 24.275613275614432
      },
      "endBinding": {
        "elementId": "HUJlI3uD7iLyfRrPhz9aD",
        "focus": 0.2716790019741495,
        "gap": 14.726911976911651
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          192.22222222222217,
          -7.516099283866197
        ]
      ]
    },
    {
      "type": "rectangle",
      "version": 174,
      "versionNonce": 2132923898,
      "isDeleted": false,
      "id": "53n9LMs-AKpOrjLjIUg9t",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 691.5012626262643,
      "y": 380.5496870208796,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 121.90217391304351,
      "height": 90.84239130434788,
      "seed": 734556794,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": []
    },
    {
      "type": "rectangle",
      "version": 430,
      "versionNonce": 1309450854,
      "isDeleted": false,
      "id": "FXatfjGIGUoK7Bkhmwaie",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 966.5012626262643,
      "y": 741.9385759097685,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 194.4021739130436,
      "height": 204.59239130434787,
      "seed": 1985387770,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": []
    },
    {
      "type": "text",
      "version": 46,
      "versionNonce": 293834874,
      "isDeleted": false,
      "id": "2wLiWNak7L9H8zDSPRdmj",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 570.8333333333335,
      "y": 534.4027777777778,
      "strokeColor": "#a61e4d",
      "backgroundColor": "transparent",
      "width": 5,
      "height": 25,
      "seed": 1824714938,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [
        "3POPI3FiSVcZlBFub7V16",
        "SOhYl6jaPeeInx_JuLcOK"
      ],
      "fontSize": 20,
      "fontFamily": 1,
      "text": ".",
      "baseline": 18,
      "textAlign": "center",
      "verticalAlign": "middle"
    },
    {
      "type": "text",
      "version": 178,
      "versionNonce": 108697530,
      "isDeleted": false,
      "id": "Sn2xPIMc8U0s2C_3t1J5I",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 701.5945009097204,
      "y": 386.7646785510888,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 104,
      "height": 80,
      "seed": 32014246,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [
        "SOhYl6jaPeeInx_JuLcOK"
      ],
      "fontSize": 16,
      "fontFamily": 1,
      "text": "\"User types\nin decimal\nseparator\ninto int field\"",
      "baseline": 74,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "text",
      "version": 753,
      "versionNonce": 1880313530,
      "isDeleted": false,
      "id": "uNsSgTOwROQlF69w3TfC6",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 979.9278342430537,
      "y": 757.3202341066444,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 176,
      "height": 180,
      "seed": 900286374,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [
        "SOhYl6jaPeeInx_JuLcOK",
        "DJVdeojUnfHhmdrqmhzmw"
      ],
      "fontSize": 16,
      "fontFamily": 1,
      "text": "\"Validates current\nfield value with (1)\nQGIS validation rules,\n(2) custom validation\nrules and (3) QGIS\nconstraints (not null/\nunique/expression).\nReturns validation\nmessage and state.\"",
      "baseline": 174,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "arrow",
      "version": 45,
      "versionNonce": 635918566,
      "isDeleted": false,
      "id": "SOhYl6jaPeeInx_JuLcOK",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 709.1554363510905,
      "y": 478.9380426266267,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 125.4545454545455,
      "height": 66.36363636363637,
      "seed": 1719435066,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "Sn2xPIMc8U0s2C_3t1J5I",
        "focus": -0.42463208776773875,
        "gap": 12.173364075537904
      },
      "endBinding": {
        "elementId": "2wLiWNak7L9H8zDSPRdmj",
        "focus": 0.2809331949868473,
        "gap": 7.867557563211562
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          -125.4545454545455,
          66.36363636363637
        ]
      ]
    },
    {
      "type": "text",
      "version": 189,
      "versionNonce": 1410524922,
      "isDeleted": false,
      "id": "P8ZB1KMxhq78nOJ2cuuRO",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1688.6767206223753,
      "y": 479.12635431493806,
      "strokeColor": "#c92a2a",
      "backgroundColor": "transparent",
      "width": 194,
      "height": 20,
      "seed": 872593530,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "fontSize": 16,
      "fontFamily": 1,
      "text": "Validation message - int!",
      "baseline": 14,
      "textAlign": "left",
      "verticalAlign": "top"
    },
    {
      "type": "arrow",
      "version": 42,
      "versionNonce": 1218077990,
      "isDeleted": false,
      "id": "DJVdeojUnfHhmdrqmhzmw",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 0,
      "x": 1172.3076730033285,
      "y": 802.7454019339856,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 103.33333333333326,
      "height": 45,
      "seed": 24620986,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "startBinding": {
        "elementId": "uNsSgTOwROQlF69w3TfC6",
        "focus": 0.006864762672520811,
        "gap": 16.37983876027488
      },
      "endBinding": {
        "elementId": "BRflEcTz-Lxk_cJM8muPt",
        "focus": 0.865098660180835,
        "gap": 6.176453980798442
      },
      "lastCommittedPoint": null,
      "startArrowhead": null,
      "endArrowhead": "arrow",
      "points": [
        [
          0,
          0
        ],
        [
          103.33333333333326,
          -45
        ]
      ]
    },
    {
      "type": "text",
      "version": 364,
      "versionNonce": 25848442,
      "isDeleted": false,
      "id": "yWjY91TWmopsdM_gh6tbH",
      "fillStyle": "hachure",
      "strokeWidth": 1,
      "strokeStyle": "solid",
      "roughness": 1,
      "opacity": 100,
      "angle": 5.277149696513838,
      "x": 1494.7560857017418,
      "y": 387.33667177525433,
      "strokeColor": "#000000",
      "backgroundColor": "transparent",
      "width": 187,
      "height": 75,
      "seed": 541486822,
      "groupIds": [],
      "strokeSharpness": "round",
      "boundElementIds": [],
      "fontSize": 20,
      "fontFamily": 1,
      "text": "Validation message\nis shown in the top\nof the edited field",
      "baseline": 68,
      "textAlign": "left",
      "verticalAlign": "top"
    }
  ],
  "appState": {
    "gridSize": null,
    "viewBackgroundColor": "#ffffff"
  }
}