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:
OldNewDifferences
576576
577577
578578 @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)
580582 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
581583 else {
582584 let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
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)
248248 func buyWHIRLPOOLwithWAVES () = {
249249 let pmt = value(i.payments[0])
250250 let surplus = fraction((price - d8), pmt.amount, d8)
251251 let IssueAmount = if ((pmt.amount > fraction(pmt.amount, d8, price)))
252252 then fraction(pmt.amount, d8, price)
253253 else throw("please contact project owner: issue amount error")
254254 let supplyamount = ((pmt.amount - surplus) / 3)
255255 let AmountIn = pmt.amount
256256 let AssetInBalance = wavesinwhirlpool
257257 let AssetOutBalance = whirlinwhirlpool
258258 let feeAmountIn = fraction(AmountIn, 200, 10000)
259259 let cleanAmountIn = (AmountIn - feeAmountIn)
260260 let IndexIn = value(indexOf(assetIds, unit))
261261 let IndexOut = value(indexOf(assetIds, whirlpool))
262262 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)
263263 let WhirlpoolBalanceBefore = assetBalance(this, whirlpool)
264264 if ((WhirlpoolBalanceBefore == WhirlpoolBalanceBefore))
265265 then if ((pmt.assetId != unit))
266266 then throw("attach WAVES token only")
267267 else {
268268 let swap = if ((AmountOut > IssueAmount))
269269 then invoke(Address(whirlpoolPoolId), "swap", [whirlpoolstring, (IssueAmount + 1)], [AttachedPayment(unit, AmountIn)])
270270 else unit
271271 if ((swap == swap))
272272 then {
273273 let SupplyWavesMainPool = if ((IssueAmount >= AmountOut))
274274 then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
275275 else unit
276276 if ((SupplyWavesMainPool == SupplyWavesMainPool))
277277 then {
278278 let SupplyWavesWavesDefiPool = if ((IssueAmount >= AmountOut))
279279 then invoke(Address(base58'3P4DK5VzDwL3vfc5ahUEhtoe5ByZNyacJ3X'), "supply", nil, [AttachedPayment(unit, supplyamount)])
280280 else unit
281281 if ((SupplyWavesWavesDefiPool == SupplyWavesWavesDefiPool))
282282 then {
283283 let SupplyWavesLowCap = if ((IssueAmount >= AmountOut))
284284 then invoke(Address(base58'3PHpuQUPVUoR3AYzFeJzeWJfYLsLTmWssVH'), "supply", nil, [AttachedPayment(unit, supplyamount)])
285285 else unit
286286 if ((SupplyWavesLowCap == SupplyWavesLowCap))
287287 then {
288288 let WhirlpoolBalanceAfter = assetBalance(this, whirlpool)
289289 if ((WhirlpoolBalanceAfter == WhirlpoolBalanceAfter))
290290 then {
291291 let WhirlpoolFromSwap = (WhirlpoolBalanceBefore - WhirlpoolBalanceAfter)
292292 [Reissue(whirlpool, if ((IssueAmount >= AmountOut))
293293 then IssueAmount
294294 else 0, true), ScriptTransfer(i.caller, if ((IssueAmount >= AmountOut))
295295 then IssueAmount
296296 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))
297297 then pmt.amount
298298 else (0 + getIntegerValue(this, "total WAVES received in wavelets"))), IntegerEntry("surplus received in wavelets", if ((IssueAmount >= AmountOut))
299299 then surplus
300300 else (0 + getIntegerValue(this, "surplus received in wavelets"))), IntegerEntry("wavelets received for treasury", if ((IssueAmount >= AmountOut))
301301 then (IssueAmount - surplus)
302302 else (0 + getIntegerValue(this, "wavelets received for treasury")))]
303303 }
304304 else throw("Strict value is not equal to itself.")
305305 }
306306 else throw("Strict value is not equal to itself.")
307307 }
308308 else throw("Strict value is not equal to itself.")
309309 }
310310 else throw("Strict value is not equal to itself.")
311311 }
312312 else throw("Strict value is not equal to itself.")
313313 }
314314 else throw("Strict value is not equal to itself.")
315315 }
316316
317317
318318
319319 @Callable(i)
320320 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"))]
321321
322322
323323
324324 @Callable(i)
325325 func PoolOneTokenSurplus () = if ((i.caller != this))
326326 then throw("access only by project owner")
327327 else {
328328 let surplusamount = getIntegerValue(this, "surplus received in wavelets")
329329 let PoolOneTokenSurplus = invoke(Address(base58'3PR1Qvi9mHT35SwWEkLSqqE2L8thiPLdVWU'), "generateIndexWithOneTokenAndStake", [poolString], [AttachedPayment(unit, surplusamount)])
330330 if ((PoolOneTokenSurplus == PoolOneTokenSurplus))
331331 then [IntegerEntry("surplus received in wavelets", (getIntegerValue(this, "surplus received in wavelets") - surplusamount))]
332332 else throw("Strict value is not equal to itself.")
333333 }
334334
335335
336336
337337 @Callable(i)
338338 func BoostPoolAPYwBURNxtnPPT () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
339339 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
340340 else {
341341 let wavesBalanceBefore = wavesBalance(this).available
342342 if ((wavesBalanceBefore == wavesBalanceBefore))
343343 then {
344344 let claim = invoke(Address(poolId), "claimIndexRewards", nil, nil)
345345 if ((claim == claim))
346346 then {
347347 let swapburnxtn = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(burnxtnId, assetBalance(this, burnxtnId))])
348348 if ((swapburnxtn == swapburnxtn))
349349 then {
350350 let swapusdterc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdterc, assetBalance(this, usdterc))])
351351 if ((swapusdterc == swapusdterc))
352352 then {
353353 let swapusdtbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdtbsc, assetBalance(this, usdtbsc))])
354354 if ((swapusdtbsc == swapusdtbsc))
355355 then {
356356 let swapusdcerc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcerc, assetBalance(this, usdcerc))])
357357 if ((swapusdcerc == swapusdcerc))
358358 then {
359359 let swapusdcbsc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(usdcbsc, assetBalance(this, usdcbsc))])
360360 if ((swapusdcbsc == swapusdcbsc))
361361 then {
362362 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
363363 if ((swapeth == swapeth))
364364 then {
365365 let swapbnb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(bnb, assetBalance(this, bnb))])
366366 if ((swapbnb == swapbnb))
367367 then {
368368 let swapwbtc = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(wbtc, assetBalance(this, wbtc))])
369369 if ((swapwbtc == swapwbtc))
370370 then {
371371 let swapbtcb = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(btcb, assetBalance(this, btcb))])
372372 if ((swapbtcb == swapbtcb))
373373 then {
374374 let wavesBalanceAfter = wavesBalance(this).available
375375 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
376376 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
377377 let amountBoost = fraction(wavesDifference, 80, 100)
378378 let amountOwner = fraction(wavesDifference, 20, 100)
379379 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
380380 if ((boost == boost))
381381 then {
382382 let activated = if ((i.caller == this))
383383 then IntegerEntry("Activated blockheight", height)
384384 else IntegerEntry("Activated by anybody blockheight", height)
385385 [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]
386386 }
387387 else throw("Strict value is not equal to itself.")
388388 }
389389 else throw("Strict value is not equal to itself.")
390390 }
391391 else throw("Strict value is not equal to itself.")
392392 }
393393 else throw("Strict value is not equal to itself.")
394394 }
395395 else throw("Strict value is not equal to itself.")
396396 }
397397 else throw("Strict value is not equal to itself.")
398398 }
399399 else throw("Strict value is not equal to itself.")
400400 }
401401 else throw("Strict value is not equal to itself.")
402402 }
403403 else throw("Strict value is not equal to itself.")
404404 }
405405 else throw("Strict value is not equal to itself.")
406406 }
407407 else throw("Strict value is not equal to itself.")
408408 }
409409 else throw("Strict value is not equal to itself.")
410410 }
411411
412412
413413
414414 @Callable(i)
415415 func BoostPoolAPYwETHmain () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
416416 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
417417 else {
418418 let calculateTokenRates = invoke(PL_Main, "calculateTokenRates", [false], nil)
419419 if ((calculateTokenRates == calculateTokenRates))
420420 then {
421421 let withdrawamount = (PL_value(PL_Main, eth) - tryGetInteger("ETH supplied"))
422422 let wavesBalanceBefore = wavesBalance(this).available
423423 if ((wavesBalanceBefore == wavesBalanceBefore))
424424 then {
425425 let withdraw = invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "withdraw", [toBase58String(eth), withdrawamount], nil)
426426 if ((withdraw == withdraw))
427427 then {
428428 let swapeth = invoke(Address(poolId), "swap", ["WAVES", 0], [AttachedPayment(eth, assetBalance(this, eth))])
429429 if ((swapeth == swapeth))
430430 then {
431431 let wavesBalanceAfter = wavesBalance(this).available
432432 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
433433 let amountBoost = fraction(wavesDifference, 80, 100)
434434 let amountOwner = fraction(wavesDifference, 20, 100)
435435 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
436436 if ((boost == boost))
437437 then {
438438 let activated = if ((i.caller == this))
439439 then IntegerEntry("Activated blockheight", height)
440440 else IntegerEntry("Activated by anybody blockheight", height)
441441 [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]
442442 }
443443 else throw("Strict value is not equal to itself.")
444444 }
445445 else throw("Strict value is not equal to itself.")
446446 }
447447 else throw("Strict value is not equal to itself.")
448448 }
449449 else throw("Strict value is not equal to itself.")
450450 }
451451 else throw("Strict value is not equal to itself.")
452452 }
453453
454454
455455
456456 @Callable(i)
457457 func BoostPoolAPYwWhirlpool () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
458458 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
459459 else {
460460 let wavesBalanceBefore = wavesBalance(this).available
461461 if ((wavesBalanceBefore == wavesBalanceBefore))
462462 then {
463463 let claim = invoke(Address(whirlpoolPoolId), "claimIndexRewards", nil, nil)
464464 if ((claim == claim))
465465 then {
466466 let swapwhirlpool = invoke(Address(whirlpoolPoolId), "swap", ["WAVES", 0], [AttachedPayment(whirlpool, assetBalance(this, whirlpool))])
467467 if ((swapwhirlpool == swapwhirlpool))
468468 then {
469469 let wavesBalanceAfter = wavesBalance(this).available
470470 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
471471 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
472472 let amountBoost = fraction(wavesDifference, 80, 100)
473473 let amountOwner = fraction(wavesDifference, 20, 100)
474474 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
475475 if ((boost == boost))
476476 then {
477477 let activated = if ((i.caller == this))
478478 then IntegerEntry("Activated blockheight", height)
479479 else IntegerEntry("Activated by anybody blockheight", height)
480480 [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]
481481 }
482482 else throw("Strict value is not equal to itself.")
483483 }
484484 else throw("Strict value is not equal to itself.")
485485 }
486486 else throw("Strict value is not equal to itself.")
487487 }
488488 else throw("Strict value is not equal to itself.")
489489 }
490490
491491
492492
493493 @Callable(i)
494494 func SupplyETHmain () = if ((i.caller != this))
495495 then throw("access only by project owner")
496496 else {
497497 let supplyamount = assetBalance(this, eth)
498498 let SupplyETHmain = if ((supplyamount > 0))
499499 then invoke(Address(base58'3P4uA5etnZi4AmBabKinq2bMiWU8KcnHZdH'), "supply", nil, [AttachedPayment(eth, supplyamount)])
500500 else unit
501501 if ((SupplyETHmain == SupplyETHmain))
502502 then [IntegerEntry("ETH supplied", (supplyamount + tryGetInteger("ETH supplied")))]
503503 else throw("Strict value is not equal to itself.")
504504 }
505505
506506
507507
508508 @Callable(i)
509509 func BoostPoolAPYwWAVES_Main () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
510510 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
511511 else {
512512 let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
513513 then d8
514514 else wavesBalance(this).available
515515 if ((wavesBalanceBefore == wavesBalanceBefore))
516516 then {
517517 let withdrawamountMain = (PL_value(PL_Main, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
518518 let withdrawWM = invoke(PL_Main, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
519519 if ((withdrawWM == withdrawWM))
520520 then {
521521 let wavesBalanceAfter = wavesBalance(this).available
522522 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
523523 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
524524 let amountBoost = fraction(wavesDifference, 80, 100)
525525 let amountOwner = fraction(wavesDifference, 20, 100)
526526 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
527527 if ((boost == boost))
528528 then {
529529 let activated = if ((i.caller == this))
530530 then IntegerEntry("Activated blockheight", height)
531531 else IntegerEntry("Activated by anybody blockheight", height)
532532 [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]
533533 }
534534 else throw("Strict value is not equal to itself.")
535535 }
536536 else throw("Strict value is not equal to itself.")
537537 }
538538 else throw("Strict value is not equal to itself.")
539539 }
540540
541541
542542
543543 @Callable(i)
544544 func BoostPoolAPYwWAVES_Defi () = if (((getIntegerValue(this, "Activated blockheight") + (8 * 1440)) > height))
545545 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
546546 else {
547547 let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
548548 then d8
549549 else wavesBalance(this).available
550550 if ((wavesBalanceBefore == wavesBalanceBefore))
551551 then {
552552 let withdrawamountMain = (PL_value(PL_Defi, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
553553 let withdrawWM = invoke(PL_Defi, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
554554 if ((withdrawWM == withdrawWM))
555555 then {
556556 let wavesBalanceAfter = wavesBalance(this).available
557557 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
558558 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
559559 let amountBoost = fraction(wavesDifference, 80, 100)
560560 let amountOwner = fraction(wavesDifference, 20, 100)
561561 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
562562 if ((boost == boost))
563563 then {
564564 let activated = if ((i.caller == this))
565565 then IntegerEntry("Activated blockheight", height)
566566 else IntegerEntry("Activated by anybody blockheight", height)
567567 [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]
568568 }
569569 else throw("Strict value is not equal to itself.")
570570 }
571571 else throw("Strict value is not equal to itself.")
572572 }
573573 else throw("Strict value is not equal to itself.")
574574 }
575575
576576
577577
578578 @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)
580582 then throw(("Wait till blockheight:" + toString((getIntegerValue(this, "Activated blockheight") + (8 * 1440)))))
581583 else {
582584 let wavesBalanceBefore = if ((d8 > wavesBalance(this).available))
583585 then d8
584586 else wavesBalance(this).available
585587 if ((wavesBalanceBefore == wavesBalanceBefore))
586588 then {
587589 let withdrawamountMain = (PL_value(PL_Low, waves) - (getIntegerValue(this, "wavelets received for treasury") / 3))
588590 let withdrawWM = invoke(PL_Low, "withdraw", [toBase58String(waves), withdrawamountMain], nil)
589591 if ((withdrawWM == withdrawWM))
590592 then {
591593 let wavesBalanceAfter = wavesBalance(this).available
592594 let wavesDifference = (wavesBalanceAfter - wavesBalanceBefore)
593595 let wavesAmountBoost = fraction(wavesDifference, 80, 100)
594596 let amountBoost = fraction(wavesDifference, 80, 100)
595597 let amountOwner = fraction(wavesDifference, 20, 100)
596598 let boost = invoke(Address(poolboostSC), "addBoosting", [whirlpoolstring, 7], [AttachedPayment(unit, amountBoost)])
597599 if ((boost == boost))
598600 then {
599601 let activated = if ((i.caller == this))
600602 then IntegerEntry("Activated blockheight", height)
601603 else IntegerEntry("Activated by anybody blockheight", height)
602604 [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]
603605 }
604606 else throw("Strict value is not equal to itself.")
605607 }
606608 else throw("Strict value is not equal to itself.")
607609 }
608610 else throw("Strict value is not equal to itself.")
609611 }
610612
611613
612614
613615 @Callable(i)
614616 func stakeEAST () = if ((i.caller != this))
615617 then throw("access only by project owner")
616618 else {
617619 let supplyamount = assetBalance(this, east)
618620 let stakeEAST = if ((supplyamount > 0))
619621 then invoke(EAST_stake, "stake", nil, [AttachedPayment(east, supplyamount)])
620622 else unit
621623 if ((stakeEAST == stakeEAST))
622624 then [IntegerEntry("EAST staked", (supplyamount + tryGetInteger("EAST staked")))]
623625 else throw("Strict value is not equal to itself.")
624626 }
625627
626628
627629
628630 @Callable(i)
629631 func ChangeIntegerEntry (key,integer) = if ((i.caller != this))
630632 then throw("access only by project owner")
631633 else [IntegerEntry(key, integer)]
632634
633635

github/deemru/w8io/3ef1775 
66.67 ms