tx · 5uQwzpnfzzVeAj3sR4JWNdDQw4zCjXk4o36DX4pPzYFk

3MuibHtY4WMNqE2AgpPjm9fuDar6TUNCThP:  -0.04300000 Waves

2023.05.05 11:40 [2564284] smart account 3MuibHtY4WMNqE2AgpPjm9fuDar6TUNCThP > SELF 0.00000000 Waves

{ "type": 13, "id": "5uQwzpnfzzVeAj3sR4JWNdDQw4zCjXk4o36DX4pPzYFk", "fee": 4300000, "feeAssetId": null, "timestamp": 1683276013048, "version": 2, "chainId": 84, "sender": "3MuibHtY4WMNqE2AgpPjm9fuDar6TUNCThP", "senderPublicKey": "5K6j2MTCQttt7Dt3hR4msP7sjtJ4LWVPHbUjbG485Lxw", "proofs": [ "5aYSH1FWZvuu3eF5vDiikAjV8iSBoQ9HRZrTQwT3RCGe8mJxrb99kDdu1gEMiEkBoWAHKALC2UzMyQsHd4AGTRnH" ], "script": "base64:BgL3NwgCEgASBQoDAQQBEgcKBQEEAQgBEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBQoDAQEBEgQKAggIEgASABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiBmtleUtMcCIVa2V5S0xwUmVmcmVzaGVkSGVpZ2h0IhJrZXlLTHBSZWZyZXNoRGVsYXkiFmtMcFJlZnJlc2hEZWxheURlZmF1bHQiD2tMcFJlZnJlc2hEZWxheSIUa2V5QWRkaXRpb25hbEJhbGFuY2UiB2Fzc2V0SWQiFmtleVN0YWtpbmdBc3NldEJhbGFuY2UiGmdldEFkZGl0aW9uYWxCYWxhbmNlT3JaZXJvIhxnZXRTdGFraW5nQXNzZXRCYWxhbmNlT3JaZXJvIhBrZXlGYWN0b3J5Q29uZmlnIg1rZXlNYXRjaGVyUHViIilrZXlNYXBwaW5nUG9vbENvbnRyYWN0QWRkcmVzc1RvUG9vbEFzc2V0cyITcG9vbENvbnRyYWN0QWRkcmVzcyINa2V5UG9vbENvbmZpZyIJaUFtdEFzc2V0IgtpUHJpY2VBc3NldCIfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZCIMYmFzZUFzc2V0U3RyIhNrZXlBbGxQb29sc1NodXRkb3duIg1rZXlQb29sV2VpZ2h0Ig9jb250cmFjdEFkZHJlc3MiFmtleUFsbG93ZWRMcFNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiFmtleVNraXBPcmRlclZhbGlkYXRpb24iC3Bvb2xBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiDm9yZGVyVmFsaWRJbmZvIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIg9nZXRTdHJpbmdPckZhaWwiB2FkZHJlc3MiA2tleSIMZ2V0SW50T3JGYWlsIgh0aHJvd0VyciIDbXNnIgZmbXRFcnIiD2ZhY3RvcnlDb250cmFjdCITZmVlQ29sbGVjdG9yQWRkcmVzcyIFaW5GZWUiAUAiBm91dEZlZSIQaXNHbG9iYWxTaHV0ZG93biITZ2V0TWF0Y2hlclB1Yk9yRmFpbCINZ2V0UG9vbENvbmZpZyIIYW10QXNzZXQiCnByaWNlQXNzZXQiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA5MDU4OTIyNCIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSINYmFsYW5jZU9uUG9vbCIMdG90YWxCYWxhbmNlIg9jYWxjUHJpY2VCaWdJbnQiCHByQW10WDE4IghhbUFtdFgxOCIUY2FsY1ByaWNlQmlnSW50Um91bmQiB2dldFJhdGUiBXByb3h5IgNpbnYiByRtYXRjaDAiAXIiB2RlcG9zaXQiBmFtb3VudCIOc3Rha2luZ0Fzc2V0SWQiGGN1cnJlbnRBZGRpdGlvbmFsQmFsYW5jZSIaY3VycmVudFN0YWtpbmdBc3NldEJhbGFuY2UiBWFzc2V0Ig1kZXBvc2l0SW52b2tlIhRyZWNlaXZlZFN0YWtpbmdBc3NldCIUbmV3QWRkaXRpb25hbEJhbGFuY2UiFm5ld1N0YWtpbmdBc3NldEJhbGFuY2UiCHdpdGhkcmF3Igxwcm94eVJhdGVNdWwiDXByb2ZpdEFkZHJlc3MiEGN1cnJlbnRQcm94eVJhdGUiB29sZFJhdGUiDHN0YWtpbmdBc3NldCIUb2xkU2VuZFN0YWtpbmdBbW91bnQiFnNlbmRTdGFraW5nQXNzZXRBbW91bnQiDHByb2ZpdEFtb3VudCIOd2l0aGRyYXdJbnZva2UiDnJlY2VpdmVkQXNzZXRzIhNnZXRMZWFzZVByb3h5Q29uZmlnIgFhIhFyZWJhbGFuY2VJbnRlcm5hbCILdGFyZ2V0UmF0aW8iCm1pbkJhbGFuY2UiFGxlYXNhYmxlVG90YWxCYWxhbmNlIhd0YXJnZXRBZGRpdGlvbmFsQmFsYW5jZSIEZGlmZiIPc2VuZEFzc2V0QW1vdW50Ig5nZXRBc3NldEFtb3VudCIOcmViYWxhbmNlQXNzZXQiDSR0MDE1NDYwMTU1OTYiCmlzTGVhc2FibGUiC2xlYXNlZFJhdGlvIgxwcm94eUFkZHJlc3MiDHByb3h5QXNzZXRJZCIUc3Rha2luZ1Byb2ZpdEFkZHJlc3MiGXdpdGhkcmF3QW5kUmViYWxhbmNlQXNzZXQiCWdldEFtb3VudCINJHQwMTU5OTUxNjEzMSIXbmV3VG90YWxMZWFzYWJsZUJhbGFuY2UiDndpdGhkcmF3QW1vdW50Ihd3aXRoZHJhd0FuZFJlYmFsYW5jZUFsbCIUYW1vdW50QXNzZXRPdXRBbW91bnQiE3ByaWNlQXNzZXRPdXRBbW91bnQiEkFtQW10V2l0aGRyYXdTdGF0ZSISUHJBbXRXaXRoZHJhd1N0YXRlIhBwcml2YXRlQ2FsY1ByaWNlIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiDmFtdEFzc2V0QW10WDE4IhBwcmljZUFzc2V0QW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIDY2ZnIgthbXRBc3NldERjbSINcHJpY2VBc3NldERjbSIIcHJpY2VYMTgiCGxwQW10WDE4IhNscFByaWNlSW5BbUFzc2V0WDE4IhNscFByaWNlSW5QckFzc2V0WDE4Ig9jYWxjdWxhdGVQcmljZXMiBnByaWNlcyIUZXN0aW1hdGVHZXRPcGVyYXRpb24iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiCWxwQXNzZXRJZCIJYW1Bc3NldElkIglwckFzc2V0SWQiCnBvb2xTdGF0dXMiCmxwRW1pc3Npb24iCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCINbHBFbWlzc2lvblgxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIhRlc3RpbWF0ZVB1dE9wZXJhdGlvbiIRc2xpcHBhZ2VUb2xlcmFuY2UiDGluQW1Bc3NldEFtdCILaW5BbUFzc2V0SWQiDGluUHJBc3NldEFtdCILaW5QckFzc2V0SWQiCmlzRXZhbHVhdGUiBmVtaXRMcCIMYW1Bc3NldElkU3RyIgxwckFzc2V0SWRTdHIiC2lBbXRBc3NldElkIg1pUHJpY2VBc3NldElkIg5pbkFtQXNzZXRJZFN0ciIOaW5QckFzc2V0SWRTdHIiD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiA3JlcyILc2xpcHBhZ2VYMTgiFHNsaXBwYWdlVG9sZXJhbmNlWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIgtjb21tb25TdGF0ZSIHY2FsY0tMcCINYW1vdW50QmFsYW5jZSIMcHJpY2VCYWxhbmNlIhBhbW91bnRCYWxhbmNlWDE4Ig9wcmljZUJhbGFuY2VYMTgiCnVwZGF0ZWRLTHAiDmNhbGNDdXJyZW50S0xwIhBhbW91bnRBc3NldERlbHRhIg9wcmljZUFzc2V0RGVsdGEiFGxwQXNzZXRFbWlzc2lvbkRlbHRhIhJhbW91bnRBc3NldEJhbGFuY2UiEXByaWNlQXNzZXRCYWxhbmNlIg9scEFzc2V0RW1pc3Npb24iCmN1cnJlbnRLTHAiEnJlZnJlc2hLTHBJbnRlcm5hbCIXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEiFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEiB2FjdGlvbnMiE3NraXBPcmRlclZhbGlkYXRpb24iEnZhbGlkYXRlVXBkYXRlZEtMcCIGb2xkS0xwIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIhFhbW91bnRBc3NldEFtb3VudCIQcHJpY2VBc3NldEFtb3VudCINJHQwMjg1MjAyODczMiIDa0xwIg0kdDAyOTE3MjI5MjcyIg11bnVzZWRBY3Rpb25zIgZrTHBOZXciDGlzT3JkZXJWYWxpZCIEaW5mbyIJY29tbW9uR2V0IgFpIgNwbXQiBnBtdEFtdCIJY29tbW9uUHV0IgphbUFzc2V0UG10IgpwckFzc2V0UG10IgZlc3RQdXQiBGVtaXQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIJZmVlQW1vdW50Ig9jYWxjUHV0T25lVG9rZW4iEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIgZpc0V2YWwiEGFtb3VudEJhbGFuY2VSYXciD3ByaWNlQmFsYW5jZVJhdyIUcGF5bWVudEluQW1vdW50QXNzZXQiDSR0MDMyMzg1MzI2NzgiEGFtb3VudEJhbGFuY2VPbGQiD3ByaWNlQmFsYW5jZU9sZCINJHQwMzI2ODIzMjgzMSIUYW1vdW50QXNzZXRBbW91bnRSYXciE3ByaWNlQXNzZXRBbW91bnRSYXciDSR0MDMyOTYzMzMwMjciDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDM0NzA4MzQ4NzUiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiGG91dEluQW1vdW50QXNzZXREZWNpbWFscyIMYW1CYWxhbmNlT2xkIgxwckJhbGFuY2VPbGQiCm91dEJhbGFuY2UiEG91dEJhbGFuY2VCaWdJbnQiDnJlZGVlbWVkQmlnSW50IglhbW91bnRSYXciDSR0MDM2OTUzMzcwMDkiC3RvdGFsQW1vdW50Ig0kdDAzNzAxMzM3MjM5IgtvdXRBbUFtb3VudCILb3V0UHJBbW91bnQiDGFtQmFsYW5jZU5ldyIMcHJCYWxhbmNlTmV3IhhhbW91bnRCb3RoSW5QYXltZW50QXNzZXQiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0Iglpc01hbmFnZXIiAnBrIgttdXN0TWFuYWdlciICcGQiDWNsZWFuQW1vdW50SW4iCWlzUmV2ZXJzZSINZmVlUG9vbEFtb3VudCINJHQwMzkxMjUzOTQzMCIIYXNzZXRPdXQiB2Fzc2V0SW4iEnBvb2xBc3NldEluQmFsYW5jZSITcG9vbEFzc2V0T3V0QmFsYW5jZSIJYW1vdW50T3V0IgRvbGRLIgRuZXdLIgZjaGVja0siDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCIIY2hlY2tNaW4iDnJlYmFsYW5jZVN0YXRlIg13aXRoZHJhd1N0YXRlIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIg9zaG91bGRBdXRvU3Rha2UiBGFtSWQiBHBySWQiDHNsaXBwYWdlQUludiIMc2xpcHBhZ2VQSW52IgpscFRyYW5zZmVyIgtzbHBTdGFrZUludiINJHQwNDQ0NzY0NDkzOCIRcmVmcmVzaEtMcEFjdGlvbnMiEWlzVXBkYXRlZEtMcFZhbGlkIgNyZWIiC21heFNsaXBwYWdlIg0kdDA0NTU1MDQ1NjE1IgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDQ2ODAzNDY5NTUiBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwNDc1NDE0NzczOCINJHQwNDc3NDE0Nzg0OSINJHQwNDgyMDQ0ODM2MSINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwNDkyNDY0OTM5OSIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA1MDA2MzUwMzEwIhBmZWVBbW91bnRGb3JDYWxjIg0kdDA1MDMxMzUwNDIxIg0kdDA1MDY5OTUwODU1Ig11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA1MTc2MDUxOTExIg0kdDA1MjU3MDUyODE3Ig0kdDA1MjgyMDUyOTI4IhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNTQwMjM1NDEwNCISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINJHQwNTUxOTk1NTI4MCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIg0kdDA1NjU1MjU2NjMzIhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyINJHQwNTgwNzQ1ODE1NSILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDU5MzU5NTk0MjMiEGtMcFVwZGF0ZUFjdGlvbnMiCmFtdEFzc2V0SWQiDHByaWNlQXNzZXRJZCINcG9vbExQQmFsYW5jZSISYWNjQW10QXNzZXRCYWxhbmNlIhRhY2NQcmljZUFzc2V0QmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIg0kdDA2ODA4NTY4MjAyIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2iBAQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBVwACESVzJXNfX3ByaWNlX19sYXN0AQFYAgFZAVoJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFZCQDMCAIJAKQDAQUBWgUDbmlsBQFqAQJhYQICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQJhYgICX18FAmFjAQJhZAICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQJhYgICX18FAmFjAQJhZQACDyVzX19hbW91bnRBc3NldAECYWYAAg4lc19fcHJpY2VBc3NldAACYWcCByVzX19mZWUAAmFoCQBrAwAKBQFiAJBOAAJhaQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQJhZwUCYWgAAmFqCQC5CQIJAMwIAgICJXMJAMwIAgIDa0xwBQNuaWwFAWoAAmFrCQC5CQIJAMwIAgICJXMJAMwIAgISa0xwUmVmcmVzaGVkSGVpZ2h0BQNuaWwFAWoAAmFsCQC5CQIJAMwIAgICJXMJAMwIAgIPcmVmcmVzaEtMcERlbGF5BQNuaWwFAWoAAmFtAB4AAmFuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmFsBQJhbQECYW8BAmFwCQC5CQIJAMwIAgIEJXMlcwkAzAgCAg1zdGFrZWRCYWxhbmNlCQDMCAIFAmFwBQNuaWwFAWoBAmFxAQJhcAkAuQkCCQDMCAICBCVzJXMJAMwIAgIRc2hhcmVBc3NldEJhbGFuY2UJAMwIAgUCYXAFA25pbAUBagECYXIBAmFwCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQJhbwEFAmFwAAABAmFzAQJhcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQECYXEBBQJhcAAAAQJhdAACESVzX19mYWN0b3J5Q29uZmlnAQJhdQACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYXYBAmF3CQCsAgIJAKwCAgIIJXMlcyVzX18FAmF3AiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYXgCAmF5AmF6CQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJheQICX18FAmF6AghfX2NvbmZpZwECYUEBAmFCCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFCAQJhQwACDCVzX19zaHV0ZG93bgECYUQBAmFFCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYUUBAmFGAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFHAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYUgBAmFJCQCsAgICGyVzJXNfX3NraXBPcmRlclZhbGlkYXRpb25fXwUCYUkBAmFKBAJhSwJhTAJhTQJhTgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYUsCAiAoBQJhTAIBKQINIHNlbmRlclZhbGlkPQkApQMBBQJhTQIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYU4BAmFPAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFSAgJhUAJhUQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmFQBQJhUQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJhUAkAzAgCAgEuCQDMCAIFAmFRCQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFTAQJhVAkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhVAUDbmlsAgEgAQJhVQECYVQJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhVAUDbmlsAgEgAAJhVgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFPAgUEdGhpcwkBAVQAAAJhVwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmFPAgUCYVYFAmFHAAJhWAoAAmFZCQD8BwQFAmFWAhBnZXRJbkZlZVJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVkCA0ludAUCYVkJAAIBCQCsAgIJAAMBBQJhWQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAJhWgoAAmFZCQD8BwQFAmFWAhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFZAgNJbnQFAmFZCQACAQkArAICCQADAQUCYVkCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAECYmEACQELdmFsdWVPckVsc2UCCQCbCAIFAmFWCQECYUMABwECYmIACQDZBAEJAQJhTwIFAmFWCQECYXUAAQJiYwAEAmJkCQECYU8CBQR0aGlzCQECYWUABAJiZQkBAmFPAgUEdGhpcwkBAmFmAAQCYXoJAQJhUgIFAmFWCQECYUEBBQJiZQQCYXkJAQJhUgIFAmFWCQECYUEBBQJiZAkAtQkCCQECYU8CBQJhVgkBAmF4AgkApAMBBQJheQkApAMBBQJhegUBagECYmYBAmJnAwkAAAIFAmJnBQFpBQR1bml0CQDZBAEFAmJnAQJiaAECYmcDCQAAAgUCYmcFBHVuaXQFAWkJANgEAQkBBXZhbHVlAQUCYmcBAmJpAQJiagkAmQoHCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmJqBQFvCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmoFAXAJANkEAQkAkQMCBQJiagUBcQkBAmJmAQkAkQMCBQJiagUBcgkBAmJmAQkAkQMCBQJiagUBcwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJqBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYmoFAXUAAmJrCQECYmkBCQECYmMAAAJibAUCYmsAAmJtCAUCYmwCXzEAAmJuCAUCYmwCXzIAAmJvCAUCYmwCXzMAAmJwCAUCYmwCXzQAAmJxCAUCYmwCXzUAAmJyCAUCYmwCXzYAAmJzCAUCYmwCXzcBAmJ0AAkAtQkCCQECYU8CBQJhVgkBAmF0AAUBagACYnUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJidAAFAUICGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MAAmJ2CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYnQABQFDAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAQJidwoCYngCYnkCYnoCYkECYkICYkMCYkQCYkUCYkYCYkcJALkJAgkAzAgCAhQlZCVkJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJ4CQDMCAIJAKQDAQUCYnkJAMwIAgkApAMBBQJiegkAzAgCCQCkAwEFAmJBCQDMCAIJAKQDAQUCYkIJAMwIAgkApAMBBQJiQwkAzAgCCQCkAwEFAmJECQDMCAIJAKQDAQUCYkUJAMwIAgkApAMBBQJiRgkAzAgCCQCkAwEFAmJHBQNuaWwFAWoBAmJIBgJiSQJiSgJiSwJiQQJiRAJiRQkAuQkCCQDMCAICDCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmJJCQDMCAIJAKQDAQUCYkoJAMwIAgkApAMBBQJiSwkAzAgCCQCkAwEFAmJBCQDMCAIJAKQDAQUCYkQJAMwIAgkApAMBBQJiRQUDbmlsBQFqAQJiTAECYXAEAmJNAwkAAAIFAmFwAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJhcAQCYk4JAGUCCQBkAgUCYk0JAQJhcgEFAmFwCQECYXMBBQJhcAkAlgMBCQDMCAIAAAkAzAgCBQJiTgUDbmlsAQJiTwICYlACYlEJALwCAwUCYlAFAWQFAmJRAQJiUgMCYlACYlEBTAkAvQIEBQJiUAUBZAUCYlEFAUwBAmJTAQJiVAQCYlUJAPwHBAUCYlQCB2dldFJhdGUFA25pbAUDbmlsAwkAAAIFAmJVBQJiVQQCYlYFAmJVAwkAAQIFAmJWAgNJbnQEAmJXBQJiVgUCYlcJAQJhUwECIHByb3h5LmdldFJhdGUoKSB1bmV4cGVjdGVkIHZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJiWAQCYXACYlkCYloCYlQEAmNhCQECYXIBBQJhcAMJAAACBQJjYQUCY2EEAmNiCQECYXMBBQJiWgMJAAACBQJjYgUCY2IEAmNjCQECYmYBBQJhcAMJAGYCBQJiWQAABAJjZAkA/AcEBQJiVAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjYwUCYlkFA25pbAMJAAACBQJjZAUCY2QEAmJWBQJjZAMJAAECBQJiVgIDSW50BAJjZQUCYlYEAmNmCQBkAgUCY2EFAmJZBAJjZwkAZAIFAmNiBQJjZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFvAQUCYXAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYXEBBQJiWgUCY2cFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNoBgJhcAJiWQJiWgJiVAJjaQJjagQCY2EJAQJhcgEFAmFwAwkAAAIFAmNhBQJjYQQCY2IJAQJhcwEFAmJaAwkAAAIFAmNiBQJjYgQCY2sJAQJiUwEFAmJUAwkAAAIFAmNrBQJjawQCY2wJAGsDBQJjaQUCY2EFAmNiBAJjbQkBAmJmAQUCYloEAmNuCQBrAwUCY2kFAmJZBQJjbAQCY28JAGsDBQJjaQUCYlkFAmNrBAJjcAkAlgMBCQDMCAIAAAkAzAgCCQBlAgUCY24FAmNvBQNuaWwDCQBmAgUCY28AAAQCY3EJAPwHBAUCYlQCCHdpdGhkcmF3BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmNtBQJjbwUDbmlsAwkAAAIFAmNxBQJjcQQCYlYFAmNxAwkAAQIFAmJWAgNJbnQEAmNyBQJiVgQCY2YJAGUCBQJjYQUCY3IEAmNnCQBlAgkAZQIFAmNiBQJjbwUCY3AJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbwEFAmFwBQJjZgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFxAQUCYloFAmNnCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNqBQJjcAkBAmJmAQUCYloFA25pbAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmNzAQJhcAQCYlYJAPwHBAUCYVYCGmdldFBvb2xMZWFzZUNvbmZpZ1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwkAzAgCBQJhcAUDbmlsBQNuaWwDCQABAgUCYlYCMChCb29sZWFuLCBJbnQsIEludCwgU3RyaW5nLCBTdHJpbmcsIEludCwgU3RyaW5nKQQCY3QFAmJWBQJjdAkBAmFTAQkArAICCQCsAgICAVsFAmFwAh1dIGdldExlYXNlUHJveHlDb25maWcoKSBlcnJvcgECY3UHAmN2AmFwAmJaAmN3AmJUAmNpAmNqBAJjYQkBAmFyAQUCYXADCQAAAgUCY2EFAmNhBAJjYgkBAmFzAQUCYloDCQAAAgUCY2IFAmNiBAJjeAkAlgMBCQDMCAIAAAkAzAgCCQBlAgkBAmJMAQUCYXAFAmN3BQNuaWwEAmN5CQBrAwUCY3YFAmN4AGQEAmN6CQBlAgUCY2EFAmN5AwkAAAIFAmN6AAAFA25pbAMJAGYCAAAFAmN6BAJjQQkBAS0BBQJjegkBAmJYBAUCYXAFAmNBBQJiWgUCYlQEAmNCBQJjegkBAmNoBgUCYXAFAmNCBQJiWgUCYlQFAmNpBQJjagkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECY0MBAmFwBAJjRAkBAmNzAQUCYXAEAmNFCAUCY0QCXzEEAmNGCAUCY0QCXzIEAmN3CAUCY0QCXzMEAmNHCAUCY0QCXzQEAmNICAUCY0QCXzUEAmNpCAUCY0QCXzYEAmNJCAUCY0QCXzcDBQJjRQkBAmN1BwUCY0YFAmFwBQJjSAUCY3cJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNHBQJjaQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0kFA25pbAECY0oCAmFwAmNLBAJjTAkBAmNzAQUCYXAEAmNFCAUCY0wCXzEEAmNGCAUCY0wCXzIEAmN3CAUCY0wCXzMEAmNHCAUCY0wCXzQEAmNICAUCY0wCXzUEAmNpCAUCY0wCXzYEAmNJCAUCY0wCXzcDBQJjRQQCY00JAJYDAQkAzAgCAAAJAMwIAgkAZQIJAGUCCQECYkwBBQJhcAUCY0sFAmN3BQNuaWwDCQAAAgUCY00FAmNNBAJjZgkAawMFAmNGBQJjTQBkAwkAAAIFAmNmBQJjZgQCY04JAGUCCQECYXIBBQJhcAUCY2YDCQAAAgUCY04FAmNOAwkAZgIAAAUCY04JAQJiWAQFAmFwCQEBLQEFAmNOBQJjSAkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0cJAQJjaAYFAmFwBQJjTgUCY0gJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmNHBQJjaQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCY0kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAECY08CAmNQAmNRBAJjUgkBAmNKAgkBAmFPAgUEdGhpcwkBAmFlAAUCY1AEAmNTCQECY0oCCQECYU8CBQR0aGlzCQECYWYABQJjUQkAzggCBQJjUgUCY1MBAmNUBAJjVQJjVgJjVwJjWAQCY1kJAQFEAgUCY1cFAmNVBAJjWgkBAUQCBQJjWAUCY1YJAQJiTwIFAmNaBQJjWQECZGEDAmNXAmNYAmRiBAJkYwkBAmJjAAQCZGQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdAQCZGUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdQQCZGYJAQJjVAQFAmRkBQJkZQUCY1cFAmNYBAJiUQkBAUQCBQJjVwUCZGQEAmJQCQEBRAIFAmNYBQJkZQQCZGcJAQFEAgUCZGIFAWIEAmRoCQECYk8CBQJiUQUCZGcEAmRpCQECYk8CBQJiUAUCZGcJAMwIAgUCZGYJAMwIAgUCZGgJAMwIAgUCZGkFA25pbAECZGoDAmNXAmNYAmRiBAJkawkBAmRhAwUCY1cFAmNYBQJkYgkAzAgCCQEBSAIJAJEDAgUCZGsAAAUBYgkAzAgCCQEBSAIJAJEDAgUCZGsAAQUBYgkAzAgCCQEBSAIJAJEDAgUCZGsAAgUBYgUDbmlsAQJkbAQCZG0CZG4CZG8CYWIEAmRjCQECYmMABAJkcAkAkQMCBQJkYwUBcQQCZHEJAJEDAgUCZGMFAXIEAmRyCQCRAwIFAmRjBQFzBAJjVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF0BAJjVgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF1BAJkcwkAkQMCBQJkYwUBcAQCZHQICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQkA2QQBBQJkcAkArAICCQCsAgICBkFzc2V0IAUCZHACDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5AwkBAiE9AgUCZHAFAmRuCQACAQIVSW52YWxpZCBhc3NldCBwYXNzZWQuBAJkdQkBAmJMAQUCZHEEAmR2CQEBRAIFAmR1BQJjVQQCZHcJAQJiTAEFAmRyBAJkeAkBAUQCBQJkdwUCY1YEAmR5CQECYk8CBQJkeAUCZHYEAmR6CQEBSAIFAmR5BQFiBAJkQQkBAUQCBQJkbwUBYgQCZEIJAQFEAgUCZHQFAWIEAmRDCQC8AgMFAmR2BQJkQQUCZEIEAmRECQC8AgMFAmR4BQJkQQUCZEIEAmRFCQEBSwMFAmRDBQJjVQUFRkxPT1IEAmRGCQEBSwMFAmREBQJjVgUFRkxPT1IEAmRHAwkAAAIFAmRtAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCZEUDCQAAAgUCZHECBVdBVkVTBQR1bml0CQDZBAEFAmRxCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkRgMJAAACBQJkcgIFV0FWRVMFBHVuaXQJANkEAQUCZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCZG0JAQJiSAYFAmRFBQJkRgUCZG8FAmR6BQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmR6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmR6BQNuaWwJAJwKCgUCZEUFAmRGBQJkcQUCZHIFAmR1BQJkdwUCZHQFAmR5BQJkcwUCZEcBAmRICQJkbQJkSQJkSgJkSwJkTAJkTQJhYgJkTgJkTwQCZGMJAQJiYwAEAmRwCQDZBAEJAJEDAgUCZGMFAXEEAmRQCQCRAwIFAmRjBQFyBAJkUQkAkQMCBQJkYwUBcwQCZFIJAJEDAgUCZGMFAXYEAmRTCQCRAwIFAmRjBQF3BAJkZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF0BAJkZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF1BAJkcwkAkQMCBQJkYwUBcAQCZHQICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZHAJAKwCAgkArAICAgZBc3NldCAJANgEAQUCZHACDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkVAkA2AQBCQELdmFsdWVPckVsc2UCBQJkSwkA2QQBAgVXQVZFUwQCZFUJANgEAQkBC3ZhbHVlT3JFbHNlAgUCZE0JANkEAQIFV0FWRVMDAwkBAiE9AgUCZFAFAmRUBgkBAiE9AgUCZFEFAmRVCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCZHUDBQJkTgkBAmJMAQUCZFAJAGUCCQECYkwBBQJkUAUCZEoEAmR3AwUCZE4JAQJiTAEFAmRRCQBlAgkBAmJMAQUCZFEFAmRMBAJkVgkBAUQCBQJkSgUCZGQEAmRXCQEBRAIFAmRMBQJkZQQCZFgJAQJiTwIFAmRXBQJkVgQCZHYJAQFEAgUCZHUFAmRkBAJkeAkBAUQCBQJkdwUCZGUEAmRZAwkAAAIFAmR0AAAEAmR5BQFlBAJkWgUBZQQCZGcJAHYGCQC5AgIFAmRWBQJkVwAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJkZwUBYgkBAUgCBQJkVgUCZGQJAQFIAgUCZFcFAmRlCQECYk8CCQC3AgIFAmR4BQJkVwkAtwICBQJkdgUCZFYFAmRaBAJkeQkBAmJPAgUCZHgFAmR2BAJkWgkAvAIDCQEBUgEJALgCAgUCZHkFAmRYBQFkBQJkeQQCZWEJAQFEAgUCZEkFAWIDAwkBAiE9AgUCZHkFAWUJAL8CAgUCZFoFAmVhBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJkWgIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmVhBAJkQgkBAUQCBQJkdAUBYgQCZWIJAL0CBAUCZFYJAQJiUgMFAmR4BQJkdgUHQ0VJTElORwUBZAUHQ0VJTElORwQCZWMJAL0CBAUCZFcFAWQJAQJiUgMFAmR4BQJkdgUFRkxPT1IFB0NFSUxJTkcEAmVkAwkAvwICBQJlYgUCZFcJAJQKAgUCZWMFAmRXCQCUCgIFAmRWBQJlYgQCZWUIBQJlZAJfMQQCZWYIBQJlZAJfMgQCZGcJAL0CBAUCZEIFAmVmBQJkeAUFRkxPT1IJAJcKBQkBAUsDBQJkZwUBYgUFRkxPT1IJAQFLAwUCZWUFAmRkBQdDRUlMSU5HCQEBSwMFAmVmBQJkZQUHQ0VJTElORwUCZHkFAmRaBAJlZwgFAmRZAl8xBAJlaAgFAmRZAl8yBAJlaQgFAmRZAl8zBAJkegkBAUgCCAUCZFkCXzQFAWIEAmVqCQEBSAIIBQJkWQJfNQUBYgMJAGcCAAAFAmVnCQACAQI2SW52YWxpZCBjYWxjdWxhdGlvbnMuIExQIGNhbGN1bGF0ZWQgaXMgbGVzcyB0aGFuIHplcm8uBAJlawMJAQEhAQUCZE8AAAUCZWcEAmVsCQBlAgUCZEoFAmVoBAJlbQkAZQIFAmRMBQJlaQQCZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZHoJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgUCYWIFAmRtCQECYncKBQJlaAUCZWkFAmVrBQJkegUCZEkFAmVqBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJlbAUCZW0FA25pbAkAnwoNBQJlZwUCZWsFAmR6BQJkdQUCZHcFAmR0BQJkcAUCZHMFAmVuBQJlbAUCZW0FAmRLBQJkTQECZW8DAmVwAmVxAmR0BAJlcgkBAUcCBQJlcAkAtgIBBQJicgQCZXMJAQFHAgUCZXEJALYCAQUCYnMEAmV0CQC8AgMJAHYGCQC5AgIFAmVyBQJlcwAACQC2AgEABQABABIFBERPV04FAWcFAmR0AwkAAAIFAmR0BQFmBQFmBQJldAECZXUDAmV2AmV3AmV4BAJleQkAuAICCQC2AgEJAQJiTAEJAQJiaAEFAmJwBQJldgQCZXoJALgCAgkAtgIBCQECYkwBCQECYmgBBQJicQUCZXcEAmVBCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYm8IcXVhbnRpdHkFAmV4BAJlQgkBAmVvAwUCZXkFAmV6BQJlQQUCZUIBAmVDAwJlRAJlRQJleAQCZXkJAGQCCQECYkwBCQECYmgBBQJicAUCZUQEAmV6CQBkAgkBAmJMAQkBAmJoAQUCYnEFAmVFBAJlQQkAZAIICQEFdmFsdWUBCQDsBwEFAmJvCHF1YW50aXR5BQJleAQCZXQJAQJlbwMJALYCAQUCZXkJALYCAQUCZXoJALYCAQUCZUEEAmVGCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhawUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFqCQCmAwEFAmV0BQNuaWwJAJQKAgUCZUYFAmV0AQJlRwAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYVYJAQJhSAEJAKUIAQUEdGhpcwcBAmVIAgJlSQJldAMJAMACAgUCZXQFAmVJBgkBAmFTAQkAuQkCCQDMCAICInVwZGF0ZWQgS0xwIGxvd2VyIHRoYW4gY3VycmVudCBLTHAJAMwIAgkApgMBBQJlSQkAzAgCCQCmAwEFAmV0BQNuaWwCASABAmVKAQJlSwQCZXkJAQJiTAEJAQJiaAEFAmJwBAJlegkBAmJMAQkBAmJoAQUCYnEEAmVMCAUCZUsGYW1vdW50BAJlTQkAbgQIBQJlSwZhbW91bnQIBQJlSwVwcmljZQUBYgUFRkxPT1IEAmVOAwkAAAIIBQJlSwlvcmRlclR5cGUFA0J1eQkAlAoCBQJlTAkBAS0BBQJlTQkAlAoCCQEBLQEFAmVMBQJlTQQCZUQIBQJlTgJfMQQCZUUIBQJlTgJfMgMDAwkBAmJhAAYJAAACBQJibgUBbQYJAAACBQJibgUBbgkAAgECHEV4Y2hhbmdlIG9wZXJhdGlvbnMgZGlzYWJsZWQDAwkBAiE9AggIBQJlSwlhc3NldFBhaXILYW1vdW50QXNzZXQFAmJwBgkBAiE9AggIBQJlSwlhc3NldFBhaXIKcHJpY2VBc3NldAUCYnEJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJlTwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCoAwEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUCYWoCATAJAQJhVQECC2ludmFsaWQga0xwBAJlUAkBAmVDAwUCZUQFAmVFAAAEAmVRCAUCZVACXzEEAmVSCAUCZVACXzIEAmVTCQDAAgIFAmVSBQJlTwQCZVQJALkJAgkAzAgCAgRrTHA9CQDMCAIJAKYDAQUCZU8JAMwIAgIIIGtMcE5ldz0JAMwIAgkApgMBBQJlUgkAzAgCAhQgYW1vdW50QXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmV5CQDMCAICEyBwcmljZUFzc2V0QmFsYW5jZT0JAMwIAgkApAMBBQJlegkAzAgCAhkgYW1vdW50QXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZUQJAMwIAgIYIHByaWNlQXNzZXRCYWxhbmNlRGVsdGE9CQDMCAIJAKQDAQUCZUUJAMwIAgIIIGhlaWdodD0JAMwIAgkApAMBBQZoZWlnaHQFA25pbAIACQCUCgIFAmVTBQJlVAECZVUBAmVWAwkBAiE9AgkAkAMBCAUCZVYIcGF5bWVudHMAAQkAAgECHWV4YWN0bHkgMSBwYXltZW50IGlzIGV4cGVjdGVkBAJlVwkBBXZhbHVlAQkAkQMCCAUCZVYIcGF5bWVudHMAAAQCZG4JAQV2YWx1ZQEIBQJlVwdhc3NldElkBAJlWAgFAmVXBmFtb3VudAQCZFkJAQJkbAQJANgEAQgFAmVWDXRyYW5zYWN0aW9uSWQJANgEAQUCZG4FAmVYCAUCZVYGY2FsbGVyBAJkRQgFAmRZAl8xBAJkRggFAmRZAl8yBAJkcwkBDXBhcnNlSW50VmFsdWUBCAUCZFkCXzkEAmRHCAUCZFkDXzEwAwMJAQJiYQAGCQAAAgUCZHMFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRzCQCXCgUFAmRFBQJkRgUCZVgFAmRuBQJkRwECZVkDAmVWAmRJAmRPAwkBAiE9AgkAkAMBCAUCZVYIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmVaCQEFdmFsdWUBCQCRAwIIBQJlVghwYXltZW50cwAABAJmYQkBBXZhbHVlAQkAkQMCCAUCZVYIcGF5bWVudHMAAQQCZmIJAQJkSAkJANgEAQgFAmVWDXRyYW5zYWN0aW9uSWQFAmRJCAUCZVoGYW1vdW50CAUCZVoHYXNzZXRJZAgFAmZhBmFtb3VudAgFAmZhB2Fzc2V0SWQJAKUIAQgFAmVWBmNhbGxlcgcFAmRPBAJkcwkBDXBhcnNlSW50VmFsdWUBCAUCZmICXzgDAwMJAQJiYQAGCQAAAgUCZHMFAWwGCQAAAgUCZHMFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmRzBQJmYgECZmMBAmJZBAJmZAkA/AcEBQJhVgIEZW1pdAkAzAgCBQJiWQUDbmlsBQNuaWwDCQAAAgUCZmQFAmZkBAJmZQQCYlYFAmZkAwkAAQIFAmJWAgdBZGRyZXNzBAJmZgUCYlYJAPwHBAUCZmYCBGVtaXQJAMwIAgUCYlkFA25pbAUDbmlsBQR1bml0AwkAAAIFAmZlBQJmZQUCYlkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmZnAgJiWQJhaQQCZmgDCQAAAgUCYWkAAAAACQBrAwUCYlkFAmFpBQFiCQCUCgIJAGUCBQJiWQUCZmgFAmZoAQJmaQQCZmoCZmsCYWICYWMEAmZsCQAAAgUCYWMFBHVuaXQEAmZtCQECYkwBCQECYmgBBQJicAQCZm4JAQJiTAEJAQJiaAEFAmJxBAJmbwMJAAACBQJmawUCYnAGAwkAAAIFAmZrBQJicQcJAQJhUwECDWludmFsaWQgYXNzZXQEAmZwAwUCZmwJAJQKAgUCZm0FAmZuAwUCZm8JAJQKAgkAZQIFAmZtBQJmagUCZm4JAJQKAgUCZm0JAGUCBQJmbgUCZmoEAmZxCAUCZnACXzEEAmZyCAUCZnACXzIEAmZzAwUCZm8JAJQKAgUCZmoAAAkAlAoCAAAFAmZqBAJmdAgFAmZzAl8xBAJmdQgFAmZzAl8yBAJlTAgJAQJmZwIFAmZ0BQJhWAJfMQQCZU0ICQECZmcCBQJmdQUCYVgCXzEEAmZ2CQECZmcCBQJmagUCYVgEAmZ3CAUCZnYCXzEEAmZoCAUCZnYCXzIEAmZ4CQBkAgUCZnEFAmVMBAJmeQkAZAIFAmZyBQJlTQQCZnoJAQJiTwIJAQFEAgUCZnkFAmJzCQEBRAIFAmZ4BQJicgQCZkEJAQFIAgUCZnoFAWIEAmZCAwUCZm8FAmZxBQJmcgQCZkMJALYCAQUCZkIEAmZECQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYm8JAKwCAgkArAICAgZhc3NldCAJANgEAQUCYm8CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmRQMJAL8CAgUCZkQFAWYGCQECYVMBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmZFBQJmRQQCZkYJALYCAQUCZncEAmZHCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmZECQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZkYFAWQFAmZDABIAEgUERE9XTgUBZAUBZAUDbmlsBAJlbgMFAmZsBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZkEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZkEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJ3CgUCZnQFAmZ1BQJmRwUCZkEAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJmSAkBAmJPAgkBAUQCBQJmcgUCYnMJAQFEAgUCZnEFAmJyBAJmSQkBAUgCBQJmSAUBYgQCZkoEAmZLAwUCZm8JAJQKAgUCZnQFAmZxCQCUCgIFAmZ1BQJmcgQCYlkIBQJmSwJfMQQCZkwIBQJmSwJfMgQCZk0JAKADAQkAvAIDBQJmRAkAtgIBCQBpAgUCYlkAAgkAtgIBBQJmTAkAawMJAGUCBQJmRwUCZk0FAWIFAmZNCQCXCgUFAmZHBQJlbgUCZmgFAmZKBQJmbwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZk4FAmZPAmZ3AmZrAmFiAmFjBAJmbAkAAAIFAmFjBQR1bml0BAJkYwkBAmJjAAQCZGQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdAQCZGUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdQQCZlAJAMwIAgMJAAACBQJmawUCYm8GCQECYVMBAhBpbnZhbGlkIGxwIGFzc2V0BQNuaWwDCQAAAgUCZlAFAmZQBAJmUQMJAAACBQJmTwUCYnAGAwkAAAIFAmZPBQJicQcJAQJhUwECDWludmFsaWQgYXNzZXQEAmZSAwUCZlEJALYCAQkBAmJMAQkBAmJoAQUCYnAJALYCAQkBAmJMAQkBAmJoAQUCYnEEAmZTAwUCZlEFAmRkBQJkZQQCZlQJAQJiTAEJAQJiaAEFAmJwBAJmVQkBAmJMAQkBAmJoAQUCYnEEAmZWAwUCZlEFAmZUBQJmVQQCZlcJALYCAQUCZlYEAmZECQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYm8JAKwCAgkArAICAgZhc3NldCAJANgEAQUCYm8CDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmWAkAtgIBBQJmdwQCZlkJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZlIJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmZYBQFkBQJmRAASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJmWgkBAmZnAgUCZlkFAmFaBAJnYQgFAmZaAl8xBAJmaAgFAmZaAl8yBAJnYgMFAmZRCQCWCgQFAmdhAAAJAGUCBQJmVAUCZlkFAmZVCQCWCgQAAAUCZ2EFAmZUCQBlAgUCZlUFAmZZBAJnYwgFAmdiAl8xBAJnZAgFAmdiAl8yBAJnZQgFAmdiAl8zBAJnZggFAmdiAl80BAJmegkBAmJPAgkBAUQCBQJnZgUCYnMJAQFEAgUCZ2UFAmJyBAJmQQkBAUgCBQJmegUBYgQCZW4DBQJmbAUDbmlsCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZAIJAKUIAQkBBXZhbHVlAQUCYWIJANgEAQkBBXZhbHVlAQUCYWMJAQJiSAYFAmdjBQJnZAUCZncFAmZBBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmZBCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmZBBQNuaWwEAmZICQECYk8CCQEBRAIFAmZVBQJicwkBAUQCBQJmVAUCYnIEAmZJCQEBSAIFAmZIBQFiBAJmSgQCZ2cJAGgCCQCgAwEJALwCAwUCZlIFAmZYBQJmRAACCQBrAwkAZQIFAmdhBQJnZwUBYgUCZ2cJAJcKBQUCZ2EFAmVuBQJmaAUCZkoFAmZRCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJnaAAEAmJWCQCiCAEJAQFVAAMJAAECBQJiVgIGU3RyaW5nBAJnaQUCYlYJANkEAQUCZ2kDCQABAgUCYlYCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZ2oABAJiVgkAoggBCQEBVgADCQABAgUCYlYCBlN0cmluZwQCZ2kFAmJWCQDZBAEFAmdpAwkAAQIFAmJWAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdrAQJlVgQCYlYJAQJnaAADCQABAgUCYlYCCkJ5dGVWZWN0b3IEAmdsBQJiVgkAAAIIBQJlVg9jYWxsZXJQdWJsaWNLZXkFAmdsAwkAAQIFAmJWAgRVbml0CQAAAggFAmVWBmNhbGxlcgUEdGhpcwkAAgECC01hdGNoIGVycm9yAQJnbQECZVYEAmduCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEAmJWCQECZ2gAAwkAAQIFAmJWAgpCeXRlVmVjdG9yBAJnbAUCYlYDCQAAAggFAmVWD2NhbGxlclB1YmxpY0tleQUCZ2wGBQJnbgMJAAECBQJiVgIEVW5pdAMJAAACCAUCZVYGY2FsbGVyBQR0aGlzBgUCZ24JAAIBAgtNYXRjaCBlcnJvch4CZVYBCXJlYmFsYW5jZQAJAM4IAgkBAmNDAQkBAmFPAgUEdGhpcwkBAmFlAAkBAmNDAQkBAmFPAgUEdGhpcwkBAmFmAAJlVgEhY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcFJFQURPTkxZAwJnbwJncAJncQQCZ3IDCQAAAgUCZ3AHBAJncwkBAmFPAgUEdGhpcwkBAmFmAAQCZ3QJAQJhTwIFBHRoaXMJAQJhZQAJAJQKAgUCZ3MFAmd0BAJncwkBAmFPAgUEdGhpcwkBAmFlAAQCZ3QJAQJhTwIFBHRoaXMJAQJhZgAJAJQKAgUCZ3MFAmd0BAJncwgFAmdyAl8xBAJndAgFAmdyAl8yBAJndQkBAmJMAQUCZ3QEAmd2CQECYkwBBQJncwQCZ3cJAGsDBQJndgUCZ28JAGQCBQJndQUCZ28EAmd4CQC5AgIJALYCAQUCZ3UJALYCAQUCZ3YEAmd5CQC5AgIJALcCAgkAtwICCQC2AgEJAQJiTAEFAmd0CQC2AgEFAmdvCQC2AgEFAmdxCQC4AgIJALYCAQkBAmJMAQUCZ3MJALYCAQUCZ3cEAmd6AwkAwAICBQJneQUCZ3gGCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZ3oFAmd6CQCUCgIFA25pbAUCZ3cJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBQJnbwJncAJnQQJnQgJncQQCZ0MKAAJhWQkA/AcEBQJhVgIXZ2V0U3dhcENvbnRyYWN0UkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAmFZAgZTdHJpbmcFAmFZCQACAQkArAICCQADAQUCYVkCGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQCZlAJAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZVYIcGF5bWVudHMAAAZhbW91bnQFAmdvBgkBAmFTAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmVWBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZ0MGCQECYVMBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmZQBQJmUAQCZVcJAQV2YWx1ZQEJAJEDAggFAmVWCHBheW1lbnRzAAAEAmd0CQECYmgBCAUCZVcHYXNzZXRJZAQCZ3MDCQAAAgUCZ3AHCQECYU8CBQR0aGlzCQECYWYACQECYU8CBQR0aGlzCQECYWUABAJndQkAZQIJAQJiTAEFAmd0CAkBBXZhbHVlAQkAkQMCCAUCZVYIcGF5bWVudHMAAAZhbW91bnQEAmd2CQECYkwBBQJncwQCZ3cJAGsDBQJndgUCZ28JAGQCBQJndQUCZ28EAmd4CQC5AgIJALYCAQUCZ3UJALYCAQUCZ3YEAmd5CQC5AgIJALcCAgkAtgIBCQECYkwBBQJndAkAtgIBBQJncQkAuAICCQC2AgEJAQJiTAEFAmdzCQC2AgEFAmd3BAJnegMJAMACAgUCZ3kFAmd4BgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmd6BQJnegQCZ0QDCQBnAgUCZ3cFAmdBBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmdEBQJnRAQCZ0UJAQJjQwEFAmd0AwkAAAIFAmdFBQJnRQQCZ0YJAQJjSgIFAmdzBQJndwMJAAACBQJnRgUCZ0YJAJQKAgkAzggCCQDOCAIFAmdGBQJnRQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJnQgUCZ3cJAQJiZgEFAmdzBQNuaWwFAmd3CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVWAQpzZXRNYW5hZ2VyAQJnRwQCZ0gJAQJnbQEFAmVWAwkAAAIFAmdIBQJnSAQCZ0kJANkEAQUCZ0cDCQAAAgUCZ0kFAmdJCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUCZ0cFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlVgEOY29uZmlybU1hbmFnZXIABAJnSgkBAmdqAAQCZ0sDCQEJaXNEZWZpbmVkAQUCZ0oGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdLBQJnSwQCZ0wDCQAAAggFAmVWD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZ0oGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmdMBQJnTAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQAJANgEAQkBBXZhbHVlAQUCZ0oJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVYABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBA3B1dAICZEkCZ00DCQBmAgAABQJkSQkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJmYgkBAmVZAwUCZVYFAmRJBgQCZWsIBQJmYgJfMgQCZHAIBQJmYgJfNwQCZEcIBQJmYgJfOQQCZWwIBQJmYgNfMTAEAmVtCAUCZmIDXzExBAJnTggFAmZiA18xMgQCZ08IBQJmYgNfMTMEAmVaCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlVghwYXltZW50cwAABmFtb3VudAQCZmEJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmVWCHBheW1lbnRzAAEGYW1vdW50BAJlQgkBAmV1AwUCZVoFAmZhCQC2AgEAAAMJAAACBQJlQgUCZUIEAmZkCQD8BwQFAmFWAgRlbWl0CQDMCAIFAmVrBQNuaWwFA25pbAMJAAACBQJmZAUCZmQEAmZlBAJiVgUCZmQDCQABAgUCYlYCB0FkZHJlc3MEAmZmBQJiVgkA/AcEBQJmZgIEZW1pdAkAzAgCBQJlawUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZmUFAmZlBAJnUAMJAGYCBQJlbAAACQD8BwQFAmJ2AgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ04FAmVsBQNuaWwFA25pbAMJAAACBQJnUAUCZ1AEAmdRAwkAZgIFAmVtAAAJAPwHBAUCYnYCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnTwUCZW0FA25pbAUDbmlsAwkAAAIFAmdRBQJnUQQCZ1IDBQJnTQQCZ1MJAPwHBAUCYnUCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRwBQJlawUDbmlsAwkAAAIFAmdTBQJnUwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJlVgZjYWxsZXIFAmVrBQJkcAUDbmlsBAJnVAkBAmVDAwAAAAAAAAMJAAACBQJnVAUCZ1QEAmV0CAUCZ1QCXzIEAmdVCAUCZ1QCXzEEAmdWCQECZUgCBQJlQgUCZXQDCQAAAgUCZ1YFAmdWBAJnVwkA/AcEBQR0aGlzAglyZWJhbGFuY2UFA25pbAUDbmlsAwkAAAIFAmdXBQJnVwkAzggCCQDOCAIFAmRHBQJnUgUCZ1UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBCnB1dEZvckZyZWUBAmdYAwkAZgIAAAUCZ1gJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZmIJAQJlWQMFAmVWBQJnWAcEAmRHCAUCZmICXzkEAmVaCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJlVghwYXltZW50cwAABmFtb3VudAQCZmEJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmVWCHBheW1lbnRzAAEGYW1vdW50BAJlQgkBAmV1AwUCZVoFAmZhCQC2AgEAAAMJAAACBQJlQgUCZUIEAmdZCQECZUMDAAAAAAAABAJnVQgFAmdZAl8xBAJldAgFAmdZAl8yBAJnVgkBAmVIAgUCZUIFAmV0AwkAAAIFAmdWBQJnVgkAzggCBQJkRwUCZ1UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBCXB1dE9uZVRrbgICZ1oCaGEEAmhiCgACYVkJAPwHBAUCYVYCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhWQIHQm9vbGVhbgUCYVkJAAIBCQCsAgIJAAMBBQJhWQIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCaGMDAwMJAQJiYQAGCQAAAgUCYm4FAWwGCQAAAgUCYm4FAW4GBQJoYgQCZlAJAMwIAgMDCQEBIQEFAmhjBgkBAmdrAQUCZVYGCQECYVMBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlVghwYXltZW50cwABBgkBAmFTAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZlAFAmZQBAJoZAkAkQMCCAUCZVYIcGF5bWVudHMAAAQCZmsIBQJoZAdhc3NldElkBAJmaggFAmhkBmFtb3VudAQCZUIDCQAAAgUCZmsFAmJwCQECZXUDCQC2AgEFAmZqCQC2AgEAAAkAtgIBAAADCQAAAgUCZmsFAmJxCQECZXUDCQC2AgEAAAkAtgIBBQJmagkAtgIBAAAJAQJhUwECHnBheW1lbnQgYXNzZXQgaXMgbm90IHN1cHBvcnRlZAMJAAACBQJlQgUCZUIEAmFiCAUCZVYGY2FsbGVyBAJhYwgFAmVWDXRyYW5zYWN0aW9uSWQEAmhlCQECZmkEBQJmagUCZmsFAmFiBQJhYwMJAAACBQJoZQUCaGUEAmZvCAUCaGUCXzUEAmhmCAUCaGUCXzQEAmZoCAUCaGUCXzMEAmVuCAUCaGUCXzIEAmhnCAUCaGUCXzEEAmhoAwMJAGYCBQJnWgAACQBmAgUCZ1oFAmhnBwkBAmFTAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJnWgUDbmlsAgAFAmhnBAJmZAkBAmZjAQUCaGgDCQAAAgUCZmQFAmZkBAJnUgMFAmhhBAJoaQkA/AcEBQJidQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYm8FAmhoBQNuaWwDCQAAAgUCaGkFAmhpBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmVWBmNhbGxlcgUCaGgFAmJvBQNuaWwEAmhqAwkAZgIFAmZoAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmZoBQJmawUDbmlsBQNuaWwEAmhrAwkAAAIFBHRoaXMFAmFXCQCUCgIAAAAAAwUCZm8JAJQKAgkBAS0BBQJmaAAACQCUCgIAAAkBAS0BBQJmaAQCZUQIBQJoawJfMQQCZUUIBQJoawJfMgQCaGwJAQJlQwMFAmVEBQJlRQAABAJnVQgFAmhsAl8xBAJldAgFAmhsAl8yBAJlTwkBBXZhbHVlAQkAoggBBQJhagQCZ1YJAQJlSAIFAmVCBQJldAMJAAACBQJnVgUCZ1YEAmdXCQD8BwQFBHRoaXMCCXJlYmFsYW5jZQUDbmlsBQNuaWwDCQAAAgUCZ1cFAmdXCQCUCgIJAM4IAgkAzggCCQDOCAIFAmVuBQJnUgUCaGoFAmdVBQJoaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlVgERcHV0T25lVGtuUkVBRE9OTFkCAmZrAmZqBAJobQkBAmZpBAUCZmoJAQJiZgEFAmZrBQR1bml0BQR1bml0BAJoZwgFAmhtAl8xBAJlbggFAmhtAl8yBAJmaAgFAmhtAl8zBAJoZggFAmhtAl80BAJmbwgFAmhtAl81CQCUCgIFA25pbAkAlQoDBQJoZwUCZmgFAmhmAmVWAQlnZXRPbmVUa24CAmhuAmdaBAJoYgoAAmFZCQD8BwQFAmFWAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVkCB0Jvb2xlYW4FAmFZCQACAQkArAICCQADAQUCYVkCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmhvAwMJAQJiYQAGCQAAAgUCYm4FAW4GBQJoYgQCZlAJAMwIAgMDCQEBIQEFAmhvBgkBAmdrAQUCZVYGCQECYVMBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJlVghwYXltZW50cwABBgkBAmFTAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZlAFAmZQBAJmTwkBAmJmAQUCaG4EAmhkCQCRAwIIBQJlVghwYXltZW50cwAABAJmawgFAmhkB2Fzc2V0SWQEAmZ3CAUCaGQGYW1vdW50BAJlQgkBAmV1AwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlQgUCZUIEAmFiCAUCZVYGY2FsbGVyBAJhYwgFAmVWDXRyYW5zYWN0aW9uSWQEAmhwCQECZk4FBQJmTwUCZncFAmZrBQJhYgUCYWMDCQAAAgUCaHAFAmhwBAJmUQgFAmhwAl81BAJoZggFAmhwAl80BAJmaAgFAmhwAl8zBAJlbggFAmhwAl8yBAJocQgFAmhwAl8xBAJiWQMDCQBmAgUCZ1oAAAkAZgIFAmdaBQJocQcJAQJhUwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1oFA25pbAIABQJocQQCaHIJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCZncFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZmsFAmZ3BQNuaWwDCQAAAgUCaHIFAmhyBAJnRgkBAmNKAgUCaG4JAGQCBQJiWQkAlgMBCQDMCAIAAAkAzAgCBQJmaAUDbmlsBAJocwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCYlkFAmZPBQNuaWwEAmhqAwkAZgIFAmZoAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVcFAmZoBQJmTwUDbmlsBQNuaWwEAmh0BAJodQMJAAACBQR0aGlzBQJhVwAABQJmaAMFAmZRCQCUCgIJAQEtAQkAZAIFAmJZBQJodQAACQCUCgIAAAkBAS0BCQBkAgUCYlkFAmh1BAJlRAgFAmh0Al8xBAJlRQgFAmh0Al8yBAJodgkBAmVDAwUCZUQFAmVFAAAEAmdVCAUCaHYCXzEEAmV0CAUCaHYCXzIEAmdWCQECZUgCBQJlQgUCZXQDCQAAAgUCZ1YFAmdWCQCUCgIJAM4IAgkAzggCCQDOCAIJAM4IAgUCZW4FAmdGBQJocwUCaGoFAmdVBQJiWQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlVgERZ2V0T25lVGtuUkVBRE9OTFkCAmZPAmZ3BAJodwkBAmZOBQkBAmJmAQUCZk8FAmZ3BQJibwUEdW5pdAUEdW5pdAQCaHEIBQJodwJfMQQCZW4IBQJodwJfMgQCZmgIBQJodwJfMwQCaGYIBQJodwJfNAQCZlEIBQJodwJfNQkAlAoCBQNuaWwJAJUKAwUCaHEFAmZoBQJoZgJlVgETdW5zdGFrZUFuZEdldE9uZVRrbgMCaHgCaG4CZ1oEAmhiCgACYVkJAPwHBAUCYVYCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhWQIHQm9vbGVhbgUCYVkJAAIBCQCsAgIJAAMBBQJhWQIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCaG8DAwkBAmJhAAYJAAACBQJibgUBbgYFAmhiBAJmUAkAzAgCAwMJAQEhAQUCaG8GCQECZ2sBBQJlVgYJAQJhUwECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmVWCHBheW1lbnRzAAAGCQECYVMBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJmUAUCZlAEAmZPCQECYmYBBQJobgQCYWIIBQJlVgZjYWxsZXIEAmFjCAUCZVYNdHJhbnNhY3Rpb25JZAQCZUIJAQJldQMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUIFAmVCBAJoeQkA/AcEBQJidQIHdW5zdGFrZQkAzAgCCQDYBAEFAmJvCQDMCAIFAmh4BQNuaWwFA25pbAMJAAACBQJoeQUCaHkEAmh6CQECZk4FBQJmTwUCaHgFAmJvBQJhYgUCYWMDCQAAAgUCaHoFAmh6BAJmUQgFAmh6Al81BAJoZggFAmh6Al80BAJmaAgFAmh6Al8zBAJlbggFAmh6Al8yBAJocQgFAmh6Al8xBAJiWQMDCQBmAgUCZ1oAAAkAZgIFAmdaBQJocQcJAQJhUwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ1oFA25pbAIABQJocQQCaHIJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCaHgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYm8FAmh4BQNuaWwDCQAAAgUCaHIFAmhyBAJnRgkBAmNKAgUCaG4JAGQCBQJiWQkAlgMBCQDMCAIAAAkAzAgCBQJmaAUDbmlsBAJocwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZVYGY2FsbGVyBQJiWQUCZk8FA25pbAQCaGoDCQBmAgUCZmgAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhVwUCZmgFAmZPBQNuaWwFA25pbAQCaEEEAmh1AwkAAAIFBHRoaXMFAmFXAAAFAmZoAwUCZlEJAJQKAgkBAS0BCQBkAgUCYlkFAmh1AAAJAJQKAgAACQEBLQEJAGQCBQJiWQUCaHUEAmVECAUCaEECXzEEAmVFCAUCaEECXzIEAmhCCQECZUMDBQJlRAUCZUUAAAQCZ1UIBQJoQgJfMQQCZXQIBQJoQgJfMgQCZ1YJAQJlSAIFAmVCBQJldAMJAAACBQJnVgUCZ1YJAJQKAgkAzggCCQDOCAIJAM4IAgkAzggCBQJlbgUCZ0YFAmhzBQJoagUCZ1UFAmJZCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVWAQNnZXQABAJkWQkBAmVVAQUCZVYEAmRFCAUCZFkCXzEEAmRGCAUCZFkCXzIEAmVYCAUCZFkCXzMEAmRuCAUCZFkCXzQEAmRHCAUCZFkCXzUEAmdGCQECY08CBQJkRQUCZEYEAmVCCQECZXUDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmVCBQJlQgQCaEMJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCZVgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZG4FAmVYBQNuaWwDCQAAAgUCaEMFAmhDBAJoRAkBAmVDAwkBAS0BBQJkRQkBAS0BBQJkRgAABAJnVQgFAmhEAl8xBAJldAgFAmhEAl8yBAJnVgkBAmVIAgUCZUIFAmV0AwkAAAIFAmdWBQJnVgkAzggCCQDOCAIFAmdGBQJkRwUCZ1UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBCWdldE5vTGVzcwICaEUCaEYEAmRZCQECZVUBBQJlVgQCZEUIBQJkWQJfMQQCZEYIBQJkWQJfMgQCZVgIBQJkWQJfMwQCZG4IBQJkWQJfNAQCZEcIBQJkWQJfNQMJAGYCBQJoRQUCZEUJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmRFAgMgPCAJAKQDAQUCaEUDCQBmAgUCaEYFAmRGCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCZEYCAyA8IAkApAMBBQJoRgQCZ0YJAQJjTwIFAmRFBQJkRgQCZUIJAQJldQMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUIFAmVCBAJoQwkA/AcEBQJhVgIEYnVybgkAzAgCBQJlWAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkbgUCZVgFA25pbAMJAAACBQJoQwUCaEMEAmhHCQECZUMDCQEBLQEFAmRFCQEBLQEFAmRGAAAEAmdVCAUCaEcCXzEEAmV0CAUCaEcCXzIEAmdWCQECZUgCBQJlQgUCZXQDCQAAAgUCZ1YFAmdWCQDOCAIJAM4IAgUCZ0YFAmRHBQJnVQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlVgENdW5zdGFrZUFuZEdldAECYlkEAmhIAwkBAiE9AgkAkAMBCAUCZVYIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCaEgFAmhIBAJkYwkBAmJjAAQCZHAJANkEAQkAkQMCBQJkYwUBcQQCZUIJAQJldQMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZUIFAmVCBAJoeQkA/AcEBQJidQIHdW5zdGFrZQkAzAgCCQDYBAEFAmRwCQDMCAIFAmJZBQNuaWwFA25pbAMJAAACBQJoeQUCaHkEAmRZCQECZGwECQDYBAEIBQJlVg10cmFuc2FjdGlvbklkCQDYBAEFAmRwBQJiWQgFAmVWBmNhbGxlcgQCZEUIBQJkWQJfMQQCZEYIBQJkWQJfMgQCZHMJAQ1wYXJzZUludFZhbHVlAQgFAmRZAl85BAJkRwgFAmRZA18xMAQCZ0YJAQJjTwIFAmRFBQJkRgQCaEkDAwkBAmJhAAYJAAACBQJkcwUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCZHMGAwkAAAIFAmhJBQJoSQQCaEMJAPwHBAUCYVYCBGJ1cm4JAMwIAgUCYlkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZHAFAmJZBQNuaWwDCQAAAgUCaEMFAmhDBAJoSgkBAmVDAwkBAS0BBQJkRQkBAS0BBQJkRgAABAJnVQgFAmhKAl8xBAJldAgFAmhKAl8yBAJnVgkBAmVIAgUCZUIFAmV0AwkAAAIFAmdWBQJnVgkAzggCCQDOCAIFAmdGBQJkRwUCZ1UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZVYBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmh4AmhLAmhGBAJobwMJAQJiYQAGCQAAAgUCYm4FAW4EAmZQCQDMCAIDCQEBIQEFAmhvBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmVWCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZlAFAmZQBAJlQgkBAmV1AwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlQgUCZUIEAmh5CQD8BwQFAmJ1Agd1bnN0YWtlCQDMCAIJANgEAQUCYm8JAMwIAgUCaHgFA25pbAUDbmlsAwkAAAIFAmh5BQJoeQQCZFkJAQJkbAQJANgEAQgFAmVWDXRyYW5zYWN0aW9uSWQJANgEAQUCYm8FAmh4CAUCZVYGY2FsbGVyBAJkRQgFAmRZAl8xBAJkRggFAmRZAl8yBAJkRwgFAmRZA18xMAQCZ0YJAQJjTwIFAmRFBQJkRgQCaEwJAMwIAgMJAGcCBQJkRQUCaEsGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaEsFA25pbAIACQDMCAIDCQBnAgUCZEYFAmhGBgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCaEYFA25pbAIABQNuaWwDCQAAAgUCaEwFAmhMBAJoQwkA/AcEBQJhVgIEYnVybgkAzAgCBQJoeAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJibwUCaHgFA25pbAMJAAACBQJoQwUCaEMEAmhNCQECZUMDCQEBLQEFAmRFCQEBLQEFAmRGAAAEAmdVCAUCaE0CXzEEAmV0CAUCaE0CXzIEAmdWCQECZUgCBQJlQgUCZXQDCQAAAgUCZ1YFAmdWCQDOCAIJAM4IAgUCZ0YFAmRHBQJnVQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJlVgEIYWN0aXZhdGUCAmhOAmhPAwkBAiE9AgkApQgBCAUCZVYGY2FsbGVyCQClCAEFAmFWCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAAUCaE4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAAUCaE8FA25pbAIHc3VjY2VzcwJlVgEKcmVmcmVzaEtMcAAEAmhQCQELdmFsdWVPckVsc2UCCQCfCAEFAmFrAAAEAmhRAwkAZwIJAGUCBQZoZWlnaHQFAmhQBQJhbgUEdW5pdAkBAmFTAQkAuQkCCQDMCAIJAKQDAQUCYW4JAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmhRBQJoUQQCZU8JARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFqAgEwCQECYVUBAgtpbnZhbGlkIGtMcAQCaFIJAQJlQwMAAAAAAAAEAmhTCAUCaFICXzEEAmV0CAUCaFICXzIEAmVGAwkBAiE9AgUCZU8FAmV0BQJoUwkBAmFTAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmVGCQCmAwEFAmV0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmVWARxnZXRQb29sQ29uZmlnV3JhcHBlclJFQURPTkxZAAkAlAoCBQNuaWwJAQJiYwACZVYBHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkBAmFwCQCUCgIFA25pbAkBAmJMAQUCYXACZVYBGWNhbGNQcmljZXNXcmFwcGVyUkVBRE9OTFkDAmNXAmNYAmRiBAJkawkBAmRhAwUCY1cFAmNYBQJkYgkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFAmRrAAAJAMwIAgkApgMBCQCRAwIFAmRrAAEJAMwIAgkApgMBCQCRAwIFAmRrAAIFA25pbAJlVgEUdG9YMThXcmFwcGVyUkVBRE9OTFkCAUUBRgkAlAoCBQNuaWwJAKYDAQkBAUQCBQFFBQFGAmVWARZmcm9tWDE4V3JhcHBlclJFQURPTkxZAgFJAUoJAJQKAgUDbmlsCQEBSAIJAKcDAQUBSQUBSgJlVgEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiUAJiUQkAlAoCBQNuaWwJAKYDAQkBAmJPAgkApwMBBQJiUAkApwMBBQJiUQJlVgEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmRtAmRJAmRKAmRLAmRMAmRNAmFiAmROAmRPCQCUCgIFA25pbAkBAmRICQUCZG0FAmRJBQJkSgUCZEsFAmRMBQJkTQUCYWIFAmROBQJkTwJlVgEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmRtAmRuAmRvAmFiBAJkWQkBAmRsBAUCZG0FAmRuBQJkbwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYWIJAJQKAgUDbmlsCQCcCgoIBQJkWQJfMQgFAmRZAl8yCAUCZFkCXzMIBQJkWQJfNAgFAmRZAl81CAUCZFkCXzYIBQJkWQJfNwkApgMBCAUCZFkCXzgIBQJkWQJfOQgFAmRZA18xMAJlVgENc3RhdHNSRUFET05MWQAEAmRjCQECYmMABAJkcAkA2QQBCQCRAwIFAmRjBQFxBAJoVAkAkQMCBQJkYwUBcgQCaFUJAJEDAgUCZGMFAXMEAmRSCQCRAwIFAmRjBQF2BAJkUwkAkQMCBQJkYwUBdwQCZGQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdAQCZGUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJkYwUBdQQCaFYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZHAJAKwCAgkArAICAgZBc3NldCAJANgEAQUCZHACDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJoVwkBAmJMAQUCaFQEAmhYCQECYkwBBQJoVQQCaFkDCQAAAgUCaFYAAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECZGEDBQJoVwUCaFgFAmhWBAJkegAABAJoWgkBAUgCCQCRAwIFAmhZAAEFAWIEAmlhCQEBSAIJAJEDAgUCaFkAAgUBYgQCaWIJAQV2YWx1ZQEJAJoIAgUCYVYJAQJhRAEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmhXCQDMCAIJAKQDAQUCaFgJAMwIAgkApAMBBQJoVgkAzAgCCQCkAwEFAmR6CQDMCAIJAKQDAQUCaFoJAMwIAgkApAMBBQJpYQkAzAgCCQCkAwEFAmliBQNuaWwFAWoCZVYBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJkSgQCZGMJAQJiYwAEAmRwCQDZBAEJAJEDAgUCZGMFAXEEAmRQCQCRAwIFAmRjBQFyBAJkcQkA2QQBBQJkUAQCZFEJAJEDAgUCZGMFAXMEAmRyCQDZBAEFAmRRBAJkZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF0BAJkZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF1BAJkcwkAkQMCBQJkYwUBcAQCaFYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZHAJAKwCAgkArAICAgZBc3NldCAJANgEAQUCZHACDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJoVwkBAmJMAQUCZFAEAmhYCQECYkwBBQJkUQQCY1kJAQFEAgUCaFcFAmRkBAJjWgkBAUQCBQJoWAUCZGUEAmR5AwkAAAIFAmhWAAAFAWUJAQJiTwIFAmNaBQJjWQQCZFYJAQFEAgUCZEoFAmRkBAJkVwkAvAIDBQJkVgUCZHkFAWQEAmRMCQEBSAIFAmRXBQJkZQQCZmIJAQJkSAkCAACgwh4FAmRKBQJkcQUCZEwFAmRyAgAGBwQCZWcIBQJmYgJfMQQCaWMIBQJmYgJfMwQCZHUIBQJmYgJfNAQCZHcIBQJmYgJfNQQCZHQIBQJmYgJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZWcJAMwIAgkApAMBCQEBSAIFAmR5BQFiCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkdwkAzAgCCQCkAwEFAmR0CQDMCAIFAmRzCQDMCAIJAKQDAQUCZEoJAMwIAgkApAMBBQJkTAUDbmlsBQFqAmVWAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJkTAQCZGMJAQJiYwAEAmRwCQDZBAEJAJEDAgUCZGMFAXEEAmRQCQCRAwIFAmRjBQFyBAJkcQkA2QQBBQJkUAQCZFEJAJEDAgUCZGMFAXMEAmRyCQDZBAEFAmRRBAJkZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF0BAJkZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmRjBQF1BAJkcwkAkQMCBQJkYwUBcAQCaFYICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCZHAJAKwCAgkArAICAgZBc3NldCAJANgEAQUCZHACDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJpZAkBAmJMAQUCZFAEAmllCQECYkwBBQJkUQQCaWYJAQFEAgUCaWQFAmRkBAJpZwkBAUQCBQJpZQUCZGUEAmR5AwkAAAIFAmhWAAAFAWUJAQJiTwIFAmlnBQJpZgQCZFcJAQFEAgUCZEwFAmRlBAJkVgkAvAIDBQJkVwUBZAUCZHkEAmRKCQEBSAIFAmRWBQJkZAQCZmIJAQJkSAkCAACgwh4FAmRKBQJkcQUCZEwFAmRyAgAGBwQCZWcIBQJmYgJfMQQCaWMIBQJmYgJfMwQCZHUIBQJmYgJfNAQCZHcIBQJmYgJfNQQCZHQIBQJmYgJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCZWcJAMwIAgkApAMBCQEBSAIFAmR5BQFiCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkdwkAzAgCCQCkAwEFAmR0CQDMCAIFAmRzCQDMCAIJAKQDAQUCZEoJAMwIAgkApAMBBQJkTAUDbmlsBQFqAmVWARNldmFsdWF0ZUdldFJFQURPTkxZAgJpaAJpaQQCZFkJAQJkbAQCAAUCaWgFAmlpBQR0aGlzBAJkRQgFAmRZAl8xBAJkRggFAmRZAl8yBAJkdQgFAmRZAl81BAJkdwgFAmRZAl82BAJkdAgFAmRZAl83BAJkeggFAmRZAl84BAJkcwkBDXBhcnNlSW50VmFsdWUBCAUCZFkCXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJkRQkAzAgCCQCkAwEFAmRGCQDMCAIJAKQDAQUCZHUJAMwIAgkApAMBBQJkdwkAzAgCCQCkAwEFAmR0CQDMCAIJAKYDAQUCZHoJAMwIAgkApAMBBQJkcwUDbmlsBQFqAQJpagECaWsABAJpbAQCYlYJAQJnaAADCQABAgUCYlYCCkJ5dGVWZWN0b3IEAmdsBQJiVgUCZ2wDCQABAgUCYlYCBFVuaXQIBQJpag9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCYlYFAmlqAwkAAQIFAmJWAgVPcmRlcgQCZUsFAmJWBAJpbQkBAmJiAAQCaW4DCQECZUcACQCUCgIGAgAJAQJlSgEFAmVLBAJhSwgFAmluAl8xBAJhTAgFAmluAl8yBAJhTQkA9AMDCAUCZUsJYm9keUJ5dGVzCQCRAwIIBQJlSwZwcm9vZnMAAAgFAmVLD3NlbmRlclB1YmxpY0tleQQCYU4JAPQDAwgFAmVLCWJvZHlCeXRlcwkAkQMCCAUCZUsGcHJvb2ZzAAEFAmltAwMDBQJhSwUCYU0HBQJhTgcGCQECYUoEBQJhSwUCYUwFAmFNBQJhTgMJAAECBQJiVgIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmdpBQJiVgMJAPQDAwgFAmlqCWJvZHlCeXRlcwkAkQMCCAUCaWoGcHJvb2ZzAAAFAmlsBgQCaW8JAPYDAQkBBXZhbHVlAQgFAmdpBnNjcmlwdAQCaXAJANsEAQkBBXZhbHVlAQkAnQgCBQJhVgkBAmFGAAQCaXEJAPEHAQUEdGhpcwMJAAACBQJpcAUCaW8JAQIhPQIFAmlxBQJpbwcJAPQDAwgFAmlqCWJvZHlCeXRlcwkAkQMCCAUCaWoGcHJvb2ZzAAAFAmlsLmY3kQ==", "height": 2564284, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7w7DCGoHSiAGtfZ642bWpA4qyHp38nVx7emus16mV5zg Next: 7CKTRDBXJapoTymAYJxmVuixMZQjBmZQLAVetc33Yct3 Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 100000000
4+let a = 8
55
6-let b = toBigInt(100000000)
6+let b = 100000000
77
8-let c = toBigInt(1000000000000000000)
8+let c = toBigInt(100000000)
99
10-let d = toBigInt(0)
10+let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
14-let f = toBigInt(1)
14+let f = toBigInt(0)
1515
16-let g = toBigInt(2)
16+let g = toBigInt(1)
1717
18-let h = toBigInt(3)
18+let h = toBigInt(2)
1919
20-let i = toBigInt(4)
20+let i = "WAVES"
2121
22-let j = "WAVES"
22+let j = "__"
2323
24-let k = 50
24+let k = 1
2525
26-let l = "100"
26+let l = 2
2727
28-let m = "__"
28+let m = 3
2929
30-let n = 2
30+let n = 4
3131
32-let o = 3
32+let o = 1
3333
34-let p = 4
34+let p = 2
3535
36-let q = 1
36+let q = 3
3737
38-let r = 2
38+let r = 4
3939
40-let s = 3
40+let s = 5
4141
42-let t = 4
42+let t = 6
4343
44-let u = 5
44+let u = 7
4545
46-let v = 6
46+let v = 8
4747
48-let w = 7
48+let w = 9
4949
50-let x = 1
50+let x = 10
5151
52-let y = 6
52+let y = 1
5353
54-let z = 7
54+let z = 2
5555
56-let A = fraction(10, a, 10000)
56+let A = 3
5757
58-func B (C,D) = fraction(toBigInt(C), c, toBigInt(D))
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
5963
6064
61-func E (C,D) = fraction(C, c, D)
65+func G (E,F) = fraction(E, d, F)
6266
6367
64-func F (G,H) = toInt(fraction(G, toBigInt(H), c))
68+func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6569
6670
67-func I (G,H,J) = toInt(fraction(G, toBigInt(H), c, J))
71+func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
6872
6973
70-func K (G) = if ((d > G))
71- then -(G)
72- else G
74+func M (N,O,P) = fraction(N, O, P)
7375
7476
75-func L (G) = if ((d > G))
76- then -(G)
77- else G
77+func Q (I) = if ((0 > I))
78+ then -(I)
79+ else I
7880
7981
80-func M () = "%s__factoryContract"
82+func R (I) = if ((e > I))
83+ then -(I)
84+ else I
8185
8286
83-func N () = "%s__managerPublicKey"
87+func S () = "%s__swapContract"
8488
8589
86-func O () = "%s__pendingManagerPublicKey"
90+func T () = "%s__factoryContract"
8791
8892
89-func P () = "%s%s__price__last"
93+func U () = "%s__managerPublicKey"
9094
9195
92-func Q (R,S) = makeString(["%s%s%d%d__price__history", toString(R), toString(S)], m)
96+func V () = "%s__pendingManagerPublicKey"
9397
9498
95-func T (U,V) = ((("%s%s%s__P__" + U) + "__") + V)
99+func W () = "%s%s__price__last"
96100
97101
98-func W (U,V) = ((("%s%s%s__G__" + U) + "__") + V)
102+func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
99103
100104
101-func X () = "%s__amountAsset"
105+func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
102106
103107
104-func Y () = "%s__priceAsset"
108+func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
105109
106110
107-func Z () = "%s__amp"
111+func ae () = "%s__amountAsset"
108112
109113
110-func aa (ab) = ("%s%d__amp__" + toString(ab))
114+func af () = "%s__priceAsset"
111115
112116
113-func ac () = "%s__changeAmpLastCall"
117+let ag = "%s__fee"
118+
119+let ah = fraction(10, b, 10000)
120+
121+let ai = valueOrElse(getInteger(this, ag), ah)
122+
123+let aj = makeString(["%s", "kLp"], j)
124+
125+let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126+
127+let al = makeString(["%s", "refreshKLpDelay"], j)
128+
129+let am = 30
130+
131+let an = valueOrElse(getInteger(this, al), am)
132+
133+func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
114134
115135
116-let ad = "%s__fee"
117-
118-let ae = valueOrElse(getInteger(this, ad), A)
119-
120-let af = makeString(["%s", "dLp"], m)
121-
122-let ag = makeString(["%s", "dLpRefreshedHeight"], m)
123-
124-let ah = makeString(["%s", "refreshDLpDelay"], m)
125-
126-let ai = 30
127-
128-let aj = valueOrElse(getInteger(this, ah), ai)
129-
130-func ak () = "%s__factoryConfig"
136+func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
131137
132138
133-func al () = "%s%s__matcher__publicKey"
139+func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
134140
135141
136-func am (an,ao) = (((("%d%d%s__" + an) + "__") + ao) + "__config")
142+func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
137143
138144
139-func ap (aq) = ("%s%s%s__mappings__baseAsset2internalId__" + aq)
145+func at () = "%s__factoryConfig"
140146
141147
142-func ar () = "%s__shutdown"
148+func au () = "%s%s__matcher__publicKey"
143149
144150
145-func as () = "%s__allowedLpStableScriptHash"
151+func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
146152
147153
148-func at () = "%s__feeCollectorAddress"
154+func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
149155
150156
151-func au (av) = ("%s%s__skipOrderValidation__" + av)
157+func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
152158
153159
154-func aw (ax,ay,az,aA) = throw((((((((("order validation failed: orderValid=" + toString(ax)) + " (") + ay) + ")") + " senderValid=") + toString(az)) + " matcherValid=") + toString(aA)))
160+func aC () = "%s__shutdown"
155161
156162
157-func aB (aC,aD) = valueOrErrorMessage(getString(aC, aD), makeString(["mandatory ", toString(aC), ".", aD, " not defined"], ""))
163+func aD (aE) = ("%s%s__poolWeight__" + aE)
158164
159165
160-func aE (aC,aD) = valueOrErrorMessage(getInteger(aC, aD), makeString(["mandatory ", toString(aC), ".", aD, " not defined"], ""))
166+func aF () = "%s__allowedLpScriptHash"
161167
162168
163-func aF (aG) = throw(makeString(["lp_stable.ride:", aG], " "))
169+let aG = "%s__feeCollectorAddress"
170+
171+func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
164172
165173
166-func aH (aG) = makeString(["lp_stable.ride:", aG], " ")
174+func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
167175
168176
169-let aI = addressFromStringValue(aB(this, M()))
177+func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
170178
171-let aJ = {
172- let aK = invoke(aI, "getInFeeREADONLY", [toString(this)], nil)
173- if ($isInstanceOf(aK, "Int"))
174- then aK
175- else throw(($getType(aK) + " couldn't be cast to Int"))
179+
180+func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
181+
182+
183+func aS (aT) = throw(makeString(["lp.ride:", aT], " "))
184+
185+
186+func aU (aT) = makeString(["lp.ride:", aT], " ")
187+
188+
189+let aV = addressFromStringValue(aO(this, T()))
190+
191+let aW = addressFromStringValue(aO(aV, aG))
192+
193+let aX = {
194+ let aY = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aY, "Int"))
196+ then aY
197+ else throw(($getType(aY) + " couldn't be cast to Int"))
176198 }
177199
178-let aL = {
179- let aK = invoke(aI, "getOutFeeREADONLY", [toString(this)], nil)
180- if ($isInstanceOf(aK, "Int"))
181- then aK
182- else throw(($getType(aK) + " couldn't be cast to Int"))
200+let aZ = {
201+ let aY = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
202+ if ($isInstanceOf(aY, "Int"))
203+ then aY
204+ else throw(($getType(aY) + " couldn't be cast to Int"))
183205 }
184206
185-let aM = aB(this, Z())
186-
187-func aN () = valueOrElse(getBoolean(aI, ar()), false)
207+func ba () = valueOrElse(getBoolean(aV, aC()), false)
188208
189209
190-func aO () = fromBase58String(aB(aI, al()))
210+func bb () = fromBase58String(aO(aV, au()))
191211
192212
193-let aP = addressFromStringValue(aB(aI, at()))
194-
195-func aQ () = {
196- let aR = aB(this, X())
197- let aS = aB(this, Y())
198- let aT = aE(aI, ap(aS))
199- let an = aE(aI, ap(aR))
200- split(aB(aI, am(toString(an), toString(aT))), m)
213+func bc () = {
214+ let bd = aO(this, ae())
215+ let be = aO(this, af())
216+ let az = aR(aV, aA(be))
217+ let ay = aR(aV, aA(bd))
218+ split(aO(aV, ax(toString(ay), toString(az))), j)
201219 }
202220
203221
204-func aU (aV) = if ((aV == j))
222+func bf (bg) = if ((bg == i))
205223 then unit
206- else fromBase58String(aV)
224+ else fromBase58String(bg)
207225
208226
209-func aW (aV) = if ((aV == unit))
210- then j
211- else toBase58String(value(aV))
227+func bh (bg) = if ((bg == unit))
228+ then i
229+ else toBase58String(value(bg))
212230
213231
214-func aX (aY) = $Tuple7(addressFromStringValue(aY[q]), parseIntValue(aY[r]), fromBase58String(aY[s]), aU(aY[t]), aU(aY[u]), parseIntValue(aY[v]), parseIntValue(aY[w]))
232+func bi (bj) = $Tuple7(addressFromStringValue(bj[o]), parseIntValue(bj[p]), fromBase58String(bj[q]), bf(bj[r]), bf(bj[s]), parseIntValue(bj[t]), parseIntValue(bj[u]))
215233
216234
217-let aZ = aX(aQ())
235+let bk = bi(bc())
218236
219-let ba = aZ
237+let bl = bk
220238
221-let bb = ba._2
239+let bm = bl._1
222240
223-let bc = ba._3
241+let bn = bl._2
224242
225-let bd = ba._4
243+let bo = bl._3
226244
227-let be = ba._5
245+let bp = bl._4
228246
229-let bf = ba._6
247+let bq = bl._5
230248
231-let bg = ba._7
249+let br = bl._6
232250
233-func bh () = split(aB(aI, ak()), m)
251+let bs = bl._7
252+
253+func bt () = split(aO(aV, at()), j)
234254
235255
236-let bi = bh()
256+let bu = valueOrErrorMessage(addressFromString(bt()[B]), "incorrect staking address")
237257
238-let bj = valueOrErrorMessage(addressFromString(bi[x]), "Invalid staking contract address")
258+let bv = valueOrErrorMessage(addressFromString(bt()[C]), "incorrect staking address")
239259
240-let bk = valueOrErrorMessage(addressFromString(bi[y]), "Invalid gwx contract address")
241-
242-func bl (bm,bn,bo,bp,bq,br,bs,bt,bu,bv) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv)], m)
260+func bw (bx,by,bz,bA,bB,bC,bD,bE,bF,bG) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG)], j)
243261
244262
245-func bw (bx,by,bz,bp,bs,bt) = makeString(["%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bp), toString(bs), toString(bt)], m)
263+func bH (bI,bJ,bK,bA,bD,bE) = makeString(["%d%d%d%d%d%d", toString(bI), toString(bJ), toString(bK), toString(bA), toString(bD), toString(bE)], j)
246264
247265
248-func bA (bB) = if ((bB == "WAVES"))
249- then wavesBalance(this).available
250- else assetBalance(this, fromBase58String(bB))
251-
252-
253-func bC (bD,bE) = fraction(bD, c, bE)
254-
255-
256-func bF (bD,bE,J) = fraction(bD, c, bE, J)
257-
258-
259-func bG (bH,bI,bJ,bK) = {
260- let bL = B(bJ, bH)
261- let bM = B(bK, bI)
262- bC(bM, bL)
266+func bL (ap) = {
267+ let bM = if ((ap == "WAVES"))
268+ then wavesBalance(this).available
269+ else assetBalance(this, fromBase58String(ap))
270+ let bN = ((bM + ar(ap)) - as(ap))
271+ max([0, bN])
263272 }
264273
265274
266-func bN (bJ,bK,bO) = {
267- let bP = bf
268- let bQ = bg
269- let bR = bG(bP, bQ, bJ, bK)
270- let bE = B(bJ, bP)
271- let bD = B(bK, bQ)
272- let bS = B(bO, a)
273- let bT = bC(bE, bS)
274- let bU = bC(bD, bS)
275-[bR, bT, bU]
275+func bO (bP,bQ) = fraction(bP, d, bQ)
276+
277+
278+func bR (bP,bQ,L) = fraction(bP, d, bQ, L)
279+
280+
281+func bS (bT) = {
282+ let bU = invoke(bT, "getRate", nil, nil)
283+ if ((bU == bU))
284+ then {
285+ let bV = bU
286+ if ($isInstanceOf(bV, "Int"))
287+ then {
288+ let bW = bV
289+ bW
290+ }
291+ else aS("proxy.getRate() unexpected value")
292+ }
293+ else throw("Strict value is not equal to itself.")
276294 }
277295
278296
279-func bV (bW,ae) = {
280- let bX = if ((ae == 0))
281- then 0
282- else fraction(bW, ae, a)
283- $Tuple2((bW - bX), bX)
284- }
285-
286-
287-func bY (bZ) = {
288- let ca = bZ[0]
289- let cb = bZ[1]
290- let cc = (ca + cb)
291- if ((cc == e))
292- then e
293- else {
294- let cd = parseIntValue(aM)
295- let ce = (cd * 2)
296- let cf = fraction(ca, cb, f)
297- let cg = fraction(cf, i, f)
298- let ch = fraction(toBigInt(ce), cc, f)
299- let ci = toBigInt((ce - 1))
300- func cj (ck) = {
301- let cl = fraction(ck, ck, f)
302- let cm = fraction(cl, ck, f)
303- let cn = fraction(cm, f, cg)
304- fraction((ch + fraction(cn, g, f)), ck, (fraction(ci, ck, f) + fraction(h, cn, f)))
305- }
306-
307- func co (cp,cq) = if (cp._2)
308- then cp
309- else {
310- let ck = cp._1
311- let cr = cj(ck)
312- let cs = (cr - value(ck))
313- let ct = if ((e > cs))
314- then -(cs)
315- else cs
316- if ((f >= ct))
317- then $Tuple2(cr, true)
318- else $Tuple2(cr, false)
319- }
320-
321- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
322- let cv = {
323- let cw = cu
324- let cx = size(cw)
325- let cy = $Tuple2(cc, false)
326- func cz (cA,cB) = if ((cB >= cx))
327- then cA
328- else co(cA, cw[cB])
329-
330- func cC (cA,cB) = if ((cB >= cx))
331- then cA
332- else throw("List size exceeds 17")
333-
334- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17)
335- }
336- let ck = cv._1
337- let cD = cv._2
338- if (cD)
339- then ck
340- else throw(("D calculation error, D = " + toString(ck)))
341- }
342- }
343-
344-
345-func cE (cF,cG,cH,cI) = {
346- let cJ = bc
347- let cK = toBase58String(value(bd))
348- let cL = toBase58String(value(be))
349- let cM = bf
350- let cN = bg
351- let cO = toString(bb)
352- let cP = valueOrErrorMessage(assetInfo(cJ), "Wrong LP id").quantity
353- if ((toBase58String(cJ) != cG))
354- then throw("Wrong pmt asset")
355- else {
356- let cQ = bA(cK)
357- let cR = B(cQ, cM)
358- let cS = bA(cL)
359- let cT = B(cS, cN)
360- let cU = bC(cT, cR)
361- let cV = F(cU, a)
362- let cW = B(cH, a)
363- let cX = B(cP, a)
364- let cY = fraction(cR, cW, cX)
365- let cZ = fraction(cT, cW, cX)
366- let da = I(cY, cM, FLOOR)
367- let db = I(cZ, cN, FLOOR)
368- let dc = if ((cF == ""))
369- then nil
370- else [ScriptTransfer(cI, da, if ((cK == "WAVES"))
371- then unit
372- else fromBase58String(cK)), ScriptTransfer(cI, db, if ((cL == "WAVES"))
373- then unit
374- else fromBase58String(cL)), StringEntry(W(toString(cI), cF), bw(da, db, cH, cV, height, lastBlock.timestamp)), IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV)]
375- $Tuple10(da, db, cK, cL, cQ, cS, cP, cU, cO, dc)
376- }
377- }
378-
379-
380-func dd (cF,de,df,dg,dh,di,cI,dj,dk,dl,dm,dn,do) = {
381- let cJ = bc
382- let dp = toBase58String(value(bd))
383- let dq = toBase58String(value(be))
384- let dr = bf
385- let ds = bg
386- let cO = toString(bb)
387- let dt = valueOrErrorMessage(assetInfo(cJ), "Wr lp as").quantity
388- let cQ = if (dj)
389- then bA(dp)
390- else if (if (dl)
391- then (do == dp)
392- else false)
393- then (bA(dp) - dn)
394- else if (dl)
395- then bA(dp)
396- else (bA(dp) - df)
397- let cS = if (dj)
398- then bA(dq)
399- else if (if (dl)
400- then (do == dq)
401- else false)
402- then (bA(dq) - dn)
403- else if (dl)
404- then bA(dq)
405- else (bA(dq) - dh)
406- let du = B(df, dr)
407- let dv = B(dh, ds)
408- let dw = bC(dv, du)
409- let cR = B(cQ, dr)
410- let cT = B(cS, ds)
411- let dx = bY([cR, cT])
412- let dy = if ((dt == 0))
297+func bX (ap,bY,bZ,bT) = {
298+ let ca = ar(ap)
299+ if ((ca == ca))
413300 then {
414- let dz = bY([(cR + du), (cT + dv)])
415- let dA = if ((dz > dx))
416- then true
417- else throw("D1 should be greater than D0")
418- if ((dA == dA))
301+ let cb = as(bZ)
302+ if ((cb == cb))
419303 then {
420- let cU = d
421- let dB = d
422- let bS = dz
423- $Tuple5(F(bS, a), F(du, dr), F(dv, ds), bC((cT + dv), (cR + du)), dB)
424- }
425- else throw("Strict value is not equal to itself.")
426- }
427- else {
428- let cU = bC(cT, cR)
429- let dC = fraction(K((cU - dw)), c, cU)
430- let dB = B(de, a)
431- if (if (if (dm)
432- then (cU != d)
433- else false)
434- then (dC > dB)
435- else false)
436- then throw(((("Price slippage " + toString(dC)) + " > ") + toString(dB)))
437- else {
438- let dD = B(dt, a)
439- let dE = fraction(du, bF(cT, cR, CEILING), c, CEILING)
440- let dF = fraction(dv, c, bF(cT, cR, FLOOR), CEILING)
441- let dG = if ((dE > dv))
442- then $Tuple2(dF, dv)
443- else $Tuple2(du, dE)
444- let dH = dG._1
445- let dI = dG._2
446- let dz = bY([(cR + dH), (cT + dI)])
447- let dA = if ((dz > dx))
448- then true
449- else throw("D1 should be greater than D0")
450- if ((dA == dA))
304+ let cc = bf(ap)
305+ if ((bY > 0))
451306 then {
452- let bS = fraction(dD, (dz - dx), dx)
453- $Tuple5(I(bS, a, FLOOR), I(dH, dr, CEILING), I(dI, ds, CEILING), cU, dB)
307+ let cd = invoke(bT, "deposit", nil, [AttachedPayment(cc, bY)])
308+ if ((cd == cd))
309+ then {
310+ let bV = cd
311+ if ($isInstanceOf(bV, "Int"))
312+ then {
313+ let ce = bV
314+ let cf = (ca + bY)
315+ let cg = (cb + ce)
316+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg)]
317+ }
318+ else nil
319+ }
320+ else throw("Strict value is not equal to itself.")
454321 }
455- else throw("Strict value is not equal to itself.")
456- }
457- }
458- let dJ = dy._1
459- let dK = dy._2
460- let dL = dy._3
461- let cV = F(dy._4, a)
462- let dM = F(dy._5, a)
463- if ((0 >= dJ))
464- then throw("LP <= 0")
465- else {
466- let dN = if (!(dk))
467- then 0
468- else dJ
469- let dO = (df - dK)
470- let dP = (dh - dL)
471- let dQ = if (if (dl)
472- then (do == dp)
473- else false)
474- then $Tuple2(dn, 0)
475- else if (if (dl)
476- then (do == dq)
477- else false)
478- then $Tuple2(0, dn)
479- else $Tuple2(dK, dL)
480- let dR = dQ._1
481- let dS = dQ._2
482- let dT = [IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV), StringEntry(T(cI, cF), bl(dR, dS, dN, cV, de, dM, height, lastBlock.timestamp, dO, dP))]
483- $Tuple13(dJ, dN, cV, cQ, cS, dt, cJ, cO, dT, dO, dP, dg, di)
484- }
485- }
486-
487-
488-func dU (bZ,cq,dV) = {
489- let dW = g
490- let dX = bZ[if ((cq == 0))
491- then 1
492- else 0]
493- let dY = parseBigIntValue(l)
494- let cd = (parseBigIntValue(aM) * dY)
495- let cc = dX
496- let ce = (cd * dW)
497- let dZ = (((((dV * dV) / (dX * dW)) * dV) * dY) / (ce * dW))
498- let ea = ((cc + ((dV * dY) / ce)) - dV)
499- func co (cp,eb) = {
500- let ec = cp
501- let ed = ec._1
502- let cD = ec._2
503- if ((cD != unit))
504- then cp
505- else {
506- let ee = (((ed * ed) + dZ) / ((g * ed) + ea))
507- let ef = L((ee - value(ed)))
508- if ((f >= ef))
509- then $Tuple2(ee, eb)
510- else $Tuple2(ee, unit)
511- }
512- }
513-
514- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
515- let eg = {
516- let cw = cu
517- let cx = size(cw)
518- let cy = $Tuple2(dV, unit)
519- func cz (cA,cB) = if ((cB >= cx))
520- then cA
521- else co(cA, cw[cB])
522-
523- func cC (cA,cB) = if ((cB >= cx))
524- then cA
525- else throw("List size exceeds 15")
526-
527- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
528- }
529- let ed = eg._1
530- let cD = eg._2
531- if ((cD != unit))
532- then ed
533- else throw(("Y calculation error, Y = " + toString(ed)))
534- }
535-
536-
537-func eh (ei,ej,ek) = {
538- let el = fraction(bY([E(ei, toBigInt(bf)), E(ej, toBigInt(bg))]), c, ek)
539- if ((ek == e))
540- then e
541- else el
542- }
543-
544-
545-func em (en,eo,ep) = {
546- let eq = (toBigInt(bA(aW(bd))) - en)
547- let er = (toBigInt(bA(aW(be))) - eo)
548- let es = (toBigInt(value(assetInfo(bc)).quantity) - ep)
549- let et = eh(eq, er, es)
550- et
551- }
552-
553-
554-func eu (ev,ew,ep) = {
555- let eq = (bA(aW(bd)) + ev)
556- let er = (bA(aW(be)) + ew)
557- let es = (value(assetInfo(bc)).quantity + ep)
558- let el = eh(toBigInt(eq), toBigInt(er), toBigInt(es))
559- let ex = [IntegerEntry(ag, height), StringEntry(af, toString(el))]
560- $Tuple2(ex, el)
561- }
562-
563-
564-func ey (ez,el) = if ((el >= ez))
565- then true
566- else aF("updated DLp lower than current DLp")
567-
568-
569-func eA (eB) = {
570- let eq = bA(aW(bd))
571- let er = bA(aW(be))
572- let eC = eB.amount
573- let eD = fraction(eB.amount, eB.price, a, FLOOR)
574- let eE = if ((eB.orderType == Buy))
575- then $Tuple2(eC, -(eD))
576- else $Tuple2(-(eC), eD)
577- let ev = eE._1
578- let ew = eE._2
579- if (if (if (aN())
580- then true
581- else (bb == o))
582- then true
583- else (bb == p))
584- then throw("Admin blocked")
585- else if (if ((eB.assetPair.amountAsset != bd))
586- then true
587- else (eB.assetPair.priceAsset != be))
588- then throw("Wr assets")
589- else {
590- let eF = parseBigIntValue(valueOrElse(getString(this, af), "0"))
591- let eG = eu(ev, ew, 0)
592- let eH = eG._1
593- let eI = eG._2
594- let eJ = (eI >= eF)
595- let eK = makeString(["dLp=", toString(eF), " dLpNew=", toString(eI), " amountAssetBalance=", toString(eq), " priceAssetBalance=", toString(er), " amountAssetBalanceDelta=", toString(ev), " priceAssetBalanceDelta=", toString(ew), " height=", toString(height)], "")
596- $Tuple2(eJ, eK)
597- }
598- }
599-
600-
601-func eL (cq) = if ((size(cq.payments) != 1))
602- then throw("1 pmnt exp")
603- else {
604- let eM = value(cq.payments[0])
605- let cG = value(eM.assetId)
606- let dn = eM.amount
607- let dy = cE(toBase58String(cq.transactionId), toBase58String(cG), dn, cq.caller)
608- let da = dy._1
609- let db = dy._2
610- let cO = parseIntValue(dy._9)
611- let dc = dy._10
612- if (if (aN())
613- then true
614- else (cO == p))
615- then throw(("Admin blocked: " + toString(cO)))
616- else $Tuple5(da, db, dn, cG, dc)
617- }
618-
619-
620-func eN (eO,V,eP,eQ,de,dk,dl,dm,dn,do) = {
621- let dy = dd(V, de, value(eP).amount, value(eP).assetId, value(eQ).amount, value(eQ).assetId, eO, (V == ""), dk, dl, dm, dn, do)
622- let cO = parseIntValue(dy._8)
623- if (if (if (aN())
624- then true
625- else (cO == n))
626- then true
627- else (cO == p))
628- then throw(("Blocked:" + toString(cO)))
629- else dy
630- }
631-
632-
633-func eR (eS,cG,cI,V,eT) = {
634- let cK = toBase58String(value(bd))
635- let cL = toBase58String(value(be))
636- let cJ = bc
637- let dr = bf
638- let ds = bg
639- let es = toBigInt(valueOrErrorMessage(assetInfo(cJ), "invalid lp asset").quantity)
640- let eU = if ((es > e))
641- then true
642- else throw("initial deposit requires all coins")
643- if ((eU == eU))
644- then {
645- let cQ = bA(cK)
646- let cS = bA(cL)
647- let eV = if ((V == ""))
648- then $Tuple2(cQ, cS)
649- else if ((cG == cK))
650- then if ((eS > cQ))
651- then throw("invalid payment amount")
652- else $Tuple2((cQ - eS), cS)
653- else if ((cG == cL))
654- then if ((eS > cS))
655- then throw("invalid payment amount")
656- else $Tuple2(cQ, (cS - eS))
657- else throw("wrong pmtAssetId")
658- let eW = eV._1
659- let eX = eV._2
660- let eY = if ((cG == cK))
661- then $Tuple2(eS, 0)
662- else if ((cG == cL))
663- then $Tuple2(0, eS)
664- else throw("invalid payment")
665- let eZ = eY._1
666- let fa = eY._2
667- let fb = if (eT)
668- then $Tuple3(bV(eZ, aJ)._1, bV(fa, aJ)._1, bV(eS, aJ)._2)
669- else $Tuple3(eZ, fa, 0)
670- let fc = fb._1
671- let fd = fb._2
672- let bX = fb._3
673- let fe = (eW + fc)
674- let ff = (eX + fd)
675- let dx = bY([B(eW, bf), B(eX, bg)])
676- let dz = bY([B(fe, bf), B(ff, bg)])
677- let dA = if ((dz > dx))
678- then true
679- else throw()
680- if ((dA == dA))
681- then {
682- let fg = fraction(es, (dz - dx), dx, FLOOR)
683- let cV = F(bC(B(ff, ds), B(fe, dr)), a)
684- let dT = [IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV), StringEntry(T(cI, V), bl(eZ, fa, toInt(fg), cV, 0, 0, height, lastBlock.timestamp, 0, 0))]
685- let fh = fraction(eX, a, eW)
686- let fi = fraction(eS, a, (fh + a))
687- let fj = (eS - fi)
688- let fk = fraction(es, toBigInt(fj), toBigInt(eX))
689- let fl = toInt(fraction((fg - fk), b, fk))
690- $Tuple4(toInt(fg), dT, bX, fl)
322+ else nil
691323 }
692324 else throw("Strict value is not equal to itself.")
693325 }
695327 }
696328
697329
698-func fm (fn,fo,fp,eO,fq,fr) = {
699- let cJ = toBase58String(value(bc))
700- let cK = toBase58String(value(bd))
701- let cL = toBase58String(value(be))
702- let fs = bf
703- let ft = bg
704- let fu = bb
705- let cI = if ((eO == bk))
706- then fq
707- else eO
708- let eM = value(fp[0])
709- let cG = value(eM.assetId)
710- let dn = eM.amount
711- let et = em(e, e, e)
712- if ((et == et))
330+func ch (ap,bY,bZ,bT,ci,cj) = {
331+ let ca = ar(ap)
332+ if ((ca == ca))
713333 then {
714- let cF = toBase58String(fr)
715- if ((cJ != toBase58String(cG)))
716- then throw("Wrong LP")
717- else {
718- let cQ = bA(cK)
719- let cS = bA(cL)
720- let fv = {
721- let aK = invoke(this, "getOneTknV2READONLY", [fn, dn], nil)
722- if ($isInstanceOf(aK, "(Int, Int)"))
723- then aK
724- else throw(($getType(aK) + " couldn't be cast to (Int, Int)"))
725- }
726- if ((fv == fv))
334+ let cb = as(bZ)
335+ if ((cb == cb))
336+ then {
337+ let ck = bS(bT)
338+ if ((ck == ck))
727339 then {
728- let bX = fv._2
729- let fw = fv._1
730- let fx = if (if ((fo > 0))
731- then (fo > fw)
732- else false)
733- then aF(makeString(["amount to receive is less than ", toString(fo)], ""))
734- else fw
735- let fy = if ((fn == cK))
736- then $Tuple4(fx, 0, ((cQ - fx) - bX), cS)
737- else if ((fn == cL))
738- then $Tuple4(0, fx, cQ, ((cS - fx) - bX))
739- else throw("invalid out asset id")
740- let fz = fy._1
741- let fA = fy._2
742- let fe = fy._3
743- let ff = fy._4
744- let fB = bC(B(ff, ft), B(fe, fs))
745- let fC = F(fB, a)
746- let fD = if ((fn == "WAVES"))
747- then unit
748- else fromBase58String(fn)
749- let fE = if ((bX > 0))
750- then [ScriptTransfer(aP, bX, fD)]
751- else nil
752- let dc = ([ScriptTransfer(cI, fx, fD), StringEntry(W(toString(cI), cF), bw(fz, fA, dn, fC, height, lastBlock.timestamp)), IntegerEntry(P(), fC), IntegerEntry(Q(height, lastBlock.timestamp), fC)] ++ fE)
753- if ((dc == dc))
340+ let cl = fraction(ci, ca, cb)
341+ let cm = bf(bZ)
342+ let cn = fraction(ci, bY, cl)
343+ let co = fraction(ci, bY, ck)
344+ let cp = max([0, (cn - co)])
345+ if ((co > 0))
754346 then {
755- let fF = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
756- if ((fF == fF))
347+ let cq = invoke(bT, "withdraw", nil, [AttachedPayment(cm, co)])
348+ if ((cq == cq))
757349 then {
758- let fG = {
759- let fH = if ((this == aP))
760- then 0
761- else bX
762- let fI = if ((aU(fn) == bd))
763- then true
764- else false
765- if (fI)
766- then $Tuple2(-((fw + fH)), 0)
767- else $Tuple2(0, -((fw + fH)))
768- }
769- let ev = fG._1
770- let ew = fG._2
771- let fJ = eu(ev, ew, 0)
772- let fK = fJ._1
773- let el = fJ._2
774- let fL = ey(et, el)
775- if ((fL == fL))
776- then $Tuple2((dc ++ fK), fx)
777- else throw("Strict value is not equal to itself.")
350+ let bV = cq
351+ if ($isInstanceOf(bV, "Int"))
352+ then {
353+ let cr = bV
354+ let cf = (ca - cr)
355+ let cg = ((cb - co) - cp)
356+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg), ScriptTransfer(cj, cp, bf(bZ))]
357+ }
358+ else nil
778359 }
779360 else throw("Strict value is not equal to itself.")
780361 }
781- else throw("Strict value is not equal to itself.")
362+ else nil
782363 }
783364 else throw("Strict value is not equal to itself.")
784365 }
366+ else throw("Strict value is not equal to itself.")
785367 }
786368 else throw("Strict value is not equal to itself.")
787369 }
788370
789371
790-func fM () = {
791- let fN = getString(N())
792- if ($isInstanceOf(fN, "String"))
372+func cs (ap) = {
373+ let bV = invoke(aV, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
374+ if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
793375 then {
794- let cc = fN
795- fromBase58String(cc)
376+ let ct = bV
377+ ct
796378 }
797- else if ($isInstanceOf(fN, "Unit"))
379+ else aS((("[" + ap) + "] getLeaseProxyConfig() error"))
380+ }
381+
382+
383+func cu (cv,ap,bZ,cw,bT,ci,cj) = {
384+ let ca = ar(ap)
385+ if ((ca == ca))
386+ then {
387+ let cb = as(bZ)
388+ if ((cb == cb))
389+ then {
390+ let cx = max([0, (bL(ap) - cw)])
391+ let cy = fraction(cv, cx, 100)
392+ let cz = (ca - cy)
393+ if ((cz == 0))
394+ then nil
395+ else if ((0 > cz))
396+ then {
397+ let cA = -(cz)
398+ bX(ap, cA, bZ, bT)
399+ }
400+ else {
401+ let cB = cz
402+ ch(ap, cB, bZ, bT, ci, cj)
403+ }
404+ }
405+ else throw("Strict value is not equal to itself.")
406+ }
407+ else throw("Strict value is not equal to itself.")
408+ }
409+
410+
411+func cC (ap) = {
412+ let cD = cs(ap)
413+ let cE = cD._1
414+ let cF = cD._2
415+ let cw = cD._3
416+ let cG = cD._4
417+ let cH = cD._5
418+ let ci = cD._6
419+ let cI = cD._7
420+ if (cE)
421+ then cu(cF, ap, cH, cw, addressFromStringValue(cG), ci, addressFromStringValue(cI))
422+ else nil
423+ }
424+
425+
426+func cJ (ap,cK) = {
427+ let cL = cs(ap)
428+ let cE = cL._1
429+ let cF = cL._2
430+ let cw = cL._3
431+ let cG = cL._4
432+ let cH = cL._5
433+ let ci = cL._6
434+ let cI = cL._7
435+ if (cE)
436+ then {
437+ let cM = max([0, ((bL(ap) - cK) - cw)])
438+ if ((cM == cM))
439+ then {
440+ let cf = fraction(cF, cM, 100)
441+ if ((cf == cf))
442+ then {
443+ let cN = (ar(ap) - cf)
444+ if ((cN == cN))
445+ then if ((0 > cN))
446+ then bX(ap, -(cN), cH, addressFromStringValue(cG))
447+ else ch(ap, cN, cH, addressFromStringValue(cG), ci, addressFromStringValue(cI))
448+ else throw("Strict value is not equal to itself.")
449+ }
450+ else throw("Strict value is not equal to itself.")
451+ }
452+ else throw("Strict value is not equal to itself.")
453+ }
454+ else nil
455+ }
456+
457+
458+func cO (cP,cQ) = {
459+ let cR = cJ(aO(this, ae()), cP)
460+ let cS = cJ(aO(this, af()), cQ)
461+ (cR ++ cS)
462+ }
463+
464+
465+func cT (cU,cV,cW,cX) = {
466+ let cY = D(cW, cU)
467+ let cZ = D(cX, cV)
468+ bO(cZ, cY)
469+ }
470+
471+
472+func da (cW,cX,db) = {
473+ let dc = bc()
474+ let dd = parseIntValue(dc[t])
475+ let de = parseIntValue(dc[u])
476+ let df = cT(dd, de, cW, cX)
477+ let bQ = D(cW, dd)
478+ let bP = D(cX, de)
479+ let dg = D(db, b)
480+ let dh = bO(bQ, dg)
481+ let di = bO(bP, dg)
482+[df, dh, di]
483+ }
484+
485+
486+func dj (cW,cX,db) = {
487+ let dk = da(cW, cX, db)
488+[H(dk[0], b), H(dk[1], b), H(dk[2], b)]
489+ }
490+
491+
492+func dl (dm,dn,do,ab) = {
493+ let dc = bc()
494+ let dp = dc[q]
495+ let dq = dc[r]
496+ let dr = dc[s]
497+ let cU = parseIntValue(dc[t])
498+ let cV = parseIntValue(dc[u])
499+ let ds = dc[p]
500+ let dt = valueOrErrorMessage(assetInfo(fromBase58String(dp)), (("Asset " + dp) + " doesn't exist")).quantity
501+ if ((dp != dn))
502+ then throw("Invalid asset passed.")
503+ else {
504+ let du = bL(dq)
505+ let dv = D(du, cU)
506+ let dw = bL(dr)
507+ let dx = D(dw, cV)
508+ let dy = bO(dx, dv)
509+ let dz = H(dy, b)
510+ let dA = D(do, b)
511+ let dB = D(dt, b)
512+ let dC = fraction(dv, dA, dB)
513+ let dD = fraction(dx, dA, dB)
514+ let dE = K(dC, cU, FLOOR)
515+ let dF = K(dD, cV, FLOOR)
516+ let dG = if ((dm == ""))
517+ then nil
518+ else [ScriptTransfer(ab, dE, if ((dq == "WAVES"))
519+ then unit
520+ else fromBase58String(dq)), ScriptTransfer(ab, dF, if ((dr == "WAVES"))
521+ then unit
522+ else fromBase58String(dr)), StringEntry(ad(toString(ab), dm), bH(dE, dF, do, dz, height, lastBlock.timestamp)), IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz)]
523+ $Tuple10(dE, dF, dq, dr, du, dw, dt, dy, ds, dG)
524+ }
525+ }
526+
527+
528+func dH (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = {
529+ let dc = bc()
530+ let dp = fromBase58String(dc[q])
531+ let dP = dc[r]
532+ let dQ = dc[s]
533+ let dR = dc[v]
534+ let dS = dc[w]
535+ let dd = parseIntValue(dc[t])
536+ let de = parseIntValue(dc[u])
537+ let ds = dc[p]
538+ let dt = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
539+ let dT = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
540+ let dU = toBase58String(valueOrElse(dM, fromBase58String("WAVES")))
541+ if (if ((dP != dT))
542+ then true
543+ else (dQ != dU))
544+ then throw("Invalid amt or price asset passed.")
545+ else {
546+ let du = if (dN)
547+ then bL(dP)
548+ else (bL(dP) - dJ)
549+ let dw = if (dN)
550+ then bL(dQ)
551+ else (bL(dQ) - dL)
552+ let dV = D(dJ, dd)
553+ let dW = D(dL, de)
554+ let dX = bO(dW, dV)
555+ let dv = D(du, dd)
556+ let dx = D(dw, de)
557+ let dY = if ((dt == 0))
558+ then {
559+ let dy = e
560+ let dZ = e
561+ let dg = pow((dV * dW), 0, toBigInt(5), 1, 0, DOWN)
562+ $Tuple5(H(dg, b), H(dV, dd), H(dW, de), bO((dx + dW), (dv + dV)), dZ)
563+ }
564+ else {
565+ let dy = bO(dx, dv)
566+ let dZ = fraction(R((dy - dX)), d, dy)
567+ let ea = D(dI, b)
568+ if (if ((dy != e))
569+ then (dZ > ea)
570+ else false)
571+ then throw(((("Price slippage " + toString(dZ)) + " exceeded the passed limit of ") + toString(ea)))
572+ else {
573+ let dB = D(dt, b)
574+ let eb = fraction(dV, bR(dx, dv, CEILING), d, CEILING)
575+ let ec = fraction(dW, d, bR(dx, dv, FLOOR), CEILING)
576+ let ed = if ((eb > dW))
577+ then $Tuple2(ec, dW)
578+ else $Tuple2(dV, eb)
579+ let ee = ed._1
580+ let ef = ed._2
581+ let dg = fraction(dB, ef, dx, FLOOR)
582+ $Tuple5(K(dg, b, FLOOR), K(ee, dd, CEILING), K(ef, de, CEILING), dy, dZ)
583+ }
584+ }
585+ let eg = dY._1
586+ let eh = dY._2
587+ let ei = dY._3
588+ let dz = H(dY._4, b)
589+ let ej = H(dY._5, b)
590+ if ((0 >= eg))
591+ then throw("Invalid calculations. LP calculated is less than zero.")
592+ else {
593+ let ek = if (!(dO))
594+ then 0
595+ else eg
596+ let el = (dJ - eh)
597+ let em = (dL - ei)
598+ let en = [IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz), StringEntry(aa(ab, dm), bw(eh, ei, ek, dz, dI, ej, height, lastBlock.timestamp, el, em))]
599+ $Tuple13(eg, ek, dz, du, dw, dt, dp, ds, en, el, em, dK, dM)
600+ }
601+ }
602+ }
603+
604+
605+func eo (ep,eq,dt) = {
606+ let er = G(ep, toBigInt(br))
607+ let es = G(eq, toBigInt(bs))
608+ let et = fraction(pow((er * es), 0, toBigInt(5), 1, 18, DOWN), g, dt)
609+ if ((dt == f))
610+ then f
611+ else et
612+ }
613+
614+
615+func eu (ev,ew,ex) = {
616+ let ey = (toBigInt(bL(bh(bp))) - ev)
617+ let ez = (toBigInt(bL(bh(bq))) - ew)
618+ let eA = (toBigInt(value(assetInfo(bo)).quantity) - ex)
619+ let eB = eo(ey, ez, eA)
620+ eB
621+ }
622+
623+
624+func eC (eD,eE,ex) = {
625+ let ey = (bL(bh(bp)) + eD)
626+ let ez = (bL(bh(bq)) + eE)
627+ let eA = (value(assetInfo(bo)).quantity + ex)
628+ let et = eo(toBigInt(ey), toBigInt(ez), toBigInt(eA))
629+ let eF = [IntegerEntry(ak, height), StringEntry(aj, toString(et))]
630+ $Tuple2(eF, et)
631+ }
632+
633+
634+func eG () = valueOrElse(getBoolean(aV, aH(toString(this))), false)
635+
636+
637+func eH (eI,et) = if ((et >= eI))
638+ then true
639+ else aS(makeString(["updated KLp lower than current KLp", toString(eI), toString(et)], " "))
640+
641+
642+func eJ (eK) = {
643+ let ey = bL(bh(bp))
644+ let ez = bL(bh(bq))
645+ let eL = eK.amount
646+ let eM = fraction(eK.amount, eK.price, b, FLOOR)
647+ let eN = if ((eK.orderType == Buy))
648+ then $Tuple2(eL, -(eM))
649+ else $Tuple2(-(eL), eM)
650+ let eD = eN._1
651+ let eE = eN._2
652+ if (if (if (ba())
653+ then true
654+ else (bn == m))
655+ then true
656+ else (bn == n))
657+ then throw("Exchange operations disabled")
658+ else if (if ((eK.assetPair.amountAsset != bp))
659+ then true
660+ else (eK.assetPair.priceAsset != bq))
661+ then throw("Wrong order assets.")
662+ else {
663+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
664+ let eP = eC(eD, eE, 0)
665+ let eQ = eP._1
666+ let eR = eP._2
667+ let eS = (eR >= eO)
668+ let eT = makeString(["kLp=", toString(eO), " kLpNew=", toString(eR), " amountAssetBalance=", toString(ey), " priceAssetBalance=", toString(ez), " amountAssetBalanceDelta=", toString(eD), " priceAssetBalanceDelta=", toString(eE), " height=", toString(height)], "")
669+ $Tuple2(eS, eT)
670+ }
671+ }
672+
673+
674+func eU (eV) = if ((size(eV.payments) != 1))
675+ then throw("exactly 1 payment is expected")
676+ else {
677+ let eW = value(eV.payments[0])
678+ let dn = value(eW.assetId)
679+ let eX = eW.amount
680+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dn), eX, eV.caller)
681+ let dE = dY._1
682+ let dF = dY._2
683+ let ds = parseIntValue(dY._9)
684+ let dG = dY._10
685+ if (if (ba())
686+ then true
687+ else (ds == n))
688+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
689+ else $Tuple5(dE, dF, eX, dn, dG)
690+ }
691+
692+
693+func eY (eV,dI,dO) = if ((size(eV.payments) != 2))
694+ then throw("exactly 2 payments are expected")
695+ else {
696+ let eZ = value(eV.payments[0])
697+ let fa = value(eV.payments[1])
698+ let fb = dH(toBase58String(eV.transactionId), dI, eZ.amount, eZ.assetId, fa.amount, fa.assetId, toString(eV.caller), false, dO)
699+ let ds = parseIntValue(fb._8)
700+ if (if (if (ba())
701+ then true
702+ else (ds == l))
703+ then true
704+ else (ds == n))
705+ then throw(("Put operation is blocked by admin. Status = " + toString(ds)))
706+ else fb
707+ }
708+
709+
710+func fc (bY) = {
711+ let fd = invoke(aV, "emit", [bY], nil)
712+ if ((fd == fd))
713+ then {
714+ let fe = {
715+ let bV = fd
716+ if ($isInstanceOf(bV, "Address"))
717+ then {
718+ let ff = bV
719+ invoke(ff, "emit", [bY], nil)
720+ }
721+ else unit
722+ }
723+ if ((fe == fe))
724+ then bY
725+ else throw("Strict value is not equal to itself.")
726+ }
727+ else throw("Strict value is not equal to itself.")
728+ }
729+
730+
731+func fg (bY,ai) = {
732+ let fh = if ((ai == 0))
733+ then 0
734+ else fraction(bY, ai, b)
735+ $Tuple2((bY - fh), fh)
736+ }
737+
738+
739+func fi (fj,fk,ab,ac) = {
740+ let fl = (ac == unit)
741+ let fm = bL(bh(bp))
742+ let fn = bL(bh(bq))
743+ let fo = if ((fk == bp))
744+ then true
745+ else if ((fk == bq))
746+ then false
747+ else aS("invalid asset")
748+ let fp = if (fl)
749+ then $Tuple2(fm, fn)
750+ else if (fo)
751+ then $Tuple2((fm - fj), fn)
752+ else $Tuple2(fm, (fn - fj))
753+ let fq = fp._1
754+ let fr = fp._2
755+ let fs = if (fo)
756+ then $Tuple2(fj, 0)
757+ else $Tuple2(0, fj)
758+ let ft = fs._1
759+ let fu = fs._2
760+ let eL = fg(ft, aX)._1
761+ let eM = fg(fu, aX)._1
762+ let fv = fg(fj, aX)
763+ let fw = fv._1
764+ let fh = fv._2
765+ let fx = (fq + eL)
766+ let fy = (fr + eM)
767+ let fz = bO(D(fy, bs), D(fx, br))
768+ let fA = H(fz, b)
769+ let fB = if (fo)
770+ then fq
771+ else fr
772+ let fC = toBigInt(fB)
773+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
774+ let fE = if ((fD > f))
775+ then true
776+ else aS("initial deposit requires all coins")
777+ if ((fE == fE))
778+ then {
779+ let fF = toBigInt(fw)
780+ let fG = max([0, toInt(((fD * (sqrtBigInt((d + ((fF * d) / fC)), 18, 18, DOWN) - d)) / d))])
781+ let en = if (fl)
782+ then nil
783+ else [IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bw(ft, fu, fG, fA, 0, 0, height, lastBlock.timestamp, 0, 0))]
784+ let fH = bO(D(fr, bs), D(fq, br))
785+ let fI = H(fH, b)
786+ let fJ = {
787+ let fK = if (fo)
788+ then $Tuple2(ft, fq)
789+ else $Tuple2(fu, fr)
790+ let bY = fK._1
791+ let fL = fK._2
792+ let fM = toInt(fraction(fD, toBigInt((bY / 2)), toBigInt(fL)))
793+ fraction((fG - fM), b, fM)
794+ }
795+ $Tuple5(fG, en, fh, fJ, fo)
796+ }
797+ else throw("Strict value is not equal to itself.")
798+ }
799+
800+
801+func fN (fO,fw,fk,ab,ac) = {
802+ let fl = (ac == unit)
803+ let dc = bc()
804+ let dd = parseIntValue(dc[t])
805+ let de = parseIntValue(dc[u])
806+ let fP = [if ((fk == bo))
807+ then true
808+ else aS("invalid lp asset")]
809+ if ((fP == fP))
810+ then {
811+ let fQ = if ((fO == bp))
812+ then true
813+ else if ((fO == bq))
814+ then false
815+ else aS("invalid asset")
816+ let fR = if (fQ)
817+ then toBigInt(bL(bh(bp)))
818+ else toBigInt(bL(bh(bq)))
819+ let fS = if (fQ)
820+ then dd
821+ else de
822+ let fT = bL(bh(bp))
823+ let fU = bL(bh(bq))
824+ let fV = if (fQ)
825+ then fT
826+ else fU
827+ let fW = toBigInt(fV)
828+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
829+ let fX = toBigInt(fw)
830+ let fY = max([0, toInt(((fR * (d - pow((d - ((fX * d) / fD)), 18, h, 0, 18, DOWN))) / d))])
831+ let fZ = fg(fY, aZ)
832+ let ga = fZ._1
833+ let fh = fZ._2
834+ let gb = if (fQ)
835+ then $Tuple4(ga, 0, (fT - fY), fU)
836+ else $Tuple4(0, ga, fT, (fU - fY))
837+ let gc = gb._1
838+ let gd = gb._2
839+ let ge = gb._3
840+ let gf = gb._4
841+ let fz = bO(D(gf, bs), D(ge, br))
842+ let fA = H(fz, b)
843+ let en = if (fl)
844+ then nil
845+ else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bH(gc, gd, fw, fA, height, lastBlock.timestamp)), IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA)]
846+ let fH = bO(D(fU, bs), D(fT, br))
847+ let fI = H(fH, b)
848+ let fJ = {
849+ let gg = (toInt(fraction(fR, fX, fD)) * 2)
850+ fraction((ga - gg), b, gg)
851+ }
852+ $Tuple5(ga, en, fh, fJ, fQ)
853+ }
854+ else throw("Strict value is not equal to itself.")
855+ }
856+
857+
858+func gh () = {
859+ let bV = getString(U())
860+ if ($isInstanceOf(bV, "String"))
861+ then {
862+ let gi = bV
863+ fromBase58String(gi)
864+ }
865+ else if ($isInstanceOf(bV, "Unit"))
798866 then unit
799867 else throw("Match error")
800868 }
801869
802870
803-func fO () = {
804- let fN = getString(O())
805- if ($isInstanceOf(fN, "String"))
871+func gj () = {
872+ let bV = getString(V())
873+ if ($isInstanceOf(bV, "String"))
806874 then {
807- let cc = fN
808- fromBase58String(cc)
875+ let gi = bV
876+ fromBase58String(gi)
809877 }
810- else if ($isInstanceOf(fN, "Unit"))
878+ else if ($isInstanceOf(bV, "Unit"))
811879 then unit
812880 else throw("Match error")
813881 }
814882
815883
816-let fP = throw("Permission denied")
817-
818-func fQ (cq) = {
819- let fN = fM()
820- if ($isInstanceOf(fN, "ByteVector"))
884+func gk (eV) = {
885+ let bV = gh()
886+ if ($isInstanceOf(bV, "ByteVector"))
821887 then {
822- let fR = fN
823- (cq.callerPublicKey == fR)
888+ let gl = bV
889+ (eV.callerPublicKey == gl)
824890 }
825- else if ($isInstanceOf(fN, "Unit"))
826- then (cq.caller == this)
891+ else if ($isInstanceOf(bV, "Unit"))
892+ then (eV.caller == this)
827893 else throw("Match error")
828894 }
829895
830896
831-func fS (cq) = {
832- let fN = fM()
833- if ($isInstanceOf(fN, "ByteVector"))
897+func gm (eV) = {
898+ let gn = throw("Permission denied")
899+ let bV = gh()
900+ if ($isInstanceOf(bV, "ByteVector"))
834901 then {
835- let fR = fN
836- if ((cq.callerPublicKey == fR))
902+ let gl = bV
903+ if ((eV.callerPublicKey == gl))
837904 then true
838- else fP
905+ else gn
839906 }
840- else if ($isInstanceOf(fN, "Unit"))
841- then if ((cq.caller == this))
907+ else if ($isInstanceOf(bV, "Unit"))
908+ then if ((eV.caller == this))
842909 then true
843- else fP
910+ else gn
844911 else throw("Match error")
845912 }
846913
847914
848-func fT (fU,dV,fV) = {
849- let aY = aQ()
850- let cK = aY[t]
851- let cL = aY[u]
852- let dW = g
853- let dY = parseBigIntValue(l)
854- let cd = (parseBigIntValue(aM) * dY)
855- let bZ = if ((fU == false))
856- then [(toBigInt(bA(cK)) + fV), toBigInt(bA(cL))]
857- else [(toBigInt(bA(cL)) + fV), toBigInt(bA(cK))]
858- let dX = bZ[0]
859- let cc = dX
860- let ce = (cd * dW)
861- let dZ = (((((dV * dV) / (dX * dW)) * dV) * dY) / (ce * dW))
862- let ea = ((cc + ((dV * dY) / ce)) - dV)
863- func co (cp,eb) = {
864- let fW = cp
865- let ed = fW._1
866- let cD = fW._2
867- if ((cD != unit))
868- then cp
869- else {
870- let ee = (((ed * ed) + dZ) / ((g * ed) + ea))
871- let ef = L((ee - value(ed)))
872- if ((f >= ef))
873- then $Tuple2(ee, eb)
874- else $Tuple2(ee, unit)
875- }
876- }
877-
878- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
879- let fX = {
880- let cw = cu
881- let cx = size(cw)
882- let cy = $Tuple2(dV, unit)
883- func cz (cA,cB) = if ((cB >= cx))
884- then cA
885- else co(cA, cw[cB])
886-
887- func cC (cA,cB) = if ((cB >= cx))
888- then cA
889- else throw("List size exceeds 15")
890-
891- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
892- }
893- let ed = fX._1
894- let cD = fX._2
895- if ((cD != unit))
896- then ed
897- else throw(("Y calculation error, Y = " + toString(ed)))
898- }
915+@Callable(eV)
916+func rebalance () = (cC(aO(this, ae())) ++ cC(aO(this, af())))
899917
900918
901-func fY () = valueOrElse(getBoolean(aI, au(toString(this))), false)
902919
903-
904-@Callable(cq)
905-func calculateAmountOutForSwapREADONLY (fZ,fU,ga) = {
906- let gb = if ((fU == false))
920+@Callable(eV)
921+func calculateAmountOutForSwapREADONLY (go,gp,gq) = {
922+ let gr = if ((gp == false))
907923 then {
908- let gc = aB(this, Y())
909- let fV = (toBigInt(bA(aB(this, X()))) + toBigInt(fZ))
910- $Tuple2(gc, fV)
924+ let gs = aO(this, af())
925+ let gt = aO(this, ae())
926+ $Tuple2(gs, gt)
911927 }
912928 else {
913- let gc = aB(this, X())
914- let fV = (toBigInt(bA(aB(this, Y()))) + toBigInt(fZ))
915- $Tuple2(gc, fV)
929+ let gs = aO(this, ae())
930+ let gt = aO(this, af())
931+ $Tuple2(gs, gt)
916932 }
917- let gc = gb._1
918- let fV = gb._2
919- let aY = aQ()
920- let cK = aY[t]
921- let cL = aY[u]
922- let bZ = [toBigInt(bA(cK)), toBigInt(bA(cL))]
923- let dV = bY(bZ)
924- let ed = fT(fU, dV, toBigInt(fZ))
925- let gd = ((toBigInt(bA(gc)) - ed) - toBigInt(1))
926- let ge = max([0, toInt(gd)])
927- let gf = if ((fU == false))
928- then [((toBigInt(bA(cK)) + toBigInt(fZ)) + toBigInt(ga)), (toBigInt(bA(cL)) - gd)]
929- else [(toBigInt(bA(cK)) - gd), ((toBigInt(bA(cL)) + toBigInt(fZ)) + toBigInt(ga))]
930- let gg = bY(gf)
931- let dA = if ((gg >= dV))
933+ let gs = gr._1
934+ let gt = gr._2
935+ let gu = bL(gt)
936+ let gv = bL(gs)
937+ let gw = fraction(gv, go, (gu + go))
938+ let gx = (toBigInt(gu) * toBigInt(gv))
939+ let gy = (((toBigInt(bL(gt)) + toBigInt(go)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
940+ let gz = if ((gy >= gx))
932941 then true
933- else throw(makeString(["new D is fewer error", toString(dV), toString(gg)], "__"))
934- if ((dA == dA))
935- then $Tuple2(nil, ge)
942+ else throw("new K is fewer error")
943+ if ((gz == gz))
944+ then $Tuple2(nil, gw)
936945 else throw("Strict value is not equal to itself.")
937946 }
938947
939948
940949
941-@Callable(cq)
942-func calculateAmountOutForSwapAndSendTokens (fZ,fU,gh,gi,ga) = {
943- let gj = {
944- let aK = invoke(aI, "getSwapContractREADONLY", nil, nil)
945- if ($isInstanceOf(aK, "String"))
946- then aK
947- else throw(($getType(aK) + " couldn't be cast to String"))
950+@Callable(eV)
951+func calculateAmountOutForSwapAndSendTokens (go,gp,gA,gB,gq) = {
952+ let gC = {
953+ let aY = invoke(aV, "getSwapContractREADONLY", nil, nil)
954+ if ($isInstanceOf(aY, "String"))
955+ then aY
956+ else throw(($getType(aY) + " couldn't be cast to String"))
948957 }
949- let gk = [if ((value(cq.payments[0]).amount >= fZ))
958+ let fP = [if ((value(eV.payments[0]).amount >= go))
950959 then true
951- else aF("Wrong amount"), if ((cq.caller == addressFromStringValue(gj)))
960+ else aS("Wrong amount"), if ((eV.caller == addressFromStringValue(gC)))
952961 then true
953- else aF("Permission denied")]
954- if ((gk == gk))
962+ else aS("Permission denied")]
963+ if ((fP == fP))
955964 then {
956- let eM = value(cq.payments[0])
957- let gl = aW(eM.assetId)
958- let gm = if ((fU == false))
965+ let eW = value(eV.payments[0])
966+ let gt = bh(eW.assetId)
967+ let gs = if ((gp == false))
968+ then aO(this, af())
969+ else aO(this, ae())
970+ let gu = (bL(gt) - value(eV.payments[0]).amount)
971+ let gv = bL(gs)
972+ let gw = fraction(gv, go, (gu + go))
973+ let gx = (toBigInt(gu) * toBigInt(gv))
974+ let gy = ((toBigInt(bL(gt)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
975+ let gz = if ((gy >= gx))
976+ then true
977+ else throw("new K is fewer error")
978+ if ((gz == gz))
959979 then {
960- let gc = aB(this, Y())
961- let fV = (bA(gl) - value(cq.payments[0]).amount)
962- $Tuple2(gc, fV)
963- }
964- else {
965- let gc = aB(this, X())
966- let fV = (bA(gl) - value(cq.payments[0]).amount)
967- $Tuple2(gc, fV)
968- }
969- let gc = gm._1
970- let fV = gm._2
971- let aY = aQ()
972- let cK = aY[t]
973- let cL = aY[u]
974- let bZ = if ((fU == false))
975- then [(toBigInt(bA(cK)) - toBigInt(value(cq.payments[0]).amount)), toBigInt(bA(cL))]
976- else [toBigInt(bA(cK)), (toBigInt(bA(cL)) - toBigInt(value(cq.payments[0]).amount))]
977- let dV = bY(bZ)
978- let ed = fT(fU, dV, toBigInt(0))
979- let gd = ((toBigInt(bA(gc)) - ed) - toBigInt(1))
980- let ge = max([0, toInt(gd)])
981- let gn = if ((ge >= gh))
982- then true
983- else throw("Exchange result is fewer coins than expected")
984- if ((gn == gn))
985- then {
986- let gf = if ((fU == false))
987- then [(toBigInt(bA(cK)) + toBigInt(ga)), (toBigInt(bA(cL)) - gd)]
988- else [(toBigInt(bA(cK)) - gd), (toBigInt(bA(cL)) + toBigInt(ga))]
989- let gg = bY(gf)
990- let dA = if ((gg >= dV))
980+ let gD = if ((gw >= gA))
991981 then true
992- else throw("new D is fewer error")
993- if ((dA == dA))
994- then $Tuple2([ScriptTransfer(addressFromStringValue(gi), ge, aU(gc))], ge)
982+ else throw("Exchange result is fewer coins than expected")
983+ if ((gD == gD))
984+ then {
985+ let gE = cC(gt)
986+ if ((gE == gE))
987+ then {
988+ let gF = cJ(gs, gw)
989+ if ((gF == gF))
990+ then $Tuple2(((gF ++ gE) ++ [ScriptTransfer(addressFromStringValue(gB), gw, bf(gs))]), gw)
991+ else throw("Strict value is not equal to itself.")
992+ }
993+ else throw("Strict value is not equal to itself.")
994+ }
995995 else throw("Strict value is not equal to itself.")
996996 }
997997 else throw("Strict value is not equal to itself.")
10011001
10021002
10031003
1004-@Callable(cq)
1005-func constructor (M) = {
1006- let dZ = fS(cq)
1007- if ((dZ == dZ))
1008- then [StringEntry(M(), M)]
1009- else throw("Strict value is not equal to itself.")
1010- }
1011-
1012-
1013-
1014-@Callable(cq)
1015-func setManager (go) = {
1016- let dZ = fS(cq)
1017- if ((dZ == dZ))
1004+@Callable(eV)
1005+func setManager (gG) = {
1006+ let gH = gm(eV)
1007+ if ((gH == gH))
10181008 then {
1019- let gp = fromBase58String(go)
1020- if ((gp == gp))
1021- then [StringEntry(O(), go)]
1009+ let gI = fromBase58String(gG)
1010+ if ((gI == gI))
1011+ then [StringEntry(V(), gG)]
10221012 else throw("Strict value is not equal to itself.")
10231013 }
10241014 else throw("Strict value is not equal to itself.")
10261016
10271017
10281018
1029-@Callable(cq)
1019+@Callable(eV)
10301020 func confirmManager () = {
1031- let cf = fO()
1032- let gq = if (isDefined(cf))
1021+ let gJ = gj()
1022+ let gK = if (isDefined(gJ))
10331023 then true
10341024 else throw("No pending manager")
1035- if ((gq == gq))
1025+ if ((gK == gK))
10361026 then {
1037- let gr = if ((cq.callerPublicKey == value(cf)))
1027+ let gL = if ((eV.callerPublicKey == value(gJ)))
10381028 then true
10391029 else throw("You are not pending manager")
1040- if ((gr == gr))
1041- then [StringEntry(N(), toBase58String(value(cf))), DeleteEntry(O())]
1030+ if ((gL == gL))
1031+ then [StringEntry(U(), toBase58String(value(gJ))), DeleteEntry(V())]
10421032 else throw("Strict value is not equal to itself.")
10431033 }
10441034 else throw("Strict value is not equal to itself.")
10461036
10471037
10481038
1049-@Callable(cq)
1050-func put (gs,gt) = {
1051- let gu = bh()
1052- let gv = valueOrErrorMessage(addressFromString(gu[x]), "Wr st addr")
1053- let gw = valueOrErrorMessage(addressFromString(gu[z]), "Wr sl addr")
1054- if ((0 > gs))
1055- then throw("Wrong slippage")
1056- else if ((size(cq.payments) != 2))
1057- then throw("2 pmnts expd")
1058- else {
1059- let gx = toBigInt(value(cq.payments[0]).amount)
1060- let gy = toBigInt(value(cq.payments[1]).amount)
1061- let eq = (toBigInt(bA(aW(bd))) - gx)
1062- if ((eq == eq))
1039+@Callable(eV)
1040+func put (dI,gM) = if ((0 > dI))
1041+ then throw("Invalid slippageTolerance passed")
1042+ else {
1043+ let fb = eY(eV, dI, true)
1044+ let ek = fb._2
1045+ let dp = fb._7
1046+ let dG = fb._9
1047+ let el = fb._10
1048+ let em = fb._11
1049+ let gN = fb._12
1050+ let gO = fb._13
1051+ let eZ = toBigInt(value(eV.payments[0]).amount)
1052+ let fa = toBigInt(value(eV.payments[1]).amount)
1053+ let eB = eu(eZ, fa, toBigInt(0))
1054+ if ((eB == eB))
1055+ then {
1056+ let fd = invoke(aV, "emit", [ek], nil)
1057+ if ((fd == fd))
10631058 then {
1064- let er = (toBigInt(bA(aW(be))) - gy)
1065- if ((er == er))
1059+ let fe = {
1060+ let bV = fd
1061+ if ($isInstanceOf(bV, "Address"))
1062+ then {
1063+ let ff = bV
1064+ invoke(ff, "emit", [ek], nil)
1065+ }
1066+ else unit
1067+ }
1068+ if ((fe == fe))
10661069 then {
1067- let es = toBigInt(value(assetInfo(bc)).quantity)
1068- if ((es == es))
1070+ let gP = if ((el > 0))
1071+ then invoke(bv, "put", nil, [AttachedPayment(gN, el)])
1072+ else nil
1073+ if ((gP == gP))
10691074 then {
1070- let et = em(gx, gy, toBigInt(0))
1071- if ((et == et))
1075+ let gQ = if ((em > 0))
1076+ then invoke(bv, "put", nil, [AttachedPayment(gO, em)])
1077+ else nil
1078+ if ((gQ == gQ))
10721079 then {
1073- let gz = eN(toString(cq.caller), toBase58String(cq.transactionId), AttachedPayment(value(cq.payments[0]).assetId, value(cq.payments[0]).amount), cq.payments[1], gs, true, false, true, 0, "")
1074- let dN = gz._2
1075- let gA = gz._7
1076- let dc = gz._9
1077- let dO = gz._10
1078- let dP = gz._11
1079- let cK = gz._12
1080- let cL = gz._13
1081- let dy = invoke(aI, "emit", [dN], nil)
1082- if ((dy == dy))
1080+ let gR = if (gM)
10831081 then {
1084- let gB = {
1085- let fN = dy
1086- if ($isInstanceOf(fN, "Address"))
1087- then {
1088- let gC = fN
1089- invoke(gC, "emit", [dN], nil)
1090- }
1091- else unit
1092- }
1093- if ((gB == gB))
1082+ let gS = invoke(bu, "stake", nil, [AttachedPayment(dp, ek)])
1083+ if ((gS == gS))
1084+ then nil
1085+ else throw("Strict value is not equal to itself.")
1086+ }
1087+ else [ScriptTransfer(eV.caller, ek, dp)]
1088+ let gT = eC(0, 0, 0)
1089+ if ((gT == gT))
1090+ then {
1091+ let et = gT._2
1092+ let gU = gT._1
1093+ let gV = eH(eB, et)
1094+ if ((gV == gV))
10941095 then {
1095- let gD = if ((dO > 0))
1096- then invoke(gw, "put", nil, [AttachedPayment(cK, dO)])
1097- else nil
1098- if ((gD == gD))
1099- then {
1100- let gE = if ((dP > 0))
1101- then invoke(gw, "put", nil, [AttachedPayment(cL, dP)])
1102- else nil
1103- if ((gE == gE))
1104- then {
1105- let gF = if (gt)
1106- then {
1107- let gG = invoke(gv, "stake", nil, [AttachedPayment(gA, dN)])
1108- if ((gG == gG))
1109- then nil
1110- else throw("Strict value is not equal to itself.")
1111- }
1112- else [ScriptTransfer(cq.caller, dN, gA)]
1113- let gH = eu(0, 0, 0)
1114- let fK = gH._1
1115- let el = gH._2
1116- let gI = if ((el >= et))
1117- then true
1118- else aF(makeString(["updated DLp lower than current DLp", toString(eq), toString(er), toString(es), toString(et), toString(el), toString(dO), toString(dP)], " "))
1119- if ((gI == gI))
1120- then {
1121- let gJ = value(assetInfo(bc)).quantity
1122- if ((gJ == gJ))
1123- then ((dc ++ gF) ++ fK)
1124- else throw("Strict value is not equal to itself.")
1125- }
1126- else throw("Strict value is not equal to itself.")
1127- }
1128- else throw("Strict value is not equal to itself.")
1129- }
1096+ let gW = invoke(this, "rebalance", nil, nil)
1097+ if ((gW == gW))
1098+ then ((dG ++ gR) ++ gU)
11301099 else throw("Strict value is not equal to itself.")
11311100 }
11321101 else throw("Strict value is not equal to itself.")
11411110 }
11421111 else throw("Strict value is not equal to itself.")
11431112 }
1144- }
1113+ else throw("Strict value is not equal to itself.")
1114+ }
11451115
11461116
11471117
1148-@Callable(cq)
1149-func putOneTknV2 (fo,gt) = {
1150- let gK = {
1151- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1152- if ($isInstanceOf(aK, "Boolean"))
1153- then aK
1154- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1118+@Callable(eV)
1119+func putForFree (gX) = if ((0 > gX))
1120+ then throw("Invalid value passed")
1121+ else {
1122+ let fb = eY(eV, gX, false)
1123+ let dG = fb._9
1124+ let eZ = toBigInt(value(eV.payments[0]).amount)
1125+ let fa = toBigInt(value(eV.payments[1]).amount)
1126+ let eB = eu(eZ, fa, toBigInt(0))
1127+ if ((eB == eB))
1128+ then {
1129+ let gY = eC(0, 0, 0)
1130+ let gU = gY._1
1131+ let et = gY._2
1132+ let gV = eH(eB, et)
1133+ if ((gV == gV))
1134+ then (dG ++ gU)
1135+ else throw("Strict value is not equal to itself.")
1136+ }
1137+ else throw("Strict value is not equal to itself.")
11551138 }
1156- let gL = if (if (if (aN())
1139+
1140+
1141+
1142+@Callable(eV)
1143+func putOneTkn (gZ,ha) = {
1144+ let hb = {
1145+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1146+ if ($isInstanceOf(aY, "Boolean"))
1147+ then aY
1148+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1149+ }
1150+ let hc = if (if (if (ba())
11571151 then true
1158- else (bb == n))
1152+ else (bn == l))
11591153 then true
1160- else (bb == p))
1154+ else (bn == n))
11611155 then true
1162- else gK
1163- let gk = [if (if (!(gL))
1156+ else hb
1157+ let fP = [if (if (!(hc))
11641158 then true
1165- else fQ(cq))
1159+ else gk(eV))
11661160 then true
1167- else aF("put operation is blocked by admin"), if ((size(cq.payments) == 1))
1161+ else aS("put operation is blocked by admin"), if ((size(eV.payments) == 1))
11681162 then true
1169- else aF("exactly 1 payment are expected")]
1170- if ((gk == gk))
1163+ else aS("exactly 1 payment are expected")]
1164+ if ((fP == fP))
11711165 then {
1172- let cK = toBase58String(value(bd))
1173- let cL = toBase58String(value(be))
1174- let cJ = bc
1175- let fs = bf
1176- let ft = bg
1177- let cI = if ((cq.caller == this))
1178- then cq.originCaller
1179- else cq.caller
1180- let eM = value(cq.payments[0])
1181- let cG = toBase58String(value(eM.assetId))
1182- let dn = eM.amount
1183- let et = if ((eM.assetId == bd))
1184- then em(toBigInt(dn), toBigInt(0), toBigInt(0))
1185- else em(toBigInt(0), toBigInt(dn), toBigInt(0))
1186- if ((et == et))
1166+ let hd = eV.payments[0]
1167+ let fk = hd.assetId
1168+ let fj = hd.amount
1169+ let eB = if ((fk == bp))
1170+ then eu(toBigInt(fj), toBigInt(0), toBigInt(0))
1171+ else if ((fk == bq))
1172+ then eu(toBigInt(0), toBigInt(fj), toBigInt(0))
1173+ else aS("payment asset is not supported")
1174+ if ((eB == eB))
11871175 then {
1188- let gM = eR(dn, cG, toString(cI), toBase58String(cq.transactionId), true)
1189- if ((gM == gM))
1176+ let ab = eV.caller
1177+ let ac = eV.transactionId
1178+ let he = fi(fj, fk, ab, ac)
1179+ if ((he == he))
11901180 then {
1191- let bX = gM._3
1192- let dc = gM._2
1193- let gN = gM._1
1194- let dN = if (if ((fo > 0))
1195- then (fo > gN)
1181+ let fo = he._5
1182+ let hf = he._4
1183+ let fh = he._3
1184+ let en = he._2
1185+ let hg = he._1
1186+ let hh = if (if ((gZ > 0))
1187+ then (gZ > hg)
11961188 else false)
1197- then aF(makeString(["amount to receive is less than ", toString(fo)], ""))
1198- else gN
1199- let gz = invoke(aI, "emit", [dN], nil)
1200- if ((gz == gz))
1189+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1190+ else hg
1191+ let fd = fc(hh)
1192+ if ((fd == fd))
12011193 then {
1202- let gB = {
1203- let fN = gz
1204- if ($isInstanceOf(fN, "Address"))
1205- then {
1206- let gC = fN
1207- invoke(gC, "emit", [dN], nil)
1208- }
1209- else unit
1210- }
1211- if ((gB == gB))
1194+ let gR = if (ha)
12121195 then {
1213- let gF = if (gt)
1214- then {
1215- let gG = invoke(bj, "stakeFor", [toString(cq.caller)], [AttachedPayment(cJ, dN)])
1216- if ((gG == gG))
1217- then nil
1218- else throw("Strict value is not equal to itself.")
1219- }
1220- else [ScriptTransfer(cq.caller, dN, cJ)]
1221- let fE = if ((bX > 0))
1222- then [ScriptTransfer(aP, bX, fromBase58String(cG))]
1223- else nil
1224- let gO = if ((this == aP))
1225- then $Tuple2(0, 0)
1226- else {
1227- let gP = if ((eM.assetId == bd))
1228- then true
1229- else false
1230- if (gP)
1231- then $Tuple2(-(bX), 0)
1232- else $Tuple2(0, -(bX))
1233- }
1234- let ev = gO._1
1235- let ew = gO._2
1236- let gQ = eu(ev, ew, 0)
1237- let fK = gQ._1
1238- let el = gQ._2
1239- let fL = ey(et, el)
1240- if ((fL == fL))
1241- then $Tuple2((((dc ++ gF) ++ fE) ++ fK), dN)
1196+ let hi = invoke(bu, "stake", nil, [AttachedPayment(bo, hh)])
1197+ if ((hi == hi))
1198+ then nil
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else [ScriptTransfer(eV.caller, hh, bo)]
1202+ let hj = if ((fh > 0))
1203+ then [ScriptTransfer(aW, fh, fk)]
1204+ else nil
1205+ let hk = if ((this == aW))
1206+ then $Tuple2(0, 0)
1207+ else if (fo)
1208+ then $Tuple2(-(fh), 0)
1209+ else $Tuple2(0, -(fh))
1210+ let eD = hk._1
1211+ let eE = hk._2
1212+ let hl = eC(eD, eE, 0)
1213+ let gU = hl._1
1214+ let et = hl._2
1215+ let eO = value(getString(aj))
1216+ let gV = eH(eB, et)
1217+ if ((gV == gV))
1218+ then {
1219+ let gW = invoke(this, "rebalance", nil, nil)
1220+ if ((gW == gW))
1221+ then $Tuple2((((en ++ gR) ++ hj) ++ gU), hh)
12421222 else throw("Strict value is not equal to itself.")
12431223 }
12441224 else throw("Strict value is not equal to itself.")
12541234
12551235
12561236
1257-@Callable(cq)
1258-func putForFree (gR) = if ((0 > gR))
1259- then throw("Wrong slpg")
1260- else if ((size(cq.payments) != 2))
1261- then throw("2 pmnts expd")
1262- else {
1263- let gS = eN(toString(cq.caller), toBase58String(cq.transactionId), AttachedPayment(value(cq.payments[0]).assetId, value(cq.payments[0]).amount), cq.payments[1], gR, false, false, true, 0, "")
1264- let dc = gS._9
1265- let gx = toBigInt(value(cq.payments[0]).amount)
1266- let gy = toBigInt(value(cq.payments[1]).amount)
1267- let et = em(gx, gy, toBigInt(0))
1268- if ((et == et))
1269- then {
1270- let gT = eu(0, 0, 0)
1271- let fK = gT._1
1272- let el = gT._2
1273- let fL = ey(et, el)
1274- if ((fL == fL))
1275- then (dc ++ fK)
1276- else throw("Strict value is not equal to itself.")
1277- }
1278- else throw("Strict value is not equal to itself.")
1279- }
1237+@Callable(eV)
1238+func putOneTknREADONLY (fk,fj) = {
1239+ let hm = fi(fj, bf(fk), unit, unit)
1240+ let hg = hm._1
1241+ let en = hm._2
1242+ let fh = hm._3
1243+ let hf = hm._4
1244+ let fo = hm._5
1245+ $Tuple2(nil, $Tuple3(hg, fh, hf))
1246+ }
12801247
12811248
12821249
1283-@Callable(cq)
1284-func get () = {
1285- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1286- if ((et == et))
1250+@Callable(eV)
1251+func getOneTkn (hn,gZ) = {
1252+ let hb = {
1253+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1254+ if ($isInstanceOf(aY, "Boolean"))
1255+ then aY
1256+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1257+ }
1258+ let ho = if (if (ba())
1259+ then true
1260+ else (bn == n))
1261+ then true
1262+ else hb
1263+ let fP = [if (if (!(ho))
1264+ then true
1265+ else gk(eV))
1266+ then true
1267+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 1))
1268+ then true
1269+ else aS("exactly 1 payment are expected")]
1270+ if ((fP == fP))
12871271 then {
1288- let dy = eL(cq)
1289- let gU = dy._1
1290- let db = dy._2
1291- let dn = dy._3
1292- let cG = dy._4
1293- let dc = dy._5
1294- let ea = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
1295- if ((ea == ea))
1272+ let fO = bf(hn)
1273+ let hd = eV.payments[0]
1274+ let fk = hd.assetId
1275+ let fw = hd.amount
1276+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1277+ if ((eB == eB))
12961278 then {
1297- let gV = eu(-(gU), -(db), 0)
1298- let fK = gV._1
1299- let el = gV._2
1300- let fL = ey(et, el)
1301- if ((fL == fL))
1302- then (dc ++ fK)
1279+ let ab = eV.caller
1280+ let ac = eV.transactionId
1281+ let hp = fN(fO, fw, fk, ab, ac)
1282+ if ((hp == hp))
1283+ then {
1284+ let fQ = hp._5
1285+ let hf = hp._4
1286+ let fh = hp._3
1287+ let en = hp._2
1288+ let hq = hp._1
1289+ let bY = if (if ((gZ > 0))
1290+ then (gZ > hq)
1291+ else false)
1292+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1293+ else hq
1294+ let hr = invoke(aV, "burn", [fw], [AttachedPayment(fk, fw)])
1295+ if ((hr == hr))
1296+ then {
1297+ let gF = cJ(hn, (bY + max([0, fh])))
1298+ let hs = [ScriptTransfer(ab, bY, fO)]
1299+ let hj = if ((fh > 0))
1300+ then [ScriptTransfer(aW, fh, fO)]
1301+ else nil
1302+ let ht = {
1303+ let hu = if ((this == aW))
1304+ then 0
1305+ else fh
1306+ if (fQ)
1307+ then $Tuple2(-((bY + hu)), 0)
1308+ else $Tuple2(0, -((bY + hu)))
1309+ }
1310+ let eD = ht._1
1311+ let eE = ht._2
1312+ let hv = eC(eD, eE, 0)
1313+ let gU = hv._1
1314+ let et = hv._2
1315+ let gV = eH(eB, et)
1316+ if ((gV == gV))
1317+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1318+ else throw("Strict value is not equal to itself.")
1319+ }
1320+ else throw("Strict value is not equal to itself.")
1321+ }
13031322 else throw("Strict value is not equal to itself.")
13041323 }
13051324 else throw("Strict value is not equal to itself.")
13091328
13101329
13111330
1312-@Callable(cq)
1313-func getOneTknV2 (fn,fo) = {
1314- let gK = {
1315- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1316- if ($isInstanceOf(aK, "Boolean"))
1317- then aK
1318- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1319- }
1320- let gW = if (if (aN())
1321- then true
1322- else (bb == p))
1323- then true
1324- else gK
1325- let gk = [if (if (!(gW))
1326- then true
1327- else fQ(cq))
1328- then true
1329- else aF("get operation is blocked by admin"), if ((size(cq.payments) == 1))
1330- then true
1331- else aF("exactly 1 payment are expected")]
1332- if ((gk == gk))
1333- then {
1334- let gX = fm(fn, fo, cq.payments, cq.caller, cq.originCaller, cq.transactionId)
1335- let dc = gX._1
1336- let fx = gX._2
1337- $Tuple2(dc, fx)
1338- }
1339- else throw("Strict value is not equal to itself.")
1331+@Callable(eV)
1332+func getOneTknREADONLY (fO,fw) = {
1333+ let hw = fN(bf(fO), fw, bo, unit, unit)
1334+ let hq = hw._1
1335+ let en = hw._2
1336+ let fh = hw._3
1337+ let hf = hw._4
1338+ let fQ = hw._5
1339+ $Tuple2(nil, $Tuple3(hq, fh, hf))
13401340 }
13411341
13421342
13431343
1344-@Callable(cq)
1345-func refreshDLp () = {
1346- let gY = valueOrElse(getInteger(ag), 0)
1347- let gZ = if (((height - gY) >= aj))
1348- then unit
1349- else aF(makeString([toString(aj), " blocks have not passed since the previous call"], ""))
1350- if ((gZ == gZ))
1344+@Callable(eV)
1345+func unstakeAndGetOneTkn (hx,hn,gZ) = {
1346+ let hb = {
1347+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1348+ if ($isInstanceOf(aY, "Boolean"))
1349+ then aY
1350+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1351+ }
1352+ let ho = if (if (ba())
1353+ then true
1354+ else (bn == n))
1355+ then true
1356+ else hb
1357+ let fP = [if (if (!(ho))
1358+ then true
1359+ else gk(eV))
1360+ then true
1361+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1362+ then true
1363+ else aS("no payments are expected")]
1364+ if ((fP == fP))
13511365 then {
1352- let eF = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, af), "0")), aH("invalid dLp"))
1353- let ha = eu(0, 0, 0)
1354- let hb = ha._1
1355- let el = ha._2
1356- let ex = if ((eF != el))
1357- then hb
1358- else aF("nothing to refresh")
1359- $Tuple2(ex, toString(el))
1360- }
1361- else throw("Strict value is not equal to itself.")
1362- }
1363-
1364-
1365-
1366-@Callable(cq)
1367-func getOneTknV2READONLY (fn,hc) = {
1368- let cK = toBase58String(value(bd))
1369- let cL = toBase58String(value(be))
1370- let cJ = toBase58String(value(bc))
1371- let bZ = [toBigInt(bA(cK)), toBigInt(bA(cL))]
1372- let ek = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cJ)), "invalid lp asset").quantity)
1373- let dx = bY(bZ)
1374- let dz = (dx - fraction(toBigInt(hc), dx, ek))
1375- let hd = if ((fn == cK))
1376- then 0
1377- else if ((fn == cL))
1378- then 1
1379- else throw("invalid out asset id")
1380- let he = dU(bZ, hd, dz)
1381- let gd = (bZ[hd] - he)
1382- let ge = max([0, toInt((gd - f))])
1383- let hf = bV(ge, aL)
1384- let fw = hf._1
1385- let bX = hf._2
1386- $Tuple2(nil, $Tuple2(fw, bX))
1387- }
1388-
1389-
1390-
1391-@Callable(cq)
1392-func getOneTknV2WithBonusREADONLY (fn,hc) = {
1393- let cK = toBase58String(value(bd))
1394- let cL = toBase58String(value(be))
1395- let cJ = toBase58String(value(bc))
1396- let cQ = bA(cK)
1397- let cS = bA(cL)
1398- let hg = {
1399- let aK = invoke(this, "getOneTknV2READONLY", [fn, hc], nil)
1400- if ($isInstanceOf(aK, "(Int, Int)"))
1401- then aK
1402- else throw(($getType(aK) + " couldn't be cast to (Int, Int)"))
1403- }
1404- let fw = hg._1
1405- let bX = hg._2
1406- let dy = cE("", cJ, hc, this)
1407- let da = dy._1
1408- let db = dy._2
1409- let hh = (da + db)
1410- let fl = if ((hh == 0))
1411- then if ((fw == 0))
1412- then 0
1413- else throw("bonus calculation error")
1414- else fraction((fw - hh), a, hh)
1415- $Tuple2(nil, $Tuple3(fw, bX, fl))
1416- }
1417-
1418-
1419-
1420-@Callable(cq)
1421-func getNoLess (hi,hj) = {
1422- let dy = eL(cq)
1423- let da = dy._1
1424- let db = dy._2
1425- let dn = dy._3
1426- let cG = dy._4
1427- let dc = dy._5
1428- if ((hi > da))
1429- then throw(((("Failed: " + toString(da)) + " < ") + toString(hi)))
1430- else if ((hj > db))
1431- then throw(((("Failed: " + toString(db)) + " < ") + toString(hj)))
1432- else {
1433- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1434- if ((et == et))
1435- then {
1436- let hk = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
1437- if ((hk == hk))
1438- then {
1439- let hl = eu(-(da), -(db), 0)
1440- let fK = hl._1
1441- let el = hl._2
1442- let fL = ey(et, el)
1443- if ((fL == fL))
1444- then (dc ++ fK)
1445- else throw("Strict value is not equal to itself.")
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449- else throw("Strict value is not equal to itself.")
1450- }
1451- }
1452-
1453-
1454-
1455-@Callable(cq)
1456-func unstakeAndGet (bW) = {
1457- let hm = if ((size(cq.payments) != 0))
1458- then throw("No pmnts expd")
1459- else true
1460- if ((hm == hm))
1461- then {
1462- let hn = bh()
1463- let gA = bc
1464- let ho = valueOrErrorMessage(addressFromString(hn[x]), "Wr st addr")
1465- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1466- if ((et == et))
1366+ let fO = bf(hn)
1367+ let ab = eV.caller
1368+ let ac = eV.transactionId
1369+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1370+ if ((eB == eB))
14671371 then {
1468- let hp = invoke(ho, "unstake", [toBase58String(gA), bW], nil)
1469- if ((hp == hp))
1372+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1373+ if ((hy == hy))
14701374 then {
1471- let dy = cE(toBase58String(cq.transactionId), toBase58String(gA), bW, cq.caller)
1472- let da = dy._1
1473- let db = dy._2
1474- let cO = parseIntValue(dy._9)
1475- let dc = dy._10
1476- let hq = if (if (aN())
1477- then true
1478- else (cO == p))
1479- then throw(("Blocked: " + toString(cO)))
1480- else true
1481- if ((hq == hq))
1375+ let hz = fN(fO, hx, bo, ab, ac)
1376+ if ((hz == hz))
14821377 then {
1483- let hr = invoke(aI, "burn", [bW], [AttachedPayment(gA, bW)])
1378+ let fQ = hz._5
1379+ let hf = hz._4
1380+ let fh = hz._3
1381+ let en = hz._2
1382+ let hq = hz._1
1383+ let bY = if (if ((gZ > 0))
1384+ then (gZ > hq)
1385+ else false)
1386+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1387+ else hq
1388+ let hr = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
14841389 if ((hr == hr))
14851390 then {
1486- let hs = eu(-(da), -(db), 0)
1487- let fK = hs._1
1488- let el = hs._2
1489- let fL = ey(et, el)
1490- if ((fL == fL))
1491- then (dc ++ fK)
1391+ let gF = cJ(hn, (bY + max([0, fh])))
1392+ let hs = [ScriptTransfer(eV.caller, bY, fO)]
1393+ let hj = if ((fh > 0))
1394+ then [ScriptTransfer(aW, fh, fO)]
1395+ else nil
1396+ let hA = {
1397+ let hu = if ((this == aW))
1398+ then 0
1399+ else fh
1400+ if (fQ)
1401+ then $Tuple2(-((bY + hu)), 0)
1402+ else $Tuple2(0, -((bY + hu)))
1403+ }
1404+ let eD = hA._1
1405+ let eE = hA._2
1406+ let hB = eC(eD, eE, 0)
1407+ let gU = hB._1
1408+ let et = hB._2
1409+ let gV = eH(eB, et)
1410+ if ((gV == gV))
1411+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
14921412 else throw("Strict value is not equal to itself.")
14931413 }
14941414 else throw("Strict value is not equal to itself.")
15041424
15051425
15061426
1507-@Callable(cq)
1508-func unstakeAndGetNoLess (ht,hu,hj) = {
1509- let gW = if (aN())
1510- then true
1511- else (bb == p)
1512- let gk = [if (!(gW))
1513- then true
1514- else throw("get operation is blocked by admin"), if ((size(cq.payments) == 0))
1515- then true
1516- else throw("no payments are expected")]
1517- if ((gk == gk))
1427+@Callable(eV)
1428+func get () = {
1429+ let dY = eU(eV)
1430+ let dE = dY._1
1431+ let dF = dY._2
1432+ let eX = dY._3
1433+ let dn = dY._4
1434+ let dG = dY._5
1435+ let gF = cO(dE, dF)
1436+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1437+ if ((eB == eB))
15181438 then {
1519- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1520- if ((et == et))
1439+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1440+ if ((hC == hC))
15211441 then {
1522- let hp = invoke(bj, "unstake", [toBase58String(bc), ht], nil)
1523- if ((hp == hp))
1442+ let hD = eC(-(dE), -(dF), 0)
1443+ let gU = hD._1
1444+ let et = hD._2
1445+ let gV = eH(eB, et)
1446+ if ((gV == gV))
1447+ then ((gF ++ dG) ++ gU)
1448+ else throw("Strict value is not equal to itself.")
1449+ }
1450+ else throw("Strict value is not equal to itself.")
1451+ }
1452+ else throw("Strict value is not equal to itself.")
1453+ }
1454+
1455+
1456+
1457+@Callable(eV)
1458+func getNoLess (hE,hF) = {
1459+ let dY = eU(eV)
1460+ let dE = dY._1
1461+ let dF = dY._2
1462+ let eX = dY._3
1463+ let dn = dY._4
1464+ let dG = dY._5
1465+ if ((hE > dE))
1466+ then throw(((("noLessThenAmtAsset failed: " + toString(dE)) + " < ") + toString(hE)))
1467+ else if ((hF > dF))
1468+ then throw(((("noLessThenPriceAsset failed: " + toString(dF)) + " < ") + toString(hF)))
1469+ else {
1470+ let gF = cO(dE, dF)
1471+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1472+ if ((eB == eB))
1473+ then {
1474+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1475+ if ((hC == hC))
1476+ then {
1477+ let hG = eC(-(dE), -(dF), 0)
1478+ let gU = hG._1
1479+ let et = hG._2
1480+ let gV = eH(eB, et)
1481+ if ((gV == gV))
1482+ then ((gF ++ dG) ++ gU)
1483+ else throw("Strict value is not equal to itself.")
1484+ }
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else throw("Strict value is not equal to itself.")
1488+ }
1489+ }
1490+
1491+
1492+
1493+@Callable(eV)
1494+func unstakeAndGet (bY) = {
1495+ let hH = if ((size(eV.payments) != 0))
1496+ then throw("No payments are expected")
1497+ else true
1498+ if ((hH == hH))
1499+ then {
1500+ let dc = bc()
1501+ let dp = fromBase58String(dc[q])
1502+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1503+ if ((eB == eB))
1504+ then {
1505+ let hy = invoke(bu, "unstake", [toBase58String(dp), bY], nil)
1506+ if ((hy == hy))
15241507 then {
1525- let hv = cE(toBase58String(cq.transactionId), toBase58String(bc), ht, cq.caller)
1526- let da = hv._1
1527- let db = hv._2
1528- let dc = hv._10
1529- let hw = [if ((da >= hu))
1508+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dp), bY, eV.caller)
1509+ let dE = dY._1
1510+ let dF = dY._2
1511+ let ds = parseIntValue(dY._9)
1512+ let dG = dY._10
1513+ let gF = cO(dE, dF)
1514+ let hI = if (if (ba())
15301515 then true
1531- else throw(makeString(["amount asset amount to receive is less than ", toString(hu)], "")), if ((db >= hj))
1532- then true
1533- else throw(makeString(["price asset amount to receive is less than ", toString(hj)], ""))]
1534- if ((hw == hw))
1516+ else (ds == n))
1517+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
1518+ else true
1519+ if ((hI == hI))
15351520 then {
1536- let hk = invoke(aI, "burn", [ht], [AttachedPayment(bc, ht)])
1537- if ((hk == hk))
1521+ let hC = invoke(aV, "burn", [bY], [AttachedPayment(dp, bY)])
1522+ if ((hC == hC))
15381523 then {
1539- let hx = eu(-(da), -(db), 0)
1540- let fK = hx._1
1541- let el = hx._2
1542- let fL = ey(et, el)
1543- if ((fL == fL))
1544- then (dc ++ fK)
1524+ let hJ = eC(-(dE), -(dF), 0)
1525+ let gU = hJ._1
1526+ let et = hJ._2
1527+ let gV = eH(eB, et)
1528+ if ((gV == gV))
1529+ then ((gF ++ dG) ++ gU)
15451530 else throw("Strict value is not equal to itself.")
15461531 }
15471532 else throw("Strict value is not equal to itself.")
15571542
15581543
15591544
1560-@Callable(cq)
1561-func unstakeAndGetOneTknV2 (ht,fn,fo) = {
1562- let gK = {
1563- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1564- if ($isInstanceOf(aK, "Boolean"))
1565- then aK
1566- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1567- }
1568- let gW = if (if (aN())
1545+@Callable(eV)
1546+func unstakeAndGetNoLess (hx,hK,hF) = {
1547+ let ho = if (ba())
15691548 then true
1570- else (bb == p))
1549+ else (bn == n)
1550+ let fP = [if (!(ho))
15711551 then true
1572- else gK
1573- let gk = [if (if (!(gW))
1552+ else throw("get operation is blocked by admin"), if ((size(eV.payments) == 0))
15741553 then true
1575- else fQ(cq))
1576- then true
1577- else aF("get operation is blocked by admin"), if ((size(cq.payments) == 0))
1578- then true
1579- else aF("no payments are expected")]
1580- if ((gk == gk))
1554+ else throw("no payments are expected")]
1555+ if ((fP == fP))
15811556 then {
1582- let hn = bh()
1583- let gA = bc
1584- let ho = valueOrErrorMessage(addressFromString(hn[x]), "Wr st addr")
1585- let cI = cq.caller
1586- let hy = this
1587- let hp = invoke(ho, "unstakeINTERNAL", [gA, ht, cI.bytes, hy.bytes], nil)
1588- if ((hp == hp))
1557+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1558+ if ((eB == eB))
15891559 then {
1590- let hz = fm(fn, fo, [AttachedPayment(gA, ht)], cq.caller, cq.originCaller, cq.transactionId)
1591- let dc = hz._1
1592- let fx = hz._2
1593- $Tuple2(dc, fx)
1560+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1561+ if ((hy == hy))
1562+ then {
1563+ let dY = dl(toBase58String(eV.transactionId), toBase58String(bo), hx, eV.caller)
1564+ let dE = dY._1
1565+ let dF = dY._2
1566+ let dG = dY._10
1567+ let gF = cO(dE, dF)
1568+ let hL = [if ((dE >= hK))
1569+ then true
1570+ else throw(makeString(["amount asset amount to receive is less than ", toString(hK)], "")), if ((dF >= hF))
1571+ then true
1572+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1573+ if ((hL == hL))
1574+ then {
1575+ let hC = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1576+ if ((hC == hC))
1577+ then {
1578+ let hM = eC(-(dE), -(dF), 0)
1579+ let gU = hM._1
1580+ let et = hM._2
1581+ let gV = eH(eB, et)
1582+ if ((gV == gV))
1583+ then ((gF ++ dG) ++ gU)
1584+ else throw("Strict value is not equal to itself.")
1585+ }
1586+ else throw("Strict value is not equal to itself.")
1587+ }
1588+ else throw("Strict value is not equal to itself.")
1589+ }
1590+ else throw("Strict value is not equal to itself.")
15941591 }
15951592 else throw("Strict value is not equal to itself.")
15961593 }
15991596
16001597
16011598
1602-@Callable(cq)
1603-func putOneTknV2WithBonusREADONLY (hA,hB) = {
1604- let hC = eR(hA, hB, "", "", true)
1605- let fg = hC._1
1606- let dc = hC._2
1607- let bX = hC._3
1608- let fl = hC._4
1609- $Tuple2(nil, $Tuple3(fg, bX, fl))
1599+@Callable(eV)
1600+func activate (hN,hO) = if ((toString(eV.caller) != toString(aV)))
1601+ then throw("permissions denied")
1602+ else $Tuple2([StringEntry(ae(), hN), StringEntry(af(), hO)], "success")
1603+
1604+
1605+
1606+@Callable(eV)
1607+func refreshKLp () = {
1608+ let hP = valueOrElse(getInteger(ak), 0)
1609+ let hQ = if (((height - hP) >= an))
1610+ then unit
1611+ else aS(makeString([toString(an), " blocks have not passed since the previous call"], ""))
1612+ if ((hQ == hQ))
1613+ then {
1614+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
1615+ let hR = eC(0, 0, 0)
1616+ let hS = hR._1
1617+ let et = hR._2
1618+ let eF = if ((eO != et))
1619+ then hS
1620+ else aS("nothing to refresh")
1621+ $Tuple2(eF, toString(et))
1622+ }
1623+ else throw("Strict value is not equal to itself.")
16101624 }
16111625
16121626
16131627
1614-@Callable(cq)
1615-func putOneTknV2WithoutTakeFeeREADONLY (hA,hB) = {
1616- let hD = eR(hA, hB, "", "", false)
1617- let fg = hD._1
1618- let dc = hD._2
1619- let bX = hD._3
1620- let fl = hD._4
1621- $Tuple2(nil, $Tuple3(fg, bX, fl))
1628+@Callable(eV)
1629+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bc())
1630+
1631+
1632+
1633+@Callable(eV)
1634+func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bL(ap))
1635+
1636+
1637+
1638+@Callable(eV)
1639+func calcPricesWrapperREADONLY (cW,cX,db) = {
1640+ let dk = da(cW, cX, db)
1641+ $Tuple2(nil, [toString(dk[0]), toString(dk[1]), toString(dk[2])])
16221642 }
16231643
16241644
16251645
1626-@Callable(cq)
1627-func activate (hE,hF) = if ((toString(cq.caller) != toString(aI)))
1628- then throw("denied")
1629- else $Tuple2([StringEntry(X(), hE), StringEntry(Y(), hF), StringEntry(Z(), toString(k))], "success")
1646+@Callable(eV)
1647+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16301648
16311649
16321650
1633-@Callable(cq)
1634-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aQ())
1651+@Callable(eV)
1652+func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16351653
16361654
16371655
1638-@Callable(cq)
1639-func getAccBalanceWrapperREADONLY (bB) = $Tuple2(nil, bA(bB))
1656+@Callable(eV)
1657+func calcPriceBigIntWrapperREADONLY (bP,bQ) = $Tuple2(nil, toString(bO(parseBigIntValue(bP), parseBigIntValue(bQ))))
16401658
16411659
16421660
1643-@Callable(cq)
1644-func calcPricesWrapperREADONLY (bJ,bK,bO) = {
1645- let hG = bN(bJ, bK, bO)
1646- $Tuple2(nil, [toString(hG[0]), toString(hG[1]), toString(hG[2])])
1661+@Callable(eV)
1662+func estimatePutOperationWrapperREADONLY (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = $Tuple2(nil, dH(dm, dI, dJ, dK, dL, dM, ab, dN, dO))
1663+
1664+
1665+
1666+@Callable(eV)
1667+func estimateGetOperationWrapperREADONLY (dm,dn,do,ab) = {
1668+ let dY = dl(dm, dn, do, addressFromStringValue(ab))
1669+ $Tuple2(nil, $Tuple10(dY._1, dY._2, dY._3, dY._4, dY._5, dY._6, dY._7, toString(dY._8), dY._9, dY._10))
16471670 }
16481671
16491672
16501673
1651-@Callable(cq)
1652-func fromX18WrapperREADONLY (G,hH) = $Tuple2(nil, F(parseBigIntValue(G), hH))
1653-
1654-
1655-
1656-@Callable(cq)
1657-func toX18WrapperREADONLY (C,D) = $Tuple2(nil, toString(B(C, D)))
1658-
1659-
1660-
1661-@Callable(cq)
1662-func calcPriceBigIntWrapperREADONLY (bD,bE) = $Tuple2(nil, toString(bC(parseBigIntValue(bD), parseBigIntValue(bE))))
1663-
1664-
1665-
1666-@Callable(cq)
1667-func estimatePutOperationWrapperREADONLY (cF,de,df,dg,dh,di,hI,dj,dk) = $Tuple2(nil, dd(cF, de, df, dg, dh, di, hI, dj, dk, true, false, 0, ""))
1668-
1669-
1670-
1671-@Callable(cq)
1672-func estimateGetOperationWrapperREADONLY (cF,hJ,cH,hI) = {
1673- let dy = cE(cF, hJ, cH, addressFromStringValue(hI))
1674- $Tuple2(nil, $Tuple10(dy._1, dy._2, dy._3, dy._4, dy._5, dy._6, dy._7, toString(dy._8), dy._9, dy._10))
1674+@Callable(eV)
1675+func statsREADONLY () = {
1676+ let dc = bc()
1677+ let dp = fromBase58String(dc[q])
1678+ let hT = dc[r]
1679+ let hU = dc[s]
1680+ let dR = dc[v]
1681+ let dS = dc[w]
1682+ let dd = parseIntValue(dc[t])
1683+ let de = parseIntValue(dc[u])
1684+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1685+ let hW = bL(hT)
1686+ let hX = bL(hU)
1687+ let hY = if ((hV == 0))
1688+ then [e, e, e]
1689+ else da(hW, hX, hV)
1690+ let dz = 0
1691+ let hZ = H(hY[1], b)
1692+ let ia = H(hY[2], b)
1693+ let ib = value(getInteger(aV, aD(toString(this))))
1694+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hW), toString(hX), toString(hV), toString(dz), toString(hZ), toString(ia), toString(ib)], j))
16751695 }
16761696
16771697
16781698
1679-@Callable(cq)
1680-func changeAmp () = {
1681- let hK = invoke(aI, "getChangeAmpConfigREADONLY", [toString(this)], nil)
1682- let hL = {
1683- let fN = hK
1684- if ($isInstanceOf(fN, "List[Any]"))
1685- then {
1686- let hM = fN
1687- $Tuple3({
1688- let aK = hM[0]
1689- if ($isInstanceOf(aK, "Int"))
1690- then aK
1691- else throw(($getType(aK) + " couldn't be cast to Int"))
1692- }, {
1693- let aK = hM[1]
1694- if ($isInstanceOf(aK, "Int"))
1695- then aK
1696- else throw(($getType(aK) + " couldn't be cast to Int"))
1697- }, {
1698- let aK = hM[2]
1699- if ($isInstanceOf(aK, "Int"))
1700- then aK
1701- else throw(($getType(aK) + " couldn't be cast to Int"))
1702- })
1703- }
1704- else aF("invalid entry type")
1705- }
1706- let hN = hL._1
1707- let hO = hL._2
1708- let hP = hL._3
1709- let hQ = parseIntValue(getStringValue(Z()))
1710- let hR = (hQ + hO)
1711- let hS = if ((0 > hO))
1712- then if ((hP > hR))
1713- then hP
1714- else hR
1715- else if ((hR > hP))
1716- then hP
1717- else hR
1718- let hT = valueOrElse(getInteger(ac()), 0)
1719- let hU = (hT + hN)
1720- let gk = [if ((height > hU))
1721- then true
1722- else aF("try again in few blocks"), if ((hQ != hS))
1723- then true
1724- else aF("already reached target")]
1725- if ((gk == gk))
1726- then [IntegerEntry(ac(), height), StringEntry(Z(), toString(hS)), StringEntry(aa(height), toString(hS))]
1727- else throw("Strict value is not equal to itself.")
1699+@Callable(eV)
1700+func evaluatePutByAmountAssetREADONLY (dJ) = {
1701+ let dc = bc()
1702+ let dp = fromBase58String(dc[q])
1703+ let dP = dc[r]
1704+ let dq = fromBase58String(dP)
1705+ let dQ = dc[s]
1706+ let dr = fromBase58String(dQ)
1707+ let dd = parseIntValue(dc[t])
1708+ let de = parseIntValue(dc[u])
1709+ let ds = dc[p]
1710+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1711+ let hW = bL(dP)
1712+ let hX = bL(dQ)
1713+ let cY = D(hW, dd)
1714+ let cZ = D(hX, de)
1715+ let dy = if ((hV == 0))
1716+ then e
1717+ else bO(cZ, cY)
1718+ let dV = D(dJ, dd)
1719+ let dW = fraction(dV, dy, d)
1720+ let dL = H(dW, de)
1721+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1722+ let eg = fb._1
1723+ let ic = fb._3
1724+ let du = fb._4
1725+ let dw = fb._5
1726+ let dt = fb._6
1727+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
17281728 }
17291729
17301730
1731-@Verifier(hV)
1732-func hW () = {
1733- let hX = {
1734- let fN = fM()
1735- if ($isInstanceOf(fN, "ByteVector"))
1731+
1732+@Callable(eV)
1733+func evaluatePutByPriceAssetREADONLY (dL) = {
1734+ let dc = bc()
1735+ let dp = fromBase58String(dc[q])
1736+ let dP = dc[r]
1737+ let dq = fromBase58String(dP)
1738+ let dQ = dc[s]
1739+ let dr = fromBase58String(dQ)
1740+ let dd = parseIntValue(dc[t])
1741+ let de = parseIntValue(dc[u])
1742+ let ds = dc[p]
1743+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1744+ let id = bL(dP)
1745+ let ie = bL(dQ)
1746+ let if = D(id, dd)
1747+ let ig = D(ie, de)
1748+ let dy = if ((hV == 0))
1749+ then e
1750+ else bO(ig, if)
1751+ let dW = D(dL, de)
1752+ let dV = fraction(dW, d, dy)
1753+ let dJ = H(dV, dd)
1754+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1755+ let eg = fb._1
1756+ let ic = fb._3
1757+ let du = fb._4
1758+ let dw = fb._5
1759+ let dt = fb._6
1760+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1761+ }
1762+
1763+
1764+
1765+@Callable(eV)
1766+func evaluateGetREADONLY (ih,ii) = {
1767+ let dY = dl("", ih, ii, this)
1768+ let dE = dY._1
1769+ let dF = dY._2
1770+ let du = dY._5
1771+ let dw = dY._6
1772+ let dt = dY._7
1773+ let dz = dY._8
1774+ let ds = parseIntValue(dY._9)
1775+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dE), toString(dF), toString(du), toString(dw), toString(dt), toString(dz), toString(ds)], j))
1776+ }
1777+
1778+
1779+@Verifier(ij)
1780+func ik () = {
1781+ let il = {
1782+ let bV = gh()
1783+ if ($isInstanceOf(bV, "ByteVector"))
17361784 then {
1737- let fR = fN
1738- fR
1785+ let gl = bV
1786+ gl
17391787 }
1740- else if ($isInstanceOf(fN, "Unit"))
1741- then hV.senderPublicKey
1788+ else if ($isInstanceOf(bV, "Unit"))
1789+ then ij.senderPublicKey
17421790 else throw("Match error")
17431791 }
1744- let fN = hV
1745- if ($isInstanceOf(fN, "Order"))
1792+ let bV = ij
1793+ if ($isInstanceOf(bV, "Order"))
17461794 then {
1747- let eB = fN
1748- let hY = aO()
1749- let hZ = if (fY())
1795+ let eK = bV
1796+ let im = bb()
1797+ let in = if (eG())
17501798 then $Tuple2(true, "")
1751- else eA(eB)
1752- let ax = hZ._1
1753- let ay = hZ._2
1754- let az = sigVerify(eB.bodyBytes, eB.proofs[0], eB.senderPublicKey)
1755- let aA = sigVerify(eB.bodyBytes, eB.proofs[1], hY)
1756- if (if (if (ax)
1757- then az
1799+ else eJ(eK)
1800+ let aK = in._1
1801+ let aL = in._2
1802+ let aM = sigVerify(eK.bodyBytes, eK.proofs[0], eK.senderPublicKey)
1803+ let aN = sigVerify(eK.bodyBytes, eK.proofs[1], im)
1804+ if (if (if (aK)
1805+ then aM
17581806 else false)
1759- then aA
1807+ then aN
17601808 else false)
17611809 then true
1762- else aw(ax, ay, az, aA)
1810+ else aJ(aK, aL, aM, aN)
17631811 }
1764- else if ($isInstanceOf(fN, "SetScriptTransaction"))
1812+ else if ($isInstanceOf(bV, "SetScriptTransaction"))
17651813 then {
1766- let cc = fN
1767- if (sigVerify(hV.bodyBytes, hV.proofs[0], hX))
1814+ let gi = bV
1815+ if (sigVerify(ij.bodyBytes, ij.proofs[0], il))
17681816 then true
17691817 else {
1770- let ia = blake2b256(value(cc.script))
1771- let ib = fromBase64String(value(getString(aI, as())))
1772- let ic = scriptHash(this)
1773- if ((ib == ia))
1774- then (ic != ia)
1818+ let io = blake2b256(value(gi.script))
1819+ let ip = fromBase64String(value(getString(aV, aF())))
1820+ let iq = scriptHash(this)
1821+ if ((ip == io))
1822+ then (iq != io)
17751823 else false
17761824 }
17771825 }
1778- else sigVerify(hV.bodyBytes, hV.proofs[0], hX)
1826+ else sigVerify(ij.bodyBytes, ij.proofs[0], il)
17791827 }
17801828
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = 100000000
4+let a = 8
55
6-let b = toBigInt(100000000)
6+let b = 100000000
77
8-let c = toBigInt(1000000000000000000)
8+let c = toBigInt(100000000)
99
10-let d = toBigInt(0)
10+let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
14-let f = toBigInt(1)
14+let f = toBigInt(0)
1515
16-let g = toBigInt(2)
16+let g = toBigInt(1)
1717
18-let h = toBigInt(3)
18+let h = toBigInt(2)
1919
20-let i = toBigInt(4)
20+let i = "WAVES"
2121
22-let j = "WAVES"
22+let j = "__"
2323
24-let k = 50
24+let k = 1
2525
26-let l = "100"
26+let l = 2
2727
28-let m = "__"
28+let m = 3
2929
30-let n = 2
30+let n = 4
3131
32-let o = 3
32+let o = 1
3333
34-let p = 4
34+let p = 2
3535
36-let q = 1
36+let q = 3
3737
38-let r = 2
38+let r = 4
3939
40-let s = 3
40+let s = 5
4141
42-let t = 4
42+let t = 6
4343
44-let u = 5
44+let u = 7
4545
46-let v = 6
46+let v = 8
4747
48-let w = 7
48+let w = 9
4949
50-let x = 1
50+let x = 10
5151
52-let y = 6
52+let y = 1
5353
54-let z = 7
54+let z = 2
5555
56-let A = fraction(10, a, 10000)
56+let A = 3
5757
58-func B (C,D) = fraction(toBigInt(C), c, toBigInt(D))
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
5963
6064
61-func E (C,D) = fraction(C, c, D)
65+func G (E,F) = fraction(E, d, F)
6266
6367
64-func F (G,H) = toInt(fraction(G, toBigInt(H), c))
68+func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6569
6670
67-func I (G,H,J) = toInt(fraction(G, toBigInt(H), c, J))
71+func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
6872
6973
70-func K (G) = if ((d > G))
71- then -(G)
72- else G
74+func M (N,O,P) = fraction(N, O, P)
7375
7476
75-func L (G) = if ((d > G))
76- then -(G)
77- else G
77+func Q (I) = if ((0 > I))
78+ then -(I)
79+ else I
7880
7981
80-func M () = "%s__factoryContract"
82+func R (I) = if ((e > I))
83+ then -(I)
84+ else I
8185
8286
83-func N () = "%s__managerPublicKey"
87+func S () = "%s__swapContract"
8488
8589
86-func O () = "%s__pendingManagerPublicKey"
90+func T () = "%s__factoryContract"
8791
8892
89-func P () = "%s%s__price__last"
93+func U () = "%s__managerPublicKey"
9094
9195
92-func Q (R,S) = makeString(["%s%s%d%d__price__history", toString(R), toString(S)], m)
96+func V () = "%s__pendingManagerPublicKey"
9397
9498
95-func T (U,V) = ((("%s%s%s__P__" + U) + "__") + V)
99+func W () = "%s%s__price__last"
96100
97101
98-func W (U,V) = ((("%s%s%s__G__" + U) + "__") + V)
102+func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
99103
100104
101-func X () = "%s__amountAsset"
105+func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
102106
103107
104-func Y () = "%s__priceAsset"
108+func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
105109
106110
107-func Z () = "%s__amp"
111+func ae () = "%s__amountAsset"
108112
109113
110-func aa (ab) = ("%s%d__amp__" + toString(ab))
114+func af () = "%s__priceAsset"
111115
112116
113-func ac () = "%s__changeAmpLastCall"
117+let ag = "%s__fee"
118+
119+let ah = fraction(10, b, 10000)
120+
121+let ai = valueOrElse(getInteger(this, ag), ah)
122+
123+let aj = makeString(["%s", "kLp"], j)
124+
125+let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126+
127+let al = makeString(["%s", "refreshKLpDelay"], j)
128+
129+let am = 30
130+
131+let an = valueOrElse(getInteger(this, al), am)
132+
133+func ao (ap) = makeString(["%s%s", "stakedBalance", ap], j)
114134
115135
116-let ad = "%s__fee"
117-
118-let ae = valueOrElse(getInteger(this, ad), A)
119-
120-let af = makeString(["%s", "dLp"], m)
121-
122-let ag = makeString(["%s", "dLpRefreshedHeight"], m)
123-
124-let ah = makeString(["%s", "refreshDLpDelay"], m)
125-
126-let ai = 30
127-
128-let aj = valueOrElse(getInteger(this, ah), ai)
129-
130-func ak () = "%s__factoryConfig"
136+func aq (ap) = makeString(["%s%s", "shareAssetBalance", ap], j)
131137
132138
133-func al () = "%s%s__matcher__publicKey"
139+func ar (ap) = valueOrElse(getInteger(this, ao(ap)), 0)
134140
135141
136-func am (an,ao) = (((("%d%d%s__" + an) + "__") + ao) + "__config")
142+func as (ap) = valueOrElse(getInteger(this, aq(ap)), 0)
137143
138144
139-func ap (aq) = ("%s%s%s__mappings__baseAsset2internalId__" + aq)
145+func at () = "%s__factoryConfig"
140146
141147
142-func ar () = "%s__shutdown"
148+func au () = "%s%s__matcher__publicKey"
143149
144150
145-func as () = "%s__allowedLpStableScriptHash"
151+func av (aw) = (("%s%s%s__" + aw) + "__mappings__poolContract2LpAsset")
146152
147153
148-func at () = "%s__feeCollectorAddress"
154+func ax (ay,az) = (((("%d%d%s__" + ay) + "__") + az) + "__config")
149155
150156
151-func au (av) = ("%s%s__skipOrderValidation__" + av)
157+func aA (aB) = ("%s%s%s__mappings__baseAsset2internalId__" + aB)
152158
153159
154-func aw (ax,ay,az,aA) = throw((((((((("order validation failed: orderValid=" + toString(ax)) + " (") + ay) + ")") + " senderValid=") + toString(az)) + " matcherValid=") + toString(aA)))
160+func aC () = "%s__shutdown"
155161
156162
157-func aB (aC,aD) = valueOrErrorMessage(getString(aC, aD), makeString(["mandatory ", toString(aC), ".", aD, " not defined"], ""))
163+func aD (aE) = ("%s%s__poolWeight__" + aE)
158164
159165
160-func aE (aC,aD) = valueOrErrorMessage(getInteger(aC, aD), makeString(["mandatory ", toString(aC), ".", aD, " not defined"], ""))
166+func aF () = "%s__allowedLpScriptHash"
161167
162168
163-func aF (aG) = throw(makeString(["lp_stable.ride:", aG], " "))
169+let aG = "%s__feeCollectorAddress"
170+
171+func aH (aI) = ("%s%s__skipOrderValidation__" + aI)
164172
165173
166-func aH (aG) = makeString(["lp_stable.ride:", aG], " ")
174+func aJ (aK,aL,aM,aN) = throw((((((((("order validation failed: orderValid=" + toString(aK)) + " (") + aL) + ")") + " senderValid=") + toString(aM)) + " matcherValid=") + toString(aN)))
167175
168176
169-let aI = addressFromStringValue(aB(this, M()))
177+func aO (aP,aQ) = valueOrErrorMessage(getString(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
170178
171-let aJ = {
172- let aK = invoke(aI, "getInFeeREADONLY", [toString(this)], nil)
173- if ($isInstanceOf(aK, "Int"))
174- then aK
175- else throw(($getType(aK) + " couldn't be cast to Int"))
179+
180+func aR (aP,aQ) = valueOrErrorMessage(getInteger(aP, aQ), makeString(["mandatory ", toString(aP), ".", aQ, " is not defined"], ""))
181+
182+
183+func aS (aT) = throw(makeString(["lp.ride:", aT], " "))
184+
185+
186+func aU (aT) = makeString(["lp.ride:", aT], " ")
187+
188+
189+let aV = addressFromStringValue(aO(this, T()))
190+
191+let aW = addressFromStringValue(aO(aV, aG))
192+
193+let aX = {
194+ let aY = invoke(aV, "getInFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aY, "Int"))
196+ then aY
197+ else throw(($getType(aY) + " couldn't be cast to Int"))
176198 }
177199
178-let aL = {
179- let aK = invoke(aI, "getOutFeeREADONLY", [toString(this)], nil)
180- if ($isInstanceOf(aK, "Int"))
181- then aK
182- else throw(($getType(aK) + " couldn't be cast to Int"))
200+let aZ = {
201+ let aY = invoke(aV, "getOutFeeREADONLY", [toString(this)], nil)
202+ if ($isInstanceOf(aY, "Int"))
203+ then aY
204+ else throw(($getType(aY) + " couldn't be cast to Int"))
183205 }
184206
185-let aM = aB(this, Z())
186-
187-func aN () = valueOrElse(getBoolean(aI, ar()), false)
207+func ba () = valueOrElse(getBoolean(aV, aC()), false)
188208
189209
190-func aO () = fromBase58String(aB(aI, al()))
210+func bb () = fromBase58String(aO(aV, au()))
191211
192212
193-let aP = addressFromStringValue(aB(aI, at()))
194-
195-func aQ () = {
196- let aR = aB(this, X())
197- let aS = aB(this, Y())
198- let aT = aE(aI, ap(aS))
199- let an = aE(aI, ap(aR))
200- split(aB(aI, am(toString(an), toString(aT))), m)
213+func bc () = {
214+ let bd = aO(this, ae())
215+ let be = aO(this, af())
216+ let az = aR(aV, aA(be))
217+ let ay = aR(aV, aA(bd))
218+ split(aO(aV, ax(toString(ay), toString(az))), j)
201219 }
202220
203221
204-func aU (aV) = if ((aV == j))
222+func bf (bg) = if ((bg == i))
205223 then unit
206- else fromBase58String(aV)
224+ else fromBase58String(bg)
207225
208226
209-func aW (aV) = if ((aV == unit))
210- then j
211- else toBase58String(value(aV))
227+func bh (bg) = if ((bg == unit))
228+ then i
229+ else toBase58String(value(bg))
212230
213231
214-func aX (aY) = $Tuple7(addressFromStringValue(aY[q]), parseIntValue(aY[r]), fromBase58String(aY[s]), aU(aY[t]), aU(aY[u]), parseIntValue(aY[v]), parseIntValue(aY[w]))
232+func bi (bj) = $Tuple7(addressFromStringValue(bj[o]), parseIntValue(bj[p]), fromBase58String(bj[q]), bf(bj[r]), bf(bj[s]), parseIntValue(bj[t]), parseIntValue(bj[u]))
215233
216234
217-let aZ = aX(aQ())
235+let bk = bi(bc())
218236
219-let ba = aZ
237+let bl = bk
220238
221-let bb = ba._2
239+let bm = bl._1
222240
223-let bc = ba._3
241+let bn = bl._2
224242
225-let bd = ba._4
243+let bo = bl._3
226244
227-let be = ba._5
245+let bp = bl._4
228246
229-let bf = ba._6
247+let bq = bl._5
230248
231-let bg = ba._7
249+let br = bl._6
232250
233-func bh () = split(aB(aI, ak()), m)
251+let bs = bl._7
252+
253+func bt () = split(aO(aV, at()), j)
234254
235255
236-let bi = bh()
256+let bu = valueOrErrorMessage(addressFromString(bt()[B]), "incorrect staking address")
237257
238-let bj = valueOrErrorMessage(addressFromString(bi[x]), "Invalid staking contract address")
258+let bv = valueOrErrorMessage(addressFromString(bt()[C]), "incorrect staking address")
239259
240-let bk = valueOrErrorMessage(addressFromString(bi[y]), "Invalid gwx contract address")
241-
242-func bl (bm,bn,bo,bp,bq,br,bs,bt,bu,bv) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(bp), toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv)], m)
260+func bw (bx,by,bz,bA,bB,bC,bD,bE,bF,bG) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG)], j)
243261
244262
245-func bw (bx,by,bz,bp,bs,bt) = makeString(["%d%d%d%d%d%d", toString(bx), toString(by), toString(bz), toString(bp), toString(bs), toString(bt)], m)
263+func bH (bI,bJ,bK,bA,bD,bE) = makeString(["%d%d%d%d%d%d", toString(bI), toString(bJ), toString(bK), toString(bA), toString(bD), toString(bE)], j)
246264
247265
248-func bA (bB) = if ((bB == "WAVES"))
249- then wavesBalance(this).available
250- else assetBalance(this, fromBase58String(bB))
251-
252-
253-func bC (bD,bE) = fraction(bD, c, bE)
254-
255-
256-func bF (bD,bE,J) = fraction(bD, c, bE, J)
257-
258-
259-func bG (bH,bI,bJ,bK) = {
260- let bL = B(bJ, bH)
261- let bM = B(bK, bI)
262- bC(bM, bL)
266+func bL (ap) = {
267+ let bM = if ((ap == "WAVES"))
268+ then wavesBalance(this).available
269+ else assetBalance(this, fromBase58String(ap))
270+ let bN = ((bM + ar(ap)) - as(ap))
271+ max([0, bN])
263272 }
264273
265274
266-func bN (bJ,bK,bO) = {
267- let bP = bf
268- let bQ = bg
269- let bR = bG(bP, bQ, bJ, bK)
270- let bE = B(bJ, bP)
271- let bD = B(bK, bQ)
272- let bS = B(bO, a)
273- let bT = bC(bE, bS)
274- let bU = bC(bD, bS)
275-[bR, bT, bU]
275+func bO (bP,bQ) = fraction(bP, d, bQ)
276+
277+
278+func bR (bP,bQ,L) = fraction(bP, d, bQ, L)
279+
280+
281+func bS (bT) = {
282+ let bU = invoke(bT, "getRate", nil, nil)
283+ if ((bU == bU))
284+ then {
285+ let bV = bU
286+ if ($isInstanceOf(bV, "Int"))
287+ then {
288+ let bW = bV
289+ bW
290+ }
291+ else aS("proxy.getRate() unexpected value")
292+ }
293+ else throw("Strict value is not equal to itself.")
276294 }
277295
278296
279-func bV (bW,ae) = {
280- let bX = if ((ae == 0))
281- then 0
282- else fraction(bW, ae, a)
283- $Tuple2((bW - bX), bX)
284- }
285-
286-
287-func bY (bZ) = {
288- let ca = bZ[0]
289- let cb = bZ[1]
290- let cc = (ca + cb)
291- if ((cc == e))
292- then e
293- else {
294- let cd = parseIntValue(aM)
295- let ce = (cd * 2)
296- let cf = fraction(ca, cb, f)
297- let cg = fraction(cf, i, f)
298- let ch = fraction(toBigInt(ce), cc, f)
299- let ci = toBigInt((ce - 1))
300- func cj (ck) = {
301- let cl = fraction(ck, ck, f)
302- let cm = fraction(cl, ck, f)
303- let cn = fraction(cm, f, cg)
304- fraction((ch + fraction(cn, g, f)), ck, (fraction(ci, ck, f) + fraction(h, cn, f)))
305- }
306-
307- func co (cp,cq) = if (cp._2)
308- then cp
309- else {
310- let ck = cp._1
311- let cr = cj(ck)
312- let cs = (cr - value(ck))
313- let ct = if ((e > cs))
314- then -(cs)
315- else cs
316- if ((f >= ct))
317- then $Tuple2(cr, true)
318- else $Tuple2(cr, false)
319- }
320-
321- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
322- let cv = {
323- let cw = cu
324- let cx = size(cw)
325- let cy = $Tuple2(cc, false)
326- func cz (cA,cB) = if ((cB >= cx))
327- then cA
328- else co(cA, cw[cB])
329-
330- func cC (cA,cB) = if ((cB >= cx))
331- then cA
332- else throw("List size exceeds 17")
333-
334- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17)
335- }
336- let ck = cv._1
337- let cD = cv._2
338- if (cD)
339- then ck
340- else throw(("D calculation error, D = " + toString(ck)))
341- }
342- }
343-
344-
345-func cE (cF,cG,cH,cI) = {
346- let cJ = bc
347- let cK = toBase58String(value(bd))
348- let cL = toBase58String(value(be))
349- let cM = bf
350- let cN = bg
351- let cO = toString(bb)
352- let cP = valueOrErrorMessage(assetInfo(cJ), "Wrong LP id").quantity
353- if ((toBase58String(cJ) != cG))
354- then throw("Wrong pmt asset")
355- else {
356- let cQ = bA(cK)
357- let cR = B(cQ, cM)
358- let cS = bA(cL)
359- let cT = B(cS, cN)
360- let cU = bC(cT, cR)
361- let cV = F(cU, a)
362- let cW = B(cH, a)
363- let cX = B(cP, a)
364- let cY = fraction(cR, cW, cX)
365- let cZ = fraction(cT, cW, cX)
366- let da = I(cY, cM, FLOOR)
367- let db = I(cZ, cN, FLOOR)
368- let dc = if ((cF == ""))
369- then nil
370- else [ScriptTransfer(cI, da, if ((cK == "WAVES"))
371- then unit
372- else fromBase58String(cK)), ScriptTransfer(cI, db, if ((cL == "WAVES"))
373- then unit
374- else fromBase58String(cL)), StringEntry(W(toString(cI), cF), bw(da, db, cH, cV, height, lastBlock.timestamp)), IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV)]
375- $Tuple10(da, db, cK, cL, cQ, cS, cP, cU, cO, dc)
376- }
377- }
378-
379-
380-func dd (cF,de,df,dg,dh,di,cI,dj,dk,dl,dm,dn,do) = {
381- let cJ = bc
382- let dp = toBase58String(value(bd))
383- let dq = toBase58String(value(be))
384- let dr = bf
385- let ds = bg
386- let cO = toString(bb)
387- let dt = valueOrErrorMessage(assetInfo(cJ), "Wr lp as").quantity
388- let cQ = if (dj)
389- then bA(dp)
390- else if (if (dl)
391- then (do == dp)
392- else false)
393- then (bA(dp) - dn)
394- else if (dl)
395- then bA(dp)
396- else (bA(dp) - df)
397- let cS = if (dj)
398- then bA(dq)
399- else if (if (dl)
400- then (do == dq)
401- else false)
402- then (bA(dq) - dn)
403- else if (dl)
404- then bA(dq)
405- else (bA(dq) - dh)
406- let du = B(df, dr)
407- let dv = B(dh, ds)
408- let dw = bC(dv, du)
409- let cR = B(cQ, dr)
410- let cT = B(cS, ds)
411- let dx = bY([cR, cT])
412- let dy = if ((dt == 0))
297+func bX (ap,bY,bZ,bT) = {
298+ let ca = ar(ap)
299+ if ((ca == ca))
413300 then {
414- let dz = bY([(cR + du), (cT + dv)])
415- let dA = if ((dz > dx))
416- then true
417- else throw("D1 should be greater than D0")
418- if ((dA == dA))
301+ let cb = as(bZ)
302+ if ((cb == cb))
419303 then {
420- let cU = d
421- let dB = d
422- let bS = dz
423- $Tuple5(F(bS, a), F(du, dr), F(dv, ds), bC((cT + dv), (cR + du)), dB)
424- }
425- else throw("Strict value is not equal to itself.")
426- }
427- else {
428- let cU = bC(cT, cR)
429- let dC = fraction(K((cU - dw)), c, cU)
430- let dB = B(de, a)
431- if (if (if (dm)
432- then (cU != d)
433- else false)
434- then (dC > dB)
435- else false)
436- then throw(((("Price slippage " + toString(dC)) + " > ") + toString(dB)))
437- else {
438- let dD = B(dt, a)
439- let dE = fraction(du, bF(cT, cR, CEILING), c, CEILING)
440- let dF = fraction(dv, c, bF(cT, cR, FLOOR), CEILING)
441- let dG = if ((dE > dv))
442- then $Tuple2(dF, dv)
443- else $Tuple2(du, dE)
444- let dH = dG._1
445- let dI = dG._2
446- let dz = bY([(cR + dH), (cT + dI)])
447- let dA = if ((dz > dx))
448- then true
449- else throw("D1 should be greater than D0")
450- if ((dA == dA))
304+ let cc = bf(ap)
305+ if ((bY > 0))
451306 then {
452- let bS = fraction(dD, (dz - dx), dx)
453- $Tuple5(I(bS, a, FLOOR), I(dH, dr, CEILING), I(dI, ds, CEILING), cU, dB)
307+ let cd = invoke(bT, "deposit", nil, [AttachedPayment(cc, bY)])
308+ if ((cd == cd))
309+ then {
310+ let bV = cd
311+ if ($isInstanceOf(bV, "Int"))
312+ then {
313+ let ce = bV
314+ let cf = (ca + bY)
315+ let cg = (cb + ce)
316+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg)]
317+ }
318+ else nil
319+ }
320+ else throw("Strict value is not equal to itself.")
454321 }
455- else throw("Strict value is not equal to itself.")
456- }
457- }
458- let dJ = dy._1
459- let dK = dy._2
460- let dL = dy._3
461- let cV = F(dy._4, a)
462- let dM = F(dy._5, a)
463- if ((0 >= dJ))
464- then throw("LP <= 0")
465- else {
466- let dN = if (!(dk))
467- then 0
468- else dJ
469- let dO = (df - dK)
470- let dP = (dh - dL)
471- let dQ = if (if (dl)
472- then (do == dp)
473- else false)
474- then $Tuple2(dn, 0)
475- else if (if (dl)
476- then (do == dq)
477- else false)
478- then $Tuple2(0, dn)
479- else $Tuple2(dK, dL)
480- let dR = dQ._1
481- let dS = dQ._2
482- let dT = [IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV), StringEntry(T(cI, cF), bl(dR, dS, dN, cV, de, dM, height, lastBlock.timestamp, dO, dP))]
483- $Tuple13(dJ, dN, cV, cQ, cS, dt, cJ, cO, dT, dO, dP, dg, di)
484- }
485- }
486-
487-
488-func dU (bZ,cq,dV) = {
489- let dW = g
490- let dX = bZ[if ((cq == 0))
491- then 1
492- else 0]
493- let dY = parseBigIntValue(l)
494- let cd = (parseBigIntValue(aM) * dY)
495- let cc = dX
496- let ce = (cd * dW)
497- let dZ = (((((dV * dV) / (dX * dW)) * dV) * dY) / (ce * dW))
498- let ea = ((cc + ((dV * dY) / ce)) - dV)
499- func co (cp,eb) = {
500- let ec = cp
501- let ed = ec._1
502- let cD = ec._2
503- if ((cD != unit))
504- then cp
505- else {
506- let ee = (((ed * ed) + dZ) / ((g * ed) + ea))
507- let ef = L((ee - value(ed)))
508- if ((f >= ef))
509- then $Tuple2(ee, eb)
510- else $Tuple2(ee, unit)
511- }
512- }
513-
514- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
515- let eg = {
516- let cw = cu
517- let cx = size(cw)
518- let cy = $Tuple2(dV, unit)
519- func cz (cA,cB) = if ((cB >= cx))
520- then cA
521- else co(cA, cw[cB])
522-
523- func cC (cA,cB) = if ((cB >= cx))
524- then cA
525- else throw("List size exceeds 15")
526-
527- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
528- }
529- let ed = eg._1
530- let cD = eg._2
531- if ((cD != unit))
532- then ed
533- else throw(("Y calculation error, Y = " + toString(ed)))
534- }
535-
536-
537-func eh (ei,ej,ek) = {
538- let el = fraction(bY([E(ei, toBigInt(bf)), E(ej, toBigInt(bg))]), c, ek)
539- if ((ek == e))
540- then e
541- else el
542- }
543-
544-
545-func em (en,eo,ep) = {
546- let eq = (toBigInt(bA(aW(bd))) - en)
547- let er = (toBigInt(bA(aW(be))) - eo)
548- let es = (toBigInt(value(assetInfo(bc)).quantity) - ep)
549- let et = eh(eq, er, es)
550- et
551- }
552-
553-
554-func eu (ev,ew,ep) = {
555- let eq = (bA(aW(bd)) + ev)
556- let er = (bA(aW(be)) + ew)
557- let es = (value(assetInfo(bc)).quantity + ep)
558- let el = eh(toBigInt(eq), toBigInt(er), toBigInt(es))
559- let ex = [IntegerEntry(ag, height), StringEntry(af, toString(el))]
560- $Tuple2(ex, el)
561- }
562-
563-
564-func ey (ez,el) = if ((el >= ez))
565- then true
566- else aF("updated DLp lower than current DLp")
567-
568-
569-func eA (eB) = {
570- let eq = bA(aW(bd))
571- let er = bA(aW(be))
572- let eC = eB.amount
573- let eD = fraction(eB.amount, eB.price, a, FLOOR)
574- let eE = if ((eB.orderType == Buy))
575- then $Tuple2(eC, -(eD))
576- else $Tuple2(-(eC), eD)
577- let ev = eE._1
578- let ew = eE._2
579- if (if (if (aN())
580- then true
581- else (bb == o))
582- then true
583- else (bb == p))
584- then throw("Admin blocked")
585- else if (if ((eB.assetPair.amountAsset != bd))
586- then true
587- else (eB.assetPair.priceAsset != be))
588- then throw("Wr assets")
589- else {
590- let eF = parseBigIntValue(valueOrElse(getString(this, af), "0"))
591- let eG = eu(ev, ew, 0)
592- let eH = eG._1
593- let eI = eG._2
594- let eJ = (eI >= eF)
595- let eK = makeString(["dLp=", toString(eF), " dLpNew=", toString(eI), " amountAssetBalance=", toString(eq), " priceAssetBalance=", toString(er), " amountAssetBalanceDelta=", toString(ev), " priceAssetBalanceDelta=", toString(ew), " height=", toString(height)], "")
596- $Tuple2(eJ, eK)
597- }
598- }
599-
600-
601-func eL (cq) = if ((size(cq.payments) != 1))
602- then throw("1 pmnt exp")
603- else {
604- let eM = value(cq.payments[0])
605- let cG = value(eM.assetId)
606- let dn = eM.amount
607- let dy = cE(toBase58String(cq.transactionId), toBase58String(cG), dn, cq.caller)
608- let da = dy._1
609- let db = dy._2
610- let cO = parseIntValue(dy._9)
611- let dc = dy._10
612- if (if (aN())
613- then true
614- else (cO == p))
615- then throw(("Admin blocked: " + toString(cO)))
616- else $Tuple5(da, db, dn, cG, dc)
617- }
618-
619-
620-func eN (eO,V,eP,eQ,de,dk,dl,dm,dn,do) = {
621- let dy = dd(V, de, value(eP).amount, value(eP).assetId, value(eQ).amount, value(eQ).assetId, eO, (V == ""), dk, dl, dm, dn, do)
622- let cO = parseIntValue(dy._8)
623- if (if (if (aN())
624- then true
625- else (cO == n))
626- then true
627- else (cO == p))
628- then throw(("Blocked:" + toString(cO)))
629- else dy
630- }
631-
632-
633-func eR (eS,cG,cI,V,eT) = {
634- let cK = toBase58String(value(bd))
635- let cL = toBase58String(value(be))
636- let cJ = bc
637- let dr = bf
638- let ds = bg
639- let es = toBigInt(valueOrErrorMessage(assetInfo(cJ), "invalid lp asset").quantity)
640- let eU = if ((es > e))
641- then true
642- else throw("initial deposit requires all coins")
643- if ((eU == eU))
644- then {
645- let cQ = bA(cK)
646- let cS = bA(cL)
647- let eV = if ((V == ""))
648- then $Tuple2(cQ, cS)
649- else if ((cG == cK))
650- then if ((eS > cQ))
651- then throw("invalid payment amount")
652- else $Tuple2((cQ - eS), cS)
653- else if ((cG == cL))
654- then if ((eS > cS))
655- then throw("invalid payment amount")
656- else $Tuple2(cQ, (cS - eS))
657- else throw("wrong pmtAssetId")
658- let eW = eV._1
659- let eX = eV._2
660- let eY = if ((cG == cK))
661- then $Tuple2(eS, 0)
662- else if ((cG == cL))
663- then $Tuple2(0, eS)
664- else throw("invalid payment")
665- let eZ = eY._1
666- let fa = eY._2
667- let fb = if (eT)
668- then $Tuple3(bV(eZ, aJ)._1, bV(fa, aJ)._1, bV(eS, aJ)._2)
669- else $Tuple3(eZ, fa, 0)
670- let fc = fb._1
671- let fd = fb._2
672- let bX = fb._3
673- let fe = (eW + fc)
674- let ff = (eX + fd)
675- let dx = bY([B(eW, bf), B(eX, bg)])
676- let dz = bY([B(fe, bf), B(ff, bg)])
677- let dA = if ((dz > dx))
678- then true
679- else throw()
680- if ((dA == dA))
681- then {
682- let fg = fraction(es, (dz - dx), dx, FLOOR)
683- let cV = F(bC(B(ff, ds), B(fe, dr)), a)
684- let dT = [IntegerEntry(P(), cV), IntegerEntry(Q(height, lastBlock.timestamp), cV), StringEntry(T(cI, V), bl(eZ, fa, toInt(fg), cV, 0, 0, height, lastBlock.timestamp, 0, 0))]
685- let fh = fraction(eX, a, eW)
686- let fi = fraction(eS, a, (fh + a))
687- let fj = (eS - fi)
688- let fk = fraction(es, toBigInt(fj), toBigInt(eX))
689- let fl = toInt(fraction((fg - fk), b, fk))
690- $Tuple4(toInt(fg), dT, bX, fl)
322+ else nil
691323 }
692324 else throw("Strict value is not equal to itself.")
693325 }
694326 else throw("Strict value is not equal to itself.")
695327 }
696328
697329
698-func fm (fn,fo,fp,eO,fq,fr) = {
699- let cJ = toBase58String(value(bc))
700- let cK = toBase58String(value(bd))
701- let cL = toBase58String(value(be))
702- let fs = bf
703- let ft = bg
704- let fu = bb
705- let cI = if ((eO == bk))
706- then fq
707- else eO
708- let eM = value(fp[0])
709- let cG = value(eM.assetId)
710- let dn = eM.amount
711- let et = em(e, e, e)
712- if ((et == et))
330+func ch (ap,bY,bZ,bT,ci,cj) = {
331+ let ca = ar(ap)
332+ if ((ca == ca))
713333 then {
714- let cF = toBase58String(fr)
715- if ((cJ != toBase58String(cG)))
716- then throw("Wrong LP")
717- else {
718- let cQ = bA(cK)
719- let cS = bA(cL)
720- let fv = {
721- let aK = invoke(this, "getOneTknV2READONLY", [fn, dn], nil)
722- if ($isInstanceOf(aK, "(Int, Int)"))
723- then aK
724- else throw(($getType(aK) + " couldn't be cast to (Int, Int)"))
725- }
726- if ((fv == fv))
334+ let cb = as(bZ)
335+ if ((cb == cb))
336+ then {
337+ let ck = bS(bT)
338+ if ((ck == ck))
727339 then {
728- let bX = fv._2
729- let fw = fv._1
730- let fx = if (if ((fo > 0))
731- then (fo > fw)
732- else false)
733- then aF(makeString(["amount to receive is less than ", toString(fo)], ""))
734- else fw
735- let fy = if ((fn == cK))
736- then $Tuple4(fx, 0, ((cQ - fx) - bX), cS)
737- else if ((fn == cL))
738- then $Tuple4(0, fx, cQ, ((cS - fx) - bX))
739- else throw("invalid out asset id")
740- let fz = fy._1
741- let fA = fy._2
742- let fe = fy._3
743- let ff = fy._4
744- let fB = bC(B(ff, ft), B(fe, fs))
745- let fC = F(fB, a)
746- let fD = if ((fn == "WAVES"))
747- then unit
748- else fromBase58String(fn)
749- let fE = if ((bX > 0))
750- then [ScriptTransfer(aP, bX, fD)]
751- else nil
752- let dc = ([ScriptTransfer(cI, fx, fD), StringEntry(W(toString(cI), cF), bw(fz, fA, dn, fC, height, lastBlock.timestamp)), IntegerEntry(P(), fC), IntegerEntry(Q(height, lastBlock.timestamp), fC)] ++ fE)
753- if ((dc == dc))
340+ let cl = fraction(ci, ca, cb)
341+ let cm = bf(bZ)
342+ let cn = fraction(ci, bY, cl)
343+ let co = fraction(ci, bY, ck)
344+ let cp = max([0, (cn - co)])
345+ if ((co > 0))
754346 then {
755- let fF = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
756- if ((fF == fF))
347+ let cq = invoke(bT, "withdraw", nil, [AttachedPayment(cm, co)])
348+ if ((cq == cq))
757349 then {
758- let fG = {
759- let fH = if ((this == aP))
760- then 0
761- else bX
762- let fI = if ((aU(fn) == bd))
763- then true
764- else false
765- if (fI)
766- then $Tuple2(-((fw + fH)), 0)
767- else $Tuple2(0, -((fw + fH)))
768- }
769- let ev = fG._1
770- let ew = fG._2
771- let fJ = eu(ev, ew, 0)
772- let fK = fJ._1
773- let el = fJ._2
774- let fL = ey(et, el)
775- if ((fL == fL))
776- then $Tuple2((dc ++ fK), fx)
777- else throw("Strict value is not equal to itself.")
350+ let bV = cq
351+ if ($isInstanceOf(bV, "Int"))
352+ then {
353+ let cr = bV
354+ let cf = (ca - cr)
355+ let cg = ((cb - co) - cp)
356+[IntegerEntry(ao(ap), cf), IntegerEntry(aq(bZ), cg), ScriptTransfer(cj, cp, bf(bZ))]
357+ }
358+ else nil
778359 }
779360 else throw("Strict value is not equal to itself.")
780361 }
781- else throw("Strict value is not equal to itself.")
362+ else nil
782363 }
783364 else throw("Strict value is not equal to itself.")
784365 }
366+ else throw("Strict value is not equal to itself.")
785367 }
786368 else throw("Strict value is not equal to itself.")
787369 }
788370
789371
790-func fM () = {
791- let fN = getString(N())
792- if ($isInstanceOf(fN, "String"))
372+func cs (ap) = {
373+ let bV = invoke(aV, "getPoolLeaseConfigREADONLY", [toString(this), ap], nil)
374+ if ($isInstanceOf(bV, "(Boolean, Int, Int, String, String, Int, String)"))
793375 then {
794- let cc = fN
795- fromBase58String(cc)
376+ let ct = bV
377+ ct
796378 }
797- else if ($isInstanceOf(fN, "Unit"))
379+ else aS((("[" + ap) + "] getLeaseProxyConfig() error"))
380+ }
381+
382+
383+func cu (cv,ap,bZ,cw,bT,ci,cj) = {
384+ let ca = ar(ap)
385+ if ((ca == ca))
386+ then {
387+ let cb = as(bZ)
388+ if ((cb == cb))
389+ then {
390+ let cx = max([0, (bL(ap) - cw)])
391+ let cy = fraction(cv, cx, 100)
392+ let cz = (ca - cy)
393+ if ((cz == 0))
394+ then nil
395+ else if ((0 > cz))
396+ then {
397+ let cA = -(cz)
398+ bX(ap, cA, bZ, bT)
399+ }
400+ else {
401+ let cB = cz
402+ ch(ap, cB, bZ, bT, ci, cj)
403+ }
404+ }
405+ else throw("Strict value is not equal to itself.")
406+ }
407+ else throw("Strict value is not equal to itself.")
408+ }
409+
410+
411+func cC (ap) = {
412+ let cD = cs(ap)
413+ let cE = cD._1
414+ let cF = cD._2
415+ let cw = cD._3
416+ let cG = cD._4
417+ let cH = cD._5
418+ let ci = cD._6
419+ let cI = cD._7
420+ if (cE)
421+ then cu(cF, ap, cH, cw, addressFromStringValue(cG), ci, addressFromStringValue(cI))
422+ else nil
423+ }
424+
425+
426+func cJ (ap,cK) = {
427+ let cL = cs(ap)
428+ let cE = cL._1
429+ let cF = cL._2
430+ let cw = cL._3
431+ let cG = cL._4
432+ let cH = cL._5
433+ let ci = cL._6
434+ let cI = cL._7
435+ if (cE)
436+ then {
437+ let cM = max([0, ((bL(ap) - cK) - cw)])
438+ if ((cM == cM))
439+ then {
440+ let cf = fraction(cF, cM, 100)
441+ if ((cf == cf))
442+ then {
443+ let cN = (ar(ap) - cf)
444+ if ((cN == cN))
445+ then if ((0 > cN))
446+ then bX(ap, -(cN), cH, addressFromStringValue(cG))
447+ else ch(ap, cN, cH, addressFromStringValue(cG), ci, addressFromStringValue(cI))
448+ else throw("Strict value is not equal to itself.")
449+ }
450+ else throw("Strict value is not equal to itself.")
451+ }
452+ else throw("Strict value is not equal to itself.")
453+ }
454+ else nil
455+ }
456+
457+
458+func cO (cP,cQ) = {
459+ let cR = cJ(aO(this, ae()), cP)
460+ let cS = cJ(aO(this, af()), cQ)
461+ (cR ++ cS)
462+ }
463+
464+
465+func cT (cU,cV,cW,cX) = {
466+ let cY = D(cW, cU)
467+ let cZ = D(cX, cV)
468+ bO(cZ, cY)
469+ }
470+
471+
472+func da (cW,cX,db) = {
473+ let dc = bc()
474+ let dd = parseIntValue(dc[t])
475+ let de = parseIntValue(dc[u])
476+ let df = cT(dd, de, cW, cX)
477+ let bQ = D(cW, dd)
478+ let bP = D(cX, de)
479+ let dg = D(db, b)
480+ let dh = bO(bQ, dg)
481+ let di = bO(bP, dg)
482+[df, dh, di]
483+ }
484+
485+
486+func dj (cW,cX,db) = {
487+ let dk = da(cW, cX, db)
488+[H(dk[0], b), H(dk[1], b), H(dk[2], b)]
489+ }
490+
491+
492+func dl (dm,dn,do,ab) = {
493+ let dc = bc()
494+ let dp = dc[q]
495+ let dq = dc[r]
496+ let dr = dc[s]
497+ let cU = parseIntValue(dc[t])
498+ let cV = parseIntValue(dc[u])
499+ let ds = dc[p]
500+ let dt = valueOrErrorMessage(assetInfo(fromBase58String(dp)), (("Asset " + dp) + " doesn't exist")).quantity
501+ if ((dp != dn))
502+ then throw("Invalid asset passed.")
503+ else {
504+ let du = bL(dq)
505+ let dv = D(du, cU)
506+ let dw = bL(dr)
507+ let dx = D(dw, cV)
508+ let dy = bO(dx, dv)
509+ let dz = H(dy, b)
510+ let dA = D(do, b)
511+ let dB = D(dt, b)
512+ let dC = fraction(dv, dA, dB)
513+ let dD = fraction(dx, dA, dB)
514+ let dE = K(dC, cU, FLOOR)
515+ let dF = K(dD, cV, FLOOR)
516+ let dG = if ((dm == ""))
517+ then nil
518+ else [ScriptTransfer(ab, dE, if ((dq == "WAVES"))
519+ then unit
520+ else fromBase58String(dq)), ScriptTransfer(ab, dF, if ((dr == "WAVES"))
521+ then unit
522+ else fromBase58String(dr)), StringEntry(ad(toString(ab), dm), bH(dE, dF, do, dz, height, lastBlock.timestamp)), IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz)]
523+ $Tuple10(dE, dF, dq, dr, du, dw, dt, dy, ds, dG)
524+ }
525+ }
526+
527+
528+func dH (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = {
529+ let dc = bc()
530+ let dp = fromBase58String(dc[q])
531+ let dP = dc[r]
532+ let dQ = dc[s]
533+ let dR = dc[v]
534+ let dS = dc[w]
535+ let dd = parseIntValue(dc[t])
536+ let de = parseIntValue(dc[u])
537+ let ds = dc[p]
538+ let dt = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
539+ let dT = toBase58String(valueOrElse(dK, fromBase58String("WAVES")))
540+ let dU = toBase58String(valueOrElse(dM, fromBase58String("WAVES")))
541+ if (if ((dP != dT))
542+ then true
543+ else (dQ != dU))
544+ then throw("Invalid amt or price asset passed.")
545+ else {
546+ let du = if (dN)
547+ then bL(dP)
548+ else (bL(dP) - dJ)
549+ let dw = if (dN)
550+ then bL(dQ)
551+ else (bL(dQ) - dL)
552+ let dV = D(dJ, dd)
553+ let dW = D(dL, de)
554+ let dX = bO(dW, dV)
555+ let dv = D(du, dd)
556+ let dx = D(dw, de)
557+ let dY = if ((dt == 0))
558+ then {
559+ let dy = e
560+ let dZ = e
561+ let dg = pow((dV * dW), 0, toBigInt(5), 1, 0, DOWN)
562+ $Tuple5(H(dg, b), H(dV, dd), H(dW, de), bO((dx + dW), (dv + dV)), dZ)
563+ }
564+ else {
565+ let dy = bO(dx, dv)
566+ let dZ = fraction(R((dy - dX)), d, dy)
567+ let ea = D(dI, b)
568+ if (if ((dy != e))
569+ then (dZ > ea)
570+ else false)
571+ then throw(((("Price slippage " + toString(dZ)) + " exceeded the passed limit of ") + toString(ea)))
572+ else {
573+ let dB = D(dt, b)
574+ let eb = fraction(dV, bR(dx, dv, CEILING), d, CEILING)
575+ let ec = fraction(dW, d, bR(dx, dv, FLOOR), CEILING)
576+ let ed = if ((eb > dW))
577+ then $Tuple2(ec, dW)
578+ else $Tuple2(dV, eb)
579+ let ee = ed._1
580+ let ef = ed._2
581+ let dg = fraction(dB, ef, dx, FLOOR)
582+ $Tuple5(K(dg, b, FLOOR), K(ee, dd, CEILING), K(ef, de, CEILING), dy, dZ)
583+ }
584+ }
585+ let eg = dY._1
586+ let eh = dY._2
587+ let ei = dY._3
588+ let dz = H(dY._4, b)
589+ let ej = H(dY._5, b)
590+ if ((0 >= eg))
591+ then throw("Invalid calculations. LP calculated is less than zero.")
592+ else {
593+ let ek = if (!(dO))
594+ then 0
595+ else eg
596+ let el = (dJ - eh)
597+ let em = (dL - ei)
598+ let en = [IntegerEntry(W(), dz), IntegerEntry(X(height, lastBlock.timestamp), dz), StringEntry(aa(ab, dm), bw(eh, ei, ek, dz, dI, ej, height, lastBlock.timestamp, el, em))]
599+ $Tuple13(eg, ek, dz, du, dw, dt, dp, ds, en, el, em, dK, dM)
600+ }
601+ }
602+ }
603+
604+
605+func eo (ep,eq,dt) = {
606+ let er = G(ep, toBigInt(br))
607+ let es = G(eq, toBigInt(bs))
608+ let et = fraction(pow((er * es), 0, toBigInt(5), 1, 18, DOWN), g, dt)
609+ if ((dt == f))
610+ then f
611+ else et
612+ }
613+
614+
615+func eu (ev,ew,ex) = {
616+ let ey = (toBigInt(bL(bh(bp))) - ev)
617+ let ez = (toBigInt(bL(bh(bq))) - ew)
618+ let eA = (toBigInt(value(assetInfo(bo)).quantity) - ex)
619+ let eB = eo(ey, ez, eA)
620+ eB
621+ }
622+
623+
624+func eC (eD,eE,ex) = {
625+ let ey = (bL(bh(bp)) + eD)
626+ let ez = (bL(bh(bq)) + eE)
627+ let eA = (value(assetInfo(bo)).quantity + ex)
628+ let et = eo(toBigInt(ey), toBigInt(ez), toBigInt(eA))
629+ let eF = [IntegerEntry(ak, height), StringEntry(aj, toString(et))]
630+ $Tuple2(eF, et)
631+ }
632+
633+
634+func eG () = valueOrElse(getBoolean(aV, aH(toString(this))), false)
635+
636+
637+func eH (eI,et) = if ((et >= eI))
638+ then true
639+ else aS(makeString(["updated KLp lower than current KLp", toString(eI), toString(et)], " "))
640+
641+
642+func eJ (eK) = {
643+ let ey = bL(bh(bp))
644+ let ez = bL(bh(bq))
645+ let eL = eK.amount
646+ let eM = fraction(eK.amount, eK.price, b, FLOOR)
647+ let eN = if ((eK.orderType == Buy))
648+ then $Tuple2(eL, -(eM))
649+ else $Tuple2(-(eL), eM)
650+ let eD = eN._1
651+ let eE = eN._2
652+ if (if (if (ba())
653+ then true
654+ else (bn == m))
655+ then true
656+ else (bn == n))
657+ then throw("Exchange operations disabled")
658+ else if (if ((eK.assetPair.amountAsset != bp))
659+ then true
660+ else (eK.assetPair.priceAsset != bq))
661+ then throw("Wrong order assets.")
662+ else {
663+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
664+ let eP = eC(eD, eE, 0)
665+ let eQ = eP._1
666+ let eR = eP._2
667+ let eS = (eR >= eO)
668+ let eT = makeString(["kLp=", toString(eO), " kLpNew=", toString(eR), " amountAssetBalance=", toString(ey), " priceAssetBalance=", toString(ez), " amountAssetBalanceDelta=", toString(eD), " priceAssetBalanceDelta=", toString(eE), " height=", toString(height)], "")
669+ $Tuple2(eS, eT)
670+ }
671+ }
672+
673+
674+func eU (eV) = if ((size(eV.payments) != 1))
675+ then throw("exactly 1 payment is expected")
676+ else {
677+ let eW = value(eV.payments[0])
678+ let dn = value(eW.assetId)
679+ let eX = eW.amount
680+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dn), eX, eV.caller)
681+ let dE = dY._1
682+ let dF = dY._2
683+ let ds = parseIntValue(dY._9)
684+ let dG = dY._10
685+ if (if (ba())
686+ then true
687+ else (ds == n))
688+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
689+ else $Tuple5(dE, dF, eX, dn, dG)
690+ }
691+
692+
693+func eY (eV,dI,dO) = if ((size(eV.payments) != 2))
694+ then throw("exactly 2 payments are expected")
695+ else {
696+ let eZ = value(eV.payments[0])
697+ let fa = value(eV.payments[1])
698+ let fb = dH(toBase58String(eV.transactionId), dI, eZ.amount, eZ.assetId, fa.amount, fa.assetId, toString(eV.caller), false, dO)
699+ let ds = parseIntValue(fb._8)
700+ if (if (if (ba())
701+ then true
702+ else (ds == l))
703+ then true
704+ else (ds == n))
705+ then throw(("Put operation is blocked by admin. Status = " + toString(ds)))
706+ else fb
707+ }
708+
709+
710+func fc (bY) = {
711+ let fd = invoke(aV, "emit", [bY], nil)
712+ if ((fd == fd))
713+ then {
714+ let fe = {
715+ let bV = fd
716+ if ($isInstanceOf(bV, "Address"))
717+ then {
718+ let ff = bV
719+ invoke(ff, "emit", [bY], nil)
720+ }
721+ else unit
722+ }
723+ if ((fe == fe))
724+ then bY
725+ else throw("Strict value is not equal to itself.")
726+ }
727+ else throw("Strict value is not equal to itself.")
728+ }
729+
730+
731+func fg (bY,ai) = {
732+ let fh = if ((ai == 0))
733+ then 0
734+ else fraction(bY, ai, b)
735+ $Tuple2((bY - fh), fh)
736+ }
737+
738+
739+func fi (fj,fk,ab,ac) = {
740+ let fl = (ac == unit)
741+ let fm = bL(bh(bp))
742+ let fn = bL(bh(bq))
743+ let fo = if ((fk == bp))
744+ then true
745+ else if ((fk == bq))
746+ then false
747+ else aS("invalid asset")
748+ let fp = if (fl)
749+ then $Tuple2(fm, fn)
750+ else if (fo)
751+ then $Tuple2((fm - fj), fn)
752+ else $Tuple2(fm, (fn - fj))
753+ let fq = fp._1
754+ let fr = fp._2
755+ let fs = if (fo)
756+ then $Tuple2(fj, 0)
757+ else $Tuple2(0, fj)
758+ let ft = fs._1
759+ let fu = fs._2
760+ let eL = fg(ft, aX)._1
761+ let eM = fg(fu, aX)._1
762+ let fv = fg(fj, aX)
763+ let fw = fv._1
764+ let fh = fv._2
765+ let fx = (fq + eL)
766+ let fy = (fr + eM)
767+ let fz = bO(D(fy, bs), D(fx, br))
768+ let fA = H(fz, b)
769+ let fB = if (fo)
770+ then fq
771+ else fr
772+ let fC = toBigInt(fB)
773+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
774+ let fE = if ((fD > f))
775+ then true
776+ else aS("initial deposit requires all coins")
777+ if ((fE == fE))
778+ then {
779+ let fF = toBigInt(fw)
780+ let fG = max([0, toInt(((fD * (sqrtBigInt((d + ((fF * d) / fC)), 18, 18, DOWN) - d)) / d))])
781+ let en = if (fl)
782+ then nil
783+ else [IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bw(ft, fu, fG, fA, 0, 0, height, lastBlock.timestamp, 0, 0))]
784+ let fH = bO(D(fr, bs), D(fq, br))
785+ let fI = H(fH, b)
786+ let fJ = {
787+ let fK = if (fo)
788+ then $Tuple2(ft, fq)
789+ else $Tuple2(fu, fr)
790+ let bY = fK._1
791+ let fL = fK._2
792+ let fM = toInt(fraction(fD, toBigInt((bY / 2)), toBigInt(fL)))
793+ fraction((fG - fM), b, fM)
794+ }
795+ $Tuple5(fG, en, fh, fJ, fo)
796+ }
797+ else throw("Strict value is not equal to itself.")
798+ }
799+
800+
801+func fN (fO,fw,fk,ab,ac) = {
802+ let fl = (ac == unit)
803+ let dc = bc()
804+ let dd = parseIntValue(dc[t])
805+ let de = parseIntValue(dc[u])
806+ let fP = [if ((fk == bo))
807+ then true
808+ else aS("invalid lp asset")]
809+ if ((fP == fP))
810+ then {
811+ let fQ = if ((fO == bp))
812+ then true
813+ else if ((fO == bq))
814+ then false
815+ else aS("invalid asset")
816+ let fR = if (fQ)
817+ then toBigInt(bL(bh(bp)))
818+ else toBigInt(bL(bh(bq)))
819+ let fS = if (fQ)
820+ then dd
821+ else de
822+ let fT = bL(bh(bp))
823+ let fU = bL(bh(bq))
824+ let fV = if (fQ)
825+ then fT
826+ else fU
827+ let fW = toBigInt(fV)
828+ let fD = toBigInt(valueOrErrorMessage(assetInfo(bo), (("asset " + toBase58String(bo)) + " doesn't exist")).quantity)
829+ let fX = toBigInt(fw)
830+ let fY = max([0, toInt(((fR * (d - pow((d - ((fX * d) / fD)), 18, h, 0, 18, DOWN))) / d))])
831+ let fZ = fg(fY, aZ)
832+ let ga = fZ._1
833+ let fh = fZ._2
834+ let gb = if (fQ)
835+ then $Tuple4(ga, 0, (fT - fY), fU)
836+ else $Tuple4(0, ga, fT, (fU - fY))
837+ let gc = gb._1
838+ let gd = gb._2
839+ let ge = gb._3
840+ let gf = gb._4
841+ let fz = bO(D(gf, bs), D(ge, br))
842+ let fA = H(fz, b)
843+ let en = if (fl)
844+ then nil
845+ else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bH(gc, gd, fw, fA, height, lastBlock.timestamp)), IntegerEntry(W(), fA), IntegerEntry(X(height, lastBlock.timestamp), fA)]
846+ let fH = bO(D(fU, bs), D(fT, br))
847+ let fI = H(fH, b)
848+ let fJ = {
849+ let gg = (toInt(fraction(fR, fX, fD)) * 2)
850+ fraction((ga - gg), b, gg)
851+ }
852+ $Tuple5(ga, en, fh, fJ, fQ)
853+ }
854+ else throw("Strict value is not equal to itself.")
855+ }
856+
857+
858+func gh () = {
859+ let bV = getString(U())
860+ if ($isInstanceOf(bV, "String"))
861+ then {
862+ let gi = bV
863+ fromBase58String(gi)
864+ }
865+ else if ($isInstanceOf(bV, "Unit"))
798866 then unit
799867 else throw("Match error")
800868 }
801869
802870
803-func fO () = {
804- let fN = getString(O())
805- if ($isInstanceOf(fN, "String"))
871+func gj () = {
872+ let bV = getString(V())
873+ if ($isInstanceOf(bV, "String"))
806874 then {
807- let cc = fN
808- fromBase58String(cc)
875+ let gi = bV
876+ fromBase58String(gi)
809877 }
810- else if ($isInstanceOf(fN, "Unit"))
878+ else if ($isInstanceOf(bV, "Unit"))
811879 then unit
812880 else throw("Match error")
813881 }
814882
815883
816-let fP = throw("Permission denied")
817-
818-func fQ (cq) = {
819- let fN = fM()
820- if ($isInstanceOf(fN, "ByteVector"))
884+func gk (eV) = {
885+ let bV = gh()
886+ if ($isInstanceOf(bV, "ByteVector"))
821887 then {
822- let fR = fN
823- (cq.callerPublicKey == fR)
888+ let gl = bV
889+ (eV.callerPublicKey == gl)
824890 }
825- else if ($isInstanceOf(fN, "Unit"))
826- then (cq.caller == this)
891+ else if ($isInstanceOf(bV, "Unit"))
892+ then (eV.caller == this)
827893 else throw("Match error")
828894 }
829895
830896
831-func fS (cq) = {
832- let fN = fM()
833- if ($isInstanceOf(fN, "ByteVector"))
897+func gm (eV) = {
898+ let gn = throw("Permission denied")
899+ let bV = gh()
900+ if ($isInstanceOf(bV, "ByteVector"))
834901 then {
835- let fR = fN
836- if ((cq.callerPublicKey == fR))
902+ let gl = bV
903+ if ((eV.callerPublicKey == gl))
837904 then true
838- else fP
905+ else gn
839906 }
840- else if ($isInstanceOf(fN, "Unit"))
841- then if ((cq.caller == this))
907+ else if ($isInstanceOf(bV, "Unit"))
908+ then if ((eV.caller == this))
842909 then true
843- else fP
910+ else gn
844911 else throw("Match error")
845912 }
846913
847914
848-func fT (fU,dV,fV) = {
849- let aY = aQ()
850- let cK = aY[t]
851- let cL = aY[u]
852- let dW = g
853- let dY = parseBigIntValue(l)
854- let cd = (parseBigIntValue(aM) * dY)
855- let bZ = if ((fU == false))
856- then [(toBigInt(bA(cK)) + fV), toBigInt(bA(cL))]
857- else [(toBigInt(bA(cL)) + fV), toBigInt(bA(cK))]
858- let dX = bZ[0]
859- let cc = dX
860- let ce = (cd * dW)
861- let dZ = (((((dV * dV) / (dX * dW)) * dV) * dY) / (ce * dW))
862- let ea = ((cc + ((dV * dY) / ce)) - dV)
863- func co (cp,eb) = {
864- let fW = cp
865- let ed = fW._1
866- let cD = fW._2
867- if ((cD != unit))
868- then cp
869- else {
870- let ee = (((ed * ed) + dZ) / ((g * ed) + ea))
871- let ef = L((ee - value(ed)))
872- if ((f >= ef))
873- then $Tuple2(ee, eb)
874- else $Tuple2(ee, unit)
875- }
876- }
877-
878- let cu = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
879- let fX = {
880- let cw = cu
881- let cx = size(cw)
882- let cy = $Tuple2(dV, unit)
883- func cz (cA,cB) = if ((cB >= cx))
884- then cA
885- else co(cA, cw[cB])
886-
887- func cC (cA,cB) = if ((cB >= cx))
888- then cA
889- else throw("List size exceeds 15")
890-
891- cC(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cz(cy, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
892- }
893- let ed = fX._1
894- let cD = fX._2
895- if ((cD != unit))
896- then ed
897- else throw(("Y calculation error, Y = " + toString(ed)))
898- }
915+@Callable(eV)
916+func rebalance () = (cC(aO(this, ae())) ++ cC(aO(this, af())))
899917
900918
901-func fY () = valueOrElse(getBoolean(aI, au(toString(this))), false)
902919
903-
904-@Callable(cq)
905-func calculateAmountOutForSwapREADONLY (fZ,fU,ga) = {
906- let gb = if ((fU == false))
920+@Callable(eV)
921+func calculateAmountOutForSwapREADONLY (go,gp,gq) = {
922+ let gr = if ((gp == false))
907923 then {
908- let gc = aB(this, Y())
909- let fV = (toBigInt(bA(aB(this, X()))) + toBigInt(fZ))
910- $Tuple2(gc, fV)
924+ let gs = aO(this, af())
925+ let gt = aO(this, ae())
926+ $Tuple2(gs, gt)
911927 }
912928 else {
913- let gc = aB(this, X())
914- let fV = (toBigInt(bA(aB(this, Y()))) + toBigInt(fZ))
915- $Tuple2(gc, fV)
929+ let gs = aO(this, ae())
930+ let gt = aO(this, af())
931+ $Tuple2(gs, gt)
916932 }
917- let gc = gb._1
918- let fV = gb._2
919- let aY = aQ()
920- let cK = aY[t]
921- let cL = aY[u]
922- let bZ = [toBigInt(bA(cK)), toBigInt(bA(cL))]
923- let dV = bY(bZ)
924- let ed = fT(fU, dV, toBigInt(fZ))
925- let gd = ((toBigInt(bA(gc)) - ed) - toBigInt(1))
926- let ge = max([0, toInt(gd)])
927- let gf = if ((fU == false))
928- then [((toBigInt(bA(cK)) + toBigInt(fZ)) + toBigInt(ga)), (toBigInt(bA(cL)) - gd)]
929- else [(toBigInt(bA(cK)) - gd), ((toBigInt(bA(cL)) + toBigInt(fZ)) + toBigInt(ga))]
930- let gg = bY(gf)
931- let dA = if ((gg >= dV))
933+ let gs = gr._1
934+ let gt = gr._2
935+ let gu = bL(gt)
936+ let gv = bL(gs)
937+ let gw = fraction(gv, go, (gu + go))
938+ let gx = (toBigInt(gu) * toBigInt(gv))
939+ let gy = (((toBigInt(bL(gt)) + toBigInt(go)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
940+ let gz = if ((gy >= gx))
932941 then true
933- else throw(makeString(["new D is fewer error", toString(dV), toString(gg)], "__"))
934- if ((dA == dA))
935- then $Tuple2(nil, ge)
942+ else throw("new K is fewer error")
943+ if ((gz == gz))
944+ then $Tuple2(nil, gw)
936945 else throw("Strict value is not equal to itself.")
937946 }
938947
939948
940949
941-@Callable(cq)
942-func calculateAmountOutForSwapAndSendTokens (fZ,fU,gh,gi,ga) = {
943- let gj = {
944- let aK = invoke(aI, "getSwapContractREADONLY", nil, nil)
945- if ($isInstanceOf(aK, "String"))
946- then aK
947- else throw(($getType(aK) + " couldn't be cast to String"))
950+@Callable(eV)
951+func calculateAmountOutForSwapAndSendTokens (go,gp,gA,gB,gq) = {
952+ let gC = {
953+ let aY = invoke(aV, "getSwapContractREADONLY", nil, nil)
954+ if ($isInstanceOf(aY, "String"))
955+ then aY
956+ else throw(($getType(aY) + " couldn't be cast to String"))
948957 }
949- let gk = [if ((value(cq.payments[0]).amount >= fZ))
958+ let fP = [if ((value(eV.payments[0]).amount >= go))
950959 then true
951- else aF("Wrong amount"), if ((cq.caller == addressFromStringValue(gj)))
960+ else aS("Wrong amount"), if ((eV.caller == addressFromStringValue(gC)))
952961 then true
953- else aF("Permission denied")]
954- if ((gk == gk))
962+ else aS("Permission denied")]
963+ if ((fP == fP))
955964 then {
956- let eM = value(cq.payments[0])
957- let gl = aW(eM.assetId)
958- let gm = if ((fU == false))
965+ let eW = value(eV.payments[0])
966+ let gt = bh(eW.assetId)
967+ let gs = if ((gp == false))
968+ then aO(this, af())
969+ else aO(this, ae())
970+ let gu = (bL(gt) - value(eV.payments[0]).amount)
971+ let gv = bL(gs)
972+ let gw = fraction(gv, go, (gu + go))
973+ let gx = (toBigInt(gu) * toBigInt(gv))
974+ let gy = ((toBigInt(bL(gt)) + toBigInt(gq)) * (toBigInt(bL(gs)) - toBigInt(gw)))
975+ let gz = if ((gy >= gx))
976+ then true
977+ else throw("new K is fewer error")
978+ if ((gz == gz))
959979 then {
960- let gc = aB(this, Y())
961- let fV = (bA(gl) - value(cq.payments[0]).amount)
962- $Tuple2(gc, fV)
963- }
964- else {
965- let gc = aB(this, X())
966- let fV = (bA(gl) - value(cq.payments[0]).amount)
967- $Tuple2(gc, fV)
968- }
969- let gc = gm._1
970- let fV = gm._2
971- let aY = aQ()
972- let cK = aY[t]
973- let cL = aY[u]
974- let bZ = if ((fU == false))
975- then [(toBigInt(bA(cK)) - toBigInt(value(cq.payments[0]).amount)), toBigInt(bA(cL))]
976- else [toBigInt(bA(cK)), (toBigInt(bA(cL)) - toBigInt(value(cq.payments[0]).amount))]
977- let dV = bY(bZ)
978- let ed = fT(fU, dV, toBigInt(0))
979- let gd = ((toBigInt(bA(gc)) - ed) - toBigInt(1))
980- let ge = max([0, toInt(gd)])
981- let gn = if ((ge >= gh))
982- then true
983- else throw("Exchange result is fewer coins than expected")
984- if ((gn == gn))
985- then {
986- let gf = if ((fU == false))
987- then [(toBigInt(bA(cK)) + toBigInt(ga)), (toBigInt(bA(cL)) - gd)]
988- else [(toBigInt(bA(cK)) - gd), (toBigInt(bA(cL)) + toBigInt(ga))]
989- let gg = bY(gf)
990- let dA = if ((gg >= dV))
980+ let gD = if ((gw >= gA))
991981 then true
992- else throw("new D is fewer error")
993- if ((dA == dA))
994- then $Tuple2([ScriptTransfer(addressFromStringValue(gi), ge, aU(gc))], ge)
982+ else throw("Exchange result is fewer coins than expected")
983+ if ((gD == gD))
984+ then {
985+ let gE = cC(gt)
986+ if ((gE == gE))
987+ then {
988+ let gF = cJ(gs, gw)
989+ if ((gF == gF))
990+ then $Tuple2(((gF ++ gE) ++ [ScriptTransfer(addressFromStringValue(gB), gw, bf(gs))]), gw)
991+ else throw("Strict value is not equal to itself.")
992+ }
993+ else throw("Strict value is not equal to itself.")
994+ }
995995 else throw("Strict value is not equal to itself.")
996996 }
997997 else throw("Strict value is not equal to itself.")
998998 }
999999 else throw("Strict value is not equal to itself.")
10001000 }
10011001
10021002
10031003
1004-@Callable(cq)
1005-func constructor (M) = {
1006- let dZ = fS(cq)
1007- if ((dZ == dZ))
1008- then [StringEntry(M(), M)]
1009- else throw("Strict value is not equal to itself.")
1010- }
1011-
1012-
1013-
1014-@Callable(cq)
1015-func setManager (go) = {
1016- let dZ = fS(cq)
1017- if ((dZ == dZ))
1004+@Callable(eV)
1005+func setManager (gG) = {
1006+ let gH = gm(eV)
1007+ if ((gH == gH))
10181008 then {
1019- let gp = fromBase58String(go)
1020- if ((gp == gp))
1021- then [StringEntry(O(), go)]
1009+ let gI = fromBase58String(gG)
1010+ if ((gI == gI))
1011+ then [StringEntry(V(), gG)]
10221012 else throw("Strict value is not equal to itself.")
10231013 }
10241014 else throw("Strict value is not equal to itself.")
10251015 }
10261016
10271017
10281018
1029-@Callable(cq)
1019+@Callable(eV)
10301020 func confirmManager () = {
1031- let cf = fO()
1032- let gq = if (isDefined(cf))
1021+ let gJ = gj()
1022+ let gK = if (isDefined(gJ))
10331023 then true
10341024 else throw("No pending manager")
1035- if ((gq == gq))
1025+ if ((gK == gK))
10361026 then {
1037- let gr = if ((cq.callerPublicKey == value(cf)))
1027+ let gL = if ((eV.callerPublicKey == value(gJ)))
10381028 then true
10391029 else throw("You are not pending manager")
1040- if ((gr == gr))
1041- then [StringEntry(N(), toBase58String(value(cf))), DeleteEntry(O())]
1030+ if ((gL == gL))
1031+ then [StringEntry(U(), toBase58String(value(gJ))), DeleteEntry(V())]
10421032 else throw("Strict value is not equal to itself.")
10431033 }
10441034 else throw("Strict value is not equal to itself.")
10451035 }
10461036
10471037
10481038
1049-@Callable(cq)
1050-func put (gs,gt) = {
1051- let gu = bh()
1052- let gv = valueOrErrorMessage(addressFromString(gu[x]), "Wr st addr")
1053- let gw = valueOrErrorMessage(addressFromString(gu[z]), "Wr sl addr")
1054- if ((0 > gs))
1055- then throw("Wrong slippage")
1056- else if ((size(cq.payments) != 2))
1057- then throw("2 pmnts expd")
1058- else {
1059- let gx = toBigInt(value(cq.payments[0]).amount)
1060- let gy = toBigInt(value(cq.payments[1]).amount)
1061- let eq = (toBigInt(bA(aW(bd))) - gx)
1062- if ((eq == eq))
1039+@Callable(eV)
1040+func put (dI,gM) = if ((0 > dI))
1041+ then throw("Invalid slippageTolerance passed")
1042+ else {
1043+ let fb = eY(eV, dI, true)
1044+ let ek = fb._2
1045+ let dp = fb._7
1046+ let dG = fb._9
1047+ let el = fb._10
1048+ let em = fb._11
1049+ let gN = fb._12
1050+ let gO = fb._13
1051+ let eZ = toBigInt(value(eV.payments[0]).amount)
1052+ let fa = toBigInt(value(eV.payments[1]).amount)
1053+ let eB = eu(eZ, fa, toBigInt(0))
1054+ if ((eB == eB))
1055+ then {
1056+ let fd = invoke(aV, "emit", [ek], nil)
1057+ if ((fd == fd))
10631058 then {
1064- let er = (toBigInt(bA(aW(be))) - gy)
1065- if ((er == er))
1059+ let fe = {
1060+ let bV = fd
1061+ if ($isInstanceOf(bV, "Address"))
1062+ then {
1063+ let ff = bV
1064+ invoke(ff, "emit", [ek], nil)
1065+ }
1066+ else unit
1067+ }
1068+ if ((fe == fe))
10661069 then {
1067- let es = toBigInt(value(assetInfo(bc)).quantity)
1068- if ((es == es))
1070+ let gP = if ((el > 0))
1071+ then invoke(bv, "put", nil, [AttachedPayment(gN, el)])
1072+ else nil
1073+ if ((gP == gP))
10691074 then {
1070- let et = em(gx, gy, toBigInt(0))
1071- if ((et == et))
1075+ let gQ = if ((em > 0))
1076+ then invoke(bv, "put", nil, [AttachedPayment(gO, em)])
1077+ else nil
1078+ if ((gQ == gQ))
10721079 then {
1073- let gz = eN(toString(cq.caller), toBase58String(cq.transactionId), AttachedPayment(value(cq.payments[0]).assetId, value(cq.payments[0]).amount), cq.payments[1], gs, true, false, true, 0, "")
1074- let dN = gz._2
1075- let gA = gz._7
1076- let dc = gz._9
1077- let dO = gz._10
1078- let dP = gz._11
1079- let cK = gz._12
1080- let cL = gz._13
1081- let dy = invoke(aI, "emit", [dN], nil)
1082- if ((dy == dy))
1080+ let gR = if (gM)
10831081 then {
1084- let gB = {
1085- let fN = dy
1086- if ($isInstanceOf(fN, "Address"))
1087- then {
1088- let gC = fN
1089- invoke(gC, "emit", [dN], nil)
1090- }
1091- else unit
1092- }
1093- if ((gB == gB))
1082+ let gS = invoke(bu, "stake", nil, [AttachedPayment(dp, ek)])
1083+ if ((gS == gS))
1084+ then nil
1085+ else throw("Strict value is not equal to itself.")
1086+ }
1087+ else [ScriptTransfer(eV.caller, ek, dp)]
1088+ let gT = eC(0, 0, 0)
1089+ if ((gT == gT))
1090+ then {
1091+ let et = gT._2
1092+ let gU = gT._1
1093+ let gV = eH(eB, et)
1094+ if ((gV == gV))
10941095 then {
1095- let gD = if ((dO > 0))
1096- then invoke(gw, "put", nil, [AttachedPayment(cK, dO)])
1097- else nil
1098- if ((gD == gD))
1099- then {
1100- let gE = if ((dP > 0))
1101- then invoke(gw, "put", nil, [AttachedPayment(cL, dP)])
1102- else nil
1103- if ((gE == gE))
1104- then {
1105- let gF = if (gt)
1106- then {
1107- let gG = invoke(gv, "stake", nil, [AttachedPayment(gA, dN)])
1108- if ((gG == gG))
1109- then nil
1110- else throw("Strict value is not equal to itself.")
1111- }
1112- else [ScriptTransfer(cq.caller, dN, gA)]
1113- let gH = eu(0, 0, 0)
1114- let fK = gH._1
1115- let el = gH._2
1116- let gI = if ((el >= et))
1117- then true
1118- else aF(makeString(["updated DLp lower than current DLp", toString(eq), toString(er), toString(es), toString(et), toString(el), toString(dO), toString(dP)], " "))
1119- if ((gI == gI))
1120- then {
1121- let gJ = value(assetInfo(bc)).quantity
1122- if ((gJ == gJ))
1123- then ((dc ++ gF) ++ fK)
1124- else throw("Strict value is not equal to itself.")
1125- }
1126- else throw("Strict value is not equal to itself.")
1127- }
1128- else throw("Strict value is not equal to itself.")
1129- }
1096+ let gW = invoke(this, "rebalance", nil, nil)
1097+ if ((gW == gW))
1098+ then ((dG ++ gR) ++ gU)
11301099 else throw("Strict value is not equal to itself.")
11311100 }
11321101 else throw("Strict value is not equal to itself.")
11331102 }
11341103 else throw("Strict value is not equal to itself.")
11351104 }
11361105 else throw("Strict value is not equal to itself.")
11371106 }
11381107 else throw("Strict value is not equal to itself.")
11391108 }
11401109 else throw("Strict value is not equal to itself.")
11411110 }
11421111 else throw("Strict value is not equal to itself.")
11431112 }
1144- }
1113+ else throw("Strict value is not equal to itself.")
1114+ }
11451115
11461116
11471117
1148-@Callable(cq)
1149-func putOneTknV2 (fo,gt) = {
1150- let gK = {
1151- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1152- if ($isInstanceOf(aK, "Boolean"))
1153- then aK
1154- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1118+@Callable(eV)
1119+func putForFree (gX) = if ((0 > gX))
1120+ then throw("Invalid value passed")
1121+ else {
1122+ let fb = eY(eV, gX, false)
1123+ let dG = fb._9
1124+ let eZ = toBigInt(value(eV.payments[0]).amount)
1125+ let fa = toBigInt(value(eV.payments[1]).amount)
1126+ let eB = eu(eZ, fa, toBigInt(0))
1127+ if ((eB == eB))
1128+ then {
1129+ let gY = eC(0, 0, 0)
1130+ let gU = gY._1
1131+ let et = gY._2
1132+ let gV = eH(eB, et)
1133+ if ((gV == gV))
1134+ then (dG ++ gU)
1135+ else throw("Strict value is not equal to itself.")
1136+ }
1137+ else throw("Strict value is not equal to itself.")
11551138 }
1156- let gL = if (if (if (aN())
1139+
1140+
1141+
1142+@Callable(eV)
1143+func putOneTkn (gZ,ha) = {
1144+ let hb = {
1145+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1146+ if ($isInstanceOf(aY, "Boolean"))
1147+ then aY
1148+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1149+ }
1150+ let hc = if (if (if (ba())
11571151 then true
1158- else (bb == n))
1152+ else (bn == l))
11591153 then true
1160- else (bb == p))
1154+ else (bn == n))
11611155 then true
1162- else gK
1163- let gk = [if (if (!(gL))
1156+ else hb
1157+ let fP = [if (if (!(hc))
11641158 then true
1165- else fQ(cq))
1159+ else gk(eV))
11661160 then true
1167- else aF("put operation is blocked by admin"), if ((size(cq.payments) == 1))
1161+ else aS("put operation is blocked by admin"), if ((size(eV.payments) == 1))
11681162 then true
1169- else aF("exactly 1 payment are expected")]
1170- if ((gk == gk))
1163+ else aS("exactly 1 payment are expected")]
1164+ if ((fP == fP))
11711165 then {
1172- let cK = toBase58String(value(bd))
1173- let cL = toBase58String(value(be))
1174- let cJ = bc
1175- let fs = bf
1176- let ft = bg
1177- let cI = if ((cq.caller == this))
1178- then cq.originCaller
1179- else cq.caller
1180- let eM = value(cq.payments[0])
1181- let cG = toBase58String(value(eM.assetId))
1182- let dn = eM.amount
1183- let et = if ((eM.assetId == bd))
1184- then em(toBigInt(dn), toBigInt(0), toBigInt(0))
1185- else em(toBigInt(0), toBigInt(dn), toBigInt(0))
1186- if ((et == et))
1166+ let hd = eV.payments[0]
1167+ let fk = hd.assetId
1168+ let fj = hd.amount
1169+ let eB = if ((fk == bp))
1170+ then eu(toBigInt(fj), toBigInt(0), toBigInt(0))
1171+ else if ((fk == bq))
1172+ then eu(toBigInt(0), toBigInt(fj), toBigInt(0))
1173+ else aS("payment asset is not supported")
1174+ if ((eB == eB))
11871175 then {
1188- let gM = eR(dn, cG, toString(cI), toBase58String(cq.transactionId), true)
1189- if ((gM == gM))
1176+ let ab = eV.caller
1177+ let ac = eV.transactionId
1178+ let he = fi(fj, fk, ab, ac)
1179+ if ((he == he))
11901180 then {
1191- let bX = gM._3
1192- let dc = gM._2
1193- let gN = gM._1
1194- let dN = if (if ((fo > 0))
1195- then (fo > gN)
1181+ let fo = he._5
1182+ let hf = he._4
1183+ let fh = he._3
1184+ let en = he._2
1185+ let hg = he._1
1186+ let hh = if (if ((gZ > 0))
1187+ then (gZ > hg)
11961188 else false)
1197- then aF(makeString(["amount to receive is less than ", toString(fo)], ""))
1198- else gN
1199- let gz = invoke(aI, "emit", [dN], nil)
1200- if ((gz == gz))
1189+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1190+ else hg
1191+ let fd = fc(hh)
1192+ if ((fd == fd))
12011193 then {
1202- let gB = {
1203- let fN = gz
1204- if ($isInstanceOf(fN, "Address"))
1205- then {
1206- let gC = fN
1207- invoke(gC, "emit", [dN], nil)
1208- }
1209- else unit
1210- }
1211- if ((gB == gB))
1194+ let gR = if (ha)
12121195 then {
1213- let gF = if (gt)
1214- then {
1215- let gG = invoke(bj, "stakeFor", [toString(cq.caller)], [AttachedPayment(cJ, dN)])
1216- if ((gG == gG))
1217- then nil
1218- else throw("Strict value is not equal to itself.")
1219- }
1220- else [ScriptTransfer(cq.caller, dN, cJ)]
1221- let fE = if ((bX > 0))
1222- then [ScriptTransfer(aP, bX, fromBase58String(cG))]
1223- else nil
1224- let gO = if ((this == aP))
1225- then $Tuple2(0, 0)
1226- else {
1227- let gP = if ((eM.assetId == bd))
1228- then true
1229- else false
1230- if (gP)
1231- then $Tuple2(-(bX), 0)
1232- else $Tuple2(0, -(bX))
1233- }
1234- let ev = gO._1
1235- let ew = gO._2
1236- let gQ = eu(ev, ew, 0)
1237- let fK = gQ._1
1238- let el = gQ._2
1239- let fL = ey(et, el)
1240- if ((fL == fL))
1241- then $Tuple2((((dc ++ gF) ++ fE) ++ fK), dN)
1196+ let hi = invoke(bu, "stake", nil, [AttachedPayment(bo, hh)])
1197+ if ((hi == hi))
1198+ then nil
1199+ else throw("Strict value is not equal to itself.")
1200+ }
1201+ else [ScriptTransfer(eV.caller, hh, bo)]
1202+ let hj = if ((fh > 0))
1203+ then [ScriptTransfer(aW, fh, fk)]
1204+ else nil
1205+ let hk = if ((this == aW))
1206+ then $Tuple2(0, 0)
1207+ else if (fo)
1208+ then $Tuple2(-(fh), 0)
1209+ else $Tuple2(0, -(fh))
1210+ let eD = hk._1
1211+ let eE = hk._2
1212+ let hl = eC(eD, eE, 0)
1213+ let gU = hl._1
1214+ let et = hl._2
1215+ let eO = value(getString(aj))
1216+ let gV = eH(eB, et)
1217+ if ((gV == gV))
1218+ then {
1219+ let gW = invoke(this, "rebalance", nil, nil)
1220+ if ((gW == gW))
1221+ then $Tuple2((((en ++ gR) ++ hj) ++ gU), hh)
12421222 else throw("Strict value is not equal to itself.")
12431223 }
12441224 else throw("Strict value is not equal to itself.")
12451225 }
12461226 else throw("Strict value is not equal to itself.")
12471227 }
12481228 else throw("Strict value is not equal to itself.")
12491229 }
12501230 else throw("Strict value is not equal to itself.")
12511231 }
12521232 else throw("Strict value is not equal to itself.")
12531233 }
12541234
12551235
12561236
1257-@Callable(cq)
1258-func putForFree (gR) = if ((0 > gR))
1259- then throw("Wrong slpg")
1260- else if ((size(cq.payments) != 2))
1261- then throw("2 pmnts expd")
1262- else {
1263- let gS = eN(toString(cq.caller), toBase58String(cq.transactionId), AttachedPayment(value(cq.payments[0]).assetId, value(cq.payments[0]).amount), cq.payments[1], gR, false, false, true, 0, "")
1264- let dc = gS._9
1265- let gx = toBigInt(value(cq.payments[0]).amount)
1266- let gy = toBigInt(value(cq.payments[1]).amount)
1267- let et = em(gx, gy, toBigInt(0))
1268- if ((et == et))
1269- then {
1270- let gT = eu(0, 0, 0)
1271- let fK = gT._1
1272- let el = gT._2
1273- let fL = ey(et, el)
1274- if ((fL == fL))
1275- then (dc ++ fK)
1276- else throw("Strict value is not equal to itself.")
1277- }
1278- else throw("Strict value is not equal to itself.")
1279- }
1237+@Callable(eV)
1238+func putOneTknREADONLY (fk,fj) = {
1239+ let hm = fi(fj, bf(fk), unit, unit)
1240+ let hg = hm._1
1241+ let en = hm._2
1242+ let fh = hm._3
1243+ let hf = hm._4
1244+ let fo = hm._5
1245+ $Tuple2(nil, $Tuple3(hg, fh, hf))
1246+ }
12801247
12811248
12821249
1283-@Callable(cq)
1284-func get () = {
1285- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1286- if ((et == et))
1250+@Callable(eV)
1251+func getOneTkn (hn,gZ) = {
1252+ let hb = {
1253+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1254+ if ($isInstanceOf(aY, "Boolean"))
1255+ then aY
1256+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1257+ }
1258+ let ho = if (if (ba())
1259+ then true
1260+ else (bn == n))
1261+ then true
1262+ else hb
1263+ let fP = [if (if (!(ho))
1264+ then true
1265+ else gk(eV))
1266+ then true
1267+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 1))
1268+ then true
1269+ else aS("exactly 1 payment are expected")]
1270+ if ((fP == fP))
12871271 then {
1288- let dy = eL(cq)
1289- let gU = dy._1
1290- let db = dy._2
1291- let dn = dy._3
1292- let cG = dy._4
1293- let dc = dy._5
1294- let ea = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
1295- if ((ea == ea))
1272+ let fO = bf(hn)
1273+ let hd = eV.payments[0]
1274+ let fk = hd.assetId
1275+ let fw = hd.amount
1276+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1277+ if ((eB == eB))
12961278 then {
1297- let gV = eu(-(gU), -(db), 0)
1298- let fK = gV._1
1299- let el = gV._2
1300- let fL = ey(et, el)
1301- if ((fL == fL))
1302- then (dc ++ fK)
1279+ let ab = eV.caller
1280+ let ac = eV.transactionId
1281+ let hp = fN(fO, fw, fk, ab, ac)
1282+ if ((hp == hp))
1283+ then {
1284+ let fQ = hp._5
1285+ let hf = hp._4
1286+ let fh = hp._3
1287+ let en = hp._2
1288+ let hq = hp._1
1289+ let bY = if (if ((gZ > 0))
1290+ then (gZ > hq)
1291+ else false)
1292+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1293+ else hq
1294+ let hr = invoke(aV, "burn", [fw], [AttachedPayment(fk, fw)])
1295+ if ((hr == hr))
1296+ then {
1297+ let gF = cJ(hn, (bY + max([0, fh])))
1298+ let hs = [ScriptTransfer(ab, bY, fO)]
1299+ let hj = if ((fh > 0))
1300+ then [ScriptTransfer(aW, fh, fO)]
1301+ else nil
1302+ let ht = {
1303+ let hu = if ((this == aW))
1304+ then 0
1305+ else fh
1306+ if (fQ)
1307+ then $Tuple2(-((bY + hu)), 0)
1308+ else $Tuple2(0, -((bY + hu)))
1309+ }
1310+ let eD = ht._1
1311+ let eE = ht._2
1312+ let hv = eC(eD, eE, 0)
1313+ let gU = hv._1
1314+ let et = hv._2
1315+ let gV = eH(eB, et)
1316+ if ((gV == gV))
1317+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
1318+ else throw("Strict value is not equal to itself.")
1319+ }
1320+ else throw("Strict value is not equal to itself.")
1321+ }
13031322 else throw("Strict value is not equal to itself.")
13041323 }
13051324 else throw("Strict value is not equal to itself.")
13061325 }
13071326 else throw("Strict value is not equal to itself.")
13081327 }
13091328
13101329
13111330
1312-@Callable(cq)
1313-func getOneTknV2 (fn,fo) = {
1314- let gK = {
1315- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1316- if ($isInstanceOf(aK, "Boolean"))
1317- then aK
1318- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1319- }
1320- let gW = if (if (aN())
1321- then true
1322- else (bb == p))
1323- then true
1324- else gK
1325- let gk = [if (if (!(gW))
1326- then true
1327- else fQ(cq))
1328- then true
1329- else aF("get operation is blocked by admin"), if ((size(cq.payments) == 1))
1330- then true
1331- else aF("exactly 1 payment are expected")]
1332- if ((gk == gk))
1333- then {
1334- let gX = fm(fn, fo, cq.payments, cq.caller, cq.originCaller, cq.transactionId)
1335- let dc = gX._1
1336- let fx = gX._2
1337- $Tuple2(dc, fx)
1338- }
1339- else throw("Strict value is not equal to itself.")
1331+@Callable(eV)
1332+func getOneTknREADONLY (fO,fw) = {
1333+ let hw = fN(bf(fO), fw, bo, unit, unit)
1334+ let hq = hw._1
1335+ let en = hw._2
1336+ let fh = hw._3
1337+ let hf = hw._4
1338+ let fQ = hw._5
1339+ $Tuple2(nil, $Tuple3(hq, fh, hf))
13401340 }
13411341
13421342
13431343
1344-@Callable(cq)
1345-func refreshDLp () = {
1346- let gY = valueOrElse(getInteger(ag), 0)
1347- let gZ = if (((height - gY) >= aj))
1348- then unit
1349- else aF(makeString([toString(aj), " blocks have not passed since the previous call"], ""))
1350- if ((gZ == gZ))
1344+@Callable(eV)
1345+func unstakeAndGetOneTkn (hx,hn,gZ) = {
1346+ let hb = {
1347+ let aY = invoke(aV, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1348+ if ($isInstanceOf(aY, "Boolean"))
1349+ then aY
1350+ else throw(($getType(aY) + " couldn't be cast to Boolean"))
1351+ }
1352+ let ho = if (if (ba())
1353+ then true
1354+ else (bn == n))
1355+ then true
1356+ else hb
1357+ let fP = [if (if (!(ho))
1358+ then true
1359+ else gk(eV))
1360+ then true
1361+ else aS("get operation is blocked by admin"), if ((size(eV.payments) == 0))
1362+ then true
1363+ else aS("no payments are expected")]
1364+ if ((fP == fP))
13511365 then {
1352- let eF = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, af), "0")), aH("invalid dLp"))
1353- let ha = eu(0, 0, 0)
1354- let hb = ha._1
1355- let el = ha._2
1356- let ex = if ((eF != el))
1357- then hb
1358- else aF("nothing to refresh")
1359- $Tuple2(ex, toString(el))
1360- }
1361- else throw("Strict value is not equal to itself.")
1362- }
1363-
1364-
1365-
1366-@Callable(cq)
1367-func getOneTknV2READONLY (fn,hc) = {
1368- let cK = toBase58String(value(bd))
1369- let cL = toBase58String(value(be))
1370- let cJ = toBase58String(value(bc))
1371- let bZ = [toBigInt(bA(cK)), toBigInt(bA(cL))]
1372- let ek = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cJ)), "invalid lp asset").quantity)
1373- let dx = bY(bZ)
1374- let dz = (dx - fraction(toBigInt(hc), dx, ek))
1375- let hd = if ((fn == cK))
1376- then 0
1377- else if ((fn == cL))
1378- then 1
1379- else throw("invalid out asset id")
1380- let he = dU(bZ, hd, dz)
1381- let gd = (bZ[hd] - he)
1382- let ge = max([0, toInt((gd - f))])
1383- let hf = bV(ge, aL)
1384- let fw = hf._1
1385- let bX = hf._2
1386- $Tuple2(nil, $Tuple2(fw, bX))
1387- }
1388-
1389-
1390-
1391-@Callable(cq)
1392-func getOneTknV2WithBonusREADONLY (fn,hc) = {
1393- let cK = toBase58String(value(bd))
1394- let cL = toBase58String(value(be))
1395- let cJ = toBase58String(value(bc))
1396- let cQ = bA(cK)
1397- let cS = bA(cL)
1398- let hg = {
1399- let aK = invoke(this, "getOneTknV2READONLY", [fn, hc], nil)
1400- if ($isInstanceOf(aK, "(Int, Int)"))
1401- then aK
1402- else throw(($getType(aK) + " couldn't be cast to (Int, Int)"))
1403- }
1404- let fw = hg._1
1405- let bX = hg._2
1406- let dy = cE("", cJ, hc, this)
1407- let da = dy._1
1408- let db = dy._2
1409- let hh = (da + db)
1410- let fl = if ((hh == 0))
1411- then if ((fw == 0))
1412- then 0
1413- else throw("bonus calculation error")
1414- else fraction((fw - hh), a, hh)
1415- $Tuple2(nil, $Tuple3(fw, bX, fl))
1416- }
1417-
1418-
1419-
1420-@Callable(cq)
1421-func getNoLess (hi,hj) = {
1422- let dy = eL(cq)
1423- let da = dy._1
1424- let db = dy._2
1425- let dn = dy._3
1426- let cG = dy._4
1427- let dc = dy._5
1428- if ((hi > da))
1429- then throw(((("Failed: " + toString(da)) + " < ") + toString(hi)))
1430- else if ((hj > db))
1431- then throw(((("Failed: " + toString(db)) + " < ") + toString(hj)))
1432- else {
1433- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1434- if ((et == et))
1435- then {
1436- let hk = invoke(aI, "burn", [dn], [AttachedPayment(cG, dn)])
1437- if ((hk == hk))
1438- then {
1439- let hl = eu(-(da), -(db), 0)
1440- let fK = hl._1
1441- let el = hl._2
1442- let fL = ey(et, el)
1443- if ((fL == fL))
1444- then (dc ++ fK)
1445- else throw("Strict value is not equal to itself.")
1446- }
1447- else throw("Strict value is not equal to itself.")
1448- }
1449- else throw("Strict value is not equal to itself.")
1450- }
1451- }
1452-
1453-
1454-
1455-@Callable(cq)
1456-func unstakeAndGet (bW) = {
1457- let hm = if ((size(cq.payments) != 0))
1458- then throw("No pmnts expd")
1459- else true
1460- if ((hm == hm))
1461- then {
1462- let hn = bh()
1463- let gA = bc
1464- let ho = valueOrErrorMessage(addressFromString(hn[x]), "Wr st addr")
1465- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1466- if ((et == et))
1366+ let fO = bf(hn)
1367+ let ab = eV.caller
1368+ let ac = eV.transactionId
1369+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1370+ if ((eB == eB))
14671371 then {
1468- let hp = invoke(ho, "unstake", [toBase58String(gA), bW], nil)
1469- if ((hp == hp))
1372+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1373+ if ((hy == hy))
14701374 then {
1471- let dy = cE(toBase58String(cq.transactionId), toBase58String(gA), bW, cq.caller)
1472- let da = dy._1
1473- let db = dy._2
1474- let cO = parseIntValue(dy._9)
1475- let dc = dy._10
1476- let hq = if (if (aN())
1477- then true
1478- else (cO == p))
1479- then throw(("Blocked: " + toString(cO)))
1480- else true
1481- if ((hq == hq))
1375+ let hz = fN(fO, hx, bo, ab, ac)
1376+ if ((hz == hz))
14821377 then {
1483- let hr = invoke(aI, "burn", [bW], [AttachedPayment(gA, bW)])
1378+ let fQ = hz._5
1379+ let hf = hz._4
1380+ let fh = hz._3
1381+ let en = hz._2
1382+ let hq = hz._1
1383+ let bY = if (if ((gZ > 0))
1384+ then (gZ > hq)
1385+ else false)
1386+ then aS(makeString(["amount to receive is less than ", toString(gZ)], ""))
1387+ else hq
1388+ let hr = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
14841389 if ((hr == hr))
14851390 then {
1486- let hs = eu(-(da), -(db), 0)
1487- let fK = hs._1
1488- let el = hs._2
1489- let fL = ey(et, el)
1490- if ((fL == fL))
1491- then (dc ++ fK)
1391+ let gF = cJ(hn, (bY + max([0, fh])))
1392+ let hs = [ScriptTransfer(eV.caller, bY, fO)]
1393+ let hj = if ((fh > 0))
1394+ then [ScriptTransfer(aW, fh, fO)]
1395+ else nil
1396+ let hA = {
1397+ let hu = if ((this == aW))
1398+ then 0
1399+ else fh
1400+ if (fQ)
1401+ then $Tuple2(-((bY + hu)), 0)
1402+ else $Tuple2(0, -((bY + hu)))
1403+ }
1404+ let eD = hA._1
1405+ let eE = hA._2
1406+ let hB = eC(eD, eE, 0)
1407+ let gU = hB._1
1408+ let et = hB._2
1409+ let gV = eH(eB, et)
1410+ if ((gV == gV))
1411+ then $Tuple2(((((en ++ gF) ++ hs) ++ hj) ++ gU), bY)
14921412 else throw("Strict value is not equal to itself.")
14931413 }
14941414 else throw("Strict value is not equal to itself.")
14951415 }
14961416 else throw("Strict value is not equal to itself.")
14971417 }
14981418 else throw("Strict value is not equal to itself.")
14991419 }
15001420 else throw("Strict value is not equal to itself.")
15011421 }
15021422 else throw("Strict value is not equal to itself.")
15031423 }
15041424
15051425
15061426
1507-@Callable(cq)
1508-func unstakeAndGetNoLess (ht,hu,hj) = {
1509- let gW = if (aN())
1510- then true
1511- else (bb == p)
1512- let gk = [if (!(gW))
1513- then true
1514- else throw("get operation is blocked by admin"), if ((size(cq.payments) == 0))
1515- then true
1516- else throw("no payments are expected")]
1517- if ((gk == gk))
1427+@Callable(eV)
1428+func get () = {
1429+ let dY = eU(eV)
1430+ let dE = dY._1
1431+ let dF = dY._2
1432+ let eX = dY._3
1433+ let dn = dY._4
1434+ let dG = dY._5
1435+ let gF = cO(dE, dF)
1436+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1437+ if ((eB == eB))
15181438 then {
1519- let et = em(toBigInt(0), toBigInt(0), toBigInt(0))
1520- if ((et == et))
1439+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1440+ if ((hC == hC))
15211441 then {
1522- let hp = invoke(bj, "unstake", [toBase58String(bc), ht], nil)
1523- if ((hp == hp))
1442+ let hD = eC(-(dE), -(dF), 0)
1443+ let gU = hD._1
1444+ let et = hD._2
1445+ let gV = eH(eB, et)
1446+ if ((gV == gV))
1447+ then ((gF ++ dG) ++ gU)
1448+ else throw("Strict value is not equal to itself.")
1449+ }
1450+ else throw("Strict value is not equal to itself.")
1451+ }
1452+ else throw("Strict value is not equal to itself.")
1453+ }
1454+
1455+
1456+
1457+@Callable(eV)
1458+func getNoLess (hE,hF) = {
1459+ let dY = eU(eV)
1460+ let dE = dY._1
1461+ let dF = dY._2
1462+ let eX = dY._3
1463+ let dn = dY._4
1464+ let dG = dY._5
1465+ if ((hE > dE))
1466+ then throw(((("noLessThenAmtAsset failed: " + toString(dE)) + " < ") + toString(hE)))
1467+ else if ((hF > dF))
1468+ then throw(((("noLessThenPriceAsset failed: " + toString(dF)) + " < ") + toString(hF)))
1469+ else {
1470+ let gF = cO(dE, dF)
1471+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1472+ if ((eB == eB))
1473+ then {
1474+ let hC = invoke(aV, "burn", [eX], [AttachedPayment(dn, eX)])
1475+ if ((hC == hC))
1476+ then {
1477+ let hG = eC(-(dE), -(dF), 0)
1478+ let gU = hG._1
1479+ let et = hG._2
1480+ let gV = eH(eB, et)
1481+ if ((gV == gV))
1482+ then ((gF ++ dG) ++ gU)
1483+ else throw("Strict value is not equal to itself.")
1484+ }
1485+ else throw("Strict value is not equal to itself.")
1486+ }
1487+ else throw("Strict value is not equal to itself.")
1488+ }
1489+ }
1490+
1491+
1492+
1493+@Callable(eV)
1494+func unstakeAndGet (bY) = {
1495+ let hH = if ((size(eV.payments) != 0))
1496+ then throw("No payments are expected")
1497+ else true
1498+ if ((hH == hH))
1499+ then {
1500+ let dc = bc()
1501+ let dp = fromBase58String(dc[q])
1502+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1503+ if ((eB == eB))
1504+ then {
1505+ let hy = invoke(bu, "unstake", [toBase58String(dp), bY], nil)
1506+ if ((hy == hy))
15241507 then {
1525- let hv = cE(toBase58String(cq.transactionId), toBase58String(bc), ht, cq.caller)
1526- let da = hv._1
1527- let db = hv._2
1528- let dc = hv._10
1529- let hw = [if ((da >= hu))
1508+ let dY = dl(toBase58String(eV.transactionId), toBase58String(dp), bY, eV.caller)
1509+ let dE = dY._1
1510+ let dF = dY._2
1511+ let ds = parseIntValue(dY._9)
1512+ let dG = dY._10
1513+ let gF = cO(dE, dF)
1514+ let hI = if (if (ba())
15301515 then true
1531- else throw(makeString(["amount asset amount to receive is less than ", toString(hu)], "")), if ((db >= hj))
1532- then true
1533- else throw(makeString(["price asset amount to receive is less than ", toString(hj)], ""))]
1534- if ((hw == hw))
1516+ else (ds == n))
1517+ then throw(("Get operation is blocked by admin. Status = " + toString(ds)))
1518+ else true
1519+ if ((hI == hI))
15351520 then {
1536- let hk = invoke(aI, "burn", [ht], [AttachedPayment(bc, ht)])
1537- if ((hk == hk))
1521+ let hC = invoke(aV, "burn", [bY], [AttachedPayment(dp, bY)])
1522+ if ((hC == hC))
15381523 then {
1539- let hx = eu(-(da), -(db), 0)
1540- let fK = hx._1
1541- let el = hx._2
1542- let fL = ey(et, el)
1543- if ((fL == fL))
1544- then (dc ++ fK)
1524+ let hJ = eC(-(dE), -(dF), 0)
1525+ let gU = hJ._1
1526+ let et = hJ._2
1527+ let gV = eH(eB, et)
1528+ if ((gV == gV))
1529+ then ((gF ++ dG) ++ gU)
15451530 else throw("Strict value is not equal to itself.")
15461531 }
15471532 else throw("Strict value is not equal to itself.")
15481533 }
15491534 else throw("Strict value is not equal to itself.")
15501535 }
15511536 else throw("Strict value is not equal to itself.")
15521537 }
15531538 else throw("Strict value is not equal to itself.")
15541539 }
15551540 else throw("Strict value is not equal to itself.")
15561541 }
15571542
15581543
15591544
1560-@Callable(cq)
1561-func unstakeAndGetOneTknV2 (ht,fn,fo) = {
1562- let gK = {
1563- let aK = invoke(aI, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1564- if ($isInstanceOf(aK, "Boolean"))
1565- then aK
1566- else throw(($getType(aK) + " couldn't be cast to Boolean"))
1567- }
1568- let gW = if (if (aN())
1545+@Callable(eV)
1546+func unstakeAndGetNoLess (hx,hK,hF) = {
1547+ let ho = if (ba())
15691548 then true
1570- else (bb == p))
1549+ else (bn == n)
1550+ let fP = [if (!(ho))
15711551 then true
1572- else gK
1573- let gk = [if (if (!(gW))
1552+ else throw("get operation is blocked by admin"), if ((size(eV.payments) == 0))
15741553 then true
1575- else fQ(cq))
1576- then true
1577- else aF("get operation is blocked by admin"), if ((size(cq.payments) == 0))
1578- then true
1579- else aF("no payments are expected")]
1580- if ((gk == gk))
1554+ else throw("no payments are expected")]
1555+ if ((fP == fP))
15811556 then {
1582- let hn = bh()
1583- let gA = bc
1584- let ho = valueOrErrorMessage(addressFromString(hn[x]), "Wr st addr")
1585- let cI = cq.caller
1586- let hy = this
1587- let hp = invoke(ho, "unstakeINTERNAL", [gA, ht, cI.bytes, hy.bytes], nil)
1588- if ((hp == hp))
1557+ let eB = eu(toBigInt(0), toBigInt(0), toBigInt(0))
1558+ if ((eB == eB))
15891559 then {
1590- let hz = fm(fn, fo, [AttachedPayment(gA, ht)], cq.caller, cq.originCaller, cq.transactionId)
1591- let dc = hz._1
1592- let fx = hz._2
1593- $Tuple2(dc, fx)
1560+ let hy = invoke(bu, "unstake", [toBase58String(bo), hx], nil)
1561+ if ((hy == hy))
1562+ then {
1563+ let dY = dl(toBase58String(eV.transactionId), toBase58String(bo), hx, eV.caller)
1564+ let dE = dY._1
1565+ let dF = dY._2
1566+ let dG = dY._10
1567+ let gF = cO(dE, dF)
1568+ let hL = [if ((dE >= hK))
1569+ then true
1570+ else throw(makeString(["amount asset amount to receive is less than ", toString(hK)], "")), if ((dF >= hF))
1571+ then true
1572+ else throw(makeString(["price asset amount to receive is less than ", toString(hF)], ""))]
1573+ if ((hL == hL))
1574+ then {
1575+ let hC = invoke(aV, "burn", [hx], [AttachedPayment(bo, hx)])
1576+ if ((hC == hC))
1577+ then {
1578+ let hM = eC(-(dE), -(dF), 0)
1579+ let gU = hM._1
1580+ let et = hM._2
1581+ let gV = eH(eB, et)
1582+ if ((gV == gV))
1583+ then ((gF ++ dG) ++ gU)
1584+ else throw("Strict value is not equal to itself.")
1585+ }
1586+ else throw("Strict value is not equal to itself.")
1587+ }
1588+ else throw("Strict value is not equal to itself.")
1589+ }
1590+ else throw("Strict value is not equal to itself.")
15941591 }
15951592 else throw("Strict value is not equal to itself.")
15961593 }
15971594 else throw("Strict value is not equal to itself.")
15981595 }
15991596
16001597
16011598
1602-@Callable(cq)
1603-func putOneTknV2WithBonusREADONLY (hA,hB) = {
1604- let hC = eR(hA, hB, "", "", true)
1605- let fg = hC._1
1606- let dc = hC._2
1607- let bX = hC._3
1608- let fl = hC._4
1609- $Tuple2(nil, $Tuple3(fg, bX, fl))
1599+@Callable(eV)
1600+func activate (hN,hO) = if ((toString(eV.caller) != toString(aV)))
1601+ then throw("permissions denied")
1602+ else $Tuple2([StringEntry(ae(), hN), StringEntry(af(), hO)], "success")
1603+
1604+
1605+
1606+@Callable(eV)
1607+func refreshKLp () = {
1608+ let hP = valueOrElse(getInteger(ak), 0)
1609+ let hQ = if (((height - hP) >= an))
1610+ then unit
1611+ else aS(makeString([toString(an), " blocks have not passed since the previous call"], ""))
1612+ if ((hQ == hQ))
1613+ then {
1614+ let eO = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aU("invalid kLp"))
1615+ let hR = eC(0, 0, 0)
1616+ let hS = hR._1
1617+ let et = hR._2
1618+ let eF = if ((eO != et))
1619+ then hS
1620+ else aS("nothing to refresh")
1621+ $Tuple2(eF, toString(et))
1622+ }
1623+ else throw("Strict value is not equal to itself.")
16101624 }
16111625
16121626
16131627
1614-@Callable(cq)
1615-func putOneTknV2WithoutTakeFeeREADONLY (hA,hB) = {
1616- let hD = eR(hA, hB, "", "", false)
1617- let fg = hD._1
1618- let dc = hD._2
1619- let bX = hD._3
1620- let fl = hD._4
1621- $Tuple2(nil, $Tuple3(fg, bX, fl))
1628+@Callable(eV)
1629+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, bc())
1630+
1631+
1632+
1633+@Callable(eV)
1634+func getAccBalanceWrapperREADONLY (ap) = $Tuple2(nil, bL(ap))
1635+
1636+
1637+
1638+@Callable(eV)
1639+func calcPricesWrapperREADONLY (cW,cX,db) = {
1640+ let dk = da(cW, cX, db)
1641+ $Tuple2(nil, [toString(dk[0]), toString(dk[1]), toString(dk[2])])
16221642 }
16231643
16241644
16251645
1626-@Callable(cq)
1627-func activate (hE,hF) = if ((toString(cq.caller) != toString(aI)))
1628- then throw("denied")
1629- else $Tuple2([StringEntry(X(), hE), StringEntry(Y(), hF), StringEntry(Z(), toString(k))], "success")
1646+@Callable(eV)
1647+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
16301648
16311649
16321650
1633-@Callable(cq)
1634-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aQ())
1651+@Callable(eV)
1652+func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
16351653
16361654
16371655
1638-@Callable(cq)
1639-func getAccBalanceWrapperREADONLY (bB) = $Tuple2(nil, bA(bB))
1656+@Callable(eV)
1657+func calcPriceBigIntWrapperREADONLY (bP,bQ) = $Tuple2(nil, toString(bO(parseBigIntValue(bP), parseBigIntValue(bQ))))
16401658
16411659
16421660
1643-@Callable(cq)
1644-func calcPricesWrapperREADONLY (bJ,bK,bO) = {
1645- let hG = bN(bJ, bK, bO)
1646- $Tuple2(nil, [toString(hG[0]), toString(hG[1]), toString(hG[2])])
1661+@Callable(eV)
1662+func estimatePutOperationWrapperREADONLY (dm,dI,dJ,dK,dL,dM,ab,dN,dO) = $Tuple2(nil, dH(dm, dI, dJ, dK, dL, dM, ab, dN, dO))
1663+
1664+
1665+
1666+@Callable(eV)
1667+func estimateGetOperationWrapperREADONLY (dm,dn,do,ab) = {
1668+ let dY = dl(dm, dn, do, addressFromStringValue(ab))
1669+ $Tuple2(nil, $Tuple10(dY._1, dY._2, dY._3, dY._4, dY._5, dY._6, dY._7, toString(dY._8), dY._9, dY._10))
16471670 }
16481671
16491672
16501673
1651-@Callable(cq)
1652-func fromX18WrapperREADONLY (G,hH) = $Tuple2(nil, F(parseBigIntValue(G), hH))
1653-
1654-
1655-
1656-@Callable(cq)
1657-func toX18WrapperREADONLY (C,D) = $Tuple2(nil, toString(B(C, D)))
1658-
1659-
1660-
1661-@Callable(cq)
1662-func calcPriceBigIntWrapperREADONLY (bD,bE) = $Tuple2(nil, toString(bC(parseBigIntValue(bD), parseBigIntValue(bE))))
1663-
1664-
1665-
1666-@Callable(cq)
1667-func estimatePutOperationWrapperREADONLY (cF,de,df,dg,dh,di,hI,dj,dk) = $Tuple2(nil, dd(cF, de, df, dg, dh, di, hI, dj, dk, true, false, 0, ""))
1668-
1669-
1670-
1671-@Callable(cq)
1672-func estimateGetOperationWrapperREADONLY (cF,hJ,cH,hI) = {
1673- let dy = cE(cF, hJ, cH, addressFromStringValue(hI))
1674- $Tuple2(nil, $Tuple10(dy._1, dy._2, dy._3, dy._4, dy._5, dy._6, dy._7, toString(dy._8), dy._9, dy._10))
1674+@Callable(eV)
1675+func statsREADONLY () = {
1676+ let dc = bc()
1677+ let dp = fromBase58String(dc[q])
1678+ let hT = dc[r]
1679+ let hU = dc[s]
1680+ let dR = dc[v]
1681+ let dS = dc[w]
1682+ let dd = parseIntValue(dc[t])
1683+ let de = parseIntValue(dc[u])
1684+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1685+ let hW = bL(hT)
1686+ let hX = bL(hU)
1687+ let hY = if ((hV == 0))
1688+ then [e, e, e]
1689+ else da(hW, hX, hV)
1690+ let dz = 0
1691+ let hZ = H(hY[1], b)
1692+ let ia = H(hY[2], b)
1693+ let ib = value(getInteger(aV, aD(toString(this))))
1694+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(hW), toString(hX), toString(hV), toString(dz), toString(hZ), toString(ia), toString(ib)], j))
16751695 }
16761696
16771697
16781698
1679-@Callable(cq)
1680-func changeAmp () = {
1681- let hK = invoke(aI, "getChangeAmpConfigREADONLY", [toString(this)], nil)
1682- let hL = {
1683- let fN = hK
1684- if ($isInstanceOf(fN, "List[Any]"))
1685- then {
1686- let hM = fN
1687- $Tuple3({
1688- let aK = hM[0]
1689- if ($isInstanceOf(aK, "Int"))
1690- then aK
1691- else throw(($getType(aK) + " couldn't be cast to Int"))
1692- }, {
1693- let aK = hM[1]
1694- if ($isInstanceOf(aK, "Int"))
1695- then aK
1696- else throw(($getType(aK) + " couldn't be cast to Int"))
1697- }, {
1698- let aK = hM[2]
1699- if ($isInstanceOf(aK, "Int"))
1700- then aK
1701- else throw(($getType(aK) + " couldn't be cast to Int"))
1702- })
1703- }
1704- else aF("invalid entry type")
1705- }
1706- let hN = hL._1
1707- let hO = hL._2
1708- let hP = hL._3
1709- let hQ = parseIntValue(getStringValue(Z()))
1710- let hR = (hQ + hO)
1711- let hS = if ((0 > hO))
1712- then if ((hP > hR))
1713- then hP
1714- else hR
1715- else if ((hR > hP))
1716- then hP
1717- else hR
1718- let hT = valueOrElse(getInteger(ac()), 0)
1719- let hU = (hT + hN)
1720- let gk = [if ((height > hU))
1721- then true
1722- else aF("try again in few blocks"), if ((hQ != hS))
1723- then true
1724- else aF("already reached target")]
1725- if ((gk == gk))
1726- then [IntegerEntry(ac(), height), StringEntry(Z(), toString(hS)), StringEntry(aa(height), toString(hS))]
1727- else throw("Strict value is not equal to itself.")
1699+@Callable(eV)
1700+func evaluatePutByAmountAssetREADONLY (dJ) = {
1701+ let dc = bc()
1702+ let dp = fromBase58String(dc[q])
1703+ let dP = dc[r]
1704+ let dq = fromBase58String(dP)
1705+ let dQ = dc[s]
1706+ let dr = fromBase58String(dQ)
1707+ let dd = parseIntValue(dc[t])
1708+ let de = parseIntValue(dc[u])
1709+ let ds = dc[p]
1710+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1711+ let hW = bL(dP)
1712+ let hX = bL(dQ)
1713+ let cY = D(hW, dd)
1714+ let cZ = D(hX, de)
1715+ let dy = if ((hV == 0))
1716+ then e
1717+ else bO(cZ, cY)
1718+ let dV = D(dJ, dd)
1719+ let dW = fraction(dV, dy, d)
1720+ let dL = H(dW, de)
1721+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1722+ let eg = fb._1
1723+ let ic = fb._3
1724+ let du = fb._4
1725+ let dw = fb._5
1726+ let dt = fb._6
1727+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
17281728 }
17291729
17301730
1731-@Verifier(hV)
1732-func hW () = {
1733- let hX = {
1734- let fN = fM()
1735- if ($isInstanceOf(fN, "ByteVector"))
1731+
1732+@Callable(eV)
1733+func evaluatePutByPriceAssetREADONLY (dL) = {
1734+ let dc = bc()
1735+ let dp = fromBase58String(dc[q])
1736+ let dP = dc[r]
1737+ let dq = fromBase58String(dP)
1738+ let dQ = dc[s]
1739+ let dr = fromBase58String(dQ)
1740+ let dd = parseIntValue(dc[t])
1741+ let de = parseIntValue(dc[u])
1742+ let ds = dc[p]
1743+ let hV = valueOrErrorMessage(assetInfo(dp), (("Asset " + toBase58String(dp)) + " doesn't exist")).quantity
1744+ let id = bL(dP)
1745+ let ie = bL(dQ)
1746+ let if = D(id, dd)
1747+ let ig = D(ie, de)
1748+ let dy = if ((hV == 0))
1749+ then e
1750+ else bO(ig, if)
1751+ let dW = D(dL, de)
1752+ let dV = fraction(dW, d, dy)
1753+ let dJ = H(dV, dd)
1754+ let fb = dH("", 500000, dJ, dq, dL, dr, "", true, false)
1755+ let eg = fb._1
1756+ let ic = fb._3
1757+ let du = fb._4
1758+ let dw = fb._5
1759+ let dt = fb._6
1760+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(eg), toString(H(dy, b)), toString(du), toString(dw), toString(dt), ds, toString(dJ), toString(dL)], j))
1761+ }
1762+
1763+
1764+
1765+@Callable(eV)
1766+func evaluateGetREADONLY (ih,ii) = {
1767+ let dY = dl("", ih, ii, this)
1768+ let dE = dY._1
1769+ let dF = dY._2
1770+ let du = dY._5
1771+ let dw = dY._6
1772+ let dt = dY._7
1773+ let dz = dY._8
1774+ let ds = parseIntValue(dY._9)
1775+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(dE), toString(dF), toString(du), toString(dw), toString(dt), toString(dz), toString(ds)], j))
1776+ }
1777+
1778+
1779+@Verifier(ij)
1780+func ik () = {
1781+ let il = {
1782+ let bV = gh()
1783+ if ($isInstanceOf(bV, "ByteVector"))
17361784 then {
1737- let fR = fN
1738- fR
1785+ let gl = bV
1786+ gl
17391787 }
1740- else if ($isInstanceOf(fN, "Unit"))
1741- then hV.senderPublicKey
1788+ else if ($isInstanceOf(bV, "Unit"))
1789+ then ij.senderPublicKey
17421790 else throw("Match error")
17431791 }
1744- let fN = hV
1745- if ($isInstanceOf(fN, "Order"))
1792+ let bV = ij
1793+ if ($isInstanceOf(bV, "Order"))
17461794 then {
1747- let eB = fN
1748- let hY = aO()
1749- let hZ = if (fY())
1795+ let eK = bV
1796+ let im = bb()
1797+ let in = if (eG())
17501798 then $Tuple2(true, "")
1751- else eA(eB)
1752- let ax = hZ._1
1753- let ay = hZ._2
1754- let az = sigVerify(eB.bodyBytes, eB.proofs[0], eB.senderPublicKey)
1755- let aA = sigVerify(eB.bodyBytes, eB.proofs[1], hY)
1756- if (if (if (ax)
1757- then az
1799+ else eJ(eK)
1800+ let aK = in._1
1801+ let aL = in._2
1802+ let aM = sigVerify(eK.bodyBytes, eK.proofs[0], eK.senderPublicKey)
1803+ let aN = sigVerify(eK.bodyBytes, eK.proofs[1], im)
1804+ if (if (if (aK)
1805+ then aM
17581806 else false)
1759- then aA
1807+ then aN
17601808 else false)
17611809 then true
1762- else aw(ax, ay, az, aA)
1810+ else aJ(aK, aL, aM, aN)
17631811 }
1764- else if ($isInstanceOf(fN, "SetScriptTransaction"))
1812+ else if ($isInstanceOf(bV, "SetScriptTransaction"))
17651813 then {
1766- let cc = fN
1767- if (sigVerify(hV.bodyBytes, hV.proofs[0], hX))
1814+ let gi = bV
1815+ if (sigVerify(ij.bodyBytes, ij.proofs[0], il))
17681816 then true
17691817 else {
1770- let ia = blake2b256(value(cc.script))
1771- let ib = fromBase64String(value(getString(aI, as())))
1772- let ic = scriptHash(this)
1773- if ((ib == ia))
1774- then (ic != ia)
1818+ let io = blake2b256(value(gi.script))
1819+ let ip = fromBase64String(value(getString(aV, aF())))
1820+ let iq = scriptHash(this)
1821+ if ((ip == io))
1822+ then (iq != io)
17751823 else false
17761824 }
17771825 }
1778- else sigVerify(hV.bodyBytes, hV.proofs[0], hX)
1826+ else sigVerify(ij.bodyBytes, ij.proofs[0], il)
17791827 }
17801828

github/deemru/w8io/3ef1775 
475.50 ms