tx · 4FzvezCYuo6RJZyzVpca5geyJtLbDjCoz7SpGm6Ka1N6 3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL: -0.03900000 Waves 2022.09.22 17:44 [2240475] smart account 3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL > SELF 0.00000000 Waves
{ "type": 13, "id": "4FzvezCYuo6RJZyzVpca5geyJtLbDjCoz7SpGm6Ka1N6", "fee": 3900000, "feeAssetId": null, "timestamp": 1663857888621, "version": 2, "chainId": 84, "sender": "3MqQg3GcBjjk5727HxPKgQfqGQwWm6QA2yL", "senderPublicKey": "4AhS4PdxdW6j71mgHB4Xq7Eewk1rPdm57kDHAwQTTweK", "proofs": [ "3xWxsCiKgyaPZwKdJx18n7tgk6g1yg9x7kALmY5Lcex1TrVVawHD2fGzhdqYaVoJR2oZHsANCSq45etUhRbsMRje", "5MqWxaBanJQuRzTMKtKLVa1mrw1wCjXY9TZpsQUHrRJWPWxb3FB6b4fh3Rqrmfk2nvuiQ7CW2yopYfJUsN7BBNNe" ], "script": "base64:BgJlCAISBAoCEQESBQoDCAEBEgQKAgEEEgQKAhEIEgMKAQESBgoECAgBCBIECgIIARIDCgEREgQKAhEBEgUKAwEICBIECgIIARIFCgMIAQESABIAEgQKAhEEEgQKAgEBEgASABIAEgBUAAlQUkVDSVNJT04AwIQ9AAVNQVhfQQDAhD0ADE1BWF9BX0NIQU5HRQAKAAhERUNJTUFMUwAGAA1NSU5fUkFNUF9USU1FCQBpAgCAowUAPAAHdmVyc2lvbgIFMy4wLjAACGtWZXJzaW9uAgd2ZXJzaW9uAAdrQXNzZXRzAglhc3NldF9pZHMADWtBc3NldEJhbGFuY2UCCF9iYWxhbmNlAAdrQWN0aXZlAgZhY3RpdmUABmtDYXVzZQIOc2h1dGRvd25fY2F1c2UADWtTaGFyZUFzc2V0SWQCDnNoYXJlX2Fzc2V0X2lkABFrU2hhcmVBc3NldFN1cHBseQISc2hhcmVfYXNzZXRfc3VwcGx5AARrRmVlAgpjb21taXNzaW9uABJrREFwcFRocmVzaG9sZENvZWYCEWRBcHBUaHJlc2hvbGRDb2VmAAxrVVNETkFkZHJlc3MCGHN0YWtpbmdfdXNkbm5zYnRfYWRkcmVzcwAKa0Rpc2NvdW50cwIJZGlzY291bnRzAA9rRGlzY291bnRWYWx1ZXMCD2Rpc2NvdW50X3ZhbHVlcwAOa1VzZXJTd29wSW5Hb3YCDF9TV09QX2Ftb3VudAANa0FkbWluUHViS2V5MQILYWRtaW5fcHViXzEADWtBZG1pblB1YktleTICC2FkbWluX3B1Yl8yAA1rQWRtaW5QdWJLZXkzAgthZG1pbl9wdWJfMwASa0FkbWluSW52b2tlUHViS2V5AhBhZG1pbl9pbnZva2VfcHViABBrTW9uZXlCb3hBZGRyZXNzAhFtb25leV9ib3hfYWRkcmVzcwALa0dvdkFkZHJlc3MCEmdvdmVybmFuY2VfYWRkcmVzcwAOa1ZvdGluZ0FkZHJlc3MCDnZvdGluZ19hZGRyZXNzAA9rRmFybWluZ0FkZHJlc3MCD2Zhcm1pbmdfYWRkcmVzcwARa0xQRmFybWluZ0FkZHJlc3MCCmxwX2Zhcm1pbmcABm9yYWNsZQkBB0FkZHJlc3MBARoBVOlFqh6QLzqu8boO5i6akl8amITh82KzCAETZ2V0QmFzZTU4RnJvbU9yYWNsZQEDa2V5BAckbWF0Y2gwCQCdCAIFBm9yYWNsZQUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQGc3RyaW5nBQckbWF0Y2gwCQDZBAEFBnN0cmluZwQHbm90aGluZwUHJG1hdGNoMAkAAgEJAKwCAgUDa2V5AghpcyBlbXB0eQAMYWRtaW5QdWJLZXkxCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTEADGFkbWluUHViS2V5MgkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkyAAxhZG1pblB1YktleTMJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MwARYWRtaW5QdWJLZXlJbnZva2UJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5AA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAApnb3ZBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQULa0dvdkFkZHJlc3MAEnN0YWtpbmdVU0ROQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDGtVU0ROQWRkcmVzcwANdm90aW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDmtWb3RpbmdBZGRyZXNzAA5mYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFD2tGYXJtaW5nQWRkcmVzcwAQbHBGYXJtaW5nQWRkcmVzcwkBB0FkZHJlc3MBCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFEWtMUEZhcm1pbmdBZGRyZXNzAARVU0ROASBvJKPKqzDcUimY6CxhWu5afyNNwi11u+mdqlTg0tAHwQANc3Rha2luZ0Fzc2V0cwkAzAgCCQDYBAEFBFVTRE4FA25pbAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAxzaGFyZUFzc2V0SWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUNa1NoYXJlQXNzZXRJZAALc2hhcmVTdXBwbHkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFEWtTaGFyZUFzc2V0U3VwcGx5AAlmZWVTY2FsZTYAwIQ9AANmZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMFBGtGZWUADWZlZUdvdmVybmFuY2UJAGsDACgFCWZlZVNjYWxlNgBkAAlpbml0aWFsX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCWluaXRpYWxfQQAIZnV0dXJlX0EJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCCGZ1dHVyZV9BAA5pbml0aWFsX0FfdGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzAg5pbml0aWFsX0FfdGltZQAAAA1mdXR1cmVfQV90aW1lCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMCDWZ1dHVyZV9BX3RpbWUAAAAIYXNzZXRJZHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUHa0Fzc2V0cwIBLAAGbkNvaW5zCQCQAwEFCGFzc2V0SWRzAQdzdXNwZW5kAQVjYXVzZQkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQcJAMwIAgkBC1N0cmluZ0VudHJ5AgUGa0NhdXNlBQVjYXVzZQUDbmlsAQ10aHJvd0lzQWN0aXZlAAkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUBCGlzQWN0aXZlAAMFBmFjdGl2ZQUEdW5pdAkAAgECH0RBcHAgaXMgaW5hY3RpdmUgYXQgdGhpcyBtb21lbnQBC2lzQWRtaW5DYWxsAQFpAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUMYWRtaW5QdWJLZXkxCQDMCAIFDGFkbWluUHViS2V5MgkAzAgCBQxhZG1pblB1YktleTMFA25pbAgFAWkPY2FsbGVyUHVibGljS2V5BQR1bml0CQACAQIhT25seSBhZG1pbiBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIFBHRoaXMIBQFpBmNhbGxlcgUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24ABGJpZzIJALYCAQACAA5ibG9ja1RpbWVzdGFtcAUGaGVpZ2h0AQZhc3NlcnQBAWEDBQFhBwYBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQh1c2VyQWRkcgQEdXNlcgQHJG1hdGNoMAUIdXNlckFkZHIDCQABAgUHJG1hdGNoMAIHQWRkcmVzcwQBdQUHJG1hdGNoMAkApQgBBQF1AwkAAQIFByRtYXRjaDACBlN0cmluZwQBdQUHJG1hdGNoMAUBdQkAAgECGFVua25vdyB0eXBlIG9mIHVzZXIgQWRkcgQKc3dvcEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQpnb3ZBZGRyZXNzCQCsAgIFBHVzZXIFDmtVc2VyU3dvcEluR292AAAEDmRpc2NvdW50VmFsdWVzCQC1CQIJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBm9yYWNsZQUPa0Rpc2NvdW50VmFsdWVzAgEsBAlkaXNjb3VudHMJALUJAgkBEUBleHRyTmF0aXZlKDEwNTMpAgUGb3JhY2xlBQprRGlzY291bnRzAgEsAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAAkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwABBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwAAAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAQkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwACBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwABAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAgkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwADBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwACAwMJAGcCBQpzd29wQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOZGlzY291bnRWYWx1ZXMAAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAEBQpzd29wQW1vdW50BwkAZQIFCWZlZVNjYWxlNgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWRpc2NvdW50cwADAwkAZwIFCnN3b3BBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5kaXNjb3VudFZhbHVlcwAECQBlAgUJZmVlU2NhbGU2CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZGlzY291bnRzAAQFCWZlZVNjYWxlNgECX0EABAJ0MQUNZnV0dXJlX0FfdGltZQQCQTEFCGZ1dHVyZV9BAwkAZgIFAnQxBQ5ibG9ja1RpbWVzdGFtcAQCQTAFCWluaXRpYWxfQQQCdDAFDmluaXRpYWxfQV90aW1lAwkAZgIFAkExBQJBMAkAZAIFAkEwCQBpAgkAaAIJAGUCBQJBMQUCQTAJAGUCBQ5ibG9ja1RpbWVzdGFtcAUCdDAJAGUCBQJ0MQUCdDAJAGUCBQJBMAkAaQIJAGgCCQBlAgUCQTAFAkExCQBlAgUOYmxvY2tUaW1lc3RhbXAFAnQwCQBlAgUCdDEFAnQwBQJBMQEDX3hwAAoBDWFzc2V0QmFsYW5jZXMCA2FjYwdhc3NldElkCQDNCAIFA2FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFB2Fzc2V0SWQFDWtBc3NldEJhbGFuY2UAAAoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQENYXNzZXRCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BB194cF9tZW0BAnhwBQJ4cAEHc3VtTGlzdAIDYWNjB2VsZW1lbnQJAGQCBQNhY2MFB2VsZW1lbnQBBWdldF9EAgJ4cANhbXAKAAFACQD8BwQFBHRoaXMCAUQJAMwIAgUCeHAJAMwIAgUDYW1wBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBCQD8BwQFBHRoaXMCAUQJAMwIAgUCeHAJAMwIAgUDYW1wBQNuaWwFA25pbAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQ5nZXRfRF9pbnRlcm5hbAICeHADYW1wBAFTCgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdW1MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwMJAAACBQFTAAAAAAQDQW5uCQBoAgUDYW1wBQZuQ29pbnMEBEFublMJALkCAgkAtgIBBQNBbm4JALYCAQUBUwQEQW5uMQkAtgIBCQBlAgUDQW5uAAEKAQVEcHJvYwIDYWNjAWkDCQAAAggFA2FjYwJfMgYFA2FjYwQFRHByZXYIBQNhY2MCXzEKAQdEX1BQcm9jAgNEX1ABaQMJAGYCBQZuQ29pbnMFAWkJALoCAgkAuQICBQNEX1AFBURwcmV2CQC5AgIJALYCAQkAkQMCBQJ4cAUBaQkAtgIBBQZuQ29pbnMFA0RfUAQDRF9QCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFBURwcmV2CgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdEX1BQcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQBRAkAvAIDCQC3AgIFBEFublMJALkCAgkAtgIBBQZuQ29pbnMFA0RfUAUFRHByZXYJALcCAgkAuQICBQRBbm4xBQVEcHJldgkAuQICCQC2AgEJAGQCBQZuQ29pbnMAAQUDRF9QAwkAvwICBQFEBQVEcHJldgMJAGcCAAEJAKADAQkAuAICBQFEBQVEcHJldgkAlAoCBQFEBgkAlAoCBQFEBwMJAGcCAAEJAKADAQkAuAICBQVEcHJldgUBRAkAlAoCBQFEBgkAlAoCBQFEBwQLJHQwNjE5MTYzMDMKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAVMHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVEcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAUQIBQskdDA2MTkxNjMwMwJfMQQIZmluaXNoZWQIBQskdDA2MTkxNjMwMwJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICGmdldF9EKCkgbm90IGZpbmlzaGVkIHdpdGggCQCmAwEFAUQJAKADAQUBRAEHZ2V0RE1lbQICeHADYW1wCQEFZ2V0X0QCCQEHX3hwX21lbQEFAnhwBQNhbXABBGdldFkEAmluA291dAF4A3hwXwMJAQZhc3NlcnQBCQECIT0CBQJpbgUDb3V0CQACAQIJc2FtZSBjb2luAwkBBmFzc2VydAEDCQBnAgUDb3V0AAAJAGcCBQJpbgAABwkAAgECCmJlbG93IHplcm8DCQEGYXNzZXJ0AQMJAGYCBQZuQ29pbnMFA291dAkAZgIFBm5Db2lucwUCaW4HCQACAQINYWJvdmUgTl9DT0lOUwQDYW1wCQECX0EABAFECQEFZ2V0X0QCBQN4cF8FA2FtcAQDQW5uCQBoAgUDYW1wBQZuQ29pbnMKAQNTX2MCA2FjYwFpBAskdDA2ODc0Njg5MQUDYWNjBAJTXwgFCyR0MDY4NzQ2ODkxAl8xBAFjCAULJHQwNjg3NDY4OTECXzIEAnhfAwkAAAIFAmluBQFpBQF4CQCRAwIFA3hwXwUBaQMDCQECIT0CBQFpBQNvdXQJAGYCBQZuQ29pbnMFAWkHCQCUCgIJAGQCBQJTXwUCeF8JALwCAwUBYwkAtgIBBQFECQC2AgEJAGgCBQJ4XwUGbkNvaW5zCQCUCgIFAlNfBQFjBAskdDA3MDk5NzIwMAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAkAtgIBBQFECgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQNTX2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAJTXwgFCyR0MDcwOTk3MjAwAl8xBAJjXwgFCyR0MDcwOTk3MjAwAl8yBAFjCQC8AgMFAmNfCQC2AgEFAUQJALYCAQkAaAIFA0FubgUGbkNvaW5zBAJiRAkAtgIBCQBlAgkAZAIFAlNfCQBpAgUBRAUDQW5uBQFECgEGeV9wcm9jAgNhY2MCX2kDCQAAAggFA2FjYwJfMgYFA2FjYwQGeV9wcmV2CAUDYWNjAl8xBAF5CQC6AgIJALcCAgkAuQICBQZ5X3ByZXYFBnlfcHJldgUBYwkAtwICCQC5AgIFBGJpZzIFBnlfcHJldgUCYkQDCQC/AgIFAXkFBnlfcHJldgMJAGcCAAEJAKADAQkAuAICBQF5BQZ5X3ByZXYJAJQKAgUBeQYJAJQKAgUBeQcDCQBnAgABCQCgAwEJALgCAgUGeV9wcmV2BQF5CQCUCgIFAXkGCQCUCgIFAXkHBAskdDA3NjgyNzc5OQoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAUQHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZ5X3Byb2MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAEAXkIBQskdDA3NjgyNzc5OQJfMQQIZmluaXNoZWQIBQskdDA3NjgyNzc5OQJfMgMJAAACBQhmaW5pc2hlZAcJAAIBCQCsAgICGWdldFkoKSBub3QgZmluaXNoZWQgd2l0aCAJAKYDAQUBeQkAoAMBBQF5AQdnZXRfeV9EBAJBXwJpbgJ4cAFEAwkBBmFzc2VydAEJAGcCBQJpbgAACQACAQIMaSBiZWxvdyB6ZXJvAwkBBmFzc2VydAEJAGYCBQZuQ29pbnMFAmluCQACAQIPaSBhYm92ZSBOX0NPSU5TBANBbm4JAGgCBQJBXwUGbkNvaW5zCgEDU19jAgNhY2MBaQQLJHQwODE3ODgxOTUFA2FjYwQCU18IBQskdDA4MTc4ODE5NQJfMQQBYwgFCyR0MDgxNzg4MTk1Al8yBAJ4XwMDCQECIT0CBQJpbgUBaQkAZgIFBm5Db2lucwUBaQcJAJEDAgUCeHAFAWkAAAMDCQBmAgUGbkNvaW5zBQFpCQECIT0CBQJpbgUBaQcJAJQKAgkAZAIFAlNfBQJ4XwkAvAIDBQFjCQC2AgEFAUQJALYCAQkAaAIFAnhfBQZuQ29pbnMJAJQKAgUCU18FAWMECyR0MDg0MTU4NTE2CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAACQC2AgEFAUQKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA1NfYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAlNfCAULJHQwODQxNTg1MTYCXzEEAmNfCAULJHQwODQxNTg1MTYCXzIEAWMJALwCAwUCY18JALYCAQUBRAkAtgIBCQBoAgUDQW5uBQZuQ29pbnMEAmJECQC2AgEJAGUCCQBkAgUCU18JAGkCBQFEBQNBbm4FAUQKAQh5X0RfcHJvYwIDYWNjAWkDCQAAAggFA2FjYwJfMgYFA2FjYwQGeV9wcmV2CAUDYWNjAl8xBAF5CQC6AgIJALcCAgkAuQICBQZ5X3ByZXYFBnlfcHJldgUBYwkAtwICCQC5AgIFBGJpZzIFBnlfcHJldgUCYkQDCQC/AgIFAXkFBnlfcHJldgMJAGcCAAEJAKADAQkAuAICBQF5BQZ5X3ByZXYJAJQKAgUBeQYJAJQKAgUBeQcDCQBnAgABCQCgAwEJALgCAgUGeV9wcmV2BQF5CQCUCgIFAXkGCQCUCgIFAXkHBAskdDA4OTk5OTExOAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCCQC2AgEFAUQHCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQh5X0RfcHJvYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAQBeQgFCyR0MDg5OTk5MTE4Al8xBAhmaW5pc2hlZAgFCyR0MDg5OTk5MTE4Al8yAwkAAAIFCGZpbmlzaGVkBwkAAgEJAKwCAgIcZ2V0X3lfRCgpIG5vdCBmaW5pc2hlZCB3aXRoIAkApgMBBQF5CQCgAwEFAXkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAJ4cA1fdG9rZW5fYW1vdW50AWkGY2FsbGVyBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQUGY2FsbGVyBANhbXAJAQJfQQAEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEDHRvdGFsX3N1cHBseQULc2hhcmVTdXBwbHkEAkQwCQEFZ2V0X0QCBQJ4cAUDYW1wBAJEMQkAZQIFAkQwCQBrAwUNX3Rva2VuX2Ftb3VudAUCRDAFDHRvdGFsX3N1cHBseQQFbmV3X3kJAQdnZXRfeV9EBAUDYW1wBQFpBQJ4cAUCRDEEBGR5XzAJAGUCCQCRAwIFAnhwBQFpBQVuZXdfeQoBD3hwX3JlZHVjZWRfcHJvYwIDYWNjBHhwX2oECyR0MDk3NTk5Nzg4BQNhY2MECnhwX3JlZHVjZWQIBQskdDA5NzU5OTc4OAJfMQQFaW5kZXgIBQskdDA5NzU5OTc4OAJfMgQLZHhfZXhwZWN0ZWQDCQAAAgUFaW5kZXgFAWkJAGUCCQBrAwUEeHBfagUCRDEFAkQwBQVuZXdfeQkAZQIFBHhwX2oJAGsDBQR4cF9qBQJEMQUCRDAJAJQKAgkAzQgCBQp4cF9yZWR1Y2VkCQBlAgUEeHBfagkAawMFBF9mZWUFC2R4X2V4cGVjdGVkBQlmZWVTY2FsZTYJAGQCBQVpbmRleAABBA0kdDAxMDA1MDEwMTE0CgACJGwFAnhwCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPeHBfcmVkdWNlZF9wcm9jAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQKeHBfcmVkdWNlZAgFDSR0MDEwMDUwMTAxMTQCXzEEBWluZGV4CAUNJHQwMTAwNTAxMDExNAJfMgQMeHBfcmVkdWNlZF9pCQCRAwIFCnhwX3JlZHVjZWQFAWkEAmR5CQBlAgkAZQIFDHhwX3JlZHVjZWRfaQkBB2dldF95X0QEBQNhbXAFAWkFCnhwX3JlZHVjZWQFAkQxAAEJAJQKAgUCZHkJAGUCBQRkeV8wBQJkeQENZ2V0U3RyQXNzZXRJZAEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJpZAUHJG1hdGNoMAkA2AQBBQJpZAMJAAECBQckbWF0Y2gwAgRVbml0BAV3YXZlcwUHJG1hdGNoMAIFV0FWRVMJAAIBAgtNYXRjaCBlcnJvcgEYY2FsY1N0YWtpbmdGdW5jQW5kQWRkcmVzAgVzdGFrZQdhc3NldElkAwUFc3Rha2UJAJQKAgIMbG9ja05ldXRyaW5vBRJzdGFraW5nVVNETkFkZHJlc3MJAJQKAgIOdW5sb2NrTmV1dHJpbm8FEnN0YWtpbmdVU0ROQWRkcmVzcwERY2FsY1N0YWtpbmdQYXJhbXMDBXN0YWtlBmFtb3VudAdhc3NldElkAwUFc3Rha2UEDSR0MDEwNjc4MTA3NDQJARhjYWxjU3Rha2luZ0Z1bmNBbmRBZGRyZXMCBQVzdGFrZQUHYXNzZXRJZAQEY2FsbAgFDSR0MDEwNjc4MTA3NDQCXzEEC3N0YWtpbmdBZGRyCAUNJHQwMTA2NzgxMDc0NAJfMgkAlgoEBQRjYWxsBQtzdGFraW5nQWRkcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQdhc3NldElkBQZhbW91bnQFA25pbAQNJHQwMTA4MzAxMDg5NgkBGGNhbGNTdGFraW5nRnVuY0FuZEFkZHJlcwIFBXN0YWtlBQdhc3NldElkBARjYWxsCAUNJHQwMTA4MzAxMDg5NgJfMQQLc3Rha2luZ0FkZHIIBQ0kdDAxMDgzMDEwODk2Al8yCQCWCgQFBGNhbGwFC3N0YWtpbmdBZGRyCQDMCAIFBmFtb3VudAkAzAgCCQDYBAEFB2Fzc2V0SWQFA25pbAUDbmlsAQVzdGFrZQIGYW1vdW50DWFzc2V0SWRTdHJpbmcDCQEPY29udGFpbnNFbGVtZW50AgUNc3Rha2luZ0Fzc2V0cwUNYXNzZXRJZFN0cmluZwQNJHQwMTEwODMxMTE4NQkBEWNhbGNTdGFraW5nUGFyYW1zAwYFBmFtb3VudAkA2QQBBQ1hc3NldElkU3RyaW5nBARjYWxsCAUNJHQwMTEwODMxMTE4NQJfMQQEYWRkcggFDSR0MDExMDgzMTExODUCXzIEBnBhcmFtcwgFDSR0MDExMDgzMTExODUCXzMECHBheW1lbnRzCAUNJHQwMTEwODMxMTE4NQJfNAkA/AcEBQRhZGRyBQRjYWxsBQZwYXJhbXMFCHBheW1lbnRzAAABB3Vuc3Rha2UCBmFtb3VudA1hc3NldElkU3RyaW5nAwkBD2NvbnRhaW5zRWxlbWVudAIFDXN0YWtpbmdBc3NldHMFDWFzc2V0SWRTdHJpbmcEDSR0MDExMzcwMTE0NzMJARFjYWxjU3Rha2luZ1BhcmFtcwMHBQZhbW91bnQJANkEAQUNYXNzZXRJZFN0cmluZwQEY2FsbAgFDSR0MDExMzcwMTE0NzMCXzEEBGFkZHIIBQ0kdDAxMTM3MDExNDczAl8yBAZwYXJhbXMIBQ0kdDAxMTM3MDExNDczAl8zBAhwYXltZW50cwgFDSR0MDExMzcwMTE0NzMCXzQJAPwHBAUEYWRkcgUEY2FsbAUGcGFyYW1zBQhwYXltZW50cwAAAQxzdGFrZWRBbW91bnQBB2Fzc2V0SWQEFnN0YWtlZEFtb3VudENhbGN1bGF0ZWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQDYUlkBQckbWF0Y2gwAwkAAAIFA2FJZAUEVVNETgkAmggCBRJzdGFraW5nVVNETkFkZHJlc3MJAKwCAgkArAICCQCsAgICDHJwZF9iYWxhbmNlXwkA2AQBBQNhSWQCAV8JAKUIAQUEdGhpcwAAAwkAAQIFByRtYXRjaDACBFVuaXQAAAkAAgECC01hdGNoIGVycm9yBAckbWF0Y2gwBRZzdGFrZWRBbW91bnRDYWxjdWxhdGVkAwkAAQIFByRtYXRjaDACA0ludAQBaQUHJG1hdGNoMAUBaQAAAQ9jaGVja1N1c3BpY2lvdXMABBBjb250cmFjdEJhbGFuY2VzCQEDX3hwAAoBDGNoZWNrQmFsYW5jZQIDYWNjB2Fzc2V0SWQEDSR0MDEyMDg0MTIxMDkFA2FjYwQKc3VzcGljaW91cwgFDSR0MDEyMDg0MTIxMDkCXzEEAWkIBQ0kdDAxMjA4NDEyMTA5Al8yAwUKc3VzcGljaW91cwkAlAoCBQpzdXNwaWNpb3VzBQFpBAhhQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkCQEMc3Rha2VkQW1vdW50AQkA2QQBBQdhc3NldElkAwkAZgIJAJEDAgUQY29udHJhY3RCYWxhbmNlcwUBaQUIYUJhbGFuY2UJAJQKAgYFAWkJAJQKAgcJAGQCBQFpAAEKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIHAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGNoZWNrQmFsYW5jZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8BEXN1c3BlbmRTdXNwaWNpb3VzAQFpCQEHc3VzcGVuZAEJAKwCAgIdU3VzcGljaW91cyBzdGF0ZSB3aXRoIGFzc2V0OiAJAJEDAgUIYXNzZXRJZHMFAWkBDnJldHVyblBheW1lbnRzAgZjYWxsZXIIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHcGF5bWVudAkAzQgCBQNhY2MJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcggFB3BheW1lbnQGYW1vdW50CAUHcGF5bWVudAdhc3NldElkCgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1wYXJzZVBheW1lbnRzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwESY2hlY2tEQXBwVGhyZXNob2xkAQtuZXdCYWxhbmNlcwQRZEFwcFRocmVzaG9sZENvZWYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRJrREFwcFRocmVzaG9sZENvZWYCGE5vIGRBcHBUaHJlc2hvbGRDb2VmIGtleQQOdGhyZXNob2xkU2NhbGUAkE4ECm1heEJhbGFuY2UJAJYDAQULbmV3QmFsYW5jZXMECm1pbkJhbGFuY2UJAJcDAQULbmV3QmFsYW5jZXMEBXJhdGlvCQBrAwUKbWF4QmFsYW5jZQUOdGhyZXNob2xkU2NhbGUFCm1pbkJhbGFuY2UDCQBmAgUFcmF0aW8JAGgCBRFkQXBwVGhyZXNob2xkQ29lZgUOdGhyZXNob2xkU2NhbGUJAAIBAjhOZXcgYmFsYW5jZSBpbiBhc3NldHMgb2YgdGhlIERBcHAgaXMgbGVzcyB0aGFuIHRocmVzaG9sZAcBCmNoZWNrQ29pbnMBCGFzc2V0SWRzBAVjb2lucwkAtQkCBQhhc3NldElkcwIBLAoBCWNoZWNrQ29pbgIFZXJyb3IHYXNzZXRJZAQFYXNzZXQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA2QQBBQdhc3NldElkCQCsAgICEmZyb21CYXNlNThTdHJpbmc6IAUHYXNzZXRJZAQIZGVjaW1hbHMICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUFYXNzZXQJAKwCAgILYXNzZXRJbmZvOiAFB2Fzc2V0SWQIZGVjaW1hbHMDCQECIT0CBQhkZWNpbWFscwUIREVDSU1BTFMJAAIBAg53cm9uZyBkZWNpbWFscwcKAAIkbAUFY29pbnMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJY2hlY2tDb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADxQDbXNnAQFEAgJ4cANhbXAEAUQJAQ5nZXRfRF9pbnRlcm5hbAIFAnhwBQNhbXAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgIBRAUBRAUDbmlsBQFEA21zZwEEaW5pdAMIYXNzZXRJZHMCX0ESX2RBcHBUaHJlc2hvbGRDb2VmAwkBASEBCQCeCAEFBHRoaXMJAAIBAhNBbHJlYWR5IGluaXRpYWxpemVkAwkAZwIAAAUCX0EJAAIBAhRBbXAgbXVzdCBiZSBtdXN0ID4gMAMJAGcCAAAFEl9kQXBwVGhyZXNob2xkQ29lZgkAAgECH2RBcHAgVGhyZXNob2xkIENvZWYgbXVzdCBiZSA+IDAECXNoYXJlTmFtZQILc19NdWx0aV9VU0QEEHNoYXJlRGVzY3JpcHRpb24JAKwCAgJCU2hhcmVUb2tlbiBvZiBTd29wRmkgcHJvdG9jb2wgZm9yIE11bHRpU3RhYmxlIFVTRCBwb29sIGF0IGFkZHJlc3MgCQClCAEFBHRoaXMECmlzc3VlVG9rZW4JAMIIBQUJc2hhcmVOYW1lBRBzaGFyZURlc2NyaXB0aW9uAAAABgYEB3Rva2VuSWQJALgIAQUKaXNzdWVUb2tlbgMJAQpjaGVja0NvaW5zAQUIYXNzZXRJZHMJAQV0aHJvdwAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIa1ZlcnNpb24FB3ZlcnNpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgUHa0Fzc2V0cwUIYXNzZXRJZHMJAMwIAgkBDEludGVnZXJFbnRyeQICCWluaXRpYWxfQQUCX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQJfQQkAzAgCCQEMSW50ZWdlckVudHJ5AgUEa0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUGb3JhY2xlAg1iYXNlX2ZlZV9mbGF0CQDMCAIJAQtTdHJpbmdFbnRyeQIFDWtTaGFyZUFzc2V0SWQJANgEAQUHdG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa0RBcHBUaHJlc2hvbGRDb2VmBRJfZEFwcFRocmVzaG9sZENvZWYJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIFCmlzc3VlVG9rZW4FA25pbANtc2cBDGFkZExpcXVpZGl0eQINbWluTWludEFtb3VudAxzdGFrZUZhcm1pbmcJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMAMJAAACBQtzaGFyZVN1cHBseQAAAAAJAQdnZXRETWVtAgUCeHAFA2FtcAQIcGF5bWVudHMIBQNtc2cIcGF5bWVudHMEDHBheW1lbnRzU2l6ZQkAkAMBBQhwYXltZW50cwoBDXZhbGlkUGF5bWVudHMBAW4DCQBmAgUMcGF5bWVudHNTaXplBQZuQ29pbnMJAAIBCQCsAgICEHBheW1lbnRzIHNpemUgPiAJAKQDAQUGbkNvaW5zAwkAZgIAAQUMcGF5bWVudHNTaXplCQACAQIRcGF5bWVudHMgc2l6ZSA8IDEDAwkAAAIFC3NoYXJlU3VwcGx5AAAJAQIhPQIFBm5Db2lucwUMcGF5bWVudHNTaXplBwkAAgECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMKAQxwYXltYW50VmFsaWQCA2FjYwdwYXltZW50AwkBD2NvbnRhaW5zRWxlbWVudAIFCGFzc2V0SWRzCQENZ2V0U3RyQXNzZXRJZAEIBQdwYXltZW50B2Fzc2V0SWQGCQACAQIYSW52YWxpZCBhc3NldCBpbiBwYXltZW50CgACJGwFCHBheW1lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDHBheW1hbnRWYWxpZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8DCQEBIQEJAQ12YWxpZFBheW1lbnRzAQUMcGF5bWVudHNTaXplCQEFdGhyb3cABApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcgUIcGF5bWVudHMKAQ1wYXJzZVBheW1lbnRzAgNhY2MHYXNzZXRJZAQNJHQwMTYxMjUxNjE1NAUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDE2MTI1MTYxNTQCXzEEAWkIBQ0kdDAxNjEyNTE2MTU0Al8yBAFqCAUNJHQwMTYxMjUxNjE1NAJfMwMDCQBmAgUMcGF5bWVudHNTaXplBQFqCQAAAgkBDWdldFN0ckFzc2V0SWQBCAkAkQMCBQhwYXltZW50cwUBagdhc3NldElkBQdhc3NldElkBwkAlQoDCQDNCAIFC25ld0JhbGFuY2VzCQBkAgkAkQMCBQJ4cAUBaQgJAJEDAgUIcGF5bWVudHMFAWoGYW1vdW50CQBkAgUBaQABCQBkAgUBagABCQCVCgMJAM0IAgULbmV3QmFsYW5jZXMJAJEDAgUCeHAFAWkJAGQCBQFpAAEFAWoEDSR0MDE2Mzc0MTY0NjAKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDXBhcnNlUGF5bWVudHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDE2Mzc0MTY0NjACXzEEAWsIBQ0kdDAxNjM3NDE2NDYwAl8yBA5wYXJzZWRQYXltZW50cwgFDSR0MDE2Mzc0MTY0NjACXzMDCQBmAgUMcGF5bWVudHNTaXplBQ5wYXJzZWRQYXltZW50cwkAAgECF0luY29yZWN0IHBheW1lbnRzIG9yZGVyAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkBBmFzc2VydAEJAGYCBQJEMQUCRDAJAAIBAgdEMSA+IEQwBAtmZWVEaXNjb3VudAkBFGNhbGN1bGF0ZUZlZURpc2NvdW50AQgFA21zZwZjYWxsZXIKARFjYWxjU2NyaXB0QWN0aW9ucwIDYWNjCm5ld0JhbGFuY2UEDSR0MDE2ODYxMTY5MDIFA2FjYwQLaW52QmFsYW5jZXMIBQ0kdDAxNjg2MTE2OTAyAl8xBA1zY3JpcHRBY3Rpb25zCAUNJHQwMTY4NjExNjkwMgJfMgQBaQgFDSR0MDE2ODYxMTY5MDICXzMDCQBmAgULc2hhcmVTdXBwbHkAAAQEX2ZlZQkAaQIJAGgCCQBuBAUDZmVlBQtmZWVEaXNjb3VudAUJZmVlU2NhbGU2BQdDRUlMSU5HBQZuQ29pbnMJAGgCAAQJAGUCBQZuQ29pbnMAAQQEZmVlcwQMaWRlYWxCYWxhbmNlCQBrAwUCRDEJAJEDAgUCeHAFAWkFAkQwBApkaWZmZXJlbmNlAwkAZgIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFDGlkZWFsQmFsYW5jZQUKbmV3QmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFDGlkZWFsQmFsYW5jZQkAawMFBF9mZWUFCmRpZmZlcmVuY2UFCWZlZVNjYWxlNgQOZ292ZXJuYW5jZUZlZXMJAGsDBQRmZWVzBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYEDGZpbmFsQmFsYW5jZQkAZQIFCm5ld0JhbGFuY2UFBGZlZXMEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzBANwbXQJAGUCBQpuZXdCYWxhbmNlCQCRAwIFAnhwBQFpBAZscEZlZXMJAGUCBQRmZWVzBQ5nb3Zlcm5hbmNlRmVlcwQDaW52AwkAZgIFA3BtdAAACQEFc3Rha2UCCQBlAgUDcG10BQRmZWVzCQCRAwIFCGFzc2V0SWRzBQFpCQEHdW5zdGFrZQIFBGZlZXMJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFBmxwRmVlcwUDbmlsAAADCQAAAgUHYWlyZHJvcAUHYWlyZHJvcAkAlQoDCQDNCAIFC2ludkJhbGFuY2VzBRBpbnZhcmlhbnRCYWxhbmNlCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwkA2QQBCQCRAwIFCGFzc2V0SWRzBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UFDGZpbmFsQmFsYW5jZQUDbmlsCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJAQVzdGFrZQIFCm5ld0JhbGFuY2UJAJEDAgUIYXNzZXRJZHMFAWkDCQAAAgUDaW52BQNpbnYJAJUKAwkAzQgCBQtpbnZCYWxhbmNlcwUKbmV3QmFsYW5jZQkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkArAICCQCRAwIFCGFzc2V0SWRzBQFpBQ1rQXNzZXRCYWxhbmNlBQpuZXdCYWxhbmNlCQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxODYwNzE4Njk1CgACJGwFC25ld0JhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwFA25pbAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARFjYWxjU2NyaXB0QWN0aW9ucwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC2ludkJhbGFuY2VzCAUNJHQwMTg2MDcxODY5NQJfMQQNc2NyaXB0QWN0aW9ucwgFDSR0MDE4NjA3MTg2OTUCXzIEAkQyCQEHZ2V0RE1lbQIFC2ludkJhbGFuY2VzBQNhbXAEC21pbnRfYW1vdW50AwkAAAIFC3NoYXJlU3VwcGx5AAAFAkQxCQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwAwkBBmFzc2VydAEJAGcCBQttaW50X2Ftb3VudAUNbWluTWludEFtb3VudAkAAgECFFNsaXBwYWdlIHNjcmV3ZWQgeW91AwUMc3Rha2VGYXJtaW5nBAJyZQkA/AcEBQR0aGlzAgxyZWlzc3VlU2hhcmUJAMwIAgULbWludF9hbW91bnQFA25pbAUDbmlsAwkAAAIFAnJlBQJyZQQBcwkA/AcEBQ5mYXJtaW5nQWRkcmVzcwIPbG9ja1NoYXJlVG9rZW5zCQDMCAIJAKUIAQUEdGhpcwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxzaGFyZUFzc2V0SWQFC21pbnRfYW1vdW50BQNuaWwDCQAAAgUBcwUBcwkAzQgCBQ1zY3JpcHRBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGQCBQtzaGFyZVN1cHBseQULbWludF9hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAM4IAgUNc2NyaXB0QWN0aW9ucwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAULbWludF9hbW91bnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQttaW50X2Ftb3VudAUMc2hhcmVBc3NldElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZAIFC3NoYXJlU3VwcGx5BQttaW50X2Ftb3VudAUDbmlsA21zZwEOY2FsY01pbnRBbW91bnQCC25ld0JhbGFuY2VzBHVzZXIEA2FtcAkBAl9BAAQCeHAJAQNfeHAABAJEMQkBB2dldERNZW0CBQtuZXdCYWxhbmNlcwUDYW1wAwkAAAIFC3NoYXJlU3VwcGx5AAAJAJQKAgUDbmlsBQJEMQQCRDAJAQdnZXRETWVtAgUCeHAFA2FtcAQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEFBHVzZXIKAQ9jYWxjSW52QmFsYW5jZXMCA2FjYwpuZXdCYWxhbmNlBA0kdDAxOTg4NDE5OTEwBQNhY2MEC2ludkJhbGFuY2VzCAUNJHQwMTk4ODQxOTkxMAJfMQQBaQgFDSR0MDE5ODg0MTk5MTACXzIEBF9mZWUJAGkCCQBoAgkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUGbkNvaW5zCQBoAgAECQBlAgUGbkNvaW5zAAEEBGZlZXMEDGlkZWFsQmFsYW5jZQkAawMFAkQxCQCRAwIFAnhwBQFpBQJEMAQKZGlmZmVyZW5jZQMJAGYCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQxpZGVhbEJhbGFuY2UFCm5ld0JhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQxpZGVhbEJhbGFuY2UJAGsDBQRfZmVlBQpkaWZmZXJlbmNlBQlmZWVTY2FsZTYEEGludmFyaWFudEJhbGFuY2UJAGUCBQpuZXdCYWxhbmNlBQRmZWVzCQCUCgIJAM0IAgULaW52QmFsYW5jZXMFEGludmFyaWFudEJhbGFuY2UJAGQCBQFpAAEEDSR0MDIwNTEyMjA1ODIKAAIkbAULbmV3QmFsYW5jZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9jYWxjSW52QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtpbnZCYWxhbmNlcwgFDSR0MDIwNTEyMjA1ODICXzEEAWsIBQ0kdDAyMDUxMjIwNTgyAl8yBAJEMgkBB2dldERNZW0CBQtpbnZCYWxhbmNlcwUDYW1wBAptaW50QW1vdW50CQBrAwULc2hhcmVTdXBwbHkJAGUCBQJEMgUCRDAFAkQwCQCUCgIFA25pbAUKbWludEFtb3VudANtc2cBDHJlaXNzdWVTaGFyZQEGYW1vdW50CQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFA21zZwkAzAgCCQEHUmVpc3N1ZQMFDHNoYXJlQXNzZXRJZAUGYW1vdW50BgUDbmlsA21zZwEFZ2V0RHkECWFzc2V0RnJvbQdhc3NldFRvAmR4C3VzZXJBZGRyZXNzBAJ4cAkBA194cAAECWZyb21JbmRleAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQlhc3NldEZyb20CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUHYXNzZXRUbwIRdW5rbm93biB0b2tlbiBvdXQEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEAmR5CQBlAgkAZQIJAJEDAgUCeHAFB3RvSW5kZXgFAXkAAQQLZmVlRGlzY291bnQJARRjYWxjdWxhdGVGZWVEaXNjb3VudAEJAQdBZGRyZXNzAQkA2QQBBQt1c2VyQWRkcmVzcwQEX2ZlZQkAawMJAG4EBQNmZWUFC2ZlZURpc2NvdW50BQlmZWVTY2FsZTYFB0NFSUxJTkcFAmR5BQlmZWVTY2FsZTYJAJQKAgUDbmlsCQCUCgIJAGUCBQJkeQUEX2ZlZQUEX2ZlZQNtc2cBCGV4Y2hhbmdlAgh0b2tlbk91dAZtaW5fZHkJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAdwYXltZW50CQCRAwIIBQNtc2cIcGF5bWVudHMAAAQHdG9rZW5JbgkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkBAt0b2tlbk91dEI1OAkA2QQBBQh0b2tlbk91dAQCZHgIBQdwYXltZW50BmFtb3VudAQJZnJvbUluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFB3Rva2VuSW4CEHVua25vd24gdG9rZW4gaW4EB3RvSW5kZXgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQhhc3NldElkcwUIdG9rZW5PdXQCEXVua25vd24gdG9rZW4gb3V0BAJ4cAkBA194cAAEAXgJAGQCCQCRAwIFAnhwBQlmcm9tSW5kZXgFAmR4BAF5CQEEZ2V0WQQFCWZyb21JbmRleAUHdG9JbmRleAUBeAUCeHAEA19keQkAZQIJAGUCCQCRAwIFAnhwBQd0b0luZGV4BQF5AAEEC2ZlZURpc2NvdW50CQEUY2FsY3VsYXRlRmVlRGlzY291bnQBCAUDbXNnDG9yaWdpbkNhbGxlcgQEX2ZlZQkAawMFA19keQkAbgQFA2ZlZQULZmVlRGlzY291bnQFCWZlZVNjYWxlNgUHQ0VJTElORwUJZmVlU2NhbGU2BAJkeQkAZQIFA19keQUEX2ZlZQQOZ292ZXJuYW5jZUZlZXMJAGsDBQRfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYDCQEGYXNzZXJ0AQkAZwIFAmR5BQZtaW5fZHkJAAIBAi5FeGNoYW5nZSByZXN1bHRlZCBpbiBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyMjYyMzIyNjQ5BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjI2MjMyMjY0OQJfMQQBaQgFDSR0MDIyNjIzMjI2NDkCXzIDCQAAAgUBaQUJZnJvbUluZGV4CQCUCgIJAM0IAgULbmV3QmFsYW5jZXMJAGQCBQx0b2tlbkJhbGFuY2UFAmR4CQBkAgUBaQABAwkAAAIFAWkFB3RvSW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUDX2R5CQBkAgUBaQABCQCUCgIJAM0IAgULbmV3QmFsYW5jZXMFDHRva2VuQmFsYW5jZQkAZAIFAWkAAQQNJHQwMjI5MDAyMjk2MQoAAiRsBQJ4cAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBD21ha2VOZXdCYWxhbmNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EC25ld0JhbGFuY2VzCAUNJHQwMjI5MDAyMjk2MQJfMQQBaQgFDSR0MDIyOTAwMjI5NjECXzIDCQESY2hlY2tEQXBwVGhyZXNob2xkAQULbmV3QmFsYW5jZXMJAQV0aHJvdwAEAXMJAQVzdGFrZQIIBQdwYXltZW50BmFtb3VudAkBDWdldFN0ckFzc2V0SWQBCAUHcGF5bWVudAdhc3NldElkAwkAAAIFAXMFAXMEAnVzCQEHdW5zdGFrZQIFA19keQUIdG9rZW5PdXQDCQAAAgUCdXMFAnVzBAZscEZlZXMJAGUCBQRfZmVlBQ5nb3Zlcm5hbmNlRmVlcwQHYWlyZHJvcAMJAGYCBQZscEZlZXMAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3Rva2VuT3V0QjU4BQZscEZlZXMFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQd0b2tlbkluBQ1rQXNzZXRCYWxhbmNlBQF4CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHRva2VuT3V0BQ1rQXNzZXRCYWxhbmNlCQBlAgkAkQMCBQJ4cAUHdG9JbmRleAUDX2R5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cGY2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUPbW9uZXlCb3hBZGRyZXNzBQ5nb3Zlcm5hbmNlRmVlcwULdG9rZW5PdXRCNTgFA25pbAkAzAgCBQJkeQkAzAgCBQt0b2tlbk91dEI1OAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwEId2l0aGRyYXcBCm1pbkFtb3VudHMJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECXBtdEFtb3VudAgJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAQKcG10QXNzZXRJZAgJAJEDAggFA21zZwhwYXltZW50cwAAB2Fzc2V0SWQDCQECIT0CBQxzaGFyZUFzc2V0SWQFCnBtdEFzc2V0SWQJAAIBAhV1bmtub3duIHBheW1lbnQgdG9rZW4ECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cMb3JpZ2luQ2FsbGVyCAUDbXNnCHBheW1lbnRzCgERY2FsY1NjcmlwdEFjdGlvbnMCA2FjYwdiYWxhbmNlBA0kdDAyNDI1MjI0MjgwBQNhY2MEDXNjcmlwdEFjdGlvbnMIBQ0kdDAyNDI1MjI0MjgwAl8xBAFpCAUNJHQwMjQyNTIyNDI4MAJfMgQHd0Ftb3VudAkAawMFB2JhbGFuY2UFCXBtdEFtb3VudAULc2hhcmVTdXBwbHkDCQEGYXNzZXJ0AQkAZwIFB3dBbW91bnQJAJEDAgUKbWluQW1vdW50cwUBaQkAAgECMFdpdGhkcmF3YWwgcmVzdWx0ZWQgaW4gZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAQCdXMJAQd1bnN0YWtlAgUHd0Ftb3VudAkAkQMCBQhhc3NldElkcwUBaQMJAAACBQJ1cwUCdXMJAJQKAgkAzggCBQ1zY3JpcHRBY3Rpb25zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAJEDAgUIYXNzZXRJZHMFAWkFDWtBc3NldEJhbGFuY2UJAGUCBQdiYWxhbmNlBQd3QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQd3QW1vdW50CQDZBAEJAJEDAgUIYXNzZXRJZHMFAWkFA25pbAkAZAIFAWkAAQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMjQ3NzAyNDgzOAoAAiRsCQEDX3hwAAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEWNhbGNTY3JpcHRBY3Rpb25zAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQNc2NyaXB0QWN0aW9ucwgFDSR0MDI0NzcwMjQ4MzgCXzEEAWkIBQ0kdDAyNDc3MDI0ODM4Al8yCQDOCAIFDXNjcmlwdEFjdGlvbnMJAMwIAgkBBEJ1cm4CBQxzaGFyZUFzc2V0SWQFCXBtdEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa1NoYXJlQXNzZXRTdXBwbHkJAGUCBQtzaGFyZVN1cHBseQUJcG10QW1vdW50BQNuaWwDbXNnARJ3aXRoZHJhd1dpdGhVbmxvY2sCCm1pbkFtb3VudHMMdW5sb2NrQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkAZwIAAAUMdW5sb2NrQW1vdW50CQACAQIeVW5sb2NrIGFtb3VudCBtdXN0IGJlIHBvc2l0aXZlBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnBmNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50AwkAZgIJAJADAQgFA21zZwhwYXltZW50cwAAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFDHNoYXJlQXNzZXRJZAUKcG10QXNzZXRJZAkAAgECFXVua25vd24gcGF5bWVudCB0b2tlbggJAJEDAggFA21zZwhwYXltZW50cwAABmFtb3VudAAABAZ1bmxvY2sJAPwHBAUOZmFybWluZ0FkZHJlc3MCE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgkApQgBBQR0aGlzCQDMCAIFDHVubG9ja0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sEDndpdGhkcmF3QW1vdW50CQBkAgUJcG10QW1vdW50BQx1bmxvY2tBbW91bnQEA2ludgkA/AcEBQR0aGlzAgh3aXRoZHJhdwkAzAgCBQptaW5BbW91bnRzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDHNoYXJlQXNzZXRJZAUOd2l0aGRyYXdBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuA21zZwETY2FsY1dpdGhkcmF3T25lQ29pbgMLdG9rZW5BbW91bnQIdG9rZW5PdXQEdXNlcgQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCGFzc2V0SWRzBQh0b2tlbk91dAIRdW5rbm93biB0b2tlbiBvdXQJAJQKAgUDbmlsCAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAkBA194cAAFC3Rva2VuQW1vdW50BQFpCQEHQWRkcmVzcwEJANkEAQUEdXNlcgJfMQNtc2cBD3dpdGhkcmF3T25lQ29pbgIIdG9rZW5PdXQJbWluQW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AgkAkAMBCAUDbXNnCHBheW1lbnRzAAEJAAIBAhNzaXplKHBheW1lbnRzKSAhPSAxBApzdXNwaWNpb3VzCQEPY2hlY2tTdXNwaWNpb3VzAAMIBQpzdXNwaWNpb3VzAl8xCQDOCAIJARFzdXNwZW5kU3VzcGljaW91cwEIBQpzdXNwaWNpb3VzAl8yCQEOcmV0dXJuUGF5bWVudHMCCAUDbXNnDG9yaWdpbkNhbGxlcggFA21zZwhwYXltZW50cwQJcG10QW1vdW50CAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50BApwbXRBc3NldElkCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAHYXNzZXRJZAMJAQIhPQIFCnBtdEFzc2V0SWQFDHNoYXJlQXNzZXRJZAkAAgECDXVua25vd24gdG9rZW4ECG91dEluZGV4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUIYXNzZXRJZHMFCHRva2VuT3V0AhF1bmtub3duIHRva2VuIG91dAQLdG9rZW5PdXRCNTgJANkEAQUIdG9rZW5PdXQEAnhwCQEDX3hwAAQNJHQwMjY4MDIyNjg4NAkBFF9jYWxjV2l0aGRyYXdPbmVDb2luBAUCeHAFCXBtdEFtb3VudAUIb3V0SW5kZXgIBQNtc2cMb3JpZ2luQ2FsbGVyBAJkeQgFDSR0MDI2ODAyMjY4ODQCXzEEBmR5X2ZlZQgFDSR0MDI2ODAyMjY4ODQCXzIDCQEGYXNzZXJ0AQkAZwIFAmR5BQltaW5BbW91bnQJAAIBAhhOb3QgZW5vdWdoIGNvaW5zIHJlbW92ZWQEDmdvdmVybmFuY2VGZWVzCQBrAwUGZHlfZmVlBQ1mZWVHb3Zlcm5hbmNlBQlmZWVTY2FsZTYECmR5X2FuZF9mZWUJAGQCBQJkeQUGZHlfZmVlCgEPbWFrZU5ld0JhbGFuY2VzAgNhY2MMdG9rZW5CYWxhbmNlBA0kdDAyNzE0MjI3MTY4BQNhY2MEC25ld0JhbGFuY2VzCAUNJHQwMjcxNDIyNzE2OAJfMQQBaQgFDSR0MDI3MTQyMjcxNjgCXzIDCQAAAgUBaQUIb3V0SW5kZXgJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwkAZQIFDHRva2VuQmFsYW5jZQUKZHlfYW5kX2ZlZQkAZAIFAWkAAQkAlAoCCQDNCAIFC25ld0JhbGFuY2VzBQx0b2tlbkJhbGFuY2UJAGQCBQFpAAEEDSR0MDI3MzM1MjczOTYKAAIkbAUCeHAKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ9tYWtlTmV3QmFsYW5jZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAtuZXdCYWxhbmNlcwgFDSR0MDI3MzM1MjczOTYCXzEEAXYIBQ0kdDAyNzMzNTI3Mzk2Al8yAwkBEmNoZWNrREFwcFRocmVzaG9sZAEFC25ld0JhbGFuY2VzCQEFdGhyb3cABAJ1cwkBB3Vuc3Rha2UCBQpkeV9hbmRfZmVlBQh0b2tlbk91dAMJAAACBQJ1cwUCdXMEBmxwRmVlcwkAZQIFBmR5X2ZlZQUOZ292ZXJuYW5jZUZlZXMEB2FpcmRyb3ADCQBmAgUGbHBGZWVzAAAJAPwHBAUQbHBGYXJtaW5nQWRkcmVzcwIHYWlyRHJvcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt0b2tlbk91dEI1OAUGbHBGZWVzBQNuaWwAAAMJAAACBQdhaXJkcm9wBQdhaXJkcm9wCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQNtc2cMb3JpZ2luQ2FsbGVyBQJkeQULdG9rZW5PdXRCNTgJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkAkQMCBQhhc3NldElkcwUIb3V0SW5kZXgFDWtBc3NldEJhbGFuY2UJAGUCCQCRAwIFAnhwBQhvdXRJbmRleAUKZHlfYW5kX2ZlZQkAzAgCCQEEQnVybgIFDHNoYXJlQXNzZXRJZAUJcG10QW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFD21vbmV5Qm94QWRkcmVzcwUOZ292ZXJuYW5jZUZlZXMFC3Rva2VuT3V0QjU4CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrU2hhcmVBc3NldFN1cHBseQkAZQIFC3NoYXJlU3VwcGx5BQlwbXRBbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgNtc2cBGXdpdGhkcmF3T25lQ29pbldpdGhVbmxvY2sDCHRva2VuT3V0CW1pbkFtb3VudAx1bmxvY2tBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQADCQBnAgAABQx1bmxvY2tBbW91bnQJAAIBAh5VbmxvY2sgYW1vdW50IG11c3QgYmUgcG9zaXRpdmUECnN1c3BpY2lvdXMJAQ9jaGVja1N1c3BpY2lvdXMAAwgFCnN1c3BpY2lvdXMCXzEJAM4IAgkBEXN1c3BlbmRTdXNwaWNpb3VzAQgFCnN1c3BpY2lvdXMCXzIJAQ5yZXR1cm5QYXltZW50cwIIBQNtc2cGY2FsbGVyCAUDbXNnCHBheW1lbnRzBAlwbXRBbW91bnQDCQBmAgkAkAMBCAUDbXNnCHBheW1lbnRzAAADCQECIT0CCQCQAwEIBQNtc2cIcGF5bWVudHMAAQkAAgECE3NpemUocGF5bWVudHMpICE9IDEECnBtdEFzc2V0SWQICQCRAwIIBQNtc2cIcGF5bWVudHMAAAdhc3NldElkAwkBAiE9AgUMc2hhcmVBc3NldElkBQpwbXRBc3NldElkCQACAQIVdW5rbm93biBwYXltZW50IHRva2VuCAkAkQMCCAUDbXNnCHBheW1lbnRzAAAGYW1vdW50AAAEBnVubG9jawkA/AcEBQ5mYXJtaW5nQWRkcmVzcwITd2l0aGRyYXdTaGFyZVRva2VucwkAzAgCCQClCAEFBHRoaXMJAMwIAgUMdW5sb2NrQW1vdW50BQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawQOd2l0aGRyYXdBbW91bnQJAGQCBQlwbXRBbW91bnQFDHVubG9ja0Ftb3VudAQDaW52CQD8BwQFBHRoaXMCD3dpdGhkcmF3T25lQ29pbgkAzAgCBQh0b2tlbk91dAkAzAgCBQltaW5BbW91bnQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMc2hhcmVBc3NldElkBQ53aXRoZHJhd0Ftb3VudAUDbmlsAwkAAAIFA2ludgUDaW52BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DbXNnAQFBAAkAlAoCBQNuaWwJAQJfQQADbXNnAQ9nZXRWaXJ0dWFsUHJpY2UABAFECQEFZ2V0X0QCCQEDX3hwAAkBAl9BAAkAlAoCBQNuaWwJAGsDBQFEBQlQUkVDSVNJT04FC3NoYXJlU3VwcGx5A21zZwEPY2FsY1Rva2VuQW1vdW50AgdhbW91bnRzB2RlcG9zaXQEA2FtcAkBAl9BAAQIYmFsYW5jZXMJAQNfeHAABAJEMAkBB2dldERNZW0CBQhiYWxhbmNlcwUDYW1wCgEPY2FsY05ld0JhbGFuY2VzAgNhY2MHYmFsYW5jZQQNJHQwMjk0MTMyOTQzOQUDYWNjBAtuZXdCYWxhbmNlcwgFDSR0MDI5NDEzMjk0MzkCXzEEAWkIBQ0kdDAyOTQxMzI5NDM5Al8yBApuZXdCYWxhbmNlCQBkAgUHYmFsYW5jZQMFB2RlcG9zaXQJAJEDAgUHYW1vdW50cwUBaQkBAS0BCQCRAwIFB2Ftb3VudHMFAWkJAJQKAgkAzQgCBQtuZXdCYWxhbmNlcwUKbmV3QmFsYW5jZQkAZAIFAWkAAQQLbmV3QmFsYW5jZXMICgACJGwFCGJhbGFuY2VzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEPY2FsY05ld0JhbGFuY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwJfMQQCRDEJAQdnZXRETWVtAgULbmV3QmFsYW5jZXMFA2FtcAQEZGlmZgMFB2RlcG9zaXQJAGUCBQJEMQUCRDAJAGUCBQJEMAUCRDEJAJQKAgUDbmlsCQBrAwUEZGlmZgULc2hhcmVTdXBwbHkFAkQwA21zZwEFcmFtcEECCF9mdXR1cmVBC19mdXR1cmVUaW1lCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDCQEGYXNzZXJ0AQkAZwIFDmJsb2NrVGltZXN0YW1wCQBkAgUOaW5pdGlhbF9BX3RpbWUFDU1JTl9SQU1QX1RJTUUJAAIBAgl0b28gb2Z0ZW4DCQEGYXNzZXJ0AQkAZwIFC19mdXR1cmVUaW1lCQBkAgUOYmxvY2tUaW1lc3RhbXAFDU1JTl9SQU1QX1RJTUUJAAIBAhFpbnN1ZmZpY2llbnQgdGltZQQKX2luaXRpYWxfQQkBAl9BAAMJAQZhc3NlcnQBAwkAZgIFCF9mdXR1cmVBAAAJAGYCBQVNQVhfQQUIX2Z1dHVyZUEHCQACAQIRb3V0IG9mIGJhc2UgcmFuZ2UDCQEGYXNzZXJ0AQMDCQBnAgUIX2Z1dHVyZUEFCl9pbml0aWFsX0EJAGcCCQBoAgUKX2luaXRpYWxfQQUMTUFYX0FfQ0hBTkdFBQhfZnV0dXJlQQcGAwkAZgIFCl9pbml0aWFsX0EFCF9mdXR1cmVBCQBnAgkAaAIFCF9mdXR1cmVBBQxNQVhfQV9DSEFOR0UFCl9pbml0aWFsX0EHCQACAQIMb3V0IG9mIHJhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglpbml0aWFsX0EFCl9pbml0aWFsX0EJAMwIAgkBDEludGVnZXJFbnRyeQICCGZ1dHVyZV9BBQhfZnV0dXJlQQkAzAgCCQEMSW50ZWdlckVudHJ5AgIOaW5pdGlhbF9BX3RpbWUFDmJsb2NrVGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1mdXR1cmVfQV90aW1lBQtfZnV0dXJlVGltZQUDbmlsA21zZwEJc3RvcFJhbXBBAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUDbXNnBAhjdXJyZW50QQkBAl9BAAkAzAgCCQEMSW50ZWdlckVudHJ5AgIJaW5pdGlhbF9BBQhjdXJyZW50QQkAzAgCCQEMSW50ZWdlckVudHJ5AgIIZnV0dXJlX0EFCGN1cnJlbnRBCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5pbml0aWFsX0FfdGltZQUOYmxvY2tUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQICDWZ1dHVyZV9BX3RpbWUFDmJsb2NrVGltZXN0YW1wBQNuaWwDbXNnAQhzaHV0ZG93bgAJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFA21zZwMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluA21zZwEIYWN0aXZhdGUACQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQNtc2cDBQZhY3RpdmUJAQ10aHJvd0lzQWN0aXZlAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgUHa0FjdGl2ZQYJAMwIAgkBC0RlbGV0ZUVudHJ5AQUGa0NhdXNlBQNuaWwDbXNnARl0YWtlSW50b0FjY291bnRFeHRyYUZ1bmRzAAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQNtc2cGY2FsbGVyBQ9tb25leUJveEFkZHJlc3MJAAIBAiZPbmx5IHRoZSB3YWxsZXQgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgQIYmFsYW5jZXMJAQNfeHAACgEOdGFrZUV4dHJhRnVuZHMCA2FjYwdhc3NldElkBA0kdDAzMTc4MTMxNzk5BQNhY2MEA3N1bQgFDSR0MDMxNzgxMzE3OTkCXzEEAWkIBQ0kdDAzMTc4MTMxNzk5Al8yBAh0b2tlbkI1OAkA2QQBBQdhc3NldElkBAhyQmFsYW5jZQkAZAIJAPAHAgUEdGhpcwUIdG9rZW5CNTgJAQxzdGFrZWRBbW91bnQBBQh0b2tlbkI1OAQMZW5yb2xsQW1vdW50CQBlAgUIckJhbGFuY2UJAJEDAgUIYmFsYW5jZXMFAWkDCQBmAgAABQxlbnJvbGxBbW91bnQJAQdzdXNwZW5kAQkArAICAiBFbnJvbGwgYW1vdW50IG5lZ2F0aXZlIGZvciBhc3NldAUHYXNzZXRJZAQHYWlyZHJvcAMJAGYCBQxlbnJvbGxBbW91bnQAAAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAgdhaXJEcm9wBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHRva2VuQjU4BQxlbnJvbGxBbW91bnQFA25pbAAAAwkAAAIFB2FpcmRyb3AFB2FpcmRyb3AJAJQKAgkAZAIFA3N1bQUMZW5yb2xsQW1vdW50CQBkAgUBaQABCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAFrCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEOdGFrZUV4dHJhRnVuZHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPAwkAAAIIBQFrAl8xAAAJAAIBAhBObyBtb25leSB0byB0YWtlBQNuaWwBAnR4AQZ2ZXJpZnkABBNtdWx0aVNpZ25lZEJ5QWRtaW5zBBJhZG1pblB1YktleTFTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQxhZG1pblB1YktleTEAAQAABBJhZG1pblB1YktleTJTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwABBQxhZG1pblB1YktleTIAAQAABBJhZG1pblB1YktleTNTaWduZWQDCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwACBQxhZG1pblB1YktleTMAAQAACQBnAgkAZAIJAGQCBRJhZG1pblB1YktleTFTaWduZWQFEmFkbWluUHViS2V5MlNpZ25lZAUSYWRtaW5QdWJLZXkzU2lnbmVkAAIEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBANpbnYFByRtYXRjaDAEE2NhbGxUYWtlSW50b0FjY291bnQDCQAAAggFA2ludgRkQXBwBQR0aGlzCQAAAggFA2ludghmdW5jdGlvbgIZdGFrZUludG9BY2NvdW50RXh0cmFGdW5kcwcEDXNpZ25lZEJ5QWRtaW4DAwMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MgYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MwYJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFEWFkbWluUHViS2V5SW52b2tlAwMFE2NhbGxUYWtlSW50b0FjY291bnQFDXNpZ25lZEJ5QWRtaW4HBgUTbXVsdGlTaWduZWRCeUFkbWlucwUTbXVsdGlTaWduZWRCeUFkbWluczYulaQ=", "height": 2240475, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 6jWLsSCEiqv863AGbEtUcMNChrGXDasyZyWVvYS9mYbp Next: none Diff:
Old | New | Differences | |
---|---|---|---|
39 | 39 | ||
40 | 40 | let s = "_SWOP_amount" | |
41 | 41 | ||
42 | - | let t = " | |
42 | + | let t = "admin_pub_1" | |
43 | 43 | ||
44 | - | let u = " | |
44 | + | let u = "admin_pub_2" | |
45 | 45 | ||
46 | - | let v = " | |
46 | + | let v = "admin_pub_3" | |
47 | 47 | ||
48 | - | let w = " | |
48 | + | let w = "admin_invoke_pub" | |
49 | 49 | ||
50 | - | let x = " | |
50 | + | let x = "money_box_address" | |
51 | 51 | ||
52 | - | let y = " | |
52 | + | let y = "governance_address" | |
53 | 53 | ||
54 | - | let z = " | |
54 | + | let z = "voting_address" | |
55 | 55 | ||
56 | - | let B = " | |
56 | + | let B = "farming_address" | |
57 | 57 | ||
58 | - | let C = " | |
58 | + | let C = "lp_farming" | |
59 | 59 | ||
60 | - | let E = | |
60 | + | let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
61 | 61 | ||
62 | - | let F = "money_box_address" | |
63 | - | ||
64 | - | let G = "governance_address" | |
65 | - | ||
66 | - | let H = "voting_address" | |
67 | - | ||
68 | - | let I = "farming_address" | |
69 | - | ||
70 | - | let J = "lp_farming" | |
71 | - | ||
72 | - | let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
73 | - | ||
74 | - | func L (M) = { | |
75 | - | let N = getString(K, M) | |
76 | - | if ($isInstanceOf(N, "String")) | |
62 | + | func F (G) = { | |
63 | + | let H = getString(E, G) | |
64 | + | if ($isInstanceOf(H, "String")) | |
77 | 65 | then { | |
78 | - | let | |
79 | - | fromBase58String( | |
66 | + | let I = H | |
67 | + | fromBase58String(I) | |
80 | 68 | } | |
81 | 69 | else { | |
82 | - | let | |
83 | - | throw(( | |
70 | + | let J = H | |
71 | + | throw((G + "is empty")) | |
84 | 72 | } | |
85 | 73 | } | |
86 | 74 | ||
87 | 75 | ||
88 | - | let | |
76 | + | let K = F(t) | |
89 | 77 | ||
90 | - | let | |
78 | + | let L = F(u) | |
91 | 79 | ||
92 | - | let | |
80 | + | let M = F(v) | |
93 | 81 | ||
94 | - | let | |
82 | + | let N = F(w) | |
95 | 83 | ||
96 | - | let | |
84 | + | let O = Address(F(x)) | |
97 | 85 | ||
98 | - | let | |
86 | + | let P = Address(F(y)) | |
99 | 87 | ||
100 | - | let | |
88 | + | let Q = Address(F(p)) | |
101 | 89 | ||
102 | - | let | |
90 | + | let R = Address(F(z)) | |
103 | 91 | ||
104 | - | let | |
92 | + | let S = Address(F(B)) | |
105 | 93 | ||
106 | - | let | |
94 | + | let T = Address(F(C)) | |
107 | 95 | ||
108 | - | let | |
96 | + | let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
109 | 97 | ||
110 | - | let | |
98 | + | let V = [toBase58String(U)] | |
111 | 99 | ||
112 | - | let | |
100 | + | let W = getBooleanValue(this, j) | |
113 | 101 | ||
114 | - | let | |
102 | + | let X = fromBase58String(getStringValue(this, l)) | |
115 | 103 | ||
116 | - | let | |
104 | + | let Y = getIntegerValue(this, m) | |
117 | 105 | ||
118 | - | let | |
106 | + | let Z = 1000000 | |
119 | 107 | ||
120 | - | let | |
108 | + | let aa = getIntegerValue(this, n) | |
121 | 109 | ||
122 | - | let | |
110 | + | let ab = fraction(40, Z, 100) | |
123 | 111 | ||
124 | - | let | |
112 | + | let ac = getIntegerValue(this, "initial_A") | |
125 | 113 | ||
126 | - | let | |
114 | + | let ad = getIntegerValue(this, "future_A") | |
127 | 115 | ||
128 | - | let | |
116 | + | let ae = valueOrElse(getInteger(this, "initial_A_time"), 0) | |
129 | 117 | ||
130 | - | let | |
118 | + | let af = valueOrElse(getInteger(this, "future_A_time"), 0) | |
131 | 119 | ||
132 | - | let | |
120 | + | let ag = split(getStringValue(this, h), ",") | |
133 | 121 | ||
134 | - | let | |
122 | + | let ah = size(ag) | |
135 | 123 | ||
136 | - | let ao = valueOrElse(getInteger(this, "initial_A_time"), 0) | |
137 | - | ||
138 | - | let ap = valueOrElse(getInteger(this, "future_A_time"), 0) | |
139 | - | ||
140 | - | let aq = split(getStringValue(this, h), ",") | |
141 | - | ||
142 | - | let ar = size(aq) | |
143 | - | ||
144 | - | func as (at) = [BooleanEntry(j, false), StringEntry(k, at)] | |
124 | + | func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)] | |
145 | 125 | ||
146 | 126 | ||
147 | - | func | |
127 | + | func ak () = throw("DApp is already active") | |
148 | 128 | ||
149 | 129 | ||
150 | - | func | |
130 | + | func al () = if (W) | |
151 | 131 | then unit | |
152 | 132 | else throw("DApp is inactive at this moment") | |
153 | 133 | ||
154 | 134 | ||
155 | - | func | |
135 | + | func am (an) = if (containsElement([K, L, M], an.callerPublicKey)) | |
156 | 136 | then unit | |
157 | 137 | else throw("Only admin can call this function") | |
158 | 138 | ||
159 | 139 | ||
160 | - | func | |
140 | + | func ao (an) = if ((this == an.caller)) | |
161 | 141 | then unit | |
162 | 142 | else throw("Only contract itself can call this function") | |
163 | 143 | ||
164 | 144 | ||
165 | - | let | |
145 | + | let ap = toBigInt(2) | |
166 | 146 | ||
167 | - | let | |
147 | + | let aq = height | |
168 | 148 | ||
169 | - | func | |
149 | + | func ar (as) = if (as) | |
170 | 150 | then false | |
171 | 151 | else true | |
172 | 152 | ||
173 | 153 | ||
174 | - | func | |
175 | - | let | |
176 | - | let | |
177 | - | if ($isInstanceOf( | |
154 | + | func at (au) = { | |
155 | + | let av = { | |
156 | + | let H = au | |
157 | + | if ($isInstanceOf(H, "Address")) | |
178 | 158 | then { | |
179 | - | let | |
180 | - | toString( | |
159 | + | let aw = H | |
160 | + | toString(aw) | |
181 | 161 | } | |
182 | - | else if ($isInstanceOf( | |
162 | + | else if ($isInstanceOf(H, "String")) | |
183 | 163 | then { | |
184 | - | let | |
185 | - | | |
164 | + | let aw = H | |
165 | + | aw | |
186 | 166 | } | |
187 | 167 | else throw("Unknow type of user Addr") | |
188 | 168 | } | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | if (if (( | |
193 | - | then (parseIntValue( | |
169 | + | let ax = valueOrElse(getInteger(P, (av + s)), 0) | |
170 | + | let ay = split(getStringValue(E, r), ",") | |
171 | + | let az = split(getStringValue(E, q), ",") | |
172 | + | if (if ((ax >= parseIntValue(ay[0]))) | |
173 | + | then (parseIntValue(ay[1]) > ax) | |
194 | 174 | else false) | |
195 | - | then ( | |
196 | - | else if (if (( | |
197 | - | then (parseIntValue( | |
175 | + | then (Z - parseIntValue(az[0])) | |
176 | + | else if (if ((ax >= parseIntValue(ay[1]))) | |
177 | + | then (parseIntValue(ay[2]) > ax) | |
198 | 178 | else false) | |
199 | - | then ( | |
200 | - | else if (if (( | |
201 | - | then (parseIntValue( | |
179 | + | then (Z - parseIntValue(az[1])) | |
180 | + | else if (if ((ax >= parseIntValue(ay[2]))) | |
181 | + | then (parseIntValue(ay[3]) > ax) | |
202 | 182 | else false) | |
203 | - | then ( | |
204 | - | else if (if (( | |
205 | - | then (parseIntValue( | |
183 | + | then (Z - parseIntValue(az[2])) | |
184 | + | else if (if ((ax >= parseIntValue(ay[3]))) | |
185 | + | then (parseIntValue(ay[4]) > ax) | |
206 | 186 | else false) | |
207 | - | then ( | |
208 | - | else if (( | |
209 | - | then ( | |
210 | - | else | |
187 | + | then (Z - parseIntValue(az[3])) | |
188 | + | else if ((ax >= parseIntValue(ay[4]))) | |
189 | + | then (Z - parseIntValue(az[4])) | |
190 | + | else Z | |
211 | 191 | } | |
212 | 192 | ||
213 | 193 | ||
214 | - | func | |
215 | - | let | |
216 | - | let | |
217 | - | if (( | |
194 | + | func aA () = { | |
195 | + | let aB = af | |
196 | + | let aC = ad | |
197 | + | if ((aB > aq)) | |
218 | 198 | then { | |
219 | - | let | |
220 | - | let | |
221 | - | if (( | |
222 | - | then ( | |
223 | - | else ( | |
199 | + | let aD = ac | |
200 | + | let aE = ae | |
201 | + | if ((aC > aD)) | |
202 | + | then (aD + (((aC - aD) * (aq - aE)) / (aB - aE))) | |
203 | + | else (aD - (((aD - aC) * (aq - aE)) / (aB - aE))) | |
224 | 204 | } | |
225 | - | else | |
205 | + | else aC | |
226 | 206 | } | |
227 | 207 | ||
228 | 208 | ||
229 | - | func | |
230 | - | func | |
209 | + | func aF () = { | |
210 | + | func aG (aH,aI) = (aH :+ valueOrElse(getInteger(this, (aI + i)), 0)) | |
231 | 211 | ||
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | func | |
236 | - | then | |
237 | - | else | |
212 | + | let aJ = ag | |
213 | + | let aK = size(aJ) | |
214 | + | let aL = nil | |
215 | + | func aM (aN,aO) = if ((aO >= aK)) | |
216 | + | then aN | |
217 | + | else aG(aN, aJ[aO]) | |
238 | 218 | ||
239 | - | func | |
240 | - | then | |
219 | + | func aP (aN,aO) = if ((aO >= aK)) | |
220 | + | then aN | |
241 | 221 | else throw("List size exceeds 15") | |
242 | 222 | ||
243 | - | | |
223 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
244 | 224 | } | |
245 | 225 | ||
246 | 226 | ||
247 | - | func | |
227 | + | func aQ (aR) = aR | |
248 | 228 | ||
249 | 229 | ||
250 | - | func | |
230 | + | func aS (aH,aT) = (aH + aT) | |
251 | 231 | ||
252 | 232 | ||
253 | - | func | |
254 | - | let | |
255 | - | if ($isInstanceOf( | |
256 | - | then | |
257 | - | else throw(($getType(invoke(this, "D", [ | |
233 | + | func aU (aR,aV) = { | |
234 | + | let aW = invoke(this, "D", [aR, aV], nil) | |
235 | + | if ($isInstanceOf(aW, "Int")) | |
236 | + | then aW | |
237 | + | else throw(($getType(invoke(this, "D", [aR, aV], nil)) + " couldn't be cast to Int")) | |
258 | 238 | } | |
259 | 239 | ||
260 | 240 | ||
261 | - | func | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | func | |
267 | - | then | |
268 | - | else | |
241 | + | func aX (aR,aV) = { | |
242 | + | let aY = { | |
243 | + | let aJ = aR | |
244 | + | let aK = size(aJ) | |
245 | + | let aL = 0 | |
246 | + | func aM (aN,aO) = if ((aO >= aK)) | |
247 | + | then aN | |
248 | + | else aS(aN, aJ[aO]) | |
269 | 249 | ||
270 | - | func | |
271 | - | then | |
250 | + | func aP (aN,aO) = if ((aO >= aK)) | |
251 | + | then aN | |
272 | 252 | else throw("List size exceeds 15") | |
273 | 253 | ||
274 | - | | |
254 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
275 | 255 | } | |
276 | - | if (( | |
256 | + | if ((aY == 0)) | |
277 | 257 | then 0 | |
278 | 258 | else { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | func | |
283 | - | then | |
259 | + | let aZ = (aV * ah) | |
260 | + | let ba = (toBigInt(aZ) * toBigInt(aY)) | |
261 | + | let bb = toBigInt((aZ - 1)) | |
262 | + | func bc (aH,an) = if ((aH._2 == true)) | |
263 | + | then aH | |
284 | 264 | else { | |
285 | - | let | |
286 | - | func | |
287 | - | then (( | |
288 | - | else | |
265 | + | let bd = aH._1 | |
266 | + | func be (bf,an) = if ((ah > an)) | |
267 | + | then ((bf * bd) / (toBigInt(aR[an]) * toBigInt(ah))) | |
268 | + | else bf | |
289 | 269 | ||
290 | - | let | |
291 | - | let | |
292 | - | let | |
293 | - | let | |
294 | - | func | |
295 | - | then | |
296 | - | else | |
270 | + | let bf = { | |
271 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
272 | + | let aK = size(aJ) | |
273 | + | let aL = bd | |
274 | + | func bg (aN,aO) = if ((aO >= aK)) | |
275 | + | then aN | |
276 | + | else be(aN, aJ[aO]) | |
297 | 277 | ||
298 | - | func | |
299 | - | then | |
278 | + | func bh (aN,aO) = if ((aO >= aK)) | |
279 | + | then aN | |
300 | 280 | else throw("List size exceeds 15") | |
301 | 281 | ||
302 | - | | |
282 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
303 | 283 | } | |
304 | - | let | |
305 | - | if (( | |
306 | - | then if ((1 >= toInt(( | |
307 | - | then $Tuple2( | |
308 | - | else $Tuple2( | |
309 | - | else if ((1 >= toInt(( | |
310 | - | then $Tuple2( | |
311 | - | else $Tuple2( | |
284 | + | let bi = fraction((ba + (toBigInt(ah) * bf)), bd, ((bb * bd) + (toBigInt((ah + 1)) * bf))) | |
285 | + | if ((bi > bd)) | |
286 | + | then if ((1 >= toInt((bi - bd)))) | |
287 | + | then $Tuple2(bi, true) | |
288 | + | else $Tuple2(bi, false) | |
289 | + | else if ((1 >= toInt((bd - bi)))) | |
290 | + | then $Tuple2(bi, true) | |
291 | + | else $Tuple2(bi, false) | |
312 | 292 | } | |
313 | 293 | ||
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | func | |
319 | - | then | |
320 | - | else | |
294 | + | let bj = { | |
295 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
296 | + | let aK = size(aJ) | |
297 | + | let aL = $Tuple2(toBigInt(aY), false) | |
298 | + | func bg (aN,aO) = if ((aO >= aK)) | |
299 | + | then aN | |
300 | + | else bc(aN, aJ[aO]) | |
321 | 301 | ||
322 | - | func | |
323 | - | then | |
302 | + | func bh (aN,aO) = if ((aO >= aK)) | |
303 | + | then aN | |
324 | 304 | else throw("List size exceeds 15") | |
325 | 305 | ||
326 | - | | |
306 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
327 | 307 | } | |
328 | - | let | |
329 | - | let | |
330 | - | if (( | |
331 | - | then throw(("get_D() not finished with " + toString( | |
332 | - | else toInt( | |
308 | + | let bi = bj._1 | |
309 | + | let bk = bj._2 | |
310 | + | if ((bk == false)) | |
311 | + | then throw(("get_D() not finished with " + toString(bi))) | |
312 | + | else toInt(bi) | |
333 | 313 | } | |
334 | 314 | } | |
335 | 315 | ||
336 | 316 | ||
337 | - | func | |
317 | + | func bl (aR,aV) = aU(aQ(aR), aV) | |
338 | 318 | ||
339 | 319 | ||
340 | - | func | |
320 | + | func bm (bn,bo,bp,bq) = if (ar((bn != bo))) | |
341 | 321 | then throw("same coin") | |
342 | - | else if ( | |
343 | - | then ( | |
322 | + | else if (ar(if ((bo >= 0)) | |
323 | + | then (bn >= 0) | |
344 | 324 | else false)) | |
345 | 325 | then throw("below zero") | |
346 | - | else if ( | |
347 | - | then ( | |
326 | + | else if (ar(if ((ah > bo)) | |
327 | + | then (ah > bn) | |
348 | 328 | else false)) | |
349 | 329 | then throw("above N_COINS") | |
350 | 330 | else { | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | func | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | then | |
360 | - | else | |
361 | - | if (if (( | |
362 | - | then ( | |
331 | + | let aV = aA() | |
332 | + | let bi = aU(bq, aV) | |
333 | + | let aZ = (aV * ah) | |
334 | + | func br (aH,an) = { | |
335 | + | let bs = aH | |
336 | + | let bt = bs._1 | |
337 | + | let bu = bs._2 | |
338 | + | let bv = if ((bn == an)) | |
339 | + | then bp | |
340 | + | else bq[an] | |
341 | + | if (if ((an != bo)) | |
342 | + | then (ah > an) | |
363 | 343 | else false) | |
364 | - | then $Tuple2(( | |
365 | - | else $Tuple2( | |
344 | + | then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah)))) | |
345 | + | else $Tuple2(bt, bu) | |
366 | 346 | } | |
367 | 347 | ||
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | func | |
373 | - | then | |
374 | - | else | |
348 | + | let bw = { | |
349 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
350 | + | let aK = size(aJ) | |
351 | + | let aL = $Tuple2(0, toBigInt(bi)) | |
352 | + | func aM (aN,aO) = if ((aO >= aK)) | |
353 | + | then aN | |
354 | + | else br(aN, aJ[aO]) | |
375 | 355 | ||
376 | - | func | |
377 | - | then | |
356 | + | func aP (aN,aO) = if ((aO >= aK)) | |
357 | + | then aN | |
378 | 358 | else throw("List size exceeds 15") | |
379 | 359 | ||
380 | - | | |
360 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
381 | 361 | } | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | func | |
387 | - | then | |
362 | + | let bt = bw._1 | |
363 | + | let bx = bw._2 | |
364 | + | let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah))) | |
365 | + | let by = toBigInt(((bt + (bi / aZ)) - bi)) | |
366 | + | func bz (aH,bA) = if ((aH._2 == true)) | |
367 | + | then aH | |
388 | 368 | else { | |
389 | - | let | |
390 | - | let | |
391 | - | if (( | |
392 | - | then if ((1 >= toInt(( | |
393 | - | then $Tuple2( | |
394 | - | else $Tuple2( | |
395 | - | else if ((1 >= toInt(( | |
396 | - | then $Tuple2( | |
397 | - | else $Tuple2( | |
369 | + | let bB = aH._1 | |
370 | + | let bC = (((bB * bB) + bu) / ((ap * bB) + by)) | |
371 | + | if ((bC > bB)) | |
372 | + | then if ((1 >= toInt((bC - bB)))) | |
373 | + | then $Tuple2(bC, true) | |
374 | + | else $Tuple2(bC, false) | |
375 | + | else if ((1 >= toInt((bB - bC)))) | |
376 | + | then $Tuple2(bC, true) | |
377 | + | else $Tuple2(bC, false) | |
398 | 378 | } | |
399 | 379 | ||
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let | |
404 | - | func | |
405 | - | then | |
406 | - | else | |
380 | + | let bD = { | |
381 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] | |
382 | + | let aK = size(aJ) | |
383 | + | let aL = $Tuple2(toBigInt(bi), false) | |
384 | + | func bg (aN,aO) = if ((aO >= aK)) | |
385 | + | then aN | |
386 | + | else bz(aN, aJ[aO]) | |
407 | 387 | ||
408 | - | func | |
409 | - | then | |
388 | + | func bh (aN,aO) = if ((aO >= aK)) | |
389 | + | then aN | |
410 | 390 | else throw("List size exceeds 16") | |
411 | 391 | ||
412 | - | | |
392 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16) | |
413 | 393 | } | |
414 | - | let | |
415 | - | let | |
416 | - | if (( | |
417 | - | then throw(("getY() not finished with " + toString( | |
418 | - | else toInt( | |
394 | + | let bC = bD._1 | |
395 | + | let bk = bD._2 | |
396 | + | if ((bk == false)) | |
397 | + | then throw(("getY() not finished with " + toString(bC))) | |
398 | + | else toInt(bC) | |
419 | 399 | } | |
420 | 400 | ||
421 | 401 | ||
422 | - | func | |
402 | + | func bE (bF,bn,aR,bi) = if (ar((bn >= 0))) | |
423 | 403 | then throw("i below zero") | |
424 | - | else if ( | |
404 | + | else if (ar((ah > bn))) | |
425 | 405 | then throw("i above N_COINS") | |
426 | 406 | else { | |
427 | - | let | |
428 | - | func | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | let | |
433 | - | then ( | |
407 | + | let aZ = (bF * ah) | |
408 | + | func br (aH,an) = { | |
409 | + | let bG = aH | |
410 | + | let bt = bG._1 | |
411 | + | let bu = bG._2 | |
412 | + | let bv = if (if ((bn != an)) | |
413 | + | then (ah > an) | |
434 | 414 | else false) | |
435 | - | then | |
415 | + | then aR[an] | |
436 | 416 | else 0 | |
437 | - | if (if (( | |
438 | - | then ( | |
417 | + | if (if ((ah > an)) | |
418 | + | then (bn != an) | |
439 | 419 | else false) | |
440 | - | then $Tuple2(( | |
441 | - | else $Tuple2( | |
420 | + | then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah)))) | |
421 | + | else $Tuple2(bt, bu) | |
442 | 422 | } | |
443 | 423 | ||
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | func | |
449 | - | then | |
450 | - | else | |
424 | + | let bH = { | |
425 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
426 | + | let aK = size(aJ) | |
427 | + | let aL = $Tuple2(0, toBigInt(bi)) | |
428 | + | func aM (aN,aO) = if ((aO >= aK)) | |
429 | + | then aN | |
430 | + | else br(aN, aJ[aO]) | |
451 | 431 | ||
452 | - | func | |
453 | - | then | |
432 | + | func aP (aN,aO) = if ((aO >= aK)) | |
433 | + | then aN | |
454 | 434 | else throw("List size exceeds 15") | |
455 | 435 | ||
456 | - | | |
436 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
457 | 437 | } | |
458 | - | let | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | func | |
463 | - | then | |
438 | + | let bt = bH._1 | |
439 | + | let bx = bH._2 | |
440 | + | let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah))) | |
441 | + | let by = toBigInt(((bt + (bi / aZ)) - bi)) | |
442 | + | func bI (aH,an) = if ((aH._2 == true)) | |
443 | + | then aH | |
464 | 444 | else { | |
465 | - | let | |
466 | - | let | |
467 | - | if (( | |
468 | - | then if ((1 >= toInt(( | |
469 | - | then $Tuple2( | |
470 | - | else $Tuple2( | |
471 | - | else if ((1 >= toInt(( | |
472 | - | then $Tuple2( | |
473 | - | else $Tuple2( | |
445 | + | let bB = aH._1 | |
446 | + | let bC = (((bB * bB) + bu) / ((ap * bB) + by)) | |
447 | + | if ((bC > bB)) | |
448 | + | then if ((1 >= toInt((bC - bB)))) | |
449 | + | then $Tuple2(bC, true) | |
450 | + | else $Tuple2(bC, false) | |
451 | + | else if ((1 >= toInt((bB - bC)))) | |
452 | + | then $Tuple2(bC, true) | |
453 | + | else $Tuple2(bC, false) | |
474 | 454 | } | |
475 | 455 | ||
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | func | |
481 | - | then | |
482 | - | else | |
456 | + | let bJ = { | |
457 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] | |
458 | + | let aK = size(aJ) | |
459 | + | let aL = $Tuple2(toBigInt(bi), false) | |
460 | + | func bg (aN,aO) = if ((aO >= aK)) | |
461 | + | then aN | |
462 | + | else bI(aN, aJ[aO]) | |
483 | 463 | ||
484 | - | func | |
485 | - | then | |
464 | + | func bh (aN,aO) = if ((aO >= aK)) | |
465 | + | then aN | |
486 | 466 | else throw("List size exceeds 16") | |
487 | 467 | ||
488 | - | | |
468 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16) | |
489 | 469 | } | |
490 | - | let | |
491 | - | let | |
492 | - | if (( | |
493 | - | then throw(("get_y_D() not finished with " + toString( | |
494 | - | else toInt( | |
470 | + | let bC = bJ._1 | |
471 | + | let bk = bJ._2 | |
472 | + | if ((bk == false)) | |
473 | + | then throw(("get_y_D() not finished with " + toString(bC))) | |
474 | + | else toInt(bC) | |
495 | 475 | } | |
496 | 476 | ||
497 | 477 | ||
498 | - | func | |
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | let | |
506 | - | let | |
507 | - | func | |
508 | - | let | |
509 | - | let | |
510 | - | let | |
511 | - | let | |
512 | - | then (fraction( | |
513 | - | else ( | |
514 | - | $Tuple2(( | |
478 | + | func bK (aR,bL,an,bM) = { | |
479 | + | let bN = at(bM) | |
480 | + | let aV = aA() | |
481 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
482 | + | let bP = Y | |
483 | + | let bQ = aU(aR, aV) | |
484 | + | let bR = (bQ - fraction(bL, bQ, bP)) | |
485 | + | let bS = bE(aV, an, aR, bR) | |
486 | + | let bT = (aR[an] - bS) | |
487 | + | func bU (aH,bV) = { | |
488 | + | let bW = aH | |
489 | + | let bX = bW._1 | |
490 | + | let bY = bW._2 | |
491 | + | let bZ = if ((bY == an)) | |
492 | + | then (fraction(bV, bR, bQ) - bS) | |
493 | + | else (bV - fraction(bV, bR, bQ)) | |
494 | + | $Tuple2((bX :+ (bV - fraction(bO, bZ, Z))), (bY + 1)) | |
515 | 495 | } | |
516 | 496 | ||
517 | - | let | |
518 | - | let | |
519 | - | let | |
520 | - | let | |
521 | - | func | |
522 | - | then | |
523 | - | else | |
497 | + | let ca = { | |
498 | + | let aJ = aR | |
499 | + | let aK = size(aJ) | |
500 | + | let aL = $Tuple2(nil, 0) | |
501 | + | func aM (aN,aO) = if ((aO >= aK)) | |
502 | + | then aN | |
503 | + | else bU(aN, aJ[aO]) | |
524 | 504 | ||
525 | - | func | |
526 | - | then | |
505 | + | func aP (aN,aO) = if ((aO >= aK)) | |
506 | + | then aN | |
527 | 507 | else throw("List size exceeds 15") | |
528 | 508 | ||
529 | - | | |
509 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
530 | 510 | } | |
531 | - | let | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | $Tuple2( | |
511 | + | let bX = ca._1 | |
512 | + | let bY = ca._2 | |
513 | + | let cb = bX[an] | |
514 | + | let cc = ((cb - bE(aV, an, bX, bR)) - 1) | |
515 | + | $Tuple2(cc, (bT - cc)) | |
536 | 516 | } | |
537 | 517 | ||
538 | 518 | ||
539 | - | func | |
540 | - | let | |
541 | - | if ($isInstanceOf( | |
519 | + | func cd (aI) = { | |
520 | + | let H = aI | |
521 | + | if ($isInstanceOf(H, "ByteVector")) | |
542 | 522 | then { | |
543 | - | let | |
544 | - | toBase58String( | |
523 | + | let ce = H | |
524 | + | toBase58String(ce) | |
545 | 525 | } | |
546 | - | else if ($isInstanceOf( | |
526 | + | else if ($isInstanceOf(H, "Unit")) | |
547 | 527 | then { | |
548 | - | let | |
528 | + | let cf = H | |
549 | 529 | "WAVES" | |
550 | 530 | } | |
551 | 531 | else throw("Match error") | |
552 | 532 | } | |
553 | 533 | ||
554 | 534 | ||
555 | - | func | |
556 | - | then $Tuple2("lockNeutrino", | |
557 | - | else $Tuple2("unlockNeutrino", | |
535 | + | func cg (ch,aI) = if (ch) | |
536 | + | then $Tuple2("lockNeutrino", Q) | |
537 | + | else $Tuple2("unlockNeutrino", Q) | |
558 | 538 | ||
559 | 539 | ||
560 | - | func | |
540 | + | func ci (ch,cj,aI) = if (ch) | |
561 | 541 | then { | |
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | $Tuple4( | |
542 | + | let ck = cg(ch, aI) | |
543 | + | let cl = ck._1 | |
544 | + | let cm = ck._2 | |
545 | + | $Tuple4(cl, cm, nil, [AttachedPayment(aI, cj)]) | |
566 | 546 | } | |
567 | 547 | else { | |
568 | - | let | |
569 | - | let | |
570 | - | let | |
571 | - | $Tuple4( | |
548 | + | let cn = cg(ch, aI) | |
549 | + | let cl = cn._1 | |
550 | + | let cm = cn._2 | |
551 | + | $Tuple4(cl, cm, [cj, toBase58String(aI)], nil) | |
572 | 552 | } | |
573 | 553 | ||
574 | 554 | ||
575 | - | func | |
555 | + | func ch (cj,co) = if (containsElement(V, co)) | |
576 | 556 | then { | |
577 | - | let | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | invoke( | |
557 | + | let cp = ci(true, cj, fromBase58String(co)) | |
558 | + | let cl = cp._1 | |
559 | + | let cq = cp._2 | |
560 | + | let cr = cp._3 | |
561 | + | let cs = cp._4 | |
562 | + | invoke(cq, cl, cr, cs) | |
583 | 563 | } | |
584 | 564 | else 0 | |
585 | 565 | ||
586 | 566 | ||
587 | - | func | |
567 | + | func ct (cj,co) = if (containsElement(V, co)) | |
588 | 568 | then { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | invoke( | |
569 | + | let cu = ci(false, cj, fromBase58String(co)) | |
570 | + | let cl = cu._1 | |
571 | + | let cq = cu._2 | |
572 | + | let cr = cu._3 | |
573 | + | let cs = cu._4 | |
574 | + | invoke(cq, cl, cr, cs) | |
595 | 575 | } | |
596 | 576 | else 0 | |
597 | 577 | ||
598 | 578 | ||
599 | - | func | |
600 | - | let | |
601 | - | let | |
602 | - | if ($isInstanceOf( | |
579 | + | func cv (aI) = { | |
580 | + | let cw = { | |
581 | + | let H = aI | |
582 | + | if ($isInstanceOf(H, "ByteVector")) | |
603 | 583 | then { | |
604 | - | let | |
605 | - | if (( | |
606 | - | then getInteger( | |
584 | + | let cx = H | |
585 | + | if ((cx == U)) | |
586 | + | then getInteger(Q, ((("rpd_balance_" + toBase58String(cx)) + "_") + toString(this))) | |
607 | 587 | else 0 | |
608 | 588 | } | |
609 | - | else if ($isInstanceOf( | |
589 | + | else if ($isInstanceOf(H, "Unit")) | |
610 | 590 | then 0 | |
611 | 591 | else throw("Match error") | |
612 | 592 | } | |
613 | - | let | |
614 | - | if ($isInstanceOf( | |
593 | + | let H = cw | |
594 | + | if ($isInstanceOf(H, "Int")) | |
615 | 595 | then { | |
616 | - | let | |
617 | - | | |
596 | + | let an = H | |
597 | + | an | |
618 | 598 | } | |
619 | 599 | else 0 | |
620 | 600 | } | |
621 | 601 | ||
622 | 602 | ||
623 | - | func | |
624 | - | let | |
625 | - | func | |
626 | - | let | |
627 | - | let | |
628 | - | let | |
629 | - | if ( | |
630 | - | then $Tuple2( | |
603 | + | func cy () = { | |
604 | + | let cz = aF() | |
605 | + | func cA (aH,aI) = { | |
606 | + | let cB = aH | |
607 | + | let cC = cB._1 | |
608 | + | let an = cB._2 | |
609 | + | if (cC) | |
610 | + | then $Tuple2(cC, an) | |
631 | 611 | else { | |
632 | - | let | |
633 | - | if (( | |
634 | - | then $Tuple2(true, | |
635 | - | else $Tuple2(false, ( | |
612 | + | let cD = (assetBalance(this, fromBase58String(aI)) + cv(fromBase58String(aI))) | |
613 | + | if ((cz[an] > cD)) | |
614 | + | then $Tuple2(true, an) | |
615 | + | else $Tuple2(false, (an + 1)) | |
636 | 616 | } | |
637 | 617 | } | |
638 | 618 | ||
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | func | |
643 | - | then | |
644 | - | else | |
619 | + | let aJ = ag | |
620 | + | let aK = size(aJ) | |
621 | + | let aL = $Tuple2(false, 0) | |
622 | + | func aM (aN,aO) = if ((aO >= aK)) | |
623 | + | then aN | |
624 | + | else cA(aN, aJ[aO]) | |
645 | 625 | ||
646 | - | func | |
647 | - | then | |
626 | + | func aP (aN,aO) = if ((aO >= aK)) | |
627 | + | then aN | |
648 | 628 | else throw("List size exceeds 15") | |
649 | 629 | ||
650 | - | | |
630 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
651 | 631 | } | |
652 | 632 | ||
653 | 633 | ||
654 | - | func | |
634 | + | func cE (an) = ai(("Suspicious state with asset: " + ag[an])) | |
655 | 635 | ||
656 | 636 | ||
657 | - | func | |
658 | - | func | |
637 | + | func cF (bM,cs) = { | |
638 | + | func cG (aH,cH) = (aH :+ ScriptTransfer(bM, cH.amount, cH.assetId)) | |
659 | 639 | ||
660 | - | let | |
661 | - | let | |
662 | - | let | |
663 | - | func | |
664 | - | then | |
665 | - | else | |
640 | + | let aJ = cs | |
641 | + | let aK = size(aJ) | |
642 | + | let aL = nil | |
643 | + | func aM (aN,aO) = if ((aO >= aK)) | |
644 | + | then aN | |
645 | + | else cG(aN, aJ[aO]) | |
666 | 646 | ||
667 | - | func | |
668 | - | then | |
647 | + | func aP (aN,aO) = if ((aO >= aK)) | |
648 | + | then aN | |
669 | 649 | else throw("List size exceeds 15") | |
670 | 650 | ||
671 | - | | |
651 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
672 | 652 | } | |
673 | 653 | ||
674 | 654 | ||
675 | - | func | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | if (( | |
655 | + | func cI (cJ) = { | |
656 | + | let cK = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key") | |
657 | + | let cL = 10000 | |
658 | + | let cM = max(cJ) | |
659 | + | let cN = min(cJ) | |
660 | + | let cO = fraction(cM, cL, cN) | |
661 | + | if ((cO > (cK * cL))) | |
682 | 662 | then throw("New balance in assets of the DApp is less than threshold") | |
683 | 663 | else false | |
684 | 664 | } | |
685 | 665 | ||
686 | 666 | ||
687 | - | func | |
688 | - | let | |
689 | - | func | |
690 | - | let | |
691 | - | let | |
692 | - | if (( | |
667 | + | func cP (ag) = { | |
668 | + | let cQ = split(ag, ",") | |
669 | + | func cR (cS,aI) = { | |
670 | + | let cT = valueOrErrorMessage(fromBase58String(aI), ("fromBase58String: " + aI)) | |
671 | + | let cU = valueOrErrorMessage(assetInfo(cT), ("assetInfo: " + aI)).decimals | |
672 | + | if ((cU != d)) | |
693 | 673 | then throw("wrong decimals") | |
694 | 674 | else false | |
695 | 675 | } | |
696 | 676 | ||
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | func | |
701 | - | then | |
702 | - | else | |
677 | + | let aJ = cQ | |
678 | + | let aK = size(aJ) | |
679 | + | let aL = false | |
680 | + | func aM (aN,aO) = if ((aO >= aK)) | |
681 | + | then aN | |
682 | + | else cR(aN, aJ[aO]) | |
703 | 683 | ||
704 | - | func | |
705 | - | then | |
684 | + | func aP (aN,aO) = if ((aO >= aK)) | |
685 | + | then aN | |
706 | 686 | else throw("List size exceeds 15") | |
707 | 687 | ||
708 | - | | |
688 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
709 | 689 | } | |
710 | 690 | ||
711 | 691 | ||
712 | - | @Callable( | |
713 | - | func D ( | |
714 | - | let | |
715 | - | $Tuple2([IntegerEntry("D", | |
692 | + | @Callable(cV) | |
693 | + | func D (aR,aV) = { | |
694 | + | let bi = aX(aR, aV) | |
695 | + | $Tuple2([IntegerEntry("D", bi)], bi) | |
716 | 696 | } | |
717 | 697 | ||
718 | 698 | ||
719 | 699 | ||
720 | - | @Callable( | |
721 | - | func init ( | |
700 | + | @Callable(cV) | |
701 | + | func init (ag,aA,cW) = if (!(isDataStorageUntouched(this))) | |
722 | 702 | then throw("Already initialized") | |
723 | - | else if ((0 >= | |
703 | + | else if ((0 >= aA)) | |
724 | 704 | then throw("Amp must be must > 0") | |
725 | - | else if ((0 >= | |
705 | + | else if ((0 >= cW)) | |
726 | 706 | then throw("dApp Threshold Coef must be > 0") | |
727 | 707 | else { | |
728 | - | let | |
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | if ( | |
708 | + | let cX = "s_Multi_USD" | |
709 | + | let cY = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this)) | |
710 | + | let cZ = Issue(cX, cY, 0, 6, true) | |
711 | + | let da = calculateAssetId(cZ) | |
712 | + | if (cP(ag)) | |
733 | 713 | then throw() | |
734 | - | else { | |
735 | - | let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk] | |
736 | - | if (dh) | |
737 | - | then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))]) | |
738 | - | else dm | |
739 | - | } | |
714 | + | else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aA), IntegerEntry("future_A", aA), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(da)), IntegerEntry(m, 0), IntegerEntry(o, cW), BooleanEntry(j, true), cZ] | |
740 | 715 | } | |
741 | 716 | ||
742 | 717 | ||
743 | 718 | ||
744 | - | @Callable( | |
745 | - | func addLiquidity ( | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
719 | + | @Callable(cV) | |
720 | + | func addLiquidity (db,dc) = valueOrElse(al(), { | |
721 | + | let aV = aA() | |
722 | + | let aR = aF() | |
723 | + | let bQ = if ((Y == 0)) | |
749 | 724 | then 0 | |
750 | - | else | |
751 | - | let | |
752 | - | let | |
753 | - | func | |
754 | - | then throw(("payments size > " + toString( | |
755 | - | else if ((1 > | |
725 | + | else bl(aR, aV) | |
726 | + | let cs = cV.payments | |
727 | + | let dd = size(cs) | |
728 | + | func de (df) = if ((dd > ah)) | |
729 | + | then throw(("payments size > " + toString(ah))) | |
730 | + | else if ((1 > dd)) | |
756 | 731 | then throw("payments size < 1") | |
757 | - | else if (if (( | |
758 | - | then ( | |
732 | + | else if (if ((Y == 0)) | |
733 | + | then (ah != dd) | |
759 | 734 | else false) | |
760 | 735 | then throw("initial deposit requires all coins") | |
761 | 736 | else { | |
762 | - | func | |
737 | + | func dg (aH,cH) = if (containsElement(ag, cd(cH.assetId))) | |
763 | 738 | then true | |
764 | 739 | else throw("Invalid asset in payment") | |
765 | 740 | ||
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | func | |
770 | - | then | |
771 | - | else | |
741 | + | let aJ = cs | |
742 | + | let aK = size(aJ) | |
743 | + | let aL = false | |
744 | + | func aM (aN,aO) = if ((aO >= aK)) | |
745 | + | then aN | |
746 | + | else dg(aN, aJ[aO]) | |
772 | 747 | ||
773 | - | func | |
774 | - | then | |
748 | + | func aP (aN,aO) = if ((aO >= aK)) | |
749 | + | then aN | |
775 | 750 | else throw("List size exceeds 15") | |
776 | 751 | ||
777 | - | | |
752 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
778 | 753 | } | |
779 | 754 | ||
780 | - | if (!( | |
755 | + | if (!(de(dd))) | |
781 | 756 | then throw() | |
782 | 757 | else { | |
783 | - | let | |
784 | - | if ( | |
785 | - | then ( | |
758 | + | let cC = cy() | |
759 | + | if (cC._1) | |
760 | + | then (cE(cC._2) ++ cF(cV.caller, cs)) | |
786 | 761 | else { | |
787 | - | func | |
788 | - | let | |
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | if (if (( | |
793 | - | then ( | |
762 | + | func cG (aH,aI) = { | |
763 | + | let dh = aH | |
764 | + | let cJ = dh._1 | |
765 | + | let an = dh._2 | |
766 | + | let di = dh._3 | |
767 | + | if (if ((dd > di)) | |
768 | + | then (cd(cs[di].assetId) == aI) | |
794 | 769 | else false) | |
795 | - | then $Tuple3(( | |
796 | - | else $Tuple3(( | |
770 | + | then $Tuple3((cJ :+ (aR[an] + cs[di].amount)), (an + 1), (di + 1)) | |
771 | + | else $Tuple3((cJ :+ aR[an]), (an + 1), di) | |
797 | 772 | } | |
798 | 773 | ||
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | let | |
803 | - | func | |
804 | - | then | |
805 | - | else | |
774 | + | let dj = { | |
775 | + | let aJ = ag | |
776 | + | let aK = size(aJ) | |
777 | + | let aL = $Tuple3(nil, 0, 0) | |
778 | + | func aM (aN,aO) = if ((aO >= aK)) | |
779 | + | then aN | |
780 | + | else cG(aN, aJ[aO]) | |
806 | 781 | ||
807 | - | func | |
808 | - | then | |
782 | + | func aP (aN,aO) = if ((aO >= aK)) | |
783 | + | then aN | |
809 | 784 | else throw("List size exceeds 15") | |
810 | 785 | ||
811 | - | | |
786 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
812 | 787 | } | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | if (( | |
788 | + | let cJ = dj._1 | |
789 | + | let dk = dj._2 | |
790 | + | let dl = dj._3 | |
791 | + | if ((dd > dl)) | |
817 | 792 | then throw("Incorect payments order") | |
818 | - | else if ( | |
793 | + | else if (cI(cJ)) | |
819 | 794 | then throw() | |
820 | 795 | else { | |
821 | - | let | |
822 | - | if ( | |
796 | + | let bR = bl(cJ, aV) | |
797 | + | if (ar((bR > bQ))) | |
823 | 798 | then throw("D1 > D0") | |
824 | 799 | else { | |
825 | - | let | |
826 | - | func | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | let | |
831 | - | if (( | |
800 | + | let bN = at(cV.caller) | |
801 | + | func dm (aH,dn) = { | |
802 | + | let do = aH | |
803 | + | let dp = do._1 | |
804 | + | let dq = do._2 | |
805 | + | let an = do._3 | |
806 | + | if ((Y > 0)) | |
832 | 807 | then { | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
836 | - | let | |
837 | - | then ( | |
838 | - | else ( | |
839 | - | fraction( | |
808 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
809 | + | let dr = { | |
810 | + | let ds = fraction(bR, aR[an], bQ) | |
811 | + | let dt = if ((ds > dn)) | |
812 | + | then (ds - dn) | |
813 | + | else (dn - ds) | |
814 | + | fraction(bO, dt, Z) | |
840 | 815 | } | |
841 | - | let | |
842 | - | let | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | then | |
848 | - | else | |
849 | - | if (( | |
816 | + | let du = fraction(dr, ab, Z) | |
817 | + | let dv = (dn - dr) | |
818 | + | let dw = (dn - dr) | |
819 | + | let dx = (dn - aR[an]) | |
820 | + | let dy = (dr - du) | |
821 | + | let dz = if ((dx > 0)) | |
822 | + | then ch((dx - dr), ag[an]) | |
823 | + | else ct(dr, ag[an]) | |
824 | + | if ((dz == dz)) | |
850 | 825 | then { | |
851 | - | let | |
852 | - | then invoke( | |
826 | + | let dA = if ((dy > 0)) | |
827 | + | then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dy)]) | |
853 | 828 | else 0 | |
854 | - | if (( | |
855 | - | then $Tuple3(( | |
829 | + | if ((dA == dA)) | |
830 | + | then $Tuple3((dp :+ dw), (dq ++ [ScriptTransfer(O, du, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dv)]), (an + 1)) | |
856 | 831 | else throw("Strict value is not equal to itself.") | |
857 | 832 | } | |
858 | 833 | else throw("Strict value is not equal to itself.") | |
859 | 834 | } | |
860 | 835 | else { | |
861 | - | let | |
862 | - | if (( | |
863 | - | then $Tuple3(( | |
836 | + | let dz = ch(dn, ag[an]) | |
837 | + | if ((dz == dz)) | |
838 | + | then $Tuple3((dp :+ dn), (dq :+ IntegerEntry((ag[an] + i), dn)), (an + 1)) | |
864 | 839 | else throw("Strict value is not equal to itself.") | |
865 | 840 | } | |
866 | 841 | } | |
867 | 842 | ||
868 | - | let | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | func | |
873 | - | then | |
874 | - | else | |
843 | + | let dB = { | |
844 | + | let aJ = cJ | |
845 | + | let aK = size(aJ) | |
846 | + | let aL = $Tuple3(nil, nil, 0) | |
847 | + | func bg (aN,aO) = if ((aO >= aK)) | |
848 | + | then aN | |
849 | + | else dm(aN, aJ[aO]) | |
875 | 850 | ||
876 | - | func | |
877 | - | then | |
851 | + | func bh (aN,aO) = if ((aO >= aK)) | |
852 | + | then aN | |
878 | 853 | else throw("List size exceeds 15") | |
879 | 854 | ||
880 | - | | |
855 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
881 | 856 | } | |
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | then | |
887 | - | else fraction( | |
888 | - | if ( | |
857 | + | let dp = dB._1 | |
858 | + | let dq = dB._2 | |
859 | + | let dC = bl(dp, aV) | |
860 | + | let dD = if ((Y == 0)) | |
861 | + | then bR | |
862 | + | else fraction(Y, (dC - bQ), bQ) | |
863 | + | if (ar((dD >= db))) | |
889 | 864 | then throw("Slippage screwed you") | |
890 | - | else if ( | |
865 | + | else if (dc) | |
891 | 866 | then { | |
892 | - | let | |
893 | - | if (( | |
867 | + | let dE = invoke(this, "reissueShare", [dD], nil) | |
868 | + | if ((dE == dE)) | |
894 | 869 | then { | |
895 | - | let | |
896 | - | if (( | |
897 | - | then ( | |
870 | + | let dF = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dD)]) | |
871 | + | if ((dF == dF)) | |
872 | + | then (dq :+ IntegerEntry(m, (Y + dD))) | |
898 | 873 | else throw("Strict value is not equal to itself.") | |
899 | 874 | } | |
900 | 875 | else throw("Strict value is not equal to itself.") | |
901 | 876 | } | |
902 | - | else ( | |
877 | + | else (dq ++ [Reissue(X, dD, true), ScriptTransfer(cV.caller, dD, X), IntegerEntry(m, (Y + dD))]) | |
903 | 878 | } | |
904 | 879 | } | |
905 | 880 | } | |
908 | 883 | ||
909 | 884 | ||
910 | 885 | ||
911 | - | @Callable( | |
912 | - | func calcMintAmount ( | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | if (( | |
917 | - | then $Tuple2(nil, | |
886 | + | @Callable(cV) | |
887 | + | func calcMintAmount (cJ,av) = { | |
888 | + | let aV = aA() | |
889 | + | let aR = aF() | |
890 | + | let bR = bl(cJ, aV) | |
891 | + | if ((Y == 0)) | |
892 | + | then $Tuple2(nil, bR) | |
918 | 893 | else { | |
919 | - | let | |
920 | - | let | |
921 | - | func | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | let | |
928 | - | let | |
929 | - | then ( | |
930 | - | else ( | |
931 | - | fraction( | |
894 | + | let bQ = bl(aR, aV) | |
895 | + | let bN = at(av) | |
896 | + | func dG (aH,dn) = { | |
897 | + | let dH = aH | |
898 | + | let dp = dH._1 | |
899 | + | let an = dH._2 | |
900 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
901 | + | let dr = { | |
902 | + | let ds = fraction(bR, aR[an], bQ) | |
903 | + | let dt = if ((ds > dn)) | |
904 | + | then (ds - dn) | |
905 | + | else (dn - ds) | |
906 | + | fraction(bO, dt, Z) | |
932 | 907 | } | |
933 | - | let | |
934 | - | $Tuple2(( | |
908 | + | let dw = (dn - dr) | |
909 | + | $Tuple2((dp :+ dw), (an + 1)) | |
935 | 910 | } | |
936 | 911 | ||
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | let | |
941 | - | func | |
942 | - | then | |
943 | - | else | |
912 | + | let dI = { | |
913 | + | let aJ = cJ | |
914 | + | let aK = size(aJ) | |
915 | + | let aL = $Tuple2(nil, 0) | |
916 | + | func aM (aN,aO) = if ((aO >= aK)) | |
917 | + | then aN | |
918 | + | else dG(aN, aJ[aO]) | |
944 | 919 | ||
945 | - | func | |
946 | - | then | |
920 | + | func aP (aN,aO) = if ((aO >= aK)) | |
921 | + | then aN | |
947 | 922 | else throw("List size exceeds 15") | |
948 | 923 | ||
949 | - | | |
924 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
950 | 925 | } | |
951 | - | let | |
952 | - | let | |
953 | - | let | |
954 | - | let | |
955 | - | $Tuple2(nil, | |
926 | + | let dp = dI._1 | |
927 | + | let dk = dI._2 | |
928 | + | let dC = bl(dp, aV) | |
929 | + | let dJ = fraction(Y, (dC - bQ), bQ) | |
930 | + | $Tuple2(nil, dJ) | |
956 | 931 | } | |
957 | 932 | } | |
958 | 933 | ||
959 | 934 | ||
960 | 935 | ||
961 | - | @Callable( | |
962 | - | func reissueShare ( | |
936 | + | @Callable(cV) | |
937 | + | func reissueShare (cj) = valueOrElse(ao(cV), [Reissue(X, cj, true)]) | |
963 | 938 | ||
964 | 939 | ||
965 | 940 | ||
966 | - | @Callable( | |
967 | - | func getDy ( | |
968 | - | let | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | let | |
976 | - | $Tuple2(nil, $Tuple2(( | |
941 | + | @Callable(cV) | |
942 | + | func getDy (dK,dL,dM,dN) = { | |
943 | + | let aR = aF() | |
944 | + | let dO = valueOrErrorMessage(indexOf(ag, dK), "unknown token in") | |
945 | + | let dP = valueOrErrorMessage(indexOf(ag, dL), "unknown token out") | |
946 | + | let bp = (aR[dO] + dM) | |
947 | + | let bC = bm(dO, dP, bp, aR) | |
948 | + | let cc = ((aR[dP] - bC) - 1) | |
949 | + | let bN = at(Address(fromBase58String(dN))) | |
950 | + | let bO = fraction(fraction(aa, bN, Z, CEILING), cc, Z) | |
951 | + | $Tuple2(nil, $Tuple2((cc - bO), bO)) | |
977 | 952 | } | |
978 | 953 | ||
979 | 954 | ||
980 | 955 | ||
981 | - | @Callable( | |
982 | - | func exchange ( | |
956 | + | @Callable(cV) | |
957 | + | func exchange (dQ,dR) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
983 | 958 | then throw("size(payments) != 1") | |
984 | 959 | else { | |
985 | - | let | |
986 | - | if ( | |
987 | - | then ( | |
960 | + | let cC = cy() | |
961 | + | if (cC._1) | |
962 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
988 | 963 | else { | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | let | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | let | |
1003 | - | if ( | |
964 | + | let cH = cV.payments[0] | |
965 | + | let dS = cd(cH.assetId) | |
966 | + | let dT = fromBase58String(dQ) | |
967 | + | let dM = cH.amount | |
968 | + | let dO = valueOrErrorMessage(indexOf(ag, dS), "unknown token in") | |
969 | + | let dP = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
970 | + | let aR = aF() | |
971 | + | let bp = (aR[dO] + dM) | |
972 | + | let bC = bm(dO, dP, bp, aR) | |
973 | + | let dU = ((aR[dP] - bC) - 1) | |
974 | + | let bN = at(cV.originCaller) | |
975 | + | let bO = fraction(dU, fraction(aa, bN, Z, CEILING), Z) | |
976 | + | let cc = (dU - bO) | |
977 | + | let du = fraction(bO, ab, Z) | |
978 | + | if (ar((cc >= dR))) | |
1004 | 979 | then throw("Exchange resulted in fewer coins than expected") | |
1005 | 980 | else { | |
1006 | - | func | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | if (( | |
1011 | - | then $Tuple2(( | |
1012 | - | else if (( | |
1013 | - | then $Tuple2(( | |
1014 | - | else $Tuple2(( | |
981 | + | func dV (aH,dW) = { | |
982 | + | let dX = aH | |
983 | + | let cJ = dX._1 | |
984 | + | let an = dX._2 | |
985 | + | if ((an == dO)) | |
986 | + | then $Tuple2((cJ :+ (dW + dM)), (an + 1)) | |
987 | + | else if ((an == dP)) | |
988 | + | then $Tuple2((cJ :+ (dW - dU)), (an + 1)) | |
989 | + | else $Tuple2((cJ :+ dW), (an + 1)) | |
1015 | 990 | } | |
1016 | 991 | ||
1017 | - | let | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | func | |
1022 | - | then | |
1023 | - | else | |
992 | + | let dY = { | |
993 | + | let aJ = aR | |
994 | + | let aK = size(aJ) | |
995 | + | let aL = $Tuple2(nil, 0) | |
996 | + | func aM (aN,aO) = if ((aO >= aK)) | |
997 | + | then aN | |
998 | + | else dV(aN, aJ[aO]) | |
1024 | 999 | ||
1025 | - | func | |
1026 | - | then | |
1000 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1001 | + | then aN | |
1027 | 1002 | else throw("List size exceeds 15") | |
1028 | 1003 | ||
1029 | - | | |
1004 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1030 | 1005 | } | |
1031 | - | let | |
1032 | - | let | |
1033 | - | if ( | |
1006 | + | let cJ = dY._1 | |
1007 | + | let an = dY._2 | |
1008 | + | if (cI(cJ)) | |
1034 | 1009 | then throw() | |
1035 | 1010 | else { | |
1036 | - | let | |
1037 | - | if (( | |
1011 | + | let dF = ch(cH.amount, cd(cH.assetId)) | |
1012 | + | if ((dF == dF)) | |
1038 | 1013 | then { | |
1039 | - | let | |
1040 | - | if (( | |
1014 | + | let dZ = ct(dU, dQ) | |
1015 | + | if ((dZ == dZ)) | |
1041 | 1016 | then { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | then invoke( | |
1017 | + | let dy = (bO - du) | |
1018 | + | let dA = if ((dy > 0)) | |
1019 | + | then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)]) | |
1045 | 1020 | else 0 | |
1046 | - | if (( | |
1047 | - | then $Tuple2([IntegerEntry(( | |
1021 | + | if ((dA == dA)) | |
1022 | + | then $Tuple2([IntegerEntry((dS + i), bp), IntegerEntry((dQ + i), (aR[dP] - dU)), ScriptTransfer(cV.caller, cc, dT), ScriptTransfer(O, du, dT)], [cc, dT]) | |
1048 | 1023 | else throw("Strict value is not equal to itself.") | |
1049 | 1024 | } | |
1050 | 1025 | else throw("Strict value is not equal to itself.") | |
1057 | 1032 | ||
1058 | 1033 | ||
1059 | 1034 | ||
1060 | - | @Callable( | |
1061 | - | func withdraw ( | |
1035 | + | @Callable(cV) | |
1036 | + | func withdraw (ea) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
1062 | 1037 | then throw("size(payments) != 1") | |
1063 | 1038 | else { | |
1064 | - | let | |
1065 | - | let | |
1066 | - | if (( | |
1039 | + | let eb = cV.payments[0].amount | |
1040 | + | let ec = cV.payments[0].assetId | |
1041 | + | if ((X != ec)) | |
1067 | 1042 | then throw("unknown payment token") | |
1068 | 1043 | else { | |
1069 | - | let | |
1070 | - | if ( | |
1071 | - | then ( | |
1044 | + | let cC = cy() | |
1045 | + | if (cC._1) | |
1046 | + | then (cE(cC._2) ++ cF(cV.originCaller, cV.payments)) | |
1072 | 1047 | else { | |
1073 | - | func | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if ( | |
1048 | + | func dm (aH,ed) = { | |
1049 | + | let ee = aH | |
1050 | + | let dq = ee._1 | |
1051 | + | let an = ee._2 | |
1052 | + | let ef = fraction(ed, eb, Y) | |
1053 | + | if (ar((ef >= ea[an]))) | |
1079 | 1054 | then throw("Withdrawal resulted in fewer coins than expected") | |
1080 | 1055 | else { | |
1081 | - | let | |
1082 | - | if (( | |
1083 | - | then $Tuple2(( | |
1056 | + | let dZ = ct(ef, ag[an]) | |
1057 | + | if ((dZ == dZ)) | |
1058 | + | then $Tuple2((dq ++ [IntegerEntry((ag[an] + i), (ed - ef)), ScriptTransfer(cV.originCaller, ef, fromBase58String(ag[an]))]), (an + 1)) | |
1084 | 1059 | else throw("Strict value is not equal to itself.") | |
1085 | 1060 | } | |
1086 | 1061 | } | |
1087 | 1062 | ||
1088 | - | let | |
1089 | - | let | |
1090 | - | let | |
1091 | - | let | |
1092 | - | func | |
1093 | - | then | |
1094 | - | else | |
1063 | + | let eg = { | |
1064 | + | let aJ = aF() | |
1065 | + | let aK = size(aJ) | |
1066 | + | let aL = $Tuple2(nil, 0) | |
1067 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1068 | + | then aN | |
1069 | + | else dm(aN, aJ[aO]) | |
1095 | 1070 | ||
1096 | - | func | |
1097 | - | then | |
1071 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1072 | + | then aN | |
1098 | 1073 | else throw("List size exceeds 15") | |
1099 | 1074 | ||
1100 | - | | |
1075 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1101 | 1076 | } | |
1102 | - | let | |
1103 | - | let | |
1104 | - | ( | |
1077 | + | let dq = eg._1 | |
1078 | + | let an = eg._2 | |
1079 | + | (dq ++ [Burn(X, eb), IntegerEntry(m, (Y - eb))]) | |
1105 | 1080 | } | |
1106 | 1081 | } | |
1107 | 1082 | }) | |
1108 | 1083 | ||
1109 | 1084 | ||
1110 | 1085 | ||
1111 | - | @Callable( | |
1112 | - | func withdrawWithUnlock ( | |
1086 | + | @Callable(cV) | |
1087 | + | func withdrawWithUnlock (ea,eh) = valueOrElse(al(), if ((0 >= eh)) | |
1113 | 1088 | then throw("Unlock amount must be positive") | |
1114 | 1089 | else { | |
1115 | - | let | |
1116 | - | if ( | |
1117 | - | then ( | |
1090 | + | let cC = cy() | |
1091 | + | if (cC._1) | |
1092 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
1118 | 1093 | else { | |
1119 | - | let | |
1120 | - | then if ((size( | |
1094 | + | let eb = if ((size(cV.payments) > 0)) | |
1095 | + | then if ((size(cV.payments) != 1)) | |
1121 | 1096 | then throw("size(payments) != 1") | |
1122 | 1097 | else { | |
1123 | - | let | |
1124 | - | if (( | |
1098 | + | let ec = cV.payments[0].assetId | |
1099 | + | if ((X != ec)) | |
1125 | 1100 | then throw("unknown payment token") | |
1126 | - | else | |
1101 | + | else cV.payments[0].amount | |
1127 | 1102 | } | |
1128 | 1103 | else 0 | |
1129 | - | let | |
1130 | - | if (( | |
1104 | + | let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil) | |
1105 | + | if ((ei == ei)) | |
1131 | 1106 | then { | |
1132 | - | let | |
1133 | - | let | |
1134 | - | if (( | |
1107 | + | let ej = (eb + eh) | |
1108 | + | let dz = invoke(this, "withdraw", [ea], [AttachedPayment(X, ej)]) | |
1109 | + | if ((dz == dz)) | |
1135 | 1110 | then nil | |
1136 | 1111 | else throw("Strict value is not equal to itself.") | |
1137 | 1112 | } | |
1141 | 1116 | ||
1142 | 1117 | ||
1143 | 1118 | ||
1144 | - | @Callable( | |
1145 | - | func calcWithdrawOneCoin ( | |
1146 | - | let | |
1147 | - | $Tuple2(nil, | |
1119 | + | @Callable(cV) | |
1120 | + | func calcWithdrawOneCoin (ek,dQ,av) = { | |
1121 | + | let an = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
1122 | + | $Tuple2(nil, bK(aF(), ek, an, Address(fromBase58String(av)))._1) | |
1148 | 1123 | } | |
1149 | 1124 | ||
1150 | 1125 | ||
1151 | 1126 | ||
1152 | - | @Callable( | |
1153 | - | func withdrawOneCoin ( | |
1127 | + | @Callable(cV) | |
1128 | + | func withdrawOneCoin (dQ,el) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
1154 | 1129 | then throw("size(payments) != 1") | |
1155 | 1130 | else { | |
1156 | - | let | |
1157 | - | if ( | |
1158 | - | then ( | |
1131 | + | let cC = cy() | |
1132 | + | if (cC._1) | |
1133 | + | then (cE(cC._2) ++ cF(cV.originCaller, cV.payments)) | |
1159 | 1134 | else { | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (( | |
1135 | + | let eb = cV.payments[0].amount | |
1136 | + | let ec = cV.payments[0].assetId | |
1137 | + | if ((ec != X)) | |
1163 | 1138 | then throw("unknown token") | |
1164 | 1139 | else { | |
1165 | - | let | |
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | let | |
1170 | - | let | |
1171 | - | if ( | |
1140 | + | let em = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
1141 | + | let dT = fromBase58String(dQ) | |
1142 | + | let aR = aF() | |
1143 | + | let en = bK(aR, eb, em, cV.originCaller) | |
1144 | + | let cc = en._1 | |
1145 | + | let eo = en._2 | |
1146 | + | if (ar((cc >= el))) | |
1172 | 1147 | then throw("Not enough coins removed") | |
1173 | 1148 | else { | |
1174 | - | let | |
1175 | - | let | |
1176 | - | func | |
1177 | - | let | |
1178 | - | let | |
1179 | - | let | |
1180 | - | if (( | |
1181 | - | then $Tuple2(( | |
1182 | - | else $Tuple2(( | |
1149 | + | let du = fraction(eo, ab, Z) | |
1150 | + | let ep = (cc + eo) | |
1151 | + | func dV (aH,dW) = { | |
1152 | + | let eq = aH | |
1153 | + | let cJ = eq._1 | |
1154 | + | let an = eq._2 | |
1155 | + | if ((an == em)) | |
1156 | + | then $Tuple2((cJ :+ (dW - ep)), (an + 1)) | |
1157 | + | else $Tuple2((cJ :+ dW), (an + 1)) | |
1183 | 1158 | } | |
1184 | 1159 | ||
1185 | - | let | |
1186 | - | let | |
1187 | - | let | |
1188 | - | let | |
1189 | - | func | |
1190 | - | then | |
1191 | - | else | |
1160 | + | let er = { | |
1161 | + | let aJ = aR | |
1162 | + | let aK = size(aJ) | |
1163 | + | let aL = $Tuple2(nil, 0) | |
1164 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1165 | + | then aN | |
1166 | + | else dV(aN, aJ[aO]) | |
1192 | 1167 | ||
1193 | - | func | |
1194 | - | then | |
1168 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1169 | + | then aN | |
1195 | 1170 | else throw("List size exceeds 15") | |
1196 | 1171 | ||
1197 | - | | |
1172 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1198 | 1173 | } | |
1199 | - | let | |
1200 | - | let | |
1201 | - | if ( | |
1174 | + | let cJ = er._1 | |
1175 | + | let es = er._2 | |
1176 | + | if (cI(cJ)) | |
1202 | 1177 | then throw() | |
1203 | 1178 | else { | |
1204 | - | let | |
1205 | - | if (( | |
1179 | + | let dZ = ct(ep, dQ) | |
1180 | + | if ((dZ == dZ)) | |
1206 | 1181 | then { | |
1207 | - | let | |
1208 | - | let | |
1209 | - | then invoke( | |
1182 | + | let dy = (eo - du) | |
1183 | + | let dA = if ((dy > 0)) | |
1184 | + | then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)]) | |
1210 | 1185 | else 0 | |
1211 | - | if (( | |
1212 | - | then [ScriptTransfer( | |
1186 | + | if ((dA == dA)) | |
1187 | + | then [ScriptTransfer(cV.originCaller, cc, dT), IntegerEntry((ag[em] + i), (aR[em] - ep)), Burn(X, eb), ScriptTransfer(O, du, dT), IntegerEntry(m, (Y - eb))] | |
1213 | 1188 | else throw("Strict value is not equal to itself.") | |
1214 | 1189 | } | |
1215 | 1190 | else throw("Strict value is not equal to itself.") | |
1221 | 1196 | ||
1222 | 1197 | ||
1223 | 1198 | ||
1224 | - | @Callable( | |
1225 | - | func withdrawOneCoinWithUnlock ( | |
1199 | + | @Callable(cV) | |
1200 | + | func withdrawOneCoinWithUnlock (dQ,el,eh) = valueOrElse(al(), if ((0 >= eh)) | |
1226 | 1201 | then throw("Unlock amount must be positive") | |
1227 | 1202 | else { | |
1228 | - | let | |
1229 | - | if ( | |
1230 | - | then ( | |
1203 | + | let cC = cy() | |
1204 | + | if (cC._1) | |
1205 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
1231 | 1206 | else { | |
1232 | - | let | |
1233 | - | then if ((size( | |
1207 | + | let eb = if ((size(cV.payments) > 0)) | |
1208 | + | then if ((size(cV.payments) != 1)) | |
1234 | 1209 | then throw("size(payments) != 1") | |
1235 | 1210 | else { | |
1236 | - | let | |
1237 | - | if (( | |
1211 | + | let ec = cV.payments[0].assetId | |
1212 | + | if ((X != ec)) | |
1238 | 1213 | then throw("unknown payment token") | |
1239 | - | else | |
1214 | + | else cV.payments[0].amount | |
1240 | 1215 | } | |
1241 | 1216 | else 0 | |
1242 | - | let | |
1243 | - | if (( | |
1217 | + | let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil) | |
1218 | + | if ((ei == ei)) | |
1244 | 1219 | then { | |
1245 | - | let | |
1246 | - | let | |
1247 | - | if (( | |
1220 | + | let ej = (eb + eh) | |
1221 | + | let dz = invoke(this, "withdrawOneCoin", [dQ, el], [AttachedPayment(X, ej)]) | |
1222 | + | if ((dz == dz)) | |
1248 | 1223 | then nil | |
1249 | 1224 | else throw("Strict value is not equal to itself.") | |
1250 | 1225 | } | |
1254 | 1229 | ||
1255 | 1230 | ||
1256 | 1231 | ||
1257 | - | @Callable( | |
1258 | - | func A () = $Tuple2(nil, | |
1232 | + | @Callable(cV) | |
1233 | + | func A () = $Tuple2(nil, aA()) | |
1259 | 1234 | ||
1260 | 1235 | ||
1261 | 1236 | ||
1262 | - | @Callable( | |
1237 | + | @Callable(cV) | |
1263 | 1238 | func getVirtualPrice () = { | |
1264 | - | let | |
1265 | - | $Tuple2(nil, fraction( | |
1239 | + | let bi = aU(aF(), aA()) | |
1240 | + | $Tuple2(nil, fraction(bi, a, Y)) | |
1266 | 1241 | } | |
1267 | 1242 | ||
1268 | 1243 | ||
1269 | 1244 | ||
1270 | - | @Callable( | |
1271 | - | func calcTokenAmount ( | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | func | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | then | |
1281 | - | else -( | |
1282 | - | $Tuple2(( | |
1245 | + | @Callable(cV) | |
1246 | + | func calcTokenAmount (et,eu) = { | |
1247 | + | let aV = aA() | |
1248 | + | let ev = aF() | |
1249 | + | let bQ = bl(ev, aV) | |
1250 | + | func ew (aH,ed) = { | |
1251 | + | let ex = aH | |
1252 | + | let cJ = ex._1 | |
1253 | + | let an = ex._2 | |
1254 | + | let dn = (ed + (if (eu) | |
1255 | + | then et[an] | |
1256 | + | else -(et[an]))) | |
1257 | + | $Tuple2((cJ :+ dn), (an + 1)) | |
1283 | 1258 | } | |
1284 | 1259 | ||
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | func | |
1289 | - | then | |
1290 | - | else | |
1260 | + | let cJ = ( let aJ = ev | |
1261 | + | let aK = size(aJ) | |
1262 | + | let aL = $Tuple2(nil, 0) | |
1263 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1264 | + | then aN | |
1265 | + | else ew(aN, aJ[aO]) | |
1291 | 1266 | ||
1292 | - | func | |
1293 | - | then | |
1267 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1268 | + | then aN | |
1294 | 1269 | else throw("List size exceeds 15") | |
1295 | 1270 | ||
1296 | - | | |
1297 | - | let | |
1298 | - | let | |
1299 | - | then ( | |
1300 | - | else ( | |
1301 | - | $Tuple2(nil, fraction( | |
1271 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1 | |
1272 | + | let bR = bl(cJ, aV) | |
1273 | + | let ey = if (eu) | |
1274 | + | then (bR - bQ) | |
1275 | + | else (bQ - bR) | |
1276 | + | $Tuple2(nil, fraction(ey, Y, bQ)) | |
1302 | 1277 | } | |
1303 | 1278 | ||
1304 | 1279 | ||
1305 | 1280 | ||
1306 | - | @Callable( | |
1307 | - | func rampA ( | |
1281 | + | @Callable(cV) | |
1282 | + | func rampA (ez,eA) = valueOrElse(al(), valueOrElse(am(cV), if (ar((aq >= (ae + e)))) | |
1308 | 1283 | then throw("too often") | |
1309 | - | else if ( | |
1284 | + | else if (ar((eA >= (aq + e)))) | |
1310 | 1285 | then throw("insufficient time") | |
1311 | 1286 | else { | |
1312 | - | let | |
1313 | - | if ( | |
1314 | - | then (b > | |
1287 | + | let eB = aA() | |
1288 | + | if (ar(if ((ez > 0)) | |
1289 | + | then (b > ez) | |
1315 | 1290 | else false)) | |
1316 | 1291 | then throw("out of base range") | |
1317 | - | else if ( | |
1318 | - | then (( | |
1292 | + | else if (ar(if (if ((ez >= eB)) | |
1293 | + | then ((eB * c) >= ez) | |
1319 | 1294 | else false) | |
1320 | 1295 | then true | |
1321 | - | else if (( | |
1322 | - | then (( | |
1296 | + | else if ((eB > ez)) | |
1297 | + | then ((ez * c) >= eB) | |
1323 | 1298 | else false)) | |
1324 | 1299 | then throw("out of range") | |
1325 | - | else [IntegerEntry("initial_A", | |
1300 | + | else [IntegerEntry("initial_A", eB), IntegerEntry("future_A", ez), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", eA)] | |
1326 | 1301 | })) | |
1327 | 1302 | ||
1328 | 1303 | ||
1329 | 1304 | ||
1330 | - | @Callable( | |
1331 | - | func stopRampA () = valueOrElse( | |
1332 | - | let | |
1333 | - | [IntegerEntry("initial_A", | |
1305 | + | @Callable(cV) | |
1306 | + | func stopRampA () = valueOrElse(al(), valueOrElse(am(cV), { | |
1307 | + | let eC = aA() | |
1308 | + | [IntegerEntry("initial_A", eC), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", aq)] | |
1334 | 1309 | })) | |
1335 | 1310 | ||
1336 | 1311 | ||
1337 | 1312 | ||
1338 | - | @Callable( | |
1339 | - | func shutdown () = valueOrElse( | |
1313 | + | @Callable(cV) | |
1314 | + | func shutdown () = valueOrElse(am(cV), if (!(W)) | |
1340 | 1315 | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified"))) | |
1341 | - | else | |
1316 | + | else ai("Paused by admin")) | |
1342 | 1317 | ||
1343 | 1318 | ||
1344 | 1319 | ||
1345 | - | @Callable( | |
1346 | - | func activate () = valueOrElse( | |
1347 | - | then | |
1320 | + | @Callable(cV) | |
1321 | + | func activate () = valueOrElse(am(cV), if (W) | |
1322 | + | then ak() | |
1348 | 1323 | else [BooleanEntry(j, true), DeleteEntry(k)]) | |
1349 | 1324 | ||
1350 | 1325 | ||
1351 | 1326 | ||
1352 | - | @Callable(df) | |
1353 | - | func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)])) | |
1327 | + | @Callable(cV) | |
1328 | + | func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cV.caller != O)) | |
1329 | + | then throw("Only the wallet can call this function") | |
1330 | + | else { | |
1331 | + | let ev = aF() | |
1332 | + | func eD (aH,aI) = { | |
1333 | + | let eE = aH | |
1334 | + | let eF = eE._1 | |
1335 | + | let an = eE._2 | |
1336 | + | let eG = fromBase58String(aI) | |
1337 | + | let eH = (assetBalance(this, eG) + cv(eG)) | |
1338 | + | let eI = (eH - ev[an]) | |
1339 | + | if ((0 > eI)) | |
1340 | + | then ai(("Enroll amount negative for asset" + aI)) | |
1341 | + | else { | |
1342 | + | let dA = if ((eI > 0)) | |
1343 | + | then invoke(T, "airDrop", nil, [AttachedPayment(eG, eI)]) | |
1344 | + | else 0 | |
1345 | + | if ((dA == dA)) | |
1346 | + | then $Tuple2((eF + eI), (an + 1)) | |
1347 | + | else throw("Strict value is not equal to itself.") | |
1348 | + | } | |
1349 | + | } | |
1350 | + | ||
1351 | + | let dk = { | |
1352 | + | let aJ = ag | |
1353 | + | let aK = size(aJ) | |
1354 | + | let aL = $Tuple2(0, 0) | |
1355 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1356 | + | then aN | |
1357 | + | else eD(aN, aJ[aO]) | |
1358 | + | ||
1359 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1360 | + | then aN | |
1361 | + | else throw("List size exceeds 15") | |
1362 | + | ||
1363 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1364 | + | } | |
1365 | + | if ((dk._1 == 0)) | |
1366 | + | then throw("No money to take") | |
1367 | + | else nil | |
1368 | + | }) | |
1354 | 1369 | ||
1355 | 1370 | ||
1356 | - | @Verifier( | |
1357 | - | func | |
1358 | - | let | |
1359 | - | let | |
1371 | + | @Verifier(eJ) | |
1372 | + | func eK () = { | |
1373 | + | let eL = { | |
1374 | + | let eM = if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K)) | |
1360 | 1375 | then 1 | |
1361 | 1376 | else 0 | |
1362 | - | let | |
1377 | + | let eN = if (sigVerify(eJ.bodyBytes, eJ.proofs[1], L)) | |
1363 | 1378 | then 1 | |
1364 | 1379 | else 0 | |
1365 | - | let | |
1380 | + | let eO = if (sigVerify(eJ.bodyBytes, eJ.proofs[2], M)) | |
1366 | 1381 | then 1 | |
1367 | 1382 | else 0 | |
1368 | - | ((( | |
1383 | + | (((eM + eN) + eO) >= 2) | |
1369 | 1384 | } | |
1370 | - | let | |
1371 | - | if ($isInstanceOf( | |
1385 | + | let H = eJ | |
1386 | + | if ($isInstanceOf(H, "InvokeScriptTransaction")) | |
1372 | 1387 | then { | |
1373 | - | let | |
1374 | - | let | |
1375 | - | then ( | |
1388 | + | let dz = H | |
1389 | + | let eP = if ((dz.dApp == this)) | |
1390 | + | then (dz.function == "takeIntoAccountExtraFunds") | |
1376 | 1391 | else false | |
1377 | - | let | |
1392 | + | let eQ = if (if (if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K)) | |
1378 | 1393 | then true | |
1379 | - | else sigVerify( | |
1394 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], L)) | |
1380 | 1395 | then true | |
1381 | - | else sigVerify( | |
1396 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], M)) | |
1382 | 1397 | then true | |
1383 | - | else sigVerify( | |
1384 | - | if (if ( | |
1385 | - | then | |
1398 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], N) | |
1399 | + | if (if (eP) | |
1400 | + | then eQ | |
1386 | 1401 | else false) | |
1387 | 1402 | then true | |
1388 | - | else | |
1403 | + | else eL | |
1389 | 1404 | } | |
1390 | - | else | |
1405 | + | else eL | |
1391 | 1406 | } | |
1392 | 1407 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 1000000 | |
5 | 5 | ||
6 | 6 | let b = 1000000 | |
7 | 7 | ||
8 | 8 | let c = 10 | |
9 | 9 | ||
10 | 10 | let d = 6 | |
11 | 11 | ||
12 | 12 | let e = (86400 / 60) | |
13 | 13 | ||
14 | 14 | let f = "3.0.0" | |
15 | 15 | ||
16 | 16 | let g = "version" | |
17 | 17 | ||
18 | 18 | let h = "asset_ids" | |
19 | 19 | ||
20 | 20 | let i = "_balance" | |
21 | 21 | ||
22 | 22 | let j = "active" | |
23 | 23 | ||
24 | 24 | let k = "shutdown_cause" | |
25 | 25 | ||
26 | 26 | let l = "share_asset_id" | |
27 | 27 | ||
28 | 28 | let m = "share_asset_supply" | |
29 | 29 | ||
30 | 30 | let n = "commission" | |
31 | 31 | ||
32 | 32 | let o = "dAppThresholdCoef" | |
33 | 33 | ||
34 | 34 | let p = "staking_usdnnsbt_address" | |
35 | 35 | ||
36 | 36 | let q = "discounts" | |
37 | 37 | ||
38 | 38 | let r = "discount_values" | |
39 | 39 | ||
40 | 40 | let s = "_SWOP_amount" | |
41 | 41 | ||
42 | - | let t = " | |
42 | + | let t = "admin_pub_1" | |
43 | 43 | ||
44 | - | let u = " | |
44 | + | let u = "admin_pub_2" | |
45 | 45 | ||
46 | - | let v = " | |
46 | + | let v = "admin_pub_3" | |
47 | 47 | ||
48 | - | let w = " | |
48 | + | let w = "admin_invoke_pub" | |
49 | 49 | ||
50 | - | let x = " | |
50 | + | let x = "money_box_address" | |
51 | 51 | ||
52 | - | let y = " | |
52 | + | let y = "governance_address" | |
53 | 53 | ||
54 | - | let z = " | |
54 | + | let z = "voting_address" | |
55 | 55 | ||
56 | - | let B = " | |
56 | + | let B = "farming_address" | |
57 | 57 | ||
58 | - | let C = " | |
58 | + | let C = "lp_farming" | |
59 | 59 | ||
60 | - | let E = | |
60 | + | let E = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
61 | 61 | ||
62 | - | let F = "money_box_address" | |
63 | - | ||
64 | - | let G = "governance_address" | |
65 | - | ||
66 | - | let H = "voting_address" | |
67 | - | ||
68 | - | let I = "farming_address" | |
69 | - | ||
70 | - | let J = "lp_farming" | |
71 | - | ||
72 | - | let K = Address(base58'3NBBWfzZtZtszaXbitTKnrB2xXwv26Bn7H9') | |
73 | - | ||
74 | - | func L (M) = { | |
75 | - | let N = getString(K, M) | |
76 | - | if ($isInstanceOf(N, "String")) | |
62 | + | func F (G) = { | |
63 | + | let H = getString(E, G) | |
64 | + | if ($isInstanceOf(H, "String")) | |
77 | 65 | then { | |
78 | - | let | |
79 | - | fromBase58String( | |
66 | + | let I = H | |
67 | + | fromBase58String(I) | |
80 | 68 | } | |
81 | 69 | else { | |
82 | - | let | |
83 | - | throw(( | |
70 | + | let J = H | |
71 | + | throw((G + "is empty")) | |
84 | 72 | } | |
85 | 73 | } | |
86 | 74 | ||
87 | 75 | ||
88 | - | let | |
76 | + | let K = F(t) | |
89 | 77 | ||
90 | - | let | |
78 | + | let L = F(u) | |
91 | 79 | ||
92 | - | let | |
80 | + | let M = F(v) | |
93 | 81 | ||
94 | - | let | |
82 | + | let N = F(w) | |
95 | 83 | ||
96 | - | let | |
84 | + | let O = Address(F(x)) | |
97 | 85 | ||
98 | - | let | |
86 | + | let P = Address(F(y)) | |
99 | 87 | ||
100 | - | let | |
88 | + | let Q = Address(F(p)) | |
101 | 89 | ||
102 | - | let | |
90 | + | let R = Address(F(z)) | |
103 | 91 | ||
104 | - | let | |
92 | + | let S = Address(F(B)) | |
105 | 93 | ||
106 | - | let | |
94 | + | let T = Address(F(C)) | |
107 | 95 | ||
108 | - | let | |
96 | + | let U = base58'8UrfDVd5GreeUwm7uPk7eYz1eMv376kzR52C6sANPkwS' | |
109 | 97 | ||
110 | - | let | |
98 | + | let V = [toBase58String(U)] | |
111 | 99 | ||
112 | - | let | |
100 | + | let W = getBooleanValue(this, j) | |
113 | 101 | ||
114 | - | let | |
102 | + | let X = fromBase58String(getStringValue(this, l)) | |
115 | 103 | ||
116 | - | let | |
104 | + | let Y = getIntegerValue(this, m) | |
117 | 105 | ||
118 | - | let | |
106 | + | let Z = 1000000 | |
119 | 107 | ||
120 | - | let | |
108 | + | let aa = getIntegerValue(this, n) | |
121 | 109 | ||
122 | - | let | |
110 | + | let ab = fraction(40, Z, 100) | |
123 | 111 | ||
124 | - | let | |
112 | + | let ac = getIntegerValue(this, "initial_A") | |
125 | 113 | ||
126 | - | let | |
114 | + | let ad = getIntegerValue(this, "future_A") | |
127 | 115 | ||
128 | - | let | |
116 | + | let ae = valueOrElse(getInteger(this, "initial_A_time"), 0) | |
129 | 117 | ||
130 | - | let | |
118 | + | let af = valueOrElse(getInteger(this, "future_A_time"), 0) | |
131 | 119 | ||
132 | - | let | |
120 | + | let ag = split(getStringValue(this, h), ",") | |
133 | 121 | ||
134 | - | let | |
122 | + | let ah = size(ag) | |
135 | 123 | ||
136 | - | let ao = valueOrElse(getInteger(this, "initial_A_time"), 0) | |
137 | - | ||
138 | - | let ap = valueOrElse(getInteger(this, "future_A_time"), 0) | |
139 | - | ||
140 | - | let aq = split(getStringValue(this, h), ",") | |
141 | - | ||
142 | - | let ar = size(aq) | |
143 | - | ||
144 | - | func as (at) = [BooleanEntry(j, false), StringEntry(k, at)] | |
124 | + | func ai (aj) = [BooleanEntry(j, false), StringEntry(k, aj)] | |
145 | 125 | ||
146 | 126 | ||
147 | - | func | |
127 | + | func ak () = throw("DApp is already active") | |
148 | 128 | ||
149 | 129 | ||
150 | - | func | |
130 | + | func al () = if (W) | |
151 | 131 | then unit | |
152 | 132 | else throw("DApp is inactive at this moment") | |
153 | 133 | ||
154 | 134 | ||
155 | - | func | |
135 | + | func am (an) = if (containsElement([K, L, M], an.callerPublicKey)) | |
156 | 136 | then unit | |
157 | 137 | else throw("Only admin can call this function") | |
158 | 138 | ||
159 | 139 | ||
160 | - | func | |
140 | + | func ao (an) = if ((this == an.caller)) | |
161 | 141 | then unit | |
162 | 142 | else throw("Only contract itself can call this function") | |
163 | 143 | ||
164 | 144 | ||
165 | - | let | |
145 | + | let ap = toBigInt(2) | |
166 | 146 | ||
167 | - | let | |
147 | + | let aq = height | |
168 | 148 | ||
169 | - | func | |
149 | + | func ar (as) = if (as) | |
170 | 150 | then false | |
171 | 151 | else true | |
172 | 152 | ||
173 | 153 | ||
174 | - | func | |
175 | - | let | |
176 | - | let | |
177 | - | if ($isInstanceOf( | |
154 | + | func at (au) = { | |
155 | + | let av = { | |
156 | + | let H = au | |
157 | + | if ($isInstanceOf(H, "Address")) | |
178 | 158 | then { | |
179 | - | let | |
180 | - | toString( | |
159 | + | let aw = H | |
160 | + | toString(aw) | |
181 | 161 | } | |
182 | - | else if ($isInstanceOf( | |
162 | + | else if ($isInstanceOf(H, "String")) | |
183 | 163 | then { | |
184 | - | let | |
185 | - | | |
164 | + | let aw = H | |
165 | + | aw | |
186 | 166 | } | |
187 | 167 | else throw("Unknow type of user Addr") | |
188 | 168 | } | |
189 | - | let | |
190 | - | let | |
191 | - | let | |
192 | - | if (if (( | |
193 | - | then (parseIntValue( | |
169 | + | let ax = valueOrElse(getInteger(P, (av + s)), 0) | |
170 | + | let ay = split(getStringValue(E, r), ",") | |
171 | + | let az = split(getStringValue(E, q), ",") | |
172 | + | if (if ((ax >= parseIntValue(ay[0]))) | |
173 | + | then (parseIntValue(ay[1]) > ax) | |
194 | 174 | else false) | |
195 | - | then ( | |
196 | - | else if (if (( | |
197 | - | then (parseIntValue( | |
175 | + | then (Z - parseIntValue(az[0])) | |
176 | + | else if (if ((ax >= parseIntValue(ay[1]))) | |
177 | + | then (parseIntValue(ay[2]) > ax) | |
198 | 178 | else false) | |
199 | - | then ( | |
200 | - | else if (if (( | |
201 | - | then (parseIntValue( | |
179 | + | then (Z - parseIntValue(az[1])) | |
180 | + | else if (if ((ax >= parseIntValue(ay[2]))) | |
181 | + | then (parseIntValue(ay[3]) > ax) | |
202 | 182 | else false) | |
203 | - | then ( | |
204 | - | else if (if (( | |
205 | - | then (parseIntValue( | |
183 | + | then (Z - parseIntValue(az[2])) | |
184 | + | else if (if ((ax >= parseIntValue(ay[3]))) | |
185 | + | then (parseIntValue(ay[4]) > ax) | |
206 | 186 | else false) | |
207 | - | then ( | |
208 | - | else if (( | |
209 | - | then ( | |
210 | - | else | |
187 | + | then (Z - parseIntValue(az[3])) | |
188 | + | else if ((ax >= parseIntValue(ay[4]))) | |
189 | + | then (Z - parseIntValue(az[4])) | |
190 | + | else Z | |
211 | 191 | } | |
212 | 192 | ||
213 | 193 | ||
214 | - | func | |
215 | - | let | |
216 | - | let | |
217 | - | if (( | |
194 | + | func aA () = { | |
195 | + | let aB = af | |
196 | + | let aC = ad | |
197 | + | if ((aB > aq)) | |
218 | 198 | then { | |
219 | - | let | |
220 | - | let | |
221 | - | if (( | |
222 | - | then ( | |
223 | - | else ( | |
199 | + | let aD = ac | |
200 | + | let aE = ae | |
201 | + | if ((aC > aD)) | |
202 | + | then (aD + (((aC - aD) * (aq - aE)) / (aB - aE))) | |
203 | + | else (aD - (((aD - aC) * (aq - aE)) / (aB - aE))) | |
224 | 204 | } | |
225 | - | else | |
205 | + | else aC | |
226 | 206 | } | |
227 | 207 | ||
228 | 208 | ||
229 | - | func | |
230 | - | func | |
209 | + | func aF () = { | |
210 | + | func aG (aH,aI) = (aH :+ valueOrElse(getInteger(this, (aI + i)), 0)) | |
231 | 211 | ||
232 | - | let | |
233 | - | let | |
234 | - | let | |
235 | - | func | |
236 | - | then | |
237 | - | else | |
212 | + | let aJ = ag | |
213 | + | let aK = size(aJ) | |
214 | + | let aL = nil | |
215 | + | func aM (aN,aO) = if ((aO >= aK)) | |
216 | + | then aN | |
217 | + | else aG(aN, aJ[aO]) | |
238 | 218 | ||
239 | - | func | |
240 | - | then | |
219 | + | func aP (aN,aO) = if ((aO >= aK)) | |
220 | + | then aN | |
241 | 221 | else throw("List size exceeds 15") | |
242 | 222 | ||
243 | - | | |
223 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
244 | 224 | } | |
245 | 225 | ||
246 | 226 | ||
247 | - | func | |
227 | + | func aQ (aR) = aR | |
248 | 228 | ||
249 | 229 | ||
250 | - | func | |
230 | + | func aS (aH,aT) = (aH + aT) | |
251 | 231 | ||
252 | 232 | ||
253 | - | func | |
254 | - | let | |
255 | - | if ($isInstanceOf( | |
256 | - | then | |
257 | - | else throw(($getType(invoke(this, "D", [ | |
233 | + | func aU (aR,aV) = { | |
234 | + | let aW = invoke(this, "D", [aR, aV], nil) | |
235 | + | if ($isInstanceOf(aW, "Int")) | |
236 | + | then aW | |
237 | + | else throw(($getType(invoke(this, "D", [aR, aV], nil)) + " couldn't be cast to Int")) | |
258 | 238 | } | |
259 | 239 | ||
260 | 240 | ||
261 | - | func | |
262 | - | let | |
263 | - | let | |
264 | - | let | |
265 | - | let | |
266 | - | func | |
267 | - | then | |
268 | - | else | |
241 | + | func aX (aR,aV) = { | |
242 | + | let aY = { | |
243 | + | let aJ = aR | |
244 | + | let aK = size(aJ) | |
245 | + | let aL = 0 | |
246 | + | func aM (aN,aO) = if ((aO >= aK)) | |
247 | + | then aN | |
248 | + | else aS(aN, aJ[aO]) | |
269 | 249 | ||
270 | - | func | |
271 | - | then | |
250 | + | func aP (aN,aO) = if ((aO >= aK)) | |
251 | + | then aN | |
272 | 252 | else throw("List size exceeds 15") | |
273 | 253 | ||
274 | - | | |
254 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
275 | 255 | } | |
276 | - | if (( | |
256 | + | if ((aY == 0)) | |
277 | 257 | then 0 | |
278 | 258 | else { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | func | |
283 | - | then | |
259 | + | let aZ = (aV * ah) | |
260 | + | let ba = (toBigInt(aZ) * toBigInt(aY)) | |
261 | + | let bb = toBigInt((aZ - 1)) | |
262 | + | func bc (aH,an) = if ((aH._2 == true)) | |
263 | + | then aH | |
284 | 264 | else { | |
285 | - | let | |
286 | - | func | |
287 | - | then (( | |
288 | - | else | |
265 | + | let bd = aH._1 | |
266 | + | func be (bf,an) = if ((ah > an)) | |
267 | + | then ((bf * bd) / (toBigInt(aR[an]) * toBigInt(ah))) | |
268 | + | else bf | |
289 | 269 | ||
290 | - | let | |
291 | - | let | |
292 | - | let | |
293 | - | let | |
294 | - | func | |
295 | - | then | |
296 | - | else | |
270 | + | let bf = { | |
271 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
272 | + | let aK = size(aJ) | |
273 | + | let aL = bd | |
274 | + | func bg (aN,aO) = if ((aO >= aK)) | |
275 | + | then aN | |
276 | + | else be(aN, aJ[aO]) | |
297 | 277 | ||
298 | - | func | |
299 | - | then | |
278 | + | func bh (aN,aO) = if ((aO >= aK)) | |
279 | + | then aN | |
300 | 280 | else throw("List size exceeds 15") | |
301 | 281 | ||
302 | - | | |
282 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
303 | 283 | } | |
304 | - | let | |
305 | - | if (( | |
306 | - | then if ((1 >= toInt(( | |
307 | - | then $Tuple2( | |
308 | - | else $Tuple2( | |
309 | - | else if ((1 >= toInt(( | |
310 | - | then $Tuple2( | |
311 | - | else $Tuple2( | |
284 | + | let bi = fraction((ba + (toBigInt(ah) * bf)), bd, ((bb * bd) + (toBigInt((ah + 1)) * bf))) | |
285 | + | if ((bi > bd)) | |
286 | + | then if ((1 >= toInt((bi - bd)))) | |
287 | + | then $Tuple2(bi, true) | |
288 | + | else $Tuple2(bi, false) | |
289 | + | else if ((1 >= toInt((bd - bi)))) | |
290 | + | then $Tuple2(bi, true) | |
291 | + | else $Tuple2(bi, false) | |
312 | 292 | } | |
313 | 293 | ||
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | let | |
318 | - | func | |
319 | - | then | |
320 | - | else | |
294 | + | let bj = { | |
295 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
296 | + | let aK = size(aJ) | |
297 | + | let aL = $Tuple2(toBigInt(aY), false) | |
298 | + | func bg (aN,aO) = if ((aO >= aK)) | |
299 | + | then aN | |
300 | + | else bc(aN, aJ[aO]) | |
321 | 301 | ||
322 | - | func | |
323 | - | then | |
302 | + | func bh (aN,aO) = if ((aO >= aK)) | |
303 | + | then aN | |
324 | 304 | else throw("List size exceeds 15") | |
325 | 305 | ||
326 | - | | |
306 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
327 | 307 | } | |
328 | - | let | |
329 | - | let | |
330 | - | if (( | |
331 | - | then throw(("get_D() not finished with " + toString( | |
332 | - | else toInt( | |
308 | + | let bi = bj._1 | |
309 | + | let bk = bj._2 | |
310 | + | if ((bk == false)) | |
311 | + | then throw(("get_D() not finished with " + toString(bi))) | |
312 | + | else toInt(bi) | |
333 | 313 | } | |
334 | 314 | } | |
335 | 315 | ||
336 | 316 | ||
337 | - | func | |
317 | + | func bl (aR,aV) = aU(aQ(aR), aV) | |
338 | 318 | ||
339 | 319 | ||
340 | - | func | |
320 | + | func bm (bn,bo,bp,bq) = if (ar((bn != bo))) | |
341 | 321 | then throw("same coin") | |
342 | - | else if ( | |
343 | - | then ( | |
322 | + | else if (ar(if ((bo >= 0)) | |
323 | + | then (bn >= 0) | |
344 | 324 | else false)) | |
345 | 325 | then throw("below zero") | |
346 | - | else if ( | |
347 | - | then ( | |
326 | + | else if (ar(if ((ah > bo)) | |
327 | + | then (ah > bn) | |
348 | 328 | else false)) | |
349 | 329 | then throw("above N_COINS") | |
350 | 330 | else { | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | func | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | then | |
360 | - | else | |
361 | - | if (if (( | |
362 | - | then ( | |
331 | + | let aV = aA() | |
332 | + | let bi = aU(bq, aV) | |
333 | + | let aZ = (aV * ah) | |
334 | + | func br (aH,an) = { | |
335 | + | let bs = aH | |
336 | + | let bt = bs._1 | |
337 | + | let bu = bs._2 | |
338 | + | let bv = if ((bn == an)) | |
339 | + | then bp | |
340 | + | else bq[an] | |
341 | + | if (if ((an != bo)) | |
342 | + | then (ah > an) | |
363 | 343 | else false) | |
364 | - | then $Tuple2(( | |
365 | - | else $Tuple2( | |
344 | + | then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah)))) | |
345 | + | else $Tuple2(bt, bu) | |
366 | 346 | } | |
367 | 347 | ||
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | func | |
373 | - | then | |
374 | - | else | |
348 | + | let bw = { | |
349 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
350 | + | let aK = size(aJ) | |
351 | + | let aL = $Tuple2(0, toBigInt(bi)) | |
352 | + | func aM (aN,aO) = if ((aO >= aK)) | |
353 | + | then aN | |
354 | + | else br(aN, aJ[aO]) | |
375 | 355 | ||
376 | - | func | |
377 | - | then | |
356 | + | func aP (aN,aO) = if ((aO >= aK)) | |
357 | + | then aN | |
378 | 358 | else throw("List size exceeds 15") | |
379 | 359 | ||
380 | - | | |
360 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
381 | 361 | } | |
382 | - | let | |
383 | - | let | |
384 | - | let | |
385 | - | let | |
386 | - | func | |
387 | - | then | |
362 | + | let bt = bw._1 | |
363 | + | let bx = bw._2 | |
364 | + | let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah))) | |
365 | + | let by = toBigInt(((bt + (bi / aZ)) - bi)) | |
366 | + | func bz (aH,bA) = if ((aH._2 == true)) | |
367 | + | then aH | |
388 | 368 | else { | |
389 | - | let | |
390 | - | let | |
391 | - | if (( | |
392 | - | then if ((1 >= toInt(( | |
393 | - | then $Tuple2( | |
394 | - | else $Tuple2( | |
395 | - | else if ((1 >= toInt(( | |
396 | - | then $Tuple2( | |
397 | - | else $Tuple2( | |
369 | + | let bB = aH._1 | |
370 | + | let bC = (((bB * bB) + bu) / ((ap * bB) + by)) | |
371 | + | if ((bC > bB)) | |
372 | + | then if ((1 >= toInt((bC - bB)))) | |
373 | + | then $Tuple2(bC, true) | |
374 | + | else $Tuple2(bC, false) | |
375 | + | else if ((1 >= toInt((bB - bC)))) | |
376 | + | then $Tuple2(bC, true) | |
377 | + | else $Tuple2(bC, false) | |
398 | 378 | } | |
399 | 379 | ||
400 | - | let | |
401 | - | let | |
402 | - | let | |
403 | - | let | |
404 | - | func | |
405 | - | then | |
406 | - | else | |
380 | + | let bD = { | |
381 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] | |
382 | + | let aK = size(aJ) | |
383 | + | let aL = $Tuple2(toBigInt(bi), false) | |
384 | + | func bg (aN,aO) = if ((aO >= aK)) | |
385 | + | then aN | |
386 | + | else bz(aN, aJ[aO]) | |
407 | 387 | ||
408 | - | func | |
409 | - | then | |
388 | + | func bh (aN,aO) = if ((aO >= aK)) | |
389 | + | then aN | |
410 | 390 | else throw("List size exceeds 16") | |
411 | 391 | ||
412 | - | | |
392 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16) | |
413 | 393 | } | |
414 | - | let | |
415 | - | let | |
416 | - | if (( | |
417 | - | then throw(("getY() not finished with " + toString( | |
418 | - | else toInt( | |
394 | + | let bC = bD._1 | |
395 | + | let bk = bD._2 | |
396 | + | if ((bk == false)) | |
397 | + | then throw(("getY() not finished with " + toString(bC))) | |
398 | + | else toInt(bC) | |
419 | 399 | } | |
420 | 400 | ||
421 | 401 | ||
422 | - | func | |
402 | + | func bE (bF,bn,aR,bi) = if (ar((bn >= 0))) | |
423 | 403 | then throw("i below zero") | |
424 | - | else if ( | |
404 | + | else if (ar((ah > bn))) | |
425 | 405 | then throw("i above N_COINS") | |
426 | 406 | else { | |
427 | - | let | |
428 | - | func | |
429 | - | let | |
430 | - | let | |
431 | - | let | |
432 | - | let | |
433 | - | then ( | |
407 | + | let aZ = (bF * ah) | |
408 | + | func br (aH,an) = { | |
409 | + | let bG = aH | |
410 | + | let bt = bG._1 | |
411 | + | let bu = bG._2 | |
412 | + | let bv = if (if ((bn != an)) | |
413 | + | then (ah > an) | |
434 | 414 | else false) | |
435 | - | then | |
415 | + | then aR[an] | |
436 | 416 | else 0 | |
437 | - | if (if (( | |
438 | - | then ( | |
417 | + | if (if ((ah > an)) | |
418 | + | then (bn != an) | |
439 | 419 | else false) | |
440 | - | then $Tuple2(( | |
441 | - | else $Tuple2( | |
420 | + | then $Tuple2((bt + bv), fraction(bu, toBigInt(bi), toBigInt((bv * ah)))) | |
421 | + | else $Tuple2(bt, bu) | |
442 | 422 | } | |
443 | 423 | ||
444 | - | let | |
445 | - | let | |
446 | - | let | |
447 | - | let | |
448 | - | func | |
449 | - | then | |
450 | - | else | |
424 | + | let bH = { | |
425 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14] | |
426 | + | let aK = size(aJ) | |
427 | + | let aL = $Tuple2(0, toBigInt(bi)) | |
428 | + | func aM (aN,aO) = if ((aO >= aK)) | |
429 | + | then aN | |
430 | + | else br(aN, aJ[aO]) | |
451 | 431 | ||
452 | - | func | |
453 | - | then | |
432 | + | func aP (aN,aO) = if ((aO >= aK)) | |
433 | + | then aN | |
454 | 434 | else throw("List size exceeds 15") | |
455 | 435 | ||
456 | - | | |
436 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
457 | 437 | } | |
458 | - | let | |
459 | - | let | |
460 | - | let | |
461 | - | let | |
462 | - | func | |
463 | - | then | |
438 | + | let bt = bH._1 | |
439 | + | let bx = bH._2 | |
440 | + | let bu = fraction(bx, toBigInt(bi), toBigInt((aZ * ah))) | |
441 | + | let by = toBigInt(((bt + (bi / aZ)) - bi)) | |
442 | + | func bI (aH,an) = if ((aH._2 == true)) | |
443 | + | then aH | |
464 | 444 | else { | |
465 | - | let | |
466 | - | let | |
467 | - | if (( | |
468 | - | then if ((1 >= toInt(( | |
469 | - | then $Tuple2( | |
470 | - | else $Tuple2( | |
471 | - | else if ((1 >= toInt(( | |
472 | - | then $Tuple2( | |
473 | - | else $Tuple2( | |
445 | + | let bB = aH._1 | |
446 | + | let bC = (((bB * bB) + bu) / ((ap * bB) + by)) | |
447 | + | if ((bC > bB)) | |
448 | + | then if ((1 >= toInt((bC - bB)))) | |
449 | + | then $Tuple2(bC, true) | |
450 | + | else $Tuple2(bC, false) | |
451 | + | else if ((1 >= toInt((bB - bC)))) | |
452 | + | then $Tuple2(bC, true) | |
453 | + | else $Tuple2(bC, false) | |
474 | 454 | } | |
475 | 455 | ||
476 | - | let | |
477 | - | let | |
478 | - | let | |
479 | - | let | |
480 | - | func | |
481 | - | then | |
482 | - | else | |
456 | + | let bJ = { | |
457 | + | let aJ = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15] | |
458 | + | let aK = size(aJ) | |
459 | + | let aL = $Tuple2(toBigInt(bi), false) | |
460 | + | func bg (aN,aO) = if ((aO >= aK)) | |
461 | + | then aN | |
462 | + | else bI(aN, aJ[aO]) | |
483 | 463 | ||
484 | - | func | |
485 | - | then | |
464 | + | func bh (aN,aO) = if ((aO >= aK)) | |
465 | + | then aN | |
486 | 466 | else throw("List size exceeds 16") | |
487 | 467 | ||
488 | - | | |
468 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16) | |
489 | 469 | } | |
490 | - | let | |
491 | - | let | |
492 | - | if (( | |
493 | - | then throw(("get_y_D() not finished with " + toString( | |
494 | - | else toInt( | |
470 | + | let bC = bJ._1 | |
471 | + | let bk = bJ._2 | |
472 | + | if ((bk == false)) | |
473 | + | then throw(("get_y_D() not finished with " + toString(bC))) | |
474 | + | else toInt(bC) | |
495 | 475 | } | |
496 | 476 | ||
497 | 477 | ||
498 | - | func | |
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | let | |
506 | - | let | |
507 | - | func | |
508 | - | let | |
509 | - | let | |
510 | - | let | |
511 | - | let | |
512 | - | then (fraction( | |
513 | - | else ( | |
514 | - | $Tuple2(( | |
478 | + | func bK (aR,bL,an,bM) = { | |
479 | + | let bN = at(bM) | |
480 | + | let aV = aA() | |
481 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
482 | + | let bP = Y | |
483 | + | let bQ = aU(aR, aV) | |
484 | + | let bR = (bQ - fraction(bL, bQ, bP)) | |
485 | + | let bS = bE(aV, an, aR, bR) | |
486 | + | let bT = (aR[an] - bS) | |
487 | + | func bU (aH,bV) = { | |
488 | + | let bW = aH | |
489 | + | let bX = bW._1 | |
490 | + | let bY = bW._2 | |
491 | + | let bZ = if ((bY == an)) | |
492 | + | then (fraction(bV, bR, bQ) - bS) | |
493 | + | else (bV - fraction(bV, bR, bQ)) | |
494 | + | $Tuple2((bX :+ (bV - fraction(bO, bZ, Z))), (bY + 1)) | |
515 | 495 | } | |
516 | 496 | ||
517 | - | let | |
518 | - | let | |
519 | - | let | |
520 | - | let | |
521 | - | func | |
522 | - | then | |
523 | - | else | |
497 | + | let ca = { | |
498 | + | let aJ = aR | |
499 | + | let aK = size(aJ) | |
500 | + | let aL = $Tuple2(nil, 0) | |
501 | + | func aM (aN,aO) = if ((aO >= aK)) | |
502 | + | then aN | |
503 | + | else bU(aN, aJ[aO]) | |
524 | 504 | ||
525 | - | func | |
526 | - | then | |
505 | + | func aP (aN,aO) = if ((aO >= aK)) | |
506 | + | then aN | |
527 | 507 | else throw("List size exceeds 15") | |
528 | 508 | ||
529 | - | | |
509 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
530 | 510 | } | |
531 | - | let | |
532 | - | let | |
533 | - | let | |
534 | - | let | |
535 | - | $Tuple2( | |
511 | + | let bX = ca._1 | |
512 | + | let bY = ca._2 | |
513 | + | let cb = bX[an] | |
514 | + | let cc = ((cb - bE(aV, an, bX, bR)) - 1) | |
515 | + | $Tuple2(cc, (bT - cc)) | |
536 | 516 | } | |
537 | 517 | ||
538 | 518 | ||
539 | - | func | |
540 | - | let | |
541 | - | if ($isInstanceOf( | |
519 | + | func cd (aI) = { | |
520 | + | let H = aI | |
521 | + | if ($isInstanceOf(H, "ByteVector")) | |
542 | 522 | then { | |
543 | - | let | |
544 | - | toBase58String( | |
523 | + | let ce = H | |
524 | + | toBase58String(ce) | |
545 | 525 | } | |
546 | - | else if ($isInstanceOf( | |
526 | + | else if ($isInstanceOf(H, "Unit")) | |
547 | 527 | then { | |
548 | - | let | |
528 | + | let cf = H | |
549 | 529 | "WAVES" | |
550 | 530 | } | |
551 | 531 | else throw("Match error") | |
552 | 532 | } | |
553 | 533 | ||
554 | 534 | ||
555 | - | func | |
556 | - | then $Tuple2("lockNeutrino", | |
557 | - | else $Tuple2("unlockNeutrino", | |
535 | + | func cg (ch,aI) = if (ch) | |
536 | + | then $Tuple2("lockNeutrino", Q) | |
537 | + | else $Tuple2("unlockNeutrino", Q) | |
558 | 538 | ||
559 | 539 | ||
560 | - | func | |
540 | + | func ci (ch,cj,aI) = if (ch) | |
561 | 541 | then { | |
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | $Tuple4( | |
542 | + | let ck = cg(ch, aI) | |
543 | + | let cl = ck._1 | |
544 | + | let cm = ck._2 | |
545 | + | $Tuple4(cl, cm, nil, [AttachedPayment(aI, cj)]) | |
566 | 546 | } | |
567 | 547 | else { | |
568 | - | let | |
569 | - | let | |
570 | - | let | |
571 | - | $Tuple4( | |
548 | + | let cn = cg(ch, aI) | |
549 | + | let cl = cn._1 | |
550 | + | let cm = cn._2 | |
551 | + | $Tuple4(cl, cm, [cj, toBase58String(aI)], nil) | |
572 | 552 | } | |
573 | 553 | ||
574 | 554 | ||
575 | - | func | |
555 | + | func ch (cj,co) = if (containsElement(V, co)) | |
576 | 556 | then { | |
577 | - | let | |
578 | - | let | |
579 | - | let | |
580 | - | let | |
581 | - | let | |
582 | - | invoke( | |
557 | + | let cp = ci(true, cj, fromBase58String(co)) | |
558 | + | let cl = cp._1 | |
559 | + | let cq = cp._2 | |
560 | + | let cr = cp._3 | |
561 | + | let cs = cp._4 | |
562 | + | invoke(cq, cl, cr, cs) | |
583 | 563 | } | |
584 | 564 | else 0 | |
585 | 565 | ||
586 | 566 | ||
587 | - | func | |
567 | + | func ct (cj,co) = if (containsElement(V, co)) | |
588 | 568 | then { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | let | |
593 | - | let | |
594 | - | invoke( | |
569 | + | let cu = ci(false, cj, fromBase58String(co)) | |
570 | + | let cl = cu._1 | |
571 | + | let cq = cu._2 | |
572 | + | let cr = cu._3 | |
573 | + | let cs = cu._4 | |
574 | + | invoke(cq, cl, cr, cs) | |
595 | 575 | } | |
596 | 576 | else 0 | |
597 | 577 | ||
598 | 578 | ||
599 | - | func | |
600 | - | let | |
601 | - | let | |
602 | - | if ($isInstanceOf( | |
579 | + | func cv (aI) = { | |
580 | + | let cw = { | |
581 | + | let H = aI | |
582 | + | if ($isInstanceOf(H, "ByteVector")) | |
603 | 583 | then { | |
604 | - | let | |
605 | - | if (( | |
606 | - | then getInteger( | |
584 | + | let cx = H | |
585 | + | if ((cx == U)) | |
586 | + | then getInteger(Q, ((("rpd_balance_" + toBase58String(cx)) + "_") + toString(this))) | |
607 | 587 | else 0 | |
608 | 588 | } | |
609 | - | else if ($isInstanceOf( | |
589 | + | else if ($isInstanceOf(H, "Unit")) | |
610 | 590 | then 0 | |
611 | 591 | else throw("Match error") | |
612 | 592 | } | |
613 | - | let | |
614 | - | if ($isInstanceOf( | |
593 | + | let H = cw | |
594 | + | if ($isInstanceOf(H, "Int")) | |
615 | 595 | then { | |
616 | - | let | |
617 | - | | |
596 | + | let an = H | |
597 | + | an | |
618 | 598 | } | |
619 | 599 | else 0 | |
620 | 600 | } | |
621 | 601 | ||
622 | 602 | ||
623 | - | func | |
624 | - | let | |
625 | - | func | |
626 | - | let | |
627 | - | let | |
628 | - | let | |
629 | - | if ( | |
630 | - | then $Tuple2( | |
603 | + | func cy () = { | |
604 | + | let cz = aF() | |
605 | + | func cA (aH,aI) = { | |
606 | + | let cB = aH | |
607 | + | let cC = cB._1 | |
608 | + | let an = cB._2 | |
609 | + | if (cC) | |
610 | + | then $Tuple2(cC, an) | |
631 | 611 | else { | |
632 | - | let | |
633 | - | if (( | |
634 | - | then $Tuple2(true, | |
635 | - | else $Tuple2(false, ( | |
612 | + | let cD = (assetBalance(this, fromBase58String(aI)) + cv(fromBase58String(aI))) | |
613 | + | if ((cz[an] > cD)) | |
614 | + | then $Tuple2(true, an) | |
615 | + | else $Tuple2(false, (an + 1)) | |
636 | 616 | } | |
637 | 617 | } | |
638 | 618 | ||
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | func | |
643 | - | then | |
644 | - | else | |
619 | + | let aJ = ag | |
620 | + | let aK = size(aJ) | |
621 | + | let aL = $Tuple2(false, 0) | |
622 | + | func aM (aN,aO) = if ((aO >= aK)) | |
623 | + | then aN | |
624 | + | else cA(aN, aJ[aO]) | |
645 | 625 | ||
646 | - | func | |
647 | - | then | |
626 | + | func aP (aN,aO) = if ((aO >= aK)) | |
627 | + | then aN | |
648 | 628 | else throw("List size exceeds 15") | |
649 | 629 | ||
650 | - | | |
630 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
651 | 631 | } | |
652 | 632 | ||
653 | 633 | ||
654 | - | func | |
634 | + | func cE (an) = ai(("Suspicious state with asset: " + ag[an])) | |
655 | 635 | ||
656 | 636 | ||
657 | - | func | |
658 | - | func | |
637 | + | func cF (bM,cs) = { | |
638 | + | func cG (aH,cH) = (aH :+ ScriptTransfer(bM, cH.amount, cH.assetId)) | |
659 | 639 | ||
660 | - | let | |
661 | - | let | |
662 | - | let | |
663 | - | func | |
664 | - | then | |
665 | - | else | |
640 | + | let aJ = cs | |
641 | + | let aK = size(aJ) | |
642 | + | let aL = nil | |
643 | + | func aM (aN,aO) = if ((aO >= aK)) | |
644 | + | then aN | |
645 | + | else cG(aN, aJ[aO]) | |
666 | 646 | ||
667 | - | func | |
668 | - | then | |
647 | + | func aP (aN,aO) = if ((aO >= aK)) | |
648 | + | then aN | |
669 | 649 | else throw("List size exceeds 15") | |
670 | 650 | ||
671 | - | | |
651 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
672 | 652 | } | |
673 | 653 | ||
674 | 654 | ||
675 | - | func | |
676 | - | let | |
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | let | |
681 | - | if (( | |
655 | + | func cI (cJ) = { | |
656 | + | let cK = valueOrErrorMessage(getInteger(this, o), "No dAppThresholdCoef key") | |
657 | + | let cL = 10000 | |
658 | + | let cM = max(cJ) | |
659 | + | let cN = min(cJ) | |
660 | + | let cO = fraction(cM, cL, cN) | |
661 | + | if ((cO > (cK * cL))) | |
682 | 662 | then throw("New balance in assets of the DApp is less than threshold") | |
683 | 663 | else false | |
684 | 664 | } | |
685 | 665 | ||
686 | 666 | ||
687 | - | func | |
688 | - | let | |
689 | - | func | |
690 | - | let | |
691 | - | let | |
692 | - | if (( | |
667 | + | func cP (ag) = { | |
668 | + | let cQ = split(ag, ",") | |
669 | + | func cR (cS,aI) = { | |
670 | + | let cT = valueOrErrorMessage(fromBase58String(aI), ("fromBase58String: " + aI)) | |
671 | + | let cU = valueOrErrorMessage(assetInfo(cT), ("assetInfo: " + aI)).decimals | |
672 | + | if ((cU != d)) | |
693 | 673 | then throw("wrong decimals") | |
694 | 674 | else false | |
695 | 675 | } | |
696 | 676 | ||
697 | - | let | |
698 | - | let | |
699 | - | let | |
700 | - | func | |
701 | - | then | |
702 | - | else | |
677 | + | let aJ = cQ | |
678 | + | let aK = size(aJ) | |
679 | + | let aL = false | |
680 | + | func aM (aN,aO) = if ((aO >= aK)) | |
681 | + | then aN | |
682 | + | else cR(aN, aJ[aO]) | |
703 | 683 | ||
704 | - | func | |
705 | - | then | |
684 | + | func aP (aN,aO) = if ((aO >= aK)) | |
685 | + | then aN | |
706 | 686 | else throw("List size exceeds 15") | |
707 | 687 | ||
708 | - | | |
688 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
709 | 689 | } | |
710 | 690 | ||
711 | 691 | ||
712 | - | @Callable( | |
713 | - | func D ( | |
714 | - | let | |
715 | - | $Tuple2([IntegerEntry("D", | |
692 | + | @Callable(cV) | |
693 | + | func D (aR,aV) = { | |
694 | + | let bi = aX(aR, aV) | |
695 | + | $Tuple2([IntegerEntry("D", bi)], bi) | |
716 | 696 | } | |
717 | 697 | ||
718 | 698 | ||
719 | 699 | ||
720 | - | @Callable( | |
721 | - | func init ( | |
700 | + | @Callable(cV) | |
701 | + | func init (ag,aA,cW) = if (!(isDataStorageUntouched(this))) | |
722 | 702 | then throw("Already initialized") | |
723 | - | else if ((0 >= | |
703 | + | else if ((0 >= aA)) | |
724 | 704 | then throw("Amp must be must > 0") | |
725 | - | else if ((0 >= | |
705 | + | else if ((0 >= cW)) | |
726 | 706 | then throw("dApp Threshold Coef must be > 0") | |
727 | 707 | else { | |
728 | - | let | |
729 | - | let | |
730 | - | let | |
731 | - | let | |
732 | - | if ( | |
708 | + | let cX = "s_Multi_USD" | |
709 | + | let cY = ("ShareToken of SwopFi protocol for MultiStable USD pool at address " + toString(this)) | |
710 | + | let cZ = Issue(cX, cY, 0, 6, true) | |
711 | + | let da = calculateAssetId(cZ) | |
712 | + | if (cP(ag)) | |
733 | 713 | then throw() | |
734 | - | else { | |
735 | - | let dm = [StringEntry(g, f), StringEntry(h, aq), IntegerEntry("initial_A", aK), IntegerEntry("future_A", aK), IntegerEntry(n, getIntegerValue(K, "base_fee_flat")), StringEntry(l, toBase58String(dl)), IntegerEntry(m, 0), IntegerEntry(o, dg), BooleanEntry(j, true), dk] | |
736 | - | if (dh) | |
737 | - | then (dm ++ [BooleanEntry(t, dh), IntegerEntry(u, (ad + (af * ae)))]) | |
738 | - | else dm | |
739 | - | } | |
714 | + | else [StringEntry(g, f), StringEntry(h, ag), IntegerEntry("initial_A", aA), IntegerEntry("future_A", aA), IntegerEntry(n, getIntegerValue(E, "base_fee_flat")), StringEntry(l, toBase58String(da)), IntegerEntry(m, 0), IntegerEntry(o, cW), BooleanEntry(j, true), cZ] | |
740 | 715 | } | |
741 | 716 | ||
742 | 717 | ||
743 | 718 | ||
744 | - | @Callable( | |
745 | - | func addLiquidity ( | |
746 | - | let | |
747 | - | let | |
748 | - | let | |
719 | + | @Callable(cV) | |
720 | + | func addLiquidity (db,dc) = valueOrElse(al(), { | |
721 | + | let aV = aA() | |
722 | + | let aR = aF() | |
723 | + | let bQ = if ((Y == 0)) | |
749 | 724 | then 0 | |
750 | - | else | |
751 | - | let | |
752 | - | let | |
753 | - | func | |
754 | - | then throw(("payments size > " + toString( | |
755 | - | else if ((1 > | |
725 | + | else bl(aR, aV) | |
726 | + | let cs = cV.payments | |
727 | + | let dd = size(cs) | |
728 | + | func de (df) = if ((dd > ah)) | |
729 | + | then throw(("payments size > " + toString(ah))) | |
730 | + | else if ((1 > dd)) | |
756 | 731 | then throw("payments size < 1") | |
757 | - | else if (if (( | |
758 | - | then ( | |
732 | + | else if (if ((Y == 0)) | |
733 | + | then (ah != dd) | |
759 | 734 | else false) | |
760 | 735 | then throw("initial deposit requires all coins") | |
761 | 736 | else { | |
762 | - | func | |
737 | + | func dg (aH,cH) = if (containsElement(ag, cd(cH.assetId))) | |
763 | 738 | then true | |
764 | 739 | else throw("Invalid asset in payment") | |
765 | 740 | ||
766 | - | let | |
767 | - | let | |
768 | - | let | |
769 | - | func | |
770 | - | then | |
771 | - | else | |
741 | + | let aJ = cs | |
742 | + | let aK = size(aJ) | |
743 | + | let aL = false | |
744 | + | func aM (aN,aO) = if ((aO >= aK)) | |
745 | + | then aN | |
746 | + | else dg(aN, aJ[aO]) | |
772 | 747 | ||
773 | - | func | |
774 | - | then | |
748 | + | func aP (aN,aO) = if ((aO >= aK)) | |
749 | + | then aN | |
775 | 750 | else throw("List size exceeds 15") | |
776 | 751 | ||
777 | - | | |
752 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
778 | 753 | } | |
779 | 754 | ||
780 | - | if (!( | |
755 | + | if (!(de(dd))) | |
781 | 756 | then throw() | |
782 | 757 | else { | |
783 | - | let | |
784 | - | if ( | |
785 | - | then ( | |
758 | + | let cC = cy() | |
759 | + | if (cC._1) | |
760 | + | then (cE(cC._2) ++ cF(cV.caller, cs)) | |
786 | 761 | else { | |
787 | - | func | |
788 | - | let | |
789 | - | let | |
790 | - | let | |
791 | - | let | |
792 | - | if (if (( | |
793 | - | then ( | |
762 | + | func cG (aH,aI) = { | |
763 | + | let dh = aH | |
764 | + | let cJ = dh._1 | |
765 | + | let an = dh._2 | |
766 | + | let di = dh._3 | |
767 | + | if (if ((dd > di)) | |
768 | + | then (cd(cs[di].assetId) == aI) | |
794 | 769 | else false) | |
795 | - | then $Tuple3(( | |
796 | - | else $Tuple3(( | |
770 | + | then $Tuple3((cJ :+ (aR[an] + cs[di].amount)), (an + 1), (di + 1)) | |
771 | + | else $Tuple3((cJ :+ aR[an]), (an + 1), di) | |
797 | 772 | } | |
798 | 773 | ||
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | let | |
803 | - | func | |
804 | - | then | |
805 | - | else | |
774 | + | let dj = { | |
775 | + | let aJ = ag | |
776 | + | let aK = size(aJ) | |
777 | + | let aL = $Tuple3(nil, 0, 0) | |
778 | + | func aM (aN,aO) = if ((aO >= aK)) | |
779 | + | then aN | |
780 | + | else cG(aN, aJ[aO]) | |
806 | 781 | ||
807 | - | func | |
808 | - | then | |
782 | + | func aP (aN,aO) = if ((aO >= aK)) | |
783 | + | then aN | |
809 | 784 | else throw("List size exceeds 15") | |
810 | 785 | ||
811 | - | | |
786 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
812 | 787 | } | |
813 | - | let | |
814 | - | let | |
815 | - | let | |
816 | - | if (( | |
788 | + | let cJ = dj._1 | |
789 | + | let dk = dj._2 | |
790 | + | let dl = dj._3 | |
791 | + | if ((dd > dl)) | |
817 | 792 | then throw("Incorect payments order") | |
818 | - | else if ( | |
793 | + | else if (cI(cJ)) | |
819 | 794 | then throw() | |
820 | 795 | else { | |
821 | - | let | |
822 | - | if ( | |
796 | + | let bR = bl(cJ, aV) | |
797 | + | if (ar((bR > bQ))) | |
823 | 798 | then throw("D1 > D0") | |
824 | 799 | else { | |
825 | - | let | |
826 | - | func | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | let | |
831 | - | if (( | |
800 | + | let bN = at(cV.caller) | |
801 | + | func dm (aH,dn) = { | |
802 | + | let do = aH | |
803 | + | let dp = do._1 | |
804 | + | let dq = do._2 | |
805 | + | let an = do._3 | |
806 | + | if ((Y > 0)) | |
832 | 807 | then { | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
836 | - | let | |
837 | - | then ( | |
838 | - | else ( | |
839 | - | fraction( | |
808 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
809 | + | let dr = { | |
810 | + | let ds = fraction(bR, aR[an], bQ) | |
811 | + | let dt = if ((ds > dn)) | |
812 | + | then (ds - dn) | |
813 | + | else (dn - ds) | |
814 | + | fraction(bO, dt, Z) | |
840 | 815 | } | |
841 | - | let | |
842 | - | let | |
843 | - | let | |
844 | - | let | |
845 | - | let | |
846 | - | let | |
847 | - | then | |
848 | - | else | |
849 | - | if (( | |
816 | + | let du = fraction(dr, ab, Z) | |
817 | + | let dv = (dn - dr) | |
818 | + | let dw = (dn - dr) | |
819 | + | let dx = (dn - aR[an]) | |
820 | + | let dy = (dr - du) | |
821 | + | let dz = if ((dx > 0)) | |
822 | + | then ch((dx - dr), ag[an]) | |
823 | + | else ct(dr, ag[an]) | |
824 | + | if ((dz == dz)) | |
850 | 825 | then { | |
851 | - | let | |
852 | - | then invoke( | |
826 | + | let dA = if ((dy > 0)) | |
827 | + | then invoke(T, "airDrop", nil, [AttachedPayment(fromBase58String(ag[an]), dy)]) | |
853 | 828 | else 0 | |
854 | - | if (( | |
855 | - | then $Tuple3(( | |
829 | + | if ((dA == dA)) | |
830 | + | then $Tuple3((dp :+ dw), (dq ++ [ScriptTransfer(O, du, fromBase58String(ag[an])), IntegerEntry((ag[an] + i), dv)]), (an + 1)) | |
856 | 831 | else throw("Strict value is not equal to itself.") | |
857 | 832 | } | |
858 | 833 | else throw("Strict value is not equal to itself.") | |
859 | 834 | } | |
860 | 835 | else { | |
861 | - | let | |
862 | - | if (( | |
863 | - | then $Tuple3(( | |
836 | + | let dz = ch(dn, ag[an]) | |
837 | + | if ((dz == dz)) | |
838 | + | then $Tuple3((dp :+ dn), (dq :+ IntegerEntry((ag[an] + i), dn)), (an + 1)) | |
864 | 839 | else throw("Strict value is not equal to itself.") | |
865 | 840 | } | |
866 | 841 | } | |
867 | 842 | ||
868 | - | let | |
869 | - | let | |
870 | - | let | |
871 | - | let | |
872 | - | func | |
873 | - | then | |
874 | - | else | |
843 | + | let dB = { | |
844 | + | let aJ = cJ | |
845 | + | let aK = size(aJ) | |
846 | + | let aL = $Tuple3(nil, nil, 0) | |
847 | + | func bg (aN,aO) = if ((aO >= aK)) | |
848 | + | then aN | |
849 | + | else dm(aN, aJ[aO]) | |
875 | 850 | ||
876 | - | func | |
877 | - | then | |
851 | + | func bh (aN,aO) = if ((aO >= aK)) | |
852 | + | then aN | |
878 | 853 | else throw("List size exceeds 15") | |
879 | 854 | ||
880 | - | | |
855 | + | bh(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(bg(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
881 | 856 | } | |
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | then | |
887 | - | else fraction( | |
888 | - | if ( | |
857 | + | let dp = dB._1 | |
858 | + | let dq = dB._2 | |
859 | + | let dC = bl(dp, aV) | |
860 | + | let dD = if ((Y == 0)) | |
861 | + | then bR | |
862 | + | else fraction(Y, (dC - bQ), bQ) | |
863 | + | if (ar((dD >= db))) | |
889 | 864 | then throw("Slippage screwed you") | |
890 | - | else if ( | |
865 | + | else if (dc) | |
891 | 866 | then { | |
892 | - | let | |
893 | - | if (( | |
867 | + | let dE = invoke(this, "reissueShare", [dD], nil) | |
868 | + | if ((dE == dE)) | |
894 | 869 | then { | |
895 | - | let | |
896 | - | if (( | |
897 | - | then ( | |
870 | + | let dF = invoke(S, "lockShareTokens", [toString(this)], [AttachedPayment(X, dD)]) | |
871 | + | if ((dF == dF)) | |
872 | + | then (dq :+ IntegerEntry(m, (Y + dD))) | |
898 | 873 | else throw("Strict value is not equal to itself.") | |
899 | 874 | } | |
900 | 875 | else throw("Strict value is not equal to itself.") | |
901 | 876 | } | |
902 | - | else ( | |
877 | + | else (dq ++ [Reissue(X, dD, true), ScriptTransfer(cV.caller, dD, X), IntegerEntry(m, (Y + dD))]) | |
903 | 878 | } | |
904 | 879 | } | |
905 | 880 | } | |
906 | 881 | } | |
907 | 882 | }) | |
908 | 883 | ||
909 | 884 | ||
910 | 885 | ||
911 | - | @Callable( | |
912 | - | func calcMintAmount ( | |
913 | - | let | |
914 | - | let | |
915 | - | let | |
916 | - | if (( | |
917 | - | then $Tuple2(nil, | |
886 | + | @Callable(cV) | |
887 | + | func calcMintAmount (cJ,av) = { | |
888 | + | let aV = aA() | |
889 | + | let aR = aF() | |
890 | + | let bR = bl(cJ, aV) | |
891 | + | if ((Y == 0)) | |
892 | + | then $Tuple2(nil, bR) | |
918 | 893 | else { | |
919 | - | let | |
920 | - | let | |
921 | - | func | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | let | |
928 | - | let | |
929 | - | then ( | |
930 | - | else ( | |
931 | - | fraction( | |
894 | + | let bQ = bl(aR, aV) | |
895 | + | let bN = at(av) | |
896 | + | func dG (aH,dn) = { | |
897 | + | let dH = aH | |
898 | + | let dp = dH._1 | |
899 | + | let an = dH._2 | |
900 | + | let bO = ((fraction(aa, bN, Z, CEILING) * ah) / (4 * (ah - 1))) | |
901 | + | let dr = { | |
902 | + | let ds = fraction(bR, aR[an], bQ) | |
903 | + | let dt = if ((ds > dn)) | |
904 | + | then (ds - dn) | |
905 | + | else (dn - ds) | |
906 | + | fraction(bO, dt, Z) | |
932 | 907 | } | |
933 | - | let | |
934 | - | $Tuple2(( | |
908 | + | let dw = (dn - dr) | |
909 | + | $Tuple2((dp :+ dw), (an + 1)) | |
935 | 910 | } | |
936 | 911 | ||
937 | - | let | |
938 | - | let | |
939 | - | let | |
940 | - | let | |
941 | - | func | |
942 | - | then | |
943 | - | else | |
912 | + | let dI = { | |
913 | + | let aJ = cJ | |
914 | + | let aK = size(aJ) | |
915 | + | let aL = $Tuple2(nil, 0) | |
916 | + | func aM (aN,aO) = if ((aO >= aK)) | |
917 | + | then aN | |
918 | + | else dG(aN, aJ[aO]) | |
944 | 919 | ||
945 | - | func | |
946 | - | then | |
920 | + | func aP (aN,aO) = if ((aO >= aK)) | |
921 | + | then aN | |
947 | 922 | else throw("List size exceeds 15") | |
948 | 923 | ||
949 | - | | |
924 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
950 | 925 | } | |
951 | - | let | |
952 | - | let | |
953 | - | let | |
954 | - | let | |
955 | - | $Tuple2(nil, | |
926 | + | let dp = dI._1 | |
927 | + | let dk = dI._2 | |
928 | + | let dC = bl(dp, aV) | |
929 | + | let dJ = fraction(Y, (dC - bQ), bQ) | |
930 | + | $Tuple2(nil, dJ) | |
956 | 931 | } | |
957 | 932 | } | |
958 | 933 | ||
959 | 934 | ||
960 | 935 | ||
961 | - | @Callable( | |
962 | - | func reissueShare ( | |
936 | + | @Callable(cV) | |
937 | + | func reissueShare (cj) = valueOrElse(ao(cV), [Reissue(X, cj, true)]) | |
963 | 938 | ||
964 | 939 | ||
965 | 940 | ||
966 | - | @Callable( | |
967 | - | func getDy ( | |
968 | - | let | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | let | |
976 | - | $Tuple2(nil, $Tuple2(( | |
941 | + | @Callable(cV) | |
942 | + | func getDy (dK,dL,dM,dN) = { | |
943 | + | let aR = aF() | |
944 | + | let dO = valueOrErrorMessage(indexOf(ag, dK), "unknown token in") | |
945 | + | let dP = valueOrErrorMessage(indexOf(ag, dL), "unknown token out") | |
946 | + | let bp = (aR[dO] + dM) | |
947 | + | let bC = bm(dO, dP, bp, aR) | |
948 | + | let cc = ((aR[dP] - bC) - 1) | |
949 | + | let bN = at(Address(fromBase58String(dN))) | |
950 | + | let bO = fraction(fraction(aa, bN, Z, CEILING), cc, Z) | |
951 | + | $Tuple2(nil, $Tuple2((cc - bO), bO)) | |
977 | 952 | } | |
978 | 953 | ||
979 | 954 | ||
980 | 955 | ||
981 | - | @Callable( | |
982 | - | func exchange ( | |
956 | + | @Callable(cV) | |
957 | + | func exchange (dQ,dR) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
983 | 958 | then throw("size(payments) != 1") | |
984 | 959 | else { | |
985 | - | let | |
986 | - | if ( | |
987 | - | then ( | |
960 | + | let cC = cy() | |
961 | + | if (cC._1) | |
962 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
988 | 963 | else { | |
989 | - | let | |
990 | - | let | |
991 | - | let | |
992 | - | let | |
993 | - | let | |
994 | - | let | |
995 | - | let | |
996 | - | let | |
997 | - | let | |
998 | - | let | |
999 | - | let | |
1000 | - | let | |
1001 | - | let | |
1002 | - | let | |
1003 | - | if ( | |
964 | + | let cH = cV.payments[0] | |
965 | + | let dS = cd(cH.assetId) | |
966 | + | let dT = fromBase58String(dQ) | |
967 | + | let dM = cH.amount | |
968 | + | let dO = valueOrErrorMessage(indexOf(ag, dS), "unknown token in") | |
969 | + | let dP = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
970 | + | let aR = aF() | |
971 | + | let bp = (aR[dO] + dM) | |
972 | + | let bC = bm(dO, dP, bp, aR) | |
973 | + | let dU = ((aR[dP] - bC) - 1) | |
974 | + | let bN = at(cV.originCaller) | |
975 | + | let bO = fraction(dU, fraction(aa, bN, Z, CEILING), Z) | |
976 | + | let cc = (dU - bO) | |
977 | + | let du = fraction(bO, ab, Z) | |
978 | + | if (ar((cc >= dR))) | |
1004 | 979 | then throw("Exchange resulted in fewer coins than expected") | |
1005 | 980 | else { | |
1006 | - | func | |
1007 | - | let | |
1008 | - | let | |
1009 | - | let | |
1010 | - | if (( | |
1011 | - | then $Tuple2(( | |
1012 | - | else if (( | |
1013 | - | then $Tuple2(( | |
1014 | - | else $Tuple2(( | |
981 | + | func dV (aH,dW) = { | |
982 | + | let dX = aH | |
983 | + | let cJ = dX._1 | |
984 | + | let an = dX._2 | |
985 | + | if ((an == dO)) | |
986 | + | then $Tuple2((cJ :+ (dW + dM)), (an + 1)) | |
987 | + | else if ((an == dP)) | |
988 | + | then $Tuple2((cJ :+ (dW - dU)), (an + 1)) | |
989 | + | else $Tuple2((cJ :+ dW), (an + 1)) | |
1015 | 990 | } | |
1016 | 991 | ||
1017 | - | let | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | func | |
1022 | - | then | |
1023 | - | else | |
992 | + | let dY = { | |
993 | + | let aJ = aR | |
994 | + | let aK = size(aJ) | |
995 | + | let aL = $Tuple2(nil, 0) | |
996 | + | func aM (aN,aO) = if ((aO >= aK)) | |
997 | + | then aN | |
998 | + | else dV(aN, aJ[aO]) | |
1024 | 999 | ||
1025 | - | func | |
1026 | - | then | |
1000 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1001 | + | then aN | |
1027 | 1002 | else throw("List size exceeds 15") | |
1028 | 1003 | ||
1029 | - | | |
1004 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1030 | 1005 | } | |
1031 | - | let | |
1032 | - | let | |
1033 | - | if ( | |
1006 | + | let cJ = dY._1 | |
1007 | + | let an = dY._2 | |
1008 | + | if (cI(cJ)) | |
1034 | 1009 | then throw() | |
1035 | 1010 | else { | |
1036 | - | let | |
1037 | - | if (( | |
1011 | + | let dF = ch(cH.amount, cd(cH.assetId)) | |
1012 | + | if ((dF == dF)) | |
1038 | 1013 | then { | |
1039 | - | let | |
1040 | - | if (( | |
1014 | + | let dZ = ct(dU, dQ) | |
1015 | + | if ((dZ == dZ)) | |
1041 | 1016 | then { | |
1042 | - | let | |
1043 | - | let | |
1044 | - | then invoke( | |
1017 | + | let dy = (bO - du) | |
1018 | + | let dA = if ((dy > 0)) | |
1019 | + | then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)]) | |
1045 | 1020 | else 0 | |
1046 | - | if (( | |
1047 | - | then $Tuple2([IntegerEntry(( | |
1021 | + | if ((dA == dA)) | |
1022 | + | then $Tuple2([IntegerEntry((dS + i), bp), IntegerEntry((dQ + i), (aR[dP] - dU)), ScriptTransfer(cV.caller, cc, dT), ScriptTransfer(O, du, dT)], [cc, dT]) | |
1048 | 1023 | else throw("Strict value is not equal to itself.") | |
1049 | 1024 | } | |
1050 | 1025 | else throw("Strict value is not equal to itself.") | |
1051 | 1026 | } | |
1052 | 1027 | else throw("Strict value is not equal to itself.") | |
1053 | 1028 | } | |
1054 | 1029 | } | |
1055 | 1030 | } | |
1056 | 1031 | }) | |
1057 | 1032 | ||
1058 | 1033 | ||
1059 | 1034 | ||
1060 | - | @Callable( | |
1061 | - | func withdraw ( | |
1035 | + | @Callable(cV) | |
1036 | + | func withdraw (ea) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
1062 | 1037 | then throw("size(payments) != 1") | |
1063 | 1038 | else { | |
1064 | - | let | |
1065 | - | let | |
1066 | - | if (( | |
1039 | + | let eb = cV.payments[0].amount | |
1040 | + | let ec = cV.payments[0].assetId | |
1041 | + | if ((X != ec)) | |
1067 | 1042 | then throw("unknown payment token") | |
1068 | 1043 | else { | |
1069 | - | let | |
1070 | - | if ( | |
1071 | - | then ( | |
1044 | + | let cC = cy() | |
1045 | + | if (cC._1) | |
1046 | + | then (cE(cC._2) ++ cF(cV.originCaller, cV.payments)) | |
1072 | 1047 | else { | |
1073 | - | func | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if ( | |
1048 | + | func dm (aH,ed) = { | |
1049 | + | let ee = aH | |
1050 | + | let dq = ee._1 | |
1051 | + | let an = ee._2 | |
1052 | + | let ef = fraction(ed, eb, Y) | |
1053 | + | if (ar((ef >= ea[an]))) | |
1079 | 1054 | then throw("Withdrawal resulted in fewer coins than expected") | |
1080 | 1055 | else { | |
1081 | - | let | |
1082 | - | if (( | |
1083 | - | then $Tuple2(( | |
1056 | + | let dZ = ct(ef, ag[an]) | |
1057 | + | if ((dZ == dZ)) | |
1058 | + | then $Tuple2((dq ++ [IntegerEntry((ag[an] + i), (ed - ef)), ScriptTransfer(cV.originCaller, ef, fromBase58String(ag[an]))]), (an + 1)) | |
1084 | 1059 | else throw("Strict value is not equal to itself.") | |
1085 | 1060 | } | |
1086 | 1061 | } | |
1087 | 1062 | ||
1088 | - | let | |
1089 | - | let | |
1090 | - | let | |
1091 | - | let | |
1092 | - | func | |
1093 | - | then | |
1094 | - | else | |
1063 | + | let eg = { | |
1064 | + | let aJ = aF() | |
1065 | + | let aK = size(aJ) | |
1066 | + | let aL = $Tuple2(nil, 0) | |
1067 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1068 | + | then aN | |
1069 | + | else dm(aN, aJ[aO]) | |
1095 | 1070 | ||
1096 | - | func | |
1097 | - | then | |
1071 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1072 | + | then aN | |
1098 | 1073 | else throw("List size exceeds 15") | |
1099 | 1074 | ||
1100 | - | | |
1075 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1101 | 1076 | } | |
1102 | - | let | |
1103 | - | let | |
1104 | - | ( | |
1077 | + | let dq = eg._1 | |
1078 | + | let an = eg._2 | |
1079 | + | (dq ++ [Burn(X, eb), IntegerEntry(m, (Y - eb))]) | |
1105 | 1080 | } | |
1106 | 1081 | } | |
1107 | 1082 | }) | |
1108 | 1083 | ||
1109 | 1084 | ||
1110 | 1085 | ||
1111 | - | @Callable( | |
1112 | - | func withdrawWithUnlock ( | |
1086 | + | @Callable(cV) | |
1087 | + | func withdrawWithUnlock (ea,eh) = valueOrElse(al(), if ((0 >= eh)) | |
1113 | 1088 | then throw("Unlock amount must be positive") | |
1114 | 1089 | else { | |
1115 | - | let | |
1116 | - | if ( | |
1117 | - | then ( | |
1090 | + | let cC = cy() | |
1091 | + | if (cC._1) | |
1092 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
1118 | 1093 | else { | |
1119 | - | let | |
1120 | - | then if ((size( | |
1094 | + | let eb = if ((size(cV.payments) > 0)) | |
1095 | + | then if ((size(cV.payments) != 1)) | |
1121 | 1096 | then throw("size(payments) != 1") | |
1122 | 1097 | else { | |
1123 | - | let | |
1124 | - | if (( | |
1098 | + | let ec = cV.payments[0].assetId | |
1099 | + | if ((X != ec)) | |
1125 | 1100 | then throw("unknown payment token") | |
1126 | - | else | |
1101 | + | else cV.payments[0].amount | |
1127 | 1102 | } | |
1128 | 1103 | else 0 | |
1129 | - | let | |
1130 | - | if (( | |
1104 | + | let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil) | |
1105 | + | if ((ei == ei)) | |
1131 | 1106 | then { | |
1132 | - | let | |
1133 | - | let | |
1134 | - | if (( | |
1107 | + | let ej = (eb + eh) | |
1108 | + | let dz = invoke(this, "withdraw", [ea], [AttachedPayment(X, ej)]) | |
1109 | + | if ((dz == dz)) | |
1135 | 1110 | then nil | |
1136 | 1111 | else throw("Strict value is not equal to itself.") | |
1137 | 1112 | } | |
1138 | 1113 | else throw("Strict value is not equal to itself.") | |
1139 | 1114 | } | |
1140 | 1115 | }) | |
1141 | 1116 | ||
1142 | 1117 | ||
1143 | 1118 | ||
1144 | - | @Callable( | |
1145 | - | func calcWithdrawOneCoin ( | |
1146 | - | let | |
1147 | - | $Tuple2(nil, | |
1119 | + | @Callable(cV) | |
1120 | + | func calcWithdrawOneCoin (ek,dQ,av) = { | |
1121 | + | let an = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
1122 | + | $Tuple2(nil, bK(aF(), ek, an, Address(fromBase58String(av)))._1) | |
1148 | 1123 | } | |
1149 | 1124 | ||
1150 | 1125 | ||
1151 | 1126 | ||
1152 | - | @Callable( | |
1153 | - | func withdrawOneCoin ( | |
1127 | + | @Callable(cV) | |
1128 | + | func withdrawOneCoin (dQ,el) = valueOrElse(al(), if ((size(cV.payments) != 1)) | |
1154 | 1129 | then throw("size(payments) != 1") | |
1155 | 1130 | else { | |
1156 | - | let | |
1157 | - | if ( | |
1158 | - | then ( | |
1131 | + | let cC = cy() | |
1132 | + | if (cC._1) | |
1133 | + | then (cE(cC._2) ++ cF(cV.originCaller, cV.payments)) | |
1159 | 1134 | else { | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (( | |
1135 | + | let eb = cV.payments[0].amount | |
1136 | + | let ec = cV.payments[0].assetId | |
1137 | + | if ((ec != X)) | |
1163 | 1138 | then throw("unknown token") | |
1164 | 1139 | else { | |
1165 | - | let | |
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | let | |
1170 | - | let | |
1171 | - | if ( | |
1140 | + | let em = valueOrErrorMessage(indexOf(ag, dQ), "unknown token out") | |
1141 | + | let dT = fromBase58String(dQ) | |
1142 | + | let aR = aF() | |
1143 | + | let en = bK(aR, eb, em, cV.originCaller) | |
1144 | + | let cc = en._1 | |
1145 | + | let eo = en._2 | |
1146 | + | if (ar((cc >= el))) | |
1172 | 1147 | then throw("Not enough coins removed") | |
1173 | 1148 | else { | |
1174 | - | let | |
1175 | - | let | |
1176 | - | func | |
1177 | - | let | |
1178 | - | let | |
1179 | - | let | |
1180 | - | if (( | |
1181 | - | then $Tuple2(( | |
1182 | - | else $Tuple2(( | |
1149 | + | let du = fraction(eo, ab, Z) | |
1150 | + | let ep = (cc + eo) | |
1151 | + | func dV (aH,dW) = { | |
1152 | + | let eq = aH | |
1153 | + | let cJ = eq._1 | |
1154 | + | let an = eq._2 | |
1155 | + | if ((an == em)) | |
1156 | + | then $Tuple2((cJ :+ (dW - ep)), (an + 1)) | |
1157 | + | else $Tuple2((cJ :+ dW), (an + 1)) | |
1183 | 1158 | } | |
1184 | 1159 | ||
1185 | - | let | |
1186 | - | let | |
1187 | - | let | |
1188 | - | let | |
1189 | - | func | |
1190 | - | then | |
1191 | - | else | |
1160 | + | let er = { | |
1161 | + | let aJ = aR | |
1162 | + | let aK = size(aJ) | |
1163 | + | let aL = $Tuple2(nil, 0) | |
1164 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1165 | + | then aN | |
1166 | + | else dV(aN, aJ[aO]) | |
1192 | 1167 | ||
1193 | - | func | |
1194 | - | then | |
1168 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1169 | + | then aN | |
1195 | 1170 | else throw("List size exceeds 15") | |
1196 | 1171 | ||
1197 | - | | |
1172 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1198 | 1173 | } | |
1199 | - | let | |
1200 | - | let | |
1201 | - | if ( | |
1174 | + | let cJ = er._1 | |
1175 | + | let es = er._2 | |
1176 | + | if (cI(cJ)) | |
1202 | 1177 | then throw() | |
1203 | 1178 | else { | |
1204 | - | let | |
1205 | - | if (( | |
1179 | + | let dZ = ct(ep, dQ) | |
1180 | + | if ((dZ == dZ)) | |
1206 | 1181 | then { | |
1207 | - | let | |
1208 | - | let | |
1209 | - | then invoke( | |
1182 | + | let dy = (eo - du) | |
1183 | + | let dA = if ((dy > 0)) | |
1184 | + | then invoke(T, "airDrop", nil, [AttachedPayment(dT, dy)]) | |
1210 | 1185 | else 0 | |
1211 | - | if (( | |
1212 | - | then [ScriptTransfer( | |
1186 | + | if ((dA == dA)) | |
1187 | + | then [ScriptTransfer(cV.originCaller, cc, dT), IntegerEntry((ag[em] + i), (aR[em] - ep)), Burn(X, eb), ScriptTransfer(O, du, dT), IntegerEntry(m, (Y - eb))] | |
1213 | 1188 | else throw("Strict value is not equal to itself.") | |
1214 | 1189 | } | |
1215 | 1190 | else throw("Strict value is not equal to itself.") | |
1216 | 1191 | } | |
1217 | 1192 | } | |
1218 | 1193 | } | |
1219 | 1194 | } | |
1220 | 1195 | }) | |
1221 | 1196 | ||
1222 | 1197 | ||
1223 | 1198 | ||
1224 | - | @Callable( | |
1225 | - | func withdrawOneCoinWithUnlock ( | |
1199 | + | @Callable(cV) | |
1200 | + | func withdrawOneCoinWithUnlock (dQ,el,eh) = valueOrElse(al(), if ((0 >= eh)) | |
1226 | 1201 | then throw("Unlock amount must be positive") | |
1227 | 1202 | else { | |
1228 | - | let | |
1229 | - | if ( | |
1230 | - | then ( | |
1203 | + | let cC = cy() | |
1204 | + | if (cC._1) | |
1205 | + | then (cE(cC._2) ++ cF(cV.caller, cV.payments)) | |
1231 | 1206 | else { | |
1232 | - | let | |
1233 | - | then if ((size( | |
1207 | + | let eb = if ((size(cV.payments) > 0)) | |
1208 | + | then if ((size(cV.payments) != 1)) | |
1234 | 1209 | then throw("size(payments) != 1") | |
1235 | 1210 | else { | |
1236 | - | let | |
1237 | - | if (( | |
1211 | + | let ec = cV.payments[0].assetId | |
1212 | + | if ((X != ec)) | |
1238 | 1213 | then throw("unknown payment token") | |
1239 | - | else | |
1214 | + | else cV.payments[0].amount | |
1240 | 1215 | } | |
1241 | 1216 | else 0 | |
1242 | - | let | |
1243 | - | if (( | |
1217 | + | let ei = invoke(S, "withdrawShareTokens", [toString(this), eh], nil) | |
1218 | + | if ((ei == ei)) | |
1244 | 1219 | then { | |
1245 | - | let | |
1246 | - | let | |
1247 | - | if (( | |
1220 | + | let ej = (eb + eh) | |
1221 | + | let dz = invoke(this, "withdrawOneCoin", [dQ, el], [AttachedPayment(X, ej)]) | |
1222 | + | if ((dz == dz)) | |
1248 | 1223 | then nil | |
1249 | 1224 | else throw("Strict value is not equal to itself.") | |
1250 | 1225 | } | |
1251 | 1226 | else throw("Strict value is not equal to itself.") | |
1252 | 1227 | } | |
1253 | 1228 | }) | |
1254 | 1229 | ||
1255 | 1230 | ||
1256 | 1231 | ||
1257 | - | @Callable( | |
1258 | - | func A () = $Tuple2(nil, | |
1232 | + | @Callable(cV) | |
1233 | + | func A () = $Tuple2(nil, aA()) | |
1259 | 1234 | ||
1260 | 1235 | ||
1261 | 1236 | ||
1262 | - | @Callable( | |
1237 | + | @Callable(cV) | |
1263 | 1238 | func getVirtualPrice () = { | |
1264 | - | let | |
1265 | - | $Tuple2(nil, fraction( | |
1239 | + | let bi = aU(aF(), aA()) | |
1240 | + | $Tuple2(nil, fraction(bi, a, Y)) | |
1266 | 1241 | } | |
1267 | 1242 | ||
1268 | 1243 | ||
1269 | 1244 | ||
1270 | - | @Callable( | |
1271 | - | func calcTokenAmount ( | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | func | |
1276 | - | let | |
1277 | - | let | |
1278 | - | let | |
1279 | - | let | |
1280 | - | then | |
1281 | - | else -( | |
1282 | - | $Tuple2(( | |
1245 | + | @Callable(cV) | |
1246 | + | func calcTokenAmount (et,eu) = { | |
1247 | + | let aV = aA() | |
1248 | + | let ev = aF() | |
1249 | + | let bQ = bl(ev, aV) | |
1250 | + | func ew (aH,ed) = { | |
1251 | + | let ex = aH | |
1252 | + | let cJ = ex._1 | |
1253 | + | let an = ex._2 | |
1254 | + | let dn = (ed + (if (eu) | |
1255 | + | then et[an] | |
1256 | + | else -(et[an]))) | |
1257 | + | $Tuple2((cJ :+ dn), (an + 1)) | |
1283 | 1258 | } | |
1284 | 1259 | ||
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | func | |
1289 | - | then | |
1290 | - | else | |
1260 | + | let cJ = ( let aJ = ev | |
1261 | + | let aK = size(aJ) | |
1262 | + | let aL = $Tuple2(nil, 0) | |
1263 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1264 | + | then aN | |
1265 | + | else ew(aN, aJ[aO]) | |
1291 | 1266 | ||
1292 | - | func | |
1293 | - | then | |
1267 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1268 | + | then aN | |
1294 | 1269 | else throw("List size exceeds 15") | |
1295 | 1270 | ||
1296 | - | | |
1297 | - | let | |
1298 | - | let | |
1299 | - | then ( | |
1300 | - | else ( | |
1301 | - | $Tuple2(nil, fraction( | |
1271 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15))._1 | |
1272 | + | let bR = bl(cJ, aV) | |
1273 | + | let ey = if (eu) | |
1274 | + | then (bR - bQ) | |
1275 | + | else (bQ - bR) | |
1276 | + | $Tuple2(nil, fraction(ey, Y, bQ)) | |
1302 | 1277 | } | |
1303 | 1278 | ||
1304 | 1279 | ||
1305 | 1280 | ||
1306 | - | @Callable( | |
1307 | - | func rampA ( | |
1281 | + | @Callable(cV) | |
1282 | + | func rampA (ez,eA) = valueOrElse(al(), valueOrElse(am(cV), if (ar((aq >= (ae + e)))) | |
1308 | 1283 | then throw("too often") | |
1309 | - | else if ( | |
1284 | + | else if (ar((eA >= (aq + e)))) | |
1310 | 1285 | then throw("insufficient time") | |
1311 | 1286 | else { | |
1312 | - | let | |
1313 | - | if ( | |
1314 | - | then (b > | |
1287 | + | let eB = aA() | |
1288 | + | if (ar(if ((ez > 0)) | |
1289 | + | then (b > ez) | |
1315 | 1290 | else false)) | |
1316 | 1291 | then throw("out of base range") | |
1317 | - | else if ( | |
1318 | - | then (( | |
1292 | + | else if (ar(if (if ((ez >= eB)) | |
1293 | + | then ((eB * c) >= ez) | |
1319 | 1294 | else false) | |
1320 | 1295 | then true | |
1321 | - | else if (( | |
1322 | - | then (( | |
1296 | + | else if ((eB > ez)) | |
1297 | + | then ((ez * c) >= eB) | |
1323 | 1298 | else false)) | |
1324 | 1299 | then throw("out of range") | |
1325 | - | else [IntegerEntry("initial_A", | |
1300 | + | else [IntegerEntry("initial_A", eB), IntegerEntry("future_A", ez), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", eA)] | |
1326 | 1301 | })) | |
1327 | 1302 | ||
1328 | 1303 | ||
1329 | 1304 | ||
1330 | - | @Callable( | |
1331 | - | func stopRampA () = valueOrElse( | |
1332 | - | let | |
1333 | - | [IntegerEntry("initial_A", | |
1305 | + | @Callable(cV) | |
1306 | + | func stopRampA () = valueOrElse(al(), valueOrElse(am(cV), { | |
1307 | + | let eC = aA() | |
1308 | + | [IntegerEntry("initial_A", eC), IntegerEntry("future_A", eC), IntegerEntry("initial_A_time", aq), IntegerEntry("future_A_time", aq)] | |
1334 | 1309 | })) | |
1335 | 1310 | ||
1336 | 1311 | ||
1337 | 1312 | ||
1338 | - | @Callable( | |
1339 | - | func shutdown () = valueOrElse( | |
1313 | + | @Callable(cV) | |
1314 | + | func shutdown () = valueOrElse(am(cV), if (!(W)) | |
1340 | 1315 | then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, k), "the cause wasn't specified"))) | |
1341 | - | else | |
1316 | + | else ai("Paused by admin")) | |
1342 | 1317 | ||
1343 | 1318 | ||
1344 | 1319 | ||
1345 | - | @Callable( | |
1346 | - | func activate () = valueOrElse( | |
1347 | - | then | |
1320 | + | @Callable(cV) | |
1321 | + | func activate () = valueOrElse(am(cV), if (W) | |
1322 | + | then ak() | |
1348 | 1323 | else [BooleanEntry(j, true), DeleteEntry(k)]) | |
1349 | 1324 | ||
1350 | 1325 | ||
1351 | 1326 | ||
1352 | - | @Callable(df) | |
1353 | - | func keepLimitForFirstHarvest (eP) = valueOrElse(av(), valueOrElse(aw(df), [IntegerEntry(v, eP)])) | |
1327 | + | @Callable(cV) | |
1328 | + | func takeIntoAccountExtraFunds () = valueOrElse(al(), if ((cV.caller != O)) | |
1329 | + | then throw("Only the wallet can call this function") | |
1330 | + | else { | |
1331 | + | let ev = aF() | |
1332 | + | func eD (aH,aI) = { | |
1333 | + | let eE = aH | |
1334 | + | let eF = eE._1 | |
1335 | + | let an = eE._2 | |
1336 | + | let eG = fromBase58String(aI) | |
1337 | + | let eH = (assetBalance(this, eG) + cv(eG)) | |
1338 | + | let eI = (eH - ev[an]) | |
1339 | + | if ((0 > eI)) | |
1340 | + | then ai(("Enroll amount negative for asset" + aI)) | |
1341 | + | else { | |
1342 | + | let dA = if ((eI > 0)) | |
1343 | + | then invoke(T, "airDrop", nil, [AttachedPayment(eG, eI)]) | |
1344 | + | else 0 | |
1345 | + | if ((dA == dA)) | |
1346 | + | then $Tuple2((eF + eI), (an + 1)) | |
1347 | + | else throw("Strict value is not equal to itself.") | |
1348 | + | } | |
1349 | + | } | |
1350 | + | ||
1351 | + | let dk = { | |
1352 | + | let aJ = ag | |
1353 | + | let aK = size(aJ) | |
1354 | + | let aL = $Tuple2(0, 0) | |
1355 | + | func aM (aN,aO) = if ((aO >= aK)) | |
1356 | + | then aN | |
1357 | + | else eD(aN, aJ[aO]) | |
1358 | + | ||
1359 | + | func aP (aN,aO) = if ((aO >= aK)) | |
1360 | + | then aN | |
1361 | + | else throw("List size exceeds 15") | |
1362 | + | ||
1363 | + | aP(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aM(aL, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15) | |
1364 | + | } | |
1365 | + | if ((dk._1 == 0)) | |
1366 | + | then throw("No money to take") | |
1367 | + | else nil | |
1368 | + | }) | |
1354 | 1369 | ||
1355 | 1370 | ||
1356 | - | @Verifier( | |
1357 | - | func | |
1358 | - | let | |
1359 | - | let | |
1371 | + | @Verifier(eJ) | |
1372 | + | func eK () = { | |
1373 | + | let eL = { | |
1374 | + | let eM = if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K)) | |
1360 | 1375 | then 1 | |
1361 | 1376 | else 0 | |
1362 | - | let | |
1377 | + | let eN = if (sigVerify(eJ.bodyBytes, eJ.proofs[1], L)) | |
1363 | 1378 | then 1 | |
1364 | 1379 | else 0 | |
1365 | - | let | |
1380 | + | let eO = if (sigVerify(eJ.bodyBytes, eJ.proofs[2], M)) | |
1366 | 1381 | then 1 | |
1367 | 1382 | else 0 | |
1368 | - | ((( | |
1383 | + | (((eM + eN) + eO) >= 2) | |
1369 | 1384 | } | |
1370 | - | let | |
1371 | - | if ($isInstanceOf( | |
1385 | + | let H = eJ | |
1386 | + | if ($isInstanceOf(H, "InvokeScriptTransaction")) | |
1372 | 1387 | then { | |
1373 | - | let | |
1374 | - | let | |
1375 | - | then ( | |
1388 | + | let dz = H | |
1389 | + | let eP = if ((dz.dApp == this)) | |
1390 | + | then (dz.function == "takeIntoAccountExtraFunds") | |
1376 | 1391 | else false | |
1377 | - | let | |
1392 | + | let eQ = if (if (if (sigVerify(eJ.bodyBytes, eJ.proofs[0], K)) | |
1378 | 1393 | then true | |
1379 | - | else sigVerify( | |
1394 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], L)) | |
1380 | 1395 | then true | |
1381 | - | else sigVerify( | |
1396 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], M)) | |
1382 | 1397 | then true | |
1383 | - | else sigVerify( | |
1384 | - | if (if ( | |
1385 | - | then | |
1398 | + | else sigVerify(eJ.bodyBytes, eJ.proofs[0], N) | |
1399 | + | if (if (eP) | |
1400 | + | then eQ | |
1386 | 1401 | else false) | |
1387 | 1402 | then true | |
1388 | - | else | |
1403 | + | else eL | |
1389 | 1404 | } | |
1390 | - | else | |
1405 | + | else eL | |
1391 | 1406 | } | |
1392 | 1407 |
github/deemru/w8io/169f3d6 668.27 ms ◑