@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.
- package/dist/test/properties/arrayProperty.spec.js +11 -12
- package/dist/test/properties/arrayProperty.spec.js.map +1 -1
- package/dist/test/properties/baseProperty.spec.js +4 -1
- package/dist/test/properties/baseProperty.spec.js.map +1 -1
- package/dist/test/properties/containerProperty.spec.js +1 -1
- package/dist/test/properties/containerProperty.spec.js.map +1 -1
- package/dist/test/properties/customArrayProperty.spec.js +2 -2
- package/dist/test/properties/customArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64ArrayProperty.spec.js +4 -4
- package/dist/test/properties/int64ArrayProperty.spec.js.map +1 -1
- package/dist/test/properties/int64Property.spec.js +2 -2
- package/dist/test/properties/int64Property.spec.js.map +1 -1
- package/dist/test/properties/isLeafNode.spec.js +1 -7
- package/dist/test/properties/isLeafNode.spec.js.map +1 -1
- package/dist/test/properties/namedNodeProperty.spec.js +1 -2
- package/dist/test/properties/namedNodeProperty.spec.js.map +1 -1
- package/dist/test/properties/nodeProperty.spec.js +1 -1
- package/dist/test/properties/nodeProperty.spec.js.map +1 -1
- package/dist/test/properties/stringProperty.spec.js +6 -5
- package/dist/test/properties/stringProperty.spec.js.map +1 -1
- package/dist/test/properties/valueMapProperty.spec.js +8 -3
- package/dist/test/properties/valueMapProperty.spec.js.map +1 -1
- package/dist/test/properties/valueProperty.spec.js +5 -1
- package/dist/test/properties/valueProperty.spec.js.map +1 -1
- package/dist/test/propertyFactory.spec.js +15 -10
- package/dist/test/propertyFactory.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/utils.spec.js +13 -7
- package/dist/test/utils.spec.js.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrayProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/arrayProperty.spec.js"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,+BAA+B;AAE/B;;;GAGG;AAEH,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,wCAAwC,CAAC,CAAC;AACxE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC,SAAS,CAAC;AACzE,MAAM,EACL,4BAA4B,EAC5B,cAAc,GACd,GAAG,OAAO,CAAC,qCAAqC,CAAC,CAAC;AAEnD,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtB,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC1C,MAAM,QAAQ,GAAG,CAAC,CAAC,SAAS,CAAC;AAC7B,MAAM,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC;AAErC,IAAI,oBAAoB,CAAC;AACzB,IAAI,SAAS,CAAC;AACd,IAAI,UAAU,GAAG,KAAK,CAAC;AACvB,IAAI,UAAU,CAAC;AACf,IAAI,SAAS,CAAC;AAEd,IAAI,eAAe,GAAG;IACrB,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,QAAQ;IACX,CAAC,EAAE,QAAQ;CACX,CAAC;AAEF,IAAI,qBAAqB,GAAG,UAAU,OAAO,EAAE,eAAe;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAEF,IAAI,aAAa,GAAG,UAAU,GAAG,EAAE,GAAG;IACrC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC;QAC/B,OAAO,KAAK,CAAC;IACd,CAAC;IACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjE,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC,CAAC;AAEF,IAAI,gBAAgB,GAAG;IACtB,MAAM,EAAE,uCAAuC;IAC/C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CAC5E,CAAC;AAEF,IAAI,eAAe,GAAG;IACrB,MAAM,EAAE,sCAAsC;IAC9C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CAC3E,CAAC;AAEF,IAAI,aAAa,GAAG;IACnB,MAAM,EAAE,oCAAoC;IAC5C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CACzE,CAAC;AAEF,IAAI,UAAU,GAAG;IAChB,MAAM,EAAE,iCAAiC;IACzC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;CAC9C,CAAC;AAEF,IAAI,eAAe,GAAG;IACrB,MAAM,EAAE,sCAAsC;IAC9C,UAAU,EAAE;QACX,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iCAAiC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE;KACtF;CACD,CAAC;AAEF,IAAI,sBAAsB,GAAG;IAC5B,MAAM,EAAE,uCAAuC;IAC/C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CAC/D,CAAC;AAEF,IAAI,kCAAkC,GAAG;IACxC,MAAM,EAAE,4CAA4C;IACpD,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,iCAAiC,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CACzF,CAAC;AAEF,IAAI,oBAAoB,GAAG;IAC1B,MAAM,EAAE,kCAAkC;IAC1C,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;CACpE,CAAC;AAEF,IAAI,uBAAuB,GAAG;IAC7B,MAAM,EAAE,sCAAsC;IAC9C,UAAU,EAAE;QACX;YACC,EAAE,EAAE,MAAM;YACV,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;SACpE;KACD;CACD,CAAC;AAEF,IAAI,eAAe,GAAG;IACrB,MAAM,EAAE,kCAAkC;IAC1C,UAAU,EAAE;QACX;YACC,EAAE,EAAE,MAAM;YACV,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAC/C;KACD;CACD,CAAC;AACF,IAAI,gBAAgB,GAAG;IACtB,MAAM,EAAE,mCAAmC;IAC3C,UAAU,EAAE;QACX;YACC,EAAE,EAAE,MAAM;YACV,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;SAChD;KACD;CACD,CAAC;AACF,IAAI,gBAAgB,GAAG;IACtB,MAAM,EAAE,mCAAmC;IAC3C,UAAU,EAAE;QACX,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,kCAAkC,EAAE;QAC9D,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,mCAAmC,EAAE;KAC/D;CACD,CAAC;AAEF,IAAI,oBAAoB,GAAG;IAC1B,MAAM,EAAE,mCAAmC;IAC3C,UAAU,EAAE;QACX,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,kCAAkC,EAAE,OAAO,EAAE,OAAO,EAAE;KAC/E;CACD,CAAC;AACF,IAAI,qBAAqB,GAAG;IAC3B,MAAM,EAAE,oCAAoC;IAC5C,UAAU,EAAE;QACX,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,mCAAmC,EAAE,OAAO,EAAE,OAAO,EAAE;KAChF;CACD,CAAC;AAEF,QAAQ,CAAC,eAAe,EAAE;IACzB;;OAEG;IACH,MAAM,CAAC;QACN,eAAe,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAClD,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9C,eAAe,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QACxC,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7C,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7C,eAAe,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC3C,eAAe,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;QACpD,eAAe,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC;QAChE,eAAe,CAAC,WAAW,CAAC,uBAAuB,CAAC,CAAC;QACrD,eAAe,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;QAClD,eAAe,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QAC7C,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9C,eAAe,CAAC,WAAW,CAAC,gBAAgB,CAAC,CAAC;QAC9C,eAAe,CAAC,WAAW,CAAC,qBAAqB,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,oCAAoC,EAAE;QAC9C,IAAI,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC;QACxE,MAAM,CAAC;YACN,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC;YAC9E,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YACxE,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YACxE,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YACxE,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YACxE,OAAO,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE;YACrE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE;YAC1C,MAAM,CAAC;gBACN,OAAO,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,CAAC;gBACN,OAAO,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+BAA+B,EAAE;YACnC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,IAAI,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,YAAY,CAAC;YACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE;YAC/E,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE9B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE;YACtF,IAAI,IAAI,GAAG,eAAe,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;YAClD,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACpD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAC7B,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACpC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAE9B,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACtB,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7B,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC/B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,UAAU,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACjD,IAAI,CAAC,KAAK,EAAE,CAAC;QACd,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE;YAC5D,IAAI,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC;iBAC9E,WAAW,CAAC,OAAO,CAAC;YACtB,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YACnC,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE;YAC7C,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,WAAW;iBACpF,OAAO,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,uCAAuC,EAAE;YAC3C,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,WAAW;iBACpF,OAAO,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,MAAM,CACL,QAAQ;iBACN,GAAG,CAAC;gBACJ,WAAW,CAAC,EAAE;gBACd,SAAS;gBACT,CAAC;gBACD,MAAM;gBACN,WAAW,CAAC,EAAE;gBACd,WAAW,CAAC,EAAE;gBACd,CAAC;gBACD,MAAM;gBACN,MAAM;aACN,CAAC;iBACD,QAAQ,EAAE,CACZ,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,qCAAqC,EAAE;YACzC,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClD,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC;YAC9E,IAAI,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC;YAC/C,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;YACvE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE;YACxF,oBAAoB;YACpB,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;YACnF,0BAA0B;YAC1B,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACjF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE;YACtB,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAClC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE;YACjD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;YAC/E,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,WAAW;iBACpF,OAAO,CAAC;YACV,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC7B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC3E,eAAe,CACf,CAAC;YACF,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC3E,WAAW,CACX,CAAC;YACF,MAAM,CACL,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAC5E,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE;YAClD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAE1B,OAAO,CAAC,SAAS,CAAC;gBACjB,CAAC,EAAE;oBACF,IAAI,EAAE,SAAS;iBACf;aACD,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBACzC;oBACC,IAAI,EAAE,SAAS;iBACf;gBACD;oBACC,IAAI,EAAE,EAAE;iBACR;aACD,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+DAA+D,EAAE;YACnE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAClD,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kFAAkF,EAAE;YACtF,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE;YAC/C,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE;YAC3F,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC/B,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClD,WAAW;gBACX,WAAW;gBACX,WAAW;aACX,CAAC,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE;YACpF,IAAI,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC;iBACvF,WAAW,CAAC,IAAI,CAAC;YACnB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC5E,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC7E,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC5E,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC7E,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAE5E,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAE1C,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACxD,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACjC,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,cAAc,CAAC,GAAG,EAAE,CAAC;YACrB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACnB,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yFAAyF,EAAE;YAC7F,IAAI,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,4CAA4C,CAAC;iBACvF,WAAW,CAAC,IAAI,CAAC;YACnB,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC5E,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC7E,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,cAAc,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1C,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACpD,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YACrD,MAAM,CAAC;gBACN,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE;YAC3F,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0GAA0G,EAAE;YAC9G,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE;YAC9D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAC7E,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kCAAkC,EAAE;YACtC,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACpD,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE;YAC7E,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,IAAI,YAAY,GAAG;gBAClB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAC7B,CAAC,CAAC;YACF,MAAM,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE;YAC5D,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,EAAE;gBACX,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iEAAiE,EAAE;YACrE,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,EAAE;gBACX,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,GAAG,wBAAwB,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE;YACvD,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE;YACnD,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,GAAG,EAAE;gBACX,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE;YACnD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,SAAS,CAAC;gBACjB,CAAC,EAAE;oBACF,IAAI,EAAE,SAAS;iBACf;aACD,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAE/E,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE;YACzD,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;YACrD,OAAO,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YACjC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YAC3D,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACvF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mFAAmF,EAAE;YACvF,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QACzC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mGAAmG,EAAE;YACvG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1B,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;gBAClD,WAAW;gBACX,WAAW;gBACX,WAAW;aACX,CAAC,CAAC;YACH,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC;YACT,OAAO,CAAC,KAAK,EAAE,CAAC;QACjB,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE;QAC1C,IAAI,gBAAgB,CAAC;QACrB,MAAM,CAAC;YACN,gBAAgB,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC;iBAChF,WAAW,CAAC,IAAI,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE;YACpD,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5C,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4BAA4B,EAAE;YAChC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE;YAChD,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,gBAAgB,CAAC,kBAAkB,EAAE,CAAC;YACrD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+EAA+E,EAAE;YACnF,MAAM,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YAClE,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE;YACrD,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE;YACtB,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE;YAChE,kEAAkE;YAClE,IAAI,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACzC,IAAI,CAAC,IAAI,EAAE,CAAC;YACb,CAAC;YACD,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC;iBAC/E,WAAW,CAAC,IAAI,CAAC;YACnB,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC,WAAW,CAAC,SAAS,CAAC;gBACrB,CAAC,EAAE,EAAE;gBACL,CAAC,EAAE,CAAC;aACJ,CAAC,CAAC;YAEH,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAE1D,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC;gBACN,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uFAAuF,EAAE;YAC3F,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5C,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iFAAiF,EAAE;YACrF,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5C,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oFAAoF,EAAE;YACxF,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,WAAW;iBACvF,IAAI,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE;YAC9D,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC;QAChD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4EAA4E,EAAE;YAChF,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE;YAC7E,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC/C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wFAAwF,EAAE;YAC5F,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACjE,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE;YAClD,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,gBAAgB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,WAAW;iBACvF,IAAI,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YAClB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE;YAC1D,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,WAAW;iBACvF,IAAI,CAAC;YACP,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0DAA0D,EAAE;YAC9D,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,WAAW;iBACvF,IAAI,CAAC;YACP,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACxC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE;YACvD,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,WAAW;iBACrF,IAAI,CAAC;YACP,SAAS,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACpC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACtC,IAAI,WAAW,GAAG;gBACjB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC,CAAC;YACF,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE;YAC1D,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC;iBAC/E,WAAW,CAAC,IAAI,CAAC;YACnB,WAAW,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvC,WAAW,CAAC,SAAS,CAAC;gBACrB,CAAC,EAAE,EAAE;gBACL,CAAC,EAAE,EAAE;aACL,CAAC,CAAC;YACH,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxC,IAAI,SAAS,GAAG;gBACf,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC;YACF,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6EAA6E,EAAE;YACjF,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qFAAqF,EAAE;YACzF,gBAAgB,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC9C,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAC5B,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,SAAS,CAAC;YACT,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kCAAkC,EAAE;QAC5C,EAAE,CAAC,+BAA+B,EAAE;YACnC,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,oCAAoC,CAAC;iBAC5E,WAAW,CAAC,IAAI,CAAC;YACnB,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAEvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC3C,MAAM,CAAC;gBACN,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAEpB,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAE3C,WAAW,CAAC,GAAG,EAAE,CAAC;YAClB,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAEhD,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACzB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE;YACrD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE;YACtD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxF,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yEAAyE,EAAE;YAC7E,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAC5D,GAAG,CAAC,UAAU,GAAG,mDAAmD,CACpE,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2EAA2E,EAAE;YAC/E,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;YACxF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CACtD,GAAG,CAAC,UAAU,GAAG,mDAAmD,CACpE,CAAC;YACF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAC5E,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2DAA2D,EAAE;QACrE,EAAE,CAAC,8CAA8C,EAAE,UAAU,IAAI;YAChE,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACJ,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,WAAW;qBAChF,OAAO,CAAC;gBAEV,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACrB,CAAC,CAAC;gBAEH,SAAS,CAAC,UAAU,EAAE,CAAC;gBAEvB,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACrB,CAAC,CAAC;gBAEH,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBACtB,CAAC,CAAC;gBAEH,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACxB,CAAC,CAAC;gBAEH,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;iBAChB,CAAC,CAAC;gBAEH,SAAS,CAAC,cAAc,CAAC;oBACxB,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;iBAClB,CAAC,CAAC;YACJ,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;oBAAS,CAAC;gBACV,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;oBAClD,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;wBACX,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;qBACX;oBACD,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;iBACtB,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE;YACzC,IAAI,IAAI,GAAG;gBACV,gBAAgB,EAAE;oBACjB,KAAK,EAAE;wBACN,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvB;iBACD;aACD,CAAC;YACF,IAAI,GAAG,GAAG;gBACT,gBAAgB,EAAE;oBACjB,KAAK,EAAE;wBACN,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;qBACvB;iBACD;aACD,CAAC;YACF,IAAI,aAAa,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;YACxC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,EAAE,GAAG,aAAa,CAAC,sBAAsB,EAAE,CAAC;YAChD,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChE,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,2BAA2B;YAC3F,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,4BAA4B;QAC7F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,UAAU,IAAI;YAClG,IAAI,KAAK,CAAC;YACV,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,+EAA+E;YACrG,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,CAAC,CAAC,CAAC;gBAEnD,IAAI,CAAC;oBACJ,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,WAAW;yBAChF,OAAO,CAAC;oBAEV,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;oBACzE,SAAS,CAAC,UAAU,EAAE,CAAC;oBACvB,IAAI,kBAAkB,CAAC;oBAEvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;wBAC/B,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC;wBACtC,IAAI,UAAU,GAAG,QAAQ,CAAC;wBAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;wBAEjB,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;4BAC5B,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;4BACrE,QAAQ,GAAG,IAAI,CAAC,GAAG,CAClB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAChD,kBAAkB,GAAG,CAAC,CACtB,CAAC;wBACH,CAAC;wBAED,IAAI,QAAQ,GACX,CAAC;4BACD,IAAI,CAAC,GAAG,CACP,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC,EAC7D,kBAAkB,GAAG,QAAQ,GAAG,CAAC,CACjC,CAAC;wBAEH,IAAI,aAAa,GAAG,EAAE,CAAC;wBAEvB,QAAQ,UAAU,EAAE,CAAC;4BACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;gCACf,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;gCACnD,MAAM;4BACP,CAAC;4BACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gCACf,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;gCAC/B,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;oCAC9B,QAAQ;oCACR,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;iCAClE,CAAC,CAAC;gCACH,MAAM;4BACP,CAAC;4BACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gCACf,aAAa,CAAC,UAAU,CAAC,GAAG;oCAC3B;wCACC,QAAQ;wCACR,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;qCAC1E;iCACD,CAAC;gCACF,MAAM;4BACP,CAAC;4BACD,aAAa;wBACd,CAAC;wBACD,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;wBAExC,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC;6BAC5E,WAAW,CAAC,OAAO,CAAC;wBACtB,aAAa,CAAC,cAAc,CAAC;4BAC5B,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;yBAC1C,CAAC,CAAC;wBACH,aAAa,CAAC,UAAU,EAAE,CAAC;wBAC3B,aAAa,CAAC,cAAc,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC;wBAE3D,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,CAAC;4BAC9C,OAAO,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;4BAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;4BAC7B,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC;4BAC3C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAAC;4BAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,CAAC;4BAChD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;4BAC1D,UAAU,GAAG,IAAI,CAAC;4BAClB,MAAM;wBACP,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACZ,KAAK,GAAG,CAAC,CAAC;gBACX,CAAC;wBAAS,CAAC;oBACV,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACrC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBACnC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACnC,CAAC;YACF,CAAC;YACD,IAAI,EAAE,CAAC;QACR,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,mBAAmB,EAAE;QAC7B,2FAA2F;QAC3F,2CAA2C;QAC3C,EAAE,CAAC,uDAAuD,EAAE;YAC3D,IAAI,YAAY,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC;iBAChF,WAAW,CAAC,IAAI,CAAC;YAEnB,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACxC,MAAM,CAAC;gBACN,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,0FAA0F;YAC1F,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,0BAA0B;YAC7E,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE9D,oBAAoB;YACpB,gEAAgE;YAChE,wEAAwE;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE;YAC3D,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,sCAAsC,CAAC;iBAChF,WAAW,CAAC,IAAI,CAAC;YAEnB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC1C,MAAM,CAAC;gBACN,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,0FAA0F;YAC1F,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/D,oBAAoB;YACpB,2FAA2F;YAC3F,wEAAwE;QACzE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qDAAqD,EAAE;YACzD,IAAI,aAAa,GAAG,eAAe,CAAC,MAAM,CAAC,sCAAsC,CAAC;iBAChF,WAAW,CAAC,IAAI,CAAC;YAEnB,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5D,MAAM,CAAC;gBACN,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAEnB,0FAA0F;YAC1F,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAE/D,oBAAoB;YACpB,sBAAsB;YACtB,mFAAmF;YACnF,sBAAsB;YACtB,wEAAwE;QACzE,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wDAAwD,EAAE;QAClE,EAAE,CAAC,uCAAuC,EAAE,UAAU,IAAI;YACzD,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACJ,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,WAAW;qBAChF,OAAO,CAAC;gBAEV,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpD,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACtE,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACxD,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/C,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAClD,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC/C,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;oBAAS,CAAC;gBACV,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;oBAClD,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;iBACjD,CAAC,CAAC;gBACH,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gFAAgF,EAAE,UAAU,IAAI;YAClG,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACJ,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,WAAW;qBAChF,OAAO,CAAC;gBACV,IAAI,kBAAkB,GAAG,CAAC,CAAC;gBAC3B,MAAM,MAAM,GAAG,IAAI,4BAA4B,CAAC,CAAC,CAAC,CAAC;gBAEnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;oBAC/B,kBAAkB,GAAG,SAAS,CAAC,MAAM,CAAC;oBACtC,IAAI,UAAU,GAAG,QAAQ,CAAC;oBAC1B,IAAI,QAAQ,GAAG,CAAC,CAAC;oBAEjB,IAAI,kBAAkB,GAAG,CAAC,EAAE,CAAC;wBAC5B,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;wBACnE,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC;oBACxE,CAAC;oBAED,IAAI,QAAQ,GACX,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,kBAAkB,GAAG,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC;oBAC1E,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;wBAClB,QAAQ,GAAG,CAAC,CAAC;oBACd,CAAC;oBAED,IAAI,aAAa,GAAG,EAAE,CAAC;oBAEvB,QAAQ,UAAU,EAAE,CAAC;wBACpB,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACf,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;4BACnD,MAAM;wBACP,CAAC;wBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACf,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;4BAC/B,aAAa,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC;gCAC9B,QAAQ;gCACR,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC;6BAChE,CAAC,CAAC;4BACH,MAAM;wBACP,CAAC;wBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;4BACf,aAAa,CAAC,UAAU,CAAC,GAAG;gCAC3B,CAAC,QAAQ,EAAE,qBAAqB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;6BACnD,CAAC;4BACF,MAAM;wBACP,CAAC;wBACD,aAAa;oBACd,CAAC;oBACD,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;gBACzC,CAAC;YACF,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;oBAAS,CAAC;gBACV,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACrC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClC,IAAI,SAAS,CAAC,kBAAkB,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/C,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAC9D,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC,CAC1D,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE;QACpC,IAAI,uBAAuB,GAAG,UAAU,kBAAkB,EAAE,SAAS,EAAE,iBAAiB;YACvF,oCAAoC;YACpC,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAEtD,qCAAqC;YACrC,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAEtD,2EAA2E;YAC3E,IAAI,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC;YACvB,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC;YAEtD,uCAAuC;YACvC,SAAS,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAExE,6CAA6C;YAC7C,SAAS,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,iBAAiB,EAAE,CAAC;gBACvB,mDAAmD;gBACnD,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YAChC,CAAC;iBAAM,CAAC;gBACP,uDAAuD;gBACvD,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACzE,CAAC;YAED,0BAA0B;YAC1B,SAAS,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,kBAAkB,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAEjD,mEAAmE;YACnE,SAAS,CAAC,UAAU,EAAE,CAAC;YACvB,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,kBAAkB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC;QAEF,EAAE,CAAC,+BAA+B,EAAE;YACnC,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAE5D,IAAI,kBAAkB,GAAG,UAAU,MAAM,EAAE,iBAAiB;gBAC3D,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBAC9E,MAAM,CAAC,WAAW,CAAC,kBAAkB,EAAE,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAC/D,MAAM,CACL,WAAW,CAAC,SAAS,CAAC;oBACrB,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,cAAc;iBAC/D,CAAC,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACnC,MAAM,CACL,WAAW,CAAC,SAAS,CAAC;oBACrB,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,YAAY;iBAC7D,CAAC,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpC,CAAC,CAAC;YAEF,uBAAuB,CAAC,kBAAkB,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE;YAC5B,IAAI,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;YAEnF,IAAI,sBAAsB,GAAG,UAAU,OAAO;gBAC7C,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC7B,OAAO;wBACN,MAAM,EAAE;4BACP,IAAI,EAAE,CAAC;yBACP;wBACD,MAAM,EAAE,iCAAiC;qBACzC,CAAC;gBACH,CAAC,CAAC,CAAC;YACJ,CAAC,CAAC;YAEF,IAAI,kBAAkB,GAAG,UAAU,MAAM,EAAE,iBAAiB;gBAC3D,SAAS,CAAC,WAAW,CACpB,MAAM,CAAC,MAAM,KAAK,CAAC;oBAClB,CAAC,CAAC;wBACA,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC7C;oBACF,CAAC,CAAC,EAAE,CACL,CAAC;gBACF,MAAM,CACL,SAAS,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC;oBAC7C,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACjC,CAAC,CAAC,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAExB,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;oBAC9B,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,sBAAsB,CACtD,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC9B,CAAC;gBACH,CAAC;gBAED,MAAM,CACL,SAAS,CAAC,SAAS,CAAC;oBACnB,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,cAAc;iBAC/D,CAAC,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;gBACnC,MAAM,CACL,SAAS,CAAC,SAAS,CAAC;oBACnB,SAAS,EAAE,IAAI;oBACf,aAAa,EAAE,YAAY,CAAC,oBAAoB,CAAC,YAAY;iBAC7D,CAAC,CACF,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpC,CAAC,CAAC;YAEF,uBAAuB,CAAC,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uCAAuC,EAAE;QACjD,EAAE,CAAC,wFAAwF,EAAE,UAAU,IAAI;YAC1G,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACJ,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC,WAAW;qBAChF,OAAO,CAAC;gBAEV,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;gBAC5E,wBAAwB;gBACxB,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC7C,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC9C,CAAC,CAAC;gBAEH,8BAA8B;gBAC9B,IAAI,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,CAAC;gBAC5E,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;gBAErD,iCAAiC;gBACjC,UAAU,CAAC,UAAU,CACpB,YAAY,CAAC,oBAAoB,CAAC,KAAK;oBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;gBACF,UAAU,CAAC,UAAU,CACpB,YAAY,CAAC,oBAAoB,CAAC,KAAK;oBACtC,YAAY,CAAC,oBAAoB,CAAC,cAAc,CACjD,CAAC;gBAEF,+DAA+D;gBAC/D,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC7C,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,CAAC,CAAC;wBACN,CAAC,CAAC,EAAE,CAAC,CAAC;wBACN,CAAC,CAAC,EAAE,CAAC,CAAC;qBACN;iBACD,CAAC,CAAC;gBAEH,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,cAAc,CAAC;oBAC7C,MAAM,EAAE;wBACP,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;wBACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;qBACjB;iBACD,CAAC,CAAC;gBAEH,qBAAqB;gBACrB,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC5D,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAEzC,4BAA4B;gBAC5B,SAAS,GAAG,EAAE,CAAC;gBACf,UAAU,CAAC,gBAAgB,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YACpD,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACZ,KAAK,GAAG,CAAC,CAAC;YACX,CAAC;oBAAS,CAAC;gBACV,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;gBAClC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACrC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/B;wBACC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,2BAA2B;wBACxD,iBAAiB,EAAE;4BAClB,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,aAAa;4BAC1C,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACpB;qBACD;oBACD;wBACC,IAAI,EAAE,SAAS;wBACf,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,2BAA2B;wBACxD,iBAAiB,EAAE;4BAClB,IAAI,EAAE,SAAS,CAAC,YAAY,CAAC,aAAa;4BAC1C,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;yBACpB;qBACD;iBACD,CAAC,CAAC;gBAEH,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC1D,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;iBAC3B,CAAC,CAAC;gBACH,IAAI,EAAE,CAAC;YACR,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0EAA0E,EAAE;YAC9E,8CAA8C;YAC9C,SAAS,GAAG,eAAe,CAAC,MAAM,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC;YAC7E,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAEvC,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YAE7B,kFAAkF;YAClF,uEAAuE;YACvE,4EAA4E;YAC5E,+EAA+E;YAC/E,kFAAkF;YAClF,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,4CAA4C;YACxF,MAAM,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE;YAC7C,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC;YAC5E,IAAI,aAAa,GAAG,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC5C,aAAa,CAAC,MAAM,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,mCAAmC,CAAC,CAAC,CAAC;YACrF,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEtB,0BAA0B;YAC1B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrE,IAAI,UAAU,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACxE,QAAQ,CAAC,UAAU,EAAE,CAAC;YAEtB,2BAA2B;YAC3B,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,eAAe,GAAG,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE9D,IAAI,cAAc,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;YAE/C,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,UAAU,CAAC,gBAAgB,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAE7D,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACtD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,oCAAoC;IACrC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE;QAC/B,EAAE,CAAC,iDAAiD,EAAE;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC;YAC/E,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACvC,IAAI,iBAAiB,GACpB,sDAAsD;gBACtD,gCAAgC;gBAChC,YAAY;gBACZ,YAAY;gBACZ,YAAY;gBACZ,OAAO,CAAC;YACT,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,QAAQ,CAAC,WAAW,CAAC,UAAU,GAAG;gBACjC,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,iDAAiD,EAAE;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;YAC9E,IAAI,iBAAiB,GACpB,qDAAqD;gBACrD,+BAA+B;gBAC/B,aAAa;gBACb,aAAa;gBACb,aAAa;gBACb,OAAO,CAAC;YACT,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,QAAQ,CAAC,WAAW,CAAC,UAAU,GAAG;gBACjC,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,iDAAiD,EAAE;YACrD,IAAI,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,sCAAsC,CAAC,CAAC;YAC9E,IAAI,iBAAiB,GACpB,qDAAqD;gBACrD,wDAAwD;gBACxD,uDAAuD;gBACvD,2BAA2B;gBAC3B,uDAAuD;gBACvD,2BAA2B;gBAC3B,uDAAuD;gBACvD,2BAA2B;gBAC3B,OAAO,CAAC;YACT,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,QAAQ,CAAC,WAAW,CAAC,UAAU,GAAG;gBACjC,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;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,aAAa,EAAE;QACjB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,YAAY,EAAE;QAChB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,KAAK,CAAC,GAAG,EAAE,CAAC;QACZ,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IACH,0BAA0B;IAC1B,2CAA2C;IAC3C,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE;QACvB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,OAAO,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9B,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,4BAA4B;IAC5B,2CAA2C;IAC3C,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;QACzB,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACjB,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtB,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE;QACnC,IAAI,WAAW,GAAG,eAAe,CAAC,MAAM,CAAC,oCAAoC,CAAC,CAAC,WAAW;aACxF,IAAI,CAAC;QACP,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAEvC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,MAAM,CAAC;YACN,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnB,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAE3C,WAAW,CAAC,GAAG,EAAE,CAAC;QAClB,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhD,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACzB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE;QACrD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YACjF,IAAI,EAAE,UAAU;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC1B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE;QACtD,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YACjF,IAAI,EAAE,UAAU;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5B,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE;QAC7E,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;QAClF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE;QACzF,IAAI,OAAO,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,IAAI,KAAK,GAAG,eAAe,CAAC,MAAM,CAAC,iCAAiC,EAAE,QAAQ,EAAE;YAC/E,IAAI,EAAE,QAAQ;SACd,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9C,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;QAChF,MAAM,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAC5E,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 isBrowser, assert */\n\n/**\n * @fileoverview In this file, we will test the functions of a BaseProperty object\n * described in /src/properties/baseProperty.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst {\n\tDeterministicRandomGenerator,\n\tHashCalculator,\n} = require(\"@fluid-experimental/property-common\");\n\n_ = require(\"lodash\");\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst deepCopy = _.cloneDeep;\nconst { PATH_TOKENS } = BaseProperty;\n\nvar OurArrayTestTemplate;\nvar arrayProp;\nvar testFailed = false;\nvar changeSet2;\nvar conflicts;\n\nvar possibleChanges = {\n\t0: \"insert\",\n\t1: \"modify\",\n\t2: \"remove\",\n};\n\nvar getRandomNumbersArray = function (in_size, randomGenerator) {\n\tvar result = [];\n\tfor (var i = 0; i < in_size; i++) {\n\t\tresult.push(Math.floor(randomGenerator.random() * 100));\n\t}\n\treturn result;\n};\n\nvar compareArrays = function (ap1, ap2) {\n\tif (ap1.length !== ap2.length) {\n\t\treturn false;\n\t}\n\tfor (var i = 0; i !== ap1.length; i++) {\n\t\tif (ap1.getEntriesReadOnly()[i] !== ap2.getEntriesReadOnly()[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nvar TestArrayFloat32 = {\n\ttypeid: \"autodesk.test:test.arrayfloat32-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Float32\", context: \"array\", length: 3 }],\n};\n\nvar TestArrayString = {\n\ttypeid: \"autodesk.test:test.arraystring-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"String\", context: \"array\", length: 3 }],\n};\n\nvar TestArrayBool = {\n\ttypeid: \"autodesk.test:test.arraybool-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Bool\", context: \"array\", length: 3 }],\n};\n\nvar TestString = {\n\ttypeid: \"autodesk.test:test.string-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"String\" }],\n};\n\nvar TestCustomArray = {\n\ttypeid: \"autodesk.test:test.customarray-1.0.0\",\n\tproperties: [\n\t\t{ id: \"data\", typeid: \"autodesk.test:test.string-1.0.0\", context: \"array\", length: 3 },\n\t],\n};\n\nvar TestDynamicLengthArray = {\n\ttypeid: \"autodesk.test:test.dynamicArray-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Int32\", context: \"array\" }],\n};\n\nvar TestDynamicLengthNonPrimitiveArray = {\n\ttypeid: \"autodesk.test:test.nonPrimitiveArray-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"autodesk.test:test.string-1.0.0\", context: \"array\" }],\n};\n\nvar OurArrayTestTemplate = {\n\ttypeid: \"autodesk.tests:ArrayTestID-1.0.0\",\n\tproperties: [{ id: \"MyArray\", typeid: \"Float32\", context: \"array\" }],\n};\n\nvar NestedArrayTestTemplate = {\n\ttypeid: \"autodesk.tests:NestedArrayTest-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"MyArray\", typeid: \"Float32\", context: \"array\" }],\n\t\t},\n\t],\n};\n\nvar ComplexTemplate = {\n\ttypeid: \"autodesk.tests:ComplexProp-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"data\", typeid: \"Float32\" }],\n\t\t},\n\t],\n};\nvar ComplexTemplate2 = {\n\ttypeid: \"autodesk.tests:ComplexProp2-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"data2\", typeid: \"Float32\" }],\n\t\t},\n\t],\n};\nvar ComplexTemplate3 = {\n\ttypeid: \"autodesk.tests:ComplexProp3-1.0.0\",\n\tproperties: [\n\t\t{ id: \"complex1\", typeid: \"autodesk.tests:ComplexProp-1.0.0\" },\n\t\t{ id: \"complex2\", typeid: \"autodesk.tests:ComplexProp2-1.0.0\" },\n\t],\n};\n\nvar ComplexArrayTemplate = {\n\ttypeid: \"autodesk.tests:ComplexArray-1.0.0\",\n\tproperties: [\n\t\t{ id: \"myarray\", typeid: \"autodesk.tests:ComplexProp-1.0.0\", context: \"array\" },\n\t],\n};\nvar Complex3ArrayTemplate = {\n\ttypeid: \"autodesk.tests:Complex3Array-1.0.0\",\n\tproperties: [\n\t\t{ id: \"myarray\", typeid: \"autodesk.tests:ComplexProp3-1.0.0\", context: \"array\" },\n\t],\n};\n\ndescribe(\"ArrayProperty\", function () {\n\t/**\n\t * Get all the objects we need in this test here.\n\t */\n\tbefore(function () {\n\t\tPropertyFactory._reregister(OurArrayTestTemplate);\n\t\tPropertyFactory._reregister(TestArrayFloat32);\n\t\tPropertyFactory._reregister(TestString);\n\t\tPropertyFactory._reregister(TestCustomArray);\n\t\tPropertyFactory._reregister(TestArrayString);\n\t\tPropertyFactory._reregister(TestArrayBool);\n\t\tPropertyFactory._reregister(TestDynamicLengthArray);\n\t\tPropertyFactory._reregister(TestDynamicLengthNonPrimitiveArray);\n\t\tPropertyFactory._reregister(NestedArrayTestTemplate);\n\t\tPropertyFactory._reregister(ComplexArrayTemplate);\n\t\tPropertyFactory._reregister(ComplexTemplate);\n\t\tPropertyFactory._reregister(ComplexTemplate2);\n\t\tPropertyFactory._reregister(ComplexTemplate3);\n\t\tPropertyFactory._reregister(Complex3ArrayTemplate);\n\t});\n\n\tdescribe(\"API methods - non primitive arrays\", function () {\n\t\tvar myProp, stringProp1, stringProp2, stringProp3, stringProp4, myArray;\n\t\tbefore(function () {\n\t\t\tmyProp = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\");\n\t\t\tstringProp1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp3 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp4 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tmyArray = myProp.get(\"data\");\n\t\t});\n\n\t\tit(\".clear should remove all items from an array and return nothing\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.length).to.equal(2);\n\t\t\texpect(myArray.clear()).to.equal(undefined);\n\t\t\texpect(myArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".clear should work on an empty array\", function () {\n\t\t\texpect(function () {\n\t\t\t\tmyArray.clear();\n\t\t\t}).to.not.throw();\n\t\t\texpect(function () {\n\t\t\t\tmyArray.clear();\n\t\t\t}).to.not.throw();\n\t\t});\n\n\t\tit(\".get should return a property\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tvar result = myArray.get(0) instanceof BaseProperty;\n\t\t\texpect(result).to.be.true;\n\t\t\texpect(myArray.get(0)).to.deep.equal(stringProp1);\n\t\t});\n\n\t\tit(\".get should return a target deferenced by a chain of reference properties\", function () {\n\t\t\tlet root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet reference = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference2 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference3 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference4 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference5 = PropertyFactory.create(\"Reference\");\n\t\t\tlet target = PropertyFactory.create(\"String\");\n\t\t\troot.insert(\"array\", myProp);\n\t\t\troot.insert(\"reference\", reference);\n\t\t\troot.insert(\"reference2\", reference2);\n\t\t\troot.insert(\"reference3\", reference3);\n\t\t\troot.insert(\"reference4\", reference4);\n\t\t\troot.insert(\"target\", target);\n\n\t\t\treference.set(target);\n\t\t\treference2.set(\"/reference\");\n\t\t\treference3.set(\"/reference2\");\n\t\t\treference4.set(\"/reference3\");\n\t\t\treference5.set(\"/reference4\");\n\t\t\tmyArray.push(reference5);\n\n\t\t\texpect(myArray.get(0)).to.deep.equal(target);\n\t\t\troot.clear();\n\t\t});\n\n\t\tit(\".get should return a target deferenced by a chain of reference properties with *\", function () {\n\t\t\tlet root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet reference = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference2 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference3 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference4 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference5 = PropertyFactory.create(\"Reference\");\n\t\t\tlet target = PropertyFactory.create(\"String\");\n\t\t\troot.insert(\"array\", myProp);\n\t\t\troot.insert(\"reference\", reference);\n\t\t\troot.insert(\"reference2\", reference2);\n\t\t\troot.insert(\"reference3\", reference3);\n\t\t\troot.insert(\"reference4\", reference4);\n\t\t\troot.insert(\"target\", target);\n\n\t\t\treference.set(target);\n\t\t\treference2.set(\"/reference\");\n\t\t\treference3.set(\"/reference2*\");\n\t\t\treference4.set(\"/reference3\");\n\t\t\treference5.set(\"/reference4\");\n\t\t\tmyArray.push(reference5);\n\n\t\t\texpect(myArray.get(0)).to.deep.equal(reference2);\n\t\t\troot.clear();\n\t\t});\n\n\t\tit(\".get should work with an array to return nested values\", function () {\n\t\t\tvar myComplexArray = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")\n\t\t\t\t._properties.myarray;\n\t\t\tvar myComplexProp = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tmyComplexArray.push(myComplexProp);\n\t\t\texpect(myComplexArray.get([0, \"nest\"])).to.deep.equal(myComplexArray.get(0).get(\"nest\"));\n\t\t});\n\n\t\tit(\".get should work with an array as input\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(1);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(2);\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(myArray1.get([0, \"nest\", \"data\"]).getValue()).to.equal(1);\n\t\t});\n\t\tit(\".get should accept raise level tokens\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(7);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(8);\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(\n\t\t\t\tmyArray1\n\t\t\t\t\t.get([\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\t\"myarray\",\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t\"nest\",\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t\"nest\",\n\t\t\t\t\t\t\"data\",\n\t\t\t\t\t])\n\t\t\t\t\t.getValue(),\n\t\t\t).to.equal(8);\n\t\t});\n\t\tit(\".get should accept path root tokens\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(3);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(6);\n\t\t\tvar testProperty3 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty3.get(\"nest\").get(\"data\").setValue(9);\n\t\t\tvar myArrayProp = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\");\n\t\t\tvar myArray1 = myArrayProp._properties.myarray;\n\t\t\tmyArray1.insertRange(0, [testProperty1, testProperty2, testProperty3]);\n\t\t\texpect(myArray1.get([PATH_TOKENS.ROOT])).to.equal(myArrayProp);\n\t\t\texpect(myArray1.get([PATH_TOKENS.ROOT, \"myarray\", 2])).to.equal(testProperty3);\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return an array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp1, stringProp2]);\n\t\t});\n\n\t\tit(\".getFullTypeid will return a string of the full type id with or without collection\", function () {\n\t\t\t// defaults to false\n\t\t\texpect(myArray.getFullTypeid()).to.equal(\"array<autodesk.test:test.string-1.0.0>\");\n\t\t\t// in_hideCollection: true\n\t\t\texpect(myArray.getFullTypeid(true)).to.equal(\"autodesk.test:test.string-1.0.0\");\n\t\t});\n\n\t\tit(\".getIds should return an array of string indexes\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getIds()).to.deep.equal([\"0\", \"1\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the array\", function () {\n\t\t\texpect(myArray.getLength()).to.equal(0);\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t});\n\n\t\tit(\".has should work\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.has(1)).to.be.true;\n\t\t\texpect(myArray.has(2)).to.be.false;\n\t\t});\n\n\t\tit(\".getRelativePath should return a valid path\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(myArray1.get([0, \"nest\", \"data\"]).getRelativePath(myArray1)).to.equal(\n\t\t\t\t\"[0].nest.data\",\n\t\t\t);\n\t\t\texpect(myArray1.getRelativePath(myArray1.get([0, \"nest\", \"data\"]))).to.equal(\n\t\t\t\t\"../../../\",\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tmyArray1.get([0, \"nest\"]).getRelativePath(myArray1.get([1, \"nest\", \"data\"])),\n\t\t\t).to.equal(\"../../../[0].nest\");\n\t\t});\n\n\t\tit(\".getValues should return an array of objects\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\n\t\t\tmyArray.setValues({\n\t\t\t\t0: {\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(myArray.getValues()).to.deep.equal([\n\t\t\t\t{\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdata: \"\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\".insert should insert a new property in a non primitive array\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\texpect(myArray.getLength()).to.equal(1);\n\t\t\texpect(myArray.get(0)).to.deep.equal(stringProp1);\n\t\t\tmyArray.insert(1, stringProp2);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t});\n\n\t\tit(\".insert should push existing values to the right if index already has a property\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\tmyArray.insert(0, stringProp2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp2, stringProp1]);\n\t\t});\n\n\t\tit(\".insertRange should insert new properties\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t\texpect(myArray.get(1)).to.deep.equal(stringProp2);\n\t\t});\n\n\t\tit(\".insertRange should push existing values to the right if index already has a property\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\tmyArray.insertRange(0, [stringProp2, stringProp3]);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([\n\t\t\t\tstringProp2,\n\t\t\t\tstringProp3,\n\t\t\t\tstringProp1,\n\t\t\t]);\n\t\t});\n\n\t\tit(\"pop should remove only last element of an array and return the removed element\", function () {\n\t\t\tvar myDynamicArray = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\tvar firstString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar secondString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar thirdString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar fourthString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar fifthString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\n\t\t\tmyDynamicArray.push(firstString);\n\t\t\tmyDynamicArray.push(secondString);\n\t\t\tmyDynamicArray.push(thirdString);\n\t\t\texpect(myDynamicArray.length).to.equal(3);\n\n\t\t\tmyDynamicArray.pop();\n\t\t\texpect(myDynamicArray.length).to.equal(2);\n\t\t\texpect(myDynamicArray.get(0)).to.equal(firstString);\n\t\t\texpect(myDynamicArray.get(1)).to.equal(secondString);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(2);\n\t\t\t}).to.throw(Error);\n\n\t\t\tmyDynamicArray.push(thirdString);\n\t\t\texpect(myDynamicArray.pop()).to.deep.equal(thirdString);\n\t\t\tmyDynamicArray.push(fourthString);\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.push(fifthString);\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.pop();\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(1);\n\t\t\t}).to.throw(Error);\n\t\t\texpect(myDynamicArray.pop()).to.equal(undefined);\n\t\t});\n\n\t\tit(\"push should add the element to the last position and return the new length of the array\", function () {\n\t\t\tvar myDynamicArray = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\tvar firstString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar secondString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\texpect(myDynamicArray.push(firstString)).to.equal(1);\n\t\t\tmyDynamicArray.push(secondString);\n\t\t\texpect(myDynamicArray.length).to.equal(2);\n\t\t\texpect(myDynamicArray.get(0)).to.equal(firstString);\n\t\t\texpect(myDynamicArray.get(1)).to.equal(secondString);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(2);\n\t\t\t}).to.throw(Error);\n\t\t});\n\n\t\tit(\".remove should remove an element from an array, moving remaining elements to the left\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.remove(1);\n\t\t\texpect(myArray.length).to.equal(1);\n\t\t\tmyArray.push(stringProp3);\n\t\t\tmyArray.remove(0);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3]);\n\t\t});\n\n\t\tit(\".removeRange should remove a range of elements from an array and move the remaining elements to the left\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.push(stringProp3);\n\t\t\texpect(myArray.length).to.equal(3);\n\t\t\tmyArray.removeRange(0, 2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3]);\n\t\t});\n\n\t\tit(\".remove and .removeRange should return the items deleted\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.push(stringProp3);\n\t\t\texpect(myArray.remove(0)).to.deep.equal(stringProp1);\n\t\t\texpect(myArray.removeRange(0, 2)).to.deep.equal([stringProp2, stringProp3]);\n\t\t});\n\n\t\tit(\".set changes an existing element\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tmyArray.set(1, stringProp3);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp1, stringProp3]);\n\t\t});\n\n\t\tit(\".setRange changes a range of existing elements\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tmyArray.setRange(0, [stringProp3, stringProp4]);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3, stringProp4]);\n\t\t});\n\n\t\tit(\".set and .setRange should throw if trying to set a non-existing element\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tvar incorrectFn1 = function () {\n\t\t\t\tmyArray.set(3, stringProp3);\n\t\t\t};\n\t\t\texpect(incorrectFn1).to.throw(MSG.SET_OUT_OF_BOUNDS);\n\t\t});\n\n\t\tit(\".setRange should throw if the offset is not an integer\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.setRange(\"test\", [stringProp3, stringProp4]);\n\t\t\t}).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\".setRange should throw if the in_array argument is not an array\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.setRange(1, stringProp3);\n\t\t\t}).to.throw(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.setRange\");\n\t\t});\n\n\t\tit(\".set should throw if the offset is not an integer\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.set(\"test\", stringProp3);\n\t\t\t}).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\".set should throw if the in_value is an array\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.set(0, [stringProp3, stringProp4]);\n\t\t\t}).to.throw(MSG.ARRAY_SET_ONE_ELEMENT);\n\t\t});\n\n\t\tit(\".setValues should work for custom type arrays\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.setValues({\n\t\t\t\t0: {\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"newTest\" }, { data: \"\" }]);\n\n\t\t\tstringProp3._properties.data.setValue(\"newNewTest\");\n\t\t\tmyArray.setValues([stringProp3]);\n\t\t\texpect(myArray.getLength()).to.equal(1);\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"newNewTest\" }]);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite the whole array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tstringProp3._properties.data.setValue(\"testing 123\");\n\t\t\tmyArray.setValues([stringProp3]);\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"testing 123\" }]);\n\t\t\texpect(myArray.length).to.equal(1);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite part of the array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.setValues({ 0: { data: \"test test test\" } });\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"test test test\" }, { data: \"\" }]);\n\t\t});\n\n\t\tit(\".shift should remove the first element of an array and return the removed element\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.shift();\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp2]);\n\t\t\texpect(myArray.shift()).to.deep.equal(stringProp2);\n\t\t\texpect(myArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".shift should return undefined if called on an empty array\", function () {\n\t\t\texpect(myArray.shift()).to.be.undefined;\n\t\t});\n\n\t\tit(\".unshift should add a property at the beginnig of an array and return the new length of the array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.unshift(stringProp3);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([\n\t\t\t\tstringProp3,\n\t\t\t\tstringProp1,\n\t\t\t\tstringProp2,\n\t\t\t]);\n\t\t\texpect(myArray.unshift(stringProp4)).to.equal(4);\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tmyArray.clear();\n\t\t});\n\t});\n\n\tdescribe(\"API methods - primitive arrays\", function () {\n\t\tvar myPrimitiveArray;\n\t\tbefore(function () {\n\t\t\tmyPrimitiveArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t});\n\n\t\tit(\".clear should remove all elements in the array\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.length).to.equal(3);\n\t\t\tmyPrimitiveArray.clear();\n\t\t\texpect(myPrimitiveArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".get should return a value\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\tvar result = myPrimitiveArray.get(0);\n\t\t\texpect(result).to.equal(1);\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return an array\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\tconst result = myPrimitiveArray.getEntriesReadOnly();\n\t\t\tassert.equal(result.length, 3);\n\t\t\tassert.equal(result[0], 1);\n\t\t\tassert.equal(result[1], 2);\n\t\t\tassert.equal(result[2], 3);\n\t\t});\n\n\t\tit(\"getFullTypeid should return a string of the typeid with or without collection\", function () {\n\t\t\texpect(myPrimitiveArray.getFullTypeid()).to.equal(\"array<Int32>\");\n\t\t\texpect(myPrimitiveArray.getFullTypeid(true)).to.equal(\"Int32\");\n\t\t});\n\n\t\tit(\".getIds should return an array of index strings\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.getIds()).to.deep.equal([\"0\", \"1\", \"2\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the array\", function () {\n\t\t\texpect(myPrimitiveArray.getLength()).to.equal(0);\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.getLength()).to.equal(3);\n\t\t});\n\n\t\tit(\".has should work\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.has(1)).to.be.true;\n\t\t\texpect(myPrimitiveArray.has(4)).to.be.false;\n\t\t});\n\n\t\tit(\".setValues and .getValues should work for primitive arrays\", function () {\n\t\t\t// tests for getValues on typed arrays fail but only on PhantomJS.\n\t\t\tif (isBrowser && window.top.callPhantom) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tvar MyArrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\tMyArrayProp.insertRange(0, [1, 2, 3]);\n\t\t\tMyArrayProp.setValues({\n\t\t\t\t0: 12,\n\t\t\t\t2: 9,\n\t\t\t});\n\n\t\t\texpect(MyArrayProp.getValues()).to.deep.equal([12, 2, 9]);\n\n\t\t\tMyArrayProp.setValues([3, 4]);\n\t\t\texpect(MyArrayProp.get(0)).to.equal(3);\n\t\t\texpect(function () {\n\t\t\t\tMyArrayProp.get(2);\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\".insert should insert a value in a primitive array and move other values to the right\", function () {\n\t\t\tmyPrimitiveArray.insert(0, 1);\n\t\t\texpect(myPrimitiveArray.length).to.equal(1);\n\t\t\tmyPrimitiveArray.insert(0, 2);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 1]);\n\t\t});\n\n\t\tit(\".insertRange should insert a range of values and move other values to the right\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.length).to.equal(3);\n\t\t\tmyPrimitiveArray.insertRange(1, [4, 5]);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 4, 5, 2, 3]);\n\t\t});\n\n\t\tit(\".pop should remove the last item of a primitive array and return the removed value\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\texpect(myArray.length).to.equal(3);\n\t\t\tmyArray.pop();\n\t\t\texpect(myArray.length).to.equal(2);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2]);\n\t\t\texpect(myArray.pop()).to.equal(2);\n\t\t});\n\n\t\tit(\".pop should return undefined if called on an empty array\", function () {\n\t\t\texpect(myPrimitiveArray.pop()).to.be.undefined;\n\t\t});\n\n\t\tit(\".push should add a value at the end of the array and return the new length\", function () {\n\t\t\tmyPrimitiveArray.push(1);\n\t\t\tmyPrimitiveArray.push(2);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 2]);\n\t\t\texpect(myPrimitiveArray.push(4)).to.equal(3);\n\t\t});\n\n\t\tit(\".remove should remove an element from the array and return that element\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.remove(0)).to.equal(1);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 3]);\n\t\t});\n\n\t\tit(\".removeRange should remove a range of elements from an array and return those elements\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4, 5]);\n\t\t\texpect(myPrimitiveArray.removeRange(2, 2)).to.deep.equal([3, 4]);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 2, 5]);\n\t\t});\n\n\t\tit(\".resolvePath should work on primitive arrays\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.resolvePath(\"1\")).to.equal(2);\n\t\t});\n\n\t\tit(\".set should replace a value in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\tmyArray.set(2, 8);\n\t\t\texpect(myArray.get(2)).to.equal(8);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2, 8]);\n\t\t});\n\n\t\tit(\".setRange should replace values in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\tmyArray.setRange(1, [4, 5]);\n\t\t\texpect(myArray.get(1)).to.equal(4);\n\t\t\texpect(myArray.get(2)).to.equal(5);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 4, 5]);\n\t\t});\n\n\t\tit(\".setRange should replace last value in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.insertRange(0, [1, 2, 3, 4, 5]);\n\t\t\tmyArray.setRange(0, [1, 2, 3, 10, 11]);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2, 3, 10, 11]);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite a whole array\", function () {\n\t\t\tarrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tarrayProp.insertRange(0, [1, 2, 3]);\n\t\t\texpect(arrayProp.get(2)).to.equal(3);\n\t\t\tarrayProp.setValues([13, 14]);\n\t\t\texpect(arrayProp.get(0)).to.equal(13);\n\t\t\tvar incorrectFn = function () {\n\t\t\t\tarrayProp.get(2);\n\t\t\t};\n\t\t\texpect(incorrectFn).to.throw();\n\t\t});\n\n\t\tit(\"setValues should work to overwrite part of the array\", function () {\n\t\t\tvar myArrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\tmyArrayProp.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myArrayProp.get(2)).to.equal(3);\n\n\t\t\tmyArrayProp.setValues({\n\t\t\t\t0: 11,\n\t\t\t\t1: 12,\n\t\t\t});\n\t\t\texpect(myArrayProp.get(0)).to.equal(11);\n\t\t\tvar correctFn = function () {\n\t\t\t\tmyArrayProp.get(2);\n\t\t\t};\n\t\t\texpect(correctFn).to.not.throw();\n\t\t\texpect(myArrayProp.get(2)).to.equal(3);\n\t\t});\n\n\t\tit(\".shift should remove the first element of the array and return that element\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4]);\n\t\t\texpect(myPrimitiveArray.shift()).to.equal(1);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 3, 4]);\n\t\t});\n\n\t\tit(\".unshift should add a value to the beginning of the array and return the new length\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4]);\n\t\t\tmyPrimitiveArray.unshift(5);\n\t\t\texpect(myPrimitiveArray.unshift(13)).to.equal(6);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([13, 5, 1, 2, 3, 4]);\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tmyPrimitiveArray.clear();\n\t\t});\n\t});\n\n\tdescribe(\"testing specific types of arrays\", function () {\n\t\tit(\"should support boolean arrays\", function () {\n\t\t\tvar myBoolArray = PropertyFactory.create(\"autodesk.test:test.arraybool-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myBoolArray.length).to.equal(3);\n\n\t\t\texpect(myBoolArray.get(0)).to.equal(false);\n\t\t\texpect(myBoolArray.get(1)).to.equal(false);\n\t\t\texpect(myBoolArray.get(2)).to.equal(false);\n\t\t\texpect(function () {\n\t\t\t\tmyBoolArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\tmyBoolArray.push(true);\n\t\t\tmyBoolArray.push(0);\n\n\t\t\texpect(myBoolArray.getLength().should.equal(5));\n\t\t\texpect(myBoolArray.get(3)).to.equal(true);\n\t\t\texpect(myBoolArray.get(4)).to.equal(false);\n\n\t\t\tmyBoolArray.pop();\n\t\t\texpect(myBoolArray.getLength().should.equal(4));\n\n\t\t\tmyBoolArray.insert(0, 1);\n\t\t\texpect(myBoolArray.get(0)).to.equal(true);\n\t\t});\n\n\t\tit(\".set and .get should convert float index to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\tmyArray.set(1.2, \"item 1.2\");\n\t\t\texpect(myArray.getLength()).to.equal(3);\n\t\t\texpect(myArray.get(1.6)).to.equal(\"item 1.2\");\n\t\t});\n\n\t\tit(\".set and .get should convert string index to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\tmyArray.set(\"0.3\", \"item 0.3\");\n\t\t\texpect(myArray.getLength()).to.equal(3);\n\t\t\texpect(myArray.get(\"0.6\")).to.equal(\"item 0.3\");\n\t\t});\n\n\t\tit(\".set and .get should reject float index that cannot be converted to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\texpect(() => myArray.set(Infinity, \"item infinity\")).to.throw(\n\t\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\",\n\t\t\t);\n\t\t\texpect(() => myArray.get(NaN)).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t});\n\n\t\tit(\".set and .get should reject string index that can not be converted to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\texpect(() => myArray.set(\"2abc\", \"item 2abc\")).to.throw(\n\t\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\",\n\t\t\t);\n\t\t\texpect(() => myArray.get(\"2abc\")).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t});\n\t});\n\n\tdescribe(\"Checking the generalized squash function of ArrayProperty\", function () {\n\t\tit(\"should be squashed to the expected changeset\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [0, 0]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.cleanDirty();\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [2, 3]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tmodify: [[1, [9, 44]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[3, [6, 7, 8]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tremove: [[4, 1]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tmodify: [[5, [9]]],\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(arrayProp._getDirtyChanges()).to.deep.equal({\n\t\t\t\t\tinsert: [\n\t\t\t\t\t\t[0, [2, 9]],\n\t\t\t\t\t\t[1, [6, 8]],\n\t\t\t\t\t],\n\t\t\t\t\tmodify: [[0, [44, 9]]],\n\t\t\t\t});\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"Merging of reversible modifications\", function () {\n\t\t\tvar base = {\n\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tmodify: [[0, [2], [1]]],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar mod = {\n\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tmodify: [[0, [3], [2]]],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar testChangeSet = new ChangeSet(base);\n\t\t\ttestChangeSet.applyChangeSet(mod);\n\t\t\tvar CS = testChangeSet.getSerializedChangeSet();\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0].length).to.equal(3);\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0][1][0]).to.equal(3); // Value after modification\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0][2][0]).to.equal(1); // Value before modification\n\t\t});\n\n\t\tit(\"[random numbers test] - the resulting insert should be equal to the data array\", function (done) {\n\t\t\tvar error;\n\t\t\tthis.timeout(120000); // When the code is instrumented for coverage analysis, it takes a lot of time.\n\t\t\tfor (let j = 0; j < 10; j++) {\n\t\t\t\tconst random = new DeterministicRandomGenerator(j);\n\n\t\t\t\ttry {\n\t\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t\t.MyArray;\n\n\t\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9]]] });\n\t\t\t\t\tarrayProp.cleanDirty();\n\t\t\t\t\tvar currentArrayLength;\n\n\t\t\t\t\tfor (var i = 0; i < 1000; ++i) {\n\t\t\t\t\t\tcurrentArrayLength = arrayProp.length;\n\t\t\t\t\t\tvar nextOpType = \"insert\";\n\t\t\t\t\t\tvar opOffset = 0;\n\n\t\t\t\t\t\tif (currentArrayLength > 0) {\n\t\t\t\t\t\t\tnextOpType = possibleChanges[Math.floor(random.random() * 2.999999)];\n\t\t\t\t\t\t\topOffset = Math.min(\n\t\t\t\t\t\t\t\tMath.floor(random.random() * currentArrayLength),\n\t\t\t\t\t\t\t\tcurrentArrayLength - 1,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar opLength =\n\t\t\t\t\t\t\t1 +\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tMath.floor(random.random() * (currentArrayLength - opOffset)),\n\t\t\t\t\t\t\t\tcurrentArrayLength - opOffset - 1,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar nextChangeset = {};\n\n\t\t\t\t\t\tswitch (nextOpType) {\n\t\t\t\t\t\t\tcase \"remove\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [[opOffset, opLength]];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"insert\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [];\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType].push([\n\t\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.floor(random.random() * 4 + 1), random),\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"modify\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.min(random.random() * 2 + 1, opLength), random),\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\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// no default\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarrayProp.applyChangeSet(nextChangeset);\n\n\t\t\t\t\t\tvar arrayPropTest = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")\n\t\t\t\t\t\t\t._properties.MyArray;\n\t\t\t\t\t\tarrayPropTest.applyChangeSet({\n\t\t\t\t\t\t\tinsert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9]]],\n\t\t\t\t\t\t});\n\t\t\t\t\t\tarrayPropTest.cleanDirty();\n\t\t\t\t\t\tarrayPropTest.applyChangeSet(arrayProp._getDirtyChanges());\n\n\t\t\t\t\t\tif (!compareArrays(arrayProp, arrayPropTest)) {\n\t\t\t\t\t\t\tconsole.warn(\"Bug found in iteration \", j, i);\n\t\t\t\t\t\t\tconsole.log(\"Testresults: \");\n\t\t\t\t\t\t\tconsole.log(JSON.stringify(nextChangeset));\n\t\t\t\t\t\t\tconsole.log(arrayProp.getEntriesReadOnly());\n\t\t\t\t\t\t\tconsole.log(arrayPropTest.getEntriesReadOnly());\n\t\t\t\t\t\t\tconsole.log(JSON.stringify(arrayProp._getDirtyChanges()));\n\t\t\t\t\t\t\ttestFailed = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = e;\n\t\t\t\t} finally {\n\t\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\t\texpect(testFailed).to.equal(false);\n\t\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdone();\n\t\t});\n\t});\n\n\tdescribe(\"Fixed Size arrays\", function () {\n\t\t// Should throw an exception when you create a primitive type and try to add it to an array\n\t\t// that takes values of that primitive type\n\t\tit(\"should support fixed size arrays for a primitive type\", function () {\n\t\t\tvar myFloatArray = PropertyFactory.create(\"autodesk.test:test.arrayfloat32-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myFloatArray.length).to.equal(3);\n\t\t\texpect(myFloatArray.get(0)).to.equal(0);\n\t\t\texpect(myFloatArray.get(1)).to.equal(0);\n\t\t\texpect(myFloatArray.get(2)).to.equal(0);\n\t\t\texpect(function () {\n\t\t\t\tmyFloatArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myFloatArray._serialize(true)).to.be.empty; // Waiting for fix from OT\n\t\t\texpect(myFloatArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() { myFloatArray.push(10);}).to.throw(Error);\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\n\t\tit(\"should support fixed size arrays for a primitive type\", function () {\n\t\t\tvar myStringArray = PropertyFactory.create(\"autodesk.test:test.arraystring-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myStringArray.length).to.equal(3);\n\t\t\texpect(myStringArray.get(0)).to.equal(\"\");\n\t\t\texpect(myStringArray.get(1)).to.equal(\"\");\n\t\t\texpect(myStringArray.get(2)).to.equal(\"\");\n\t\t\texpect(function () {\n\t\t\t\tmyStringArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myStringArray._serialize(true)).to.be.empty;\n\t\t\texpect(myStringArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() { myFloatArray.push('');}).to.throw(Error); // TODO: add all functions\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\n\t\tit(\"should support fixed size arrays for a complex type\", function () {\n\t\t\tvar myCustomArray = PropertyFactory.create(\"autodesk.test:test.customarray-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myCustomArray.length).to.equal(3);\n\t\t\texpect(myCustomArray.get(0)).to.be.instanceof(BaseProperty);\n\t\t\texpect(myCustomArray.get(1)).to.be.instanceof(BaseProperty);\n\t\t\texpect(myCustomArray.get(2)).to.be.instanceof(BaseProperty);\n\t\t\texpect(function () {\n\t\t\t\tmyCustomArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myCustomArray._serialize(true)).to.be.empty;\n\t\t\texpect(myCustomArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() {\n\t\t\t// myCustomArray.push(PropertyFactory.create('autodesk.test:test.string-1.0.0'));\n\t\t\t// }).to.throw(Error);\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\t});\n\n\tdescribe(\"Checking normalized changeset ability of ArrayProperty\", function () {\n\t\tit(\"should be equal to the expected value\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [0, 0]]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[1, [2, 3, 4, 5, 6, 7, 8, 9]]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[4, [222, 333]]] });\n\t\t\t\tarrayProp.applyChangeSet({ remove: [[2, 3]] });\n\t\t\t\tarrayProp.applyChangeSet({ modify: [[3, [33]]] });\n\t\t\t\tarrayProp.applyChangeSet({ remove: [[0, 2]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [123, 456]]] });\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(arrayProp._getDirtyChanges()).to.deep.equal({\n\t\t\t\t\tinsert: [[0, [123, 456, 333, 33, 6, 7, 8, 9, 0]]],\n\t\t\t\t});\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"[random numbers test] - the resulting insert should be equal to the data array\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\t\t\t\tvar currentArrayLength = 0;\n\t\t\t\tconst random = new DeterministicRandomGenerator(0);\n\n\t\t\t\tfor (var i = 0; i < 1000; ++i) {\n\t\t\t\t\tcurrentArrayLength = arrayProp.length;\n\t\t\t\t\tvar nextOpType = \"insert\";\n\t\t\t\t\tvar opOffset = 0;\n\n\t\t\t\t\tif (currentArrayLength > 0) {\n\t\t\t\t\t\tnextOpType = possibleChanges[Math.floor(Math.random() * 2.999999)];\n\t\t\t\t\t\topOffset = Math.floor(Math.random() * (currentArrayLength - 0.000001));\n\t\t\t\t\t}\n\n\t\t\t\t\tvar opLength =\n\t\t\t\t\t\t1 + Math.floor(Math.random() * (currentArrayLength - opOffset - 0.0001));\n\t\t\t\t\tif (opLength < 1) {\n\t\t\t\t\t\topLength = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar nextChangeset = {};\n\n\t\t\t\t\tswitch (nextOpType) {\n\t\t\t\t\t\tcase \"remove\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [[opOffset, opLength]];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"insert\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [];\n\t\t\t\t\t\t\tnextChangeset[nextOpType].push([\n\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.floor(Math.random() * 4 + 1), random),\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"modify\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [\n\t\t\t\t\t\t\t\t[opOffset, getRandomNumbersArray(opLength, random)],\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// no default\n\t\t\t\t\t}\n\t\t\t\t\tarrayProp.applyChangeSet(nextChangeset);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tif (arrayProp.getEntriesReadOnly().length > 0) {\n\t\t\t\t\texpect(arrayProp._getDirtyChanges().insert[0][1]).to.deep.equal(\n\t\t\t\t\t\tArray.prototype.slice.call(arrayProp.getEntriesReadOnly()),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\texpect(arrayProp._getDirtyChanges().insert).to.equal(undefined);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"Checking deserialization\", function () {\n\t\tvar runDeserializationTests = function (testArrayOperation, testArray, primitiveProperty) {\n\t\t\t// Serialization into an empty array\n\t\t\tvar values = [\"test1\", \"test2\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// Overwriting with a different array\n\t\t\tvar values = [\"test3\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// A second deserialization to the same array should preserve the changeset\n\t\t\tvar values = [\"test3\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// Now we clean the array and overwrite\n\t\t\ttestArray.cleanDirty();\n\t\t\tvar values = [\"test1\", \"test2\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]], remove: [[0, 1]] });\n\n\t\t\t// A second deserialization to the same array\n\t\t\ttestArray.cleanDirty();\n\t\t\tvar values = [\"test1\", \"test2\"];\n\t\t\tif (primitiveProperty) {\n\t\t\t\t// should report no change for primitive properties\n\t\t\t\ttestArrayOperation(values, {});\n\t\t\t} else {\n\t\t\t\t// Result in a replacement for non primitive properties\n\t\t\t\ttestArrayOperation(values, { insert: [[0, values]], remove: [[0, 2]] });\n\t\t\t}\n\n\t\t\t// Creating an empty array\n\t\t\ttestArray.cleanDirty();\n\t\t\tvar values = [];\n\t\t\ttestArrayOperation(values, { remove: [[0, 2]] });\n\n\t\t\t// A second serialization to an empty array should report no change\n\t\t\ttestArray.cleanDirty();\n\t\t\tvar values = [];\n\t\t\ttestArrayOperation(values, {});\n\t\t};\n\n\t\tit(\"of a primitive array property\", function () {\n\t\t\tvar stringArray = PropertyFactory.create(\"String\", \"array\");\n\n\t\t\tvar testArrayOperation = function (values, expectedChangeSet) {\n\t\t\t\tstringArray.deserialize(values.length !== 0 ? { insert: [[0, values]] } : {});\n\t\t\t\texpect(stringArray.getEntriesReadOnly()).to.deep.equal(values);\n\t\t\t\texpect(\n\t\t\t\t\tstringArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t\texpect(\n\t\t\t\t\tstringArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t};\n\n\t\t\trunDeserializationTests(testArrayOperation, stringArray, true);\n\t\t});\n\n\t\tit(\"of a custom type array\", function () {\n\t\t\tvar testArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\n\t\t\tvar mapStringsToCustomType = function (strings) {\n\t\t\t\treturn strings.map(function (x) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\tdata: x,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttypeid: \"autodesk.test:test.string-1.0.0\",\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tvar testArrayOperation = function (values, expectedChangeSet) {\n\t\t\t\ttestArray.deserialize(\n\t\t\t\t\tvalues.length !== 0\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinsert: [[0, mapStringsToCustomType(values)]],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {},\n\t\t\t\t);\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.getEntriesReadOnly().map(function (x) {\n\t\t\t\t\t\treturn x.get(\"data\").getValue();\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(values);\n\n\t\t\t\tif (expectedChangeSet.insert) {\n\t\t\t\t\texpectedChangeSet.insert[0][1] = mapStringsToCustomType(\n\t\t\t\t\t\texpectedChangeSet.insert[0][1],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t};\n\n\t\t\trunDeserializationTests(testArrayOperation, testArray, false);\n\t\t});\n\t});\n\n\tdescribe(\"Checking rebasing of an ArrayProperty\", function () {\n\t\tit(\"a remove-modify should be correctly rebased to the given changeset and cause conflicts\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tvar arrayProp1 = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\");\n\t\t\t\t// prepare initial state\n\t\t\t\tarrayProp1._properties.MyArray.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]],\n\t\t\t\t});\n\n\t\t\t\t// create a copy of this state\n\t\t\t\tvar arrayProp2 = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\");\n\t\t\t\tarrayProp2.deserialize(arrayProp1._serialize(false));\n\n\t\t\t\t// make sure the states are clear\n\t\t\t\tarrayProp1.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\t\t\t\tarrayProp2.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\t// apply different operations to the two properties in parallel\n\t\t\t\tarrayProp1._properties.MyArray.applyChangeSet({\n\t\t\t\t\tremove: [\n\t\t\t\t\t\t[2, 1],\n\t\t\t\t\t\t[4, 1],\n\t\t\t\t\t\t[6, 1],\n\t\t\t\t\t],\n\t\t\t\t});\n\n\t\t\t\tarrayProp2._properties.MyArray.applyChangeSet({\n\t\t\t\t\tmodify: [\n\t\t\t\t\t\t[2, [23, 24]],\n\t\t\t\t\t\t[5, [33, 34, 35]],\n\t\t\t\t\t],\n\t\t\t\t});\n\n\t\t\t\t// Get the ChangeSets\n\t\t\t\tvar changeSet1 = new ChangeSet(arrayProp1._serialize(true));\n\t\t\t\tchangeSet2 = arrayProp2._serialize(true);\n\n\t\t\t\t// Perform the actual rebase\n\t\t\t\tconflicts = [];\n\t\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\texpect(changeSet2).to.not.equal(null);\n\t\t\t\texpect(conflicts.length).to.equal(2);\n\t\t\t\texpect(conflicts).to.deep.equal([\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"MyArray\",\n\t\t\t\t\t\ttype: ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t\tconflictingChange: {\n\t\t\t\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\t\t\t\toperation: [2, [23]],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"MyArray\",\n\t\t\t\t\t\ttype: ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t\tconflictingChange: {\n\t\t\t\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\t\t\t\toperation: [6, [34]],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]);\n\n\t\t\t\texpect(changeSet2[\"array<Float32>\"].MyArray).to.deep.equal({\n\t\t\t\t\tmodify: [[2, [24, 33, 35]]],\n\t\t\t\t});\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"@bugfix ensure existing properties are unparented during deserialization\", function () {\n\t\t\t// Bug caused by deserialization during rebase\n\t\t\tarrayProp = PropertyFactory.create(TestDynamicLengthNonPrimitiveArray.typeid);\n\t\t\tconst customProp = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tarrayProp.get(\"data\").push(customProp);\n\n\t\t\tconst state = arrayProp._serialize(false);\n\t\t\tarrayProp.deserialize(state);\n\n\t\t\t// Currently, with custom types, the system makes no attempt to detect if the data\n\t\t\t// is in fact unchanged. Eventually hopefully this will not be the case\n\t\t\t// But this test is looking at a bug, where due to the lack of optimization,\n\t\t\t// customProp will be removed from the arrayProp, and as a result customProp is\n\t\t\t// not a child of the array. The bug is, however, that it will still have a parent\n\t\t\texpect(arrayProp.isDirty()).to.equal(true); // If this fires then you've optimized this?\n\t\t\texpect(customProp.getParent()).to.equal(undefined);\n\t\t});\n\n\t\tit(\"rebase of independent modifies in array\", function () {\n\t\t\tvar arrayObj = PropertyFactory.create(\"autodesk.tests:Complex3Array-1.0.0\");\n\t\t\tvar arrayProperty = arrayObj.get(\"myarray\");\n\t\t\tarrayProperty.insert(0, PropertyFactory.create(\"autodesk.tests:ComplexProp3-1.0.0\"));\n\t\t\tarrayObj.cleanDirty();\n\n\t\t\t// Create the first change\n\t\t\tarrayProperty.get(0).get([\"complex1\", \"nest\", \"data\"]).setValue(123);\n\t\t\tvar changeSet1 = new ChangeSet(arrayObj.serialize({ dirtyOnly: true }));\n\t\t\tarrayObj.cleanDirty();\n\n\t\t\t// Create the second change\n\t\t\tarrayProperty.get(0).get([\"complex2\", \"nest\", \"data2\"]).setValue(123);\n\t\t\tvar secondChangeSet = arrayObj.serialize({ dirtyOnly: true });\n\n\t\t\tvar changeSet2Copy = deepCopy(secondChangeSet);\n\n\t\t\tvar conflictsArray = [];\n\t\t\tchangeSet1._rebaseChangeSet(secondChangeSet, conflictsArray);\n\n\t\t\texpect(secondChangeSet).to.deep.equal(changeSet2Copy);\n\t\t\texpect(conflictsArray).to.be.empty;\n\t\t});\n\n\t\t// TODO: add more rebase tests here!\n\t});\n\n\tdescribe(\"Using prettyPrint()\", function () {\n\t\tit(\"should output a pretty string with number items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.arrayfloat32-1.0.0\");\n\t\t\tproperty.resolvePath(\"data\").set(0, 4);\n\t\t\tproperty.resolvePath(\"data\").set(1, 5);\n\t\t\tproperty.resolvePath(\"data\").set(2, 6);\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.arrayfloat32-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of Float32): [\\n\" +\n\t\t\t\t\" 0: 4\\n\" +\n\t\t\t\t\" 1: 5\\n\" +\n\t\t\t\t\" 2: 6\\n\" +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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(\"should output a pretty string with string items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.arraystring-1.0.0\");\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.arraystring-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of String): [\\n\" +\n\t\t\t\t' 0: \"\"\\n' +\n\t\t\t\t' 1: \"\"\\n' +\n\t\t\t\t' 2: \"\"\\n' +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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(\"should output a pretty string with custom items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.customarray-1.0.0\");\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.customarray-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of autodesk.test:test.string-1.0.0): [\\n\" +\n\t\t\t\t\" 0: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" 1: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" 2: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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\t});\n\n\tit(\"should push\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tarray.push(3);\n\t\tarray.getLength().should.equal(4);\n\t\tarray.push([4, 5]);\n\t\tarray.getLength().should.equal(6);\n\t});\n\tit(\"should pop\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tvar element = array.pop();\n\t\telement.should.equal(2);\n\t\tarray.pop();\n\t\tarray.getLength().should.equal(1);\n\t});\n\t// there is no .shiftValue\n\t// should replace the value with a property\n\tit.skip(\"should shift\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tvar element = array.shift();\n\t\telement.should.equal(0);\n\t\tvar elements = array.shift(2);\n\t\tarray.getLength().should.equal(0);\n\t\telements.length.should.equal(2);\n\t});\n\t// there is no .unshiftValue\n\t// should replace the value with a property\n\tit.skip(\"should unshift\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tarray.unshift(3);\n\t\tarray.getLength().should.equal(4);\n\t\tarray.unshift([4, 5]);\n\t\tarray.getLength().should.equal(6);\n\t});\n\n\tit(\"should support boolean arrays\", function () {\n\t\tvar myBoolArray = PropertyFactory.create(\"autodesk.test:test.arraybool-1.0.0\")._properties\n\t\t\t.data;\n\t\texpect(myBoolArray.length).to.equal(3);\n\n\t\texpect(myBoolArray.get(0)).to.equal(false);\n\t\texpect(myBoolArray.get(1)).to.equal(false);\n\t\texpect(myBoolArray.get(2)).to.equal(false);\n\t\texpect(function () {\n\t\t\tmyBoolArray.get(3);\n\t\t}).to.throw(Error);\n\n\t\tmyBoolArray.push(true);\n\t\tmyBoolArray.push(0);\n\n\t\texpect(myBoolArray.getLength().should.equal(5));\n\t\texpect(myBoolArray.get(3)).to.equal(true);\n\t\texpect(myBoolArray.get(4)).to.equal(false);\n\n\t\tmyBoolArray.pop();\n\t\texpect(myBoolArray.getLength().should.equal(4));\n\n\t\tmyBoolArray.insert(0, 1);\n\t\texpect(myBoolArray.get(0)).to.equal(true);\n\t});\n\n\tit(\".set and .get should convert float index to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\tvar prop1_2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1.2\",\n\t\t});\n\t\tmyArray.set(1.2, prop1_2);\n\t\texpect(myArray.getLength()).to.equal(3);\n\t\texpect(myArray.get(1.6)).to.equal(prop1_2);\n\t});\n\n\tit(\".set and .get should convert string index to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\tvar prop0_3 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0.3\",\n\t\t});\n\t\tmyArray.set(\"0.3\", prop0_3);\n\t\texpect(myArray.getLength()).to.equal(3);\n\t\texpect(myArray.get(\"0.6\")).to.equal(prop0_3);\n\t});\n\n\tit(\".set and .get should reject float index that cannot be converted to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\texpect(() => myArray.set(Infinity, prop0)).to.throw(MSG.NOT_NUMBER + \"in_offset\");\n\t\texpect(() => myArray.get(NaN)).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t});\n\n\tit(\".setValue and .getValue should reject string index that can not be converted to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\texpect(() => myArray.set(\"2abc\", prop0)).to.throw(MSG.NOT_NUMBER + \"in_offset\");\n\t\texpect(() => myArray.get(\"2abc\")).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"arrayProperty.spec.js","sourceRoot":"","sources":["../../../src/test/properties/arrayProperty.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 isBrowser, assert, expect (and `chai.should()` has been called) */\n\n/**\n * @fileoverview In this file, we will test the functions of a BaseProperty object\n * described in /src/properties/baseProperty.js\n */\n\nconst { ChangeSet } = require(\"@fluid-experimental/property-changeset\");\nconst { MSG } = require(\"@fluid-experimental/property-common\").constants;\nconst { DeterministicRandomGenerator } = require(\"@fluid-experimental/property-common\");\n\n_ = require(\"lodash\");\nconst { PropertyFactory } = require(\"../..\");\nconst { BaseProperty } = require(\"../..\");\nconst deepCopy = _.cloneDeep;\nconst { PATH_TOKENS } = BaseProperty;\n\nvar arrayProp;\nvar testFailed = false;\nvar changeSet2;\nvar conflicts;\n\nvar possibleChanges = {\n\t0: \"insert\",\n\t1: \"modify\",\n\t2: \"remove\",\n};\n\nvar getRandomNumbersArray = function (in_size, randomGenerator) {\n\tvar result = [];\n\tfor (var i = 0; i < in_size; i++) {\n\t\tresult.push(Math.floor(randomGenerator.random() * 100));\n\t}\n\treturn result;\n};\n\nvar compareArrays = function (ap1, ap2) {\n\tif (ap1.length !== ap2.length) {\n\t\treturn false;\n\t}\n\tfor (var i = 0; i !== ap1.length; i++) {\n\t\tif (ap1.getEntriesReadOnly()[i] !== ap2.getEntriesReadOnly()[i]) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n\nvar TestArrayFloat32 = {\n\ttypeid: \"autodesk.test:test.arrayfloat32-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Float32\", context: \"array\", length: 3 }],\n};\n\nvar TestArrayString = {\n\ttypeid: \"autodesk.test:test.arraystring-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"String\", context: \"array\", length: 3 }],\n};\n\nvar TestArrayBool = {\n\ttypeid: \"autodesk.test:test.arraybool-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Bool\", context: \"array\", length: 3 }],\n};\n\nvar TestString = {\n\ttypeid: \"autodesk.test:test.string-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"String\" }],\n};\n\nvar TestCustomArray = {\n\ttypeid: \"autodesk.test:test.customarray-1.0.0\",\n\tproperties: [\n\t\t{ id: \"data\", typeid: \"autodesk.test:test.string-1.0.0\", context: \"array\", length: 3 },\n\t],\n};\n\nvar TestDynamicLengthArray = {\n\ttypeid: \"autodesk.test:test.dynamicArray-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"Int32\", context: \"array\" }],\n};\n\nvar TestDynamicLengthNonPrimitiveArray = {\n\ttypeid: \"autodesk.test:test.nonPrimitiveArray-1.0.0\",\n\tproperties: [{ id: \"data\", typeid: \"autodesk.test:test.string-1.0.0\", context: \"array\" }],\n};\n\nvar OurArrayTestTemplate = {\n\ttypeid: \"autodesk.tests:ArrayTestID-1.0.0\",\n\tproperties: [{ id: \"MyArray\", typeid: \"Float32\", context: \"array\" }],\n};\n\nvar NestedArrayTestTemplate = {\n\ttypeid: \"autodesk.tests:NestedArrayTest-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"MyArray\", typeid: \"Float32\", context: \"array\" }],\n\t\t},\n\t],\n};\n\nvar ComplexTemplate = {\n\ttypeid: \"autodesk.tests:ComplexProp-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"data\", typeid: \"Float32\" }],\n\t\t},\n\t],\n};\nvar ComplexTemplate2 = {\n\ttypeid: \"autodesk.tests:ComplexProp2-1.0.0\",\n\tproperties: [\n\t\t{\n\t\t\tid: \"nest\",\n\t\t\tproperties: [{ id: \"data2\", typeid: \"Float32\" }],\n\t\t},\n\t],\n};\nvar ComplexTemplate3 = {\n\ttypeid: \"autodesk.tests:ComplexProp3-1.0.0\",\n\tproperties: [\n\t\t{ id: \"complex1\", typeid: \"autodesk.tests:ComplexProp-1.0.0\" },\n\t\t{ id: \"complex2\", typeid: \"autodesk.tests:ComplexProp2-1.0.0\" },\n\t],\n};\n\nvar ComplexArrayTemplate = {\n\ttypeid: \"autodesk.tests:ComplexArray-1.0.0\",\n\tproperties: [\n\t\t{ id: \"myarray\", typeid: \"autodesk.tests:ComplexProp-1.0.0\", context: \"array\" },\n\t],\n};\nvar Complex3ArrayTemplate = {\n\ttypeid: \"autodesk.tests:Complex3Array-1.0.0\",\n\tproperties: [\n\t\t{ id: \"myarray\", typeid: \"autodesk.tests:ComplexProp3-1.0.0\", context: \"array\" },\n\t],\n};\n\ndescribe(\"ArrayProperty\", function () {\n\t/**\n\t * Get all the objects we need in this test here.\n\t */\n\tbefore(function () {\n\t\tPropertyFactory._reregister(OurArrayTestTemplate);\n\t\tPropertyFactory._reregister(TestArrayFloat32);\n\t\tPropertyFactory._reregister(TestString);\n\t\tPropertyFactory._reregister(TestCustomArray);\n\t\tPropertyFactory._reregister(TestArrayString);\n\t\tPropertyFactory._reregister(TestArrayBool);\n\t\tPropertyFactory._reregister(TestDynamicLengthArray);\n\t\tPropertyFactory._reregister(TestDynamicLengthNonPrimitiveArray);\n\t\tPropertyFactory._reregister(NestedArrayTestTemplate);\n\t\tPropertyFactory._reregister(ComplexArrayTemplate);\n\t\tPropertyFactory._reregister(ComplexTemplate);\n\t\tPropertyFactory._reregister(ComplexTemplate2);\n\t\tPropertyFactory._reregister(ComplexTemplate3);\n\t\tPropertyFactory._reregister(Complex3ArrayTemplate);\n\t});\n\n\tdescribe(\"API methods - non primitive arrays\", function () {\n\t\tvar myProp, stringProp1, stringProp2, stringProp3, stringProp4, myArray;\n\t\tbefore(function () {\n\t\t\tmyProp = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\");\n\t\t\tstringProp1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp3 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tstringProp4 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tmyArray = myProp.get(\"data\");\n\t\t});\n\n\t\tit(\".clear should remove all items from an array and return nothing\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.length).to.equal(2);\n\t\t\texpect(myArray.clear()).to.equal(undefined);\n\t\t\texpect(myArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".clear should work on an empty array\", function () {\n\t\t\texpect(function () {\n\t\t\t\tmyArray.clear();\n\t\t\t}).to.not.throw();\n\t\t\texpect(function () {\n\t\t\t\tmyArray.clear();\n\t\t\t}).to.not.throw();\n\t\t});\n\n\t\tit(\".get should return a property\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tvar result = myArray.get(0) instanceof BaseProperty;\n\t\t\texpect(result).to.be.true;\n\t\t\texpect(myArray.get(0)).to.deep.equal(stringProp1);\n\t\t});\n\n\t\tit(\".get should return a target deferenced by a chain of reference properties\", function () {\n\t\t\tlet root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet reference = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference2 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference3 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference4 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference5 = PropertyFactory.create(\"Reference\");\n\t\t\tlet target = PropertyFactory.create(\"String\");\n\t\t\troot.insert(\"array\", myProp);\n\t\t\troot.insert(\"reference\", reference);\n\t\t\troot.insert(\"reference2\", reference2);\n\t\t\troot.insert(\"reference3\", reference3);\n\t\t\troot.insert(\"reference4\", reference4);\n\t\t\troot.insert(\"target\", target);\n\n\t\t\treference.set(target);\n\t\t\treference2.set(\"/reference\");\n\t\t\treference3.set(\"/reference2\");\n\t\t\treference4.set(\"/reference3\");\n\t\t\treference5.set(\"/reference4\");\n\t\t\tmyArray.push(reference5);\n\n\t\t\texpect(myArray.get(0)).to.deep.equal(target);\n\t\t\troot.clear();\n\t\t});\n\n\t\tit(\".get should return a target deferenced by a chain of reference properties with *\", function () {\n\t\t\tlet root = PropertyFactory.create(\"NodeProperty\");\n\t\t\tlet reference = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference2 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference3 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference4 = PropertyFactory.create(\"Reference\");\n\t\t\tlet reference5 = PropertyFactory.create(\"Reference\");\n\t\t\tlet target = PropertyFactory.create(\"String\");\n\t\t\troot.insert(\"array\", myProp);\n\t\t\troot.insert(\"reference\", reference);\n\t\t\troot.insert(\"reference2\", reference2);\n\t\t\troot.insert(\"reference3\", reference3);\n\t\t\troot.insert(\"reference4\", reference4);\n\t\t\troot.insert(\"target\", target);\n\n\t\t\treference.set(target);\n\t\t\treference2.set(\"/reference\");\n\t\t\treference3.set(\"/reference2*\");\n\t\t\treference4.set(\"/reference3\");\n\t\t\treference5.set(\"/reference4\");\n\t\t\tmyArray.push(reference5);\n\n\t\t\texpect(myArray.get(0)).to.deep.equal(reference2);\n\t\t\troot.clear();\n\t\t});\n\n\t\tit(\".get should work with an array to return nested values\", function () {\n\t\t\tvar myComplexArray = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")\n\t\t\t\t._properties.myarray;\n\t\t\tvar myComplexProp = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tmyComplexArray.push(myComplexProp);\n\t\t\texpect(myComplexArray.get([0, \"nest\"])).to.deep.equal(myComplexArray.get(0).get(\"nest\"));\n\t\t});\n\n\t\tit(\".get should work with an array as input\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(1);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(2);\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(myArray1.get([0, \"nest\", \"data\"]).getValue()).to.equal(1);\n\t\t});\n\t\tit(\".get should accept raise level tokens\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(7);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(8);\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(\n\t\t\t\tmyArray1\n\t\t\t\t\t.get([\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\t\"myarray\",\n\t\t\t\t\t\t0,\n\t\t\t\t\t\t\"nest\",\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\tPATH_TOKENS.UP,\n\t\t\t\t\t\t1,\n\t\t\t\t\t\t\"nest\",\n\t\t\t\t\t\t\"data\",\n\t\t\t\t\t])\n\t\t\t\t\t.getValue(),\n\t\t\t).to.equal(8);\n\t\t});\n\t\tit(\".get should accept path root tokens\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty1.get(\"nest\").get(\"data\").setValue(3);\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty2.get(\"nest\").get(\"data\").setValue(6);\n\t\t\tvar testProperty3 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\ttestProperty3.get(\"nest\").get(\"data\").setValue(9);\n\t\t\tvar myArrayProp = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\");\n\t\t\tvar myArray1 = myArrayProp._properties.myarray;\n\t\t\tmyArray1.insertRange(0, [testProperty1, testProperty2, testProperty3]);\n\t\t\texpect(myArray1.get([PATH_TOKENS.ROOT])).to.equal(myArrayProp);\n\t\t\texpect(myArray1.get([PATH_TOKENS.ROOT, \"myarray\", 2])).to.equal(testProperty3);\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return an array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp1, stringProp2]);\n\t\t});\n\n\t\tit(\".getFullTypeid will return a string of the full type id with or without collection\", function () {\n\t\t\t// defaults to false\n\t\t\texpect(myArray.getFullTypeid()).to.equal(\"array<autodesk.test:test.string-1.0.0>\");\n\t\t\t// in_hideCollection: true\n\t\t\texpect(myArray.getFullTypeid(true)).to.equal(\"autodesk.test:test.string-1.0.0\");\n\t\t});\n\n\t\tit(\".getIds should return an array of string indexes\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getIds()).to.deep.equal([\"0\", \"1\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the array\", function () {\n\t\t\texpect(myArray.getLength()).to.equal(0);\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t});\n\n\t\tit(\".has should work\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\texpect(myArray.has(1)).to.be.true;\n\t\t\texpect(myArray.has(2)).to.be.false;\n\t\t});\n\n\t\tit(\".getRelativePath should return a valid path\", function () {\n\t\t\tvar testProperty1 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tvar testProperty2 = PropertyFactory.create(\"autodesk.tests:ComplexProp-1.0.0\");\n\t\t\tvar myArray1 = PropertyFactory.create(\"autodesk.tests:ComplexArray-1.0.0\")._properties\n\t\t\t\t.myarray;\n\t\t\tmyArray1.push(testProperty1);\n\t\t\tmyArray1.push(testProperty2);\n\t\t\texpect(myArray1.get([0, \"nest\", \"data\"]).getRelativePath(myArray1)).to.equal(\n\t\t\t\t\"[0].nest.data\",\n\t\t\t);\n\t\t\texpect(myArray1.getRelativePath(myArray1.get([0, \"nest\", \"data\"]))).to.equal(\n\t\t\t\t\"../../../\",\n\t\t\t);\n\t\t\texpect(\n\t\t\t\tmyArray1.get([0, \"nest\"]).getRelativePath(myArray1.get([1, \"nest\", \"data\"])),\n\t\t\t).to.equal(\"../../../[0].nest\");\n\t\t});\n\n\t\tit(\".getValues should return an array of objects\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\n\t\t\tmyArray.setValues({\n\t\t\t\t0: {\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(myArray.getValues()).to.deep.equal([\n\t\t\t\t{\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdata: \"\",\n\t\t\t\t},\n\t\t\t]);\n\t\t});\n\n\t\tit(\".insert should insert a new property in a non primitive array\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\texpect(myArray.getLength()).to.equal(1);\n\t\t\texpect(myArray.get(0)).to.deep.equal(stringProp1);\n\t\t\tmyArray.insert(1, stringProp2);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t});\n\n\t\tit(\".insert should push existing values to the right if index already has a property\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\tmyArray.insert(0, stringProp2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp2, stringProp1]);\n\t\t});\n\n\t\tit(\".insertRange should insert new properties\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(myArray.getLength()).to.equal(2);\n\t\t\texpect(myArray.get(1)).to.deep.equal(stringProp2);\n\t\t});\n\n\t\tit(\".insertRange should push existing values to the right if index already has a property\", function () {\n\t\t\tmyArray.insert(0, stringProp1);\n\t\t\tmyArray.insertRange(0, [stringProp2, stringProp3]);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([\n\t\t\t\tstringProp2,\n\t\t\t\tstringProp3,\n\t\t\t\tstringProp1,\n\t\t\t]);\n\t\t});\n\n\t\tit(\"pop should remove only last element of an array and return the removed element\", function () {\n\t\t\tvar myDynamicArray = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\tvar firstString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar secondString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar thirdString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar fourthString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar fifthString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\n\t\t\tmyDynamicArray.push(firstString);\n\t\t\tmyDynamicArray.push(secondString);\n\t\t\tmyDynamicArray.push(thirdString);\n\t\t\texpect(myDynamicArray.length).to.equal(3);\n\n\t\t\tmyDynamicArray.pop();\n\t\t\texpect(myDynamicArray.length).to.equal(2);\n\t\t\texpect(myDynamicArray.get(0)).to.equal(firstString);\n\t\t\texpect(myDynamicArray.get(1)).to.equal(secondString);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(2);\n\t\t\t}).to.throw(Error);\n\n\t\t\tmyDynamicArray.push(thirdString);\n\t\t\texpect(myDynamicArray.pop()).to.deep.equal(thirdString);\n\t\t\tmyDynamicArray.push(fourthString);\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.push(fifthString);\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.pop();\n\t\t\tmyDynamicArray.pop();\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(1);\n\t\t\t}).to.throw(Error);\n\t\t\texpect(myDynamicArray.pop()).to.equal(undefined);\n\t\t});\n\n\t\tit(\"push should add the element to the last position and return the new length of the array\", function () {\n\t\t\tvar myDynamicArray = PropertyFactory.create(\"autodesk.test:test.nonPrimitiveArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myDynamicArray.length).to.equal(0);\n\t\t\tvar firstString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tvar secondString = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\texpect(myDynamicArray.push(firstString)).to.equal(1);\n\t\t\tmyDynamicArray.push(secondString);\n\t\t\texpect(myDynamicArray.length).to.equal(2);\n\t\t\texpect(myDynamicArray.get(0)).to.equal(firstString);\n\t\t\texpect(myDynamicArray.get(1)).to.equal(secondString);\n\t\t\texpect(function () {\n\t\t\t\tmyDynamicArray.get(2);\n\t\t\t}).to.throw(Error);\n\t\t});\n\n\t\tit(\".remove should remove an element from an array, moving remaining elements to the left\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.remove(1);\n\t\t\texpect(myArray.length).to.equal(1);\n\t\t\tmyArray.push(stringProp3);\n\t\t\tmyArray.remove(0);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3]);\n\t\t});\n\n\t\tit(\".removeRange should remove a range of elements from an array and move the remaining elements to the left\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.push(stringProp3);\n\t\t\texpect(myArray.length).to.equal(3);\n\t\t\tmyArray.removeRange(0, 2);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3]);\n\t\t});\n\n\t\tit(\".remove and .removeRange should return the items deleted\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.push(stringProp3);\n\t\t\texpect(myArray.remove(0)).to.deep.equal(stringProp1);\n\t\t\texpect(myArray.removeRange(0, 2)).to.deep.equal([stringProp2, stringProp3]);\n\t\t});\n\n\t\tit(\".set changes an existing element\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tmyArray.set(1, stringProp3);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp1, stringProp3]);\n\t\t});\n\n\t\tit(\".setRange changes a range of existing elements\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tmyArray.setRange(0, [stringProp3, stringProp4]);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp3, stringProp4]);\n\t\t});\n\n\t\tit(\".set and .setRange should throw if trying to set a non-existing element\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\tvar incorrectFn1 = function () {\n\t\t\t\tmyArray.set(3, stringProp3);\n\t\t\t};\n\t\t\texpect(incorrectFn1).to.throw(MSG.SET_OUT_OF_BOUNDS);\n\t\t});\n\n\t\tit(\".setRange should throw if the offset is not an integer\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.setRange(\"test\", [stringProp3, stringProp4]);\n\t\t\t}).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\".setRange should throw if the in_array argument is not an array\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.setRange(1, stringProp3);\n\t\t\t}).to.throw(MSG.IN_ARRAY_NOT_ARRAY + \"ArrayProperty.setRange\");\n\t\t});\n\n\t\tit(\".set should throw if the offset is not an integer\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.set(\"test\", stringProp3);\n\t\t\t}).to.throw(MSG.NOT_NUMBER);\n\t\t});\n\n\t\tit(\".set should throw if the in_value is an array\", function () {\n\t\t\tmyArray.insertRange(0, [stringProp1, stringProp2]);\n\t\t\texpect(() => {\n\t\t\t\tmyArray.set(0, [stringProp3, stringProp4]);\n\t\t\t}).to.throw(MSG.ARRAY_SET_ONE_ELEMENT);\n\t\t});\n\n\t\tit(\".setValues should work for custom type arrays\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.setValues({\n\t\t\t\t0: {\n\t\t\t\t\tdata: \"newTest\",\n\t\t\t\t},\n\t\t\t});\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"newTest\" }, { data: \"\" }]);\n\n\t\t\tstringProp3._properties.data.setValue(\"newNewTest\");\n\t\t\tmyArray.setValues([stringProp3]);\n\t\t\texpect(myArray.getLength()).to.equal(1);\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"newNewTest\" }]);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite the whole array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tstringProp3._properties.data.setValue(\"testing 123\");\n\t\t\tmyArray.setValues([stringProp3]);\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"testing 123\" }]);\n\t\t\texpect(myArray.length).to.equal(1);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite part of the array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.setValues({ 0: { data: \"test test test\" } });\n\t\t\texpect(myArray.getValues()).to.deep.equal([{ data: \"test test test\" }, { data: \"\" }]);\n\t\t});\n\n\t\tit(\".shift should remove the first element of an array and return the removed element\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.shift();\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([stringProp2]);\n\t\t\texpect(myArray.shift()).to.deep.equal(stringProp2);\n\t\t\texpect(myArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".shift should return undefined if called on an empty array\", function () {\n\t\t\texpect(myArray.shift()).to.be.undefined;\n\t\t});\n\n\t\tit(\".unshift should add a property at the beginnig of an array and return the new length of the array\", function () {\n\t\t\tmyArray.push(stringProp1);\n\t\t\tmyArray.push(stringProp2);\n\t\t\tmyArray.unshift(stringProp3);\n\t\t\texpect(myArray.getEntriesReadOnly()).to.deep.equal([\n\t\t\t\tstringProp3,\n\t\t\t\tstringProp1,\n\t\t\t\tstringProp2,\n\t\t\t]);\n\t\t\texpect(myArray.unshift(stringProp4)).to.equal(4);\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tmyArray.clear();\n\t\t});\n\t});\n\n\tdescribe(\"API methods - primitive arrays\", function () {\n\t\tvar myPrimitiveArray;\n\t\tbefore(function () {\n\t\t\tmyPrimitiveArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t});\n\n\t\tit(\".clear should remove all elements in the array\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.length).to.equal(3);\n\t\t\tmyPrimitiveArray.clear();\n\t\t\texpect(myPrimitiveArray.length).to.equal(0);\n\t\t});\n\n\t\tit(\".get should return a value\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\tvar result = myPrimitiveArray.get(0);\n\t\t\texpect(result).to.equal(1);\n\t\t});\n\n\t\tit(\".getEntriesReadOnly should return an array\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\tconst result = myPrimitiveArray.getEntriesReadOnly();\n\t\t\tassert.equal(result.length, 3);\n\t\t\tassert.equal(result[0], 1);\n\t\t\tassert.equal(result[1], 2);\n\t\t\tassert.equal(result[2], 3);\n\t\t});\n\n\t\tit(\"getFullTypeid should return a string of the typeid with or without collection\", function () {\n\t\t\texpect(myPrimitiveArray.getFullTypeid()).to.equal(\"array<Int32>\");\n\t\t\texpect(myPrimitiveArray.getFullTypeid(true)).to.equal(\"Int32\");\n\t\t});\n\n\t\tit(\".getIds should return an array of index strings\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.getIds()).to.deep.equal([\"0\", \"1\", \"2\"]);\n\t\t});\n\n\t\tit(\".getLength should return the length of the array\", function () {\n\t\t\texpect(myPrimitiveArray.getLength()).to.equal(0);\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.getLength()).to.equal(3);\n\t\t});\n\n\t\tit(\".has should work\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.has(1)).to.be.true;\n\t\t\texpect(myPrimitiveArray.has(4)).to.be.false;\n\t\t});\n\n\t\tit(\".setValues and .getValues should work for primitive arrays\", function () {\n\t\t\t// tests for getValues on typed arrays fail but only on PhantomJS.\n\t\t\tif (isBrowser && /** @type {any} */ (window.top).callPhantom) {\n\t\t\t\tthis.skip();\n\t\t\t}\n\t\t\tvar MyArrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\tMyArrayProp.insertRange(0, [1, 2, 3]);\n\t\t\tMyArrayProp.setValues({\n\t\t\t\t0: 12,\n\t\t\t\t2: 9,\n\t\t\t});\n\n\t\t\texpect(MyArrayProp.getValues()).to.deep.equal([12, 2, 9]);\n\n\t\t\tMyArrayProp.setValues([3, 4]);\n\t\t\texpect(MyArrayProp.get(0)).to.equal(3);\n\t\t\texpect(function () {\n\t\t\t\tMyArrayProp.get(2);\n\t\t\t}).to.throw();\n\t\t});\n\n\t\tit(\".insert should insert a value in a primitive array and move other values to the right\", function () {\n\t\t\tmyPrimitiveArray.insert(0, 1);\n\t\t\texpect(myPrimitiveArray.length).to.equal(1);\n\t\t\tmyPrimitiveArray.insert(0, 2);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 1]);\n\t\t});\n\n\t\tit(\".insertRange should insert a range of values and move other values to the right\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.length).to.equal(3);\n\t\t\tmyPrimitiveArray.insertRange(1, [4, 5]);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 4, 5, 2, 3]);\n\t\t});\n\n\t\tit(\".pop should remove the last item of a primitive array and return the removed value\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\texpect(myArray.length).to.equal(3);\n\t\t\tmyArray.pop();\n\t\t\texpect(myArray.length).to.equal(2);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2]);\n\t\t\texpect(myArray.pop()).to.equal(2);\n\t\t});\n\n\t\tit(\".pop should return undefined if called on an empty array\", function () {\n\t\t\texpect(myPrimitiveArray.pop()).to.be.undefined;\n\t\t});\n\n\t\tit(\".push should add a value at the end of the array and return the new length\", function () {\n\t\t\tmyPrimitiveArray.push(1);\n\t\t\tmyPrimitiveArray.push(2);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 2]);\n\t\t\texpect(myPrimitiveArray.push(4)).to.equal(3);\n\t\t});\n\n\t\tit(\".remove should remove an element from the array and return that element\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.remove(0)).to.equal(1);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 3]);\n\t\t});\n\n\t\tit(\".removeRange should remove a range of elements from an array and return those elements\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4, 5]);\n\t\t\texpect(myPrimitiveArray.removeRange(2, 2)).to.deep.equal([3, 4]);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([1, 2, 5]);\n\t\t});\n\n\t\tit(\".resolvePath should work on primitive arrays\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myPrimitiveArray.resolvePath(\"1\")).to.equal(2);\n\t\t});\n\n\t\tit(\".set should replace a value in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\tmyArray.set(2, 8);\n\t\t\texpect(myArray.get(2)).to.equal(8);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2, 8]);\n\t\t});\n\n\t\tit(\".setRange should replace values in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.push(1);\n\t\t\tmyArray.push(2);\n\t\t\tmyArray.push(3);\n\t\t\tmyArray.setRange(1, [4, 5]);\n\t\t\texpect(myArray.get(1)).to.equal(4);\n\t\t\texpect(myArray.get(2)).to.equal(5);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 4, 5]);\n\t\t});\n\n\t\tit(\".setRange should replace last value in a primitive array\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tmyArray.insertRange(0, [1, 2, 3, 4, 5]);\n\t\t\tmyArray.setRange(0, [1, 2, 3, 10, 11]);\n\t\t\texpect(myArray.getValues()).to.deep.equal([1, 2, 3, 10, 11]);\n\t\t});\n\n\t\tit(\".setValues should work to overwrite a whole array\", function () {\n\t\t\tarrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")._properties\n\t\t\t\t.data;\n\t\t\tarrayProp.insertRange(0, [1, 2, 3]);\n\t\t\texpect(arrayProp.get(2)).to.equal(3);\n\t\t\tarrayProp.setValues([13, 14]);\n\t\t\texpect(arrayProp.get(0)).to.equal(13);\n\t\t\tvar incorrectFn = function () {\n\t\t\t\tarrayProp.get(2);\n\t\t\t};\n\t\t\texpect(incorrectFn).to.throw();\n\t\t});\n\n\t\tit(\"setValues should work to overwrite part of the array\", function () {\n\t\t\tvar myArrayProp = PropertyFactory.create(\"autodesk.test:test.dynamicArray-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\tmyArrayProp.insertRange(0, [1, 2, 3]);\n\t\t\texpect(myArrayProp.get(2)).to.equal(3);\n\n\t\t\tmyArrayProp.setValues({\n\t\t\t\t0: 11,\n\t\t\t\t1: 12,\n\t\t\t});\n\t\t\texpect(myArrayProp.get(0)).to.equal(11);\n\t\t\tvar correctFn = function () {\n\t\t\t\tmyArrayProp.get(2);\n\t\t\t};\n\t\t\texpect(correctFn).to.not.throw();\n\t\t\texpect(myArrayProp.get(2)).to.equal(3);\n\t\t});\n\n\t\tit(\".shift should remove the first element of the array and return that element\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4]);\n\t\t\texpect(myPrimitiveArray.shift()).to.equal(1);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([2, 3, 4]);\n\t\t});\n\n\t\tit(\".unshift should add a value to the beginning of the array and return the new length\", function () {\n\t\t\tmyPrimitiveArray.insertRange(0, [1, 2, 3, 4]);\n\t\t\tmyPrimitiveArray.unshift(5);\n\t\t\texpect(myPrimitiveArray.unshift(13)).to.equal(6);\n\t\t\texpect(myPrimitiveArray.getValues()).to.deep.equal([13, 5, 1, 2, 3, 4]);\n\t\t});\n\n\t\tafterEach(function () {\n\t\t\tmyPrimitiveArray.clear();\n\t\t});\n\t});\n\n\tdescribe(\"testing specific types of arrays\", function () {\n\t\tit(\"should support boolean arrays\", function () {\n\t\t\tvar myBoolArray = PropertyFactory.create(\"autodesk.test:test.arraybool-1.0.0\")\n\t\t\t\t._properties.data;\n\t\t\texpect(myBoolArray.length).to.equal(3);\n\n\t\t\texpect(myBoolArray.get(0)).to.equal(false);\n\t\t\texpect(myBoolArray.get(1)).to.equal(false);\n\t\t\texpect(myBoolArray.get(2)).to.equal(false);\n\t\t\texpect(function () {\n\t\t\t\tmyBoolArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\tmyBoolArray.push(true);\n\t\t\tmyBoolArray.push(0);\n\n\t\t\texpect(myBoolArray.getLength().should.equal(5));\n\t\t\texpect(myBoolArray.get(3)).to.equal(true);\n\t\t\texpect(myBoolArray.get(4)).to.equal(false);\n\n\t\t\tmyBoolArray.pop();\n\t\t\texpect(myBoolArray.getLength().should.equal(4));\n\n\t\t\tmyBoolArray.insert(0, 1);\n\t\t\texpect(myBoolArray.get(0)).to.equal(true);\n\t\t});\n\n\t\tit(\".set and .get should convert float index to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\tmyArray.set(1.2, \"item 1.2\");\n\t\t\texpect(myArray.getLength()).to.equal(3);\n\t\t\texpect(myArray.get(1.6)).to.equal(\"item 1.2\");\n\t\t});\n\n\t\tit(\".set and .get should convert string index to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\tmyArray.set(\"0.3\", \"item 0.3\");\n\t\t\texpect(myArray.getLength()).to.equal(3);\n\t\t\texpect(myArray.get(\"0.6\")).to.equal(\"item 0.3\");\n\t\t});\n\n\t\tit(\".set and .get should reject float index that cannot be converted to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\texpect(() => myArray.set(Infinity, \"item infinity\")).to.throw(\n\t\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\",\n\t\t\t);\n\t\t\texpect(() => myArray.get(NaN)).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t});\n\n\t\tit(\".set and .get should reject string index that can not be converted to int\", function () {\n\t\t\tvar myArray = PropertyFactory.create(\"String\", \"array\", [\"item 0\", \"item 1\", \"item 2\"]);\n\t\t\texpect(() => myArray.set(\"2abc\", \"item 2abc\")).to.throw(\n\t\t\t\tMSG.NOT_NUMBER + \"in_offset, method: ArrayProperty.setRange or .set\",\n\t\t\t);\n\t\t\texpect(() => myArray.get(\"2abc\")).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t\t});\n\t});\n\n\tdescribe(\"Checking the generalized squash function of ArrayProperty\", function () {\n\t\tit(\"should be squashed to the expected changeset\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [0, 0]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.cleanDirty();\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [2, 3]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tmodify: [[1, [9, 44]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tinsert: [[3, [6, 7, 8]]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tremove: [[4, 1]],\n\t\t\t\t});\n\n\t\t\t\tarrayProp.applyChangeSet({\n\t\t\t\t\tmodify: [[5, [9]]],\n\t\t\t\t});\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(arrayProp._getDirtyChanges()).to.deep.equal({\n\t\t\t\t\tinsert: [\n\t\t\t\t\t\t[0, [2, 9]],\n\t\t\t\t\t\t[1, [6, 8]],\n\t\t\t\t\t],\n\t\t\t\t\tmodify: [[0, [44, 9]]],\n\t\t\t\t});\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"Merging of reversible modifications\", function () {\n\t\t\tvar base = {\n\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tmodify: [[0, [2], [1]]],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar mod = {\n\t\t\t\t\"array<Float32>\": {\n\t\t\t\t\tvalue: {\n\t\t\t\t\t\tmodify: [[0, [3], [2]]],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t};\n\t\t\tvar testChangeSet = new ChangeSet(base);\n\t\t\ttestChangeSet.applyChangeSet(mod);\n\t\t\tvar CS = testChangeSet.getSerializedChangeSet();\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0].length).to.equal(3);\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0][1][0]).to.equal(3); // Value after modification\n\t\t\texpect(CS[\"array<Float32>\"].value.modify[0][2][0]).to.equal(1); // Value before modification\n\t\t});\n\n\t\tit(\"[random numbers test] - the resulting insert should be equal to the data array\", function (done) {\n\t\t\tvar error;\n\t\t\tthis.timeout(120000); // When the code is instrumented for coverage analysis, it takes a lot of time.\n\t\t\tfor (let j = 0; j < 10; j++) {\n\t\t\t\tconst random = new DeterministicRandomGenerator(j);\n\n\t\t\t\ttry {\n\t\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t\t.MyArray;\n\n\t\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9]]] });\n\t\t\t\t\tarrayProp.cleanDirty();\n\t\t\t\t\tvar currentArrayLength;\n\n\t\t\t\t\tfor (var i = 0; i < 1000; ++i) {\n\t\t\t\t\t\tcurrentArrayLength = arrayProp.length;\n\t\t\t\t\t\tvar nextOpType = \"insert\";\n\t\t\t\t\t\tvar opOffset = 0;\n\n\t\t\t\t\t\tif (currentArrayLength > 0) {\n\t\t\t\t\t\t\tnextOpType = possibleChanges[Math.floor(random.random() * 2.999999)];\n\t\t\t\t\t\t\topOffset = Math.min(\n\t\t\t\t\t\t\t\tMath.floor(random.random() * currentArrayLength),\n\t\t\t\t\t\t\t\tcurrentArrayLength - 1,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar opLength =\n\t\t\t\t\t\t\t1 +\n\t\t\t\t\t\t\tMath.min(\n\t\t\t\t\t\t\t\tMath.floor(random.random() * (currentArrayLength - opOffset)),\n\t\t\t\t\t\t\t\tcurrentArrayLength - opOffset - 1,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\tvar nextChangeset = {};\n\n\t\t\t\t\t\tswitch (nextOpType) {\n\t\t\t\t\t\t\tcase \"remove\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [[opOffset, opLength]];\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"insert\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [];\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType].push([\n\t\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.floor(random.random() * 4 + 1), random),\n\t\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcase \"modify\": {\n\t\t\t\t\t\t\t\tnextChangeset[nextOpType] = [\n\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.min(random.random() * 2 + 1, opLength), random),\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\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// no default\n\t\t\t\t\t\t}\n\t\t\t\t\t\tarrayProp.applyChangeSet(nextChangeset);\n\n\t\t\t\t\t\tvar arrayPropTest = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")\n\t\t\t\t\t\t\t._properties.MyArray;\n\t\t\t\t\t\tarrayPropTest.applyChangeSet({\n\t\t\t\t\t\t\tinsert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9]]],\n\t\t\t\t\t\t});\n\t\t\t\t\t\tarrayPropTest.cleanDirty();\n\t\t\t\t\t\tarrayPropTest.applyChangeSet(arrayProp._getDirtyChanges());\n\n\t\t\t\t\t\tif (!compareArrays(arrayProp, arrayPropTest)) {\n\t\t\t\t\t\t\tconsole.warn(\"Bug found in iteration \", j, i);\n\t\t\t\t\t\t\tconsole.log(\"Testresults: \");\n\t\t\t\t\t\t\tconsole.log(JSON.stringify(nextChangeset));\n\t\t\t\t\t\t\tconsole.log(arrayProp.getEntriesReadOnly());\n\t\t\t\t\t\t\tconsole.log(arrayPropTest.getEntriesReadOnly());\n\t\t\t\t\t\t\tconsole.log(JSON.stringify(arrayProp._getDirtyChanges()));\n\t\t\t\t\t\t\ttestFailed = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\terror = e;\n\t\t\t\t} finally {\n\t\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\t\texpect(testFailed).to.equal(false);\n\t\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdone();\n\t\t});\n\t});\n\n\tdescribe(\"Fixed Size arrays\", function () {\n\t\t// Should throw an exception when you create a primitive type and try to add it to an array\n\t\t// that takes values of that primitive type\n\t\tit(\"should support fixed size arrays for a primitive type\", function () {\n\t\t\tvar myFloatArray = PropertyFactory.create(\"autodesk.test:test.arrayfloat32-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myFloatArray.length).to.equal(3);\n\t\t\texpect(myFloatArray.get(0)).to.equal(0);\n\t\t\texpect(myFloatArray.get(1)).to.equal(0);\n\t\t\texpect(myFloatArray.get(2)).to.equal(0);\n\t\t\texpect(function () {\n\t\t\t\tmyFloatArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myFloatArray._serialize(true)).to.be.empty; // Waiting for fix from OT\n\t\t\texpect(myFloatArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() { myFloatArray.push(10);}).to.throw(Error);\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\n\t\tit(\"should support fixed size arrays for a primitive type\", function () {\n\t\t\tvar myStringArray = PropertyFactory.create(\"autodesk.test:test.arraystring-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myStringArray.length).to.equal(3);\n\t\t\texpect(myStringArray.get(0)).to.equal(\"\");\n\t\t\texpect(myStringArray.get(1)).to.equal(\"\");\n\t\t\texpect(myStringArray.get(2)).to.equal(\"\");\n\t\t\texpect(function () {\n\t\t\t\tmyStringArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myStringArray._serialize(true)).to.be.empty;\n\t\t\texpect(myStringArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() { myFloatArray.push('');}).to.throw(Error); // TODO: add all functions\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\n\t\tit(\"should support fixed size arrays for a complex type\", function () {\n\t\t\tvar myCustomArray = PropertyFactory.create(\"autodesk.test:test.customarray-1.0.0\")\n\t\t\t\t._properties.data;\n\n\t\t\texpect(myCustomArray.length).to.equal(3);\n\t\t\texpect(myCustomArray.get(0)).to.be.instanceof(BaseProperty);\n\t\t\texpect(myCustomArray.get(1)).to.be.instanceof(BaseProperty);\n\t\t\texpect(myCustomArray.get(2)).to.be.instanceof(BaseProperty);\n\t\t\texpect(function () {\n\t\t\t\tmyCustomArray.get(3);\n\t\t\t}).to.throw(Error);\n\n\t\t\t// Array should be clean after creation and but full serialization should return an insert\n\t\t\texpect(myCustomArray._serialize(true)).to.be.empty;\n\t\t\texpect(myCustomArray._serialize(false)).to.have.keys(\"insert\");\n\n\t\t\t// This should throw\n\t\t\t// expect(function() {\n\t\t\t// myCustomArray.push(PropertyFactory.create('autodesk.test:test.string-1.0.0'));\n\t\t\t// }).to.throw(Error);\n\t\t\t// expect(function() { myFloatArray.removeRange(0,1);}).to.throw(Error);\n\t\t});\n\t});\n\n\tdescribe(\"Checking normalized changeset ability of ArrayProperty\", function () {\n\t\tit(\"should be equal to the expected value\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [0, 0]]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[1, [2, 3, 4, 5, 6, 7, 8, 9]]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[4, [222, 333]]] });\n\t\t\t\tarrayProp.applyChangeSet({ remove: [[2, 3]] });\n\t\t\t\tarrayProp.applyChangeSet({ modify: [[3, [33]]] });\n\t\t\t\tarrayProp.applyChangeSet({ remove: [[0, 2]] });\n\t\t\t\tarrayProp.applyChangeSet({ insert: [[0, [123, 456]]] });\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(arrayProp._getDirtyChanges()).to.deep.equal({\n\t\t\t\t\tinsert: [[0, [123, 456, 333, 33, 6, 7, 8, 9, 0]]],\n\t\t\t\t});\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"[random numbers test] - the resulting insert should be equal to the data array\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\t\t\t\tvar currentArrayLength = 0;\n\t\t\t\tconst random = new DeterministicRandomGenerator(0);\n\n\t\t\t\tfor (var i = 0; i < 1000; ++i) {\n\t\t\t\t\tcurrentArrayLength = arrayProp.length;\n\t\t\t\t\tvar nextOpType = \"insert\";\n\t\t\t\t\tvar opOffset = 0;\n\n\t\t\t\t\tif (currentArrayLength > 0) {\n\t\t\t\t\t\tnextOpType = possibleChanges[Math.floor(Math.random() * 2.999999)];\n\t\t\t\t\t\topOffset = Math.floor(Math.random() * (currentArrayLength - 0.000001));\n\t\t\t\t\t}\n\n\t\t\t\t\tvar opLength =\n\t\t\t\t\t\t1 + Math.floor(Math.random() * (currentArrayLength - opOffset - 0.0001));\n\t\t\t\t\tif (opLength < 1) {\n\t\t\t\t\t\topLength = 1;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar nextChangeset = {};\n\n\t\t\t\t\tswitch (nextOpType) {\n\t\t\t\t\t\tcase \"remove\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [[opOffset, opLength]];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"insert\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [];\n\t\t\t\t\t\t\tnextChangeset[nextOpType].push([\n\t\t\t\t\t\t\t\topOffset,\n\t\t\t\t\t\t\t\tgetRandomNumbersArray(Math.floor(Math.random() * 4 + 1), random),\n\t\t\t\t\t\t\t]);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase \"modify\": {\n\t\t\t\t\t\t\tnextChangeset[nextOpType] = [\n\t\t\t\t\t\t\t\t[opOffset, getRandomNumbersArray(opLength, random)],\n\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// no default\n\t\t\t\t\t}\n\t\t\t\t\tarrayProp.applyChangeSet(nextChangeset);\n\t\t\t\t}\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(arrayProp).to.not.equal(null);\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\tif (arrayProp.getEntriesReadOnly().length > 0) {\n\t\t\t\t\texpect(arrayProp._getDirtyChanges().insert[0][1]).to.deep.equal(\n\t\t\t\t\t\tArray.prototype.slice.call(arrayProp.getEntriesReadOnly()),\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\texpect(arrayProp._getDirtyChanges().insert).to.equal(undefined);\n\t\t\t\t}\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\t});\n\n\tdescribe(\"Checking deserialization\", function () {\n\t\tvar runDeserializationTests = function (testArrayOperation, testArray, primitiveProperty) {\n\t\t\t// Serialization into an empty array\n\t\t\tvar values = [\"test1\", \"test2\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// Overwriting with a different array\n\t\t\tvalues = [\"test3\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// A second deserialization to the same array should preserve the changeset\n\t\t\tvalues = [\"test3\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]] });\n\n\t\t\t// Now we clean the array and overwrite\n\t\t\ttestArray.cleanDirty();\n\t\t\tvalues = [\"test1\", \"test2\"];\n\t\t\ttestArrayOperation(values, { insert: [[0, values]], remove: [[0, 1]] });\n\n\t\t\t// A second deserialization to the same array\n\t\t\ttestArray.cleanDirty();\n\t\t\tvalues = [\"test1\", \"test2\"];\n\t\t\tif (primitiveProperty) {\n\t\t\t\t// should report no change for primitive properties\n\t\t\t\ttestArrayOperation(values, {});\n\t\t\t} else {\n\t\t\t\t// Result in a replacement for non primitive properties\n\t\t\t\ttestArrayOperation(values, { insert: [[0, values]], remove: [[0, 2]] });\n\t\t\t}\n\n\t\t\t// Creating an empty array\n\t\t\ttestArray.cleanDirty();\n\t\t\tvalues = [];\n\t\t\ttestArrayOperation(values, { remove: [[0, 2]] });\n\n\t\t\t// A second serialization to an empty array should report no change\n\t\t\ttestArray.cleanDirty();\n\t\t\tvalues = [];\n\t\t\ttestArrayOperation(values, {});\n\t\t};\n\n\t\tit(\"of a primitive array property\", function () {\n\t\t\tvar stringArray = PropertyFactory.create(\"String\", \"array\");\n\n\t\t\tvar testArrayOperation = function (values, expectedChangeSet) {\n\t\t\t\tstringArray.deserialize(values.length !== 0 ? { insert: [[0, values]] } : {});\n\t\t\t\texpect(stringArray.getEntriesReadOnly()).to.deep.equal(values);\n\t\t\t\texpect(\n\t\t\t\t\tstringArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t\texpect(\n\t\t\t\t\tstringArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t};\n\n\t\t\trunDeserializationTests(testArrayOperation, stringArray, true);\n\t\t});\n\n\t\tit(\"of a custom type array\", function () {\n\t\t\tvar testArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\n\t\t\tvar mapStringsToCustomType = function (strings) {\n\t\t\t\treturn strings.map(function (x) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tString: {\n\t\t\t\t\t\t\tdata: x,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttypeid: \"autodesk.test:test.string-1.0.0\",\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tvar testArrayOperation = function (values, expectedChangeSet) {\n\t\t\t\ttestArray.deserialize(\n\t\t\t\t\tvalues.length !== 0\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tinsert: [[0, mapStringsToCustomType(values)]],\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {},\n\t\t\t\t);\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.getEntriesReadOnly().map(function (x) {\n\t\t\t\t\t\treturn x.get(\"data\").getValue();\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(values);\n\n\t\t\t\tif (expectedChangeSet.insert) {\n\t\t\t\t\texpectedChangeSet.insert[0][1] = mapStringsToCustomType(\n\t\t\t\t\t\texpectedChangeSet.insert[0][1],\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.PENDING_CHANGE,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t\texpect(\n\t\t\t\t\ttestArray.serialize({\n\t\t\t\t\t\tdirtyOnly: true,\n\t\t\t\t\t\tdirtinessType: BaseProperty.MODIFIED_STATE_FLAGS.DIRTY,\n\t\t\t\t\t}),\n\t\t\t\t).to.deep.equal(expectedChangeSet);\n\t\t\t};\n\n\t\t\trunDeserializationTests(testArrayOperation, testArray, false);\n\t\t});\n\t});\n\n\tdescribe(\"Checking rebasing of an ArrayProperty\", function () {\n\t\tit(\"a remove-modify should be correctly rebased to the given changeset and cause conflicts\", function (done) {\n\t\t\tvar error;\n\t\t\ttry {\n\t\t\t\tarrayProp = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\")._properties\n\t\t\t\t\t.MyArray;\n\n\t\t\t\tvar arrayProp1 = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\");\n\t\t\t\t// prepare initial state\n\t\t\t\tarrayProp1._properties.MyArray.applyChangeSet({\n\t\t\t\t\tinsert: [[0, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]],\n\t\t\t\t});\n\n\t\t\t\t// create a copy of this state\n\t\t\t\tvar arrayProp2 = PropertyFactory.create(\"autodesk.tests:ArrayTestID-1.0.0\");\n\t\t\t\tarrayProp2.deserialize(arrayProp1._serialize(false));\n\n\t\t\t\t// make sure the states are clear\n\t\t\t\tarrayProp1.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\t\t\t\tarrayProp2.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\t// apply different operations to the two properties in parallel\n\t\t\t\tarrayProp1._properties.MyArray.applyChangeSet({\n\t\t\t\t\tremove: [\n\t\t\t\t\t\t[2, 1],\n\t\t\t\t\t\t[4, 1],\n\t\t\t\t\t\t[6, 1],\n\t\t\t\t\t],\n\t\t\t\t});\n\n\t\t\t\tarrayProp2._properties.MyArray.applyChangeSet({\n\t\t\t\t\tmodify: [\n\t\t\t\t\t\t[2, [23, 24]],\n\t\t\t\t\t\t[5, [33, 34, 35]],\n\t\t\t\t\t],\n\t\t\t\t});\n\n\t\t\t\t// Get the ChangeSets\n\t\t\t\tvar changeSet1 = new ChangeSet(arrayProp1._serialize(true));\n\t\t\t\tchangeSet2 = arrayProp2._serialize(true);\n\n\t\t\t\t// Perform the actual rebase\n\t\t\t\tconflicts = [];\n\t\t\t\tchangeSet1._rebaseChangeSet(changeSet2, conflicts);\n\t\t\t} catch (e) {\n\t\t\t\terror = e;\n\t\t\t} finally {\n\t\t\t\texpect(error).to.equal(undefined);\n\t\t\t\texpect(changeSet2).to.not.equal(null);\n\t\t\t\texpect(conflicts.length).to.equal(2);\n\t\t\t\texpect(conflicts).to.deep.equal([\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"MyArray\",\n\t\t\t\t\t\ttype: ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t\tconflictingChange: {\n\t\t\t\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\t\t\t\toperation: [2, [23]],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: \"MyArray\",\n\t\t\t\t\t\ttype: ChangeSet.ConflictType.ENTRY_MODIFIED_AFTER_REMOVE,\n\t\t\t\t\t\tconflictingChange: {\n\t\t\t\t\t\t\ttype: ChangeSet.ConflictType.COLLIDING_SET,\n\t\t\t\t\t\t\toperation: [6, [34]],\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]);\n\n\t\t\t\texpect(changeSet2[\"array<Float32>\"].MyArray).to.deep.equal({\n\t\t\t\t\tmodify: [[2, [24, 33, 35]]],\n\t\t\t\t});\n\t\t\t\tdone();\n\t\t\t}\n\t\t});\n\n\t\tit(\"@bugfix ensure existing properties are unparented during deserialization\", function () {\n\t\t\t// Bug caused by deserialization during rebase\n\t\t\tarrayProp = PropertyFactory.create(TestDynamicLengthNonPrimitiveArray.typeid);\n\t\t\tconst customProp = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\");\n\t\t\tarrayProp.get(\"data\").push(customProp);\n\n\t\t\tconst state = arrayProp._serialize(false);\n\t\t\tarrayProp.deserialize(state);\n\n\t\t\t// Currently, with custom types, the system makes no attempt to detect if the data\n\t\t\t// is in fact unchanged. Eventually hopefully this will not be the case\n\t\t\t// But this test is looking at a bug, where due to the lack of optimization,\n\t\t\t// customProp will be removed from the arrayProp, and as a result customProp is\n\t\t\t// not a child of the array. The bug is, however, that it will still have a parent\n\t\t\texpect(arrayProp.isDirty()).to.equal(true); // If this fires then you've optimized this?\n\t\t\texpect(customProp.getParent()).to.equal(undefined);\n\t\t});\n\n\t\tit(\"rebase of independent modifies in array\", function () {\n\t\t\tvar arrayObj = PropertyFactory.create(\"autodesk.tests:Complex3Array-1.0.0\");\n\t\t\tvar arrayProperty = arrayObj.get(\"myarray\");\n\t\t\tarrayProperty.insert(0, PropertyFactory.create(\"autodesk.tests:ComplexProp3-1.0.0\"));\n\t\t\tarrayObj.cleanDirty();\n\n\t\t\t// Create the first change\n\t\t\tarrayProperty.get(0).get([\"complex1\", \"nest\", \"data\"]).setValue(123);\n\t\t\tvar changeSet1 = new ChangeSet(arrayObj.serialize({ dirtyOnly: true }));\n\t\t\tarrayObj.cleanDirty();\n\n\t\t\t// Create the second change\n\t\t\tarrayProperty.get(0).get([\"complex2\", \"nest\", \"data2\"]).setValue(123);\n\t\t\tvar secondChangeSet = arrayObj.serialize({ dirtyOnly: true });\n\n\t\t\tvar changeSet2Copy = deepCopy(secondChangeSet);\n\n\t\t\tvar conflictsArray = [];\n\t\t\tchangeSet1._rebaseChangeSet(secondChangeSet, conflictsArray);\n\n\t\t\texpect(secondChangeSet).to.deep.equal(changeSet2Copy);\n\t\t\texpect(conflictsArray).to.be.empty;\n\t\t});\n\n\t\t// TODO: add more rebase tests here!\n\t});\n\n\tdescribe(\"Using prettyPrint()\", function () {\n\t\tit(\"should output a pretty string with number items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.arrayfloat32-1.0.0\");\n\t\t\tproperty.resolvePath(\"data\").set(0, 4);\n\t\t\tproperty.resolvePath(\"data\").set(1, 5);\n\t\t\tproperty.resolvePath(\"data\").set(2, 6);\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.arrayfloat32-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of Float32): [\\n\" +\n\t\t\t\t\" 0: 4\\n\" +\n\t\t\t\t\" 1: 5\\n\" +\n\t\t\t\t\" 2: 6\\n\" +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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(\"should output a pretty string with string items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.arraystring-1.0.0\");\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.arraystring-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of String): [\\n\" +\n\t\t\t\t' 0: \"\"\\n' +\n\t\t\t\t' 1: \"\"\\n' +\n\t\t\t\t' 2: \"\"\\n' +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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(\"should output a pretty string with custom items\", function () {\n\t\t\tvar property = PropertyFactory.create(\"autodesk.test:test.customarray-1.0.0\");\n\t\t\tvar expectedPrettyStr =\n\t\t\t\t\"undefined (autodesk.test:test.customarray-1.0.0):\\n\" +\n\t\t\t\t\" data (Array of autodesk.test:test.string-1.0.0): [\\n\" +\n\t\t\t\t\" 0: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" 1: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" 2: undefined (autodesk.test:test.string-1.0.0):\\n\" +\n\t\t\t\t' data (String): \"\"\\n' +\n\t\t\t\t\" ]\\n\";\n\t\t\tvar prettyStr = \"\";\n\t\t\tproperty.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\t});\n\n\tit(\"should push\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tarray.push(3);\n\t\tarray.getLength().should.equal(4);\n\t\tarray.push([4, 5]);\n\t\tarray.getLength().should.equal(6);\n\t});\n\tit(\"should pop\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tvar element = array.pop();\n\t\telement.should.equal(2);\n\t\tarray.pop();\n\t\tarray.getLength().should.equal(1);\n\t});\n\t// there is no .shiftValue\n\t// should replace the value with a property\n\tit.skip(\"should shift\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tvar element = array.shift();\n\t\telement.should.equal(0);\n\t\tvar elements = array.shift(2);\n\t\tarray.getLength().should.equal(0);\n\t\telements.length.should.equal(2);\n\t});\n\t// there is no .unshiftValue\n\t// should replace the value with a property\n\tit.skip(\"should unshift\", function () {\n\t\tvar array = PropertyFactory.create(\"String\", \"array\", [0, 1, 2]);\n\t\tarray.unshift(3);\n\t\tarray.getLength().should.equal(4);\n\t\tarray.unshift([4, 5]);\n\t\tarray.getLength().should.equal(6);\n\t});\n\n\tit(\"should support boolean arrays\", function () {\n\t\tvar myBoolArray = PropertyFactory.create(\"autodesk.test:test.arraybool-1.0.0\")._properties\n\t\t\t.data;\n\t\texpect(myBoolArray.length).to.equal(3);\n\n\t\texpect(myBoolArray.get(0)).to.equal(false);\n\t\texpect(myBoolArray.get(1)).to.equal(false);\n\t\texpect(myBoolArray.get(2)).to.equal(false);\n\t\texpect(function () {\n\t\t\tmyBoolArray.get(3);\n\t\t}).to.throw(Error);\n\n\t\tmyBoolArray.push(true);\n\t\tmyBoolArray.push(0);\n\n\t\texpect(myBoolArray.getLength().should.equal(5));\n\t\texpect(myBoolArray.get(3)).to.equal(true);\n\t\texpect(myBoolArray.get(4)).to.equal(false);\n\n\t\tmyBoolArray.pop();\n\t\texpect(myBoolArray.getLength().should.equal(4));\n\n\t\tmyBoolArray.insert(0, 1);\n\t\texpect(myBoolArray.get(0)).to.equal(true);\n\t});\n\n\tit(\".set and .get should convert float index to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\tvar prop1_2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1.2\",\n\t\t});\n\t\tmyArray.set(1.2, prop1_2);\n\t\texpect(myArray.getLength()).to.equal(3);\n\t\texpect(myArray.get(1.6)).to.equal(prop1_2);\n\t});\n\n\tit(\".set and .get should convert string index to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\tvar prop0_3 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0.3\",\n\t\t});\n\t\tmyArray.set(\"0.3\", prop0_3);\n\t\texpect(myArray.getLength()).to.equal(3);\n\t\texpect(myArray.get(\"0.6\")).to.equal(prop0_3);\n\t});\n\n\tit(\".set and .get should reject float index that cannot be converted to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\texpect(() => myArray.set(Infinity, prop0)).to.throw(MSG.NOT_NUMBER + \"in_offset\");\n\t\texpect(() => myArray.get(NaN)).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t});\n\n\tit(\".setValue and .getValue should reject string index that can not be converted to int\", function () {\n\t\tvar myArray = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"array\");\n\t\tvar prop0 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 0\",\n\t\t});\n\t\tvar prop1 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 1\",\n\t\t});\n\t\tvar prop2 = PropertyFactory.create(\"autodesk.test:test.string-1.0.0\", \"single\", {\n\t\t\tdata: \"item 2\",\n\t\t});\n\t\tmyArray.insertRange(0, [prop0, prop1, prop2]);\n\t\texpect(() => myArray.set(\"2abc\", prop0)).to.throw(MSG.NOT_NUMBER + \"in_offset\");\n\t\texpect(() => myArray.get(\"2abc\")).to.throw(MSG.IN_POSITION_MUST_BE_NUMBER);\n\t});\n});\n"]}
|