tx · BsGwywhvbnhkgAyFjV2je9hvMEXEcbsRZvv6j75QzSK4

3MpHzJ37KHNWPLWooSuAFmuzL3EUXt86qQw:  -0.02900000 Waves

2022.10.26 09:37 [2289040] smart account 3MpHzJ37KHNWPLWooSuAFmuzL3EUXt86qQw > SELF 0.00000000 Waves

{ "type": 13, "id": "BsGwywhvbnhkgAyFjV2je9hvMEXEcbsRZvv6j75QzSK4", "fee": 2900000, "feeAssetId": null, "timestamp": 1666766061000, "version": 1, "sender": "3MpHzJ37KHNWPLWooSuAFmuzL3EUXt86qQw", "senderPublicKey": "4gxnZwoAfBVeM48WyrZLy16TAaS7CUtppRoDqbadsKeA", "proofs": [ "4BuR7PJjZCsL4grP4yxXypatbyyAEs7kbi3pi8RJ21jmDxspCdoDW1KoJf987RTy3PVHLSURR8kw2oSQQdGWQsHW" ], "script": "base64:BgKfJwgCEgMKAQgSABIECgIBBBIDCgEBEgQKAgEEEgQKAggBEgQKAggBEgQKAggBEgUKAwEIARIAEgQKAgEBEgMKAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiB2Zyb21YMTgiA3ZhbCIPcmVzdWx0U2NhbGVNdWx0Igd0b1NjYWxlIgNhbXQiCHJlc1NjYWxlIghjdXJTY2FsZSIDYWJzIglhYnNCaWdJbnQiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIGa2V5RmVlIgpmZWVEZWZhdWx0IgNmZWUiEGtleUZhY3RvcnlDb25maWciDWtleU1hdGNoZXJQdWIiKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzIhNwb29sQ29udHJhY3RBZGRyZXNzIg1rZXlQb29sQ29uZmlnIglpQW10QXNzZXQiC2lQcmljZUFzc2V0Ih9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkIgxiYXNlQXNzZXRTdHIiE2tleUFsbFBvb2xzU2h1dGRvd24iDWtleVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIWa2V5QWxsb3dlZExwU2NyaXB0SGFzaCIWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcyIPdGhyb3dPcmRlckVycm9yIgpvcmRlclZhbGlkIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIg9nZXRTdHJpbmdPckZhaWwiB2FkZHJlc3MiA2tleSIMZ2V0SW50T3JGYWlsIgh0aHJvd0VyciIDbXNnIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiEGlzR2xvYmFsU2h1dGRvd24iE2dldE1hdGNoZXJQdWJPckZhaWwiDWdldFBvb2xDb25maWciCGFtdEFzc2V0IgpwcmljZUFzc2V0IgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwNzU0Mzc3MDkiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhBnZXRGYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiEHNsaXBwYWdlQ29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIiFXNsaXBwYWdlVG9sZXJhbmNlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIhJzbGlwYWdlQW10QXNzZXRBbXQiFHNsaXBhZ2VQcmljZUFzc2V0QW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiD2NhbGNQcmljZUJpZ0ludCIIcHJBbXRYMTgiCGFtQW10WDE4IhBwcml2YXRlQ2FsY1ByaWNlIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiDmFtdEFzc2V0QW10WDE4IhBwcmljZUFzc2V0QW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIDY2ZnIgthbXRBc3NldERjbSINcHJpY2VBc3NldERjbSIIcHJpY2VYMTgiCGxwQW10WDE4IhNscFByaWNlSW5BbUFzc2V0WDE4IhNscFByaWNlSW5QckFzc2V0WDE4Ig9jYWxjdWxhdGVQcmljZXMiBnByaWNlcyIUZXN0aW1hdGVHZXRPcGVyYXRpb24iBnR4SWQ1OCIKcG10QXNzZXRJZCIIcG10THBBbXQiCWxwQXNzZXRJZCIJYW1Bc3NldElkIglwckFzc2V0SWQiCnBvb2xTdGF0dXMiCmxwRW1pc3Npb24iCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCINbHBFbWlzc2lvblgxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIhRlc3RpbWF0ZVB1dE9wZXJhdGlvbiIRc2xpcHBhZ2VUb2xlcmFuY2UiDGluQW1Bc3NldEFtdCILaW5BbUFzc2V0SWQiDGluUHJBc3NldEFtdCILaW5QckFzc2V0SWQiCmlzRXZhbHVhdGUiBmVtaXRMcCIMYW1Bc3NldElkU3RyIgxwckFzc2V0SWRTdHIiC2lBbXRBc3NldElkIg1pUHJpY2VBc3NldElkIg5pbkFtQXNzZXRJZFN0ciIOaW5QckFzc2V0SWRTdHIiD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiA3JlcyILc2xpcHBhZ2VYMTgiFHNsaXBwYWdlVG9sZXJhbmNlWDE4IgpwclZpYUFtWDE4IgphbVZpYVByWDE4IgxleHBlY3RlZEFtdHMiEWV4cEFtdEFzc2V0QW10WDE4IhNleHBQcmljZUFzc2V0QW10WDE4IgljYWxjTHBBbXQiDmNhbGNBbUFzc2V0UG10Ig5jYWxjUHJBc3NldFBtdCIMc2xpcHBhZ2VDYWxjIgllbWl0THBBbXQiBmFtRGlmZiIGcHJEaWZmIgtjb21tb25TdGF0ZSIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIhJhY2NBbXRBc3NldEJhbGFuY2UiFGFjY1ByaWNlQXNzZXRCYWxhbmNlIg1vcmRlckFtdEFzc2V0IhBvcmRlckFtdEFzc2V0U3RyIg9vcmRlclByaWNlQXNzZXQiEm9yZGVyUHJpY2VBc3NldFN0ciIKb3JkZXJQcmljZSIIcHJpY2VEY20iEGNhc3RlZE9yZGVyUHJpY2UiEWlzT3JkZXJQcmljZVZhbGlkIgljb21tb25HZXQiAWkiA3BtdCIGcG10QW10Igljb21tb25QdXQiCmFtQXNzZXRQbXQiCnByQXNzZXRQbXQiBmVzdFB1dCIEZW1pdCIGYW1vdW50IgdlbWl0SW52Ig1lbWl0SW52TGVnYWN5IgckbWF0Y2gwIhVsZWdhY3lGYWN0b3J5Q29udHJhY3QiB3Rha2VGZWUiCWZlZUFtb3VudCIPY2FsY1B1dE9uZVRva2VuIhBwYXltZW50QW1vdW50UmF3Ig5wYXltZW50QXNzZXRJZCIGaXNFdmFsIg0kdDAyMjIzMjIyNDEwIgtwb29sQWRkcmVzcyINYW1vdW50QXNzZXRJZCITYW1vdW50QXNzZXREZWNpbWFscyIScHJpY2VBc3NldERlY2ltYWxzIhBhbW91bnRCYWxhbmNlUmF3Ig9wcmljZUJhbGFuY2VSYXciFHBheW1lbnRJbkFtb3VudEFzc2V0Ig0kdDAyMjc0MDIzMDMzIhBhbW91bnRCYWxhbmNlT2xkIg9wcmljZUJhbGFuY2VPbGQiDSR0MDIzMDM3MjMxODYiFGFtb3VudEFzc2V0QW1vdW50UmF3IhNwcmljZUFzc2V0QW1vdW50UmF3IhFhbW91bnRBc3NldEFtb3VudCIQcHJpY2VBc3NldEFtb3VudCINJHQwMjMzMDgyMzM2NyINcGF5bWVudEFtb3VudCIQYW1vdW50QmFsYW5jZU5ldyIPcHJpY2VCYWxhbmNlTmV3IgtwcmljZU5ld1gxOCIIcHJpY2VOZXciDnBheW1lbnRCYWxhbmNlIhRwYXltZW50QmFsYW5jZUJpZ0ludCIMc3VwcGx5QmlnSW50IgtjaGVjaFN1cHBseSINZGVwb3NpdEJpZ0ludCILaXNzdWVBbW91bnQiC3ByaWNlT2xkWDE4IghwcmljZU9sZCILcHJpY2VJbXBhY3QiD2NhbGNHZXRPbmVUb2tlbiIKb3V0QXNzZXRJZCINJHQwMjUxODkyNTM1MCIKYW1EZWNpbWFscyIKcHJEZWNpbWFscyIGY2hlY2tzIhBvdXRJbkFtb3VudEFzc2V0Ig1iYWxhbmNlQmlnSW50IgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCIKb3V0QmFsYW5jZSIQb3V0QmFsYW5jZUJpZ0ludCIOcmVkZWVtZWRCaWdJbnQiCWFtb3VudFJhdyINJHQwMjY0MjUyNjQ3NSILdG90YWxBbW91bnQiDSR0MDI2NDc5MjY3MDUiC291dEFtQW1vdW50IgtvdXRQckFtb3VudCIMYW1CYWxhbmNlTmV3IgxwckJhbGFuY2VOZXciFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0IgttdXN0TWFuYWdlciICcGQiAnBrIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSILY2hlY2tDYWxsZXIiFWNoZWNrTWFuYWdlclB1YmxpY0tleSICcG0iBWhhc1BNIgdjaGVja1BNIg9zaG91bGRBdXRvU3Rha2UiBGFtSWQiBHBySWQiDHNsaXBwYWdlQUludiIMc2xpcHBhZ2VQSW52IgpscFRyYW5zZmVyIgtzbHBTdGFrZUludiILbWF4U2xpcHBhZ2UiDG1pbk91dEFtb3VudCIJYXV0b1N0YWtlIg1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzMTA1NzMxMTg0IhNlbWl0QW1vdW50RXN0aW1hdGVkIgVib251cyIKZW1pdEFtb3VudCIIc3Rha2VJbnYiB3NlbmRGZWUiDSR0MDMxOTEzMzIwNDgiDW91dEFzc2V0SWRTdHIiDWlzR2V0RGlzYWJsZWQiDSR0MDMyNjM2MzI3NjgiD2Ftb3VudEVzdGltYXRlZCIHYnVybkludiINYXNzZXRUcmFuc2ZlciINJHQwMzM0MDMzMzU0MSINdW5zdGFrZUFtb3VudCIKdW5zdGFrZUludiINJHQwMzQwOTEzNDIxNCIJb3V0QW10QW10IhRidXJuTFBBc3NldE9uRmFjdG9yeSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciINcG9vbExQQmFsYW5jZSIKcHJpY2VzTGlzdCIPbHBBbXRBc3NldFNoYXJlIhFscFByaWNlQXNzZXRTaGFyZSIKcG9vbFdlaWdodCIMY3VyUHJpY2VDYWxjIgxhbUJhbGFuY2VSYXciDHByQmFsYW5jZVJhdyIPYW1CYWxhbmNlUmF3WDE4Ig9wckJhbGFuY2VSYXdYMTgiEHBheW1lbnRMcEFzc2V0SWQiDHBheW1lbnRMcEFtdCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2hiAAFhAAgAAWIAgMLXLwABYwkAtgIBAIDC1y8AAWQJALYCAQCAgJC7utat8A0AAWUJALYCAQAAAAFmCQC2AgEAAAABZwkAtgIBAAEAAWgJALYCAQACAAFpAgVXQVZFUwABagICX18AAWsAAQABbAACAAFtAAMAAW4ABAABbwABAAFwAAIAAXEAAwABcgAEAAFzAAUAAXQABgABdQAHAAF2AAgAAXcACQABeAAKAAF5AAEAAXoAAgABQQADAAFCAAEAAUMABwEBRAIBRQFGCQC8AgMJALYCAQUBRQUBZAkAtgIBBQFGAQFHAgFIAUkJAKADAQkAvAIDBQFICQC2AgEFAUkFAWQBAUoDAUsBTAFNCQBrAwUBSwUBTAUBTQEBTgEBSAMJAGYCAAAFAUgJAQEtAQUBSAUBSAEBTwEBSAMJAL8CAgUBZQUBSAkAvgIBBQFIBQFIAQFQAAITJXNfX2ZhY3RvcnlDb250cmFjdAEBUQACFCVzX19tYW5hZ2VyUHVibGljS2V5AQFSAAIbJXNfX3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5AQFTAAIRJXMlc19fcHJpY2VfX2xhc3QBAVQCAVUBVgkAuQkCCQDMCAICGCVzJXMlZCVkX19wcmljZV9faGlzdG9yeQkAzAgCCQCkAwEFAVUJAMwIAgkApAMBBQFWBQNuaWwFAWoBAVcCAVgBWQkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAVgCAl9fBQFZAQFaAgFYAVkJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQFYAgJfXwUBWQECYWEAAg8lc19fYW1vdW50QXNzZXQBAmFiAAIOJXNfX3ByaWNlQXNzZXQAAmFjAgclc19fZmVlAAJhZAkAawMABQUBYgCQTgACYWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUCYWMFAmFkAQJhZgACESVzX19mYWN0b3J5Q29uZmlnAQJhZwACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECYWgBAmFpCQCsAgIJAKwCAgIIJXMlcyVzX18FAmFpAiBfX21hcHBpbmdzX19wb29sQ29udHJhY3QyTHBBc3NldAECYWoCAmFrAmFsCQCsAgIJAKwCAgkArAICCQCsAgICCCVkJWQlc19fBQJhawICX18FAmFsAghfX2NvbmZpZwECYW0BAmFuCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FAmFuAQJhbwACDCVzX19zaHV0ZG93bgECYXABAmFxCQCsAgICEiVzJXNfX3Bvb2xXZWlnaHRfXwUCYXEBAmFyAAIXJXNfX2FsbG93ZWRMcFNjcmlwdEhhc2gAAmFzAhclc19fZmVlQ29sbGVjdG9yQWRkcmVzcwECYXQDAmF1AmF2AmF3CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQJhdQINIHNlbmRlclZhbGlkPQkApQMBBQJhdgIOIG1hdGNoZXJWYWxpZD0JAKUDAQUCYXcBAmF4AgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFBAgJheQJhegkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAmF5BQJhegkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQJheQkAzAgCAgEuCQDMCAIFAmF6CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgABAmFCAQJhQwkAAgEJALkJAgkAzAgCAghscC5yaWRlOgkAzAgCBQJhQwUDbmlsAgEgAAJhRAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUEdGhpcwkBAVAAAAJhRQkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF4AgUCYUQFAmFzAQJhRgAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUCYUQJAQJhbwAHAQJhRwAJANkEAQkBAmF4AgUCYUQJAQJhZwABAmFIAAQCYUkJAQJheAIFBHRoaXMJAQJhYQAEAmFKCQECYXgCBQR0aGlzCQECYWIABAJhbAkBAmFBAgUCYUQJAQJhbQEFAmFKBAJhawkBAmFBAgUCYUQJAQJhbQEFAmFJCQC1CQIJAQJheAIFAmFECQECYWoCCQCkAwEFAmFrCQCkAwEFAmFsBQFqAQJhSwECYUwDCQAAAgUCYUwFAWkFBHVuaXQJANkEAQUCYUwBAmFNAQJhTAMJAAACBQJhTAUEdW5pdAUBaQkA2AQBCQEFdmFsdWUBBQJhTAECYU4BAmFPCQCZCgcJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYU8FAW8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBcAkA2QQBCQCRAwIFAmFPBQFxCQECYUsBCQCRAwIFAmFPBQFyCQECYUsBCQCRAwIFAmFPBQFzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYU8FAXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhTwUBdQACYVAJAQJhTgEJAQJhSAAAAmFRBQJhUAACYVIIBQJhUQJfMQACYVMIBQJhUQJfMgACYVQIBQJhUQJfMwACYVUIBQJhUQJfNAACYVYIBQJhUQJfNQACYVcIBQJhUQJfNgACYVgIBQJhUQJfNwECYVkACQC1CQIJAQJheAIFAmFECQECYWYABQFqAAJhWgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmFZAAUBQgIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwACYmEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIJAQJhWQAFAUMCGWluY29ycmVjdCBzdGFraW5nIGFkZHJlc3MBAmJiCgJiYwJiZAJiZQJiZgJiZwJiaAJiaQJiagJiawJibAkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmMJAMwIAgkApAMBBQJiZAkAzAgCCQCkAwEFAmJlCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwFA25pbAUBagECYm0GAmJuAmJvAmJwAmJmAmJpAmJqCQC5CQIJAMwIAgIMJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYm4JAMwIAgkApAMBBQJibwkAzAgCCQCkAwEFAmJwCQDMCAIJAKQDAQUCYmYJAMwIAgkApAMBBQJiaQkAzAgCCQCkAwEFAmJqBQNuaWwFAWoBAmJxAQJicgMJAAACBQJicgIFV0FWRVMICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQDwBwIFBHRoaXMJANkEAQUCYnIBAmJzAgJidAJidQkAvAIDBQJidAUBZAUCYnUBAmJ2BAJidwJieAJieQJiegQCYkEJAQFEAgUCYnkFAmJ3BAJiQgkBAUQCBQJiegUCYngJAQJicwIFAmJCBQJiQQECYkMDAmJ5AmJ6AmJEBAJiRQkBAmFIAAQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYkgJAQJidgQFAmJGBQJiRwUCYnkFAmJ6BAJidQkBAUQCBQJieQUCYkYEAmJ0CQEBRAIFAmJ6BQJiRwQCYkkJAQFEAgUCYkQFAWIEAmJKCQECYnMCBQJidQUCYkkEAmJLCQECYnMCBQJidAUCYkkJAMwIAgUCYkgJAMwIAgUCYkoJAMwIAgUCYksFA25pbAECYkwDAmJ5AmJ6AmJEBAJiTQkBAmJDAwUCYnkFAmJ6BQJiRAkAzAgCCQEBRwIJAJEDAgUCYk0AAAUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAQUBYgkAzAgCCQEBRwIJAJEDAgUCYk0AAgUBYgUDbmlsAQJiTgQCYk8CYlACYlEBWAQCYkUJAQJhSAAEAmJSCQCRAwIFAmJFBQFxBAJiUwkAkQMCBQJiRQUBcgQCYlQJAJEDAgUCYkUFAXMEAmJ3CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXQEAmJ4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXUEAmJVCQCRAwIFAmJFBQFwBAJiVggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgBQJiUgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiUgUCYlAJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmJXCQECYnEBBQJiUwQCYlgJAQFEAgUCYlcFAmJ3BAJiWQkBAmJxAQUCYlQEAmJaCQEBRAIFAmJZBQJieAQCY2EJAQJicwIFAmJaBQJiWAQCY2IJAQFHAgUCY2EFAWIEAmNjCQEBRAIFAmJRBQFiBAJjZAkBAUQCBQJiVgUBYgQCY2UJALwCAwUCYlgFAmNjBQJjZAQCY2YJALwCAwUCYloFAmNjBQJjZAQCY2cJAQFHAgUCY2UFAmJ3BAJjaAkBAUcCBQJjZgUCYngEAmNpAwkAAAIFAmJPAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQFYBQJjZwMJAAACBQJiUwIFV0FWRVMFBHVuaXQJANkEAQUCYlMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCY2gDCQAAAgUCYlQCBVdBVkVTBQR1bml0CQDZBAEFAmJUCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFaAgkApQgBBQFYBQJiTwkBAmJtBgUCY2cFAmNoBQJiUQUCY2IFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY2IFA25pbAkAnAoKBQJjZwUCY2gFAmJTBQJiVAUCYlcFAmJZBQJiVgUCY2EFAmJVBQJjaQECY2oJAmJPAmNrAmNsAmNtAmNuAmNvAVgCY3ACY3EEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjcgkAkQMCBQJiRQUBcgQCY3MJAJEDAgUCYkUFAXMEAmN0CQCRAwIFAmJFBQF2BAJjdQkAkQMCBQJiRQUBdwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYlUJAJEDAgUCYkUFAXAEAmJWCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY3YJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY20JANkEAQIFV0FWRVMEAmN3CQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmNvCQDZBAECBVdBVkVTAwMJAQIhPQIFAmNyBQJjdgYJAQIhPQIFAmNzBQJjdwkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmJXAwUCY3AJAQJicQEFAmNyCQBlAgkBAmJxAQUCY3IFAmNsBAJiWQMFAmNwCQECYnEBBQJjcwkAZQIJAQJicQEFAmNzBQJjbgQCY3gJAQFEAgUCY2wFAmJGBAJjeQkBAUQCBQJjbgUCYkcEAmN6CQECYnMCBQJjeQUCY3gEAmJYCQEBRAIFAmJXBQJiRgQCYloJAQFEAgUCYlkFAmJHBAJjQQMJAAACBQJiVgAABAJjYQUBZQQCY0IFAWUEAmJJCQB2BgkAuQICBQJjeAUCY3kAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFHAgUCYkkFAWIJAQFHAgUCY3gFAmJGCQEBRwIFAmN5BQJiRwkBAmJzAgkAtwICBQJiWgUCY3kJALcCAgUCYlgFAmN4BQJjQgQCY2EJAQJicwIFAmJaBQJiWAQCY0IJALwCAwkBAU8BCQC4AgIFAmNhBQJjegUBZAUCY2EEAmNDCQEBRAIFAmNrBQFiAwMJAQIhPQIFAmNhBQFlCQC/AgIFAmNCBQJjQwcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY0ICHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjQwQCY2QJAQFEAgUCYlYFAWIEAmNECQC8AgMFAmN4BQJjYQUBZAQCY0UJALwCAwUCY3kFAWQFAmNhBAJjRgMJAL8CAgUCY0QFAmN5CQCUCgIFAmNFBQJjeQkAlAoCBQJjeAUCY0QEAmNHCAUCY0YCXzEEAmNICAUCY0YCXzIEAmJJCQC8AgMFAmNkBQJjSAUCYloJAJcKBQkBAUcCBQJiSQUBYgkBAUcCBQJjRwUCYkYJAQFHAgUCY0gFAmJHBQJjYQUCY0IEAmNJCAUCY0ECXzEEAmNKCAUCY0ECXzIEAmNLCAUCY0ECXzMEAmNiCQEBRwIIBQJjQQJfNAUBYgQCY0wJAQFHAggFAmNBAl81BQFiAwkAZwIAAAUCY0kJAAIBAjZJbnZhbGlkIGNhbGN1bGF0aW9ucy4gTFAgY2FsY3VsYXRlZCBpcyBsZXNzIHRoYW4gemVyby4EAmNNAwkBASEBBQJjcQAABQJjSQQCY04JAGUCBQJjbAUCY0oEAmNPCQBlAgUCY24FAmNLBAJjUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJjYgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjYgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIFAVgFAmJPCQECYmIKBQJjSgUCY0sFAmNNBQJjYgUCY2sFAmNMBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjTgUCY08FA25pbAkAnwoNBQJjSQUCY00FAmNiBQJiVwUCYlkFAmJWBQJiUgUCYlUFAmNQBQJjTgUCY08FAmNtBQJjbwECY1EBAmNSBAJiRQkBAmFIAAQCY1MJAJEDAgUCYkUFAXIEAmNUCQCRAwIFAmJFBQFzBAJiVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQFwBAJiRgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF0BAJiRwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJFBQF1BAJjVQkBAmJxAQUCY1MEAmNWCQECYnEBBQJjVAQCY2EDCQAAAggFAmNSCW9yZGVyVHlwZQUDQnV5CQECYnYEBQJiRgUCYkcJAGQCBQJjVQgFAmNSBmFtb3VudAUCY1YJAQJidgQFAmJGBQJiRwkAZQIFAmNVCAUCY1IGYW1vdW50BQJjVgQCY2IJAQFHAgUCY2EFAWIDAwMJAQJhRgAGCQAAAgUCYlUFAW0GCQAAAgUCYlUFAW4JAAIBAhxFeGNoYW5nZSBvcGVyYXRpb25zIGRpc2FibGVkBAJjVwgIBQJjUglhc3NldFBhaXILYW1vdW50QXNzZXQEAmNYAwkAAAIFAmNXBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjVwQCY1kICAUCY1IJYXNzZXRQYWlyCnByaWNlQXNzZXQEAmNaAwkAAAIFAmNZBQR1bml0AgVXQVZFUwkA2AQBCQEFdmFsdWUBBQJjWQMDCQECIT0CBQJjWAUCY1MGCQECIT0CBQJjWgUCY1QJAAIBAhNXcm9uZyBvcmRlciBhc3NldHMuBAJkYQgFAmNSBXByaWNlBAJkYgkAawMFAWIFAmJHBQJiRgQCZGMJAQFKAwUCZGEFAWIFAmRiBAJkZAMJAAACCAUCY1IJb3JkZXJUeXBlBQNCdXkJAGcCBQJjYgUCZGMJAGcCBQJkYwUCY2IGAQJkZQECZGYDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmRnCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwAABAJiUAkBBXZhbHVlAQgFAmRnB2Fzc2V0SWQEAmRoCAUCZGcGYW1vdW50BAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUAUCZGgIBQJkZgZjYWxsZXIEAmNnCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTADAwkBAmFGAAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUJAJcKBQUCY2cFAmNoBQJkaAUCYlAFAmNpAQJkaQMCZGYCY2sCY3EDCQECIT0CCQCQAwEIBQJkZghwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZGoJAQV2YWx1ZQEJAJEDAggFAmRmCHBheW1lbnRzAAAEAmRrCQEFdmFsdWUBCQCRAwIIBQJkZghwYXltZW50cwABBAJkbAkBAmNqCQkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAUCY2sIBQJkagZhbW91bnQIBQJkagdhc3NldElkCAUCZGsGYW1vdW50CAUCZGsHYXNzZXRJZAkApQgBCAUCZGYGY2FsbGVyBwUCY3EEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJkbAJfOAMDAwkBAmFGAAYJAAACBQJiVQUBbAYJAAACBQJiVQUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCYlUFAmRsAQJkbQECZG4EAmRvCQD8BwQFAmFEAgRlbWl0CQDMCAIFAmRuBQNuaWwFA25pbAMJAAACBQJkbwUCZG8EAmRwBAJkcQUCZG8DCQABAgUCZHECB0FkZHJlc3MEAmRyBQJkcQkA/AcEBQJkcgIEZW1pdAkAzAgCBQJkbgUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZHAFAmRwBQJkbgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZHMBAmRuBAJkdAkAawMFAmRuBQJhZQUBYgkAlAoCCQBlAgUCZG4FAmR0BQJkdAECZHUEAmR2AmR3AVgBWQQCZHgJAAACBQFZBQR1bml0BAJkeQkBAmFOAQkBAmFIAAQCZHoIBQJkeQJfMQQCYlUIBQJkeQJfMgQCYlIIBQJkeQJfMwQCZEEIBQJkeQJfNAQCY1QIBQJkeQJfNQQCZEIIBQJkeQJfNgQCZEMIBQJkeQJfNwQCZEQJAQJicQEJAQJhTQEFAmRBBAJkRQkBAmJxAQkBAmFNAQUCY1QEAmRGAwkAAAIFAmR3BQJkQQYDCQAAAgUCZHcFAmNUBwkBAmFCAQINaW52YWxpZCBhc3NldAQCZEcDBQJkeAkAlAoCBQJkRAUCZEUDBQJkRgkAlAoCCQBlAgUCZEQFAmR2BQJkRQkAlAoCBQJkRAkAZQIFAmRFBQJkdgQCZEgIBQJkRwJfMQQCZEkIBQJkRwJfMgQCZEoDBQJkRgkAlAoCBQJkdgAACQCUCgIAAAUCZHYEAmRLCAUCZEoCXzEEAmRMCAUCZEoCXzIEAmRNCAkBAmRzAQUCZEsCXzEEAmROCAkBAmRzAQUCZEwCXzEEAmRPCQECZHMBBQJkdgQCZFAIBQJkTwJfMQQCZHQIBQJkTwJfMgQCZFEJAGQCBQJkSAUCZE0EAmRSCQBkAgUCZEkFAmROBAJkUwkBAmJzAgkBAUQCBQJkUgUCZEMJAQFEAgUCZFEFAmRCBAJkVAkBAUcCBQJkUwUBYgQCZFUDBQJkRgUCZEgFAmRJBAJkVgkAtgIBBQJkVQQCZFcJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiUgkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiUgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmRYAwkAvwICBQJkVwUBZgYJAQJhQgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZFgFAmRYBAJkWQkAtgIBBQJkUAQCZFoJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZFcJALgCAgkBCnNxcnRCaWdJbnQECQC3AgIFAWQJALoCAgkAuQICBQJkWQUBZAUCZFYAEgASBQRET1dOBQFkBQFkBQNuaWwEAmNQAwUCZHgFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVMABQJkVAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVQCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJkVAkAzAgCCQELU3RyaW5nRW50cnkCCQEBVwIJAKUIAQkBBXZhbHVlAQUBWAkA2AQBCQEFdmFsdWUBBQFZCQECYmIKBQJkSwUCZEwFAmRaBQJkVAAAAAAFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAAAAAABQNuaWwEAmVhCQECYnMCCQEBRAIFAmRJBQJkQwkBAUQCBQJkSAUCZEIEAmViCQEBRwIFAmVhBQFiBAJlYwkBAU4BCQBpAgkAaAIJAGUCBQJkVAUCZWIFAWIFAmViCQCWCgQFAmRaBQJjUAUCZHQFAmVjCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlZAUCZWUCZFACZHcBWAFZBAJkeAkAAAIFAVkFBHVuaXQEAmVmCQECYU4BCQECYUgABAJkeggFAmVmAl8xBAJiVQgFAmVmAl8yBAJiUggFAmVmAl8zBAJkQQgFAmVmAl80BAJjVAgFAmVmAl81BAJlZwgFAmVmAl82BAJlaAgFAmVmAl83BAJlaQkAzAgCAwkAAAIFAmR3BQJiUgYJAQJhQgECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJlaQUCZWkEAmVqAwkAAAIFAmVlBQJkQQYDCQAAAgUCZWUFAmNUBwkBAmFCAQINaW52YWxpZCBhc3NldAQCZWsDBQJlagkAtgIBCQECYnEBCQECYU0BBQJkQQkAtgIBCQECYnEBCQECYU0BBQJjVAQCZWwJAQJicQEJAQJhTQEFAmRBBAJlbQkBAmJxAQkBAmFNAQUCY1QEAmVuAwUCZWoFAmVsBQJlbQQCZW8JALYCAQUCZW4EAmRXCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlIJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYlICDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJlcAkAtgIBBQJkUAQCZXEJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZWsJALgCAgUBZAkAdgYJALgCAgUBZAkAugICCQC5AgIFAmVwBQFkBQJkVwASBQFoAAAAEgUERE9XTgUBZAUDbmlsBAJlcgkBAmRzAQUCZXEEAmVzCAUCZXICXzEEAmR0CAUCZXICXzIEAmV0AwUCZWoJAJYKBAUCZXMAAAkAZQIFAmVsBQJlcQUCZW0JAJYKBAAABQJlcwUCZWwJAGUCBQJlbQUCZXEEAmV1CAUCZXQCXzEEAmV2CAUCZXQCXzIEAmV3CAUCZXQCXzMEAmV4CAUCZXQCXzQEAmRTCQECYnMCCQEBRAIFAmV4BQJlaAkBAUQCBQJldwUCZWcEAmRUCQEBRwIFAmRTBQFiBAJjUAMFAmR4BQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCCQClCAEJAQV2YWx1ZQEFAVgJANgEAQkBBXZhbHVlAQUBWQkBAmJtBgUCZXUFAmV2BQJkUAUCZFQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFTAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFUAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQFA25pbAQCZWEJAQJicwIJAQFEAgUCZW0FAmVoCQEBRAIFAmVsBQJlZwQCZWIJAQFHAgUCZWEFAWIEAmVjCQEBTgEJAGkCCQBoAgkAZQIFAmRUBQJlYgUBYgUCZWIJAJYKBAUCZXMFAmNQBQJkdAUCZWMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmV5AAQCZHEJAKIIAQkBAVEAAwkAAQIFAmRxAgZTdHJpbmcEAmV6BQJkcQkA2QQBBQJlegMJAAECBQJkcQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlQQAEAmRxCQCiCAEJAQFSAAMJAAECBQJkcQIGU3RyaW5nBAJlegUCZHEJANkEAQUCZXoDCQABAgUCZHECBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZUIBAmRmBAJlQwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkcQkBAmV5AAMJAAECBQJkcQIKQnl0ZVZlY3RvcgQCZUQFAmRxAwkAAAIIBQJkZg9jYWxsZXJQdWJsaWNLZXkFAmVEBgUCZUMDCQABAgUCZHECBFVuaXQDCQAAAggFAmRmBmNhbGxlcgUEdGhpcwYFAmVDCQACAQILTWF0Y2ggZXJyb3IZAmRmAQpzZXRNYW5hZ2VyAQJlRQQCZUYJAQJlQgEFAmRmAwkAAAIFAmVGBQJlRgQCZUcJANkEAQUCZUUDCQAAAgUCZUcFAmVHCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAAUCZUUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEOY29uZmlybU1hbmFnZXIABAJlSAkBAmVBAAQCZUkDCQEJaXNEZWZpbmVkAQUCZUgGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVJBQJlSQQCZUoDCQAAAggFAmRmD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZUgGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVKBQJlSgkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQAJANgEAQkBBXZhbHVlAQUCZUgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVIABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBA3B1dAICY2sCZUsDCQBmAgAABQJjawkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJkbAkBAmRpAwUCZGYFAmNrBgQCY00IBQJkbAJfMgQCYlIIBQJkbAJfNwQCY2kIBQJkbAJfOQQCY04IBQJkbANfMTAEAmNPCAUCZGwDXzExBAJlTAgFAmRsA18xMgQCZU0IBQJkbANfMTMEAmRvCQD8BwQFAmFEAgRlbWl0CQDMCAIFAmNNBQNuaWwFA25pbAMJAAACBQJkbwUCZG8EAmRwBAJkcQUCZG8DCQABAgUCZHECB0FkZHJlc3MEAmRyBQJkcQkA/AcEBQJkcgIEZW1pdAkAzAgCBQJjTQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZHAFAmRwBAJlTgMJAGYCBQJjTgAACQD8BwQFAmJhAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZUwFAmNOBQNuaWwFA25pbAMJAAACBQJlTgUCZU4EAmVPAwkAZgIFAmNPAAAJAPwHBAUCYmECA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJlTQUCY08FA25pbAUDbmlsAwkAAAIFAmVPBQJlTwQCZVADBQJlSwQCZVEJAPwHBAUCYVoCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJSBQJjTQUDbmlsAwkAAAIFAmVRBQJlUQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkZgZjYWxsZXIFAmNNBQJiUgUDbmlsCQDOCAIFAmNpBQJlUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgEKcHV0Rm9yRnJlZQECZVIDCQBmAgAABQJlUgkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAJkbAkBAmRpAwUCZGYFAmVSBwgFAmRsAl85AmRmAQlwdXRPbmVUa24CAmVTAmVUBAJlVQMDCQECYUYABgkAAAIFAmFTBQFsBgkAAAIFAmFTBQFuBAJlaQkAzAgCAwkBASEBBQJlVQYJAQJhQgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAEGCQECYUIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmVWCQCRAwIIBQJkZghwYXltZW50cwAABAJkdwgFAmVWB2Fzc2V0SWQEAmR2CAUCZVYGYW1vdW50BAFYCAUCZGYGY2FsbGVyBAFZCAUCZGYNdHJhbnNhY3Rpb25JZAQCZVcJAQJkdQQFAmR2BQJkdwUBWAUBWQQCZVgIBQJlVwJfMQQCY1AIBQJlVwJfMgQCZHQIBQJlVwJfMwQCZVkIBQJlVwJfNAQCZVoDAwkAZgIFAmVTAAAJAGYCBQJlUwUCZVgHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVTBQNuaWwCAAUCZVgEAmRvCQECZG0BBQJlWgMJAAACBQJkbwUCZG8EAmVQAwUCZVQEAmZhCQD8BwQFAmFaAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhVAUCZVoFA25pbAMJAAACBQJmYQUCZmEFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGYGY2FsbGVyBQJlWgUCYVQFA25pbAQCZmIDCQBmAgUCZHQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRQUCZHQFAmR3BQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY1AFAmVQBQJmYgUCZVoJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBEXB1dE9uZVRrblJFQURPTkxZAgJkdwJkdgQCZmMJAQJkdQQFAmR2CQECYUsBBQJkdwUEdW5pdAUEdW5pdAQCZVgIBQJmYwJfMQQCY1AIBQJmYwJfMgQCZHQIBQJmYwJfMwQCZVkIBQJmYwJfNAkAlAoCBQNuaWwJAJUKAwUCZVgFAmR0BQJlWQJkZgEJZ2V0T25lVGtuAgJmZAJlUwQCZmUDCQECYUYABgkAAAIFAmFTBQFuBAJlaQkAzAgCAwkBASEBBQJmZQYJAQJhQgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAEGCQECYUIBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmVlCQECYUsBBQJmZAQCZVYJAJEDAggFAmRmCHBheW1lbnRzAAAEAmR3CAUCZVYHYXNzZXRJZAQCZFAIBQJlVgZhbW91bnQEAVgIBQJkZgZjYWxsZXIEAVkIBQJkZg10cmFuc2FjdGlvbklkBAJmZgkBAmVkBQUCZWUFAmRQBQJkdwUBWAUBWQQCZmcIBQJmZgJfMQQCY1AIBQJmZgJfMgQCZHQIBQJmZgJfMwQCZVkIBQJmZgJfNAQCZG4DAwkAZgIFAmVTAAAJAGYCBQJlUwUCZmcHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVTBQNuaWwCAAUCZmcEAmZoCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRQBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmR3BQJkUAUDbmlsAwkAAAIFAmZoBQJmaAQCZmkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUBWAUCZG4FAmVlBQNuaWwEAmZiAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlZQUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmaQUCZmIFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmARFnZXRPbmVUa25SRUFET05MWQICZWUCZFAEAmZqCQECZWQFCQECYUsBBQJlZQUCZFAFAmFUBQR1bml0BQR1bml0BAJmZwgFAmZqAl8xBAJjUAgFAmZqAl8yBAJkdAgFAmZqAl8zBAJlWQgFAmZqAl80CQCUCgIFA25pbAkAlQoDBQJmZwUCZHQFAmVZAmRmARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmawJmZAJlUwQCZmUDCQECYUYABgkAAAIFAmFTBQFuBAJlaQkAzAgCAwkBASEBBQJmZQYJAQJhQgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRmCHBheW1lbnRzAAAGCQECYUIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmVlCQECYUsBBQJmZAQCZmwJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhVAkAzAgCBQJmawUDbmlsBQNuaWwDCQAAAgUCZmwFAmZsBAJmbQkBAmVkBQUCZWUFAmZrBQJhVAUEdW5pdAUEdW5pdAQCZmcIBQJmbQJfMQQCY1AIBQJmbQJfMgQCZHQIBQJmbQJfMwQCZVkIBQJmbQJfNAQCZG4DAwkAZgIFAmVTAAAJAGYCBQJlUwUCZmcHCQECYUIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmVTBQNuaWwCAAUCZmcEAmZoCQD8BwQFAmFEAgRidXJuCQDMCAIFAmZrBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFUBQJmawUDbmlsAwkAAAIFAmZoBQJmaAQCZmkJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRmBmNhbGxlcgUCZG4FAmVlBQNuaWwEAmZiAwkAZgIFAmR0AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUUFAmR0BQJlZQUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNQBQJmaQUCZmIFAmRuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRmAQNnZXQABAJjQQkBAmRlAQUCZGYEAmZuCAUCY0ECXzEEAmNoCAUCY0ECXzIEAmRoCAUCY0ECXzMEAmJQCAUCY0ECXzQEAmNpCAUCY0ECXzUEAmZvCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRoBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJQBQJkaAUDbmlsAwkAAAIFAmZvBQJmbwUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBCWdldE5vTGVzcwICZnACZnEEAmNBCQECZGUBBQJkZgQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCZGgIBQJjQQJfMwQCYlAIBQJjQQJfNAQCY2kIBQJjQQJfNQMJAGYCBQJmcAUCY2cJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmNnAgMgPCAJAKQDAQUCZnADCQBmAgUCZnEFAmNoCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY2gCAyA8IAkApAMBBQJmcQQCZm8JAPwHBAUCYUQCBGJ1cm4JAMwIAgUCZGgFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlAFAmRoBQNuaWwDCQAAAgUCZm8FAmZvBQJjaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkZgENdW5zdGFrZUFuZEdldAECZG4EAmZyAwkBAiE9AgkAkAMBCAUCZGYIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZnIFAmZyBAJiRQkBAmFIAAQCYlIJANkEAQkAkQMCBQJiRQUBcQQCZmwJAPwHBAUCYVoCB3Vuc3Rha2UJAMwIAgkA2AQBBQJiUgkAzAgCBQJkbgUDbmlsBQNuaWwDCQAAAgUCZmwFAmZsBAJjQQkBAmJOBAkA2AQBCAUCZGYNdHJhbnNhY3Rpb25JZAkA2AQBBQJiUgUCZG4IBQJkZgZjYWxsZXIEAmJVCQENcGFyc2VJbnRWYWx1ZQEIBQJjQQJfOQQCY2kIBQJjQQNfMTAEAmZzAwMJAQJhRgAGCQAAAgUCYlUFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJVBgMJAAACBQJmcwUCZnMEAmZvCQD8BwQFAmFEAgRidXJuCQDMCAIFAmRuBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJSBQJkbgUDbmlsAwkAAAIFAmZvBQJmbwUCY2kJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGYBCGFjdGl2YXRlAgJmdAJmdQMJAQIhPQIJAKUIAQgFAmRmBmNhbGxlcgkApQgBBQJhRAkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQAFAmZ0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYgAFAmZ1BQNuaWwCB3N1Y2Nlc3MCZGYBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFIAAJkZgEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYnIJAJQKAgUDbmlsCQECYnEBBQJicgJkZgEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCYnkCYnoCYkQEAmJNCQECYkMDBQJieQUCYnoFAmJECQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCYk0AAAkAzAgCCQCmAwEJAJEDAgUCYk0AAQkAzAgCCQCmAwEJAJEDAgUCYk0AAgUDbmlsAmRmARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZGYBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUgBSQkAlAoCBQNuaWwJAQFHAgkApwMBBQFIBQFJAmRmAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJ0AmJ1CQCUCgIFA25pbAkApgMBCQECYnMCCQCnAwEFAmJ0CQCnAwEFAmJ1AmRmASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCYk8CY2sCY2wCY20CY24CY28BWAJjcAJjcQkAlAoCBQNuaWwJAQJjagkFAmJPBQJjawUCY2wFAmNtBQJjbgUCY28FAVgFAmNwBQJjcQJkZgEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmJPAmJQAmJRAVgEAmNBCQECYk4EBQJiTwUCYlAFAmJRCQERQGV4dHJOYXRpdmUoMTA2MikBBQFYCQCUCgIFA25pbAkAnAoKCAUCY0ECXzEIBQJjQQJfMggFAmNBAl8zCAUCY0ECXzQIBQJjQQJfNQgFAmNBAl82CAUCY0ECXzcJAKYDAQgFAmNBAl84CAUCY0ECXzkIBQJjQQNfMTACZGYBDXN0YXRzUkVBRE9OTFkABAJiRQkBAmFIAAQCYlIJANkEAQkAkQMCBQJiRQUBcQQCY1MJAJEDAgUCYkUFAXIEAmNUCQCRAwIFAmJFBQFzBAJjdAkAkQMCBQJiRQUBdgQCY3UJAJEDAgUCYkUFAXcEAmJGCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXQEAmJHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkUFAXUEAmZ2CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1UJAQJicQEFAmNTBAJjVgkBAmJxAQUCY1QEAmZ3AwkAAAIFAmZ2AAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmJDAwUCY1UFAmNWBQJmdgQCY2IAAAQCZngJAQFHAgkAkQMCBQJmdwABBQFiBAJmeQkBAUcCCQCRAwIFAmZ3AAIFAWIEAmZ6CQEFdmFsdWUBCQCaCAIFAmFECQECYXABCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjVQkAzAgCCQCkAwEFAmNWCQDMCAIJAKQDAQUCZnYJAMwIAgkApAMBBQJjYgkAzAgCCQCkAwEFAmZ4CQDMCAIJAKQDAQUCZnkJAMwIAgkApAMBBQJmegUDbmlsBQFqAmRmASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECY2wEAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjcgkAkQMCBQJiRQUBcgQCYlMJANkEAQUCY3IEAmNzCQCRAwIFAmJFBQFzBAJiVAkA2QQBBQJjcwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYlUJAJEDAgUCYkUFAXAEAmZ2CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1UJAQJicQEFAmNyBAJjVgkBAmJxAQUCY3MEAmJBCQEBRAIFAmNVBQJiRgQCYkIJAQFEAgUCY1YFAmJHBAJjYQMJAAACBQJmdgAABQFlCQECYnMCBQJiQgUCYkEEAmN4CQEBRAIFAmNsBQJiRgQCY3kJALwCAwUCY3gFAmNhBQFkBAJjbgkBAUcCBQJjeQUCYkcEAmRsCQECY2oJAgAAoMIeBQJjbAUCYlMFAmNuBQJiVAIABgcEAmNJCAUCZGwCXzEEAmZBCAUCZGwCXzMEAmJXCAUCZGwCXzQEAmJZCAUCZGwCXzUEAmJWCAUCZGwCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNJCQDMCAIJAKQDAQkBAUcCBQJjYQUBYgkAzAgCCQCkAwEFAmJXCQDMCAIJAKQDAQUCYlkJAMwIAgkApAMBBQJiVgkAzAgCBQJiVQkAzAgCCQCkAwEFAmNsCQDMCAIJAKQDAQUCY24FA25pbAUBagJkZgEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECY24EAmJFCQECYUgABAJiUgkA2QQBCQCRAwIFAmJFBQFxBAJjcgkAkQMCBQJiRQUBcgQCYlMJANkEAQUCY3IEAmNzCQCRAwIFAmJFBQFzBAJiVAkA2QQBBQJjcwQCYkYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdAQCYkcJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiRQUBdQQCYlUJAJEDAgUCYkUFAXAEAmZ2CAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJSCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJSAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZkIJAQJicQEFAmNyBAJmQwkBAmJxAQUCY3MEAmZECQEBRAIFAmZCBQJiRgQCZkUJAQFEAgUCZkMFAmJHBAJjYQMJAAACBQJmdgAABQFlCQECYnMCBQJmRQUCZkQEAmN5CQEBRAIFAmNuBQJiRwQCY3gJALwCAwUCY3kFAWQFAmNhBAJjbAkBAUcCBQJjeAUCYkYEAmRsCQECY2oJAgAAoMIeBQJjbAUCYlMFAmNuBQJiVAIABgcEAmNJCAUCZGwCXzEEAmZBCAUCZGwCXzMEAmJXCAUCZGwCXzQEAmJZCAUCZGwCXzUEAmJWCAUCZGwCXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNJCQDMCAIJAKQDAQkBAUcCBQJjYQUBYgkAzAgCCQCkAwEFAmJXCQDMCAIJAKQDAQUCYlkJAMwIAgkApAMBBQJiVgkAzAgCBQJiVQkAzAgCCQCkAwEFAmNsCQDMCAIJAKQDAQUCY24FA25pbAUBagJkZgETZXZhbHVhdGVHZXRSRUFET05MWQICZkYCZkcEAmNBCQECYk4EAgAFAmZGBQJmRwUEdGhpcwQCY2cIBQJjQQJfMQQCY2gIBQJjQQJfMgQCYlcIBQJjQQJfNQQCYlkIBQJjQQJfNgQCYlYIBQJjQQJfNwQCY2IIBQJjQQJfOAQCYlUJAQ1wYXJzZUludFZhbHVlAQgFAmNBAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY2cJAMwIAgkApAMBBQJjaAkAzAgCCQCkAwEFAmJXCQDMCAIJAKQDAQUCYlkJAMwIAgkApAMBBQJiVgkAzAgCCQCmAwEFAmNiCQDMCAIJAKQDAQUCYlUFA25pbAUBagECZkgBAmZJAAQCZkoEAmRxCQECZXkAAwkAAQIFAmRxAgpCeXRlVmVjdG9yBAJlRAUCZHEFAmVEAwkAAQIFAmRxAgRVbml0CAUCZkgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmRxBQJmSAMJAAECBQJkcQIFT3JkZXIEAmNSBQJkcQQCZksJAQJhRwAEAmF1CQECY1EBBQJjUgQCYXYJAPQDAwgFAmNSCWJvZHlCeXRlcwkAkQMCCAUCY1IGcHJvb2ZzAAAIBQJjUg9zZW5kZXJQdWJsaWNLZXkEAmF3CQD0AwMIBQJjUglib2R5Qnl0ZXMJAJEDAggFAmNSBnByb29mcwABBQJmSwMDAwUCYXUFAmF2BwUCYXcHBgkBAmF0AwUCYXUFAmF2BQJhdwMJAAECBQJkcQIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmV6BQJkcQQCZkwJAPYDAQkBBXZhbHVlAQgFAmV6BnNjcmlwdAQCZk0JANsEAQkBBXZhbHVlAQkAnQgCBQJhRAkBAmFyAAQCZk4JAPEHAQUEdGhpcwMDCQAAAgUCZk0FAmZMCQECIT0CBQJmTgUCZkwHBgkA9AMDCAUCZkgJYm9keUJ5dGVzCQCRAwIIBQJmSAZwcm9vZnMAAAUCZkoJAPQDAwgFAmZICWJvZHlCeXRlcwkAkQMCCAUCZkgGcHJvb2ZzAAAFAmZKgGPfUg==", "chainId": 84, "height": 2289040, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6HH4Tkeh7kDrazHDWaQpntdovdacW7BLtWqu2tHUYCzM Next: Ax8ArXLieRy7Q6Te52jky1ZL9rvTCLD4REngebrdg1DB Diff:
OldNewDifferences
6868 func J (K,L,M) = fraction(K, L, M)
6969
7070
71-func N (H) = if ((e > H))
71+func N (H) = if ((0 > H))
7272 then -(H)
7373 else H
7474
7575
76-func O () = "%s__factoryContract"
76+func O (H) = if ((e > H))
77+ then -(H)
78+ else H
7779
7880
79-func P () = "%s__managerPublicKey"
81+func P () = "%s__factoryContract"
8082
8183
82-func Q () = "%s__pendingManagerPublicKey"
84+func Q () = "%s__managerPublicKey"
8385
8486
85-func R () = "%s%s__price__last"
87+func R () = "%s__pendingManagerPublicKey"
8688
8789
88-func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j)
90+func S () = "%s%s__price__last"
8991
9092
91-func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X)
93+func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
9294
9395
94-func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X)
96+func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
9597
9698
97-func Z () = "%s__amountAsset"
99+func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
98100
99101
100-func aa () = "%s__priceAsset"
102+func aa () = "%s__amountAsset"
101103
102104
103-let ab = "%s__fee"
104-
105-let ac = fraction(5, b, 10000)
106-
107-let ad = valueOrElse(getInteger(this, ab), ac)
108-
109-func ae () = "%s__factoryConfig"
105+func ab () = "%s__priceAsset"
110106
111107
112-func af () = "%s%s__matcher__publicKey"
108+let ac = "%s__fee"
109+
110+let ad = fraction(5, b, 10000)
111+
112+let ae = valueOrElse(getInteger(this, ac), ad)
113+
114+func af () = "%s__factoryConfig"
113115
114116
115-func ag (ah) = (("%s%s%s__" + ah) + "__mappings__poolContract2LpAsset")
117+func ag () = "%s%s__matcher__publicKey"
116118
117119
118-func ai (aj,ak) = (((("%d%d%s__" + aj) + "__") + ak) + "__config")
120+func ah (ai) = (("%s%s%s__" + ai) + "__mappings__poolContract2LpAsset")
119121
120122
121-func al (am) = ("%s%s%s__mappings__baseAsset2internalId__" + am)
123+func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
122124
123125
124-func an () = "%s__shutdown"
126+func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
125127
126128
127-func ao (ap) = ("%s%s__poolWeight__" + ap)
129+func ao () = "%s__shutdown"
128130
129131
130-func aq () = "%s__allowedLpScriptHash"
132+func ap (aq) = ("%s%s__poolWeight__" + aq)
131133
132134
133-let ar = "%s__feeCollectorAddress"
134-
135-func as (at,au,av) = throw(((((("order validation failed: orderValid=" + toString(at)) + " senderValid=") + toString(au)) + " matcherValid=") + toString(av)))
135+func ar () = "%s__allowedLpScriptHash"
136136
137137
138-func aw (ax,ay) = valueOrErrorMessage(getString(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
138+let as = "%s__feeCollectorAddress"
139+
140+func at (au,av,aw) = throw(((((("order validation failed: orderValid=" + toString(au)) + " senderValid=") + toString(av)) + " matcherValid=") + toString(aw)))
139141
140142
141-func az (ax,ay) = valueOrErrorMessage(getInteger(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
143+func ax (ay,az) = valueOrErrorMessage(getString(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
142144
143145
144-func aA (aB) = throw(makeString(["lp.ride:", aB], " "))
146+func aA (ay,az) = valueOrErrorMessage(getInteger(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
145147
146148
147-let aC = addressFromStringValue(aw(this, O()))
148-
149-let aD = addressFromStringValue(aw(aC, ar))
150-
151-func aE () = valueOrElse(getBoolean(aC, an()), false)
149+func aB (aC) = throw(makeString(["lp.ride:", aC], " "))
152150
153151
154-func aF () = fromBase58String(aw(aC, af()))
152+let aD = addressFromStringValue(ax(this, P()))
153+
154+let aE = addressFromStringValue(ax(aD, as))
155+
156+func aF () = valueOrElse(getBoolean(aD, ao()), false)
155157
156158
157-func aG () = {
158- let aH = aw(this, Z())
159- let aI = aw(this, aa())
160- let ak = az(aC, al(aI))
161- let aj = az(aC, al(aH))
162- split(aw(aC, ai(toString(aj), toString(ak))), j)
159+func aG () = fromBase58String(ax(aD, ag()))
160+
161+
162+func aH () = {
163+ let aI = ax(this, aa())
164+ let aJ = ax(this, ab())
165+ let al = aA(aD, am(aJ))
166+ let ak = aA(aD, am(aI))
167+ split(ax(aD, aj(toString(ak), toString(al))), j)
163168 }
164169
165170
166-func aJ (aK) = if ((aK == i))
171+func aK (aL) = if ((aL == i))
167172 then unit
168- else fromBase58String(aK)
173+ else fromBase58String(aL)
169174
170175
171-func aL (aK) = if ((aK == unit))
176+func aM (aL) = if ((aL == unit))
172177 then i
173- else toBase58String(value(aK))
178+ else toBase58String(value(aL))
174179
175180
176-func aM (aN) = $Tuple7(addressFromStringValue(aN[o]), parseIntValue(aN[p]), fromBase58String(aN[q]), aJ(aN[r]), aJ(aN[s]), parseIntValue(aN[t]), parseIntValue(aN[u]))
181+func aN (aO) = $Tuple7(addressFromStringValue(aO[o]), parseIntValue(aO[p]), fromBase58String(aO[q]), aK(aO[r]), aK(aO[s]), parseIntValue(aO[t]), parseIntValue(aO[u]))
177182
178183
179-let aO = aM(aG())
184+let aP = aN(aH())
180185
181-let aP = aO
186+let aQ = aP
182187
183-let aQ = aP._1
188+let aR = aQ._1
184189
185-let aR = aP._2
190+let aS = aQ._2
186191
187-let aS = aP._3
192+let aT = aQ._3
188193
189-let aT = aP._4
194+let aU = aQ._4
190195
191-let aU = aP._5
196+let aV = aQ._5
192197
193-let aV = aP._6
198+let aW = aQ._6
194199
195-let aW = aP._7
200+let aX = aQ._7
196201
197-func aX () = split(aw(aC, ae()), j)
202+func aY () = split(ax(aD, af()), j)
198203
199204
200-let aY = valueOrErrorMessage(addressFromString(aX()[B]), "incorrect staking address")
205+let aZ = valueOrErrorMessage(addressFromString(aY()[B]), "incorrect staking address")
201206
202-let aZ = valueOrErrorMessage(addressFromString(aX()[C]), "incorrect staking address")
207+let ba = valueOrErrorMessage(addressFromString(aY()[C]), "incorrect staking address")
203208
204-func ba (bb,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk)], j)
209+func bb (bc,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl)], j)
205210
206211
207-func bl (bm,bn,bo,be,bh,bi) = makeString(["%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(be), toString(bh), toString(bi)], j)
212+func bm (bn,bo,bp,bf,bi,bj) = makeString(["%d%d%d%d%d%d", toString(bn), toString(bo), toString(bp), toString(bf), toString(bi), toString(bj)], j)
208213
209214
210-func bp (bq) = if ((bq == "WAVES"))
215+func bq (br) = if ((br == "WAVES"))
211216 then wavesBalance(this).available
212- else assetBalance(this, fromBase58String(bq))
217+ else assetBalance(this, fromBase58String(br))
213218
214219
215-func br (bs,bt) = fraction(bs, d, bt)
220+func bs (bt,bu) = fraction(bt, d, bu)
216221
217222
218-func bu (bv,bw,bx,by) = {
219- let bz = D(bx, bv)
223+func bv (bw,bx,by,bz) = {
220224 let bA = D(by, bw)
221- br(bA, bz)
225+ let bB = D(bz, bx)
226+ bs(bB, bA)
222227 }
223228
224229
225-func bB (bx,by,bC) = {
226- let bD = aG()
227- let bE = parseIntValue(bD[t])
228- let bF = parseIntValue(bD[u])
229- let bG = bu(bE, bF, bx, by)
230- let bt = D(bx, bE)
231- let bs = D(by, bF)
232- let bH = D(bC, b)
233- let bI = br(bt, bH)
234- let bJ = br(bs, bH)
235-[bG, bI, bJ]
230+func bC (by,bz,bD) = {
231+ let bE = aH()
232+ let bF = parseIntValue(bE[t])
233+ let bG = parseIntValue(bE[u])
234+ let bH = bv(bF, bG, by, bz)
235+ let bu = D(by, bF)
236+ let bt = D(bz, bG)
237+ let bI = D(bD, b)
238+ let bJ = bs(bu, bI)
239+ let bK = bs(bt, bI)
240+[bH, bJ, bK]
236241 }
237242
238243
239-func bK (bx,by,bC) = {
240- let bL = bB(bx, by, bC)
241-[G(bL[0], b), G(bL[1], b), G(bL[2], b)]
244+func bL (by,bz,bD) = {
245+ let bM = bC(by, bz, bD)
246+[G(bM[0], b), G(bM[1], b), G(bM[2], b)]
242247 }
243248
244249
245-func bM (bN,bO,bP,W) = {
246- let bD = aG()
247- let bQ = bD[q]
248- let bR = bD[r]
249- let bS = bD[s]
250- let bv = parseIntValue(bD[t])
251- let bw = parseIntValue(bD[u])
252- let bT = bD[p]
253- let bU = valueOrErrorMessage(assetInfo(fromBase58String(bQ)), (("Asset " + bQ) + " doesn't exist")).quantity
254- if ((bQ != bO))
250+func bN (bO,bP,bQ,X) = {
251+ let bE = aH()
252+ let bR = bE[q]
253+ let bS = bE[r]
254+ let bT = bE[s]
255+ let bw = parseIntValue(bE[t])
256+ let bx = parseIntValue(bE[u])
257+ let bU = bE[p]
258+ let bV = valueOrErrorMessage(assetInfo(fromBase58String(bR)), (("Asset " + bR) + " doesn't exist")).quantity
259+ if ((bR != bP))
255260 then throw("Invalid asset passed.")
256261 else {
257- let bV = bp(bR)
258- let bW = D(bV, bv)
259- let bX = bp(bS)
260- let bY = D(bX, bw)
261- let bZ = br(bY, bW)
262- let ca = G(bZ, b)
263- let cb = D(bP, b)
264- let cc = D(bU, b)
265- let cd = fraction(bW, cb, cc)
266- let ce = fraction(bY, cb, cc)
267- let cf = G(cd, bv)
262+ let bW = bq(bS)
263+ let bX = D(bW, bw)
264+ let bY = bq(bT)
265+ let bZ = D(bY, bx)
266+ let ca = bs(bZ, bX)
267+ let cb = G(ca, b)
268+ let cc = D(bQ, b)
269+ let cd = D(bV, b)
270+ let ce = fraction(bX, cc, cd)
271+ let cf = fraction(bZ, cc, cd)
268272 let cg = G(ce, bw)
269- let ch = if ((bN == ""))
273+ let ch = G(cf, bx)
274+ let ci = if ((bO == ""))
270275 then nil
271- else [ScriptTransfer(W, cf, if ((bR == "WAVES"))
276+ else [ScriptTransfer(X, cg, if ((bS == "WAVES"))
272277 then unit
273- else fromBase58String(bR)), ScriptTransfer(W, cg, if ((bS == "WAVES"))
278+ else fromBase58String(bS)), ScriptTransfer(X, ch, if ((bT == "WAVES"))
274279 then unit
275- else fromBase58String(bS)), StringEntry(Y(toString(W), bN), bl(cf, cg, bP, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
276- $Tuple10(cf, cg, bR, bS, bV, bX, bU, bZ, bT, ch)
280+ else fromBase58String(bT)), StringEntry(Z(toString(X), bO), bm(cg, ch, bQ, cb, height, lastBlock.timestamp)), IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb)]
281+ $Tuple10(cg, ch, bS, bT, bW, bY, bV, ca, bU, ci)
277282 }
278283 }
279284
280285
281-func ci (bN,cj,ck,cl,cm,cn,W,co,cp) = {
282- let bD = aG()
283- let bQ = fromBase58String(bD[q])
284- let cq = bD[r]
285- let cr = bD[s]
286- let cs = bD[v]
287- let ct = bD[w]
288- let bE = parseIntValue(bD[t])
289- let bF = parseIntValue(bD[u])
290- let bT = bD[p]
291- let bU = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
292- let cu = toBase58String(valueOrElse(cl, fromBase58String("WAVES")))
293- let cv = toBase58String(valueOrElse(cn, fromBase58String("WAVES")))
294- if (if ((cq != cu))
286+func cj (bO,ck,cl,cm,cn,co,X,cp,cq) = {
287+ let bE = aH()
288+ let bR = fromBase58String(bE[q])
289+ let cr = bE[r]
290+ let cs = bE[s]
291+ let ct = bE[v]
292+ let cu = bE[w]
293+ let bF = parseIntValue(bE[t])
294+ let bG = parseIntValue(bE[u])
295+ let bU = bE[p]
296+ let bV = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
297+ let cv = toBase58String(valueOrElse(cm, fromBase58String("WAVES")))
298+ let cw = toBase58String(valueOrElse(co, fromBase58String("WAVES")))
299+ if (if ((cr != cv))
295300 then true
296- else (cr != cv))
301+ else (cs != cw))
297302 then throw("Invalid amt or price asset passed.")
298303 else {
299- let bV = if (co)
300- then bp(cq)
301- else (bp(cq) - ck)
302- let bX = if (co)
303- then bp(cr)
304- else (bp(cr) - cm)
305- let cw = D(ck, bE)
306- let cx = D(cm, bF)
307- let cy = br(cx, cw)
308- let bW = D(bV, bE)
309- let bY = D(bX, bF)
310- let cz = if ((bU == 0))
304+ let bW = if (cp)
305+ then bq(cr)
306+ else (bq(cr) - cl)
307+ let bY = if (cp)
308+ then bq(cs)
309+ else (bq(cs) - cn)
310+ let cx = D(cl, bF)
311+ let cy = D(cn, bG)
312+ let cz = bs(cy, cx)
313+ let bX = D(bW, bF)
314+ let bZ = D(bY, bG)
315+ let cA = if ((bV == 0))
311316 then {
312- let bZ = e
313- let cA = e
314- let bH = pow((cw * cx), 0, toBigInt(5), 1, 0, DOWN)
315- $Tuple5(G(bH, b), G(cw, bE), G(cx, bF), br((bY + cx), (bW + cw)), cA)
317+ let ca = e
318+ let cB = e
319+ let bI = pow((cx * cy), 0, toBigInt(5), 1, 0, DOWN)
320+ $Tuple5(G(bI, b), G(cx, bF), G(cy, bG), bs((bZ + cy), (bX + cx)), cB)
316321 }
317322 else {
318- let bZ = br(bY, bW)
319- let cA = fraction(N((bZ - cy)), d, bZ)
320- let cB = D(cj, b)
321- if (if ((bZ != e))
322- then (cA > cB)
323+ let ca = bs(bZ, bX)
324+ let cB = fraction(O((ca - cz)), d, ca)
325+ let cC = D(ck, b)
326+ if (if ((ca != e))
327+ then (cB > cC)
323328 else false)
324- then throw(((("Price slippage " + toString(cA)) + " exceeded the passed limit of ") + toString(cB)))
329+ then throw(((("Price slippage " + toString(cB)) + " exceeded the passed limit of ") + toString(cC)))
325330 else {
326- let cc = D(bU, b)
327- let cC = fraction(cw, bZ, d)
328- let cD = fraction(cx, d, bZ)
329- let cE = if ((cC > cx))
330- then $Tuple2(cD, cx)
331- else $Tuple2(cw, cC)
332- let cF = cE._1
333- let cG = cE._2
334- let bH = fraction(cc, cG, bY)
335- $Tuple5(G(bH, b), G(cF, bE), G(cG, bF), bZ, cA)
331+ let cd = D(bV, b)
332+ let cD = fraction(cx, ca, d)
333+ let cE = fraction(cy, d, ca)
334+ let cF = if ((cD > cy))
335+ then $Tuple2(cE, cy)
336+ else $Tuple2(cx, cD)
337+ let cG = cF._1
338+ let cH = cF._2
339+ let bI = fraction(cd, cH, bZ)
340+ $Tuple5(G(bI, b), G(cG, bF), G(cH, bG), ca, cB)
336341 }
337342 }
338- let cH = cz._1
339- let cI = cz._2
340- let cJ = cz._3
341- let ca = G(cz._4, b)
342- let cK = G(cz._5, b)
343- if ((0 >= cH))
343+ let cI = cA._1
344+ let cJ = cA._2
345+ let cK = cA._3
346+ let cb = G(cA._4, b)
347+ let cL = G(cA._5, b)
348+ if ((0 >= cI))
344349 then throw("Invalid calculations. LP calculated is less than zero.")
345350 else {
346- let cL = if (!(cp))
351+ let cM = if (!(cq))
347352 then 0
348- else cH
349- let cM = (ck - cI)
350- let cN = (cm - cJ)
351- let cO = [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(W, bN), ba(cI, cJ, cL, ca, cj, cK, height, lastBlock.timestamp, cM, cN))]
352- $Tuple13(cH, cL, ca, bV, bX, bU, bQ, bT, cO, cM, cN, cl, cn)
353+ else cI
354+ let cN = (cl - cJ)
355+ let cO = (cn - cK)
356+ let cP = [IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb), StringEntry(W(X, bO), bb(cJ, cK, cM, cb, ck, cL, height, lastBlock.timestamp, cN, cO))]
357+ $Tuple13(cI, cM, cb, bW, bY, bV, bR, bU, cP, cN, cO, cm, co)
353358 }
354359 }
355360 }
356361
357362
358-func cP (cQ) = {
359- let bD = aG()
360- let cR = bD[r]
361- let cS = bD[s]
362- let bT = parseIntValue(bD[p])
363- let bE = parseIntValue(bD[t])
364- let bF = parseIntValue(bD[u])
365- let cT = bp(cR)
366- let cU = bp(cS)
367- let bZ = if ((cQ.orderType == Buy))
368- then bu(bE, bF, (cT + cQ.amount), cU)
369- else bu(bE, bF, (cT - cQ.amount), cU)
370- let ca = G(bZ, b)
371- if (if (if (aE())
363+func cQ (cR) = {
364+ let bE = aH()
365+ let cS = bE[r]
366+ let cT = bE[s]
367+ let bU = parseIntValue(bE[p])
368+ let bF = parseIntValue(bE[t])
369+ let bG = parseIntValue(bE[u])
370+ let cU = bq(cS)
371+ let cV = bq(cT)
372+ let ca = if ((cR.orderType == Buy))
373+ then bv(bF, bG, (cU + cR.amount), cV)
374+ else bv(bF, bG, (cU - cR.amount), cV)
375+ let cb = G(ca, b)
376+ if (if (if (aF())
372377 then true
373- else (bT == m))
378+ else (bU == m))
374379 then true
375- else (bT == n))
380+ else (bU == n))
376381 then throw("Exchange operations disabled")
377382 else {
378- let cV = cQ.assetPair.amountAsset
379- let cW = if ((cV == unit))
383+ let cW = cR.assetPair.amountAsset
384+ let cX = if ((cW == unit))
380385 then "WAVES"
381- else toBase58String(value(cV))
382- let cX = cQ.assetPair.priceAsset
383- let cY = if ((cX == unit))
386+ else toBase58String(value(cW))
387+ let cY = cR.assetPair.priceAsset
388+ let cZ = if ((cY == unit))
384389 then "WAVES"
385- else toBase58String(value(cX))
386- if (if ((cW != cR))
390+ else toBase58String(value(cY))
391+ if (if ((cX != cS))
387392 then true
388- else (cY != cS))
393+ else (cZ != cT))
389394 then throw("Wrong order assets.")
390395 else {
391- let cZ = cQ.price
392- let da = fraction(b, bF, bE)
393- let db = J(cZ, b, da)
394- let dc = if ((cQ.orderType == Buy))
395- then (ca >= db)
396- else (db >= ca)
396+ let da = cR.price
397+ let db = fraction(b, bG, bF)
398+ let dc = J(da, b, db)
399+ let dd = if ((cR.orderType == Buy))
400+ then (cb >= dc)
401+ else (dc >= cb)
397402 true
398403 }
399404 }
400405 }
401406
402407
403-func dd (de) = if ((size(de.payments) != 1))
408+func de (df) = if ((size(df.payments) != 1))
404409 then throw("exactly 1 payment is expected")
405410 else {
406- let df = value(de.payments[0])
407- let bO = value(df.assetId)
408- let dg = df.amount
409- let cz = bM(toBase58String(de.transactionId), toBase58String(bO), dg, de.caller)
410- let cf = cz._1
411- let cg = cz._2
412- let bT = parseIntValue(cz._9)
413- let ch = cz._10
414- if (if (aE())
411+ let dg = value(df.payments[0])
412+ let bP = value(dg.assetId)
413+ let dh = dg.amount
414+ let cA = bN(toBase58String(df.transactionId), toBase58String(bP), dh, df.caller)
415+ let cg = cA._1
416+ let ch = cA._2
417+ let bU = parseIntValue(cA._9)
418+ let ci = cA._10
419+ if (if (aF())
415420 then true
416- else (bT == n))
417- then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
418- else $Tuple5(cf, cg, dg, bO, ch)
421+ else (bU == n))
422+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
423+ else $Tuple5(cg, ch, dh, bP, ci)
419424 }
420425
421426
422-func dh (de,cj,cp) = if ((size(de.payments) != 2))
427+func di (df,ck,cq) = if ((size(df.payments) != 2))
423428 then throw("exactly 2 payments are expected")
424429 else {
425- let di = value(de.payments[0])
426- let dj = value(de.payments[1])
427- let dk = ci(toBase58String(de.transactionId), cj, di.amount, di.assetId, dj.amount, dj.assetId, toString(de.caller), false, cp)
428- let bT = parseIntValue(dk._8)
429- if (if (if (aE())
430+ let dj = value(df.payments[0])
431+ let dk = value(df.payments[1])
432+ let dl = cj(toBase58String(df.transactionId), ck, dj.amount, dj.assetId, dk.amount, dk.assetId, toString(df.caller), false, cq)
433+ let bU = parseIntValue(dl._8)
434+ if (if (if (aF())
430435 then true
431- else (bT == l))
436+ else (bU == l))
432437 then true
433- else (bT == n))
434- then throw(("Put operation is blocked by admin. Status = " + toString(bT)))
435- else dk
438+ else (bU == n))
439+ then throw(("Put operation is blocked by admin. Status = " + toString(bU)))
440+ else dl
436441 }
437442
438443
439-func dl (dm) = {
440- let dn = invoke(aC, "emit", [dm], nil)
441- if ((dn == dn))
444+func dm (dn) = {
445+ let do = invoke(aD, "emit", [dn], nil)
446+ if ((do == do))
442447 then {
443- let do = {
444- let dp = dn
445- if ($isInstanceOf(dp, "Address"))
448+ let dp = {
449+ let dq = do
450+ if ($isInstanceOf(dq, "Address"))
446451 then {
447- let dq = dp
448- invoke(dq, "emit", [dm], nil)
452+ let dr = dq
453+ invoke(dr, "emit", [dn], nil)
449454 }
450455 else unit
451456 }
452- if ((do == do))
453- then dm
457+ if ((dp == dp))
458+ then dn
454459 else throw("Strict value is not equal to itself.")
455460 }
456461 else throw("Strict value is not equal to itself.")
457462 }
458463
459464
460-func dr (dm) = {
461- let ds = fraction(dm, ad, b)
462- $Tuple2((dm - ds), ds)
465+func ds (dn) = {
466+ let dt = fraction(dn, ae, b)
467+ $Tuple2((dn - dt), dt)
463468 }
464469
465470
466-func dt (du,dv,W,X) = {
467- let dw = (X == unit)
468- let dx = aM(aG())
469- let dy = dx._1
470- let bT = dx._2
471- let bQ = dx._3
472- let dz = dx._4
473- let cS = dx._5
474- let dA = dx._6
475- let dB = dx._7
476- let dC = bp(aL(dz))
477- let dD = bp(aL(cS))
478- let dE = if ((dv == dz))
471+func du (dv,dw,X,Y) = {
472+ let dx = (Y == unit)
473+ let dy = aN(aH())
474+ let dz = dy._1
475+ let bU = dy._2
476+ let bR = dy._3
477+ let dA = dy._4
478+ let cT = dy._5
479+ let dB = dy._6
480+ let dC = dy._7
481+ let dD = bq(aM(dA))
482+ let dE = bq(aM(cT))
483+ let dF = if ((dw == dA))
479484 then true
480- else if ((dv == cS))
485+ else if ((dw == cT))
481486 then false
482- else aA("invalid asset")
483- let dF = if (dw)
484- then $Tuple2(dC, dD)
485- else if (dE)
486- then $Tuple2((dC - du), dD)
487- else $Tuple2(dC, (dD - du))
488- let dG = dF._1
489- let dH = dF._2
490- let dI = if (dE)
491- then $Tuple2(du, 0)
492- else $Tuple2(0, du)
493- let dJ = dI._1
494- let dK = dI._2
495- let dL = dr(dJ)._1
496- let dM = dr(dK)._1
497- let dN = dr(du)
498- let dO = dN._1
499- let ds = dN._2
500- let dP = (dG + dL)
487+ else aB("invalid asset")
488+ let dG = if (dx)
489+ then $Tuple2(dD, dE)
490+ else if (dF)
491+ then $Tuple2((dD - dv), dE)
492+ else $Tuple2(dD, (dE - dv))
493+ let dH = dG._1
494+ let dI = dG._2
495+ let dJ = if (dF)
496+ then $Tuple2(dv, 0)
497+ else $Tuple2(0, dv)
498+ let dK = dJ._1
499+ let dL = dJ._2
500+ let dM = ds(dK)._1
501+ let dN = ds(dL)._1
502+ let dO = ds(dv)
503+ let dP = dO._1
504+ let dt = dO._2
501505 let dQ = (dH + dM)
502- let ca = G(br(D(dQ, dB), D(dP, dA)), b)
503- let dR = if (dE)
504- then dG
505- else dH
506- let dS = toBigInt(dR)
507- let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
508- let dU = if ((dT > f))
506+ let dR = (dI + dN)
507+ let dS = bs(D(dR, dC), D(dQ, dB))
508+ let dT = G(dS, b)
509+ let dU = if (dF)
510+ then dH
511+ else dI
512+ let dV = toBigInt(dU)
513+ let dW = toBigInt(valueOrErrorMessage(assetInfo(bR), (("asset " + toBase58String(bR)) + " doesn't exist")).quantity)
514+ let dX = if ((dW > f))
509515 then true
510- else aA("initial deposit requires all coins")
511- if ((dU == dU))
516+ else aB("initial deposit requires all coins")
517+ if ((dX == dX))
512518 then {
513- let dV = toBigInt(dO)
514- let dW = max([0, toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 18, 18, DOWN) - d)) / d))])
515- let cO = if (dw)
519+ let dY = toBigInt(dP)
520+ let dZ = max([0, toInt(((dW * (sqrtBigInt((d + ((dY * d) / dV)), 18, 18, DOWN) - d)) / d))])
521+ let cP = if (dx)
516522 then nil
517- else [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(toString(value(W)), toBase58String(value(X))), ba(dJ, dK, dW, ca, 0, 0, height, lastBlock.timestamp, 0, 0))]
518- let dX = fraction(dH, b, dG)
519- let dY = fraction(du, b, (dX + b))
520- let dZ = (du - dY)
521- let ea = toInt(fraction(dT, toBigInt(dZ), toBigInt(dH)))
522- let eb = if ((ea == 0))
523- then if ((dW == 0))
524- then 0
525- else aA("bonus calculation error")
526- else fraction((dW - ea), b, ea)
527- $Tuple4(dW, cO, ds, eb)
523+ else [IntegerEntry(S(), dT), IntegerEntry(T(height, lastBlock.timestamp), dT), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bb(dK, dL, dZ, dT, 0, 0, height, lastBlock.timestamp, 0, 0))]
524+ let ea = bs(D(dI, dC), D(dH, dB))
525+ let eb = G(ea, b)
526+ let ec = N((((dT - eb) * b) / eb))
527+ $Tuple4(dZ, cP, dt, ec)
528528 }
529529 else throw("Strict value is not equal to itself.")
530530 }
531531
532532
533-func ec (ed,dO,dv,W,X) = {
534- let dw = (X == unit)
535- let ee = aM(aG())
536- let dy = ee._1
537- let bT = ee._2
538- let bQ = ee._3
539- let dz = ee._4
540- let cS = ee._5
541- let ef = ee._6
542- let eg = ee._7
543- let eh = [if ((dv == bQ))
533+func ed (ee,dP,dw,X,Y) = {
534+ let dx = (Y == unit)
535+ let ef = aN(aH())
536+ let dz = ef._1
537+ let bU = ef._2
538+ let bR = ef._3
539+ let dA = ef._4
540+ let cT = ef._5
541+ let eg = ef._6
542+ let eh = ef._7
543+ let ei = [if ((dw == bR))
544544 then true
545- else aA("invalid lp asset")]
546- if ((eh == eh))
545+ else aB("invalid lp asset")]
546+ if ((ei == ei))
547547 then {
548- let ei = if ((ed == dz))
548+ let ej = if ((ee == dA))
549549 then true
550- else if ((ed == cS))
550+ else if ((ee == cT))
551551 then false
552- else aA("invalid asset")
553- let ej = if (ei)
554- then toBigInt(bp(aL(dz)))
555- else toBigInt(bp(aL(cS)))
556- let ek = bp(aL(dz))
557- let el = bp(aL(cS))
558- let em = if (ei)
559- then ek
560- else el
561- let en = toBigInt(em)
562- let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
563- let eo = toBigInt(dO)
564- let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
565- let eq = dr(ep)
566- let er = eq._1
567- let ds = eq._2
568- let es = if (ei)
569- then $Tuple4(er, 0, (ek - ep), el)
570- else $Tuple4(0, er, ek, (el - ep))
571- let et = es._1
572- let eu = es._2
573- let ev = es._3
574- let ew = es._4
575- let ex = br(D(ew, eg), D(ev, ef))
576- let ca = G(ex, b)
577- let cO = if (dw)
552+ else aB("invalid asset")
553+ let ek = if (ej)
554+ then toBigInt(bq(aM(dA)))
555+ else toBigInt(bq(aM(cT)))
556+ let el = bq(aM(dA))
557+ let em = bq(aM(cT))
558+ let en = if (ej)
559+ then el
560+ else em
561+ let eo = toBigInt(en)
562+ let dW = toBigInt(valueOrErrorMessage(assetInfo(bR), (("asset " + toBase58String(bR)) + " doesn't exist")).quantity)
563+ let ep = toBigInt(dP)
564+ let eq = max([0, toInt(((ek * (d - pow((d - ((ep * d) / dW)), 18, h, 0, 18, DOWN))) / d))])
565+ let er = ds(eq)
566+ let es = er._1
567+ let dt = er._2
568+ let et = if (ej)
569+ then $Tuple4(es, 0, (el - eq), em)
570+ else $Tuple4(0, es, el, (em - eq))
571+ let eu = et._1
572+ let ev = et._2
573+ let ew = et._3
574+ let ex = et._4
575+ let dS = bs(D(ex, eh), D(ew, eg))
576+ let dT = G(dS, b)
577+ let cP = if (dx)
578578 then nil
579- else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bl(et, eu, dO, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
580- let ey = bM("", aL(bQ), dO, this)
581- let ez = (ey._1 + ey._2)
582- let eb = if ((ez == 0))
583- then if ((er == 0))
584- then 0
585- else aA("bonus calculation error")
586- else fraction((er - ez), b, ez)
587- $Tuple4(er, cO, ds, eb)
579+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(eu, ev, dP, dT, height, lastBlock.timestamp)), IntegerEntry(S(), dT), IntegerEntry(T(height, lastBlock.timestamp), dT)]
580+ let ea = bs(D(em, eh), D(el, eg))
581+ let eb = G(ea, b)
582+ let ec = N((((dT - eb) * b) / eb))
583+ $Tuple4(es, cP, dt, ec)
588584 }
589585 else throw("Strict value is not equal to itself.")
590586 }
591587
592588
593-func eA () = {
594- let dp = getString(P())
595- if ($isInstanceOf(dp, "String"))
589+func ey () = {
590+ let dq = getString(Q())
591+ if ($isInstanceOf(dq, "String"))
596592 then {
597- let eB = dp
598- fromBase58String(eB)
593+ let ez = dq
594+ fromBase58String(ez)
599595 }
600- else if ($isInstanceOf(dp, "Unit"))
596+ else if ($isInstanceOf(dq, "Unit"))
601597 then unit
602598 else throw("Match error")
603599 }
604600
605601
606-func eC () = {
607- let dp = getString(Q())
608- if ($isInstanceOf(dp, "String"))
602+func eA () = {
603+ let dq = getString(R())
604+ if ($isInstanceOf(dq, "String"))
609605 then {
610- let eB = dp
611- fromBase58String(eB)
606+ let ez = dq
607+ fromBase58String(ez)
612608 }
613- else if ($isInstanceOf(dp, "Unit"))
609+ else if ($isInstanceOf(dq, "Unit"))
614610 then unit
615611 else throw("Match error")
616612 }
617613
618614
619-func eD (de) = {
620- let eE = throw("Permission denied")
621- let dp = eA()
622- if ($isInstanceOf(dp, "ByteVector"))
615+func eB (df) = {
616+ let eC = throw("Permission denied")
617+ let dq = ey()
618+ if ($isInstanceOf(dq, "ByteVector"))
623619 then {
624- let eF = dp
625- if ((de.callerPublicKey == eF))
620+ let eD = dq
621+ if ((df.callerPublicKey == eD))
626622 then true
627- else eE
623+ else eC
628624 }
629- else if ($isInstanceOf(dp, "Unit"))
630- then if ((de.caller == this))
625+ else if ($isInstanceOf(dq, "Unit"))
626+ then if ((df.caller == this))
631627 then true
632- else eE
628+ else eC
633629 else throw("Match error")
634630 }
635631
636632
637-@Callable(de)
638-func setManager (eG) = {
639- let eH = eD(de)
640- if ((eH == eH))
633+@Callable(df)
634+func setManager (eE) = {
635+ let eF = eB(df)
636+ if ((eF == eF))
641637 then {
642- let eI = fromBase58String(eG)
643- if ((eI == eI))
644- then [StringEntry(Q(), eG)]
638+ let eG = fromBase58String(eE)
639+ if ((eG == eG))
640+ then [StringEntry(R(), eE)]
645641 else throw("Strict value is not equal to itself.")
646642 }
647643 else throw("Strict value is not equal to itself.")
649645
650646
651647
652-@Callable(de)
648+@Callable(df)
653649 func confirmManager () = {
654- let eJ = eC()
655- let eK = if (isDefined(eJ))
650+ let eH = eA()
651+ let eI = if (isDefined(eH))
656652 then true
657653 else throw("No pending manager")
658- if ((eK == eK))
654+ if ((eI == eI))
659655 then {
660- let eL = if ((de.callerPublicKey == value(eJ)))
656+ let eJ = if ((df.callerPublicKey == value(eH)))
661657 then true
662658 else throw("You are not pending manager")
663- if ((eL == eL))
664- then [StringEntry(P(), toBase58String(value(eJ))), DeleteEntry(Q())]
659+ if ((eJ == eJ))
660+ then [StringEntry(Q(), toBase58String(value(eH))), DeleteEntry(R())]
665661 else throw("Strict value is not equal to itself.")
666662 }
667663 else throw("Strict value is not equal to itself.")
669665
670666
671667
672-@Callable(de)
673-func put (cj,eM) = if ((0 > cj))
668+@Callable(df)
669+func put (ck,eK) = if ((0 > ck))
674670 then throw("Invalid slippageTolerance passed")
675671 else {
676- let dk = dh(de, cj, true)
677- let cL = dk._2
678- let bQ = dk._7
679- let ch = dk._9
680- let cM = dk._10
681- let cN = dk._11
682- let eN = dk._12
683- let eO = dk._13
684- let dn = invoke(aC, "emit", [cL], nil)
685- if ((dn == dn))
672+ let dl = di(df, ck, true)
673+ let cM = dl._2
674+ let bR = dl._7
675+ let ci = dl._9
676+ let cN = dl._10
677+ let cO = dl._11
678+ let eL = dl._12
679+ let eM = dl._13
680+ let do = invoke(aD, "emit", [cM], nil)
681+ if ((do == do))
686682 then {
687- let do = {
688- let dp = dn
689- if ($isInstanceOf(dp, "Address"))
683+ let dp = {
684+ let dq = do
685+ if ($isInstanceOf(dq, "Address"))
690686 then {
691- let dq = dp
692- invoke(dq, "emit", [cL], nil)
687+ let dr = dq
688+ invoke(dr, "emit", [cM], nil)
693689 }
694690 else unit
695691 }
696- if ((do == do))
692+ if ((dp == dp))
697693 then {
698- let eP = if ((cM > 0))
699- then invoke(aZ, "put", nil, [AttachedPayment(eN, cM)])
694+ let eN = if ((cN > 0))
695+ then invoke(ba, "put", nil, [AttachedPayment(eL, cN)])
700696 else nil
701- if ((eP == eP))
697+ if ((eN == eN))
702698 then {
703- let eQ = if ((cN > 0))
704- then invoke(aZ, "put", nil, [AttachedPayment(eO, cN)])
699+ let eO = if ((cO > 0))
700+ then invoke(ba, "put", nil, [AttachedPayment(eM, cO)])
705701 else nil
706- if ((eQ == eQ))
702+ if ((eO == eO))
707703 then {
708- let eR = if (eM)
704+ let eP = if (eK)
709705 then {
710- let eS = invoke(aY, "stake", nil, [AttachedPayment(bQ, cL)])
711- if ((eS == eS))
706+ let eQ = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
707+ if ((eQ == eQ))
712708 then nil
713709 else throw("Strict value is not equal to itself.")
714710 }
715- else [ScriptTransfer(de.caller, cL, bQ)]
716- (ch ++ eR)
711+ else [ScriptTransfer(df.caller, cM, bR)]
712+ (ci ++ eP)
717713 }
718714 else throw("Strict value is not equal to itself.")
719715 }
726722
727723
728724
729-@Callable(de)
730-func putForFree (eT) = if ((0 > eT))
725+@Callable(df)
726+func putForFree (eR) = if ((0 > eR))
731727 then throw("Invalid value passed")
732728 else {
733- let dk = dh(de, eT, false)
734- dk._9
729+ let dl = di(df, eR, false)
730+ dl._9
735731 }
736732
737733
738734
739-@Callable(de)
740-func putOneTkn (eU,eV) = {
741- let eW = if (if (aE())
735+@Callable(df)
736+func putOneTkn (eS,eT) = {
737+ let eU = if (if (aF())
742738 then true
743- else (aR == l))
739+ else (aS == l))
744740 then true
745- else (aR == n)
746- let eh = [if (!(eW))
741+ else (aS == n)
742+ let ei = [if (!(eU))
747743 then true
748- else aA("put operation is blocked by admin"), if ((size(de.payments) == 1))
744+ else aB("put operation is blocked by admin"), if ((size(df.payments) == 1))
749745 then true
750- else aA("exactly 1 payment are expected")]
751- if ((eh == eh))
746+ else aB("exactly 1 payment are expected")]
747+ if ((ei == ei))
752748 then {
753- let eX = de.payments[0]
754- let dv = eX.assetId
755- let du = eX.amount
756- let W = de.caller
757- let X = de.transactionId
758- let eY = dt(du, dv, W, X)
759- let eZ = eY._1
760- let cO = eY._2
761- let ds = eY._3
762- let eb = eY._4
763- let fa = if (if ((eU > 0))
764- then (eU > eZ)
749+ let eV = df.payments[0]
750+ let dw = eV.assetId
751+ let dv = eV.amount
752+ let X = df.caller
753+ let Y = df.transactionId
754+ let eW = du(dv, dw, X, Y)
755+ let eX = eW._1
756+ let cP = eW._2
757+ let dt = eW._3
758+ let eY = eW._4
759+ let eZ = if (if ((eS > 0))
760+ then (eS > eX)
765761 else false)
766- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
767- else eZ
768- let dn = dl(fa)
769- if ((dn == dn))
762+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
763+ else eX
764+ let do = dm(eZ)
765+ if ((do == do))
770766 then {
771- let eR = if (eV)
767+ let eP = if (eT)
772768 then {
773- let fb = invoke(aY, "stake", nil, [AttachedPayment(aS, fa)])
774- if ((fb == fb))
769+ let fa = invoke(aZ, "stake", nil, [AttachedPayment(aT, eZ)])
770+ if ((fa == fa))
775771 then nil
776772 else throw("Strict value is not equal to itself.")
777773 }
778- else [ScriptTransfer(de.caller, fa, aS)]
779- let fc = if ((ds > 0))
780- then [ScriptTransfer(aD, ds, dv)]
774+ else [ScriptTransfer(df.caller, eZ, aT)]
775+ let fb = if ((dt > 0))
776+ then [ScriptTransfer(aE, dt, dw)]
781777 else nil
782- $Tuple2(((cO ++ eR) ++ fc), fa)
778+ $Tuple2(((cP ++ eP) ++ fb), eZ)
783779 }
784780 else throw("Strict value is not equal to itself.")
785781 }
788784
789785
790786
791-@Callable(de)
792-func putOneTknREADONLY (dv,du) = {
793- let fd = dt(du, aJ(dv), unit, unit)
794- let eZ = fd._1
795- let cO = fd._2
796- let ds = fd._3
797- let eb = fd._4
798- $Tuple2(nil, $Tuple3(eZ, ds, eb))
787+@Callable(df)
788+func putOneTknREADONLY (dw,dv) = {
789+ let fc = du(dv, aK(dw), unit, unit)
790+ let eX = fc._1
791+ let cP = fc._2
792+ let dt = fc._3
793+ let eY = fc._4
794+ $Tuple2(nil, $Tuple3(eX, dt, eY))
799795 }
800796
801797
802798
803-@Callable(de)
804-func getOneTkn (fe,eU) = {
805- let ff = if (aE())
799+@Callable(df)
800+func getOneTkn (fd,eS) = {
801+ let fe = if (aF())
806802 then true
807- else (aR == n)
808- let eh = [if (!(ff))
803+ else (aS == n)
804+ let ei = [if (!(fe))
809805 then true
810- else aA("get operation is blocked by admin"), if ((size(de.payments) == 1))
806+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 1))
811807 then true
812- else aA("exactly 1 payment are expected")]
813- if ((eh == eh))
808+ else aB("exactly 1 payment are expected")]
809+ if ((ei == ei))
814810 then {
815- let ed = aJ(fe)
816- let eX = de.payments[0]
817- let dv = eX.assetId
818- let dO = eX.amount
819- let W = de.caller
820- let X = de.transactionId
821- let fg = ec(ed, dO, dv, W, X)
822- let fh = fg._1
823- let cO = fg._2
824- let ds = fg._3
825- let eb = fg._4
826- let dm = if (if ((eU > 0))
827- then (eU > fh)
811+ let ee = aK(fd)
812+ let eV = df.payments[0]
813+ let dw = eV.assetId
814+ let dP = eV.amount
815+ let X = df.caller
816+ let Y = df.transactionId
817+ let ff = ed(ee, dP, dw, X, Y)
818+ let fg = ff._1
819+ let cP = ff._2
820+ let dt = ff._3
821+ let eY = ff._4
822+ let dn = if (if ((eS > 0))
823+ then (eS > fg)
828824 else false)
829- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
830- else fh
831- let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
832- if ((fi == fi))
825+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
826+ else fg
827+ let fh = invoke(aD, "burn", [dP], [AttachedPayment(dw, dP)])
828+ if ((fh == fh))
833829 then {
834- let fj = [ScriptTransfer(W, dm, ed)]
835- let fc = if ((ds > 0))
836- then [ScriptTransfer(aD, ds, ed)]
830+ let fi = [ScriptTransfer(X, dn, ee)]
831+ let fb = if ((dt > 0))
832+ then [ScriptTransfer(aE, dt, ee)]
837833 else nil
838- $Tuple2(((cO ++ fj) ++ fc), dm)
834+ $Tuple2(((cP ++ fi) ++ fb), dn)
839835 }
840836 else throw("Strict value is not equal to itself.")
841837 }
844840
845841
846842
847-@Callable(de)
848-func getOneTknREADONLY (ed,dO) = {
849- let fk = ec(aJ(ed), dO, aS, unit, unit)
850- let fh = fk._1
851- let cO = fk._2
852- let ds = fk._3
853- let eb = fk._4
854- $Tuple2(nil, $Tuple3(fh, ds, eb))
843+@Callable(df)
844+func getOneTknREADONLY (ee,dP) = {
845+ let fj = ed(aK(ee), dP, aT, unit, unit)
846+ let fg = fj._1
847+ let cP = fj._2
848+ let dt = fj._3
849+ let eY = fj._4
850+ $Tuple2(nil, $Tuple3(fg, dt, eY))
855851 }
856852
857853
858854
859-@Callable(de)
860-func unstakeAndGetOneTkn (fl,fe,eU) = {
861- let ff = if (aE())
855+@Callable(df)
856+func unstakeAndGetOneTkn (fk,fd,eS) = {
857+ let fe = if (aF())
862858 then true
863- else (aR == n)
864- let eh = [if (!(ff))
859+ else (aS == n)
860+ let ei = [if (!(fe))
865861 then true
866- else aA("get operation is blocked by admin"), if ((size(de.payments) == 0))
862+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 0))
867863 then true
868- else aA("no payments are expected")]
869- if ((eh == eh))
864+ else aB("no payments are expected")]
865+ if ((ei == ei))
870866 then {
871- let ed = aJ(fe)
872- let fm = invoke(aY, "unstake", [toBase58String(aS), fl], nil)
873- if ((fm == fm))
867+ let ee = aK(fd)
868+ let fl = invoke(aZ, "unstake", [toBase58String(aT), fk], nil)
869+ if ((fl == fl))
874870 then {
875- let fn = ec(ed, fl, aS, unit, unit)
876- let fh = fn._1
877- let cO = fn._2
878- let ds = fn._3
879- let eb = fn._4
880- let dm = if (if ((eU > 0))
881- then (eU > fh)
871+ let fm = ed(ee, fk, aT, unit, unit)
872+ let fg = fm._1
873+ let cP = fm._2
874+ let dt = fm._3
875+ let eY = fm._4
876+ let dn = if (if ((eS > 0))
877+ then (eS > fg)
882878 else false)
883- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
884- else fh
885- let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
886- if ((fi == fi))
879+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
880+ else fg
881+ let fh = invoke(aD, "burn", [fk], [AttachedPayment(aT, fk)])
882+ if ((fh == fh))
887883 then {
888- let fj = [ScriptTransfer(de.caller, dm, ed)]
889- let fc = if ((ds > 0))
890- then [ScriptTransfer(aD, ds, ed)]
884+ let fi = [ScriptTransfer(df.caller, dn, ee)]
885+ let fb = if ((dt > 0))
886+ then [ScriptTransfer(aE, dt, ee)]
891887 else nil
892- $Tuple2(((cO ++ fj) ++ fc), dm)
888+ $Tuple2(((cP ++ fi) ++ fb), dn)
893889 }
894890 else throw("Strict value is not equal to itself.")
895891 }
900896
901897
902898
903-@Callable(de)
899+@Callable(df)
904900 func get () = {
905- let cz = dd(de)
906- let fo = cz._1
907- let cg = cz._2
908- let dg = cz._3
909- let bO = cz._4
910- let ch = cz._5
911- let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
912- if ((fp == fp))
913- then ch
901+ let cA = de(df)
902+ let fn = cA._1
903+ let ch = cA._2
904+ let dh = cA._3
905+ let bP = cA._4
906+ let ci = cA._5
907+ let fo = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
908+ if ((fo == fo))
909+ then ci
914910 else throw("Strict value is not equal to itself.")
915911 }
916912
917913
918914
919-@Callable(de)
920-func getNoLess (fq,fr) = {
921- let cz = dd(de)
922- let cf = cz._1
923- let cg = cz._2
924- let dg = cz._3
925- let bO = cz._4
926- let ch = cz._5
927- if ((fq > cf))
928- then throw(((("noLessThenAmtAsset failed: " + toString(cf)) + " < ") + toString(fq)))
929- else if ((fr > cg))
930- then throw(((("noLessThenPriceAsset failed: " + toString(cg)) + " < ") + toString(fr)))
915+@Callable(df)
916+func getNoLess (fp,fq) = {
917+ let cA = de(df)
918+ let cg = cA._1
919+ let ch = cA._2
920+ let dh = cA._3
921+ let bP = cA._4
922+ let ci = cA._5
923+ if ((fp > cg))
924+ then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fp)))
925+ else if ((fq > ch))
926+ then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fq)))
931927 else {
932- let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
933- if ((fp == fp))
934- then ch
928+ let fo = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
929+ if ((fo == fo))
930+ then ci
935931 else throw("Strict value is not equal to itself.")
936932 }
937933 }
938934
939935
940936
941-@Callable(de)
942-func unstakeAndGet (dm) = {
943- let fs = if ((size(de.payments) != 0))
937+@Callable(df)
938+func unstakeAndGet (dn) = {
939+ let fr = if ((size(df.payments) != 0))
944940 then throw("No payments are expected")
945941 else true
946- if ((fs == fs))
942+ if ((fr == fr))
947943 then {
948- let bD = aG()
949- let bQ = fromBase58String(bD[q])
950- let fm = invoke(aY, "unstake", [toBase58String(bQ), dm], nil)
951- if ((fm == fm))
944+ let bE = aH()
945+ let bR = fromBase58String(bE[q])
946+ let fl = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
947+ if ((fl == fl))
952948 then {
953- let cz = bM(toBase58String(de.transactionId), toBase58String(bQ), dm, de.caller)
954- let bT = parseIntValue(cz._9)
955- let ch = cz._10
956- let ft = if (if (aE())
949+ let cA = bN(toBase58String(df.transactionId), toBase58String(bR), dn, df.caller)
950+ let bU = parseIntValue(cA._9)
951+ let ci = cA._10
952+ let fs = if (if (aF())
957953 then true
958- else (bT == n))
959- then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
954+ else (bU == n))
955+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
960956 else true
961- if ((ft == ft))
957+ if ((fs == fs))
962958 then {
963- let fp = invoke(aC, "burn", [dm], [AttachedPayment(bQ, dm)])
964- if ((fp == fp))
965- then ch
959+ let fo = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
960+ if ((fo == fo))
961+ then ci
966962 else throw("Strict value is not equal to itself.")
967963 }
968964 else throw("Strict value is not equal to itself.")
974970
975971
976972
977-@Callable(de)
978-func activate (fu,fv) = if ((toString(de.caller) != toString(aC)))
973+@Callable(df)
974+func activate (ft,fu) = if ((toString(df.caller) != toString(aD)))
979975 then throw("permissions denied")
980- else $Tuple2([StringEntry(Z(), fu), StringEntry(aa(), fv)], "success")
976+ else $Tuple2([StringEntry(aa(), ft), StringEntry(ab(), fu)], "success")
981977
982978
983979
984-@Callable(de)
985-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG())
980+@Callable(df)
981+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aH())
986982
987983
988984
989-@Callable(de)
990-func getAccBalanceWrapperREADONLY (bq) = $Tuple2(nil, bp(bq))
985+@Callable(df)
986+func getAccBalanceWrapperREADONLY (br) = $Tuple2(nil, bq(br))
991987
992988
993989
994-@Callable(de)
995-func calcPricesWrapperREADONLY (bx,by,bC) = {
996- let bL = bB(bx, by, bC)
997- $Tuple2(nil, [toString(bL[0]), toString(bL[1]), toString(bL[2])])
990+@Callable(df)
991+func calcPricesWrapperREADONLY (by,bz,bD) = {
992+ let bM = bC(by, bz, bD)
993+ $Tuple2(nil, [toString(bM[0]), toString(bM[1]), toString(bM[2])])
998994 }
999995
1000996
1001997
1002-@Callable(de)
998+@Callable(df)
1003999 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
10041000
10051001
10061002
1007-@Callable(de)
1003+@Callable(df)
10081004 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10091005
10101006
10111007
1012-@Callable(de)
1013-func calcPriceBigIntWrapperREADONLY (bs,bt) = $Tuple2(nil, toString(br(parseBigIntValue(bs), parseBigIntValue(bt))))
1008+@Callable(df)
1009+func calcPriceBigIntWrapperREADONLY (bt,bu) = $Tuple2(nil, toString(bs(parseBigIntValue(bt), parseBigIntValue(bu))))
10141010
10151011
10161012
1017-@Callable(de)
1018-func estimatePutOperationWrapperREADONLY (bN,cj,ck,cl,cm,cn,W,co,cp) = $Tuple2(nil, ci(bN, cj, ck, cl, cm, cn, W, co, cp))
1013+@Callable(df)
1014+func estimatePutOperationWrapperREADONLY (bO,ck,cl,cm,cn,co,X,cp,cq) = $Tuple2(nil, cj(bO, ck, cl, cm, cn, co, X, cp, cq))
10191015
10201016
10211017
1022-@Callable(de)
1023-func estimateGetOperationWrapperREADONLY (bN,bO,bP,W) = {
1024- let cz = bM(bN, bO, bP, addressFromStringValue(W))
1025- $Tuple2(nil, $Tuple10(cz._1, cz._2, cz._3, cz._4, cz._5, cz._6, cz._7, toString(cz._8), cz._9, cz._10))
1018+@Callable(df)
1019+func estimateGetOperationWrapperREADONLY (bO,bP,bQ,X) = {
1020+ let cA = bN(bO, bP, bQ, addressFromStringValue(X))
1021+ $Tuple2(nil, $Tuple10(cA._1, cA._2, cA._3, cA._4, cA._5, cA._6, cA._7, toString(cA._8), cA._9, cA._10))
10261022 }
10271023
10281024
10291025
1030-@Callable(de)
1026+@Callable(df)
10311027 func statsREADONLY () = {
1032- let bD = aG()
1033- let bQ = fromBase58String(bD[q])
1034- let cR = bD[r]
1035- let cS = bD[s]
1036- let cs = bD[v]
1037- let ct = bD[w]
1038- let bE = parseIntValue(bD[t])
1039- let bF = parseIntValue(bD[u])
1040- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1041- let cT = bp(cR)
1042- let cU = bp(cS)
1043- let fx = if ((fw == 0))
1028+ let bE = aH()
1029+ let bR = fromBase58String(bE[q])
1030+ let cS = bE[r]
1031+ let cT = bE[s]
1032+ let ct = bE[v]
1033+ let cu = bE[w]
1034+ let bF = parseIntValue(bE[t])
1035+ let bG = parseIntValue(bE[u])
1036+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1037+ let cU = bq(cS)
1038+ let cV = bq(cT)
1039+ let fw = if ((fv == 0))
10441040 then [e, e, e]
1045- else bB(cT, cU, fw)
1046- let ca = 0
1047- let fy = G(fx[1], b)
1048- let fz = G(fx[2], b)
1049- let fA = value(getInteger(aC, ao(toString(this))))
1050- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cT), toString(cU), toString(fw), toString(ca), toString(fy), toString(fz), toString(fA)], j))
1041+ else bC(cU, cV, fv)
1042+ let cb = 0
1043+ let fx = G(fw[1], b)
1044+ let fy = G(fw[2], b)
1045+ let fz = value(getInteger(aD, ap(toString(this))))
1046+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fv), toString(cb), toString(fx), toString(fy), toString(fz)], j))
10511047 }
10521048
10531049
10541050
1055-@Callable(de)
1056-func evaluatePutByAmountAssetREADONLY (ck) = {
1057- let bD = aG()
1058- let bQ = fromBase58String(bD[q])
1059- let cq = bD[r]
1060- let bR = fromBase58String(cq)
1061- let cr = bD[s]
1051+@Callable(df)
1052+func evaluatePutByAmountAssetREADONLY (cl) = {
1053+ let bE = aH()
1054+ let bR = fromBase58String(bE[q])
1055+ let cr = bE[r]
10621056 let bS = fromBase58String(cr)
1063- let bE = parseIntValue(bD[t])
1064- let bF = parseIntValue(bD[u])
1065- let bT = bD[p]
1066- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1067- let cT = bp(cq)
1068- let cU = bp(cr)
1069- let bz = D(cT, bE)
1057+ let cs = bE[s]
1058+ let bT = fromBase58String(cs)
1059+ let bF = parseIntValue(bE[t])
1060+ let bG = parseIntValue(bE[u])
1061+ let bU = bE[p]
1062+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1063+ let cU = bq(cr)
1064+ let cV = bq(cs)
10701065 let bA = D(cU, bF)
1071- let bZ = if ((fw == 0))
1066+ let bB = D(cV, bG)
1067+ let ca = if ((fv == 0))
10721068 then e
1073- else br(bA, bz)
1074- let cw = D(ck, bE)
1075- let cx = fraction(cw, bZ, d)
1076- let cm = G(cx, bF)
1077- let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
1078- let cH = dk._1
1079- let fB = dk._3
1080- let bV = dk._4
1081- let bX = dk._5
1082- let bU = dk._6
1083- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
1069+ else bs(bB, bA)
1070+ let cx = D(cl, bF)
1071+ let cy = fraction(cx, ca, d)
1072+ let cn = G(cy, bG)
1073+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1074+ let cI = dl._1
1075+ let fA = dl._3
1076+ let bW = dl._4
1077+ let bY = dl._5
1078+ let bV = dl._6
1079+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
10841080 }
10851081
10861082
10871083
1088-@Callable(de)
1089-func evaluatePutByPriceAssetREADONLY (cm) = {
1090- let bD = aG()
1091- let bQ = fromBase58String(bD[q])
1092- let cq = bD[r]
1093- let bR = fromBase58String(cq)
1094- let cr = bD[s]
1084+@Callable(df)
1085+func evaluatePutByPriceAssetREADONLY (cn) = {
1086+ let bE = aH()
1087+ let bR = fromBase58String(bE[q])
1088+ let cr = bE[r]
10951089 let bS = fromBase58String(cr)
1096- let bE = parseIntValue(bD[t])
1097- let bF = parseIntValue(bD[u])
1098- let bT = bD[p]
1099- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1100- let fC = bp(cq)
1101- let fD = bp(cr)
1102- let fE = D(fC, bE)
1103- let fF = D(fD, bF)
1104- let bZ = if ((fw == 0))
1090+ let cs = bE[s]
1091+ let bT = fromBase58String(cs)
1092+ let bF = parseIntValue(bE[t])
1093+ let bG = parseIntValue(bE[u])
1094+ let bU = bE[p]
1095+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1096+ let fB = bq(cr)
1097+ let fC = bq(cs)
1098+ let fD = D(fB, bF)
1099+ let fE = D(fC, bG)
1100+ let ca = if ((fv == 0))
11051101 then e
1106- else br(fF, fE)
1107- let cx = D(cm, bF)
1108- let cw = fraction(cx, d, bZ)
1109- let ck = G(cw, bE)
1110- let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
1111- let cH = dk._1
1112- let fB = dk._3
1113- let bV = dk._4
1114- let bX = dk._5
1115- let bU = dk._6
1116- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
1102+ else bs(fE, fD)
1103+ let cy = D(cn, bG)
1104+ let cx = fraction(cy, d, ca)
1105+ let cl = G(cx, bF)
1106+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1107+ let cI = dl._1
1108+ let fA = dl._3
1109+ let bW = dl._4
1110+ let bY = dl._5
1111+ let bV = dl._6
1112+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
11171113 }
11181114
11191115
11201116
1121-@Callable(de)
1122-func evaluateGetREADONLY (fG,fH) = {
1123- let cz = bM("", fG, fH, this)
1124- let cf = cz._1
1125- let cg = cz._2
1126- let bV = cz._5
1127- let bX = cz._6
1128- let bU = cz._7
1129- let ca = cz._8
1130- let bT = parseIntValue(cz._9)
1131- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cf), toString(cg), toString(bV), toString(bX), toString(bU), toString(ca), toString(bT)], j))
1117+@Callable(df)
1118+func evaluateGetREADONLY (fF,fG) = {
1119+ let cA = bN("", fF, fG, this)
1120+ let cg = cA._1
1121+ let ch = cA._2
1122+ let bW = cA._5
1123+ let bY = cA._6
1124+ let bV = cA._7
1125+ let cb = cA._8
1126+ let bU = parseIntValue(cA._9)
1127+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cg), toString(ch), toString(bW), toString(bY), toString(bV), toString(cb), toString(bU)], j))
11321128 }
11331129
11341130
1135-@Verifier(fI)
1136-func fJ () = {
1137- let fK = {
1138- let dp = eA()
1139- if ($isInstanceOf(dp, "ByteVector"))
1131+@Verifier(fH)
1132+func fI () = {
1133+ let fJ = {
1134+ let dq = ey()
1135+ if ($isInstanceOf(dq, "ByteVector"))
11401136 then {
1141- let eF = dp
1142- eF
1137+ let eD = dq
1138+ eD
11431139 }
1144- else if ($isInstanceOf(dp, "Unit"))
1145- then fI.senderPublicKey
1140+ else if ($isInstanceOf(dq, "Unit"))
1141+ then fH.senderPublicKey
11461142 else throw("Match error")
11471143 }
1148- let dp = fI
1149- if ($isInstanceOf(dp, "Order"))
1144+ let dq = fH
1145+ if ($isInstanceOf(dq, "Order"))
11501146 then {
1151- let cQ = dp
1152- let fL = aF()
1153- let at = cP(cQ)
1154- let au = sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
1155- let av = sigVerify(cQ.bodyBytes, cQ.proofs[1], fL)
1156- if (if (if (at)
1157- then au
1158- else false)
1147+ let cR = dq
1148+ let fK = aG()
1149+ let au = cQ(cR)
1150+ let av = sigVerify(cR.bodyBytes, cR.proofs[0], cR.senderPublicKey)
1151+ let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fK)
1152+ if (if (if (au)
11591153 then av
11601154 else false)
1155+ then aw
1156+ else false)
11611157 then true
1162- else as(at, au, av)
1158+ else at(au, av, aw)
11631159 }
1164- else if ($isInstanceOf(dp, "SetScriptTransaction"))
1160+ else if ($isInstanceOf(dq, "SetScriptTransaction"))
11651161 then {
1166- let eB = dp
1167- let fM = blake2b256(value(eB.script))
1168- let fN = fromBase64String(value(getString(aC, aq())))
1169- let fO = scriptHash(this)
1170- if (if ((fN == fM))
1171- then (fO != fM)
1162+ let ez = dq
1163+ let fL = blake2b256(value(ez.script))
1164+ let fM = fromBase64String(value(getString(aD, ar())))
1165+ let fN = scriptHash(this)
1166+ if (if ((fM == fL))
1167+ then (fN != fL)
11721168 else false)
11731169 then true
1174- else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
1170+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11751171 }
1176- else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
1172+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11771173 }
11781174
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (H,I) = toInt(fraction(H, toBigInt(I), d))
6666
6767
6868 func J (K,L,M) = fraction(K, L, M)
6969
7070
71-func N (H) = if ((e > H))
71+func N (H) = if ((0 > H))
7272 then -(H)
7373 else H
7474
7575
76-func O () = "%s__factoryContract"
76+func O (H) = if ((e > H))
77+ then -(H)
78+ else H
7779
7880
79-func P () = "%s__managerPublicKey"
81+func P () = "%s__factoryContract"
8082
8183
82-func Q () = "%s__pendingManagerPublicKey"
84+func Q () = "%s__managerPublicKey"
8385
8486
85-func R () = "%s%s__price__last"
87+func R () = "%s__pendingManagerPublicKey"
8688
8789
88-func S (T,U) = makeString(["%s%s%d%d__price__history", toString(T), toString(U)], j)
90+func S () = "%s%s__price__last"
8991
9092
91-func V (W,X) = ((("%s%s%s__P__" + W) + "__") + X)
93+func T (U,V) = makeString(["%s%s%d%d__price__history", toString(U), toString(V)], j)
9294
9395
94-func Y (W,X) = ((("%s%s%s__G__" + W) + "__") + X)
96+func W (X,Y) = ((("%s%s%s__P__" + X) + "__") + Y)
9597
9698
97-func Z () = "%s__amountAsset"
99+func Z (X,Y) = ((("%s%s%s__G__" + X) + "__") + Y)
98100
99101
100-func aa () = "%s__priceAsset"
102+func aa () = "%s__amountAsset"
101103
102104
103-let ab = "%s__fee"
104-
105-let ac = fraction(5, b, 10000)
106-
107-let ad = valueOrElse(getInteger(this, ab), ac)
108-
109-func ae () = "%s__factoryConfig"
105+func ab () = "%s__priceAsset"
110106
111107
112-func af () = "%s%s__matcher__publicKey"
108+let ac = "%s__fee"
109+
110+let ad = fraction(5, b, 10000)
111+
112+let ae = valueOrElse(getInteger(this, ac), ad)
113+
114+func af () = "%s__factoryConfig"
113115
114116
115-func ag (ah) = (("%s%s%s__" + ah) + "__mappings__poolContract2LpAsset")
117+func ag () = "%s%s__matcher__publicKey"
116118
117119
118-func ai (aj,ak) = (((("%d%d%s__" + aj) + "__") + ak) + "__config")
120+func ah (ai) = (("%s%s%s__" + ai) + "__mappings__poolContract2LpAsset")
119121
120122
121-func al (am) = ("%s%s%s__mappings__baseAsset2internalId__" + am)
123+func aj (ak,al) = (((("%d%d%s__" + ak) + "__") + al) + "__config")
122124
123125
124-func an () = "%s__shutdown"
126+func am (an) = ("%s%s%s__mappings__baseAsset2internalId__" + an)
125127
126128
127-func ao (ap) = ("%s%s__poolWeight__" + ap)
129+func ao () = "%s__shutdown"
128130
129131
130-func aq () = "%s__allowedLpScriptHash"
132+func ap (aq) = ("%s%s__poolWeight__" + aq)
131133
132134
133-let ar = "%s__feeCollectorAddress"
134-
135-func as (at,au,av) = throw(((((("order validation failed: orderValid=" + toString(at)) + " senderValid=") + toString(au)) + " matcherValid=") + toString(av)))
135+func ar () = "%s__allowedLpScriptHash"
136136
137137
138-func aw (ax,ay) = valueOrErrorMessage(getString(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
138+let as = "%s__feeCollectorAddress"
139+
140+func at (au,av,aw) = throw(((((("order validation failed: orderValid=" + toString(au)) + " senderValid=") + toString(av)) + " matcherValid=") + toString(aw)))
139141
140142
141-func az (ax,ay) = valueOrErrorMessage(getInteger(ax, ay), makeString(["mandatory ", toString(ax), ".", ay, " is not defined"], ""))
143+func ax (ay,az) = valueOrErrorMessage(getString(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
142144
143145
144-func aA (aB) = throw(makeString(["lp.ride:", aB], " "))
146+func aA (ay,az) = valueOrErrorMessage(getInteger(ay, az), makeString(["mandatory ", toString(ay), ".", az, " is not defined"], ""))
145147
146148
147-let aC = addressFromStringValue(aw(this, O()))
148-
149-let aD = addressFromStringValue(aw(aC, ar))
150-
151-func aE () = valueOrElse(getBoolean(aC, an()), false)
149+func aB (aC) = throw(makeString(["lp.ride:", aC], " "))
152150
153151
154-func aF () = fromBase58String(aw(aC, af()))
152+let aD = addressFromStringValue(ax(this, P()))
153+
154+let aE = addressFromStringValue(ax(aD, as))
155+
156+func aF () = valueOrElse(getBoolean(aD, ao()), false)
155157
156158
157-func aG () = {
158- let aH = aw(this, Z())
159- let aI = aw(this, aa())
160- let ak = az(aC, al(aI))
161- let aj = az(aC, al(aH))
162- split(aw(aC, ai(toString(aj), toString(ak))), j)
159+func aG () = fromBase58String(ax(aD, ag()))
160+
161+
162+func aH () = {
163+ let aI = ax(this, aa())
164+ let aJ = ax(this, ab())
165+ let al = aA(aD, am(aJ))
166+ let ak = aA(aD, am(aI))
167+ split(ax(aD, aj(toString(ak), toString(al))), j)
163168 }
164169
165170
166-func aJ (aK) = if ((aK == i))
171+func aK (aL) = if ((aL == i))
167172 then unit
168- else fromBase58String(aK)
173+ else fromBase58String(aL)
169174
170175
171-func aL (aK) = if ((aK == unit))
176+func aM (aL) = if ((aL == unit))
172177 then i
173- else toBase58String(value(aK))
178+ else toBase58String(value(aL))
174179
175180
176-func aM (aN) = $Tuple7(addressFromStringValue(aN[o]), parseIntValue(aN[p]), fromBase58String(aN[q]), aJ(aN[r]), aJ(aN[s]), parseIntValue(aN[t]), parseIntValue(aN[u]))
181+func aN (aO) = $Tuple7(addressFromStringValue(aO[o]), parseIntValue(aO[p]), fromBase58String(aO[q]), aK(aO[r]), aK(aO[s]), parseIntValue(aO[t]), parseIntValue(aO[u]))
177182
178183
179-let aO = aM(aG())
184+let aP = aN(aH())
180185
181-let aP = aO
186+let aQ = aP
182187
183-let aQ = aP._1
188+let aR = aQ._1
184189
185-let aR = aP._2
190+let aS = aQ._2
186191
187-let aS = aP._3
192+let aT = aQ._3
188193
189-let aT = aP._4
194+let aU = aQ._4
190195
191-let aU = aP._5
196+let aV = aQ._5
192197
193-let aV = aP._6
198+let aW = aQ._6
194199
195-let aW = aP._7
200+let aX = aQ._7
196201
197-func aX () = split(aw(aC, ae()), j)
202+func aY () = split(ax(aD, af()), j)
198203
199204
200-let aY = valueOrErrorMessage(addressFromString(aX()[B]), "incorrect staking address")
205+let aZ = valueOrErrorMessage(addressFromString(aY()[B]), "incorrect staking address")
201206
202-let aZ = valueOrErrorMessage(addressFromString(aX()[C]), "incorrect staking address")
207+let ba = valueOrErrorMessage(addressFromString(aY()[C]), "incorrect staking address")
203208
204-func ba (bb,bc,bd,be,bf,bg,bh,bi,bj,bk) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bb), toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk)], j)
209+func bb (bc,bd,be,bf,bg,bh,bi,bj,bk,bl) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bc), toString(bd), toString(be), toString(bf), toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl)], j)
205210
206211
207-func bl (bm,bn,bo,be,bh,bi) = makeString(["%d%d%d%d%d%d", toString(bm), toString(bn), toString(bo), toString(be), toString(bh), toString(bi)], j)
212+func bm (bn,bo,bp,bf,bi,bj) = makeString(["%d%d%d%d%d%d", toString(bn), toString(bo), toString(bp), toString(bf), toString(bi), toString(bj)], j)
208213
209214
210-func bp (bq) = if ((bq == "WAVES"))
215+func bq (br) = if ((br == "WAVES"))
211216 then wavesBalance(this).available
212- else assetBalance(this, fromBase58String(bq))
217+ else assetBalance(this, fromBase58String(br))
213218
214219
215-func br (bs,bt) = fraction(bs, d, bt)
220+func bs (bt,bu) = fraction(bt, d, bu)
216221
217222
218-func bu (bv,bw,bx,by) = {
219- let bz = D(bx, bv)
223+func bv (bw,bx,by,bz) = {
220224 let bA = D(by, bw)
221- br(bA, bz)
225+ let bB = D(bz, bx)
226+ bs(bB, bA)
222227 }
223228
224229
225-func bB (bx,by,bC) = {
226- let bD = aG()
227- let bE = parseIntValue(bD[t])
228- let bF = parseIntValue(bD[u])
229- let bG = bu(bE, bF, bx, by)
230- let bt = D(bx, bE)
231- let bs = D(by, bF)
232- let bH = D(bC, b)
233- let bI = br(bt, bH)
234- let bJ = br(bs, bH)
235-[bG, bI, bJ]
230+func bC (by,bz,bD) = {
231+ let bE = aH()
232+ let bF = parseIntValue(bE[t])
233+ let bG = parseIntValue(bE[u])
234+ let bH = bv(bF, bG, by, bz)
235+ let bu = D(by, bF)
236+ let bt = D(bz, bG)
237+ let bI = D(bD, b)
238+ let bJ = bs(bu, bI)
239+ let bK = bs(bt, bI)
240+[bH, bJ, bK]
236241 }
237242
238243
239-func bK (bx,by,bC) = {
240- let bL = bB(bx, by, bC)
241-[G(bL[0], b), G(bL[1], b), G(bL[2], b)]
244+func bL (by,bz,bD) = {
245+ let bM = bC(by, bz, bD)
246+[G(bM[0], b), G(bM[1], b), G(bM[2], b)]
242247 }
243248
244249
245-func bM (bN,bO,bP,W) = {
246- let bD = aG()
247- let bQ = bD[q]
248- let bR = bD[r]
249- let bS = bD[s]
250- let bv = parseIntValue(bD[t])
251- let bw = parseIntValue(bD[u])
252- let bT = bD[p]
253- let bU = valueOrErrorMessage(assetInfo(fromBase58String(bQ)), (("Asset " + bQ) + " doesn't exist")).quantity
254- if ((bQ != bO))
250+func bN (bO,bP,bQ,X) = {
251+ let bE = aH()
252+ let bR = bE[q]
253+ let bS = bE[r]
254+ let bT = bE[s]
255+ let bw = parseIntValue(bE[t])
256+ let bx = parseIntValue(bE[u])
257+ let bU = bE[p]
258+ let bV = valueOrErrorMessage(assetInfo(fromBase58String(bR)), (("Asset " + bR) + " doesn't exist")).quantity
259+ if ((bR != bP))
255260 then throw("Invalid asset passed.")
256261 else {
257- let bV = bp(bR)
258- let bW = D(bV, bv)
259- let bX = bp(bS)
260- let bY = D(bX, bw)
261- let bZ = br(bY, bW)
262- let ca = G(bZ, b)
263- let cb = D(bP, b)
264- let cc = D(bU, b)
265- let cd = fraction(bW, cb, cc)
266- let ce = fraction(bY, cb, cc)
267- let cf = G(cd, bv)
262+ let bW = bq(bS)
263+ let bX = D(bW, bw)
264+ let bY = bq(bT)
265+ let bZ = D(bY, bx)
266+ let ca = bs(bZ, bX)
267+ let cb = G(ca, b)
268+ let cc = D(bQ, b)
269+ let cd = D(bV, b)
270+ let ce = fraction(bX, cc, cd)
271+ let cf = fraction(bZ, cc, cd)
268272 let cg = G(ce, bw)
269- let ch = if ((bN == ""))
273+ let ch = G(cf, bx)
274+ let ci = if ((bO == ""))
270275 then nil
271- else [ScriptTransfer(W, cf, if ((bR == "WAVES"))
276+ else [ScriptTransfer(X, cg, if ((bS == "WAVES"))
272277 then unit
273- else fromBase58String(bR)), ScriptTransfer(W, cg, if ((bS == "WAVES"))
278+ else fromBase58String(bS)), ScriptTransfer(X, ch, if ((bT == "WAVES"))
274279 then unit
275- else fromBase58String(bS)), StringEntry(Y(toString(W), bN), bl(cf, cg, bP, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
276- $Tuple10(cf, cg, bR, bS, bV, bX, bU, bZ, bT, ch)
280+ else fromBase58String(bT)), StringEntry(Z(toString(X), bO), bm(cg, ch, bQ, cb, height, lastBlock.timestamp)), IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb)]
281+ $Tuple10(cg, ch, bS, bT, bW, bY, bV, ca, bU, ci)
277282 }
278283 }
279284
280285
281-func ci (bN,cj,ck,cl,cm,cn,W,co,cp) = {
282- let bD = aG()
283- let bQ = fromBase58String(bD[q])
284- let cq = bD[r]
285- let cr = bD[s]
286- let cs = bD[v]
287- let ct = bD[w]
288- let bE = parseIntValue(bD[t])
289- let bF = parseIntValue(bD[u])
290- let bT = bD[p]
291- let bU = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
292- let cu = toBase58String(valueOrElse(cl, fromBase58String("WAVES")))
293- let cv = toBase58String(valueOrElse(cn, fromBase58String("WAVES")))
294- if (if ((cq != cu))
286+func cj (bO,ck,cl,cm,cn,co,X,cp,cq) = {
287+ let bE = aH()
288+ let bR = fromBase58String(bE[q])
289+ let cr = bE[r]
290+ let cs = bE[s]
291+ let ct = bE[v]
292+ let cu = bE[w]
293+ let bF = parseIntValue(bE[t])
294+ let bG = parseIntValue(bE[u])
295+ let bU = bE[p]
296+ let bV = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
297+ let cv = toBase58String(valueOrElse(cm, fromBase58String("WAVES")))
298+ let cw = toBase58String(valueOrElse(co, fromBase58String("WAVES")))
299+ if (if ((cr != cv))
295300 then true
296- else (cr != cv))
301+ else (cs != cw))
297302 then throw("Invalid amt or price asset passed.")
298303 else {
299- let bV = if (co)
300- then bp(cq)
301- else (bp(cq) - ck)
302- let bX = if (co)
303- then bp(cr)
304- else (bp(cr) - cm)
305- let cw = D(ck, bE)
306- let cx = D(cm, bF)
307- let cy = br(cx, cw)
308- let bW = D(bV, bE)
309- let bY = D(bX, bF)
310- let cz = if ((bU == 0))
304+ let bW = if (cp)
305+ then bq(cr)
306+ else (bq(cr) - cl)
307+ let bY = if (cp)
308+ then bq(cs)
309+ else (bq(cs) - cn)
310+ let cx = D(cl, bF)
311+ let cy = D(cn, bG)
312+ let cz = bs(cy, cx)
313+ let bX = D(bW, bF)
314+ let bZ = D(bY, bG)
315+ let cA = if ((bV == 0))
311316 then {
312- let bZ = e
313- let cA = e
314- let bH = pow((cw * cx), 0, toBigInt(5), 1, 0, DOWN)
315- $Tuple5(G(bH, b), G(cw, bE), G(cx, bF), br((bY + cx), (bW + cw)), cA)
317+ let ca = e
318+ let cB = e
319+ let bI = pow((cx * cy), 0, toBigInt(5), 1, 0, DOWN)
320+ $Tuple5(G(bI, b), G(cx, bF), G(cy, bG), bs((bZ + cy), (bX + cx)), cB)
316321 }
317322 else {
318- let bZ = br(bY, bW)
319- let cA = fraction(N((bZ - cy)), d, bZ)
320- let cB = D(cj, b)
321- if (if ((bZ != e))
322- then (cA > cB)
323+ let ca = bs(bZ, bX)
324+ let cB = fraction(O((ca - cz)), d, ca)
325+ let cC = D(ck, b)
326+ if (if ((ca != e))
327+ then (cB > cC)
323328 else false)
324- then throw(((("Price slippage " + toString(cA)) + " exceeded the passed limit of ") + toString(cB)))
329+ then throw(((("Price slippage " + toString(cB)) + " exceeded the passed limit of ") + toString(cC)))
325330 else {
326- let cc = D(bU, b)
327- let cC = fraction(cw, bZ, d)
328- let cD = fraction(cx, d, bZ)
329- let cE = if ((cC > cx))
330- then $Tuple2(cD, cx)
331- else $Tuple2(cw, cC)
332- let cF = cE._1
333- let cG = cE._2
334- let bH = fraction(cc, cG, bY)
335- $Tuple5(G(bH, b), G(cF, bE), G(cG, bF), bZ, cA)
331+ let cd = D(bV, b)
332+ let cD = fraction(cx, ca, d)
333+ let cE = fraction(cy, d, ca)
334+ let cF = if ((cD > cy))
335+ then $Tuple2(cE, cy)
336+ else $Tuple2(cx, cD)
337+ let cG = cF._1
338+ let cH = cF._2
339+ let bI = fraction(cd, cH, bZ)
340+ $Tuple5(G(bI, b), G(cG, bF), G(cH, bG), ca, cB)
336341 }
337342 }
338- let cH = cz._1
339- let cI = cz._2
340- let cJ = cz._3
341- let ca = G(cz._4, b)
342- let cK = G(cz._5, b)
343- if ((0 >= cH))
343+ let cI = cA._1
344+ let cJ = cA._2
345+ let cK = cA._3
346+ let cb = G(cA._4, b)
347+ let cL = G(cA._5, b)
348+ if ((0 >= cI))
344349 then throw("Invalid calculations. LP calculated is less than zero.")
345350 else {
346- let cL = if (!(cp))
351+ let cM = if (!(cq))
347352 then 0
348- else cH
349- let cM = (ck - cI)
350- let cN = (cm - cJ)
351- let cO = [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(W, bN), ba(cI, cJ, cL, ca, cj, cK, height, lastBlock.timestamp, cM, cN))]
352- $Tuple13(cH, cL, ca, bV, bX, bU, bQ, bT, cO, cM, cN, cl, cn)
353+ else cI
354+ let cN = (cl - cJ)
355+ let cO = (cn - cK)
356+ let cP = [IntegerEntry(S(), cb), IntegerEntry(T(height, lastBlock.timestamp), cb), StringEntry(W(X, bO), bb(cJ, cK, cM, cb, ck, cL, height, lastBlock.timestamp, cN, cO))]
357+ $Tuple13(cI, cM, cb, bW, bY, bV, bR, bU, cP, cN, cO, cm, co)
353358 }
354359 }
355360 }
356361
357362
358-func cP (cQ) = {
359- let bD = aG()
360- let cR = bD[r]
361- let cS = bD[s]
362- let bT = parseIntValue(bD[p])
363- let bE = parseIntValue(bD[t])
364- let bF = parseIntValue(bD[u])
365- let cT = bp(cR)
366- let cU = bp(cS)
367- let bZ = if ((cQ.orderType == Buy))
368- then bu(bE, bF, (cT + cQ.amount), cU)
369- else bu(bE, bF, (cT - cQ.amount), cU)
370- let ca = G(bZ, b)
371- if (if (if (aE())
363+func cQ (cR) = {
364+ let bE = aH()
365+ let cS = bE[r]
366+ let cT = bE[s]
367+ let bU = parseIntValue(bE[p])
368+ let bF = parseIntValue(bE[t])
369+ let bG = parseIntValue(bE[u])
370+ let cU = bq(cS)
371+ let cV = bq(cT)
372+ let ca = if ((cR.orderType == Buy))
373+ then bv(bF, bG, (cU + cR.amount), cV)
374+ else bv(bF, bG, (cU - cR.amount), cV)
375+ let cb = G(ca, b)
376+ if (if (if (aF())
372377 then true
373- else (bT == m))
378+ else (bU == m))
374379 then true
375- else (bT == n))
380+ else (bU == n))
376381 then throw("Exchange operations disabled")
377382 else {
378- let cV = cQ.assetPair.amountAsset
379- let cW = if ((cV == unit))
383+ let cW = cR.assetPair.amountAsset
384+ let cX = if ((cW == unit))
380385 then "WAVES"
381- else toBase58String(value(cV))
382- let cX = cQ.assetPair.priceAsset
383- let cY = if ((cX == unit))
386+ else toBase58String(value(cW))
387+ let cY = cR.assetPair.priceAsset
388+ let cZ = if ((cY == unit))
384389 then "WAVES"
385- else toBase58String(value(cX))
386- if (if ((cW != cR))
390+ else toBase58String(value(cY))
391+ if (if ((cX != cS))
387392 then true
388- else (cY != cS))
393+ else (cZ != cT))
389394 then throw("Wrong order assets.")
390395 else {
391- let cZ = cQ.price
392- let da = fraction(b, bF, bE)
393- let db = J(cZ, b, da)
394- let dc = if ((cQ.orderType == Buy))
395- then (ca >= db)
396- else (db >= ca)
396+ let da = cR.price
397+ let db = fraction(b, bG, bF)
398+ let dc = J(da, b, db)
399+ let dd = if ((cR.orderType == Buy))
400+ then (cb >= dc)
401+ else (dc >= cb)
397402 true
398403 }
399404 }
400405 }
401406
402407
403-func dd (de) = if ((size(de.payments) != 1))
408+func de (df) = if ((size(df.payments) != 1))
404409 then throw("exactly 1 payment is expected")
405410 else {
406- let df = value(de.payments[0])
407- let bO = value(df.assetId)
408- let dg = df.amount
409- let cz = bM(toBase58String(de.transactionId), toBase58String(bO), dg, de.caller)
410- let cf = cz._1
411- let cg = cz._2
412- let bT = parseIntValue(cz._9)
413- let ch = cz._10
414- if (if (aE())
411+ let dg = value(df.payments[0])
412+ let bP = value(dg.assetId)
413+ let dh = dg.amount
414+ let cA = bN(toBase58String(df.transactionId), toBase58String(bP), dh, df.caller)
415+ let cg = cA._1
416+ let ch = cA._2
417+ let bU = parseIntValue(cA._9)
418+ let ci = cA._10
419+ if (if (aF())
415420 then true
416- else (bT == n))
417- then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
418- else $Tuple5(cf, cg, dg, bO, ch)
421+ else (bU == n))
422+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
423+ else $Tuple5(cg, ch, dh, bP, ci)
419424 }
420425
421426
422-func dh (de,cj,cp) = if ((size(de.payments) != 2))
427+func di (df,ck,cq) = if ((size(df.payments) != 2))
423428 then throw("exactly 2 payments are expected")
424429 else {
425- let di = value(de.payments[0])
426- let dj = value(de.payments[1])
427- let dk = ci(toBase58String(de.transactionId), cj, di.amount, di.assetId, dj.amount, dj.assetId, toString(de.caller), false, cp)
428- let bT = parseIntValue(dk._8)
429- if (if (if (aE())
430+ let dj = value(df.payments[0])
431+ let dk = value(df.payments[1])
432+ let dl = cj(toBase58String(df.transactionId), ck, dj.amount, dj.assetId, dk.amount, dk.assetId, toString(df.caller), false, cq)
433+ let bU = parseIntValue(dl._8)
434+ if (if (if (aF())
430435 then true
431- else (bT == l))
436+ else (bU == l))
432437 then true
433- else (bT == n))
434- then throw(("Put operation is blocked by admin. Status = " + toString(bT)))
435- else dk
438+ else (bU == n))
439+ then throw(("Put operation is blocked by admin. Status = " + toString(bU)))
440+ else dl
436441 }
437442
438443
439-func dl (dm) = {
440- let dn = invoke(aC, "emit", [dm], nil)
441- if ((dn == dn))
444+func dm (dn) = {
445+ let do = invoke(aD, "emit", [dn], nil)
446+ if ((do == do))
442447 then {
443- let do = {
444- let dp = dn
445- if ($isInstanceOf(dp, "Address"))
448+ let dp = {
449+ let dq = do
450+ if ($isInstanceOf(dq, "Address"))
446451 then {
447- let dq = dp
448- invoke(dq, "emit", [dm], nil)
452+ let dr = dq
453+ invoke(dr, "emit", [dn], nil)
449454 }
450455 else unit
451456 }
452- if ((do == do))
453- then dm
457+ if ((dp == dp))
458+ then dn
454459 else throw("Strict value is not equal to itself.")
455460 }
456461 else throw("Strict value is not equal to itself.")
457462 }
458463
459464
460-func dr (dm) = {
461- let ds = fraction(dm, ad, b)
462- $Tuple2((dm - ds), ds)
465+func ds (dn) = {
466+ let dt = fraction(dn, ae, b)
467+ $Tuple2((dn - dt), dt)
463468 }
464469
465470
466-func dt (du,dv,W,X) = {
467- let dw = (X == unit)
468- let dx = aM(aG())
469- let dy = dx._1
470- let bT = dx._2
471- let bQ = dx._3
472- let dz = dx._4
473- let cS = dx._5
474- let dA = dx._6
475- let dB = dx._7
476- let dC = bp(aL(dz))
477- let dD = bp(aL(cS))
478- let dE = if ((dv == dz))
471+func du (dv,dw,X,Y) = {
472+ let dx = (Y == unit)
473+ let dy = aN(aH())
474+ let dz = dy._1
475+ let bU = dy._2
476+ let bR = dy._3
477+ let dA = dy._4
478+ let cT = dy._5
479+ let dB = dy._6
480+ let dC = dy._7
481+ let dD = bq(aM(dA))
482+ let dE = bq(aM(cT))
483+ let dF = if ((dw == dA))
479484 then true
480- else if ((dv == cS))
485+ else if ((dw == cT))
481486 then false
482- else aA("invalid asset")
483- let dF = if (dw)
484- then $Tuple2(dC, dD)
485- else if (dE)
486- then $Tuple2((dC - du), dD)
487- else $Tuple2(dC, (dD - du))
488- let dG = dF._1
489- let dH = dF._2
490- let dI = if (dE)
491- then $Tuple2(du, 0)
492- else $Tuple2(0, du)
493- let dJ = dI._1
494- let dK = dI._2
495- let dL = dr(dJ)._1
496- let dM = dr(dK)._1
497- let dN = dr(du)
498- let dO = dN._1
499- let ds = dN._2
500- let dP = (dG + dL)
487+ else aB("invalid asset")
488+ let dG = if (dx)
489+ then $Tuple2(dD, dE)
490+ else if (dF)
491+ then $Tuple2((dD - dv), dE)
492+ else $Tuple2(dD, (dE - dv))
493+ let dH = dG._1
494+ let dI = dG._2
495+ let dJ = if (dF)
496+ then $Tuple2(dv, 0)
497+ else $Tuple2(0, dv)
498+ let dK = dJ._1
499+ let dL = dJ._2
500+ let dM = ds(dK)._1
501+ let dN = ds(dL)._1
502+ let dO = ds(dv)
503+ let dP = dO._1
504+ let dt = dO._2
501505 let dQ = (dH + dM)
502- let ca = G(br(D(dQ, dB), D(dP, dA)), b)
503- let dR = if (dE)
504- then dG
505- else dH
506- let dS = toBigInt(dR)
507- let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
508- let dU = if ((dT > f))
506+ let dR = (dI + dN)
507+ let dS = bs(D(dR, dC), D(dQ, dB))
508+ let dT = G(dS, b)
509+ let dU = if (dF)
510+ then dH
511+ else dI
512+ let dV = toBigInt(dU)
513+ let dW = toBigInt(valueOrErrorMessage(assetInfo(bR), (("asset " + toBase58String(bR)) + " doesn't exist")).quantity)
514+ let dX = if ((dW > f))
509515 then true
510- else aA("initial deposit requires all coins")
511- if ((dU == dU))
516+ else aB("initial deposit requires all coins")
517+ if ((dX == dX))
512518 then {
513- let dV = toBigInt(dO)
514- let dW = max([0, toInt(((dT * (sqrtBigInt((d + ((dV * d) / dS)), 18, 18, DOWN) - d)) / d))])
515- let cO = if (dw)
519+ let dY = toBigInt(dP)
520+ let dZ = max([0, toInt(((dW * (sqrtBigInt((d + ((dY * d) / dV)), 18, 18, DOWN) - d)) / d))])
521+ let cP = if (dx)
516522 then nil
517- else [IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca), StringEntry(V(toString(value(W)), toBase58String(value(X))), ba(dJ, dK, dW, ca, 0, 0, height, lastBlock.timestamp, 0, 0))]
518- let dX = fraction(dH, b, dG)
519- let dY = fraction(du, b, (dX + b))
520- let dZ = (du - dY)
521- let ea = toInt(fraction(dT, toBigInt(dZ), toBigInt(dH)))
522- let eb = if ((ea == 0))
523- then if ((dW == 0))
524- then 0
525- else aA("bonus calculation error")
526- else fraction((dW - ea), b, ea)
527- $Tuple4(dW, cO, ds, eb)
523+ else [IntegerEntry(S(), dT), IntegerEntry(T(height, lastBlock.timestamp), dT), StringEntry(W(toString(value(X)), toBase58String(value(Y))), bb(dK, dL, dZ, dT, 0, 0, height, lastBlock.timestamp, 0, 0))]
524+ let ea = bs(D(dI, dC), D(dH, dB))
525+ let eb = G(ea, b)
526+ let ec = N((((dT - eb) * b) / eb))
527+ $Tuple4(dZ, cP, dt, ec)
528528 }
529529 else throw("Strict value is not equal to itself.")
530530 }
531531
532532
533-func ec (ed,dO,dv,W,X) = {
534- let dw = (X == unit)
535- let ee = aM(aG())
536- let dy = ee._1
537- let bT = ee._2
538- let bQ = ee._3
539- let dz = ee._4
540- let cS = ee._5
541- let ef = ee._6
542- let eg = ee._7
543- let eh = [if ((dv == bQ))
533+func ed (ee,dP,dw,X,Y) = {
534+ let dx = (Y == unit)
535+ let ef = aN(aH())
536+ let dz = ef._1
537+ let bU = ef._2
538+ let bR = ef._3
539+ let dA = ef._4
540+ let cT = ef._5
541+ let eg = ef._6
542+ let eh = ef._7
543+ let ei = [if ((dw == bR))
544544 then true
545- else aA("invalid lp asset")]
546- if ((eh == eh))
545+ else aB("invalid lp asset")]
546+ if ((ei == ei))
547547 then {
548- let ei = if ((ed == dz))
548+ let ej = if ((ee == dA))
549549 then true
550- else if ((ed == cS))
550+ else if ((ee == cT))
551551 then false
552- else aA("invalid asset")
553- let ej = if (ei)
554- then toBigInt(bp(aL(dz)))
555- else toBigInt(bp(aL(cS)))
556- let ek = bp(aL(dz))
557- let el = bp(aL(cS))
558- let em = if (ei)
559- then ek
560- else el
561- let en = toBigInt(em)
562- let dT = toBigInt(valueOrErrorMessage(assetInfo(bQ), (("asset " + toBase58String(bQ)) + " doesn't exist")).quantity)
563- let eo = toBigInt(dO)
564- let ep = max([0, toInt(((ej * (d - pow((d - ((eo * d) / dT)), 18, h, 0, 18, DOWN))) / d))])
565- let eq = dr(ep)
566- let er = eq._1
567- let ds = eq._2
568- let es = if (ei)
569- then $Tuple4(er, 0, (ek - ep), el)
570- else $Tuple4(0, er, ek, (el - ep))
571- let et = es._1
572- let eu = es._2
573- let ev = es._3
574- let ew = es._4
575- let ex = br(D(ew, eg), D(ev, ef))
576- let ca = G(ex, b)
577- let cO = if (dw)
552+ else aB("invalid asset")
553+ let ek = if (ej)
554+ then toBigInt(bq(aM(dA)))
555+ else toBigInt(bq(aM(cT)))
556+ let el = bq(aM(dA))
557+ let em = bq(aM(cT))
558+ let en = if (ej)
559+ then el
560+ else em
561+ let eo = toBigInt(en)
562+ let dW = toBigInt(valueOrErrorMessage(assetInfo(bR), (("asset " + toBase58String(bR)) + " doesn't exist")).quantity)
563+ let ep = toBigInt(dP)
564+ let eq = max([0, toInt(((ek * (d - pow((d - ((ep * d) / dW)), 18, h, 0, 18, DOWN))) / d))])
565+ let er = ds(eq)
566+ let es = er._1
567+ let dt = er._2
568+ let et = if (ej)
569+ then $Tuple4(es, 0, (el - eq), em)
570+ else $Tuple4(0, es, el, (em - eq))
571+ let eu = et._1
572+ let ev = et._2
573+ let ew = et._3
574+ let ex = et._4
575+ let dS = bs(D(ex, eh), D(ew, eg))
576+ let dT = G(dS, b)
577+ let cP = if (dx)
578578 then nil
579- else [StringEntry(Y(toString(value(W)), toBase58String(value(X))), bl(et, eu, dO, ca, height, lastBlock.timestamp)), IntegerEntry(R(), ca), IntegerEntry(S(height, lastBlock.timestamp), ca)]
580- let ey = bM("", aL(bQ), dO, this)
581- let ez = (ey._1 + ey._2)
582- let eb = if ((ez == 0))
583- then if ((er == 0))
584- then 0
585- else aA("bonus calculation error")
586- else fraction((er - ez), b, ez)
587- $Tuple4(er, cO, ds, eb)
579+ else [StringEntry(Z(toString(value(X)), toBase58String(value(Y))), bm(eu, ev, dP, dT, height, lastBlock.timestamp)), IntegerEntry(S(), dT), IntegerEntry(T(height, lastBlock.timestamp), dT)]
580+ let ea = bs(D(em, eh), D(el, eg))
581+ let eb = G(ea, b)
582+ let ec = N((((dT - eb) * b) / eb))
583+ $Tuple4(es, cP, dt, ec)
588584 }
589585 else throw("Strict value is not equal to itself.")
590586 }
591587
592588
593-func eA () = {
594- let dp = getString(P())
595- if ($isInstanceOf(dp, "String"))
589+func ey () = {
590+ let dq = getString(Q())
591+ if ($isInstanceOf(dq, "String"))
596592 then {
597- let eB = dp
598- fromBase58String(eB)
593+ let ez = dq
594+ fromBase58String(ez)
599595 }
600- else if ($isInstanceOf(dp, "Unit"))
596+ else if ($isInstanceOf(dq, "Unit"))
601597 then unit
602598 else throw("Match error")
603599 }
604600
605601
606-func eC () = {
607- let dp = getString(Q())
608- if ($isInstanceOf(dp, "String"))
602+func eA () = {
603+ let dq = getString(R())
604+ if ($isInstanceOf(dq, "String"))
609605 then {
610- let eB = dp
611- fromBase58String(eB)
606+ let ez = dq
607+ fromBase58String(ez)
612608 }
613- else if ($isInstanceOf(dp, "Unit"))
609+ else if ($isInstanceOf(dq, "Unit"))
614610 then unit
615611 else throw("Match error")
616612 }
617613
618614
619-func eD (de) = {
620- let eE = throw("Permission denied")
621- let dp = eA()
622- if ($isInstanceOf(dp, "ByteVector"))
615+func eB (df) = {
616+ let eC = throw("Permission denied")
617+ let dq = ey()
618+ if ($isInstanceOf(dq, "ByteVector"))
623619 then {
624- let eF = dp
625- if ((de.callerPublicKey == eF))
620+ let eD = dq
621+ if ((df.callerPublicKey == eD))
626622 then true
627- else eE
623+ else eC
628624 }
629- else if ($isInstanceOf(dp, "Unit"))
630- then if ((de.caller == this))
625+ else if ($isInstanceOf(dq, "Unit"))
626+ then if ((df.caller == this))
631627 then true
632- else eE
628+ else eC
633629 else throw("Match error")
634630 }
635631
636632
637-@Callable(de)
638-func setManager (eG) = {
639- let eH = eD(de)
640- if ((eH == eH))
633+@Callable(df)
634+func setManager (eE) = {
635+ let eF = eB(df)
636+ if ((eF == eF))
641637 then {
642- let eI = fromBase58String(eG)
643- if ((eI == eI))
644- then [StringEntry(Q(), eG)]
638+ let eG = fromBase58String(eE)
639+ if ((eG == eG))
640+ then [StringEntry(R(), eE)]
645641 else throw("Strict value is not equal to itself.")
646642 }
647643 else throw("Strict value is not equal to itself.")
648644 }
649645
650646
651647
652-@Callable(de)
648+@Callable(df)
653649 func confirmManager () = {
654- let eJ = eC()
655- let eK = if (isDefined(eJ))
650+ let eH = eA()
651+ let eI = if (isDefined(eH))
656652 then true
657653 else throw("No pending manager")
658- if ((eK == eK))
654+ if ((eI == eI))
659655 then {
660- let eL = if ((de.callerPublicKey == value(eJ)))
656+ let eJ = if ((df.callerPublicKey == value(eH)))
661657 then true
662658 else throw("You are not pending manager")
663- if ((eL == eL))
664- then [StringEntry(P(), toBase58String(value(eJ))), DeleteEntry(Q())]
659+ if ((eJ == eJ))
660+ then [StringEntry(Q(), toBase58String(value(eH))), DeleteEntry(R())]
665661 else throw("Strict value is not equal to itself.")
666662 }
667663 else throw("Strict value is not equal to itself.")
668664 }
669665
670666
671667
672-@Callable(de)
673-func put (cj,eM) = if ((0 > cj))
668+@Callable(df)
669+func put (ck,eK) = if ((0 > ck))
674670 then throw("Invalid slippageTolerance passed")
675671 else {
676- let dk = dh(de, cj, true)
677- let cL = dk._2
678- let bQ = dk._7
679- let ch = dk._9
680- let cM = dk._10
681- let cN = dk._11
682- let eN = dk._12
683- let eO = dk._13
684- let dn = invoke(aC, "emit", [cL], nil)
685- if ((dn == dn))
672+ let dl = di(df, ck, true)
673+ let cM = dl._2
674+ let bR = dl._7
675+ let ci = dl._9
676+ let cN = dl._10
677+ let cO = dl._11
678+ let eL = dl._12
679+ let eM = dl._13
680+ let do = invoke(aD, "emit", [cM], nil)
681+ if ((do == do))
686682 then {
687- let do = {
688- let dp = dn
689- if ($isInstanceOf(dp, "Address"))
683+ let dp = {
684+ let dq = do
685+ if ($isInstanceOf(dq, "Address"))
690686 then {
691- let dq = dp
692- invoke(dq, "emit", [cL], nil)
687+ let dr = dq
688+ invoke(dr, "emit", [cM], nil)
693689 }
694690 else unit
695691 }
696- if ((do == do))
692+ if ((dp == dp))
697693 then {
698- let eP = if ((cM > 0))
699- then invoke(aZ, "put", nil, [AttachedPayment(eN, cM)])
694+ let eN = if ((cN > 0))
695+ then invoke(ba, "put", nil, [AttachedPayment(eL, cN)])
700696 else nil
701- if ((eP == eP))
697+ if ((eN == eN))
702698 then {
703- let eQ = if ((cN > 0))
704- then invoke(aZ, "put", nil, [AttachedPayment(eO, cN)])
699+ let eO = if ((cO > 0))
700+ then invoke(ba, "put", nil, [AttachedPayment(eM, cO)])
705701 else nil
706- if ((eQ == eQ))
702+ if ((eO == eO))
707703 then {
708- let eR = if (eM)
704+ let eP = if (eK)
709705 then {
710- let eS = invoke(aY, "stake", nil, [AttachedPayment(bQ, cL)])
711- if ((eS == eS))
706+ let eQ = invoke(aZ, "stake", nil, [AttachedPayment(bR, cM)])
707+ if ((eQ == eQ))
712708 then nil
713709 else throw("Strict value is not equal to itself.")
714710 }
715- else [ScriptTransfer(de.caller, cL, bQ)]
716- (ch ++ eR)
711+ else [ScriptTransfer(df.caller, cM, bR)]
712+ (ci ++ eP)
717713 }
718714 else throw("Strict value is not equal to itself.")
719715 }
720716 else throw("Strict value is not equal to itself.")
721717 }
722718 else throw("Strict value is not equal to itself.")
723719 }
724720 else throw("Strict value is not equal to itself.")
725721 }
726722
727723
728724
729-@Callable(de)
730-func putForFree (eT) = if ((0 > eT))
725+@Callable(df)
726+func putForFree (eR) = if ((0 > eR))
731727 then throw("Invalid value passed")
732728 else {
733- let dk = dh(de, eT, false)
734- dk._9
729+ let dl = di(df, eR, false)
730+ dl._9
735731 }
736732
737733
738734
739-@Callable(de)
740-func putOneTkn (eU,eV) = {
741- let eW = if (if (aE())
735+@Callable(df)
736+func putOneTkn (eS,eT) = {
737+ let eU = if (if (aF())
742738 then true
743- else (aR == l))
739+ else (aS == l))
744740 then true
745- else (aR == n)
746- let eh = [if (!(eW))
741+ else (aS == n)
742+ let ei = [if (!(eU))
747743 then true
748- else aA("put operation is blocked by admin"), if ((size(de.payments) == 1))
744+ else aB("put operation is blocked by admin"), if ((size(df.payments) == 1))
749745 then true
750- else aA("exactly 1 payment are expected")]
751- if ((eh == eh))
746+ else aB("exactly 1 payment are expected")]
747+ if ((ei == ei))
752748 then {
753- let eX = de.payments[0]
754- let dv = eX.assetId
755- let du = eX.amount
756- let W = de.caller
757- let X = de.transactionId
758- let eY = dt(du, dv, W, X)
759- let eZ = eY._1
760- let cO = eY._2
761- let ds = eY._3
762- let eb = eY._4
763- let fa = if (if ((eU > 0))
764- then (eU > eZ)
749+ let eV = df.payments[0]
750+ let dw = eV.assetId
751+ let dv = eV.amount
752+ let X = df.caller
753+ let Y = df.transactionId
754+ let eW = du(dv, dw, X, Y)
755+ let eX = eW._1
756+ let cP = eW._2
757+ let dt = eW._3
758+ let eY = eW._4
759+ let eZ = if (if ((eS > 0))
760+ then (eS > eX)
765761 else false)
766- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
767- else eZ
768- let dn = dl(fa)
769- if ((dn == dn))
762+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
763+ else eX
764+ let do = dm(eZ)
765+ if ((do == do))
770766 then {
771- let eR = if (eV)
767+ let eP = if (eT)
772768 then {
773- let fb = invoke(aY, "stake", nil, [AttachedPayment(aS, fa)])
774- if ((fb == fb))
769+ let fa = invoke(aZ, "stake", nil, [AttachedPayment(aT, eZ)])
770+ if ((fa == fa))
775771 then nil
776772 else throw("Strict value is not equal to itself.")
777773 }
778- else [ScriptTransfer(de.caller, fa, aS)]
779- let fc = if ((ds > 0))
780- then [ScriptTransfer(aD, ds, dv)]
774+ else [ScriptTransfer(df.caller, eZ, aT)]
775+ let fb = if ((dt > 0))
776+ then [ScriptTransfer(aE, dt, dw)]
781777 else nil
782- $Tuple2(((cO ++ eR) ++ fc), fa)
778+ $Tuple2(((cP ++ eP) ++ fb), eZ)
783779 }
784780 else throw("Strict value is not equal to itself.")
785781 }
786782 else throw("Strict value is not equal to itself.")
787783 }
788784
789785
790786
791-@Callable(de)
792-func putOneTknREADONLY (dv,du) = {
793- let fd = dt(du, aJ(dv), unit, unit)
794- let eZ = fd._1
795- let cO = fd._2
796- let ds = fd._3
797- let eb = fd._4
798- $Tuple2(nil, $Tuple3(eZ, ds, eb))
787+@Callable(df)
788+func putOneTknREADONLY (dw,dv) = {
789+ let fc = du(dv, aK(dw), unit, unit)
790+ let eX = fc._1
791+ let cP = fc._2
792+ let dt = fc._3
793+ let eY = fc._4
794+ $Tuple2(nil, $Tuple3(eX, dt, eY))
799795 }
800796
801797
802798
803-@Callable(de)
804-func getOneTkn (fe,eU) = {
805- let ff = if (aE())
799+@Callable(df)
800+func getOneTkn (fd,eS) = {
801+ let fe = if (aF())
806802 then true
807- else (aR == n)
808- let eh = [if (!(ff))
803+ else (aS == n)
804+ let ei = [if (!(fe))
809805 then true
810- else aA("get operation is blocked by admin"), if ((size(de.payments) == 1))
806+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 1))
811807 then true
812- else aA("exactly 1 payment are expected")]
813- if ((eh == eh))
808+ else aB("exactly 1 payment are expected")]
809+ if ((ei == ei))
814810 then {
815- let ed = aJ(fe)
816- let eX = de.payments[0]
817- let dv = eX.assetId
818- let dO = eX.amount
819- let W = de.caller
820- let X = de.transactionId
821- let fg = ec(ed, dO, dv, W, X)
822- let fh = fg._1
823- let cO = fg._2
824- let ds = fg._3
825- let eb = fg._4
826- let dm = if (if ((eU > 0))
827- then (eU > fh)
811+ let ee = aK(fd)
812+ let eV = df.payments[0]
813+ let dw = eV.assetId
814+ let dP = eV.amount
815+ let X = df.caller
816+ let Y = df.transactionId
817+ let ff = ed(ee, dP, dw, X, Y)
818+ let fg = ff._1
819+ let cP = ff._2
820+ let dt = ff._3
821+ let eY = ff._4
822+ let dn = if (if ((eS > 0))
823+ then (eS > fg)
828824 else false)
829- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
830- else fh
831- let fi = invoke(aC, "burn", [dO], [AttachedPayment(dv, dO)])
832- if ((fi == fi))
825+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
826+ else fg
827+ let fh = invoke(aD, "burn", [dP], [AttachedPayment(dw, dP)])
828+ if ((fh == fh))
833829 then {
834- let fj = [ScriptTransfer(W, dm, ed)]
835- let fc = if ((ds > 0))
836- then [ScriptTransfer(aD, ds, ed)]
830+ let fi = [ScriptTransfer(X, dn, ee)]
831+ let fb = if ((dt > 0))
832+ then [ScriptTransfer(aE, dt, ee)]
837833 else nil
838- $Tuple2(((cO ++ fj) ++ fc), dm)
834+ $Tuple2(((cP ++ fi) ++ fb), dn)
839835 }
840836 else throw("Strict value is not equal to itself.")
841837 }
842838 else throw("Strict value is not equal to itself.")
843839 }
844840
845841
846842
847-@Callable(de)
848-func getOneTknREADONLY (ed,dO) = {
849- let fk = ec(aJ(ed), dO, aS, unit, unit)
850- let fh = fk._1
851- let cO = fk._2
852- let ds = fk._3
853- let eb = fk._4
854- $Tuple2(nil, $Tuple3(fh, ds, eb))
843+@Callable(df)
844+func getOneTknREADONLY (ee,dP) = {
845+ let fj = ed(aK(ee), dP, aT, unit, unit)
846+ let fg = fj._1
847+ let cP = fj._2
848+ let dt = fj._3
849+ let eY = fj._4
850+ $Tuple2(nil, $Tuple3(fg, dt, eY))
855851 }
856852
857853
858854
859-@Callable(de)
860-func unstakeAndGetOneTkn (fl,fe,eU) = {
861- let ff = if (aE())
855+@Callable(df)
856+func unstakeAndGetOneTkn (fk,fd,eS) = {
857+ let fe = if (aF())
862858 then true
863- else (aR == n)
864- let eh = [if (!(ff))
859+ else (aS == n)
860+ let ei = [if (!(fe))
865861 then true
866- else aA("get operation is blocked by admin"), if ((size(de.payments) == 0))
862+ else aB("get operation is blocked by admin"), if ((size(df.payments) == 0))
867863 then true
868- else aA("no payments are expected")]
869- if ((eh == eh))
864+ else aB("no payments are expected")]
865+ if ((ei == ei))
870866 then {
871- let ed = aJ(fe)
872- let fm = invoke(aY, "unstake", [toBase58String(aS), fl], nil)
873- if ((fm == fm))
867+ let ee = aK(fd)
868+ let fl = invoke(aZ, "unstake", [toBase58String(aT), fk], nil)
869+ if ((fl == fl))
874870 then {
875- let fn = ec(ed, fl, aS, unit, unit)
876- let fh = fn._1
877- let cO = fn._2
878- let ds = fn._3
879- let eb = fn._4
880- let dm = if (if ((eU > 0))
881- then (eU > fh)
871+ let fm = ed(ee, fk, aT, unit, unit)
872+ let fg = fm._1
873+ let cP = fm._2
874+ let dt = fm._3
875+ let eY = fm._4
876+ let dn = if (if ((eS > 0))
877+ then (eS > fg)
882878 else false)
883- then aA(makeString(["amount to receive is less than ", toString(eU)], ""))
884- else fh
885- let fi = invoke(aC, "burn", [fl], [AttachedPayment(aS, fl)])
886- if ((fi == fi))
879+ then aB(makeString(["amount to receive is less than ", toString(eS)], ""))
880+ else fg
881+ let fh = invoke(aD, "burn", [fk], [AttachedPayment(aT, fk)])
882+ if ((fh == fh))
887883 then {
888- let fj = [ScriptTransfer(de.caller, dm, ed)]
889- let fc = if ((ds > 0))
890- then [ScriptTransfer(aD, ds, ed)]
884+ let fi = [ScriptTransfer(df.caller, dn, ee)]
885+ let fb = if ((dt > 0))
886+ then [ScriptTransfer(aE, dt, ee)]
891887 else nil
892- $Tuple2(((cO ++ fj) ++ fc), dm)
888+ $Tuple2(((cP ++ fi) ++ fb), dn)
893889 }
894890 else throw("Strict value is not equal to itself.")
895891 }
896892 else throw("Strict value is not equal to itself.")
897893 }
898894 else throw("Strict value is not equal to itself.")
899895 }
900896
901897
902898
903-@Callable(de)
899+@Callable(df)
904900 func get () = {
905- let cz = dd(de)
906- let fo = cz._1
907- let cg = cz._2
908- let dg = cz._3
909- let bO = cz._4
910- let ch = cz._5
911- let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
912- if ((fp == fp))
913- then ch
901+ let cA = de(df)
902+ let fn = cA._1
903+ let ch = cA._2
904+ let dh = cA._3
905+ let bP = cA._4
906+ let ci = cA._5
907+ let fo = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
908+ if ((fo == fo))
909+ then ci
914910 else throw("Strict value is not equal to itself.")
915911 }
916912
917913
918914
919-@Callable(de)
920-func getNoLess (fq,fr) = {
921- let cz = dd(de)
922- let cf = cz._1
923- let cg = cz._2
924- let dg = cz._3
925- let bO = cz._4
926- let ch = cz._5
927- if ((fq > cf))
928- then throw(((("noLessThenAmtAsset failed: " + toString(cf)) + " < ") + toString(fq)))
929- else if ((fr > cg))
930- then throw(((("noLessThenPriceAsset failed: " + toString(cg)) + " < ") + toString(fr)))
915+@Callable(df)
916+func getNoLess (fp,fq) = {
917+ let cA = de(df)
918+ let cg = cA._1
919+ let ch = cA._2
920+ let dh = cA._3
921+ let bP = cA._4
922+ let ci = cA._5
923+ if ((fp > cg))
924+ then throw(((("noLessThenAmtAsset failed: " + toString(cg)) + " < ") + toString(fp)))
925+ else if ((fq > ch))
926+ then throw(((("noLessThenPriceAsset failed: " + toString(ch)) + " < ") + toString(fq)))
931927 else {
932- let fp = invoke(aC, "burn", [dg], [AttachedPayment(bO, dg)])
933- if ((fp == fp))
934- then ch
928+ let fo = invoke(aD, "burn", [dh], [AttachedPayment(bP, dh)])
929+ if ((fo == fo))
930+ then ci
935931 else throw("Strict value is not equal to itself.")
936932 }
937933 }
938934
939935
940936
941-@Callable(de)
942-func unstakeAndGet (dm) = {
943- let fs = if ((size(de.payments) != 0))
937+@Callable(df)
938+func unstakeAndGet (dn) = {
939+ let fr = if ((size(df.payments) != 0))
944940 then throw("No payments are expected")
945941 else true
946- if ((fs == fs))
942+ if ((fr == fr))
947943 then {
948- let bD = aG()
949- let bQ = fromBase58String(bD[q])
950- let fm = invoke(aY, "unstake", [toBase58String(bQ), dm], nil)
951- if ((fm == fm))
944+ let bE = aH()
945+ let bR = fromBase58String(bE[q])
946+ let fl = invoke(aZ, "unstake", [toBase58String(bR), dn], nil)
947+ if ((fl == fl))
952948 then {
953- let cz = bM(toBase58String(de.transactionId), toBase58String(bQ), dm, de.caller)
954- let bT = parseIntValue(cz._9)
955- let ch = cz._10
956- let ft = if (if (aE())
949+ let cA = bN(toBase58String(df.transactionId), toBase58String(bR), dn, df.caller)
950+ let bU = parseIntValue(cA._9)
951+ let ci = cA._10
952+ let fs = if (if (aF())
957953 then true
958- else (bT == n))
959- then throw(("Get operation is blocked by admin. Status = " + toString(bT)))
954+ else (bU == n))
955+ then throw(("Get operation is blocked by admin. Status = " + toString(bU)))
960956 else true
961- if ((ft == ft))
957+ if ((fs == fs))
962958 then {
963- let fp = invoke(aC, "burn", [dm], [AttachedPayment(bQ, dm)])
964- if ((fp == fp))
965- then ch
959+ let fo = invoke(aD, "burn", [dn], [AttachedPayment(bR, dn)])
960+ if ((fo == fo))
961+ then ci
966962 else throw("Strict value is not equal to itself.")
967963 }
968964 else throw("Strict value is not equal to itself.")
969965 }
970966 else throw("Strict value is not equal to itself.")
971967 }
972968 else throw("Strict value is not equal to itself.")
973969 }
974970
975971
976972
977-@Callable(de)
978-func activate (fu,fv) = if ((toString(de.caller) != toString(aC)))
973+@Callable(df)
974+func activate (ft,fu) = if ((toString(df.caller) != toString(aD)))
979975 then throw("permissions denied")
980- else $Tuple2([StringEntry(Z(), fu), StringEntry(aa(), fv)], "success")
976+ else $Tuple2([StringEntry(aa(), ft), StringEntry(ab(), fu)], "success")
981977
982978
983979
984-@Callable(de)
985-func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aG())
980+@Callable(df)
981+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aH())
986982
987983
988984
989-@Callable(de)
990-func getAccBalanceWrapperREADONLY (bq) = $Tuple2(nil, bp(bq))
985+@Callable(df)
986+func getAccBalanceWrapperREADONLY (br) = $Tuple2(nil, bq(br))
991987
992988
993989
994-@Callable(de)
995-func calcPricesWrapperREADONLY (bx,by,bC) = {
996- let bL = bB(bx, by, bC)
997- $Tuple2(nil, [toString(bL[0]), toString(bL[1]), toString(bL[2])])
990+@Callable(df)
991+func calcPricesWrapperREADONLY (by,bz,bD) = {
992+ let bM = bC(by, bz, bD)
993+ $Tuple2(nil, [toString(bM[0]), toString(bM[1]), toString(bM[2])])
998994 }
999995
1000996
1001997
1002-@Callable(de)
998+@Callable(df)
1003999 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
10041000
10051001
10061002
1007-@Callable(de)
1003+@Callable(df)
10081004 func fromX18WrapperREADONLY (H,I) = $Tuple2(nil, G(parseBigIntValue(H), I))
10091005
10101006
10111007
1012-@Callable(de)
1013-func calcPriceBigIntWrapperREADONLY (bs,bt) = $Tuple2(nil, toString(br(parseBigIntValue(bs), parseBigIntValue(bt))))
1008+@Callable(df)
1009+func calcPriceBigIntWrapperREADONLY (bt,bu) = $Tuple2(nil, toString(bs(parseBigIntValue(bt), parseBigIntValue(bu))))
10141010
10151011
10161012
1017-@Callable(de)
1018-func estimatePutOperationWrapperREADONLY (bN,cj,ck,cl,cm,cn,W,co,cp) = $Tuple2(nil, ci(bN, cj, ck, cl, cm, cn, W, co, cp))
1013+@Callable(df)
1014+func estimatePutOperationWrapperREADONLY (bO,ck,cl,cm,cn,co,X,cp,cq) = $Tuple2(nil, cj(bO, ck, cl, cm, cn, co, X, cp, cq))
10191015
10201016
10211017
1022-@Callable(de)
1023-func estimateGetOperationWrapperREADONLY (bN,bO,bP,W) = {
1024- let cz = bM(bN, bO, bP, addressFromStringValue(W))
1025- $Tuple2(nil, $Tuple10(cz._1, cz._2, cz._3, cz._4, cz._5, cz._6, cz._7, toString(cz._8), cz._9, cz._10))
1018+@Callable(df)
1019+func estimateGetOperationWrapperREADONLY (bO,bP,bQ,X) = {
1020+ let cA = bN(bO, bP, bQ, addressFromStringValue(X))
1021+ $Tuple2(nil, $Tuple10(cA._1, cA._2, cA._3, cA._4, cA._5, cA._6, cA._7, toString(cA._8), cA._9, cA._10))
10261022 }
10271023
10281024
10291025
1030-@Callable(de)
1026+@Callable(df)
10311027 func statsREADONLY () = {
1032- let bD = aG()
1033- let bQ = fromBase58String(bD[q])
1034- let cR = bD[r]
1035- let cS = bD[s]
1036- let cs = bD[v]
1037- let ct = bD[w]
1038- let bE = parseIntValue(bD[t])
1039- let bF = parseIntValue(bD[u])
1040- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1041- let cT = bp(cR)
1042- let cU = bp(cS)
1043- let fx = if ((fw == 0))
1028+ let bE = aH()
1029+ let bR = fromBase58String(bE[q])
1030+ let cS = bE[r]
1031+ let cT = bE[s]
1032+ let ct = bE[v]
1033+ let cu = bE[w]
1034+ let bF = parseIntValue(bE[t])
1035+ let bG = parseIntValue(bE[u])
1036+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1037+ let cU = bq(cS)
1038+ let cV = bq(cT)
1039+ let fw = if ((fv == 0))
10441040 then [e, e, e]
1045- else bB(cT, cU, fw)
1046- let ca = 0
1047- let fy = G(fx[1], b)
1048- let fz = G(fx[2], b)
1049- let fA = value(getInteger(aC, ao(toString(this))))
1050- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cT), toString(cU), toString(fw), toString(ca), toString(fy), toString(fz), toString(fA)], j))
1041+ else bC(cU, cV, fv)
1042+ let cb = 0
1043+ let fx = G(fw[1], b)
1044+ let fy = G(fw[2], b)
1045+ let fz = value(getInteger(aD, ap(toString(this))))
1046+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cU), toString(cV), toString(fv), toString(cb), toString(fx), toString(fy), toString(fz)], j))
10511047 }
10521048
10531049
10541050
1055-@Callable(de)
1056-func evaluatePutByAmountAssetREADONLY (ck) = {
1057- let bD = aG()
1058- let bQ = fromBase58String(bD[q])
1059- let cq = bD[r]
1060- let bR = fromBase58String(cq)
1061- let cr = bD[s]
1051+@Callable(df)
1052+func evaluatePutByAmountAssetREADONLY (cl) = {
1053+ let bE = aH()
1054+ let bR = fromBase58String(bE[q])
1055+ let cr = bE[r]
10621056 let bS = fromBase58String(cr)
1063- let bE = parseIntValue(bD[t])
1064- let bF = parseIntValue(bD[u])
1065- let bT = bD[p]
1066- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1067- let cT = bp(cq)
1068- let cU = bp(cr)
1069- let bz = D(cT, bE)
1057+ let cs = bE[s]
1058+ let bT = fromBase58String(cs)
1059+ let bF = parseIntValue(bE[t])
1060+ let bG = parseIntValue(bE[u])
1061+ let bU = bE[p]
1062+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1063+ let cU = bq(cr)
1064+ let cV = bq(cs)
10701065 let bA = D(cU, bF)
1071- let bZ = if ((fw == 0))
1066+ let bB = D(cV, bG)
1067+ let ca = if ((fv == 0))
10721068 then e
1073- else br(bA, bz)
1074- let cw = D(ck, bE)
1075- let cx = fraction(cw, bZ, d)
1076- let cm = G(cx, bF)
1077- let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
1078- let cH = dk._1
1079- let fB = dk._3
1080- let bV = dk._4
1081- let bX = dk._5
1082- let bU = dk._6
1083- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
1069+ else bs(bB, bA)
1070+ let cx = D(cl, bF)
1071+ let cy = fraction(cx, ca, d)
1072+ let cn = G(cy, bG)
1073+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1074+ let cI = dl._1
1075+ let fA = dl._3
1076+ let bW = dl._4
1077+ let bY = dl._5
1078+ let bV = dl._6
1079+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
10841080 }
10851081
10861082
10871083
1088-@Callable(de)
1089-func evaluatePutByPriceAssetREADONLY (cm) = {
1090- let bD = aG()
1091- let bQ = fromBase58String(bD[q])
1092- let cq = bD[r]
1093- let bR = fromBase58String(cq)
1094- let cr = bD[s]
1084+@Callable(df)
1085+func evaluatePutByPriceAssetREADONLY (cn) = {
1086+ let bE = aH()
1087+ let bR = fromBase58String(bE[q])
1088+ let cr = bE[r]
10951089 let bS = fromBase58String(cr)
1096- let bE = parseIntValue(bD[t])
1097- let bF = parseIntValue(bD[u])
1098- let bT = bD[p]
1099- let fw = valueOrErrorMessage(assetInfo(bQ), (("Asset " + toBase58String(bQ)) + " doesn't exist")).quantity
1100- let fC = bp(cq)
1101- let fD = bp(cr)
1102- let fE = D(fC, bE)
1103- let fF = D(fD, bF)
1104- let bZ = if ((fw == 0))
1090+ let cs = bE[s]
1091+ let bT = fromBase58String(cs)
1092+ let bF = parseIntValue(bE[t])
1093+ let bG = parseIntValue(bE[u])
1094+ let bU = bE[p]
1095+ let fv = valueOrErrorMessage(assetInfo(bR), (("Asset " + toBase58String(bR)) + " doesn't exist")).quantity
1096+ let fB = bq(cr)
1097+ let fC = bq(cs)
1098+ let fD = D(fB, bF)
1099+ let fE = D(fC, bG)
1100+ let ca = if ((fv == 0))
11051101 then e
1106- else br(fF, fE)
1107- let cx = D(cm, bF)
1108- let cw = fraction(cx, d, bZ)
1109- let ck = G(cw, bE)
1110- let dk = ci("", 500000, ck, bR, cm, bS, "", true, false)
1111- let cH = dk._1
1112- let fB = dk._3
1113- let bV = dk._4
1114- let bX = dk._5
1115- let bU = dk._6
1116- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cH), toString(G(bZ, b)), toString(bV), toString(bX), toString(bU), bT, toString(ck), toString(cm)], j))
1102+ else bs(fE, fD)
1103+ let cy = D(cn, bG)
1104+ let cx = fraction(cy, d, ca)
1105+ let cl = G(cx, bF)
1106+ let dl = cj("", 500000, cl, bS, cn, bT, "", true, false)
1107+ let cI = dl._1
1108+ let fA = dl._3
1109+ let bW = dl._4
1110+ let bY = dl._5
1111+ let bV = dl._6
1112+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cI), toString(G(ca, b)), toString(bW), toString(bY), toString(bV), bU, toString(cl), toString(cn)], j))
11171113 }
11181114
11191115
11201116
1121-@Callable(de)
1122-func evaluateGetREADONLY (fG,fH) = {
1123- let cz = bM("", fG, fH, this)
1124- let cf = cz._1
1125- let cg = cz._2
1126- let bV = cz._5
1127- let bX = cz._6
1128- let bU = cz._7
1129- let ca = cz._8
1130- let bT = parseIntValue(cz._9)
1131- $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cf), toString(cg), toString(bV), toString(bX), toString(bU), toString(ca), toString(bT)], j))
1117+@Callable(df)
1118+func evaluateGetREADONLY (fF,fG) = {
1119+ let cA = bN("", fF, fG, this)
1120+ let cg = cA._1
1121+ let ch = cA._2
1122+ let bW = cA._5
1123+ let bY = cA._6
1124+ let bV = cA._7
1125+ let cb = cA._8
1126+ let bU = parseIntValue(cA._9)
1127+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cg), toString(ch), toString(bW), toString(bY), toString(bV), toString(cb), toString(bU)], j))
11321128 }
11331129
11341130
1135-@Verifier(fI)
1136-func fJ () = {
1137- let fK = {
1138- let dp = eA()
1139- if ($isInstanceOf(dp, "ByteVector"))
1131+@Verifier(fH)
1132+func fI () = {
1133+ let fJ = {
1134+ let dq = ey()
1135+ if ($isInstanceOf(dq, "ByteVector"))
11401136 then {
1141- let eF = dp
1142- eF
1137+ let eD = dq
1138+ eD
11431139 }
1144- else if ($isInstanceOf(dp, "Unit"))
1145- then fI.senderPublicKey
1140+ else if ($isInstanceOf(dq, "Unit"))
1141+ then fH.senderPublicKey
11461142 else throw("Match error")
11471143 }
1148- let dp = fI
1149- if ($isInstanceOf(dp, "Order"))
1144+ let dq = fH
1145+ if ($isInstanceOf(dq, "Order"))
11501146 then {
1151- let cQ = dp
1152- let fL = aF()
1153- let at = cP(cQ)
1154- let au = sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
1155- let av = sigVerify(cQ.bodyBytes, cQ.proofs[1], fL)
1156- if (if (if (at)
1157- then au
1158- else false)
1147+ let cR = dq
1148+ let fK = aG()
1149+ let au = cQ(cR)
1150+ let av = sigVerify(cR.bodyBytes, cR.proofs[0], cR.senderPublicKey)
1151+ let aw = sigVerify(cR.bodyBytes, cR.proofs[1], fK)
1152+ if (if (if (au)
11591153 then av
11601154 else false)
1155+ then aw
1156+ else false)
11611157 then true
1162- else as(at, au, av)
1158+ else at(au, av, aw)
11631159 }
1164- else if ($isInstanceOf(dp, "SetScriptTransaction"))
1160+ else if ($isInstanceOf(dq, "SetScriptTransaction"))
11651161 then {
1166- let eB = dp
1167- let fM = blake2b256(value(eB.script))
1168- let fN = fromBase64String(value(getString(aC, aq())))
1169- let fO = scriptHash(this)
1170- if (if ((fN == fM))
1171- then (fO != fM)
1162+ let ez = dq
1163+ let fL = blake2b256(value(ez.script))
1164+ let fM = fromBase64String(value(getString(aD, ar())))
1165+ let fN = scriptHash(this)
1166+ if (if ((fM == fL))
1167+ then (fN != fL)
11721168 else false)
11731169 then true
1174- else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
1170+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11751171 }
1176- else sigVerify(fI.bodyBytes, fI.proofs[0], fK)
1172+ else sigVerify(fH.bodyBytes, fH.proofs[0], fJ)
11771173 }
11781174

github/deemru/w8io/873ac7e 
402.30 ms