tx · H1keRYgn5mT4JkTmph1Buy1mnNepLbqFqS9d5wo58h18

3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5:  -0.01900000 Waves

2023.09.24 09:23 [2769119] smart account 3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5 > SELF 0.00000000 Waves

{ "type": 13, "id": "H1keRYgn5mT4JkTmph1Buy1mnNepLbqFqS9d5wo58h18", "fee": 1900000, "feeAssetId": null, "timestamp": 1695536654317, "version": 2, "chainId": 84, "sender": "3MsVsEgTUxTm6ETYkHGaqMhMhiY2Nb3yDN5", "senderPublicKey": "2LmNyaN5YAXdg9C5vsXcTLU66hsW2KUNPsN7KcHBYhUo", "proofs": [ "wxvZMDctRNvprBe74som9989z3J2c8QyVC3hBVyqZnktga62NivsrEayTUwaKhe9iz3aNFNsrAnTtSTd3uNSvZN" ], "script": "base64:BgIgCAISAwoBCBIDCgEIEgMKAQgSAwoBCBIDCgEIEgMKAQgFAA5kQXBwU2luY2VTdGFydADA9/eMqjEAC2xpc3RpbmdfZmVlAID24EIAClhUTkFzc2V0SUQBIAhlhLcP8IpqGvPiaOguCJAkw9MnWAPNLPYuXgvf2hWkABFDb2xsZWN0RmVlQWRkcmVzcwkApwgBASBSg9mgi9eQkjsz5eBARHIbc7Hg/F4fmB0sxZ6ySMfiIAEJY291bnRkYXlzAAQHVFNfRGlmZgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQ5kQXBwU2luY2VTdGFydAQJZGF5bnVtYmVyCQBrAwABBQdUU19EaWZmAIC4mSkFCWRheW51bWJlcgYBaQEMUmVnaXN0ZXJQYWlyAQxFbnRlckFzc2V0SUQEBHBtdDEJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQEcG10MgkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBARwbXQzCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAIECmN1cnJlbnRLZXkJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQFV0FWRVMJAQEhAQkBCWlzRGVmaW5lZAEIBQRwbXQyB2Fzc2V0SWQECWZldGNocGFpcgkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEDWFzc2V0aW5mb3BtdDIJANkEAQUMRW50ZXJBc3NldElEBApDdXJyZW50ZGF5CQEJY291bnRkYXlzAAQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUMRW50ZXJBc3NldElECQCsAgIJAKwCAgIGQXNzZXQgBQxFbnRlckFzc2V0SUQCDiBkb2Vzbid0IGV4aXN0BARuYW1lCAUEaW5mbwRuYW1lBAhkZWNpbWFscwgFBGluZm8IZGVjaW1hbHMECkxQZGVjaW1hbHMJAGsDCQBkAgUIZGVjaW1hbHMABgABAAIECkZpcnN0TFBRdHkJAGgCAAEJAGwGAAoAAAUKTFBkZWNpbWFscwAAAAAFB0NFSUxJTkcEEG11bHRpcGx5X2Ftb3VudHMJAGsDCAUEcG10MQZhbW91bnQIBQRwbXQyBmFtb3VudAUKRmlyc3RMUFF0eQQHZ2V0U3FydAkBBHNxcnQEBRBtdWx0aXBseV9hbW91bnRzBQpMUGRlY2ltYWxzBQpMUGRlY2ltYWxzBQdDRUlMSU5HBAdMUGlzc3VlCQDCCAUJAKwCAgkArAICAgNMUC0JAK8CAgUEbmFtZQAIAgQtWFROCQCsAgIJAKwCAgkArAICCQCsAgICA0xQLQUEbmFtZQIELVhUTgIuIGlzIGEgTGlxdWlkaXR5IFByb3ZpZGVyIFRva2VuIElzc3VlZCBBZ2FpbnN0IAUMRW50ZXJBc3NldElEBQdnZXRTcXJ0BQpMUGRlY2ltYWxzBgQETFBpZAkAuAgBBQdMUGlzc3VlAwkAAAIFCWZldGNocGFpcgUMRW50ZXJBc3NldElECQACAQIbUGFpciBBbHJlYWR5IEV4aXN0IGluIExpc3QuAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwADCQACAQkArAICCQCsAgICflR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQgYXMgcGF5bWVudC4gS2luZGx5IEF0dGFjaCBwYXltZW50MSA9IFhUTiBUb2tlbiAmIHBheW1lbnQyID0gVG9rZW4geW91IHdhbnQgdG8gTGlzdCAmIHBheW1lbnQzID0gWwkApAMBBQtsaXN0aW5nX2ZlZQINLzEwXjhdIFdhdmVzLgMJAQIhPQIIBQRwbXQxB2Fzc2V0SWQFClhUTkFzc2V0SUQJAAIBAj9JbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQgYXMgcGF5bWVudFsxXSwgcGxlYXNlIGF0dGFjaCBYVE4gb25seS4DCQBmAgCgjQYIBQRwbXQxBmFtb3VudAkAAgECT0F0dGFjaGVkIHBheW1lbnRbMV0gYW1vdW50IGlzIGxlc3MgdGhhbiAwLjEgWFROLCBwbGVhc2UgYXR0YWNoIDAuMSBYVE4gTWluaW11bS4DCQECIT0CCAUEcG10Mgdhc3NldElkBQ1hc3NldGluZm9wbXQyCQACAQI8SW5wdXQgU3RyaW5nICYgQXR0YWNoZWQgQXNzZXRJRCBpbiBwYXltZW50MiBpcyBub3QgbWF0Y2hpbmcuAwkBAiE9AggFBHBtdDMGYW1vdW50BQtsaXN0aW5nX2ZlZQkAAgEJAKwCAgkArAICAixBdHRhY2hlZCBwYXltZW50WzNdIGFtb3VudCBoYXMgdG8gYmUgZXhhY3QgWwkApAMBBQtsaXN0aW5nX2ZlZQINLzEwXjhdIFdBVkVTLgMJAAACBQVXQVZFUwYJAAIBAl1Zb3UgQXR0YWNoZWQgV0FWRVMgQXNzZXQgSUQgZm9yIExpc3RpbmcsIHBsZWFzZSBhdHRhY2ggVG9rZW5zIFlvdSB3YW50IHRvIGxpc3QgaW4gcGF5bWVudFsyXS4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAghQYWlyX1VWXwUMRW50ZXJBc3NldElEBQxFbnRlckFzc2V0SUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIMTGlzdGluZ19GZWVfBQxFbnRlckFzc2V0SUQIBQRwbXQzBmFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElECAUEcG10MQZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAgFBHBtdDIGYW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICE1RvdGFsX29mX1BhaXJfVHhuc18FDEVudGVyQXNzZXRJRAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FDEVudGVyQXNzZXRJRAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUKQ3VycmVudGRheQIMX0RheV9Wb2x1bWVfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKQDAQUKQ3VycmVudGRheQIMX0RheV9Wb2x1bWVfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAAACQDMCAIFB0xQaXNzdWUJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQdnZXRTcXJ0BQRMUGlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIDTFBfBQxFbnRlckFzc2V0SUQJANgEAQUETFBpZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAUHZ2V0U3FydAUDbmlsAWkBF1N3YXBBc3NldFRvWFROUGFpckVudHJ5AQxFbnRlckFzc2V0SUQEDWNhbGxlcmFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQI1V2hpdGVsaXN0ZWQgVG9rZW4gaXMgcmVxdWlyZWQgYXMgQXR0YWNoZWQgcGF5bWVudFsxXS4EGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAJ0IAgUEdGhpcwkArAICAghQYWlyX1VWXwUMRW50ZXJBc3NldElEBA9DaGVja1hUTkJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAQRQ2hlY2tBc3NldEJhbGFuY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAQPbmV3YmFsYW5jZW9mWFROCQBrAwUPQ2hlY2tYVE5CYWxhbmNlBRFDaGVja0Fzc2V0QmFsYW5jZQkAZAIFEUNoZWNrQXNzZXRCYWxhbmNlCAUDcG10BmFtb3VudAQUcXVhbnRpdHlvZnByaWNlYXNzZXQJAGUCBQ9DaGVja1hUTkJhbGFuY2UFD25ld2JhbGFuY2VvZlhUTgQHU3dhcEZlZQADBApDdXJyZW50ZGF5CQEJY291bnRkYXlzAAQQU3dhcEZlZXRvcmVjZWl2ZQkAaQIJAGgCBRRxdWFudGl0eW9mcHJpY2Vhc3NldAUHU3dhcEZlZQDoBwQUdXNlcmJhbGFuY2V0b3JlY2VpdmUJAGUCCQBlAgUUcXVhbnRpdHlvZnByaWNlYXNzZXQFEFN3YXBGZWV0b3JlY2VpdmUFEFN3YXBGZWV0b3JlY2VpdmUEGFN1bXVwb2ZBc3NldFRvWFROU3dhcEZlZQQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQbTmV3U3VtdXBvZkFzc2V0VG9YVE5Td2FwRmVlCQBkAgkAZAIFGFN1bXVwb2ZBc3NldFRvWFROU3dhcEZlZQUQU3dhcEZlZXRvcmVjZWl2ZQUQU3dhcEZlZXRvcmVjZWl2ZQQRU3VtdXBBc3NldEJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBZOZXdTdW11cG9mQXNzZXRCYWxhbmNlCQBkAgURQ2hlY2tBc3NldEJhbGFuY2UIBQNwbXQGYW1vdW50BA9TdW11cFhUTkJhbGFuY2UEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBROZXdTdW11cG9mWFROQmFsYW5jZQkAZAIJAGUCBQ9DaGVja1hUTkJhbGFuY2UFFHF1YW50aXR5b2ZwcmljZWFzc2V0BRBTd2FwRmVldG9yZWNlaXZlBARUT1BUBAckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgICE1RvdGFsX29mX1BhaXJfVHhuc18FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQGTmV3VFBUCQBkAgUEVE9QVAABAwkAAAIFDEVudGVyQXNzZXRJRAkA2AQBBQpYVE5Bc3NldElECQACAQKFAUlucHV0IGNhbiBOZXZlciBiZSBhIFhUTiBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0ICYgQXR0YWNoIFdoaXRlbGlzdGVkIEFzc2V0IGFzIGFuIGF0dGFjaG1lbnQgVG9rZW4gaW4gcGF5bWVudFsxXS4DCQECIT0CBRljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQxFbnRlckFzc2V0SUQJAAIBAitQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0ZWQgQXNzZXQuAwkAAAIIBQNwbXQHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECUllvdSBjYW4ndCBBdHRhY2ggWFROIGFzIGFuIEF0dGFjaGVkIFBheW1lbnQuIE9ubHkgV2hpdGVsaXN0ZWQgVG9rZW5zIGFyZSBhY2NlcHRlZC4DCQECIT0CCAUDcG10B2Fzc2V0SWQJANkEAQUMRW50ZXJBc3NldElECQACAQkArAICAjBJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQsIHBsZWFzZSBhdHRhY2ggb3Igc2VuZCAFDEVudGVyQXNzZXRJRAMJAAACBQ9DaGVja1hUTkJhbGFuY2UAAAkAAgECZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAIFEUNoZWNrQXNzZXRCYWxhbmNlAAAJAAIBAmVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAGYCAKCNBgUUcXVhbnRpdHlvZnByaWNlYXNzZXQJAAIBCQCsAgIJAKwCAgI0WW91ciBBdHRhY2hlZCBBc3NldCBBbW91bnQgaXMgdmVyeSBsb3cuIEF0dGFjaCBNb3JlIAUMRW50ZXJBc3NldElEAjogVG9rZW5zIHRvIENsYWltIHRoZSBtaW5pbXVtIEFtb3VudCBvZiAwLjEgZG9sbGFyIGF0bGVhc3QuAwkAZgIFFHF1YW50aXR5b2ZwcmljZWFzc2V0BQ9DaGVja1hUTkJhbGFuY2UJAAIBCQCsAgIJAKwCAgIdUG9vbCBPbmx5IGhhcyBhIExpcXVpZGl0eSBvZiAJAKQDAQkAaQIFD0NoZWNrWFROQmFsYW5jZQkAbAYACgAAAAYAAAAABQdDRUlMSU5HAh4gWFROLiBBZGQgTGlxdWlkaXR5IGludG8gUG9vbC4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICGVRvdGFsX1N3YXBfRmVlX0NvbGxlY3RlZF8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBRtOZXdTdW11cG9mQXNzZXRUb1hUTlN3YXBGZWUJAMwIAgkBDEludGVnZXJFbnRyeQICC0N1cnJlbnRfRGF5BQpDdXJyZW50ZGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICE1RvdGFsX29mX1BhaXJfVHhuc18FDEVudGVyQXNzZXRJRAUGTmV3VFBUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQFFk5ld1N1bXVwb2ZBc3NldEJhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAUUTmV3U3VtdXBvZlhUTkJhbGFuY2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBRR1c2VyYmFsYW5jZXRvcmVjZWl2ZQUKWFROQXNzZXRJRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFDb2xsZWN0RmVlQWRkcmVzcwUQU3dhcEZlZXRvcmVjZWl2ZQUKWFROQXNzZXRJRAUDbmlsAWkBF1N3YXBYVE5Ub0Fzc2V0UGFpckVudHJ5AQxFbnRlckFzc2V0SUQEDWNhbGxlcmFkZHJlc3MJANgEAQgIBQFpBmNhbGxlcgVieXRlcwQDcG10AwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQkAkQMCCAUBaQhwYXltZW50cwAACQACAQkArAICCQCsAgICBU9ubHkgCQDYBAEFClhUTkFzc2V0SUQCMSBYVE4gVG9rZW4gaXMgcmVxdWlyZWQgYXMgYW4gQXR0YWNoZWQgcGF5bWVudFsxXS4ED0NoZWNrWFROQmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBBFDaGVja0Fzc2V0QmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEBBFuZXdiYWxhbmNlb2ZBc3NldAkAawMFD0NoZWNrWFROQmFsYW5jZQURQ2hlY2tBc3NldEJhbGFuY2UJAGQCBQ9DaGVja1hUTkJhbGFuY2UIBQNwbXQGYW1vdW50BBRxdWFudGl0eW9mcHJpY2Vhc3NldAkAZQIFEUNoZWNrQXNzZXRCYWxhbmNlBRFuZXdiYWxhbmNlb2ZBc3NldAQZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEB1N3YXBGZWUAAwQKQ3VycmVudGRheQkBCWNvdW50ZGF5cwAEEFN3YXBGZWV0b3JlY2VpdmUJAGkCCQBoAgUUcXVhbnRpdHlvZnByaWNlYXNzZXQFB1N3YXBGZWUA6AcEFHVzZXJiYWxhbmNldG9yZWNlaXZlCQBlAgkAZQIFFHF1YW50aXR5b2ZwcmljZWFzc2V0BRBTd2FwRmVldG9yZWNlaXZlBRBTd2FwRmVldG9yZWNlaXZlBBhTdW11cG9mWFROVG9Bc3NldFN3YXBGZWUEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEG05ld1N1bXVwb2ZYVE5Ub0Fzc2V0U3dhcEZlZQkAZAIJAGQCBRhTdW11cG9mWFROVG9Bc3NldFN3YXBGZWUFEFN3YXBGZWV0b3JlY2VpdmUFEFN3YXBGZWV0b3JlY2VpdmUEEVN1bXVwQXNzZXRCYWxhbmNlBAckbWF0Y2gwCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAZAIJAGUCBRFDaGVja0Fzc2V0QmFsYW5jZQUUcXVhbnRpdHlvZnByaWNlYXNzZXQFEFN3YXBGZWV0b3JlY2VpdmUED1N1bXVwWFROQmFsYW5jZQQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEFE5ld1N1bXVwb2ZYVE5CYWxhbmNlCQBkAgUPQ2hlY2tYVE5CYWxhbmNlCAUDcG10BmFtb3VudAQEVE9QVAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAhNUb3RhbF9vZl9QYWlyX1R4bnNfBQxFbnRlckFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEBk5ld1RQVAkAZAIFBFRPUFQAAQMJAQIhPQIFGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFDEVudGVyQXNzZXRJRAkAAgECK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAgUMRW50ZXJBc3NldElECQDYBAEFClhUTkFzc2V0SUQJAAIBAndJbnB1dCBjYW4gTmV2ZXIgYmUgYSBYVE4gQXNzZXRJRC4gRW50ZXIgV2hpdGVsaXN0ZWQgQXNzZXRJRCBpbiBpbnB1dCAmIEF0dGFjaCBYVE4gYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzFdLgMJAQIhPQIIBQNwbXQHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECe1lvdSBjYW4gQXR0YWNoIFhUTiBhcyBhbiBBdHRhY2hlZCBQYXltZW50WzFdIHRvIFN3YXAgWFROIFRvIFJlcXVpcmVkIFRva2VuLiBBbnkgb3RoZXIgYXNzZXQgZWxzZSB0aGFuIFhUTiB3aWxsIGJlIHJlamVjdGVkLgMJAGYCAKCNBggFA3BtdAZhbW91bnQJAAIBAllZb3VyIEF0dGFjaGVkIFhUTiBBbW91bnQgaXMgdmVyeSBsb3cuIEF0dGFjaCBBdGxlYXN0IDAuMSBYVE4gdG8gQ2xhaW0gdGhlIG1pbmltdW0gVG9rZW5zLgMJAAACBQ9DaGVja1hUTkJhbGFuY2UAAAkAAgECZVN3YXAgUGFpciBOZWVkIHRvIEFkZCBMaXF1aWRpdHkgZmlyc3QgaW50byBQb29sLiBPbmx5IEFmdGVyIHRoYXQgUGFpciB3aWxsIGJlIGFjdGl2YXRlZCBmb3IgU3dhcHBpbmcuAwkAAAIFEUNoZWNrQXNzZXRCYWxhbmNlAAAJAAIBAmVTd2FwIFBhaXIgTmVlZCB0byBBZGQgTGlxdWlkaXR5IGZpcnN0IGludG8gUG9vbC4gT25seSBBZnRlciB0aGF0IFBhaXIgd2lsbCBiZSBhY3RpdmF0ZWQgZm9yIFN3YXBwaW5nLgMJAGYCBRRxdWFudGl0eW9mcHJpY2Vhc3NldAURQ2hlY2tBc3NldEJhbGFuY2UJAAIBCQCsAgIJAKwCAgIdUG9vbCBPbmx5IGhhcyBhIExpcXVpZGl0eSBvZiAJAKQDAQURQ2hlY2tBc3NldEJhbGFuY2UCISBUb2tlbnMuIEFkZCBMaXF1aWRpdHkgaW50byBQb29sLgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhlUb3RhbF9Td2FwX0ZlZV9Db2xsZWN0ZWRfBQxFbnRlckFzc2V0SUQFG05ld1N1bXVwb2ZYVE5Ub0Fzc2V0U3dhcEZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgILQ3VycmVudF9EYXkFCkN1cnJlbnRkYXkJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgITVG90YWxfb2ZfUGFpcl9UeG5zXwUMRW50ZXJBc3NldElEBQZOZXdUUFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAUWTmV3U3VtdXBvZkFzc2V0QmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBRROZXdTdW11cG9mWFROQmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFFHVzZXJiYWxhbmNldG9yZWNlaXZlCQDZBAEFDEVudGVyQXNzZXRJRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRFDb2xsZWN0RmVlQWRkcmVzcwUQU3dhcEZlZXRvcmVjZWl2ZQkA2QQBBQxFbnRlckFzc2V0SUQFA25pbAFpARJMYXRlc3RBZGRMaXF1aWRpdHkBDEVudGVyQXNzZXRJRAQNY2FsbGVyYWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBARwbXQxCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBHBtdDIJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEDlJlaXNzdWVhc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgICA0xQXwUMRW50ZXJBc3NldElEAixMUCBUb2tlbiBpcyBNaXNzaW5nIG9yIE1heSBiZSBub3QgR2VuZXJhdGVkLgQPQ2hlY2tYVE5CYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQEEUNoZWNrQXNzZXRCYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQEDGRlY2ltYWxzaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUMRW50ZXJBc3NldElECQCsAgIJAKwCAgIGQXNzZXQgBQxFbnRlckFzc2V0SUQCDiBkb2Vzbid0IGV4aXN0BAhkZWNpbWFscwgFDGRlY2ltYWxzaW5mbwhkZWNpbWFscwQKTFBkZWNpbWFscwkAawMJAGQCBQhkZWNpbWFscwAGAAEAAgQKRmlyc3RMUFF0eQkAaAIAAQkAbAYACgAABQpMUGRlY2ltYWxzAAAAAAUHQ0VJTElORwQQbXVsdGlwbHlfYW1vdW50cwkAawMIBQRwbXQxBmFtb3VudAgFBHBtdDIGYW1vdW50BQpGaXJzdExQUXR5BAdnZXRTcXJ0CQEEc3FydAQFEG11bHRpcGx5X2Ftb3VudHMFCkxQZGVjaW1hbHMFCkxQZGVjaW1hbHMFB0NFSUxJTkcEEFhUTkhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBNOZXdYVE5Ib2xkaW5nSW5QYWlyCQBkAgUQWFROSG9sZGluZ0luUGFpcggFBHBtdDIGYW1vdW50BBJBc3NldEhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVOZXdBc3NldEhvbGRpbmdJblBhaXIJAGQCBRJBc3NldEhvbGRpbmdJblBhaXIIBQRwbXQxBmFtb3VudAQNTFBUb2tlbklzc3VlZAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQTmV3TFBUb2tlbklzc3VlZAkAZAIFDUxQVG9rZW5Jc3N1ZWQFB2dldFNxcnQDCQECIT0CBRljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQxFbnRlckFzc2V0SUQJAAIBAitQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0ZWQgQXNzZXQuAwkAAAIFDEVudGVyQXNzZXRJRAkA2AQBBQpYVE5Bc3NldElECQACAQKQAUlucHV0IGNhbiBOZXZlciBiZSBhIFhUTiBBc3NldElELiBFbnRlciBXaGl0ZWxpc3RlZCBBc3NldElEIGluIGlucHV0IGFzIHdlbGwgYXMgaW4gcGF5bWVudFsxXSAmIEF0dGFjaCBYVE4gYXMgYW4gYXR0YWNobWVudCBUb2tlbiBpbiBwYXltZW50WzJdLgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAgkAAgECiwFUd28gYXR0YWNoZWQgYXNzZXRzIGFyZSBleHBlY3RlZCBpbiBwYXltZW50LiBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVG9rZW4geW91IHdhbnQgdG8gYWRkIGZvciBMaXF1aWRpdHkgJiBwYXltZW50MiA9IEFtb3VudCBvZiBYVE4gVG9rZW4uAwkAAAIIBQRwbXQxB2Fzc2V0SWQFClhUTkFzc2V0SUQJAAIBAnZZb3UgQXR0YWNoZWQgWFROIGFzc2V0IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggb25seSB3aGl0ZWxpc3RlZCBUb2tlbiBpbiBwYXltZW50WzFdIGFsb25nIHdpdGggWFROIGluIHBheW1lbnRbMl0uAwkBAiE9AggFBHBtdDEHYXNzZXRJZAkA2QQBBQxFbnRlckFzc2V0SUQJAAIBAmtJbmNvcnJlY3QgYXNzZXQgYXR0YWNoZWQgZm9yIExpcXVpZGl0eSBpbiBwYXltZW50WzFdLCBwbGVhc2UgYXR0YWNoIFN0cmluZyBBc3NldCBvciBXaGl0ZWxpc3RlZCBUb2tlbiBvbmx5LgMJAQIhPQIIBQRwbXQyB2Fzc2V0SWQFClhUTkFzc2V0SUQJAAIBAmlXcm9uZyBBc3NldCBBdHRhY2hlZCBpbiBwYXltZW50c1syXSwgUGxlYXNlIGF0dGFjaCBwYXltZW50WzFdID0gTGlxdWlkaXR5IFRva2VuICYgcGF5bWVudFsyXSA9IFhUTiBUb2tlbi4DCQBmAgCgjQYIBQRwbXQyBmFtb3VudAkAAgECVXBsZWFzZSBhdHRhY2ggYXRsZWFzdCAwLjEgWFROIGluIHBheW1lbnRbMl0gJiBFcXVpdmFsZW50IHdvcnRoIG9mIFRva2VuIGluIHBheW1lbnRbMV0DCQBmAgABBQdnZXRTcXJ0CQACAQJLTFAgVG9rZW4gT3V0Y29tZSBpcyBnb2luZyBiZWxvdyAxIGluIEZyYWN0aW9uYWwuIFBsZWFzZSBBdHRhY2ggbW9yZSBhbW91bnQuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQFE05ld1hUTkhvbGRpbmdJblBhaXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAUVTmV3QXNzZXRIb2xkaW5nSW5QYWlyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICCVRvdGFsX0xQXwUMRW50ZXJBc3NldElEBRBOZXdMUFRva2VuSXNzdWVkCQDMCAIJAQdSZWlzc3VlAwUOUmVpc3N1ZWFzc2V0SWQFB2dldFNxcnQGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUHZ2V0U3FydAUOUmVpc3N1ZWFzc2V0SWQFA25pbAFpAQxBZGRMaXF1aWRpdHkBDEVudGVyQXNzZXRJRAQNY2FsbGVyYWRkcmVzcwkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBARwbXQxCQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEBHBtdDIJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQQZY2hlY2twYWlyaXNhdmFpbGFibGVvcm5vdAkAnQgCBQR0aGlzCQCsAgICCFBhaXJfVVZfBQxFbnRlckFzc2V0SUQEDlJlaXNzdWVhc3NldElkCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgICA0xQXwUMRW50ZXJBc3NldElEAixMUCBUb2tlbiBpcyBNaXNzaW5nIG9yIE1heSBiZSBub3QgR2VuZXJhdGVkLgQPQ2hlY2tYVE5CYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQEEUNoZWNrQXNzZXRCYWxhbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQEDGRlY2ltYWxzaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUMRW50ZXJBc3NldElECQCsAgIJAKwCAgIGQXNzZXQgBQxFbnRlckFzc2V0SUQCDiBkb2Vzbid0IGV4aXN0BAhkZWNpbWFscwgFDGRlY2ltYWxzaW5mbwhkZWNpbWFscwQEYXJnMQUPQ2hlY2tYVE5CYWxhbmNlBARhcmcyBRFDaGVja0Fzc2V0QmFsYW5jZQQFYXJnczMJAGwGCQBoAgkAaQIJAGgCBQRhcmcxAMCEPQUEYXJnMgkAbAYACgAABQhkZWNpbWFscwAAAAAFB0NFSUxJTkcAAAABAAAAAAUHQ0VJTElORwQSYm90aGFzc2V0c2RlY2ltYWxzCQBkAgAGBQhkZWNpbWFscwQNc2hhcmVkZWNpbWFscwkAaQIFEmJvdGhhc3NldHNkZWNpbWFscwACBBZxdWFudGl0eW9mRW50ZXJBc3NldElECQBrAwUFYXJnczMIBQRwbXQxBmFtb3VudAkAbAYACgAABRJib3RoYXNzZXRzZGVjaW1hbHMAAAAABQdDRUlMSU5HBBJxdWFudGl0eW9mTFBUb2tlbjEJAGwGCQBoAgkAawMIBQRwbXQxBmFtb3VudAABCQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUHQ0VJTElORwkAawMIBQRwbXQyBmFtb3VudAABCQBsBgAKAAAABgAAAAAFB0NFSUxJTkcAAAAFAAEFDXNoYXJlZGVjaW1hbHMFBERPV04EEFhUTkhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBNOZXdYVE5Ib2xkaW5nSW5QYWlyCQBkAgUQWFROSG9sZGluZ0luUGFpcggFBHBtdDIGYW1vdW50BBJBc3NldEhvbGRpbmdJblBhaXIEByRtYXRjaDAJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBVOZXdBc3NldEhvbGRpbmdJblBhaXIJAGQCBRJBc3NldEhvbGRpbmdJblBhaXIIBQRwbXQxBmFtb3VudAQNTFBUb2tlbklzc3VlZAQHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQQTmV3TFBUb2tlbklzc3VlZAkAZAIFDUxQVG9rZW5Jc3N1ZWQFEnF1YW50aXR5b2ZMUFRva2VuMQMJAQIhPQIFGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QFDEVudGVyQXNzZXRJRAkAAgECK1BhaXIgaXMgbm90IGF2YWlsYWJsZSBpbiBXaGl0ZWxpc3RlZCBBc3NldC4DCQAAAgUMRW50ZXJBc3NldElECQDYBAEFClhUTkFzc2V0SUQJAAIBApABSW5wdXQgY2FuIE5ldmVyIGJlIGEgWFROIEFzc2V0SUQuIEVudGVyIFdoaXRlbGlzdGVkIEFzc2V0SUQgaW4gaW5wdXQgYXMgd2VsbCBhcyBpbiBwYXltZW50WzFdICYgQXR0YWNoIFhUTiBhcyBhbiBhdHRhY2htZW50IFRva2VuIGluIHBheW1lbnRbMl0uAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQKdAVR3byBhdHRhY2hlZCBhc3NldHMgZXhwZWN0ZWQgYXMgcGF5bWVudCBpbiA1MCUtNTAlLiBLaW5kbHkgQXR0YWNoIHBheW1lbnQxID0gVG9rZW4geW91IHdhbnQgdG8gYWRkIGZvciBMaXF1aWRpdHkgJiBwYXltZW50MiA9IEVxdWl2YWxlbnQgQW1vdW50IG9mIFhUTiBUb2tlbi4DCQAAAggFBHBtdDEHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECdllvdSBBdHRhY2hlZCBYVE4gYXNzZXQgaW4gcGF5bWVudFsxXSwgcGxlYXNlIGF0dGFjaCBvbmx5IHdoaXRlbGlzdGVkIFRva2VuIGluIHBheW1lbnRbMV0gYWxvbmcgd2l0aCBYVE4gaW4gcGF5bWVudFsyXS4DCQECIT0CCAUEcG10MQdhc3NldElkCQDZBAEFDEVudGVyQXNzZXRJRAkAAgECa0luY29ycmVjdCBhc3NldCBhdHRhY2hlZCBmb3IgTGlxdWlkaXR5IGluIHBheW1lbnRbMV0sIHBsZWFzZSBhdHRhY2ggU3RyaW5nIEFzc2V0IG9yIFdoaXRlbGlzdGVkIFRva2VuIG9ubHkuAwkBAiE9AggFBHBtdDIHYXNzZXRJZAUKWFROQXNzZXRJRAkAAgECaVdyb25nIEFzc2V0IEF0dGFjaGVkIGluIHBheW1lbnRzWzJdLCBQbGVhc2UgYXR0YWNoIHBheW1lbnRbMV0gPSBMaXF1aWRpdHkgVG9rZW4gJiBwYXltZW50WzJdID0gWFROIFRva2VuLgMJAGYCAMCWsQIIBQRwbXQyBmFtb3VudAkAAgECU3BsZWFzZSBhdHRhY2ggYXRsZWFzdCA1IFhUTiBpbiBwYXltZW50WzJdICYgRXF1aXZhbGVudCB3b3J0aCBvZiBUb2tlbiBpbiBwYXltZW50WzFdAwkBAiE9AggFBHBtdDIGYW1vdW50BRZxdWFudGl0eW9mRW50ZXJBc3NldElECQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgJeQXR0YWNoZWQgcGF5bWVudFsyXSBxdHkgaXMgbm90IG1hdGNoaW5nIGFzIHBlciBhdHRhY2hlZCBwYXltZW50WzFdLnBheW1lbnRbMl0gbXVzdCBiZSBhcyBpbnQgWwkApAMBBRZxdWFudGl0eW9mRW50ZXJBc3NldElEAgVdIG9yIAkApAMBCQBrAwUWcXVhbnRpdHlvZkVudGVyQXNzZXRJRAABAMCEPQIBLgkAsgICCQCkAwEFFnF1YW50aXR5b2ZFbnRlckFzc2V0SUQABgIFIFhUTi4DCQBmAgABBRJxdWFudGl0eW9mTFBUb2tlbjEJAAIBCQCsAgIJAKwCAgIgTFAgVG9rZW4gT3V0Y29tZSBpcyBnb2luZyBiZWxvdyAJAKQDAQUNc2hhcmVkZWNpbWFscwI6IERlY2ltYWxzLiBQbGVhc2UgQXR0YWNoIG1pbi4gMSBMUCB0b2tlbiBvciA1IFhUTiBBdGxlYXN0LgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBRNOZXdYVE5Ib2xkaW5nSW5QYWlyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwkA2AQBBQpYVE5Bc3NldElEAgFfBQxFbnRlckFzc2V0SUQFFU5ld0Fzc2V0SG9sZGluZ0luUGFpcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAglUb3RhbF9MUF8FDEVudGVyQXNzZXRJRAUQTmV3TFBUb2tlbklzc3VlZAkAzAgCCQEHUmVpc3N1ZQMFDlJlaXNzdWVhc3NldElkBRJxdWFudGl0eW9mTFBUb2tlbjEGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUScXVhbnRpdHlvZkxQVG9rZW4xBQ5SZWlzc3VlYXNzZXRJZAUDbmlsAWkBD1JlbW92ZUxpcXVpZGl0eQEMRW50ZXJBc3NldElEBA1jYWxsZXJhZGRyZXNzCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECOk5vIHBheW1lbnQgYXR0YWNoZWQsIFBsZWFzZSBBdHRhY2ggTFAgVG9rZW4gYXMgcGF5bWVudFsxXS4EGWNoZWNrcGFpcmlzYXZhaWxhYmxlb3Jub3QJAJ0IAgUEdGhpcwkArAICAghQYWlyX1VWXwUMRW50ZXJBc3NldElEBBJSZWlzc3VlYWJsZWFzc2V0SWQJANkEAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgIDTFBfBQxFbnRlckFzc2V0SUQCJUxQIFRva2VuIGlzIE1pc3Npbmcgb3Igbm90IEdlbmVyYXRlZC4EDGRlY2ltYWxzaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUMRW50ZXJBc3NldElECQCsAgIJAKwCAgIGQXNzZXQgBQxFbnRlckFzc2V0SUQCDiBkb2Vzbid0IGV4aXN0BAhkZWNpbWFscwgFDGRlY2ltYWxzaW5mbwhkZWNpbWFscwQSYm90aGFzc2V0c2RlY2ltYWxzCQBkAgAGBQhkZWNpbWFscwQNc2hhcmVkZWNpbWFscwkAaQIFEmJvdGhhc3NldHNkZWNpbWFscwACBBJDaGVja1RvdGFsTFBBbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgIJVG90YWxfTFBfBQxFbnRlckFzc2V0SUQEEFVzZXJMUFBlcmNlbnRhZ2UJAGwGCQBrAwgFA3BtdAZhbW91bnQJAGwGAAoAAAAIAAAAAAUHQ0VJTElORwUSQ2hlY2tUb3RhbExQQW1vdW50AAYAAQAAAAYFB0NFSUxJTkcED0NoZWNrWFROQmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8FDEVudGVyQXNzZXRJRAIBXwkA2AQBBQpYVE5Bc3NldElEBBFDaGVja0Fzc2V0QmFsYW5jZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEBA5Vc2VyTFBXb3J0aFhUTgkAawMFD0NoZWNrWFROQmFsYW5jZQUQVXNlckxQUGVyY2VudGFnZQkAbAYACgAAAAgAAAAABQdDRUlMSU5HBBBVc2VyTFBXb3J0aEFzc2V0CQBrAwURQ2hlY2tBc3NldEJhbGFuY2UFEFVzZXJMUFBlcmNlbnRhZ2UJAGwGAAoAAAAIAAAAAAUHQ0VJTElORwQQWFROSG9sZGluZ0luUGFpcgQHJG1hdGNoMAkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICAgtCYWxhbmNlX29mXwUMRW50ZXJBc3NldElEAgFfCQDYBAEFClhUTkFzc2V0SUQDCQABAgUHJG1hdGNoMAIDSW50BAFhBQckbWF0Y2gwBQFhAAAEE05ld1hUTkhvbGRpbmdJblBhaXIJAGUCBRBYVE5Ib2xkaW5nSW5QYWlyBQ5Vc2VyTFBXb3J0aFhUTgQSQXNzZXRIb2xkaW5nSW5QYWlyBAckbWF0Y2gwCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfCQDYBAEFClhUTkFzc2V0SUQCAV8FDEVudGVyQXNzZXRJRAMJAAECBQckbWF0Y2gwAgNJbnQEAWEFByRtYXRjaDAFAWEAAAQVTmV3QXNzZXRIb2xkaW5nSW5QYWlyCQBlAgUSQXNzZXRIb2xkaW5nSW5QYWlyBRBVc2VyTFBXb3J0aEFzc2V0BA1MUFRva2VuSXNzdWVkBAckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgICCVRvdGFsX0xQXwUMRW50ZXJBc3NldElEAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQAABBBOZXdMUFRva2VuSXNzdWVkCQBlAgUNTFBUb2tlbklzc3VlZAgFA3BtdAZhbW91bnQDCQECIT0CBRljaGVja3BhaXJpc2F2YWlsYWJsZW9ybm90BQxFbnRlckFzc2V0SUQJAAIBAiNQYWlyIGlzIG5vdCBhdmFpbGFibGUgaW4gV2hpdGVsaXN0LgMJAAACCQDZBAEFDEVudGVyQXNzZXRJRAUKWFROQXNzZXRJRAkAAgECakRvbid0IGNob29zZSBYVE4gQXNzZXRJRCBhcyBJbnB1dCwgT25seSBXaGl0ZWxpc3RlZCBBc3NldCBhcyBJbnB1dCBTdHJpbmcgJiBBdHRhY2ggTFAgVG9rZW5zIGFzIHBheW1lbnRbMV0DCQECIT0CCAUDcG10B2Fzc2V0SWQFElJlaXNzdWVhYmxlYXNzZXRJZAkAAgECR1dyb25nIEFzc2V0IGlzIGF0dGFjaGVkIGluIHBheW1lbnRbMV0gb3IgTFAgVG9rZW4gTm90IEZvdW5kIG9yIE1pc3NpbmcuAwkAZgIAAQUQVXNlckxQUGVyY2VudGFnZQkAAgECLllvdXIgTFAgVG9rZW4gYW1vdW50ICUgaXMgdmVyeSBsb3cgdG8gY29udmVydC4DCQBmAgABBQ5Vc2VyTFBXb3J0aFhUTgkAAgECUVlvdXIgTFAgVG9rZW4gY29udmVyc2lvbiBhbW91bnQgaXMgdmVyeSBsb3cgdG8gY29udmVydCBvciBsZXNzIHRoYW4gMC4wMDAwMDEgWFROLgMJAGYCAAEFEFVzZXJMUFdvcnRoQXNzZXQJAAIBAlxZb3VyIExQIFRva2VuIGNvbnZlcnNpb24gYW1vdW50IGlzIHZlcnkgbG93IHRvIGNvbnZlcnQgb3IgbGVzcyB0aGFuIGZyYWN0aW9uIHZhbHVlIG9mIFRva2VuLgkAzAgCCQEMSW50ZWdlckVudHJ5AgIWV2l0aGRyYXdfTFBfUGVyY2VudGFnZQUQVXNlckxQUGVyY2VudGFnZQkAzAgCCQEEQnVybgIFElJlaXNzdWVhYmxlYXNzZXRJZAgFA3BtdAZhbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgIJVG90YWxfTFBfBQxFbnRlckFzc2V0SUQFEE5ld0xQVG9rZW5Jc3N1ZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgICC0JhbGFuY2Vfb2ZfBQxFbnRlckFzc2V0SUQCAV8JANgEAQUKWFROQXNzZXRJRAUTTmV3WFROSG9sZGluZ0luUGFpcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgILQmFsYW5jZV9vZl8JANgEAQUKWFROQXNzZXRJRAIBXwUMRW50ZXJBc3NldElEBRVOZXdBc3NldEhvbGRpbmdJblBhaXIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ5Vc2VyTFBXb3J0aFhUTgUKWFROQXNzZXRJRAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFEFVzZXJMUFdvcnRoQXNzZXQJANkEAQUMRW50ZXJBc3NldElEBQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5nQxUrg==", "height": 2769119, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9RMqGaS7htDjdg9JHWteCNNSDJMnui3ALmSDPesFCyND Next: Gjv6hNZfH8Pbz3vNLYGLvTCaWRtbo1yfAM4pG4J6CeLj Diff:
OldNewDifferences
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppSinceStart = 1694928600000
55
6-let listing_fee = 700000000
6+let listing_fee = 140000000
77
88 let XTNAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
99
2020 func RegisterPair (EnterAssetID) = {
2121 let pmt1 = value(i.payments[0])
2222 let pmt2 = value(i.payments[1])
23+ let pmt3 = value(i.payments[2])
2324 let currentKey = toBase58String(i.caller.bytes)
2425 let WAVES = !(isDefined(pmt2.assetId))
2526 let fetchpair = getString(this, ("Pair_UV_" + EnterAssetID))
4445 then throw("Attached payment[1] amount is less than 0.1 XTN, please attach 0.1 XTN Minimum.")
4546 else if ((pmt2.assetId != assetinfopmt2))
4647 then throw("Input String & Attached AssetID in payment2 is not matching.")
47- else if ((WAVES == true))
48- then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
49- else [StringEntry(("Pair_UV_" + EnterAssetID), EnterAssetID), IntegerEntry(("Listing_Fee_" + EnterAssetID), pmt1.amount), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), pmt1.amount), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), pmt2.amount), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + toBase58String(XTNAssetID)) + "_") + EnterAssetID), 0), LPissue, ScriptTransfer(i.caller, getSqrt, LPid), StringEntry(("LP_" + EnterAssetID), toBase58String(LPid)), IntegerEntry(("Total_LP_" + EnterAssetID), getSqrt)]
48+ else if ((pmt3.amount != listing_fee))
49+ then throw((("Attached payment[3] amount has to be exact [" + toString(listing_fee)) + "/10^8] WAVES."))
50+ else if ((WAVES == true))
51+ then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
52+ else [StringEntry(("Pair_UV_" + EnterAssetID), EnterAssetID), IntegerEntry(("Listing_Fee_" + EnterAssetID), pmt3.amount), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), pmt1.amount), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), pmt2.amount), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + toBase58String(XTNAssetID)) + "_") + EnterAssetID), 0), LPissue, ScriptTransfer(i.caller, getSqrt, LPid), StringEntry(("LP_" + EnterAssetID), toBase58String(LPid)), IntegerEntry(("Total_LP_" + EnterAssetID), getSqrt)]
5053 }
5154
5255
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let dAppSinceStart = 1694928600000
55
6-let listing_fee = 700000000
6+let listing_fee = 140000000
77
88 let XTNAssetID = base58'Zn3cLHW7aAVPm5aACcTjvg7e7iEy2cKDtbowok5qa9H'
99
1010 let CollectFeeAddress = addressFromPublicKey(base58'6Z73KxcX3sugpiStpSRXxKxTmWqCaLVwFeM6kwyiKVDR')
1111
1212 func countdays () = {
1313 let TS_Diff = (lastBlock.timestamp - dAppSinceStart)
1414 let daynumber = fraction(1, TS_Diff, 86400000)
1515 daynumber
1616 }
1717
1818
1919 @Callable(i)
2020 func RegisterPair (EnterAssetID) = {
2121 let pmt1 = value(i.payments[0])
2222 let pmt2 = value(i.payments[1])
23+ let pmt3 = value(i.payments[2])
2324 let currentKey = toBase58String(i.caller.bytes)
2425 let WAVES = !(isDefined(pmt2.assetId))
2526 let fetchpair = getString(this, ("Pair_UV_" + EnterAssetID))
2627 let assetinfopmt2 = fromBase58String(EnterAssetID)
2728 let Currentday = countdays()
2829 let info = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
2930 let name = info.name
3031 let decimals = info.decimals
3132 let LPdecimals = fraction((decimals + 6), 1, 2)
3233 let FirstLPQty = (1 * pow(10, 0, LPdecimals, 0, 0, CEILING))
3334 let multiply_amounts = fraction(pmt1.amount, pmt2.amount, FirstLPQty)
3435 let getSqrt = sqrt(multiply_amounts, LPdecimals, LPdecimals, CEILING)
3536 let LPissue = Issue((("LP-" + take(name, 8)) + "-XTN"), (((("LP-" + name) + "-XTN") + " is a Liquidity Provider Token Issued Against ") + EnterAssetID), getSqrt, LPdecimals, true)
3637 let LPid = calculateAssetId(LPissue)
3738 if ((fetchpair == EnterAssetID))
3839 then throw("Pair Already Exist in List.")
3940 else if ((size(i.payments) != 3))
4041 then throw((("Two attached assets expected as payment. Kindly Attach payment1 = XTN Token & payment2 = Token you want to List & payment3 = [" + toString(listing_fee)) + "/10^8] Waves."))
4142 else if ((pmt1.assetId != XTNAssetID))
4243 then throw("Incorrect asset attached as payment[1], please attach XTN only.")
4344 else if ((100000 > pmt1.amount))
4445 then throw("Attached payment[1] amount is less than 0.1 XTN, please attach 0.1 XTN Minimum.")
4546 else if ((pmt2.assetId != assetinfopmt2))
4647 then throw("Input String & Attached AssetID in payment2 is not matching.")
47- else if ((WAVES == true))
48- then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
49- else [StringEntry(("Pair_UV_" + EnterAssetID), EnterAssetID), IntegerEntry(("Listing_Fee_" + EnterAssetID), pmt1.amount), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), pmt1.amount), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), pmt2.amount), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + toBase58String(XTNAssetID)) + "_") + EnterAssetID), 0), LPissue, ScriptTransfer(i.caller, getSqrt, LPid), StringEntry(("LP_" + EnterAssetID), toBase58String(LPid)), IntegerEntry(("Total_LP_" + EnterAssetID), getSqrt)]
48+ else if ((pmt3.amount != listing_fee))
49+ then throw((("Attached payment[3] amount has to be exact [" + toString(listing_fee)) + "/10^8] WAVES."))
50+ else if ((WAVES == true))
51+ then throw("You Attached WAVES Asset ID for Listing, please attach Tokens You want to list in payment[2].")
52+ else [StringEntry(("Pair_UV_" + EnterAssetID), EnterAssetID), IntegerEntry(("Listing_Fee_" + EnterAssetID), pmt3.amount), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), pmt1.amount), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), pmt2.amount), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), 0), IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + EnterAssetID) + "_") + toBase58String(XTNAssetID)), 0), IntegerEntry(((((toString(Currentday) + "_Day_Volume_") + toBase58String(XTNAssetID)) + "_") + EnterAssetID), 0), LPissue, ScriptTransfer(i.caller, getSqrt, LPid), StringEntry(("LP_" + EnterAssetID), toBase58String(LPid)), IntegerEntry(("Total_LP_" + EnterAssetID), getSqrt)]
5053 }
5154
5255
5356
5457 @Callable(i)
5558 func SwapAssetToXTNPairEntry (EnterAssetID) = {
5659 let calleraddress = toBase58String(i.caller.bytes)
5760 let pmt = if ((size(i.payments) == 1))
5861 then i.payments[0]
5962 else throw("Whitelisted Token is required as Attached payment[1].")
6063 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
6164 let CheckXTNBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)))
6265 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID))
6366 let newbalanceofXTN = fraction(CheckXTNBalance, CheckAssetBalance, (CheckAssetBalance + pmt.amount))
6467 let quantityofpriceasset = (CheckXTNBalance - newbalanceofXTN)
6568 let SwapFee = 3
6669 let Currentday = countdays()
6770 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
6871 let userbalancetoreceive = ((quantityofpriceasset - SwapFeetoreceive) - SwapFeetoreceive)
6972 let SumupofAssetToXTNSwapFee = match getInteger(this, ((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
7073 case a: Int =>
7174 a
7275 case _ =>
7376 0
7477 }
7578 let NewSumupofAssetToXTNSwapFee = ((SumupofAssetToXTNSwapFee + SwapFeetoreceive) + SwapFeetoreceive)
7679 let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID)) {
7780 case a: Int =>
7881 a
7982 case _ =>
8083 0
8184 }
8285 let NewSumupofAssetBalance = (CheckAssetBalance + pmt.amount)
8386 let SumupXTNBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
8487 case a: Int =>
8588 a
8689 case _ =>
8790 0
8891 }
8992 let NewSumupofXTNBalance = ((CheckXTNBalance - quantityofpriceasset) + SwapFeetoreceive)
9093 let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
9194 case a: Int =>
9295 a
9396 case _ =>
9497 0
9598 }
9699 let NewTPT = (TOPT + 1)
97100 if ((EnterAssetID == toBase58String(XTNAssetID)))
98101 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach Whitelisted Asset as an attachment Token in payment[1].")
99102 else if ((checkpairisavailableornot != EnterAssetID))
100103 then throw("Pair is not available in Whitelisted Asset.")
101104 else if ((pmt.assetId == XTNAssetID))
102105 then throw("You can't Attach XTN as an Attached Payment. Only Whitelisted Tokens are accepted.")
103106 else if ((pmt.assetId != fromBase58String(EnterAssetID)))
104107 then throw(("Incorrect asset attached, please attach or send " + EnterAssetID))
105108 else if ((CheckXTNBalance == 0))
106109 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
107110 else if ((CheckAssetBalance == 0))
108111 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
109112 else if ((100000 > quantityofpriceasset))
110113 then throw((("Your Attached Asset Amount is very low. Attach More " + EnterAssetID) + " Tokens to Claim the minimum Amount of 0.1 dollar atleast."))
111114 else if ((quantityofpriceasset > CheckXTNBalance))
112115 then throw((("Pool Only has a Liquidity of " + toString((CheckXTNBalance / pow(10, 0, 6, 0, 0, CEILING)))) + " XTN. Add Liquidity into Pool."))
113116 else [IntegerEntry(((("Total_Swap_Fee_Collected_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewSumupofAssetToXTNSwapFee), IntegerEntry("Current_Day", Currentday), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), NewTPT), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewSumupofXTNBalance), ScriptTransfer(i.caller, userbalancetoreceive, XTNAssetID), ScriptTransfer(CollectFeeAddress, SwapFeetoreceive, XTNAssetID)]
114117 }
115118
116119
117120
118121 @Callable(i)
119122 func SwapXTNToAssetPairEntry (EnterAssetID) = {
120123 let calleraddress = toBase58String(i.caller.bytes)
121124 let pmt = if ((size(i.payments) == 1))
122125 then i.payments[0]
123126 else throw((("Only " + toBase58String(XTNAssetID)) + " XTN Token is required as an Attached payment[1]."))
124127 let CheckXTNBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)))
125128 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID))
126129 let newbalanceofAsset = fraction(CheckXTNBalance, CheckAssetBalance, (CheckXTNBalance + pmt.amount))
127130 let quantityofpriceasset = (CheckAssetBalance - newbalanceofAsset)
128131 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
129132 let SwapFee = 3
130133 let Currentday = countdays()
131134 let SwapFeetoreceive = ((quantityofpriceasset * SwapFee) / 1000)
132135 let userbalancetoreceive = ((quantityofpriceasset - SwapFeetoreceive) - SwapFeetoreceive)
133136 let SumupofXTNToAssetSwapFee = match getInteger(this, ("Total_Swap_Fee_Collected_" + EnterAssetID)) {
134137 case a: Int =>
135138 a
136139 case _ =>
137140 0
138141 }
139142 let NewSumupofXTNToAssetSwapFee = ((SumupofXTNToAssetSwapFee + SwapFeetoreceive) + SwapFeetoreceive)
140143 let SumupAssetBalance = match getInteger(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID)) {
141144 case a: Int =>
142145 a
143146 case _ =>
144147 0
145148 }
146149 let NewSumupofAssetBalance = ((CheckAssetBalance - quantityofpriceasset) + SwapFeetoreceive)
147150 let SumupXTNBalance = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
148151 case a: Int =>
149152 a
150153 case _ =>
151154 0
152155 }
153156 let NewSumupofXTNBalance = (CheckXTNBalance + pmt.amount)
154157 let TOPT = match getIntegerValue(this, ("Total_of_Pair_Txns_" + EnterAssetID)) {
155158 case a: Int =>
156159 a
157160 case _ =>
158161 0
159162 }
160163 let NewTPT = (TOPT + 1)
161164 if ((checkpairisavailableornot != EnterAssetID))
162165 then throw("Pair is not available in Whitelisted Asset.")
163166 else if ((EnterAssetID == toBase58String(XTNAssetID)))
164167 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input & Attach XTN as an attachment Token in payment[1].")
165168 else if ((pmt.assetId != XTNAssetID))
166169 then throw("You can Attach XTN as an Attached Payment[1] to Swap XTN To Required Token. Any other asset else than XTN will be rejected.")
167170 else if ((100000 > pmt.amount))
168171 then throw("Your Attached XTN Amount is very low. Attach Atleast 0.1 XTN to Claim the minimum Tokens.")
169172 else if ((CheckXTNBalance == 0))
170173 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
171174 else if ((CheckAssetBalance == 0))
172175 then throw("Swap Pair Need to Add Liquidity first into Pool. Only After that Pair will be activated for Swapping.")
173176 else if ((quantityofpriceasset > CheckAssetBalance))
174177 then throw((("Pool Only has a Liquidity of " + toString(CheckAssetBalance)) + " Tokens. Add Liquidity into Pool."))
175178 else [IntegerEntry(("Total_Swap_Fee_Collected_" + EnterAssetID), NewSumupofXTNToAssetSwapFee), IntegerEntry("Current_Day", Currentday), IntegerEntry(("Total_of_Pair_Txns_" + EnterAssetID), NewTPT), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), NewSumupofAssetBalance), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewSumupofXTNBalance), ScriptTransfer(i.caller, userbalancetoreceive, fromBase58String(EnterAssetID)), ScriptTransfer(CollectFeeAddress, SwapFeetoreceive, fromBase58String(EnterAssetID))]
176179 }
177180
178181
179182
180183 @Callable(i)
181184 func LatestAddLiquidity (EnterAssetID) = {
182185 let calleraddress = toBase58String(i.caller.bytes)
183186 let pmt1 = value(i.payments[0])
184187 let pmt2 = value(i.payments[1])
185188 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
186189 let ReissueassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or May be not Generated."))
187190 let CheckXTNBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)))
188191 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID))
189192 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
190193 let decimals = decimalsinfo.decimals
191194 let LPdecimals = fraction((decimals + 6), 1, 2)
192195 let FirstLPQty = (1 * pow(10, 0, LPdecimals, 0, 0, CEILING))
193196 let multiply_amounts = fraction(pmt1.amount, pmt2.amount, FirstLPQty)
194197 let getSqrt = sqrt(multiply_amounts, LPdecimals, LPdecimals, CEILING)
195198 let XTNHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
196199 case a: Int =>
197200 a
198201 case _ =>
199202 0
200203 }
201204 let NewXTNHoldingInPair = (XTNHoldingInPair + pmt2.amount)
202205 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID)) {
203206 case a: Int =>
204207 a
205208 case _ =>
206209 0
207210 }
208211 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt1.amount)
209212 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
210213 case a: Int =>
211214 a
212215 case _ =>
213216 0
214217 }
215218 let NewLPTokenIssued = (LPTokenIssued + getSqrt)
216219 if ((checkpairisavailableornot != EnterAssetID))
217220 then throw("Pair is not available in Whitelisted Asset.")
218221 else if ((EnterAssetID == toBase58String(XTNAssetID)))
219222 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach XTN as an attachment Token in payment[2].")
220223 else if ((size(i.payments) != 2))
221224 then throw("Two attached assets are expected in payment. Kindly Attach payment1 = Token you want to add for Liquidity & payment2 = Amount of XTN Token.")
222225 else if ((pmt1.assetId == XTNAssetID))
223226 then throw("You Attached XTN asset in payment[1], please attach only whitelisted Token in payment[1] along with XTN in payment[2].")
224227 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
225228 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
226229 else if ((pmt2.assetId != XTNAssetID))
227230 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = XTN Token.")
228231 else if ((100000 > pmt2.amount))
229232 then throw("please attach atleast 0.1 XTN in payment[2] & Equivalent worth of Token in payment[1]")
230233 else if ((1 > getSqrt))
231234 then throw("LP Token Outcome is going below 1 in Fractional. Please Attach more amount.")
232235 else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewXTNHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), Reissue(ReissueassetId, getSqrt, true), ScriptTransfer(i.caller, getSqrt, ReissueassetId)]
233236 }
234237
235238
236239
237240 @Callable(i)
238241 func AddLiquidity (EnterAssetID) = {
239242 let calleraddress = toBase58String(i.caller.bytes)
240243 let pmt1 = value(i.payments[0])
241244 let pmt2 = value(i.payments[1])
242245 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
243246 let ReissueassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or May be not Generated."))
244247 let CheckXTNBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)))
245248 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID))
246249 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
247250 let decimals = decimalsinfo.decimals
248251 let arg1 = CheckXTNBalance
249252 let arg2 = CheckAssetBalance
250253 let args3 = pow((((arg1 * 1000000) / arg2) * pow(10, 0, decimals, 0, 0, CEILING)), 0, 1, 0, 0, CEILING)
251254 let bothassetsdecimals = (6 + decimals)
252255 let sharedecimals = (bothassetsdecimals / 2)
253256 let quantityofEnterAssetID = fraction(args3, pmt1.amount, pow(10, 0, bothassetsdecimals, 0, 0, CEILING))
254257 let quantityofLPToken1 = pow((fraction(pmt1.amount, 1, pow(10, 0, decimals, 0, 0, CEILING)) * fraction(pmt2.amount, 1, pow(10, 0, 6, 0, 0, CEILING))), 0, 5, 1, sharedecimals, DOWN)
255258 let XTNHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
256259 case a: Int =>
257260 a
258261 case _ =>
259262 0
260263 }
261264 let NewXTNHoldingInPair = (XTNHoldingInPair + pmt2.amount)
262265 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID)) {
263266 case a: Int =>
264267 a
265268 case _ =>
266269 0
267270 }
268271 let NewAssetHoldingInPair = (AssetHoldingInPair + pmt1.amount)
269272 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
270273 case a: Int =>
271274 a
272275 case _ =>
273276 0
274277 }
275278 let NewLPTokenIssued = (LPTokenIssued + quantityofLPToken1)
276279 if ((checkpairisavailableornot != EnterAssetID))
277280 then throw("Pair is not available in Whitelisted Asset.")
278281 else if ((EnterAssetID == toBase58String(XTNAssetID)))
279282 then throw("Input can Never be a XTN AssetID. Enter Whitelisted AssetID in input as well as in payment[1] & Attach XTN as an attachment Token in payment[2].")
280283 else if ((size(i.payments) != 2))
281284 then throw("Two attached assets expected as payment in 50%-50%. Kindly Attach payment1 = Token you want to add for Liquidity & payment2 = Equivalent Amount of XTN Token.")
282285 else if ((pmt1.assetId == XTNAssetID))
283286 then throw("You Attached XTN asset in payment[1], please attach only whitelisted Token in payment[1] along with XTN in payment[2].")
284287 else if ((pmt1.assetId != fromBase58String(EnterAssetID)))
285288 then throw("Incorrect asset attached for Liquidity in payment[1], please attach String Asset or Whitelisted Token only.")
286289 else if ((pmt2.assetId != XTNAssetID))
287290 then throw("Wrong Asset Attached in payments[2], Please attach payment[1] = Liquidity Token & payment[2] = XTN Token.")
288291 else if ((5000000 > pmt2.amount))
289292 then throw("please attach atleast 5 XTN in payment[2] & Equivalent worth of Token in payment[1]")
290293 else if ((pmt2.amount != quantityofEnterAssetID))
291294 then throw((((((("Attached payment[2] qty is not matching as per attached payment[1].payment[2] must be as int [" + toString(quantityofEnterAssetID)) + "] or ") + toString(fraction(quantityofEnterAssetID, 1, 1000000))) + ".") + takeRight(toString(quantityofEnterAssetID), 6)) + " XTN."))
292295 else if ((1 > quantityofLPToken1))
293296 then throw((("LP Token Outcome is going below " + toString(sharedecimals)) + " Decimals. Please Attach min. 1 LP token or 5 XTN Atleast."))
294297 else [IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewXTNHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), Reissue(ReissueassetId, quantityofLPToken1, true), ScriptTransfer(i.caller, quantityofLPToken1, ReissueassetId)]
295298 }
296299
297300
298301
299302 @Callable(i)
300303 func RemoveLiquidity (EnterAssetID) = {
301304 let calleraddress = toBase58String(i.caller.bytes)
302305 let pmt = if ((size(i.payments) == 1))
303306 then i.payments[0]
304307 else throw("No payment attached, Please Attach LP Token as payment[1].")
305308 let checkpairisavailableornot = getString(this, ("Pair_UV_" + EnterAssetID))
306309 let ReissueableassetId = fromBase58String(valueOrErrorMessage(getString(this, ("LP_" + EnterAssetID)), "LP Token is Missing or not Generated."))
307310 let decimalsinfo = valueOrErrorMessage(assetInfo(fromBase58String(EnterAssetID)), (("Asset " + EnterAssetID) + " doesn't exist"))
308311 let decimals = decimalsinfo.decimals
309312 let bothassetsdecimals = (6 + decimals)
310313 let sharedecimals = (bothassetsdecimals / 2)
311314 let CheckTotalLPAmount = getIntegerValue(this, ("Total_LP_" + EnterAssetID))
312315 let UserLPPercentage = pow(fraction(pmt.amount, pow(10, 0, 8, 0, 0, CEILING), CheckTotalLPAmount), 6, 1, 0, 6, CEILING)
313316 let CheckXTNBalance = getIntegerValue(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)))
314317 let CheckAssetBalance = getIntegerValue(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID))
315318 let UserLPWorthXTN = fraction(CheckXTNBalance, UserLPPercentage, pow(10, 0, 8, 0, 0, CEILING))
316319 let UserLPWorthAsset = fraction(CheckAssetBalance, UserLPPercentage, pow(10, 0, 8, 0, 0, CEILING))
317320 let XTNHoldingInPair = match getInteger(this, ((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID))) {
318321 case a: Int =>
319322 a
320323 case _ =>
321324 0
322325 }
323326 let NewXTNHoldingInPair = (XTNHoldingInPair - UserLPWorthXTN)
324327 let AssetHoldingInPair = match getInteger(this, ((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID)) {
325328 case a: Int =>
326329 a
327330 case _ =>
328331 0
329332 }
330333 let NewAssetHoldingInPair = (AssetHoldingInPair - UserLPWorthAsset)
331334 let LPTokenIssued = match getIntegerValue(this, ("Total_LP_" + EnterAssetID)) {
332335 case a: Int =>
333336 a
334337 case _ =>
335338 0
336339 }
337340 let NewLPTokenIssued = (LPTokenIssued - pmt.amount)
338341 if ((checkpairisavailableornot != EnterAssetID))
339342 then throw("Pair is not available in Whitelist.")
340343 else if ((fromBase58String(EnterAssetID) == XTNAssetID))
341344 then throw("Don't choose XTN AssetID as Input, Only Whitelisted Asset as Input String & Attach LP Tokens as payment[1]")
342345 else if ((pmt.assetId != ReissueableassetId))
343346 then throw("Wrong Asset is attached in payment[1] or LP Token Not Found or Missing.")
344347 else if ((1 > UserLPPercentage))
345348 then throw("Your LP Token amount % is very low to convert.")
346349 else if ((1 > UserLPWorthXTN))
347350 then throw("Your LP Token conversion amount is very low to convert or less than 0.000001 XTN.")
348351 else if ((1 > UserLPWorthAsset))
349352 then throw("Your LP Token conversion amount is very low to convert or less than fraction value of Token.")
350353 else [IntegerEntry("Withdraw_LP_Percentage", UserLPPercentage), Burn(ReissueableassetId, pmt.amount), IntegerEntry(("Total_LP_" + EnterAssetID), NewLPTokenIssued), IntegerEntry(((("Balance_of_" + EnterAssetID) + "_") + toBase58String(XTNAssetID)), NewXTNHoldingInPair), IntegerEntry(((("Balance_of_" + toBase58String(XTNAssetID)) + "_") + EnterAssetID), NewAssetHoldingInPair), ScriptTransfer(i.caller, UserLPWorthXTN, XTNAssetID), ScriptTransfer(i.caller, UserLPWorthAsset, fromBase58String(EnterAssetID))]
351354 }
352355
353356
354357 @Verifier(tx)
355358 func verify () = sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
356359

github/deemru/w8io/169f3d6 
137.61 ms