tx · FkfL7rCAqY5TeA8Y7AooEitV4GQd4odXdgbTG4sn14fe

3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH:  -0.03200000 Waves

2022.12.12 17:44 [3422720] smart account 3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH > SELF 0.00000000 Waves

{ "type": 13, "id": "FkfL7rCAqY5TeA8Y7AooEitV4GQd4odXdgbTG4sn14fe", "fee": 3200000, "feeAssetId": null, "timestamp": 1670856288446, "version": 2, "chainId": 87, "sender": "3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH", "senderPublicKey": "8DxbUxhy23djr6kUEE1Jzp7oVJXBsHNaATLRiABpkSde", "proofs": [ "xtaJkv6rjufUGs2c9HKNtqyLrBQaomtRV1Vww99u9jppXhmdF9chctKCEZVuGcRL9SapiDXjecxPYrPRFdd6CE1" ], "script": "base64:BgKCAQgCEgASBAoCCAESBAoCCAESABIDCgEIEgQKAggBEgQKAggBEgQKAggBEgASBgoECAgICBIECgIICBIECgIICBIDCgEEEgMKAQgSAwoBBBIICgYECAEICAgSBQoDBAgIEgYKBAQIBAgSAwoBBBIECgIIBBIECgIIBBIDCgEEEgMKAQQaAAZTY2FsZTgAgMLXLwAHU2NhbGUxMACAyK+gJQAHU2NhbGUxNgkAaAIFBlNjYWxlOAUGU2NhbGU4AAlkYXlCbG9ja3MAoAsBCmxpSW50VG9TdHIBAmxpCgEBZgIFYWNjdW0EbmV4dAkArAICCQCsAgIFBWFjY3VtCQCkAwEFBG5leHQCASwKAAIkbAUCbGkKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDXRyeUdldEludGVnZXIBA2tleQQHJG1hdGNoMAkAmggCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldEJvb2xlYW4BA2tleQQHJG1hdGNoMAkAmwgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBYgUHJG1hdGNoMAUBYgcBDHRyeUdldFN0cmluZwEDa2V5BAckbWF0Y2gwCQCdCAIFBHRoaXMFA2tleQMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAWIFByRtYXRjaDAFAWICAAEMdHJ5R2V0QmluYXJ5AQNrZXkEByRtYXRjaDAJAJwIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAFAWIBAAEOZ2V0QXNzZXRTdHJpbmcBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAkA2AQBBQFiAgVXQVZFUwENZ2V0QXNzZXRCeXRlcwEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAgVXQVZFUwUEdW5pdAkA2QQBBQphc3NldElkU3RyAQpnZXRCYWxhbmNlAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkA8AcCBQR0aGlzCQDZBAEFCmFzc2V0SWRTdHIAEnJlc2VydmVGdW5kQWRkcmVzcwkBB0FkZHJlc3MBARoBVx7h+0Axa4Hm7EtWGwUsUaGTbt8JsTzSwQALcmVzZXJ2ZUZ1bmQAFAEPZ2V0TWFya2V0QXNzZXRzAAkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zAgEsARJnZXRBc3NldHNNYXhTdXBwbHkABAFzCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfbWF4c3VwcGx5AwkAAAIFAXMCAAkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEJAMwIAgD///////////8BCQDMCAIA////////////AQkAzAgCAP///////////wEFA25pbAkAtQkCBQFzAgEsAQ1nZXRPdXRkYXRlZFVyAQphc3NldElkU3RyBARkb3duCQBrAwkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQUHU2NhbGUxNgMJAAACBQRkb3duAAAAAAkAawMFBlNjYWxlOAkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfYlJhdGUFB1NjYWxlMTYFBGRvd24BDGdldFJhdGVDdXJ2ZQEKYXNzZXRJZFN0cgQHJG1hdGNoMAUKYXNzZXRJZFN0cgMJAAACAiwzNE45WWNFRVRMV245M3FZUTY0RXNQMXg4OXRTcnVKVTQ0UnJFTVNYWEVQSgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixERzJ4RmtQZER3S1VvQmt6R0FoUXRMcFNHemZYTGlDWVBFemVLSDJBZDI0cAUHJG1hdGNoMAkAlgoEAICJegDA8PULAIDokiYAgMLXLwMJAAACAixBanNvNm5UVGpwdHUyVUhMeDZoZlNYVnRIRnRSQkpDa0tZZDVTQXlqN3pmNQUHJG1hdGNoMAkAlgoEAICJegCAtIkTAIDokiYAgKPDRwMJAAACAixIRUI4UWF3OXhyV3BXczh0SHNpQVRZR0JXREJ0UDJTN2tjUEFMck11NDNBUwUHJG1hdGNoMAkAlgoEAAAAgNrECQCA6JImAIC0iRMDCQAAAgIFV0FWRVMFByRtYXRjaDAJAJYKBACAiXoAgIenDgCA6JImAIDh6xcDCQAAAgIsQXRxdjU5RVl6akZHdWl0S1ZuTVJrNkg4RnVram9WM2t0UG9yYkV5czI1b24FByRtYXRjaDAJAJYKBAAAAIDaxAkAgOiSJgCAtIkTAwkAAAICLERTYmJoTHNTVGVEZzVMc2l1ZmsyQW5laDNEalZxSnVQcjJNOXVVMWd3eTVwBQckbWF0Y2gwCQCWCgQAAACA2sQJAIDokiYAgMLXLwMJAAACAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQUHJG1hdGNoMAkAlgoEAAAAgIenDgCA6JImAIC0iRMDCQAAAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFByRtYXRjaDAJAJYKBAAAAMDw9QsAgOiSJgCAtIkTAwkAAAICLDhMUVc4ZjdQNWQ1UFpNN0d0WkVCZ2FxUlBHU3pTM0RmUHVpWHJVUko0QUpTBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDQ3NGpUZVl4MnIyVmEzNTc5NHRDU2NBWFdKRzloVTJIY2d4ek1vd2FaVW51BQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXAwkAAAICLDVVWUJQcHE0V29VNW40TXdwRmtnSm5XM0ZxNEIxdTN1a3BLMzNpazRRZXJSBQckbWF0Y2gwCQCWCgQAgIl6AICHpw4AgOiSJgCA4esXCQCWCgQAAACA2sQJAIDokiYAgOiSJgELZ2V0SW50ZXJlc3QBCmFzc2V0SWRTdHIEAnVyCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIEBWN1cnZlCQEMZ2V0UmF0ZUN1cnZlAQUKYXNzZXRJZFN0cgQEcmF0ZQkAZAIIBQVjdXJ2ZQJfMQMJAGcCCAUFY3VydmUCXzMFAnVyCQBrAwUCdXIIBQVjdXJ2ZQJfMggFBWN1cnZlAl8zCQBkAggFBWN1cnZlAl8yCQBrAwkAZQIFAnVyCAUFY3VydmUCXzMJAGUCCAUFY3VydmUCXzQIBQVjdXJ2ZQJfMgkAZQIAgMLXLwgFBWN1cnZlAl8zCQCWAwEJAMwIAgkAawMFBHJhdGUFBlNjYWxlOAkAaAIFCWRheUJsb2NrcwDtAgkAzAgCAAEFA25pbAEQdG9rZW5SYXRlc1JlY2FsYwEKYXNzZXRJZFN0cgQIaW50ZXJlc3QJAQtnZXRJbnRlcmVzdAEFCmFzc2V0SWRTdHIEAnVyCQENZ2V0T3V0ZGF0ZWRVcgEFCmFzc2V0SWRTdHIEEGxhc3RSZWNhbGNIZWlnaHQJAQ10cnlHZXRJbnRlZ2VyAQIObGFzdFJhdGVIZWlnaHQECWxhc3RCUmF0ZQkAlgMBCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfYlJhdGUJAMwIAgUHU2NhbGUxNgUDbmlsBAhuZXdCUmF0ZQkAZAIFCWxhc3RCUmF0ZQkAaAIJAGUCBQZoZWlnaHQFEGxhc3RSZWNhbGNIZWlnaHQFCGludGVyZXN0BAlsYXN0U1JhdGUJAJYDAQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQDMCAIFB1NjYWxlMTYFA25pbAQIbmV3U1JhdGUJAGQCBQlsYXN0U1JhdGUJAGkCCQBoAgkAaAIJAGUCBQZoZWlnaHQFEGxhc3RSZWNhbGNIZWlnaHQJAGsDBQhpbnRlcmVzdAUCdXIFBlNjYWxlOAkAZQIAZAULcmVzZXJ2ZUZ1bmQAZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUFCG5ld1NSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9iUmF0ZQUIbmV3QlJhdGUJAMwIAgkBDEludGVnZXJFbnRyeQICDmxhc3RSYXRlSGVpZ2h0BQZoZWlnaHQFA25pbAENZ2V0QWN0dWFsUmF0ZQIKYXNzZXRJZFN0cghyYXRlVHlwZQoBAWYCBWFjY3VtBXRva2VuBAZyZWNhbGMJARB0b2tlblJhdGVzUmVjYWxjAQUFdG9rZW4JAJQKAgMJAQIhPQIFBXRva2VuBQphc3NldElkU3RyCAUFYWNjdW0CXzEDCQAAAgUIcmF0ZVR5cGUCBXNSYXRlCAkAkQMCBQZyZWNhbGMAAAV2YWx1ZQgJAJEDAgUGcmVjYWxjAAEFdmFsdWUJAM4IAggFBWFjY3VtAl8yBQZyZWNhbGMKAAIkbAkBD2dldE1hcmtldEFzc2V0cwAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQFmAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQVnZXRVcgEKYXNzZXRJZFN0cgQFcmF0ZXMJARB0b2tlblJhdGVzUmVjYWxjAQUKYXNzZXRJZFN0cgQEZG93bgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzAAAFdmFsdWUFB1NjYWxlMTYJAGsDBQZTY2FsZTgJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwABBXZhbHVlBQdTY2FsZTE2BQRkb3duAQtyYXRlc1JlY2FsYwAKAQFmAgVhY2N1bQV0b2tlbgkAzggCBQVhY2N1bQkBEHRva2VuUmF0ZXNSZWNhbGMBBQV0b2tlbgoAAiRsCQEPZ2V0TWFya2V0QXNzZXRzAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEBZgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgENZ2V0VG9rZW5QcmljZQEKYXNzZXRJZFN0cgMJAAACBQphc3NldElkU3RyAiw2WHRIanBYYnM5UlJKUDJTcjlHVXlWcXpBQ2NieTlUa1RoSFhualZDNUNESgkAlAoCAMCEPQDAhD0EBGludjEJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1A1QlR0ZGozMlNkMUR5aDFNZHczM3hRQUFja1NmTWZuS2YCCWdldFRXQVA2MAkAzAgCBQphc3NldElkU3RyCQDMCAIHBQNuaWwFA25pbAMJAAACBQRpbnYxBQRpbnYxBARpbnYyCQD8BwQJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQOHB2bWNCaTlKZUJyblBnV0RUYVBXcldtR3p4aURrcFR1AglnZXRUV0FQNjAJAMwIAgUKYXNzZXRJZFN0cgkAzAgCBwUDbmlsBQNuaWwDCQAAAgUEaW52MgUEaW52MgQFZGF0YTEEByRtYXRjaDAFBGludjEDCQABAgUHJG1hdGNoMAIKKEludCwgSW50KQQBeAUHJG1hdGNoMAUBeAkAAgECFWVycm9yIG9mIHByaWNlIG9yYWNsZQMJAAACBQVkYXRhMQUFZGF0YTEEBWRhdGEyBAckbWF0Y2gwBQRpbnYyAwkAAQIFByRtYXRjaDACCihJbnQsIEludCkEAXgFByRtYXRjaDAFAXgJAAIBAhVlcnJvciBvZiBwcmljZSBvcmFjbGUDCQAAAgUFZGF0YTIFBWRhdGEyCQCUCgIJAJcDAQkAzAgCCAUFZGF0YTECXzEJAMwIAggFBWRhdGEyAl8xBQNuaWwJAJYDAQkAzAgCCAUFZGF0YTECXzIJAMwIAggFBWRhdGEyAl8yBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmNhbGNBc3NldFNjYWxlAQphc3NldElkU3RyBAhkZWNpbWFscwMJAAACBQphc3NldElkU3RyAgVXQVZFUwAICAkBBXZhbHVlAQkA7AcBCQDZBAEFCmFzc2V0SWRTdHIIZGVjaW1hbHMJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOARJjYWxjVXNlckNvbGxhdGVyYWwBB2FkZHJlc3MEFHVzZXJDb2xsYXRlcmFsSW52b2tlCQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgIABQNuaWwFA25pbAMJAAACBRR1c2VyQ29sbGF0ZXJhbEludm9rZQUUdXNlckNvbGxhdGVyYWxJbnZva2UEE3VzZXJDb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFFHVzZXJDb2xsYXRlcmFsSW52b2tlAwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECJGlzc3VlIHdoaWxlIGRvaW5nIGluLWRhcHAgaW52b2NhdGlvbgMJAAACBRN1c2VyQ29sbGF0ZXJhbFZhbHVlBRN1c2VyQ29sbGF0ZXJhbFZhbHVlBRN1c2VyQ29sbGF0ZXJhbFZhbHVlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuFwFpAQZzdXBwbHkAAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAAACCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAAACQACAQIcMSBwYXltZW50IGhhcyB0byBiZSBhdHRhY2hlZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBAthc3NldEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECyR0MDY4OTA2OTU3CQENZ2V0QWN0dWFsUmF0ZQIFCmFzc2V0SWRTdHICBXNSYXRlBAVzUmF0ZQgFCyR0MDY4OTA2OTU3Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFCyR0MDY4OTA2OTU3Al8yBAZhbW91bnQJAG4EBQthc3NldEFtb3VudAUHU2NhbGUxNgUFc1JhdGUFBERPV04EB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAltYXhTdXBwbHkEByRtYXRjaDAJAKIIAQkArAICAhBzZXR1cF9tYXhTdXBwbHlfBQphc3NldElkU3RyAwkAAQIFByRtYXRjaDACBlN0cmluZwQBeAUHJG1hdGNoMAkBDXBhcnNlSW50VmFsdWUBBQF4AAAECmFzc2V0UHJpY2UJAQ1nZXRUb2tlblByaWNlAQUKYXNzZXRJZFN0cgQQbmV3VG90YWxTdXBwbGllZAkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAQEcmF0ZQgJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUCXzEECmFzc2V0U2NhbGUJAQ5jYWxjQXNzZXRTY2FsZQEFCmFzc2V0SWRTdHIEE25ld1RvdGFsU3VwcGxpZWRVc2QJAGsDCQBrAwUQbmV3VG90YWxTdXBwbGllZAUEcmF0ZQUHU2NhbGUxNggFCmFzc2V0UHJpY2UCXzEFCmFzc2V0U2NhbGUDCQAAAgkAswkCCQEMdHJ5R2V0U3RyaW5nAQIMc2V0dXBfdG9rZW5zBQphc3NldElkU3RyBQR1bml0CQACAQIpdGhpcyBhc3NldCBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBtYXJrZXQDAwkBAiE9AgUJbWF4U3VwcGx5AAAJAGYCBRNuZXdUb3RhbFN1cHBsaWVkVXNkBQltYXhTdXBwbHkHCQACAQIzbWF4IHRvdGFsIHN1cHBseSBmb3IgdGhpcyB0b2tlbiByZWFjaGVkIGluIHRoZSBwb29sCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBRBuZXdUb3RhbFN1cHBsaWVkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIFBmFtb3VudAUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAFpAQh3aXRoZHJhdwIKYXNzZXRJZFN0cgthc3NldEFtb3VudAQLJHQwODIxNzgyODQJAQ1nZXRBY3R1YWxSYXRlAgUKYXNzZXRJZFN0cgIFc1JhdGUEBXNSYXRlCAULJHQwODIxNzgyODQCXzEEEXJhdGVzUmVjYWxjUmVzdWx0CAULJHQwODIxNzgyODQCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgQSY29sbGF0ZXJhbFZhbHVlSW52CQD8BwQFBHRoaXMCEWdldFVzZXJDb2xsYXRlcmFsCQDMCAIHCQDMCAIFB2FkZHJlc3MJAMwIAgYJAMwIAgkArAICCQCsAgIFCmFzc2V0SWRTdHICCixzdXBwbGllZCwJAKQDAQkBAS0BBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIyeW91IGRvbnQgaGF2ZSBlbm91Z2ggY29sbGF0ZXJhbCBmb3IgdGhpcyBvcGVyYXRpb24DCQBmAgUGYW1vdW50CQBlAgUNYXNzZXRTdXBwbGllZAUNYXNzZXRCb3Jyb3dlZAkAAgECKnRoaXMgYW1vdW50IGlzIG5vdCBhdmFpbGFibGUgb24gdGhlIG1hcmtldAMJAGYCBQZhbW91bnQJAGUCBRF1c2VyQXNzZXRTdXBwbGllZAURdXNlckFzc2V0Qm9ycm93ZWQJAAIBAip0aGlzIGFtb3VudCBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FCmFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQphc3NldElkU3RyBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQZib3Jyb3cCCmFzc2V0SWRTdHILYXNzZXRBbW91bnQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAskdDA5ODU2OTkyMwkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQskdDA5ODU2OTkyMwJfMQQRcmF0ZXNSZWNhbGNSZXN1bHQIBQskdDA5ODU2OTkyMwJfMgQGYW1vdW50CQBuBAULYXNzZXRBbW91bnQFB1NjYWxlMTYFBWJSYXRlBQdDRUlMSU5HBBJjb2xsYXRlcmFsVmFsdWVJbnYJAPwHBAUEdGhpcwIRZ2V0VXNlckNvbGxhdGVyYWwJAMwIAgcJAMwIAgUHYWRkcmVzcwkAzAgCBgkAzAgCCQCsAgIJAKwCAgUKYXNzZXRJZFN0cgIKLGJvcnJvd2VkLAkApAMBBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFEmNvbGxhdGVyYWxWYWx1ZUludgUSY29sbGF0ZXJhbFZhbHVlSW52BA9jb2xsYXRlcmFsVmFsdWUEByRtYXRjaDAFEmNvbGxhdGVyYWxWYWx1ZUludgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgJAAIBAh9jYW4ndCBnZXQgdXNlciBjb2xsYXRlcmFsIHZhbHVlAwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkAwkAZgIAAAUPY29sbGF0ZXJhbFZhbHVlCQACAQIheW91IGhhdmUgdG8gc3VwcGx5IG1vcmUgdG8gYm9ycm93BA1hc3NldFN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBA1hc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyBBF1c2VyQXNzZXRCb3Jyb3dlZAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgMJAGYCBQZhbW91bnQJAGUCBQ1hc3NldFN1cHBsaWVkBQ1hc3NldEJvcnJvd2VkCQACAQIcdGhpcyBhbW91bnQgaXMgbm90IGF2YWlsYWJsZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgUHYWRkcmVzcwIKX2JvcnJvd2VkXwUKYXNzZXRJZFN0cgkAZAIFEXVzZXJBc3NldEJvcnJvd2VkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBkAgUNYXNzZXRCb3Jyb3dlZAUGYW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgULYXNzZXRBbW91bnQJAQ1nZXRBc3NldEJ5dGVzAQUKYXNzZXRJZFN0cgUDbmlsBRFyYXRlc1JlY2FsY1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQVyZXBheQADCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQDAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkAAAIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AAAJAAIBAhwxIHBheW1lbnQgaGFzIHRvIGJlIGF0dGFjaGVkBAphc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2Fzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTE0MjgxMTQ5NQkBDWdldEFjdHVhbFJhdGUCBQphc3NldElkU3RyAgViUmF0ZQQFYlJhdGUIBQ0kdDAxMTQyODExNDk1Al8xBBFyYXRlc1JlY2FsY1Jlc3VsdAgFDSR0MDExNDI4MTE0OTUCXzIEBmFtb3VudAkAbgQFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQUHQ0VJTElORwQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEDWFzc2V0U3VwcGxpZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIEDWFzc2V0Qm9ycm93ZWQJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIEEXVzZXJBc3NldEJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfBQphc3NldElkU3RyBAphbW91bnRMZWZ0CQBlAgURdXNlckFzc2V0Qm9ycm93ZWQFBmFtb3VudAQLcmVwYXlBbW91bnQDCQBnAgUKYW1vdW50TGVmdAAABQZhbW91bnQFEXVzZXJBc3NldEJvcnJvd2VkAwkAAAIJALMJAgkBDHRyeUdldFN0cmluZwECDHNldHVwX3Rva2VucwUKYXNzZXRJZFN0cgUEdW5pdAkAAgECKXRoaXMgYXNzZXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbWFya2V0CQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FCmFzc2V0SWRTdHIJAGUCBRF1c2VyQXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCQBlAgUNYXNzZXRCb3Jyb3dlZAULcmVwYXlBbW91bnQFA25pbAURcmF0ZXNSZWNhbGNSZXN1bHQDCQBnAgUKYW1vdW50TGVmdAAABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQEBLQEFCmFtb3VudExlZnQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsAWkBDXN0YWtlVG9rZW5BbGwBCmFzc2V0SWRTdHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAixvbmx5IGZvciBpbnRlcm5hbCBzbWFydCBjb250cmFjdCBpbnZvY2F0aW9ucwQGYW1vdW50CQEKZ2V0QmFsYW5jZQEFCmFzc2V0SWRTdHIEA2ludgkA/AcEBQR0aGlzAgpzdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEFBmFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQBkAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFX9xU1EcXtcoVTVBDw3RtN4mo807RodylaAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASB1FhA4gHYNVWV+SfOusdvmGZxqEGgfyVVh+kpGWncwHAUGYW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEJAGQCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFCmFzc2V0SWRTdHICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIBIJLR9EriEQEr9H7q3iGOPcX7yfJ9zoey7VIZ8DpOJFj1BQZhbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAZAIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAFpAQx1bnN0YWtlVG9rZW4CCmFzc2V0SWRTdHIGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIsb25seSBmb3IgaW50ZXJuYWwgc21hcnQgY29udHJhY3QgaW52b2NhdGlvbnMDCQAAAgUKYXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAEDGFtb3VudFN0YWtlZAkBDXRyeUdldEludGVnZXIBAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBANpbnYJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIHdW5zdGFrZQkAzAgCBQZhbW91bnQFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BARiYWwwCQEKZ2V0QmFsYW5jZQECLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAwkAAAIFBGJhbDAFBGJhbDAEBGludjIJAPwHBAkBB0FkZHJlc3MBARoBV+QOpzZPkgvXl8+kHT81G89DauuqPPNxnQIMY2xhaW1SZXdhcmRzBQNuaWwFA25pbAMJAAACBQRpbnYyBQRpbnYyBARpbnYzCQD8BwQFBHRoaXMCC2FkZEludGVyZXN0CQDMCAICLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQDMCAIJAGUCCQEKZ2V0QmFsYW5jZQECLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwBQRiYWwwBQNuaWwFA25pbAMJAAACBQRpbnYzBQRpbnYzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAj1hdXRvc3Rha2VfYW1vdW50X0RHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwCQBlAgUMYW1vdW50U3Rha2VkBQZhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQphc3NldElkU3RyAiw4dDREUFdUd1B6cGF0SEE5QWtUeFdBQjQ3VEhuWXpCc0Rub1k3ZlFxYkc5MQQMYW1vdW50U3Rha2VkCQENdHJ5R2V0SW50ZWdlcgECPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEEA2ludgkA/AcECQEHQWRkcmVzcwEBGgFX9xU1EcXtcoVTVBDw3RtN4mo807RodylaAgd1blN0YWtlCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYJAMwIAgkBDEludGVnZXJFbnRyeQICPWF1dG9zdGFrZV9hbW91bnRfOHQ0RFBXVHdQenBhdEhBOUFrVHhXQUI0N1RIbll6QnNEbm9ZN2ZRcWJHOTEJAGUCBQxhbW91bnRTdGFrZWQFBmFtb3VudAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFCmFzc2V0SWRTdHICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMBAxhbW91bnRTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAQDaW52CQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CB3Vuc3Rha2UJAMwIAgUGYW1vdW50BQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQEYmFsMAkBCmdldEJhbGFuY2UBAixBdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAMJAAACBQRiYWwwBQRiYWwwBARpbnYyCQD8BwQJAQdBZGRyZXNzAQEaAVf7derrE/0ZwMsI3I9gs34DuhGOrY+30OsCF2duc2J0UmV3YXJkc1NZU1JFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQAAAgUEaW52MgUEaW52MgQMdG9wdXBSZXdhcmRzBAckbWF0Y2gwBQRpbnYyAwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBeAUHJG1hdGNoMAQIc2Vjb25kRWwJAJEDAgUBeAABBAckbWF0Y2gxBQhzZWNvbmRFbAMJAAECBQckbWF0Y2gxAgZTdHJpbmcECHNlY29uZEVsBQckbWF0Y2gxBAl1c2RuVmFsdWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgkAtQkCBQhzZWNvbmRFbAIBXwABAgE6AAEECndhdmVzVmFsdWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgkAtQkCBQhzZWNvbmRFbAIBXwAAAgE6AAEDAwkBAiE9AgUJdXNkblZhbHVlAAAGCQECIT0CBQp3YXZlc1ZhbHVlAAAECHVzZG5CYWwwCQEKZ2V0QmFsYW5jZQECLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAwkAAAIFCHVzZG5CYWwwBQh1c2RuQmFsMAQJd2F2ZXNCYWwwCQEKZ2V0QmFsYW5jZQECBVdBVkVTAwkAAAIFCXdhdmVzQmFsMAUJd2F2ZXNCYWwwBARpbnYzCQD8BwQJAQdBZGRyZXNzAQEaAVdraDjhA9SajJ8SG8YsvCMHOQvN7RLXCl8CDGNsYWltUmV3YXJkcwUDbmlsBQNuaWwDCQAAAgUEaW52MwUEaW52MwQJd2F2ZXNCYWwxCQEKZ2V0QmFsYW5jZQECBVdBVkVTAwkAAAIFCXdhdmVzQmFsMQUJd2F2ZXNCYWwxBARpbnY0CQD8BwQJAQdBZGRyZXNzAQEaAVfOFBSdFlgD5ENMevWl7LKfrb/Ns4P5KaICBHN3YXAJAMwIAgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQJAGUCBQl3YXZlc0JhbDEFCXdhdmVzQmFsMAUDbmlsAwkAAAIFBGludjQFBGludjQECHVzZG5CYWwxCQEKZ2V0QmFsYW5jZQECLERHMnhGa1BkRHdLVW9Ca3pHQWhRdExwU0d6ZlhMaUNZUEV6ZUtIMkFkMjRwAwkAAAIFCHVzZG5CYWwxBQh1c2RuQmFsMQQEaW52NQkA/AcECQEHQWRkcmVzcwEBGgFXQOqhXGWBKD10hFtXYJ7743krt9yKtJB3AgRzd2FwCQDMCAICLEF0OEQ2TkZGcGhlQ2J2S1ZualZvZUxMODRFbzhOWm42b3ZNYW54ZkxhRldMCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCASC2JinDBPXOU5GkDkt1JC9kjFGx+t+vVCm9SNIdKrKq0QkAZQIFCHVzZG5CYWwxBQh1c2RuQmFsMAUDbmlsAwkAAAIFBGludjUFBGludjUEBGludjYJAPwHBAUEdGhpcwILYWRkSW50ZXJlc3QJAMwIAgIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wJAMwIAgkAZQIJAQpnZXRCYWxhbmNlAQIsQXQ4RDZORkZwaGVDYnZLVm5qVm9lTEw4NEVvOE5abjZvdk1hbnhmTGFGV0wFBGJhbDAFA25pbAUDbmlsAwkAAAIFBGludjYFBGludjYAAgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgABAAEAAAMJAAACBQx0b3B1cFJld2FyZHMFDHRvcHVwUmV3YXJkcwkAzAgCCQEMSW50ZWdlckVudHJ5AgI9YXV0b3N0YWtlX2Ftb3VudF9BdDhENk5GRnBoZUNidktWbmpWb2VMTDg0RW84TlpuNm92TWFueGZMYUZXTAkAZQIFDGFtb3VudFN0YWtlZAUGYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAFpAQthZGRJbnRlcmVzdAIKYXNzZXRJZFN0cgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhhvbmx5IGZvciBzZWxmIGludm9jYXRpb24EBmVhcm5lZAkBDXRyeUdldEludGVnZXIBCQCsAgICFWF1dG9zdGFrZV9sYXN0RWFybmVkXwUKYXNzZXRJZFN0cgQKbGFzdEhlaWdodAkBDXRyeUdldEludGVnZXIBCQCsAgICFGF1dG9zdGFrZV9sYXN0QmxvY2tfBQphc3NldElkU3RyBAtjbGVhbkFtb3VudAkAawMFBmFtb3VudABQAGQEDHN0YXRlQ2hhbmdlcwMDCQAAAgUKbGFzdEhlaWdodAUGaGVpZ2h0BgkAAAIFBmFtb3VudAAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIYYXV0b3N0YWtlX3ByZUxhc3RFYXJuZWRfBQphc3NldElkU3RyBQZlYXJuZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIXYXV0b3N0YWtlX3ByZUxhc3RCbG9ja18FCmFzc2V0SWRTdHIFCmxhc3RIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyCQBkAgUGZWFybmVkBQtjbGVhbkFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhRhdXRvc3Rha2VfbGFzdEJsb2NrXwUKYXNzZXRJZFN0cgUGaGVpZ2h0BQNuaWwJAM4IAgUMc3RhdGVDaGFuZ2VzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCmFzc2V0SWRTdHICBl9zUmF0ZQkAZAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGsDBQdTY2FsZTE2BQtjbGVhbkFtb3VudAkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwUKYXNzZXRJZFN0cgUDbmlsAWkBE2FkZEludGVyZXN0RVhURVJOQUwABAZhbW91bnQJAGsDCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudABQAGQEB2Fzc2V0SWQICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAQGZWFybmVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyBApsYXN0SGVpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIEDHN0YXRlQ2hhbmdlcwMDCQAAAgUKbGFzdEhlaWdodAUGaGVpZ2h0BgkAAAIFBmFtb3VudAAABQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIYYXV0b3N0YWtlX3ByZUxhc3RFYXJuZWRfBQphc3NldElkU3RyBQZlYXJuZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIXYXV0b3N0YWtlX3ByZUxhc3RCbG9ja18FCmFzc2V0SWRTdHIFCmxhc3RIZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIVYXV0b3N0YWtlX2xhc3RFYXJuZWRfBQphc3NldElkU3RyCQBkAgUGZWFybmVkBQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIUYXV0b3N0YWtlX2xhc3RCbG9ja18FCmFzc2V0SWRTdHIFBmhlaWdodAUDbmlsCQDOCAIFDHN0YXRlQ2hhbmdlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphc3NldElkU3RyAgZfc1JhdGUJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYXNzZXRJZFN0cgIGX3NSYXRlCQBrAwUHU2NhbGUxNgUGYW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQphc3NldElkU3RyBQNuaWwBaQEHcHJlSW5pdAQGdG9rZW5zBGx0dnMDbHRzCXBlbmFsdGllcwoBAWYCBWFjY3VtBXRva2VuCQDOCAIFBWFjY3VtCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBXRva2VuAgZfYlJhdGUFB1NjYWxlMTYJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUFdG9rZW4CBl9zUmF0ZQUHU2NhbGUxNgUDbmlsAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIKYWRtaW4gb25seQQFcmF0ZXMKAAIkbAkAtQkCBQZ0b2tlbnMCASwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBAWYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCAgxzZXR1cF90b2tlbnMFBnRva2VucwkAzAgCCQELU3RyaW5nRW50cnkCAgpzZXR1cF9sdHZzBQRsdHZzCQDMCAIJAQtTdHJpbmdFbnRyeQICCXNldHVwX2x0cwUDbHRzCQDMCAIJAQtTdHJpbmdFbnRyeQICD3NldHVwX3BlbmFsdGllcwUJcGVuYWx0aWVzCQDMCAIJAQxCb29sZWFuRW50cnkCAgxzZXR1cF9hY3RpdmUGBQNuaWwFBXJhdGVzAWkBD3VwZGF0ZVBhcmFtZXRlcgIDa2V5A3ZhbAMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBVxR5WIXA+hpn5xQ0jQz3xPBtRe32HPk9QQcJAAIBAgphZG1pbiBvbmx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkJAQ1wYXJzZUludFZhbHVlAQUDdmFsBQNuaWwBaQEMdXBkYXRlU3RyaW5nAgNrZXkDdmFsAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXFHlYhcD6GmfnFDSNDPfE8G1F7fYc+T1BBwkAAgECCmFkbWluIG9ubHkJAMwIAgkBC1N0cmluZ0VudHJ5AgUDa2V5BQN2YWwFA25pbAFpARJjbGFpbVRvUmVzZXJ2ZUZ1bmQBBWRlYnVnBAZhc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAVyYXRlcwgJAQ1nZXRBY3R1YWxSYXRlAgkAkQMCBQZhc3NldHMAAAIFc1JhdGUCXzIEAmxpCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAQFmAgVhY2N1bQFuAwkAZwIFAW4JAJADAQUGYXNzZXRzBQVhY2N1bQQKYXNzZXRJZFN0cgkAkQMCBQZhc3NldHMFAW4ED2F1dG9zdGFrZUFtb3VudAkBDHRyeUdldFN0cmluZwEJAKwCAgIRYXV0b3N0YWtlX2Ftb3VudF8FCmFzc2V0SWRTdHIEBmFtb3VudAkAZQIJAGQCCQBkAgkAZAIJAQpnZXRCYWxhbmNlAQUKYXNzZXRJZFN0cgkBDXRyeUdldEludGVnZXIBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyAwkBAiE9AgUPYXV0b3N0YWtlQW1vdW50AgAJAQ1wYXJzZUludFZhbHVlAQUPYXV0b3N0YWtlQW1vdW50AAAJAGsDCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQphc3NldElkU3RyCAkAkQMCBQVyYXRlcwkAZAIJAGgCBQFuAAMAAQV2YWx1ZQUHU2NhbGUxNgkAawMJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9zdXBwbGllZF8FCmFzc2V0SWRTdHIICQCRAwIFBXJhdGVzCQBoAgUBbgADBXZhbHVlBQdTY2FsZTE2BANpbnYDCQBmAgkBDXRyeUdldEludGVnZXIBCQCsAgICEWF1dG9zdGFrZV9hbW91bnRfBQphc3NldElkU3RyAAAJAPwHBAUEdGhpcwIMdW5zdGFrZVRva2VuCQDMCAIFCmFzc2V0SWRTdHIJAMwIAgkAlgMBCQDMCAIFBmFtb3VudAkAzAgCAAAFA25pbAUDbmlsBQNuaWwAAAMJAAACBQNpbnYFA2ludgkAzggCBQVhY2N1bQkAzAgCBQZhbW91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b3V0ZVN0cgMDCQECIT0CCAUBaQZjYWxsZXIJAQdBZGRyZXNzAQEaAVd3qs7ReFboqZ5eq5Xvv+nhcVh1XjKacYEJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV6vdqiLzmLkfRdgs1Kfq+RJir4k2alA7cgcJAAIBAiV0ZW1wb3JhcmlseSBsaXN0ZWQgZm9yIHdoaXRlbGlzdCBvbmx5AwkBASEBCQENdHJ5R2V0Qm9vbGVhbgECDHNldHVwX2FjdGl2ZQkAAgECEW1hcmtldCBpcyBzdG9wcGVkBA51c2VyQ29sbGF0ZXJhbAkBEmNhbGNVc2VyQ29sbGF0ZXJhbAEFB2FkZHJlc3MDCQAAAgUOdXNlckNvbGxhdGVyYWwFDnVzZXJDb2xsYXRlcmFsBA0kdDAyNDc4MzI0ODQ1CQENZ2V0QWN0dWFsUmF0ZQIFC3NBc3NldElkU3RyAgVzUmF0ZQQFc1JhdGUIBQ0kdDAyNDc4MzI0ODQ1Al8xBAtyYXRlc1Jlc3VsdAgFDSR0MDI0NzgzMjQ4NDUCXzIEDSR0MDI0ODUwMjQ5MTkJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDI0ODUwMjQ5MTkCXzEEEnJhdGVzUmVjYWxjUmVzdWx0MggFDSR0MDI0ODUwMjQ5MTkCXzIEDHNBc3NldEFtb3VudAkAawMFC2Fzc2V0QW1vdW50BQdTY2FsZTE2BQVzUmF0ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkBAiE9AgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUOdXNlckNvbGxhdGVyYWwAAAkAAgECGHVzZXIgY2FuJ3QgYmUgbGlxdWlkYXRlZAMJAGYCBQxzQXNzZXRBbW91bnQFEGN1cnJlbnRTUG9zaXRpb24JAAIBAjJwb3NpdGlvbiB0byBsaXF1aWRhdGUgaXMgYmlnZ2VyIHRoYW4gdXNlcidzIHN1cHBseQQRYWdncmVnYXRvckFkZHJlc3MJAQdBZGRyZXNzAQEaAVedDKrGE1GpbsuA92N9wWR44u9yTagMutMEDmJhbGFuY2UwQmVmb3JlCQEKZ2V0QmFsYW5jZQEFC3NBc3NldElkU3RyAwkAAAIFDmJhbGFuY2UwQmVmb3JlBQ5iYWxhbmNlMEJlZm9yZQQOYmFsYW5jZTFCZWZvcmUJAQpnZXRCYWxhbmNlAQULYkFzc2V0SWRTdHIDCQAAAgUOYmFsYW5jZTFCZWZvcmUFDmJhbGFuY2UxQmVmb3JlBA5leGNoYW5nZUludm9rZQkA/AcEBRFhZ2dyZWdhdG9yQWRkcmVzcwIEc3dhcAkAzAgCBQhyb3V0ZVN0cgkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDWdldEFzc2V0Qnl0ZXMBBQtzQXNzZXRJZFN0cgULYXNzZXRBbW91bnQFA25pbAMJAAACBQ5leGNoYW5nZUludm9rZQUOZXhjaGFuZ2VJbnZva2UECmFzc2V0MFNvbGQJAGUCBQ5iYWxhbmNlMEJlZm9yZQkBCmdldEJhbGFuY2UBBQtzQXNzZXRJZFN0cgMJAAACBQphc3NldDBTb2xkBQphc3NldDBTb2xkBAxhc3NldDFCb3VnaHQJAGUCCQEKZ2V0QmFsYW5jZQEFC2JBc3NldElkU3RyBQ5iYWxhbmNlMUJlZm9yZQMJAAACBQxhc3NldDFCb3VnaHQFDGFzc2V0MUJvdWdodAQLYXNzZXQwUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC3NBc3NldElkU3RyAl8xBAthc3NldDBTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULc0Fzc2V0SWRTdHIECWFzc2V0MFVzZAkAawMFCmFzc2V0MFNvbGQFC2Fzc2V0MFByaWNlBQthc3NldDBTY2FsZQQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECWFzc2V0MVVzZAkAawMFDGFzc2V0MUJvdWdodAULYXNzZXQxUHJpY2UFC2Fzc2V0MVNjYWxlBAdwZW5hbHR5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc2V0dXBfcGVuYWx0aWVzAgEsCQEFdmFsdWUBCQDPCAIJAQ9nZXRNYXJrZXRBc3NldHMABQtiQXNzZXRJZFN0cgQRbGlxdWlkYXRpb25Qcm9maXQJAGUCBQlhc3NldDFVc2QJAGsDBQlhc3NldDBVc2QJAGUCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0Q2hhbmdlCQBrAwUKYXNzZXQwU29sZAUHU2NhbGUxNgUFc1JhdGUEDGJBc3NldENoYW5nZQkAawMFDGFzc2V0MUJvdWdodAUHU2NhbGUxNgUFYlJhdGUDCQBmAgUKYXNzZXQwU29sZAULYXNzZXRBbW91bnQJAAIBAiNtb3JlIGFzc2V0cyBleGNoYW5nZWQgdGhhbiBleHBlY3RlZAMJAGYCAAAFEWxpcXVpZGF0aW9uUHJvZml0CQACAQIvcHJpY2UgaW1wYWN0IGlzIGJpZ2dlciB0aGFuIGxpcXVpZGF0aW9uIHBlbmFsdHkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgkAZQIFEGN1cnJlbnRTUG9zaXRpb24FDHNBc3NldENoYW5nZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgUQY3VycmVudEJQb3NpdGlvbgUMYkFzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfc3VwcGxpZWRfBQtzQXNzZXRJZFN0cgUMc0Fzc2V0Q2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICD3RvdGFsX2JvcnJvd2VkXwULYkFzc2V0SWRTdHIJAGUCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgUMYkFzc2V0Q2hhbmdlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQELbGlxdWlkYXRlVjIDBWRlYnVnB2FkZHJlc3MLc0Fzc2V0SWRTdHIDAwMJAQIhPQIIBQFpBmNhbGxlcgkBB0FkZHJlc3MBARoBV3eqztF4Vuipnl6rle+/6eFxWHVeMppxgQkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFX1+EjUY58q4ha1dcol3XYiHXTj64jBabhBwkBAiE9AggFAWkGY2FsbGVyCQEHQWRkcmVzcwEBGgFXq92qIvOYuR9F2CzUp+r5EmKviTZqUDtyBwkAAgECKHRlbXBvcmFyaWx5IGF2YWlsYWJsZSBmb3Igd2hpdGVsaXN0IG9ubHkDCQEBIQEJAQ10cnlHZXRCb29sZWFuAQIMc2V0dXBfYWN0aXZlCQACAQIRbWFya2V0IGlzIHN0b3BwZWQECGJBc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC2JBc3NldElkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQhiQXNzZXRJZAQMYkFzc2V0QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQOdXNlckNvbGxhdGVyYWwJARJjYWxjVXNlckNvbGxhdGVyYWwBBQdhZGRyZXNzAwkAAAIFDnVzZXJDb2xsYXRlcmFsBQ51c2VyQ29sbGF0ZXJhbAMJAGYCBQ51c2VyQ29sbGF0ZXJhbAAACQACAQIYdXNlciBjYW4ndCBiZSBsaXF1aWRhdGVkBAxtYXJrZXRBc3NldHMJAQ9nZXRNYXJrZXRBc3NldHMABAlhc3NldDFOdW0JAQV2YWx1ZQEJAM8IAgUMbWFya2V0QXNzZXRzBQtiQXNzZXRJZFN0cgQJYXNzZXQwTnVtCQEFdmFsdWUBCQDPCAIFDG1hcmtldEFzc2V0cwULc0Fzc2V0SWRTdHIEDSR0MDI4MjUxMjgzMTMJAQ1nZXRBY3R1YWxSYXRlAgULYkFzc2V0SWRTdHICBWJSYXRlBAViUmF0ZQgFDSR0MDI4MjUxMjgzMTMCXzEEC3JhdGVzUmVzdWx0CAUNJHQwMjgyNTEyODMxMwJfMgQLYXNzZXQxUHJpY2UICQENZ2V0VG9rZW5QcmljZQEFC2JBc3NldElkU3RyAl8yBAthc3NldDFTY2FsZQkBDmNhbGNBc3NldFNjYWxlAQULYkFzc2V0SWRTdHIECmJBbW91bnRVc2QJAGsDBQxiQXNzZXRBbW91bnQFC2Fzc2V0MVByaWNlBQthc3NldDFTY2FsZQQHcGVuYWx0eQkBDXBhcnNlSW50VmFsdWUBCQEFdmFsdWUBCQCRAwIJALUJAgkBDHRyeUdldFN0cmluZwECD3NldHVwX3BlbmFsdGllcwIBLAUJYXNzZXQxTnVtBAthc3NldDBQcmljZQgJAQ1nZXRUb2tlblByaWNlAQULc0Fzc2V0SWRTdHICXzEEC2Fzc2V0MFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBBQtzQXNzZXRJZFN0cgQKc0Ftb3VudFVzZAkAawMFCmJBbW91bnRVc2QJAGQCBQZTY2FsZTgFB3BlbmFsdHkFBlNjYWxlOAQMc0Fzc2V0QW1vdW50CQBrAwUKc0Ftb3VudFVzZAULYXNzZXQwU2NhbGUFC2Fzc2V0MFByaWNlBAdiQW1vdW50CQBrAwUMYkFzc2V0QW1vdW50BQdTY2FsZTE2BQViUmF0ZQQHc0Ftb3VudAkAawMFDHNBc3NldEFtb3VudAUHU2NhbGUxNggJAJEDAgULcmF0ZXNSZXN1bHQJAGQCCQBoAgUJYXNzZXQwTnVtAAMAAQV2YWx1ZQQQY3VycmVudFNQb3NpdGlvbgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgUHYWRkcmVzcwIKX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIEE2N1cnJlbnRCUG9zaXRpb25WYWwJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBBBjdXJyZW50QlBvc2l0aW9uAwkBAiE9AgUTY3VycmVudEJQb3NpdGlvblZhbAAABRNjdXJyZW50QlBvc2l0aW9uVmFsCQACAQIgdXNlciBoYXMgbm8gYm9ycm93IGluIHRoaXMgdG9rZW4DCQBmAgUHc0Ftb3VudAUQY3VycmVudFNQb3NpdGlvbgkAAgECMnBvc2l0aW9uIHRvIGxpcXVpZGF0ZSBpcyBiaWdnZXIgdGhhbiB1c2VyJ3Mgc3VwcGx5AwUFZGVidWcJAAIBAhVsaXF1aWRhdGlvbiB3aWxsIHBhc3MJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDHNBc3NldEFtb3VudAkBDWdldEFzc2V0Qnl0ZXMBBQtzQXNzZXRJZFN0cgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgUQY3VycmVudFNQb3NpdGlvbgUHc0Ftb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIFB2FkZHJlc3MCCl9ib3Jyb3dlZF8FC2JBc3NldElkU3RyCQBlAgUQY3VycmVudEJQb3NpdGlvbgUHYkFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAg90b3RhbF9zdXBwbGllZF8FC3NBc3NldElkU3RyCQBlAgkBDXRyeUdldEludGVnZXIBCQCsAgICD3RvdGFsX3N1cHBsaWVkXwULc0Fzc2V0SWRTdHIFB3NBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIPdG90YWxfYm9ycm93ZWRfBQtiQXNzZXRJZFN0cgkAZQIJAQ10cnlHZXRJbnRlZ2VyAQkArAICAg90b3RhbF9ib3Jyb3dlZF8FC2JBc3NldElkU3RyBQdiQW1vdW50BQNuaWwFC3JhdGVzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWdldFVzZXJDb2xsYXRlcmFsBAVkZWJ1ZwdhZGRyZXNzDW1pbnVzQm9ycm93ZWQLYWZ0ZXJDaGFuZ2UEBmFzc2V0cwkBD2dldE1hcmtldEFzc2V0cwAEBGx0dnMJALUJAgkBDHRyeUdldFN0cmluZwECCnNldHVwX2x0dnMCASwEA2x0cwkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIJc2V0dXBfbHRzAgEsBAVyYXRlcwgJAQ1nZXRBY3R1YWxSYXRlAgkAkQMCBQZhc3NldHMAAAIFc1JhdGUCXzIEDWNoYW5nZUhhbmRsZXIJALUJAgULYWZ0ZXJDaGFuZ2UCASwKAQFmAgVhY2N1bQRuZXh0AwkAZwIFBG5leHQJAJADAQUGYXNzZXRzBQVhY2N1bQQMdXNlclN1cHBsaWVkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfc3VwcGxpZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAQMdXNlckJvcnJvd2VkCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICBQdhZGRyZXNzAgpfYm9ycm93ZWRfCQCRAwIFBmFzc2V0cwUEbmV4dAMDCQECIT0CBQx1c2VyQm9ycm93ZWQAAAYJAQIhPQIFDHVzZXJTdXBwbGllZAAABAphc3NldFNjYWxlCQEOY2FsY0Fzc2V0U2NhbGUBCQCRAwIFBmFzc2V0cwUEbmV4dAQKYXNzZXRQcmljZQkBDWdldFRva2VuUHJpY2UBCQCRAwIFBmFzc2V0cwUEbmV4dAkAZQIJAGQCBQVhY2N1bQkAawMJAGsDCQBrAwkAZAIFDHVzZXJTdXBwbGllZAMDAwkBAiE9AgULYWZ0ZXJDaGFuZ2UCAAkAAAIJAJEDAgUNY2hhbmdlSGFuZGxlcgAACQCRAwIFBmFzc2V0cwUEbmV4dAcJAAACCQCRAwIFDWNoYW5nZUhhbmRsZXIAAQIIc3VwcGxpZWQHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUNY2hhbmdlSGFuZGxlcgACAAAICQCRAwIFBXJhdGVzCQBoAgUEbmV4dAADBXZhbHVlBQdTY2FsZTE2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbHR2cwUEbmV4dAUGU2NhbGU4CAUKYXNzZXRQcmljZQJfMQUKYXNzZXRTY2FsZQMF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", "height": 3422720, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: c5yZj63V3vGrd4oGgYpcnv6a98zUeyJWxZHaTiKgM5T Next: H3WC3YR74qgVtoCjxKHGw6wXgbkm6ir5S4yvC98Z5p1z Diff:
OldNewDifferences
324324 then (ay > au)
325325 else false)
326326 then throw("max total supply for this token reached in the pool")
327- else {
328- let az = invoke(this, "stakeToken", [A, ap], nil)
329- if ((az == az))
330- then ([IntegerEntry(((al + "_supplied_") + A), aw), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) + at))] ++ as)
331- else throw("Strict value is not equal to itself.")
332- }
327+ else ([IntegerEntry(((al + "_supplied_") + A), aw), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) + at))] ++ as)
333328 }
334329
335330
336331
337332 @Callable(ao)
338333 func withdraw (A,ap) = {
339- let aA = V(A, "sRate")
340- let ar = aA._1
341- let as = aA._2
334+ let az = V(A, "sRate")
335+ let ar = az._1
336+ let as = az._2
342337 let at = fraction(ap, c, ar, CEILING)
343338 let al = toString(ao.caller)
344- let aB = q(("total_supplied_" + A))
345- let aC = q(("total_borrowed_" + A))
346- let aD = q(((al + "_supplied_") + A))
347- let aE = q(((al + "_borrowed_") + A))
348- let aF = invoke(this, "getUserCollateral", [false, al, true, ((A + ",supplied,") + toString(-(at)))], nil)
349- if ((aF == aF))
339+ let aA = q(("total_supplied_" + A))
340+ let aB = q(("total_borrowed_" + A))
341+ let aC = q(((al + "_supplied_") + A))
342+ let aD = q(((al + "_borrowed_") + A))
343+ let aE = invoke(this, "getUserCollateral", [false, al, true, ((A + ",supplied,") + toString(-(at)))], nil)
344+ if ((aE == aE))
350345 then {
351- let aG = {
352- let s = aF
346+ let aF = {
347+ let s = aE
353348 if ($isInstanceOf(s, "Int"))
354349 then {
355350 let ag = s
359354 }
360355 if (!(u("setup_active")))
361356 then throw("market is stopped")
362- else if ((0 > aG))
357+ else if ((0 > aF))
363358 then throw("you dont have enough collateral for this operation")
364- else if ((at > (aB - aC)))
359+ else if ((at > (aA - aB)))
365360 then throw("this amount is not available on the market")
366- else if ((at > (aD - aE)))
361+ else if ((at > (aC - aD)))
367362 then throw("this amount is not available for this user")
368- else {
369- let az = invoke(this, "unstakeToken", [A, ap], nil)
370- if ((az == az))
371- then ([IntegerEntry(((al + "_supplied_") + A), (q(((al + "_supplied_") + A)) - at)), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) - at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
372- else throw("Strict value is not equal to itself.")
373- }
363+ else ([IntegerEntry(((al + "_supplied_") + A), (q(((al + "_supplied_") + A)) - at)), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) - at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
374364 }
375365 else throw("Strict value is not equal to itself.")
376366 }
380370 @Callable(ao)
381371 func borrow (A,ap) = {
382372 let al = toString(ao.caller)
383- let aH = V(A, "bRate")
384- let aI = aH._1
385- let as = aH._2
386- let at = fraction(ap, c, aI, CEILING)
387- let aF = invoke(this, "getUserCollateral", [false, al, true, ((A + ",borrowed,") + toString(at))], nil)
388- if ((aF == aF))
373+ let aG = V(A, "bRate")
374+ let aH = aG._1
375+ let as = aG._2
376+ let at = fraction(ap, c, aH, CEILING)
377+ let aE = invoke(this, "getUserCollateral", [false, al, true, ((A + ",borrowed,") + toString(at))], nil)
378+ if ((aE == aE))
389379 then {
390- let aG = {
391- let s = aF
380+ let aF = {
381+ let s = aE
392382 if ($isInstanceOf(s, "Int"))
393383 then {
394384 let ag = s
398388 }
399389 if (!(u("setup_active")))
400390 then throw("market is stopped")
401- else if ((0 > aG))
391+ else if ((0 > aF))
402392 then throw("you have to supply more to borrow")
403393 else {
404- let aB = q(("total_supplied_" + A))
405- let aC = q(("total_borrowed_" + A))
406- let aE = q(((al + "_borrowed_") + A))
407- if ((at > (aB - aC)))
394+ let aA = q(("total_supplied_" + A))
395+ let aB = q(("total_borrowed_" + A))
396+ let aD = q(((al + "_borrowed_") + A))
397+ if ((at > (aA - aB)))
408398 then throw("this amount is not available")
409- else {
410- let az = invoke(this, "unstakeToken", [A, ap], nil)
411- if ((az == az))
412- then ([IntegerEntry(((al + "_borrowed_") + A), (aE + at)), IntegerEntry(("total_borrowed_" + A), (aC + at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
413- else throw("Strict value is not equal to itself.")
414- }
399+ else ([IntegerEntry(((al + "_borrowed_") + A), (aD + at)), IntegerEntry(("total_borrowed_" + A), (aB + at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
415400 }
416401 }
417402 else throw("Strict value is not equal to itself.")
429414 else {
430415 let A = x(ao.payments[0].assetId)
431416 let ap = ao.payments[0].amount
432- let aJ = V(A, "bRate")
433- let aI = aJ._1
434- let as = aJ._2
435- let at = fraction(ap, c, aI, CEILING)
417+ let aI = V(A, "bRate")
418+ let aH = aI._1
419+ let as = aI._2
420+ let at = fraction(ap, c, aH, CEILING)
436421 let al = toString(ao.caller)
437- let aB = q(("total_supplied_" + A))
438- let aC = q(("total_borrowed_" + A))
439- let aE = q(((al + "_borrowed_") + A))
440- let aK = (aE - at)
441- let aL = if ((aK >= 0))
422+ let aA = q(("total_supplied_" + A))
423+ let aB = q(("total_borrowed_" + A))
424+ let aD = q(((al + "_borrowed_") + A))
425+ let aJ = (aD - at)
426+ let aK = if ((aJ >= 0))
442427 then at
443- else aE
428+ else aD
444429 if ((indexOf(v("setup_tokens"), A) == unit))
445430 then throw("this asset is not supported by the market")
446- else {
447- let az = invoke(this, "stakeToken", [A, ap], nil)
448- if ((az == az))
449- then (([IntegerEntry(((al + "_borrowed_") + A), (aE - aL)), IntegerEntry(("total_borrowed_" + A), (aC - aL))] ++ as) ++ (if ((aK >= 0))
450- then nil
451- else [ScriptTransfer(ao.caller, -(aK), ao.payments[0].assetId)]))
452- else throw("Strict value is not equal to itself.")
453- }
431+ else (([IntegerEntry(((al + "_borrowed_") + A), (aD - aK)), IntegerEntry(("total_borrowed_" + A), (aB - aK))] ++ as) ++ (if ((aJ >= 0))
432+ then nil
433+ else [ScriptTransfer(ao.caller, -(aJ), ao.payments[0].assetId)]))
454434 }
455435
456436
460440 then throw("only for internal smart contract invocations")
461441 else {
462442 let at = B(A)
463- let az = invoke(this, "stakeToken", [A, at], nil)
464- if ((az == az))
443+ let aL = invoke(this, "stakeToken", [A, at], nil)
444+ if ((aL == aL))
465445 then nil
466446 else throw("Strict value is not equal to itself.")
467447 }
474454 else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
475455 then {
476456 let aM = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
477- let az = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', at)])
478- if ((az == az))
457+ let aL = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', at)])
458+ if ((aL == aL))
479459 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aM + at))]
480460 else throw("Strict value is not equal to itself.")
481461 }
482462 else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
483463 then {
484464 let aM = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
485- let az = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', at)])
486- if ((az == az))
465+ let aL = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', at)])
466+ if ((aL == aL))
487467 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aM + at))]
488468 else throw("Strict value is not equal to itself.")
489469 }
490470 else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
491471 then {
492472 let aM = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
493- let az = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', at)])
494- if ((az == az))
473+ let aL = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', at)])
474+ if ((aL == aL))
495475 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aM + at))]
496476 else throw("Strict value is not equal to itself.")
497477 }
505485 else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
506486 then {
507487 let aM = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
508- let az = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [at], nil)
509- if ((az == az))
488+ let aL = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [at], nil)
489+ if ((aL == aL))
510490 then {
511491 let aN = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
512492 if ((aN == aN))
528508 else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
529509 then {
530510 let aM = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
531- let az = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [at], nil)
532- if ((az == az))
511+ let aL = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [at], nil)
512+ if ((aL == aL))
533513 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aM - at))]
534514 else throw("Strict value is not equal to itself.")
535515 }
536516 else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
537517 then {
538518 let aM = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539- let az = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [at], nil)
540- if ((az == az))
519+ let aL = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [at], nil)
520+ if ((aL == aL))
541521 then {
542522 let aN = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
543523 if ((aN == aN))
713693 let at = ((((B(A) + q(("autostake_amount_" + A))) + (if ((bn != ""))
714694 then parseIntValue(bn)
715695 else 0)) + fraction(q(("total_borrowed_" + A)), aa[((bm * 3) + 1)].value, c)) - fraction(q(("total_supplied_" + A)), aa[(bm * 3)].value, c))
716- let az = if ((q(("autostake_amount_" + A)) > 0))
696+ let aL = if ((q(("autostake_amount_" + A)) > 0))
717697 then invoke(this, "unstakeToken", [A, max([at, 0])], nil)
718698 else 0
719- if ((az == az))
699+ if ((aL == aL))
720700 then (h ++ [at])
721701 else throw("Strict value is not equal to itself.")
722702 }
810790 let ar = bB._1
811791 let bC = bB._2
812792 let bD = V(by, "bRate")
813- let aI = bD._1
793+ let aH = bD._1
814794 let bE = bD._2
815795 let bF = fraction(ap, c, ar)
816796 let bG = q(((al + "_supplied_") + bx))
839819 let bO = (B(by) - bL)
840820 if ((bO == bO))
841821 then {
842- let bP = ac(bx)._2
822+ let bP = ac(bx)._1
843823 let bQ = ai(bx)
844824 let bR = fraction(bN, bP, bQ)
845- let bS = ac(by)._1
825+ let bS = ac(by)._2
846826 let bT = ai(by)
847827 let bU = fraction(bO, bS, bT)
848828 let bV = parseIntValue(split(v("setup_penalties"), ",")[value(indexOf(E(), by))])
849829 let bW = (bU - fraction(bR, (a - bV), a))
850830 let bX = fraction(bN, c, ar)
851- let bY = fraction(bO, c, aI)
831+ let bY = fraction(bO, c, aH)
852832 if ((bN > ap))
853833 then throw("more assets exchanged than expected")
854834 else if ((0 > bW))
893873 let cc = value(indexOf(cb, by))
894874 let cd = value(indexOf(cb, bx))
895875 let ce = V(by, "bRate")
896- let aI = ce._1
876+ let aH = ce._1
897877 let bC = ce._2
898878 let bS = ac(by)._2
899879 let bT = ai(by)
903883 let bQ = ai(bx)
904884 let cg = fraction(cf, (a + bV), a)
905885 let bF = fraction(cg, bQ, bP)
906- let ch = fraction(ca, c, aI)
886+ let ch = fraction(ca, c, aH)
907887 let ci = fraction(bF, c, bC[((cd * 3) + 1)].value)
908888 let bG = q(((al + "_supplied_") + bx))
909889 let bH = q(((al + "_borrowed_") + by))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = 10000000000
77
88 let c = (a * a)
99
1010 let d = 1440
1111
1212 func e (f) = {
1313 func g (h,i) = ((h + toString(i)) + ",")
1414
1515 let j = f
1616 let k = size(j)
1717 let l = ""
1818 func m (n,o) = if ((o >= k))
1919 then n
2020 else g(n, j[o])
2121
2222 func p (n,o) = if ((o >= k))
2323 then n
2424 else throw("List size exceeds 6")
2525
2626 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
2727 }
2828
2929
3030 func q (r) = {
3131 let s = getInteger(this, r)
3232 if ($isInstanceOf(s, "Int"))
3333 then {
3434 let t = s
3535 t
3636 }
3737 else 0
3838 }
3939
4040
4141 func u (r) = {
4242 let s = getBoolean(this, r)
4343 if ($isInstanceOf(s, "Boolean"))
4444 then {
4545 let t = s
4646 t
4747 }
4848 else false
4949 }
5050
5151
5252 func v (r) = {
5353 let s = getString(this, r)
5454 if ($isInstanceOf(s, "String"))
5555 then {
5656 let t = s
5757 t
5858 }
5959 else ""
6060 }
6161
6262
6363 func w (r) = {
6464 let s = getBinary(this, r)
6565 if ($isInstanceOf(s, "ByteVector"))
6666 then {
6767 let t = s
6868 t
6969 }
7070 else base58''
7171 }
7272
7373
7474 func x (y) = {
7575 let s = y
7676 if ($isInstanceOf(s, "ByteVector"))
7777 then {
7878 let t = s
7979 toBase58String(t)
8080 }
8181 else "WAVES"
8282 }
8383
8484
8585 func z (A) = if ((A == "WAVES"))
8686 then unit
8787 else fromBase58String(A)
8888
8989
9090 func B (A) = if ((A == "WAVES"))
9191 then wavesBalance(this).available
9292 else assetBalance(this, fromBase58String(A))
9393
9494
9595 let C = Address(base58'3P4kBiU4wr2yV1S5gMfu3MdkVvy7kxXHsKe')
9696
9797 let D = 20
9898
9999 func E () = split(v("setup_tokens"), ",")
100100
101101
102102 func F () = {
103103 let G = v("setup_maxsupply")
104104 if ((G == ""))
105105 then [-1, -1, -1, -1, -1, -1, -1]
106106 else split(G, ",")
107107 }
108108
109109
110110 func H (A) = {
111111 let I = fraction(q(("total_supplied_" + A)), q((A + "_sRate")), c)
112112 if ((I == 0))
113113 then 0
114114 else fraction(a, fraction(q(("total_borrowed_" + A)), q((A + "_bRate")), c), I)
115115 }
116116
117117
118118 func J (A) = {
119119 let s = A
120120 if (("34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ" == s))
121121 then $Tuple4(2000000, 25000000, 80000000, 100000000)
122122 else if (("6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ" == s))
123123 then $Tuple4(2000000, 25000000, 80000000, 100000000)
124124 else if (("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p" == s))
125125 then $Tuple4(2000000, 25000000, 80000000, 100000000)
126126 else if (("Ajso6nTTjptu2UHLx6hfSXVtHFtRBJCkKYd5SAyj7zf5" == s))
127127 then $Tuple4(2000000, 40000000, 80000000, 150000000)
128128 else if (("HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS" == s))
129129 then $Tuple4(0, 20000000, 80000000, 40000000)
130130 else if (("WAVES" == s))
131131 then $Tuple4(2000000, 30000000, 80000000, 50000000)
132132 else if (("Atqv59EYzjFGuitKVnMRk6H8FukjoV3ktPorbEys25on" == s))
133133 then $Tuple4(0, 20000000, 80000000, 40000000)
134134 else if (("DSbbhLsSTeDg5Lsiufk2Aneh3DjVqJuPr2M9uU1gwy5p" == s))
135135 then $Tuple4(0, 20000000, 80000000, 100000000)
136136 else if (("8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91" == s))
137137 then $Tuple4(0, 30000000, 80000000, 40000000)
138138 else if (("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL" == s))
139139 then $Tuple4(0, 25000000, 80000000, 40000000)
140140 else if (("8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS" == s))
141141 then $Tuple4(2000000, 30000000, 80000000, 50000000)
142142 else if (("474jTeYx2r2Va35794tCScAXWJG9hU2HcgxzMowaZUnu" == s))
143143 then $Tuple4(2000000, 30000000, 80000000, 50000000)
144144 else if (("5UYBPpq4WoU5n4MwpFkgJnW3Fq4B1u3ukpK33ik4QerR" == s))
145145 then $Tuple4(2000000, 30000000, 80000000, 50000000)
146146 else $Tuple4(0, 20000000, 80000000, 80000000)
147147 }
148148
149149
150150 func K (A) = {
151151 let L = H(A)
152152 let M = J(A)
153153 let N = (M._1 + (if ((M._3 >= L))
154154 then fraction(L, M._2, M._3)
155155 else (M._2 + fraction((L - M._3), (M._4 - M._2), (100000000 - M._3)))))
156156 max([fraction(N, a, (d * 365)), 1])
157157 }
158158
159159
160160 func O (A) = {
161161 let P = K(A)
162162 let L = H(A)
163163 let Q = q("lastRateHeight")
164164 let R = max([q((A + "_bRate")), c])
165165 let S = (R + ((height - Q) * P))
166166 let T = max([q((A + "_sRate")), c])
167167 let U = (T + ((((height - Q) * fraction(P, L, a)) * (100 - D)) / 100))
168168 [IntegerEntry((A + "_sRate"), U), IntegerEntry((A + "_bRate"), S), IntegerEntry("lastRateHeight", height)]
169169 }
170170
171171
172172 func V (A,W) = {
173173 func g (h,X) = {
174174 let Y = O(X)
175175 $Tuple2(if ((X != A))
176176 then h._1
177177 else if ((W == "sRate"))
178178 then Y[0].value
179179 else Y[1].value, (h._2 ++ Y))
180180 }
181181
182182 let j = E()
183183 let k = size(j)
184184 let l = $Tuple2(0, nil)
185185 func m (n,o) = if ((o >= k))
186186 then n
187187 else g(n, j[o])
188188
189189 func p (n,o) = if ((o >= k))
190190 then n
191191 else throw("List size exceeds 6")
192192
193193 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
194194 }
195195
196196
197197 func Z (A) = {
198198 let aa = O(A)
199199 let I = fraction(q(("total_supplied_" + A)), aa[0].value, c)
200200 fraction(a, fraction(q(("total_borrowed_" + A)), aa[1].value, c), I)
201201 }
202202
203203
204204 func ab () = {
205205 func g (h,X) = (h ++ O(X))
206206
207207 let j = E()
208208 let k = size(j)
209209 let l = nil
210210 func m (n,o) = if ((o >= k))
211211 then n
212212 else g(n, j[o])
213213
214214 func p (n,o) = if ((o >= k))
215215 then n
216216 else throw("List size exceeds 6")
217217
218218 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
219219 }
220220
221221
222222 func ac (A) = if ((A == "6XtHjpXbs9RRJP2Sr9GUyVqzACcby9TkThHXnjVC5CDJ"))
223223 then $Tuple2(1000000, 1000000)
224224 else {
225225 let ad = invoke(addressFromStringValue("3P5BTtdj32Sd1Dyh1Mdw33xQAAckSfMfnKf"), "getTWAP60", [A, false], nil)
226226 if ((ad == ad))
227227 then {
228228 let ae = invoke(addressFromStringValue("3P8pvmcBi9JeBrnPgWDTaPWrWmGzxiDkpTu"), "getTWAP60", [A, false], nil)
229229 if ((ae == ae))
230230 then {
231231 let af = {
232232 let s = ad
233233 if ($isInstanceOf(s, "(Int, Int)"))
234234 then {
235235 let ag = s
236236 ag
237237 }
238238 else throw("error of price oracle")
239239 }
240240 if ((af == af))
241241 then {
242242 let ah = {
243243 let s = ae
244244 if ($isInstanceOf(s, "(Int, Int)"))
245245 then {
246246 let ag = s
247247 ag
248248 }
249249 else throw("error of price oracle")
250250 }
251251 if ((ah == ah))
252252 then $Tuple2(min([af._1, ah._1]), max([af._2, ah._2]))
253253 else throw("Strict value is not equal to itself.")
254254 }
255255 else throw("Strict value is not equal to itself.")
256256 }
257257 else throw("Strict value is not equal to itself.")
258258 }
259259 else throw("Strict value is not equal to itself.")
260260 }
261261
262262
263263 func ai (A) = {
264264 let aj = if ((A == "WAVES"))
265265 then 8
266266 else value(assetInfo(fromBase58String(A))).decimals
267267 pow(10, 0, aj, 0, 0, DOWN)
268268 }
269269
270270
271271 func ak (al) = {
272272 let am = invoke(this, "getUserCollateral", [false, al, true, ""], nil)
273273 if ((am == am))
274274 then {
275275 let an = {
276276 let s = am
277277 if ($isInstanceOf(s, "Int"))
278278 then {
279279 let ag = s
280280 ag
281281 }
282282 else throw("issue while doing in-dapp invocation")
283283 }
284284 if ((an == an))
285285 then an
286286 else throw("Strict value is not equal to itself.")
287287 }
288288 else throw("Strict value is not equal to itself.")
289289 }
290290
291291
292292 @Callable(ao)
293293 func supply () = if (!(u("setup_active")))
294294 then throw("market is stopped")
295295 else if (if ((size(ao.payments) != 1))
296296 then true
297297 else (ao.payments[0].amount == 0))
298298 then throw("1 payment has to be attached")
299299 else {
300300 let A = x(ao.payments[0].assetId)
301301 let ap = ao.payments[0].amount
302302 let aq = V(A, "sRate")
303303 let ar = aq._1
304304 let as = aq._2
305305 let at = fraction(ap, c, ar, DOWN)
306306 let al = toString(ao.caller)
307307 let au = {
308308 let s = getString(("setup_maxSupply_" + A))
309309 if ($isInstanceOf(s, "String"))
310310 then {
311311 let ag = s
312312 parseIntValue(ag)
313313 }
314314 else 0
315315 }
316316 let av = ac(A)
317317 let aw = (q(((al + "_supplied_") + A)) + at)
318318 let N = V(A, "sRate")._1
319319 let ax = ai(A)
320320 let ay = fraction(fraction(aw, N, c), av._1, ax)
321321 if ((indexOf(v("setup_tokens"), A) == unit))
322322 then throw("this asset is not supported by the market")
323323 else if (if ((au != 0))
324324 then (ay > au)
325325 else false)
326326 then throw("max total supply for this token reached in the pool")
327- else {
328- let az = invoke(this, "stakeToken", [A, ap], nil)
329- if ((az == az))
330- then ([IntegerEntry(((al + "_supplied_") + A), aw), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) + at))] ++ as)
331- else throw("Strict value is not equal to itself.")
332- }
327+ else ([IntegerEntry(((al + "_supplied_") + A), aw), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) + at))] ++ as)
333328 }
334329
335330
336331
337332 @Callable(ao)
338333 func withdraw (A,ap) = {
339- let aA = V(A, "sRate")
340- let ar = aA._1
341- let as = aA._2
334+ let az = V(A, "sRate")
335+ let ar = az._1
336+ let as = az._2
342337 let at = fraction(ap, c, ar, CEILING)
343338 let al = toString(ao.caller)
344- let aB = q(("total_supplied_" + A))
345- let aC = q(("total_borrowed_" + A))
346- let aD = q(((al + "_supplied_") + A))
347- let aE = q(((al + "_borrowed_") + A))
348- let aF = invoke(this, "getUserCollateral", [false, al, true, ((A + ",supplied,") + toString(-(at)))], nil)
349- if ((aF == aF))
339+ let aA = q(("total_supplied_" + A))
340+ let aB = q(("total_borrowed_" + A))
341+ let aC = q(((al + "_supplied_") + A))
342+ let aD = q(((al + "_borrowed_") + A))
343+ let aE = invoke(this, "getUserCollateral", [false, al, true, ((A + ",supplied,") + toString(-(at)))], nil)
344+ if ((aE == aE))
350345 then {
351- let aG = {
352- let s = aF
346+ let aF = {
347+ let s = aE
353348 if ($isInstanceOf(s, "Int"))
354349 then {
355350 let ag = s
356351 ag
357352 }
358353 else throw("can't get user collateral value")
359354 }
360355 if (!(u("setup_active")))
361356 then throw("market is stopped")
362- else if ((0 > aG))
357+ else if ((0 > aF))
363358 then throw("you dont have enough collateral for this operation")
364- else if ((at > (aB - aC)))
359+ else if ((at > (aA - aB)))
365360 then throw("this amount is not available on the market")
366- else if ((at > (aD - aE)))
361+ else if ((at > (aC - aD)))
367362 then throw("this amount is not available for this user")
368- else {
369- let az = invoke(this, "unstakeToken", [A, ap], nil)
370- if ((az == az))
371- then ([IntegerEntry(((al + "_supplied_") + A), (q(((al + "_supplied_") + A)) - at)), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) - at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
372- else throw("Strict value is not equal to itself.")
373- }
363+ else ([IntegerEntry(((al + "_supplied_") + A), (q(((al + "_supplied_") + A)) - at)), IntegerEntry(("total_supplied_" + A), (q(("total_supplied_" + A)) - at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
374364 }
375365 else throw("Strict value is not equal to itself.")
376366 }
377367
378368
379369
380370 @Callable(ao)
381371 func borrow (A,ap) = {
382372 let al = toString(ao.caller)
383- let aH = V(A, "bRate")
384- let aI = aH._1
385- let as = aH._2
386- let at = fraction(ap, c, aI, CEILING)
387- let aF = invoke(this, "getUserCollateral", [false, al, true, ((A + ",borrowed,") + toString(at))], nil)
388- if ((aF == aF))
373+ let aG = V(A, "bRate")
374+ let aH = aG._1
375+ let as = aG._2
376+ let at = fraction(ap, c, aH, CEILING)
377+ let aE = invoke(this, "getUserCollateral", [false, al, true, ((A + ",borrowed,") + toString(at))], nil)
378+ if ((aE == aE))
389379 then {
390- let aG = {
391- let s = aF
380+ let aF = {
381+ let s = aE
392382 if ($isInstanceOf(s, "Int"))
393383 then {
394384 let ag = s
395385 ag
396386 }
397387 else throw("can't get user collateral value")
398388 }
399389 if (!(u("setup_active")))
400390 then throw("market is stopped")
401- else if ((0 > aG))
391+ else if ((0 > aF))
402392 then throw("you have to supply more to borrow")
403393 else {
404- let aB = q(("total_supplied_" + A))
405- let aC = q(("total_borrowed_" + A))
406- let aE = q(((al + "_borrowed_") + A))
407- if ((at > (aB - aC)))
394+ let aA = q(("total_supplied_" + A))
395+ let aB = q(("total_borrowed_" + A))
396+ let aD = q(((al + "_borrowed_") + A))
397+ if ((at > (aA - aB)))
408398 then throw("this amount is not available")
409- else {
410- let az = invoke(this, "unstakeToken", [A, ap], nil)
411- if ((az == az))
412- then ([IntegerEntry(((al + "_borrowed_") + A), (aE + at)), IntegerEntry(("total_borrowed_" + A), (aC + at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
413- else throw("Strict value is not equal to itself.")
414- }
399+ else ([IntegerEntry(((al + "_borrowed_") + A), (aD + at)), IntegerEntry(("total_borrowed_" + A), (aB + at)), ScriptTransfer(ao.caller, ap, z(A))] ++ as)
415400 }
416401 }
417402 else throw("Strict value is not equal to itself.")
418403 }
419404
420405
421406
422407 @Callable(ao)
423408 func repay () = if (!(u("setup_active")))
424409 then throw("market is stopped")
425410 else if (if ((size(ao.payments) != 1))
426411 then true
427412 else (ao.payments[0].amount == 0))
428413 then throw("1 payment has to be attached")
429414 else {
430415 let A = x(ao.payments[0].assetId)
431416 let ap = ao.payments[0].amount
432- let aJ = V(A, "bRate")
433- let aI = aJ._1
434- let as = aJ._2
435- let at = fraction(ap, c, aI, CEILING)
417+ let aI = V(A, "bRate")
418+ let aH = aI._1
419+ let as = aI._2
420+ let at = fraction(ap, c, aH, CEILING)
436421 let al = toString(ao.caller)
437- let aB = q(("total_supplied_" + A))
438- let aC = q(("total_borrowed_" + A))
439- let aE = q(((al + "_borrowed_") + A))
440- let aK = (aE - at)
441- let aL = if ((aK >= 0))
422+ let aA = q(("total_supplied_" + A))
423+ let aB = q(("total_borrowed_" + A))
424+ let aD = q(((al + "_borrowed_") + A))
425+ let aJ = (aD - at)
426+ let aK = if ((aJ >= 0))
442427 then at
443- else aE
428+ else aD
444429 if ((indexOf(v("setup_tokens"), A) == unit))
445430 then throw("this asset is not supported by the market")
446- else {
447- let az = invoke(this, "stakeToken", [A, ap], nil)
448- if ((az == az))
449- then (([IntegerEntry(((al + "_borrowed_") + A), (aE - aL)), IntegerEntry(("total_borrowed_" + A), (aC - aL))] ++ as) ++ (if ((aK >= 0))
450- then nil
451- else [ScriptTransfer(ao.caller, -(aK), ao.payments[0].assetId)]))
452- else throw("Strict value is not equal to itself.")
453- }
431+ else (([IntegerEntry(((al + "_borrowed_") + A), (aD - aK)), IntegerEntry(("total_borrowed_" + A), (aB - aK))] ++ as) ++ (if ((aJ >= 0))
432+ then nil
433+ else [ScriptTransfer(ao.caller, -(aJ), ao.payments[0].assetId)]))
454434 }
455435
456436
457437
458438 @Callable(ao)
459439 func stakeTokenAll (A) = if ((ao.caller != this))
460440 then throw("only for internal smart contract invocations")
461441 else {
462442 let at = B(A)
463- let az = invoke(this, "stakeToken", [A, at], nil)
464- if ((az == az))
443+ let aL = invoke(this, "stakeToken", [A, at], nil)
444+ if ((aL == aL))
465445 then nil
466446 else throw("Strict value is not equal to itself.")
467447 }
468448
469449
470450
471451 @Callable(ao)
472452 func stakeToken (A,at) = if ((ao.caller != this))
473453 then throw("only for internal smart contract invocations")
474454 else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
475455 then {
476456 let aM = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
477- let az = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', at)])
478- if ((az == az))
457+ let aL = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "stake", nil, [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', at)])
458+ if ((aL == aL))
479459 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aM + at))]
480460 else throw("Strict value is not equal to itself.")
481461 }
482462 else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
483463 then {
484464 let aM = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
485- let az = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', at)])
486- if ((az == az))
465+ let aL = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "stake", nil, [AttachedPayment(base58'8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91', at)])
466+ if ((aL == aL))
487467 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aM + at))]
488468 else throw("Strict value is not equal to itself.")
489469 }
490470 else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
491471 then {
492472 let aM = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
493- let az = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', at)])
494- if ((az == az))
473+ let aL = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "stake", nil, [AttachedPayment(base58'At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL', at)])
474+ if ((aL == aL))
495475 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aM + at))]
496476 else throw("Strict value is not equal to itself.")
497477 }
498478 else nil
499479
500480
501481
502482 @Callable(ao)
503483 func unstakeToken (A,at) = if ((ao.caller != this))
504484 then throw("only for internal smart contract invocations")
505485 else if ((A == "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p"))
506486 then {
507487 let aM = q("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
508- let az = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [at], nil)
509- if ((az == az))
488+ let aL = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "unstake", [at], nil)
489+ if ((aL == aL))
510490 then {
511491 let aN = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
512492 if ((aN == aN))
513493 then {
514494 let ae = invoke(Address(base58'3PNikM6yp4NqcSU8guxQtmR5onr2D4e8yTJ'), "claimRewards", nil, nil)
515495 if ((ae == ae))
516496 then {
517497 let aO = invoke(this, "addInterest", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p") - aN)], nil)
518498 if ((aO == aO))
519499 then [IntegerEntry("autostake_amount_DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", (aM - at))]
520500 else throw("Strict value is not equal to itself.")
521501 }
522502 else throw("Strict value is not equal to itself.")
523503 }
524504 else throw("Strict value is not equal to itself.")
525505 }
526506 else throw("Strict value is not equal to itself.")
527507 }
528508 else if ((A == "8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91"))
529509 then {
530510 let aM = q("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91")
531- let az = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [at], nil)
532- if ((az == az))
511+ let aL = invoke(Address(base58'3PQTM38wDmAY9vWonK6ha7QL3PAycLz5oPP'), "unStake", [at], nil)
512+ if ((aL == aL))
533513 then [IntegerEntry("autostake_amount_8t4DPWTwPzpatHA9AkTxWAB47THnYzBsDnoY7fQqbG91", (aM - at))]
534514 else throw("Strict value is not equal to itself.")
535515 }
536516 else if ((A == "At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL"))
537517 then {
538518 let aM = q("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
539- let az = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [at], nil)
540- if ((az == az))
519+ let aL = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "unstake", [at], nil)
520+ if ((aL == aL))
541521 then {
542522 let aN = B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL")
543523 if ((aN == aN))
544524 then {
545525 let ae = invoke(Address(base58'3PQrVbTVpqXHqpVKftkNdjy3zZAh4dsRzN6'), "gnsbtRewardsSYSREADONLY", [toString(this)], nil)
546526 if ((ae == ae))
547527 then {
548528 let aP = {
549529 let s = ae
550530 if ($isInstanceOf(s, "List[Any]"))
551531 then {
552532 let ag = s
553533 let aQ = ag[1]
554534 let aR = aQ
555535 if ($isInstanceOf(aR, "String"))
556536 then {
557537 let aQ = aR
558538 let aS = parseIntValue(split(split(aQ, "_")[1], ":")[1])
559539 let aT = parseIntValue(split(split(aQ, "_")[0], ":")[1])
560540 if (if ((aS != 0))
561541 then true
562542 else (aT != 0))
563543 then {
564544 let aU = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
565545 if ((aU == aU))
566546 then {
567547 let aV = B("WAVES")
568548 if ((aV == aV))
569549 then {
570550 let aO = invoke(Address(base58'3PBiotFpqjRMkkeFBccnQNUXUopy7KFez5C'), "claimRewards", nil, nil)
571551 if ((aO == aO))
572552 then {
573553 let aW = B("WAVES")
574554 if ((aW == aW))
575555 then {
576556 let aX = invoke(Address(base58'3PLiXyywNThdvf3vVEUxwc7TJTucjZvuegh'), "swap", ["DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p", 0], [AttachedPayment(unit, (aW - aV))])
577557 if ((aX == aX))
578558 then {
579559 let aY = B("DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
580560 if ((aY == aY))
581561 then {
582562 let aZ = invoke(Address(base58'3P7r93vXHuusageNJVGwzqaz3WMotAu49Yz'), "swap", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", 0], [AttachedPayment(base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p', (aY - aU))])
583563 if ((aZ == aZ))
584564 then {
585565 let ba = invoke(this, "addInterest", ["At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (B("At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL") - aN)], nil)
586566 if ((ba == ba))
587567 then 2
588568 else throw("Strict value is not equal to itself.")
589569 }
590570 else throw("Strict value is not equal to itself.")
591571 }
592572 else throw("Strict value is not equal to itself.")
593573 }
594574 else throw("Strict value is not equal to itself.")
595575 }
596576 else throw("Strict value is not equal to itself.")
597577 }
598578 else throw("Strict value is not equal to itself.")
599579 }
600580 else throw("Strict value is not equal to itself.")
601581 }
602582 else throw("Strict value is not equal to itself.")
603583 }
604584 else 1
605585 }
606586 else 1
607587 }
608588 else 0
609589 }
610590 if ((aP == aP))
611591 then [IntegerEntry("autostake_amount_At8D6NFFpheCbvKVnjVoeLL84Eo8NZn6ovManxfLaFWL", (aM - at))]
612592 else throw("Strict value is not equal to itself.")
613593 }
614594 else throw("Strict value is not equal to itself.")
615595 }
616596 else throw("Strict value is not equal to itself.")
617597 }
618598 else throw("Strict value is not equal to itself.")
619599 }
620600 else nil
621601
622602
623603
624604 @Callable(ao)
625605 func addInterest (A,at) = if ((ao.caller != this))
626606 then throw("only for self invocation")
627607 else {
628608 let bb = q(("autostake_lastEarned_" + A))
629609 let bc = q(("autostake_lastBlock_" + A))
630610 let bd = fraction(at, 80, 100)
631611 let be = if (if ((bc == height))
632612 then true
633613 else (at == 0))
634614 then nil
635615 else [IntegerEntry(("autostake_preLastEarned_" + A), bb), IntegerEntry(("autostake_preLastBlock_" + A), bc), IntegerEntry(("autostake_lastEarned_" + A), (bb + bd)), IntegerEntry(("autostake_lastBlock_" + A), height)]
636616 (be ++ [IntegerEntry((A + "_sRate"), (q((A + "_sRate")) + fraction(c, bd, q(("total_supplied_" + A)))))])
637617 }
638618
639619
640620
641621 @Callable(ao)
642622 func addInterestEXTERNAL () = {
643623 let at = fraction(ao.payments[0].amount, 80, 100)
644624 let y = ao.payments[0].assetId
645625 let A = x(y)
646626 let bb = q(("autostake_lastEarned_" + A))
647627 let bc = q(("autostake_lastBlock_" + A))
648628 let be = if (if ((bc == height))
649629 then true
650630 else (at == 0))
651631 then nil
652632 else [IntegerEntry(("autostake_preLastEarned_" + A), bb), IntegerEntry(("autostake_preLastBlock_" + A), bc), IntegerEntry(("autostake_lastEarned_" + A), (bb + at)), IntegerEntry(("autostake_lastBlock_" + A), height)]
653633 (be ++ [IntegerEntry((A + "_sRate"), (q((A + "_sRate")) + fraction(c, at, q(("total_supplied_" + A)))))])
654634 }
655635
656636
657637
658638 @Callable(ao)
659639 func preInit (bf,bg,bh,bi) = {
660640 func g (h,X) = (h ++ [IntegerEntry((X + "_bRate"), c), IntegerEntry((X + "_sRate"), c)])
661641
662642 if ((ao.caller != this))
663643 then throw("admin only")
664644 else {
665645 let aa = {
666646 let j = split(bf, ",")
667647 let k = size(j)
668648 let l = nil
669649 func m (n,o) = if ((o >= k))
670650 then n
671651 else g(n, j[o])
672652
673653 func p (n,o) = if ((o >= k))
674654 then n
675655 else throw("List size exceeds 6")
676656
677657 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
678658 }
679659 ([StringEntry("setup_tokens", bf), StringEntry("setup_ltvs", bg), StringEntry("setup_lts", bh), StringEntry("setup_penalties", bi), BooleanEntry("setup_active", true)] ++ aa)
680660 }
681661 }
682662
683663
684664
685665 @Callable(ao)
686666 func updateParameter (r,bj) = if (if ((ao.caller != this))
687667 then (ao.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
688668 else false)
689669 then throw("admin only")
690670 else [IntegerEntry(r, parseIntValue(bj))]
691671
692672
693673
694674 @Callable(ao)
695675 func updateString (r,bj) = if (if ((ao.caller != this))
696676 then (ao.caller != Address(base58'3P3o9cLTV2u9N4nYNKRYL6gy6cUEU9DwXW8'))
697677 else false)
698678 then throw("admin only")
699679 else [StringEntry(r, bj)]
700680
701681
702682
703683 @Callable(ao)
704684 func claimToReserveFund (bk) = {
705685 let bl = E()
706686 let aa = V(bl[0], "sRate")._2
707687 let f = [0, 1, 2, 3, 4, 5]
708688 func g (h,bm) = if ((bm >= size(bl)))
709689 then h
710690 else {
711691 let A = bl[bm]
712692 let bn = v(("autostake_amount_" + A))
713693 let at = ((((B(A) + q(("autostake_amount_" + A))) + (if ((bn != ""))
714694 then parseIntValue(bn)
715695 else 0)) + fraction(q(("total_borrowed_" + A)), aa[((bm * 3) + 1)].value, c)) - fraction(q(("total_supplied_" + A)), aa[(bm * 3)].value, c))
716- let az = if ((q(("autostake_amount_" + A)) > 0))
696+ let aL = if ((q(("autostake_amount_" + A)) > 0))
717697 then invoke(this, "unstakeToken", [A, max([at, 0])], nil)
718698 else 0
719- if ((az == az))
699+ if ((aL == aL))
720700 then (h ++ [at])
721701 else throw("Strict value is not equal to itself.")
722702 }
723703
724704 let bo = {
725705 let j = f
726706 let k = size(j)
727707 let l = nil
728708 func m (n,o) = if ((o >= k))
729709 then n
730710 else g(n, j[o])
731711
732712 func p (n,o) = if ((o >= k))
733713 then n
734714 else throw("List size exceeds 6")
735715
736716 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
737717 }
738718 func bp (h,bm) = if ((bm >= size(bl)))
739719 then h
740720 else {
741721 let A = bl[bm]
742722 (h ++ [ScriptTransfer(C, max([bo[bm], 0]), z(A))])
743723 }
744724
745725 if (bk)
746726 then throw(e(bo))
747727 else $Tuple2({
748728 let j = f
749729 let k = size(j)
750730 let l = nil
751731 func bq (n,o) = if ((o >= k))
752732 then n
753733 else bp(n, j[o])
754734
755735 func br (n,o) = if ((o >= k))
756736 then n
757737 else throw("List size exceeds 6")
758738
759739 br(bq(bq(bq(bq(bq(bq(l, 0), 1), 2), 3), 4), 5), 6)
760740 }, bo)
761741 }
762742
763743
764744
765745 @Callable(ao)
766746 func reSetup (A) = {
767747 let bs = q("resetup_lastUpdate")
768748 if ((d > (height - bs)))
769749 then throw("can be updated only once per day")
770750 else {
771751 let bh = split(v("setup_lts"), ",")
772752 let bl = E()
773753 let L = Z(A)
774754 let bt = q((("setup_" + A) + "_tempLT"))
775755 let bu = parseIntValue(bl[value(indexOf(bl, A))])
776756 if ((L > 90000000))
777757 then [IntegerEntry((("setup_" + A) + "_tempLT"), fraction(bt, 9975, 10000))]
778758 else if (if ((bu > bt))
779759 then (90000000 > L)
780760 else false)
781761 then [IntegerEntry((("setup_" + A) + "_tempLT"), fraction(bt, 10025, 10000))]
782762 else nil
783763 }
784764 }
785765
786766
787767
788768 @Callable(ao)
789769 func shutdown (bv) = {
790770 let bw = [base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL', base58'3PAxdDSmN758L5SHSGRC5apEtQE2aApZotG', base58'3PJKmXoHJvVeQXjSJdhtkUcFDtdiQqMbUTD', base58'3PQdNxynJy5mche2kxMVc5shXWzK8Gstq3o', base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3', base58'3P6Ksahs71SiKQgQ4qaZuFAVhqncdi2nvJQ']
791771 if ((indexOf(bw, ao.caller.bytes) == unit))
792772 then throw("user not in a whitelist")
793773 else [BooleanEntry("setup_active", !(bv))]
794774 }
795775
796776
797777
798778 @Callable(ao)
799779 func liquidate (bk,al,ap,bx,by,bz) = if (if ((ao.caller != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
800780 then (ao.caller != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
801781 else false)
802782 then throw("temporarily listed for whitelist only")
803783 else if (!(u("setup_active")))
804784 then throw("market is stopped")
805785 else {
806786 let bA = ak(al)
807787 if ((bA == bA))
808788 then {
809789 let bB = V(bx, "sRate")
810790 let ar = bB._1
811791 let bC = bB._2
812792 let bD = V(by, "bRate")
813- let aI = bD._1
793+ let aH = bD._1
814794 let bE = bD._2
815795 let bF = fraction(ap, c, ar)
816796 let bG = q(((al + "_supplied_") + bx))
817797 let bH = q(((al + "_borrowed_") + by))
818798 let bI = if ((bH != 0))
819799 then bH
820800 else throw("user has no borrow in this token")
821801 if ((bA > 0))
822802 then throw("user can't be liquidated")
823803 else if ((bF > bG))
824804 then throw("position to liquidate is bigger than user's supply")
825805 else {
826806 let bJ = Address(base58'3PGFHzVGT4NTigwCKP1NcwoXkodVZwvBuuU')
827807 let bK = B(bx)
828808 if ((bK == bK))
829809 then {
830810 let bL = B(by)
831811 if ((bL == bL))
832812 then {
833813 let bM = invoke(bJ, "swap", [bz, 0], [AttachedPayment(z(bx), ap)])
834814 if ((bM == bM))
835815 then {
836816 let bN = (bK - B(bx))
837817 if ((bN == bN))
838818 then {
839819 let bO = (B(by) - bL)
840820 if ((bO == bO))
841821 then {
842- let bP = ac(bx)._2
822+ let bP = ac(bx)._1
843823 let bQ = ai(bx)
844824 let bR = fraction(bN, bP, bQ)
845- let bS = ac(by)._1
825+ let bS = ac(by)._2
846826 let bT = ai(by)
847827 let bU = fraction(bO, bS, bT)
848828 let bV = parseIntValue(split(v("setup_penalties"), ",")[value(indexOf(E(), by))])
849829 let bW = (bU - fraction(bR, (a - bV), a))
850830 let bX = fraction(bN, c, ar)
851- let bY = fraction(bO, c, aI)
831+ let bY = fraction(bO, c, aH)
852832 if ((bN > ap))
853833 then throw("more assets exchanged than expected")
854834 else if ((0 > bW))
855835 then throw("price impact is bigger than liquidation penalty")
856836 else [IntegerEntry(((al + "_supplied_") + bx), (bG - bX)), IntegerEntry(((al + "_borrowed_") + by), (bI - bY)), IntegerEntry(("total_supplied_" + bx), (q(("total_supplied_" + bx)) - bX)), IntegerEntry(("total_borrowed_" + by), (q(("total_borrowed_" + by)) - bY))]
857837 }
858838 else throw("Strict value is not equal to itself.")
859839 }
860840 else throw("Strict value is not equal to itself.")
861841 }
862842 else throw("Strict value is not equal to itself.")
863843 }
864844 else throw("Strict value is not equal to itself.")
865845 }
866846 else throw("Strict value is not equal to itself.")
867847 }
868848 }
869849 else throw("Strict value is not equal to itself.")
870850 }
871851
872852
873853
874854 @Callable(ao)
875855 func liquidateV2 (bk,al,bx) = if (if (if ((ao.caller != Address(base58'3PCqdm1mAoQqR46oZotFanmqb5CLUvrKEo2')))
876856 then (ao.caller != Address(base58'3PMcMiMEs6w56NRGacksXtFG5zS7doE9fpL'))
877857 else false)
878858 then (ao.caller != Address(base58'3PHbdpaKzz8EiAngGHaFu2hVuNCdsC67qh3'))
879859 else false)
880860 then throw("temporarily available for whitelist only")
881861 else if (!(u("setup_active")))
882862 then throw("market is stopped")
883863 else {
884864 let bZ = ao.payments[0].assetId
885865 let by = x(bZ)
886866 let ca = ao.payments[0].amount
887867 let bA = ak(al)
888868 if ((bA == bA))
889869 then if ((bA > 0))
890870 then throw("user can't be liquidated")
891871 else {
892872 let cb = E()
893873 let cc = value(indexOf(cb, by))
894874 let cd = value(indexOf(cb, bx))
895875 let ce = V(by, "bRate")
896- let aI = ce._1
876+ let aH = ce._1
897877 let bC = ce._2
898878 let bS = ac(by)._2
899879 let bT = ai(by)
900880 let cf = fraction(ca, bS, bT)
901881 let bV = parseIntValue(value(split(v("setup_penalties"), ",")[cc]))
902882 let bP = ac(bx)._1
903883 let bQ = ai(bx)
904884 let cg = fraction(cf, (a + bV), a)
905885 let bF = fraction(cg, bQ, bP)
906- let ch = fraction(ca, c, aI)
886+ let ch = fraction(ca, c, aH)
907887 let ci = fraction(bF, c, bC[((cd * 3) + 1)].value)
908888 let bG = q(((al + "_supplied_") + bx))
909889 let bH = q(((al + "_borrowed_") + by))
910890 let bI = if ((bH != 0))
911891 then bH
912892 else throw("user has no borrow in this token")
913893 if ((ci > bG))
914894 then throw("position to liquidate is bigger than user's supply")
915895 else if (bk)
916896 then throw("liquidation will pass")
917897 else ([ScriptTransfer(ao.caller, bF, z(bx)), IntegerEntry(((al + "_supplied_") + bx), (bG - ci)), IntegerEntry(((al + "_borrowed_") + by), (bI - ch)), IntegerEntry(("total_supplied_" + bx), (q(("total_supplied_" + bx)) - ci)), IntegerEntry(("total_borrowed_" + by), (q(("total_borrowed_" + by)) - ch))] ++ bC)
918898 }
919899 else throw("Strict value is not equal to itself.")
920900 }
921901
922902
923903
924904 @Callable(ao)
925905 func getUserCollateral (bk,al,cj,ck) = {
926906 let bl = E()
927907 let bg = split(v("setup_ltvs"), ",")
928908 let bh = split(v("setup_lts"), ",")
929909 let aa = V(bl[0], "sRate")._2
930910 let cl = split(ck, ",")
931911 func g (h,i) = if ((i >= size(bl)))
932912 then h
933913 else {
934914 let cm = q(((al + "_supplied_") + bl[i]))
935915 let cn = q(((al + "_borrowed_") + bl[i]))
936916 if (if ((cn != 0))
937917 then true
938918 else (cm != 0))
939919 then {
940920 let ax = ai(bl[i])
941921 let av = ac(bl[i])
942922 ((h + fraction(fraction(fraction((cm + (if (if (if ((ck != ""))
943923 then (cl[0] == bl[i])
944924 else false)
945925 then (cl[1] == "supplied")
946926 else false)
947927 then parseIntValue(cl[2])
948928 else 0)), aa[(i * 3)].value, c), parseIntValue(bg[i]), a), av._1, ax)) - (if (cj)
949929 then fraction(fraction(fraction((cn + (if (if (if ((ck != ""))
950930 then (cl[0] == bl[i])
951931 else false)
952932 then (cl[1] == "borrowed")
953933 else false)
954934 then parseIntValue(cl[2])
955935 else 0)), aa[((i * 3) + 1)].value, c), a, parseIntValue(bh[i])), av._2, ax)
956936 else 0))
957937 }
958938 else h
959939 }
960940
961941 let co = {
962942 let j = [0, 1, 2, 3, 4, 5]
963943 let k = size(j)
964944 let l = 0
965945 func m (n,o) = if ((o >= k))
966946 then n
967947 else g(n, j[o])
968948
969949 func p (n,o) = if ((o >= k))
970950 then n
971951 else throw("List size exceeds 6")
972952
973953 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
974954 }
975955 if (bk)
976956 then throw(toString(co))
977957 else $Tuple2(aa, co)
978958 }
979959
980960
981961
982962 @Callable(ao)
983963 func getPrices (bk) = {
984964 let bl = E()
985965 func g (h,i) = if ((i >= size(bl)))
986966 then h
987967 else {
988968 let av = ac(bl[i])
989969 ((((h + toString(av._1)) + ",") + toString(av._2)) + "|")
990970 }
991971
992972 let co = {
993973 let j = [0, 1, 2, 3, 4, 5]
994974 let k = size(j)
995975 let l = ""
996976 func m (n,o) = if ((o >= k))
997977 then n
998978 else g(n, j[o])
999979
1000980 func p (n,o) = if ((o >= k))
1001981 then n
1002982 else throw("List size exceeds 6")
1003983
1004984 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
1005985 }
1006986 if (bk)
1007987 then throw(co)
1008988 else $Tuple2(nil, co)
1009989 }
1010990
1011991
1012992
1013993 @Callable(ao)
1014994 func calculateUtilizationRatio (A,bk) = if (bk)
1015995 then throw(toString(Z(A)))
1016996 else $Tuple2(nil, Z(A))
1017997
1018998
1019999
10201000 @Callable(ao)
10211001 func calculateOutdatedUR (A,bk) = if (bk)
10221002 then throw(toString(H(A)))
10231003 else $Tuple2(nil, H(A))
10241004
10251005
10261006
10271007 @Callable(ao)
10281008 func calculateTokenRates (bk) = {
10291009 func g (h,A) = {
10301010 let aa = O(A)
10311011 $Tuple2(((((h._1 + toString(aa[1].value)) + "|") + toString(aa[0].value)) + ","), (h._2 ++ aa))
10321012 }
10331013
10341014 let bo = {
10351015 let j = E()
10361016 let k = size(j)
10371017 let l = $Tuple2("", nil)
10381018 func m (n,o) = if ((o >= k))
10391019 then n
10401020 else g(n, j[o])
10411021
10421022 func p (n,o) = if ((o >= k))
10431023 then n
10441024 else throw("List size exceeds 6")
10451025
10461026 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
10471027 }
10481028 if (bk)
10491029 then throw(bo._1)
10501030 else $Tuple2(bo._2, bo._1)
10511031 }
10521032
10531033
10541034
10551035 @Callable(ao)
10561036 func calculateTokensInterest (bk) = {
10571037 func g (h,A) = {
10581038 let N = fraction(K(A), d, a)
10591039 ((h + toString(N)) + ",")
10601040 }
10611041
10621042 let bo = {
10631043 let j = E()
10641044 let k = size(j)
10651045 let l = ""
10661046 func m (n,o) = if ((o >= k))
10671047 then n
10681048 else g(n, j[o])
10691049
10701050 func p (n,o) = if ((o >= k))
10711051 then n
10721052 else throw("List size exceeds 6")
10731053
10741054 p(m(m(m(m(m(m(l, 0), 1), 2), 3), 4), 5), 6)
10751055 }
10761056 if (bk)
10771057 then throw(bo)
10781058 else $Tuple2(nil, bo)
10791059 }
10801060
10811061
10821062 @Verifier(cp)
10831063 func cq () = sigVerify(cp.bodyBytes, cp.proofs[0], cp.senderPublicKey)
10841064

github/deemru/w8io/3ef1775 
141.60 ms