@bitgo/sdk-coin-canton 1.20.0 → 1.22.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/src/canton.d.ts +6 -1
- package/dist/src/canton.d.ts.map +1 -1
- package/dist/src/canton.js +102 -1
- package/dist/src/lib/allocationAllocateBuilder.d.ts +126 -0
- package/dist/src/lib/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationAllocateBuilder.js +250 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts +116 -0
- package/dist/src/lib/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/src/lib/allocationRequestBuilder.js +246 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts +63 -0
- package/dist/src/lib/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/src/lib/cantonCommandBuilder.js +155 -0
- package/dist/src/lib/iface.d.ts +68 -1
- package/dist/src/lib/iface.d.ts.map +1 -1
- package/dist/src/lib/iface.js +3 -1
- package/dist/src/lib/index.d.ts +3 -0
- package/dist/src/lib/index.d.ts.map +1 -1
- package/dist/src/lib/index.js +8 -2
- package/dist/src/lib/resourcesInterface.d.ts +1 -1
- package/dist/src/lib/resourcesInterface.d.ts.map +1 -1
- package/dist/src/lib/resourcesInterface.js +1 -1
- package/dist/src/lib/transaction/transaction.d.ts +7 -1
- package/dist/src/lib/transaction/transaction.d.ts.map +1 -1
- package/dist/src/lib/transaction/transaction.js +107 -9
- package/dist/src/lib/transactionBuilderFactory.d.ts +6 -0
- package/dist/src/lib/transactionBuilderFactory.d.ts.map +1 -1
- package/dist/src/lib/transactionBuilderFactory.js +22 -1
- package/dist/src/lib/utils.d.ts +27 -1
- package/dist/src/lib/utils.d.ts.map +1 -1
- package/dist/src/lib/utils.js +245 -1
- package/dist/test/resources.d.ts +10 -0
- package/dist/test/resources.d.ts.map +1 -1
- package/dist/test/resources.js +12 -2
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationAllocate/allocationAllocateBuilder.js +309 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts +2 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/allocationRequest/allocationRequestBuilder.js +386 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts +2 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.d.ts.map +1 -0
- package/dist/test/unit/builder/cantonCommand/cantonCommandBuilder.js +296 -0
- package/dist/test/unit/canton.js +489 -1
- package/dist/test/unit/utils.js +244 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
package/dist/test/unit/utils.js
CHANGED
|
@@ -130,4 +130,247 @@ describe('Canton Util', function () {
|
|
|
130
130
|
});
|
|
131
131
|
});
|
|
132
132
|
});
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBRTVCLDhDQUFrRDtBQUVsRCxnRUFBd0M7QUFDeEMsNENBWXNCO0FBRXRCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLHdCQUF3QixFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUFDLHNDQUEwQixFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQy9HLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUNqSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FBQyx1Q0FBMkIsRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUMvRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQUMsb0NBQXdCLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDL0csZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsVUFBVSxDQUFDLFFBQVEsRUFDbkIseUZBQXlGLENBQzFGLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQUMsb0NBQXdCLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDL0csZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsVUFBVSxDQUFDLFFBQVEsRUFDbkIscUdBQXFHLENBQ3RHLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQ3BELDZDQUFpQyxDQUFDLG1CQUFtQixFQUNyRCwwQkFBZSxDQUFDLGNBQWMsQ0FDL0IsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsMkVBQTJFLENBQUMsQ0FBQztZQUM3RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUNwRCw0Q0FBZ0MsQ0FBQyxtQkFBbUIsRUFDcEQsMEJBQWUsQ0FBQyxjQUFjLENBQy9CLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDJFQUEyRSxDQUFDLENBQUM7WUFDN0csZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2pILGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FDcEQsNkNBQWlDLENBQUMsbUJBQW1CLEVBQ3JELDBCQUFlLENBQUMsa0JBQWtCLENBQ25DLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FDVixVQUFVLENBQUMsTUFBTSxFQUNqQixnR0FBZ0csQ0FDakcsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUNWLFVBQVUsQ0FBQyxRQUFRLEVBQ25CLHlGQUF5RixDQUMxRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRTtZQUMzRSxNQUFNLFlBQVksR0FBRyxlQUFLLENBQUMsa0NBQWtDLENBQUMsb0NBQXdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM3RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsb0NBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtRQUNqRCxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztZQUN2RixNQUFNLFlBQVksR0FBRyxNQUFNLGVBQUssQ0FBQyx3Q0FBd0MsQ0FDdkUscUNBQXlCLENBQUMsbUJBQW1CLENBQzlDLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUscUNBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFO1FBQ3hDLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtZQUNqRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsNEJBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMzRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLGNBQWMsQ0FBQyw0QkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDM0UsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFO1lBQzdDLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsNEJBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUU7UUFDdkMsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsK0JBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsK0JBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLGNBQWMsQ0FBQywrQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLCtCQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDOUUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCBzaG91bGQgZnJvbSAnc2hvdWxkJztcblxuaW1wb3J0IHsgVHJhbnNhY3Rpb25UeXBlIH0gZnJvbSAnQGJpdGdvL3Nkay1jb3JlJztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uLy4uL3NyYy9saWIvdXRpbHMnO1xuaW1wb3J0IHtcbiAgQ0FOVE9OX0FERFJFU1NFUyxcbiAgQ0FOVE9OX0JMT0NLX0hFSUdIVCxcbiAgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLFxuICBPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UsXG4gIFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhLFxuICBQcmVwYXJlZFRyYW5zYWN0aW9uV2l0aE1lbW8sXG4gIFByZXBhcmVkVHhuMVN0ZXBSZWNlaXZlcixcbiAgUHJlcGFyZWRUeG4yU3RlcFJlY2VpdmVyLFxuICBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLFxuICBUcmFuc2ZlckFjY2VwdGFuY2VQcmVwYXJlUmVzcG9uc2UsXG4gIFRyYW5zZmVyUmVqZWN0aW9uUHJlcGFyZVJlc3BvbnNlLFxufSBmcm9tICcuLi9yZXNvdXJjZXMnO1xuXG5kZXNjcmliZSgnQ2FudG9uIFV0aWwnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdSYXcgdHJhbnNhY3Rpb24gcGFyc2VyJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHJhbnNhY3Rpb25SYXdEYXRhLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICdhYmMtMTo6MTIyMDBjMWVlMjI2ZmJkZjlmYmEzNDYxYzJjMGM3MzMzMWI2OWQzYzZmZDhjZmNlMjhjZGY4NjQxNDExNDFjYzY1NmQnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnJlY2VpdmVyLCAnYWJjLTI6OjEyMjA3ZTk2YWRhMThhODQ1YWRmNGRjMDE0MTAyNjU2MzNkNTI2NmRjYTliYjI4MGM5OGUzNWMzNjkyZGI4N2QzZTM1Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcyMDAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uIHdpdGggbWVtbyBpZCBmaWVsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFRyYW5zYWN0aW9uV2l0aE1lbW8sIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJzEyMjBiOjoxMjIwYmFiNmVmM2VlYzM3YjFiMzgxNjA5OWJlZmU3MmI0M2JmNmMxMzgwMDc3ZDYzNDkyNTRjNDFmZmI3Zjc3NTNiYicpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICcxMjIwYTo6MTIyMGFkZTYwMzAwY2Y3ZDBiMThmZmFhMmZmZTRmNDkyYWQxYWQ2MDFjZmMxNjJiMjBmNzdlYzk5ZDE2YzJjMmYxNTgnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzEwMDAwMDAwMDAnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLm1lbW9JZCwgJzExJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGNvcnJlY3RseSB3aGVuIHJlY2VpdmVyIGlzIG9uIDItc3RlcCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShQcmVwYXJlZFR4bjJTdGVwUmVjZWl2ZXIsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJzEyMjBhOjoxMjIwYWRlNjAzMDBjZjdkMGIxOGZmYWEyZmZlNGY0OTJhZDFhZDYwMWNmYzE2MmIyMGY3N2VjOTlkMTZjMmMyZjE1OCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKFxuICAgICAgICBwYXJzZWREYXRhLnJlY2VpdmVyLFxuICAgICAgICAncmF2aS10ZXN0LXBhcnR5LTE6OjEyMjA5MmU3ZDMzYWMxMGMwZjNkNTU5NzYzNDJmMzc1NTVkZjA1ZGE1Yjc0Mjk1NmQ1NmE2MmFlMjM2Nzc2OTA3OWQyJ1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzIwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIGNvcnJlY3RseSAxJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHhuMVN0ZXBSZWNlaXZlciwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnMTIyMGE6OjEyMjBhZGU2MDMwMGNmN2QwYjE4ZmZhYTJmZmU0ZjQ5MmFkMWFkNjAxY2ZjMTYyYjIwZjc3ZWM5OWQxNmMyYzJmMTU4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLWRlbW8tcGFydHktdHhuLTAxLXRhcHBlcjo6MTIyMGVhN2FiNWE3MjNmOGE2YjIwNzhlNjE3ZTZjNThjYjdlNzhlNDk5NDdkZGMyMzllMWE5NDFhYTU2ZTZiYTA4YjQnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMjAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIGFjY2VwdGFuY2UgcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoXG4gICAgICAgIFRyYW5zZmVyQWNjZXB0YW5jZVByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJBY2NlcHRcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICdEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5yZWNlaXZlciwgJ2FiY2RlOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnNTAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIHJlamVjdGlvbiBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgVHJhbnNmZXJSZWplY3Rpb25QcmVwYXJlUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbixcbiAgICAgICAgVHJhbnNhY3Rpb25UeXBlLlRyYW5zZmVyUmVqZWN0XG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnRFNPOjoxMjIwYmU1OGMyOWU2NWRlNDBiZjI3M2JlMWRjMmIyNjZkNDNhOWEwMDJlYTViMTg5NTVhZWVmN2FhYzg4MWJiNDcxYScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICcxMjIwMTo6MTIyMDM4NDAyY2YxNjUwODc2ZDI5MjBkNjA0N2IxMWE0YWFmMGRlN2I0MjhlOTkxNjAwOWNiYTJhMjJiMWFlMjJjMWEnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzUwMDAwMDAwMDAwJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhcnNlIHRoZSBvbmUtc3RlcCBwcmVhcHByb3ZhbCBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgT25lU3RlcFByZUFwcHJvdmFsUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZS5PbmVTdGVwUHJlQXBwcm92YWxcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEuc2VuZGVyLFxuICAgICAgICAnQml0Z28tZGV2bmV0LXZhbGlkYXRvci0xOjoxMjIwYTBhMGY2MGIwZTYyYjVkNzUwYzQ4NGIxOGMwOTFkYmEyMzA4MGMxMzNkOTQ0NjE0YmE3NWE1ODU4Y2JhMzA0NSdcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLXRlc3QtcGFydHktMTo6MTIyMDViNGUzNTM3YTk1MTI2ZDkwNjA0NTkyMzQ0ZDhhZDNjM2RkY2NkYTRmNzk5MDE5NTQyODBlZTE5YzU3NjcxNGQnXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMCcpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnV2FsbGV0IGluaXQgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBsb2NhbGx5IGdlbmVyYXRlIGFuZCB2YWxpZGF0ZSB0aGUgaGFzaCBmb3IgdG9wb2xvZ3kgdHJhbnNhY3Rpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb21wdXRlZEhhc2ggPSB1dGlscy5jb21wdXRlSGFzaEZyb21DcmVhdGVQYXJ0eVJlc3BvbnNlKEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZS50b3BvbG9neVRyYW5zYWN0aW9ucyk7XG4gICAgICBzaG91bGQuZXhpc3QoY29tcHV0ZWRIYXNoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21wdXRlZEhhc2gsIEdlbmVyYXRlVG9wb2xvZ3lSZXNwb25zZS5tdWx0aUhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnUHJlcGFyZSBzdWJtaXNzaW9uIHJlc3BvbnNlIHZhbGlkYXRpb24nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBsb2NhbGx5IGdlbmVyYXRlIGFuZCB2YWxpZGF0ZSB0aGUgaGFzaCBmb3IgcHJlcGFyZSBzdWJtaXNzaW9uIHJlc3BvbnNlJywgYXN5bmMgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgY29tcHV0ZWRIYXNoID0gYXdhaXQgdXRpbHMuY29tcHV0ZUhhc2hGcm9tUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZShcbiAgICAgICAgUHJlcGFyZVN1Ym1pc3Npb25SZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KGNvbXB1dGVkSGFzaCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY29tcHV0ZWRIYXNoLCBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb25IYXNoKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ0NoZWNrIGlmIHRoZSBhZGRyZXNzIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYWRkcmVzcyBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX0FERFJFU1MpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXJ0eSBoaW50IGlzIGludmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5WQUxJRF9QQVJUWV9ISU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gZmluZ2VycHJpbnQgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLklOVkFMSURfRklOR0VSUFJJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gcGFydHkgaGludCBpcyBtaXNzaW5nJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuTUlTU0lOR19QQVJUWV9ISU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIGZpbmdlcnByaW50IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5NSVNTSU5HX0ZJTkdFUlBSSU5UKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gbWVtbyBpZCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX01FTU9fSUQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ2hlY2sgaWYgYmxvY2sgaGFzaCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgdmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5WQUxJRF9IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYmxvY2sgaGFzaCBoYXMgdmVyc2lvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQmxvY2tJZChDQU5UT05fQkxPQ0tfSEVJR0hULlZBTElEX0hBU0hfV0lUSF9WRVJTSU9OKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgbm90IGEgbnVtYmVyJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuSU5WQUxJRF9CTE9DS19IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHRoZSBibG9jayBoYXNoIGlzIG5lZ2F0aXZlJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuTkVHQVRJVkVfQkxPQ0tfSEFTSCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgZmFsc2UpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19
|
|
133
|
+
describe('Canton Utils - CantonCommand helpers', function () {
|
|
134
|
+
describe('parseCantonTemplateId', function () {
|
|
135
|
+
it('should parse valid "Pkg:Module:Entity" format', function () {
|
|
136
|
+
const result = utils_1.default.parseCantonTemplateId('abc123:Utility.Registry.App.V0.Service.AllocationFactory:AllocationFactory');
|
|
137
|
+
should_1.default.exist(result);
|
|
138
|
+
assert_1.default.equal(result.pkg, 'abc123');
|
|
139
|
+
assert_1.default.equal(result.moduleName, 'Utility.Registry.App.V0.Service.AllocationFactory');
|
|
140
|
+
assert_1.default.equal(result.entityName, 'AllocationFactory');
|
|
141
|
+
});
|
|
142
|
+
it('should return undefined for non-string input', function () {
|
|
143
|
+
const result = utils_1.default.parseCantonTemplateId(123);
|
|
144
|
+
assert_1.default.equal(result, undefined);
|
|
145
|
+
});
|
|
146
|
+
it('should return undefined for wrong number of parts', function () {
|
|
147
|
+
const result = utils_1.default.parseCantonTemplateId('PkgOnly');
|
|
148
|
+
assert_1.default.equal(result, undefined);
|
|
149
|
+
});
|
|
150
|
+
it('should return undefined for empty parts', function () {
|
|
151
|
+
const result = utils_1.default.parseCantonTemplateId(':Module:Entity');
|
|
152
|
+
assert_1.default.equal(result, undefined);
|
|
153
|
+
});
|
|
154
|
+
it('should return undefined for string with only 2 parts', function () {
|
|
155
|
+
const result = utils_1.default.parseCantonTemplateId('Pkg:Module');
|
|
156
|
+
assert_1.default.equal(result, undefined);
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
describe('damlValueToJson', function () {
|
|
160
|
+
it('should return undefined for undefined input', function () {
|
|
161
|
+
const result = utils_1.default.damlValueToJson(undefined);
|
|
162
|
+
assert_1.default.equal(result, undefined);
|
|
163
|
+
});
|
|
164
|
+
it('should convert unit to null', function () {
|
|
165
|
+
const val = { sum: { oneofKind: 'unit', unit: {} } };
|
|
166
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), null);
|
|
167
|
+
});
|
|
168
|
+
it('should convert bool correctly', function () {
|
|
169
|
+
const val = { sum: { oneofKind: 'bool', bool: true } };
|
|
170
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), true);
|
|
171
|
+
});
|
|
172
|
+
it('should convert text correctly', function () {
|
|
173
|
+
const val = { sum: { oneofKind: 'text', text: 'hello' } };
|
|
174
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), 'hello');
|
|
175
|
+
});
|
|
176
|
+
it('should convert contractId correctly', function () {
|
|
177
|
+
const val = { sum: { oneofKind: 'contractId', contractId: '00abc' } };
|
|
178
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), '00abc');
|
|
179
|
+
});
|
|
180
|
+
it('should convert party correctly', function () {
|
|
181
|
+
const val = { sum: { oneofKind: 'party', party: 'Alice::1234' } };
|
|
182
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), 'Alice::1234');
|
|
183
|
+
});
|
|
184
|
+
it('should convert numeric correctly', function () {
|
|
185
|
+
const val = { sum: { oneofKind: 'numeric', numeric: '100.0000000000' } };
|
|
186
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), '100.0000000000');
|
|
187
|
+
});
|
|
188
|
+
it('should convert optional with value', function () {
|
|
189
|
+
const val = {
|
|
190
|
+
sum: {
|
|
191
|
+
oneofKind: 'optional',
|
|
192
|
+
optional: { value: { sum: { oneofKind: 'text', text: 'inner' } } },
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), 'inner');
|
|
196
|
+
});
|
|
197
|
+
it('should convert optional without value to null', function () {
|
|
198
|
+
const val = { sum: { oneofKind: 'optional', optional: {} } };
|
|
199
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), null);
|
|
200
|
+
});
|
|
201
|
+
it('should convert list to array', function () {
|
|
202
|
+
const val = {
|
|
203
|
+
sum: {
|
|
204
|
+
oneofKind: 'list',
|
|
205
|
+
list: {
|
|
206
|
+
elements: [{ sum: { oneofKind: 'text', text: 'a' } }, { sum: { oneofKind: 'text', text: 'b' } }],
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
assert_1.default.deepEqual(utils_1.default.damlValueToJson(val), ['a', 'b']);
|
|
211
|
+
});
|
|
212
|
+
it('should convert textMap to object', function () {
|
|
213
|
+
const val = {
|
|
214
|
+
sum: {
|
|
215
|
+
oneofKind: 'textMap',
|
|
216
|
+
textMap: {
|
|
217
|
+
entries: [
|
|
218
|
+
{ key: 'k1', value: { sum: { oneofKind: 'text', text: 'v1' } } },
|
|
219
|
+
{ key: 'k2', value: { sum: { oneofKind: 'bool', bool: false } } },
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
},
|
|
223
|
+
};
|
|
224
|
+
assert_1.default.deepEqual(utils_1.default.damlValueToJson(val), { k1: 'v1', k2: false });
|
|
225
|
+
});
|
|
226
|
+
it('should convert record to object with label keys', function () {
|
|
227
|
+
const val = {
|
|
228
|
+
sum: {
|
|
229
|
+
oneofKind: 'record',
|
|
230
|
+
record: {
|
|
231
|
+
fields: [
|
|
232
|
+
{ label: 'name', value: { sum: { oneofKind: 'text', text: 'Alice' } } },
|
|
233
|
+
{ label: 'age', value: { sum: { oneofKind: 'int64', int64: '30' } } },
|
|
234
|
+
],
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
};
|
|
238
|
+
assert_1.default.deepEqual(utils_1.default.damlValueToJson(val), { name: 'Alice', age: '30' });
|
|
239
|
+
});
|
|
240
|
+
it('should convert variant to keyed object', function () {
|
|
241
|
+
const val = {
|
|
242
|
+
sum: {
|
|
243
|
+
oneofKind: 'variant',
|
|
244
|
+
variant: {
|
|
245
|
+
constructor: 'Some',
|
|
246
|
+
value: { sum: { oneofKind: 'text', text: 'v' } },
|
|
247
|
+
},
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
assert_1.default.deepEqual(utils_1.default.damlValueToJson(val), { Some: 'v' });
|
|
251
|
+
});
|
|
252
|
+
it('should convert enum to string', function () {
|
|
253
|
+
const val = {
|
|
254
|
+
sum: {
|
|
255
|
+
oneofKind: 'enum',
|
|
256
|
+
enum: { constructor: 'Active' },
|
|
257
|
+
},
|
|
258
|
+
};
|
|
259
|
+
assert_1.default.equal(utils_1.default.damlValueToJson(val), 'Active');
|
|
260
|
+
});
|
|
261
|
+
});
|
|
262
|
+
describe('extractSubmitterActAs', function () {
|
|
263
|
+
it('should extract actAs from real PreparedTransaction', function () {
|
|
264
|
+
const actAs = utils_1.default.extractSubmitterActAs(resources_1.CantonExerciseCommandPrepareResponse.preparedTransaction);
|
|
265
|
+
should_1.default.exist(actAs);
|
|
266
|
+
assert_1.default.ok(Array.isArray(actAs));
|
|
267
|
+
assert_1.default.equal(actAs.length, 1);
|
|
268
|
+
assert_1.default.equal(actAs[0], 'RegRegistrar::1220508e54fb709dcb1a9b4096408ad415d2217d8881ad9034a9850752933ba88ad5');
|
|
269
|
+
});
|
|
270
|
+
});
|
|
271
|
+
describe('extractCantonCommandInfo', function () {
|
|
272
|
+
it('should extract ExerciseCommand info correctly', function () {
|
|
273
|
+
const info = utils_1.default.extractCantonCommandInfo(resources_1.CantonExerciseCommandPrepareResponse.preparedTransaction);
|
|
274
|
+
should_1.default.exist(info);
|
|
275
|
+
assert_1.default.equal(info.kind, 'ExerciseCommand');
|
|
276
|
+
assert_1.default.equal(info.templateId.moduleName, 'Utility.Registry.App.V0.Service.AllocationFactory');
|
|
277
|
+
assert_1.default.equal(info.templateId.entityName, 'AllocationFactory');
|
|
278
|
+
assert_1.default.equal(info.choice, 'AllocationFactory_OfferMint');
|
|
279
|
+
should_1.default.exist(info.contractId);
|
|
280
|
+
should_1.default.exist(info.actingParties);
|
|
281
|
+
});
|
|
282
|
+
});
|
|
283
|
+
describe('sameElements', function () {
|
|
284
|
+
it('should return true for identical arrays', function () {
|
|
285
|
+
assert_1.default.equal(utils_1.default.sameElements(['a', 'b', 'c'], ['a', 'b', 'c']), true);
|
|
286
|
+
});
|
|
287
|
+
it('should return true for same elements in different order', function () {
|
|
288
|
+
assert_1.default.equal(utils_1.default.sameElements(['c', 'a', 'b'], ['a', 'b', 'c']), true);
|
|
289
|
+
});
|
|
290
|
+
it('should return false for different lengths', function () {
|
|
291
|
+
assert_1.default.equal(utils_1.default.sameElements(['a', 'b'], ['a', 'b', 'c']), false);
|
|
292
|
+
});
|
|
293
|
+
it('should return false for different elements', function () {
|
|
294
|
+
assert_1.default.equal(utils_1.default.sameElements(['a', 'b', 'x'], ['a', 'b', 'c']), false);
|
|
295
|
+
});
|
|
296
|
+
it('should return true for empty arrays', function () {
|
|
297
|
+
assert_1.default.equal(utils_1.default.sameElements([], []), true);
|
|
298
|
+
});
|
|
299
|
+
it('should return false when one array has duplicates the other does not', function () {
|
|
300
|
+
assert_1.default.equal(utils_1.default.sameElements(['x', 'x'], ['x', 'y']), false);
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
describe('normalizeInjectAs', function () {
|
|
304
|
+
it('should strip "command." prefix from injectAs paths', function () {
|
|
305
|
+
const specs = [{ injectAs: 'command.ExerciseCommand.contractId' }];
|
|
306
|
+
const result = utils_1.default.normalizeInjectAs(specs);
|
|
307
|
+
assert_1.default.ok(result.has('ExerciseCommand.contractId'));
|
|
308
|
+
assert_1.default.ok(!result.has('command.ExerciseCommand.contractId'));
|
|
309
|
+
});
|
|
310
|
+
it('should handle specs with empty injectAs field', function () {
|
|
311
|
+
const result = utils_1.default.normalizeInjectAs([{ injectAs: '' }]);
|
|
312
|
+
assert_1.default.equal(result.size, 0);
|
|
313
|
+
});
|
|
314
|
+
it('should handle empty specs array', function () {
|
|
315
|
+
const result = utils_1.default.normalizeInjectAs([]);
|
|
316
|
+
assert_1.default.equal(result.size, 0);
|
|
317
|
+
});
|
|
318
|
+
it('should handle undefined specs', function () {
|
|
319
|
+
const result = utils_1.default.normalizeInjectAs(undefined);
|
|
320
|
+
assert_1.default.equal(result.size, 0);
|
|
321
|
+
});
|
|
322
|
+
it('should preserve paths that do not start with "command."', function () {
|
|
323
|
+
const specs = [{ injectAs: 'ExerciseCommand.contractId' }];
|
|
324
|
+
const result = utils_1.default.normalizeInjectAs(specs);
|
|
325
|
+
assert_1.default.ok(result.has('ExerciseCommand.contractId'));
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
describe('assertDeepCantonMatch', function () {
|
|
329
|
+
const noInject = new Set();
|
|
330
|
+
it('should pass for matching primitives', function () {
|
|
331
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch('hello', 'hello', noInject));
|
|
332
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(42, 42, noInject));
|
|
333
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(true, true, noInject));
|
|
334
|
+
});
|
|
335
|
+
it('should pass for matching objects', function () {
|
|
336
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch({ a: 'x', b: 'y' }, { a: 'x', b: 'y', extra: 'z' }, noInject));
|
|
337
|
+
});
|
|
338
|
+
it('should allow extra fields in actual that user did not specify', function () {
|
|
339
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch({ name: 'Alice' }, { name: 'Alice', timestamp: '2024-01-01', hash: 'abc' }, noInject));
|
|
340
|
+
});
|
|
341
|
+
it('should pass for matching arrays', function () {
|
|
342
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(['a', 'b'], ['a', 'b'], noInject));
|
|
343
|
+
});
|
|
344
|
+
it('should skip paths in injectAsPaths', function () {
|
|
345
|
+
const injectPaths = new Set(['ExerciseCommand.contractId']);
|
|
346
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch({ ExerciseCommand: { contractId: undefined, choice: 'Foo' } }, { ExerciseCommand: { contractId: '00abc', choice: 'Foo' } }, injectPaths));
|
|
347
|
+
});
|
|
348
|
+
it('should skip undefined expected values', function () {
|
|
349
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch(undefined, 'anything', noInject));
|
|
350
|
+
});
|
|
351
|
+
it('should verify empty object {} against actual (not skip)', function () {
|
|
352
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch({}, {}, noInject));
|
|
353
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch({}, { extra: 'field' }, noInject));
|
|
354
|
+
});
|
|
355
|
+
it('should verify empty array [] against actual (not skip)', function () {
|
|
356
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch([], [], noInject));
|
|
357
|
+
assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch([], ['a'], noInject), /list-length mismatch/);
|
|
358
|
+
});
|
|
359
|
+
it('should compare numeric strings with BigNumber equivalence', function () {
|
|
360
|
+
assert_1.default.doesNotThrow(() => utils_1.default.assertDeepCantonMatch('100', '100.0000000000', noInject));
|
|
361
|
+
});
|
|
362
|
+
it('should throw on primitive mismatch', function () {
|
|
363
|
+
assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch('hello', 'world', noInject), /mismatch/);
|
|
364
|
+
});
|
|
365
|
+
it('should throw on array length mismatch', function () {
|
|
366
|
+
assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch(['a', 'b'], ['a'], noInject), /list-length mismatch/);
|
|
367
|
+
});
|
|
368
|
+
it('should throw on missing field (user specified but not in actual)', function () {
|
|
369
|
+
assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch({ required: 'val' }, { other: 'val' }, noInject), /missing field/);
|
|
370
|
+
});
|
|
371
|
+
it('should throw on type mismatch', function () {
|
|
372
|
+
assert_1.default.throws(() => utils_1.default.assertDeepCantonMatch({ a: 'str' }, { a: 42 }, noInject), /mismatch/);
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
});
|
|
376
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90ZXN0L3VuaXQvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxvREFBNEI7QUFDNUIsb0RBQTRCO0FBRTVCLDhDQUFrRDtBQUVsRCxnRUFBd0M7QUFFeEMsNENBYXNCO0FBRXRCLFFBQVEsQ0FBQyxhQUFhLEVBQUU7SUFDdEIsUUFBUSxDQUFDLHdCQUF3QixFQUFFO1FBQ2pDLEVBQUUsQ0FBQyx1Q0FBdUMsRUFBRSxHQUFHLEVBQUU7WUFDL0MsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUFDLHNDQUEwQixFQUFFLDBCQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQy9HLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUNqSCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBEQUEwRCxFQUFFO1lBQzdELE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FBQyx1Q0FBMkIsRUFBRSwwQkFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsNkVBQTZFLENBQUMsQ0FBQztZQUMvRyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM5QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG1EQUFtRCxFQUFFLEdBQUcsRUFBRTtZQUMzRCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQUMsb0NBQXdCLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDL0csZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsVUFBVSxDQUFDLFFBQVEsRUFDbkIseUZBQXlGLENBQzFGLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBCQUEwQixFQUFFLEdBQUcsRUFBRTtZQUNsQyxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQUMsb0NBQXdCLEVBQUUsMEJBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDL0csZ0JBQU0sQ0FBQyxLQUFLLENBQ1YsVUFBVSxDQUFDLFFBQVEsRUFDbkIscUdBQXFHLENBQ3RHLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtEQUFrRCxFQUFFLEdBQUcsRUFBRTtZQUMxRCxNQUFNLFVBQVUsR0FBRyxlQUFLLENBQUMsNkJBQTZCLENBQ3BELDZDQUFpQyxDQUFDLG1CQUFtQixFQUNyRCwwQkFBZSxDQUFDLGNBQWMsQ0FDL0IsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pCLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsMkVBQTJFLENBQUMsQ0FBQztZQUM3RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLDZFQUE2RSxDQUFDLENBQUM7WUFDakgsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRSxHQUFHLEVBQUU7WUFDekQsTUFBTSxVQUFVLEdBQUcsZUFBSyxDQUFDLDZCQUE2QixDQUNwRCw0Q0FBZ0MsQ0FBQyxtQkFBbUIsRUFDcEQsMEJBQWUsQ0FBQyxjQUFjLENBQy9CLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLDJFQUEyRSxDQUFDLENBQUM7WUFDN0csZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSw2RUFBNkUsQ0FBQyxDQUFDO1lBQ2pILGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNERBQTRELEVBQUUsR0FBRyxFQUFFO1lBQ3BFLE1BQU0sVUFBVSxHQUFHLGVBQUssQ0FBQyw2QkFBNkIsQ0FDcEQsNkNBQWlDLENBQUMsbUJBQW1CLEVBQ3JELDBCQUFlLENBQUMsa0JBQWtCLENBQ25DLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QixnQkFBTSxDQUFDLEtBQUssQ0FDVixVQUFVLENBQUMsTUFBTSxFQUNqQixnR0FBZ0csQ0FDakcsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUNWLFVBQVUsQ0FBQyxRQUFRLEVBQ25CLHlGQUF5RixDQUMxRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLHlCQUF5QixFQUFFO1FBQ2xDLEVBQUUsQ0FBQyx3RUFBd0UsRUFBRTtZQUMzRSxNQUFNLFlBQVksR0FBRyxlQUFLLENBQUMsa0NBQWtDLENBQUMsb0NBQXdCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM3RyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsb0NBQXdCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdkUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx3Q0FBd0MsRUFBRTtRQUNqRCxFQUFFLENBQUMsK0VBQStFLEVBQUUsS0FBSztZQUN2RixNQUFNLFlBQVksR0FBRyxNQUFNLGVBQUssQ0FBQyx3Q0FBd0MsQ0FDdkUscUNBQXlCLENBQUMsbUJBQW1CLENBQzlDLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUMzQixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUscUNBQXlCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUN0RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLCtCQUErQixFQUFFO1FBQ3hDLEVBQUUsQ0FBQyw4Q0FBOEMsRUFBRTtZQUNqRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3JFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnREFBZ0QsRUFBRTtZQUNuRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDeEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsNEJBQWdCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMzRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsZ0RBQWdELEVBQUU7WUFDbkQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLGNBQWMsQ0FBQyw0QkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLDRCQUFnQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDM0UsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLDBDQUEwQyxFQUFFO1lBQzdDLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsNEJBQWdCLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsOEJBQThCLEVBQUU7UUFDdkMsRUFBRSxDQUFDLGlEQUFpRCxFQUFFO1lBQ3BELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsK0JBQW1CLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLG9EQUFvRCxFQUFFO1lBQ3ZELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxjQUFjLENBQUMsK0JBQW1CLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUNsRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN0QixnQkFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLGNBQWMsQ0FBQywrQkFBbUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzdFLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3RCLGdCQUFNLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxREFBcUQsRUFBRTtZQUN4RCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsY0FBYyxDQUFDLCtCQUFtQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDOUUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDdEIsZ0JBQU0sQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQztBQUVILFFBQVEsQ0FBQyxzQ0FBc0MsRUFBRTtJQUMvQyxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsRUFBRSxDQUFDLCtDQUErQyxFQUFFO1lBQ2xELE1BQU0sTUFBTSxHQUFHLGVBQUssQ0FBQyxxQkFBcUIsQ0FDeEMsNEVBQTRFLENBQzdFLENBQUM7WUFDRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNyQixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU8sQ0FBQyxVQUFVLEVBQUUsbURBQW1ELENBQUMsQ0FBQztZQUN0RixnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFPLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDeEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUU7WUFDakQsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLEdBQXdCLENBQUMsQ0FBQztZQUNyRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsbURBQW1ELEVBQUU7WUFDdEQsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyx5Q0FBeUMsRUFBRTtZQUM1QyxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMscUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUM3RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsc0RBQXNELEVBQUU7WUFDekQsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3pELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGlCQUFpQixFQUFFO1FBQzFCLEVBQUUsQ0FBQyw2Q0FBNkMsRUFBRTtZQUNoRCxNQUFNLE1BQU0sR0FBRyxlQUFLLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsQyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw2QkFBNkIsRUFBRTtZQUNoQyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDNUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUM7WUFDOUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQkFBK0IsRUFBRTtZQUNsQyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDakUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtZQUN4QyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7WUFDN0UsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNuQyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxFQUFFLENBQUM7WUFDekUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRTtZQUNyQyxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztZQUNoRixnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsTUFBTSxHQUFHLEdBQVU7Z0JBQ2pCLEdBQUcsRUFBRTtvQkFDSCxTQUFTLEVBQUUsVUFBVTtvQkFDckIsUUFBUSxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtpQkFDbkU7YUFDRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywrQ0FBK0MsRUFBRTtZQUNsRCxNQUFNLEdBQUcsR0FBVSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUM7WUFDcEUsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw4QkFBOEIsRUFBRTtZQUNqQyxNQUFNLEdBQUcsR0FBVTtnQkFDakIsR0FBRyxFQUFFO29CQUNILFNBQVMsRUFBRSxNQUFNO29CQUNqQixJQUFJLEVBQUU7d0JBQ0osUUFBUSxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQztxQkFDakc7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLGtDQUFrQyxFQUFFO1lBQ3JDLE1BQU0sR0FBRyxHQUFVO2dCQUNqQixHQUFHLEVBQUU7b0JBQ0gsU0FBUyxFQUFFLFNBQVM7b0JBQ3BCLE9BQU8sRUFBRTt3QkFDUCxPQUFPLEVBQUU7NEJBQ1AsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUU7NEJBQ2hFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO3lCQUNsRTtxQkFDRjtpQkFDRjthQUNGLENBQUM7WUFDRixnQkFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFLLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUN4RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpREFBaUQsRUFBRTtZQUNwRCxNQUFNLEdBQUcsR0FBVTtnQkFDakIsR0FBRyxFQUFFO29CQUNILFNBQVMsRUFBRSxRQUFRO29CQUNuQixNQUFNLEVBQUU7d0JBQ04sTUFBTSxFQUFFOzRCQUNOLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFOzRCQUN2RSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRTt5QkFDdEU7cUJBQ0Y7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0NBQXdDLEVBQUU7WUFDM0MsTUFBTSxHQUFHLEdBQVU7Z0JBQ2pCLEdBQUcsRUFBRTtvQkFDSCxTQUFTLEVBQUUsU0FBUztvQkFDcEIsT0FBTyxFQUFFO3dCQUNQLFdBQVcsRUFBRSxNQUFNO3dCQUNuQixLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRTtxQkFDakQ7aUJBQ0Y7YUFDRixDQUFDO1lBQ0YsZ0JBQU0sQ0FBQyxTQUFTLENBQUMsZUFBSyxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFO1lBQ2xDLE1BQU0sR0FBRyxHQUFVO2dCQUNqQixHQUFHLEVBQUU7b0JBQ0gsU0FBUyxFQUFFLE1BQU07b0JBQ2pCLElBQUksRUFBRSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUU7aUJBQ2hDO2FBQ0YsQ0FBQztZQUNGLGdCQUFNLENBQUMsS0FBSyxDQUFDLGVBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDckQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyx1QkFBdUIsRUFBRTtRQUNoQyxFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQUcsZUFBSyxDQUFDLHFCQUFxQixDQUFDLGdEQUFvQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDcEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEIsZ0JBQU0sQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ2hDLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDOUIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLG9GQUFvRixDQUFDLENBQUM7UUFDL0csQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQywwQkFBMEIsRUFBRTtRQUNuQyxFQUFFLENBQUMsK0NBQStDLEVBQUU7WUFDbEQsTUFBTSxJQUFJLEdBQUcsZUFBSyxDQUFDLHdCQUF3QixDQUFDLGdEQUFvQyxDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdEcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbkIsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLG1EQUFtRCxDQUFDLENBQUM7WUFDOUYsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztZQUM5RCxnQkFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLDZCQUE2QixDQUFDLENBQUM7WUFDekQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzlCLGdCQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgsUUFBUSxDQUFDLGNBQWMsRUFBRTtRQUN2QixFQUFFLENBQUMseUNBQXlDLEVBQUU7WUFDNUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsMkNBQTJDLEVBQUU7WUFDOUMsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsZUFBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN2RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyw0Q0FBNEMsRUFBRTtZQUMvQyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RSxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxxQ0FBcUMsRUFBRTtZQUN4QyxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxzRUFBc0UsRUFBRTtZQUN6RSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxlQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxtQkFBbUIsRUFBRTtRQUM1QixFQUFFLENBQUMsb0RBQW9ELEVBQUU7WUFDdkQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxvQ0FBb0MsRUFBRSxDQUFDLENBQUM7WUFDbkUsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1lBQ3BELGdCQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsQ0FBQyxDQUFDLENBQUM7UUFDL0QsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0NBQStDLEVBQUU7WUFDbEQsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzNELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsaUNBQWlDLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsK0JBQStCLEVBQUU7WUFDbEMsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2xELGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDL0IsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxFQUFFLFFBQVEsRUFBRSw0QkFBNEIsRUFBRSxDQUFDLENBQUM7WUFDM0QsTUFBTSxNQUFNLEdBQUcsZUFBSyxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlDLGdCQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO1FBQ3RELENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsdUJBQXVCLEVBQUU7UUFDaEMsTUFBTSxRQUFRLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUVuQyxFQUFFLENBQUMscUNBQXFDLEVBQUU7WUFDeEMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNuRixnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pFLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDL0UsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsa0NBQWtDLEVBQUU7WUFDckMsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQ3ZCLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FDMUYsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtEQUErRCxFQUFFO1lBQ2xFLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUN2QixlQUFLLENBQUMscUJBQXFCLENBQ3pCLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxFQUNqQixFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQ3ZELFFBQVEsQ0FDVCxDQUNGLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxpQ0FBaUMsRUFBRTtZQUNwQyxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtZQUN2QyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQztZQUM1RCxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FDdkIsZUFBSyxDQUFDLHFCQUFxQixDQUN6QixFQUFFLGVBQWUsRUFBRSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQzdELEVBQUUsZUFBZSxFQUFFLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFDM0QsV0FBVyxDQUNaLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLHVDQUF1QyxFQUFFO1lBQzFDLGdCQUFNLENBQUMsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDMUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMseURBQXlELEVBQUU7WUFDNUQsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RSxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsd0RBQXdELEVBQUU7WUFDM0QsZ0JBQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUN6RSxnQkFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUNoRyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywyREFBMkQsRUFBRTtZQUM5RCxnQkFBTSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDNUYsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsb0NBQW9DLEVBQUU7WUFDdkMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDM0YsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsdUNBQXVDLEVBQUU7WUFDMUMsZ0JBQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztRQUN4RyxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQyxrRUFBa0UsRUFBRTtZQUNyRSxnQkFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFHLEVBQUUsQ0FBQyxlQUFLLENBQUMscUJBQXFCLENBQUMsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUUsUUFBUSxDQUFDLEVBQ2xGLGVBQWUsQ0FDaEIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsRUFBRSxDQUFDLCtCQUErQixFQUFFO1lBQ2xDLGdCQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQUssQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNsRyxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gJ2Fzc2VydCc7XG5pbXBvcnQgc2hvdWxkIGZyb20gJ3Nob3VsZCc7XG5cbmltcG9ydCB7IFRyYW5zYWN0aW9uVHlwZSB9IGZyb20gJ0BiaXRnby9zZGstY29yZSc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi8uLi9zcmMvbGliL3V0aWxzJztcbmltcG9ydCB7IFZhbHVlIH0gZnJvbSAnLi4vLi4vc3JjL2xpYi9yZXNvdXJjZXNJbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgQ0FOVE9OX0FERFJFU1NFUyxcbiAgQ0FOVE9OX0JMT0NLX0hFSUdIVCxcbiAgQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLFxuICBHZW5lcmF0ZVRvcG9sb2d5UmVzcG9uc2UsXG4gIE9uZVN0ZXBQcmVBcHByb3ZhbFByZXBhcmVSZXNwb25zZSxcbiAgUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEsXG4gIFByZXBhcmVkVHJhbnNhY3Rpb25XaXRoTWVtbyxcbiAgUHJlcGFyZWRUeG4xU3RlcFJlY2VpdmVyLFxuICBQcmVwYXJlZFR4bjJTdGVwUmVjZWl2ZXIsXG4gIFByZXBhcmVTdWJtaXNzaW9uUmVzcG9uc2UsXG4gIFRyYW5zZmVyQWNjZXB0YW5jZVByZXBhcmVSZXNwb25zZSxcbiAgVHJhbnNmZXJSZWplY3Rpb25QcmVwYXJlUmVzcG9uc2UsXG59IGZyb20gJy4uL3Jlc291cmNlcyc7XG5cbmRlc2NyaWJlKCdDYW50b24gVXRpbCcsIGZ1bmN0aW9uICgpIHtcbiAgZGVzY3JpYmUoJ1JhdyB0cmFuc2FjdGlvbiBwYXJzZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24nLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoUHJlcGFyZWRUcmFuc2FjdGlvblJhd0RhdGEsIFRyYW5zYWN0aW9uVHlwZS5TZW5kKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJ2FiYy0xOjoxMjIwMGMxZWUyMjZmYmRmOWZiYTM0NjFjMmMwYzczMzMxYjY5ZDNjNmZkOGNmY2UyOGNkZjg2NDE0MTE0MWNjNjU2ZCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEucmVjZWl2ZXIsICdhYmMtMjo6MTIyMDdlOTZhZGExOGE4NDVhZGY0ZGMwMTQxMDI2NTYzM2Q1MjY2ZGNhOWJiMjgwYzk4ZTM1YzM2OTJkYjg3ZDNlMzUnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLmFtb3VudCwgJzIwMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gd2l0aCBtZW1vIGlkIGZpZWxkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHJhbnNhY3Rpb25XaXRoTWVtbywgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnMTIyMGI6OjEyMjBiYWI2ZWYzZWVjMzdiMWIzODE2MDk5YmVmZTcyYjQzYmY2YzEzODAwNzdkNjM0OTI1NGM0MWZmYjdmNzc1M2JiJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5yZWNlaXZlciwgJzEyMjBhOjoxMjIwYWRlNjAzMDBjZjdkMGIxOGZmYWEyZmZlNGY0OTJhZDFhZDYwMWNmYzE2MmIyMGY3N2VjOTlkMTZjMmMyZjE1OCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMTAwMDAwMDAwMCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEubWVtb0lkLCAnMTEnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgY29ycmVjdGx5IHdoZW4gcmVjZWl2ZXIgaXMgb24gMi1zdGVwJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFByZXBhcmVkVHhuMlN0ZXBSZWNlaXZlciwgVHJhbnNhY3Rpb25UeXBlLlNlbmQpO1xuICAgICAgc2hvdWxkLmV4aXN0KHBhcnNlZERhdGEpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuc2VuZGVyLCAnMTIyMGE6OjEyMjBhZGU2MDMwMGNmN2QwYjE4ZmZhYTJmZmU0ZjQ5MmFkMWFkNjAxY2ZjMTYyYjIwZjc3ZWM5OWQxNmMyYzJmMTU4Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwoXG4gICAgICAgIHBhcnNlZERhdGEucmVjZWl2ZXIsXG4gICAgICAgICdyYXZpLXRlc3QtcGFydHktMTo6MTIyMDkyZTdkMzNhYzEwYzBmM2Q1NTk3NjM0MmYzNzU1NWRmMDVkYTViNzQyOTU2ZDU2YTYyYWUyMzY3NzY5MDc5ZDInXG4gICAgICApO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnMjAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgY29ycmVjdGx5IDEnLCAoKSA9PiB7XG4gICAgICBjb25zdCBwYXJzZWREYXRhID0gdXRpbHMucGFyc2VSYXdDYW50b25UcmFuc2FjdGlvbkRhdGEoUHJlcGFyZWRUeG4xU3RlcFJlY2VpdmVyLCBUcmFuc2FjdGlvblR5cGUuU2VuZCk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICcxMjIwYTo6MTIyMGFkZTYwMzAwY2Y3ZDBiMThmZmFhMmZmZTRmNDkyYWQxYWQ2MDFjZmMxNjJiMjBmNzdlYzk5ZDE2YzJjMmYxNTgnKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgcGFyc2VkRGF0YS5yZWNlaXZlcixcbiAgICAgICAgJ3JhdmktZGVtby1wYXJ0eS10eG4tMDEtdGFwcGVyOjoxMjIwZWE3YWI1YTcyM2Y4YTZiMjA3OGU2MTdlNmM1OGNiN2U3OGU0OTk0N2RkYzIzOWUxYTk0MWFhNTZlNmJhMDhiNCdcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcyMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgYWNjZXB0YW5jZSBwcmVwYXJlZCB0cmFuc2FjdGlvbicsICgpID0+IHtcbiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSB1dGlscy5wYXJzZVJhd0NhbnRvblRyYW5zYWN0aW9uRGF0YShcbiAgICAgICAgVHJhbnNmZXJBY2NlcHRhbmNlUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24sXG4gICAgICAgIFRyYW5zYWN0aW9uVHlwZS5UcmFuc2ZlckFjY2VwdFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnNlbmRlciwgJ0RTTzo6MTIyMGJlNThjMjllNjVkZTQwYmYyNzNiZTFkYzJiMjY2ZDQzYTlhMDAyZWE1YjE4OTU1YWVlZjdhYWM4ODFiYjQ3MWEnKTtcbiAgICAgIGFzc2VydC5lcXVhbChwYXJzZWREYXRhLnJlY2VpdmVyLCAnYWJjZGU6OjEyMjA1YjRlMzUzN2E5NTEyNmQ5MDYwNDU5MjM0NGQ4YWQzYzNkZGNjZGE0Zjc5OTAxOTU0MjgwZWUxOWM1NzY3MTRkJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICc1MDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB0aGUgcmVqZWN0aW9uIHByZXBhcmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFxuICAgICAgICBUcmFuc2ZlclJlamVjdGlvblByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uLFxuICAgICAgICBUcmFuc2FjdGlvblR5cGUuVHJhbnNmZXJSZWplY3RcbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QocGFyc2VkRGF0YSk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5zZW5kZXIsICdEU086OjEyMjBiZTU4YzI5ZTY1ZGU0MGJmMjczYmUxZGMyYjI2NmQ0M2E5YTAwMmVhNWIxODk1NWFlZWY3YWFjODgxYmI0NzFhJyk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5yZWNlaXZlciwgJzEyMjAxOjoxMjIwMzg0MDJjZjE2NTA4NzZkMjkyMGQ2MDQ3YjExYTRhYWYwZGU3YjQyOGU5OTE2MDA5Y2JhMmEyMmIxYWUyMmMxYScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHBhcnNlZERhdGEuYW1vdW50LCAnNTAwMDAwMDAwMDAnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcGFyc2UgdGhlIG9uZS1zdGVwIHByZWFwcHJvdmFsIHByZXBhcmVkIHRyYW5zYWN0aW9uJywgKCkgPT4ge1xuICAgICAgY29uc3QgcGFyc2VkRGF0YSA9IHV0aWxzLnBhcnNlUmF3Q2FudG9uVHJhbnNhY3Rpb25EYXRhKFxuICAgICAgICBPbmVTdGVwUHJlQXBwcm92YWxQcmVwYXJlUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbixcbiAgICAgICAgVHJhbnNhY3Rpb25UeXBlLk9uZVN0ZXBQcmVBcHByb3ZhbFxuICAgICAgKTtcbiAgICAgIHNob3VsZC5leGlzdChwYXJzZWREYXRhKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgcGFyc2VkRGF0YS5zZW5kZXIsXG4gICAgICAgICdCaXRnby1kZXZuZXQtdmFsaWRhdG9yLTE6OjEyMjBhMGEwZjYwYjBlNjJiNWQ3NTBjNDg0YjE4YzA5MWRiYTIzMDgwYzEzM2Q5NDQ2MTRiYTc1YTU4NThjYmEzMDQ1J1xuICAgICAgKTtcbiAgICAgIGFzc2VydC5lcXVhbChcbiAgICAgICAgcGFyc2VkRGF0YS5yZWNlaXZlcixcbiAgICAgICAgJ3JhdmktdGVzdC1wYXJ0eS0xOjoxMjIwNWI0ZTM1MzdhOTUxMjZkOTA2MDQ1OTIzNDRkOGFkM2MzZGRjY2RhNGY3OTkwMTk1NDI4MGVlMTljNTc2NzE0ZCdcbiAgICAgICk7XG4gICAgICBhc3NlcnQuZXF1YWwocGFyc2VkRGF0YS5hbW91bnQsICcwJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdXYWxsZXQgaW5pdCB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGxvY2FsbHkgZ2VuZXJhdGUgYW5kIHZhbGlkYXRlIHRoZSBoYXNoIGZvciB0b3BvbG9neSB0cmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkSGFzaCA9IHV0aWxzLmNvbXB1dGVIYXNoRnJvbUNyZWF0ZVBhcnR5UmVzcG9uc2UoR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLnRvcG9sb2d5VHJhbnNhY3Rpb25zKTtcbiAgICAgIHNob3VsZC5leGlzdChjb21wdXRlZEhhc2gpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNvbXB1dGVkSGFzaCwgR2VuZXJhdGVUb3BvbG9neVJlc3BvbnNlLm11bHRpSGFzaCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdQcmVwYXJlIHN1Ym1pc3Npb24gcmVzcG9uc2UgdmFsaWRhdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIGxvY2FsbHkgZ2VuZXJhdGUgYW5kIHZhbGlkYXRlIHRoZSBoYXNoIGZvciBwcmVwYXJlIHN1Ym1pc3Npb24gcmVzcG9uc2UnLCBhc3luYyBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBjb21wdXRlZEhhc2ggPSBhd2FpdCB1dGlscy5jb21wdXRlSGFzaEZyb21QcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlKFxuICAgICAgICBQcmVwYXJlU3VibWlzc2lvblJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb25cbiAgICAgICk7XG4gICAgICBzaG91bGQuZXhpc3QoY29tcHV0ZWRIYXNoKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjb21wdXRlZEhhc2gsIFByZXBhcmVTdWJtaXNzaW9uUmVzcG9uc2UucHJlcGFyZWRUcmFuc2FjdGlvbkhhc2gpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnQ2hlY2sgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBhZGRyZXNzIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuVkFMSURfQUREUkVTUyk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSB3aGVuIHBhcnR5IGhpbnQgaXMgaW52YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLlZBTElEX1BBUlRZX0hJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBmaW5nZXJwcmludCBpcyBpbnZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuSU5WQUxJRF9GSU5HRVJQUklOVCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiBwYXJ0eSBoaW50IGlzIG1pc3NpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEFkZHJlc3MoQ0FOVE9OX0FERFJFU1NFUy5NSVNTSU5HX1BBUlRZX0hJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gZmluZ2VycHJpbnQgaXMgbWlzc2luZycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQWRkcmVzcyhDQU5UT05fQUREUkVTU0VTLk1JU1NJTkdfRklOR0VSUFJJTlQpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiBtZW1vIGlkIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRBZGRyZXNzKENBTlRPTl9BRERSRVNTRVMuVkFMSURfTUVNT19JRCk7XG4gICAgICBzaG91bGQuZXhpc3QoaXNWYWxpZCk7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoaXNWYWxpZCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdDaGVjayBpZiBibG9jayBoYXNoIGlzIHZhbGlkJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHRydWUgd2hlbiB0aGUgYmxvY2sgaGFzaCBpcyB2YWxpZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGlzVmFsaWQgPSB1dGlscy5pc1ZhbGlkQmxvY2tJZChDQU5UT05fQkxPQ0tfSEVJR0hULlZBTElEX0hBU0gpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSB3aGVuIHRoZSBibG9jayBoYXNoIGhhcyB2ZXJzaW9uJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgaXNWYWxpZCA9IHV0aWxzLmlzVmFsaWRCbG9ja0lkKENBTlRPTl9CTE9DS19IRUlHSFQuVkFMSURfSEFTSF9XSVRIX1ZFUlNJT04pO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgYmxvY2sgaGFzaCBpcyBub3QgYSBudW1iZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5JTlZBTElEX0JMT0NLX0hBU0gpO1xuICAgICAgc2hvdWxkLmV4aXN0KGlzVmFsaWQpO1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGlzVmFsaWQsIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGJsb2NrIGhhc2ggaXMgbmVnYXRpdmUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBpc1ZhbGlkID0gdXRpbHMuaXNWYWxpZEJsb2NrSWQoQ0FOVE9OX0JMT0NLX0hFSUdIVC5ORUdBVElWRV9CTE9DS19IQVNIKTtcbiAgICAgIHNob3VsZC5leGlzdChpc1ZhbGlkKTtcbiAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChpc1ZhbGlkLCBmYWxzZSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG5cbmRlc2NyaWJlKCdDYW50b24gVXRpbHMgLSBDYW50b25Db21tYW5kIGhlbHBlcnMnLCBmdW5jdGlvbiAoKSB7XG4gIGRlc2NyaWJlKCdwYXJzZUNhbnRvblRlbXBsYXRlSWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBwYXJzZSB2YWxpZCBcIlBrZzpNb2R1bGU6RW50aXR5XCIgZm9ybWF0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMucGFyc2VDYW50b25UZW1wbGF0ZUlkKFxuICAgICAgICAnYWJjMTIzOlV0aWxpdHkuUmVnaXN0cnkuQXBwLlYwLlNlcnZpY2UuQWxsb2NhdGlvbkZhY3Rvcnk6QWxsb2NhdGlvbkZhY3RvcnknXG4gICAgICApO1xuICAgICAgc2hvdWxkLmV4aXN0KHJlc3VsdCk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0IS5wa2csICdhYmMxMjMnKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQhLm1vZHVsZU5hbWUsICdVdGlsaXR5LlJlZ2lzdHJ5LkFwcC5WMC5TZXJ2aWNlLkFsbG9jYXRpb25GYWN0b3J5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0IS5lbnRpdHlOYW1lLCAnQWxsb2NhdGlvbkZhY3RvcnknKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3Igbm9uLXN0cmluZyBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgxMjMgYXMgdW5rbm93biBhcyBzdHJpbmcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIHVuZGVmaW5lZCBmb3Igd3JvbmcgbnVtYmVyIG9mIHBhcnRzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMucGFyc2VDYW50b25UZW1wbGF0ZUlkKCdQa2dPbmx5Jyk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LCB1bmRlZmluZWQpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdW5kZWZpbmVkIGZvciBlbXB0eSBwYXJ0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgnOk1vZHVsZTpFbnRpdHknKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQsIHVuZGVmaW5lZCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHN0cmluZyB3aXRoIG9ubHkgMiBwYXJ0cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLnBhcnNlQ2FudG9uVGVtcGxhdGVJZCgnUGtnOk1vZHVsZScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2RhbWxWYWx1ZVRvSnNvbicsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB1bmRlZmluZWQgZm9yIHVuZGVmaW5lZCBpbnB1dCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih1bmRlZmluZWQpO1xuICAgICAgYXNzZXJ0LmVxdWFsKHJlc3VsdCwgdW5kZWZpbmVkKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB1bml0IHRvIG51bGwnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAndW5pdCcsIHVuaXQ6IHt9IH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgYm9vbCBjb3JyZWN0bHknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0geyBzdW06IHsgb25lb2ZLaW5kOiAnYm9vbCcsIGJvb2w6IHRydWUgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCB0ZXh0IGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICd0ZXh0JywgdGV4dDogJ2hlbGxvJyB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICdoZWxsbycpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IGNvbnRyYWN0SWQgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ2NvbnRyYWN0SWQnLCBjb250cmFjdElkOiAnMDBhYmMnIH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJzAwYWJjJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgcGFydHkgY29ycmVjdGx5JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ3BhcnR5JywgcGFydHk6ICdBbGljZTo6MTIzNCcgfSB9O1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCAnQWxpY2U6OjEyMzQnKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgY29udmVydCBudW1lcmljIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7IHN1bTogeyBvbmVvZktpbmQ6ICdudW1lcmljJywgbnVtZXJpYzogJzEwMC4wMDAwMDAwMDAwJyB9IH07XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksICcxMDAuMDAwMDAwMDAwMCcpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IG9wdGlvbmFsIHdpdGggdmFsdWUnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdvcHRpb25hbCcsXG4gICAgICAgICAgb3B0aW9uYWw6IHsgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnaW5uZXInIH0gfSB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJ2lubmVyJyk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgb3B0aW9uYWwgd2l0aG91dCB2YWx1ZSB0byBudWxsJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHsgc3VtOiB7IG9uZW9mS2luZDogJ29wdGlvbmFsJywgb3B0aW9uYWw6IHt9IH0gfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgbnVsbCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgbGlzdCB0byBhcnJheScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHZhbDogVmFsdWUgPSB7XG4gICAgICAgIHN1bToge1xuICAgICAgICAgIG9uZW9mS2luZDogJ2xpc3QnLFxuICAgICAgICAgIGxpc3Q6IHtcbiAgICAgICAgICAgIGVsZW1lbnRzOiBbeyBzdW06IHsgb25lb2ZLaW5kOiAndGV4dCcsIHRleHQ6ICdhJyB9IH0sIHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnYicgfSB9XSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5kZWVwRXF1YWwodXRpbHMuZGFtbFZhbHVlVG9Kc29uKHZhbCksIFsnYScsICdiJ10pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb252ZXJ0IHRleHRNYXAgdG8gb2JqZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdmFsOiBWYWx1ZSA9IHtcbiAgICAgICAgc3VtOiB7XG4gICAgICAgICAgb25lb2ZLaW5kOiAndGV4dE1hcCcsXG4gICAgICAgICAgdGV4dE1hcDoge1xuICAgICAgICAgICAgZW50cmllczogW1xuICAgICAgICAgICAgICB7IGtleTogJ2sxJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAndjEnIH0gfSB9LFxuICAgICAgICAgICAgICB7IGtleTogJ2syJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ2Jvb2wnLCBib29sOiBmYWxzZSB9IH0gfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgICBhc3NlcnQuZGVlcEVxdWFsKHV0aWxzLmRhbWxWYWx1ZVRvSnNvbih2YWwpLCB7IGsxOiAndjEnLCBrMjogZmFsc2UgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgcmVjb3JkIHRvIG9iamVjdCB3aXRoIGxhYmVsIGtleXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdyZWNvcmQnLFxuICAgICAgICAgIHJlY29yZDoge1xuICAgICAgICAgICAgZmllbGRzOiBbXG4gICAgICAgICAgICAgIHsgbGFiZWw6ICduYW1lJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAnQWxpY2UnIH0gfSB9LFxuICAgICAgICAgICAgICB7IGxhYmVsOiAnYWdlJywgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ2ludDY0JywgaW50NjQ6ICczMCcgfSB9IH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgeyBuYW1lOiAnQWxpY2UnLCBhZ2U6ICczMCcgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgdmFyaWFudCB0byBrZXllZCBvYmplY3QnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICd2YXJpYW50JyxcbiAgICAgICAgICB2YXJpYW50OiB7XG4gICAgICAgICAgICBjb25zdHJ1Y3RvcjogJ1NvbWUnLFxuICAgICAgICAgICAgdmFsdWU6IHsgc3VtOiB7IG9uZW9mS2luZDogJ3RleHQnLCB0ZXh0OiAndicgfSB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgYXNzZXJ0LmRlZXBFcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgeyBTb21lOiAndicgfSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGNvbnZlcnQgZW51bSB0byBzdHJpbmcnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB2YWw6IFZhbHVlID0ge1xuICAgICAgICBzdW06IHtcbiAgICAgICAgICBvbmVvZktpbmQ6ICdlbnVtJyxcbiAgICAgICAgICBlbnVtOiB7IGNvbnN0cnVjdG9yOiAnQWN0aXZlJyB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5kYW1sVmFsdWVUb0pzb24odmFsKSwgJ0FjdGl2ZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnZXh0cmFjdFN1Ym1pdHRlckFjdEFzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgZXh0cmFjdCBhY3RBcyBmcm9tIHJlYWwgUHJlcGFyZWRUcmFuc2FjdGlvbicsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGFjdEFzID0gdXRpbHMuZXh0cmFjdFN1Ym1pdHRlckFjdEFzKENhbnRvbkV4ZXJjaXNlQ29tbWFuZFByZXBhcmVSZXNwb25zZS5wcmVwYXJlZFRyYW5zYWN0aW9uKTtcbiAgICAgIHNob3VsZC5leGlzdChhY3RBcyk7XG4gICAgICBhc3NlcnQub2soQXJyYXkuaXNBcnJheShhY3RBcykpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGFjdEFzLmxlbmd0aCwgMSk7XG4gICAgICBhc3NlcnQuZXF1YWwoYWN0QXNbMF0sICdSZWdSZWdpc3RyYXI6OjEyMjA1MDhlNTRmYjcwOWRjYjFhOWI0MDk2NDA4YWQ0MTVkMjIxN2Q4ODgxYWQ5MDM0YTk4NTA3NTI5MzNiYTg4YWQ1Jyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdleHRyYWN0Q2FudG9uQ29tbWFuZEluZm8nLCBmdW5jdGlvbiAoKSB7XG4gICAgaXQoJ3Nob3VsZCBleHRyYWN0IEV4ZXJjaXNlQ29tbWFuZCBpbmZvIGNvcnJlY3RseScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluZm8gPSB1dGlscy5leHRyYWN0Q2FudG9uQ29tbWFuZEluZm8oQ2FudG9uRXhlcmNpc2VDb21tYW5kUHJlcGFyZVJlc3BvbnNlLnByZXBhcmVkVHJhbnNhY3Rpb24pO1xuICAgICAgc2hvdWxkLmV4aXN0KGluZm8pO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8ua2luZCwgJ0V4ZXJjaXNlQ29tbWFuZCcpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8udGVtcGxhdGVJZC5tb2R1bGVOYW1lLCAnVXRpbGl0eS5SZWdpc3RyeS5BcHAuVjAuU2VydmljZS5BbGxvY2F0aW9uRmFjdG9yeScpO1xuICAgICAgYXNzZXJ0LmVxdWFsKGluZm8udGVtcGxhdGVJZC5lbnRpdHlOYW1lLCAnQWxsb2NhdGlvbkZhY3RvcnknKTtcbiAgICAgIGFzc2VydC5lcXVhbChpbmZvLmNob2ljZSwgJ0FsbG9jYXRpb25GYWN0b3J5X09mZmVyTWludCcpO1xuICAgICAgc2hvdWxkLmV4aXN0KGluZm8uY29udHJhY3RJZCk7XG4gICAgICBzaG91bGQuZXhpc3QoaW5mby5hY3RpbmdQYXJ0aWVzKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ3NhbWVFbGVtZW50cycsIGZ1bmN0aW9uICgpIHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiB0cnVlIGZvciBpZGVudGljYWwgYXJyYXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbJ2EnLCAnYicsICdjJ10sIFsnYScsICdiJywgJ2MnXSksIHRydWUpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3Igc2FtZSBlbGVtZW50cyBpbiBkaWZmZXJlbnQgb3JkZXInLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYycsICdhJywgJ2InXSwgWydhJywgJ2InLCAnYyddKSwgdHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHJldHVybiBmYWxzZSBmb3IgZGlmZmVyZW50IGxlbmd0aHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYScsICdiJ10sIFsnYScsICdiJywgJ2MnXSksIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIGZvciBkaWZmZXJlbnQgZWxlbWVudHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZXF1YWwodXRpbHMuc2FtZUVsZW1lbnRzKFsnYScsICdiJywgJ3gnXSwgWydhJywgJ2InLCAnYyddKSwgZmFsc2UpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gdHJ1ZSBmb3IgZW1wdHkgYXJyYXlzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmVxdWFsKHV0aWxzLnNhbWVFbGVtZW50cyhbXSwgW10pLCB0cnVlKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgcmV0dXJuIGZhbHNlIHdoZW4gb25lIGFycmF5IGhhcyBkdXBsaWNhdGVzIHRoZSBvdGhlciBkb2VzIG5vdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5lcXVhbCh1dGlscy5zYW1lRWxlbWVudHMoWyd4JywgJ3gnXSwgWyd4JywgJ3knXSksIGZhbHNlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ25vcm1hbGl6ZUluamVjdEFzJywgZnVuY3Rpb24gKCkge1xuICAgIGl0KCdzaG91bGQgc3RyaXAgXCJjb21tYW5kLlwiIHByZWZpeCBmcm9tIGluamVjdEFzIHBhdGhzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3BlY3MgPSBbeyBpbmplY3RBczogJ2NvbW1hbmQuRXhlcmNpc2VDb21tYW5kLmNvbnRyYWN0SWQnIH1dO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXMoc3BlY3MpO1xuICAgICAgYXNzZXJ0Lm9rKHJlc3VsdC5oYXMoJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJykpO1xuICAgICAgYXNzZXJ0Lm9rKCFyZXN1bHQuaGFzKCdjb21tYW5kLkV4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJykpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgc3BlY3Mgd2l0aCBlbXB0eSBpbmplY3RBcyBmaWVsZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKFt7IGluamVjdEFzOiAnJyB9XSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpemUsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgZW1wdHkgc3BlY3MgYXJyYXknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSB1dGlscy5ub3JtYWxpemVJbmplY3RBcyhbXSk7XG4gICAgICBhc3NlcnQuZXF1YWwocmVzdWx0LnNpemUsIDApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBoYW5kbGUgdW5kZWZpbmVkIHNwZWNzJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gdXRpbHMubm9ybWFsaXplSW5qZWN0QXModW5kZWZpbmVkKTtcbiAgICAgIGFzc2VydC5lcXVhbChyZXN1bHQuc2l6ZSwgMCk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHByZXNlcnZlIHBhdGhzIHRoYXQgZG8gbm90IHN0YXJ0IHdpdGggXCJjb21tYW5kLlwiJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3Qgc3BlY3MgPSBbeyBpbmplY3RBczogJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJyB9XTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHV0aWxzLm5vcm1hbGl6ZUluamVjdEFzKHNwZWNzKTtcbiAgICAgIGFzc2VydC5vayhyZXN1bHQuaGFzKCdFeGVyY2lzZUNvbW1hbmQuY29udHJhY3RJZCcpKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Fzc2VydERlZXBDYW50b25NYXRjaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBub0luamVjdCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgaXQoJ3Nob3VsZCBwYXNzIGZvciBtYXRjaGluZyBwcmltaXRpdmVzJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goJ2hlbGxvJywgJ2hlbGxvJywgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKDQyLCA0Miwgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHRydWUsIHRydWUsIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZm9yIG1hdGNoaW5nIG9iamVjdHMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh7IGE6ICd4JywgYjogJ3knIH0sIHsgYTogJ3gnLCBiOiAneScsIGV4dHJhOiAneicgfSwgbm9JbmplY3QpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBhbGxvdyBleHRyYSBmaWVsZHMgaW4gYWN0dWFsIHRoYXQgdXNlciBkaWQgbm90IHNwZWNpZnknLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+XG4gICAgICAgIHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScgfSxcbiAgICAgICAgICB7IG5hbWU6ICdBbGljZScsIHRpbWVzdGFtcDogJzIwMjQtMDEtMDEnLCBoYXNoOiAnYWJjJyB9LFxuICAgICAgICAgIG5vSW5qZWN0XG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHBhc3MgZm9yIG1hdGNoaW5nIGFycmF5cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKFsnYScsICdiJ10sIFsnYScsICdiJ10sIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHNraXAgcGF0aHMgaW4gaW5qZWN0QXNQYXRocycsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGluamVjdFBhdGhzID0gbmV3IFNldChbJ0V4ZXJjaXNlQ29tbWFuZC5jb250cmFjdElkJ10pO1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PlxuICAgICAgICB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goXG4gICAgICAgICAgeyBFeGVyY2lzZUNvbW1hbmQ6IHsgY29udHJhY3RJZDogdW5kZWZpbmVkLCBjaG9pY2U6ICdGb28nIH0gfSxcbiAgICAgICAgICB7IEV4ZXJjaXNlQ29tbWFuZDogeyBjb250cmFjdElkOiAnMDBhYmMnLCBjaG9pY2U6ICdGb28nIH0gfSxcbiAgICAgICAgICBpbmplY3RQYXRoc1xuICAgICAgICApXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBza2lwIHVuZGVmaW5lZCBleHBlY3RlZCB2YWx1ZXMnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQuZG9lc05vdFRocm93KCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCh1bmRlZmluZWQsICdhbnl0aGluZycsIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBlbXB0eSBvYmplY3Qge30gYWdhaW5zdCBhY3R1YWwgKG5vdCBza2lwKScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHt9LCB7fSwgbm9JbmplY3QpKTtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHt9LCB7IGV4dHJhOiAnZmllbGQnIH0sIG5vSW5qZWN0KSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIHZlcmlmeSBlbXB0eSBhcnJheSBbXSBhZ2FpbnN0IGFjdHVhbCAobm90IHNraXApJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LmRvZXNOb3RUaHJvdygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goW10sIFtdLCBub0luamVjdCkpO1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goW10sIFsnYSddLCBub0luamVjdCksIC9saXN0LWxlbmd0aCBtaXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCBjb21wYXJlIG51bWVyaWMgc3RyaW5ncyB3aXRoIEJpZ051bWJlciBlcXVpdmFsZW5jZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGFzc2VydC5kb2VzTm90VGhyb3coKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKCcxMDAnLCAnMTAwLjAwMDAwMDAwMDAnLCBub0luamVjdCkpO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBwcmltaXRpdmUgbWlzbWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaCgnaGVsbG8nLCAnd29ybGQnLCBub0luamVjdCksIC9taXNtYXRjaC8pO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiBhcnJheSBsZW5ndGggbWlzbWF0Y2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBhc3NlcnQudGhyb3dzKCgpID0+IHV0aWxzLmFzc2VydERlZXBDYW50b25NYXRjaChbJ2EnLCAnYiddLCBbJ2EnXSwgbm9JbmplY3QpLCAvbGlzdC1sZW5ndGggbWlzbWF0Y2gvKTtcbiAgICB9KTtcblxuICAgIGl0KCdzaG91bGQgdGhyb3cgb24gbWlzc2luZyBmaWVsZCAodXNlciBzcGVjaWZpZWQgYnV0IG5vdCBpbiBhY3R1YWwpJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cyhcbiAgICAgICAgKCkgPT4gdXRpbHMuYXNzZXJ0RGVlcENhbnRvbk1hdGNoKHsgcmVxdWlyZWQ6ICd2YWwnIH0sIHsgb3RoZXI6ICd2YWwnIH0sIG5vSW5qZWN0KSxcbiAgICAgICAgL21pc3NpbmcgZmllbGQvXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgaXQoJ3Nob3VsZCB0aHJvdyBvbiB0eXBlIG1pc21hdGNoJywgZnVuY3Rpb24gKCkge1xuICAgICAgYXNzZXJ0LnRocm93cygoKSA9PiB1dGlscy5hc3NlcnREZWVwQ2FudG9uTWF0Y2goeyBhOiAnc3RyJyB9LCB7IGE6IDQyIH0sIG5vSW5qZWN0KSwgL21pc21hdGNoLyk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=
|