@fluid-experimental/property-properties 2.100.0 → 2.101.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/dist/test/properties/arrayProperty.spec.js +11 -12
  2. package/dist/test/properties/arrayProperty.spec.js.map +1 -1
  3. package/dist/test/properties/baseProperty.spec.js +4 -1
  4. package/dist/test/properties/baseProperty.spec.js.map +1 -1
  5. package/dist/test/properties/containerProperty.spec.js +1 -1
  6. package/dist/test/properties/containerProperty.spec.js.map +1 -1
  7. package/dist/test/properties/customArrayProperty.spec.js +2 -2
  8. package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
  9. package/dist/test/properties/int64ArrayProperty.spec.js +4 -4
  10. package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
  11. package/dist/test/properties/int64Property.spec.js +2 -2
  12. package/dist/test/properties/int64Property.spec.js.map +1 -1
  13. package/dist/test/properties/isLeafNode.spec.js +1 -7
  14. package/dist/test/properties/isLeafNode.spec.js.map +1 -1
  15. package/dist/test/properties/namedNodeProperty.spec.js +1 -2
  16. package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
  17. package/dist/test/properties/nodeProperty.spec.js +1 -1
  18. package/dist/test/properties/nodeProperty.spec.js.map +1 -1
  19. package/dist/test/properties/stringProperty.spec.js +6 -5
  20. package/dist/test/properties/stringProperty.spec.js.map +1 -1
  21. package/dist/test/properties/valueMapProperty.spec.js +8 -3
  22. package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
  23. package/dist/test/properties/valueProperty.spec.js +5 -1
  24. package/dist/test/properties/valueProperty.spec.js.map +1 -1
  25. package/dist/test/propertyFactory.spec.js +15 -10
  26. package/dist/test/propertyFactory.spec.js.map +1 -1
  27. package/dist/test/tsconfig.tsbuildinfo +1 -1
  28. package/dist/test/utils.spec.js +13 -7
  29. package/dist/test/utils.spec.js.map +1 -1
  30. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"nodeProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/nodeProperty.spec.js"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* globals assert, sinon */\n\n/**\n * @fileoverview In this file, we will test the NodeProperty object described in properties/nodeProperty.js\n */\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { generateGUID } = require(\"@fluid-experimental/property-common\").GuidUtils;\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\n\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst { MapProperty } = require(\"../../properties/mapProperty\");\nconst { NodeProperty } = require(\"../../properties/nodeProperty\");\n\ndescribe(\"NodeProperty\", function () {\n\tvar changeSetWithTwoMapEntries, changeSetWithTwoMapEntries_full, removalChangeSet;\n\tvar myNode, mapNode1, mapNode2;\n\n\tbefore(function () {\n\t\t// Register a template with a set property for the tests\n\t\tvar MixedNodePropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:MixedNodeTestProperty-1.0.0\",\n\t\t\tinherits: [\"NodeProperty\"],\n\t\t\tproperties: [\n\t\t\t\t{ id: \"stringProperty\", typeid: \"String\" },\n\t\t\t\t{ id: \"stringProperty2\", typeid: \"String\" },\n\t\t\t],\n\t\t};\n\t\tvar AnonymousTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:AnonymousProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tvar MixedNamedNodePropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:MixedNamedNodeProperty-1.0.0\",\n\t\t\tinherits: [\"NodeProperty\", \"NamedProperty\"],\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tvar TestEnumTemplate = {\n\t\t\ttypeid: \"autodesk.core:UnitsEnum-1.0.0\",\n\t\t\tinherits: \"Enum\",\n\t\t\tannotation: { description: \"The metric units\" },\n\t\t\tproperties: [\n\t\t\t\t{ id: \"m\", value: 1, annotation: { description: \"meter\" } },\n\t\t\t\t{ id: \"cm\", value: 2, annotation: { description: \"centimeter\" } },\n\t\t\t\t{ id: \"mm\", value: 3, annotation: { description: \"millimeter\" } },\n\t\t\t],\n\t\t};\n\t\tPropertyFactory._reregister(TestEnumTemplate);\n\n\t\tPropertyFactory._reregister(MixedNodePropertyTemplate);\n\t\tPropertyFactory._reregister(MixedNamedNodePropertyTemplate);\n\t\tPropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n\t\tmyNode = PropertyFactory.create(\"NodeProperty\");\n\t\tmapNode1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tmapNode2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t// Register the templates from the discussion document\n\t\tvar Vec3Template = {\n\t\t\ttypeid: \"autodesk.test:vector3-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"x\", typeid: \"Float32\" },\n\t\t\t\t{ id: \"y\", typeid: \"Float32\" },\n\t\t\t\t{ id: \"z\", typeid: \"Float32\" },\n\t\t\t],\n\t\t};\n\n\t\tvar Point2DTemplate = {\n\t\t\ttypeid: \"autodesk.test:point2d-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"position\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{ id: \"x\", typeid: \"Float32\" },\n\t\t\t\t\t\t{ id: \"y\", typeid: \"Float32\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{ id: \"normal\", typeid: \"autodesk.test:vector3-1.0.0\" },\n\t\t\t\t{ id: \"neighbours\", typeid: \"autodesk.test:vector3-1.0.0\", context: \"map\" },\n\t\t\t\t{ id: \"temperature\", typeid: \"Float32\" },\n\t\t\t],\n\t\t};\n\n\t\tvar SceneObjectTemplate = {\n\t\t\tinherits: \"NodeProperty\",\n\t\t\ttypeid: \"autodesk.test:SceneObject-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"name\", typeid: \"String\" },\n\t\t\t\t{ id: \"revitId\", typeid: \"String\" },\n\t\t\t],\n\t\t};\n\n\t\tvar nestedNodeProperty = {\n\t\t\ttypeid: \"autodesk.tests:nested.node.property-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nested\",\n\t\t\t\t\tproperties: [{ id: \"property\", typeid: \"NodeProperty\" }],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tvar testArrayProperty = {\n\t\t\ttypeid: \"autodesk.tests:test.array.property-1.0.0\",\n\t\t\tproperties: [{ id: \"array\", typeid: \"Float32\", context: \"array\" }],\n\t\t};\n\n\t\tPropertyFactory._reregister(Vec3Template);\n\t\tPropertyFactory._reregister(Point2DTemplate);\n\t\tPropertyFactory._reregister(SceneObjectTemplate);\n\t\tPropertyFactory._reregister(nestedNodeProperty);\n\t\tPropertyFactory._reregister(testArrayProperty);\n\t});\n\n\t// Helper functions for the test cases\n\tvar keyCounter = 0;\n\tvar resetKeyCounter = function () {\n\t\tkeyCounter = 0;\n\t};\n\n\t// Inserts a node with the given guid (a new one is generated when undefined)\n\tvar insertNodeInRootWithKeyAndGuid = function (key, guid, root) {\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tif (key === undefined) {\n\t\t\tkey = \"node\" + keyCounter++;\n\t\t}\n\n\t\troot.insert(key, node);\n\t};\n\n\t// Inserts a new node in the root\n\tvar insertNodeInRoot = function (root) {\n\t\tinsertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n\t};\n\n\t// Returns a functor that will insert a node with a constant GUID\n\tvar insertUniqueNodeInRoot = function () {\n\t\tvar key = \"node\" + keyCounter++;\n\t\treturn insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGUID());\n\t};\n\n\t// Inserts a new node as leaf\n\tvar insertNodeAsLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf.getDynamicIds().length > 0) {\n\t\t\tleaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n\t\t}\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tvar key = \"node\" + keyCounter++;\n\t\tleaf.insert(key, node);\n\t};\n\n\t// Removes the first node from the root\n\tvar removeFirstNodeInRoot = function (root) {\n\t\tvar firstKey = root.getDynamicIds()[0];\n\t\troot.remove(firstKey);\n\t};\n\n\t// Modifies the leaf node\n\tvar modifyLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf.getDynamicIds().length > 0) {\n\t\t\tleaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n\t\t}\n\t\tleaf._properties.stringProperty.value = leaf._properties.stringProperty.value + \"+\";\n\t};\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(myNode.getIds()).to.be.empty;\n\t\t\texpect(myNode.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t});\n\n\t\tit(\"should be possible to insert into the map\", function () {\n\t\t\t// Test insertion of the first node\n\t\t\tmyNode.insert(\"node1\", mapNode1);\n\t\t\texpect(myNode.has(\"node1\")).to.be.ok;\n\t\t\texpect(myNode.has(\"node2\")).to.be.not.ok;\n\t\t\texpect(myNode.get(\"node2\")).to.equal(undefined);\n\t\t\texpect(mapNode1.getParent()).to.equal(myNode);\n\n\t\t\tvar CS = myNode.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tCS.insert &&\n\t\t\t\t\tCS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"] &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"]).length === 1 &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"])[0] === \"node1\",\n\t\t\t).to.be.ok;\n\n\t\t\t// Test insertion of the second node\n\t\t\tmyNode.insert(\"node2\", mapNode2);\n\t\t\texpect(myNode.has(\"node2\")).to.be.ok;\n\t\t\texpect(myNode.get(\"node2\")).to.equal(mapNode2);\n\t\t\tchangeSetWithTwoMapEntries = myNode.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tchangeSetWithTwoMapEntries.insert &&\n\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"] &&\n\t\t\t\t\t_.keys(\n\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t).length === 2 &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node1\",\n\t\t\t\t\t) &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node2\",\n\t\t\t\t\t),\n\t\t\t).to.be.ok;\n\n\t\t\tchangeSetWithTwoMapEntries_full = myNode.serialize({ dirtyOnly: false });\n\t\t\texpect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n\t\t});\n\n\t\tit(\"should fail when trying to insert with empty id\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\texpect(() => myNode1.insert(\"\", mapNode3)).to.throw(MSG.ID_SHOULD_NOT_BE_EMPTY_STRING);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in itself\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\texpect(() => myNode1.insert(\"a\", myNode1)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in child\", function () {\n\t\t\tvar myNodeParent = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmyNodeParent.insert(\"a\", myNodeChild);\n\t\t\texpect(() => myNodeChild.insert(\"a\", myNodeParent)).to.throw(\n\t\t\t\tMSG.INSERTED_IN_OWN_CHILDREN,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in grand-child\", function () {\n\t\t\tvar myNodeParent = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeGrandChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmyNodeParent.insert(\"a\", myNodeChild);\n\t\t\tmyNodeChild.insert(\"a\", myNodeGrandChild);\n\t\t\texpect(() => myNodeGrandChild.insert(\"a\", myNodeParent)).to.throw(\n\t\t\t\tMSG.INSERTED_IN_OWN_CHILDREN,\n\t\t\t);\n\t\t});\n\n\t\tit(\".remove should return the property removed\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.remove(\"node1\")).to.deep.equal(mapNode3);\n\t\t\texpect(myNode1.remove(mapNode4)).to.deep.equal(mapNode4);\n\t\t\texpect(myNode1.getIds()).to.be.empty;\n\t\t});\n\n\t\tit(\".clear should remove all nodes\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.clear()).to.be.undefined;\n\t\t\texpect(myNode1.getIds()).to.be.empty;\n\t\t});\n\n\t\tit(\".getValues should work\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tnode1: { stringProperty: \"\", stringProperty2: \"\" },\n\t\t\t\tnode2: { stringProperty: \"\", stringProperty2: \"\" },\n\t\t\t});\n\t\t});\n\n\t\tit(\"getValues should work with nested arrays\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.tests:test.array.property-1.0.0\");\n\t\t\tmyNode1.insert(\"array1\", myArray);\n\t\t\tmyNode1.get(\"array1\").get(\"array\").insertRange(0, [1, 2, 3]);\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"array1\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tarray1: { array: [1, 2, 3] },\n\t\t\t});\n\t\t});\n\n\t\tit.skip(\"@bugfix getValues should work with circular references\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myRef1 = PropertyFactory.create(\"Reference\", \"single\", \"/ref2\");\n\t\t\tvar myRef2 = PropertyFactory.create(\"Reference\", \"single\", \"/ref1\");\n\t\t\tmyNode1.insert(\"ref1\", myRef1);\n\t\t\tmyNode1.insert(\"ref2\", myRef2);\n\t\t\tmyNode1.getValues();\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"ref1\", \"ref2\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tref1: \"/ref2\",\n\t\t\t\tref2: \"/ref1\",\n\t\t\t});\n\t\t});\n\n\t\tit(\"getValues should work with bad references\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myRef = PropertyFactory.create(\"Reference\", \"single\");\n\t\t\tmyNode1.insert(\"badref\", myRef);\n\t\t\tmyNode1.getValues();\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"badref\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tbadref: undefined,\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should track dirtiness\", function () {\n\t\t\tmyNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).deep.equal(changeSetWithTwoMapEntries_full);\n\t\t\texpect(myNode.serialize({ dirtyOnly: false })).deep.equal(\n\t\t\t\tchangeSetWithTwoMapEntries_full,\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmyNode.remove(\"node1\");\n\t\t\texpect(mapNode1.getParent()).to.be.undefined;\n\t\t\tmyNode.remove(\"node2\");\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(myNode.serialize({ dirtyOnly: false })).to.be.empty;\n\t\t\tremovalChangeSet = myNode.serialize({\n\t\t\t\tdirtyOnly: true,\n\t\t\t\tincludeRootTypeid: false,\n\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t});\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(2);\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node1\");\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node2\");\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar deserializedChanges1 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n\t\t\tvar CS4 = deserializedNode.serialize({ dirtyOnly: false });\n\t\t\texpect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n\n\t\t\tvar deserializedChanges2 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedChanges2).to.be.empty;\n\n\t\t\tvar deserializedChanges3 = deserializedNode.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal(removalChangeSet);\n\t\t});\n\n\t\tit(\"should support deserialization for nested properties\", function () {\n\t\t\tvar P1 = PropertyFactory.create(\"autodesk.tests:nested.node.property-1.0.0\");\n\t\t\tvar P2 = PropertyFactory.create(\"autodesk.tests:nested.node.property-1.0.0\");\n\n\t\t\tP1._properties.nested.property.propertyNode.insert(\n\t\t\t\t\"testProperty\",\n\t\t\t\tPropertyFactory.create(\"String\"),\n\t\t\t);\n\t\t\tP1._properties.nested.property.testProperty.value = \"testString\";\n\n\t\t\tP2.deserialize(P1.serialize({ dirtyOnly: false }));\n\t\t\texpect(P1.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tP2.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t\texpect(P2._properties.nested.property.testProperty.value).to.equal(\"testString\");\n\t\t});\n\n\t\tit(\"Should track modifies\", function () {\n\t\t\tvar modifyNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar modifyNode2 = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\tmodifyNode1.deserialize(changeSetWithTwoMapEntries);\n\t\t\tmodifyNode2.deserialize(changeSetWithTwoMapEntries);\n\n\t\t\tmodifyNode1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tvar child1 = modifyNode1.get(\"node1\");\n\t\t\tchild1._properties.stringProperty.value = \"modify test\";\n\t\t\tvar modifyChangeSet = modifyNode1.serialize({ dirtyOnly: true });\n\t\t\tmodifyNode2.applyChangeSet(modifyChangeSet);\n\t\t\texpect(modifyNode2.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tmodifyNode1.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should support hierarchical properties\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\t// Createa a hierarchy of three nodes\n\t\t\tnode1.insert(\"node\", node2);\n\t\t\tnode2.insert(\"node\", node3);\n\t\t\tnode3._properties.stringProperty.value = \"test\";\n\n\t\t\t// Check that deserializing and serializing works with a hierarchy\n\t\t\tvar hierarchicalChangeSet = node1.serialize({ dirtyOnly: true });\n\t\t\tvar deserializedNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tdeserializedNode.deserialize(hierarchicalChangeSet);\n\t\t\tvar child1 = deserializedNode.get(deserializedNode.getIds()[0]);\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tvar child2 = child1.get(child1.getIds()[0]);\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test\");\n\n\t\t\t// Test that hierarchical modifies work\n\t\t\tnode1.cleanDirty();\n\t\t\tnode3._properties.stringProperty.value = \"test2\";\n\t\t\tvar hierarchicalModifyChangeSet = node1.serialize({ dirtyOnly: true });\n\n\t\t\tdeserializedNode.applyChangeSet(hierarchicalModifyChangeSet);\n\t\t\tchild1 = deserializedNode.get(deserializedNode.getIds()[0]);\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tchild2 = child1.get(child1.getIds()[0]);\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test2\");\n\t\t});\n\n\t\tit(\"should be possible to use anonymous properties\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar rootNode2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:AnonymousProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:AnonymousProperty-1.0.0\");\n\n\t\t\trootNode.insert(\"node1\", node1);\n\t\t\trootNode.insert(\"node2\", node2);\n\t\t\tvar testChangeSet = rootNode.serialize({ dirtyOnly: false });\n\n\t\t\texpect(rootNode.get(\"node1\")).to.be.equal(node1);\n\t\t\texpect(rootNode.get(\"node2\")).to.be.equal(node2);\n\t\t\trootNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tnode1._properties.stringProperty.value = \"1\";\n\t\t\tnode2._properties.stringProperty.value = \"2\";\n\n\t\t\trootNode2.deserialize(testChangeSet);\n\t\t\trootNode2.applyChangeSet(rootNode.serialize({ dirtyOnly: true }));\n\t\t\texpect(rootNode2.serialize({ dirtyOnly: false })).to.be.deep.equal(\n\t\t\t\trootNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"inserting the same key twice should throw an exception\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootNode.insert(\"node1\", node1);\n\t\t\texpect(function () {\n\t\t\t\trootNode.insert(\"node1\", node2);\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"Should work to create a MixedNodeTemplate\", function () {\n\t\t\tvar mixedNode = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmixedNode.insert(\"dynamicFloat\", PropertyFactory.create(\"Float32\"));\n\t\t\tmixedNode.insert(\"dynamicString\", PropertyFactory.create(\"String\"));\n\n\t\t\tmixedNode._properties.stringProperty.value = \"string1\";\n\t\t\tmixedNode._properties.stringProperty2.value = \"string2\";\n\t\t\tmixedNode._properties.dynamicString.value = \"dynamic2\";\n\t\t\tmixedNode._properties.dynamicFloat.value = 11;\n\n\t\t\texpect(mixedNode.serialize({ dirtyOnly: false })).to.deep.equal({\n\t\t\t\tString: {\n\t\t\t\t\tstringProperty: \"string1\",\n\t\t\t\t\tstringProperty2: \"string2\",\n\t\t\t\t},\n\t\t\t\tinsert: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString: \"dynamic2\",\n\t\t\t\t\t},\n\t\t\t\t\tFloat32: {\n\t\t\t\t\t\tdynamicFloat: 11,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tmixedNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tmixedNode._properties.stringProperty.value = \"modified1\";\n\t\t\tmixedNode._properties.dynamicString.value = \"modified2\";\n\t\t\tmixedNode.insert(\"dynamicString2\", PropertyFactory.create(\"String\"));\n\t\t\tmixedNode._properties.dynamicString2.value = \"dynamic3\";\n\n\t\t\texpect(mixedNode.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tString: {\n\t\t\t\t\tstringProperty: \"modified1\",\n\t\t\t\t},\n\t\t\t\tmodify: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString: \"modified2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tinsert: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString2: \"dynamic3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Pretty printing\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.tests:MixedNodeTestProperty-1.0.0):\\n\" +\n\t\t\t\t' stringProperty (String): \"modified1\"\\n' +\n\t\t\t\t' stringProperty2 (String): \"string2\"\\n' +\n\t\t\t\t\" dynamicFloat (Float32): 11\\n\" +\n\t\t\t\t' dynamicString (String): \"modified2\"\\n' +\n\t\t\t\t' dynamicString2 (String): \"dynamic3\"\\n';\n\t\t\tvar prettyStr = \"\";\n\t\t\tmixedNode.prettyPrint(function (str) {\n\t\t\t\tprettyStr += str + \"\\n\";\n\t\t\t});\n\t\t\texpect(prettyStr).to.equal(expectedPrettyStr);\n\t\t});\n\n\t\tit(\"inserting the same node twice should be a bug\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\t// Try to insert the same node object under two keys\n\t\t\trootNode.insert(\"node\", node);\n\t\t\texpect(function () {\n\t\t\t\trootNode.insert(\"node2\", node);\n\t\t\t}).to.throw();\n\n\t\t\t// After removing it, adding it under a new key should be possible\n\t\t\trootNode.remove(\"node\");\n\t\t\trootNode.insert(\"node2\", node);\n\t\t});\n\n\t\tit(\"should not allow adding two nodes with same id\", function () {\n\t\t\tvar NodeTemplate = {\n\t\t\t\ttypeid: \"autodesk.tests:NodeTemplate-1.0.0\",\n\t\t\t\tinherits: \"NodeProperty\",\n\t\t\t\tproperties: [{ id: \"a\", typeid: \"Float32\" }],\n\t\t\t};\n\n\t\t\tPropertyFactory._reregister(NodeTemplate);\n\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:NodeTemplate-1.0.0\");\n\t\t\tvar child = PropertyFactory.create(\"String\");\n\n\t\t\texpect(function () {\n\t\t\t\tnode.insert(\"a\", child);\n\t\t\t}).to.throw(MSG.PROPERTY_ALREADY_EXISTS + \"a\");\n\t\t});\n\n\t\tit(\"Should correctly report whether it is a root\", function () {\n\t\t\tvar root = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar stringProperty = child.resolvePath(\"stringProperty\");\n\n\t\t\troot.insert(\"childKey\", child);\n\t\t\tassert(root.isRoot());\n\t\t\tassert(!child.isRoot());\n\n\t\t\texpect(stringProperty.getAbsolutePath()).to.equal(\"/childKey.stringProperty\");\n\t\t\texpect(stringProperty.getRelativePath(child)).to.equal(\"stringProperty\");\n\t\t\texpect(root.resolvePath(stringProperty.getAbsolutePath())).to.equal(stringProperty);\n\t\t\texpect(child.resolvePath(stringProperty.getRelativePath(child))).to.equal(\n\t\t\t\tstringProperty,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should correctly report changes when deserializing keys which contain 0\", function () {\n\t\t\tvar property = PropertyFactory.create(\"NodeProperty\");\n\t\t\tproperty.insert(\"test\", PropertyFactory.create(\"Int32\"));\n\t\t\tproperty._properties.test.value = 5; // Make sure, it is marked as modified\n\t\t\tproperty._properties.test.value = 0;\n\n\t\t\tvar property2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tproperty2.insert(\"test\", PropertyFactory.create(\"Int32\"));\n\t\t\tproperty2._properties.test.value = 5;\n\n\t\t\tvar actualChanges = property2.deserialize(property.serialize({ dirtyOnly: false }));\n\t\t\texpect(actualChanges).to.deep.equal({ modify: { Int32: { test: 0 } } });\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tresetKeyCounter();\n\t\t\tvar testProperty = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize({ dirtyOnly: false }));\n\t\t\tinitialChangeset.setIsNormalized(true);\n\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\ttestProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](testProperty);\n\t\t\t\tvar changes = testProperty.serialize({ dirtyOnly: true });\n\t\t\t\ttestProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tin_options.post(squashedChangeset.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tinitialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t\texpect(initialChangeset.getSerializedChangeSet()).to.deep.equal(\n\t\t\t\ttestProperty.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for multiple hierarchical inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for a tree removal\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for modifies in a tree\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for modifies of a primitive type\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\tvar newStringNode = PropertyFactory.create(\"String\");\n\t\t\t\t\t\tnewStringNode.value = \"initial value\";\n\t\t\t\t\t\troot.insert(\"stringProp\", newStringNode);\n\t\t\t\t\t},\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot.get(\"stringProp\").value = \"new value\";\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, modifyLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, removeFirstNodeInRoot],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"of a replace operation should be possible\", function () {\n\t\t\t// Create two nodes\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tnode2._properties.stringProperty.value = \"testString2\";\n\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\tcallbacks: [\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\"Rebasing\", function () {\n\t\tvar testRebasing = function (in_options) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(baseProperty1);\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tbaseProperty2.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\t\t\tvar baseProperty3 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tbaseProperty3.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1.serialize({ dirtyOnly: false });\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(baseProperty1);\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(baseProperty2);\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1.serialize({ dirtyOnly: true }));\n\t\t\tvar changeSet2 = baseProperty2.serialize({ dirtyOnly: true });\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(baseProperty3);\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(baseProperty3);\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3.serialize({ dirtyOnly: false });\n\t\t\t\texpect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertUniqueNodeInRoot(),\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t\troot.insert(\"node2\", node2);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node2\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: removeFirstNodeInRoot,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: removeFirstNodeInRoot,\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two indendent recursive modifies should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty2.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two conflicting recursive modifies should be possible and report a conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"b\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(\n\t\t\t\t\t\tchangeSet.modify[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"].node1.String\n\t\t\t\t\t\t\t.stringProperty,\n\t\t\t\t\t).to.equal(\"a\");\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1.stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t\texpect(changeSet).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by modify should report conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by remove+insert should report conflict\", function () {\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node\");\n\t\t\t\t\troot.insert(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node\");\n\t\t\t\t\troot.insert(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts of primitive types\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar string1 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring1.value = \"test1\";\n\t\t\t\t\troot.insert(\"entry\", string1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar string2 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring2.value = \"test2\";\n\t\t\t\t\troot.insert(\"entry\", string2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: \"test1\",\n\t\t\t\t\t\t\t\t\tvalue: \"test2\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(\"test2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\t// TODO: 'with conflicting inserts of primitive types' is identical to the below test. Why?\n\t\tit(\"with conflicting recursive modifies of primitive types should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar string1 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring1.value = \"test1\";\n\t\t\t\t\troot.insert(\"entry\", string1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar string2 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring2.value = \"test2\";\n\t\t\t\t\troot.insert(\"entry\", string2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: \"test1\",\n\t\t\t\t\t\t\t\t\tvalue: \"test2\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(\"test2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting recursive modifies of enums should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar enum1 = PropertyFactory.create(\"autodesk.core:UnitsEnum-1.0.0\");\n\t\t\t\t\tenum1.value = 1;\n\t\t\t\t\troot.insert(\"entry\", enum1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar enum2 = PropertyFactory.create(\"autodesk.core:UnitsEnum-1.0.0\");\n\t\t\t\t\tenum2.value = 2;\n\t\t\t\t\troot.insert(\"entry\", enum2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\"enum<autodesk.core:UnitsEnum-1.0.0>\": {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: 1,\n\t\t\t\t\t\t\t\t\tvalue: 2,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(2);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts in a deep leaf should report a correct conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.resolvePath(\"node\").insert(\"node2\", node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.resolvePath(\"node\").insert(\"node2\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node.node2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Compatibility with ChangeSets from spec\", function () {\n\t\t// These are the ChangeSets from the discussion minutes document\n\t\t// after some cleanup, mainly missing parameters were added in inserts and\n\t\t// syntax corrections. Additionally, the Vector3 was renamed to autodesk.test:vector3-1.0.0 to avoid\n\t\t// conflicts with the inbuilt type\n\n\t\tvar insertChangeSet1 = {\n\t\t\tinsert: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 122,\n\t\t\t\t\t\t\t\"position.y\": 122,\n\t\t\t\t\t\t\t\"temperature\": 10,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint1: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\td23kjda: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 122,\n\t\t\t\t\t\t\t\"position.y\": 122,\n\t\t\t\t\t\t\t\"temperature\": 11,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"Float32\": {\n\t\t\t\t\tcompression: 0,\n\t\t\t\t},\n\t\t\t\t\"map<>\": {\n\t\t\t\t\tbirds: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\tPoint1: {\n\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thorses: {},\n\t\t\t\t\tforest: {},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet1 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 11,\n\t\t\t\t\t\t\t\"temperature\": 31,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 0.5,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint2: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet3 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint2: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 2,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removePreparationChangeSet1 = {\n\t\t\tinsert: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\trevitId: \"#23213\",\n\t\t\t\t\t\t\tname: \"Door\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removePreparationChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\t\t\t\tas2398d: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\trevitId: \"#2231\",\n\t\t\t\t\t\t\t\t\t\tname: \"Room\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removeChangeSet1 = {\n\t\t\tremove: [\"dasdm23\"],\n\t\t};\n\n\t\tvar removeChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tremove: [\"as2398d\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tit(\"should be possible to insert properties with the example from the spec\", function () {\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Make sure all properties are as expected\n\t\t\texpect(rootProperty.getDynamicIds().length).to.equal(6);\n\t\t\texpect(rootProperty._getDynamicChildrenReadOnly()).to.have.all.keys(\n\t\t\t\t\"birds\",\n\t\t\t\t\"horses\",\n\t\t\t\t\"forest\",\n\t\t\t\t\"compression\",\n\t\t\t\t\"myPoint\",\n\t\t\t\t\"d23kjda\",\n\t\t\t);\n\t\t\texpect(rootProperty._properties.compression.value).to.equal(0);\n\t\t\tassert(rootProperty._properties.birds instanceof MapProperty);\n\t\t\tassert(rootProperty._properties.forest instanceof MapProperty);\n\t\t\tassert(rootProperty._properties.horses instanceof MapProperty);\n\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.x\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.y\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.temperature\").value).to.equal(10);\n\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.x\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.y\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.z\").value).to.equal(1);\n\n\t\t\tvar neighbours = rootProperty.resolvePath(\"myPoint.neighbours\");\n\t\t\tassert(neighbours.has(\"Point1\"));\n\t\t\texpect(neighbours.get(\"Point1\")._properties.x.value).to.equal(1);\n\t\t\texpect(neighbours.get(\"Point1\")._properties.y.value).to.equal(1);\n\t\t\texpect(neighbours.get(\"Point1\")._properties.z.value).to.equal(1);\n\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.position.x\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.position.y\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.temperature\").value).to.equal(11);\n\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.x\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.y\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.z\").value).to.equal(1);\n\n\t\t\t// Make sure serialization gives the same result as the initial ChangeSet\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: false })).to.deep.equal(insertChangeSet1);\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(insertChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the first modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.x\").value).to.equal(11);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.x\").value).to.equal(0.5);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.temperature\").value).to.equal(31);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the second modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet2);\n\t\t\tvar point2 = rootProperty.resolvePath(\"myPoint.neighbours\").get(\"Point2\");\n\t\t\texpect(point2._properties.x.value).to.equal(1);\n\t\t\texpect(point2._properties.y.value).to.equal(1);\n\t\t\texpect(point2._properties.z.value).to.equal(1);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet2);\n\t\t});\n\n\t\tit(\"should be possible to use the third modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\t\t\trootProperty.applyChangeSet(modifyChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet3);\n\t\t\tvar point2 = rootProperty.resolvePath(\"myPoint.neighbours\").get(\"Point2\");\n\t\t\texpect(point2._properties.x.value).to.equal(2);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet3);\n\t\t});\n\n\t\tit(\"should be possible to use the first remove ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet1);\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(1);\n\t\t\trootProperty.applyChangeSet(removeChangeSet1);\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(0);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(removeChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the first remove ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet1);\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the remove changeSet\n\t\t\texpect(rootProperty.resolvePath(\"dasdm23\").getDynamicIds().length).to.be.equal(1);\n\t\t\trootProperty.applyChangeSet(removeChangeSet2);\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"dasdm23\").getDynamicIds().length).to.be.equal(0);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(removeChangeSet2);\n\t\t});\n\t});\n\n\tdescribe(\"Make sure struct changes and path updates are signaled correctly\", function () {\n\t\tit(\"Should be possible to access dynamic nodes via propertis and paths\", function () {\n\t\t\tvar root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar newRoot = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\t// Create a hierarchy of nodes\n\t\t\troot.insert(\"child1\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\troot.insert(\"child2\", PropertyFactory.create(\"NodeProperty\"));\n\n\t\t\texpect(root._properties.child1.position).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.undefined;\n\n\t\t\t// Crate a dynamic object via a NodeProperty\n\t\t\tvar positionProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\troot._properties.child1.propertyNode.insert(\"position\", positionProperty);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"x\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"y\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"z\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\n\t\t\t// Make sure paths resolve correctly\n\t\t\texpect(root._properties.child1.position).not.to.be.undefined;\n\t\t\texpect(root._properties.child1.position.propertyNode).to.be.an.instanceof(NodeProperty);\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.instanceof(NodeProperty);\n\n\t\t\t// assign values via the properties object (for NodeProperty)\n\t\t\troot._properties.child1.position.x.value = 1;\n\t\t\troot._properties.child1.position.y.value = 2;\n\t\t\troot._properties.child1.position.z.value = 3;\n\n\t\t\t// assign values via resolve path\n\t\t\troot.resolvePath(\"child1.position.x\").value = 3;\n\t\t\troot.resolvePath(\"child1.position.y\").value = 2;\n\t\t\troot.resolvePath(\"child1.position.z\").value = 1;\n\n\t\t\t// Check values\n\t\t\texpect(root._properties.child1.position.x.value).to.equal(3);\n\t\t\texpect(root._properties.child1.position.y.value).to.equal(2);\n\t\t\texpect(root._properties.child1.position.z.value).to.equal(1);\n\n\t\t\t// Crate a dynamic object via a template\n\t\t\tvar vec3Property = PropertyFactory.create(\"autodesk.test:vector3-1.0.0\");\n\t\t\troot._properties.child1.propertyNode.insert(\"vector\", vec3Property);\n\n\t\t\t// Make sure paths resolve correctly\n\t\t\texpect(root._properties.child1.vector).not.to.be.undefined;\n\t\t\texpect(root._properties.child1.vector.propertyNode).to.be.an.instanceof(BaseProperty);\n\t\t\texpect(root.resolvePath(\"child1.vector\")).to.be.instanceof(BaseProperty);\n\n\t\t\troot._properties.child1.vector.x.value = 1;\n\t\t\troot._properties.child1.vector.y.value = 2;\n\t\t\troot._properties.child1.vector.z.value = 3;\n\n\t\t\t// assign values via resolve path\n\t\t\troot.resolvePath(\"child1.vector.x\").value = 3;\n\t\t\troot.resolvePath(\"child1.vector.y\").value = 2;\n\t\t\troot.resolvePath(\"child1.vector.z\").value = 1;\n\n\t\t\t// Check values\n\t\t\texpect(root._properties.child1.vector.x.value).to.equal(3);\n\t\t\texpect(root._properties.child1.vector.y.value).to.equal(2);\n\t\t\texpect(root._properties.child1.vector.z.value).to.equal(1);\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(root);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(root);\n\t\t\texpect(vec3Property.getRoot()).to.equal(root);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(root);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/child1.position\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/child1.position.x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/child1.vector\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/child1.vector.x\");\n\n\t\t\t// Check deletion\n\t\t\troot._properties.child1.propertyNode.remove(\"position\");\n\t\t\troot._properties.child1.propertyNode.remove(\"vector\");\n\n\t\t\texpect(root._properties.child1.position).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.undefined;\n\n\t\t\texpect(root._properties.child1.vector).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.vector\")).to.be.undefined;\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(positionProperty);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(positionProperty);\n\t\t\texpect(vec3Property.getRoot()).to.equal(vec3Property);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(vec3Property);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/x\");\n\n\t\t\t// Check addition to a new property root under a different key\n\t\t\tnewRoot.insert(\"newPosition\", positionProperty);\n\t\t\tnewRoot.insert(\"newvector\", vec3Property);\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(newRoot);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(newRoot);\n\t\t\texpect(vec3Property.getRoot()).to.equal(newRoot);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(newRoot);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/newPosition\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/newPosition.x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/newvector\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/newvector.x\");\n\n\t\t\t// Check keys with characters that require quotations\n\t\t\tnewRoot.remove(\"newPosition\");\n\t\t\tnewRoot.remove(\"newvector\");\n\t\t\tnewRoot.insert('new\"Position', positionProperty);\n\t\t\tnewRoot.insert(\"new.Vector\", vec3Property);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal('/\"new\\\\\"Position\"');\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal('/\"new\\\\\"Position\".x');\n\t\t\texpect(newRoot.resolvePath('\"new\\\\\"Position\".x')).to.equal(\n\t\t\t\tpositionProperty._properties.x,\n\t\t\t);\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal('/\"new.Vector\"');\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal('/\"new.Vector\".x');\n\t\t\texpect(newRoot.resolvePath('\"new.Vector\".x')).to.equal(vec3Property._properties.x);\n\n\t\t\tnewRoot.remove('new\"Position');\n\n\t\t\t// Path resolution for named properties should return the correct path\n\t\t\tvar namedProperty = PropertyFactory.create(\"NamedProperty\");\n\t\t\tvar nodeProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnodeProperty.insert(namedProperty);\n\t\t\texpect(namedProperty.getAbsolutePath()).to.equal(\"/\" + namedProperty.getGuid());\n\t\t\texpect(nodeProperty.resolvePath(namedProperty.getGuid())).to.equal(namedProperty);\n\n\t\t\t// Try multiple levels\n\t\t\tvar leaf = PropertyFactory.create(\"NodeProperty\");\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(leaf);\n\t\t\tvar map1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap1.insert(\"entry\", leaf);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map1);\n\n\t\t\tvar map2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap2.insert(\"entry\", map1);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map2);\n\n\t\t\tvar map3 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap3.insert(\"entry\", map2);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map3);\n\t\t});\n\t});\n\n\tit(\"should correctly clean templates inheriting from NamedNodeProperty\", function () {\n\t\tvar property = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\tvar childProperty = property.get(\"stringProperty\");\n\t\tchildProperty.value = \"changed\";\n\t\texpect(childProperty.isDirty()).to.be.true;\n\t\tproperty.cleanDirty();\n\t\texpect(property.isDirty()).to.be.false;\n\t\texpect(childProperty.isDirty()).to.be.false;\n\t});\n\n\tdescribe(\"Make sure to have appropriate types for ids given to nodeProperty when inserting\", function () {\n\t\tit(\"should be possible for the id passed to be a string\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\tnode3.insert(\"node1\", node2);\n\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\texpect(node1.resolvePath(\"node.node1.stringProperty\").value).to.equal(\"test\");\n\t\t\texpect(node3.resolvePath(\"node1.stringProperty\").value).to.equal(\"test\");\n\t\t\tdone();\n\t\t});\n\n\t\tit(\"should be possible for the id passed to be a number\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\tnode3.insert(1122, node2);\n\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\texpect(node1.resolvePath(\"node.1122.stringProperty\").value).to.equal(\"test\");\n\t\t\texpect(node3.resolvePath(\"1122.stringProperty\").value).to.equal(\"test\");\n\t\t\tdone();\n\t\t});\n\n\t\tit(\"should throw an error when the id passed is an object\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\ttry {\n\t\t\t\tnode3.insert({ foo: \"bar\" }, node2);\n\t\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\t} catch (e) {\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"_coveredByPaths\", function () {\n\t\tthis.timeout(500);\n\t\tlet PathHelper, getPathCoverageSpy, paths, prop, propPath;\n\n\t\tbefore(function () {\n\t\t\tPathHelper = require(\"@fluid-experimental/property-changeset\").PathHelper;\n\t\t});\n\n\t\tbeforeEach(function () {\n\t\t\tgetPathCoverageSpy = sinon.spy(PathHelper, \"getPathCoverage\");\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tPathHelper.getPathCoverage.restore();\n\t\t});\n\n\t\tafter(function () {});\n\n\t\tit(\"should succeed if property is included in a path 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"String\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in a path 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\");\n\t\t\tpropPath = \"a.b.c\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is a primitive collection included in a path\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\", \"array\");\n\t\t\tpropPath = \"a.b.c.d\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Bool\");\n\t\t\tpropPath = \"b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Float32\");\n\t\t\tpropPath = \"b.f.g\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path but have common root 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"map\");\n\t\t\tpropPath = \"a.h\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path but have common root 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tpropPath = \"a.i.j\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"String\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive property 2\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive collection property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\", \"map\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive collection property 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.c\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"array\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a non-primitive collection property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\", \"map\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a non-primitive collection property 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.c\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NamedProperty\", \"set\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"d\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 2\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", \"h\");\n\t\t\td.insert(\"i\", \"i\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 3\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", PropertyFactory.create(\"String\"));\n\t\t\td.insert(\"i\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(5);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 4\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet b = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"b\", b);\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tb.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"NodeProperty\");\n\t\t\tb.insert(\"d\", d);\n\t\t\td.insert(\"h\", PropertyFactory.create(\"String\"));\n\t\t\td.insert(\"i\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(6);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b\", paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths through map 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d.z\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"c\", \"c\");\n\t\t\tprop.insert(\"d\", \"d\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d.z\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d.z\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths through map 2\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet d = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", \"h\");\n\t\t\td.insert(\"i\", \"i\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(5);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not completely included in multiple paths 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"e\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.be.above(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not completely included in multiple paths 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.d\", \"a.b.c\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"e\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.be.above(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\t});\n});\n"]}
1
+ {"version":3,"file":"nodeProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/nodeProperty.spec.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,2BAA2B;AAE3B;;GAEG;AACH,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC;AACxE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC,SAAS,CAAC;AAClF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC,SAAS,CAAC;AACzE,MAAM,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAE5B,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,8BAA8B,CAAC,CAAC;AAChE,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,+BAA+B,CAAC,CAAC;AAElE,QAAQ,CAAC,cAAc,EAAE;IACxB,IAAI,0BAA0B,EAAE,+BAA+B,EAAE,gBAAgB,CAAC;IAClF,IAAI,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC;IAE/B,MAAM,CAAC;QACN,wDAAwD;QACxD,IAAI,yBAAyB,GAAG;YAC/B,MAAM,EAAE,4CAA4C;YACpD,QAAQ,EAAE,CAAC,cAAc,CAAC;YAC1B,UAAU,EAAE;gBACX,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAC1C,EAAE,EAAE,EAAE,iBAAiB,EAAE,MAAM,EAAE,QAAQ,EAAE;aAC3C;SACD,CAAC;QACF,IAAI,6BAA6B,GAAG;YACnC,MAAM,EAAE,wCAAwC;YAChD,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACxD,CAAC;QACF,IAAI,8BAA8B,GAAG;YACpC,MAAM,EAAE,6CAA6C;YACrD,QAAQ,EAAE,CAAC,cAAc,EAAE,eAAe,CAAC;YAC3C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;SACxD,CAAC;QACF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE,+BAA+B;YACvC,QAAQ,EAAE,MAAM;YAChB,UAAU,EAAE,EAAE,WAAW,EAAE,kBAAkB,EAAE;YAC/C,UAAU,EAAE;gBACX,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;gBAC3D,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;gBACjE,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;aACjE;SACD,CAAC;QACF,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAE9C,eAAe,CAAC,WAAW,CAAC,yBAAyB,CAAC,CAAC;QACvD,eAAe,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;QAC5D,eAAe,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC;QAE3D,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAChD,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAChF,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAEhF,sDAAsD;QACtD,IAAI,YAAY,GAAG;YAClB,MAAM,EAAE,6BAA6B;YACrC,UAAU,EAAE;gBACX,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC9B,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;gBAC9B,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;aAC9B;SACD,CAAC;QAEF,IAAI,eAAe,GAAG;YACrB,MAAM,EAAE,6BAA6B;YACrC,UAAU,EAAE;gBACX;oBACC,EAAE,EAAE,UAAU;oBACd,UAAU,EAAE;wBACX,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;wBAC9B,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE;qBAC9B;iBACD;gBACD,EAAE,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,6BAA6B,EAAE;gBACvD,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,6BAA6B,EAAE,OAAO,EAAE,KAAK,EAAE;gBAC3E,EAAE,EAAE,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE;aACxC;SACD,CAAC;QAEF,IAAI,mBAAmB,GAAG;YACzB,QAAQ,EAAE,cAAc;YACxB,MAAM,EAAE,iCAAiC;YACzC,UAAU,EAAE;gBACX,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE;gBAChC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE;aACnC;SACD,CAAC;QAEF,IAAI,kBAAkB,GAAG;YACxB,MAAM,EAAE,2CAA2C;YACnD,UAAU,EAAE;gBACX;oBACC,EAAE,EAAE,QAAQ;oBACZ,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC;iBACxD;aACD;SACD,CAAC;QAEF,IAAI,iBAAiB,GAAG;YACvB,MAAM,EAAE,0CAA0C;YAClD,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;SAClE,CAAC;QAEF,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1C,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7C,eAAe,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC;QACjD,eAAe,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC;QAChD,eAAe,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,sCAAsC;IACtC,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,eAAe,GAAG;QACrB,UAAU,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC;IAEF,6EAA6E;IAC7E,IAAI,8BAA8B,GAAG,UAAU,GAAG,EAAE,IAAI,EAAE,IAAI;QAC7D,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAChF,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACvB,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;QAC7B,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,iCAAiC;IACjC,IAAI,gBAAgB,GAAG,UAAU,IAAI;QACpC,8BAA8B,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEF,iEAAiE;IACjE,IAAI,sBAAsB,GAAG;QAC5B,IAAI,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;QAChC,OAAO,8BAA8B,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC,CAAC;IAC5E,CAAC,CAAC;IAEF,6BAA6B;IAC7B,IAAI,gBAAgB,GAAG,UAAU,IAAI;QACpC,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;QAChF,IAAI,GAAG,GAAG,MAAM,GAAG,UAAU,EAAE,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,uCAAuC;IACvC,IAAI,qBAAqB,GAAG,UAAU,IAAI;QACzC,IAAI,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACvB,CAAC,CAAC;IAEF,yBAAyB;IACzB,IAAI,UAAU,GAAG,UAAU,IAAI;QAC9B,IAAI,IAAI,GAAG,IAAI,CAAC;QAChB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,GAAG,CAAC;IACrF,CAAC,CAAC;IAEF,QAAQ,CAAC,gDAAgD,EAAE;QAC1D,EAAE,CAAC,kCAAkC,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACpC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE;YAC/C,mCAAmC;YACnC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;YACzC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAChD,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAE9C,IAAI,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/C,MAAM,CACL,EAAE,CAAC,MAAM;gBACR,EAAE,CAAC,MAAM,CAAC,4CAA4C,CAAC;gBACvD,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC;gBAC5E,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAC/E,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAEX,oCAAoC;YACpC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC/C,0BAA0B,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACnE,MAAM,CACL,0BAA0B,CAAC,MAAM;gBAChC,0BAA0B,CAAC,MAAM,CAAC,4CAA4C,CAAC;gBAC/E,CAAC,CAAC,IAAI,CACL,0BAA0B,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAC/E,CAAC,MAAM,KAAK,CAAC;gBACd,CAAC,CAAC,QAAQ,CACT,CAAC,CAAC,IAAI,CACL,0BAA0B,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAC/E,EACD,OAAO,CACP;gBACD,CAAC,CAAC,QAAQ,CACT,CAAC,CAAC,IAAI,CACL,0BAA0B,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAC/E,EACD,OAAO,CACP,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;YAEX,+BAA+B,GAAG,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YACzE,MAAM,CAAC,0BAA0B,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE;YACrD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QACxF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE;YACjD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACnF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACzD,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACtC,MAAM,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC3D,GAAG,CAAC,wBAAwB,CAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9D,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;YACtC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;YAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAChE,GAAG,CAAC,wBAAwB,CAC5B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACxD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE;YACpC,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACtC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE;YAC5B,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACpF,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;gBAClD,KAAK,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,eAAe,EAAE,EAAE,EAAE;aAClD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE;YAC9C,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC;YACjF,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAClC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE;aAC5B,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,IAAI,CAAC,wDAAwD,EAAE;YACjE,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpE,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC,IAAI,EAAE,OAAO;gBACb,IAAI,EAAE,OAAO;aACb,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE;YAC/C,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACrD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC1D,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChC,OAAO,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC,MAAM,EAAE,SAAS;aACjB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE;YAC5B,MAAM,CAAC,UAAU,CAAC,YAAY,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;YAC3D,MAAM,CACL,MAAM,CAAC,SAAS,CAAC;gBAChB,SAAS,EAAE,IAAI;gBACf,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,KAAK;aACtD,CAAC,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACd,MAAM,CACL,MAAM,CAAC,SAAS,CAAC;gBAChB,SAAS,EAAE,IAAI;gBACf,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,cAAc;aAC/D,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAC9C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CACxD,+BAA+B,CAC/B,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE;YACtC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,CACL,MAAM,CAAC,SAAS,CAAC;gBAChB,SAAS,EAAE,IAAI;gBACf,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,cAAc;aAC/D,CAAC,CACF,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACd,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC3D,gBAAgB,GAAG,MAAM,CAAC,SAAS,CAAC;gBACnC,SAAS,EAAE,IAAI;gBACf,iBAAiB,EAAE,KAAK;gBACxB,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,KAAK;aACtD,CAAC,CAAC;YACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACpD,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE;YACpC,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9D,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;YACpF,IAAI,GAAG,GAAG,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAC3D,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACtD,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAEvE,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;YACpF,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAEzC,IAAI,oBAAoB,GAAG,gBAAgB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC5D,MAAM,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE;YAC1D,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;YAC7E,IAAI,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC;YAE7E,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CACjD,cAAc,EACd,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAChC,CAAC;YACF,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC;YAEjE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACvD,EAAE,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAClC,CAAC;YACF,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uBAAuB,EAAE;YAC3B,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACzD,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAEzD,WAAW,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;YACpD,WAAW,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC;YAEpD,WAAW,CAAC,UAAU,CACrB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YACF,IAAI,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,aAAa,CAAC;YACxD,IAAI,eAAe,GAAG,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;YAC5C,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAChE,WAAW,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAC3C,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wCAAwC,EAAE;YAC5C,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,qCAAqC;YACrC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5B,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5B,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;YAEhD,kEAAkE;YAClE,IAAI,qBAAqB,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9D,gBAAgB,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;YACpD,IAAI,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,IAAI,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEjE,uCAAuC;YACvC,KAAK,CAAC,UAAU,EAAE,CAAC;YACnB,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,OAAO,CAAC;YACjD,IAAI,2BAA2B,GAAG,KAAK,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvE,gBAAgB,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YAC7D,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACpD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACvD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAC7E,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,wCAAwC,CAAC,CAAC;YAE7E,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,IAAI,aAAa,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAE7D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjD,QAAQ,CAAC,UAAU,CAClB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,GAAG,CAAC;YAC7C,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,GAAG,CAAC;YAE7C,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;YACrC,SAAS,CAAC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CACxC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE;YAC5D,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAChC,MAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE;YAC/C,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACrF,SAAS,CAAC,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YACpE,SAAS,CAAC,MAAM,CAAC,eAAe,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAEpE,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,SAAS,CAAC;YACvD,SAAS,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,GAAG,SAAS,CAAC;YACxD,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,UAAU,CAAC;YACvD,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,GAAG,EAAE,CAAC;YAE9C,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC/D,MAAM,EAAE;oBACP,cAAc,EAAE,SAAS;oBACzB,eAAe,EAAE,SAAS;iBAC1B;gBACD,MAAM,EAAE;oBACP,MAAM,EAAE;wBACP,aAAa,EAAE,UAAU;qBACzB;oBACD,OAAO,EAAE;wBACR,YAAY,EAAE,EAAE;qBAChB;iBACD;aACD,CAAC,CAAC;YAEH,SAAS,CAAC,UAAU,CACnB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,WAAW,CAAC;YACzD,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,GAAG,WAAW,CAAC;YACxD,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACrE,SAAS,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,UAAU,CAAC;YAExD,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC9D,MAAM,EAAE;oBACP,cAAc,EAAE,WAAW;iBAC3B;gBACD,MAAM,EAAE;oBACP,MAAM,EAAE;wBACP,aAAa,EAAE,WAAW;qBAC1B;iBACD;gBACD,MAAM,EAAE;oBACP,MAAM,EAAE;wBACP,cAAc,EAAE,UAAU;qBAC1B;iBACD;aACD,CAAC,CAAC;YAEH,kBAAkB;YAClB,IAAI,iBAAiB,GACpB,2DAA2D;gBAC3D,0CAA0C;gBAC1C,yCAAyC;gBACzC,gCAAgC;gBAChC,yCAAyC;gBACzC,yCAAyC,CAAC;YAC3C,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,SAAS,CAAC,WAAW,CAAC,UAAU,GAAG;gBAClC,SAAS,IAAI,GAAG,GAAG,IAAI,CAAC;YACzB,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE;YACnD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACtD,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAElD,oDAAoD;YACpD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC9B,MAAM,CAAC;gBACN,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAChC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;YAEd,kEAAkE;YAClE,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACxB,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACpD,IAAI,YAAY,GAAG;gBAClB,MAAM,EAAE,mCAAmC;gBAC3C,QAAQ,EAAE,cAAc;gBACxB,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aAC5C,CAAC;YAEF,eAAe,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;YAE1C,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;YACvE,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAE7C,MAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACzB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,GAAG,GAAG,CAAC,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE;YAClD,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAChF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACjF,IAAI,cAAc,GAAG,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;YAEzD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACtB,MAAM,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YAExB,MAAM,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;YAC9E,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpF,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACxE,cAAc,CACd,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE;YAC7E,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACtD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,sCAAsC;YAC3E,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAEpC,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACvD,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1D,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YAErC,IAAI,aAAa,GAAG,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACpF,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,WAAW,EAAE;QACrB,EAAE;QACF,qFAAqF;QACrF,oFAAoF;QACpF,mFAAmF;QACnF,EAAE;QACF,qFAAqF;QACrF,8BAA8B;QAC9B,EAAE;QACF,IAAI,sBAAsB,GAAG,UAAU,UAAU;YAChD,eAAe,EAAE,CAAC;YAClB,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAE1D,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;YACrC,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC9B,CAAC;YAED,IAAI,gBAAgB,GAAG,IAAI,SAAS,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACnF,gBAAgB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAEvC,IAAI,iBAAiB,GAAG,IAAI,SAAS,EAAE,CAAC;YACxC,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,SAAS,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC3B,IAAI,OAAO,GAAG,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC1D,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;oBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;gBAEF,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC3C,CAAC;YAED,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;gBACrB,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;YAC7D,CAAC;YAED,gBAAgB,CAAC,cAAc,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,gBAAgB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC9D,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAC5C,CAAC;QACH,CAAC,CAAC;QAEF,EAAE,CAAC,8CAA8C,EAAE;YAClD,sBAAsB,CAAC;gBACtB,SAAS,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;aACjE,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,+CAA+C,EAAE;YACnD,sBAAsB,CAAC;gBACtB,SAAS,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,EAAE,gBAAgB,CAAC;aACjE,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,6CAA6C,EAAE;YACjD,sBAAsB,CAAC;gBACtB,SAAS,EAAE;oBACV,gBAAgB;oBAChB,gBAAgB;oBAChB,qBAAqB;oBACrB,qBAAqB;iBACrB;gBACD,IAAI,EAAE,UAAU,SAAS;oBACxB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC/B,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,gCAAgC,EAAE;YACpC,sBAAsB,CAAC;gBACtB,SAAS,EAAE;oBACV,gBAAgB;oBAChB,gBAAgB;oBAChB,gBAAgB;oBAChB,qBAAqB;iBACrB;gBACD,IAAI,EAAE,UAAU,SAAS;oBACxB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC/B,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE;YACxC,sBAAsB,CAAC;gBACtB,SAAS,EAAE;oBACV,gBAAgB;oBAChB,gBAAgB;oBAChB,gBAAgB;oBAChB,UAAU;oBACV,UAAU;iBACV;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,8CAA8C,EAAE;YAClD,sBAAsB,CAAC;gBACtB,SAAS,EAAE;oBACV,UAAU,IAAI;wBACb,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;wBACrD,aAAa,CAAC,KAAK,GAAG,eAAe,CAAC;wBACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;oBAC1C,CAAC;oBACD,UAAU,IAAI;wBACb,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,GAAG,WAAW,CAAC;oBAC5C,CAAC;iBACD;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE;YACnE,sBAAsB,CAAC;gBACtB,SAAS,EAAE;oBACV,gBAAgB;oBAChB,gBAAgB;oBAChB,UAAU;oBACV,UAAU;oBACV,qBAAqB;iBACrB;gBACD,IAAI,EAAE,UAAU,SAAS;oBACxB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC/B,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,oDAAoD,EAAE;YACxD,sBAAsB,CAAC;gBACtB,GAAG,EAAE,gBAAgB;gBACrB,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;aACnC,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,mEAAmE,EAAE;YACvE,sBAAsB,CAAC;gBACtB,GAAG,EAAE,gBAAgB;gBACrB,SAAS,EAAE,CAAC,UAAU,EAAE,qBAAqB,CAAC;gBAC9C,IAAI,EAAE,UAAU,SAAS;oBACxB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9C,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,2CAA2C,EAAE;YAC/C,mBAAmB;YACnB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACjF,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,aAAa,CAAC;YAEvD,sBAAsB,CAAC;gBACtB,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,SAAS,EAAE;oBACV,qBAAqB;oBACrB,UAAU,IAAI;wBACb,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC7B,CAAC;iBACD;gBACD,IAAI,EAAE,UAAU,SAAS;oBACxB,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IACH,QAAQ,CAAC,UAAU,EAAE;QACpB,IAAI,YAAY,GAAG,UAAU,UAAU;YACtC,4BAA4B;YAC5B,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3D,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;gBACxB,UAAU,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YACnC,CAAC;YACD,kCAAkC;YAClC,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3D,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YACzE,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC3D,aAAa,CAAC,WAAW,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;YAEzE,iCAAiC;YACjC,aAAa,CAAC,UAAU,CACvB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YACF,aAAa,CAAC,UAAU,CACvB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YACF,aAAa,CAAC,UAAU,CACvB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,IAAI,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;YAErE,yDAAyD;YACzD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;YACD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;gBACpB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC/B,CAAC;YAED,qBAAqB;YACrB,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAC7E,IAAI,UAAU,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9D,4BAA4B;YAC5B,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAEnD,IAAI,iBAAiB,GAAG,IAAI,SAAS,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC;YAChE,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAC7C,iBAAiB,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YAE7C,IAAI,UAAU,CAAC,mBAAmB,EAAE,CAAC;gBACpC,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;oBACpB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/B,CAAC;gBACD,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;oBACpB,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;gBAC/B,CAAC;gBACD,IAAI,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;gBACnE,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;YACrF,CAAC;YAED,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC;gBAC5B,UAAU,CAAC,WAAW,CAAC,SAAS,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC;YAClE,CAAC;QACF,CAAC,CAAC;QAEF,EAAE,CAAC,+BAA+B,EAAE;YACnC,YAAY,CAAC;gBACZ,GAAG,EAAE,sBAAsB,EAAE;gBAC7B,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE;YACjD,YAAY,CAAC;gBACZ,GAAG,EAAE,sBAAsB,EAAE;gBAC7B,GAAG,EAAE,sBAAsB,EAAE;gBAC7B,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE;YACjD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAEnD,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBACD,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU;gBACf,GAAG,EAAE,qBAAqB;gBAC1B,mBAAmB,EAAE,IAAI;aACzB,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,qBAAqB;gBAC1B,GAAG,EAAE,UAAU;gBACf,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpC,SAAS,CAAC,YAAY,CAAC,2BAA2B,CAClD,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACpD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACtB,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;gBACxD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE;YAC9D,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK;wBAC/E,GAAG,CAAC;gBACN,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK;wBAChF,GAAG,CAAC;gBACN,CAAC;gBACD,mBAAmB,EAAE,IAAI;gBACzB,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;gBAC/B,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE;YACtF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK;wBAC/E,GAAG,CAAC;gBACN,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK;wBAC/E,GAAG,CAAC;gBACN,CAAC;gBACD,mBAAmB,EAAE,IAAI;gBACzB,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CACL,SAAS,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,KAAK,CAAC,MAAM;yBACzE,cAAc,CAChB,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;oBAChB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC/D,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE;YACvD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU;gBACf,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;oBACjF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,mBAAmB,EAAE,IAAI;gBACzB,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,mBAAmB,CAAC,CAAC;oBAClF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACxD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE;YAClE,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;oBACjF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBACrB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU;gBACf,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpC,SAAS,CAAC,YAAY,CAAC,sCAAsC,CAC7D,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE;YACzE,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEhF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpB,IAAI,CAAC,MAAM,CACV,MAAM,EACN,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CACpE,CAAC;gBACH,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACpB,IAAI,CAAC,MAAM,CACV,MAAM,EACN,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CACpE,CAAC;gBACH,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/C,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE;YACrD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI,IAAG,CAAC;gBAC3B,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpC,SAAS,CAAC,YAAY,CAAC,4BAA4B,CACnD,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAChD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE;YACjD,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI,IAAG,CAAC;gBAC3B,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;wBAC/B,MAAM,EAAE;4BACP,MAAM,EAAE;gCACP,KAAK,EAAE;oCACN,QAAQ,EAAE,OAAO;oCACjB,KAAK,EAAE,OAAO;iCACd;6BACD;yBACD;qBACD,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7D,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,4FAA4F;QAC5F,EAAE,CAAC,iGAAiG,EAAE;YACrG,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI,IAAG,CAAC;gBAC3B,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC;oBACxB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBAC/B,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;wBAC/B,MAAM,EAAE;4BACP,MAAM,EAAE;gCACP,KAAK,EAAE;oCACN,QAAQ,EAAE,OAAO;oCACjB,KAAK,EAAE,OAAO;iCACd;6BACD;yBACD;qBACD,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;gBAC7D,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE;YAC3F,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI,IAAG,CAAC;gBAC3B,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;oBACpE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;oBACpE,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;oBAChB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7B,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;wBAC/B,MAAM,EAAE;4BACP,qCAAqC,EAAE;gCACtC,KAAK,EAAE;oCACN,QAAQ,EAAE,CAAC;oCACX,KAAK,EAAE,CAAC;iCACR;6BACD;yBACD;qBACD,CAAC,CAAC;oBACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;oBAC5E,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE;YAC9E,YAAY,CAAC;gBACZ,OAAO,EAAE,UAAU,IAAI;oBACtB,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;oBAChF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAC3B,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;oBACjF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACjD,CAAC;gBACD,GAAG,EAAE,UAAU,IAAI;oBAClB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;oBACjF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBACjD,CAAC;gBACD,mBAAmB,EAAE,KAAK;gBAC1B,WAAW,EAAE,UAAU,SAAS,EAAE,SAAS;oBAC1C,MAAM,CAAC,SAAS,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;oBACvD,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACpC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CACpC,SAAS,CAAC,YAAY,CAAC,4BAA4B,CACnD,CAAC;oBACF,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBACrD,CAAC;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yCAAyC,EAAE;QACnD,gEAAgE;QAChE,0EAA0E;QAC1E,oGAAoG;QACpG,kCAAkC;QAElC,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE;gBACP,6BAA6B,EAAE;oBAC9B,OAAO,EAAE;wBACR,SAAS,EAAE;4BACV,YAAY,EAAE,GAAG;4BACjB,YAAY,EAAE,GAAG;4BACjB,aAAa,EAAE,EAAE;yBACjB;wBACD,6BAA6B,EAAE;4BAC9B,MAAM,EAAE;gCACP,OAAO,EAAE;oCACR,CAAC,EAAE,CAAC;oCACJ,CAAC,EAAE,CAAC;oCACJ,CAAC,EAAE,CAAC;iCACJ;6BACD;yBACD;wBACD,kCAAkC,EAAE;4BACnC,UAAU,EAAE;gCACX,MAAM,EAAE;oCACP,6BAA6B,EAAE;wCAC9B,MAAM,EAAE;4CACP,OAAO,EAAE;gDACR,CAAC,EAAE,CAAC;gDACJ,CAAC,EAAE,CAAC;gDACJ,CAAC,EAAE,CAAC;6CACJ;yCACD;qCACD;iCACD;6BACD;yBACD;qBACD;oBACD,OAAO,EAAE;wBACR,SAAS,EAAE;4BACV,YAAY,EAAE,GAAG;4BACjB,YAAY,EAAE,GAAG;4BACjB,aAAa,EAAE,EAAE;yBACjB;wBACD,6BAA6B,EAAE;4BAC9B,MAAM,EAAE;gCACP,OAAO,EAAE;oCACR,CAAC,EAAE,CAAC;oCACJ,CAAC,EAAE,CAAC;oCACJ,CAAC,EAAE,CAAC;iCACJ;6BACD;yBACD;wBACD,kCAAkC,EAAE;4BACnC,UAAU,EAAE,EAAE;yBACd;qBACD;iBACD;gBACD,SAAS,EAAE;oBACV,WAAW,EAAE,CAAC;iBACd;gBACD,OAAO,EAAE;oBACR,KAAK,EAAE;wBACN,MAAM,EAAE;4BACP,6BAA6B,EAAE;gCAC9B,MAAM,EAAE;oCACP,OAAO,EAAE;wCACR,CAAC,EAAE,CAAC;wCACJ,CAAC,EAAE,CAAC;wCACJ,CAAC,EAAE,CAAC;qCACJ;iCACD;6BACD;yBACD;qBACD;oBACD,MAAM,EAAE,EAAE;oBACV,MAAM,EAAE,EAAE;iBACV;aACD;SACD,CAAC;QAEF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE;gBACP,6BAA6B,EAAE;oBAC9B,OAAO,EAAE;wBACR,SAAS,EAAE;4BACV,YAAY,EAAE,EAAE;4BAChB,aAAa,EAAE,EAAE;yBACjB;wBACD,6BAA6B,EAAE;4BAC9B,MAAM,EAAE;gCACP,OAAO,EAAE;oCACR,CAAC,EAAE,GAAG;iCACN;6BACD;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE;gBACP,6BAA6B,EAAE;oBAC9B,OAAO,EAAE;wBACR,kCAAkC,EAAE;4BACnC,UAAU,EAAE;gCACX,MAAM,EAAE;oCACP,6BAA6B,EAAE;wCAC9B,MAAM,EAAE;4CACP,OAAO,EAAE;gDACR,CAAC,EAAE,CAAC;gDACJ,CAAC,EAAE,CAAC;gDACJ,CAAC,EAAE,CAAC;6CACJ;yCACD;qCACD;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE;gBACP,6BAA6B,EAAE;oBAC9B,OAAO,EAAE;wBACR,kCAAkC,EAAE;4BACnC,UAAU,EAAE;gCACX,MAAM,EAAE;oCACP,6BAA6B,EAAE;wCAC9B,MAAM,EAAE;4CACP,OAAO,EAAE;gDACR,CAAC,EAAE,CAAC;6CACJ;yCACD;qCACD;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,2BAA2B,GAAG;YACjC,MAAM,EAAE;gBACP,iCAAiC,EAAE;oBAClC,OAAO,EAAE;wBACR,MAAM,EAAE;4BACP,OAAO,EAAE,QAAQ;4BACjB,IAAI,EAAE,MAAM;yBACZ;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,2BAA2B,GAAG;YACjC,MAAM,EAAE;gBACP,iCAAiC,EAAE;oBAClC,OAAO,EAAE;wBACR,MAAM,EAAE;4BACP,iCAAiC,EAAE;gCAClC,OAAO,EAAE;oCACR,MAAM,EAAE;wCACP,OAAO,EAAE,OAAO;wCAChB,IAAI,EAAE,MAAM;qCACZ;iCACD;6BACD;yBACD;qBACD;iBACD;aACD;SACD,CAAC;QAEF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE,CAAC,SAAS,CAAC;SACnB,CAAC;QAEF,IAAI,gBAAgB,GAAG;YACtB,MAAM,EAAE;gBACP,iCAAiC,EAAE;oBAClC,OAAO,EAAE;wBACR,MAAM,EAAE,CAAC,SAAS,CAAC;qBACnB;iBACD;aACD;SACD,CAAC;QAEF,EAAE,CAAC,wEAAwE,EAAE;YAC5E,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAE9C,2CAA2C;YAC3C,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxD,MAAM,CAAC,YAAY,CAAC,2BAA2B,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAClE,OAAO,EACP,QAAQ,EACR,QAAQ,EACR,aAAa,EACb,SAAS,EACT,SAAS,CACT,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,YAAY,WAAW,CAAC,CAAC;YAC9D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC;YAC/D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,YAAY,WAAW,CAAC,CAAC;YAE/D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvE,IAAI,UAAU,GAAG,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;YAChE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEjE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE3E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvE,yEAAyE;YACzE,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACrF,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE;YACxE,4BAA4B;YAC5B,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAE9C,kBAAkB;YAClB,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,6BAA6B;YAC7B,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1E,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE3E,wDAAwD;YACxD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qEAAqE,EAAE;YACzE,4BAA4B;YAC5B,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAE9C,kBAAkB;YAClB,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,6BAA6B;YAC7B,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAI,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE/C,wDAAwD;YACxD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE;YACxE,4BAA4B;YAC5B,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAE9C,kBAAkB;YAClB,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,6BAA6B;YAC7B,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,IAAI,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YAC1E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE/C,wDAAwD;YACxD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE;YACxE,4BAA4B;YAC5B,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YACzD,YAAY,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YAEzD,kBAAkB;YAClB,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,6BAA6B;YAC7B,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3D,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3D,wDAAwD;YACxD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oEAAoE,EAAE;YACxE,4BAA4B;YAC5B,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YACzD,YAAY,CAAC,cAAc,CAAC,2BAA2B,CAAC,CAAC;YAEzD,kBAAkB;YAClB,YAAY,CAAC,UAAU,CACtB,YAAY,CAAC,oBAAoB,CAAC,KAAK;gBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;YAEF,6BAA6B;YAC7B,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAClF,YAAY,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAElF,wDAAwD;YACxD,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACrF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kEAAkE,EAAE;QAC5E,EAAE,CAAC,oEAAoE,EAAE;YACxE,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAErD,8BAA8B;YAC9B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAC9D,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YAE9D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE5D,4CAA4C;YAC5C,IAAI,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;YAC1E,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CACnD,GAAG,EACH,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CACjC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CACnD,GAAG,EACH,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CACjC,CAAC;YACF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CACnD,GAAG,EACH,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CACjC,CAAC;YAEF,oCAAoC;YACpC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAE3E,6DAA6D;YAC7D,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAE7C,iCAAiC;YACjC,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAEhD,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE7D,wCAAwC;YACxC,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACzE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAEpE,oCAAoC;YACpC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YACtF,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAEzE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAE3C,iCAAiC;YACjC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;YAE9C,eAAe;YACf,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE3D,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE5D,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YACxE,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxF,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAClE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;YAElF,iBAAiB;YACjB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACxD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEtD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACzD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE5D,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YACvD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;YAE1D,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC9D,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YAC5E,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACtD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAEpE,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACzD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxE,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACrD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEpE,8DAA8D;YAC9D,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;YAChD,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;YAE1C,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACnE,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACjD,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAE/D,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpE,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACpF,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC9D,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAE9E,qDAAqD;YACrD,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YAC9B,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;YACjD,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;YAE3C,cAAc;YACd,MAAM,CAAC,gBAAgB,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzE,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACzD,gBAAgB,CAAC,WAAW,CAAC,CAAC,CAC9B,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YACjE,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjF,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;YAEnF,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAE/B,sEAAsE;YACtE,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;YAC5D,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC1D,YAAY,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;YAChF,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;YAElF,sBAAsB;YACtB,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC7C,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAE7C,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE;QACxE,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;QACrF,IAAI,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QACnD,aAAa,CAAC,KAAK,GAAG,SAAS,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC3C,QAAQ,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACvC,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;IAC7C,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kFAAkF,EAAE;QAC5F,EAAE,CAAC,qDAAqD,EAAE,UAAU,IAAI;YACvE,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5B,KAAK,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC7B,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,2BAA2B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACzE,IAAI,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE,UAAU,IAAI;YACvE,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5B,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC1B,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;YAChD,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,0BAA0B,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7E,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACxE,IAAI,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,UAAU,IAAI;YACzE,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,6CAA6C,CAAC,CAAC;YAClF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAEjF,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC;gBACJ,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;gBACpC,KAAK,CAAC,WAAW,CAAC,cAAc,CAAC,KAAK,GAAG,MAAM,CAAC;YACjD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,iBAAiB,EAAE;QAC3B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,EAAE,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC;QAE1D,MAAM,CAAC;YACN,UAAU,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC,UAAU,CAAC;QAC3E,CAAC,CAAC,CAAC;QAEH,UAAU,CAAC;YACV,kBAAkB,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC;YACT,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,cAAa,CAAC,CAAC,CAAC;QAEtB,EAAE,CAAC,oDAAoD,EAAE;YACxD,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE;YACxD,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,QAAQ,GAAG,OAAO,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE;YAC7E,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChD,QAAQ,GAAG,SAAS,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YAC3D,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACtC,QAAQ,GAAG,GAAG,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YAC3D,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACzC,QAAQ,GAAG,OAAO,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE;YAChF,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/C,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE;YAChF,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;YAChB,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,QAAQ,GAAG,OAAO,CAAC;YACnB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvC,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE;YAC3E,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC9C,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uEAAuE,EAAE;YAC3E,KAAK,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE;YAC/E,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YACrD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE;YAC/E,KAAK,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACtD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9E,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnB,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC9E,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QAC/E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpF,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACjB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,QAAQ,GAAG,GAAG,CAAC;YACf,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC/D,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpF,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE;YAC5E,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;YAClC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtB,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAChF,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE;YAC5E,KAAK,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YAC1D,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC/C,IAAI,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnB,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACzD,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClE,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CACL,kBAAkB,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAClF,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACb,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YACpF,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACrF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE;YAC5E,KAAK,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wEAAwE,EAAE;YAC5E,KAAK,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACnD,QAAQ,GAAG,KAAK,CAAC;YACjB,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YAC1D,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpD,MAAM,CAAC,kBAAkB,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\n/* globals assert, sinon */\n\n/**\n * @fileoverview In this file, we will test the NodeProperty object described in properties/nodeProperty.js\n */\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { generateGUID } = require(\"@fluid-experimental/property-common\").GuidUtils;\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst _ = require(\"lodash\");\n\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst { MapProperty } = require(\"../../properties/mapProperty\");\nconst { NodeProperty } = require(\"../../properties/nodeProperty\");\n\ndescribe(\"NodeProperty\", function () {\n\tvar changeSetWithTwoMapEntries, changeSetWithTwoMapEntries_full, removalChangeSet;\n\tvar myNode, mapNode1, mapNode2;\n\n\tbefore(function () {\n\t\t// Register a template with a set property for the tests\n\t\tvar MixedNodePropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:MixedNodeTestProperty-1.0.0\",\n\t\t\tinherits: [\"NodeProperty\"],\n\t\t\tproperties: [\n\t\t\t\t{ id: \"stringProperty\", typeid: \"String\" },\n\t\t\t\t{ id: \"stringProperty2\", typeid: \"String\" },\n\t\t\t],\n\t\t};\n\t\tvar AnonymousTestPropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:AnonymousProperty-1.0.0\",\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tvar MixedNamedNodePropertyTemplate = {\n\t\t\ttypeid: \"autodesk.tests:MixedNamedNodeProperty-1.0.0\",\n\t\t\tinherits: [\"NodeProperty\", \"NamedProperty\"],\n\t\t\tproperties: [{ id: \"stringProperty\", typeid: \"String\" }],\n\t\t};\n\t\tvar TestEnumTemplate = {\n\t\t\ttypeid: \"autodesk.core:UnitsEnum-1.0.0\",\n\t\t\tinherits: \"Enum\",\n\t\t\tannotation: { description: \"The metric units\" },\n\t\t\tproperties: [\n\t\t\t\t{ id: \"m\", value: 1, annotation: { description: \"meter\" } },\n\t\t\t\t{ id: \"cm\", value: 2, annotation: { description: \"centimeter\" } },\n\t\t\t\t{ id: \"mm\", value: 3, annotation: { description: \"millimeter\" } },\n\t\t\t],\n\t\t};\n\t\tPropertyFactory._reregister(TestEnumTemplate);\n\n\t\tPropertyFactory._reregister(MixedNodePropertyTemplate);\n\t\tPropertyFactory._reregister(MixedNamedNodePropertyTemplate);\n\t\tPropertyFactory._reregister(AnonymousTestPropertyTemplate);\n\n\t\tmyNode = PropertyFactory.create(\"NodeProperty\");\n\t\tmapNode1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tmapNode2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t// Register the templates from the discussion document\n\t\tvar Vec3Template = {\n\t\t\ttypeid: \"autodesk.test:vector3-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"x\", typeid: \"Float32\" },\n\t\t\t\t{ id: \"y\", typeid: \"Float32\" },\n\t\t\t\t{ id: \"z\", typeid: \"Float32\" },\n\t\t\t],\n\t\t};\n\n\t\tvar Point2DTemplate = {\n\t\t\ttypeid: \"autodesk.test:point2d-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"position\",\n\t\t\t\t\tproperties: [\n\t\t\t\t\t\t{ id: \"x\", typeid: \"Float32\" },\n\t\t\t\t\t\t{ id: \"y\", typeid: \"Float32\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{ id: \"normal\", typeid: \"autodesk.test:vector3-1.0.0\" },\n\t\t\t\t{ id: \"neighbours\", typeid: \"autodesk.test:vector3-1.0.0\", context: \"map\" },\n\t\t\t\t{ id: \"temperature\", typeid: \"Float32\" },\n\t\t\t],\n\t\t};\n\n\t\tvar SceneObjectTemplate = {\n\t\t\tinherits: \"NodeProperty\",\n\t\t\ttypeid: \"autodesk.test:SceneObject-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{ id: \"name\", typeid: \"String\" },\n\t\t\t\t{ id: \"revitId\", typeid: \"String\" },\n\t\t\t],\n\t\t};\n\n\t\tvar nestedNodeProperty = {\n\t\t\ttypeid: \"autodesk.tests:nested.node.property-1.0.0\",\n\t\t\tproperties: [\n\t\t\t\t{\n\t\t\t\t\tid: \"nested\",\n\t\t\t\t\tproperties: [{ id: \"property\", typeid: \"NodeProperty\" }],\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tvar testArrayProperty = {\n\t\t\ttypeid: \"autodesk.tests:test.array.property-1.0.0\",\n\t\t\tproperties: [{ id: \"array\", typeid: \"Float32\", context: \"array\" }],\n\t\t};\n\n\t\tPropertyFactory._reregister(Vec3Template);\n\t\tPropertyFactory._reregister(Point2DTemplate);\n\t\tPropertyFactory._reregister(SceneObjectTemplate);\n\t\tPropertyFactory._reregister(nestedNodeProperty);\n\t\tPropertyFactory._reregister(testArrayProperty);\n\t});\n\n\t// Helper functions for the test cases\n\tvar keyCounter = 0;\n\tvar resetKeyCounter = function () {\n\t\tkeyCounter = 0;\n\t};\n\n\t// Inserts a node with the given guid (a new one is generated when undefined)\n\tvar insertNodeInRootWithKeyAndGuid = function (key, guid, root) {\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tif (key === undefined) {\n\t\t\tkey = \"node\" + keyCounter++;\n\t\t}\n\n\t\troot.insert(key, node);\n\t};\n\n\t// Inserts a new node in the root\n\tvar insertNodeInRoot = function (root) {\n\t\tinsertNodeInRootWithKeyAndGuid(undefined, undefined, root);\n\t};\n\n\t// Returns a functor that will insert a node with a constant GUID\n\tvar insertUniqueNodeInRoot = function () {\n\t\tvar key = \"node\" + keyCounter++;\n\t\treturn insertNodeInRootWithKeyAndGuid.bind(undefined, key, generateGUID());\n\t};\n\n\t// Inserts a new node as leaf\n\tvar insertNodeAsLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf.getDynamicIds().length > 0) {\n\t\t\tleaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n\t\t}\n\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\tvar key = \"node\" + keyCounter++;\n\t\tleaf.insert(key, node);\n\t};\n\n\t// Removes the first node from the root\n\tvar removeFirstNodeInRoot = function (root) {\n\t\tvar firstKey = root.getDynamicIds()[0];\n\t\troot.remove(firstKey);\n\t};\n\n\t// Modifies the leaf node\n\tvar modifyLeaf = function (root) {\n\t\tvar leaf = root;\n\t\twhile (leaf.getDynamicIds().length > 0) {\n\t\t\tleaf = _.values(leaf._getDynamicChildrenReadOnly())[0];\n\t\t}\n\t\tleaf._properties.stringProperty.value = leaf._properties.stringProperty.value + \"+\";\n\t};\n\n\tdescribe(\"Testing creation, assignment and serialization\", function () {\n\t\tit(\"should be empty at the beginning\", function () {\n\t\t\texpect(myNode.getIds()).to.be.empty;\n\t\t\texpect(myNode.serialize({ dirtyOnly: true })).to.be.empty;\n\t\t});\n\n\t\tit(\"should be possible to insert into the map\", function () {\n\t\t\t// Test insertion of the first node\n\t\t\tmyNode.insert(\"node1\", mapNode1);\n\t\t\texpect(myNode.has(\"node1\")).to.be.ok;\n\t\t\texpect(myNode.has(\"node2\")).to.be.not.ok;\n\t\t\texpect(myNode.get(\"node2\")).to.equal(undefined);\n\t\t\texpect(mapNode1.getParent()).to.equal(myNode);\n\n\t\t\tvar CS = myNode.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tCS.insert &&\n\t\t\t\t\tCS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"] &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"]).length === 1 &&\n\t\t\t\t\t_.keys(CS.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"])[0] === \"node1\",\n\t\t\t).to.be.ok;\n\n\t\t\t// Test insertion of the second node\n\t\t\tmyNode.insert(\"node2\", mapNode2);\n\t\t\texpect(myNode.has(\"node2\")).to.be.ok;\n\t\t\texpect(myNode.get(\"node2\")).to.equal(mapNode2);\n\t\t\tchangeSetWithTwoMapEntries = myNode.serialize({ dirtyOnly: true });\n\t\t\texpect(\n\t\t\t\tchangeSetWithTwoMapEntries.insert &&\n\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"] &&\n\t\t\t\t\t_.keys(\n\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t).length === 2 &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node1\",\n\t\t\t\t\t) &&\n\t\t\t\t\t_.includes(\n\t\t\t\t\t\t_.keys(\n\t\t\t\t\t\t\tchangeSetWithTwoMapEntries.insert[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"],\n\t\t\t\t\t\t),\n\t\t\t\t\t\t\"node2\",\n\t\t\t\t\t),\n\t\t\t).to.be.ok;\n\n\t\t\tchangeSetWithTwoMapEntries_full = myNode.serialize({ dirtyOnly: false });\n\t\t\texpect(changeSetWithTwoMapEntries).to.deep.equal(changeSetWithTwoMapEntries_full);\n\t\t});\n\n\t\tit(\"should fail when trying to insert with empty id\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\texpect(() => myNode1.insert(\"\", mapNode3)).to.throw(MSG.ID_SHOULD_NOT_BE_EMPTY_STRING);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in itself\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\texpect(() => myNode1.insert(\"a\", myNode1)).to.throw(MSG.INSERTED_IN_OWN_CHILDREN);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in child\", function () {\n\t\t\tvar myNodeParent = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmyNodeParent.insert(\"a\", myNodeChild);\n\t\t\texpect(() => myNodeChild.insert(\"a\", myNodeParent)).to.throw(\n\t\t\t\tMSG.INSERTED_IN_OWN_CHILDREN,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should fail when trying to insert in grand-child\", function () {\n\t\t\tvar myNodeParent = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myNodeGrandChild = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmyNodeParent.insert(\"a\", myNodeChild);\n\t\t\tmyNodeChild.insert(\"a\", myNodeGrandChild);\n\t\t\texpect(() => myNodeGrandChild.insert(\"a\", myNodeParent)).to.throw(\n\t\t\t\tMSG.INSERTED_IN_OWN_CHILDREN,\n\t\t\t);\n\t\t});\n\n\t\tit(\".remove should return the property removed\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.remove(\"node1\")).to.deep.equal(mapNode3);\n\t\t\texpect(myNode1.remove(mapNode4)).to.deep.equal(mapNode4);\n\t\t\texpect(myNode1.getIds()).to.be.empty;\n\t\t});\n\n\t\tit(\".clear should remove all nodes\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.clear()).to.be.undefined;\n\t\t\texpect(myNode1.getIds()).to.be.empty;\n\t\t});\n\n\t\tit(\".getValues should work\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar mapNode3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar mapNode4 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmyNode1.insert(\"node1\", mapNode3);\n\t\t\tmyNode1.insert(\"node2\", mapNode4);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tnode1: { stringProperty: \"\", stringProperty2: \"\" },\n\t\t\t\tnode2: { stringProperty: \"\", stringProperty2: \"\" },\n\t\t\t});\n\t\t});\n\n\t\tit(\"getValues should work with nested arrays\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.tests:test.array.property-1.0.0\");\n\t\t\tmyNode1.insert(\"array1\", myArray);\n\t\t\tmyNode1.get(\"array1\").get(\"array\").insertRange(0, [1, 2, 3]);\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"array1\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tarray1: { array: [1, 2, 3] },\n\t\t\t});\n\t\t});\n\n\t\tit.skip(\"@bugfix getValues should work with circular references\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myRef1 = PropertyFactory.create(\"Reference\", \"single\", \"/ref2\");\n\t\t\tvar myRef2 = PropertyFactory.create(\"Reference\", \"single\", \"/ref1\");\n\t\t\tmyNode1.insert(\"ref1\", myRef1);\n\t\t\tmyNode1.insert(\"ref2\", myRef2);\n\t\t\tmyNode1.getValues();\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"ref1\", \"ref2\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tref1: \"/ref2\",\n\t\t\t\tref2: \"/ref1\",\n\t\t\t});\n\t\t});\n\n\t\tit(\"getValues should work with bad references\", function () {\n\t\t\tvar myNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar myRef = PropertyFactory.create(\"Reference\", \"single\");\n\t\t\tmyNode1.insert(\"badref\", myRef);\n\t\t\tmyNode1.getValues();\n\t\t\texpect(myNode1.getIds()).to.deep.equal([\"badref\"]);\n\t\t\texpect(myNode1.getValues()).to.deep.equal({\n\t\t\t\tbadref: undefined,\n\t\t\t});\n\t\t});\n\n\t\tit(\"Should track dirtiness\", function () {\n\t\t\tmyNode.cleanDirty(BaseProperty.MODIFIED_STATE_FLAGS.DIRTY);\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).deep.equal(changeSetWithTwoMapEntries_full);\n\t\t\texpect(myNode.serialize({ dirtyOnly: false })).deep.equal(\n\t\t\t\tchangeSetWithTwoMapEntries_full,\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should handle removals correctly\", function () {\n\t\t\tmyNode.remove(\"node1\");\n\t\t\texpect(mapNode1.getParent()).to.be.undefined;\n\t\t\tmyNode.remove(\"node2\");\n\t\t\texpect(\n\t\t\t\tmyNode.serialize({\n\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\tincludeRootTypeid: false,\n\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t}),\n\t\t\t).to.be.empty;\n\t\t\texpect(myNode.serialize({ dirtyOnly: false })).to.be.empty;\n\t\t\tremovalChangeSet = myNode.serialize({\n\t\t\t\tdirtyOnly: true,\n\t\t\t\tincludeRootTypeid: false,\n\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t});\n\t\t\texpect(removalChangeSet).to.have.all.keys([\"remove\"]);\n\t\t\texpect(removalChangeSet.remove).to.have.length(2);\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node1\");\n\t\t\texpect(removalChangeSet.remove).to.contain(\"node2\");\n\t\t});\n\n\t\tit(\"Should support deserialization\", function () {\n\t\t\tvar deserializedNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar deserializedChanges1 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n\t\t\tvar CS4 = deserializedNode.serialize({ dirtyOnly: false });\n\t\t\texpect(CS4).to.deep.equal(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedChanges1).to.deep.equal(changeSetWithTwoMapEntries);\n\n\t\t\tvar deserializedChanges2 = deserializedNode.deserialize(changeSetWithTwoMapEntries);\n\t\t\texpect(deserializedChanges2).to.be.empty;\n\n\t\t\tvar deserializedChanges3 = deserializedNode.deserialize({});\n\t\t\texpect(deserializedChanges3).to.deep.equal(removalChangeSet);\n\t\t});\n\n\t\tit(\"should support deserialization for nested properties\", function () {\n\t\t\tvar P1 = PropertyFactory.create(\"autodesk.tests:nested.node.property-1.0.0\");\n\t\t\tvar P2 = PropertyFactory.create(\"autodesk.tests:nested.node.property-1.0.0\");\n\n\t\t\tP1._properties.nested.property.propertyNode.insert(\n\t\t\t\t\"testProperty\",\n\t\t\t\tPropertyFactory.create(\"String\"),\n\t\t\t);\n\t\t\tP1._properties.nested.property.testProperty.value = \"testString\";\n\n\t\t\tP2.deserialize(P1.serialize({ dirtyOnly: false }));\n\t\t\texpect(P1.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tP2.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t\texpect(P2._properties.nested.property.testProperty.value).to.equal(\"testString\");\n\t\t});\n\n\t\tit(\"Should track modifies\", function () {\n\t\t\tvar modifyNode1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar modifyNode2 = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\tmodifyNode1.deserialize(changeSetWithTwoMapEntries);\n\t\t\tmodifyNode2.deserialize(changeSetWithTwoMapEntries);\n\n\t\t\tmodifyNode1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tvar child1 = modifyNode1.get(\"node1\");\n\t\t\tchild1._properties.stringProperty.value = \"modify test\";\n\t\t\tvar modifyChangeSet = modifyNode1.serialize({ dirtyOnly: true });\n\t\t\tmodifyNode2.applyChangeSet(modifyChangeSet);\n\t\t\texpect(modifyNode2.serialize({ dirtyOnly: false })).to.deep.equal(\n\t\t\t\tmodifyNode1.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"Should support hierarchical properties\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\t// Createa a hierarchy of three nodes\n\t\t\tnode1.insert(\"node\", node2);\n\t\t\tnode2.insert(\"node\", node3);\n\t\t\tnode3._properties.stringProperty.value = \"test\";\n\n\t\t\t// Check that deserializing and serializing works with a hierarchy\n\t\t\tvar hierarchicalChangeSet = node1.serialize({ dirtyOnly: true });\n\t\t\tvar deserializedNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tdeserializedNode.deserialize(hierarchicalChangeSet);\n\t\t\tvar child1 = deserializedNode.get(deserializedNode.getIds()[0]);\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tvar child2 = child1.get(child1.getIds()[0]);\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test\");\n\n\t\t\t// Test that hierarchical modifies work\n\t\t\tnode1.cleanDirty();\n\t\t\tnode3._properties.stringProperty.value = \"test2\";\n\t\t\tvar hierarchicalModifyChangeSet = node1.serialize({ dirtyOnly: true });\n\n\t\t\tdeserializedNode.applyChangeSet(hierarchicalModifyChangeSet);\n\t\t\tchild1 = deserializedNode.get(deserializedNode.getIds()[0]);\n\t\t\texpect(child1).to.not.equal(undefined);\n\t\t\tchild2 = child1.get(child1.getIds()[0]);\n\t\t\texpect(child2).to.not.equal(undefined);\n\t\t\texpect(child2._properties.stringProperty.value).to.equal(\"test2\");\n\t\t});\n\n\t\tit(\"should be possible to use anonymous properties\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar rootNode2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:AnonymousProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:AnonymousProperty-1.0.0\");\n\n\t\t\trootNode.insert(\"node1\", node1);\n\t\t\trootNode.insert(\"node2\", node2);\n\t\t\tvar testChangeSet = rootNode.serialize({ dirtyOnly: false });\n\n\t\t\texpect(rootNode.get(\"node1\")).to.be.equal(node1);\n\t\t\texpect(rootNode.get(\"node2\")).to.be.equal(node2);\n\t\t\trootNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tnode1._properties.stringProperty.value = \"1\";\n\t\t\tnode2._properties.stringProperty.value = \"2\";\n\n\t\t\trootNode2.deserialize(testChangeSet);\n\t\t\trootNode2.applyChangeSet(rootNode.serialize({ dirtyOnly: true }));\n\t\t\texpect(rootNode2.serialize({ dirtyOnly: false })).to.be.deep.equal(\n\t\t\t\trootNode.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t});\n\n\t\tit(\"inserting the same key twice should throw an exception\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootNode.insert(\"node1\", node1);\n\t\t\texpect(function () {\n\t\t\t\trootNode.insert(\"node1\", node2);\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\"Should work to create a MixedNodeTemplate\", function () {\n\t\t\tvar mixedNode = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tmixedNode.insert(\"dynamicFloat\", PropertyFactory.create(\"Float32\"));\n\t\t\tmixedNode.insert(\"dynamicString\", PropertyFactory.create(\"String\"));\n\n\t\t\tmixedNode._properties.stringProperty.value = \"string1\";\n\t\t\tmixedNode._properties.stringProperty2.value = \"string2\";\n\t\t\tmixedNode._properties.dynamicString.value = \"dynamic2\";\n\t\t\tmixedNode._properties.dynamicFloat.value = 11;\n\n\t\t\texpect(mixedNode.serialize({ dirtyOnly: false })).to.deep.equal({\n\t\t\t\tString: {\n\t\t\t\t\tstringProperty: \"string1\",\n\t\t\t\t\tstringProperty2: \"string2\",\n\t\t\t\t},\n\t\t\t\tinsert: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString: \"dynamic2\",\n\t\t\t\t\t},\n\t\t\t\t\tFloat32: {\n\t\t\t\t\t\tdynamicFloat: 11,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tmixedNode.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tmixedNode._properties.stringProperty.value = \"modified1\";\n\t\t\tmixedNode._properties.dynamicString.value = \"modified2\";\n\t\t\tmixedNode.insert(\"dynamicString2\", PropertyFactory.create(\"String\"));\n\t\t\tmixedNode._properties.dynamicString2.value = \"dynamic3\";\n\n\t\t\texpect(mixedNode.serialize({ dirtyOnly: true })).to.deep.equal({\n\t\t\t\tString: {\n\t\t\t\t\tstringProperty: \"modified1\",\n\t\t\t\t},\n\t\t\t\tmodify: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString: \"modified2\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tinsert: {\n\t\t\t\t\tString: {\n\t\t\t\t\t\tdynamicString2: \"dynamic3\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t});\n\n\t\t\t// Pretty printing\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.tests:MixedNodeTestProperty-1.0.0):\\n\" +\n\t\t\t\t' stringProperty (String): \"modified1\"\\n' +\n\t\t\t\t' stringProperty2 (String): \"string2\"\\n' +\n\t\t\t\t\" dynamicFloat (Float32): 11\\n\" +\n\t\t\t\t' dynamicString (String): \"modified2\"\\n' +\n\t\t\t\t' dynamicString2 (String): \"dynamic3\"\\n';\n\t\t\tvar prettyStr = \"\";\n\t\t\tmixedNode.prettyPrint(function (str) {\n\t\t\t\tprettyStr += str + \"\\n\";\n\t\t\t});\n\t\t\texpect(prettyStr).to.equal(expectedPrettyStr);\n\t\t});\n\n\t\tit(\"inserting the same node twice should be a bug\", function () {\n\t\t\tvar rootNode = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\t// Try to insert the same node object under two keys\n\t\t\trootNode.insert(\"node\", node);\n\t\t\texpect(function () {\n\t\t\t\trootNode.insert(\"node2\", node);\n\t\t\t}).to.throw();\n\n\t\t\t// After removing it, adding it under a new key should be possible\n\t\t\trootNode.remove(\"node\");\n\t\t\trootNode.insert(\"node2\", node);\n\t\t});\n\n\t\tit(\"should not allow adding two nodes with same id\", function () {\n\t\t\tvar NodeTemplate = {\n\t\t\t\ttypeid: \"autodesk.tests:NodeTemplate-1.0.0\",\n\t\t\t\tinherits: \"NodeProperty\",\n\t\t\t\tproperties: [{ id: \"a\", typeid: \"Float32\" }],\n\t\t\t};\n\n\t\t\tPropertyFactory._reregister(NodeTemplate);\n\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:NodeTemplate-1.0.0\");\n\t\t\tvar child = PropertyFactory.create(\"String\");\n\n\t\t\texpect(function () {\n\t\t\t\tnode.insert(\"a\", child);\n\t\t\t}).to.throw(MSG.PROPERTY_ALREADY_EXISTS + \"a\");\n\t\t});\n\n\t\tit(\"Should correctly report whether it is a root\", function () {\n\t\t\tvar root = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar child = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar stringProperty = child.resolvePath(\"stringProperty\");\n\n\t\t\troot.insert(\"childKey\", child);\n\t\t\tassert(root.isRoot());\n\t\t\tassert(!child.isRoot());\n\n\t\t\texpect(stringProperty.getAbsolutePath()).to.equal(\"/childKey.stringProperty\");\n\t\t\texpect(stringProperty.getRelativePath(child)).to.equal(\"stringProperty\");\n\t\t\texpect(root.resolvePath(stringProperty.getAbsolutePath())).to.equal(stringProperty);\n\t\t\texpect(child.resolvePath(stringProperty.getRelativePath(child))).to.equal(\n\t\t\t\tstringProperty,\n\t\t\t);\n\t\t});\n\n\t\tit(\"should correctly report changes when deserializing keys which contain 0\", function () {\n\t\t\tvar property = PropertyFactory.create(\"NodeProperty\");\n\t\t\tproperty.insert(\"test\", PropertyFactory.create(\"Int32\"));\n\t\t\tproperty._properties.test.value = 5; // Make sure, it is marked as modified\n\t\t\tproperty._properties.test.value = 0;\n\n\t\t\tvar property2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tproperty2.insert(\"test\", PropertyFactory.create(\"Int32\"));\n\t\t\tproperty2._properties.test.value = 5;\n\n\t\t\tvar actualChanges = property2.deserialize(property.serialize({ dirtyOnly: false }));\n\t\t\texpect(actualChanges).to.deep.equal({ modify: { Int32: { test: 0 } } });\n\t\t});\n\t});\n\n\tdescribe(\"squashing\", function () {\n\t\t//\n\t\t// Helper function which takes a sequence of callbacks that are successively executed\n\t\t// and the changes applied by the callbacks are separately tracked and squashed in a\n\t\t// a ChangeSet. This ChangeSet is then compared to the state in the property object\n\t\t//\n\t\t// Optionally, a a callback which controls the initial state before the squashing can\n\t\t// be given as first parameter\n\t\t//\n\t\tvar testChangeSetSquashing = function (in_options) {\n\t\t\tresetKeyCounter();\n\t\t\tvar testProperty = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\tvar callbacks = in_options.callbacks;\n\t\t\tif (in_options.pre) {\n\t\t\t\tin_options.pre(testProperty);\n\t\t\t}\n\n\t\t\tvar initialChangeset = new ChangeSet(testProperty.serialize({ dirtyOnly: false }));\n\t\t\tinitialChangeset.setIsNormalized(true);\n\n\t\t\tvar squashedChangeset = new ChangeSet();\n\t\t\ttestProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tfor (var i = 0; i < callbacks.length; i++) {\n\t\t\t\tcallbacks[i](testProperty);\n\t\t\t\tvar changes = testProperty.serialize({ dirtyOnly: true });\n\t\t\t\ttestProperty.cleanDirty(\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t);\n\n\t\t\t\tsquashedChangeset.applyChangeSet(changes);\n\t\t\t}\n\n\t\t\tif (in_options.post) {\n\t\t\t\tin_options.post(squashedChangeset.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tinitialChangeset.applyChangeSet(squashedChangeset.getSerializedChangeSet());\n\t\t\texpect(initialChangeset.getSerializedChangeSet()).to.deep.equal(\n\t\t\t\ttestProperty.serialize({ dirtyOnly: false }),\n\t\t\t);\n\t\t};\n\n\t\tit(\"should work for multiple independent inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeInRoot, insertNodeInRoot, insertNodeInRoot],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for multiple hierarchical inserts\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [insertNodeAsLeaf, insertNodeAsLeaf, insertNodeAsLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for inserts followed by removes\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tinsertNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"should work for a tree removal\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"should work for modifies in a tree\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\t\tit(\"should work for modifies of a primitive type\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\tvar newStringNode = PropertyFactory.create(\"String\");\n\t\t\t\t\t\tnewStringNode.value = \"initial value\";\n\t\t\t\t\t\troot.insert(\"stringProp\", newStringNode);\n\t\t\t\t\t},\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot.get(\"stringProp\").value = \"new value\";\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t});\n\t\t});\n\n\t\tit(\"an insert, modify and a remove should give an empty changeset\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tcallbacks: [\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tinsertNodeAsLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tmodifyLeaf,\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"work for modifies after an already existing insert\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, modifyLeaf],\n\t\t\t});\n\t\t});\n\t\tit(\"of modify and remove after an already existing insert should work\", function () {\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: insertNodeInRoot,\n\t\t\t\tcallbacks: [modifyLeaf, removeFirstNodeInRoot],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.have.all.keys(\"remove\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t\tit(\"of a replace operation should be possible\", function () {\n\t\t\t// Create two nodes\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tnode2._properties.stringProperty.value = \"testString2\";\n\n\t\t\ttestChangeSetSquashing({\n\t\t\t\tpre: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\tcallbacks: [\n\t\t\t\t\tremoveFirstNodeInRoot,\n\t\t\t\t\tfunction (root) {\n\t\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tpost: function (changeset) {\n\t\t\t\t\texpect(changeset).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\tdescribe(\"Rebasing\", function () {\n\t\tvar testRebasing = function (in_options) {\n\t\t\t// Prepare the initial state\n\t\t\tvar baseProperty1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tif (in_options.prepare) {\n\t\t\t\tin_options.prepare(baseProperty1);\n\t\t\t}\n\t\t\t// Create two copies of this state\n\t\t\tvar baseProperty2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tbaseProperty2.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\t\t\tvar baseProperty3 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tbaseProperty3.deserialize(baseProperty1.serialize({ dirtyOnly: false }));\n\n\t\t\t// Make sure the states are clear\n\t\t\tbaseProperty1.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty2.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\t\t\tbaseProperty3.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\tvar initialChangeSet = baseProperty1.serialize({ dirtyOnly: false });\n\n\t\t\t// Apply the operations to the two properties in parallel\n\t\t\tif (in_options.op1) {\n\t\t\t\tin_options.op1(baseProperty1);\n\t\t\t}\n\t\t\tif (in_options.op2) {\n\t\t\t\tin_options.op2(baseProperty2);\n\t\t\t}\n\n\t\t\t// Get the ChangeSets\n\t\t\tvar changeSet1 = new ChangeSet(baseProperty1.serialize({ dirtyOnly: true }));\n\t\t\tvar changeSet2 = baseProperty2.serialize({ dirtyOnly: true });\n\n\t\t\t// Perform the actual rebase\n\t\t\tvar conflicts = [];\n\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\n\t\t\tvar combinedChangeSet = new ChangeSet(initialChangeSet).clone();\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet1);\n\t\t\tcombinedChangeSet.applyChangeSet(changeSet2);\n\n\t\t\tif (in_options.compareToSequential) {\n\t\t\t\tif (in_options.op1) {\n\t\t\t\t\tin_options.op1(baseProperty3);\n\t\t\t\t}\n\t\t\t\tif (in_options.op2) {\n\t\t\t\t\tin_options.op2(baseProperty3);\n\t\t\t\t}\n\t\t\t\tvar finalChangeSet = baseProperty3.serialize({ dirtyOnly: false });\n\t\t\t\texpect(finalChangeSet).to.be.deep.equal(combinedChangeSet.getSerializedChangeSet());\n\t\t\t}\n\n\t\t\tif (in_options.checkResult) {\n\t\t\t\tin_options.checkResult(conflicts, changeSet2, combinedChangeSet);\n\t\t\t}\n\t\t};\n\n\t\tit(\"with a NOP should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent inserts should be possible\", function () {\n\t\t\ttestRebasing({\n\t\t\t\top1: insertUniqueNodeInRoot(),\n\t\t\t\top2: insertUniqueNodeInRoot(),\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with independent removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t\troot.insert(\"node2\", node2);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node2\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a modify and a remove should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: removeFirstNodeInRoot,\n\t\t\t\tcompareToSequential: true,\n\t\t\t});\n\t\t});\n\n\t\tit(\"with a remove and a modify should possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: removeFirstNodeInRoot,\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two compatible removes should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two indendent recursive modifies should be possible\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty2.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.be.empty;\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with two conflicting recursive modifies should be possible and report a conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"b\";\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\t_.values(root._getDynamicChildrenReadOnly())[0]._properties.stringProperty.value =\n\t\t\t\t\t\t\"a\";\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(\n\t\t\t\t\t\tchangeSet.modify[\"autodesk.tests:MixedNodeTestProperty-1.0.0\"].node1.String\n\t\t\t\t\t\t\t.stringProperty,\n\t\t\t\t\t).to.equal(\"a\");\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1.stringProperty\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with modify followed by remove+insert should work\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: modifyLeaf,\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: true,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.REMOVE_AFTER_MODIFY);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t\texpect(changeSet).to.have.all.keys(\"remove\", \"insert\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by modify should report conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.remove(\"node1\");\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\top2: modifyLeaf,\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.ENTRY_MODIFICATION_AFTER_REMOVE_INSERT,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with remove+insert followed by remove+insert should report conflict\", function () {\n\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\troot.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.remove(\"node\");\n\t\t\t\t\troot.insert(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.remove(\"node\");\n\t\t\t\t\troot.insert(\n\t\t\t\t\t\t\"node\",\n\t\t\t\t\t\tPropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\"),\n\t\t\t\t\t);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts should report conflict\", function () {\n\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\troot.insert(\"node1\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node1\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts of primitive types\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar string1 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring1.value = \"test1\";\n\t\t\t\t\troot.insert(\"entry\", string1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar string2 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring2.value = \"test2\";\n\t\t\t\t\troot.insert(\"entry\", string2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: \"test1\",\n\t\t\t\t\t\t\t\t\tvalue: \"test2\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(\"test2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\t// TODO: 'with conflicting inserts of primitive types' is identical to the below test. Why?\n\t\tit(\"with conflicting recursive modifies of primitive types should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar string1 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring1.value = \"test1\";\n\t\t\t\t\troot.insert(\"entry\", string1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar string2 = PropertyFactory.create(\"String\");\n\t\t\t\t\tstring2.value = \"test2\";\n\t\t\t\t\troot.insert(\"entry\", string2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: \"test1\",\n\t\t\t\t\t\t\t\t\tvalue: \"test2\",\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(\"test2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting recursive modifies of enums should be possible and report a conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar enum1 = PropertyFactory.create(\"autodesk.core:UnitsEnum-1.0.0\");\n\t\t\t\t\tenum1.value = 1;\n\t\t\t\t\troot.insert(\"entry\", enum1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar enum2 = PropertyFactory.create(\"autodesk.core:UnitsEnum-1.0.0\");\n\t\t\t\t\tenum2.value = 2;\n\t\t\t\t\troot.insert(\"entry\", enum2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(changeSet).to.deep.equal({\n\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\"enum<autodesk.core:UnitsEnum-1.0.0>\": {\n\t\t\t\t\t\t\t\tentry: {\n\t\t\t\t\t\t\t\t\toldValue: 1,\n\t\t\t\t\t\t\t\t\tvalue: 2,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(ChangeSet.ConflictType.COLLIDING_SET);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"entry\");\n\t\t\t\t\texpect(conflicts[0].conflictingChange).to.be.equal(2);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\n\t\tit(\"with conflicting inserts in a deep leaf should report a correct conflict\", function () {\n\t\t\ttestRebasing({\n\t\t\t\tprepare: function (root) {\n\t\t\t\t\tvar node = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.insert(\"node\", node);\n\t\t\t\t},\n\t\t\t\top1: function (root) {\n\t\t\t\t\tvar node1 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.resolvePath(\"node\").insert(\"node2\", node1);\n\t\t\t\t},\n\t\t\t\top2: function (root) {\n\t\t\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\t\t\t\t\troot.resolvePath(\"node\").insert(\"node2\", node2);\n\t\t\t\t},\n\t\t\t\tcompareToSequential: false,\n\t\t\t\tcheckResult: function (conflicts, changeSet) {\n\t\t\t\t\texpect(ChangeSet.isEmptyChangeSet(changeSet)).to.be.ok;\n\t\t\t\t\texpect(conflicts).to.have.length(1);\n\t\t\t\t\texpect(conflicts[0].type).to.be.equal(\n\t\t\t\t\t\tChangeSet.ConflictType.INSERTED_ENTRY_WITH_SAME_KEY,\n\t\t\t\t\t);\n\t\t\t\t\texpect(conflicts[0].path).to.be.equal(\"node.node2\");\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t});\n\n\tdescribe(\"Compatibility with ChangeSets from spec\", function () {\n\t\t// These are the ChangeSets from the discussion minutes document\n\t\t// after some cleanup, mainly missing parameters were added in inserts and\n\t\t// syntax corrections. Additionally, the Vector3 was renamed to autodesk.test:vector3-1.0.0 to avoid\n\t\t// conflicts with the inbuilt type\n\n\t\tvar insertChangeSet1 = {\n\t\t\tinsert: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 122,\n\t\t\t\t\t\t\t\"position.y\": 122,\n\t\t\t\t\t\t\t\"temperature\": 10,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint1: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\td23kjda: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 122,\n\t\t\t\t\t\t\t\"position.y\": 122,\n\t\t\t\t\t\t\t\"temperature\": 11,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"Float32\": {\n\t\t\t\t\tcompression: 0,\n\t\t\t\t},\n\t\t\t\t\"map<>\": {\n\t\t\t\t\tbirds: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\tPoint1: {\n\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thorses: {},\n\t\t\t\t\tforest: {},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet1 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"Float32\": {\n\t\t\t\t\t\t\t\"position.x\": 11,\n\t\t\t\t\t\t\t\"temperature\": 31,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\tnormal: {\n\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\tx: 0.5,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint2: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 1,\n\t\t\t\t\t\t\t\t\t\t\t\ty: 1,\n\t\t\t\t\t\t\t\t\t\t\t\tz: 1,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar modifyChangeSet3 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:point2d-1.0.0\": {\n\t\t\t\t\tmyPoint: {\n\t\t\t\t\t\t\"map<autodesk.test:vector3-1.0.0>\": {\n\t\t\t\t\t\t\tneighbours: {\n\t\t\t\t\t\t\t\tmodify: {\n\t\t\t\t\t\t\t\t\t\"autodesk.test:vector3-1.0.0\": {\n\t\t\t\t\t\t\t\t\t\tPoint2: {\n\t\t\t\t\t\t\t\t\t\t\tFloat32: {\n\t\t\t\t\t\t\t\t\t\t\t\tx: 2,\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removePreparationChangeSet1 = {\n\t\t\tinsert: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\trevitId: \"#23213\",\n\t\t\t\t\t\t\tname: \"Door\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removePreparationChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tinsert: {\n\t\t\t\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\t\t\t\tas2398d: {\n\t\t\t\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\t\t\t\trevitId: \"#2231\",\n\t\t\t\t\t\t\t\t\t\tname: \"Room\",\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tvar removeChangeSet1 = {\n\t\t\tremove: [\"dasdm23\"],\n\t\t};\n\n\t\tvar removeChangeSet2 = {\n\t\t\tmodify: {\n\t\t\t\t\"autodesk.test:SceneObject-1.0.0\": {\n\t\t\t\t\tdasdm23: {\n\t\t\t\t\t\tremove: [\"as2398d\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\n\t\tit(\"should be possible to insert properties with the example from the spec\", function () {\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Make sure all properties are as expected\n\t\t\texpect(rootProperty.getDynamicIds().length).to.equal(6);\n\t\t\texpect(rootProperty._getDynamicChildrenReadOnly()).to.have.all.keys(\n\t\t\t\t\"birds\",\n\t\t\t\t\"horses\",\n\t\t\t\t\"forest\",\n\t\t\t\t\"compression\",\n\t\t\t\t\"myPoint\",\n\t\t\t\t\"d23kjda\",\n\t\t\t);\n\t\t\texpect(rootProperty._properties.compression.value).to.equal(0);\n\t\t\tassert(rootProperty._properties.birds instanceof MapProperty);\n\t\t\tassert(rootProperty._properties.forest instanceof MapProperty);\n\t\t\tassert(rootProperty._properties.horses instanceof MapProperty);\n\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.x\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.y\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.temperature\").value).to.equal(10);\n\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.x\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.y\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.z\").value).to.equal(1);\n\n\t\t\tvar neighbours = rootProperty.resolvePath(\"myPoint.neighbours\");\n\t\t\tassert(neighbours.has(\"Point1\"));\n\t\t\texpect(neighbours.get(\"Point1\")._properties.x.value).to.equal(1);\n\t\t\texpect(neighbours.get(\"Point1\")._properties.y.value).to.equal(1);\n\t\t\texpect(neighbours.get(\"Point1\")._properties.z.value).to.equal(1);\n\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.position.x\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.position.y\").value).to.equal(122);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.temperature\").value).to.equal(11);\n\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.x\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.y\").value).to.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"d23kjda.normal.z\").value).to.equal(1);\n\n\t\t\t// Make sure serialization gives the same result as the initial ChangeSet\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: false })).to.deep.equal(insertChangeSet1);\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(insertChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the first modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet1);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.position.x\").value).to.equal(11);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.normal.x\").value).to.equal(0.5);\n\t\t\texpect(rootProperty.resolvePath(\"myPoint.temperature\").value).to.equal(31);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the second modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet2);\n\t\t\tvar point2 = rootProperty.resolvePath(\"myPoint.neighbours\").get(\"Point2\");\n\t\t\texpect(point2._properties.x.value).to.equal(1);\n\t\t\texpect(point2._properties.y.value).to.equal(1);\n\t\t\texpect(point2._properties.z.value).to.equal(1);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet2);\n\t\t});\n\n\t\tit(\"should be possible to use the third modify ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(insertChangeSet1);\n\t\t\trootProperty.applyChangeSet(modifyChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\trootProperty.applyChangeSet(modifyChangeSet3);\n\t\t\tvar point2 = rootProperty.resolvePath(\"myPoint.neighbours\").get(\"Point2\");\n\t\t\texpect(point2._properties.x.value).to.equal(2);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(modifyChangeSet3);\n\t\t});\n\n\t\tit(\"should be possible to use the first remove ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet1);\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the modify changeSet\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(1);\n\t\t\trootProperty.applyChangeSet(removeChangeSet1);\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(0);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(removeChangeSet1);\n\t\t});\n\n\t\tit(\"should be possible to use the first remove ChangeSet from the spec\", function () {\n\t\t\t// Prepare the initial state\n\t\t\tvar rootProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet1);\n\t\t\trootProperty.applyChangeSet(removePreparationChangeSet2);\n\n\t\t\t// Clean dirtiness\n\t\t\trootProperty.cleanDirty(\n\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.DIRTY |\n\t\t\t\t\tBaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t);\n\n\t\t\t// Apply the remove changeSet\n\t\t\texpect(rootProperty.resolvePath(\"dasdm23\").getDynamicIds().length).to.be.equal(1);\n\t\t\trootProperty.applyChangeSet(removeChangeSet2);\n\t\t\texpect(rootProperty.getDynamicIds().length).to.be.equal(1);\n\t\t\texpect(rootProperty.resolvePath(\"dasdm23\").getDynamicIds().length).to.be.equal(0);\n\n\t\t\t// Make sure the serialization gives the expected result\n\t\t\texpect(rootProperty.serialize({ dirtyOnly: true })).to.deep.equal(removeChangeSet2);\n\t\t});\n\t});\n\n\tdescribe(\"Make sure struct changes and path updates are signaled correctly\", function () {\n\t\tit(\"Should be possible to access dynamic nodes via propertis and paths\", function () {\n\t\t\tvar root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar newRoot = PropertyFactory.create(\"NodeProperty\");\n\n\t\t\t// Create a hierarchy of nodes\n\t\t\troot.insert(\"child1\", PropertyFactory.create(\"NodeProperty\"));\n\t\t\troot.insert(\"child2\", PropertyFactory.create(\"NodeProperty\"));\n\n\t\t\texpect(root._properties.child1.position).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.undefined;\n\n\t\t\t// Crate a dynamic object via a NodeProperty\n\t\t\tvar positionProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\troot._properties.child1.propertyNode.insert(\"position\", positionProperty);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"x\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"y\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\t\t\troot._properties.child1.position.propertyNode.insert(\n\t\t\t\t\"z\",\n\t\t\t\tPropertyFactory.create(\"Float32\"),\n\t\t\t);\n\n\t\t\t// Make sure paths resolve correctly\n\t\t\texpect(root._properties.child1.position).not.to.be.undefined;\n\t\t\texpect(root._properties.child1.position.propertyNode).to.be.an.instanceof(NodeProperty);\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.instanceof(NodeProperty);\n\n\t\t\t// assign values via the properties object (for NodeProperty)\n\t\t\troot._properties.child1.position.x.value = 1;\n\t\t\troot._properties.child1.position.y.value = 2;\n\t\t\troot._properties.child1.position.z.value = 3;\n\n\t\t\t// assign values via resolve path\n\t\t\troot.resolvePath(\"child1.position.x\").value = 3;\n\t\t\troot.resolvePath(\"child1.position.y\").value = 2;\n\t\t\troot.resolvePath(\"child1.position.z\").value = 1;\n\n\t\t\t// Check values\n\t\t\texpect(root._properties.child1.position.x.value).to.equal(3);\n\t\t\texpect(root._properties.child1.position.y.value).to.equal(2);\n\t\t\texpect(root._properties.child1.position.z.value).to.equal(1);\n\n\t\t\t// Crate a dynamic object via a template\n\t\t\tvar vec3Property = PropertyFactory.create(\"autodesk.test:vector3-1.0.0\");\n\t\t\troot._properties.child1.propertyNode.insert(\"vector\", vec3Property);\n\n\t\t\t// Make sure paths resolve correctly\n\t\t\texpect(root._properties.child1.vector).not.to.be.undefined;\n\t\t\texpect(root._properties.child1.vector.propertyNode).to.be.an.instanceof(BaseProperty);\n\t\t\texpect(root.resolvePath(\"child1.vector\")).to.be.instanceof(BaseProperty);\n\n\t\t\troot._properties.child1.vector.x.value = 1;\n\t\t\troot._properties.child1.vector.y.value = 2;\n\t\t\troot._properties.child1.vector.z.value = 3;\n\n\t\t\t// assign values via resolve path\n\t\t\troot.resolvePath(\"child1.vector.x\").value = 3;\n\t\t\troot.resolvePath(\"child1.vector.y\").value = 2;\n\t\t\troot.resolvePath(\"child1.vector.z\").value = 1;\n\n\t\t\t// Check values\n\t\t\texpect(root._properties.child1.vector.x.value).to.equal(3);\n\t\t\texpect(root._properties.child1.vector.y.value).to.equal(2);\n\t\t\texpect(root._properties.child1.vector.z.value).to.equal(1);\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(root);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(root);\n\t\t\texpect(vec3Property.getRoot()).to.equal(root);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(root);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/child1.position\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/child1.position.x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/child1.vector\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/child1.vector.x\");\n\n\t\t\t// Check deletion\n\t\t\troot._properties.child1.propertyNode.remove(\"position\");\n\t\t\troot._properties.child1.propertyNode.remove(\"vector\");\n\n\t\t\texpect(root._properties.child1.position).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.position\")).to.be.undefined;\n\n\t\t\texpect(root._properties.child1.vector).to.be.undefined;\n\t\t\texpect(root.resolvePath(\"child1.vector\")).to.be.undefined;\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(positionProperty);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(positionProperty);\n\t\t\texpect(vec3Property.getRoot()).to.equal(vec3Property);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(vec3Property);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/x\");\n\n\t\t\t// Check addition to a new property root under a different key\n\t\t\tnewRoot.insert(\"newPosition\", positionProperty);\n\t\t\tnewRoot.insert(\"newvector\", vec3Property);\n\n\t\t\t// Check roots\n\t\t\texpect(positionProperty.getRoot()).to.equal(newRoot);\n\t\t\texpect(positionProperty._properties.x.getRoot()).to.equal(newRoot);\n\t\t\texpect(vec3Property.getRoot()).to.equal(newRoot);\n\t\t\texpect(vec3Property._properties.x.getRoot()).to.equal(newRoot);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal(\"/newPosition\");\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal(\"/newPosition.x\");\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal(\"/newvector\");\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal(\"/newvector.x\");\n\n\t\t\t// Check keys with characters that require quotations\n\t\t\tnewRoot.remove(\"newPosition\");\n\t\t\tnewRoot.remove(\"newvector\");\n\t\t\tnewRoot.insert('new\"Position', positionProperty);\n\t\t\tnewRoot.insert(\"new.Vector\", vec3Property);\n\n\t\t\t// Check paths\n\t\t\texpect(positionProperty.getAbsolutePath()).to.equal('/\"new\\\\\"Position\"');\n\t\t\texpect(positionProperty._properties.x.getAbsolutePath()).to.equal('/\"new\\\\\"Position\".x');\n\t\t\texpect(newRoot.resolvePath('\"new\\\\\"Position\".x')).to.equal(\n\t\t\t\tpositionProperty._properties.x,\n\t\t\t);\n\t\t\texpect(vec3Property.getAbsolutePath()).to.equal('/\"new.Vector\"');\n\t\t\texpect(vec3Property._properties.x.getAbsolutePath()).to.equal('/\"new.Vector\".x');\n\t\t\texpect(newRoot.resolvePath('\"new.Vector\".x')).to.equal(vec3Property._properties.x);\n\n\t\t\tnewRoot.remove('new\"Position');\n\n\t\t\t// Path resolution for named properties should return the correct path\n\t\t\tvar namedProperty = PropertyFactory.create(\"NamedProperty\");\n\t\t\tvar nodeProperty = PropertyFactory.create(\"NodeProperty\");\n\t\t\tnodeProperty.insert(namedProperty);\n\t\t\texpect(namedProperty.getAbsolutePath()).to.equal(\"/\" + namedProperty.getGuid());\n\t\t\texpect(nodeProperty.resolvePath(namedProperty.getGuid())).to.equal(namedProperty);\n\n\t\t\t// Try multiple levels\n\t\t\tvar leaf = PropertyFactory.create(\"NodeProperty\");\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(leaf);\n\t\t\tvar map1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap1.insert(\"entry\", leaf);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map1);\n\n\t\t\tvar map2 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap2.insert(\"entry\", map1);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map2);\n\n\t\t\tvar map3 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tmap3.insert(\"entry\", map2);\n\t\t\texpect(leaf.resolvePath(\"/\")).to.equal(map3);\n\t\t});\n\t});\n\n\tit(\"should correctly clean templates inheriting from NamedNodeProperty\", function () {\n\t\tvar property = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\tvar childProperty = property.get(\"stringProperty\");\n\t\tchildProperty.value = \"changed\";\n\t\texpect(childProperty.isDirty()).to.be.true;\n\t\tproperty.cleanDirty();\n\t\texpect(property.isDirty()).to.be.false;\n\t\texpect(childProperty.isDirty()).to.be.false;\n\t});\n\n\tdescribe(\"Make sure to have appropriate types for ids given to nodeProperty when inserting\", function () {\n\t\tit(\"should be possible for the id passed to be a string\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\tnode3.insert(\"node1\", node2);\n\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\texpect(node1.resolvePath(\"node.node1.stringProperty\").value).to.equal(\"test\");\n\t\t\texpect(node3.resolvePath(\"node1.stringProperty\").value).to.equal(\"test\");\n\t\t\tdone();\n\t\t});\n\n\t\tit(\"should be possible for the id passed to be a number\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\tnode3.insert(1122, node2);\n\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\texpect(node1.resolvePath(\"node.1122.stringProperty\").value).to.equal(\"test\");\n\t\t\texpect(node3.resolvePath(\"1122.stringProperty\").value).to.equal(\"test\");\n\t\t\tdone();\n\t\t});\n\n\t\tit(\"should throw an error when the id passed is an object\", function (done) {\n\t\t\tvar node1 = PropertyFactory.create(\"NodeProperty\");\n\t\t\tvar node2 = PropertyFactory.create(\"autodesk.tests:MixedNamedNodeProperty-1.0.0\");\n\t\t\tvar node3 = PropertyFactory.create(\"autodesk.tests:MixedNodeTestProperty-1.0.0\");\n\n\t\t\tnode1.insert(\"node\", node3);\n\t\t\ttry {\n\t\t\t\tnode3.insert({ foo: \"bar\" }, node2);\n\t\t\t\tnode2._properties.stringProperty.value = \"test\";\n\t\t\t} catch (e) {\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"_coveredByPaths\", function () {\n\t\tthis.timeout(500);\n\t\tlet PathHelper, getPathCoverageSpy, paths, prop, propPath;\n\n\t\tbefore(function () {\n\t\t\tPathHelper = require(\"@fluid-experimental/property-changeset\").PathHelper;\n\t\t});\n\n\t\tbeforeEach(function () {\n\t\t\tgetPathCoverageSpy = sinon.spy(PathHelper, \"getPathCoverage\");\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tgetPathCoverageSpy.restore();\n\t\t});\n\n\t\tafter(function () {});\n\n\t\tit(\"should succeed if property is included in a path 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"String\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in a path 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\");\n\t\t\tpropPath = \"a.b.c\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is a primitive collection included in a path\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\", \"array\");\n\t\t\tpropPath = \"a.b.c.d\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Bool\");\n\t\t\tpropPath = \"b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"Float32\");\n\t\t\tpropPath = \"b.f.g\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path but have common root 1\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"map\");\n\t\t\tpropPath = \"a.h\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not included in any path but have common root 2\", function () {\n\t\t\tpaths = [\"a.b\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tpropPath = \"a.i.j\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"String\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive property 2\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive collection property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"Int32\", \"map\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a primitive collection property 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.c\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"array\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a non-primitive collection property 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\", \"map\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if path goes through a non-primitive collection property 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.c\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NamedProperty\", \"set\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"d\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 2\", function () {\n\t\t\tpaths = [\"a.b.c\", \"z\", \"a.b.d\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", \"h\");\n\t\t\td.insert(\"i\", \"i\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 3\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", PropertyFactory.create(\"String\"));\n\t\t\td.insert(\"i\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(5);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths 4\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet b = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"b\", b);\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tb.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tlet d = PropertyFactory.create(\"NodeProperty\");\n\t\t\tb.insert(\"d\", d);\n\t\t\td.insert(\"h\", PropertyFactory.create(\"String\"));\n\t\t\td.insert(\"i\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(6);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b\", paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths through map 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d.z\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"c\", \"c\");\n\t\t\tprop.insert(\"d\", \"d\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(3);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c\", \"a.b.d.z\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c\", \"a.b.d.z\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should succeed if property is included in multiple paths through map 2\", function () {\n\t\t\tpaths = [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\", \"a.z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet c = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet d = PropertyFactory.create(\"String\", \"map\");\n\t\t\tprop.insert(\"c\", c);\n\t\t\tc.insert(\"f\", PropertyFactory.create(\"String\"));\n\t\t\tc.insert(\"g\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"d\", d);\n\t\t\td.insert(\"h\", \"h\");\n\t\t\td.insert(\"i\", \"i\");\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.true;\n\t\t\texpect(getPathCoverageSpy.callCount).to.equal(5);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.c\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(\n\t\t\t\tgetPathCoverageSpy.calledWith(\"a.b.d\", [\"a.b.c.f\", \"a.b.c\", \"a.b.d.h\", \"a.b.d.i\"]),\n\t\t\t).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.h\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t\texpect(getPathCoverageSpy.calledWith(\"a.b.d.i\", [\"a.b.d.h\", \"a.b.d.i\"])).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not completely included in multiple paths 1\", function () {\n\t\t\tpaths = [\"a.b.c\", \"a.b.d\", \"z\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"e\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.be.above(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\n\t\tit(\"should fail if property is not completely included in multiple paths 2\", function () {\n\t\t\tpaths = [\"z\", \"a.b.d\", \"a.b.c\"];\n\t\t\tprop = PropertyFactory.create(\"NodeProperty\");\n\t\t\tprop.insert(\"e\", PropertyFactory.create(\"String\"));\n\t\t\tprop.insert(\"c\", PropertyFactory.create(\"String\"));\n\t\t\tpropPath = \"a.b\";\n\t\t\texpect(prop._coveredByPaths(propPath, paths)).to.be.false;\n\t\t\texpect(getPathCoverageSpy.callCount).to.be.above(1);\n\t\t\texpect(getPathCoverageSpy.calledWith(propPath, paths)).to.be.true;\n\t\t});\n\t});\n});\n"]}