tx · HQqm6w8RWnrxDuuV1vqoVejvb3s86E7afuoxYEADLgeS

3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk:  -0.01600000 Waves

2023.10.10 00:26 [3857490] smart account 3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk > SELF 0.00000000 Waves

{ "type": 13, "id": "HQqm6w8RWnrxDuuV1vqoVejvb3s86E7afuoxYEADLgeS", "fee": 1600000, "feeAssetId": null, "timestamp": 1696886810555, "version": 1, "sender": "3P2mUshsGaj2B5A9rSD4wwXk47fHB16Sidk", "senderPublicKey": "46pxd1r6gmScNqdp82uEJMs2AZ1F9q2z1VtXZPFAtHYy", "proofs": [ "3A8byvUgz83KBLfmmaZpppQqdD6fpiMQY6stte942X8B94FFUvuSF1oGWmzioUuUnCjwDFWmAxmWFAKk8Fy6Cw2h" ], "script": "base64:BwICCAIxAAVXYXZlcwIFV0FWRVMABlNjYWxlNgDAhD0ABlNjYWxlOACAwtcvAAlTY2FsZThCaWcJALYCAQCAwtcvAAdTY2FsZTEwAIDIr6AlAAdTY2FsZTE2AICAhP6m3uERAApTY2FsZTE2QmlnCQC2AgEAgICE/qbe4REACWRheUJsb2NrcwCgCwAKeWVhckJsb2NrcwCgiiAADXllYXJCbG9ja3NCaWcJALYCAQCgiiAAC3Jlc2VydmVGdW5kABQABWFycjEyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALBQNuaWwACXVzZHRJZFN0cgIsOXdjM0xYTkE0VEVCc1h5S3RvTEU5bXJiREQ3V01IWHZYckNqWnZhYkxBc2kACXVzZGNJZFN0cgIsSEdnYWJUcVVTOFd0VkZVSnpmbXJURE1nRWNjSnVaTEJQaEZnUUZ4dm5zb1cADW9yYWNsZUFkZHJlc3MJAQdBZGRyZXNzAQEaAVdJZtDL84r1V3qt/CFvccVbiYgr0IGzsX8BDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiw5d2MzTFhOQTRURUJzWHlLdG9MRTltcmJERDdXTUhYdlhyQ2padmFiTEFzaQUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixIR2dhYlRxVVM4V3RWRlVKemZtclRETWdFY2NKdVpMQlBoRmdRRnh2bnNvVwUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BAwkAAAICBVdBVkVTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCAlfUqAwkAAAICLEF0cXY1OUVZempGR3VpdEtWbk1SazZIOEZ1a2pvVjNrdFBvcmJFeXMyNW9uBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgLSJEwMJAAACAixEU2JiaExzU1RlRGc1THNpdWZrMkFuZWgzRGpWcUp1UHIyTTl1VTFnd3k1cAUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIDC1y8DCQAAAgIsOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEFByRtYXRjaDAJAJYKBAAAAICHpw4AgOiSJgCAtIkTAwkAAAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBQckbWF0Y2gwCQCWCgQAAADA8PULAIDokiYAgLSJEwMJAAACAiw4TFFXOGY3UDVkNVBaTTdHdFpFQmdhcVJQR1N6UzNEZlB1aVhyVVJKNEFKUwUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw0NzRqVGVZeDJyMlZhMzU3OTR0Q1NjQVhXSkc5aFUySGNneHpNb3dhWlVudQUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiw1VVlCUHBxNFdvVTVuNE13cEZrZ0puVzNGcTRCMXUzdWtwSzMzaWs0UWVyUgUHJG1hdGNoMAkAlgoEAICJegCAh6cOAIDokiYAgOHrFwMJAAACAiwydGhzQUN1SG16RE11TmV6UE0zMndnOWEzQndVekJXRGVTS2FrZ3ozY3cyMQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgMLXLwMJAAACAitZaU5ib2ZGekMxN2pFSEhDTXdyUmNweTlNcnJqYWJNTUxaeGc4ZzV4bWY3BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA6JImAwkAAAICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpBQckbWF0Y2gwCQCWCgQAAACA4esXAIDokiYAgISvXwMJAAACAiwzVnVWNVdUbUR6NDdEbWRuM1FwY1lqemJTZGlwalFFNEpNZE5lMXhacFgxMwUHJG1hdGNoMAkAlgoEAAAAgMLXLwCA6JImAICI3r4BCQCWCgQAAACA2sQJAIDokiYAgOiSJgEDc3VtAgRzaXplBGRhdGEKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFBHNpemUFBWFjY3VtCQBkAgUFYWNjdW0JAJEDAgUEZGF0YQUEbmV4dAoAAiRsBQVhcnIxMgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwBDmdldFNldHVwVG9rZW5zAQ1tYXJrZXRBZGRyZXNzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCDHNldHVwX3Rva2VucwIBLAENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMDCQAAAgUKYXNzZXRJZFN0cgUJdXNkdElkU3RyBgkAAAIFCmFzc2V0SWRTdHIFCXVzZGNJZFN0cgDAhD0EBXByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ1vcmFjbGVBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICB190d2FwNUIFBXByaWNlAQ1nZXRBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARFnZXRMYXN0UmF0ZUhlaWdodAENbWFya2V0QWRkcmVzcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzAg5sYXN0UmF0ZUhlaWdodAAAARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5Ag1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAEWZ2V0T3V0ZGF0ZWRUb3RhbEJvcnJvdwINbWFya2V0QWRkcmVzcwphc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyAAABEGdldE91dGRhdGVkU1JhdGUCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQAAARBnZXRPdXRkYXRlZEJSYXRlAg1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNbWFya2V0QWRkcmVzcwkArAICBQphc3NldElkU3RyAgZfYlJhdGUAAAENZ2V0T3V0ZGF0ZWRVcgQTb3V0ZGF0ZWRUb3RhbFN1cHBseRNvdXRkYXRlZFRvdGFsQm9ycm93DW91dGRhdGVkU1JhdGUNb3V0ZGF0ZWRCUmF0ZQQEZG93bgkAawMFE291dGRhdGVkVG90YWxTdXBwbHkFDW91dGRhdGVkU1JhdGUFB1NjYWxlMTYDCQAAAgUEZG93bgAAAAAJAGsDBQZTY2FsZTgJAGsDBRNvdXRkYXRlZFRvdGFsQm9ycm93BQ1vdXRkYXRlZEJSYXRlBQdTY2FsZTE2BQRkb3duAQdnZXRSYXRlAgVjdXJ2ZQpvdXRkYXRlZFVyCQBkAggFBWN1cnZlAl8xAwkAZwIIBQVjdXJ2ZQJfMwUKb3V0ZGF0ZWRVcgkAawMFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFCm91dGRhdGVkVXIIBQVjdXJ2ZQJfMwgFBWN1cnZlAl80CQBlAgCAwtcvCAUFY3VydmUCXzMBC2dldEludGVyZXN0AQRyYXRlCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAUKeWVhckJsb2NrcwkAzAgCAAEFA25pbAENZ2V0QXNzZXRJbmRleAILc2V0dXBUb2tlbnMKYXNzZXRJZFN0cgkBBXZhbHVlAQkAzwgCBQtzZXR1cFRva2VucwUKYXNzZXRJZFN0cgERZ2V0QXNzZXRQYXJhbXRlcnMCEG1hcmtldFBhcmFtZXRlcnMKYXNzZXRJbmRleAkAlQoDCQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8xBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8yBQphc3NldEluZGV4CQCRAwIIBRBtYXJrZXRQYXJhbWV0ZXJzAl8zBQphc3NldEluZGV4ARNnZXRNYXJrZXRQYXJhbWV0ZXJzAg1tYXJrZXRBZGRyZXNzC3NldHVwVG9rZW5zBAdzZXR1cENmCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFDW1hcmtldEFkZHJlc3MCCnNldHVwX2x0dnMCASwEB3NldHVwTHQJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIJc2V0dXBfbHRzAgEsBAxzZXR1cFBlbmFsdHkJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIPc2V0dXBfcGVuYWx0aWVzAgEsBAp0b2tlbnNTaXplCQCQAwEFC3NldHVwVG9rZW5zCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQp0b2tlbnNTaXplBQVhY2N1bQkAlQoDCQDNCAIIBQVhY2N1bQJfMQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3NldHVwQ2YFBG5leHQJAM0IAggFBWFjY3VtAl8yCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBMdAUEbmV4dAkAzQgCCAUFYWNjdW0CXzMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxzZXR1cFBlbmFsdHkFBG5leHQKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAQxnZXRNYXhTdXBwbHkCDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgkBDXBhcnNlSW50VmFsdWUBCQELdmFsdWVPckVsc2UCCQCdCAIFDW1hcmtldEFkZHJlc3MJAKwCAgIQc2V0dXBfbWF4U3VwcGx5XwUKYXNzZXRJZFN0cgIBMAEOZ2V0QWN0dWFsU1JhdGUEDmxhc3RSYXRlSGVpZ2h0CGludGVyZXN0Cm91dGRhdGVkVXINb3V0ZGF0ZWRTUmF0ZQQJbGFzdFNSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRTUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld1NSYXRlCQBkAgUJbGFzdFNSYXRlCQBpAgkAaAIJAGgCCQBlAgUGaGVpZ2h0BQ5sYXN0UmF0ZUhlaWdodAkAawMFCGludGVyZXN0BQpvdXRkYXRlZFVyBQZTY2FsZTgJAGUCAGQFC3Jlc2VydmVGdW5kAGQFCG5ld1NSYXRlAQ5nZXRBY3R1YWxCUmF0ZQMObGFzdFJhdGVIZWlnaHQIaW50ZXJlc3QNb3V0ZGF0ZWRCUmF0ZQQJbGFzdEJSYXRlCQCWAwEJAMwIAgUNb3V0ZGF0ZWRCUmF0ZQkAzAgCBQdTY2FsZTE2BQNuaWwECG5ld0JSYXRlCQBkAgUJbGFzdEJSYXRlCQBoAgkAZQIFBmhlaWdodAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQhuZXdCUmF0ZQELZ2V0QWN0dWFsVXICDGFjdHVhbFN1cHBseQxhY3R1YWxCb3Jyb3cJAGsDBQxhY3R1YWxCb3Jyb3cFBlNjYWxlOAUMYWN0dWFsU3VwcGx5AQ9nZXRBY3R1YWxBbW91bnQCDm91dGRhdGVkQW1vdW50CmFjdHVhbFJhdGUJAGsDBQ5vdXRkYXRlZEFtb3VudAUKYWN0dWFsUmF0ZQUHU2NhbGUxNgEIZ2V0SW5Vc2QDDGFjdHVhbEFtb3VudAphc3NldFNjYWxlBXByaWNlCQBrAwUMYWN0dWFsQW1vdW50BQVwcmljZQUKYXNzZXRTY2FsZQEMZ2V0U3VwcGx5QXB5AgRyYXRlCGFjdHVhbFVyBApzdXBwbHlSYXRlCQBrAwkAawMFBHJhdGUAUABkBQhhY3R1YWxVcgUGU2NhbGU4CQBlAgkAoAMBCQB2BgkAtwICBQpTY2FsZTE2QmlnCQC8AgMJALYCAQUKc3VwcGx5UmF0ZQUJU2NhbGU4QmlnBQ15ZWFyQmxvY2tzQmlnABAFDXllYXJCbG9ja3NCaWcAAAAIBQRET1dOBQZTY2FsZTgBDGdldEJvcnJvd0FweQEEcmF0ZQkAZQIJAKADAQkAdgYJALcCAgUKU2NhbGUxNkJpZwkAvAIDCQC2AgEFBHJhdGUFCVNjYWxlOEJpZwUNeWVhckJsb2Nrc0JpZwAQBQ15ZWFyQmxvY2tzQmlnAAAACAUERE9XTgUGU2NhbGU4AQ9nZXRXYWxsZXRTdXBwbHkEDW1hcmtldEFkZHJlc3MKYXNzZXRJZFN0cgZ3YWxsZXQLYWN0dWFsU1JhdGUEFG91dGRhdGVkV2FsbGV0U3VwcGx5CQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MJAKwCAgkArAICBQZ3YWxsZXQCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIAAAkBD2dldEFjdHVhbEFtb3VudAIFFG91dGRhdGVkV2FsbGV0U3VwcGx5BQthY3R1YWxTUmF0ZQEPZ2V0V2FsbGV0Qm9ycm93BA1tYXJrZXRBZGRyZXNzCmFzc2V0SWRTdHIGd2FsbGV0C2FjdHVhbEJSYXRlBBRvdXRkYXRlZFdhbGxldEJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1tYXJrZXRBZGRyZXNzCQCsAgIJAKwCAgUGd2FsbGV0AgpfYm9ycm93ZWRfBQphc3NldElkU3RyAAAJAQ9nZXRBY3R1YWxBbW91bnQCBRRvdXRkYXRlZFdhbGxldEJvcnJvdwULYWN0dWFsQlJhdGUBEGdldERhaWx5UGVyY2VudHMCA2FweQhxdWFudGl0eQkAawMJAGsDCQBlAgkAoAMBCQB2BgkAtwICBQlTY2FsZThCaWcJALYCAQUDYXB5AAgJALoCAgUKU2NhbGUxNkJpZwUNeWVhckJsb2Nrc0JpZwAQABAFBERPV04FB1NjYWxlMTYFCWRheUJsb2NrcwUGU2NhbGU4BQhxdWFudGl0eQUGU2NhbGU4ARBnZXRBY2NvdW50SGVhbHRoAht0b3RhbFdhbGxldEJvcnJvd0xpbWl0SW5Vc2QbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkAwkAAAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAAABQZTY2FsZTgJAGUCBQZTY2FsZTgJAGsDBRt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QFBlNjYWxlOAUbdG90YWxXYWxsZXRCb3Jyb3dMaW1pdEluVXNkAQlnZXROZXRBcHkDFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QWdG90YWxXYWxsZXRCb3Jyb3dJblVzZBF0b3RhbFdhbGxldE1hcmdpbgMJAAACBRF0b3RhbFdhbGxldE1hcmdpbgAAAAADCQBmAgURdG90YWxXYWxsZXRNYXJnaW4AAAkAawMFEXRvdGFsV2FsbGV0TWFyZ2luBQZTY2FsZTYFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAGsDBRF0b3RhbFdhbGxldE1hcmdpbgUGU2NhbGU2BRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkAQthc3NldFRvSnNvbgIKYXNzZXRJZFN0cghxdWFudGl0eQQLJHQwODY1ODg4NzMDCQAAAgUKYXNzZXRJZFN0cgUFV2F2ZXMJAJQKAgAIAgVXQVZFUwQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQphc3NldElkU3RyCQCUCgIIBQVhc3NldAhkZWNpbWFscwgFBWFzc2V0BG5hbWUECGRlY2ltYWxzCAULJHQwODY1ODg4NzMCXzEEBG5hbWUIBQskdDA4NjU4ODg3MwJfMgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDHsicXVhbnRpdHkiOgkApAMBBQhxdWFudGl0eQIMLCJkZWNpbWFscyI6CQCkAwEFCGRlY2ltYWxzAgksIm5hbWUiOiIFBG5hbWUCCCIsImlkIjoiBQphc3NldElkU3RyAgIifQEPYW1vdW50VG9EZWNpbWFsAgZhbW91bnQKYXNzZXRTY2FsZQQHaW50UGFydAkAaQIFBmFtb3VudAUKYXNzZXRTY2FsZQQJZmxvYXRQYXJ0CQBqAgUGYW1vdW50BQphc3NldFNjYWxlCQCsAgIJAKwCAgkApAMBBQdpbnRQYXJ0AgEuCQCkAwEFCWZsb2F0UGFydAENZ2V0TWFya2V0RGF0YQENbWFya2V0QWRkcmVzcwQJbWFya2V0U3RyCQClCAEFDW1hcmtldEFkZHJlc3MECm1hcmtldE5hbWUJARFAZXh0ck5hdGl2ZSgxMDU4KQEJAKwCAgIMbWFya2V0X25hbWVfBQltYXJrZXRTdHIED21hcmtldFNob3J0TmFtZQkBEUBleHRyTmF0aXZlKDEwNTgpAQkArAICAhFtYXJrZXRfc2hvcnRuYW1lXwUJbWFya2V0U3RyBAtzZXR1cFRva2VucwkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAgxzZXR1cF90b2tlbnMCASwEB3NldHVwQ2YJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUNbWFya2V0QWRkcmVzcwIKc2V0dXBfbHR2cwIBLAQHc2V0dXBMdAkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAglzZXR1cF9sdHMCASwEDHNldHVwUGVuYWx0eQkAtQkCCQERQGV4dHJOYXRpdmUoMTA1MykCBQ1tYXJrZXRBZGRyZXNzAg9zZXR1cF9wZW5hbHRpZXMCASwEDmxhc3RSYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFDW1hcmtldEFkZHJlc3MCDmxhc3RSYXRlSGVpZ2h0AAAEC2Fzc2V0c0NvdW50CQCQAwEFC3NldHVwVG9rZW5zCgEEZm9sZAIFYWNjdW0EbmV4dAMJAGcCBQRuZXh0BQthc3NldHNDb3VudAUFYWNjdW0ECmFzc2V0SWRTdHIJAJEDAgULc2V0dXBUb2tlbnMFBG5leHQEAmNmCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHc2V0dXBDZgUEbmV4dAQCbHQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdzZXR1cEx0BQRuZXh0BAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMc2V0dXBQZW5hbHR5BQRuZXh0BAVwcmljZQkBDWdldFRva2VuUHJpY2UBBQphc3NldElkU3RyBAphc3NldFNjYWxlCQENZ2V0QXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIECW1heFN1cHBseQkBDGdldE1heFN1cHBseQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEE291dGRhdGVkVG90YWxTdXBwbHkJARZnZXRPdXRkYXRlZFRvdGFsU3VwcGx5AgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQTb3V0ZGF0ZWRUb3RhbEJvcnJvdwkBFmdldE91dGRhdGVkVG90YWxCb3Jyb3cCBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBA1vdXRkYXRlZFNSYXRlCQEQZ2V0T3V0ZGF0ZWRTUmF0ZQIFDW1hcmtldEFkZHJlc3MFCmFzc2V0SWRTdHIEDW91dGRhdGVkQlJhdGUJARBnZXRPdXRkYXRlZEJSYXRlAgUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgQFY3VydmUJAQxnZXRSYXRlQ3VydmUBBQphc3NldElkU3RyBApvdXRkYXRlZFVyCQENZ2V0T3V0ZGF0ZWRVcgQFE291dGRhdGVkVG90YWxTdXBwbHkFE291dGRhdGVkVG90YWxCb3Jyb3cFDW91dGRhdGVkU1JhdGUFDW91dGRhdGVkQlJhdGUEBHJhdGUJAQdnZXRSYXRlAgUFY3VydmUFCm91dGRhdGVkVXIECGludGVyZXN0CQELZ2V0SW50ZXJlc3QBBQRyYXRlBAVzUmF0ZQkBDmdldEFjdHVhbFNSYXRlBAUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQpvdXRkYXRlZFVyBQ1vdXRkYXRlZFNSYXRlBAViUmF0ZQkBDmdldEFjdHVhbEJSYXRlAwUObGFzdFJhdGVIZWlnaHQFCGludGVyZXN0BQ1vdXRkYXRlZEJSYXRlBAZzdXBwbHkJAQ9nZXRBY3R1YWxBbW91bnQCBRNvdXRkYXRlZFRvdGFsU3VwcGx5BQVzUmF0ZQQGYm9ycm93CQEPZ2V0QWN0dWFsQW1vdW50AgUTb3V0ZGF0ZWRUb3RhbEJvcnJvdwUFYlJhdGUEC3N1cHBseUluVXNkCQEIZ2V0SW5Vc2QDBQZzdXBwbHkFCmFzc2V0U2NhbGUFBXByaWNlBAtib3Jyb3dJblVzZAkBCGdldEluVXNkAwUGYm9ycm93BQphc3NldFNjYWxlBQVwcmljZQQIcmVzZXJ2ZXMJAGUCBQZzdXBwbHkFBmJvcnJvdwQNcmVzZXJ2ZXNJblVzZAkBCGdldEluVXNkAwUIcmVzZXJ2ZXMFCmFzc2V0U2NhbGUFBXByaWNlBAJ1cgkBC2dldEFjdHVhbFVyAgUGc3VwcGx5BQZib3Jyb3cECXN1cHBseUFweQkBDGdldFN1cHBseUFweQIFBHJhdGUFAnVyBAlib3Jyb3dBcHkJAQxnZXRCb3Jyb3dBcHkBBQRyYXRlCQCkChIJAM0IAggFBWFjY3VtAl8xBQphc3NldElkU3RyCQDNCAIIBQVhY2N1bQJfMgUCY2YJAM0IAggFBWFjY3VtAl8zBQJsdAkAzQgCCAUFYWNjdW0CXzQFB3BlbmFsdHkJAM0IAggFBWFjY3VtAl81BQVwcmljZQkAzQgCCAUFYWNjdW0CXzYFCmFzc2V0U2NhbGUJAM0IAggFBWFjY3VtAl83BQltYXhTdXBwbHkJAM0IAggFBWFjY3VtAl84BQVzUmF0ZQkAzQgCCAUFYWNjdW0CXzkFBWJSYXRlCQDNCAIIBQVhY2N1bQNfMTAFBnN1cHBseQkAzQgCCAUFYWNjdW0DXzExBQtzdXBwbHlJblVzZAkAzQgCCAUFYWNjdW0DXzEyBQZib3Jyb3cJAM0IAggFBWFjY3VtA18xMwULYm9ycm93SW5Vc2QJAM0IAggFBWFjY3VtA18xNAUIcmVzZXJ2ZXMJAM0IAggFBWFjY3VtA18xNQUNcmVzZXJ2ZXNJblVzZAkAzQgCCAUFYWNjdW0DXzE2BQJ1cgkAzQgCCAUFYWNjdW0DXzE3BQlzdXBwbHlBcHkJAM0IAggFBWFjY3VtA18xOAUJYm9ycm93QXB5BAZhc3NldHMKAAIkbAUFYXJyMTIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCkChIFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGZvbGQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEyCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMBBB0b3RhbFN1cHBseUluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzExBBB0b3RhbEJvcnJvd0luVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzEzBBJ0b3RhbFJlc2VydmVzSW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwNfMTUJAJkKBwUGYXNzZXRzBQthc3NldHNDb3VudAUKbWFya2V0TmFtZQUPbWFya2V0U2hvcnROYW1lBRB0b3RhbFN1cHBseUluVXNkBRB0b3RhbEJvcnJvd0luVXNkBRJ0b3RhbFJlc2VydmVzSW5Vc2QBDWdldFdhbGxldERhdGEMDW1hcmtldEFkZHJlc3MGd2FsbGV0C2Fzc2V0c0NvdW50CmFzc2V0c0xpc3QGY2ZMaXN0Bmx0TGlzdAlwcmljZUxpc3QOYXNzZXRTY2FsZUxpc3QJc1JhdGVMaXN0CWJSYXRlTGlzdA1zdXBwbHlBcHlMaXN0DWJvcnJvd0FweUxpc3QKAQRmb2xkAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQFC2Fzc2V0c0NvdW50BQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQphc3NldHNMaXN0BQRuZXh0BAJjZgkAkQMCBQZjZkxpc3QFBG5leHQEAmx0CQCRAwIFBmx0TGlzdAUEbmV4dAQFcHJpY2UJAJEDAgUJcHJpY2VMaXN0BQRuZXh0BAphc3NldFNjYWxlCQCRAwIFDmFzc2V0U2NhbGVMaXN0BQRuZXh0BAVzUmF0ZQkAkQMCBQlzUmF0ZUxpc3QFBG5leHQEBWJSYXRlCQCRAwIFCWJSYXRlTGlzdAUEbmV4dAQJc3VwcGx5QXB5CQCRAwIFDXN1cHBseUFweUxpc3QFBG5leHQECWJvcnJvd0FweQkAkQMCBQ1ib3Jyb3dBcHlMaXN0BQRuZXh0BAx3YWxsZXRTdXBwbHkJAQ9nZXRXYWxsZXRTdXBwbHkEBQ1tYXJrZXRBZGRyZXNzBQphc3NldElkU3RyBQZ3YWxsZXQFBXNSYXRlBBF3YWxsZXRTdXBwbHlJblVzZAkBCGdldEluVXNkAwUMd2FsbGV0U3VwcGx5BQphc3NldFNjYWxlBQVwcmljZQQRd2FsbGV0RGFpbHlJbmNvbWUJARBnZXREYWlseVBlcmNlbnRzAgUJc3VwcGx5QXB5BQx3YWxsZXRTdXBwbHkEFndhbGxldERhaWx5SW5jb21lSW5Vc2QJAQhnZXRJblVzZAMFEXdhbGxldERhaWx5SW5jb21lBQphc3NldFNjYWxlBQVwcmljZQQMd2FsbGV0Qm9ycm93CQEPZ2V0V2FsbGV0Qm9ycm93BAUNbWFya2V0QWRkcmVzcwUKYXNzZXRJZFN0cgUGd2FsbGV0BQViUmF0ZQQRd2FsbGV0Qm9ycm93SW5Vc2QJAQhnZXRJblVzZAMFDHdhbGxldEJvcnJvdwUKYXNzZXRTY2FsZQUFcHJpY2UEF3dhbGxldERhaWx5TG9hblBlcmNlbnRzCQEQZ2V0RGFpbHlQZXJjZW50cwIFCWJvcnJvd0FweQUMd2FsbGV0Qm9ycm93BBx3YWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQEIZ2V0SW5Vc2QDBRd3YWxsZXREYWlseUxvYW5QZXJjZW50cwUKYXNzZXRTY2FsZQUFcHJpY2UEFndhbGxldEJvcnJvd0xpbWl0SW5Vc2QJAGsDBRF3YWxsZXRTdXBwbHlJblVzZAUCY2YFBlNjYWxlOAQWd2FsbGV0Qm9ycm93VXNhZ2VJblVzZAkAawMFEXdhbGxldEJvcnJvd0luVXNkBQZTY2FsZTgFAmx0BAx3YWxsZXRNYXJnaW4JAGUCCQBrAwURd2FsbGV0U3VwcGx5SW5Vc2QFCXN1cHBseUFweQUGU2NhbGU4CQBrAwURd2FsbGV0Qm9ycm93SW5Vc2QFCWJvcnJvd0FweQUGU2NhbGU4CQCdCgsJAM0IAggFBWFjY3VtAl8xBQx3YWxsZXRTdXBwbHkJAM0IAggFBWFjY3VtAl8yBRF3YWxsZXRTdXBwbHlJblVzZAkAzQgCCAUFYWNjdW0CXzMFEXdhbGxldERhaWx5SW5jb21lCQDNCAIIBQVhY2N1bQJfNAUWd2FsbGV0RGFpbHlJbmNvbWVJblVzZAkAzQgCCAUFYWNjdW0CXzUFDHdhbGxldEJvcnJvdwkAzQgCCAUFYWNjdW0CXzYFEXdhbGxldEJvcnJvd0luVXNkCQDNCAIIBQVhY2N1bQJfNwUXd2FsbGV0RGFpbHlMb2FuUGVyY2VudHMJAM0IAggFBWFjY3VtAl84BRx3YWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQDNCAIIBQVhY2N1bQJfOQUWd2FsbGV0Qm9ycm93TGltaXRJblVzZAkAzQgCCAUFYWNjdW0DXzEwBRZ3YWxsZXRCb3Jyb3dVc2FnZUluVXNkCQDNCAIIBQVhY2N1bQNfMTEFDHdhbGxldE1hcmdpbgQGYXNzZXRzCgACJGwFBWFycjEyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnQoLBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAUDbmlsBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEZm9sZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTIJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwEFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwJfMgQbdG90YWxXYWxsZXREYWlseUluY29tZUluVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzQEFnRvdGFsV2FsbGV0Qm9ycm93SW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwJfNgQhdG90YWxXYWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMCXzgEG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAkBA3N1bQIFC2Fzc2V0c0NvdW50CAUGYXNzZXRzAl85BBt0b3RhbFdhbGxldEJvcnJvd1VzYWdlSW5Vc2QJAQNzdW0CBQthc3NldHNDb3VudAgFBmFzc2V0cwNfMTAEEXRvdGFsV2FsbGV0TWFyZ2luCQEDc3VtAgULYXNzZXRzQ291bnQIBQZhc3NldHMDXzExBA1hY2NvdW50SGVhbHRoCQEQZ2V0QWNjb3VudEhlYWx0aAIFG3RvdGFsV2FsbGV0Qm9ycm93TGltaXRJblVzZAUbdG90YWxXYWxsZXRCb3Jyb3dVc2FnZUluVXNkBAZuZXRBcHkJAQlnZXROZXRBcHkDBRZ0b3RhbFdhbGxldFN1cHBseUluVXNkBRZ0b3RhbFdhbGxldEJvcnJvd0luVXNkBRF0b3RhbFdhbGxldE1hcmdpbgkAmQoHBQZhc3NldHMFFnRvdGFsV2FsbGV0U3VwcGx5SW5Vc2QFG3RvdGFsV2FsbGV0RGFpbHlJbmNvbWVJblVzZAUWdG90YWxXYWxsZXRCb3Jyb3dJblVzZAUhdG90YWxXYWxsZXREYWlseUxvYW5QZXJjZW50c0luVXNkBQ1hY2NvdW50SGVhbHRoBQZuZXRBcHkBF2dldFdhbGxldE9wZXJhdGlvbnNKc29uBAZtYXJrZXQKYXNzZXRJZFN0cgZ3YWxsZXQFZGVidWcEDW1hcmtldEFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBm1hcmtldAQKbWFya2V0RGF0YQkBDWdldE1hcmtldERhdGEBBQ1tYXJrZXRBZGRyZXNzBAp3YWxsZXREYXRhCQENZ2V0V2FsbGV0RGF0YQwFDW1hcmtldEFkZHJlc3MFBndhbGxldAgFCm1hcmtldERhdGECXzIICAUKbWFya2V0RGF0YQJfMQJfMQgIBQptYXJrZXREYXRhAl8xAl8yCAgFCm1hcmtldERhdGECXzECXzMICAUKbWFya2V0RGF0YQJfMQJfNQgIBQptYXJrZXREYXRhAl8xAl82CAgFCm1hcmtldERhdGECXzECXzgICAUKbWFya2V0RGF0YQJfMQJfOQgIBQptYXJrZXREYXRhAl8xA18xNwgIBQptYXJrZXREYXRhAl8xA18xOAQKYXNzZXRJbmRleAkBDWdldEFzc2V0SW5kZXgCCAgFCm1hcmtldERhdGECXzECXzEFCmFzc2V0SWRTdHIEBGpzb24JAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIBewIKIm1hcmtldCI6IggFCm1hcmtldERhdGECXzMCASICDiwiYXNzZXRQcmljZSI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQptYXJrZXREYXRhAl8xAl81BQphc3NldEluZGV4AgosInN1cHBseSI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTAFCmFzc2V0SW5kZXgCDywic3VwcGx5SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTEFCmFzc2V0SW5kZXgCDSwic3VwcGx5QXB5IjoJAQ9hbW91bnRUb0RlY2ltYWwCCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTcFCmFzc2V0SW5kZXgFBlNjYWxlOAIKLCJib3Jyb3ciOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzEyBQphc3NldEluZGV4Ag8sImJvcnJvd0luVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzEzBQphc3NldEluZGV4Ag0sImJvcnJvd0FweSI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzE4BQphc3NldEluZGV4BQZTY2FsZTgCDCwicmVzZXJ2ZXMiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzE0BQphc3NldEluZGV4AhEsInJlc2VydmVzSW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKbWFya2V0RGF0YQJfMQNfMTUFCmFzc2V0SW5kZXgCFCwidXRpbGl6YXRpb25SYXRpbyI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzEDXzE2BQphc3NldEluZGV4BQZTY2FsZTgCFCwiY29sbGF0ZXJhbEZhY3RvciI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzECXzIFCmFzc2V0SW5kZXgFBlNjYWxlOAIYLCJsaXF1aWRhdGlvblRocmVzaG9sZCI6CQEPYW1vdW50VG9EZWNpbWFsAgkAkQMCCAgFCm1hcmtldERhdGECXzECXzMFCmFzc2V0SW5kZXgFBlNjYWxlOAIWLCJsaXF1aWRhdGlvblBlbmFsdHkiOgkBD2Ftb3VudFRvRGVjaW1hbAIJAJEDAggIBQptYXJrZXREYXRhAl8xAl80BQphc3NldEluZGV4BQZTY2FsZTgCDSwibWF4U3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCm1hcmtldERhdGECXzECXzcFCmFzc2V0SW5kZXgCECwid2FsbGV0U3VwcGx5IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl8xBQphc3NldEluZGV4AhUsIndhbGxldFN1cHBseUluVXNkIjoJAQthc3NldFRvSnNvbgIFCXVzZHRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzIFCmFzc2V0SW5kZXgCFSwid2FsbGV0RGFpbHlJbmNvbWUiOgkBC2Fzc2V0VG9Kc29uAgUKYXNzZXRJZFN0cgkAkQMCCAgFCndhbGxldERhdGECXzECXzMFCmFzc2V0SW5kZXgCGiwid2FsbGV0RGFpbHlJbmNvbWVJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl80BQphc3NldEluZGV4AhAsIndhbGxldEJvcnJvdyI6CQELYXNzZXRUb0pzb24CBQphc3NldElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfNQUKYXNzZXRJbmRleAIVLCJ3YWxsZXRCb3Jyb3dJblVzZCI6CQELYXNzZXRUb0pzb24CBQl1c2R0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl82BQphc3NldEluZGV4AhssIndhbGxldERhaWx5TG9hbkludGVyZXN0IjoJAQthc3NldFRvSnNvbgIFCmFzc2V0SWRTdHIJAJEDAggIBQp3YWxsZXREYXRhAl8xAl83BQphc3NldEluZGV4AiAsIndhbGxldERhaWx5TG9hbkludGVyZXN0SW5Vc2QiOgkBC2Fzc2V0VG9Kc29uAgUJdXNkdElkU3RyCQCRAwIICAUKd2FsbGV0RGF0YQJfMQJfOAUKYXNzZXRJbmRleAIRLCJhY2NvdW50SGVhbHRoIjoJAQ9hbW91bnRUb0RlY2ltYWwCCAUKd2FsbGV0RGF0YQJfNgUGU2NhbGU4AgosIm5ldEFweSI6CQEPYW1vdW50VG9EZWNpbWFsAggFCndhbGxldERhdGECXzcFBlNjYWxlOAIBfQMFBWRlYnVnCQACAQUEanNvbgUEanNvbgAA9JeiTQ==", "chainId": 87, "height": 3857490, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 93sMCuBBvq9LczMG4KSG1rFCtA6wzyQXZzSEXwzVove6 Next: 7Jmmr5HAEg5YAu4z9VXWF4qLWaLmahCAxoyLagevNsMG Diff:
OldNewDifferences
209209 }
210210
211211
212-func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 8, yearBlocksBig, 0, 8, DOWN)) - Scale8)
212+func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
213213
214214
215215 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
240240
241241
242242 func assetToJson (assetIdStr,quantity) = {
243- let $t086578872 = if ((assetIdStr == Waves))
243+ let $t086588873 = if ((assetIdStr == Waves))
244244 then $Tuple2(8, "WAVES")
245245 else {
246246 let asset = value(assetInfo(fromBase58String(assetIdStr)))
247247 $Tuple2(asset.decimals, asset.name)
248248 }
249- let decimals = $t086578872._1
250- let name = $t086578872._2
249+ let decimals = $t086588873._1
250+ let name = $t086588873._2
251251 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
252252 }
253253
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 (curve,outdatedUr) = (curve._1 + (if ((curve._3 >= outdatedUr))
143143 then fraction(outdatedUr, curve._2, curve._3)
144144 else (curve._2 + fraction((outdatedUr - curve._3), curve._4, (100000000 - curve._3)))))
145145
146146
147147 func getInterest (rate) = max([fraction(rate, Scale8, yearBlocks), 1])
148148
149149
150150 func getAssetIndex (setupTokens,assetIdStr) = value(indexOf(setupTokens, assetIdStr))
151151
152152
153153 func getAssetParamters (marketParameters,assetIndex) = $Tuple3(marketParameters._1[assetIndex], marketParameters._2[assetIndex], marketParameters._3[assetIndex])
154154
155155
156156 func getMarketParameters (marketAddress,setupTokens) = {
157157 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
158158 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
159159 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
160160 let tokensSize = size(setupTokens)
161161 func fold (accum,next) = if ((next >= tokensSize))
162162 then accum
163163 else $Tuple3((accum._1 :+ parseIntValue(setupCf[next])), (accum._2 :+ parseIntValue(setupLt[next])), (accum._3 :+ parseIntValue(setupPenalty[next])))
164164
165165 let $l = arr12
166166 let $s = size($l)
167167 let $acc0 = $Tuple3(nil, nil, nil)
168168 func $f0_1 ($a,$i) = if (($i >= $s))
169169 then $a
170170 else fold($a, $l[$i])
171171
172172 func $f0_2 ($a,$i) = if (($i >= $s))
173173 then $a
174174 else throw("List size exceeds 12")
175175
176176 $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)
177177 }
178178
179179
180180 func getMaxSupply (marketAddress,assetIdStr) = parseIntValue(valueOrElse(getString(marketAddress, ("setup_maxSupply_" + assetIdStr)), "0"))
181181
182182
183183 func getActualSRate (lastRateHeight,interest,outdatedUr,outdatedSRate) = {
184184 let lastSRate = max([outdatedSRate, Scale16])
185185 let newSRate = (lastSRate + ((((height - lastRateHeight) * fraction(interest, outdatedUr, Scale8)) * (100 - reserveFund)) / 100))
186186 newSRate
187187 }
188188
189189
190190 func getActualBRate (lastRateHeight,interest,outdatedBRate) = {
191191 let lastBRate = max([outdatedBRate, Scale16])
192192 let newBRate = (lastBRate + ((height - lastRateHeight) * interest))
193193 newBRate
194194 }
195195
196196
197197 func getActualUr (actualSupply,actualBorrow) = fraction(actualBorrow, Scale8, actualSupply)
198198
199199
200200 func getActualAmount (outdatedAmount,actualRate) = fraction(outdatedAmount, actualRate, Scale16)
201201
202202
203203 func getInUsd (actualAmount,assetScale,price) = fraction(actualAmount, price, assetScale)
204204
205205
206206 func getSupplyApy (rate,actualUr) = {
207207 let supplyRate = fraction(fraction(rate, 80, 100), actualUr, Scale8)
208208 (toInt(pow((Scale16Big + fraction(toBigInt(supplyRate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
209209 }
210210
211211
212-func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 8, yearBlocksBig, 0, 8, DOWN)) - Scale8)
212+func getBorrowApy (rate) = (toInt(pow((Scale16Big + fraction(toBigInt(rate), Scale8Big, yearBlocksBig)), 16, yearBlocksBig, 0, 8, DOWN)) - Scale8)
213213
214214
215215 func getWalletSupply (marketAddress,assetIdStr,wallet,actualSRate) = {
216216 let outdatedWalletSupply = valueOrElse(getInteger(marketAddress, ((wallet + "_supplied_") + assetIdStr)), 0)
217217 getActualAmount(outdatedWalletSupply, actualSRate)
218218 }
219219
220220
221221 func getWalletBorrow (marketAddress,assetIdStr,wallet,actualBRate) = {
222222 let outdatedWalletBorrow = valueOrElse(getInteger(marketAddress, ((wallet + "_borrowed_") + assetIdStr)), 0)
223223 getActualAmount(outdatedWalletBorrow, actualBRate)
224224 }
225225
226226
227227 func getDailyPercents (apy,quantity) = fraction(fraction((toInt(pow((Scale8Big + toBigInt(apy)), 8, (Scale16Big / yearBlocksBig), 16, 16, DOWN)) - Scale16), dayBlocks, Scale8), quantity, Scale8)
228228
229229
230230 func getAccountHealth (totalWalletBorrowLimitInUsd,totalWalletBorrowUsageInUsd) = if ((totalWalletBorrowLimitInUsd == 0))
231231 then Scale8
232232 else (Scale8 - fraction(totalWalletBorrowUsageInUsd, Scale8, totalWalletBorrowLimitInUsd))
233233
234234
235235 func getNetApy (totalWalletSupplyInUsd,totalWalletBorrowInUsd,totalWalletMargin) = if ((totalWalletMargin == 0))
236236 then 0
237237 else if ((totalWalletMargin > 0))
238238 then fraction(totalWalletMargin, Scale6, totalWalletSupplyInUsd)
239239 else fraction(totalWalletMargin, Scale6, totalWalletBorrowInUsd)
240240
241241
242242 func assetToJson (assetIdStr,quantity) = {
243- let $t086578872 = if ((assetIdStr == Waves))
243+ let $t086588873 = if ((assetIdStr == Waves))
244244 then $Tuple2(8, "WAVES")
245245 else {
246246 let asset = value(assetInfo(fromBase58String(assetIdStr)))
247247 $Tuple2(asset.decimals, asset.name)
248248 }
249- let decimals = $t086578872._1
250- let name = $t086578872._2
249+ let decimals = $t086588873._1
250+ let name = $t086588873._2
251251 (((((((("{\"quantity\":" + toString(quantity)) + ",\"decimals\":") + toString(decimals)) + ",\"name\":\"") + name) + "\",\"id\":\"") + assetIdStr) + "\"}")
252252 }
253253
254254
255255 func amountToDecimal (amount,assetScale) = {
256256 let intPart = (amount / assetScale)
257257 let floatPart = (amount % assetScale)
258258 ((toString(intPart) + ".") + toString(floatPart))
259259 }
260260
261261
262262 func getMarketData (marketAddress) = {
263263 let marketStr = toString(marketAddress)
264264 let marketName = getStringValue(("market_name_" + marketStr))
265265 let marketShortName = getStringValue(("market_shortname_" + marketStr))
266266 let setupTokens = split(getStringValue(marketAddress, "setup_tokens"), ",")
267267 let setupCf = split(getStringValue(marketAddress, "setup_ltvs"), ",")
268268 let setupLt = split(getStringValue(marketAddress, "setup_lts"), ",")
269269 let setupPenalty = split(getStringValue(marketAddress, "setup_penalties"), ",")
270270 let lastRateHeight = valueOrElse(getInteger(marketAddress, "lastRateHeight"), 0)
271271 let assetsCount = size(setupTokens)
272272 func fold (accum,next) = if ((next >= assetsCount))
273273 then accum
274274 else {
275275 let assetIdStr = setupTokens[next]
276276 let cf = parseIntValue(setupCf[next])
277277 let lt = parseIntValue(setupLt[next])
278278 let penalty = parseIntValue(setupPenalty[next])
279279 let price = getTokenPrice(assetIdStr)
280280 let assetScale = getAssetScale(assetIdStr)
281281 let maxSupply = getMaxSupply(marketAddress, assetIdStr)
282282 let outdatedTotalSupply = getOutdatedTotalSupply(marketAddress, assetIdStr)
283283 let outdatedTotalBorrow = getOutdatedTotalBorrow(marketAddress, assetIdStr)
284284 let outdatedSRate = getOutdatedSRate(marketAddress, assetIdStr)
285285 let outdatedBRate = getOutdatedBRate(marketAddress, assetIdStr)
286286 let curve = getRateCurve(assetIdStr)
287287 let outdatedUr = getOutdatedUr(outdatedTotalSupply, outdatedTotalBorrow, outdatedSRate, outdatedBRate)
288288 let rate = getRate(curve, outdatedUr)
289289 let interest = getInterest(rate)
290290 let sRate = getActualSRate(lastRateHeight, interest, outdatedUr, outdatedSRate)
291291 let bRate = getActualBRate(lastRateHeight, interest, outdatedBRate)
292292 let supply = getActualAmount(outdatedTotalSupply, sRate)
293293 let borrow = getActualAmount(outdatedTotalBorrow, bRate)
294294 let supplyInUsd = getInUsd(supply, assetScale, price)
295295 let borrowInUsd = getInUsd(borrow, assetScale, price)
296296 let reserves = (supply - borrow)
297297 let reservesInUsd = getInUsd(reserves, assetScale, price)
298298 let ur = getActualUr(supply, borrow)
299299 let supplyApy = getSupplyApy(rate, ur)
300300 let borrowApy = getBorrowApy(rate)
301301 $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))
302302 }
303303
304304 let assets = {
305305 let $l = arr12
306306 let $s = size($l)
307307 let $acc0 = $Tuple18(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
308308 func $f0_1 ($a,$i) = if (($i >= $s))
309309 then $a
310310 else fold($a, $l[$i])
311311
312312 func $f0_2 ($a,$i) = if (($i >= $s))
313313 then $a
314314 else throw("List size exceeds 12")
315315
316316 $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)
317317 }
318318 let totalSupplyInUsd = sum(assetsCount, assets._11)
319319 let totalBorrowInUsd = sum(assetsCount, assets._13)
320320 let totalReservesInUsd = sum(assetsCount, assets._15)
321321 $Tuple7(assets, assetsCount, marketName, marketShortName, totalSupplyInUsd, totalBorrowInUsd, totalReservesInUsd)
322322 }
323323
324324
325325 func getWalletData (marketAddress,wallet,assetsCount,assetsList,cfList,ltList,priceList,assetScaleList,sRateList,bRateList,supplyApyList,borrowApyList) = {
326326 func fold (accum,next) = if ((next >= assetsCount))
327327 then accum
328328 else {
329329 let assetIdStr = assetsList[next]
330330 let cf = cfList[next]
331331 let lt = ltList[next]
332332 let price = priceList[next]
333333 let assetScale = assetScaleList[next]
334334 let sRate = sRateList[next]
335335 let bRate = bRateList[next]
336336 let supplyApy = supplyApyList[next]
337337 let borrowApy = borrowApyList[next]
338338 let walletSupply = getWalletSupply(marketAddress, assetIdStr, wallet, sRate)
339339 let walletSupplyInUsd = getInUsd(walletSupply, assetScale, price)
340340 let walletDailyIncome = getDailyPercents(supplyApy, walletSupply)
341341 let walletDailyIncomeInUsd = getInUsd(walletDailyIncome, assetScale, price)
342342 let walletBorrow = getWalletBorrow(marketAddress, assetIdStr, wallet, bRate)
343343 let walletBorrowInUsd = getInUsd(walletBorrow, assetScale, price)
344344 let walletDailyLoanPercents = getDailyPercents(borrowApy, walletBorrow)
345345 let walletDailyLoanPercentsInUsd = getInUsd(walletDailyLoanPercents, assetScale, price)
346346 let walletBorrowLimitInUsd = fraction(walletSupplyInUsd, cf, Scale8)
347347 let walletBorrowUsageInUsd = fraction(walletBorrowInUsd, Scale8, lt)
348348 let walletMargin = (fraction(walletSupplyInUsd, supplyApy, Scale8) - fraction(walletBorrowInUsd, borrowApy, Scale8))
349349 $Tuple11((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 :+ walletMargin))
350350 }
351351
352352 let assets = {
353353 let $l = arr12
354354 let $s = size($l)
355355 let $acc0 = $Tuple11(nil, nil, nil, nil, nil, nil, nil, nil, nil, nil, nil)
356356 func $f0_1 ($a,$i) = if (($i >= $s))
357357 then $a
358358 else fold($a, $l[$i])
359359
360360 func $f0_2 ($a,$i) = if (($i >= $s))
361361 then $a
362362 else throw("List size exceeds 12")
363363
364364 $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)
365365 }
366366 let totalWalletSupplyInUsd = sum(assetsCount, assets._2)
367367 let totalWalletDailyIncomeInUsd = sum(assetsCount, assets._4)
368368 let totalWalletBorrowInUsd = sum(assetsCount, assets._6)
369369 let totalWalletDailyLoanPercentsInUsd = sum(assetsCount, assets._8)
370370 let totalWalletBorrowLimitInUsd = sum(assetsCount, assets._9)
371371 let totalWalletBorrowUsageInUsd = sum(assetsCount, assets._10)
372372 let totalWalletMargin = sum(assetsCount, assets._11)
373373 let accountHealth = getAccountHealth(totalWalletBorrowLimitInUsd, totalWalletBorrowUsageInUsd)
374374 let netApy = getNetApy(totalWalletSupplyInUsd, totalWalletBorrowInUsd, totalWalletMargin)
375375 $Tuple7(assets, totalWalletSupplyInUsd, totalWalletDailyIncomeInUsd, totalWalletBorrowInUsd, totalWalletDailyLoanPercentsInUsd, accountHealth, netApy)
376376 }
377377
378378
379379 func getWalletOperationsJson (market,assetIdStr,wallet,debug) = {
380380 let marketAddress = addressFromStringValue(market)
381381 let marketData = getMarketData(marketAddress)
382382 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)
383383 let assetIndex = getAssetIndex(marketData._1._1, assetIdStr)
384384 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)) + "}")
385385 if (debug)
386386 then throw(json)
387387 else json
388388 }
389389
390390
391391

github/deemru/w8io/3ef1775 
77.25 ms