tx · 5m4rnqQCPL9PGiyjHEgXB2SgUUUfCJGvt6zWwpijHvQx 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr: -0.02400000 Waves 2023.10.03 10:12 [3847957] smart account 3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr > SELF 0.00000000 Waves
{ "type": 13, "id": "5m4rnqQCPL9PGiyjHEgXB2SgUUUfCJGvt6zWwpijHvQx", "fee": 2400000, "feeAssetId": null, "timestamp": 1696317168254, "version": 2, "chainId": 87, "sender": "3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr", "senderPublicKey": "A5AvSRrbVauQKBhPtuWTLTQdE5ka4nVCSDaVANpFur26", "proofs": [ "4PdKQA1mZ6AEei6HF6uGLkZTLdxUhK7Kfp3jcaUbrWrjva2v5bDR5iiSuC4BJemam9YoNxpGKFz3LG8GyXABHmqx" ], "script": "base64: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AQdBZGRyZXNzAQUGcG9vbElkAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAAIZXRod2F2ZXMJAGsDBQJkOAULd2F2ZXNpbnBvb2wFCWV0aGlucG9vbAEIX2xvYWRJbnQCBGtleV8IZGVmYXVsdF8EByRtYXRjaDAJAJoIAgUMU1dBVkVTX3N0YWtlBQRrZXlfAwkAAQIFByRtYXRjaDACA0ludAQBYQUHJG1hdGNoMAUBYQUIZGVmYXVsdF8BC19sb2FkQmlnSW50AgRrZXlfCGRlZmF1bHRfBAckbWF0Y2gwCQCcCAIFDFNXQVZFU19zdGFrZQUEa2V5XwMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFhBQckbWF0Y2gwCQCeAwEFAWEFCGRlZmF1bHRfAAhsYXN0UmF0ZQkBC19sb2FkQmlnSW50AgIJTEFTVF9SQVRFCQC2AgEAgKCUpY0dAAtjdXJyZW50UmF0ZQkBC19sb2FkQmlnSW50AgIMQ1VSUkVOVF9SQVRFCQC2AgEAAAAKbGFzdEhlaWdodAkBCF9sb2FkSW50AgILTEFTVF9IRUlHSFQAAAAMdGFyZ2V0SGVpZ2h0CQCXAwEJAMwIAgkBCF9sb2FkSW50AgINVEFSR0VUX0hFSUdIVAAACQDMCAIFBmhlaWdodAUDbmlsAA9sYXN0UmF0ZVVwZGF0ZWQJALcCAgUIbGFzdFJhdGUJALkCAgULY3VycmVudFJhdGUJALYCAQkAZQIFDHRhcmdldEhlaWdodAUKbGFzdEhlaWdodAAKYmFzZUFtb3VudAkAoAMBCQC9AgQJALYCAQkA8AcCBQ1XWF9XQVZFU19FQVNUBQZzd2F2ZXMFD2xhc3RSYXRlVXBkYXRlZAkAtgIBAICglKWNHQUFRkxPT1IACXdhdmVzaW5XWAkAZAIICQDvBwEFDVdYX1dBVkVTX0VBU1QHcmVndWxhcgUKYmFzZUFtb3VudAAIZWFzdGluV1gJAPAHAgUNV1hfV0FWRVNfRUFTVAUEZWFzdAAJd2F2ZXNlYXN0CQBrAwkAaAIFAmQ4AGQFCGVhc3RpbldYBQl3YXZlc2luV1gAEHdhdmVzaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQV3YXZlcwIIX2JhbGFuY2UAEHdoaXJsaW53aGlybHBvb2wJARFAZXh0ck5hdGl2ZSgxMDUwKQIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkCQCsAgIJAKwCAgIHZ2xvYmFsXwkA2AQBBQl3aGlybHBvb2wCCF9iYWxhbmNlABFwcm9qZWN0c3Rha2V3aGlybAkBEUBleHRyTmF0aXZlKDEwNTApAgkBB0FkZHJlc3MBBQ93aGlybHBvb2xQb29sSWQJAKwCAgIjM1BBa21KbmlNZ25uQWVqNXBZZjJqRllrQ2Jab3c1cHQ5dHICDF9pbmRleFN0YWtlZAAPdG90YWxzdGFrZXdoaXJsCQERQGV4dHJOYXRpdmUoMTA1MCkCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIXZ2xvYmFsX3Bvb2xUb2tlbl9hbW91bnQADXN0RUFTVGlud2F2ZXMJAGgCCQBrAwkAaQIJAG4ECQDwBwIFBHRoaXMFBnN0ZWFzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUKRUFTVF9zdGFrZQIIJXNfX3JhdGUAgKCUpY0dBQhIQUxGRVZFTgBkBQJkOAUJd2F2ZXNlYXN0AGQADUVBU1RpbnN0YWtpbmcJAGkCCQBuBAkA8AcCBQR0aGlzBQZzdGVhc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFCkVBU1Rfc3Rha2UCCCVzX19yYXRlAICglKWNHQUISEFMRkVWRU4AZAAKdHZsaW53YXZlcwkAZAIJAGQCCQBkAgkAawMJAGgCBQt3YXZlc2lucG9vbAAKBQxwcm9qZWN0c3Rha2UFCnRvdGFsc3Rha2UJAGsDCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgFCGV0aHdhdmVzBQJkOAkAawMJAGgCBRB3YXZlc2lud2hpcmxwb29sAAoFEXByb2plY3RzdGFrZXdoaXJsBQ90b3RhbHN0YWtld2hpcmwFDXN0RUFTVGlud2F2ZXMAD3doaXJscG9vbHN1cHBseQQHJG1hdGNoMAkA7AcBBQl3aGlybHBvb2wDCQABAgUHJG1hdGNoMAIFQXNzZXQEBWFzc2V0BQckbWF0Y2gwCAUFYXNzZXQIcXVhbnRpdHkJAAIBAhBDYW4ndCBmaW5kIGFzc2V0AAVwcmljZQMJAGcCCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzCQBkAgkAawMJAGQCBQp0dmxpbndhdmVzCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQJkOAUPd2hpcmxwb29sc3VwcGx5BQJkOAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzAQ50cnlHZXRJbnRlZ2VyUAEDa2V5BAckbWF0Y2gwCQCaCAIJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkBQNrZXkDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwBQFiAAABDXRyeUdldFN0cmluZ1ABA2tleQQHJG1hdGNoMAkAnQgCCQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAUDa2V5AwkAAQIFByRtYXRjaDACBlN0cmluZwQBYgUHJG1hdGNoMAUBYgIAAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBDmdldEFzc2V0U3RyaW5nAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAWIFByRtYXRjaDAJANgEAQUBYgIFV0FWRVMBE2FkZEFzc2V0Qnl0ZXNUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDWdldEFzc2V0Qnl0ZXMBBQRpdGVtBQNuaWwBFGFkZEFzc2V0V2VpZ2h0VG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ50cnlHZXRJbnRlZ2VyUAEJAKwCAgkArAICAgdzdGF0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ZDgFBXByaWNlCQACAQIwcGxlYXNlIGNvbnRhY3QgcHJvamVjdCBvd25lcjogaXNzdWUgYW1vdW50IGVycm9yBAxzdXBwbHlhbW91bnQJAGkCCQBlAggFA3BtdAZhbW91bnQFB3N1cnBsdXMAAwQIQW1vdW50SW4IBQNwbXQGYW1vdW50BA5Bc3NldEluQmFsYW5jZQUQd2F2ZXNpbndoaXJscG9vbAQPQXNzZXRPdXRCYWxhbmNlBRB3aGlybGlud2hpcmxwb29sBAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluAMgBAJBOBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBAdJbmRleEluCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQR1bml0BAhJbmRleE91dAkBBXZhbHVlAQkAzwgCBQhhc3NldElkcwUJd2hpcmxwb29sBAlBbW91bnRPdXQJAG4EBQ9Bc3NldE91dEJhbGFuY2UJAGUCCQBoAgUCZDgFAmQ4CQCgAwEJAHYGCQC9AgQJALYCAQUOQXNzZXRJbkJhbGFuY2UJALYCAQkAaAIFAmQ4BQJkOAkAtgIBCQBkAgUOQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4FBkhBTEZVUAAQCQC2AgEJAGsDCQCRAwIFDUFzc2V0c1dlaWdodHMFB0luZGV4SW4AkE4JAJEDAgUNQXNzZXRzV2VpZ2h0cwUISW5kZXhPdXQABAAQBQdDRUlMSU5HCQBoAgUCZDgFAmQ4BQRET1dOBBZXaGlybHBvb2xCYWxhbmNlQmVmb3JlCQDwBwIFBHRoaXMFCXdoaXJscG9vbAMJAAACBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlBRZXaGlybHBvb2xCYWxhbmNlQmVmb3JlAwkBAiE9AggFA3BtdAdhc3NldElkBQR1bml0CQACAQIXYXR0YWNoIFdBVkVTIHRva2VuIG9ubHkEBHN3YXADCQBmAgUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAkA/AcECQEHQWRkcmVzcwEFD3doaXJscG9vbFBvb2xJZAIEc3dhcAkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgkAZAIFC0lzc3VlQW1vdW50AAEFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUIQW1vdW50SW4FA25pbAUEdW5pdAMJAAACBQRzd2FwBQRzd2FwBBNTdXBwbHlXYXZlc01haW5Qb29sAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQJAPwHBAkBB0FkZHJlc3MBARoBVyCUXEqtz/RIOTuIQLO/2+6MUKCnas/a6AIGc3VwcGx5BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFE1N1cHBseVdhdmVzTWFpblBvb2wFE1N1cHBseVdhdmVzTWFpblBvb2wEGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0CQD8BwQJAQdBZGRyZXNzAQEaAVcZCzuPP83F9QBSQ7jrpozIrL8UOTE+JL4CBnN1cHBseQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQR1bml0BQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBRhTdXBwbHlXYXZlc1dhdmVzRGVmaVBvb2wFGFN1cHBseVdhdmVzV2F2ZXNEZWZpUG9vbAQRU3VwcGx5V2F2ZXNMb3dDYXADCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkA/AcECQEHQWRkcmVzcwEBGgFXrmAU0mZwDPA/3HTF0nTmGr6p4FLB6guQAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUMc3VwcGx5YW1vdW50BQNuaWwFBHVuaXQDCQAAAgURU3VwcGx5V2F2ZXNMb3dDYXAFEVN1cHBseVdhdmVzTG93Q2FwBBVXaGlybHBvb2xCYWxhbmNlQWZ0ZXIJAPAHAgUEdGhpcwUJd2hpcmxwb29sAwkAAAIFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgUVV2hpcmxwb29sQmFsYW5jZUFmdGVyBBFXaGlybHBvb2xGcm9tU3dhcAkAZQIFFldoaXJscG9vbEJhbGFuY2VCZWZvcmUFFVdoaXJscG9vbEJhbGFuY2VBZnRlcgkAzAgCCQEHUmVpc3N1ZQMFCXdoaXJscG9vbAMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQtJc3N1ZUFtb3VudAAABgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAULSXNzdWVBbW91bnQFEVdoaXJscG9vbEZyb21Td2FwBQl3aGlybHBvb2wJAMwIAgkBDEludGVnZXJFbnRyeQICIVdISVJMUE9PTCBpc3N1ZSBwcmljZSBpbiB3YXZlbGV0cwUFcHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQICJldISVJMUE9PTCBidXkgbWFya2V0IHByaWNlIGluIHdhdmVsZXRzCQBrAwUCZDgFCEFtb3VudEluBQlBbW91bnRPdXQJAMwIAgkBDEludGVnZXJFbnRyeQICIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzAwkAZwIFC0lzc3VlQW1vdW50BQlBbW91bnRPdXQIBQNwbXQGYW1vdW50CQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIcc3VycGx1cyByZWNlaXZlZCBpbiB3YXZlbGV0cwMJAGcCBQtJc3N1ZUFtb3VudAUJQW1vdW50T3V0BQdzdXJwbHVzCQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkDCQBnAgULSXNzdWVBbW91bnQFCUFtb3VudE91dAkAZQIFC0lzc3VlQW1vdW50BQdzdXJwbHVzCQBkAgAACQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARNQcmljZVN1cHBseVRyZWFzdXJ5AAkAzAgCCQEMSW50ZWdlckVudHJ5AgIKUEwgQlQgTWFpbgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICClBMIEJUIERlZmkJAQhQTF92YWx1ZQIFB1BMX0RlZmkFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAglQTCBCVCBMb3cJAQhQTF92YWx1ZQIFBlBMX0xvdwUFd2F2ZXMJAMwIAgkBDEludGVnZXJFbnRyeQICEFBMIGJhc2UgdHJlYXN1cnkJAGQCCQBkAgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAQhQTF92YWx1ZQIFB1BMX0RlZmkFBXdhdmVzCQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAjBzdXJwbHVzIHRyZWFzdXJ5IEJVUk4tWFROIHggUGVwZVRlYW0gaW4gd2F2ZWxldHMJAGsDCQBoAgULd2F2ZXNpbnBvb2wACgUMcHJvamVjdHN0YWtlBQp0b3RhbHN0YWtlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhlFVEggUHV6emxlIExlbmQgbWFpbiBwb29sCQEIUExfdmFsdWUCBQdQTF9NYWluBQNldGgJAMwIAgkBDEludGVnZXJFbnRyeQICNnN1cnBsdXMgdHJlYXN1cnkgRVRIIFB1enpsZSBMZW5kIG1haW4gcG9vbCBpbiB3YXZlbGV0cwkAawMJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAUIZXRod2F2ZXMFAmQ4CQDMCAIJAQxJbnRlZ2VyRW50cnkCAipzdXJwbHVzIHRyZWFzdXJ5IFdISVJMUE9PTCBBTU0gaW4gd2F2ZWxldHMJAGsDCQBoAgUQd2F2ZXNpbndoaXJscG9vbAAKBRFwcm9qZWN0c3Rha2V3aGlybAUPdG90YWxzdGFrZXdoaXJsCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhJTVCBFQVNUIGluIHN0YWtpbmcFDUVBU1RpbnN0YWtpbmcJAMwIAgkBDEludGVnZXJFbnRyeQICElNUIHN0RUFTVCBpbiB3YXZlcwUNc3RFQVNUaW53YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIoVG90YWwgc3VycGx1cyB0cmVhc3VyeSB2YWx1ZSBpbiB3YXZlbGV0cwUKdHZsaW53YXZlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgIhV0hJUkxQT09MIGlzc3VlIHByaWNlIGluIHdhdmVsZXRzBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIaV0hJUkxQT09MIG1pZCBtYXJrZXQgcHJpY2UJAGsDBQJkOAkAaAIFEHdhdmVzaW53aGlybHBvb2wACQUQd2hpcmxpbndoaXJscG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgIWV0hJUkxQT09MIHRvdGFsIHN1cHBseQUPd2hpcmxwb29sc3VwcGx5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAg5Ub3RhbCB0cmVhc3VyeQkAZAIJAGQCCQBkAgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAQhQTF92YWx1ZQIFB1BMX0RlZmkFBXdhdmVzCQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzBQp0dmxpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAg1OQVYgV0hJUkxQT09MCQBrAwUCZDgFD3doaXJscG9vbHN1cHBseQkAZAIJAGQCCQBkAgkBCFBMX3ZhbHVlAgUHUExfTWFpbgUFd2F2ZXMJAQhQTF92YWx1ZQIFB1BMX0RlZmkFBXdhdmVzCQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzBQp0dmxpbndhdmVzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICHndhdmVsZXRzIHJlY2VpdmVkIGZvciB0cmVhc3VyeQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICEFJPSSBiYXNpcyBwb2ludHMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCEFJPSSBiYXNpcyBwb2ludHMFA25pbAFpARNQb29sT25lVG9rZW5TdXJwbHVzAAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHGFjY2VzcyBvbmx5IGJ5IHByb2plY3Qgb3duZXIEDXN1cnBsdXNhbW91bnQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMEE1Bvb2xPbmVUb2tlblN1cnBsdXMJAPwHBAkBB0FkZHJlc3MBARoBV/0lw71OYZRB77peEmOPxTlvSbWIOvXpbQIhZ2VuZXJhdGVJbmRleFdpdGhPbmVUb2tlbkFuZFN0YWtlCQDMCAIFCnBvb2xTdHJpbmcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAUNc3VycGx1c2Ftb3VudAUDbmlsAwkAAAIFE1Bvb2xPbmVUb2tlblN1cnBsdXMFE1Bvb2xPbmVUb2tlblN1cnBsdXMJAMwIAgkBDEludGVnZXJFbnRyeQICHHN1cnBsdXMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAGUCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhxzdXJwbHVzIHJlY2VpdmVkIGluIHdhdmVsZXRzBQ1zdXJwbHVzYW1vdW50BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXQm9vc3RQb29sQVBZd0JVUk54dG5QUFQAAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBAVjbGFpbQkA/AcECQEHQWRkcmVzcwEFBnBvb2xJZAIRY2xhaW1JbmRleFJld2FyZHMFA25pbAUDbmlsAwkAAAIFBWNsYWltBQVjbGFpbQQLc3dhcGJ1cm54dG4JAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWJ1cm54dG5JZAkA8AcCBQR0aGlzBQlidXJueHRuSWQFA25pbAMJAAACBQtzd2FwYnVybnh0bgULc3dhcGJ1cm54dG4EC3N3YXB1c2R0ZXJjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQd1c2R0ZXJjCQDwBwIFBHRoaXMFB3VzZHRlcmMFA25pbAMJAAACBQtzd2FwdXNkdGVyYwULc3dhcHVzZHRlcmMEC3N3YXB1c2R0YnNjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQd1c2R0YnNjCQDwBwIFBHRoaXMFB3VzZHRic2MFA25pbAMJAAACBQtzd2FwdXNkdGJzYwULc3dhcHVzZHRic2MEC3N3YXB1c2RjZXJjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQd1c2RjZXJjCQDwBwIFBHRoaXMFB3VzZGNlcmMFA25pbAMJAAACBQtzd2FwdXNkY2VyYwULc3dhcHVzZGNlcmMEC3N3YXB1c2RjYnNjCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQd1c2RjYnNjCQDwBwIFBHRoaXMFB3VzZGNic2MFA25pbAMJAAACBQtzd2FwdXNkY2JzYwULc3dhcHVzZGNic2MEB3N3YXBldGgJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFA2V0aAkA8AcCBQR0aGlzBQNldGgFA25pbAMJAAACBQdzd2FwZXRoBQdzd2FwZXRoBAdzd2FwYm5iCQD8BwQJAQdBZGRyZXNzAQUGcG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQNibmIJAPAHAgUEdGhpcwUDYm5iBQNuaWwDCQAAAgUHc3dhcGJuYgUHc3dhcGJuYgQIc3dhcHdidGMJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHdidGMJAPAHAgUEdGhpcwUEd2J0YwUDbmlsAwkAAAIFCHN3YXB3YnRjBQhzd2Fwd2J0YwQIc3dhcGJ0Y2IJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGJ0Y2IJAPAHAgUEdGhpcwUEYnRjYgUDbmlsAwkAAAIFCHN3YXBidGNiBQhzd2FwYnRjYgQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBBB3YXZlc0Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkBAthbW91bnRPd25lcgkAawMFD3dhdmVzRGlmZmVyZW5jZQAUAGQEBWJvb3N0CQD8BwQJAQdBZGRyZXNzAQULcG9vbGJvb3N0U0MCC2FkZEJvb3N0aW5nCQDMCAIFD3doaXJscG9vbHN0cmluZwkAzAgCAAcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAULYW1vdW50Qm9vc3QFA25pbAMJAAACBQVib29zdAUFYm9vc3QECWFjdGl2YXRlZAMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAQxJbnRlZ2VyRW50cnkCAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQFBmhlaWdodAkBDEludGVnZXJFbnRyeQICIEFjdGl2YXRlZCBieSBhbnlib2R5IGJsb2NraGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0b3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAZAIFEHdhdmVzQW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIFCWFjdGl2YXRlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFEJvb3N0UG9vbEFQWXdFVEhtYWluAAMJAGYCCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBQZoZWlnaHQJAAIBCQCsAgICFldhaXQgdGlsbCBibG9ja2hlaWdodDoJAKQDAQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwQTY2FsY3VsYXRlVG9rZW5SYXRlcwkA/AcEBQdQTF9NYWluAhNjYWxjdWxhdGVUb2tlblJhdGVzCQDMCAIHBQNuaWwFA25pbAMJAAACBRNjYWxjdWxhdGVUb2tlblJhdGVzBRNjYWxjdWxhdGVUb2tlblJhdGVzBA53aXRoZHJhd2Ftb3VudAkAZQIJAQhQTF92YWx1ZQIFB1BMX01haW4FA2V0aAkBDXRyeUdldEludGVnZXIBAgxFVEggc3VwcGxpZWQEEndhdmVzQmFsYW5jZUJlZm9yZQgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBRJ3YXZlc0JhbGFuY2VCZWZvcmUECHdpdGhkcmF3CQD8BwQJAQdBZGRyZXNzAQEaAVcglFxKrc/0SDk7iECzv9vujFCgp2rP2ugCCHdpdGhkcmF3CQDMCAIJANgEAQUDZXRoCQDMCAIFDndpdGhkcmF3YW1vdW50BQNuaWwFA25pbAMJAAACBQh3aXRoZHJhdwUId2l0aGRyYXcEB3N3YXBldGgJAPwHBAkBB0FkZHJlc3MBBQZwb29sSWQCBHN3YXAJAMwIAgIFV0FWRVMJAMwIAgAABQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFA2V0aAkA8AcCBQR0aGlzBQNldGgFA25pbAMJAAACBQdzd2FwZXRoBQdzd2FwZXRoBBF3YXZlc0JhbGFuY2VBZnRlcggJAO8HAQUEdGhpcwlhdmFpbGFibGUED3dhdmVzRGlmZmVyZW5jZQkAZQIFEXdhdmVzQmFsYW5jZUFmdGVyBRJ3YXZlc0JhbGFuY2VCZWZvcmUEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0BAlhY3RpdmF0ZWQDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQEMSW50ZWdlckVudHJ5AgIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0BQZoZWlnaHQJAQxJbnRlZ2VyRW50cnkCAiBBY3RpdmF0ZWQgYnkgYW55Ym9keSBibG9ja2hlaWdodAUGaGVpZ2h0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBQthbW91bnRCb29zdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAMwIAgkBDEludGVnZXJFbnRyeQICEFJPSSBiYXNpcyBwb2ludHMJAGsDCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwCQTgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcmVjZWl2ZWQgaW4gd2F2ZWxldHMJAMwIAgUJYWN0aXZhdGVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEWQm9vc3RQb29sQVBZd1doaXJscG9vbAADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsEEndhdmVzQmFsYW5jZUJlZm9yZQgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBRJ3YXZlc0JhbGFuY2VCZWZvcmUEBWNsYWltCQD8BwQJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkAhFjbGFpbUluZGV4UmV3YXJkcwUDbmlsBQNuaWwDCQAAAgUFY2xhaW0FBWNsYWltBA1zd2Fwd2hpcmxwb29sCQD8BwQJAQdBZGRyZXNzAQUPd2hpcmxwb29sUG9vbElkAgRzd2FwCQDMCAICBVdBVkVTCQDMCAIAAAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQl3aGlybHBvb2wJAPAHAgUEdGhpcwUJd2hpcmxwb29sBQNuaWwDCQAAAgUNc3dhcHdoaXJscG9vbAUNc3dhcHdoaXJscG9vbAQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBBB3YXZlc0Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkBAthbW91bnRPd25lcgkAawMFD3dhdmVzRGlmZmVyZW5jZQAUAGQEBWJvb3N0CQD8BwQJAQdBZGRyZXNzAQULcG9vbGJvb3N0U0MCC2FkZEJvb3N0aW5nCQDMCAIFD3doaXJscG9vbHN0cmluZwkAzAgCAAcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAULYW1vdW50Qm9vc3QFA25pbAMJAAACBQVib29zdAUFYm9vc3QECWFjdGl2YXRlZAMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAQxJbnRlZ2VyRW50cnkCAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQFBmhlaWdodAkBDEludGVnZXJFbnRyeQICIEFjdGl2YXRlZCBieSBhbnlib2R5IGJsb2NraGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0b3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAZAIFEHdhdmVzQW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIFCWFjdGl2YXRlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDVN1cHBseUVUSG1haW4AAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIcYWNjZXNzIG9ubHkgYnkgcHJvamVjdCBvd25lcgQMc3VwcGx5YW1vdW50CQDwBwIFBHRoaXMFA2V0aAQNU3VwcGx5RVRIbWFpbgMJAGYCBQxzdXBwbHlhbW91bnQAAAkA/AcECQEHQWRkcmVzcwEBGgFXIJRcSq3P9Eg5O4hAs7/b7oxQoKdqz9roAgZzdXBwbHkFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUDZXRoBQxzdXBwbHlhbW91bnQFA25pbAUEdW5pdAMJAAACBQ1TdXBwbHlFVEhtYWluBQ1TdXBwbHlFVEhtYWluCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgxFVEggc3VwcGxpZWQJAGQCBQxzdXBwbHlhbW91bnQJAQ10cnlHZXRJbnRlZ2VyAQIMRVRIIHN1cHBsaWVkBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXQm9vc3RQb29sQVBZd1dBVkVTX01haW4AAwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAkAAgEJAKwCAgIWV2FpdCB0aWxsIGJsb2NraGVpZ2h0OgkApAMBCQBkAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0CQBoAgAIAKALBBJ3YXZlc0JhbGFuY2VCZWZvcmUDCQBmAgUCZDgICQDvBwEFBHRoaXMJYXZhaWxhYmxlBQJkOAgJAO8HAQUEdGhpcwlhdmFpbGFibGUDCQAAAgUSd2F2ZXNCYWxhbmNlQmVmb3JlBRJ3YXZlc0JhbGFuY2VCZWZvcmUEEndpdGhkcmF3YW1vdW50TWFpbgkAZQIJAQhQTF92YWx1ZQIFB1BMX01haW4FBXdhdmVzCQBpAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMECndpdGhkcmF3V00JAPwHBAUHUExfTWFpbgIId2l0aGRyYXcJAMwIAgkA2AQBBQV3YXZlcwkAzAgCBRJ3aXRoZHJhd2Ftb3VudE1haW4FA25pbAUDbmlsAwkAAAIFCndpdGhkcmF3V00FCndpdGhkcmF3V00EEXdhdmVzQmFsYW5jZUFmdGVyCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQQPd2F2ZXNEaWZmZXJlbmNlCQBlAgURd2F2ZXNCYWxhbmNlQWZ0ZXIFEndhdmVzQmFsYW5jZUJlZm9yZQQQd2F2ZXNBbW91bnRCb29zdAkAawMFD3dhdmVzRGlmZmVyZW5jZQBQAGQEC2Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50T3duZXIJAGsDBQ93YXZlc0RpZmZlcmVuY2UAFABkBAVib29zdAkA/AcECQEHQWRkcmVzcwEFC3Bvb2xib29zdFNDAgthZGRCb29zdGluZwkAzAgCBQ93aGlybHBvb2xzdHJpbmcJAMwIAgAHBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHVuaXQFC2Ftb3VudEJvb3N0BQNuaWwDCQAAAgUFYm9vc3QFBWJvb3N0BAlhY3RpdmF0ZWQDCQAAAggFAWkGY2FsbGVyBQR0aGlzCQEMSW50ZWdlckVudHJ5AgIVQWN0aXZhdGVkIGJsb2NraGVpZ2h0BQZoZWlnaHQJAQxJbnRlZ2VyRW50cnkCAiBBY3RpdmF0ZWQgYnkgYW55Ym9keSBibG9ja2hlaWdodAUGaGVpZ2h0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQUMcHJvamVjdG93bmVyBQthbW91bnRPd25lcgUEdW5pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMJAGQCBRB3YXZlc0Ftb3VudEJvb3N0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQUk9JIGJhc2lzIHBvaW50cwkAawMJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzAJBOCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAiB0b3RhbCBXQVZFUyByZWNlaXZlZCBpbiB3YXZlbGV0cwkAzAgCBQlhY3RpdmF0ZWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARdCb29zdFBvb2xBUFl3V0FWRVNfRGVmaQADCQBmAgkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwUGaGVpZ2h0CQACAQkArAICAhZXYWl0IHRpbGwgYmxvY2toZWlnaHQ6CQCkAwEJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsEEndhdmVzQmFsYW5jZUJlZm9yZQMJAGYCBQJkOAgJAO8HAQUEdGhpcwlhdmFpbGFibGUFAmQ4CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQMJAAACBRJ3YXZlc0JhbGFuY2VCZWZvcmUFEndhdmVzQmFsYW5jZUJlZm9yZQQSd2l0aGRyYXdhbW91bnRNYWluCQBlAgkBCFBMX3ZhbHVlAgUHUExfRGVmaQUFd2F2ZXMJAGkCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAh53YXZlbGV0cyByZWNlaXZlZCBmb3IgdHJlYXN1cnkAAwQKd2l0aGRyYXdXTQkA/AcEBQdQTF9EZWZpAgh3aXRoZHJhdwkAzAgCCQDYBAEFBXdhdmVzCQDMCAIFEndpdGhkcmF3YW1vdW50TWFpbgUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXTQUKd2l0aGRyYXdXTQQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBBB3YXZlc0Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkBAthbW91bnRPd25lcgkAawMFD3dhdmVzRGlmZmVyZW5jZQAUAGQEBWJvb3N0CQD8BwQJAQdBZGRyZXNzAQULcG9vbGJvb3N0U0MCC2FkZEJvb3N0aW5nCQDMCAIFD3doaXJscG9vbHN0cmluZwkAzAgCAAcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAULYW1vdW50Qm9vc3QFA25pbAMJAAACBQVib29zdAUFYm9vc3QECWFjdGl2YXRlZAMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAQxJbnRlZ2VyRW50cnkCAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQFBmhlaWdodAkBDEludGVnZXJFbnRyeQICIEFjdGl2YXRlZCBieSBhbnlib2R5IGJsb2NraGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0b3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAZAIFEHdhdmVzQW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIFCWFjdGl2YXRlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFkJvb3N0UG9vbEFQWXdXQVZFU19Mb3cAAwMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAZgIJAGQCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQJAGgCAAgAoAsFBmhlaWdodAcJAAIBCQCsAgICFldhaXQgdGlsbCBibG9ja2hlaWdodDoJAKQDAQkAZAIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCFUFjdGl2YXRlZCBibG9ja2hlaWdodAkAaAIACACgCwQSd2F2ZXNCYWxhbmNlQmVmb3JlAwkAZgIFAmQ4CAkA7wcBBQR0aGlzCWF2YWlsYWJsZQUCZDgICQDvBwEFBHRoaXMJYXZhaWxhYmxlAwkAAAIFEndhdmVzQmFsYW5jZUJlZm9yZQUSd2F2ZXNCYWxhbmNlQmVmb3JlBBJ3aXRoZHJhd2Ftb3VudE1haW4JAGUCCQEIUExfdmFsdWUCBQZQTF9Mb3cFBXdhdmVzCQBpAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIed2F2ZWxldHMgcmVjZWl2ZWQgZm9yIHRyZWFzdXJ5AAMECndpdGhkcmF3V00JAPwHBAUGUExfTG93Agh3aXRoZHJhdwkAzAgCCQDYBAEFBXdhdmVzCQDMCAIFEndpdGhkcmF3YW1vdW50TWFpbgUDbmlsBQNuaWwDCQAAAgUKd2l0aGRyYXdXTQUKd2l0aGRyYXdXTQQRd2F2ZXNCYWxhbmNlQWZ0ZXIICQDvBwEFBHRoaXMJYXZhaWxhYmxlBA93YXZlc0RpZmZlcmVuY2UJAGUCBRF3YXZlc0JhbGFuY2VBZnRlcgUSd2F2ZXNCYWxhbmNlQmVmb3JlBBB3YXZlc0Ftb3VudEJvb3N0CQBrAwUPd2F2ZXNEaWZmZXJlbmNlAFAAZAQLYW1vdW50Qm9vc3QJAGsDBQ93YXZlc0RpZmZlcmVuY2UAUABkBAthbW91bnRPd25lcgkAawMFD3dhdmVzRGlmZmVyZW5jZQAUAGQEBWJvb3N0CQD8BwQJAQdBZGRyZXNzAQULcG9vbGJvb3N0U0MCC2FkZEJvb3N0aW5nCQDMCAIFD3doaXJscG9vbHN0cmluZwkAzAgCAAcFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUEdW5pdAULYW1vdW50Qm9vc3QFA25pbAMJAAACBQVib29zdAUFYm9vc3QECWFjdGl2YXRlZAMJAAACCAUBaQZjYWxsZXIFBHRoaXMJAQxJbnRlZ2VyRW50cnkCAhVBY3RpdmF0ZWQgYmxvY2toZWlnaHQFBmhlaWdodAkBDEludGVnZXJFbnRyeQICIEFjdGl2YXRlZCBieSBhbnlib2R5IGJsb2NraGVpZ2h0BQZoZWlnaHQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBBQxwcm9qZWN0b3duZXIFC2Ftb3VudE93bmVyBQR1bml0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAiB0b3RhbCBXQVZFUyBwYWlkIG91dCBpbiB3YXZlbGV0cwkAZAIFEHdhdmVzQW1vdW50Qm9vc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHBhaWQgb3V0IGluIHdhdmVsZXRzCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhBST0kgYmFzaXMgcG9pbnRzCQBrAwkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwIgdG90YWwgV0FWRVMgcGFpZCBvdXQgaW4gd2F2ZWxldHMAkE4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMCIHRvdGFsIFdBVkVTIHJlY2VpdmVkIGluIHdhdmVsZXRzCQDMCAIFCWFjdGl2YXRlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCXN0YWtlRUFTVAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyBAxzdXBwbHlhbW91bnQJAPAHAgUEdGhpcwUEZWFzdAQJc3Rha2VFQVNUAwkAZgIFDHN1cHBseWFtb3VudAAACQD8BwQFCkVBU1Rfc3Rha2UCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGVhc3QFDHN1cHBseWFtb3VudAUDbmlsBQR1bml0AwkAAAIFCXN0YWtlRUFTVAUJc3Rha2VFQVNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCAgtFQVNUIHN0YWtlZAkAZAIFDHN1cHBseWFtb3VudAkBDXRyeUdldEludGVnZXIBAgtFQVNUIHN0YWtlZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEkNoYW5nZUludGVnZXJFbnRyeQIDa2V5B2ludGVnZXIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhxhY2Nlc3Mgb25seSBieSBwcm9qZWN0IG93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQNrZXkFB2ludGVnZXIFA25pbAD8qz0U", "height": 3847957, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7kTAjjxdWhWFFTWRA82KPTzuRLt265bfQa6a4SavsDFk Next: 9i6sRGSJvNp8dr3dni5wFiiAcacCuFxEui5VGSPL2CM6 Diff:
Old | New | Differences | |
---|---|---|---|
576 | 576 | ||
577 | 577 | ||
578 | 578 | @Callable(i) | |
579 | - | func BoostPoolAPYwWAVES_Low () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
579 | + | func BoostPoolAPYwWAVES_Low () = if (if ((i.caller != this)) | |
580 | + | then ((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height) | |
581 | + | else false) | |
580 | 582 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
581 | 583 | else { | |
582 | 584 | let wavesBalanceBefore = if ((d8 > wavesBalance(this).available)) |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let d8 = 100000000 | |
5 | 5 | ||
6 | 6 | let d16 = (d8 * d8) | |
7 | 7 | ||
8 | 8 | let poolId = base58'3PQHndCUVrv3wBuQjbvVP9SnGmfbfitGxfx' | |
9 | 9 | ||
10 | 10 | let poolString = toBase58String(poolId) | |
11 | 11 | ||
12 | 12 | let projectowner = base58'3PEtLVxDT8mxAh1SDAn8m7JTGNkdpkaFxBk' | |
13 | 13 | ||
14 | 14 | let whirlpoolPoolId = base58'3P2myTbd5zpEHcYmNpdWTp5gXS5B8tL1RCY' | |
15 | 15 | ||
16 | 16 | let whirlpoolstring = toBase58String(whirlpoolPoolId) | |
17 | 17 | ||
18 | 18 | let poolboostSC = base58'3PAeY7RgwuNUZNscGqahqJxFTFDkh7fbNwJ' | |
19 | 19 | ||
20 | 20 | let project = base58'3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr' | |
21 | 21 | ||
22 | 22 | let whirlpool = base58'73tY3E6Gd5AWYmsuq8m8Kek7KnJNAYyS3GoveTbc6jCi' | |
23 | 23 | ||
24 | 24 | let waves = base58'WAVES' | |
25 | 25 | ||
26 | 26 | let usdterc = base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
27 | 27 | ||
28 | 28 | let usdcerc = base58'HGgabTqUS8WtVFUJzfmrTDMgEccJuZLBPhFgQFxvnsoW' | |
29 | 29 | ||
30 | 30 | let usdtbsc = base58'A81p1LTRyoq2rDR2TNxB2dWYxsiNwCSSi8sXef2SEkwb' | |
31 | 31 | ||
32 | 32 | let usdcbsc = base58'4BKKSp6NoNcrFHyorZogDyctq1fq6w7114Ym1pw6HUtC' | |
33 | 33 | ||
34 | 34 | let burnxtnId = base58'3SjxA2YLdfF9fTRbzLm9xFn27C6MW34W1YsdJ6Axefns' | |
35 | 35 | ||
36 | 36 | let eth = base58'3VuV5WTmDz47Dmdn3QpcYjzbSdipjQE4JMdNe1xZpX13' | |
37 | 37 | ||
38 | 38 | let bnb = base58'66a1br3BrkoaJgP7yEar9hJcSTvJPoH6PYBLqscXcMGo' | |
39 | 39 | ||
40 | 40 | let wbtc = base58'2Fge5HEBRD3XTeg7Xg3FW5yiB9HVJFQtMXiWMQo72Up6' | |
41 | 41 | ||
42 | 42 | let btcb = base58'EW1uGLVo21Wd9i2Rhq8o4VKDTCQTGCGXE8DqayHGrLg8' | |
43 | 43 | ||
44 | 44 | let east = base58'6phK22ztGBW127gUFmdMEHKB3CVd6ZhWox2WtwJkbqTq' | |
45 | 45 | ||
46 | 46 | let steast = base58'GAB8JowY9UANZ4TQy2TzJyhxjPqXX3DUrb2cdMWrrJus' | |
47 | 47 | ||
48 | 48 | let swaves = base58'YiNbofFzC17jEHHCMwrRcpy9MrrjabMMLZxg8g5xmf7' | |
49 | 49 | ||
50 | 50 | func tryGetInteger (key) = match getInteger(this, key) { | |
51 | 51 | case b: Int => | |
52 | 52 | b | |
53 | 53 | case _ => | |
54 | 54 | 0 | |
55 | 55 | } | |
56 | 56 | ||
57 | 57 | ||
58 | 58 | let PL_Main = Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH') | |
59 | 59 | ||
60 | 60 | let PL_Defi = Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X') | |
61 | 61 | ||
62 | 62 | let PL_Low = Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH') | |
63 | 63 | ||
64 | 64 | let EAST_stake = Address(base58'3P2hbtheN5apNppqqUK7L7qAwmRFXy91CNa') | |
65 | 65 | ||
66 | 66 | let WX_WAVES_EAST = Address(base58'3PJVwjfi2fF5Jv9AauayU6xLxrYBn8bpGH1') | |
67 | 67 | ||
68 | 68 | let SWAVES_stake = Address(base58'3PDPzZVLhN1EuzGy4xAxjjTVkawKDLEaHiV') | |
69 | 69 | ||
70 | 70 | let address = toString(Address(project)) | |
71 | 71 | ||
72 | 72 | func PL_value (dAppAddress,asset) = fraction(getIntegerValue(dAppAddress, ((address + "_supplied_") + toBase58String(asset))), getIntegerValue(dAppAddress, (toBase58String(asset) + "_sRate")), d16) | |
73 | 73 | ||
74 | 74 | ||
75 | 75 | let ethinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(eth)) + "_balance")) | |
76 | 76 | ||
77 | 77 | let wavesinpool = getIntegerValue(Address(poolId), (("global_" + toBase58String(waves)) + "_balance")) | |
78 | 78 | ||
79 | 79 | let projectstake = getIntegerValue(Address(poolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked")) | |
80 | 80 | ||
81 | 81 | let totalstake = getIntegerValue(Address(poolId), "global_poolToken_amount") | |
82 | 82 | ||
83 | 83 | let ethwaves = fraction(d8, wavesinpool, ethinpool) | |
84 | 84 | ||
85 | 85 | func _loadInt (key_,default_) = match getInteger(SWAVES_stake, key_) { | |
86 | 86 | case a: Int => | |
87 | 87 | a | |
88 | 88 | case _ => | |
89 | 89 | default_ | |
90 | 90 | } | |
91 | 91 | ||
92 | 92 | ||
93 | 93 | func _loadBigInt (key_,default_) = match getBinary(SWAVES_stake, key_) { | |
94 | 94 | case a: ByteVector => | |
95 | 95 | toBigInt(a) | |
96 | 96 | case _ => | |
97 | 97 | default_ | |
98 | 98 | } | |
99 | 99 | ||
100 | 100 | ||
101 | 101 | let lastRate = _loadBigInt("LAST_RATE", toBigInt(1000000000000)) | |
102 | 102 | ||
103 | 103 | let currentRate = _loadBigInt("CURRENT_RATE", toBigInt(0)) | |
104 | 104 | ||
105 | 105 | let lastHeight = _loadInt("LAST_HEIGHT", 0) | |
106 | 106 | ||
107 | 107 | let targetHeight = min([_loadInt("TARGET_HEIGHT", 0), height]) | |
108 | 108 | ||
109 | 109 | let lastRateUpdated = (lastRate + (currentRate * toBigInt((targetHeight - lastHeight)))) | |
110 | 110 | ||
111 | 111 | let baseAmount = toInt(fraction(toBigInt(assetBalance(WX_WAVES_EAST, swaves)), lastRateUpdated, toBigInt(1000000000000), FLOOR)) | |
112 | 112 | ||
113 | 113 | let wavesinWX = (wavesBalance(WX_WAVES_EAST).regular + baseAmount) | |
114 | 114 | ||
115 | 115 | let eastinWX = assetBalance(WX_WAVES_EAST, east) | |
116 | 116 | ||
117 | 117 | let waveseast = fraction((d8 * 100), eastinWX, wavesinWX) | |
118 | 118 | ||
119 | 119 | let wavesinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(waves)) + "_balance")) | |
120 | 120 | ||
121 | 121 | let whirlinwhirlpool = getIntegerValue(Address(whirlpoolPoolId), (("global_" + toBase58String(whirlpool)) + "_balance")) | |
122 | 122 | ||
123 | 123 | let projectstakewhirl = getIntegerValue(Address(whirlpoolPoolId), ("3PAkmJniMgnnAej5pYf2jFYkCbZow5pt9tr" + "_indexStaked")) | |
124 | 124 | ||
125 | 125 | let totalstakewhirl = getIntegerValue(Address(whirlpoolPoolId), "global_poolToken_amount") | |
126 | 126 | ||
127 | 127 | let stEASTinwaves = (fraction((fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100), d8, waveseast) * 100) | |
128 | 128 | ||
129 | 129 | let EASTinstaking = (fraction(assetBalance(this, steast), getIntegerValue(EAST_stake, "%s__rate"), 1000000000000, HALFEVEN) / 100) | |
130 | 130 | ||
131 | 131 | let tvlinwaves = (((fraction((wavesinpool * 10), projectstake, totalstake) + fraction(PL_value(PL_Main, eth), ethwaves, d8)) + fraction((wavesinwhirlpool * 10), projectstakewhirl, totalstakewhirl)) + stEASTinwaves) | |
132 | 132 | ||
133 | 133 | let whirlpoolsupply = match assetInfo(whirlpool) { | |
134 | 134 | case asset: Asset => | |
135 | 135 | asset.quantity | |
136 | 136 | case _ => | |
137 | 137 | throw("Can't find asset") | |
138 | 138 | } | |
139 | 139 | ||
140 | 140 | let price = if (((fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8) >= getIntegerValue(this, "WHIRLPOOL issue price in wavelets"))) | |
141 | 141 | then (fraction((tvlinwaves + getIntegerValue(this, "surplus received in wavelets")), d8, whirlpoolsupply) + d8) | |
142 | 142 | else getIntegerValue(this, "WHIRLPOOL issue price in wavelets") | |
143 | 143 | ||
144 | 144 | func tryGetIntegerP (key) = match getInteger(Address(whirlpoolPoolId), key) { | |
145 | 145 | case b: Int => | |
146 | 146 | b | |
147 | 147 | case _ => | |
148 | 148 | 0 | |
149 | 149 | } | |
150 | 150 | ||
151 | 151 | ||
152 | 152 | func tryGetStringP (key) = match getString(Address(whirlpoolPoolId), key) { | |
153 | 153 | case b: String => | |
154 | 154 | b | |
155 | 155 | case _ => | |
156 | 156 | "" | |
157 | 157 | } | |
158 | 158 | ||
159 | 159 | ||
160 | 160 | func getAssetBytes (assetIdStr) = if ((assetIdStr == "WAVES")) | |
161 | 161 | then unit | |
162 | 162 | else fromBase58String(assetIdStr) | |
163 | 163 | ||
164 | 164 | ||
165 | 165 | func getAssetString (assetId) = match assetId { | |
166 | 166 | case b: ByteVector => | |
167 | 167 | toBase58String(b) | |
168 | 168 | case _ => | |
169 | 169 | "WAVES" | |
170 | 170 | } | |
171 | 171 | ||
172 | 172 | ||
173 | 173 | func addAssetBytesToList (accum,item) = (accum ++ [getAssetBytes(item)]) | |
174 | 174 | ||
175 | 175 | ||
176 | 176 | func addAssetWeightToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_weight"))]) | |
177 | 177 | ||
178 | 178 | ||
179 | 179 | func addAssetDecimalsToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_decimals"))]) | |
180 | 180 | ||
181 | 181 | ||
182 | 182 | func addAssetScaleToList (accum,item) = (accum ++ [tryGetIntegerP((("static_" + getAssetString(item)) + "_scale"))]) | |
183 | 183 | ||
184 | 184 | ||
185 | 185 | let T = tryGetIntegerP("static_tokensAmount") | |
186 | 186 | ||
187 | 187 | let assetIds = { | |
188 | 188 | let $l = split(tryGetStringP("static_tokenIds"), ",") | |
189 | 189 | let $s = size($l) | |
190 | 190 | let $acc0 = nil | |
191 | 191 | func $f0_1 ($a,$i) = if (($i >= $s)) | |
192 | 192 | then $a | |
193 | 193 | else addAssetBytesToList($a, $l[$i]) | |
194 | 194 | ||
195 | 195 | func $f0_2 ($a,$i) = if (($i >= $s)) | |
196 | 196 | then $a | |
197 | 197 | else throw("List size exceeds 10") | |
198 | 198 | ||
199 | 199 | $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) | |
200 | 200 | } | |
201 | 201 | ||
202 | 202 | let AssetsWeights = { | |
203 | 203 | let $l = assetIds | |
204 | 204 | let $s = size($l) | |
205 | 205 | let $acc0 = nil | |
206 | 206 | func $f1_1 ($a,$i) = if (($i >= $s)) | |
207 | 207 | then $a | |
208 | 208 | else addAssetWeightToList($a, $l[$i]) | |
209 | 209 | ||
210 | 210 | func $f1_2 ($a,$i) = if (($i >= $s)) | |
211 | 211 | then $a | |
212 | 212 | else throw("List size exceeds 10") | |
213 | 213 | ||
214 | 214 | $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) | |
215 | 215 | } | |
216 | 216 | ||
217 | 217 | let Decimals = { | |
218 | 218 | let $l = assetIds | |
219 | 219 | let $s = size($l) | |
220 | 220 | let $acc0 = nil | |
221 | 221 | func $f2_1 ($a,$i) = if (($i >= $s)) | |
222 | 222 | then $a | |
223 | 223 | else addAssetDecimalsToList($a, $l[$i]) | |
224 | 224 | ||
225 | 225 | func $f2_2 ($a,$i) = if (($i >= $s)) | |
226 | 226 | then $a | |
227 | 227 | else throw("List size exceeds 10") | |
228 | 228 | ||
229 | 229 | $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) | |
230 | 230 | } | |
231 | 231 | ||
232 | 232 | let Scales = { | |
233 | 233 | let $l = assetIds | |
234 | 234 | let $s = size($l) | |
235 | 235 | let $acc0 = nil | |
236 | 236 | func $f3_1 ($a,$i) = if (($i >= $s)) | |
237 | 237 | then $a | |
238 | 238 | else addAssetScaleToList($a, $l[$i]) | |
239 | 239 | ||
240 | 240 | func $f3_2 ($a,$i) = if (($i >= $s)) | |
241 | 241 | then $a | |
242 | 242 | else throw("List size exceeds 10") | |
243 | 243 | ||
244 | 244 | $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) | |
245 | 245 | } | |
246 | 246 | ||
247 | 247 | @Callable(i) | |
248 | 248 | func buyWHIRLPOOLwithWAVES () = { | |
249 | 249 | let pmt = value(i.payments[0]) | |
250 | 250 | let surplus = fraction((price - d8), pmt.amount, d8) | |
251 | 251 | let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price))) | |
252 | 252 | then fraction(pmt.amount, d8, price) | |
253 | 253 | else throw("please contact project owner: issue amount error") | |
254 | 254 | let supplyamount = ((pmt.amount - surplus) / 3) | |
255 | 255 | let AmountIn = pmt.amount | |
256 | 256 | let AssetInBalance = wavesinwhirlpool | |
257 | 257 | let AssetOutBalance = whirlinwhirlpool | |
258 | 258 | let feeAmountIn = fraction(AmountIn, 200, 10000) | |
259 | 259 | let cleanAmountIn = (AmountIn - feeAmountIn) | |
260 | 260 | let IndexIn = value(indexOf(assetIds, unit)) | |
261 | 261 | let IndexOut = value(indexOf(assetIds, whirlpool)) | |
262 | 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 | 263 | let WhirlpoolBalanceBefore = assetBalance(this, whirlpool) | |
264 | 264 | if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore)) | |
265 | 265 | then if ((pmt.assetId != unit)) | |
266 | 266 | then throw("attach WAVES token only") | |
267 | 267 | else { | |
268 | 268 | let swap = if ((AmountOut > IssueAmount)) | |
269 | 269 | then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)]) | |
270 | 270 | else unit | |
271 | 271 | if ((swap == swap)) | |
272 | 272 | then { | |
273 | 273 | let SupplyWavesMainPool = if ((IssueAmount >= AmountOut)) | |
274 | 274 | then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)]) | |
275 | 275 | else unit | |
276 | 276 | if ((SupplyWavesMainPool == SupplyWavesMainPool)) | |
277 | 277 | then { | |
278 | 278 | let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut)) | |
279 | 279 | then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)]) | |
280 | 280 | else unit | |
281 | 281 | if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool)) | |
282 | 282 | then { | |
283 | 283 | let SupplyWavesLowCap = if ((IssueAmount >= AmountOut)) | |
284 | 284 | then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)]) | |
285 | 285 | else unit | |
286 | 286 | if ((SupplyWavesLowCap == SupplyWavesLowCap)) | |
287 | 287 | then { | |
288 | 288 | let WhirlpoolBalanceAfter = assetBalance(this, whirlpool) | |
289 | 289 | if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter)) | |
290 | 290 | then { | |
291 | 291 | let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter) | |
292 | 292 | [Reissue(whirlpool, if ((IssueAmount >= AmountOut)) | |
293 | 293 | then IssueAmount | |
294 | 294 | else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut)) | |
295 | 295 | then IssueAmount | |
296 | 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 | 297 | then pmt.amount | |
298 | 298 | else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut)) | |
299 | 299 | then surplus | |
300 | 300 | else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut)) | |
301 | 301 | then (IssueAmount - surplus) | |
302 | 302 | else (0 + getIntegerValue(this, "wavelets received for treasury")))] | |
303 | 303 | } | |
304 | 304 | else throw("Strict value is not equal to itself.") | |
305 | 305 | } | |
306 | 306 | else throw("Strict value is not equal to itself.") | |
307 | 307 | } | |
308 | 308 | else throw("Strict value is not equal to itself.") | |
309 | 309 | } | |
310 | 310 | else throw("Strict value is not equal to itself.") | |
311 | 311 | } | |
312 | 312 | else throw("Strict value is not equal to itself.") | |
313 | 313 | } | |
314 | 314 | else throw("Strict value is not equal to itself.") | |
315 | 315 | } | |
316 | 316 | ||
317 | 317 | ||
318 | 318 | ||
319 | 319 | @Callable(i) | |
320 | 320 | func PriceSupplyTreasury () = [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"))] | |
321 | 321 | ||
322 | 322 | ||
323 | 323 | ||
324 | 324 | @Callable(i) | |
325 | 325 | func PoolOneTokenSurplus () = if ((i.caller != this)) | |
326 | 326 | then throw("access only by project owner") | |
327 | 327 | else { | |
328 | 328 | let surplusamount = getIntegerValue(this, "surplus received in wavelets") | |
329 | 329 | let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [poolString], [AttachedPayment(unit, surplusamount)]) | |
330 | 330 | if ((PoolOneTokenSurplus == PoolOneTokenSurplus)) | |
331 | 331 | then [IntegerEntry("surplus received in wavelets", (getIntegerValue(this, "surplus received in wavelets") - surplusamount))] | |
332 | 332 | else throw("Strict value is not equal to itself.") | |
333 | 333 | } | |
334 | 334 | ||
335 | 335 | ||
336 | 336 | ||
337 | 337 | @Callable(i) | |
338 | 338 | func BoostPoolAPYwBURNxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
339 | 339 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
340 | 340 | else { | |
341 | 341 | let wavesBalanceBefore = wavesBalance(this).available | |
342 | 342 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
343 | 343 | then { | |
344 | 344 | let claim = invoke(Address(poolId), "claimIndexRewards", nil, nil) | |
345 | 345 | if ((claim == claim)) | |
346 | 346 | then { | |
347 | 347 | let swapburnxtn = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(burnxtnId, assetBalance(this, burnxtnId))]) | |
348 | 348 | if ((swapburnxtn == swapburnxtn)) | |
349 | 349 | then { | |
350 | 350 | let swapusdterc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdterc, assetBalance(this, usdterc))]) | |
351 | 351 | if ((swapusdterc == swapusdterc)) | |
352 | 352 | then { | |
353 | 353 | let swapusdtbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdtbsc, assetBalance(this, usdtbsc))]) | |
354 | 354 | if ((swapusdtbsc == swapusdtbsc)) | |
355 | 355 | then { | |
356 | 356 | let swapusdcerc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcerc, assetBalance(this, usdcerc))]) | |
357 | 357 | if ((swapusdcerc == swapusdcerc)) | |
358 | 358 | then { | |
359 | 359 | let swapusdcbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcbsc, assetBalance(this, usdcbsc))]) | |
360 | 360 | if ((swapusdcbsc == swapusdcbsc)) | |
361 | 361 | then { | |
362 | 362 | let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))]) | |
363 | 363 | if ((swapeth == swapeth)) | |
364 | 364 | then { | |
365 | 365 | let swapbnb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(bnb, assetBalance(this, bnb))]) | |
366 | 366 | if ((swapbnb == swapbnb)) | |
367 | 367 | then { | |
368 | 368 | let swapwbtc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(wbtc, assetBalance(this, wbtc))]) | |
369 | 369 | if ((swapwbtc == swapwbtc)) | |
370 | 370 | then { | |
371 | 371 | let swapbtcb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(btcb, assetBalance(this, btcb))]) | |
372 | 372 | if ((swapbtcb == swapbtcb)) | |
373 | 373 | then { | |
374 | 374 | let wavesBalanceAfter = wavesBalance(this).available | |
375 | 375 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
376 | 376 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
377 | 377 | let amountBoost = fraction(wavesDifference, 80, 100) | |
378 | 378 | let amountOwner = fraction(wavesDifference, 20, 100) | |
379 | 379 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
380 | 380 | if ((boost == boost)) | |
381 | 381 | then { | |
382 | 382 | let activated = if ((i.caller == this)) | |
383 | 383 | then IntegerEntry("Activated blockheight", height) | |
384 | 384 | else IntegerEntry("Activated by anybody blockheight", height) | |
385 | 385 | [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"))), activated] | |
386 | 386 | } | |
387 | 387 | else throw("Strict value is not equal to itself.") | |
388 | 388 | } | |
389 | 389 | else throw("Strict value is not equal to itself.") | |
390 | 390 | } | |
391 | 391 | else throw("Strict value is not equal to itself.") | |
392 | 392 | } | |
393 | 393 | else throw("Strict value is not equal to itself.") | |
394 | 394 | } | |
395 | 395 | else throw("Strict value is not equal to itself.") | |
396 | 396 | } | |
397 | 397 | else throw("Strict value is not equal to itself.") | |
398 | 398 | } | |
399 | 399 | else throw("Strict value is not equal to itself.") | |
400 | 400 | } | |
401 | 401 | else throw("Strict value is not equal to itself.") | |
402 | 402 | } | |
403 | 403 | else throw("Strict value is not equal to itself.") | |
404 | 404 | } | |
405 | 405 | else throw("Strict value is not equal to itself.") | |
406 | 406 | } | |
407 | 407 | else throw("Strict value is not equal to itself.") | |
408 | 408 | } | |
409 | 409 | else throw("Strict value is not equal to itself.") | |
410 | 410 | } | |
411 | 411 | ||
412 | 412 | ||
413 | 413 | ||
414 | 414 | @Callable(i) | |
415 | 415 | func BoostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
416 | 416 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
417 | 417 | else { | |
418 | 418 | let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil) | |
419 | 419 | if ((calculateTokenRates == calculateTokenRates)) | |
420 | 420 | then { | |
421 | 421 | let withdrawamount = (PL_value(PL_Main, eth) - tryGetInteger("ETH supplied")) | |
422 | 422 | let wavesBalanceBefore = wavesBalance(this).available | |
423 | 423 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
424 | 424 | then { | |
425 | 425 | let withdraw = invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "withdraw", [toBase58String(eth), withdrawamount], nil) | |
426 | 426 | if ((withdraw == withdraw)) | |
427 | 427 | then { | |
428 | 428 | let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))]) | |
429 | 429 | if ((swapeth == swapeth)) | |
430 | 430 | then { | |
431 | 431 | let wavesBalanceAfter = wavesBalance(this).available | |
432 | 432 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
433 | 433 | let amountBoost = fraction(wavesDifference, 80, 100) | |
434 | 434 | let amountOwner = fraction(wavesDifference, 20, 100) | |
435 | 435 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
436 | 436 | if ((boost == boost)) | |
437 | 437 | then { | |
438 | 438 | let activated = if ((i.caller == this)) | |
439 | 439 | then IntegerEntry("Activated blockheight", height) | |
440 | 440 | else IntegerEntry("Activated by anybody blockheight", height) | |
441 | 441 | [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"))), activated] | |
442 | 442 | } | |
443 | 443 | else throw("Strict value is not equal to itself.") | |
444 | 444 | } | |
445 | 445 | else throw("Strict value is not equal to itself.") | |
446 | 446 | } | |
447 | 447 | else throw("Strict value is not equal to itself.") | |
448 | 448 | } | |
449 | 449 | else throw("Strict value is not equal to itself.") | |
450 | 450 | } | |
451 | 451 | else throw("Strict value is not equal to itself.") | |
452 | 452 | } | |
453 | 453 | ||
454 | 454 | ||
455 | 455 | ||
456 | 456 | @Callable(i) | |
457 | 457 | func BoostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
458 | 458 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
459 | 459 | else { | |
460 | 460 | let wavesBalanceBefore = wavesBalance(this).available | |
461 | 461 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
462 | 462 | then { | |
463 | 463 | let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil) | |
464 | 464 | if ((claim == claim)) | |
465 | 465 | then { | |
466 | 466 | let swapwhirlpool = invoke(Address(whirlpoolPoolId), "swap", ["WAVES", 0], [AttachedPayment(whirlpool, assetBalance(this, whirlpool))]) | |
467 | 467 | if ((swapwhirlpool == swapwhirlpool)) | |
468 | 468 | then { | |
469 | 469 | let wavesBalanceAfter = wavesBalance(this).available | |
470 | 470 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
471 | 471 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
472 | 472 | let amountBoost = fraction(wavesDifference, 80, 100) | |
473 | 473 | let amountOwner = fraction(wavesDifference, 20, 100) | |
474 | 474 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
475 | 475 | if ((boost == boost)) | |
476 | 476 | then { | |
477 | 477 | let activated = if ((i.caller == this)) | |
478 | 478 | then IntegerEntry("Activated blockheight", height) | |
479 | 479 | else IntegerEntry("Activated by anybody blockheight", height) | |
480 | 480 | [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"))), activated] | |
481 | 481 | } | |
482 | 482 | else throw("Strict value is not equal to itself.") | |
483 | 483 | } | |
484 | 484 | else throw("Strict value is not equal to itself.") | |
485 | 485 | } | |
486 | 486 | else throw("Strict value is not equal to itself.") | |
487 | 487 | } | |
488 | 488 | else throw("Strict value is not equal to itself.") | |
489 | 489 | } | |
490 | 490 | ||
491 | 491 | ||
492 | 492 | ||
493 | 493 | @Callable(i) | |
494 | 494 | func SupplyETHmain () = if ((i.caller != this)) | |
495 | 495 | then throw("access only by project owner") | |
496 | 496 | else { | |
497 | 497 | let supplyamount = assetBalance(this, eth) | |
498 | 498 | let SupplyETHmain = if ((supplyamount > 0)) | |
499 | 499 | then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(eth, supplyamount)]) | |
500 | 500 | else unit | |
501 | 501 | if ((SupplyETHmain == SupplyETHmain)) | |
502 | 502 | then [IntegerEntry("ETH supplied", (supplyamount + tryGetInteger("ETH supplied")))] | |
503 | 503 | else throw("Strict value is not equal to itself.") | |
504 | 504 | } | |
505 | 505 | ||
506 | 506 | ||
507 | 507 | ||
508 | 508 | @Callable(i) | |
509 | 509 | func BoostPoolAPYwWAVES_Main () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
510 | 510 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
511 | 511 | else { | |
512 | 512 | let wavesBalanceBefore = if ((d8 > wavesBalance(this).available)) | |
513 | 513 | then d8 | |
514 | 514 | else wavesBalance(this).available | |
515 | 515 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
516 | 516 | then { | |
517 | 517 | let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3)) | |
518 | 518 | let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil) | |
519 | 519 | if ((withdrawWM == withdrawWM)) | |
520 | 520 | then { | |
521 | 521 | let wavesBalanceAfter = wavesBalance(this).available | |
522 | 522 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
523 | 523 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
524 | 524 | let amountBoost = fraction(wavesDifference, 80, 100) | |
525 | 525 | let amountOwner = fraction(wavesDifference, 20, 100) | |
526 | 526 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
527 | 527 | if ((boost == boost)) | |
528 | 528 | then { | |
529 | 529 | let activated = if ((i.caller == this)) | |
530 | 530 | then IntegerEntry("Activated blockheight", height) | |
531 | 531 | else IntegerEntry("Activated by anybody blockheight", height) | |
532 | 532 | [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"))), activated] | |
533 | 533 | } | |
534 | 534 | else throw("Strict value is not equal to itself.") | |
535 | 535 | } | |
536 | 536 | else throw("Strict value is not equal to itself.") | |
537 | 537 | } | |
538 | 538 | else throw("Strict value is not equal to itself.") | |
539 | 539 | } | |
540 | 540 | ||
541 | 541 | ||
542 | 542 | ||
543 | 543 | @Callable(i) | |
544 | 544 | func BoostPoolAPYwWAVES_Defi () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
545 | 545 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
546 | 546 | else { | |
547 | 547 | let wavesBalanceBefore = if ((d8 > wavesBalance(this).available)) | |
548 | 548 | then d8 | |
549 | 549 | else wavesBalance(this).available | |
550 | 550 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
551 | 551 | then { | |
552 | 552 | let withdrawamountMain = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3)) | |
553 | 553 | let withdrawWM = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountMain], nil) | |
554 | 554 | if ((withdrawWM == withdrawWM)) | |
555 | 555 | then { | |
556 | 556 | let wavesBalanceAfter = wavesBalance(this).available | |
557 | 557 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
558 | 558 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
559 | 559 | let amountBoost = fraction(wavesDifference, 80, 100) | |
560 | 560 | let amountOwner = fraction(wavesDifference, 20, 100) | |
561 | 561 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
562 | 562 | if ((boost == boost)) | |
563 | 563 | then { | |
564 | 564 | let activated = if ((i.caller == this)) | |
565 | 565 | then IntegerEntry("Activated blockheight", height) | |
566 | 566 | else IntegerEntry("Activated by anybody blockheight", height) | |
567 | 567 | [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"))), activated] | |
568 | 568 | } | |
569 | 569 | else throw("Strict value is not equal to itself.") | |
570 | 570 | } | |
571 | 571 | else throw("Strict value is not equal to itself.") | |
572 | 572 | } | |
573 | 573 | else throw("Strict value is not equal to itself.") | |
574 | 574 | } | |
575 | 575 | ||
576 | 576 | ||
577 | 577 | ||
578 | 578 | @Callable(i) | |
579 | - | func BoostPoolAPYwWAVES_Low () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height)) | |
579 | + | func BoostPoolAPYwWAVES_Low () = if (if ((i.caller != this)) | |
580 | + | then ((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height) | |
581 | + | else false) | |
580 | 582 | then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440))))) | |
581 | 583 | else { | |
582 | 584 | let wavesBalanceBefore = if ((d8 > wavesBalance(this).available)) | |
583 | 585 | then d8 | |
584 | 586 | else wavesBalance(this).available | |
585 | 587 | if ((wavesBalanceBefore == wavesBalanceBefore)) | |
586 | 588 | then { | |
587 | 589 | let withdrawamountMain = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3)) | |
588 | 590 | let withdrawWM = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountMain], nil) | |
589 | 591 | if ((withdrawWM == withdrawWM)) | |
590 | 592 | then { | |
591 | 593 | let wavesBalanceAfter = wavesBalance(this).available | |
592 | 594 | let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore) | |
593 | 595 | let wavesAmountBoost = fraction(wavesDifference, 80, 100) | |
594 | 596 | let amountBoost = fraction(wavesDifference, 80, 100) | |
595 | 597 | let amountOwner = fraction(wavesDifference, 20, 100) | |
596 | 598 | let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)]) | |
597 | 599 | if ((boost == boost)) | |
598 | 600 | then { | |
599 | 601 | let activated = if ((i.caller == this)) | |
600 | 602 | then IntegerEntry("Activated blockheight", height) | |
601 | 603 | else IntegerEntry("Activated by anybody blockheight", height) | |
602 | 604 | [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"))), activated] | |
603 | 605 | } | |
604 | 606 | else throw("Strict value is not equal to itself.") | |
605 | 607 | } | |
606 | 608 | else throw("Strict value is not equal to itself.") | |
607 | 609 | } | |
608 | 610 | else throw("Strict value is not equal to itself.") | |
609 | 611 | } | |
610 | 612 | ||
611 | 613 | ||
612 | 614 | ||
613 | 615 | @Callable(i) | |
614 | 616 | func stakeEAST () = if ((i.caller != this)) | |
615 | 617 | then throw("access only by project owner") | |
616 | 618 | else { | |
617 | 619 | let supplyamount = assetBalance(this, east) | |
618 | 620 | let stakeEAST = if ((supplyamount > 0)) | |
619 | 621 | then invoke(EAST_stake, "stake", nil, [AttachedPayment(east, supplyamount)]) | |
620 | 622 | else unit | |
621 | 623 | if ((stakeEAST == stakeEAST)) | |
622 | 624 | then [IntegerEntry("EAST staked", (supplyamount + tryGetInteger("EAST staked")))] | |
623 | 625 | else throw("Strict value is not equal to itself.") | |
624 | 626 | } | |
625 | 627 | ||
626 | 628 | ||
627 | 629 | ||
628 | 630 | @Callable(i) | |
629 | 631 | func ChangeIntegerEntry (key,integer) = if ((i.caller != this)) | |
630 | 632 | then throw("access only by project owner") | |
631 | 633 | else [IntegerEntry(key, integer)] | |
632 | 634 | ||
633 | 635 |
github/deemru/w8io/3ef1775 66.67 ms ◑