tx · 3h8xhYRF5cxkMfn4fvurktApshWzRcmVUjoaWh9rNQSc

3N4nHmaqzXEcEUFfkVAJ4UPumE18cSSXRxb:  -0.02600000 Waves

2024.12.19 10:20 [3421108] smart account 3N4nHmaqzXEcEUFfkVAJ4UPumE18cSSXRxb > SELF 0.00000000 Waves

{ "type": 13, "id": "3h8xhYRF5cxkMfn4fvurktApshWzRcmVUjoaWh9rNQSc", "fee": 2600000, "feeAssetId": null, "timestamp": 1734592878033, "version": 2, "chainId": 84, "sender": "3N4nHmaqzXEcEUFfkVAJ4UPumE18cSSXRxb", "senderPublicKey": "4e8nyCPhd9hc1bJSrDy6baS84t4tPcqyuEw7CYD2YyNi", "proofs": [ "3xscVX137HHMKu8mUWokc4gMBrn4gVTAP8YVgqzqaJrahgefgZDwu6LDCoTSYTYTdEboSqV2qaXj7pL3sWDy5Tux" ], "script": "base64:BgIvCAISBwoFCAgICAESBwoFCAgICAESABIDCgEIEgASBAoCCAESBQoDCAgBEgMKAQhHAAdWRVJTSU9OAgxQTS0wLjkuMS1ERVYACWNvbmZpZ1N0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzAg1jb25maWdBZGRyZXNzAiMzTjkxZTd3SGlWN1FhZERzeDNSVUpReHgxZXRxY0FLcmZIagAOQ09ORklHX0FERFJFU1MDCQAAAgUJY29uZmlnU3RyAgAFBHRoaXMJAQdBZGRyZXNzAQkA2QQBBQljb25maWdTdHIAFUFzc2V0c1dlaWdodHNEZWNpbWFscwAEAAVTY2FsZQCQTgAGU2NhbGU4AIDC1y8AB1NjYWxlMTYAgICE/qbe4REACEZlZVNjYWxlAJBOABFQb29sVG9rZW5EZWNpbWFscwAIAA5Qb29sVG9rZW5TY2FsZQkAbAYACgAABRFQb29sVG9rZW5EZWNpbWFscwAAAAAFBkhBTEZVUAAQTUlOX1NURVBTX0FNT1VOVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5DT05GSUdfQUREUkVTUwIQbWluX3N0ZXBzX2Ftb3VudAABABBNQVhfU1RFUFNfQU1PVU5UCQELdmFsdWVPckVsc2UCCQCaCAIFDkNPTkZJR19BRERSRVNTAhBtYXhfc3RlcHNfYW1vdW50APQDABJNSU5fU1RFUFNfSU5URVJWQUwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOQ09ORklHX0FERFJFU1MCEm1pbl9zdGVwc19pbnRlcnZhbAABABJNQVhfU1RFUFNfSU5URVJWQUwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOQ09ORklHX0FERFJFU1MCEm1heF9zdGVwc19pbnRlcnZhbACQTgAKTUlOX1dFSUdIVAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ5DT05GSUdfQUREUkVTUwIKbWluX3dlaWdodABkAApNQVhfV0VJR0hUCQELdmFsdWVPckVsc2UCCQCaCAIFDkNPTkZJR19BRERSRVNTAgptYXhfd2VpZ2h0AKxNAQ10cnlHZXRJbnRlZ2VyAQNrZXkEByRtYXRjaDAJAJoIAgUEdGhpcwUDa2V5AwkAAQIFByRtYXRjaDACA0ludAQBYgUHJG1hdGNoMAUBYgAAAQx0cnlHZXRCaW5hcnkBA2tleQQHJG1hdGNoMAkAnAgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQBYgUHJG1hdGNoMAUBYgEAAQx0cnlHZXRTdHJpbmcBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiAgABE3RyeUdldFN0cmluZ09yVGhyb3cBA2tleQQHJG1hdGNoMAkAnQgCBQR0aGlzBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFiBQckbWF0Y2gwBQFiCQACAQkArAICAh1ubyBzdWNoIGtleSBpbiBkYXRhIHN0b3JhZ2U6IAUDa2V5AQ5nZXRBc3NldFN0cmluZwEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAFiBQckbWF0Y2gwCQDYBAEFAWICBVdBVkVTAQ1nZXRBc3NldEJ5dGVzAQphc3NldElkU3RyAwkAAAIFCmFzc2V0SWRTdHICBVdBVkVTBQR1bml0CQDZBAEFCmFzc2V0SWRTdHIBD2dldFRva2VuQmFsYW5jZQEHYXNzZXRJZAQHJG1hdGNoMAUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAF0BQckbWF0Y2gwCQDwBwIFBHRoaXMFAXQICQDvBwEFBHRoaXMJYXZhaWxhYmxlARNhZGRBc3NldEJ5dGVzVG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ1nZXRBc3NldEJ5dGVzAQUEaXRlbQUDbmlsARRhZGRBc3NldFdlaWdodFRvTGlzdAIFYWNjdW0EaXRlbQkAzggCBQVhY2N1bQkAzAgCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdzdGF0aWNfCQEOZ2V0QXNzZXRTdHJpbmcBBQRpdGVtAgdfd2VpZ2h0BQNuaWwBF2FkZEFzc2V0V2VpZ2h0VG9TdHJMaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAKQDAQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwUEaXRlbQIHX3dlaWdodAUDbmlsARZhZGRBc3NldERlY2ltYWxzVG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18JAQ5nZXRBc3NldFN0cmluZwEFBGl0ZW0CCV9kZWNpbWFscwUDbmlsARNhZGRBc3NldFNjYWxlVG9MaXN0AgVhY2N1bQRpdGVtCQDOCAIFBWFjY3VtCQDMCAIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18JAQ5nZXRBc3NldFN0cmluZwEFBGl0ZW0CBl9zY2FsZQUDbmlsAQxhZGRJbnRUb0xpc3QCBWFjY3VtBGl0ZW0JAM4IAgUFYWNjdW0JAMwIAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQNuaWwADnVzZG5Bc3NldElkU3RyCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAg51c2RuQXNzZXRJZFN0cgIsREcyeEZrUGREd0tVb0JrekdBaFF0THBTR3pmWExpQ1lQRXplS0gyQWQyNHAAEHB1enpsZUFzc2V0SWRTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCEHB1enpsZUFzc2V0SWRTdHICLEhFQjhRYXc5eHJXcFdzOHRIc2lBVFlHQldEQnRQMlM3a2NQQUxyTXU0M0FTAA51c2R0QXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIOdXNkdEFzc2V0SWRTdHICLDM0TjlZY0VFVExXbjkzcVlRNjRFc1AxeDg5dFNydUpVNDRSckVNU1hYRVBKABF1c2R0UHB0QXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIRdXNkdFBwdEFzc2V0SWRTdHICLDl3YzNMWE5BNFRFQnNYeUt0b0xFOW1yYkREN1dNSFh2WHJDalp2YWJMQXNpAA5yb21lQXNzZXRJZFN0cgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIOcm9tZUFzc2V0SWRTdHICLEFQNENiNXhMWUdINlppZ0hyZUNaSG9YcFFUV0RrUHNHMkJIcWZEVXg2dGFKAA93YXZlc0Fzc2V0SWRTdHICBVdBVkVTAAt1c2RuQXNzZXRJZAkA2QQBBQ51c2RuQXNzZXRJZFN0cgANcHV6emxlQXNzZXRJZAkA2QQBBRBwdXp6bGVBc3NldElkU3RyAAt1c2R0QXNzZXRJZAkA2QQBBQ51c2R0QXNzZXRJZFN0cgAOdXNkdFBwdEFzc2V0SWQJANkEAQURdXNkdFBwdEFzc2V0SWRTdHIAC3JvbWVBc3NldElkCQDZBAEFDnJvbWVBc3NldElkU3RyAAx3YXZlc0Fzc2V0SWQFBHVuaXQAFXN1cHBvcnRlZEZlZUFzc2V0c1N0cgkAzAgCBQ51c2RuQXNzZXRJZFN0cgkAzAgCBRBwdXp6bGVBc3NldElkU3RyCQDMCAIFDnVzZHRBc3NldElkU3RyCQDMCAIFEXVzZHRQcHRBc3NldElkU3RyCQDMCAIFD3dhdmVzQXNzZXRJZFN0cgkAzAgCBQ5yb21lQXNzZXRJZFN0cgUDbmlsAA1vcmFjbGVBZGRyZXNzCQEHQWRkcmVzcwEJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwINb3JhY2xlQWRkcmVzcwIjM045MWU3d0hpVjdRYWREc3gzUlVKUXh4MWV0cWNBS3JmSGoAC2ZlZXNBZGRyZXNzCQEHQWRkcmVzcwEJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwILZmVlc0FkZHJlc3MCIzNOOTFlN3dIaVY3UWFkRHN4M1JVSlF4eDFldHFjQUtyZkhqABJzaHV0ZG93bkFkZHJlc3NTdHIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCD3NodXRkb3duQWRkcmVzcwIjM045MWU3d0hpVjdRYWREc3gzUlVKUXh4MWV0cWNBS3JmSGoAD2xheWVyMkFkZHJlc3NlcwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIPbGF5ZXIyQWRkcmVzc2VzAiMzTjkxZTd3SGlWN1FhZERzeDNSVUpReHgxZXRxY0FLcmZIagARY29sZE1hc3RlckFkZHJlc3MJAQdBZGRyZXNzAQkA2QQBCQELdmFsdWVPckVsc2UCCQCdCAIFDkNPTkZJR19BRERSRVNTAhFjb2xkTWFzdGVyQWRkcmVzcwIjM045MWU3d0hpVjdRYWREc3gzUlVKUXh4MWV0cWNBS3JmSGoAEWNhbGN1bGF0b3JBY2NvdW50CQEHQWRkcmVzcwEJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5DT05GSUdfQUREUkVTUwIOZmFjdG9yeUFkZHJlc3MCIzNOMXl0QVV5aHRpZzlYNkYyaEhIczFqYnpZeHI0N1lwOEZyAA5mYWN0b3J5QWNjb3VudAkBB0FkZHJlc3MBCQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCDmZhY3RvcnlBZGRyZXNzAiMzTXNnemJ0Umc4TkVrYlRjSEJ5d3R3VGRDZTlCUnhNUW81VAAMbWFzdGVyUHViS2V5CQDZBAEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUOQ09ORklHX0FERFJFU1MCDG1hc3RlclB1YktleQIsNHo4Q0tTWVFCS2t6eDdQQmI1dUJQMVlQYTZZQUhSTlRBcFcxc1FWSFQ1ZVUAAVQJAQ10cnlHZXRJbnRlZ2VyAQITc3RhdGljX3Rva2Vuc0Ftb3VudAAIYXNzZXRJZHMKAAIkbAkAtQkCCQEMdHJ5R2V0U3RyaW5nAQIPc3RhdGljX3Rva2VuSWRzAgEsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARNhZGRBc3NldEJ5dGVzVG9MaXN0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAA1Bc3NldHNXZWlnaHRzCgACJGwFCGFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJARRhZGRBc3NldFdlaWdodFRvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgAIRGVjaW1hbHMKAAIkbAUIYXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBFmFkZEFzc2V0RGVjaW1hbHNUb0xpc3QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoABlNjYWxlcwoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmM18xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQETYWRkQXNzZXRTY2FsZVRvTGlzdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmM18yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjNfMgIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIJAQUkZjNfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgADRmVlCQENdHJ5R2V0SW50ZWdlcgECCnN0YXRpY19mZWUADGVhcm5lZEFzc2V0cwUIYXNzZXRJZHMBDWdldFBvb2xTdGF0dXMABAZwb29sSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUOZmFjdG9yeUFjY291bnQJAKwCAgIGcG9vbF9fCQClCAEFBHRoaXMAAAQGc3RhdHVzCQELdmFsdWVPckVsc2UCCQCaCAIFDmZhY3RvcnlBY2NvdW50CQCsAgICDnBvb2xfX3N0YXR1c19fCQCkAwEFBnBvb2xJZAACBQZzdGF0dXMBCmdldFNldHRpbmcBA2tleQkBEUBleHRyTmF0aXZlKDEwNTApAgUOZmFjdG9yeUFjY291bnQJAKwCAgIHc2V0dXBfXwUDa2V5ABRJbml0YWxXYXZlc0xpcXVpZGl0eQkBCmdldFNldHRpbmcBAhB2aXJ0dWFsTGlxdWlkaXR5AAtDcmVhdGlvbkZlZQkBCmdldFNldHRpbmcBAgtjcmVhdGlvbkZlZQALQ3VydmVUYXJnZXQJAQpnZXRTZXR0aW5nAQILY3VydmVUYXJnZXQBCmlzU2h1dGRvd24ABA9zaHV0ZG93bkFkZHJlc3MJAKYIAQUSc2h1dGRvd25BZGRyZXNzU3RyAwkAAAIFD3NodXRkb3duQWRkcmVzcwUEdW5pdAcEByRtYXRjaDAJAJsIAgkBBXZhbHVlAQUPc2h1dGRvd25BZGRyZXNzAgtpc19zaHV0ZG93bgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAF4BQckbWF0Y2gwBQF4BwESZ2V0UHJpY2VGcm9tT3JhY2xlAQphc3NldElkU3RyBAckbWF0Y2gwCQCaCAIFDW9yYWNsZUFkZHJlc3MJAKwCAgUKYXNzZXRJZFN0cgIHX3R3YXA1QgMJAAECBQckbWF0Y2gwAgNJbnQEAXgFByRtYXRjaDAFAXgAwIQ9ARFjYWxjdWxhdGVVc2RWYWx1ZQMHYXNzZXRJZAZhbW91bnQIYUJhbGFuY2UEC2Fzc2V0V2VpZ2h0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdzdGF0aWNfCQEOZ2V0QXNzZXRTdHJpbmcBBQdhc3NldElkAgdfd2VpZ2h0BAtmZWVBc3NldFN0cgkBDHRyeUdldFN0cmluZwECD3N0YXRpY19mZWVUb2tlbgQNZmVlQXNzZXRTY2FsZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgICB3N0YXRpY18FC2ZlZUFzc2V0U3RyAgZfc2NhbGUEC2ZlZUFzc2V0TnVtCQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzCQENZ2V0QXNzZXRCeXRlcwEFC2ZlZUFzc2V0U3RyBA5mZWVBc3NldFdlaWdodAkAkQMCBQ1Bc3NldHNXZWlnaHRzBQtmZWVBc3NldE51bQQPZmVlQXNzZXRCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfBQtmZWVBc3NldFN0cgIIX2JhbGFuY2UEDXZhbEluRmVlQXNzZXQJAGsDBQZhbW91bnQJAGkCBQ9mZWVBc3NldEJhbGFuY2UFDmZlZUFzc2V0V2VpZ2h0CQBpAgUIYUJhbGFuY2UFC2Fzc2V0V2VpZ2h0BA1mZWVBc3NldFByaWNlCQESZ2V0UHJpY2VGcm9tT3JhY2xlAQULZmVlQXNzZXRTdHIJAGsDBQ12YWxJbkZlZUFzc2V0BQ1mZWVBc3NldFByaWNlBQ1mZWVBc3NldFNjYWxlARJjYWxjdWxhdGVPdXRBbW91bnQFCEFtb3VudEluB2Fzc2V0SW4IYXNzZXRPdXQJQmFsYW5jZUluCkJhbGFuY2VPdXQEB0luZGV4SW4JAQV2YWx1ZQEJAM8IAgUIYXNzZXRJZHMFB2Fzc2V0SW4ECEluZGV4T3V0CQEFdmFsdWUBCQDPCAIFCGFzc2V0SWRzBQhhc3NldE91dAMJAAACBQdJbmRleEluBQhJbmRleE91dAUIQW1vdW50SW4JAG4EBQpCYWxhbmNlT3V0CQBlAgkAaAIFBlNjYWxlOAUGU2NhbGU4CQCgAwEJAHYGCQC9AgQJALkCAgkAtgIBBQlCYWxhbmNlSW4JALYCAQCQTgkAtgIBCQBoAgUGU2NhbGU4BQZTY2FsZTgJALkCAgkAtgIBCQBkAgUJQmFsYW5jZUluBQhBbW91bnRJbgkAtgIBAJBOBQZIQUxGVVAAEAkAtgIBCQBrAwkAkQMCBQ1Bc3NldHNXZWlnaHRzBQdJbmRleEluAICglKWNHQkAkQMCBQ1Bc3NldHNXZWlnaHRzBQhJbmRleE91dAAMABAFB0NFSUxJTkcJAGgCBQZTY2FsZTgFBlNjYWxlOAUISEFMRkVWRU4BHWNhbGN1bGF0ZUN1cnJlbnRBc3NldEludGVyZXN0BAdhc3NldElkCmFzc2V0SWRTdHIIYUJhbGFuY2UWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawQLdG90YWxTdGFrZWQJAQ10cnlHZXRJbnRlZ2VyAQISZ2xvYmFsX2luZGV4U3Rha2VkBBV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sFFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEE2N1cnJlbnRCYWxhbmNlRGVsdGEJAGUCCQEPZ2V0VG9rZW5CYWxhbmNlAQUHYXNzZXRJZAUIYUJhbGFuY2UEFGN1cnJlbnRUb2tlbkVhcm5pbmdzAwkAZgIFE2N1cnJlbnRCYWxhbmNlRGVsdGEFFXRva2VuQmFsYW5jZUxhc3RDaGVjawUTY3VycmVudEJhbGFuY2VEZWx0YQUVdG9rZW5CYWxhbmNlTGFzdENoZWNrBAtuZXdFYXJuaW5ncwkAZQIFFGN1cnJlbnRUb2tlbkVhcm5pbmdzBRV0b2tlbkJhbGFuY2VMYXN0Q2hlY2sEC25ld0ludGVyZXN0AwkAAAIFC3RvdGFsU3Rha2VkAAAAAAkAawMFC25ld0Vhcm5pbmdzBQZTY2FsZTgFC3RvdGFsU3Rha2VkBBFsYXN0Q2hlY2tJbnRlcmVzdAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAkAZAIFEWxhc3RDaGVja0ludGVyZXN0BQtuZXdJbnRlcmVzdAELY2xhaW1SZXN1bHQBB2FkZHJlc3MECmFkZHJlc3NTdHIJAKUIAQUHYWRkcmVzcwQMcHV6emxlQW1vdW50CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYWRkcmVzc1N0cgIMX2luZGV4U3Rha2VkCgEHaGFuZGxlcgIFYWNjdW0HYXNzZXRJZAQKYXNzZXRJZFN0cgkBDmdldEFzc2V0U3RyaW5nAQUHYXNzZXRJZAQIYUJhbGFuY2UJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB2dsb2JhbF8JAQ5nZXRBc3NldFN0cmluZwEFB2Fzc2V0SWQCCF9iYWxhbmNlBBZ0b2tlbkVhcm5pbmdzTGFzdENoZWNrCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAhFnbG9iYWxfbGFzdENoZWNrXwUKYXNzZXRJZFN0cgIJX2Vhcm5pbmdzBBRjdXJyZW50VG9rZW5JbnRlcmVzdAkBHWNhbGN1bGF0ZUN1cnJlbnRBc3NldEludGVyZXN0BAUHYXNzZXRJZAUKYXNzZXRJZFN0cgUIYUJhbGFuY2UFFnRva2VuRWFybmluZ3NMYXN0Q2hlY2sEFGN1cnJlbnRUb2tlbkVhcm5pbmdzCQCWAwEJAMwIAgUWdG9rZW5FYXJuaW5nc0xhc3RDaGVjawkAzAgCCQBlAgkBD2dldFRva2VuQmFsYW5jZQEFB2Fzc2V0SWQFCGFCYWxhbmNlBQNuaWwEDHJld2FyZEFtb3VudAkAawMFDHB1enpsZUFtb3VudAkAZQIFFGN1cnJlbnRUb2tlbkludGVyZXN0CQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICC19sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QFBlNjYWxlOAQIdHJhbnNmZXIDCQAAAgUMcmV3YXJkQW1vdW50AAAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQdhZGRyZXNzBQxyZXdhcmRBbW91bnQFB2Fzc2V0SWQFA25pbAkAlAoCCQDOCAIJAM4IAggFBWFjY3VtAl8xBQh0cmFuc2ZlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgICEWdsb2JhbF9sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfZWFybmluZ3MJAGUCBRRjdXJyZW50VG9rZW5FYXJuaW5ncwUMcmV3YXJkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIRZ2xvYmFsX2xhc3RDaGVja18FCmFzc2V0SWRTdHICCV9pbnRlcmVzdAUUY3VycmVudFRva2VuSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFCmFkZHJlc3NTdHICC19sYXN0Q2hlY2tfBQphc3NldElkU3RyAglfaW50ZXJlc3QFFGN1cnJlbnRUb2tlbkludGVyZXN0BQNuaWwJAGQCCAUFYWNjdW0CXzIJARFjYWxjdWxhdGVVc2RWYWx1ZQMFB2Fzc2V0SWQFDHJld2FyZEFtb3VudAUIYUJhbGFuY2UEBWFjY3VtCgACJGwFDGVhcm5lZEFzc2V0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjRfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2hhbmRsZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjRfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGY0XzICCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECCQEFJGY0XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJQKAgkAzggCCAUFYWNjdW0CXzEJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUKYWRkcmVzc1N0cgIRX2NsYWltZWRSZXdhcmRVU0QJAGQCCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgUKYWRkcmVzc1N0cgIRX2NsYWltZWRSZXdhcmRVU0QIBQVhY2N1bQJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQphZGRyZXNzU3RyAgpfbGFzdENsYWltCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsCAUFYWNjdW0CXzIBA3N1bQIFYWNjdW0BbgkAZAIFBWFjY3VtCQENcGFyc2VJbnRWYWx1ZQEFAW4BDWNoZWNrRmVlQXNzZXQCBWFjY3VtBG5leHQDAwkBAiE9AgkAzwgCBRVzdXBwb3J0ZWRGZWVBc3NldHNTdHIFBG5leHQFBHVuaXQJAAACBQVhY2N1bQIABwUEbmV4dAUFYWNjdW0BDHN3YXBJbnRlcm5hbAUHYXNzZXRJbghhc3NldE91dAhhbW91bnRJbgdtaW5pbXVtFHJlY2VpcGllbnRBZGRyZXNzU3RyBAhBbW91bnRJbgUIYW1vdW50SW4EB0Fzc2V0SW4JAQ1nZXRBc3NldEJ5dGVzAQUHYXNzZXRJbgQIQXNzZXRPdXQJAQ1nZXRBc3NldEJ5dGVzAQUIYXNzZXRPdXQEB3NjYWxlSW4JAGkCBQZTY2FsZTgJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18FB2Fzc2V0SW4CBl9zY2FsZQQIc2NhbGVPdXQJAGkCBQZTY2FsZTgJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB3N0YXRpY18FCGFzc2V0T3V0AgZfc2NhbGUEDmZlZUFzc2V0T3V0U3RyCQEMdHJ5R2V0U3RyaW5nAQIPc3RhdGljX2ZlZVRva2VuBAtmZWVBc3NldE91dAMJAAACBQ5mZWVBc3NldE91dFN0cgIABQx3YXZlc0Fzc2V0SWQJAQ1nZXRBc3NldEJ5dGVzAQUOZmVlQXNzZXRPdXRTdHIEDkFzc2V0SW5CYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfCQEOZ2V0QXNzZXRTdHJpbmcBBQdBc3NldEluAghfYmFsYW5jZQQPQXNzZXRPdXRCYWxhbmNlCQENdHJ5R2V0SW50ZWdlcgEJAKwCAgkArAICAgdnbG9iYWxfBQhhc3NldE91dAIIX2JhbGFuY2UEFEFzc2V0SW5CYWxhbmNlU2NhbGVkCQBoAgUOQXNzZXRJbkJhbGFuY2UFB3NjYWxlSW4EFUFzc2V0T3V0QmFsYW5jZVNjYWxlZAkAaAIFD0Fzc2V0T3V0QmFsYW5jZQUIc2NhbGVPdXQEC2ZlZUFtb3VudEluCQBrAwUIQW1vdW50SW4FA0ZlZQUIRmVlU2NhbGUEDWNsZWFuQW1vdW50SW4JAGUCBQhBbW91bnRJbgULZmVlQW1vdW50SW4EE2NsZWFuQW1vdW50SW5TY2FsZWQJAGgCBQ1jbGVhbkFtb3VudEluBQdzY2FsZUluBApBbW91bnRPdXQxCQESY2FsY3VsYXRlT3V0QW1vdW50BQUTY2xlYW5BbW91bnRJblNjYWxlZAUHQXNzZXRJbgUIQXNzZXRPdXQFFEFzc2V0SW5CYWxhbmNlU2NhbGVkBRVBc3NldE91dEJhbGFuY2VTY2FsZWQECUFtb3VudE91dAkAawMFCkFtb3VudE91dDEAAQUIc2NhbGVPdXQEEEFzc2V0T3V0QmFsYW5jZTIJAGUCBQ9Bc3NldE91dEJhbGFuY2UFCUFtb3VudE91dAQPQXNzZXRJbkJhbGFuY2UyCQBkAgUOQXNzZXRJbkJhbGFuY2UFDWNsZWFuQW1vdW50SW4EEmZlZUFzc2V0T3V0QmFsYW5jZQMJAAACBQtmZWVBc3NldE91dAUHQXNzZXRJbgUPQXNzZXRJbkJhbGFuY2UyAwkAAAIFC2ZlZUFzc2V0T3V0BQhBc3NldE91dAUQQXNzZXRPdXRCYWxhbmNlMgkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQULZmVlQXNzZXRPdXQCCF9iYWxhbmNlBAxmZWVBbW91bnRPdXQJARJjYWxjdWxhdGVPdXRBbW91bnQFBQtmZWVBbW91bnRJbgUHQXNzZXRJbgULZmVlQXNzZXRPdXQFDkFzc2V0SW5CYWxhbmNlBRJmZWVBc3NldE91dEJhbGFuY2UDCQBmAgUHbWluaW11bQUJQW1vdW50T3V0CQACAQIpYW1vdW50IHRvIHJlY2lldmUgaXMgbG93ZXIgdGhhbiBnaXZlbiBvbmUDCQAAAgUIQXNzZXRPdXQFB0Fzc2V0SW4JAAIBAhh0aGlzIHN3YXAgaXMgbm90IGFsbG93ZWQDCQBmAgAACQBlAgUPQXNzZXRPdXRCYWxhbmNlBQlBbW91bnRPdXQJAAIBAhtjb250cmFjdCBpcyBvdXQgb2YgcmVzZXJ2ZXMDCQEKaXNTaHV0ZG93bgAJAAIBAhNjb250cmFjdCBpcyBvbiBzdG9wBApjcmVhdG9yRmVlCQBrAwUMZmVlQW1vdW50T3V0AAEACgQLcHJvdG9jb2xGZWUJAGsDBQxmZWVBbW91bnRPdXQACQAKBAxuZXdCYWxhbmNlSW4FD0Fzc2V0SW5CYWxhbmNlMgQNbmV3QmFsYW5jZU91dAkAZQIFEEFzc2V0T3V0QmFsYW5jZTIDCQAAAgUIQXNzZXRPdXQFC2ZlZUFzc2V0T3V0BQxmZWVBbW91bnRPdXQAAAQSbmV3QmFsYW5jZUZlZUFzc2V0AwMJAQIhPQIFC2ZlZUFzc2V0T3V0BQdBc3NldEluCQECIT0CBQtmZWVBc3NldE91dAUIQXNzZXRPdXQHCQBlAgUSZmVlQXNzZXRPdXRCYWxhbmNlBQxmZWVBbW91bnRPdXQFBHVuaXQEDWFzc2V0SW5DaGFuZ2UJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQUHQXNzZXRJbgIIX2JhbGFuY2UFDG5ld0JhbGFuY2VJbgQOYXNzZXRPdXRDaGFuZ2UJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHZ2xvYmFsXwUIYXNzZXRPdXQCCF9iYWxhbmNlBQ1uZXdCYWxhbmNlT3V0BBFmZWVBc3NldE91dENoYW5nZQMJAQIhPQIFEm5ld0JhbGFuY2VGZWVBc3NldAUEdW5pdAkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdnbG9iYWxfCQEOZ2V0QXNzZXRTdHJpbmcBBQtmZWVBc3NldE91dAIIX2JhbGFuY2UJAQV2YWx1ZQEFEm5ld0JhbGFuY2VGZWVBc3NldAkBC1N0cmluZ0VudHJ5AgIFaGVsbG8CBXdvcmxkBA92b2x1bWVVc2RVcGRhdGUJARFjYWxjdWxhdGVVc2RWYWx1ZQMFB0Fzc2V0SW4FCEFtb3VudEluBQ5Bc3NldEluQmFsYW5jZQkAlAoCCQDMCAIFDmFzc2V0T3V0Q2hhbmdlCQDMCAIFDWFzc2V0SW5DaGFuZ2UJAMwIAgURZmVlQXNzZXRPdXRDaGFuZ2UJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUUcmVjZWlwaWVudEFkZHJlc3NTdHIFCUFtb3VudE91dAUIQXNzZXRPdXQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBDHRyeUdldFN0cmluZwECEHN0YXRpY19wb29sT3duZXIFCmNyZWF0b3JGZWUFC2ZlZUFzc2V0T3V0CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhRnbG9iYWxfZWFybmVkQnlPd25lcgkAZAIJAQ10cnlHZXRJbnRlZ2VyAQIUZ2xvYmFsX2Vhcm5lZEJ5T3duZXIFCmNyZWF0b3JGZWUJAMwIAgkBDEludGVnZXJFbnRyeQICEWdsb2JhbF92b2x1bWVfdXNkCQBkAgkBDXRyeUdldEludGVnZXIBAhFnbG9iYWxfdm9sdW1lX3VzZAUPdm9sdW1lVXNkVXBkYXRlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMF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c2V0TnVtAwkAZwIFCGFzc2V0TnVtCQCQAwEFCmFzc2V0SWRzTGkFBWFjY3VtBA1hc3NldERlY2ltYWxzAAgJAM4IAgUFYWNjdW0JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdzdGF0aWNfCQCRAwIFDWFzc2V0SWRzU3RyTGkFCGFzc2V0TnVtAgZfc2NhbGUJAGwGAAoAAAUNYXNzZXREZWNpbWFscwAAAAAFBERPV04JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdzdGF0aWNfCQCRAwIFDWFzc2V0SWRzU3RyTGkFCGFzc2V0TnVtAglfZGVjaW1hbHMFDWFzc2V0RGVjaW1hbHMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICAgdzdGF0aWNfCQCRAwIFDWFzc2V0SWRzU3RyTGkFCGFzc2V0TnVtAgdfd2VpZ2h0CQEFdmFsdWUBCQC2CQEJAJEDAgURYXNzZXRXZWlnaHRzU3RyTGkFCGFzc2V0TnVtBQNuaWwEEWluaXRpYWxQb29sVG9rZW5zCQEZY2FsY3VsYXRlUG9vbFRva2Vuc0Ftb3VudAEIBQFpCHBheW1lbnRzAwkBAiE9AgUPYXNzZXRXZWlnaHRzU3VtAJBOCQACAQIrc3VtIG9mIHRva2VuIHdlaWdodHMgbXVzdCBiZSBlcXVhbCB0byAxMDAwMAMJAAACBRFpbml0aWFsUG9vbFRva2VucwAACQACAQIyeW91IG5lZWQgYSBiaWdnZXIgdG9rZW5zIGFtb3VudCB0byBsYXVuY2ggdGhlIHBvb2wEDnBvb2xUb2tlbklzc3VlCQDDCAcJAKwCAgIDUFogBQpwb29sRG9tYWluAh1QdXp6bGUgU3dhcDogcG9vbCBpbmRleCB0b2tlbgURaW5pdGlhbFBvb2xUb2tlbnMFEVBvb2xUb2tlbkRlY2ltYWxzBgUEdW5pdAAABAtwb29sVG9rZW5JZAkAuAgBBQ5wb29sVG9rZW5Jc3N1ZQkAlAoCCQDOCAIJAM4IAgkAzggCCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjdfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBE2FkZFRva2VuRGF0YUVudHJpZXMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjdfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGY3XzICCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECCQEFJGY3XzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAMwIAgUEbWVtZQkAzAgCCQELU3RyaW5nRW50cnkCAg9zdGF0aWNfdG9rZW5JZHMFC2Fzc2V0SWRzU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQICD3N0YXRpY19mZWVUb2tlbgULZmVlQXNzZXRTdHIJAMwIAgkBC1N0cmluZ0VudHJ5AgITc3RhdGljX3Rva2VuV2VpZ2h0cwUPYXNzZXRXZWlnaHRzU3RyCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhNzdGF0aWNfdG9rZW5zQW1vdW50CQCQAwEFCmFzc2V0SWRzTGkJAMwIAgkBC1N0cmluZ0VudHJ5AgIRc3RhdGljX3Bvb2xEb21haW4FCnBvb2xEb21haW4JAMwIAgkBC1N0cmluZ0VudHJ5AgISc3RhdGljX2Jhc2VUb2tlbklkBQ5iYXNlVG9rZW5JZFN0cgkAzAgCCQELU3RyaW5nRW50cnkCAhBzdGF0aWNfcG9vbE93bmVyBQlwb29sT3duZXIJAMwIAgkBDEludGVnZXJFbnRyeQICCnN0YXRpY19mZWUFA2ZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgIMc3RhdGljX0tNdWx0BQdTY2FsZTE2CQDMCAIJAQxJbnRlZ2VyRW50cnkCAhNnbG9iYWxfd2FzUHJlSW5pdGVkAAEFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgIUZ2xvYmFsX1dBVkVTX2JhbGFuY2UFFEluaXRhbFdhdmVzTGlxdWlkaXR5CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgIHZ2xvYmFsXwUJbWVtZUlkU3RyAghfYmFsYW5jZQUNdG9rZW5RdWFudGl0eQUDbmlsCQDMCAIFDnBvb2xUb2tlbklzc3VlCQDMCAIJAQxJbnRlZ2VyRW50cnkCAhdnbG9iYWxfcG9vbFRva2VuX2Ftb3VudAURaW5pdGlhbFBvb2xUb2tlbnMJAMwIAgkBDEludGVnZXJFbnRyeQICEGdsb2JhbF93YXNJbml0ZWQAAQkAzAgCCQELQmluYXJ5RW50cnkCAhNnbG9iYWxfcG9vbFRva2VuX2lkBQtwb29sVG9rZW5JZAkAzAgCCQELU3RyaW5nRW50cnkCAhZzdGF0aWNfcG9vbFRva2VuX2lkU3RyCQEOZ2V0QXNzZXRTdHJpbmcBBQtwb29sVG9rZW5JZAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQClCAEIBQFpBmNhbGxlcgIMX2luZGV4U3Rha2VkBRFpbml0aWFsUG9vbFRva2VucwkAzAgCCQEMSW50ZWdlckVudHJ5AgISZ2xvYmFsX2luZGV4U3Rha2VkBRFpbml0aWFsUG9vbFRva2VucwUDbmlsBQltZW1lSWRTdHIBaQEEaW5pdAUKcG9vbERvbWFpbglwb29sT3duZXIJdG9rZW5OYW1lCXRva2VuRGVzYw10b2tlblF1YW50aXR5AwkBAiE9AggFAWkGY2FsbGVyBQ5mYWN0b3J5QWNjb3VudAkAAgECCmFkbWluIG9ubHkEBGludjEJAPwHBAUEdGhpcwIIaW5pdFBvb2wJAMwIAgUKcG9vbERvbWFpbgkAzAgCBQlwb29sT3duZXIJAMwIAgUJdG9rZW5OYW1lCQDMCAIFCXRva2VuRGVzYwkAzAgCBQ10b2tlblF1YW50aXR5BQNuaWwFA25pbAMJAAACBQRpbnYxBQRpbnYxBAltZW1lSWRTdHIKAAFABQRpbnYxAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwgJAQxzd2FwSW50ZXJuYWwFAgVXQVZFUwUJbWVtZUlkU3RyCQBlAggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFC0NyZWF0aW9uRmVlAAAJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAl8xCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWNsYWltSW5kZXhSZXdhcmRzAAMJAQppc1NodXRkb3duAAkAAgECE2NvbnRyYWN0IGlzIG9uIHN0b3AJAQtjbGFpbVJlc3VsdAEIBQFpBmNhbGxlcgFpAQ1ldmFsdWF0ZUNsYWltAQR1c2VyCQCUCgIFA25pbAgJAQtjbGFpbVJlc3VsdAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHVzZXICXzIBaQEZd2l0aGRyYXdMaXF1aWRpdHlBdFRhcmdldAAEBnN0YXR1cwkBDWdldFBvb2xTdGF0dXMAAwkBAiE9AggFAWkGY2FsbGVyBQ5mYWN0b3J5QWNjb3VudAkAAgECIWF2YWlsYWJsZSBvbmx5IGZvciBmYWN0b3J5IGludm9rZQMJAAACBQZzdGF0dXMAAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQ5mYWN0b3J5QWNjb3VudAkBD2dldFRva2VuQmFsYW5jZQEJAJEDAgUIYXNzZXRJZHMAAAkAkQMCBQhhc3NldElkcwAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFDmZhY3RvcnlBY2NvdW50CQEPZ2V0VG9rZW5CYWxhbmNlAQkAkQMCBQhhc3NldElkcwABCQCRAwIFCGFzc2V0SWRzAAEFA25pbAkAAgECGXRhcmdldCBpcyBub3QgcmVhY2hlZCB5ZXQBaQEEc3dhcAIIYXNzZXRPdXQHbWluaW11bQQGc3RhdHVzCQENZ2V0UG9vbFN0YXR1cwADCQBmAgACBQZzdGF0dXMEA3BtdAMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAEJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAkAAgECIXBsZWFzZSBhdHRhY2ggZXhhY3RseSBvbmUgcGF5bWVudAQIQW1vdW50SW4JAQV2YWx1ZQEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BAdBc3NldEluCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEA3JlcwkBDHN3YXBJbnRlcm5hbAUJAQ5nZXRBc3NldFN0cmluZwEFB0Fzc2V0SW4FCGFzc2V0T3V0BQhBbW91bnRJbgUHbWluaW11bQkApQgBCAUBaQZjYWxsZXIDCQBmAgkBEUBleHRyTmF0aXZlKDEwNTUpAQIUZ2xvYmFsX1dBVkVTX2JhbGFuY2UFC0N1cnZlVGFyZ2V0BAlub3RpZnlJbnYJAPwHBAUOZmFjdG9yeUFjY291bnQCEm5vdGlmeVN0YXR1c1VwZGF0ZQkAzAgCAAIFA25pbAUDbmlsAwkAAAIFCW5vdGlmeUludgUJbm90aWZ5SW52BQNyZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA3JlcwkAAgECPnBvb2wgaXMgc3RvcHBlZDogbW9zdCBwcm9iYWJseSBpdCByZWFjaGVkIHRoZSB0YXJnZXQgbGlxdWlkaXR5AWkBDHN3YXBSZWFkT25seQMHYXNzZXRJbghhc3NldE91dAhBbW91bnRJbgQHQXNzZXRJbgkBDWdldEFzc2V0Qnl0ZXMBBQdhc3NldEluBAhBc3NldE91dAkBDWdldEFzc2V0Qnl0ZXMBBQhhc3NldE91dAQHc2NhbGVJbgkAaQIFBlNjYWxlOAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwUHYXNzZXRJbgIGX3NjYWxlBAhzY2FsZU91dAkAaQIFBlNjYWxlOAkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHc3RhdGljXwUIYXNzZXRPdXQCBl9zY2FsZQQOZmVlQXNzZXRPdXRTdHIJAQx0cnlHZXRTdHJpbmcBAg9zdGF0aWNfZmVlVG9rZW4EC2ZlZUFzc2V0T3V0AwkAAAIFDmZlZUFzc2V0T3V0U3RyAgAFC3VzZG5Bc3NldElkCQENZ2V0QXNzZXRCeXRlcwEFDmZlZUFzc2V0T3V0U3RyBA5Bc3NldEluQmFsYW5jZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwkBDmdldEFzc2V0U3RyaW5nAQUHQXNzZXRJbgIIX2JhbGFuY2UED0Fzc2V0T3V0QmFsYW5jZQkBDXRyeUdldEludGVnZXIBCQCsAgIJAKwCAgIHZ2xvYmFsXwUIYXNzZXRPdXQCCF9iYWxhbmNlBBRBc3NldEluQmFsYW5jZVNjYWxlZAkAaAIFDkFzc2V0SW5CYWxhbmNlBQdzY2FsZUluBBVBc3NldE91dEJhbGFuY2VTY2FsZWQJAGgCBQ9Bc3NldE91dEJhbGFuY2UFCHNjYWxlT3V0BAtmZWVBbW91bnRJbgkAawMFCEFtb3VudEluBQNGZWUFCEZlZVNjYWxlBA1jbGVhbkFtb3VudEluCQBlAgUIQW1vdW50SW4FC2ZlZUFtb3VudEluBBNjbGVhbkFtb3VudEluU2NhbGVkCQBoAgUNY2xlYW5BbW91bnRJbgUHc2NhbGVJbgQKQW1vdW50T3V0MQkBEmNhbGN1bGF0ZU91dEFtb3VudAUFE2NsZWFuQW1vdW50SW5TY2FsZWQFB0Fzc2V0SW4FCEFzc2V0T3V0BRRBc3NldEluQmFsYW5jZVNjYWxlZAUVQXNzZXRPdXRCYWxhbmNlU2NhbGVkBAlBbW91bnRPdXQJAGsDBQpBbW91bnRPdXQxAAEFCHNjYWxlT3V0BBBBc3NldE91dEJhbGFuY2UyCQBlAgUPQXNzZXRPdXRCYWxhbmNlBQlBbW91bnRPdXQED0Fzc2V0SW5CYWxhbmNlMgkAZAIFDkFzc2V0SW5CYWxhbmNlBQ1jbGVhbkFtb3VudEluBBJmZWVBc3NldE91dEJhbGFuY2UDCQAAAgULZmVlQXNzZXRPdXQFB0Fzc2V0SW4FD0Fzc2V0SW5CYWxhbmNlMgMJAAACBQtmZWVBc3NldE91dAUIQXNzZXRPdXQFEEFzc2V0T3V0QmFsYW5jZTIJAQ10cnlHZXRJbnRlZ2VyAQkArAICCQCsAgICB2dsb2JhbF8JAQ5nZXRBc3NldFN0cmluZwEFC2ZlZUFzc2V0T3V0AghfYmFsYW5jZQQMZmVlQW1vdW50T3V0CQESY2FsY3VsYXRlT3V0QW1vdW50BQULZmVlQW1vdW50SW4FB0Fzc2V0SW4FC2ZlZUFzc2V0T3V0BQ5Bc3NldEluQmFsYW5jZQUSZmVlQXNzZXRPdXRCYWxhbmNlAwkAAAIFCEFzc2V0T3V0BQdBc3NldEluCQACAQIYdGhpcyBzd2FwIGlzIG5vdCBhbGxvd2VkAwkAZgIAAAkAZQIFD0Fzc2V0T3V0QmFsYW5jZQUJQW1vdW50T3V0CQACAQIbY29udHJhY3QgaXMgb3V0IG9mIHJlc2VydmVzAwkBCmlzU2h1dGRvd24ACQACAQITY29udHJhY3QgaXMgb24gc3RvcAkAlAoCBQNuaWwFCUFtb3VudE91dAFpARF0cmFuc2Zlck93bmVyc2hpcAEPbmV3T3duZXJBZGRyZXNzAwkBAiE9AgkApQgBCAUBaQZjYWxsZXIJAQx0cnlHZXRTdHJpbmcBAhBzdGF0aWNfcG9vbE93bmVyCQACAQIndGhpcyBjYWxsIGF2YWlsYWJsZSBvbmx5IGZvciBwb29sIG93bmVyCQDMCAIJAQtTdHJpbmdFbnRyeQICEHN0YXRpY19wb29sT3duZXIFD25ld093bmVyQWRkcmVzcwUDbmlsAQJ0eAEGdmVyaWZ5AAQTa2V5QWRtaW5BZGRyZXNzTGlzdAIUJXNfX2FkbWluQWRkcmVzc0xpc3QEEWtQb29sQ29udHJhY3RIYXNoAhRwb29sX19jb250cmFjdF9faGFzaAQOa2V5QWxsb3dlZFR4SWQCCCVzX190eElkBAlhZG1pbkxpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5mYWN0b3J5QWNjb3VudAUTa2V5QWRtaW5BZGRyZXNzTGlzdAIAAgJfXwQHYnlPd25lcgMJAGcCCQCQAwEFCWFkbWluTGlzdAADBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tleQQIYnlBZG1pbnMJAAACCAUCdHgCaWQJANkEAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ5mYWN0b3J5QWNjb3VudAUOa2V5QWxsb3dlZFR4SWQCAAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24ECnNldFNjcmlwVHgFByRtYXRjaDAEDWhhc2hPbkZhY3RvcnkJAQt2YWx1ZU9yRWxzZQIJAJwIAgUOZmFjdG9yeUFjY291bnQFEWtQb29sQ29udHJhY3RIYXNoAQAEBGhhc2gJAPYDAQkBBXZhbHVlAQgFCnNldFNjcmlwVHgGc2NyaXB0AwMJAAACBQRoYXNoBQ1oYXNoT25GYWN0b3J5BgUIYnlBZG1pbnMGBQdieU93bmVyAwUIYnlBZG1pbnMGBQdieU93bmVyLqPLUQ==", "height": 3421108, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3D25sdChCxYCXg9FAj3jHAmMJSH3mRweUo5T9T41ZX1v Next: none Diff:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "PM-0.8.1"
4+let a = "PM-0.9.1-DEV"
55
66 let b = valueOrElse(getString(this, "configAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
77
394394 then throw("contract is on stop")
395395 else {
396396 let bY = fraction(bX, 1, 10)
397- let bZ = fraction(bX, 4, 10)
397+ let bZ = fraction(bX, 9, 10)
398398 let ca = bV
399399 let cb = (bU - (if ((bG == bK))
400400 then bX
593593
594594
595595 @Callable(ch)
596+func withdrawLiquidityAtTarget () = {
597+ let aC = aA()
598+ if ((ch.caller != ae))
599+ then throw("available only for factory invoke")
600+ else if ((aC == 2))
601+ then [ScriptTransfer(ae, B(ah[0]), ah[0]), ScriptTransfer(ae, B(ah[1]), ah[1])]
602+ else throw("target is not reached yet")
603+ }
604+
605+
606+
607+@Callable(ch)
596608 func swap (aZ,bD) = {
597609 let aC = aA()
598610 if ((2 > aC))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "PM-0.8.1"
4+let a = "PM-0.9.1-DEV"
55
66 let b = valueOrElse(getString(this, "configAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
77
88 let c = if ((b == ""))
99 then this
1010 else Address(fromBase58String(b))
1111
1212 let d = 4
1313
1414 let e = 10000
1515
1616 let f = 100000000
1717
1818 let g = 10000000000000000
1919
2020 let h = 10000
2121
2222 let i = 8
2323
2424 let j = pow(10, 0, i, 0, 0, HALFUP)
2525
2626 let k = valueOrElse(getInteger(c, "min_steps_amount"), 1)
2727
2828 let l = valueOrElse(getInteger(c, "max_steps_amount"), 500)
2929
3030 let m = valueOrElse(getInteger(c, "min_steps_interval"), 1)
3131
3232 let n = valueOrElse(getInteger(c, "max_steps_interval"), 10000)
3333
3434 let o = valueOrElse(getInteger(c, "min_weight"), 100)
3535
3636 let p = valueOrElse(getInteger(c, "max_weight"), 9900)
3737
3838 func q (r) = {
3939 let s = getInteger(this, r)
4040 if ($isInstanceOf(s, "Int"))
4141 then {
4242 let t = s
4343 t
4444 }
4545 else 0
4646 }
4747
4848
4949 func u (r) = {
5050 let s = getBinary(this, r)
5151 if ($isInstanceOf(s, "ByteVector"))
5252 then {
5353 let t = s
5454 t
5555 }
5656 else base58''
5757 }
5858
5959
6060 func v (r) = {
6161 let s = getString(this, r)
6262 if ($isInstanceOf(s, "String"))
6363 then {
6464 let t = s
6565 t
6666 }
6767 else ""
6868 }
6969
7070
7171 func w (r) = {
7272 let s = getString(this, r)
7373 if ($isInstanceOf(s, "String"))
7474 then {
7575 let t = s
7676 t
7777 }
7878 else throw(("no such key in data storage: " + r))
7979 }
8080
8181
8282 func x (y) = {
8383 let s = y
8484 if ($isInstanceOf(s, "ByteVector"))
8585 then {
8686 let t = s
8787 toBase58String(t)
8888 }
8989 else "WAVES"
9090 }
9191
9292
9393 func z (A) = if ((A == "WAVES"))
9494 then unit
9595 else fromBase58String(A)
9696
9797
9898 func B (y) = {
9999 let s = y
100100 if ($isInstanceOf(s, "ByteVector"))
101101 then {
102102 let C = s
103103 assetBalance(this, C)
104104 }
105105 else wavesBalance(this).available
106106 }
107107
108108
109109 func D (E,F) = (E ++ [z(F)])
110110
111111
112112 func G (E,F) = (E ++ [q((("static_" + x(F)) + "_weight"))])
113113
114114
115115 func H (E,F) = (E ++ [toString(q((("static_" + F) + "_weight")))])
116116
117117
118118 func I (E,F) = (E ++ [q((("static_" + x(F)) + "_decimals"))])
119119
120120
121121 func J (E,F) = (E ++ [q((("static_" + x(F)) + "_scale"))])
122122
123123
124124 func K (E,F) = (E ++ [parseIntValue(F)])
125125
126126
127127 let L = valueOrElse(getString(c, "usdnAssetIdStr"), "DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p")
128128
129129 let M = valueOrElse(getString(c, "puzzleAssetIdStr"), "HEB8Qaw9xrWpWs8tHsiATYGBWDBtP2S7kcPALrMu43AS")
130130
131131 let N = valueOrElse(getString(c, "usdtAssetIdStr"), "34N9YcEETLWn93qYQ64EsP1x89tSruJU44RrEMSXXEPJ")
132132
133133 let O = valueOrElse(getString(c, "usdtPptAssetIdStr"), "9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi")
134134
135135 let P = valueOrElse(getString(c, "romeAssetIdStr"), "AP4Cb5xLYGH6ZigHreCZHoXpQTWDkPsG2BHqfDUx6taJ")
136136
137137 let Q = "WAVES"
138138
139139 let R = fromBase58String(L)
140140
141141 let S = fromBase58String(M)
142142
143143 let T = fromBase58String(N)
144144
145145 let U = fromBase58String(O)
146146
147147 let V = fromBase58String(P)
148148
149149 let W = unit
150150
151151 let X = [L, M, N, O, Q, P]
152152
153153 let Y = Address(fromBase58String(valueOrElse(getString(c, "oracleAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
154154
155155 let Z = Address(fromBase58String(valueOrElse(getString(c, "feesAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
156156
157157 let aa = valueOrElse(getString(c, "shutdownAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
158158
159159 let ab = valueOrElse(getString(c, "layer2Addresses"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")
160160
161161 let ac = Address(fromBase58String(valueOrElse(getString(c, "coldMasterAddress"), "3N91e7wHiV7QadDsx3RUJQxx1etqcAKrfHj")))
162162
163163 let ad = Address(fromBase58String(valueOrElse(getString(c, "factoryAddress"), "3N1ytAUyhtig9X6F2hHHs1jbzYxr47Yp8Fr")))
164164
165165 let ae = Address(fromBase58String(valueOrElse(getString(c, "factoryAddress"), "3MsgzbtRg8NEkbTcHBywtwTdCe9BRxMQo5T")))
166166
167167 let af = fromBase58String(valueOrElse(getString(c, "masterPubKey"), "4z8CKSYQBKkzx7PBb5uBP1YPa6YAHRNTApW1sQVHT5eU"))
168168
169169 let ag = q("static_tokensAmount")
170170
171171 let ah = {
172172 let ai = split(v("static_tokenIds"), ",")
173173 let aj = size(ai)
174174 let ak = nil
175175 func al (am,an) = if ((an >= aj))
176176 then am
177177 else D(am, ai[an])
178178
179179 func ao (am,an) = if ((an >= aj))
180180 then am
181181 else throw("List size exceeds 10")
182182
183183 ao(al(al(al(al(al(al(al(al(al(al(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
184184 }
185185
186186 let ap = {
187187 let ai = ah
188188 let aj = size(ai)
189189 let ak = nil
190190 func aq (am,an) = if ((an >= aj))
191191 then am
192192 else G(am, ai[an])
193193
194194 func ar (am,an) = if ((an >= aj))
195195 then am
196196 else throw("List size exceeds 10")
197197
198198 ar(aq(aq(aq(aq(aq(aq(aq(aq(aq(aq(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
199199 }
200200
201201 let as = {
202202 let ai = ah
203203 let aj = size(ai)
204204 let ak = nil
205205 func at (am,an) = if ((an >= aj))
206206 then am
207207 else I(am, ai[an])
208208
209209 func au (am,an) = if ((an >= aj))
210210 then am
211211 else throw("List size exceeds 10")
212212
213213 au(at(at(at(at(at(at(at(at(at(at(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
214214 }
215215
216216 let av = {
217217 let ai = ah
218218 let aj = size(ai)
219219 let ak = nil
220220 func aw (am,an) = if ((an >= aj))
221221 then am
222222 else J(am, ai[an])
223223
224224 func ax (am,an) = if ((an >= aj))
225225 then am
226226 else throw("List size exceeds 10")
227227
228228 ax(aw(aw(aw(aw(aw(aw(aw(aw(aw(aw(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
229229 }
230230
231231 let ay = q("static_fee")
232232
233233 let az = ah
234234
235235 func aA () = {
236236 let aB = valueOrElse(getInteger(ae, ("pool__" + toString(this))), 0)
237237 let aC = valueOrElse(getInteger(ae, ("pool__status__" + toString(aB))), 2)
238238 aC
239239 }
240240
241241
242242 func aD (r) = getIntegerValue(ae, ("setup__" + r))
243243
244244
245245 let aE = aD("virtualLiquidity")
246246
247247 let aF = aD("creationFee")
248248
249249 let aG = aD("curveTarget")
250250
251251 func aH () = {
252252 let aI = addressFromString(aa)
253253 if ((aI == unit))
254254 then false
255255 else {
256256 let s = getBoolean(value(aI), "is_shutdown")
257257 if ($isInstanceOf(s, "Boolean"))
258258 then {
259259 let aJ = s
260260 aJ
261261 }
262262 else false
263263 }
264264 }
265265
266266
267267 func aK (A) = {
268268 let s = getInteger(Y, (A + "_twap5B"))
269269 if ($isInstanceOf(s, "Int"))
270270 then {
271271 let aJ = s
272272 aJ
273273 }
274274 else 1000000
275275 }
276276
277277
278278 func aL (y,aM,aN) = {
279279 let aO = q((("static_" + x(y)) + "_weight"))
280280 let aP = v("static_feeToken")
281281 let aQ = getIntegerValue(this, (("static_" + aP) + "_scale"))
282282 let aR = value(indexOf(ah, z(aP)))
283283 let aS = ap[aR]
284284 let aT = q((("global_" + aP) + "_balance"))
285285 let aU = fraction(aM, (aT / aS), (aN / aO))
286286 let aV = aK(aP)
287287 fraction(aU, aV, aQ)
288288 }
289289
290290
291291 func aW (aX,aY,aZ,ba,bb) = {
292292 let bc = value(indexOf(ah, aY))
293293 let bd = value(indexOf(ah, aZ))
294294 if ((bc == bd))
295295 then aX
296296 else fraction(bb, ((f * f) - toInt(pow(fraction((toBigInt(ba) * toBigInt(10000)), toBigInt((f * f)), (toBigInt((ba + aX)) * toBigInt(10000)), HALFUP), 16, toBigInt(fraction(ap[bc], 1000000000000, ap[bd])), 12, 16, CEILING))), (f * f), HALFEVEN)
297297 }
298298
299299
300300 func be (y,A,aN,bf) = {
301301 let bg = q("global_indexStaked")
302302 let bh = bf
303303 let bi = (B(y) - aN)
304304 let bj = if ((bi > bh))
305305 then bi
306306 else bh
307307 let bk = (bj - bh)
308308 let bl = if ((bg == 0))
309309 then 0
310310 else fraction(bk, f, bg)
311311 let bm = q((("global_lastCheck_" + A) + "_interest"))
312312 (bm + bl)
313313 }
314314
315315
316316 func bn (bo) = {
317317 let bp = toString(bo)
318318 let bq = q((bp + "_indexStaked"))
319319 func br (E,y) = {
320320 let A = x(y)
321321 let aN = q((("global_" + x(y)) + "_balance"))
322322 let bf = q((("global_lastCheck_" + A) + "_earnings"))
323323 let bs = be(y, A, aN, bf)
324324 let bj = max([bf, (B(y) - aN)])
325325 let bt = fraction(bq, (bs - q((((bp + "_lastCheck_") + A) + "_interest"))), f)
326326 let bu = if ((bt == 0))
327327 then nil
328328 else [ScriptTransfer(bo, bt, y)]
329329 $Tuple2(((E._1 ++ bu) ++ [IntegerEntry((("global_lastCheck_" + A) + "_earnings"), (bj - bt)), IntegerEntry((("global_lastCheck_" + A) + "_interest"), bs), IntegerEntry((((bp + "_lastCheck_") + A) + "_interest"), bs)]), (E._2 + aL(y, bt, aN)))
330330 }
331331
332332 let E = {
333333 let ai = az
334334 let aj = size(ai)
335335 let ak = $Tuple2(nil, 0)
336336 func bv (am,an) = if ((an >= aj))
337337 then am
338338 else br(am, ai[an])
339339
340340 func bw (am,an) = if ((an >= aj))
341341 then am
342342 else throw("List size exceeds 10")
343343
344344 bw(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
345345 }
346346 $Tuple2((E._1 ++ [IntegerEntry((bp + "_claimedRewardUSD"), (q((bp + "_claimedRewardUSD")) + E._2)), IntegerEntry((bp + "_lastClaim"), lastBlock.timestamp)]), E._2)
347347 }
348348
349349
350350 func bx (E,by) = (E + parseIntValue(by))
351351
352352
353353 func bz (E,bA) = if (if ((indexOf(X, bA) != unit))
354354 then (E == "")
355355 else false)
356356 then bA
357357 else E
358358
359359
360360 func bB (aY,aZ,bC,bD,bE) = {
361361 let aX = bC
362362 let bF = z(aY)
363363 let bG = z(aZ)
364364 let bH = (f / q((("static_" + aY) + "_scale")))
365365 let bI = (f / q((("static_" + aZ) + "_scale")))
366366 let bJ = v("static_feeToken")
367367 let bK = if ((bJ == ""))
368368 then W
369369 else z(bJ)
370370 let bL = q((("global_" + x(bF)) + "_balance"))
371371 let bM = q((("global_" + aZ) + "_balance"))
372372 let bN = (bL * bH)
373373 let bO = (bM * bI)
374374 let bP = fraction(aX, ay, h)
375375 let bQ = (aX - bP)
376376 let bR = (bQ * bH)
377377 let bS = aW(bR, bF, bG, bN, bO)
378378 let bT = fraction(bS, 1, bI)
379379 let bU = (bM - bT)
380380 let bV = (bL + bQ)
381381 let bW = if ((bK == bF))
382382 then bV
383383 else if ((bK == bG))
384384 then bU
385385 else q((("global_" + x(bK)) + "_balance"))
386386 let bX = aW(bP, bF, bK, bL, bW)
387387 if ((bD > bT))
388388 then throw("amount to recieve is lower than given one")
389389 else if ((bG == bF))
390390 then throw("this swap is not allowed")
391391 else if ((0 > (bM - bT)))
392392 then throw("contract is out of reserves")
393393 else if (aH())
394394 then throw("contract is on stop")
395395 else {
396396 let bY = fraction(bX, 1, 10)
397- let bZ = fraction(bX, 4, 10)
397+ let bZ = fraction(bX, 9, 10)
398398 let ca = bV
399399 let cb = (bU - (if ((bG == bK))
400400 then bX
401401 else 0))
402402 let cc = if (if ((bK != bF))
403403 then (bK != bG)
404404 else false)
405405 then (bW - bX)
406406 else unit
407407 let cd = IntegerEntry((("global_" + x(bF)) + "_balance"), ca)
408408 let ce = IntegerEntry((("global_" + aZ) + "_balance"), cb)
409409 let cf = if ((cc != unit))
410410 then IntegerEntry((("global_" + x(bK)) + "_balance"), value(cc))
411411 else StringEntry("hello", "world")
412412 let cg = aL(bF, aX, bL)
413413 $Tuple2([ce, cd, cf, ScriptTransfer(addressFromStringValue(bE), bT, bG), ScriptTransfer(addressFromStringValue(v("static_poolOwner")), bY, bK), IntegerEntry("global_earnedByOwner", (q("global_earnedByOwner") + bY)), IntegerEntry("global_volume_usd", (q("global_volume_usd") + cg)), ScriptTransfer(Z, bZ, bK)], bT)
414414 }
415415 }
416416
417417
418418 @Callable(ch)
419419 func initPool (ci,cj,ck,cl,cm) = {
420420 func cn (co) = {
421421 func br (E,cp) = {
422422 let y = cp.assetId
423423 func cq (E,by) = if ((by == y))
424424 then value(indexOf(ah, by))
425425 else E
426426
427427 let cr = {
428428 let ai = ah
429429 let aj = size(ai)
430430 let ak = 1
431431 func bv (am,an) = if ((an >= aj))
432432 then am
433433 else cq(am, ai[an])
434434
435435 func bw (am,an) = if ((an >= aj))
436436 then am
437437 else throw("List size exceeds 10")
438438
439439 bw(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
440440 }
441441 fraction(E, pow(cp.amount, as[cr], ap[cr], d, 8, FLOOR), f)
442442 }
443443
444444 let ai = co
445445 let aj = size(ai)
446446 let ak = j
447447 func bv (am,an) = if ((an >= aj))
448448 then am
449449 else br(am, ai[an])
450450
451451 func bw (am,an) = if ((an >= aj))
452452 then am
453453 else throw("List size exceeds 10")
454454
455455 bw(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
456456 }
457457
458458 let cs = Issue(ck, cl, cm, 8, false)
459459 let ct = calculateAssetId(cs)
460460 let cu = x(ct)
461461 let cv = "5000,5000"
462462 let cw = "WAVES"
463463 let cx = Address(fromBase58String(cj))
464464 let cy = ("WAVES," + cu)
465465 let cz = split(cy, ",")
466466 let cA = {
467467 let ai = cz
468468 let aj = size(ai)
469469 let ak = nil
470470 func bv (am,an) = if ((an >= aj))
471471 then am
472472 else D(am, ai[an])
473473
474474 func bw (am,an) = if ((an >= aj))
475475 then am
476476 else throw("List size exceeds 10")
477477
478478 bw(bv(bv(bv(bv(bv(bv(bv(bv(bv(bv(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
479479 }
480480 let cB = 100
481481 let aP = {
482482 let ai = cz
483483 let aj = size(ai)
484484 let ak = ""
485485 func cC (am,an) = if ((an >= aj))
486486 then am
487487 else bz(am, ai[an])
488488
489489 func cD (am,an) = if ((an >= aj))
490490 then am
491491 else throw("List size exceeds 10")
492492
493493 cD(cC(cC(cC(cC(cC(cC(cC(cC(cC(cC(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
494494 }
495495 let cp = ch.payments[0]
496496 let aM = cp.amount
497497 let cE = if ((cp.assetId == unit))
498498 then "WAVES"
499499 else throw("you have to attach some WAVES")
500500 if ((this != this))
501501 then throw("self-invoke only")
502502 else if ((aP == ""))
503503 then throw("pool must have one of the supported fee assets in the composition")
504504 else if ((size(ci) > 13))
505505 then throw("too large pool domain")
506506 else if (if ((cB > 500))
507507 then true
508508 else (0 > cB))
509509 then throw("fee value must be between 50 and 500 (0.5-5%)")
510510 else if (aH())
511511 then throw("contract is on stop")
512512 else {
513513 let cF = split(cv, ",")
514514 let cG = {
515515 let ai = cF
516516 let aj = size(ai)
517517 let ak = 0
518518 func cH (am,an) = if ((an >= aj))
519519 then am
520520 else bx(am, ai[an])
521521
522522 func cI (am,an) = if ((an >= aj))
523523 then am
524524 else throw("List size exceeds 10")
525525
526526 cI(cH(cH(cH(cH(cH(cH(cH(cH(cH(cH(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
527527 }
528528 func cJ (E,cK) = if ((cK >= size(cA)))
529529 then E
530530 else {
531531 let cL = 8
532532 (E ++ [IntegerEntry((("static_" + cz[cK]) + "_scale"), pow(10, 0, cL, 0, 0, DOWN)), IntegerEntry((("static_" + cz[cK]) + "_decimals"), cL), IntegerEntry((("static_" + cz[cK]) + "_weight"), value(parseInt(cF[cK])))])
533533 }
534534
535535 let cM = cn(ch.payments)
536536 if ((cG != 10000))
537537 then throw("sum of token weights must be equal to 10000")
538538 else if ((cM == 0))
539539 then throw("you need a bigger tokens amount to launch the pool")
540540 else {
541541 let cN = Issue(("PZ " + ci), "Puzzle Swap: pool index token", cM, i, true, unit, 0)
542542 let cO = calculateAssetId(cN)
543543 $Tuple2(((({
544544 let ai = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
545545 let aj = size(ai)
546546 let ak = nil
547547 func cP (am,an) = if ((an >= aj))
548548 then am
549549 else cJ(am, ai[an])
550550
551551 func cQ (am,an) = if ((an >= aj))
552552 then am
553553 else throw("List size exceeds 10")
554554
555555 cQ(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(ak, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
556556 } ++ [cs, StringEntry("static_tokenIds", cy), StringEntry("static_feeToken", aP), StringEntry("static_tokenWeights", cv), IntegerEntry("static_tokensAmount", size(cA)), StringEntry("static_poolDomain", ci), StringEntry("static_baseTokenId", cw), StringEntry("static_poolOwner", cj), IntegerEntry("static_fee", cB), IntegerEntry("static_KMult", g), IntegerEntry("global_wasPreInited", 1)]) ++ [IntegerEntry("global_WAVES_balance", aE), IntegerEntry((("global_" + cu) + "_balance"), cm)]) ++ [cN, IntegerEntry("global_poolToken_amount", cM), IntegerEntry("global_wasInited", 1), BinaryEntry("global_poolToken_id", cO), StringEntry("static_poolToken_idStr", x(cO)), IntegerEntry((toString(ch.caller) + "_indexStaked"), cM), IntegerEntry("global_indexStaked", cM)]), cu)
557557 }
558558 }
559559 }
560560
561561
562562
563563 @Callable(ch)
564564 func init (ci,cj,ck,cl,cm) = if ((ch.caller != ae))
565565 then throw("admin only")
566566 else {
567567 let cR = invoke(this, "initPool", [ci, cj, ck, cl, cm], nil)
568568 if ((cR == cR))
569569 then {
570570 let cu = {
571571 let cS = cR
572572 if ($isInstanceOf(cS, "String"))
573573 then cS
574574 else throw(($getType(cS) + " couldn't be cast to String"))
575575 }
576576 bB("WAVES", cu, (ch.payments[0].amount - aF), 0, toString(ch.originCaller))._1
577577 }
578578 else throw("Strict value is not equal to itself.")
579579 }
580580
581581
582582
583583 @Callable(ch)
584584 func claimIndexRewards () = if (aH())
585585 then throw("contract is on stop")
586586 else bn(ch.caller)
587587
588588
589589
590590 @Callable(ch)
591591 func evaluateClaim (cT) = $Tuple2(nil, bn(addressFromStringValue(cT))._2)
592592
593593
594594
595595 @Callable(ch)
596+func withdrawLiquidityAtTarget () = {
597+ let aC = aA()
598+ if ((ch.caller != ae))
599+ then throw("available only for factory invoke")
600+ else if ((aC == 2))
601+ then [ScriptTransfer(ae, B(ah[0]), ah[0]), ScriptTransfer(ae, B(ah[1]), ah[1])]
602+ else throw("target is not reached yet")
603+ }
604+
605+
606+
607+@Callable(ch)
596608 func swap (aZ,bD) = {
597609 let aC = aA()
598610 if ((2 > aC))
599611 then {
600612 let cp = if ((size(ch.payments) == 1))
601613 then value(ch.payments[0])
602614 else throw("please attach exactly one payment")
603615 let aX = value(ch.payments[0].amount)
604616 let bF = ch.payments[0].assetId
605617 let cU = bB(x(bF), aZ, aX, bD, toString(ch.caller))
606618 if ((getIntegerValue("global_WAVES_balance") > aG))
607619 then {
608620 let cV = invoke(ae, "notifyStatusUpdate", [2], nil)
609621 if ((cV == cV))
610622 then cU
611623 else throw("Strict value is not equal to itself.")
612624 }
613625 else cU
614626 }
615627 else throw("pool is stopped: most probably it reached the target liquidity")
616628 }
617629
618630
619631
620632 @Callable(ch)
621633 func swapReadOnly (aY,aZ,aX) = {
622634 let bF = z(aY)
623635 let bG = z(aZ)
624636 let bH = (f / q((("static_" + aY) + "_scale")))
625637 let bI = (f / q((("static_" + aZ) + "_scale")))
626638 let bJ = v("static_feeToken")
627639 let bK = if ((bJ == ""))
628640 then R
629641 else z(bJ)
630642 let bL = q((("global_" + x(bF)) + "_balance"))
631643 let bM = q((("global_" + aZ) + "_balance"))
632644 let bN = (bL * bH)
633645 let bO = (bM * bI)
634646 let bP = fraction(aX, ay, h)
635647 let bQ = (aX - bP)
636648 let bR = (bQ * bH)
637649 let bS = aW(bR, bF, bG, bN, bO)
638650 let bT = fraction(bS, 1, bI)
639651 let bU = (bM - bT)
640652 let bV = (bL + bQ)
641653 let bW = if ((bK == bF))
642654 then bV
643655 else if ((bK == bG))
644656 then bU
645657 else q((("global_" + x(bK)) + "_balance"))
646658 let bX = aW(bP, bF, bK, bL, bW)
647659 if ((bG == bF))
648660 then throw("this swap is not allowed")
649661 else if ((0 > (bM - bT)))
650662 then throw("contract is out of reserves")
651663 else if (aH())
652664 then throw("contract is on stop")
653665 else $Tuple2(nil, bT)
654666 }
655667
656668
657669
658670 @Callable(ch)
659671 func transferOwnership (cW) = if ((toString(ch.caller) != v("static_poolOwner")))
660672 then throw("this call available only for pool owner")
661673 else [StringEntry("static_poolOwner", cW)]
662674
663675
664676 @Verifier(cX)
665677 func cY () = {
666678 let cZ = "%s__adminAddressList"
667679 let da = "pool__contract__hash"
668680 let db = "%s__txId"
669681 let dc = split(valueOrElse(getString(ae, cZ), ""), "__")
670682 let dd = if ((size(dc) >= 3))
671683 then false
672684 else sigVerify(cX.bodyBytes, cX.proofs[0], cX.senderPublicKey)
673685 let de = (cX.id == fromBase58String(valueOrElse(getString(ae, db), "")))
674686 let s = cX
675687 if ($isInstanceOf(s, "SetScriptTransaction"))
676688 then {
677689 let df = s
678690 let dg = valueOrElse(getBinary(ae, da), base58'')
679691 let dh = blake2b256(value(df.script))
680692 if (if ((dh == dg))
681693 then true
682694 else de)
683695 then true
684696 else dd
685697 }
686698 else if (de)
687699 then true
688700 else dd
689701 }
690702

github/deemru/w8io/169f3d6 
121.95 ms