tx · E9UUWkqGDeVy82pbWKcdHF4rn3yhUvNWSz1Z4RHeHen6

3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai:  -0.01400000 Waves

2022.04.13 13:26 [2006682] smart account 3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai > SELF 0.00000000 Waves

{ "type": 13, "id": "E9UUWkqGDeVy82pbWKcdHF4rn3yhUvNWSz1Z4RHeHen6", "fee": 1400000, "feeAssetId": null, "timestamp": 1649845577706, "version": 1, "sender": "3MsMP2pb2p8MDd6Rxb7XEXqqwEhE8ATfyai", "senderPublicKey": "2JEaBjtjvMoNGKZmL9QxYefa1VkMJM3vMW8rNvTs9R2H", "proofs": [ "3xE7RzzSEm8NT9pQC8LMrQoXEUiAjMoLxTdju69TLdL4FGe4ZDvruk9fkXvFfVsLxfnTB2YSGmnCb835v8MiYhQD" ], "script": "base64:AAIFAAAAAAAAAFAIAhIKCggICAgICAgIARIDCgEIEgYKBAgICAgSBAoCCBgSAwoBCBIDCgEIEgASCQoHCAgICAgBCBIECgIIARIDCgEBEgMKAQESBgoECAgICAAAAE4AAAAABlNDQUxFOAAAAAAAAAAACAAAAAAFTVVMVDgAAAAAAAX14QAAAAAAB1NDQUxFMTgAAAAAAAAAABIAAAAABk1VTFQxOAkAATYAAAABAA3gtrOnZAAAAAAAAA5QT09MV0VJR0hUTVVMVAUAAAAFTVVMVDgAAAAADkdXWHZpcnR1YWxQT09MAgAAAA5HV1h2aXJ0dWFsUE9PTAAAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABoAAAAAgkAAGgAAAACAAAAAAAAAABkAAAAAAAAAAPoAAAAAAAAAAPoAAAAAANTRVACAAAAAl9fAAAAAAVFTVBUWQIAAAAAAAAAAApQb29sQWN0aXZlAAAAAAAAAAABAAAAAA9Qb29sUHV0RGlzYWJsZWQAAAAAAAAAAAIAAAAAE1Bvb2xNYXRjaGVyRGlzYWJsZWQAAAAAAAAAAAMAAAAADFBvb2xTaHV0ZG93bgAAAAAAAAAABAAAAAASaWR4SW50ZXJuYWxBc3NldElkAAAAAAAAAAABAAAAAA9pZHhSZXN1dEFjdGlvbnMAAAAAAAAAAAIAAAAAIGlkeElmQXNzZXRJZENhbGN1bGF0aW9uUGVyZm9ybWVkAAAAAAAAAAADAAAAAA5pZHhQb29sQWRkcmVzcwAAAAAAAAAAAQAAAAANaWR4UG9vbFN0YXR1cwAAAAAAAAAAAgAAAAAQaWR4UG9vbExQQXNzZXRJZAAAAAAAAAAAAwAAAAANaWR4QW10QXNzZXRJZAAAAAAAAAAABAAAAAAPaWR4UHJpY2VBc3NldElkAAAAAAAAAAAFAAAAAA5pZHhBbXRBc3NldERjbQAAAAAAAAAABgAAAAAQaWR4UHJpY2VBc3NldERjbQAAAAAAAAAABwAAAAAOaWR4SUFtdEFzc2V0SWQAAAAAAAAAAAgAAAAAEGlkeElQcmljZUFzc2V0SWQAAAAAAAAAAAkAAAAADWlkeExQQXNzZXREY20AAAAAAAAAAAoAAAAAC2lkeFBvb2xUeXBlAAAAAAAAAAALAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAIAAAARJXNfX2ZhY3RvcnlDb25maWcBAAAAD2tleUxwVG9rZW5zTGlzdAAAAAACAAAAECVzX19scFRva2Vuc0xpc3QBAAAAEWtleVBvb2xTY3JpcHRIYXNoAAAAAAIAAAAWJXMlc19fcG9vbF9fc2NyaXB0SGFzaAEAAAANa2V5TWF0Y2hlclB1YgAAAAACAAAAGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQEAAAAYa2V5TGVnYWN5RmFjdG9yeUNvbnRyYWN0AAAAAAIAAAAZJXNfX2xlZ2FjeUZhY3RvcnlDb250cmFjdAEAAAAOa2V5TGVnYWN5UG9vbHMAAAAAAgAAAA8lc19fbGVnYWN5UG9vbHMBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABQlc19fbWFuYWdlclB1YmxpY0tleQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAAAgAAABslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAAAgAAABclc19fYXNzZXRzU3RvcmVDb250cmFjdAEAAAAQa2V5UHJpY2VEZWNpbWFscwAAAAACAAAAESVzX19wcmljZURlY2ltYWxzAQAAABNrZXlBbGxQb29sc1NodXRkb3duAAAAAAIAAAAMJXNfX3NodXRkb3duAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAIAAAAXJXNfX25leHRJbnRlcm5hbEFzc2V0SWQBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEAAAALcG9vbEFkZHJlc3MJAAEsAAAAAgIAAAASJXMlc19fcG9vbFdlaWdodF9fBQAAAAtwb29sQWRkcmVzcwEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIAAAALcG9vbEFkZHJlc3MAAAADbnVtCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABIlcyVzX19wb29sV2VpZ2h0X18FAAAAC3Bvb2xBZGRyZXNzAgAAAAJfXwkAAaQAAAABBQAAAANudW0BAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABAAAAEWludGVybmFsQmFzZUFzc2V0CQABLAAAAAICAAAAKCVzJXMlZF9fbWFwcGluZ3NfX2ludGVybmFsMmJhc2VBc3NldElkX18JAAGkAAAAAQUAAAARaW50ZXJuYWxCYXNlQXNzZXQBAAAAH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAACglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQAAAAxiYXNlQXNzZXRTdHIBAAAADWtleVBvb2xDb25maWcAAAACAAAAE2Ftb3VudEFzc2V0SW50ZXJuYWwAAAAScHJpY2VBc3NldEludGVybmFsCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACCVkJWQlc19fBQAAABNhbW91bnRBc3NldEludGVybmFsAgAAAAJfXwUAAAAScHJpY2VBc3NldEludGVybmFsAgAAAAhfX2NvbmZpZwEAAAAda2V5TWFwcGluZ0xwQXNzZXRUb1Bvb2xBc3NldHMAAAABAAAACmxwQXNzZXRTdHIJAAEsAAAAAgkAASwAAAACAgAAAAglcyVzJXNfXwUAAAAKbHBBc3NldFN0cgIAAAAYX19tYXBwaW5nc19fbHBBc3NldDJQb29sAQAAAB1rZXlNYXBwaW5nUG9vbEFzc2V0c1RvTHBhc3NldAAAAAIAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACiVkJWQlcyVzX18FAAAAGGludGVybmFsQW1vdW50QXNzZXRJZFN0cgIAAAACX18FAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyAgAAAB5fX21hcHBpbmdzX19Qb29sQXNzZXRzMkxwQXNzZXQBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQAAABNwb29sQ29udHJhY3RBZGRyZXNzCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAAE3Bvb2xDb250cmFjdEFkZHJlc3MCAAAAI19fbWFwcGluZ3NfX3Bvb2xDb250cmFjdDJQb29sQXNzZXRzAQAAAClrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAIAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAAAAF2ludGVybmFsUHJpY2VBc3NldElkU3RyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACiVkJWQlcyVzX18JAAGkAAAAAQUAAAAYaW50ZXJuYWxBbW91bnRBc3NldElkU3RyAgAAAAJfXwkAAaQAAAABBQAAABdpbnRlcm5hbFByaWNlQXNzZXRJZFN0cgIAAAAjX19tYXBwaW5nc19fcG9vbEFzc2V0czJQb29sQ29udHJhY3QBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEAAAATcG9vbENvbnRyYWN0QWRkcmVzcwkAASwAAAACCQABLAAAAAICAAAACCVzJXMlc19fBQAAABNwb29sQ29udHJhY3RBZGRyZXNzAgAAACBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAEAAAAqa2V5TWFwcGluZ1Bvb2xMUEFzc2V0VG9Qb29sQ29udHJhY3RBZGRyZXNzAAAAAQAAAApscEFzc2V0U3RyCQABLAAAAAIJAAEsAAAAAgIAAAAIJXMlcyVzX18FAAAACmxwQXNzZXRTdHICAAAAIF9fbWFwcGluZ3NfX2xwQXNzZXQyUG9vbENvbnRyYWN0AQAAAA9nZXRTdHJpbmdPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEHQAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAQZ2V0Qm9vbGVhbk9yRmFpbAAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAICAAAAFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUAAAADa2V5AQAAAAxnZXRJbnRPckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQAAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAAAAAAAAAAABAAAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAAAAAAAAAAACAAAAABRJZHhGYWN0b3J5Q2ZnSWRvRGFwcAAAAAAAAAAAAwAAAAAVSWR4RmFjdG9yeUNmZ1RlYW1EYXBwAAAAAAAAAAAEAAAAABlJZHhGYWN0b3J5Q2ZnRW1pc3Npb25EYXBwAAAAAAAAAAAFAAAAABVJZHhGYWN0b3J5Q2ZnUmVzdERhcHAAAAAAAAAAAAYAAAAAGUlkeEZhY3RvcnlDZmdTbGlwcGFnZURhcHAAAAAAAAAAAAcAAAAAFElkeEZhY3RvcnlDZmdEYW9EYXBwAAAAAAAAAAAIAAAAABpJZHhGYWN0b3J5Q2ZnTWFya2V0aW5nRGFwcAAAAAAAAAAACQAAAAAaSWR4RmFjdG9yeUNmZ0d3eFJld2FyZERhcHAAAAAAAAAAAAoAAAAAFklkeEZhY3RvcnlDZmdCaXJkc0RhcHAAAAAAAAAAAAsBAAAAGGdldEJvb3N0aW5nQWRkcmVzc09yRmFpbAAAAAEAAAAKZmFjdG9yeUNmZwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnBQAAABlJZHhGYWN0b3J5Q2ZnQm9vc3RpbmdEYXBwAQAAABhnZXRFbWlzc2lvbkFkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcAEAAAAXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwAAAABAAAACmZhY3RvcnlDZmcJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwUAAAAYSWR4RmFjdG9yeUNmZ1N0YWtpbmdEYXBwAQAAABlnZXRHd3hSZXdhcmRBZGRyZXNzT3JGYWlsAAAAAQAAAApmYWN0b3J5Q2ZnCQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcFAAAAGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAQAAAAHJG1hdGNoMAkABCIAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFzBQAAAAckbWF0Y2gwCQACWQAAAAEFAAAAAXMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQFAAAABHVuaXQJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IBAAAAC211c3RNYW5hZ2VyAAAAAQAAAAFpBAAAAAJwZAkAAAIAAAABAgAAABFQZXJtaXNzaW9uIGRlbmllZAQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BQAAAAJwawYFAAAAAnBkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0AwkAAAAAAAACCAUAAAABaQAAAAZjYWxsZXIFAAAABHRoaXMGBQAAAAJwZAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAQZGF0YUZhY3RvcnlDZmdWMwAAAAsAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0AAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAWJXMlcyVzJXMlcyVzJXMlcyVzJXMlcwkABEwAAAACBQAAAA5zdGFraW5nQWRkcmVzcwkABEwAAAACBQAAAA9ib29zdGluZ0FkZHJlc3MJAARMAAAAAgUAAAALaWRvQ29udHJhY3QJAARMAAAAAgUAAAAMdGVhbUNvbnRyYWN0CQAETAAAAAIFAAAAEGVtaXNzaW9uQ29udHJhY3QJAARMAAAAAgUAAAAMcmVzdENvbnRyYWN0CQAETAAAAAIFAAAAEHNsaXBwYWdlQ29udHJhY3QJAARMAAAAAgUAAAALZGFvQ29udHJhY3QJAARMAAAAAgUAAAARbWFya2V0aW5nQ29udHJhY3QJAARMAAAAAgUAAAASZ3d4UmV3YXJkc0NvbnRyYWN0CQAETAAAAAIFAAAADWJpcmRzQ29udHJhY3QFAAAAA25pbAUAAAADU0VQAQAAAA5kYXRhRmFjdG9yeUNmZwAAAAcAAAAOc3Rha2luZ0FkZHJlc3MAAAAPYm9vc3RpbmdBZGRyZXNzAAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbGlwcGFnZUNvbnRyYWN0CQAEuQAAAAIJAARMAAAAAgIAAAAMJXMlcyVzJXMlcyVzCQAETAAAAAIFAAAADnN0YWtpbmdBZGRyZXNzCQAETAAAAAIFAAAAD2Jvb3N0aW5nQWRkcmVzcwkABEwAAAACBQAAAAtpZG9Db250cmFjdAkABEwAAAACBQAAAAx0ZWFtQ29udHJhY3QJAARMAAAAAgUAAAAQZW1pc3Npb25Db250cmFjdAkABEwAAAACBQAAAAxyZXN0Q29udHJhY3QJAARMAAAAAgUAAAAQc2xpcHBhZ2VDb250cmFjdAUAAAADbmlsBQAAAANTRVABAAAAC2RhdGFQb29sQ2ZnAAAACwAAAAtwb29sQWRkcmVzcwAAAApwb29sU3RhdHVzAAAACWxwQXNzZXRJZAAAAA5hbW91bnRBc3NldFN0cgAAAA1wcmljZUFzc2V0U3RyAAAAE2Ftb3VudEFzc2V0RGVjaW1hbHMAAAAScHJpY2VBc3NldERlY2ltYWxzAAAAFWFtb3VudEFzc2V0SW50ZXJuYWxJZAAAABRwcmljZUFzc2V0SW50ZXJuYWxJZAAAAA9scEFzc2V0RGVjaW1hbHMAAAAIcG9vbFR5cGUJAAS5AAAAAgkABEwAAAACAgAAABYlcyVkJXMlcyVzJWQlZCVkJWQlZCVzCQAETAAAAAIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIFAAAACnBvb2xTdGF0dXMJAARMAAAAAgUAAAAJbHBBc3NldElkCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyCQAETAAAAAIFAAAADXByaWNlQXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABNhbW91bnRBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAScHJpY2VBc3NldERlY2ltYWxzCQAETAAAAAIJAAGkAAAAAQUAAAAVYW1vdW50QXNzZXRJbnRlcm5hbElkCQAETAAAAAIJAAGkAAAAAQUAAAAUcHJpY2VBc3NldEludGVybmFsSWQJAARMAAAAAgkAAaQAAAABBQAAAA9scEFzc2V0RGVjaW1hbHMJAARMAAAAAgUAAAAIcG9vbFR5cGUFAAAAA25pbAUAAAADU0VQAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIAAAAVaW50ZXJuYWxQcmljZUFzc2V0U3RyCQAEuQAAAAIJAARMAAAAAgIAAAAEJWQlZAkABEwAAAACCQABpAAAAAEFAAAAFmludGVybmFsQW1vdW50QXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbFByaWNlQXNzZXRTdHIFAAAAA25pbAUAAAADU0VQAQAAAA1nZXRQb29sQ29uZmlnAAAAAQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbEFzc2V0cwkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MFAAAAA1NFUAQAAAATYW1vdW50QXNzZXRJbnRlcm5hbAkAAZEAAAACBQAAAApwb29sQXNzZXRzAAAAAAAAAAABBAAAABJwcmljZUFzc2V0SW50ZXJuYWwJAAGRAAAAAgUAAAAKcG9vbEFzc2V0cwAAAAAAAAAAAgkABLUAAAACCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAADWtleVBvb2xDb25maWcAAAACBQAAABNhbW91bnRBc3NldEludGVybmFsBQAAABJwcmljZUFzc2V0SW50ZXJuYWwFAAAAA1NFUAEAAAAaZ2V0SW50ZXJuYWxBc3NldElkT3JDcmVhdGUAAAACAAAACmFzc2V0SWRTdHIAAAALaW5jcmVtZW50b3IEAAAAD2ludGVybmFsQXNzZXRJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIAAAAAAAAAAAAEAAAAGGN1cnJlbnRJbmRleE9mSW50ZXJuYWxJZAkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAR0aGlzCQEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAAAAAAAAAAAAAAEAAAABnJlc3VsdAMJAAAAAAAAAgUAAAAPaW50ZXJuYWxBc3NldElkAAAAAAAAAAAABAAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAABkAAAAAgUAAAAYY3VycmVudEluZGV4T2ZJbnRlcm5hbElkBQAAAAtpbmNyZW1lbnRvcgkABRUAAAADBQAAABJuZXdJbnRlcm5hbEFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAUAAAASbmV3SW50ZXJuYWxBc3NldElkCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAACmFzc2V0SWRTdHIFAAAAEm5ld0ludGVybmFsQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NJbnRlcm5hbDJiYXNlQXNzZXRJZAAAAAEFAAAAEm5ld0ludGVybmFsQXNzZXRJZAUAAAAKYXNzZXRJZFN0cgUAAAADbmlsBgkABRUAAAADBQAAAA9pbnRlcm5hbEFzc2V0SWQFAAAAA25pbAcFAAAABnJlc3VsdAEAAAAXY3JlYXRlTHBUb2tlbnNMaXN0RW50cnkAAAABAAAACm5ld0xwVG9rZW4EAAAACGxwVG9rZW5zCQAEHQAAAAIFAAAABHRoaXMJAQAAAA9rZXlMcFRva2Vuc0xpc3QAAAAAAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACGxwVG9rZW5zCQABLAAAAAIJAAEsAAAAAgkBAAAABXZhbHVlAAAAAQUAAAAIbHBUb2tlbnMFAAAAA1NFUAUAAAAKbmV3THBUb2tlbgUAAAAKbmV3THBUb2tlbgAAAAwAAAABaQEAAAALY29uc3RydWN0b3IAAAAIAAAAD3N0YWtpbmdDb250cmFjdAAAABBib29zdGluZ0NvbnRyYWN0AAAAC2lkb0NvbnRyYWN0AAAADHRlYW1Db250cmFjdAAAABBlbWlzc2lvbkNvbnRyYWN0AAAADHJlc3RDb250cmFjdAAAABBzbHBpcGFnZUNvbnRyYWN0AAAADXByaWNlRGVjaW1hbHMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEGtleUZhY3RvcnlDb25maWcAAAAACQEAAAAOZGF0YUZhY3RvcnlDZmcAAAAHBQAAAA9zdGFraW5nQ29udHJhY3QFAAAAEGJvb3N0aW5nQ29udHJhY3QFAAAAC2lkb0NvbnRyYWN0BQAAAAx0ZWFtQ29udHJhY3QFAAAAEGVtaXNzaW9uQ29udHJhY3QFAAAADHJlc3RDb250cmFjdAUAAAAQc2xwaXBhZ2VDb250cmFjdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAEGtleVByaWNlRGVjaW1hbHMAAAAABQAAAA1wcmljZURlY2ltYWxzBQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjIAAAABAAAAEG1hdGhjaGVyUHViNThTdHIEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAACm1hdGhjZXJQdWIJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEJAAJZAAAAAQUAAAAQbWF0aGNoZXJQdWI1OFN0cgMJAAAAAAAAAgUAAAAKbWF0aGNlclB1YgUAAAAKbWF0aGNlclB1YgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAANa2V5TWF0Y2hlclB1YgAAAAAFAAAAEG1hdGhjaGVyUHViNThTdHIFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADWNvbnN0cnVjdG9yVjMAAAAEAAAAC2Rhb0NvbnRyYWN0AAAAEW1hcmtldGluZ0NvbnRyYWN0AAAAEmd3eFJld2FyZHNDb250cmFjdAAAAA1iaXJkc0NvbnRyYWN0BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAApmYWN0b3J5Q2ZnCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAAFAAAAA1NFUAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQa2V5RmFjdG9yeUNvbmZpZwAAAAAJAQAAABBkYXRhRmFjdG9yeUNmZ1YzAAAACwkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAABCQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAIJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAAAwkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAECQABkQAAAAIFAAAACmZhY3RvcnlDZmcAAAAAAAAAAAUJAAGRAAAAAgUAAAAKZmFjdG9yeUNmZwAAAAAAAAAABgkAAZEAAAACBQAAAApmYWN0b3J5Q2ZnAAAAAAAAAAAHBQAAAAtkYW9Db250cmFjdAUAAAARbWFya2V0aW5nQ29udHJhY3QFAAAAEmd3eFJld2FyZHNDb250cmFjdAUAAAANYmlyZHNDb250cmFjdAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA1jb25zdHJ1Y3RvclY0AAAAAgAAABVsZWdhY3lGYWN0b3J5Q29udHJhY3QAAAALbGVnYWN5UG9vbHMEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGGtleUxlZ2FjeUZhY3RvcnlDb250cmFjdAAAAAAFAAAAFWxlZ2FjeUZhY3RvcnlDb250cmFjdAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAOa2V5TGVnYWN5UG9vbHMAAAAACQAEuQAAAAIFAAAAC2xlZ2FjeVBvb2xzBQAAAANTRVAFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAANY29uc3RydWN0b3JWNQAAAAEAAAATYXNzZXRzU3RvcmVDb250cmFjdAQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAFAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAKc2V0TWFuYWdlcgAAAAEAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIEAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQkAAlkAAAABBQAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQMJAAAAAAAAAgUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5BQAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAADmNvbmZpcm1NYW5hZ2VyAAAAAAQAAAACcG0JAQAAAB1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAABWhhc1BNAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAAAnBtBgkAAAIAAAABAgAAABJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAAAAAAIFAAAABWhhc1BNBQAAAAVoYXNQTQQAAAAHY2hlY2tQTQMJAAAAAAAAAggFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5CQEAAAAFdmFsdWUAAAABBQAAAAJwbQYJAAACAAAAAQIAAAAbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAdjaGVja1BNBQAAAAdjaGVja1BNCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJwbQkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQEAAAAaa2V5UGVuZGluZ01hbmFnZXJQdWJsaWNLZXkAAAAABQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA9hY3RpdmF0ZU5ld1Bvb2wAAAAHAAAAC3Bvb2xBZGRyZXNzAAAADmFtb3VudEFzc2V0U3RyAAAADXByaWNlQXNzZXRTdHIAAAALbHBBc3NldE5hbWUAAAAMbHBBc3NldERlc2NyAAAACnBvb2xXZWlnaHQAAAAIcG9vbFR5cGUEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIDCQEAAAAJaXNEZWZpbmVkAAAAAQkABCIAAAABCQEAAAApa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMAAAABBQAAAAtwb29sQWRkcmVzcwkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgIAAAANUG9vbCBhZGRyZXNzIAUAAAALcG9vbEFkZHJlc3MCAAAAFCBhbHJlYWR5IHJlZ2lzdGVyZWQuBAAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQkBAAAAGmdldEludGVybmFsQXNzZXRJZE9yQ3JlYXRlAAAAAgUAAAAOYW1vdW50QXNzZXRTdHIAAAAAAAAAAAEEAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAgFAAAAF2ludGVybmFsQW1vdW50QXNzZXREYXRhAAAAAl8xBAAAABZpbnRlcm5hbFByaWNlQXNzZXREYXRhCQEAAAAaZ2V0SW50ZXJuYWxBc3NldElkT3JDcmVhdGUAAAACBQAAAA1wcmljZUFzc2V0U3RyAwgFAAAAF2ludGVybmFsQW1vdW50QXNzZXREYXRhAAAAAl8zAAAAAAAAAAACAAAAAAAAAAABBAAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAgFAAAAFmludGVybmFsUHJpY2VBc3NldERhdGEAAAACXzEEAAAAFXBvb2xBY2NvdW50U2NyaXB0SGFzaAkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAD8QAAAAEJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAAC3Bvb2xBZGRyZXNzCQABLAAAAAICAAAAKU5vIHNjcmlwdCBoYXMgYmVlbiBmb3VuZCBvbiBwb29sIGFjY291bnQgBQAAAAtwb29sQWRkcmVzcwQAAAAcZXRoYWxvblBvb2xBY2NvdW50U2NyaXB0SGFzaAkBAAAAEUBleHRyTmF0aXZlKDEwNTcpAAAAAQkBAAAAEWtleVBvb2xTY3JpcHRIYXNoAAAAAAQAAAAKcG9vbENvbmZpZwkABB0AAAACBQAAAAR0aGlzCQEAAAANa2V5UG9vbENvbmZpZwAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkAwkBAAAACWlzRGVmaW5lZAAAAAEFAAAACnBvb2xDb25maWcJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAVQb29sIAUAAAAOYW1vdW50QXNzZXRTdHICAAAAAS8FAAAADXByaWNlQXNzZXRTdHICAAAAHCBoYXMgYWxyZWFkeSBiZWVuIGFjdGl2YXRlZC4EAAAAD3Bvb2xDb25maWdWYWx1ZQkBAAAABXZhbHVlAAAAAQkABB0AAAACBQAAAAR0aGlzCQEAAAANa2V5UG9vbENvbmZpZwAAAAIJAAGkAAAAAQUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkCQABpAAAAAEFAAAAFGludGVybmFsUHJpY2VBc3NldElkBAAAABRhbW91bnRBc3NldHNEZWNpbWFscwMJAAAAAAAAAgUAAAAOYW1vdW50QXNzZXRTdHICAAAABVdBVkVTBQAAABFkZWNpbWFsc011bHRQcmljZQkAAGwAAAAGAAAAAAAAAAAKAAAAAAAAAAAACAkBAAAABXZhbHVlAAAAAQkAA+wAAAABCQACWQAAAAEFAAAADmFtb3VudEFzc2V0U3RyAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABNwcmljZUFzc2V0c0RlY2ltYWxzAwkAAAAAAAACBQAAAA1wcmljZUFzc2V0U3RyAgAAAAVXQVZFUwUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAgJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQkAAlkAAAABBQAAAA1wcmljZUFzc2V0U3RyAAAACGRlY2ltYWxzAAAAAAAAAAAAAAAAAAAAAAAABQAAAARET1dOBAAAABJscEFzc2V0SXNzdWVBY3Rpb24JAARCAAAABQUAAAALbHBBc3NldE5hbWUFAAAADGxwQXNzZXREZXNjcgAAAAAAAAAAAQAAAAAAAAAACAYEAAAACWxwQXNzZXRJZAkABDgAAAABBQAAABJscEFzc2V0SXNzdWVBY3Rpb24EAAAADGxwQXNzZXRJZFN0cgkAAlgAAAABBQAAAAlscEFzc2V0SWQEAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAkAA/wAAAAECQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABBQAAAAtwb29sQWRkcmVzcwIAAAAIYWN0aXZhdGUJAARMAAAAAgUAAAAOYW1vdW50QXNzZXRTdHIJAARMAAAAAgUAAAANcHJpY2VBc3NldFN0cgUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAAGHBvb2xBY3RpdmF0ZUludm9rZVJlc3VsdAUAAAAYcG9vbEFjdGl2YXRlSW52b2tlUmVzdWx0AwkBAAAAAiE9AAAAAgUAAAAYcG9vbEFjdGl2YXRlSW52b2tlUmVzdWx0AgAAAAdzdWNjZXNzCQAAAgAAAAECAAAAI1Bvb2wgaW5pdGlhbGlzYXRpb24gZXJyb3IgaGFwcGVuZWQuBAAAABNhc3NldHNTdG9yZUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAABAAAABBhZGRBc3NldHNMaW5rSW52CQAD/AAAAAQFAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QCAAAADWFkZEFzc2V0c0xpbmsJAARMAAAAAgUAAAAOYW1vdW50QXNzZXRTdHIJAARMAAAAAgUAAAANcHJpY2VBc3NldFN0cgkABEwAAAACBQAAAAxscEFzc2V0SWRTdHIFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAABBhZGRBc3NldHNMaW5rSW52BQAAABBhZGRBc3NldHNMaW5rSW52BAAAABtpbmNyZWFzZUFzc2V0UG9vbHNOdW1iZXJJbnYJAAP8AAAABAUAAAATYXNzZXRzU3RvcmVDb250cmFjdAIAAAAYaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVyCQAETAAAAAIFAAAADmFtb3VudEFzc2V0U3RyBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAbaW5jcmVhc2VBc3NldFBvb2xzTnVtYmVySW52BQAAABtpbmNyZWFzZUFzc2V0UG9vbHNOdW1iZXJJbnYJAAUUAAAAAgkABE4AAAACCQAETgAAAAIIBQAAABdpbnRlcm5hbEFtb3VudEFzc2V0RGF0YQAAAAJfMggFAAAAFmludGVybmFsUHJpY2VBc3NldERhdGEAAAACXzIJAARMAAAAAgUAAAASbHBBc3NldElzc3VlQWN0aW9uCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAJbHBBc3NldElkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA1rZXlQb29sQ29uZmlnAAAAAgkAAaQAAAABBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAAGkAAAAAQUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAAtkYXRhUG9vbENmZwAAAAsFAAAAC3Bvb2xBZGRyZXNzCQABpAAAAAEFAAAAClBvb2xBY3RpdmUFAAAADGxwQXNzZXRJZFN0cgUAAAAOYW1vdW50QXNzZXRTdHIFAAAADXByaWNlQXNzZXRTdHIFAAAAFGFtb3VudEFzc2V0c0RlY2ltYWxzBQAAABNwcmljZUFzc2V0c0RlY2ltYWxzBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkBQAAABFkZWNpbWFsc011bHRQcmljZQUAAAAIcG9vbFR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHWtleU1hcHBpbmdMcEFzc2V0VG9Qb29sQXNzZXRzAAAAAQUAAAAMbHBBc3NldElkU3RyCQEAAAAVZGF0YU1hcHBpbmdQb29sQXNzZXRzAAAAAgUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAda2V5TWFwcGluZ1Bvb2xBc3NldHNUb0xwYXNzZXQAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkAASwAAAACAgAAAAQlc19fBQAAAAxscEFzc2V0SWRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzAAAAAQUAAAALcG9vbEFkZHJlc3MJAQAAABVkYXRhTWFwcGluZ1Bvb2xBc3NldHMAAAACBQAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQFAAAAFGludGVybmFsUHJpY2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAClrZXlNYXBwaW5nUG9vbEFzc2V0c1RvUG9vbENvbnRyYWN0QWRkcmVzcwAAAAIFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAUAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAACprZXlNYXBwaW5nUG9vbExQQXNzZXRUb1Bvb2xDb250cmFjdEFkZHJlc3MAAAABBQAAAAxscEFzc2V0SWRTdHIFAAAAC3Bvb2xBZGRyZXNzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAAAtwb29sQWRkcmVzcwUAAAAMbHBBc3NldElkU3RyCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAALcG9vbEFkZHJlc3MFAAAACnBvb2xXZWlnaHQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAD2tleUxwVG9rZW5zTGlzdAAAAAAJAQAAABdjcmVhdGVMcFRva2Vuc0xpc3RFbnRyeQAAAAEFAAAADGxwQXNzZXRJZFN0cgUAAAADbmlsBQAAAAxscEFzc2V0SWRTdHIJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAACm1hbmFnZVBvb2wAAAACAAAAC3Bvb2xBZGRyZXNzAAAACW5ld1N0YXR1cwQAAAALY2hlY2tDYWxsZXIJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAAC2NoZWNrQ2FsbGVyBQAAAAtjaGVja0NhbGxlcgQAAAAKcG9vbENvbmZpZwkBAAAADWdldFBvb2xDb25maWcAAAABBQAAAAtwb29sQWRkcmVzcwQAAAAKcG9vbFN0YXR1cwkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA1pZHhQb29sU3RhdHVzBAAAAAxscEFzc2V0SWRTdHIJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAQaWR4UG9vbExQQXNzZXRJZAQAAAAOYW1vdW50QXNzZXRTdHIJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAANaWR4QW10QXNzZXRJZAQAAAANcHJpY2VBc3NldFN0cgkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA9pZHhQcmljZUFzc2V0SWQEAAAAFGFtb3VudEFzc2V0c0RlY2ltYWxzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAAOaWR4QW10QXNzZXREY20EAAAAE3ByaWNlQXNzZXRzRGVjaW1hbHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAABBpZHhQcmljZUFzc2V0RGNtBAAAABVpbnRlcm5hbEFtb3VudEFzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAAA5pZHhJQW10QXNzZXRJZAQAAAAUaW50ZXJuYWxQcmljZUFzc2V0SWQJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAApwb29sQ29uZmlnBQAAABBpZHhJUHJpY2VBc3NldElkBAAAAApscEFzc2V0RGNtCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAANaWR4TFBBc3NldERjbQQAAAAIcG9vbFR5cGUJAAGRAAAAAgUAAAAKcG9vbENvbmZpZwUAAAALaWR4UG9vbFR5cGUJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADWtleVBvb2xDb25maWcAAAACCQABpAAAAAEFAAAAFWludGVybmFsQW1vdW50QXNzZXRJZAkAAaQAAAABBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAkBAAAAC2RhdGFQb29sQ2ZnAAAACwUAAAALcG9vbEFkZHJlc3MJAAGkAAAAAQUAAAAJbmV3U3RhdHVzBQAAAAxscEFzc2V0SWRTdHIFAAAADmFtb3VudEFzc2V0U3RyBQAAAA1wcmljZUFzc2V0U3RyBQAAABRhbW91bnRBc3NldHNEZWNpbWFscwUAAAATcHJpY2VBc3NldHNEZWNpbWFscwUAAAAVaW50ZXJuYWxBbW91bnRBc3NldElkBQAAABRpbnRlcm5hbFByaWNlQXNzZXRJZAUAAAAKbHBBc3NldERjbQUAAAAIcG9vbFR5cGUFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAEZW1pdAAAAAEAAAAMYW1vdW50VG9FbWl0BAAAAAZjYWxsZXIIBQAAAAFpAAAABmNhbGxlcgQAAAAMb3JpZ2luQ2FsbGVyCAUAAAABaQAAAAxvcmlnaW5DYWxsZXIEAAAAEGxwQXNzZXRSZXF1ZXN0ZWQJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABCIAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQkABCUAAAABBQAAAAZjYWxsZXICAAAAHUludmFsaWQgTFAgYWRkcmVzcyBjYWxsZWQgbWUuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAEGxwQXNzZXRSZXF1ZXN0ZWQEAAAAC2xlZ2FjeVBvb2xzCQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAADmtleUxlZ2FjeVBvb2xzAAAAAAUAAAAFRU1QVFkFAAAAA1NFUAQAAAAVbGVnYWN5RmFjdG9yeUNvbnRyYWN0CQEAAAARQGV4dHJOYXRpdmUoMTA2MikAAAABCQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQiAAAAAQkBAAAAGGtleUxlZ2FjeUZhY3RvcnlDb250cmFjdAAAAAACAAAAKExlZ2FjeSBmYWN0b3J5IGNvbnRyYWN0IGRvZXMgbm90IGV4aXN0cy4DCQAAZwAAAAIAAAAAAAAAAAAFAAAADGFtb3VudFRvRW1pdAUAAAADbmlsAwkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIFAAAAC2xlZ2FjeVBvb2xzCQAEJQAAAAEFAAAABmNhbGxlcgkABRQAAAACBQAAAANuaWwFAAAAFWxlZ2FjeUZhY3RvcnlDb250cmFjdAkABRQAAAACCQAETAAAAAIJAQAAAAdSZWlzc3VlAAAAAwUAAAAHbHBBc3NldAUAAAAMYW1vdW50VG9FbWl0BgkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCAUAAAABaQAAAAZjYWxsZXIFAAAADGFtb3VudFRvRW1pdAUAAAAHbHBBc3NldAUAAAADbmlsAgAAAAdzdWNjZXNzAAAAAWkBAAAABGJ1cm4AAAABAAAADGFtb3VudFRvQnVybgQAAAAGY2FsbGVyCAUAAAABaQAAAAZjYWxsZXIEAAAADG9yaWdpbkNhbGxlcggFAAAAAWkAAAAMb3JpZ2luQ2FsbGVyBAAAAAdwYXltZW50CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAFpAAAACHBheW1lbnRzAAAAAAAAAAAABAAAAA1wYXltZW50QW1vdW50CQEAAAAFdmFsdWUAAAABCAUAAAAHcGF5bWVudAAAAAZhbW91bnQEAAAAD2luQW1vdW50QXNzZXRJZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAAHcGF5bWVudAAAAAdhc3NldElkBAAAABpscEFzc2V0UmVxdWVzdGVkRm9yQnVybmluZwkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEIgAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABCQAEJQAAAAEFAAAABmNhbGxlcgIAAAAdSW52YWxpZCBMUCBhZGRyZXNzIGNhbGxlZCBtZS4DCQEAAAACIT0AAAACBQAAAA9pbkFtb3VudEFzc2V0SWQFAAAAGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nCQAAAgAAAAECAAAAFUludmFsaWQgYXNzZXQgcGFzc2VkLgMJAQAAAAIhPQAAAAIFAAAADGFtb3VudFRvQnVybgUAAAANcGF5bWVudEFtb3VudAkAAAIAAAABAgAAABZJbnZhbGlkIGFtb3VudCBwYXNzZWQuBAAAAAdscEFzc2V0CQACWQAAAAEFAAAAGmxwQXNzZXRSZXF1ZXN0ZWRGb3JCdXJuaW5nCQAFFAAAAAIJAARMAAAAAgkBAAAABEJ1cm4AAAACBQAAAAdscEFzc2V0BQAAAAxhbW91bnRUb0J1cm4FAAAAA25pbAIAAAAHc3VjY2VzcwAAAAFpAQAAAA1tb2RpZnlXZWlnaHRzAAAABAAAAA5idGNQb29sQWRkcmVzcwAAAA5ldGhQb29sQWRkcmVzcwAAABFldGhCdGNQb29sQWRkcmVzcwAAABN1c2RjVXNkdFBvb2xBZGRyZXNzBAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAAA9ldGhCdGNXZWlnaHROZXcJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAA5QT09MV0VJR0hUTVVMVAAAAAAAAAAAZAQAAAARdXNkY1VzZHRXZWlnaHROZXcJAABpAAAAAgkAAGgAAAACAAAAAAAAAAAFBQAAAA5QT09MV0VJR0hUTVVMVAAAAAAAAAAAZAQAAAAPd2VpZ2h0RGVjcmVtZW50CQAAaQAAAAIJAABoAAAAAgAAAAAAAAAABQUAAAAOUE9PTFdFSUdIVE1VTFQAAAAAAAAAAGQEAAAACmZhY3RvcnlDZmcJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABBrZXlGYWN0b3J5Q29uZmlnAAAAAAUAAAADU0VQBAAAAAtzdGFraW5nRGFwcAkBAAAAF2dldFN0YWtpbmdBZGRyZXNzT3JGYWlsAAAAAQUAAAAKZmFjdG9yeUNmZwQAAAANZ3d4UmV3YXJkRGFwcAkBAAAAGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwAAAABBQAAAApmYWN0b3J5Q2ZnBAAAAAxidGNXZWlnaHRLRVkJAQAAAA9rZXlQb29sVG9XZWlnaHQAAAABBQAAAA5idGNQb29sQWRkcmVzcwQAAAAMZXRoV2VpZ2h0S0VZCQEAAAAPa2V5UG9vbFRvV2VpZ2h0AAAAAQUAAAAOZXRoUG9vbEFkZHJlc3MEAAAAD2V0aEJ0Y1dlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAAEWV0aEJ0Y1Bvb2xBZGRyZXNzBAAAABF1c2RjVXNkdFdlaWdodEtFWQkBAAAAD2tleVBvb2xUb1dlaWdodAAAAAEFAAAAE3VzZGNVc2R0UG9vbEFkZHJlc3MEAAAACWJ0Y1dlaWdodAkBAAAADGdldEludE9yRmFpbAAAAAEFAAAADGJ0Y1dlaWdodEtFWQQAAAAJZXRoV2VpZ2h0CQEAAAAMZ2V0SW50T3JGYWlsAAAAAQUAAAAMZXRoV2VpZ2h0S0VZBAAAAAxidGNXZWlnaHROZXcJAABlAAAAAgUAAAAJYnRjV2VpZ2h0BQAAAA93ZWlnaHREZWNyZW1lbnQEAAAADGV0aFdlaWdodE5ldwkAAGUAAAACBQAAAAlldGhXZWlnaHQFAAAAD3dlaWdodERlY3JlbWVudAMJAABnAAAAAgAAAAAAAAAAAAUAAAAMYnRjV2VpZ2h0TmV3CQAAAgAAAAEJAAEsAAAAAgIAAAAWaW52YWxpZCBidGNXZWlnaHROZXc6IAkAAaQAAAABBQAAAAxidGNXZWlnaHROZXcDCQAAZwAAAAIAAAAAAAAAAAAFAAAADGV0aFdlaWdodE5ldwkAAAIAAAABCQABLAAAAAICAAAAFmludmFsaWQgZXRoV2VpZ2h0TmV3OiAJAAGkAAAAAQUAAAAMZXRoV2VpZ2h0TmV3BAAAAA9idGNMcEFzc2V0SWRTdHIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABCQEAAAAea2V5TWFwcGluZ1Bvb2xDb250cmFjVG9MUEFzc2V0AAAAAQUAAAAOYnRjUG9vbEFkZHJlc3MEAAAAD2V0aExwQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAAA5ldGhQb29sQWRkcmVzcwQAAAASZXRoQnRjTHBBc3NldElkU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAHmtleU1hcHBpbmdQb29sQ29udHJhY1RvTFBBc3NldAAAAAEFAAAAEWV0aEJ0Y1Bvb2xBZGRyZXNzBAAAABR1c2RjVXNkdExwQXNzZXRJZFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAAB5rZXlNYXBwaW5nUG9vbENvbnRyYWNUb0xQQXNzZXQAAAABBQAAABN1c2RjVXNkdFBvb2xBZGRyZXNzBAAAABFvbk1vZGlmeVdlaWdodEJ0YwkAA/wAAAAEBQAAAAtzdGFraW5nRGFwcAIAAAAOb25Nb2RpZnlXZWlnaHQJAARMAAAAAgUAAAAPYnRjTHBBc3NldElkU3RyCQAETAAAAAIFAAAADmJ0Y1Bvb2xBZGRyZXNzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAARb25Nb2RpZnlXZWlnaHRCdGMFAAAAEW9uTW9kaWZ5V2VpZ2h0QnRjBAAAABFvbk1vZGlmeVdlaWdodEV0aAkAA/wAAAAEBQAAAAtzdGFraW5nRGFwcAIAAAAOb25Nb2RpZnlXZWlnaHQJAARMAAAAAgUAAAAPZXRoTHBBc3NldElkU3RyCQAETAAAAAIFAAAADmV0aFBvb2xBZGRyZXNzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAARb25Nb2RpZnlXZWlnaHRFdGgFAAAAEW9uTW9kaWZ5V2VpZ2h0RXRoBAAAABRvbk1vZGlmeVdlaWdodEV0aEJ0YwkAA/wAAAAEBQAAAAtzdGFraW5nRGFwcAIAAAAOb25Nb2RpZnlXZWlnaHQJAARMAAAAAgUAAAASZXRoQnRjTHBBc3NldElkU3RyCQAETAAAAAIFAAAAEWV0aEJ0Y1Bvb2xBZGRyZXNzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAUb25Nb2RpZnlXZWlnaHRFdGhCdGMFAAAAFG9uTW9kaWZ5V2VpZ2h0RXRoQnRjBAAAABZvbk1vZGlmeVdlaWdodFVzZGNVc2R0CQAD/AAAAAQFAAAAC3N0YWtpbmdEYXBwAgAAAA5vbk1vZGlmeVdlaWdodAkABEwAAAACBQAAABR1c2RjVXNkdExwQXNzZXRJZFN0cgkABEwAAAACBQAAABN1c2RjVXNkdFBvb2xBZGRyZXNzBQAAAANuaWwFAAAAA25pbAMJAAAAAAAAAgUAAAAWb25Nb2RpZnlXZWlnaHRVc2RjVXNkdAUAAAAWb25Nb2RpZnlXZWlnaHRVc2RjVXNkdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAAMYnRjV2VpZ2h0S0VZBQAAAAxidGNXZWlnaHROZXcJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIFAAAADGV0aFdlaWdodEtFWQUAAAAMZXRoV2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACBQAAAA9ldGhCdGNXZWlnaHRLRVkFAAAAD2V0aEJ0Y1dlaWdodE5ldwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAARdXNkY1VzZHRXZWlnaHRLRVkFAAAAEXVzZGNVc2R0V2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAADmJ0Y1Bvb2xBZGRyZXNzAAAAAAAAAAAABQAAAAlidGNXZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlQb29sVG9XZWlnaHRIaXN0b3J5AAAAAgUAAAAOZXRoUG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAACWV0aFdlaWdodAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFmtleVBvb2xUb1dlaWdodEhpc3RvcnkAAAACBQAAABFldGhCdGNQb29sQWRkcmVzcwAAAAAAAAAAAAUAAAAPZXRoQnRjV2VpZ2h0TmV3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAWa2V5UG9vbFRvV2VpZ2h0SGlzdG9yeQAAAAIFAAAAE3VzZGNVc2R0UG9vbEFkZHJlc3MAAAAAAAAAAAAFAAAAEXVzZGNVc2R0V2VpZ2h0TmV3BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAEAAAACdHgBAAAABnZlcmlmeQAAAAAEAAAAD3RhcmdldFB1YmxpY0tleQQAAAAHJG1hdGNoMAkBAAAAFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAApCeXRlVmVjdG9yBAAAAAJwawUAAAAHJG1hdGNoMAUAAAACcGsDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQIBQAAAAJ0eAAAAA9zZW5kZXJQdWJsaWNLZXkJAAACAAAAAQIAAAALTWF0Y2ggZXJyb3IJAAH0AAAAAwgFAAAAAnR4AAAACWJvZHlCeXRlcwkAAZEAAAACCAUAAAACdHgAAAAGcHJvb2ZzAAAAAAAAAAAABQAAAA90YXJnZXRQdWJsaWNLZXmKzMyZ", "chainId": 84, "height": 2006682, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9JXm4Nn5JoFBM5e4Tkk3LFyWb7xihtAh2Xq51iugtrBh Next: 4zeGD5Zu6Vk1qtJqc6cSUG3hQsgkagANzsLv3DFhWN8s Diff:
OldNewDifferences
7777
7878
7979 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
80+
81+
82+func keyAssetsStoreContract () = "%s__assetsStoreContract"
8083
8184
8285 func keyPriceDecimals () = "%s__priceDecimals"
291294
292295
293296 @Callable(i)
297+func constructorV5 (assetsStoreContract) = {
298+ let checkCaller = mustManager(i)
299+ if ((checkCaller == checkCaller))
300+ then [StringEntry(keyAssetsStoreContract(), assetsStoreContract)]
301+ else throw("Strict value is not equal to itself.")
302+ }
303+
304+
305+
306+@Callable(i)
294307 func setManager (pendingManagerPublicKey) = {
295308 let checkCaller = mustManager(i)
296309 if ((checkCaller == checkCaller))
358371 if ((poolActivateInvokeResult == poolActivateInvokeResult))
359372 then if ((poolActivateInvokeResult != "success"))
360373 then throw("Pool initialisation error happened.")
361- else $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContracToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), StringEntry(keyLpTokensList(), createLpTokensListEntry(lpAssetIdStr))]), "success")
374+ else {
375+ let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract()))
376+ let addAssetsLinkInv = invoke(assetsStoreContract, "addAssetsLink", [amountAssetStr, priceAssetStr, lpAssetIdStr], nil)
377+ if ((addAssetsLinkInv == addAssetsLinkInv))
378+ then {
379+ let increaseAssetPoolsNumberInv = invoke(assetsStoreContract, "increaseAssetPoolsNumber", [amountAssetStr], nil)
380+ if ((increaseAssetPoolsNumberInv == increaseAssetPoolsNumberInv))
381+ then $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContracToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), StringEntry(keyLpTokensList(), createLpTokensListEntry(lpAssetIdStr))]), lpAssetIdStr)
382+ else throw("Strict value is not equal to itself.")
383+ }
384+ else throw("Strict value is not equal to itself.")
385+ }
362386 else throw("Strict value is not equal to itself.")
363387 }
364388 }
432456 let checkCaller = mustManager(i)
433457 if ((checkCaller == checkCaller))
434458 then {
435- let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 1000)
436- let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 1000)
437- let weightDecrement = ((5 * POOLWEIGHTMULT) / 1000)
459+ let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 100)
460+ let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 100)
461+ let weightDecrement = ((5 * POOLWEIGHTMULT) / 100)
438462 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
439463 let stakingDapp = getStakingAddressOrFail(factoryCfg)
440464 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let SCALE8 = 8
55
66 let MULT8 = 100000000
77
88 let SCALE18 = 18
99
1010 let MULT18 = toBigInt(1000000000000000000)
1111
1212 let POOLWEIGHTMULT = MULT8
1313
1414 let GWXvirtualPOOL = "GWXvirtualPOOL"
1515
1616 let decimalsMultPrice = ((100 * 1000) * 1000)
1717
1818 let SEP = "__"
1919
2020 let EMPTY = ""
2121
2222 let PoolActive = 1
2323
2424 let PoolPutDisabled = 2
2525
2626 let PoolMatcherDisabled = 3
2727
2828 let PoolShutdown = 4
2929
3030 let idxInternalAssetId = 1
3131
3232 let idxResutActions = 2
3333
3434 let idxIfAssetIdCalculationPerformed = 3
3535
3636 let idxPoolAddress = 1
3737
3838 let idxPoolStatus = 2
3939
4040 let idxPoolLPAssetId = 3
4141
4242 let idxAmtAssetId = 4
4343
4444 let idxPriceAssetId = 5
4545
4646 let idxAmtAssetDcm = 6
4747
4848 let idxPriceAssetDcm = 7
4949
5050 let idxIAmtAssetId = 8
5151
5252 let idxIPriceAssetId = 9
5353
5454 let idxLPAssetDcm = 10
5555
5656 let idxPoolType = 11
5757
5858 func keyFactoryConfig () = "%s__factoryConfig"
5959
6060
6161 func keyLpTokensList () = "%s__lpTokensList"
6262
6363
6464 func keyPoolScriptHash () = "%s%s__pool__scriptHash"
6565
6666
6767 func keyMatcherPub () = "%s%s__matcher__publicKey"
6868
6969
7070 func keyLegacyFactoryContract () = "%s__legacyFactoryContract"
7171
7272
7373 func keyLegacyPools () = "%s__legacyPools"
7474
7575
7676 func keyManagerPublicKey () = "%s__managerPublicKey"
7777
7878
7979 func keyPendingManagerPublicKey () = "%s__pendingManagerPublicKey"
80+
81+
82+func keyAssetsStoreContract () = "%s__assetsStoreContract"
8083
8184
8285 func keyPriceDecimals () = "%s__priceDecimals"
8386
8487
8588 func keyAllPoolsShutdown () = "%s__shutdown"
8689
8790
8891 func keyNextInternalAssetId () = "%s__nextInternalAssetId"
8992
9093
9194 func keyPoolToWeight (poolAddress) = ("%s%s__poolWeight__" + poolAddress)
9295
9396
9497 func keyPoolToWeightHistory (poolAddress,num) = ((("%s%s__poolWeight__" + poolAddress) + "__") + toString(num))
9598
9699
97100 func keyMappingsInternal2baseAssetId (internalBaseAsset) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(internalBaseAsset))
98101
99102
100103 func keyMappingsBaseAsset2internalId (baseAssetStr) = ("%s%s%s__mappings__baseAsset2internalId__" + baseAssetStr)
101104
102105
103106 func keyPoolConfig (amountAssetInternal,priceAssetInternal) = (((("%d%d%s__" + amountAssetInternal) + "__") + priceAssetInternal) + "__config")
104107
105108
106109 func keyMappingLpAssetToPoolAssets (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2Pool")
107110
108111
109112 func keyMappingPoolAssetsToLpasset (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + internalAmountAssetIdStr) + "__") + internalPriceAssetIdStr) + "__mappings__PoolAssets2LpAsset")
110113
111114
112115 func keyMappingPoolContractAddressToPoolAssets (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2PoolAssets")
113116
114117
115118 func keyMappingPoolAssetsToPoolContractAddress (internalAmountAssetIdStr,internalPriceAssetIdStr) = (((("%d%d%s%s__" + toString(internalAmountAssetIdStr)) + "__") + toString(internalPriceAssetIdStr)) + "__mappings__poolAssets2PoolContract")
116119
117120
118121 func keyMappingPoolContracToLPAsset (poolContractAddress) = (("%s%s%s__" + poolContractAddress) + "__mappings__poolContract2LpAsset")
119122
120123
121124 func keyMappingPoolLPAssetToPoolContractAddress (lpAssetStr) = (("%s%s%s__" + lpAssetStr) + "__mappings__lpAsset2PoolContract")
122125
123126
124127 func getStringOrFail (key) = valueOrErrorMessage(getString(this, key), ("No data for this.key=" + key))
125128
126129
127130 func getBooleanOrFail (key) = valueOrErrorMessage(getBoolean(this, key), ("No data for this.key=" + key))
128131
129132
130133 func getIntOrFail (key) = valueOrErrorMessage(getInteger(this, key), ("No data for this.key=" + key))
131134
132135
133136 let IdxFactoryCfgStakingDapp = 1
134137
135138 let IdxFactoryCfgBoostingDapp = 2
136139
137140 let IdxFactoryCfgIdoDapp = 3
138141
139142 let IdxFactoryCfgTeamDapp = 4
140143
141144 let IdxFactoryCfgEmissionDapp = 5
142145
143146 let IdxFactoryCfgRestDapp = 6
144147
145148 let IdxFactoryCfgSlippageDapp = 7
146149
147150 let IdxFactoryCfgDaoDapp = 8
148151
149152 let IdxFactoryCfgMarketingDapp = 9
150153
151154 let IdxFactoryCfgGwxRewardDapp = 10
152155
153156 let IdxFactoryCfgBirdsDapp = 11
154157
155158 func getBoostingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgBoostingDapp])
156159
157160
158161 func getEmissionAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgEmissionDapp])
159162
160163
161164 func getStakingAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgStakingDapp])
162165
163166
164167 func getGwxRewardAddressOrFail (factoryCfg) = addressFromStringValue(factoryCfg[IdxFactoryCfgGwxRewardDapp])
165168
166169
167170 func managerPublicKeyOrUnit () = match getString(keyManagerPublicKey()) {
168171 case s: String =>
169172 fromBase58String(s)
170173 case _: Unit =>
171174 unit
172175 case _ =>
173176 throw("Match error")
174177 }
175178
176179
177180 func pendingManagerPublicKeyOrUnit () = match getString(keyPendingManagerPublicKey()) {
178181 case s: String =>
179182 fromBase58String(s)
180183 case _: Unit =>
181184 unit
182185 case _ =>
183186 throw("Match error")
184187 }
185188
186189
187190 func mustManager (i) = {
188191 let pd = throw("Permission denied")
189192 match managerPublicKeyOrUnit() {
190193 case pk: ByteVector =>
191194 if ((i.callerPublicKey == pk))
192195 then true
193196 else pd
194197 case _: Unit =>
195198 if ((i.caller == this))
196199 then true
197200 else pd
198201 case _ =>
199202 throw("Match error")
200203 }
201204 }
202205
203206
204207 func dataFactoryCfgV3 (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract,daoContract,marketingContract,gwxRewardsContract,birdsContract) = makeString(["%s%s%s%s%s%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract, daoContract, marketingContract, gwxRewardsContract, birdsContract], SEP)
205208
206209
207210 func dataFactoryCfg (stakingAddress,boostingAddress,idoContract,teamContract,emissionContract,restContract,slippageContract) = makeString(["%s%s%s%s%s%s", stakingAddress, boostingAddress, idoContract, teamContract, emissionContract, restContract, slippageContract], SEP)
208211
209212
210213 func dataPoolCfg (poolAddress,poolStatus,lpAssetId,amountAssetStr,priceAssetStr,amountAssetDecimals,priceAssetDecimals,amountAssetInternalId,priceAssetInternalId,lpAssetDecimals,poolType) = makeString(["%s%d%s%s%s%d%d%d%d%d%s", poolAddress, poolStatus, lpAssetId, amountAssetStr, priceAssetStr, toString(amountAssetDecimals), toString(priceAssetDecimals), toString(amountAssetInternalId), toString(priceAssetInternalId), toString(lpAssetDecimals), poolType], SEP)
211214
212215
213216 func dataMappingPoolAssets (internalAmountAssetStr,internalPriceAssetStr) = makeString(["%d%d", toString(internalAmountAssetStr), toString(internalPriceAssetStr)], SEP)
214217
215218
216219 func getPoolConfig (poolAddress) = {
217220 let poolAssets = split(getStringOrFail(keyMappingPoolContractAddressToPoolAssets(poolAddress)), SEP)
218221 let amountAssetInternal = poolAssets[1]
219222 let priceAssetInternal = poolAssets[2]
220223 split(getStringOrFail(keyPoolConfig(amountAssetInternal, priceAssetInternal)), SEP)
221224 }
222225
223226
224227 func getInternalAssetIdOrCreate (assetIdStr,incrementor) = {
225228 let internalAssetId = valueOrElse(getInteger(this, keyMappingsBaseAsset2internalId(assetIdStr)), 0)
226229 let currentIndexOfInternalId = valueOrElse(getInteger(this, keyNextInternalAssetId()), 0)
227230 let result = if ((internalAssetId == 0))
228231 then {
229232 let newInternalAssetId = (currentIndexOfInternalId + incrementor)
230233 $Tuple3(newInternalAssetId, [IntegerEntry(keyNextInternalAssetId(), newInternalAssetId), IntegerEntry(keyMappingsBaseAsset2internalId(assetIdStr), newInternalAssetId), StringEntry(keyMappingsInternal2baseAssetId(newInternalAssetId), assetIdStr)], true)
231234 }
232235 else $Tuple3(internalAssetId, nil, false)
233236 result
234237 }
235238
236239
237240 func createLpTokensListEntry (newLpToken) = {
238241 let lpTokens = getString(this, keyLpTokensList())
239242 if (isDefined(lpTokens))
240243 then ((value(lpTokens) + SEP) + newLpToken)
241244 else newLpToken
242245 }
243246
244247
245248 @Callable(i)
246249 func constructor (stakingContract,boostingContract,idoContract,teamContract,emissionContract,restContract,slpipageContract,priceDecimals) = {
247250 let checkCaller = mustManager(i)
248251 if ((checkCaller == checkCaller))
249252 then [StringEntry(keyFactoryConfig(), dataFactoryCfg(stakingContract, boostingContract, idoContract, teamContract, emissionContract, restContract, slpipageContract)), IntegerEntry(keyPriceDecimals(), priceDecimals)]
250253 else throw("Strict value is not equal to itself.")
251254 }
252255
253256
254257
255258 @Callable(i)
256259 func constructorV2 (mathcherPub58Str) = {
257260 let checkCaller = mustManager(i)
258261 if ((checkCaller == checkCaller))
259262 then {
260263 let mathcerPub = addressFromPublicKey(fromBase58String(mathcherPub58Str))
261264 if ((mathcerPub == mathcerPub))
262265 then [StringEntry(keyMatcherPub(), mathcherPub58Str)]
263266 else throw("Strict value is not equal to itself.")
264267 }
265268 else throw("Strict value is not equal to itself.")
266269 }
267270
268271
269272
270273 @Callable(i)
271274 func constructorV3 (daoContract,marketingContract,gwxRewardsContract,birdsContract) = {
272275 let checkCaller = mustManager(i)
273276 if ((checkCaller == checkCaller))
274277 then {
275278 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
276279 [StringEntry(keyFactoryConfig(), dataFactoryCfgV3(factoryCfg[1], factoryCfg[2], factoryCfg[3], factoryCfg[4], factoryCfg[5], factoryCfg[6], factoryCfg[7], daoContract, marketingContract, gwxRewardsContract, birdsContract))]
277280 }
278281 else throw("Strict value is not equal to itself.")
279282 }
280283
281284
282285
283286 @Callable(i)
284287 func constructorV4 (legacyFactoryContract,legacyPools) = {
285288 let checkCaller = mustManager(i)
286289 if ((checkCaller == checkCaller))
287290 then [StringEntry(keyLegacyFactoryContract(), legacyFactoryContract), StringEntry(keyLegacyPools(), makeString(legacyPools, SEP))]
288291 else throw("Strict value is not equal to itself.")
289292 }
290293
291294
292295
293296 @Callable(i)
297+func constructorV5 (assetsStoreContract) = {
298+ let checkCaller = mustManager(i)
299+ if ((checkCaller == checkCaller))
300+ then [StringEntry(keyAssetsStoreContract(), assetsStoreContract)]
301+ else throw("Strict value is not equal to itself.")
302+ }
303+
304+
305+
306+@Callable(i)
294307 func setManager (pendingManagerPublicKey) = {
295308 let checkCaller = mustManager(i)
296309 if ((checkCaller == checkCaller))
297310 then {
298311 let checkManagerPublicKey = fromBase58String(pendingManagerPublicKey)
299312 if ((checkManagerPublicKey == checkManagerPublicKey))
300313 then [StringEntry(keyPendingManagerPublicKey(), pendingManagerPublicKey)]
301314 else throw("Strict value is not equal to itself.")
302315 }
303316 else throw("Strict value is not equal to itself.")
304317 }
305318
306319
307320
308321 @Callable(i)
309322 func confirmManager () = {
310323 let pm = pendingManagerPublicKeyOrUnit()
311324 let hasPM = if (isDefined(pm))
312325 then true
313326 else throw("No pending manager")
314327 if ((hasPM == hasPM))
315328 then {
316329 let checkPM = if ((i.callerPublicKey == value(pm)))
317330 then true
318331 else throw("You are not pending manager")
319332 if ((checkPM == checkPM))
320333 then [StringEntry(keyManagerPublicKey(), toBase58String(value(pm))), DeleteEntry(keyPendingManagerPublicKey())]
321334 else throw("Strict value is not equal to itself.")
322335 }
323336 else throw("Strict value is not equal to itself.")
324337 }
325338
326339
327340
328341 @Callable(i)
329342 func activateNewPool (poolAddress,amountAssetStr,priceAssetStr,lpAssetName,lpAssetDescr,poolWeight,poolType) = {
330343 let checkCaller = mustManager(i)
331344 if ((checkCaller == checkCaller))
332345 then if (isDefined(getString(keyMappingPoolContractAddressToPoolAssets(poolAddress))))
333346 then throw((("Pool address " + poolAddress) + " already registered."))
334347 else {
335348 let internalAmountAssetData = getInternalAssetIdOrCreate(amountAssetStr, 1)
336349 let internalAmountAssetId = internalAmountAssetData._1
337350 let internalPriceAssetData = getInternalAssetIdOrCreate(priceAssetStr, if (internalAmountAssetData._3)
338351 then 2
339352 else 1)
340353 let internalPriceAssetId = internalPriceAssetData._1
341354 let poolAccountScriptHash = valueOrErrorMessage(scriptHash(addressFromStringValue(poolAddress)), ("No script has been found on pool account " + poolAddress))
342355 let ethalonPoolAccountScriptHash = getBinaryValue(keyPoolScriptHash())
343356 let poolConfig = getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)))
344357 if (isDefined(poolConfig))
345358 then throw((((("Pool " + amountAssetStr) + "/") + priceAssetStr) + " has already been activated."))
346359 else {
347360 let poolConfigValue = value(getString(this, keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId))))
348361 let amountAssetsDecimals = if ((amountAssetStr == "WAVES"))
349362 then decimalsMultPrice
350363 else pow(10, 0, value(assetInfo(fromBase58String(amountAssetStr))).decimals, 0, 0, DOWN)
351364 let priceAssetsDecimals = if ((priceAssetStr == "WAVES"))
352365 then decimalsMultPrice
353366 else pow(10, 0, value(assetInfo(fromBase58String(priceAssetStr))).decimals, 0, 0, DOWN)
354367 let lpAssetIssueAction = Issue(lpAssetName, lpAssetDescr, 1, 8, true)
355368 let lpAssetId = calculateAssetId(lpAssetIssueAction)
356369 let lpAssetIdStr = toBase58String(lpAssetId)
357370 let poolActivateInvokeResult = invoke(addressFromStringValue(poolAddress), "activate", [amountAssetStr, priceAssetStr], nil)
358371 if ((poolActivateInvokeResult == poolActivateInvokeResult))
359372 then if ((poolActivateInvokeResult != "success"))
360373 then throw("Pool initialisation error happened.")
361- else $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContracToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), StringEntry(keyLpTokensList(), createLpTokensListEntry(lpAssetIdStr))]), "success")
374+ else {
375+ let assetsStoreContract = addressFromStringValue(getStringOrFail(keyAssetsStoreContract()))
376+ let addAssetsLinkInv = invoke(assetsStoreContract, "addAssetsLink", [amountAssetStr, priceAssetStr, lpAssetIdStr], nil)
377+ if ((addAssetsLinkInv == addAssetsLinkInv))
378+ then {
379+ let increaseAssetPoolsNumberInv = invoke(assetsStoreContract, "increaseAssetPoolsNumber", [amountAssetStr], nil)
380+ if ((increaseAssetPoolsNumberInv == increaseAssetPoolsNumberInv))
381+ then $Tuple2(((internalAmountAssetData._2 ++ internalPriceAssetData._2) ++ [lpAssetIssueAction, Burn(lpAssetId, 1), StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(PoolActive), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, decimalsMultPrice, poolType)), StringEntry(keyMappingLpAssetToPoolAssets(lpAssetIdStr), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToLpasset(toString(internalAmountAssetId), toString(internalPriceAssetId)), ("%s__" + lpAssetIdStr)), StringEntry(keyMappingPoolContractAddressToPoolAssets(poolAddress), dataMappingPoolAssets(internalAmountAssetId, internalPriceAssetId)), StringEntry(keyMappingPoolAssetsToPoolContractAddress(internalAmountAssetId, internalPriceAssetId), poolAddress), StringEntry(keyMappingPoolLPAssetToPoolContractAddress(lpAssetIdStr), poolAddress), StringEntry(keyMappingPoolContracToLPAsset(poolAddress), lpAssetIdStr), IntegerEntry(keyPoolToWeight(poolAddress), poolWeight), StringEntry(keyLpTokensList(), createLpTokensListEntry(lpAssetIdStr))]), lpAssetIdStr)
382+ else throw("Strict value is not equal to itself.")
383+ }
384+ else throw("Strict value is not equal to itself.")
385+ }
362386 else throw("Strict value is not equal to itself.")
363387 }
364388 }
365389 else throw("Strict value is not equal to itself.")
366390 }
367391
368392
369393
370394 @Callable(i)
371395 func managePool (poolAddress,newStatus) = {
372396 let checkCaller = mustManager(i)
373397 if ((checkCaller == checkCaller))
374398 then {
375399 let poolConfig = getPoolConfig(poolAddress)
376400 let poolStatus = poolConfig[idxPoolStatus]
377401 let lpAssetIdStr = poolConfig[idxPoolLPAssetId]
378402 let amountAssetStr = poolConfig[idxAmtAssetId]
379403 let priceAssetStr = poolConfig[idxPriceAssetId]
380404 let amountAssetsDecimals = parseIntValue(poolConfig[idxAmtAssetDcm])
381405 let priceAssetsDecimals = parseIntValue(poolConfig[idxPriceAssetDcm])
382406 let internalAmountAssetId = parseIntValue(poolConfig[idxIAmtAssetId])
383407 let internalPriceAssetId = parseIntValue(poolConfig[idxIPriceAssetId])
384408 let lpAssetDcm = parseIntValue(poolConfig[idxLPAssetDcm])
385409 let poolType = poolConfig[idxPoolType]
386410 [StringEntry(keyPoolConfig(toString(internalAmountAssetId), toString(internalPriceAssetId)), dataPoolCfg(poolAddress, toString(newStatus), lpAssetIdStr, amountAssetStr, priceAssetStr, amountAssetsDecimals, priceAssetsDecimals, internalAmountAssetId, internalPriceAssetId, lpAssetDcm, poolType))]
387411 }
388412 else throw("Strict value is not equal to itself.")
389413 }
390414
391415
392416
393417 @Callable(i)
394418 func emit (amountToEmit) = {
395419 let caller = i.caller
396420 let originCaller = i.originCaller
397421 let lpAssetRequested = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
398422 let lpAsset = fromBase58String(lpAssetRequested)
399423 let legacyPools = split(valueOrElse(getString(keyLegacyPools()), EMPTY), SEP)
400424 let legacyFactoryContract = addressFromStringValue(valueOrErrorMessage(getString(keyLegacyFactoryContract()), "Legacy factory contract does not exists."))
401425 if ((0 >= amountToEmit))
402426 then nil
403427 else if (containsElement(legacyPools, toString(caller)))
404428 then $Tuple2(nil, legacyFactoryContract)
405429 else $Tuple2([Reissue(lpAsset, amountToEmit, true), ScriptTransfer(i.caller, amountToEmit, lpAsset)], "success")
406430 }
407431
408432
409433
410434 @Callable(i)
411435 func burn (amountToBurn) = {
412436 let caller = i.caller
413437 let originCaller = i.originCaller
414438 let payment = value(i.payments[0])
415439 let paymentAmount = value(payment.amount)
416440 let inAmountAssetId = toBase58String(value(payment.assetId))
417441 let lpAssetRequestedForBurning = valueOrErrorMessage(getString(keyMappingPoolContracToLPAsset(toString(caller))), "Invalid LP address called me.")
418442 if ((inAmountAssetId != lpAssetRequestedForBurning))
419443 then throw("Invalid asset passed.")
420444 else if ((amountToBurn != paymentAmount))
421445 then throw("Invalid amount passed.")
422446 else {
423447 let lpAsset = fromBase58String(lpAssetRequestedForBurning)
424448 $Tuple2([Burn(lpAsset, amountToBurn)], "success")
425449 }
426450 }
427451
428452
429453
430454 @Callable(i)
431455 func modifyWeights (btcPoolAddress,ethPoolAddress,ethBtcPoolAddress,usdcUsdtPoolAddress) = {
432456 let checkCaller = mustManager(i)
433457 if ((checkCaller == checkCaller))
434458 then {
435- let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 1000)
436- let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 1000)
437- let weightDecrement = ((5 * POOLWEIGHTMULT) / 1000)
459+ let ethBtcWeightNew = ((5 * POOLWEIGHTMULT) / 100)
460+ let usdcUsdtWeightNew = ((5 * POOLWEIGHTMULT) / 100)
461+ let weightDecrement = ((5 * POOLWEIGHTMULT) / 100)
438462 let factoryCfg = split(getStringOrFail(keyFactoryConfig()), SEP)
439463 let stakingDapp = getStakingAddressOrFail(factoryCfg)
440464 let gwxRewardDapp = getGwxRewardAddressOrFail(factoryCfg)
441465 let btcWeightKEY = keyPoolToWeight(btcPoolAddress)
442466 let ethWeightKEY = keyPoolToWeight(ethPoolAddress)
443467 let ethBtcWeightKEY = keyPoolToWeight(ethBtcPoolAddress)
444468 let usdcUsdtWeightKEY = keyPoolToWeight(usdcUsdtPoolAddress)
445469 let btcWeight = getIntOrFail(btcWeightKEY)
446470 let ethWeight = getIntOrFail(ethWeightKEY)
447471 let btcWeightNew = (btcWeight - weightDecrement)
448472 let ethWeightNew = (ethWeight - weightDecrement)
449473 if ((0 >= btcWeightNew))
450474 then throw(("invalid btcWeightNew: " + toString(btcWeightNew)))
451475 else if ((0 >= ethWeightNew))
452476 then throw(("invalid ethWeightNew: " + toString(ethWeightNew)))
453477 else {
454478 let btcLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(btcPoolAddress))
455479 let ethLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(ethPoolAddress))
456480 let ethBtcLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(ethBtcPoolAddress))
457481 let usdcUsdtLpAssetIdStr = getStringOrFail(keyMappingPoolContracToLPAsset(usdcUsdtPoolAddress))
458482 let onModifyWeightBtc = invoke(stakingDapp, "onModifyWeight", [btcLpAssetIdStr, btcPoolAddress], nil)
459483 if ((onModifyWeightBtc == onModifyWeightBtc))
460484 then {
461485 let onModifyWeightEth = invoke(stakingDapp, "onModifyWeight", [ethLpAssetIdStr, ethPoolAddress], nil)
462486 if ((onModifyWeightEth == onModifyWeightEth))
463487 then {
464488 let onModifyWeightEthBtc = invoke(stakingDapp, "onModifyWeight", [ethBtcLpAssetIdStr, ethBtcPoolAddress], nil)
465489 if ((onModifyWeightEthBtc == onModifyWeightEthBtc))
466490 then {
467491 let onModifyWeightUsdcUsdt = invoke(stakingDapp, "onModifyWeight", [usdcUsdtLpAssetIdStr, usdcUsdtPoolAddress], nil)
468492 if ((onModifyWeightUsdcUsdt == onModifyWeightUsdcUsdt))
469493 then [IntegerEntry(btcWeightKEY, btcWeightNew), IntegerEntry(ethWeightKEY, ethWeightNew), IntegerEntry(ethBtcWeightKEY, ethBtcWeightNew), IntegerEntry(usdcUsdtWeightKEY, usdcUsdtWeightNew), IntegerEntry(keyPoolToWeightHistory(btcPoolAddress, 0), btcWeight), IntegerEntry(keyPoolToWeightHistory(ethPoolAddress, 0), ethWeight), IntegerEntry(keyPoolToWeightHistory(ethBtcPoolAddress, 0), ethBtcWeightNew), IntegerEntry(keyPoolToWeightHistory(usdcUsdtPoolAddress, 0), usdcUsdtWeightNew)]
470494 else throw("Strict value is not equal to itself.")
471495 }
472496 else throw("Strict value is not equal to itself.")
473497 }
474498 else throw("Strict value is not equal to itself.")
475499 }
476500 else throw("Strict value is not equal to itself.")
477501 }
478502 }
479503 else throw("Strict value is not equal to itself.")
480504 }
481505
482506
483507 @Verifier(tx)
484508 func verify () = {
485509 let targetPublicKey = match managerPublicKeyOrUnit() {
486510 case pk: ByteVector =>
487511 pk
488512 case _: Unit =>
489513 tx.senderPublicKey
490514 case _ =>
491515 throw("Match error")
492516 }
493517 sigVerify(tx.bodyBytes, tx.proofs[0], targetPublicKey)
494518 }
495519

github/deemru/w8io/026f985 
59.10 ms