tx · FgEFR76dKziUVmoiVZAmv74D6YtFhGG2nrJJTfs8H1f

3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ:  -0.03700000 Waves

2023.05.23 14:06 [2590541] smart account 3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ > SELF 0.00000000 Waves

{ "type": 13, "id": "FgEFR76dKziUVmoiVZAmv74D6YtFhGG2nrJJTfs8H1f", "fee": 3700000, "feeAssetId": null, "timestamp": 1684840021137, "version": 2, "chainId": 84, "sender": "3NBEuUXKfGqe1ZKUfx8b8YsguJKYLhy2bTJ", "senderPublicKey": "2NgVCitn1k18yzwhrzdQXHDEygzSkjbXS4A1koTt14db", "proofs": [ "4V3HbUCdPaMH3rEpkg31xsqBsvYaHMYU19xjZWVMiE6Ri4CdvaZS31bHwGoMYPa3jLAJZJD6aSw6iESkZbn7m9CB" ], "script": "base64:BgIzCAISBQoDCAgBEgASAwoBARIAEgASABIDCgEBEgMKAQESABIAEgMKAQgSAwoBCBIDCgEIXwANa190b3RhbFN1cHBseQINa190b3RhbFN1cHBseQAPa19yZXdhcmRCYWxhbmNlAg9rX3Jld2FyZEJhbGFuY2UAD2tfbG9ja2VkQmFsYW5jZQIPa19sb2NrZWRCYWxhbmNlAA1rX2ZyZWVCYWxhbmNlAg1rX2ZyZWVCYWxhbmNlAA9rX2V4Y2Vzc0JhbGFuY2UCD2tfZXhjZXNzQmFsYW5jZQAMa192YXVsdEFzc2V0AgxrX3ZhdWx0QXNzZXQAFGtfdmF1bHRBc3NldERlY2ltYWxzAhRrX3ZhdWx0QXNzZXREZWNpbWFscwAUa19tYXhTcG90VXRpbGl6YXRpb24CFGtfbWF4U3BvdFV0aWxpemF0aW9uAAZrX3JhdGUCBmtfcmF0ZQAQa19sYXN0VXBkYXRlVGltZQIQa19sYXN0VXBkYXRlVGltZQAWa19yZXdhcmRQZXJUb2tlblN0b3JlZAIWa19yZXdhcmRQZXJUb2tlblN0b3JlZAAMa19yZXdhcmRSYXRlAgxrX3Jld2FyZFJhdGUADmtfcGVyaW9kRmluaXNoAg5rX3BlcmlvZEZpbmlzaAAUa191c2VyUmV3YXJkUGVyVG9rZW4CFGtfdXNlclJld2FyZFBlclRva2VuAAxrX3VzZXJSZXdhcmQCDGtfdXNlclJld2FyZAAJa19iYWxhbmNlAglrX2JhbGFuY2UADmtfYXZlcmFnZV9yYXRlAg5rX2F2ZXJhZ2VfcmF0ZQAQa193aXRoZHJhd19saW1pdAIQa193aXRoZHJhd19saW1pdAAUa19sYXN0X3dpdGhkcmF3X2RhdGUCFGtfbGFzdF93aXRoZHJhd19kYXRlABRrX3dpdGhkcmF3X2luX3BlcmlvZAIUa193aXRoZHJhd19pbl9wZXJpb2QADWtfaW5pdGlhbGl6ZWQCDWtfaW5pdGlhbGl6ZWQAFGtfY29vcmRpbmF0b3JBZGRyZXNzAhRrX2Nvb3JkaW5hdG9yQWRkcmVzcwAFa19hbW0CBWtfYW1tABJrX2dvdmVybmFuY2VfYXNzZXQCC2tfZ292X2Fzc2V0AA1rX3F1b3RlX2Fzc2V0Ag1rX3F1b3RlX2Fzc2V0AA9rX2FkbWluX2FkZHJlc3MCD2tfYWRtaW5fYWRkcmVzcwARa19tYW5hZ2VyX2FkZHJlc3MCEWtfbWFuYWdlcl9hZGRyZXNzAA5rX3Nwb3RfYWRkcmVzcwIOa19zcG90X2FkZHJlc3MAFGtfY29sbGF0ZXJhbF9hZGRyZXNzAhRrX2NvbGxhdGVyYWxfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AhtDb29yZGluYXRvciBhZGRyZXNzIGludmFsaWQBDGFkbWluQWRkcmVzcwAJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwIVQWRtaW4gYWRkcmVzcyBub3Qgc2V0AQtpc1doaXRlbGlzdAEIX2FkZHJlc3MJAQt2YWx1ZU9yRWxzZQIJAJsIAgkBC2Nvb3JkaW5hdG9yAAkBDnRvQ29tcG9zaXRlS2V5AgUFa19hbW0FCF9hZGRyZXNzBwEPZ292ZXJuYW5jZUFzc2V0AAkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgkBC2Nvb3JkaW5hdG9yAAUSa19nb3Zlcm5hbmNlX2Fzc2V0AhhHb3Zlcm5hbmNlIGFzc2V0IG5vdCBzZXQBCnF1b3RlQXNzZXQACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFDWtfcXVvdGVfYXNzZXQBDXZhdWx0QXNzZXRTdHIACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa192YXVsdEFzc2V0AhNWYXVsdCBhc3NldCBub3Qgc2V0AQp2YXVsdEFzc2V0AAQLX2Fzc2V0SWRTdHIJAQ12YXVsdEFzc2V0U3RyAAMJAAACBQtfYXNzZXRJZFN0cgIFV0FWRVMFBHVuaXQJANkEAQULX2Fzc2V0SWRTdHIBEnZhdWx0QXNzZXREZWNpbWFscwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBRRrX3ZhdWx0QXNzZXREZWNpbWFscwIcVmF1bHQgYXNzZXQgZGVjaW1hbHMgbm90IHNldAEObWFuYWdlckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIJAQtjb29yZGluYXRvcgAFEWtfbWFuYWdlcl9hZGRyZXNzAhdNYW5hZ2VyIGFkZHJlc3Mgbm90IHNldAIXTWFuYWdlciBhZGRyZXNzIGludmFsaWQADERFQ0lNQUxfVU5JVAkAaAIAAQkAaAIJAGgCCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoACgAKAAhEVVJBVElPTgkAaAIJAGgCCQBoAgAHADwAPAAYAApOT19BRERSRVNTAgAACU5PX1NUQUtFUgAAARFhc3NldEZyb21EZWNpbWFscwEHX2Ftb3VudAQNYXNzZXREZWNpbWFscwkBEnZhdWx0QXNzZXREZWNpbWFscwADCQAAAgUNYXNzZXREZWNpbWFscwAGCQBpAgUHX2Ftb3VudABkAwkAAAIFDWFzc2V0RGVjaW1hbHMACAUHX2Ftb3VudAkAAgECFkludmFsaWQgYXNzZXQgZGVjaW1hbHMBD2Fzc2V0VG9EZWNpbWFscwEHX2Ftb3VudAQNYXNzZXREZWNpbWFscwkBEnZhdWx0QXNzZXREZWNpbWFscwADCQAAAgUNYXNzZXREZWNpbWFscwAGCQBoAgUHX2Ftb3VudABkAwkAAAIFDWFzc2V0RGVjaW1hbHMACAUHX2Ftb3VudAkAAgECFkludmFsaWQgYXNzZXQgZGVjaW1hbHMBBGRpdmQCAl94Al95CQBuBAUCX3gFDERFQ0lNQUxfVU5JVAUCX3kFCEhBTEZFVkVOAQRtdWxkAgJfeAJfeQkAbgQFAl94BQJfeQUMREVDSU1BTF9VTklUBQhIQUxGRVZFTgEDYWJzAQJfeAMJAGYCBQJfeAAABQJfeAkBAS0BBQJfeAEEbWludgICX3gCX3kDCQBmAgUCX3gFAl95BQJfeQUCX3gAD1dJVEhEUkFXX1BFUklPRAkAaAIAgKMFAOgHABNXSVRIRFJBV19QRVJfUEVSSU9ECQEEZGl2ZAIJAGgCAAEFDERFQ0lNQUxfVU5JVAkAaAIABAUMREVDSU1BTF9VTklUAQNpbnQBAWsJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzBQFrCQCsAgICDW5vIHZhbHVlIGZvciAFAWsBBGludDABAWsJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawAAAQRpbnQxAQFrCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAWsFDERFQ0lNQUxfVU5JVAELdG90YWxTdXBwbHkACQEEaW50MAEFDWtfdG90YWxTdXBwbHkBBHJhdGUACQEEaW50MQEFBmtfcmF0ZQEJYmFsYW5jZU9mAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFCWtfYmFsYW5jZQUHX3N0YWtlcgELYXZlcmFnZVJhdGUBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUOa19hdmVyYWdlX3JhdGUFB19zdGFrZXIBDXdpdGhkcmF3TGltaXQBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUQa193aXRoZHJhd19saW1pdAUHX3N0YWtlcgERd2l0aGRyYXduSW5QZXJpb2QBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUUa193aXRoZHJhd19pbl9wZXJpb2QFB19zdGFrZXIBEWxhc3RXaXRoZHJhd25EYXRlAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFFGtfbGFzdF93aXRoZHJhd19kYXRlBQdfc3Rha2VyAQtmcmVlQmFsYW5jZQAJAQRpbnQwAQUNa19mcmVlQmFsYW5jZQENbG9ja2VkQmFsYW5jZQAJAQRpbnQwAQUPa19sb2NrZWRCYWxhbmNlAQ1leGNlc3NCYWxhbmNlAAkBBGludDABBQ9rX2V4Y2Vzc0JhbGFuY2UBFHJld2FyZFBlclRva2VuU3RvcmVkAAkBBGludDABBRZrX3Jld2FyZFBlclRva2VuU3RvcmVkAQ5sYXN0VXBkYXRlVGltZQAJAQRpbnQwAQUQa19sYXN0VXBkYXRlVGltZQEKcmV3YXJkUmF0ZQAJAQRpbnQwAQUMa19yZXdhcmRSYXRlAQxwZXJpb2RGaW5pc2gACQEEaW50MAEFDmtfcGVyaW9kRmluaXNoAQ1yZXdhcmRCYWxhbmNlAAkBBGludDABBQ9rX3Jld2FyZEJhbGFuY2UBB3Jld2FyZHMBB19zdGFrZXIJAQRpbnQwAQkBDnRvQ29tcG9zaXRlS2V5AgUMa191c2VyUmV3YXJkBQdfc3Rha2VyARZ1c2VyUmV3YXJkUGVyVG9rZW5QYWlkAQdfc3Rha2VyCQEEaW50MAEJAQ50b0NvbXBvc2l0ZUtleQIFFGtfdXNlclJld2FyZFBlclRva2VuBQdfc3Rha2VyARJtYXhTcG90VXRpbGl6YXRpb24ACQEEaW50MAEFFGtfbWF4U3BvdFV0aWxpemF0aW9uAQtpbml0aWFsaXplZAAJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUNa19pbml0aWFsaXplZAcBEGN1cnJlbnRUaW1lc3RhbXAACAUJbGFzdEJsb2NrCXRpbWVzdGFtcAETY3VycmVudFRpbWVzdGFtcFNlYwAJAGkCCQEQY3VycmVudFRpbWVzdGFtcAAA6AcBFGdldFdpdGhkcmF3TGltaXRMZWZ0AQdfc3Rha2VyBAtjdXJyZW50RGF0ZQkBEGN1cnJlbnRUaW1lc3RhbXAABBBsYXN0V2l0aGRyYXdEYXRlCQERbGFzdFdpdGhkcmF3bkRhdGUBBQdfc3Rha2VyBAskdDA2MjY3NjU4OAMJAGYCCQBlAgULY3VycmVudERhdGUFEGxhc3RXaXRoZHJhd0RhdGUFD1dJVEhEUkFXX1BFUklPRAkAlQoDBQtjdXJyZW50RGF0ZQkBDXdpdGhkcmF3TGltaXQBBQdfc3Rha2VyAAAJAJUKAwUQbGFzdFdpdGhkcmF3RGF0ZQkAZQIJAQ13aXRoZHJhd0xpbWl0AQUHX3N0YWtlcgkBEXdpdGhkcmF3bkluUGVyaW9kAQUHX3N0YWtlcgkBEXdpdGhkcmF3bkluUGVyaW9kAQUHX3N0YWtlcgQUbmV3TGFzdFdpdGhkcmF3bkRhdGUIBQskdDA2MjY3NjU4OAJfMQQRd2l0aGRyYXdMaW1pdExlZnQIBQskdDA2MjY3NjU4OAJfMgQYYWxyZWFkeVdpdGhkcmF3bkluUGVyaW9kCAULJHQwNjI2NzY1ODgCXzMJAJUKAwUUbmV3TGFzdFdpdGhkcmF3bkRhdGUFEXdpdGhkcmF3TGltaXRMZWZ0BRhhbHJlYWR5V2l0aGRyYXduSW5QZXJpb2QBDmNvbXB1dGVOZXdSYXRlARNfYW1vdW50T2ZRdW90ZUFzc2V0BAduZXdSYXRlAwkAZgIJAQt0b3RhbFN1cHBseQAAAAkBBGRpdmQCCQBkAgkBC2ZyZWVCYWxhbmNlAAUTX2Ftb3VudE9mUXVvdGVBc3NldAkBC3RvdGFsU3VwcGx5AAUMREVDSU1BTF9VTklUBQduZXdSYXRlARhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUACQEEbWludgIJARNjdXJyZW50VGltZXN0YW1wU2VjAAkBDHBlcmlvZEZpbmlzaAABDnJld2FyZFBlclRva2VuAQ1fYmFsYW5jZURlbHRhAwkAAAIJAGQCCQELdG90YWxTdXBwbHkABQ1fYmFsYW5jZURlbHRhAAAJARRyZXdhcmRQZXJUb2tlblN0b3JlZAAEDHRpbWVJbnRlcnZhbAkAZQIJARhsYXN0VGltZVJld2FyZEFwcGxpY2FibGUACQEObGFzdFVwZGF0ZVRpbWUABBJhY3R1YWxUaW1lSW50ZXJ2YWwDCQBmAgAABQx0aW1lSW50ZXJ2YWwAAAUMdGltZUludGVydmFsBARkaWZmCQEEZGl2ZAIJAGgCCQEKcmV3YXJkUmF0ZQAFEmFjdHVhbFRpbWVJbnRlcnZhbAkAZAIJAQt0b3RhbFN1cHBseQAFDV9iYWxhbmNlRGVsdGEJAGQCCQEUcmV3YXJkUGVyVG9rZW5TdG9yZWQABQRkaWZmAQZlYXJuZWQCB19zdGFrZXINX2JhbGFuY2VEZWx0YQQLcmV3YXJkRGVsdGEJAGUCCQEOcmV3YXJkUGVyVG9rZW4BBQ1fYmFsYW5jZURlbHRhCQEWdXNlclJld2FyZFBlclRva2VuUGFpZAEFB19zdGFrZXIJAGQCCQEEbXVsZAIJAGQCCQEJYmFsYW5jZU9mAQUHX3N0YWtlcgUNX2JhbGFuY2VEZWx0YQULcmV3YXJkRGVsdGEJAQdyZXdhcmRzAQUHX3N0YWtlcgEMdXBkYXRlUmV3YXJkAgdfc3Rha2VyDV9iYWxhbmNlRGVsdGEEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEOcmV3YXJkUGVyVG9rZW4BBQ1fYmFsYW5jZURlbHRhBBFuZXdMYXN0VXBkYXRlVGltZQkBE2N1cnJlbnRUaW1lc3RhbXBTZWMABAskdDA3ODEwODAwMgMJAQIhPQIFB19zdGFrZXICAAkAlAoCCQEGZWFybmVkAgUHX3N0YWtlcgUNX2JhbGFuY2VEZWx0YQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAJQKAgAAAAAEDHN0YWtlckVhcm5lZAgFCyR0MDc4MTA4MDAyAl8xBBhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQskdDA3ODEwODAwMgJfMgkAlgoEBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAURbmV3TGFzdFVwZGF0ZVRpbWUFDHN0YWtlckVhcm5lZAUYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkARF1cGRhdGVVc2VyQmFsYW5jZQIFX3VzZXIHX2NoYW5nZQMJAGcCCQBkAgkBCWJhbGFuY2VPZgEFBV91c2VyBQdfY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFCWtfYmFsYW5jZQUFX3VzZXIJAGQCCQEJYmFsYW5jZU9mAQUFX3VzZXIFB19jaGFuZ2UFA25pbAkAAgEJAKwCAgkArAICCQCsAgICLVZhdWx0OiBjYW4gbm90IHVwZGF0ZSB1c2VyIGJhbGFuY2UuIEJhbGFuY2U6IAkApAMBCQEJYmFsYW5jZU9mAQUFX3VzZXICCSBjaGFuZ2U6IAkApAMBBQdfY2hhbmdlARRzZXRVc2VyV2l0aGRyYXdMaW1pdAIFX3VzZXIFX3JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEGtfd2l0aGRyYXdfbGltaXQFBV91c2VyBQVfcmF0ZQUDbmlsARJzZXRVc2VyQXZlcmFnZVJhdGUCBV91c2VyBV9yYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX2F2ZXJhZ2VfcmF0ZQUFX3VzZXIFBV9yYXRlBQNuaWwBEXVwZGF0ZUZyZWVCYWxhbmNlAQdfY2hhbmdlBAdiYWxhbmNlCQELZnJlZUJhbGFuY2UAAwkAZwIJAGQCBQdiYWxhbmNlBQdfY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfZnJlZUJhbGFuY2UJAGQCBQdiYWxhbmNlBQdfY2hhbmdlBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICAi1WYXVsdDogY2FuIG5vdCB1cGRhdGUgZnJlZSBiYWxhbmNlLiBCYWxhbmNlOiAJAKQDAQUHYmFsYW5jZQIJIGNoYW5nZTogCQCkAwEFB19jaGFuZ2UBE3VwZGF0ZUxvY2tlZEJhbGFuY2UBB19jaGFuZ2UEB2JhbGFuY2UJAQ1sb2NrZWRCYWxhbmNlAAMJAGcCCQBkAgUHYmFsYW5jZQUHX2NoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2xvY2tlZEJhbGFuY2UJAGQCBQdiYWxhbmNlBQdfY2hhbmdlBQNuaWwJAAIBCQCsAgIJAKwCAgkArAICAi9WYXVsdDogY2FuIG5vdCB1cGRhdGUgbG9ja2VkIGJhbGFuY2UuIEJhbGFuY2U6IAkApAMBBQdiYWxhbmNlAgkgY2hhbmdlOiAJAKQDAQUHX2NoYW5nZQETdXBkYXRlRXhjZXNzQmFsYW5jZQEHX2NoYW5nZQQMbmV3SW1iYWxhbmNlCQBkAgkBDWV4Y2Vzc0JhbGFuY2UABQdfY2hhbmdlBA91dGlsaXphdGlvblJhdGUJAQRkaXZkAgkBA2FicwEFDG5ld0ltYmFsYW5jZQkBC2ZyZWVCYWxhbmNlAAMJAGYCCQESbWF4U3BvdFV0aWxpemF0aW9uAAUPdXRpbGl6YXRpb25SYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9rX2V4Y2Vzc0JhbGFuY2UFDG5ld0ltYmFsYW5jZQUDbmlsCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAi9WYXVsdDogY2FuIG5vdCB1cGRhdGUgZXhjZXNzIGJhbGFuY2UuIEJhbGFuY2U6IAkApAMBCQENZXhjZXNzQmFsYW5jZQACCSBjaGFuZ2U6IAkApAMBBQdfY2hhbmdlAhMgdXRpbGl6YXRpb24gcmF0ZTogCQCkAwEFD3V0aWxpemF0aW9uUmF0ZQIXIG1heCB1dGlsaXphdGlvbiByYXRlOiAJAKQDAQkBEm1heFNwb3RVdGlsaXphdGlvbgABEXVwZGF0ZVRvdGFsU3VwcGx5AQdfY2hhbmdlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3RvdGFsU3VwcGx5CQBkAgkBC3RvdGFsU3VwcGx5AAUHX2NoYW5nZQUDbmlsAQp1cGRhdGVSYXRlAQVfcmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUGa19yYXRlBQVfcmF0ZQUDbmlsARVzZXRVc2VyV2l0aGRyYXdQYXJhbXMDBV91c2VyEV9sYXN0V2l0aGRyYXdEYXRlCl93aXRoZHJhd24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFGtfbGFzdF93aXRoZHJhd19kYXRlBQVfdXNlcgURX2xhc3RXaXRoZHJhd0RhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFFGtfd2l0aGRyYXdfaW5fcGVyaW9kBQVfdXNlcgUKX3dpdGhkcmF3bgUDbmlsARN1cGRhdGVSZXdhcmRCYWxhbmNlAQZfZGVsdGEJAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfcmV3YXJkQmFsYW5jZQkAZAIJAQ1yZXdhcmRCYWxhbmNlAAUGX2RlbHRhBQNuaWwBEHVwZGF0ZVJld2FyZFJhdGUBC19yZXdhcmRSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQxrX3Jld2FyZFJhdGUFC19yZXdhcmRSYXRlBQNuaWwBCnVwZGF0ZVRpbWUCD19sYXN0VXBkYXRlVGltZQ1fcGVyaW9kRmluaXNoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRBrX2xhc3RVcGRhdGVUaW1lBQ9fbGFzdFVwZGF0ZVRpbWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfcGVyaW9kRmluaXNoBQ1fcGVyaW9kRmluaXNoBQNuaWwBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkARVfcmV3YXJkUGVyVG9rZW5TdG9yZWQJAMwIAgkBDEludGVnZXJFbnRyeQIFFmtfcmV3YXJkUGVyVG9rZW5TdG9yZWQFFV9yZXdhcmRQZXJUb2tlblN0b3JlZAUDbmlsARF1cGRhdGVVc2VyUmV3YXJkcwMHX3N0YWtlcgdfcmV3YXJkE191c2VyUmV3YXJkUGVyVG9rZW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDGtfdXNlclJld2FyZAUHX3N0YWtlcgUHX3Jld2FyZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUUa191c2VyUmV3YXJkUGVyVG9rZW4FB19zdGFrZXIFE191c2VyUmV3YXJkUGVyVG9rZW4FA25pbA0BaQEKaW5pdGlhbGl6ZQMMX2Nvb3JkaW5hdG9yC192YXVsdEFzc2V0E19tYXhTcG90VXRpbGl6YXRpb24DAwMDCQELaW5pdGlhbGl6ZWQABgkBAiE9AggFAWkGY2FsbGVyBQR0aGlzBgkAZgIAAAUTX21heFNwb3RVdGlsaXphdGlvbgYJAGYCBRNfbWF4U3BvdFV0aWxpemF0aW9uBQxERUNJTUFMX1VOSVQJAAIBAhRVbmFibGUgdG8gaW5pdGlhbGl6ZQQNYXNzZXREZWNpbWFscwMJAAACBQtfdmF1bHRBc3NldAIFV0FWRVMACAQEaW5mbwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQULX3ZhdWx0QXNzZXQJAKwCAgISSW52YWxpZCB0b2tlbiBpZDogBQtfdmF1bHRBc3NldAgFBGluZm8IZGVjaW1hbHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MJAKUIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFDF9jb29yZGluYXRvcgIbSW52YWxpZCBjb29yZGluYXRvciBhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtfdmF1bHRBc3NldAULX3ZhdWx0QXNzZXQJAMwIAgkBDEludGVnZXJFbnRyeQIFFGtfdmF1bHRBc3NldERlY2ltYWxzBQ1hc3NldERlY2ltYWxzCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRRrX21heFNwb3RVdGlsaXphdGlvbgUTX21heFNwb3RVdGlsaXphdGlvbgkAzAgCCQEMQm9vbGVhbkVudHJ5AgUNa19pbml0aWFsaXplZAYFA25pbAFpAQVzdGFrZQAEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyBAdfYW1vdW50CQEPYXNzZXRUb0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnZhdWx0QXNzZXQABgkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIVSW52YWxpZCBjYWxsIHRvIHN0YWtlBA0kdDAxMjUzNzEyNzY2CQEMdXBkYXRlUmV3YXJkAgUHX3N0YWtlcgAABBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgFDSR0MDEyNTM3MTI3NjYCXzEEEW5ld0xhc3RVcGRhdGVUaW1lCAUNJHQwMTI1MzcxMjc2NgJfMgQMc3Rha2VyRWFybmVkCAUNJHQwMTI1MzcxMjc2NgJfMwQYc3Rha2VyUmV3YXJkUGVyVG9rZW5QYWlkCAUNJHQwMTI1MzcxMjc2NgJfNAQLY3VycmVudFJhdGUJAQRyYXRlAAQPcHJldkF2ZXJhZ2VSYXRlCQELYXZlcmFnZVJhdGUBBQdfc3Rha2VyBAd2QW1vdW50CQEEZGl2ZAIFB19hbW91bnQFC2N1cnJlbnRSYXRlBA5uZXdBdmVyYWdlUmF0ZQkBBGRpdmQCCQBkAgkBBG11bGQCBQd2QW1vdW50BQtjdXJyZW50UmF0ZQkBBG11bGQCCQEJYmFsYW5jZU9mAQUHX3N0YWtlcgUPcHJldkF2ZXJhZ2VSYXRlCQBkAgUHdkFtb3VudAkBCWJhbGFuY2VPZgEFB19zdGFrZXIED25ld1RvdGFsQmFsYW5jZQkAZAIFB3ZBbW91bnQJAQliYWxhbmNlT2YBBQdfc3Rha2VyBBBuZXdXaXRoZHJhd0xpbWl0CQEEbXVsZAIFD25ld1RvdGFsQmFsYW5jZQUTV0lUSERSQVdfUEVSX1BFUklPRAQFc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKdmF1bHRBc3NldAAJARFhc3NldEZyb21EZWNpbWFscwEFB19hbW91bnQFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBEXVwZGF0ZVVzZXJSZXdhcmRzAwUHX3N0YWtlcgUMc3Rha2VyRWFybmVkBRhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEKdXBkYXRlVGltZQIFEW5ld0xhc3RVcGRhdGVUaW1lCQEMcGVyaW9kRmluaXNoAAkBEXVwZGF0ZUZyZWVCYWxhbmNlAQUHX2Ftb3VudAkBEXVwZGF0ZVVzZXJCYWxhbmNlAgUHX3N0YWtlcgUHdkFtb3VudAkBEnNldFVzZXJBdmVyYWdlUmF0ZQIFB19zdGFrZXIFDm5ld0F2ZXJhZ2VSYXRlCQEUc2V0VXNlcldpdGhkcmF3TGltaXQCBQdfc3Rha2VyBRBuZXdXaXRoZHJhd0xpbWl0CQERdXBkYXRlVG90YWxTdXBwbHkBBQd2QW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBB3VuU3Rha2UBB19hbW91bnQEB19zdGFrZXIJAKUIAQgFAWkGY2FsbGVyBBJhbW91bnRPZlF1b3RlQXNzZXQJAQ9hc3NldFRvRGVjaW1hbHMBBQdfYW1vdW50AwMDCQECIT0CCAUBaQhwYXltZW50cwUDbmlsBgkAZwIAAAUSYW1vdW50T2ZRdW90ZUFzc2V0BgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIXSW52YWxpZCBjYWxsIHRvIHVuU3Rha2UEDSR0MDE0Mjc0MTQ0OTAJAQx1cGRhdGVSZXdhcmQCBQdfc3Rha2VyAAAEF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCAUNJHQwMTQyNzQxNDQ5MAJfMQQRbmV3TGFzdFVwZGF0ZVRpbWUIBQ0kdDAxNDI3NDE0NDkwAl8yBAxzdGFrZXJFYXJuZWQIBQ0kdDAxNDI3NDE0NDkwAl8zBBhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQIBQ0kdDAxNDI3NDE0NDkwAl80BA0kdDAxNDQ5NzE0NjY0CQEUZ2V0V2l0aGRyYXdMaW1pdExlZnQBBQdfc3Rha2VyBBRuZXdMYXN0V2l0aGRyYXduRGF0ZQgFDSR0MDE0NDk3MTQ2NjQCXzEEEXdpdGhkcmF3TGltaXRMZWZ0CAUNJHQwMTQ0OTcxNDY2NAJfMgQYYWxyZWFkeVdpdGhkcmF3bkluUGVyaW9kCAUNJHQwMTQ0OTcxNDY2NAJfMwQHdkFtb3VudAkBBGRpdmQCBRJhbW91bnRPZlF1b3RlQXNzZXQJAQRyYXRlAAMJAGYCBQd2QW1vdW50BRF3aXRoZHJhd0xpbWl0TGVmdAkAAgECLEludmFsaWQgY2FsbCB0byB1blN0YWtlOiB3aXRoZHJhdyBvdmVyIGxpbWl0BBRuZXdXaXRoZHJhd25JblBlcmlvZAkAZAIFGGFscmVhZHlXaXRoZHJhd25JblBlcmlvZAUHdkFtb3VudAMJAGYCBRJhbW91bnRPZlF1b3RlQXNzZXQJAQtmcmVlQmFsYW5jZQAJAAIBAihJbnZhbGlkIGNhbGwgdG8gdW5TdGFrZTogYmFsYW5jZSB0b28gbG93BAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACCHdpdGhkcmF3CQDMCAIJAQ12YXVsdEFzc2V0U3RyAAkAzAgCCQERYXNzZXRGcm9tRGVjaW1hbHMBBRJhbW91bnRPZlF1b3RlQXNzZXQFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBEXVwZGF0ZVVzZXJSZXdhcmRzAwUHX3N0YWtlcgUMc3Rha2VyRWFybmVkBRhzdGFrZXJSZXdhcmRQZXJUb2tlblBhaWQJARp1cGRhdGVSZXdhcmRQZXJUb2tlblN0b3JlZAEFF25ld1Jld2FyZFBlclRva2VuU3RvcmVkCQEKdXBkYXRlVGltZQIFEW5ld0xhc3RVcGRhdGVUaW1lCQEMcGVyaW9kRmluaXNoAAkBEXVwZGF0ZUZyZWVCYWxhbmNlAQkBAS0BBRJhbW91bnRPZlF1b3RlQXNzZXQJARF1cGRhdGVVc2VyQmFsYW5jZQIFB19zdGFrZXIJAQEtAQUHdkFtb3VudAkBEXVwZGF0ZVRvdGFsU3VwcGx5AQkBAS0BBQd2QW1vdW50CQEVc2V0VXNlcldpdGhkcmF3UGFyYW1zAwUHX3N0YWtlcgUUbmV3TGFzdFdpdGhkcmF3bkRhdGUFFG5ld1dpdGhkcmF3bkluUGVyaW9kCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQEKdmF1bHRBc3NldAAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ93aXRoZHJhd1Jld2FyZHMABAdfc3Rha2VyCQClCAEIBQFpBmNhbGxlcgQNJHQwMTYxODExNjMyNgkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAQXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQIBQ0kdDAxNjE4MTE2MzI2Al8xBBFuZXdMYXN0VXBkYXRlVGltZQgFDSR0MDE2MTgxMTYzMjYCXzIEDHN0YWtlckVhcm5lZAgFDSR0MDE2MTgxMTYzMjYCXzMEGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAgFDSR0MDE2MTgxMTYzMjYCXzQDAwkAZwIAAAUMc3Rha2VyRWFybmVkBgkBASEBCQELaW5pdGlhbGl6ZWQACQACAQIQTm8gcmV3YXJkOiBWYXVsdAkAzggCCQDOCAIJAM4IAgkAzggCCQERdXBkYXRlVXNlclJld2FyZHMDBQdfc3Rha2VyAAAFGHN0YWtlclJld2FyZFBlclRva2VuUGFpZAkBGnVwZGF0ZVJld2FyZFBlclRva2VuU3RvcmVkAQUXbmV3UmV3YXJkUGVyVG9rZW5TdG9yZWQJAQp1cGRhdGVUaW1lAgURbmV3TGFzdFVwZGF0ZVRpbWUJAQxwZXJpb2RGaW5pc2gACQETdXBkYXRlUmV3YXJkQmFsYW5jZQEJAQEtAQUMc3Rha2VyRWFybmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUMc3Rha2VyRWFybmVkCQEPZ292ZXJuYW5jZUFzc2V0AAUDbmlsAWkBB2FkZEZyZWUABAdfYW1vdW50CQEPYXNzZXRUb0RlY2ltYWxzAQgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQDAwMDCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQJAQp2YXVsdEFzc2V0AAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQMJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyBgkAAAIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIGFkZEZyZWUgcGFyYW1zBAduZXdSYXRlCQEOY29tcHV0ZU5ld1JhdGUBBQdfYW1vdW50BAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQp2YXVsdEFzc2V0AAkBEWFzc2V0RnJvbURlY2ltYWxzAQUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQkAzggCCQERdXBkYXRlRnJlZUJhbGFuY2UBBQdfYW1vdW50CQEKdXBkYXRlUmF0ZQEFB25ld1JhdGUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJYWRkTG9ja2VkAAQHX2Ftb3VudAkBD2Fzc2V0VG9EZWNpbWFscwEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKdmF1bHRBc3NldAAGCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEBIQEDCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgYJAAACCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIYSW52YWxpZCBhZGRMb2NrZWQgcGFyYW1zBAd1bnN0YWtlCQD8BwQJAQ5tYW5hZ2VyQWRkcmVzcwACB2RlcG9zaXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnZhdWx0QXNzZXQACQERYXNzZXRGcm9tRGVjaW1hbHMBBQdfYW1vdW50BQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkBE3VwZGF0ZUxvY2tlZEJhbGFuY2UBBQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAEHX2Ftb3VudAMDCQEBIQEJAQtpbml0aWFsaXplZAAGAwkBASEBCQELaXNXaGl0ZWxpc3QBCQClCAEIBQFpBmNhbGxlcgkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAcJAAIBAiRJbnZhbGlkIGV4Y2hhbmdlRnJlZUFuZExvY2tlZCBwYXJhbXMEEmFtb3VudE9mUXVvdGVBc3NldAkBD2Fzc2V0VG9EZWNpbWFscwEFB19hbW91bnQEB25ld1JhdGUJAQ5jb21wdXRlTmV3UmF0ZQEJAQEtAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQDOCAIJAM4IAgkBE3VwZGF0ZUxvY2tlZEJhbGFuY2UBBRJhbW91bnRPZlF1b3RlQXNzZXQJARF1cGRhdGVGcmVlQmFsYW5jZQEJAQEtAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQEKdXBkYXRlUmF0ZQEFB25ld1JhdGUBaQEOd2l0aGRyYXdMb2NrZWQBB19hbW91bnQDAwMJAQEhAQkBC2luaXRpYWxpemVkAAYJAGcCAAAFB19hbW91bnQGCQEBIQEJAQtpc1doaXRlbGlzdAEJAKUIAQgFAWkGY2FsbGVyCQACAQIdSW52YWxpZCB3aXRoZHJhd0xvY2tlZCBwYXJhbXMEEmFtb3VudE9mUXVvdGVBc3NldAkBD2Fzc2V0VG9EZWNpbWFscwEFB19hbW91bnQEB3Vuc3Rha2UJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgkBDXZhdWx0QXNzZXRTdHIACQDMCAIJARFhc3NldEZyb21EZWNpbWFscwEFEmFtb3VudE9mUXVvdGVBc3NldAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQETdXBkYXRlTG9ja2VkQmFsYW5jZQEJAQEtAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkBEWFzc2V0RnJvbURlY2ltYWxzAQUSYW1vdW50T2ZRdW90ZUFzc2V0CQEKdmF1bHRBc3NldAAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQphZGRSZXdhcmRzAAMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEPZ292ZXJuYW5jZUFzc2V0AAYJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQEhAQkBC2luaXRpYWxpemVkAAkAAgECGUludmFsaWQgYWRkUmV3YXJkcyBwYXJhbXMEB19yZXdhcmQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BBduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAgJAQx1cGRhdGVSZXdhcmQCBQpOT19BRERSRVNTBQlOT19TVEFLRVICXzEECXRpbWVzdGFtcAkBE2N1cnJlbnRUaW1lc3RhbXBTZWMABA1uZXdSZXdhcmRSYXRlAwkAZgIFCXRpbWVzdGFtcAkBDHBlcmlvZEZpbmlzaAAJAGkCBQdfcmV3YXJkBQhEVVJBVElPTgQNcmVtYWluaW5nVGltZQkAZQIJAQxwZXJpb2RGaW5pc2gABQl0aW1lc3RhbXAECGxlZnRvdmVyCQBoAgkBCnJld2FyZFJhdGUABQ1yZW1haW5pbmdUaW1lCQBpAgkAZAIFB19yZXdhcmQFCGxlZnRvdmVyBQhEVVJBVElPTgkAzggCCQDOCAIJAM4IAgkBEHVwZGF0ZVJld2FyZFJhdGUBBQ1uZXdSZXdhcmRSYXRlCQEadXBkYXRlUmV3YXJkUGVyVG9rZW5TdG9yZWQBBRduZXdSZXdhcmRQZXJUb2tlblN0b3JlZAkBE3VwZGF0ZVJld2FyZEJhbGFuY2UBBQdfcmV3YXJkCQEKdXBkYXRlVGltZQIFCXRpbWVzdGFtcAkAZAIFCXRpbWVzdGFtcAUIRFVSQVRJT04BaQEKYWNrUmV3YXJkcwAECnByb2ZpdFJlc3AJAPwHBAkBDm1hbmFnZXJBZGRyZXNzAAILY2xhaW1Qcm9maXQJAMwIAgkBDXZhdWx0QXNzZXRTdHIABQNuaWwFA25pbAMJAAACBQpwcm9maXRSZXNwBQpwcm9maXRSZXNwBAZwcm9maXQEByRtYXRjaDAFCnByb2ZpdFJlc3ADCQABAgUHJG1hdGNoMAIDSW50BAFwBQckbWF0Y2gwCQEPYXNzZXRUb0RlY2ltYWxzAQUBcAkAAgECHEludmFsaWQgY2xhaW1Qcm9maXQgcmVzcG9uc2UEBnJlc3VsdAMJAGYCBQZwcm9maXQAAAQHbmV3UmF0ZQkBDmNvbXB1dGVOZXdSYXRlAQUGcHJvZml0BAVzdGFrZQkA/AcECQEObWFuYWdlckFkZHJlc3MAAgdkZXBvc2l0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQp2YXVsdEFzc2V0AAkBEWFzc2V0RnJvbURlY2ltYWxzAQUGcHJvZml0BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlCQDOCAIJARF1cGRhdGVGcmVlQmFsYW5jZQEFBnByb2ZpdAkBCnVwZGF0ZVJhdGUBBQduZXdSYXRlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUGcmVzdWx0BQZyZXN1bHQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQt2aWV3X3Jld2FyZAEHX3N0YWtlcgQHYmFsYW5jZQkBCWJhbGFuY2VPZgEFB19zdGFrZXIED2RlcG9zaXRlZEFtb3VudAkBBG11bGQCCQELYXZlcmFnZVJhdGUBBQdfc3Rha2VyBQdiYWxhbmNlBA1jdXJyZW50QW1vdW50CQEEbXVsZAIJAQRyYXRlAAUHYmFsYW5jZQQLZWFybmVkUXVvdGUJAGUCBQ1jdXJyZW50QW1vdW50BQ9kZXBvc2l0ZWRBbW91bnQJAAIBCQCkAwEFC2Vhcm5lZFF1b3RlAWkBEnZpZXdfc3Rha2luZ1Jld2FyZAEHX3N0YWtlcgQMc3Rha2VyRWFybmVkCAkBDHVwZGF0ZVJld2FyZAIFB19zdGFrZXIAAAJfMwkAAgEJAKQDAQkBEWFzc2V0RnJvbURlY2ltYWxzAQUMc3Rha2VyRWFybmVkAWkBEnZpZXdfd2l0aGRyYXdMaW1pdAEHX3N0YWtlcgQRd2l0aGRyYXdMaW1pdExlZnQICQEUZ2V0V2l0aGRyYXdMaW1pdExlZnQBBQdfc3Rha2VyAl8yBAxsaW1pdEluQXNzZXQJARFhc3NldEZyb21EZWNpbWFscwEJAQRtdWxkAgURd2l0aGRyYXdMaW1pdExlZnQJAQRyYXRlAAkAAgEJAKQDAQUMbGltaXRJbkFzc2V0AQJ0eAEGdmVyaWZ5AAQOY29vcmRpbmF0b3JTdHIJAJ0IAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MDCQEJaXNEZWZpbmVkAQUOY29vcmRpbmF0b3JTdHIEBWFkbWluCQCdCAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFDmNvb3JkaW5hdG9yU3RyBQ9rX2FkbWluX2FkZHJlc3MDCQEJaXNEZWZpbmVkAQUFYWRtaW4JAQt2YWx1ZU9yRWxzZQIJAJsIAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFYWRtaW4JAKwCAgkArAICCQCsAgICB3N0YXR1c18JAKUIAQUEdGhpcwIBXwkA2AQBCAUCdHgCaWQHCQACAQIudW5hYmxlIHRvIHZlcmlmeTogYWRtaW4gbm90IHNldCBpbiBjb29yZGluYXRvcgkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQ8opKU=", "height": 2590541, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 2QoWuWcA2umuD9Yu51yKg4ebM7PwtNseQGWN3tSmTdMY Next: 4Q8aTwvsuvBCZwaVPcpBpxNRzQVB8Ga495FPtbZjN6o7 Diff:
OldNewDifferences
99
1010 let d = "k_freeBalance"
1111
12-let e = "k_rate"
12+let e = "k_excessBalance"
1313
14-let f = "k_lastUpdateTime"
14+let f = "k_vaultAsset"
1515
16-let g = "k_rewardPerTokenStored"
16+let g = "k_vaultAssetDecimals"
1717
18-let h = "k_rewardRate"
18+let h = "k_maxSpotUtilization"
1919
20-let i = "k_periodFinish"
20+let i = "k_rate"
2121
22-let j = "k_userRewardPerToken"
22+let j = "k_lastUpdateTime"
2323
24-let k = "k_userReward"
24+let k = "k_rewardPerTokenStored"
2525
26-let l = "k_balance"
26+let l = "k_rewardRate"
2727
28-let m = "k_average_rate"
28+let m = "k_periodFinish"
2929
30-let n = "k_withdraw_limit"
30+let n = "k_userRewardPerToken"
3131
32-let o = "k_last_withdraw_date"
32+let o = "k_userReward"
3333
34-let p = "k_withdraw_in_period"
34+let p = "k_balance"
3535
36-let q = "k_initialized"
36+let q = "k_average_rate"
3737
38-let r = "k_coordinatorAddress"
38+let r = "k_withdraw_limit"
3939
40-let s = "k_amm"
40+let s = "k_last_withdraw_date"
4141
42-let t = "k_gov_asset"
42+let t = "k_withdraw_in_period"
4343
44-let u = "k_quote_asset"
44+let u = "k_initialized"
4545
46-let v = "k_admin_address"
46+let v = "k_coordinatorAddress"
4747
48-let w = "k_manager_address"
48+let w = "k_amm"
4949
50-let x = "k_collateral_address"
50+let x = "k_gov_asset"
5151
52-func y (z,A) = ((z + "_") + A)
52+let y = "k_quote_asset"
53+
54+let z = "k_admin_address"
55+
56+let A = "k_manager_address"
57+
58+let B = "k_spot_address"
59+
60+let C = "k_collateral_address"
61+
62+func D (E,F) = ((E + "_") + F)
5363
5464
55-func B () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, r), "Coordinator not set")), "Coordinator address invalid")
65+func G () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, v), "Coordinator not set")), "Coordinator address invalid")
5666
5767
58-func C () = addressFromString(valueOrErrorMessage(getString(B(), v), "Admin address not set"))
68+func H () = addressFromString(valueOrErrorMessage(getString(G(), z), "Admin address not set"))
5969
6070
61-func D (A) = valueOrElse(getBoolean(B(), y(s, A)), false)
71+func I (F) = valueOrElse(getBoolean(G(), D(w, F)), false)
6272
6373
64-func E () = fromBase58String(valueOrErrorMessage(getString(B(), t), "Governance asset not set"))
74+func J () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
6575
6676
67-func F () = fromBase58String(valueOrErrorMessage(getString(B(), u), "Quote asset not set"))
77+func K () = fromBase58String(getStringValue(G(), y))
6878
6979
70-func G () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(B(), w), "Manager address not set")), "Manager address invalid")
80+func L () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
7181
7282
73-let H = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
74-
75-let I = (((7 * 60) * 60) * 24)
76-
77-let J = ""
78-
79-let K = 0
80-
81-func L (M) = (M / 100)
82-
83-
84-func N (M) = (M * 100)
85-
86-
87-func O (P,Q) = fraction(P, H, Q, HALFEVEN)
88-
89-
90-func R (P,Q) = fraction(P, Q, H, HALFEVEN)
91-
92-
93-func S (P) = if ((P > 0))
94- then P
95- else -(P)
96-
97-
98-func T (P,Q) = if ((P > Q))
99- then Q
100- else P
101-
102-
103-let U = (86400 * 1000)
104-
105-let V = O((1 * H), (4 * H))
106-
107-func W (X) = valueOrErrorMessage(getInteger(this, X), ("no value for " + X))
108-
109-
110-func Y (X) = valueOrElse(getInteger(this, X), 0)
111-
112-
113-func Z (X) = valueOrElse(getInteger(this, X), H)
114-
115-
116-func aa () = Y(a)
117-
118-
119-func ab () = Z(e)
120-
121-
122-func ac (ad) = Y(y(l, ad))
123-
124-
125-func ae (ad) = Y(y(m, ad))
126-
127-
128-func af (ad) = Y(y(n, ad))
129-
130-
131-func ag (ad) = Y(y(p, ad))
132-
133-
134-func ah (ad) = Y(y(o, ad))
135-
136-
137-func ai () = Y(d)
138-
139-
140-func aj () = Y(c)
141-
142-
143-func ak () = Y(g)
144-
145-
146-func al () = Y(f)
147-
148-
149-func am () = Y(h)
150-
151-
152-func an () = Y(i)
153-
154-
155-func ao () = Y(b)
156-
157-
158-func ap (ad) = Y(y(k, ad))
159-
160-
161-func aq (ad) = Y(y(j, ad))
162-
163-
164-func ar () = valueOrElse(getBoolean(this, q), false)
165-
166-
167-func as () = lastBlock.timestamp
168-
169-
170-func at () = (as() / 1000)
171-
172-
173-func au (ad) = {
174- let av = as()
175- let aw = ah(ad)
176- let ax = if (((av - aw) > U))
177- then $Tuple3(av, af(ad), 0)
178- else $Tuple3(aw, (af(ad) - ag(ad)), ag(ad))
179- let ay = ax._1
180- let az = ax._2
181- let aA = ax._3
182- $Tuple3(ay, az, aA)
83+func M () = {
84+ let N = L()
85+ if ((N == "WAVES"))
86+ then unit
87+ else fromBase58String(N)
18388 }
18489
18590
186-func aB (aC) = {
187- let aD = if ((aa() > 0))
188- then O((ai() + aC), aa())
189- else H
190- aD
91+func O () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
92+
93+
94+func P () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
95+
96+
97+let Q = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
98+
99+let R = (((7 * 60) * 60) * 24)
100+
101+let S = ""
102+
103+let T = 0
104+
105+func U (V) = {
106+ let W = O()
107+ if ((W == 6))
108+ then (V / 100)
109+ else if ((W == 8))
110+ then V
111+ else throw("Invalid asset decimals")
191112 }
192113
193114
194-func aE () = T(at(), an())
115+func X (V) = {
116+ let W = O()
117+ if ((W == 6))
118+ then (V * 100)
119+ else if ((W == 8))
120+ then V
121+ else throw("Invalid asset decimals")
122+ }
195123
196124
197-func aF (aG) = if (((aa() + aG) == 0))
198- then ak()
125+func Y (Z,aa) = fraction(Z, Q, aa, HALFEVEN)
126+
127+
128+func ab (Z,aa) = fraction(Z, aa, Q, HALFEVEN)
129+
130+
131+func ac (Z) = if ((Z > 0))
132+ then Z
133+ else -(Z)
134+
135+
136+func ad (Z,aa) = if ((Z > aa))
137+ then aa
138+ else Z
139+
140+
141+let ae = (86400 * 1000)
142+
143+let af = Y((1 * Q), (4 * Q))
144+
145+func ag (ah) = valueOrErrorMessage(getInteger(this, ah), ("no value for " + ah))
146+
147+
148+func ai (ah) = valueOrElse(getInteger(this, ah), 0)
149+
150+
151+func aj (ah) = valueOrElse(getInteger(this, ah), Q)
152+
153+
154+func ak () = ai(a)
155+
156+
157+func al () = aj(i)
158+
159+
160+func am (an) = ai(D(p, an))
161+
162+
163+func ao (an) = ai(D(q, an))
164+
165+
166+func ap (an) = ai(D(r, an))
167+
168+
169+func aq (an) = ai(D(t, an))
170+
171+
172+func ar (an) = ai(D(s, an))
173+
174+
175+func as () = ai(d)
176+
177+
178+func at () = ai(c)
179+
180+
181+func au () = ai(e)
182+
183+
184+func av () = ai(k)
185+
186+
187+func aw () = ai(j)
188+
189+
190+func ax () = ai(l)
191+
192+
193+func ay () = ai(m)
194+
195+
196+func az () = ai(b)
197+
198+
199+func aA (an) = ai(D(o, an))
200+
201+
202+func aB (an) = ai(D(n, an))
203+
204+
205+func aC () = ai(h)
206+
207+
208+func aD () = valueOrElse(getBoolean(this, u), false)
209+
210+
211+func aE () = lastBlock.timestamp
212+
213+
214+func aF () = (aE() / 1000)
215+
216+
217+func aG (an) = {
218+ let aH = aE()
219+ let aI = ar(an)
220+ let aJ = if (((aH - aI) > ae))
221+ then $Tuple3(aH, ap(an), 0)
222+ else $Tuple3(aI, (ap(an) - aq(an)), aq(an))
223+ let aK = aJ._1
224+ let aL = aJ._2
225+ let aM = aJ._3
226+ $Tuple3(aK, aL, aM)
227+ }
228+
229+
230+func aN (aO) = {
231+ let aP = if ((ak() > 0))
232+ then Y((as() + aO), ak())
233+ else Q
234+ aP
235+ }
236+
237+
238+func aQ () = ad(aF(), ay())
239+
240+
241+func aR (aS) = if (((ak() + aS) == 0))
242+ then av()
199243 else {
200- let aH = (aE() - al())
201- let aI = if ((0 > aH))
244+ let aT = (aQ() - aw())
245+ let aU = if ((0 > aT))
202246 then 0
203- else aH
204- let aJ = O((am() * aI), (aa() + aG))
205- (ak() + aJ)
247+ else aT
248+ let aV = Y((ax() * aU), (ak() + aS))
249+ (av() + aV)
206250 }
207251
208252
209-func aK (ad,aG) = {
210- let aL = (aF(aG) - aq(ad))
211- (R((ac(ad) + aG), aL) + ap(ad))
253+func aW (an,aS) = {
254+ let aX = (aR(aS) - aB(an))
255+ (ab((am(an) + aS), aX) + aA(an))
212256 }
213257
214258
215-func aM (ad,aG) = {
216- let aN = aF(aG)
217- let aO = at()
218- let aP = if ((ad != ""))
219- then $Tuple2(aK(ad, aG), aN)
259+func aY (an,aS) = {
260+ let aZ = aR(aS)
261+ let ba = aF()
262+ let bb = if ((an != ""))
263+ then $Tuple2(aW(an, aS), aZ)
220264 else $Tuple2(0, 0)
221- let aQ = aP._1
222- let aR = aP._2
223- $Tuple4(aN, aO, aQ, aR)
265+ let bc = bb._1
266+ let bd = bb._2
267+ $Tuple4(aZ, ba, bc, bd)
224268 }
225269
226270
227-func aS (aT,aU) = if (((ac(aT) + aU) >= 0))
228- then [IntegerEntry(y(l, aT), (ac(aT) + aU))]
229- else throw(((("Vault: can not update user balance. Balance: " + toString(ac(aT))) + " change: ") + toString(aU)))
271+func be (bf,bg) = if (((am(bf) + bg) >= 0))
272+ then [IntegerEntry(D(p, bf), (am(bf) + bg))]
273+ else throw(((("Vault: can not update user balance. Balance: " + toString(am(bf))) + " change: ") + toString(bg)))
230274
231275
232-func aV (aT,aW) = [IntegerEntry(y(n, aT), aW)]
276+func bh (bf,bi) = [IntegerEntry(D(r, bf), bi)]
233277
234278
235-func aX (aT,aW) = [IntegerEntry(y(m, aT), aW)]
279+func bj (bf,bi) = [IntegerEntry(D(q, bf), bi)]
236280
237281
238-func aY (aU) = {
239- let aZ = ai()
240- if (((aZ + aU) >= 0))
241- then [IntegerEntry(d, (aZ + aU))]
242- else throw(((("Vault: can not update free balance. Balance: " + toString(aZ)) + " change: ") + toString(aU)))
282+func bk (bg) = {
283+ let bl = as()
284+ if (((bl + bg) >= 0))
285+ then [IntegerEntry(d, (bl + bg))]
286+ else throw(((("Vault: can not update free balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
243287 }
244288
245289
246-func ba (aU) = {
247- let aZ = aj()
248- if (((aZ + aU) >= 0))
249- then [IntegerEntry(c, (aZ + aU))]
250- else throw(((("Vault: can not update locked balance. Balance: " + toString(aZ)) + " change: ") + toString(aU)))
290+func bm (bg) = {
291+ let bl = at()
292+ if (((bl + bg) >= 0))
293+ then [IntegerEntry(c, (bl + bg))]
294+ else throw(((("Vault: can not update locked balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
251295 }
252296
253297
254-func bb (aU) = [IntegerEntry(a, (aa() + aU))]
298+func bn (bg) = {
299+ let bo = (au() + bg)
300+ let bp = Y(ac(bo), as())
301+ if ((aC() > bp))
302+ then [IntegerEntry(e, bo)]
303+ else throw(((((((("Vault: can not update excess balance. Balance: " + toString(au())) + " change: ") + toString(bg)) + " utilization rate: ") + toString(bp)) + " max utilization rate: ") + toString(aC())))
304+ }
255305
256306
257-func bc (aW) = [IntegerEntry(e, aW)]
307+func bq (bg) = [IntegerEntry(a, (ak() + bg))]
258308
259309
260-func bd (aT,be,bf) = [IntegerEntry(y(o, aT), be), IntegerEntry(y(p, aT), bf)]
310+func br (bi) = [IntegerEntry(i, bi)]
261311
262312
263-func bg (bh) = [IntegerEntry(b, (ao() + bh))]
313+func bs (bf,bt,bu) = [IntegerEntry(D(s, bf), bt), IntegerEntry(D(t, bf), bu)]
264314
265315
266-func bi (bj) = [IntegerEntry(h, bj)]
316+func bv (bw) = [IntegerEntry(b, (az() + bw))]
267317
268318
269-func bk (bl,bm) = [IntegerEntry(f, bl), IntegerEntry(i, bm)]
319+func bx (by) = [IntegerEntry(l, by)]
270320
271321
272-func bn (bo) = [IntegerEntry(g, bo)]
322+func bz (bA,bB) = [IntegerEntry(j, bA), IntegerEntry(m, bB)]
273323
274324
275-func bp (ad,bq,br) = [IntegerEntry(y(k, ad), bq), IntegerEntry(y(j, ad), br)]
325+func bC (bD) = [IntegerEntry(k, bD)]
276326
277327
278-@Callable(bs)
279-func initialize (bt) = if (if (ar())
328+func bE (an,bF,bG) = [IntegerEntry(D(o, an), bF), IntegerEntry(D(n, an), bG)]
329+
330+
331+@Callable(bH)
332+func initialize (bI,bJ,bK) = if (if (if (if (aD())
280333 then true
281- else (bs.caller != this))
334+ else (bH.caller != this))
335+ then true
336+ else (0 > bK))
337+ then true
338+ else (bK > Q))
282339 then throw("Unable to initialize")
283- else [StringEntry(r, toString(valueOrErrorMessage(addressFromString(bt), "Invalid coordinator address"))), BooleanEntry(q, true)]
340+ else {
341+ let W = if ((bJ == "WAVES"))
342+ then 8
343+ else {
344+ let bL = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
345+ bL.decimals
346+ }
347+[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bI), "Invalid coordinator address"))), StringEntry(f, bJ), IntegerEntry(g, W), IntegerEntry(h, bK), BooleanEntry(u, true)]
348+ }
284349
285350
286351
287-@Callable(bs)
352+@Callable(bH)
288353 func stake () = {
289- let ad = toString(bs.caller)
290- let M = N(bs.payments[0].amount)
291- if (if (if ((bs.payments[0].assetId != F()))
354+ let an = toString(bH.caller)
355+ let V = X(bH.payments[0].amount)
356+ if (if (if ((bH.payments[0].assetId != M()))
292357 then true
293- else (size(bs.payments) != 1))
358+ else (size(bH.payments) != 1))
294359 then true
295- else !(ar()))
360+ else !(aD()))
296361 then throw("Invalid call to stake")
297362 else {
298- let bu = aM(ad, 0)
299- let aN = bu._1
300- let aO = bu._2
301- let aQ = bu._3
302- let aR = bu._4
303- let bv = ab()
304- let bw = ae(ad)
305- let bx = O(M, bv)
306- let by = O((R(bx, bv) + R(ac(ad), bw)), (bx + ac(ad)))
307- let bz = (bx + ac(ad))
308- let bA = R(bz, V)
309- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
310- if ((bB == bB))
311- then (((((((bp(ad, aQ, aR) ++ bn(aN)) ++ bk(aO, an())) ++ aY(M)) ++ aS(ad, bx)) ++ aX(ad, by)) ++ aV(ad, bA)) ++ bb(bx))
363+ let bM = aY(an, 0)
364+ let aZ = bM._1
365+ let ba = bM._2
366+ let bc = bM._3
367+ let bd = bM._4
368+ let bN = al()
369+ let bO = ao(an)
370+ let bP = Y(V, bN)
371+ let bQ = Y((ab(bP, bN) + ab(am(an), bO)), (bP + am(an)))
372+ let bR = (bP + am(an))
373+ let bS = ab(bR, af)
374+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
375+ if ((bT == bT))
376+ then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(V)) ++ be(an, bP)) ++ bj(an, bQ)) ++ bh(an, bS)) ++ bq(bP))
312377 else throw("Strict value is not equal to itself.")
313378 }
314379 }
315380
316381
317382
318-@Callable(bs)
319-func unStake (M) = {
320- let ad = toString(bs.caller)
321- let bC = N(M)
322- if (if (if ((bs.payments != nil))
383+@Callable(bH)
384+func unStake (V) = {
385+ let an = toString(bH.caller)
386+ let bU = X(V)
387+ if (if (if ((bH.payments != nil))
323388 then true
324- else (0 >= bC))
389+ else (0 >= bU))
325390 then true
326- else !(ar()))
391+ else !(aD()))
327392 then throw("Invalid call to unStake")
328393 else {
329- let bD = aM(ad, 0)
330- let aN = bD._1
331- let aO = bD._2
332- let aQ = bD._3
333- let aR = bD._4
334- let bE = au(ad)
335- let ay = bE._1
336- let az = bE._2
337- let aA = bE._3
338- let bx = O(bC, ab())
339- if ((bx > az))
394+ let bV = aY(an, 0)
395+ let aZ = bV._1
396+ let ba = bV._2
397+ let bc = bV._3
398+ let bd = bV._4
399+ let bW = aG(an)
400+ let aK = bW._1
401+ let aL = bW._2
402+ let aM = bW._3
403+ let bP = Y(bU, al())
404+ if ((bP > aL))
340405 then throw("Invalid call to unStake: withdraw over limit")
341406 else {
342- let bF = (aA + bx)
343- if ((bC > ai()))
407+ let bX = (aM + bP)
408+ if ((bU > as()))
344409 then throw("Invalid call to unStake: balance too low")
345410 else {
346- let bG = invoke(G(), "withdraw", [toBase58String(F()), L(bC)], nil)
347- if ((bG == bG))
348- then (((((((bp(ad, aQ, aR) ++ bn(aN)) ++ bk(aO, an())) ++ aY(-(bC))) ++ aS(ad, -(bx))) ++ bb(-(bx))) ++ bd(ad, ay, bF)) ++ [ScriptTransfer(bs.caller, L(bC), F())])
411+ let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
412+ if ((bY == bY))
413+ then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(-(bU))) ++ be(an, -(bP))) ++ bq(-(bP))) ++ bs(an, aK, bX)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
349414 else throw("Strict value is not equal to itself.")
350415 }
351416 }
354419
355420
356421
357-@Callable(bs)
422+@Callable(bH)
358423 func withdrawRewards () = {
359- let ad = toString(bs.caller)
360- let bH = aM(ad, 0)
361- let aN = bH._1
362- let aO = bH._2
363- let aQ = bH._3
364- let aR = bH._4
365- if (if ((0 >= aQ))
424+ let an = toString(bH.caller)
425+ let bZ = aY(an, 0)
426+ let aZ = bZ._1
427+ let ba = bZ._2
428+ let bc = bZ._3
429+ let bd = bZ._4
430+ if (if ((0 >= bc))
366431 then true
367- else !(ar()))
432+ else !(aD()))
368433 then throw("No reward: Vault")
369- else ((((bp(ad, 0, aR) ++ bn(aN)) ++ bk(aO, an())) ++ bg(-(aQ))) ++ [ScriptTransfer(bs.caller, aQ, E())])
434+ else ((((bE(an, 0, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bv(-(bc))) ++ [ScriptTransfer(bH.caller, bc, J())])
370435 }
371436
372437
373438
374-@Callable(bs)
439+@Callable(bH)
375440 func addFree () = {
376- let M = N(bs.payments[0].amount)
377- if (if (if (if ((bs.payments[0].assetId != F()))
441+ let V = X(bH.payments[0].amount)
442+ if (if (if (if ((bH.payments[0].assetId != M()))
378443 then true
379- else (size(bs.payments) != 1))
444+ else (size(bH.payments) != 1))
380445 then true
381- else !(ar()))
446+ else !(aD()))
382447 then true
383- else !(if (D(toString(bs.caller)))
448+ else !(if (I(toString(bH.caller)))
384449 then true
385- else (bs.caller == C())))
450+ else (bH.caller == H())))
386451 then throw("Invalid addFree params")
387452 else {
388- let aD = aB(M)
389- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
390- if ((bB == bB))
391- then (aY(M) ++ bc(aD))
453+ let aP = aN(V)
454+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
455+ if ((bT == bT))
456+ then (bk(V) ++ br(aP))
392457 else throw("Strict value is not equal to itself.")
393458 }
394459 }
395460
396461
397462
398-@Callable(bs)
463+@Callable(bH)
399464 func addLocked () = {
400- let M = N(bs.payments[0].amount)
401- if (if (if (if ((bs.payments[0].assetId != F()))
465+ let V = X(bH.payments[0].amount)
466+ if (if (if (if ((bH.payments[0].assetId != M()))
402467 then true
403- else (size(bs.payments) != 1))
468+ else (size(bH.payments) != 1))
404469 then true
405- else !(ar()))
470+ else !(aD()))
406471 then true
407- else !(if (D(toString(bs.caller)))
472+ else !(if (I(toString(bH.caller)))
408473 then true
409- else (bs.caller == C())))
474+ else (bH.caller == H())))
410475 then throw("Invalid addLocked params")
411476 else {
412- let bG = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
413- if ((bG == bG))
414- then ba(M)
477+ let bY = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
478+ if ((bY == bY))
479+ then bm(V)
415480 else throw("Strict value is not equal to itself.")
416481 }
417482 }
418483
419484
420485
421-@Callable(bs)
422-func exchangeFreeAndLocked (M) = if (if (!(ar()))
486+@Callable(bH)
487+func exchangeFreeAndLocked (V) = if (if (!(aD()))
423488 then true
424- else if (!(D(toString(bs.caller))))
425- then (bs.caller != C())
489+ else if (!(I(toString(bH.caller))))
490+ then (bH.caller != H())
426491 else false)
427492 then throw("Invalid exchangeFreeAndLocked params")
428493 else {
429- let bC = N(M)
430- let aD = aB(-(bC))
431- ((ba(bC) ++ aY(-(bC))) ++ bc(aD))
494+ let bU = X(V)
495+ let aP = aN(-(bU))
496+ ((bm(bU) ++ bk(-(bU))) ++ br(aP))
432497 }
433498
434499
435500
436-@Callable(bs)
437-func withdrawLocked (M) = if (if (if (!(ar()))
501+@Callable(bH)
502+func withdrawLocked (V) = if (if (if (!(aD()))
438503 then true
439- else (0 >= M))
504+ else (0 >= V))
440505 then true
441- else !(D(toString(bs.caller))))
506+ else !(I(toString(bH.caller))))
442507 then throw("Invalid withdrawLocked params")
443508 else {
444- let bC = N(M)
445- let bG = invoke(G(), "withdraw", [toBase58String(F()), L(bC)], nil)
446- if ((bG == bG))
447- then (ba(-(bC)) ++ [ScriptTransfer(bs.caller, L(bC), F())])
509+ let bU = X(V)
510+ let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
511+ if ((bY == bY))
512+ then (bm(-(bU)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
448513 else throw("Strict value is not equal to itself.")
449514 }
450515
451516
452517
453-@Callable(bs)
454-func addRewards () = if (if (if ((bs.payments[0].assetId != E()))
518+@Callable(bH)
519+func addRewards () = if (if (if ((bH.payments[0].assetId != J()))
455520 then true
456- else (size(bs.payments) != 1))
521+ else (size(bH.payments) != 1))
457522 then true
458- else !(ar()))
523+ else !(aD()))
459524 then throw("Invalid addRewards params")
460525 else {
461- let bq = bs.payments[0].amount
462- let aN = aM(J, K)._1
463- let bI = at()
464- let bJ = if ((bI > an()))
465- then (bq / I)
526+ let bF = bH.payments[0].amount
527+ let aZ = aY(S, T)._1
528+ let ca = aF()
529+ let cb = if ((ca > ay()))
530+ then (bF / R)
466531 else {
467- let bK = (an() - bI)
468- let bL = (am() * bK)
469- ((bq + bL) / I)
532+ let cc = (ay() - ca)
533+ let cd = (ax() * cc)
534+ ((bF + cd) / R)
470535 }
471- (((bi(bJ) ++ bn(aN)) ++ bg(bq)) ++ bk(bI, (bI + I)))
536+ (((bx(cb) ++ bC(aZ)) ++ bv(bF)) ++ bz(ca, (ca + R)))
472537 }
473538
474539
475540
476-@Callable(bs)
541+@Callable(bH)
477542 func ackRewards () = {
478- let bM = invoke(G(), "claimProfit", [toBase58String(F())], nil)
479- if ((bM == bM))
543+ let ce = invoke(P(), "claimProfit", [L()], nil)
544+ if ((ce == ce))
480545 then {
481- let bN = {
482- let bO = bM
483- if ($isInstanceOf(bO, "Int"))
546+ let cf = {
547+ let cg = ce
548+ if ($isInstanceOf(cg, "Int"))
484549 then {
485- let bP = bO
486- N(bP)
550+ let ch = cg
551+ X(ch)
487552 }
488553 else throw("Invalid claimProfit response")
489554 }
490- let bQ = if ((bN > 0))
555+ let ci = if ((cf > 0))
491556 then {
492- let aD = aB(bN)
493- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(bN))])
494- if ((bB == bB))
495- then (aY(bN) ++ bc(aD))
557+ let aP = aN(cf)
558+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(cf))])
559+ if ((bT == bT))
560+ then (bk(cf) ++ br(aP))
496561 else throw("Strict value is not equal to itself.")
497562 }
498563 else nil
499- if ((bQ == bQ))
500- then bQ
564+ if ((ci == ci))
565+ then ci
501566 else throw("Strict value is not equal to itself.")
502567 }
503568 else throw("Strict value is not equal to itself.")
505570
506571
507572
508-@Callable(bs)
509-func view_reward (ad) = {
510- let aZ = ac(ad)
511- let bR = R(ae(ad), aZ)
512- let bS = R(ab(), aZ)
513- let bT = (bS - bR)
514- throw(toString(bT))
573+@Callable(bH)
574+func view_reward (an) = {
575+ let bl = am(an)
576+ let cj = ab(ao(an), bl)
577+ let ck = ab(al(), bl)
578+ let cl = (ck - cj)
579+ throw(toString(cl))
515580 }
516581
517582
518583
519-@Callable(bs)
520-func view_stakingReward (ad) = {
521- let aQ = aM(ad, 0)._3
522- throw(toString(L(aQ)))
584+@Callable(bH)
585+func view_stakingReward (an) = {
586+ let bc = aY(an, 0)._3
587+ throw(toString(U(bc)))
523588 }
524589
525590
526591
527-@Callable(bs)
528-func view_withdrawLimit (ad) = {
529- let az = au(ad)._2
530- let bU = L(R(az, ab()))
531- throw(toString(bU))
592+@Callable(bH)
593+func view_withdrawLimit (an) = {
594+ let aL = aG(an)._2
595+ let cm = U(ab(aL, al()))
596+ throw(toString(cm))
532597 }
533598
534599
535-@Verifier(bV)
536-func bW () = {
537- let bX = getString(this, r)
538- if (isDefined(bX))
600+@Verifier(cn)
601+func co () = {
602+ let cp = getString(this, v)
603+ if (isDefined(cp))
539604 then {
540- let bY = getString(addressFromStringValue(value(bX)), v)
541- if (isDefined(bY))
542- then valueOrElse(getBoolean(addressFromStringValue(value(bY)), ((("status_" + toString(this)) + "_") + toBase58String(bV.id))), false)
605+ let cq = getString(addressFromStringValue(value(cp)), z)
606+ if (isDefined(cq))
607+ then valueOrElse(getBoolean(addressFromStringValue(value(cq)), ((("status_" + toString(this)) + "_") + toBase58String(cn.id))), false)
543608 else throw("unable to verify: admin not set in coordinator")
544609 }
545- else sigVerify(bV.bodyBytes, bV.proofs[0], bV.senderPublicKey)
610+ else sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
546611 }
547612
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_totalSupply"
55
66 let b = "k_rewardBalance"
77
88 let c = "k_lockedBalance"
99
1010 let d = "k_freeBalance"
1111
12-let e = "k_rate"
12+let e = "k_excessBalance"
1313
14-let f = "k_lastUpdateTime"
14+let f = "k_vaultAsset"
1515
16-let g = "k_rewardPerTokenStored"
16+let g = "k_vaultAssetDecimals"
1717
18-let h = "k_rewardRate"
18+let h = "k_maxSpotUtilization"
1919
20-let i = "k_periodFinish"
20+let i = "k_rate"
2121
22-let j = "k_userRewardPerToken"
22+let j = "k_lastUpdateTime"
2323
24-let k = "k_userReward"
24+let k = "k_rewardPerTokenStored"
2525
26-let l = "k_balance"
26+let l = "k_rewardRate"
2727
28-let m = "k_average_rate"
28+let m = "k_periodFinish"
2929
30-let n = "k_withdraw_limit"
30+let n = "k_userRewardPerToken"
3131
32-let o = "k_last_withdraw_date"
32+let o = "k_userReward"
3333
34-let p = "k_withdraw_in_period"
34+let p = "k_balance"
3535
36-let q = "k_initialized"
36+let q = "k_average_rate"
3737
38-let r = "k_coordinatorAddress"
38+let r = "k_withdraw_limit"
3939
40-let s = "k_amm"
40+let s = "k_last_withdraw_date"
4141
42-let t = "k_gov_asset"
42+let t = "k_withdraw_in_period"
4343
44-let u = "k_quote_asset"
44+let u = "k_initialized"
4545
46-let v = "k_admin_address"
46+let v = "k_coordinatorAddress"
4747
48-let w = "k_manager_address"
48+let w = "k_amm"
4949
50-let x = "k_collateral_address"
50+let x = "k_gov_asset"
5151
52-func y (z,A) = ((z + "_") + A)
52+let y = "k_quote_asset"
53+
54+let z = "k_admin_address"
55+
56+let A = "k_manager_address"
57+
58+let B = "k_spot_address"
59+
60+let C = "k_collateral_address"
61+
62+func D (E,F) = ((E + "_") + F)
5363
5464
55-func B () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, r), "Coordinator not set")), "Coordinator address invalid")
65+func G () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(this, v), "Coordinator not set")), "Coordinator address invalid")
5666
5767
58-func C () = addressFromString(valueOrErrorMessage(getString(B(), v), "Admin address not set"))
68+func H () = addressFromString(valueOrErrorMessage(getString(G(), z), "Admin address not set"))
5969
6070
61-func D (A) = valueOrElse(getBoolean(B(), y(s, A)), false)
71+func I (F) = valueOrElse(getBoolean(G(), D(w, F)), false)
6272
6373
64-func E () = fromBase58String(valueOrErrorMessage(getString(B(), t), "Governance asset not set"))
74+func J () = fromBase58String(valueOrErrorMessage(getString(G(), x), "Governance asset not set"))
6575
6676
67-func F () = fromBase58String(valueOrErrorMessage(getString(B(), u), "Quote asset not set"))
77+func K () = fromBase58String(getStringValue(G(), y))
6878
6979
70-func G () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(B(), w), "Manager address not set")), "Manager address invalid")
80+func L () = valueOrErrorMessage(getString(this, f), "Vault asset not set")
7181
7282
73-let H = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
74-
75-let I = (((7 * 60) * 60) * 24)
76-
77-let J = ""
78-
79-let K = 0
80-
81-func L (M) = (M / 100)
82-
83-
84-func N (M) = (M * 100)
85-
86-
87-func O (P,Q) = fraction(P, H, Q, HALFEVEN)
88-
89-
90-func R (P,Q) = fraction(P, Q, H, HALFEVEN)
91-
92-
93-func S (P) = if ((P > 0))
94- then P
95- else -(P)
96-
97-
98-func T (P,Q) = if ((P > Q))
99- then Q
100- else P
101-
102-
103-let U = (86400 * 1000)
104-
105-let V = O((1 * H), (4 * H))
106-
107-func W (X) = valueOrErrorMessage(getInteger(this, X), ("no value for " + X))
108-
109-
110-func Y (X) = valueOrElse(getInteger(this, X), 0)
111-
112-
113-func Z (X) = valueOrElse(getInteger(this, X), H)
114-
115-
116-func aa () = Y(a)
117-
118-
119-func ab () = Z(e)
120-
121-
122-func ac (ad) = Y(y(l, ad))
123-
124-
125-func ae (ad) = Y(y(m, ad))
126-
127-
128-func af (ad) = Y(y(n, ad))
129-
130-
131-func ag (ad) = Y(y(p, ad))
132-
133-
134-func ah (ad) = Y(y(o, ad))
135-
136-
137-func ai () = Y(d)
138-
139-
140-func aj () = Y(c)
141-
142-
143-func ak () = Y(g)
144-
145-
146-func al () = Y(f)
147-
148-
149-func am () = Y(h)
150-
151-
152-func an () = Y(i)
153-
154-
155-func ao () = Y(b)
156-
157-
158-func ap (ad) = Y(y(k, ad))
159-
160-
161-func aq (ad) = Y(y(j, ad))
162-
163-
164-func ar () = valueOrElse(getBoolean(this, q), false)
165-
166-
167-func as () = lastBlock.timestamp
168-
169-
170-func at () = (as() / 1000)
171-
172-
173-func au (ad) = {
174- let av = as()
175- let aw = ah(ad)
176- let ax = if (((av - aw) > U))
177- then $Tuple3(av, af(ad), 0)
178- else $Tuple3(aw, (af(ad) - ag(ad)), ag(ad))
179- let ay = ax._1
180- let az = ax._2
181- let aA = ax._3
182- $Tuple3(ay, az, aA)
83+func M () = {
84+ let N = L()
85+ if ((N == "WAVES"))
86+ then unit
87+ else fromBase58String(N)
18388 }
18489
18590
186-func aB (aC) = {
187- let aD = if ((aa() > 0))
188- then O((ai() + aC), aa())
189- else H
190- aD
91+func O () = valueOrErrorMessage(getInteger(this, g), "Vault asset decimals not set")
92+
93+
94+func P () = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(G(), A), "Manager address not set")), "Manager address invalid")
95+
96+
97+let Q = (1 * (((((((10 * 10) * 10) * 10) * 10) * 10) * 10) * 10))
98+
99+let R = (((7 * 60) * 60) * 24)
100+
101+let S = ""
102+
103+let T = 0
104+
105+func U (V) = {
106+ let W = O()
107+ if ((W == 6))
108+ then (V / 100)
109+ else if ((W == 8))
110+ then V
111+ else throw("Invalid asset decimals")
191112 }
192113
193114
194-func aE () = T(at(), an())
115+func X (V) = {
116+ let W = O()
117+ if ((W == 6))
118+ then (V * 100)
119+ else if ((W == 8))
120+ then V
121+ else throw("Invalid asset decimals")
122+ }
195123
196124
197-func aF (aG) = if (((aa() + aG) == 0))
198- then ak()
125+func Y (Z,aa) = fraction(Z, Q, aa, HALFEVEN)
126+
127+
128+func ab (Z,aa) = fraction(Z, aa, Q, HALFEVEN)
129+
130+
131+func ac (Z) = if ((Z > 0))
132+ then Z
133+ else -(Z)
134+
135+
136+func ad (Z,aa) = if ((Z > aa))
137+ then aa
138+ else Z
139+
140+
141+let ae = (86400 * 1000)
142+
143+let af = Y((1 * Q), (4 * Q))
144+
145+func ag (ah) = valueOrErrorMessage(getInteger(this, ah), ("no value for " + ah))
146+
147+
148+func ai (ah) = valueOrElse(getInteger(this, ah), 0)
149+
150+
151+func aj (ah) = valueOrElse(getInteger(this, ah), Q)
152+
153+
154+func ak () = ai(a)
155+
156+
157+func al () = aj(i)
158+
159+
160+func am (an) = ai(D(p, an))
161+
162+
163+func ao (an) = ai(D(q, an))
164+
165+
166+func ap (an) = ai(D(r, an))
167+
168+
169+func aq (an) = ai(D(t, an))
170+
171+
172+func ar (an) = ai(D(s, an))
173+
174+
175+func as () = ai(d)
176+
177+
178+func at () = ai(c)
179+
180+
181+func au () = ai(e)
182+
183+
184+func av () = ai(k)
185+
186+
187+func aw () = ai(j)
188+
189+
190+func ax () = ai(l)
191+
192+
193+func ay () = ai(m)
194+
195+
196+func az () = ai(b)
197+
198+
199+func aA (an) = ai(D(o, an))
200+
201+
202+func aB (an) = ai(D(n, an))
203+
204+
205+func aC () = ai(h)
206+
207+
208+func aD () = valueOrElse(getBoolean(this, u), false)
209+
210+
211+func aE () = lastBlock.timestamp
212+
213+
214+func aF () = (aE() / 1000)
215+
216+
217+func aG (an) = {
218+ let aH = aE()
219+ let aI = ar(an)
220+ let aJ = if (((aH - aI) > ae))
221+ then $Tuple3(aH, ap(an), 0)
222+ else $Tuple3(aI, (ap(an) - aq(an)), aq(an))
223+ let aK = aJ._1
224+ let aL = aJ._2
225+ let aM = aJ._3
226+ $Tuple3(aK, aL, aM)
227+ }
228+
229+
230+func aN (aO) = {
231+ let aP = if ((ak() > 0))
232+ then Y((as() + aO), ak())
233+ else Q
234+ aP
235+ }
236+
237+
238+func aQ () = ad(aF(), ay())
239+
240+
241+func aR (aS) = if (((ak() + aS) == 0))
242+ then av()
199243 else {
200- let aH = (aE() - al())
201- let aI = if ((0 > aH))
244+ let aT = (aQ() - aw())
245+ let aU = if ((0 > aT))
202246 then 0
203- else aH
204- let aJ = O((am() * aI), (aa() + aG))
205- (ak() + aJ)
247+ else aT
248+ let aV = Y((ax() * aU), (ak() + aS))
249+ (av() + aV)
206250 }
207251
208252
209-func aK (ad,aG) = {
210- let aL = (aF(aG) - aq(ad))
211- (R((ac(ad) + aG), aL) + ap(ad))
253+func aW (an,aS) = {
254+ let aX = (aR(aS) - aB(an))
255+ (ab((am(an) + aS), aX) + aA(an))
212256 }
213257
214258
215-func aM (ad,aG) = {
216- let aN = aF(aG)
217- let aO = at()
218- let aP = if ((ad != ""))
219- then $Tuple2(aK(ad, aG), aN)
259+func aY (an,aS) = {
260+ let aZ = aR(aS)
261+ let ba = aF()
262+ let bb = if ((an != ""))
263+ then $Tuple2(aW(an, aS), aZ)
220264 else $Tuple2(0, 0)
221- let aQ = aP._1
222- let aR = aP._2
223- $Tuple4(aN, aO, aQ, aR)
265+ let bc = bb._1
266+ let bd = bb._2
267+ $Tuple4(aZ, ba, bc, bd)
224268 }
225269
226270
227-func aS (aT,aU) = if (((ac(aT) + aU) >= 0))
228- then [IntegerEntry(y(l, aT), (ac(aT) + aU))]
229- else throw(((("Vault: can not update user balance. Balance: " + toString(ac(aT))) + " change: ") + toString(aU)))
271+func be (bf,bg) = if (((am(bf) + bg) >= 0))
272+ then [IntegerEntry(D(p, bf), (am(bf) + bg))]
273+ else throw(((("Vault: can not update user balance. Balance: " + toString(am(bf))) + " change: ") + toString(bg)))
230274
231275
232-func aV (aT,aW) = [IntegerEntry(y(n, aT), aW)]
276+func bh (bf,bi) = [IntegerEntry(D(r, bf), bi)]
233277
234278
235-func aX (aT,aW) = [IntegerEntry(y(m, aT), aW)]
279+func bj (bf,bi) = [IntegerEntry(D(q, bf), bi)]
236280
237281
238-func aY (aU) = {
239- let aZ = ai()
240- if (((aZ + aU) >= 0))
241- then [IntegerEntry(d, (aZ + aU))]
242- else throw(((("Vault: can not update free balance. Balance: " + toString(aZ)) + " change: ") + toString(aU)))
282+func bk (bg) = {
283+ let bl = as()
284+ if (((bl + bg) >= 0))
285+ then [IntegerEntry(d, (bl + bg))]
286+ else throw(((("Vault: can not update free balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
243287 }
244288
245289
246-func ba (aU) = {
247- let aZ = aj()
248- if (((aZ + aU) >= 0))
249- then [IntegerEntry(c, (aZ + aU))]
250- else throw(((("Vault: can not update locked balance. Balance: " + toString(aZ)) + " change: ") + toString(aU)))
290+func bm (bg) = {
291+ let bl = at()
292+ if (((bl + bg) >= 0))
293+ then [IntegerEntry(c, (bl + bg))]
294+ else throw(((("Vault: can not update locked balance. Balance: " + toString(bl)) + " change: ") + toString(bg)))
251295 }
252296
253297
254-func bb (aU) = [IntegerEntry(a, (aa() + aU))]
298+func bn (bg) = {
299+ let bo = (au() + bg)
300+ let bp = Y(ac(bo), as())
301+ if ((aC() > bp))
302+ then [IntegerEntry(e, bo)]
303+ else throw(((((((("Vault: can not update excess balance. Balance: " + toString(au())) + " change: ") + toString(bg)) + " utilization rate: ") + toString(bp)) + " max utilization rate: ") + toString(aC())))
304+ }
255305
256306
257-func bc (aW) = [IntegerEntry(e, aW)]
307+func bq (bg) = [IntegerEntry(a, (ak() + bg))]
258308
259309
260-func bd (aT,be,bf) = [IntegerEntry(y(o, aT), be), IntegerEntry(y(p, aT), bf)]
310+func br (bi) = [IntegerEntry(i, bi)]
261311
262312
263-func bg (bh) = [IntegerEntry(b, (ao() + bh))]
313+func bs (bf,bt,bu) = [IntegerEntry(D(s, bf), bt), IntegerEntry(D(t, bf), bu)]
264314
265315
266-func bi (bj) = [IntegerEntry(h, bj)]
316+func bv (bw) = [IntegerEntry(b, (az() + bw))]
267317
268318
269-func bk (bl,bm) = [IntegerEntry(f, bl), IntegerEntry(i, bm)]
319+func bx (by) = [IntegerEntry(l, by)]
270320
271321
272-func bn (bo) = [IntegerEntry(g, bo)]
322+func bz (bA,bB) = [IntegerEntry(j, bA), IntegerEntry(m, bB)]
273323
274324
275-func bp (ad,bq,br) = [IntegerEntry(y(k, ad), bq), IntegerEntry(y(j, ad), br)]
325+func bC (bD) = [IntegerEntry(k, bD)]
276326
277327
278-@Callable(bs)
279-func initialize (bt) = if (if (ar())
328+func bE (an,bF,bG) = [IntegerEntry(D(o, an), bF), IntegerEntry(D(n, an), bG)]
329+
330+
331+@Callable(bH)
332+func initialize (bI,bJ,bK) = if (if (if (if (aD())
280333 then true
281- else (bs.caller != this))
334+ else (bH.caller != this))
335+ then true
336+ else (0 > bK))
337+ then true
338+ else (bK > Q))
282339 then throw("Unable to initialize")
283- else [StringEntry(r, toString(valueOrErrorMessage(addressFromString(bt), "Invalid coordinator address"))), BooleanEntry(q, true)]
340+ else {
341+ let W = if ((bJ == "WAVES"))
342+ then 8
343+ else {
344+ let bL = valueOrErrorMessage(assetInfo(fromBase58String(bJ)), ("Invalid token id: " + bJ))
345+ bL.decimals
346+ }
347+[StringEntry(v, toString(valueOrErrorMessage(addressFromString(bI), "Invalid coordinator address"))), StringEntry(f, bJ), IntegerEntry(g, W), IntegerEntry(h, bK), BooleanEntry(u, true)]
348+ }
284349
285350
286351
287-@Callable(bs)
352+@Callable(bH)
288353 func stake () = {
289- let ad = toString(bs.caller)
290- let M = N(bs.payments[0].amount)
291- if (if (if ((bs.payments[0].assetId != F()))
354+ let an = toString(bH.caller)
355+ let V = X(bH.payments[0].amount)
356+ if (if (if ((bH.payments[0].assetId != M()))
292357 then true
293- else (size(bs.payments) != 1))
358+ else (size(bH.payments) != 1))
294359 then true
295- else !(ar()))
360+ else !(aD()))
296361 then throw("Invalid call to stake")
297362 else {
298- let bu = aM(ad, 0)
299- let aN = bu._1
300- let aO = bu._2
301- let aQ = bu._3
302- let aR = bu._4
303- let bv = ab()
304- let bw = ae(ad)
305- let bx = O(M, bv)
306- let by = O((R(bx, bv) + R(ac(ad), bw)), (bx + ac(ad)))
307- let bz = (bx + ac(ad))
308- let bA = R(bz, V)
309- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
310- if ((bB == bB))
311- then (((((((bp(ad, aQ, aR) ++ bn(aN)) ++ bk(aO, an())) ++ aY(M)) ++ aS(ad, bx)) ++ aX(ad, by)) ++ aV(ad, bA)) ++ bb(bx))
363+ let bM = aY(an, 0)
364+ let aZ = bM._1
365+ let ba = bM._2
366+ let bc = bM._3
367+ let bd = bM._4
368+ let bN = al()
369+ let bO = ao(an)
370+ let bP = Y(V, bN)
371+ let bQ = Y((ab(bP, bN) + ab(am(an), bO)), (bP + am(an)))
372+ let bR = (bP + am(an))
373+ let bS = ab(bR, af)
374+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
375+ if ((bT == bT))
376+ then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(V)) ++ be(an, bP)) ++ bj(an, bQ)) ++ bh(an, bS)) ++ bq(bP))
312377 else throw("Strict value is not equal to itself.")
313378 }
314379 }
315380
316381
317382
318-@Callable(bs)
319-func unStake (M) = {
320- let ad = toString(bs.caller)
321- let bC = N(M)
322- if (if (if ((bs.payments != nil))
383+@Callable(bH)
384+func unStake (V) = {
385+ let an = toString(bH.caller)
386+ let bU = X(V)
387+ if (if (if ((bH.payments != nil))
323388 then true
324- else (0 >= bC))
389+ else (0 >= bU))
325390 then true
326- else !(ar()))
391+ else !(aD()))
327392 then throw("Invalid call to unStake")
328393 else {
329- let bD = aM(ad, 0)
330- let aN = bD._1
331- let aO = bD._2
332- let aQ = bD._3
333- let aR = bD._4
334- let bE = au(ad)
335- let ay = bE._1
336- let az = bE._2
337- let aA = bE._3
338- let bx = O(bC, ab())
339- if ((bx > az))
394+ let bV = aY(an, 0)
395+ let aZ = bV._1
396+ let ba = bV._2
397+ let bc = bV._3
398+ let bd = bV._4
399+ let bW = aG(an)
400+ let aK = bW._1
401+ let aL = bW._2
402+ let aM = bW._3
403+ let bP = Y(bU, al())
404+ if ((bP > aL))
340405 then throw("Invalid call to unStake: withdraw over limit")
341406 else {
342- let bF = (aA + bx)
343- if ((bC > ai()))
407+ let bX = (aM + bP)
408+ if ((bU > as()))
344409 then throw("Invalid call to unStake: balance too low")
345410 else {
346- let bG = invoke(G(), "withdraw", [toBase58String(F()), L(bC)], nil)
347- if ((bG == bG))
348- then (((((((bp(ad, aQ, aR) ++ bn(aN)) ++ bk(aO, an())) ++ aY(-(bC))) ++ aS(ad, -(bx))) ++ bb(-(bx))) ++ bd(ad, ay, bF)) ++ [ScriptTransfer(bs.caller, L(bC), F())])
411+ let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
412+ if ((bY == bY))
413+ then (((((((bE(an, bc, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bk(-(bU))) ++ be(an, -(bP))) ++ bq(-(bP))) ++ bs(an, aK, bX)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
349414 else throw("Strict value is not equal to itself.")
350415 }
351416 }
352417 }
353418 }
354419
355420
356421
357-@Callable(bs)
422+@Callable(bH)
358423 func withdrawRewards () = {
359- let ad = toString(bs.caller)
360- let bH = aM(ad, 0)
361- let aN = bH._1
362- let aO = bH._2
363- let aQ = bH._3
364- let aR = bH._4
365- if (if ((0 >= aQ))
424+ let an = toString(bH.caller)
425+ let bZ = aY(an, 0)
426+ let aZ = bZ._1
427+ let ba = bZ._2
428+ let bc = bZ._3
429+ let bd = bZ._4
430+ if (if ((0 >= bc))
366431 then true
367- else !(ar()))
432+ else !(aD()))
368433 then throw("No reward: Vault")
369- else ((((bp(ad, 0, aR) ++ bn(aN)) ++ bk(aO, an())) ++ bg(-(aQ))) ++ [ScriptTransfer(bs.caller, aQ, E())])
434+ else ((((bE(an, 0, bd) ++ bC(aZ)) ++ bz(ba, ay())) ++ bv(-(bc))) ++ [ScriptTransfer(bH.caller, bc, J())])
370435 }
371436
372437
373438
374-@Callable(bs)
439+@Callable(bH)
375440 func addFree () = {
376- let M = N(bs.payments[0].amount)
377- if (if (if (if ((bs.payments[0].assetId != F()))
441+ let V = X(bH.payments[0].amount)
442+ if (if (if (if ((bH.payments[0].assetId != M()))
378443 then true
379- else (size(bs.payments) != 1))
444+ else (size(bH.payments) != 1))
380445 then true
381- else !(ar()))
446+ else !(aD()))
382447 then true
383- else !(if (D(toString(bs.caller)))
448+ else !(if (I(toString(bH.caller)))
384449 then true
385- else (bs.caller == C())))
450+ else (bH.caller == H())))
386451 then throw("Invalid addFree params")
387452 else {
388- let aD = aB(M)
389- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
390- if ((bB == bB))
391- then (aY(M) ++ bc(aD))
453+ let aP = aN(V)
454+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
455+ if ((bT == bT))
456+ then (bk(V) ++ br(aP))
392457 else throw("Strict value is not equal to itself.")
393458 }
394459 }
395460
396461
397462
398-@Callable(bs)
463+@Callable(bH)
399464 func addLocked () = {
400- let M = N(bs.payments[0].amount)
401- if (if (if (if ((bs.payments[0].assetId != F()))
465+ let V = X(bH.payments[0].amount)
466+ if (if (if (if ((bH.payments[0].assetId != M()))
402467 then true
403- else (size(bs.payments) != 1))
468+ else (size(bH.payments) != 1))
404469 then true
405- else !(ar()))
470+ else !(aD()))
406471 then true
407- else !(if (D(toString(bs.caller)))
472+ else !(if (I(toString(bH.caller)))
408473 then true
409- else (bs.caller == C())))
474+ else (bH.caller == H())))
410475 then throw("Invalid addLocked params")
411476 else {
412- let bG = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(M))])
413- if ((bG == bG))
414- then ba(M)
477+ let bY = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(V))])
478+ if ((bY == bY))
479+ then bm(V)
415480 else throw("Strict value is not equal to itself.")
416481 }
417482 }
418483
419484
420485
421-@Callable(bs)
422-func exchangeFreeAndLocked (M) = if (if (!(ar()))
486+@Callable(bH)
487+func exchangeFreeAndLocked (V) = if (if (!(aD()))
423488 then true
424- else if (!(D(toString(bs.caller))))
425- then (bs.caller != C())
489+ else if (!(I(toString(bH.caller))))
490+ then (bH.caller != H())
426491 else false)
427492 then throw("Invalid exchangeFreeAndLocked params")
428493 else {
429- let bC = N(M)
430- let aD = aB(-(bC))
431- ((ba(bC) ++ aY(-(bC))) ++ bc(aD))
494+ let bU = X(V)
495+ let aP = aN(-(bU))
496+ ((bm(bU) ++ bk(-(bU))) ++ br(aP))
432497 }
433498
434499
435500
436-@Callable(bs)
437-func withdrawLocked (M) = if (if (if (!(ar()))
501+@Callable(bH)
502+func withdrawLocked (V) = if (if (if (!(aD()))
438503 then true
439- else (0 >= M))
504+ else (0 >= V))
440505 then true
441- else !(D(toString(bs.caller))))
506+ else !(I(toString(bH.caller))))
442507 then throw("Invalid withdrawLocked params")
443508 else {
444- let bC = N(M)
445- let bG = invoke(G(), "withdraw", [toBase58String(F()), L(bC)], nil)
446- if ((bG == bG))
447- then (ba(-(bC)) ++ [ScriptTransfer(bs.caller, L(bC), F())])
509+ let bU = X(V)
510+ let bY = invoke(P(), "withdraw", [L(), U(bU)], nil)
511+ if ((bY == bY))
512+ then (bm(-(bU)) ++ [ScriptTransfer(bH.caller, U(bU), M())])
448513 else throw("Strict value is not equal to itself.")
449514 }
450515
451516
452517
453-@Callable(bs)
454-func addRewards () = if (if (if ((bs.payments[0].assetId != E()))
518+@Callable(bH)
519+func addRewards () = if (if (if ((bH.payments[0].assetId != J()))
455520 then true
456- else (size(bs.payments) != 1))
521+ else (size(bH.payments) != 1))
457522 then true
458- else !(ar()))
523+ else !(aD()))
459524 then throw("Invalid addRewards params")
460525 else {
461- let bq = bs.payments[0].amount
462- let aN = aM(J, K)._1
463- let bI = at()
464- let bJ = if ((bI > an()))
465- then (bq / I)
526+ let bF = bH.payments[0].amount
527+ let aZ = aY(S, T)._1
528+ let ca = aF()
529+ let cb = if ((ca > ay()))
530+ then (bF / R)
466531 else {
467- let bK = (an() - bI)
468- let bL = (am() * bK)
469- ((bq + bL) / I)
532+ let cc = (ay() - ca)
533+ let cd = (ax() * cc)
534+ ((bF + cd) / R)
470535 }
471- (((bi(bJ) ++ bn(aN)) ++ bg(bq)) ++ bk(bI, (bI + I)))
536+ (((bx(cb) ++ bC(aZ)) ++ bv(bF)) ++ bz(ca, (ca + R)))
472537 }
473538
474539
475540
476-@Callable(bs)
541+@Callable(bH)
477542 func ackRewards () = {
478- let bM = invoke(G(), "claimProfit", [toBase58String(F())], nil)
479- if ((bM == bM))
543+ let ce = invoke(P(), "claimProfit", [L()], nil)
544+ if ((ce == ce))
480545 then {
481- let bN = {
482- let bO = bM
483- if ($isInstanceOf(bO, "Int"))
546+ let cf = {
547+ let cg = ce
548+ if ($isInstanceOf(cg, "Int"))
484549 then {
485- let bP = bO
486- N(bP)
550+ let ch = cg
551+ X(ch)
487552 }
488553 else throw("Invalid claimProfit response")
489554 }
490- let bQ = if ((bN > 0))
555+ let ci = if ((cf > 0))
491556 then {
492- let aD = aB(bN)
493- let bB = invoke(G(), "deposit", nil, [AttachedPayment(F(), L(bN))])
494- if ((bB == bB))
495- then (aY(bN) ++ bc(aD))
557+ let aP = aN(cf)
558+ let bT = invoke(P(), "deposit", nil, [AttachedPayment(M(), U(cf))])
559+ if ((bT == bT))
560+ then (bk(cf) ++ br(aP))
496561 else throw("Strict value is not equal to itself.")
497562 }
498563 else nil
499- if ((bQ == bQ))
500- then bQ
564+ if ((ci == ci))
565+ then ci
501566 else throw("Strict value is not equal to itself.")
502567 }
503568 else throw("Strict value is not equal to itself.")
504569 }
505570
506571
507572
508-@Callable(bs)
509-func view_reward (ad) = {
510- let aZ = ac(ad)
511- let bR = R(ae(ad), aZ)
512- let bS = R(ab(), aZ)
513- let bT = (bS - bR)
514- throw(toString(bT))
573+@Callable(bH)
574+func view_reward (an) = {
575+ let bl = am(an)
576+ let cj = ab(ao(an), bl)
577+ let ck = ab(al(), bl)
578+ let cl = (ck - cj)
579+ throw(toString(cl))
515580 }
516581
517582
518583
519-@Callable(bs)
520-func view_stakingReward (ad) = {
521- let aQ = aM(ad, 0)._3
522- throw(toString(L(aQ)))
584+@Callable(bH)
585+func view_stakingReward (an) = {
586+ let bc = aY(an, 0)._3
587+ throw(toString(U(bc)))
523588 }
524589
525590
526591
527-@Callable(bs)
528-func view_withdrawLimit (ad) = {
529- let az = au(ad)._2
530- let bU = L(R(az, ab()))
531- throw(toString(bU))
592+@Callable(bH)
593+func view_withdrawLimit (an) = {
594+ let aL = aG(an)._2
595+ let cm = U(ab(aL, al()))
596+ throw(toString(cm))
532597 }
533598
534599
535-@Verifier(bV)
536-func bW () = {
537- let bX = getString(this, r)
538- if (isDefined(bX))
600+@Verifier(cn)
601+func co () = {
602+ let cp = getString(this, v)
603+ if (isDefined(cp))
539604 then {
540- let bY = getString(addressFromStringValue(value(bX)), v)
541- if (isDefined(bY))
542- then valueOrElse(getBoolean(addressFromStringValue(value(bY)), ((("status_" + toString(this)) + "_") + toBase58String(bV.id))), false)
605+ let cq = getString(addressFromStringValue(value(cp)), z)
606+ if (isDefined(cq))
607+ then valueOrElse(getBoolean(addressFromStringValue(value(cq)), ((("status_" + toString(this)) + "_") + toBase58String(cn.id))), false)
543608 else throw("unable to verify: admin not set in coordinator")
544609 }
545- else sigVerify(bV.bodyBytes, bV.proofs[0], bV.senderPublicKey)
610+ else sigVerify(cn.bodyBytes, cn.proofs[0], cn.senderPublicKey)
546611 }
547612

github/deemru/w8io/03bedc9 
198.14 ms