tx · 6hx145yUEHMEm5BMMmm6xDhs5LrHy8xysFjUqPgGFcAN

3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr:  -0.02000000 Waves

2023.10.03 10:57 [3848004] smart account 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr > SELF 0.00000000 Waves

{ "type": 13, "id": "6hx145yUEHMEm5BMMmm6xDhs5LrHy8xysFjUqPgGFcAN", "fee": 2000000, "feeAssetId": null, "timestamp": 1696319869428, "version": 2, "chainId": 87, "sender": "3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr", "senderPublicKey": "A5AvSRrbVauQKBhPtuWTLTQdE5ka4nVCSDaVANpFur26", "proofs": [ "5agxHqKLV7nDAXa3q3PA1tdffkQ8v9Fa6vig9iQBq8KA5VHFuVC9H3c1GTR2gCSMcoUhTyzUN1aHJdpSjFipbFPy" ], "script": "base64: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AQdBZGRyZXNzAQUGcG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAAIZXRod2F2ZXMJAGsDBQJkOAULd2F2ZXNpbnBvb2wFCWV0aGlucG9vbAEIX2xvYWRJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAJoIAgUMU1dBVkVTX3N0YWtlBQRrZXlfAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUIZGVmYXVsdF8BC19sb2FkQmlnSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCcCAIFDFNXQVZFU19zdGFrZQUEa2V5XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQCeAwEFAWEFCGRlZmF1bHRfAAhsYXN0UmF0ZQkBC19sb2FkQmlnSW50AgIJTEFTVF9SQVRFCQC2AgEAgKCUpY0dAAtjdXJyZW50UmF0ZQkBC19sb2FkQmlnSW50AgIMQ1VSUkVOVF9SQVRFCQC2AgEAAAAKbGFzdEhlaWdodAkBCF9sb2FkSW50AgILTEFTVF9IRUlHSFQAAAAMdGFyZ2V0SGVpZ2h0CQCXAwEJAMwIAgkBCF9sb2FkSW50AgINVEFSR0VUX0hFSUdIVAAACQDMCAIFBmhlaWdodAUDbmlsAA9sYXN0UmF0ZVVwZGF0ZWQJALcCAgUIbGFzdFJhdGUJALkCAgULY3VycmVudFJhdGUJALYCAQkAZQIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAAKYmFzZUFtb3VudAkAoAMBCQC9AgQJALYCAQkA8AcCBQ1XWF9XQVZFU19FQVNUBQZzd2F2ZXMFD2xhc3RSYXRlVXBkYXRlZAkAtgIBAICglKWNHQUFRkxPT1IACXdhdmVzaW5XWAkAZAIICQDvBwEFDVdYX1dBVkVTX0VBU1QHcmVndWxhcgUKYmFzZUFtb3VudAAIZWFzdGluV1gJAPAHAgUNV1hfV0FWRVNfRUFTVAUEZWFzdAAJd2F2ZXNlYXN0CQBrAwkAaAIFAmQ4AGQFCGVhc3RpbldYBQl3YXZlc2luV1gAEHdhdmVzaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQV3YXZlcwIIX2JhbGFuY2UAEHdoaXJsaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQl3aGlybHBvb2wCCF9iYWxhbmNlABFwcm9qZWN0c3Rha2V3aGlybAkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgIjM1BBa21KbmlNZ25uQWVqNXBZZjJqRllrQ2Jab3c1cHQ5dHICDF9pbmRleFN0YWtlZAAPdG90YWxzdGFrZXdoaXJsCQERQGV4dHJOYXRpdmUoMTA1MCkCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQADXN0RUFTVGlud2F2ZXMJAGgCCQBrAwkAaQIJAG4ECQDwBwIFBHRoaXMFBnN0ZWFzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUKRUFTVF9zdGFrZQIIJXNfX3JhdGUAgKCUpY0dBQhIQUxGRVZFTgBkBQJkOAUJd2F2ZXNlYXN0AGQADUVBU1RpbnN0YWtpbmcJAGkCCQBuBAkA8AcCBQR0aGlzBQZzdGVhc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAAKdHZsaW53YXZlcwkAZAIJAGQCCQBkAgkAawMJAGgCBQt3YXZlc2lucG9vbAAKBQxwcm9qZWN0c3Rha2UFCnRvdGFsc3Rha2UJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aHdhdmVzBQJkOAkAawMJAGgCBRB3YXZlc2lud2hpcmxwb29sAAoFEXByb2plY3RzdGFrZXdoaXJsBQ90b3RhbHN0YWtld2hpcmwFDXN0RUFTVGlud2F2ZXMAD3doaXJscG9vbHN1cHBseQQHJG1hdGNoMAkA7AcBBQl3aGlybHBvb2wDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0AAVwcmljZQMJAGcCCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzAQ50cnlHZXRJbnRlZ2VyUAEDa2V5BAckbWF0Y2gwCQCaCAIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldFN0cmluZ1ABA2tleQQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDWdldEFzc2V0Qnl0ZXMBBQRpdGVtBQNuaWwBFGFkZEFzc2V0V2VpZ2h0VG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ50cnlHZXRJbnRlZ2VyUAEJAKwCAgkArAICAgdzdGF0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dXJwbHVzCQBrAwkAZQIFBXByaWNlBQJkOAgFA3BtdAZhbW91bnQFAmQ4BAtJc3N1ZUFtb3VudAMJAGYCCAUDcG10BmFtb3VudAkAawMIBQNwbXQGYW1vdW50BQJkOAUFcHJpY2UJAGsDCAUDcG10BmFtb3VudAUCZDgFBXByaWNlCQACAQIwcGxlYXNlIGNvbnRhY3QgcHJvamVjdCBvd25lcjogaXNzdWUgYW1vdW50IGVycm9yBAxzdXBwbHlhbW91bnQJAGkCCQBlAggFA3BtdAZhbW91bnQFB3N1cnBsdXMAAwQIQW1vdW50SW4IBQNwbXQGYW1vdW50BA5Bc3NldEluQmFsYW5jZQUQd2F2ZXNpbndoaXJscG9vbAQPQXNzZXRPdXRCYWxhbmNlBRB3aGlybGlud2hpcmxwb29sBAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluAMgBAJBOBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBAdJbmRleEluCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQR1bml0BAhJbmRleE91dAkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUJd2hpcmxwb29sBAlBbW91bnRPdXQJAG4EBQ9Bc3NldE91dEJhbGFuY2UJAGUCCQBoAgUCZDgFAmQ4CQCgAwEJAHYGCQC9AgQJALYCAQUOQXNzZXRJbkJhbGFuY2UJALYCAQkAaAIFAmQ4BQJkOAkAtgIBCQBkAgUOQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4FBkhBTEZVUAAQCQC2AgEJAGsDCQCRAwIFDUFzc2V0c1dlaWdodHMFB0luZGV4SW4AkE4JAJEDAgUNQXNzZXRzV2VpZ2h0cwUISW5kZXhPdXQABAAQBQdDRUlMSU5HCQBoAgUCZDgFAmQ4BQRET1dOBBZXaGlybHBvb2xCYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMFCXdoaXJscG9vbAMJAAACBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlAwkBAiE9AggFA3BtdAdhc3NldElkBQR1bml0CQACAQIXYXR0YWNoIFdBVkVTIHRva2VuIG9ubHkEBHN3YXADCQBmAgUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgkAZAIFC0lzc3VlQW1vdW50AAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUIQW1vdW50SW4FA25pbAUEdW5pdAMJAAACBQRzd2FwBQRzd2FwBBNTdXBwbHlXYXZlc01haW5Qb29sAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAPwHBAkBB0FkZHJlc3MBARoBVyCUXEqtz/RIOTuIQLO/2+6MUKCnas/a6AIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFE1N1cHBseVdhdmVzTWFpblBvb2wFE1N1cHBseVdhdmVzTWFpblBvb2wEGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQD8BwQJAQdBZGRyZXNzAQEaAVcZCzuPP83F9QBSQ7jrpozIrL8UOTE+JL4CBnN1cHBseQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBRhTdXBwbHlXYXZlc1dhdmVzRGVmaVBvb2wFGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAQRU3VwcGx5V2F2ZXNMb3dDYXADCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkA/AcECQEHQWRkcmVzcwEBGgFXrmAU0mZwDPA/3HTF0nTmGr6p4FLB6guQAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUMc3VwcGx5YW1vdW50BQNuaWwFBHVuaXQDCQAAAgURU3VwcGx5V2F2ZXNMb3dDYXAFEVN1cHBseVdhdmVzTG93Q2FwBBVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwUJd2hpcmxwb29sAwkAAAIFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgUVV2hpcmxwb29sQmFsYW5jZUFmdGVyBBFXaGlybHBvb2xGcm9tU3dhcAkAZQIFFldoaXJscG9vbEJhbGFuY2VCZWZvcmUFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgkAzAgCCQEHUmVpc3N1ZQMFCXdoaXJscG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAAABgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAULSXNzdWVBbW91bnQFEVdoaXJscG9vbEZyb21Td2FwBQl3aGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICIVdISVJMUE9PTCBpc3N1ZSBwcmljZSBpbiB3YXZlbGV0cwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICJldISVJMUE9PTCBidXkgbWFya2V0IHByaWNlIGluIHdhdmVsZXRzCQBrAwUCZDgFCEFtb3VudEluBQlBbW91bnRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAGQCCAUDcG10BmFtb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAGQCAAAJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAGQCBQdzdXJwbHVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzCQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZAIJAGUCBQtJc3N1ZUFtb3VudAUHc3VycGx1cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJQcmljZVN1cnBsdXNTdXBwbHkACQDMCAIJAQxJbnRlZ2VyRW50cnkCAgpQTCBCVCBNYWluCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUEwgQlQgRGVmaQkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICCVBMIEJUIExvdwkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUEwgYmFzZSB0cmVhc3VyeQkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICMHN1cnBsdXMgdHJlYXN1cnkgQlVSTi1YVE4geCBQZXBlVGVhbSBpbiB3YXZlbGV0cwkAawMJAGgCBQt3YXZlc2lucG9vbAAKBQxwcm9qZWN0c3Rha2UFCnRvdGFsc3Rha2UJAMwIAgkBDEludGVnZXJFbnRyeQICGUVUSCBQdXp6bGUgTGVuZCBtYWluIHBvb2wJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgI2c3VycGx1cyB0cmVhc3VyeSBFVEggUHV6emxlIExlbmQgbWFpbiBwb29sIGluIHdhdmVsZXRzCQBrAwkBCFBMX3ZhbHVlAgUHUExfTWFpbgUDZXRoBQhldGh3YXZlcwUCZDgJAMwIAgkBDEludGVnZXJFbnRyeQICKnN1cnBsdXMgdHJlYXN1cnkgV0hJUkxQT09MIEFNTSBpbiB3YXZlbGV0cwkAawMJAGgCBRB3YXZlc2lud2hpcmxwb29sAAoFEXByb2plY3RzdGFrZXdoaXJsBQ90b3RhbHN0YWtld2hpcmwJAMwIAgkBDEludGVnZXJFbnRyeQICElNUIEVBU1QgaW4gc3Rha2luZwUNRUFTVGluc3Rha2luZwkAzAgCCQEMSW50ZWdlckVudHJ5AgISU1Qgc3RFQVNUIGluIHdhdmVzBQ1zdEVBU1RpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAihUb3RhbCBzdXJwbHVzIHRyZWFzdXJ5IHZhbHVlIGluIHdhdmVsZXRzBQp0dmxpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiFXSElSTFBPT0wgaXNzdWUgcHJpY2UgaW4gd2F2ZWxldHMFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhpXSElSTFBPT0wgbWlkIG1hcmtldCBwcmljZQkAawMFAmQ4CQBoAgUQd2F2ZXNpbndoaXJscG9vbAAJBRB3aGlybGlud2hpcmxwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhZXSElSTFBPT0wgdG90YWwgc3VwcGx5BQ93aGlybHBvb2xzdXBwbHkJAMwIAgkBDEludGVnZXJFbnRyeQICDlRvdGFsIHRyZWFzdXJ5CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bGlud2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICDU5BViBXSElSTFBPT0wJAGsDBQJkOAUPd2hpcmxwb29sc3VwcGx5CQBkAgkAZAIJAGQCCQEIUExfdmFsdWUCBQdQTF9NYWluBQV3YXZlcwkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMFCnR2bGlud2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIQUk9JIGJhc2lzIHBvaW50cwUDbmlsAWkBE1Bvb2xPbmVUb2tlblN1cnBsdXMAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQNc3VycGx1c2Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwQTUG9vbE9uZVRva2VuU3VycGx1cwkA/AcECQEHQWRkcmVzcwEBGgFX/SXDvU5hlEHvul4SY4/FOW9JtYg69eltAiFnZW5lcmF0ZUluZGV4V2l0aE9uZVRva2VuQW5kU3Rha2UJAMwIAgUKcG9vbFN0cmluZwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQ1zdXJwbHVzYW1vdW50BQNuaWwDCQAAAgUTUG9vbE9uZVRva2VuU3VycGx1cwUTUG9vbE9uZVRva2VuU3VycGx1cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAZQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMFDXN1cnBsdXNhbW91bnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxCb29zdFBvb2xBUFkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQSd2F2ZXNCYWxhbmNlQmVmb3JlCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAACBRJ3YXZlc0JhbGFuY2VCZWZvcmUFEndhdmVzQmFsYW5jZUJlZm9yZQQFY2xhaW0JAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCEWNsYWltSW5kZXhSZXdhcmRzBQNuaWwFA25pbAMJAAACBQVjbGFpbQUFY2xhaW0EC3N3YXBidXJueHRuCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlidXJueHRuSWQJAPAHAgUEdGhpcwUJYnVybnh0bklkBQNuaWwDCQAAAgULc3dhcGJ1cm54dG4FC3N3YXBidXJueHRuBAtzd2FwdXNkdGVyYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkdGVyYwkA8AcCBQR0aGlzBQd1c2R0ZXJjBQNuaWwDCQAAAgULc3dhcHVzZHRlcmMFC3N3YXB1c2R0ZXJjBAtzd2FwdXNkdGJzYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkdGJzYwkA8AcCBQR0aGlzBQd1c2R0YnNjBQNuaWwDCQAAAgULc3dhcHVzZHRic2MFC3N3YXB1c2R0YnNjBAtzd2FwdXNkY2VyYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkY2VyYwkA8AcCBQR0aGlzBQd1c2RjZXJjBQNuaWwDCQAAAgULc3dhcHVzZGNlcmMFC3N3YXB1c2RjZXJjBAtzd2FwdXNkY2JzYwkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUHdXNkY2JzYwkA8AcCBQR0aGlzBQd1c2RjYnNjBQNuaWwDCQAAAgULc3dhcHVzZGNic2MFC3N3YXB1c2RjYnNjBAdzd2FwZXRoCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQNldGgJAPAHAgUEdGhpcwUDZXRoBQNuaWwDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQHc3dhcGJuYgkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUDYm5iCQDwBwIFBHRoaXMFA2JuYgUDbmlsAwkAAAIFB3N3YXBibmIFB3N3YXBibmIECHN3YXB3YnRjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR3YnRjCQDwBwIFBHRoaXMFBHdidGMFA25pbAMJAAACBQhzd2Fwd2J0YwUIc3dhcHdidGMECHN3YXBidGNiCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQRidGNiCQDwBwIFBHRoaXMFBGJ0Y2IFA25pbAMJAAACBQhzd2FwYnRjYgUIc3dhcGJ0Y2IEEXdhdmVzQmFsYW5jZUFmdGVyCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQPd2F2ZXNEaWZmZXJlbmNlCQBlAgURd2F2ZXNCYWxhbmNlQWZ0ZXIFEndhdmVzQmFsYW5jZUJlZm9yZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkAawMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzAJBOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFEJvb3N0UG9vbEFQWXdFVEhtYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEE2NhbGN1bGF0ZVRva2VuUmF0ZXMJAPwHBAUHUExfTWFpbgITY2FsY3VsYXRlVG9rZW5SYXRlcwkAzAgCBwUDbmlsBQNuaWwDCQAAAgUTY2FsY3VsYXRlVG9rZW5SYXRlcwUTY2FsY3VsYXRlVG9rZW5SYXRlcwQOd2l0aGRyYXdhbW91bnQJAGUCCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAQ10cnlHZXRJbnRlZ2VyAQIMRVRIIHN1cHBsaWVkBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAh3aXRoZHJhdwkA/AcECQEHQWRkcmVzcwEBGgFXIJRcSq3P9Eg5O4hAs7/b7oxQoKdqz9roAgh3aXRoZHJhdwkAzAgCCQDYBAEFA2V0aAkAzAgCBQ53aXRoZHJhd2Ftb3VudAUDbmlsBQNuaWwDCQAAAgUId2l0aGRyYXcFCHdpdGhkcmF3BAdzd2FwZXRoCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQNldGgJAPAHAgUEdGhpcwUDZXRoBQNuaWwDCQAAAgUHc3dhcGV0aAUHc3dhcGV0aAQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBAthbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudE93bmVyCQBrAwUPd2F2ZXNEaWZmZXJlbmNlABQAZAQFYm9vc3QJAPwHBAkBB0FkZHJlc3MBBQtwb29sYm9vc3RTQwILYWRkQm9vc3RpbmcJAMwIAgUPd2hpcmxwb29sc3RyaW5nCQDMCAIABwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQthbW91bnRCb29zdAUDbmlsAwkAAAIFBWJvb3N0BQVib29zdAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEFDHByb2plY3Rvd25lcgULYW1vdW50T3duZXIFBHVuaXQJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQBkAgULYW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWQm9vc3RQb29sQVBZd1doaXJscG9vbAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFBWNsYWltBQVjbGFpbQQNc3dhcHdoaXJscG9vbAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCAgVXQVZFUwkAzAgCAAAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUJd2hpcmxwb29sCQDwBwIFBHRoaXMFCXdoaXJscG9vbAUDbmlsAwkAAAIFDXN3YXB3aGlybHBvb2wFDXN3YXB3aGlybHBvb2wEEXdhdmVzQmFsYW5jZUFmdGVyCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQPd2F2ZXNEaWZmZXJlbmNlCQBlAgURd2F2ZXNCYWxhbmNlQWZ0ZXIFEndhdmVzQmFsYW5jZUJlZm9yZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkAawMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzAJBOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDVN1cHBseUVUSG1haW4AAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQMc3VwcGx5YW1vdW50CQDwBwIFBHRoaXMFA2V0aAQNU3VwcGx5RVRIbWFpbgMJAGYCBQxzdXBwbHlhbW91bnQAAAkA/AcECQEHQWRkcmVzcwEBGgFXIJRcSq3P9Eg5O4hAs7/b7oxQoKdqz9roAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUDZXRoBQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBQ1TdXBwbHlFVEhtYWluBQ1TdXBwbHlFVEhtYWluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxFVEggc3VwcGxpZWQJAGQCBQxzdXBwbHlhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQIMRVRIIHN1cHBsaWVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQESd2l0aGRyYXdXQVZFU19NYWluAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEEndpdGhkcmF3YW1vdW50TWFpbgkAZQIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQBpAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMECndpdGhkcmF3V00JAPwHBAUHUExfTWFpbgIId2l0aGRyYXcJAMwIAgkA2AQBBQV3YXZlcwkAzAgCBRJ3aXRoZHJhd2Ftb3VudE1haW4FA25pbAUDbmlsAwkAAAIFCndpdGhkcmF3V00FCndpdGhkcmF3V00FA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARJ3aXRoZHJhd1dBVkVTX0RlZmkAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQSd2l0aGRyYXdhbW91bnREZWZpCQBlAgkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAGkCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkAAwQKd2l0aGRyYXdXRAkA/AcEBQdQTF9EZWZpAgh3aXRoZHJhdwkAzAgCCQDYBAEFBXdhdmVzCQDMCAIFEndpdGhkcmF3YW1vdW50RGVmaQUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXRAUKd2l0aGRyYXdXRAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEXdpdGhkcmF3V0FWRVNfTG93AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEEXdpdGhkcmF3YW1vdW50TG93CQBlAgkBCFBMX3ZhbHVlAgUGUExfTG93BQV3YXZlcwkAaQIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHndhdmVsZXRzIHJlY2VpdmVkIGZvciB0cmVhc3VyeQADBAp3aXRoZHJhd1dMCQD8BwQFBlBMX0xvdwIId2l0aGRyYXcJAMwIAgkA2AQBBQV3YXZlcwkAzAgCBRF3aXRoZHJhd2Ftb3VudExvdwUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXTAUKd2l0aGRyYXdXTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXN0YWtlRUFTVAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAxzdXBwbHlhbW91bnQJAPAHAgUEdGhpcwUEZWFzdAQJc3Rha2VFQVNUAwkAZgIFDHN1cHBseWFtb3VudAAACQD8BwQFCkVBU1Rfc3Rha2UCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGVhc3QFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFCXN0YWtlRUFTVAUJc3Rha2VFQVNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtFQVNUIHN0YWtlZAkAZAIFDHN1cHBseWFtb3VudAkBDXRyeUdldEludGVnZXIBAgtFQVNUIHN0YWtlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEkNoYW5nZUludGVnZXJFbnRyeQIDa2V5B2ludGVnZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFB2ludGVnZXIFA25pbAB4nhhS", "height": 3848004, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4WLgJJ4eYiW2bi1YBtxpsWHzkE3Sa9WtKVBLJhBBGgwR Next: ER5W4a9gnSVA7RUFDbir8qCi15Rz66Z6ZYfcUuDTF8f4 Diff:
OldNewDifferences
245245 }
246246
247247 @Callable(i)
248-func buyWHIRLPOOLwithWAVES () = {
249- let pmt = value(i.payments[0])
250- let surplus = fraction((price - d8), pmt.amount, d8)
251- let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
252- then fraction(pmt.amount, d8, price)
253- else throw("please contact project owner: issue amount error")
254- let supplyamount = ((pmt.amount - surplus) / 3)
255- let AmountIn = pmt.amount
256- let AssetInBalance = wavesinwhirlpool
257- let AssetOutBalance = whirlinwhirlpool
258- let feeAmountIn = fraction(AmountIn, 200, 10000)
259- let cleanAmountIn = (AmountIn - feeAmountIn)
260- let IndexIn = value(indexOf(assetIds, unit))
261- let IndexOut = value(indexOf(assetIds, whirlpool))
262- let AmountOut = fraction(AssetOutBalance, ((d8 * d8) - toInt(pow(fraction(toBigInt(AssetInBalance), toBigInt((d8 * d8)), toBigInt((AssetInBalance + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
263- let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
264- if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
265- then if ((pmt.assetId != unit))
266- then throw("attach WAVES token only")
267- else {
268- let swap = if ((AmountOut > IssueAmount))
269- then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
270- else unit
271- if ((swap == swap))
272- then {
273- let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
274- then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
275- else unit
276- if ((SupplyWavesMainPool == SupplyWavesMainPool))
277- then {
278- let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
279- then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
280- else unit
281- if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
282- then {
283- let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
284- then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
285- else unit
286- if ((SupplyWavesLowCap == SupplyWavesLowCap))
287- then {
288- let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
289- if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
290- then {
291- let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
248+func buyWHIRLPOOLwithWAVES () = if (if ((i.caller != this))
249+ then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'))
250+ else false)
251+ then throw("smart contract under maintenance")
252+ else {
253+ let pmt = value(i.payments[0])
254+ let surplus = fraction((price - d8), pmt.amount, d8)
255+ let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
256+ then fraction(pmt.amount, d8, price)
257+ else throw("please contact project owner: issue amount error")
258+ let supplyamount = ((pmt.amount - surplus) / 3)
259+ let AmountIn = pmt.amount
260+ let AssetInBalance = wavesinwhirlpool
261+ let AssetOutBalance = whirlinwhirlpool
262+ let feeAmountIn = fraction(AmountIn, 200, 10000)
263+ let cleanAmountIn = (AmountIn - feeAmountIn)
264+ let IndexIn = value(indexOf(assetIds, unit))
265+ let IndexOut = value(indexOf(assetIds, whirlpool))
266+ let AmountOut = fraction(AssetOutBalance, ((d8 * d8) - toInt(pow(fraction(toBigInt(AssetInBalance), toBigInt((d8 * d8)), toBigInt((AssetInBalance + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
267+ let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
268+ if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
269+ then if ((pmt.assetId != unit))
270+ then throw("attach WAVES token only")
271+ else {
272+ let swap = if ((AmountOut > IssueAmount))
273+ then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
274+ else unit
275+ if ((swap == swap))
276+ then {
277+ let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
278+ then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
279+ else unit
280+ if ((SupplyWavesMainPool == SupplyWavesMainPool))
281+ then {
282+ let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
283+ then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
284+ else unit
285+ if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
286+ then {
287+ let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
288+ then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
289+ else unit
290+ if ((SupplyWavesLowCap == SupplyWavesLowCap))
291+ then {
292+ let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
293+ if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
294+ then {
295+ let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
292296 [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
293- then IssueAmount
294- else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
295- then IssueAmount
296- else WhirlpoolFromSwap, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL buy market price in wavelets", fraction(d8, AmountIn, AmountOut)), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
297- then pmt.amount
298- else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
299- then surplus
300- else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
301- then ((IssueAmount - surplus) + getIntegerValue(this, "wavelets received for treasury"))
302- else (0 + getIntegerValue(this, "wavelets received for treasury")))]
303- }
304- else throw("Strict value is not equal to itself.")
305- }
306- else throw("Strict value is not equal to itself.")
307- }
308- else throw("Strict value is not equal to itself.")
309- }
310- else throw("Strict value is not equal to itself.")
311- }
312- else throw("Strict value is not equal to itself.")
313- }
314- else throw("Strict value is not equal to itself.")
315- }
297+ then IssueAmount
298+ else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
299+ then IssueAmount
300+ else WhirlpoolFromSwap, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL buy market price in wavelets", fraction(d8, AmountIn, AmountOut)), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
301+ then (pmt.amount + getIntegerValue(this, "total WAVES received in wavelets"))
302+ else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
303+ then (surplus + getIntegerValue(this, "surplus received in wavelets"))
304+ else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
305+ then ((IssueAmount - surplus) + getIntegerValue(this, "wavelets received for treasury"))
306+ else (0 + getIntegerValue(this, "wavelets received for treasury")))]
307+ }
308+ else throw("Strict value is not equal to itself.")
309+ }
310+ else throw("Strict value is not equal to itself.")
311+ }
312+ else throw("Strict value is not equal to itself.")
313+ }
314+ else throw("Strict value is not equal to itself.")
315+ }
316+ else throw("Strict value is not equal to itself.")
317+ }
318+ else throw("Strict value is not equal to itself.")
319+ }
316320
317321
318322
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let d8 = 100000000
55
66 let d16 = (d8 * d8)
77
88 let poolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx'
99
1010 let poolString = toBase58String(poolId)
1111
1212 let projectowner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk'
1313
1414 let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY'
1515
1616 let whirlpoolstring = toBase58String(whirlpoolPoolId)
1717
1818 let poolboostSC = base58'3PAeY7RgwuNUZNscGqahqJxFTFDkh7fbNwJ'
1919
2020 let project = base58'3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr'
2121
2222 let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi'
2323
2424 let waves = base58'WAVES'
2525
2626 let usdterc = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2727
2828 let usdcerc = base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW'
2929
3030 let usdtbsc = base58'A81p1LTRyoq2rDR2TNxB2dWYxsiNwCSSi8sXef2SEkwb'
3131
3232 let usdcbsc = base58'4BKKSp6NoNcrFHyorZogDyctq1fq6w7114Ym1pw6HUtC'
3333
3434 let burnxtnId = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns'
3535
3636 let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13'
3737
3838 let bnb = base58'66a1br3BrkoaJgP7yEar9hJcSTvJPoH6PYBLqscXcMGo'
3939
4040 let wbtc = base58'2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6'
4141
4242 let btcb = base58'EW1uGLVo21Wd9i2Rhq8o4VKDTCQTGCGXE8DqayHGrLg8'
4343
4444 let east = base58'6phK22ztGBW127gUFmdMEHKB3CVd6ZhWox2WtwJkbqTq'
4545
4646 let steast = base58'GAB8JowY9UANZ4TQy2TzJyhxjPqXX3DUrb2cdMWrrJus'
4747
4848 let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7'
4949
5050 func tryGetInteger (key) = match getInteger(this, key) {
5151 case b: Int =>
5252 b
5353 case _ =>
5454 0
5555 }
5656
5757
5858 let PL_Main = Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH')
5959
6060 let PL_Defi = Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X')
6161
6262 let PL_Low = Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH')
6363
6464 let EAST_stake = Address(base58'3P2hbtheN5apNppqqUK7L7qAwmRFXy91CNa')
6565
6666 let WX_WAVES_EAST = Address(base58'3PJVwjfi2fF5Jv9AauayU6xLxrYBn8bpGH1')
6767
6868 let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV')
6969
7070 let address = toString(Address(project))
7171
7272 func PL_value (dAppAddress,asset) = fraction(getIntegerValue(dAppAddress, ((address + "_supplied_") + toBase58String(asset))), getIntegerValue(dAppAddress, (toBase58String(asset) + "_sRate")), d16)
7373
7474
7575 let ethinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(eth)) + "_balance"))
7676
7777 let wavesinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(waves)) + "_balance"))
7878
7979 let projectstake = getIntegerValue(Address(poolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked"))
8080
8181 let totalstake = getIntegerValue(Address(poolId), "global_poolToken_amount")
8282
8383 let ethwaves = fraction(d8, wavesinpool, ethinpool)
8484
8585 func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) {
8686 case a: Int =>
8787 a
8888 case _ =>
8989 default_
9090 }
9191
9292
9393 func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) {
9494 case a: ByteVector =>
9595 toBigInt(a)
9696 case _ =>
9797 default_
9898 }
9999
100100
101101 let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000))
102102
103103 let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0))
104104
105105 let lastHeight = _loadInt("LAST_HEIGHT", 0)
106106
107107 let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height])
108108
109109 let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight))))
110110
111111 let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_WAVES_EAST, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR))
112112
113113 let wavesinWX = (wavesBalance(WX_WAVES_EAST).regular + baseAmount)
114114
115115 let eastinWX = assetBalance(WX_WAVES_EAST, east)
116116
117117 let waveseast = fraction((d8 * 100), eastinWX, wavesinWX)
118118
119119 let wavesinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance"))
120120
121121 let whirlinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(whirlpool)) + "_balance"))
122122
123123 let projectstakewhirl = getIntegerValue(Address(whirlpoolPoolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked"))
124124
125125 let totalstakewhirl = getIntegerValue(Address(whirlpoolPoolId), "global_poolToken_amount")
126126
127127 let stEASTinwaves = (fraction((fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100), d8, waveseast) * 100)
128128
129129 let EASTinstaking = (fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100)
130130
131131 let tvlinwaves = (((fraction((wavesinpool * 10), projectstake, totalstake) + fraction(PL_value(PL_Main, eth), ethwaves, d8)) + fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)) + stEASTinwaves)
132132
133133 let whirlpoolsupply = match assetInfo(whirlpool) {
134134 case asset: Asset =>
135135 asset.quantity
136136 case _ =>
137137 throw("Can't find asset")
138138 }
139139
140140 let price = if (((fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8) >= getIntegerValue(this, "WHIRLPOOL issue price in wavelets")))
141141 then (fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8)
142142 else getIntegerValue(this, "WHIRLPOOL issue price in wavelets")
143143
144144 func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) {
145145 case b: Int =>
146146 b
147147 case _ =>
148148 0
149149 }
150150
151151
152152 func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) {
153153 case b: String =>
154154 b
155155 case _ =>
156156 ""
157157 }
158158
159159
160160 func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES"))
161161 then unit
162162 else fromBase58String(assetIdStr)
163163
164164
165165 func getAssetString (assetId) = match assetId {
166166 case b: ByteVector =>
167167 toBase58String(b)
168168 case _ =>
169169 "WAVES"
170170 }
171171
172172
173173 func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)])
174174
175175
176176 func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))])
177177
178178
179179 func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))])
180180
181181
182182 func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))])
183183
184184
185185 let T = tryGetIntegerP("static_tokensAmount")
186186
187187 let assetIds = {
188188 let $l = split(tryGetStringP("static_tokenIds"), ",")
189189 let $s = size($l)
190190 let $acc0 = nil
191191 func $f0_1 ($a,$i) = if (($i >= $s))
192192 then $a
193193 else addAssetBytesToList($a, $l[$i])
194194
195195 func $f0_2 ($a,$i) = if (($i >= $s))
196196 then $a
197197 else throw("List size exceeds 10")
198198
199199 $f0_2($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($f0_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
200200 }
201201
202202 let AssetsWeights = {
203203 let $l = assetIds
204204 let $s = size($l)
205205 let $acc0 = nil
206206 func $f1_1 ($a,$i) = if (($i >= $s))
207207 then $a
208208 else addAssetWeightToList($a, $l[$i])
209209
210210 func $f1_2 ($a,$i) = if (($i >= $s))
211211 then $a
212212 else throw("List size exceeds 10")
213213
214214 $f1_2($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($f1_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
215215 }
216216
217217 let Decimals = {
218218 let $l = assetIds
219219 let $s = size($l)
220220 let $acc0 = nil
221221 func $f2_1 ($a,$i) = if (($i >= $s))
222222 then $a
223223 else addAssetDecimalsToList($a, $l[$i])
224224
225225 func $f2_2 ($a,$i) = if (($i >= $s))
226226 then $a
227227 else throw("List size exceeds 10")
228228
229229 $f2_2($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($f2_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
230230 }
231231
232232 let Scales = {
233233 let $l = assetIds
234234 let $s = size($l)
235235 let $acc0 = nil
236236 func $f3_1 ($a,$i) = if (($i >= $s))
237237 then $a
238238 else addAssetScaleToList($a, $l[$i])
239239
240240 func $f3_2 ($a,$i) = if (($i >= $s))
241241 then $a
242242 else throw("List size exceeds 10")
243243
244244 $f3_2($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($f3_1($acc0, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
245245 }
246246
247247 @Callable(i)
248-func buyWHIRLPOOLwithWAVES () = {
249- let pmt = value(i.payments[0])
250- let surplus = fraction((price - d8), pmt.amount, d8)
251- let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
252- then fraction(pmt.amount, d8, price)
253- else throw("please contact project owner: issue amount error")
254- let supplyamount = ((pmt.amount - surplus) / 3)
255- let AmountIn = pmt.amount
256- let AssetInBalance = wavesinwhirlpool
257- let AssetOutBalance = whirlinwhirlpool
258- let feeAmountIn = fraction(AmountIn, 200, 10000)
259- let cleanAmountIn = (AmountIn - feeAmountIn)
260- let IndexIn = value(indexOf(assetIds, unit))
261- let IndexOut = value(indexOf(assetIds, whirlpool))
262- let AmountOut = fraction(AssetOutBalance, ((d8 * d8) - toInt(pow(fraction(toBigInt(AssetInBalance), toBigInt((d8 * d8)), toBigInt((AssetInBalance + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
263- let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
264- if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
265- then if ((pmt.assetId != unit))
266- then throw("attach WAVES token only")
267- else {
268- let swap = if ((AmountOut > IssueAmount))
269- then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
270- else unit
271- if ((swap == swap))
272- then {
273- let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
274- then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
275- else unit
276- if ((SupplyWavesMainPool == SupplyWavesMainPool))
277- then {
278- let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
279- then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
280- else unit
281- if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
282- then {
283- let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
284- then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
285- else unit
286- if ((SupplyWavesLowCap == SupplyWavesLowCap))
287- then {
288- let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
289- if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
290- then {
291- let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
248+func buyWHIRLPOOLwithWAVES () = if (if ((i.caller != this))
249+ then (i.caller != Address(base58'3PPCzX2doZ7agBNuGSKqjrbdXgGEtE7CpQ3'))
250+ else false)
251+ then throw("smart contract under maintenance")
252+ else {
253+ let pmt = value(i.payments[0])
254+ let surplus = fraction((price - d8), pmt.amount, d8)
255+ let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
256+ then fraction(pmt.amount, d8, price)
257+ else throw("please contact project owner: issue amount error")
258+ let supplyamount = ((pmt.amount - surplus) / 3)
259+ let AmountIn = pmt.amount
260+ let AssetInBalance = wavesinwhirlpool
261+ let AssetOutBalance = whirlinwhirlpool
262+ let feeAmountIn = fraction(AmountIn, 200, 10000)
263+ let cleanAmountIn = (AmountIn - feeAmountIn)
264+ let IndexIn = value(indexOf(assetIds, unit))
265+ let IndexOut = value(indexOf(assetIds, whirlpool))
266+ let AmountOut = fraction(AssetOutBalance, ((d8 * d8) - toInt(pow(fraction(toBigInt(AssetInBalance), toBigInt((d8 * d8)), toBigInt((AssetInBalance + cleanAmountIn)), HALFUP), 16, toBigInt(fraction(AssetsWeights[IndexIn], 10000, AssetsWeights[IndexOut])), 4, 16, CEILING))), (d8 * d8), DOWN)
267+ let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
268+ if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
269+ then if ((pmt.assetId != unit))
270+ then throw("attach WAVES token only")
271+ else {
272+ let swap = if ((AmountOut > IssueAmount))
273+ then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
274+ else unit
275+ if ((swap == swap))
276+ then {
277+ let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
278+ then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
279+ else unit
280+ if ((SupplyWavesMainPool == SupplyWavesMainPool))
281+ then {
282+ let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
283+ then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
284+ else unit
285+ if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
286+ then {
287+ let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
288+ then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
289+ else unit
290+ if ((SupplyWavesLowCap == SupplyWavesLowCap))
291+ then {
292+ let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
293+ if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
294+ then {
295+ let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
292296 [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
293- then IssueAmount
294- else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
295- then IssueAmount
296- else WhirlpoolFromSwap, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL buy market price in wavelets", fraction(d8, AmountIn, AmountOut)), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
297- then pmt.amount
298- else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
299- then surplus
300- else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
301- then ((IssueAmount - surplus) + getIntegerValue(this, "wavelets received for treasury"))
302- else (0 + getIntegerValue(this, "wavelets received for treasury")))]
303- }
304- else throw("Strict value is not equal to itself.")
305- }
306- else throw("Strict value is not equal to itself.")
307- }
308- else throw("Strict value is not equal to itself.")
309- }
310- else throw("Strict value is not equal to itself.")
311- }
312- else throw("Strict value is not equal to itself.")
313- }
314- else throw("Strict value is not equal to itself.")
315- }
297+ then IssueAmount
298+ else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
299+ then IssueAmount
300+ else WhirlpoolFromSwap, whirlpool), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL buy market price in wavelets", fraction(d8, AmountIn, AmountOut)), IntegerEntry("total WAVES received in wavelets", if ((IssueAmount >= AmountOut))
301+ then (pmt.amount + getIntegerValue(this, "total WAVES received in wavelets"))
302+ else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
303+ then (surplus + getIntegerValue(this, "surplus received in wavelets"))
304+ else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
305+ then ((IssueAmount - surplus) + getIntegerValue(this, "wavelets received for treasury"))
306+ else (0 + getIntegerValue(this, "wavelets received for treasury")))]
307+ }
308+ else throw("Strict value is not equal to itself.")
309+ }
310+ else throw("Strict value is not equal to itself.")
311+ }
312+ else throw("Strict value is not equal to itself.")
313+ }
314+ else throw("Strict value is not equal to itself.")
315+ }
316+ else throw("Strict value is not equal to itself.")
317+ }
318+ else throw("Strict value is not equal to itself.")
319+ }
316320
317321
318322
319323 @Callable(i)
320324 func PriceSurplusSupply () = [IntegerEntry("PL BT Main", PL_value(PL_Main, waves)), IntegerEntry("PL BT Defi", PL_value(PL_Defi, waves)), IntegerEntry("PL BT Low", PL_value(PL_Low, waves)), IntegerEntry("PL base treasury", ((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves))), IntegerEntry("surplus treasury BURN-XTN x PepeTeam in wavelets", fraction((wavesinpool * 10), projectstake, totalstake)), IntegerEntry("ETH Puzzle Lend main pool", PL_value(PL_Main, eth)), IntegerEntry("surplus treasury ETH Puzzle Lend main pool in wavelets", fraction(PL_value(PL_Main, eth), ethwaves, d8)), IntegerEntry("surplus treasury WHIRLPOOL AMM in wavelets", fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)), IntegerEntry("ST EAST in staking", EASTinstaking), IntegerEntry("ST stEAST in waves", stEASTinwaves), IntegerEntry("Total surplus treasury value in wavelets", tvlinwaves), IntegerEntry("WHIRLPOOL issue price in wavelets", price), IntegerEntry("WHIRLPOOL mid market price", fraction(d8, (wavesinwhirlpool * 9), whirlinwhirlpool)), IntegerEntry("WHIRLPOOL total supply", whirlpoolsupply), IntegerEntry("Total treasury", (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves)), IntegerEntry("NAV WHIRLPOOL", fraction(d8, whirlpoolsupply, (((PL_value(PL_Main, waves) + PL_value(PL_Defi, waves)) + PL_value(PL_Low, waves)) + tvlinwaves))), IntegerEntry("total WAVES received in wavelets", getIntegerValue(this, "total WAVES received in wavelets")), IntegerEntry("surplus received in wavelets", getIntegerValue(this, "surplus received in wavelets")), IntegerEntry("wavelets received for treasury", getIntegerValue(this, "wavelets received for treasury")), IntegerEntry("total WAVES paid out in wavelets", getIntegerValue(this, "total WAVES paid out in wavelets")), IntegerEntry("ROI basis points", getIntegerValue(this, "ROI basis points"))]
321325
322326
323327
324328 @Callable(i)
325329 func PoolOneTokenSurplus () = if ((i.caller != this))
326330 then throw("access only by project owner")
327331 else {
328332 let surplusamount = getIntegerValue(this, "surplus received in wavelets")
329333 let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [poolString], [AttachedPayment(unit, surplusamount)])
330334 if ((PoolOneTokenSurplus == PoolOneTokenSurplus))
331335 then [IntegerEntry("surplus received in wavelets", (getIntegerValue(this, "surplus received in wavelets") - surplusamount))]
332336 else throw("Strict value is not equal to itself.")
333337 }
334338
335339
336340
337341 @Callable(i)
338342 func BoostPoolAPY () = if ((i.caller != this))
339343 then throw("access only by project owner")
340344 else {
341345 let wavesBalanceBefore = wavesBalance(this).available
342346 if ((wavesBalanceBefore == wavesBalanceBefore))
343347 then {
344348 let claim = invoke(Address(poolId), "claimIndexRewards", nil, nil)
345349 if ((claim == claim))
346350 then {
347351 let swapburnxtn = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(burnxtnId, assetBalance(this, burnxtnId))])
348352 if ((swapburnxtn == swapburnxtn))
349353 then {
350354 let swapusdterc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdterc, assetBalance(this, usdterc))])
351355 if ((swapusdterc == swapusdterc))
352356 then {
353357 let swapusdtbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdtbsc, assetBalance(this, usdtbsc))])
354358 if ((swapusdtbsc == swapusdtbsc))
355359 then {
356360 let swapusdcerc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcerc, assetBalance(this, usdcerc))])
357361 if ((swapusdcerc == swapusdcerc))
358362 then {
359363 let swapusdcbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcbsc, assetBalance(this, usdcbsc))])
360364 if ((swapusdcbsc == swapusdcbsc))
361365 then {
362366 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
363367 if ((swapeth == swapeth))
364368 then {
365369 let swapbnb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(bnb, assetBalance(this, bnb))])
366370 if ((swapbnb == swapbnb))
367371 then {
368372 let swapwbtc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(wbtc, assetBalance(this, wbtc))])
369373 if ((swapwbtc == swapwbtc))
370374 then {
371375 let swapbtcb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(btcb, assetBalance(this, btcb))])
372376 if ((swapbtcb == swapbtcb))
373377 then {
374378 let wavesBalanceAfter = wavesBalance(this).available
375379 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
376380 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
377381 let amountBoost = fraction(wavesDifference, 80, 100)
378382 let amountOwner = fraction(wavesDifference, 20, 100)
379383 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
380384 if ((boost == boost))
381385 then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
382386 else throw("Strict value is not equal to itself.")
383387 }
384388 else throw("Strict value is not equal to itself.")
385389 }
386390 else throw("Strict value is not equal to itself.")
387391 }
388392 else throw("Strict value is not equal to itself.")
389393 }
390394 else throw("Strict value is not equal to itself.")
391395 }
392396 else throw("Strict value is not equal to itself.")
393397 }
394398 else throw("Strict value is not equal to itself.")
395399 }
396400 else throw("Strict value is not equal to itself.")
397401 }
398402 else throw("Strict value is not equal to itself.")
399403 }
400404 else throw("Strict value is not equal to itself.")
401405 }
402406 else throw("Strict value is not equal to itself.")
403407 }
404408 else throw("Strict value is not equal to itself.")
405409 }
406410
407411
408412
409413 @Callable(i)
410414 func BoostPoolAPYwETHmain () = if ((i.caller != this))
411415 then throw("access only by project owner")
412416 else {
413417 let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil)
414418 if ((calculateTokenRates == calculateTokenRates))
415419 then {
416420 let withdrawamount = (PL_value(PL_Main, eth) - tryGetInteger("ETH supplied"))
417421 let wavesBalanceBefore = wavesBalance(this).available
418422 if ((wavesBalanceBefore == wavesBalanceBefore))
419423 then {
420424 let withdraw = invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "withdraw", [toBase58String(eth), withdrawamount], nil)
421425 if ((withdraw == withdraw))
422426 then {
423427 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
424428 if ((swapeth == swapeth))
425429 then {
426430 let wavesBalanceAfter = wavesBalance(this).available
427431 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
428432 let amountBoost = fraction(wavesDifference, 80, 100)
429433 let amountOwner = fraction(wavesDifference, 20, 100)
430434 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
431435 if ((boost == boost))
432436 then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (amountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
433437 else throw("Strict value is not equal to itself.")
434438 }
435439 else throw("Strict value is not equal to itself.")
436440 }
437441 else throw("Strict value is not equal to itself.")
438442 }
439443 else throw("Strict value is not equal to itself.")
440444 }
441445 else throw("Strict value is not equal to itself.")
442446 }
443447
444448
445449
446450 @Callable(i)
447451 func BoostPoolAPYwWhirlpool () = if ((i.caller != this))
448452 then throw("access only by project owner")
449453 else {
450454 let wavesBalanceBefore = wavesBalance(this).available
451455 if ((wavesBalanceBefore == wavesBalanceBefore))
452456 then {
453457 let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil)
454458 if ((claim == claim))
455459 then {
456460 let swapwhirlpool = invoke(Address(whirlpoolPoolId), "swap", ["WAVES", 0], [AttachedPayment(whirlpool, assetBalance(this, whirlpool))])
457461 if ((swapwhirlpool == swapwhirlpool))
458462 then {
459463 let wavesBalanceAfter = wavesBalance(this).available
460464 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
461465 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
462466 let amountBoost = fraction(wavesDifference, 80, 100)
463467 let amountOwner = fraction(wavesDifference, 20, 100)
464468 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
465469 if ((boost == boost))
466470 then [ScriptTransfer(Address(projectowner), amountOwner, unit), IntegerEntry("total WAVES paid out in wavelets", (wavesAmountBoost + getIntegerValue(this, "total WAVES paid out in wavelets"))), IntegerEntry("ROI basis points", fraction(getIntegerValue(this, "total WAVES paid out in wavelets"), 10000, getIntegerValue(this, "total WAVES received in wavelets")))]
467471 else throw("Strict value is not equal to itself.")
468472 }
469473 else throw("Strict value is not equal to itself.")
470474 }
471475 else throw("Strict value is not equal to itself.")
472476 }
473477 else throw("Strict value is not equal to itself.")
474478 }
475479
476480
477481
478482 @Callable(i)
479483 func SupplyETHmain () = if ((i.caller != this))
480484 then throw("access only by project owner")
481485 else {
482486 let supplyamount = assetBalance(this, eth)
483487 let SupplyETHmain = if ((supplyamount > 0))
484488 then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(eth, supplyamount)])
485489 else unit
486490 if ((SupplyETHmain == SupplyETHmain))
487491 then [IntegerEntry("ETH supplied", (supplyamount + tryGetInteger("ETH supplied")))]
488492 else throw("Strict value is not equal to itself.")
489493 }
490494
491495
492496
493497 @Callable(i)
494498 func withdrawWAVES_Main () = if ((i.caller != this))
495499 then throw("access only by project owner")
496500 else {
497501 let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
498502 let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
499503 if ((withdrawWM == withdrawWM))
500504 then nil
501505 else throw("Strict value is not equal to itself.")
502506 }
503507
504508
505509
506510 @Callable(i)
507511 func withdrawWAVES_Defi () = if ((i.caller != this))
508512 then throw("access only by project owner")
509513 else {
510514 let withdrawamountDefi = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
511515 let withdrawWD = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountDefi], nil)
512516 if ((withdrawWD == withdrawWD))
513517 then nil
514518 else throw("Strict value is not equal to itself.")
515519 }
516520
517521
518522
519523 @Callable(i)
520524 func withdrawWAVES_Low () = if ((i.caller != this))
521525 then throw("access only by project owner")
522526 else {
523527 let withdrawamountLow = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
524528 let withdrawWL = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountLow], nil)
525529 if ((withdrawWL == withdrawWL))
526530 then nil
527531 else throw("Strict value is not equal to itself.")
528532 }
529533
530534
531535
532536 @Callable(i)
533537 func stakeEAST () = if ((i.caller != this))
534538 then throw("access only by project owner")
535539 else {
536540 let supplyamount = assetBalance(this, east)
537541 let stakeEAST = if ((supplyamount > 0))
538542 then invoke(EAST_stake, "stake", nil, [AttachedPayment(east, supplyamount)])
539543 else unit
540544 if ((stakeEAST == stakeEAST))
541545 then [IntegerEntry("EAST staked", (supplyamount + tryGetInteger("EAST staked")))]
542546 else throw("Strict value is not equal to itself.")
543547 }
544548
545549
546550
547551 @Callable(i)
548552 func ChangeIntegerEntry (key,integer) = if ((i.caller != this))
549553 then throw("access only by project owner")
550554 else [IntegerEntry(key, integer)]
551555
552556

github/deemru/w8io/0e76f2f 
85.26 ms