tx · 33bGSdn9j5P2ZdYTaJBZGZct1nqoYam9c3eqSLBG43ep

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.02100000 Waves

2023.10.10 21:51 [3858781] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "33bGSdn9j5P2ZdYTaJBZGZct1nqoYam9c3eqSLBG43ep", "fee": 2100000, "feeAssetId": null, "timestamp": 1696963884285, "version": 1, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "59GcUNk8XP68ntkGT9Mm2zsiKMfNcYM6YZBuvLQXFtT8Ee47VPZ3sSLuZHEUFeyVX4QKYUdTo6gj2YzY2vNyS6P9" ], "script": "base64:BwICCAIzAAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8BDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDAJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gwCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgEDc3VtAgRzaXplBGRhdGEKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFBHNpemUFBWFjY3VtCQBkAgUFYWNjdW0JAJEDAgUEZGF0YQUEbmV4dAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwBDmdldFNldHVwVG9rZW5zAQ1tYXJrZXRBZGRyZXNzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCDHNldHVwX3Rva2VucwIBLAENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMDCQAAAgUKYXNzZXRJZFN0cgUJdXNkdElkU3RyBgkAAAIFCmFzc2V0SWRTdHIFCXVzZGNJZFN0cgDAhD0EBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1vcmFjbGVBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIFBXByaWNlAQ1nZXRBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARFnZXRMYXN0UmF0ZUhlaWdodAENbWFya2V0QWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzAg5sYXN0UmF0ZUhlaWdodAAAARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyAAABEGdldE91dGRhdGVkU1JhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQAAARBnZXRPdXRkYXRlZEJSYXRlAg1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICBQphc3NldElkU3RyAgZfYlJhdGUAAAENZ2V0T3V0ZGF0ZWRVcgQTb3V0ZGF0ZWRUb3RhbFN1cHBseRNvdXRkYXRlZFRvdGFsQm9ycm93DW91dGRhdGVkU1JhdGUNb3V0ZGF0ZWRCUmF0ZQQEZG93bgkAawMFE291dGRhdGVkVG90YWxTdXBwbHkFDW91dGRhdGVkU1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDBRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZEJSYXRlBQdTY2FsZTE2BQRkb3duAQdnZXRSYXRlAgpvdXRkYXRlZFVyCmFzc2V0SWRTdHIEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAQUKYXNzZXRJZFN0cgkAZAIIBQVjdXJ2ZQJfMQMJAGcCCAUFY3VydmUCXzMFCm91dGRhdGVkVXIJAGsDBQpvdXRkYXRlZFVyCAUFY3VydmUCXzIIBQVjdXJ2ZQJfMwkAZAIIBQVjdXJ2ZQJfMgkAawMJAGUCBQpvdXRkYXRlZFVyCAUFY3VydmUCXzMIBQVjdXJ2ZQJfNAkAZQIAgMLXLwgFBWN1cnZlAl8zAQtnZXRJbnRlcmVzdAEEcmF0ZQkAlgMBCQDMCAIJAGsDBQRyYXRlBQZTY2FsZTgFCnllYXJCbG9ja3MJAMwIAgABBQNuaWwBDWdldEFzc2V0SW5kZXgCC3NldHVwVG9rZW5zCmFzc2V0SWRTdHIJAQV2YWx1ZQEJAM8IAgULc2V0dXBUb2tlbnMFCmFzc2V0SWRTdHIBEWdldEFzc2V0UGFyYW10ZXJzAhBtYXJrZXRQYXJhbWV0ZXJzCmFzc2V0SW5kZXgJAJUKAwkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMQUKYXNzZXRJbmRleAkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMgUKYXNzZXRJbmRleAkAkQMCCAUQbWFya2V0UGFyYW1ldGVycwJfMwUKYXNzZXRJbmRleAETZ2V0TWFya2V0UGFyYW1ldGVycwINbWFya2V0QWRkcmVzcwtzZXR1cFRva2VucwQHc2V0dXBDZgkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgpzZXR1cF9sdHZzAgEsBAdzZXR1cEx0CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCXNldHVwX2x0cwIBLAQMc2V0dXBQZW5hbHR5CQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCD3NldHVwX3BlbmFsdGllcwIBLAQKdG9rZW5zU2l6ZQkAkAMBBQtzZXR1cFRva2VucwoBBGZvbGQCBWFjY3VtBG5leHQDCQBnAgUEbmV4dAUKdG9rZW5zU2l6ZQUFYWNjdW0JAJUKAwkAzQgCCAUFYWNjdW0CXzEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQRuZXh0CQDNCAIIBQVhY2N1bQJfMgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQJAM0IAggFBWFjY3VtAl8zCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRmb2xkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAEMZ2V0TWF4U3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQ1wYXJzZUludFZhbHVlAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ1tYXJrZXRBZGRyZXNzCQCsAgICEHNldHVwX21heFN1cHBseV8FCmFzc2V0SWRTdHICATABDmdldEFjdHVhbFNSYXRlBA5sYXN0UmF0ZUhlaWdodAhpbnRlcmVzdApvdXRkYXRlZFVyDW91dGRhdGVkU1JhdGUECWxhc3RTUmF0ZQkAlgMBCQDMCAIFDW91dGRhdGVkU1JhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdTUmF0ZQkAZAIFCWxhc3RTUmF0ZQkAaQIJAGgCCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQJAGsDBQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUGU2NhbGU4CQBlAgBkBQtyZXNlcnZlRnVuZABkBQhuZXdTUmF0ZQEOZ2V0QWN0dWFsQlJhdGUDDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0DW91dGRhdGVkQlJhdGUECWxhc3RCUmF0ZQkAlgMBCQDMCAIFDW91dGRhdGVkQlJhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdCUmF0ZQkAZAIFCWxhc3RCUmF0ZQkAaAIJAGUCBQZoZWlnaHQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUIbmV3QlJhdGUBC2dldEFjdHVhbFVyAgxhY3R1YWxTdXBwbHkMYWN0dWFsQm9ycm93CQBrAwUMYWN0dWFsQm9ycm93BQZTY2FsZTgFDGFjdHVhbFN1cHBseQEPZ2V0QWN0dWFsQW1vdW50Ag5vdXRkYXRlZEFtb3VudAphY3R1YWxSYXRlCQBrAwUOb3V0ZGF0ZWRBbW91bnQFCmFjdHVhbFJhdGUFB1NjYWxlMTYBCGdldEluVXNkAwxhY3R1YWxBbW91bnQKYXNzZXRTY2FsZQVwcmljZQkAawMFDGFjdHVhbEFtb3VudAUFcHJpY2UFCmFzc2V0U2NhbGUBDGdldFN1cHBseUFweQIEcmF0ZQhhY3R1YWxVcgQKc3VwcGx5UmF0ZQkAawMJAGsDBQRyYXRlAFAAZAUIYWN0dWFsVXIFBlNjYWxlOAkAZQIJAKADAQkAdgYJALcCAgUKU2NhbGUxNkJpZwkAvAIDCQC2AgEFCnN1cHBseVJhdGUFCVNjYWxlOEJpZwUNeWVhckJsb2Nrc0JpZwAQBQ15ZWFyQmxvY2tzQmlnAAAACAUERE9XTgUGU2NhbGU4AQxnZXRCb3Jyb3dBcHkBBHJhdGUJAGUCCQCgAwEJAHYGCQC3AgIFClNjYWxlMTZCaWcJALwCAwkAtgIBBQRyYXRlBQlTY2FsZThCaWcFDXllYXJCbG9ja3NCaWcAEAUNeWVhckJsb2Nrc0JpZwAAAAgFBERPV04FBlNjYWxlOAEPZ2V0V2FsbGV0U3VwcGx5BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbFNSYXRlBBRvdXRkYXRlZFdhbGxldFN1cHBseQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0Agpfc3VwcGxpZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldFN1cHBseQULYWN0dWFsU1JhdGUBD2dldFdhbGxldEJvcnJvdwQNbWFya2V0QWRkcmVzcwphc3NldElkU3RyBndhbGxldAthY3R1YWxCUmF0ZQQUb3V0ZGF0ZWRXYWxsZXRCb3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICCQCsAgIFBndhbGxldAIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgAACQEPZ2V0QWN0dWFsQW1vdW50AgUUb3V0ZGF0ZWRXYWxsZXRCb3Jyb3cFC2FjdHVhbEJSYXRlARBnZXREYWlseVBlcmNlbnRzAgNhcHkIcXVhbnRpdHkJAGsDCQBrAwkAZQIJAKADAQkAdgYJALcCAgUJU2NhbGU4QmlnCQC2AgEFA2FweQAICQC6AgIFClNjYWxlMTZCaWcFDXllYXJCbG9ja3NCaWcAEAAQBQRET1dOBQdTY2FsZTE2BQlkYXlCbG9ja3MFBlNjYWxlOAUIcXVhbnRpdHkFBlNjYWxlOAEQZ2V0QWNjb3VudEhlYWx0aAIbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkG3RvdGFsV2FsbGV0Qm9ycm93VXNhZ2VJblVzZAMJAAACBRt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QAAAUGU2NhbGU4CQBlAgUGU2NhbGU4CQBrAwUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBQZTY2FsZTgFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAEJZ2V0TmV0QXB5AxZ0b3RhbFdhbGxldFN1cHBseUluVXNkFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QWdG90YWxXYWxsZXRNYXJnaW5JblVzZAMJAAACBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAAAAAAMJAGYCBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkAAAJAGsDBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBQZTY2FsZTgFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAGsDBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkBQZTY2FsZTgFFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QBC2Fzc2V0VG9Kc29uAgphc3NldElkU3RyCHF1YW50aXR5BAskdDA4NzE1ODkzMAMJAAACBQphc3NldElkU3RyBQVXYXZlcwkAlAoCAAgCBVdBVkVTBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIJAJQKAggFBWFzc2V0CGRlY2ltYWxzCAUFYXNzZXQEbmFtZQQIZGVjaW1hbHMIBQskdDA4NzE1ODkzMAJfMQQEbmFtZQgFCyR0MDg3MTU4OTMwAl8yCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIMeyJxdWFudGl0eSI6CQCkAwEFCHF1YW50aXR5AgwsImRlY2ltYWxzIjoJAKQDAQUIZGVjaW1hbHMCCSwibmFtZSI6IgUEbmFtZQIIIiwiaWQiOiIFCmFzc2V0SWRTdHICAiJ9AQ9hbW91bnRUb0RlY2ltYWwCBmFtb3VudAphc3NldFNjYWxlBAdpbnRQYXJ0CQBpAgUGYW1vdW50BQphc3NldFNjYWxlBAlmbG9hdFBhcnQJAGoCBQZhbW91bnQFCmFzc2V0U2NhbGUJAKwCAgkArAICCQCkAwEFB2ludFBhcnQCAS4JAKQDAQUJZmxvYXRQYXJ0AQ1nZXRNYXJrZXREYXRhAQ1tYXJrZXRBZGRyZXNzBAltYXJrZXRTdHIJAKUIAQUNbWFya2V0QWRkcmVzcwQKbWFya2V0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAgxtYXJrZXRfbmFtZV8FCW1hcmtldFN0cgQPbWFya2V0U2hvcnROYW1lCQERQGV4dHJOYXRpdmUoMTA1OCkBCQCsAgICEW1hcmtldF9zaG9ydG5hbWVfBQltYXJrZXRTdHIEC3NldHVwVG9rZW5zCQEOZ2V0U2V0dXBUb2tlbnMBBQ1tYXJrZXRBZGRyZXNzBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBA5sYXN0UmF0ZUhlaWdodAkBEWdldExhc3RSYXRlSGVpZ2h0AQUNbWFya2V0QWRkcmVzcwQLYXNzZXRzQ291bnQJAJADAQULc2V0dXBUb2tlbnMKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFC2Fzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQtzZXR1cFRva2VucwUEbmV4dAQCY2YJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cENmBQRuZXh0BAJsdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwTHQFBG5leHQEB3BlbmFsdHkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxzZXR1cFBlbmFsdHkFBG5leHQEBXByaWNlCQENZ2V0VG9rZW5QcmljZQEFCmFzc2V0SWRTdHIECmFzc2V0U2NhbGUJAQ1nZXRBc3NldFNjYWxlAQUKYXNzZXRJZFN0cgQJbWF4U3VwcGx5CQEMZ2V0TWF4U3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbFN1cHBseQkBFmdldE91dGRhdGVkVG90YWxTdXBwbHkCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsQm9ycm93CQEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkU1JhdGUJARBnZXRPdXRkYXRlZFNSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRCUmF0ZQkBEGdldE91dGRhdGVkQlJhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAgUKb3V0ZGF0ZWRVcgUKYXNzZXRJZFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFBHJhdGUEBXNSYXRlCQEOZ2V0QWN0dWFsU1JhdGUEBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFCm91dGRhdGVkVXIFDW91dGRhdGVkU1JhdGUEBWJSYXRlCQEOZ2V0QWN0dWFsQlJhdGUDBQ5sYXN0UmF0ZUhlaWdodAUIaW50ZXJlc3QFDW91dGRhdGVkQlJhdGUEBnN1cHBseQkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxTdXBwbHkFBXNSYXRlBAZib3Jyb3cJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsQm9ycm93BQViUmF0ZQQLc3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFBnN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEC2JvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQZib3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBAhyZXNlcnZlcwkAZQIFBnN1cHBseQUGYm9ycm93BA1yZXNlcnZlc0luVXNkCQEIZ2V0SW5Vc2QDBQhyZXNlcnZlcwUKYXNzZXRTY2FsZQUFcHJpY2UEAnVyCQELZ2V0QWN0dWFsVXICBQZzdXBwbHkFBmJvcnJvdwQJc3VwcGx5QXB5CQEMZ2V0U3VwcGx5QXB5AgUEcmF0ZQUCdXIECWJvcnJvd0FweQkBDGdldEJvcnJvd0FweQEFBHJhdGUJAKQKEgkAzQgCCAUFYWNjdW0CXzEFCmFzc2V0SWRTdHIJAM0IAggFBWFjY3VtAl8yBQJjZgkAzQgCCAUFYWNjdW0CXzMFAmx0CQDNCAIIBQVhY2N1bQJfNAUHcGVuYWx0eQkAzQgCCAUFYWNjdW0CXzUFBXByaWNlCQDNCAIIBQVhY2N1bQJfNgUKYXNzZXRTY2FsZQkAzQgCCAUFYWNjdW0CXzcFCW1heFN1cHBseQkAzQgCCAUFYWNjdW0CXzgFBXNSYXRlCQDNCAIIBQVhY2N1bQJfOQUFYlJhdGUJAM0IAggFBWFjY3VtA18xMAUGc3VwcGx5CQDNCAIIBQVhY2N1bQNfMTEFC3N1cHBseUluVXNkCQDNCAIIBQVhY2N1bQNfMTIFBmJvcnJvdwkAzQgCCAUFYWNjdW0DXzEzBQtib3Jyb3dJblVzZAkAzQgCCAUFYWNjdW0DXzE0BQhyZXNlcnZlcwkAzQgC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CgUFB21hcmtldHMFDG1hcmtldHNDb3VudAUPdG90YWxMZW5kU3VwcGx5BQ90b3RhbExlbmRCb3Jyb3cFEXRvdGFsTGVuZFJlc2VydmVzAQ1nZXRXYWxsZXREYXRhDA1tYXJrZXRBZGRyZXNzBndhbGxldAthc3NldHNDb3VudAphc3NldHNMaXN0BmNmTGlzdAZsdExpc3QJcHJpY2VMaXN0DmFzc2V0U2NhbGVMaXN0CXNSYXRlTGlzdAliUmF0ZUxpc3QNc3VwcGx5QXB5TGlzdA1ib3Jyb3dBcHlMaXN0CgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQthc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgUKYXNzZXRzTGlzdAUEbmV4dAQCY2YJAJEDAgUGY2ZMaXN0BQRuZXh0BAJsdAkAkQMCBQZsdExpc3QFBG5leHQEBXByaWNlCQCRAwIFCXByaWNlTGlzdAUEbmV4dAQKYXNzZXRTY2FsZQkAkQMCBQ5hc3NldFNjYWxlTGlzdAUEbmV4dAQFc1JhdGUJAJEDAgUJc1JhdGVMaXN0BQRuZXh0BAViUmF0ZQkAkQMCBQliUmF0ZUxpc3QFBG5leHQECXN1cHBseUFweQkAkQMCBQ1zdXBwbHlBcHlMaXN0BQRuZXh0BAlib3Jyb3dBcHkJAJEDAgUNYm9ycm93QXB5TGlzdAUEbmV4dAQMd2FsbGV0U3VwcGx5CQEPZ2V0V2FsbGV0U3VwcGx5BAUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQVzUmF0ZQQRd2FsbGV0U3VwcGx5SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldFN1cHBseQUKYXNzZXRTY2FsZQUFcHJpY2UEEXdhbGxldERhaWx5SW5jb21lCQEQZ2V0RGFpbHlQZXJjZW50cwIFCXN1cHBseUFweQUMd2FsbGV0U3VwcGx5BBZ3YWxsZXREYWlseUluY29tZUluVXNkCQEIZ2V0SW5Vc2QDBRF3YWxsZXREYWlseUluY29tZQUKYXNzZXRTY2FsZQUFcHJpY2UEDHdhbGxldEJvcnJvdwkBD2dldFdhbGxldEJvcnJvdwQFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIFBndhbGxldAUFYlJhdGUEEXdhbGxldEJvcnJvd0luVXNkCQEIZ2V0SW5Vc2QDBQx3YWxsZXRCb3Jyb3cFCmFzc2V0U2NhbGUFBXByaWNlBBd3YWxsZXREYWlseUxvYW5QZXJjZW50cwkBEGdldERhaWx5UGVyY2VudHMCBQlib3Jyb3dBcHkFDHdhbGxldEJvcnJvdwQcd2FsbGV0RGFpbHlMb2FuUGVyY2VudHNJblVzZAkBCGdldEluVXNkAwUXd2FsbGV0RGFpbHlMb2FuUGVyY2VudHMFCmFzc2V0U2NhbGUFBXByaWNlBBZ3YWxsZXRCb3Jyb3dMaW1pdEluVXNkCQBrAwURd2FsbGV0U3VwcGx5SW5Vc2QFAmNmBQZTY2FsZTgEFndhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAGsDBRF3YWxsZXRCb3Jyb3dJblVzZAUGU2NhbGU4BQJsdAQRd2FsbGV0TWFyZ2luSW5Vc2QJAGUCCQBrAwURd2FsbGV0U3VwcGx5SW5Vc2QFCXN1cHBseUFweQUGU2NhbGU4CQBrAwURd2FsbGV0Qm9ycm93SW5Vc2QFCWJvcnJvd0FweQUGU2NhbGU4BAxiYWREZWJ0SW5Vc2QDCQBmAgURd2FsbGV0Qm9ycm93SW5Vc2QFEXdhbGxldFN1cHBseUluVXNkCQBlAgURd2FsbGV0Qm9ycm93SW5Vc2QFEXdhbGxldFN1cHBseUluVXNkAAAJAJ4KDAkAzQgCCAUFYWNjdW0CXzEFDHdhbGxldFN1cHBseQkAzQgCCAUFYWNjdW0CXzIFEXdhbGxldFN1cHBseUluVXNkCQDNCAIIBQVhY2N1bQJfMwURd2FsbGV0RGFpbHlJbmNvbWUJAM0IAggFBWFjY3VtAl80BRZ3YWxsZXREYWlseUluY29tZUluVXNkCQDNCAIIBQVhY2N1bQJfNQUMd2FsbGV0Qm9ycm93CQDNCAIIBQVhY2N1bQJfNgURd2FsbGV0Qm9ycm93SW5Vc2QJAM0IAggFBWFjY3VtAl83BRd3YWxsZXREYWlseUxvYW5QZXJjZW50cwkAzQgCCAUFYWNjdW0CXzgFHHdhbGxldERhaWx5TG9hblBlcmNlbnRzSW5Vc2QJAM0IAggFBWFjY3VtAl85BRZ3YWxsZXRCb3Jyb3dMaW1pdEluVXNkCQDNCAIIBQVhY2N1bQNfMTAFFndhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAM0IAggFBWFjY3VtA18xMQURd2FsbGV0TWFyZ2luSW5Vc2QJAM0IAggFBWFjY3VtA18xMgUMYmFkRGVidEluVXNkBAZhc3NldHMKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCeCgwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBZ0b3RhbFdhbGxldFN1cHBseUluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzIEG3RvdGFsV2FsbGV0RGFpbHlJbmNvbWVJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzAl80BBZ0b3RhbFdhbGxldEJvcnJvd0luVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzYEIXRvdGFsV2FsbGV0RGFpbHlMb2FuUGVyY2VudHNJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzAl84BBt0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwJfOQQbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzEwBBZ0b3RhbFdhbGxldE1hcmdpbkluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzExBA1hY2NvdW50SGVhbHRoCQEQZ2V0QWNjb3VudEhlYWx0aAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBAZuZXRBcHkJAQlnZXROZXRBcHkDBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRZ0b3RhbFdhbGxldE1hcmdpbkluVXNkCQCZCgcFBmFzc2V0cwUWdG90YWxXYWxsZXRTdXBwbHlJblVzZAUbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBSF0b3RhbFdhbGxldERhaWx5TG9hblBlcmNlbnRzSW5Vc2QFDWFjY291bnRIZWFsdGgFBm5ldEFweQELZ2V0TWVudUpzb24BBWRlYnVnBAxtYXJrZXRzQ291bnQJARFAZXh0ck5hdGl2ZSgxMDU1KQECB21hcmtldHMKAQttYXJrZXRzRm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQxtYXJrZXRzQ291bnQFBWFjY3VtBAltYXJrZXRTdHIJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIHbWFya2V0XwkApAMBBQRuZXh0BA1tYXJrZXRBZGRyZXNzCQERQGV4dHJOYXRpdmUoMTA2MikBBQltYXJrZXRTdHIEC3NldHVwVG9rZW5zCQEOZ2V0U2V0dXBUb2tlbnMBBQ1tYXJrZXRBZGRyZXNzBAthc3NldHNDb3VudAkAkAMBBQtzZXR1cFRva2VucwQObGFzdFJhdGVIZWlnaHQJARFnZXRMYXN0UmF0ZUhlaWdodAEFDW1hcmtldEFkZHJlc3MKAQphc3NldHNGb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFC2Fzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQtzZXR1cFRva2VucwUEbmV4dAQFcHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQKYXNzZXRTY2FsZQkBDWdldEFzc2V0U2NhbGUBBQphc3NldElkU3RyBBNvdXRkYXRlZFRvdGFsU3VwcGx5CQEWZ2V0T3V0ZGF0ZWRUb3RhbFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxCb3Jyb3cJARZnZXRPdXRkYXRlZFRvdGFsQm9ycm93AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQNb3V0ZGF0ZWRTUmF0ZQkBEGdldE91dGRhdGVkU1JhdGUCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZEJSYXRlCQEQZ2V0T3V0ZGF0ZWRCUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIECm91dGRhdGVkVXIJAQ1nZXRPdXRkYXRlZFVyBAUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUNb3V0ZGF0ZWRTUmF0ZQUNb3V0ZGF0ZWRCUmF0ZQQEcmF0ZQkBB2dldFJhdGUCBQpvdXRkYXRlZFVyBQphc3NldElkU3RyBAhpbnRlcmVzdAkBC2dldEludGVyZXN0AQUEcmF0ZQQFc1JhdGUJAQ5nZXRBY3R1YWxTUmF0ZQQFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUKb3V0ZGF0ZWRVcgUNb3V0ZGF0ZWRTUmF0ZQQFYlJhdGUJAQ5nZXRBY3R1YWxCUmF0ZQMFDmxhc3RSYXRlSGVpZ2h0BQhpbnRlcmVzdAUNb3V0ZGF0ZWRCUmF0ZQQGc3VwcGx5CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbFN1cHBseQUFc1JhdGUEBmJvcnJvdwkBD2dldEFjdHVhbEFtb3VudAIFE291dGRhdGVkVG90YWxCb3Jyb3cFBWJSYXRlBAtzdXBwbHlJblVzZAkBCGdldEluVXNkAwUGc3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQLYm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFBmJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UECHJlc2VydmVzCQBlAgUGc3VwcGx5BQZib3Jyb3cEDXJlc2VydmVzSW5Vc2QJAQhnZXRJblVzZAMFCHJlc2VydmVzBQphc3NldFNjYWxlBQVwcmljZQQPbWFya2V0QXNzZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCyJhc3NldElkIjoiBQphc3NldElkU3RyAgEiAgksInByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgUFcHJpY2UCCSwic1JhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBXNSYXRlBQZTY2FsZTgCCSwiYlJhdGUiOgkBD2Ftb3VudFRvRGVjaW1hbAIFBWJSYXRlBQZTY2FsZTgCAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUPbWFya2V0QXNzZXRKc29uBA0kdDAyMDAwMDIwMTA4CgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAAAAAABQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmFzc2V0c0ZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBAtzdXBwbHlJblVzZAgFDSR0MDIwMDAwMjAxMDgCXzEEC2JvcnJvd0luVXNkCAUNJHQwMjAwMDAyMDEwOAJfMgQNcmVzZXJ2ZXNJblVzZAgFDSR0MDIwMDAwMjAxMDgCXzMEEG1hcmtldEFzc2V0c0pzb24IBQ0kdDAyMDAwMDIwMTA4Al80BAptYXJrZXRKc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCCyJhZGRyZXNzIjoiBQltYXJrZXRTdHICASICCywiYXNzZXRzIjpbCQC6CQIFEG1hcmtldEFzc2V0c0pzb24CASwCAV0CAX0JAJYKBAkAZAIIBQVhY2N1bQJfMQULc3VwcGx5SW5Vc2QJAGQCCAUFYWNjdW0CXzIFC2JvcnJvd0luVXNkCQBkAggFBWFjY3VtAl8zBQ1yZXNlcnZlc0luVXNkCQDNCAIIBQVhY2N1bQJfNAUKbWFya2V0SnNvbgQNJHQwMjA0NTUyMDU3NAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAAAAAAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQttYXJrZXRzRm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEEHRvdGFsU3VwcGx5SW5Vc2QIBQ0kdDAyMDQ1NTIwNTc0Al8xBBB0b3RhbEJvcnJvd0luVXNkCAUNJHQwMjA0NTUyMDU3NAJfMgQSdG90YWxSZXNlcnZlc0luVXNkCAUNJHQwMjA0NTUyMDU3NAJfMwQLbWFya2V0c0pzb24IBQ0kdDAyMDQ1NTIwNTc0Al80BARqc29uCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICAXsCDiJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIFEHRvdGFsU3VwcGx5SW5Vc2QCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRB0b3RhbEJvcnJvd0luVXNkAhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyBRJ0b3RhbFJlc2VydmVzSW5Vc2QCDCwibWFya2V0cyI6WwkAugkCBQttYXJrZXRzSnNvbgIBLAIBXQIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgEXZ2V0V2FsbGV0T3BlcmF0aW9uc0pzb24EBm1hcmtldAphc3NldElkU3RyBndhbGxldAVkZWJ1ZwQNbWFya2V0QWRkcmVzcwkBEUBleHRyTmF0aXZlKDEwNjIpAQUGbWFya2V0BAptYXJrZXREYXRhCQENZ2V0TWFya2V0RGF0YQEFDW1hcmtldEFkZHJlc3MECndhbGxldERhdGEJAQ1nZXRXYWxsZXREYXRhDAUNbWFya2V0QWRkcmVzcwUGd2FsbGV0CAUKbWFya2V0RGF0YQJfMggIBQptYXJrZXREYXRhAl8xAl8xCAgFCm1hcmtldERhdGECXzECXzIICAUKbWFya2V0RGF0YQJfMQJfMwgIBQptYXJrZXREYXRhAl8xAl81CAgFCm1hcmtldERhdGECXzECXzYICAUKbWFya2V0RGF0YQJfMQJfOAgIBQptYXJrZXREYXRhAl8xAl85CAgFCm1hcmtldERhdGECXzEDXzE3CAgFCm1hcmtldERhdGECXzEDXzE4BAphc3NldEluZGV4CQENZ2V0QXNzZXRJbmRleAIICAUKbWFya2V0RGF0YQJfMQJfMQUKYXNzZXRJZFN0cgQEanNvbgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgF7AgoibWFya2V0IjoiCAUKbWFya2V0RGF0YQJfMwIBIgIOLCJhc3NldFByaWNlIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzECXzUFCmFzc2V0SW5kZXgCCiwic3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xMAUKYXNzZXRJbmRleAIPLCJzdXBwbHlJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xMQUKYXNzZXRJbmRleAINLCJzdXBwbHlBcHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xNwUKYXNzZXRJbmRleAUGU2NhbGU4AgosImJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTIFCmFzc2V0SW5kZXgCDywiYm9ycm93SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTMFCmFzc2V0SW5kZXgCDSwiYm9ycm93QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTgFCmFzc2V0SW5kZXgFBlNjYWxlOAIMLCJyZXNlcnZlcyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTQFCmFzc2V0SW5kZXgCESwicmVzZXJ2ZXNJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xA18xNQUKYXNzZXRJbmRleAIULCJ1dGlsaXphdGlvblJhdGlvIjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTYFCmFzc2V0SW5kZXgFBlNjYWxlOAIULCJjb2xsYXRlcmFsRmFjdG9yIjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQJfMgUKYXNzZXRJbmRleAUGU2NhbGU4AhgsImxpcXVpZGF0aW9uVGhyZXNob2xkIjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQJfMwUKYXNzZXRJbmRleAUGU2NhbGU4AhYsImxpcXVpZGF0aW9uUGVuYWx0eSI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzECXzQFCmFzc2V0SW5kZXgFBlNjYWxlOAINLCJtYXhTdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQJfNwUKYXNzZXRJbmRleAIQLCJ3YWxsZXRTdXBwbHkiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzEFCmFzc2V0SW5kZXgCFSwid2FsbGV0U3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfMgUKYXNzZXRJbmRleAIVLCJ3YWxsZXREYWlseUluY29tZSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfMwUKYXNzZXRJbmRleAIaLCJ3YWxsZXREYWlseUluY29tZUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzQFCmFzc2V0SW5kZXgCECwid2FsbGV0Qm9ycm93IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl81BQphc3NldEluZGV4AhUsIndhbGxldEJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzYFCmFzc2V0SW5kZXgCGywid2FsbGV0RGFpbHlMb2FuSW50ZXJlc3QiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzcFCmFzc2V0SW5kZXgCICwid2FsbGV0RGFpbHlMb2FuSW50ZXJlc3RJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl84BQphc3NldEluZGV4AhEsImFjY291bnRIZWFsdGgiOgkBD2Ftb3VudFRvRGVjaW1hbAIIBQp3YWxsZXREYXRhAl82BQZTY2FsZTgCCiwibmV0QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCCAUKd2FsbGV0RGF0YQJfNwUGU2NhbGU4AgF9AwUFZGVidWcJAAIBBQRqc29uBQRqc29uAAAg8aLO", "chainId": 87, "height": 3858781, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 154maZY4HMMwP367j2HtYrSXpBJoFpE86jek9beDfkJ Next: J4SPX4WxTsfwmXe3kcVbpP1fJjEM8yDv2zG3jVDtEew5 Diff:
OldNewDifferences
466466 let borrowInUsd = $t02000020108._2
467467 let reservesInUsd = $t02000020108._3
468468 let marketAssetsJson = $t02000020108._4
469- let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString(marketAssetsJson, ",")) + "]") + "}")
469+ let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_2C(marketAssetsJson, ",")) + "]") + "}")
470470 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
471471 }
472472
473- let $t02045220571 = {
473+ let $t02045520574 = {
474474 let $l = arr12
475475 let $s = size($l)
476476 let $acc0 = $Tuple4(0, 0, 0, nil)
484484
485485 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
486486 }
487- let totalSupplyInUsd = $t02045220571._1
488- let totalBorrowInUsd = $t02045220571._2
489- let totalReservesInUsd = $t02045220571._3
490- let marketsJson = $t02045220571._4
491- let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString(marketsJson, ",")) + "]") + "}")
487+ let totalSupplyInUsd = $t02045520574._1
488+ let totalBorrowInUsd = $t02045520574._2
489+ let totalReservesInUsd = $t02045520574._3
490+ let marketsJson = $t02045520574._4
491+ let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_2C(marketsJson, ",")) + "]") + "}")
492492 if (debug)
493493 then throw(json)
494494 else json
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 7 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let Waves = "WAVES"
55
66 let Scale6 = 1000000
77
88 let Scale8 = 100000000
99
1010 let Scale8Big = toBigInt(100000000)
1111
1212 let Scale10 = 10000000000
1313
1414 let Scale16 = 10000000000000000
1515
1616 let Scale16Big = toBigInt(10000000000000000)
1717
1818 let dayBlocks = 1440
1919
2020 let yearBlocks = 525600
2121
2222 let yearBlocksBig = toBigInt(525600)
2323
2424 let reserveFund = 20
2525
2626 let arr12 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
2727
2828 let usdtIdStr = "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi"
2929
3030 let usdcIdStr = "HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW"
3131
3232 let oracleAddress = Address(base58'3P8d1E1BLKoD52y3bQJ1bDTd2TD1gpaLn9t')
3333
3434 func getRateCurve (assetIdStr) = match assetIdStr {
3535 case _ =>
3636 if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
3737 then $Tuple4(2000000, 25000000, 80000000, 100000000)
3838 else if (("HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW" == $match0))
3939 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4040 else if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == $match0))
4141 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4242 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == $match0))
4343 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4444 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == $match0))
4545 then $Tuple4(2000000, 25000000, 80000000, 100000000)
4646 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == $match0))
4747 then $Tuple4(2000000, 40000000, 80000000, 150000000)
4848 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == $match0))
4949 then $Tuple4(0, 100000000, 80000000, 400000000)
5050 else if (("WAVES" == $match0))
5151 then $Tuple4(2000000, 30000000, 80000000, 90000000)
5252 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == $match0))
5353 then $Tuple4(0, 20000000, 80000000, 40000000)
5454 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == $match0))
5555 then $Tuple4(0, 20000000, 80000000, 100000000)
5656 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == $match0))
5757 then $Tuple4(0, 30000000, 80000000, 40000000)
5858 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == $match0))
5959 then $Tuple4(0, 25000000, 80000000, 40000000)
6060 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == $match0))
6161 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6262 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == $match0))
6363 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6464 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == $match0))
6565 then $Tuple4(2000000, 30000000, 80000000, 50000000)
6666 else if (("2thsACuHmzDMuNezPM32wg9a3BwUzBWDeSKakgz3cw21" == $match0))
6767 then $Tuple4(2000000, 40000000, 80000000, 100000000)
6868 else if (("YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7" == $match0))
6969 then $Tuple4(2000000, 30000000, 80000000, 80000000)
7070 else if (("9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi" == $match0))
7171 then $Tuple4(0, 50000000, 80000000, 200000000)
7272 else if (("3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13" == $match0))
7373 then $Tuple4(0, 100000000, 80000000, 400000000)
7474 else $Tuple4(0, 20000000, 80000000, 80000000)
7575 }
7676
7777
7878 func sum (size,data) = {
7979 func fold (accum,next) = if ((next >= size))
8080 then accum
8181 else (accum + data[next])
8282
8383 let $l = arr12
8484 let $s = size($l)
8585 let $acc0 = 0
8686 func $f0_1 ($a,$i) = if (($i >= $s))
8787 then $a
8888 else fold($a, $l[$i])
8989
9090 func $f0_2 ($a,$i) = if (($i >= $s))
9191 then $a
9292 else throw("List size exceeds 12")
9393
9494 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
9595 }
9696
9797
9898 func getSetupTokens (marketAddress) = split(getStringValue(marketAddress, "setup_tokens"), ",")
9999
100100
101101 func getTokenPrice (assetIdStr) = if (if ((assetIdStr == usdtIdStr))
102102 then true
103103 else (assetIdStr == usdcIdStr))
104104 then 1000000
105105 else {
106106 let price = getIntegerValue(oracleAddress, (assetIdStr + "_twap5B"))
107107 price
108108 }
109109
110110
111111 func getAssetScale (assetIdStr) = {
112112 let decimals = if ((assetIdStr == "WAVES"))
113113 then 8
114114 else value(assetInfo(fromBase58String(assetIdStr))).decimals
115115 pow(10, 0, decimals, 0, 0, DOWN)
116116 }
117117
118118
119119 func getLastRateHeight (marketAddress) = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
120120
121121
122122 func getOutdatedTotalSupply (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_supplied_" + assetIdStr)), 0)
123123
124124
125125 func getOutdatedTotalBorrow (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, ("total_borrowed_" + assetIdStr)), 0)
126126
127127
128128 func getOutdatedSRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_sRate")), 0)
129129
130130
131131 func getOutdatedBRate (marketAddress,assetIdStr) = valueOrElse(getInteger(marketAddress, (assetIdStr + "_bRate")), 0)
132132
133133
134134 func getOutdatedUr (outdatedTotalSupply,outdatedTotalBorrow,outdatedSRate,outdatedBRate) = {
135135 let down = fraction(outdatedTotalSupply, outdatedSRate, Scale16)
136136 if ((down == 0))
137137 then 0
138138 else fraction(Scale8, fraction(outdatedTotalBorrow, outdatedBRate, Scale16), down)
139139 }
140140
141141
142142 func getRate (outdatedUr,assetIdStr) = {
143143 let curve = getRateCurve(assetIdStr)
144144 (curve._1 + (if ((curve._3 >= outdatedUr))
145145 then fraction(outdatedUr, curve._2, curve._3)
146146 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
147147 }
148148
149149
150150 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
151151
152152
153153 func getAssetIndex (setupTokens,assetIdStr) = value(indexOf(setupTokens, assetIdStr))
154154
155155
156156 func getAssetParamters (marketParameters,assetIndex) = $Tuple3(marketParameters._1[assetIndex], marketParameters._2[assetIndex], marketParameters._3[assetIndex])
157157
158158
159159 func getMarketParameters (marketAddress,setupTokens) = {
160160 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
161161 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
162162 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
163163 let tokensSize = size(setupTokens)
164164 func fold (accum,next) = if ((next >= tokensSize))
165165 then accum
166166 else $Tuple3((accum._1 :+ parseIntValue(setupCf[next])), (accum._2 :+ parseIntValue(setupLt[next])), (accum._3 :+ parseIntValue(setupPenalty[next])))
167167
168168 let $l = arr12
169169 let $s = size($l)
170170 let $acc0 = $Tuple3(nil, nil, nil)
171171 func $f0_1 ($a,$i) = if (($i >= $s))
172172 then $a
173173 else fold($a, $l[$i])
174174
175175 func $f0_2 ($a,$i) = if (($i >= $s))
176176 then $a
177177 else throw("List size exceeds 12")
178178
179179 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
180180 }
181181
182182
183183 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
184184
185185
186186 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
187187 let lastSRate = max([outdatedSRate, Scale16])
188188 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
189189 newSRate
190190 }
191191
192192
193193 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
194194 let lastBRate = max([outdatedBRate, Scale16])
195195 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
196196 newBRate
197197 }
198198
199199
200200 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
201201
202202
203203 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
204204
205205
206206 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
207207
208208
209209 func getSupplyApy (rate,actualUr) = {
210210 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
211211 (toInt(pow((Scale16Big + fraction(toBigInt(supplyRate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
212212 }
213213
214214
215215 func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
216216
217217
218218 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
219219 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
220220 getActualAmount(outdatedWalletSupply, actualSRate)
221221 }
222222
223223
224224 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
225225 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
226226 getActualAmount(outdatedWalletBorrow, actualBRate)
227227 }
228228
229229
230230 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
231231
232232
233233 func getAccountHealth (totalWalletBorrowLimitInUsd,totalWalletBorrowUsageInUsd) = if ((totalWalletBorrowLimitInUsd == 0))
234234 then Scale8
235235 else (Scale8 - fraction(totalWalletBorrowUsageInUsd, Scale8, totalWalletBorrowLimitInUsd))
236236
237237
238238 func getNetApy (totalWalletSupplyInUsd,totalWalletBorrowInUsd,totalWalletMarginInUsd) = if ((totalWalletMarginInUsd == 0))
239239 then 0
240240 else if ((totalWalletMarginInUsd > 0))
241241 then fraction(totalWalletMarginInUsd, Scale8, totalWalletSupplyInUsd)
242242 else fraction(totalWalletMarginInUsd, Scale8, totalWalletBorrowInUsd)
243243
244244
245245 func assetToJson (assetIdStr,quantity) = {
246246 let $t087158930 = if ((assetIdStr == Waves))
247247 then $Tuple2(8, "WAVES")
248248 else {
249249 let asset = value(assetInfo(fromBase58String(assetIdStr)))
250250 $Tuple2(asset.decimals, asset.name)
251251 }
252252 let decimals = $t087158930._1
253253 let name = $t087158930._2
254254 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
255255 }
256256
257257
258258 func amountToDecimal (amount,assetScale) = {
259259 let intPart = (amount / assetScale)
260260 let floatPart = (amount % assetScale)
261261 ((toString(intPart) + ".") + toString(floatPart))
262262 }
263263
264264
265265 func getMarketData (marketAddress) = {
266266 let marketStr = toString(marketAddress)
267267 let marketName = getStringValue(("market_name_" + marketStr))
268268 let marketShortName = getStringValue(("market_shortname_" + marketStr))
269269 let setupTokens = getSetupTokens(marketAddress)
270270 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
271271 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
272272 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
273273 let lastRateHeight = getLastRateHeight(marketAddress)
274274 let assetsCount = size(setupTokens)
275275 func fold (accum,next) = if ((next >= assetsCount))
276276 then accum
277277 else {
278278 let assetIdStr = setupTokens[next]
279279 let cf = parseIntValue(setupCf[next])
280280 let lt = parseIntValue(setupLt[next])
281281 let penalty = parseIntValue(setupPenalty[next])
282282 let price = getTokenPrice(assetIdStr)
283283 let assetScale = getAssetScale(assetIdStr)
284284 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
285285 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
286286 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
287287 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
288288 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
289289 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
290290 let rate = getRate(outdatedUr, assetIdStr)
291291 let interest = getInterest(rate)
292292 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
293293 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
294294 let supply = getActualAmount(outdatedTotalSupply, sRate)
295295 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
296296 let supplyInUsd = getInUsd(supply, assetScale, price)
297297 let borrowInUsd = getInUsd(borrow, assetScale, price)
298298 let reserves = (supply - borrow)
299299 let reservesInUsd = getInUsd(reserves, assetScale, price)
300300 let ur = getActualUr(supply, borrow)
301301 let supplyApy = getSupplyApy(rate, ur)
302302 let borrowApy = getBorrowApy(rate)
303303 $Tuple18((accum._1 :+ assetIdStr), (accum._2 :+ cf), (accum._3 :+ lt), (accum._4 :+ penalty), (accum._5 :+ price), (accum._6 :+ assetScale), (accum._7 :+ maxSupply), (accum._8 :+ sRate), (accum._9 :+ bRate), (accum._10 :+ supply), (accum._11 :+ supplyInUsd), (accum._12 :+ borrow), (accum._13 :+ borrowInUsd), (accum._14 :+ reserves), (accum._15 :+ reservesInUsd), (accum._16 :+ ur), (accum._17 :+ supplyApy), (accum._18 :+ borrowApy))
304304 }
305305
306306 let assets = {
307307 let $l = arr12
308308 let $s = size($l)
309309 let $acc0 = $Tuple18(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
310310 func $f0_1 ($a,$i) = if (($i >= $s))
311311 then $a
312312 else fold($a, $l[$i])
313313
314314 func $f0_2 ($a,$i) = if (($i >= $s))
315315 then $a
316316 else throw("List size exceeds 12")
317317
318318 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
319319 }
320320 let totalSupplyInUsd = sum(assetsCount, assets._11)
321321 let totalBorrowInUsd = sum(assetsCount, assets._13)
322322 let totalReservesInUsd = sum(assetsCount, assets._15)
323323 $Tuple7(assets, assetsCount, marketName, marketShortName, totalSupplyInUsd, totalBorrowInUsd, totalReservesInUsd)
324324 }
325325
326326
327327 func getLendData () = {
328328 let marketsCount = getIntegerValue("markets")
329329 func fold (accum,next) = if ((next >= marketsCount))
330330 then accum
331331 else {
332332 let marketStr = getStringValue(("market_" + toString(next)))
333333 let marketAddress = addressFromStringValue(marketStr)
334334 let marketData = getMarketData(marketAddress)
335335 $Tuple8((accum._1 :+ marketData._1), (accum._2 :+ marketAddress), (accum._3 :+ marketData._2), (accum._4 :+ marketData._3), (accum._5 :+ marketData._4), (accum._6 :+ marketData._5), (accum._7 :+ marketData._6), (accum._8 :+ marketData._7))
336336 }
337337
338338 let markets = {
339339 let $l = arr12
340340 let $s = size($l)
341341 let $acc0 = $Tuple8(nil, nil, nil, nil, nil, nil, nil, nil)
342342 func $f0_1 ($a,$i) = if (($i >= $s))
343343 then $a
344344 else fold($a, $l[$i])
345345
346346 func $f0_2 ($a,$i) = if (($i >= $s))
347347 then $a
348348 else throw("List size exceeds 12")
349349
350350 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
351351 }
352352 let totalLendSupply = sum(marketsCount, markets._6)
353353 let totalLendBorrow = sum(marketsCount, markets._7)
354354 let totalLendReserves = sum(marketsCount, markets._8)
355355 $Tuple5(markets, marketsCount, totalLendSupply, totalLendBorrow, totalLendReserves)
356356 }
357357
358358
359359 func getWalletData (marketAddress,wallet,assetsCount,assetsList,cfList,ltList,priceList,assetScaleList,sRateList,bRateList,supplyApyList,borrowApyList) = {
360360 func fold (accum,next) = if ((next >= assetsCount))
361361 then accum
362362 else {
363363 let assetIdStr = assetsList[next]
364364 let cf = cfList[next]
365365 let lt = ltList[next]
366366 let price = priceList[next]
367367 let assetScale = assetScaleList[next]
368368 let sRate = sRateList[next]
369369 let bRate = bRateList[next]
370370 let supplyApy = supplyApyList[next]
371371 let borrowApy = borrowApyList[next]
372372 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, sRate)
373373 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
374374 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
375375 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
376376 let walletBorrow = getWalletBorrow(marketAddress, assetIdStr, wallet, bRate)
377377 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
378378 let walletDailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
379379 let walletDailyLoanPercentsInUsd = getInUsd(walletDailyLoanPercents, assetScale, price)
380380 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
381381 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
382382 let walletMarginInUsd = (fraction(walletSupplyInUsd, supplyApy, Scale8) - fraction(walletBorrowInUsd, borrowApy, Scale8))
383383 let badDebtInUsd = if ((walletBorrowInUsd > walletSupplyInUsd))
384384 then (walletBorrowInUsd - walletSupplyInUsd)
385385 else 0
386386 $Tuple12((accum._1 :+ walletSupply), (accum._2 :+ walletSupplyInUsd), (accum._3 :+ walletDailyIncome), (accum._4 :+ walletDailyIncomeInUsd), (accum._5 :+ walletBorrow), (accum._6 :+ walletBorrowInUsd), (accum._7 :+ walletDailyLoanPercents), (accum._8 :+ walletDailyLoanPercentsInUsd), (accum._9 :+ walletBorrowLimitInUsd), (accum._10 :+ walletBorrowUsageInUsd), (accum._11 :+ walletMarginInUsd), (accum._12 :+ badDebtInUsd))
387387 }
388388
389389 let assets = {
390390 let $l = arr12
391391 let $s = size($l)
392392 let $acc0 = $Tuple12(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
393393 func $f0_1 ($a,$i) = if (($i >= $s))
394394 then $a
395395 else fold($a, $l[$i])
396396
397397 func $f0_2 ($a,$i) = if (($i >= $s))
398398 then $a
399399 else throw("List size exceeds 12")
400400
401401 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
402402 }
403403 let totalWalletSupplyInUsd = sum(assetsCount, assets._2)
404404 let totalWalletDailyIncomeInUsd = sum(assetsCount, assets._4)
405405 let totalWalletBorrowInUsd = sum(assetsCount, assets._6)
406406 let totalWalletDailyLoanPercentsInUsd = sum(assetsCount, assets._8)
407407 let totalWalletBorrowLimitInUsd = sum(assetsCount, assets._9)
408408 let totalWalletBorrowUsageInUsd = sum(assetsCount, assets._10)
409409 let totalWalletMarginInUsd = sum(assetsCount, assets._11)
410410 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
411411 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMarginInUsd)
412412 $Tuple7(assets, totalWalletSupplyInUsd, totalWalletDailyIncomeInUsd, totalWalletBorrowInUsd, totalWalletDailyLoanPercentsInUsd, accountHealth, netApy)
413413 }
414414
415415
416416 func getMenuJson (debug) = {
417417 let marketsCount = getIntegerValue("markets")
418418 func marketsFold (accum,next) = if ((next >= marketsCount))
419419 then accum
420420 else {
421421 let marketStr = getStringValue(("market_" + toString(next)))
422422 let marketAddress = addressFromStringValue(marketStr)
423423 let setupTokens = getSetupTokens(marketAddress)
424424 let assetsCount = size(setupTokens)
425425 let lastRateHeight = getLastRateHeight(marketAddress)
426426 func assetsFold (accum,next) = if ((next >= assetsCount))
427427 then accum
428428 else {
429429 let assetIdStr = setupTokens[next]
430430 let price = getTokenPrice(assetIdStr)
431431 let assetScale = getAssetScale(assetIdStr)
432432 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
433433 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
434434 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
435435 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
436436 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
437437 let rate = getRate(outdatedUr, assetIdStr)
438438 let interest = getInterest(rate)
439439 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
440440 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
441441 let supply = getActualAmount(outdatedTotalSupply, sRate)
442442 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
443443 let supplyInUsd = getInUsd(supply, assetScale, price)
444444 let borrowInUsd = getInUsd(borrow, assetScale, price)
445445 let reserves = (supply - borrow)
446446 let reservesInUsd = getInUsd(reserves, assetScale, price)
447447 let marketAssetJson = (((((((((("{" + "\"assetId\":\"") + assetIdStr) + "\"") + ",\"price\":") + assetToJson(usdtIdStr, price)) + ",\"sRate\":") + amountToDecimal(sRate, Scale8)) + ",\"bRate\":") + amountToDecimal(bRate, Scale8)) + "}")
448448 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketAssetJson))
449449 }
450450
451451 let $t02000020108 = {
452452 let $l = arr12
453453 let $s = size($l)
454454 let $acc0 = $Tuple4(0, 0, 0, nil)
455455 func $f0_1 ($a,$i) = if (($i >= $s))
456456 then $a
457457 else assetsFold($a, $l[$i])
458458
459459 func $f0_2 ($a,$i) = if (($i >= $s))
460460 then $a
461461 else throw("List size exceeds 12")
462462
463463 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
464464 }
465465 let supplyInUsd = $t02000020108._1
466466 let borrowInUsd = $t02000020108._2
467467 let reservesInUsd = $t02000020108._3
468468 let marketAssetsJson = $t02000020108._4
469- let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString(marketAssetsJson, ",")) + "]") + "}")
469+ let marketJson = ((((((("{" + "\"address\":\"") + marketStr) + "\"") + ",\"assets\":[") + makeString_2C(marketAssetsJson, ",")) + "]") + "}")
470470 $Tuple4((accum._1 + supplyInUsd), (accum._2 + borrowInUsd), (accum._3 + reservesInUsd), (accum._4 :+ marketJson))
471471 }
472472
473- let $t02045220571 = {
473+ let $t02045520574 = {
474474 let $l = arr12
475475 let $s = size($l)
476476 let $acc0 = $Tuple4(0, 0, 0, nil)
477477 func $f0_1 ($a,$i) = if (($i >= $s))
478478 then $a
479479 else marketsFold($a, $l[$i])
480480
481481 func $f0_2 ($a,$i) = if (($i >= $s))
482482 then $a
483483 else throw("List size exceeds 12")
484484
485485 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12)
486486 }
487- let totalSupplyInUsd = $t02045220571._1
488- let totalBorrowInUsd = $t02045220571._2
489- let totalReservesInUsd = $t02045220571._3
490- let marketsJson = $t02045220571._4
491- let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString(marketsJson, ",")) + "]") + "}")
487+ let totalSupplyInUsd = $t02045520574._1
488+ let totalBorrowInUsd = $t02045520574._2
489+ let totalReservesInUsd = $t02045520574._3
490+ let marketsJson = $t02045520574._4
491+ let json = (((((((((("{" + "\"supplyInUsd\":") + assetToJson(usdtIdStr, totalSupplyInUsd)) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, totalBorrowInUsd)) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, totalReservesInUsd)) + ",\"markets\":[") + makeString_2C(marketsJson, ",")) + "]") + "}")
492492 if (debug)
493493 then throw(json)
494494 else json
495495 }
496496
497497
498498 func getWalletOperationsJson (market,assetIdStr,wallet,debug) = {
499499 let marketAddress = addressFromStringValue(market)
500500 let marketData = getMarketData(marketAddress)
501501 let walletData = getWalletData(marketAddress, wallet, marketData._2, marketData._1._1, marketData._1._2, marketData._1._3, marketData._1._5, marketData._1._6, marketData._1._8, marketData._1._9, marketData._1._17, marketData._1._18)
502502 let assetIndex = getAssetIndex(marketData._1._1, assetIdStr)
503503 let json = (((((((((((((((((((((((((((((((((((((((((((((((((((("{" + "\"market\":\"") + marketData._3) + "\"") + ",\"assetPrice\":") + assetToJson(usdtIdStr, marketData._1._5[assetIndex])) + ",\"supply\":") + assetToJson(assetIdStr, marketData._1._10[assetIndex])) + ",\"supplyInUsd\":") + assetToJson(usdtIdStr, marketData._1._11[assetIndex])) + ",\"supplyApy\":") + amountToDecimal(marketData._1._17[assetIndex], Scale8)) + ",\"borrow\":") + assetToJson(assetIdStr, marketData._1._12[assetIndex])) + ",\"borrowInUsd\":") + assetToJson(usdtIdStr, marketData._1._13[assetIndex])) + ",\"borrowApy\":") + amountToDecimal(marketData._1._18[assetIndex], Scale8)) + ",\"reserves\":") + assetToJson(assetIdStr, marketData._1._14[assetIndex])) + ",\"reservesInUsd\":") + assetToJson(usdtIdStr, marketData._1._15[assetIndex])) + ",\"utilizationRatio\":") + amountToDecimal(marketData._1._16[assetIndex], Scale8)) + ",\"collateralFactor\":") + amountToDecimal(marketData._1._2[assetIndex], Scale8)) + ",\"liquidationThreshold\":") + amountToDecimal(marketData._1._3[assetIndex], Scale8)) + ",\"liquidationPenalty\":") + amountToDecimal(marketData._1._4[assetIndex], Scale8)) + ",\"maxSupply\":") + assetToJson(usdtIdStr, marketData._1._7[assetIndex])) + ",\"walletSupply\":") + assetToJson(assetIdStr, walletData._1._1[assetIndex])) + ",\"walletSupplyInUsd\":") + assetToJson(usdtIdStr, walletData._1._2[assetIndex])) + ",\"walletDailyIncome\":") + assetToJson(assetIdStr, walletData._1._3[assetIndex])) + ",\"walletDailyIncomeInUsd\":") + assetToJson(usdtIdStr, walletData._1._4[assetIndex])) + ",\"walletBorrow\":") + assetToJson(assetIdStr, walletData._1._5[assetIndex])) + ",\"walletBorrowInUsd\":") + assetToJson(usdtIdStr, walletData._1._6[assetIndex])) + ",\"walletDailyLoanInterest\":") + assetToJson(assetIdStr, walletData._1._7[assetIndex])) + ",\"walletDailyLoanInterestInUsd\":") + assetToJson(usdtIdStr, walletData._1._8[assetIndex])) + ",\"accountHealth\":") + amountToDecimal(walletData._6, Scale8)) + ",\"netApy\":") + amountToDecimal(walletData._7, Scale8)) + "}")
504504 if (debug)
505505 then throw(json)
506506 else json
507507 }
508508
509509
510510

github/deemru/w8io/3ef1775 
74.26 ms