tx · CgW8Kzru4Cuxd1d4czQtFpBfKjvcedupZSWrk92HDaWi

3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK:  -0.14000000 Waves

2022.11.15 09:49 [2317901] smart account 3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK > SELF 0.00000000 Waves

{ "type": 13, "id": "CgW8Kzru4Cuxd1d4czQtFpBfKjvcedupZSWrk92HDaWi", "fee": 14000000, "feeAssetId": null, "timestamp": 1668495004515, "version": 2, "chainId": 84, "sender": "3MsXpzisJAwnzUr7XrEoW1BZo4U6rw4tsYK", "senderPublicKey": "FFdBua5rzzMkZebvsvmN7sAdU7XhFK8QNJ3hiwwxAYRA", "proofs": [ "2VAo86bYhGsJ1bQCY7rrx4NJPCVwwLbFQZUkGQDVtpTMmhCRv5JgCbDhaxwWsjUtgA1LY27HbPXaosYYE7vPWM3v", "4n5cCz4TMiogLegq9i6CP2PQzhVdk8mxv13icpz7yDwHBptNsth5ks9UWnttkeH1CjVAcDDQs6KLDzsWC1QAz3LM" ], "script": "base64:BgJcCAISAwoBCBIDCgEIEgMKAQgSBAoCCAESBQoDAggBEgUKAwgBARIECgIICBIECgIIARIFCgMCCAESAwoBCBIECgIIAhIDCgEIEgMKARgSAwoBGBIECgIICBIAEgBaAAdrQWN0aXZlAgZhY3RpdmUAC2tBY3RpdmVHbG9iAhRhY3RpdmVfYWxsX2NvbnRyYWN0cwAGa0NhdXNlAg5zaHV0ZG93bl9jYXVzZQAaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQCHV9jdXJyZW50X3Bvb2xfZnJhY3Rpb25fcmV3YXJkABtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCHl9wcmV2aW91c19wb29sX2ZyYWN0aW9uX3Jld2FyZAATa0hlaWdodFBvb2xGcmFjdGlvbgIaX3Bvb2xfcmV3YXJkX3VwZGF0ZV9oZWlnaHQAG2tUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIedG90YWxfcmV3YXJkX3Blcl9ibG9ja19jdXJyZW50ABxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzAh90b3RhbF9yZXdhcmRfcGVyX2Jsb2NrX3ByZXZpb3VzABNrUmV3YXJkVXBkYXRlSGVpZ2h0AhRyZXdhcmRfdXBkYXRlX2hlaWdodAAWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAIUX3NoYXJlX3Rva2Vuc19sb2NrZWQAFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQCFV9zaGFyZV90b2tlbnNfYmxvY2tlZAAaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUCGl9zaGFyZV90b2tlbnNfYmxvY2tlZF90eXBlABxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0Ahxfc2hhcmVfdG9rZW5zX2Jsb2NrZWRfaGVpZ2h0ABdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAIVX3NoYXJlX3Rva2Vuc192aXJ0dWFsABZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAhpfdG90YWxfc2hhcmVfdG9rZW5zX2xvY2tlZAATa1NoYXJlVG9rZW5zVmlydHVhbAIbX3RvdGFsX3NoYXJlX3Rva2Vuc192aXJ0dWFsAAtrTG9ja1BhcmFtcwIMX2xvY2tfcGFyYW1zAA1rTG9ja1dhdmVzRmVlAg5sb2NrX3dhdmVzX2ZlZQAOa1Bvb2xCb29zdENvZWYCC19ib29zdF9jb2VmABFrRmFybUxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAFWtGYXJtVXNlckxhc3RJbnRlcmVzdAIOX2xhc3RfaW50ZXJlc3QAEmtCb29zdExhc3RJbnRlcmVzdAIQX2xhc3RfaW50ZXJlc3RfYgAWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAISX2xhc3RfaW50ZXJlc3RfdV9iABRrQm9vc3RMUExhc3RJbnRlcmVzdAISX2xhc3RfaW50ZXJlc3RfbHBiABhrQm9vc3RMUFVzZXJMYXN0SW50ZXJlc3QCFF9sYXN0X2ludGVyZXN0X3VfbHBiABNrTGFzdEludGVyZXN0SGVpZ2h0AhVfbGFzdF9pbnRlcmVzdF9oZWlnaHQAB2tTV09QaWQCB1NXT1BfaWQADmtBdmFpbGFibGVTV09QAg9fYXZhaWxhYmxlX1NXT1AAEWtTd29wWWVhckVtaXNzaW9uAhJzd29wX3llYXJfZW1pc3Npb24AEGtIYXJ2ZXN0UG9vbFZvdGUCGF9oYXJ2ZXN0X3Bvb2xfdm90ZV9nU1dPUAAJa1Bvb2xWb3RlAhBfcG9vbF92b3RlX2dTV09QAA1rVXNlclBvb2xWb3RlAhBfdXNlcl92b3RlX2dTV09QABRrSGFydmVzdFVzZXJQb29sVm90ZQIdX2hhcnZlc3RfdXNlcl9wb29sX3ZvdGVfZ1NXT1AAE2tGaXJzdEhhcnZlc3RIZWlnaHQCFGZpcnN0X2hhcnZlc3RfaGVpZ2h0AA1rU2hhcmVMaW1pdEZIAhxzaGFyZV9saW1pdF9vbl9maXJzdF9oYXJ2ZXN0AA1rQ3BtbUNvbnRyYWN0Ag1jcG1tX2NvbnRyYWN0AA1rQWRtaW5QdWJLZXkxAgthZG1pbl9wdWJfMQANa0FkbWluUHViS2V5MgILYWRtaW5fcHViXzIADWtBZG1pblB1YktleTMCC2FkbWluX3B1Yl8zABJrQWRtaW5JbnZva2VQdWJLZXkCEGFkbWluX2ludm9rZV9wdWIAEGtNb25leUJveEFkZHJlc3MCEW1vbmV5X2JveF9hZGRyZXNzAA5rVm90aW5nQWRkcmVzcwIOdm90aW5nX2FkZHJlc3MAC2tHb3ZBZGRyZXNzAhJnb3Zlcm5hbmNlX2FkZHJlc3MAEWtMUEZhcm1pbmdBZGRyZXNzAgpscF9mYXJtaW5nABRrRmFybWluZ1RyZWFzdXJlQWRkcgIQZmFybWluZ190cmVhc3VyZQAGb3JhY2xlCQEHQWRkcmVzcwEBGgFUSBOXDMDTM8wlMoC2KfenZGiAq+PMe0uZAA50b3RhbFZvdGVTaGFyZQCAyK+gJQALc2NhbGVWYWx1ZTgAgMLXLwASbG9ja0Jvb3N0Q29lZlNjYWxlAOgHABBkZWZQb29sQm9vc3RDb2VmAPQDARNnZXRCYXNlNThGcm9tT3JhY2xlAQNrZXkEByRtYXRjaDAJAJ0IAgUGb3JhY2xlBQNrZXkDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAZzdHJpbmcFByRtYXRjaDAJANkEAQUGc3RyaW5nBAdub3RoaW5nBQckbWF0Y2gwCQACAQkArAICBQNrZXkCCGlzIGVtcHR5AAxhZG1pblB1YktleTEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0FkbWluUHViS2V5MQAMYWRtaW5QdWJLZXkyCQETZ2V0QmFzZTU4RnJvbU9yYWNsZQEFDWtBZG1pblB1YktleTIADGFkbWluUHViS2V5MwkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQ1rQWRtaW5QdWJLZXkzAA9tb25leUJveEFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRBrTW9uZXlCb3hBZGRyZXNzAA12b3RpbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUOa1ZvdGluZ0FkZHJlc3MACmdvdkFkZHJlc3MJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBQtrR292QWRkcmVzcwARYWRtaW5JbnZva2VQdWJLZXkJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUSa0FkbWluSW52b2tlUHViS2V5ABBscEZhcm1pbmdBZGRyZXNzCQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQURa0xQRmFybWluZ0FkZHJlc3MAE2Zhcm1pbmdUcmVhc3VyZUFkZHIJAQdBZGRyZXNzAQkBE2dldEJhc2U1OEZyb21PcmFjbGUBBRRrRmFybWluZ1RyZWFzdXJlQWRkcgAMY3BtbUNvbnRyYWN0CQEHQWRkcmVzcwEJARNnZXRCYXNlNThGcm9tT3JhY2xlAQUNa0NwbW1Db250cmFjdAAGYWN0aXZlCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzBQdrQWN0aXZlAAphY3RpdmVHbG9iCQELdmFsdWVPckVsc2UCCQCbCAIFBm9yYWNsZQULa0FjdGl2ZUdsb2IGAARTV09QCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFB2tTV09QaWQBFWdldEhlaWdodEZpcnN0SGFydmVzdAEEcG9vbAkBC3ZhbHVlT3JFbHNlAgkAmggCCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUTa0ZpcnN0SGFydmVzdEhlaWdodAAAARRnZXRGSFNoYXJlTGltaXRUb2tlbgEEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHBvb2wFDWtTaGFyZUxpbWl0RkgJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFDWtTaGFyZUxpbWl0RkgBEmdldFRvdGFsU2hhcmVUb2tlbgEEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRZrU2hhcmVUb3RhbFNoYXJlVG9rZW5zAQxnZXRQb29sVm90ZWQBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICBQRwb29sBQlrUG9vbFZvdGUAAAEQZ2V0VXNlclBvb2xWb3RlZAIEcG9vbAR1c2VyCQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFDWtVc2VyUG9vbFZvdGUAAAEPZ2V0U2hhcmVBc3NldElkAQRwb29sCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQV2YWx1ZQEJAKYIAQUEcG9vbAIOc2hhcmVfYXNzZXRfaWQBDmFjY291bnRCYWxhbmNlAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDwBwIFBHRoaXMFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwCAkA7wcBBQR0aGlzCWF2YWlsYWJsZQkAAgECC01hdGNoIGVycm9yAQ5jYWxjU2NhbGVWYWx1ZQIIYXNzZXRJZDEIYXNzZXRJZDIEEGFzc2V0SWQxRGVjaW1hbHMICQEFdmFsdWUBCQDsBwEFCGFzc2V0SWQxCGRlY2ltYWxzBBBhc3NldElkMkRlY2ltYWxzCAkBBXZhbHVlAQkA7AcBBQhhc3NldElkMghkZWNpbWFscwQLc2NhbGVEaWdpdHMJAGQCCQBlAgUQYXNzZXRJZDJEZWNpbWFscwUQYXNzZXRJZDFEZWNpbWFscwAICQBsBgAKAAAFC3NjYWxlRGlnaXRzAAAAAAUERE9XTgERdXNlckF2YWlsYWJsZVNXT1ACBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAAAAQpyZXdhcmRJbmZvAQRwb29sBBp0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MFG2tUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFG2tUb3RhbFJld2FyZFBlckJsb2NrQ3VycmVudAIMIGF0IGFkZHJlc3MgCQClCAEFCmdvdkFkZHJlc3MEG3RvdGFsUmV3YXJkUGVyQmxvY2tQcmV2aW91cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MFHGtUb3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBRxrVG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzAgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQZcmV3YXJkUG9vbEZyYWN0aW9uQ3VycmVudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUaa1Jld2FyZFBvb2xGcmFjdGlvbkN1cnJlbnQJAKwCAgkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFGmtSZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50AgwgYXQgYWRkcmVzcyAJAKUIAQUKZ292QWRkcmVzcwQScmV3YXJkVXBkYXRlSGVpZ2h0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUKZ292QWRkcmVzcwUTa1Jld2FyZFVwZGF0ZUhlaWdodAkArAICCQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFE2tSZXdhcmRVcGRhdGVIZWlnaHQCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CQELdmFsdWVPckVsc2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUTa0hlaWdodFBvb2xGcmFjdGlvbgUScmV3YXJkVXBkYXRlSGVpZ2h0BBpyZXdhcmRQb29sRnJhY3Rpb25QcmV2aW91cwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCmdvdkFkZHJlc3MJAKwCAgUEcG9vbAUba1Jld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzCQCsAgIJAKwCAgkArAICCQCsAgICFE5vIGRhdGEgb24gdGhlIGtleTogBQRwb29sBRtrUmV3YXJkUG9vbEZyYWN0aW9uUHJldmlvdXMCDCBhdCBhZGRyZXNzIAkApQgBBQpnb3ZBZGRyZXNzBBFyZXdhcmRQb29sQ3VycmVudAkAawMFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BRlyZXdhcmRQb29sRnJhY3Rpb25DdXJyZW50BQ50b3RhbFZvdGVTaGFyZQQScmV3YXJkUG9vbFByZXZpb3VzCQBrAwUadG90YWxSZXdhcmRQZXJCbG9ja0N1cnJlbnQFGnJld2FyZFBvb2xGcmFjdGlvblByZXZpb3VzBQ50b3RhbFZvdGVTaGFyZQMDCQBmAgURcmV3YXJkUG9vbEN1cnJlbnQFGnRvdGFsUmV3YXJkUGVyQmxvY2tDdXJyZW50BgkAZgIFEnJld2FyZFBvb2xQcmV2aW91cwUbdG90YWxSZXdhcmRQZXJCbG9ja1ByZXZpb3VzCQACAQJicmV3YXJkUG9vbEN1cnJlbnQgPiB0b3RhbFJld2FyZFBlckJsb2NrQ3VycmVudCBvciByZXdhcmRQb29sUHJldmlvdXMgPiB0b3RhbFJld2FyZFBlckJsb2NrUHJldmlvdXMJAJYKBAURcmV3YXJkUG9vbEN1cnJlbnQFEnJld2FyZFVwZGF0ZUhlaWdodAUScmV3YXJkUG9vbFByZXZpb3VzBRZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0ARNnZXRMYXN0SW50ZXJlc3RJbmZvAQRwb29sBAxmYXJtSW50ZXJlc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0CQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BA1ib29zdEludGVyZXN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QJAKwCAgkArAICAhRObyBkYXRhIG9uIHRoZSBrZXk6IAUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BA9ib29zdExQSW50ZXJlc3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0CQCsAgIJAKwCAgIUTm8gZGF0YSBvbiB0aGUga2V5OiAFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0BBJsYXN0SW50ZXJlc3RIZWlnaHQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAJYKBAUSbGFzdEludGVyZXN0SGVpZ2h0BQxmYXJtSW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QFD2Jvb3N0TFBJbnRlcmVzdAELY2FsY0Zhcm1Sd2QCBHBvb2wOY3VyVG90YWxSZXdhcmQEDXBvb2xCb29zdENvZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbEJvb3N0Q29lZgUQZGVmUG9vbEJvb3N0Q29lZgkAawMFDmN1clRvdGFsUmV3YXJkBRJsb2NrQm9vc3RDb2VmU2NhbGUJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNCb29zdFJ3ZAIEcG9vbA5jdXJUb3RhbFJld2FyZAQNcG9vbEJvb3N0Q29lZgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQm9vc3RDb2VmBRBkZWZQb29sQm9vc3RDb2VmCQBrAwUOY3VyVG90YWxSZXdhcmQFDXBvb2xCb29zdENvZWYJAGQCBQ1wb29sQm9vc3RDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUBDGNhbGNJbnRlcmVzdAwEcG9vbBJsYXN0SW50ZXJlc3RIZWlnaHQScmV3YXJkVXBkYXRlSGVpZ2h0FnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQMZmFybUludGVyZXN0DWJvb3N0SW50ZXJlc3QJcG9vbFZvdGVkD2Jvb3N0THBJbnRlcmVzdBVjdXJyZW50UmV3YXJkUGVyQmxvY2sQc2hhcmVUb2tlbkxvY2tlZBZwcmV2aW91c1Jld2FyZFBlckJsb2NrCnNjYWxlVmFsdWUDCQAAAgUQc2hhcmVUb2tlbkxvY2tlZAAACQCVCgMFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAUPYm9vc3RMcEludGVyZXN0BAwkdDA5Njk3MTExMTADAwMJAGYCBRJyZXdhcmRVcGRhdGVIZWlnaHQFBmhlaWdodAkAAAIFEnJld2FyZFVwZGF0ZUhlaWdodAUWcG9vbFJld2FyZFVwZGF0ZUhlaWdodAcGAwkAZgIFBmhlaWdodAUScmV3YXJkVXBkYXRlSGVpZ2h0CQECIT0CBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUWcHJldmlvdXNSZXdhcmRQZXJCbG9jawkAZQIFBmhlaWdodAUSbGFzdEludGVyZXN0SGVpZ2h0CQCWCgQFAXIFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAUPYm9vc3RMcEludGVyZXN0AwMDCQBmAgUGaGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQJAAACBRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQHCQBmAgUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQHBAFyCQBoAgUVY3VycmVudFJld2FyZFBlckJsb2NrCQBlAgUGaGVpZ2h0BRJsYXN0SW50ZXJlc3RIZWlnaHQJAJYKBAUBcgUMZmFybUludGVyZXN0BQ1ib29zdEludGVyZXN0BQ9ib29zdExwSW50ZXJlc3QECXJ3ZEJmclVwZAkAaAIFFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sJAGUCBRJyZXdhcmRVcGRhdGVIZWlnaHQFEmxhc3RJbnRlcmVzdEhlaWdodAQGZkJmclVwCQBkAgUMZmFybUludGVyZXN0CQBrAwkBC2NhbGNGYXJtUndkAgUEcG9vbAUJcndkQmZyVXBkBQpzY2FsZVZhbHVlBRBzaGFyZVRva2VuTG9ja2VkBAZiQmZyVXAJAGQCBQ1ib29zdEludGVyZXN0AwkAZgIFCXBvb2xWb3RlZAAACQBrAwkBDGNhbGNCb29zdFJ3ZAIFBHBvb2wFCXJ3ZEJmclVwZAULc2NhbGVWYWx1ZTgFCXBvb2xWb3RlZAAABAhiTFBCZnJVcAkAZAIFD2Jvb3N0THBJbnRlcmVzdAMJAGYCBQlwb29sVm90ZWQAAAkAawMJAGsDCQEMY2FsY0Jvb3N0UndkAgUEcG9vbAUJcndkQmZyVXBkBQtzY2FsZVZhbHVlOAUQc2hhcmVUb2tlbkxvY2tlZAULc2NhbGVWYWx1ZTgFCXBvb2xWb3RlZAAABANyd2QJAGgCBRVjdXJyZW50UmV3YXJkUGVyQmxvY2sJAGUCBQZoZWlnaHQFEnJld2FyZFVwZGF0ZUhlaWdodAkAlgoEBQNyd2QFBmZCZnJVcAUGYkJmclVwBQhiTFBCZnJVcAQGcmV3YXJkCAUMJHQwOTY5NzExMTEwAl8xBA5mYXJtSW50ckJlZm9yZQgFDCR0MDk2OTcxMTExMAJfMgQPYm9vc3RJbnRyQmVmb3JlCAUMJHQwOTY5NzExMTEwAl8zBBFib29zdExQSW50ckJlZm9yZQgFDCR0MDk2OTcxMTExMAJfNAQPbmV3RmFybUludGVyZXN0CQBkAgUOZmFybUludHJCZWZvcmUJAGsDCQELY2FsY0Zhcm1Sd2QCBQRwb29sBQZyZXdhcmQFCnNjYWxlVmFsdWUFEHNoYXJlVG9rZW5Mb2NrZWQEEG5ld0Jvb3N0SW50ZXJlc3QJAGQCBQ9ib29zdEludHJCZWZvcmUDCQBmAgUJcG9vbFZvdGVkAAAJAGsDCQEMY2FsY0Jvb3N0UndkAgUEcG9vbAUGcmV3YXJkBQtzY2FsZVZhbHVlOAUJcG9vbFZvdGVkAAAEEm5ld0Jvb3N0TFBJbnRlcmVzdAkAZAIFEWJvb3N0TFBJbnRyQmVmb3JlAwkAZgIFCXBvb2xWb3RlZAAACQBrAwkAawMJAQxjYWxjQm9vc3RSd2QCBQRwb29sBQZyZXdhcmQFC3NjYWxlVmFsdWU4BRBzaGFyZVRva2VuTG9ja2VkBQtzY2FsZVZhbHVlOAUJcG9vbFZvdGVkAAAJAJUKAwUPbmV3RmFybUludGVyZXN0BRBuZXdCb29zdEludGVyZXN0BRJuZXdCb29zdExQSW50ZXJlc3QBCWNsYWltQ2FsYwIEcG9vbAR1c2VyBApzY2FsZVZhbHVlCQEOY2FsY1NjYWxlVmFsdWUCBQRTV09QCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQJcG9vbFZvdGVkCQEMZ2V0UG9vbFZvdGVkAQUEcG9vbAQKdVBvb2xWb3RlZAkBEGdldFVzZXJQb29sVm90ZWQCBQRwb29sBQR1c2VyBApzaGFyZVRva2VuCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQpzaGFyZVRva2VuBA0kdDAxMjA1OTEyMTU3CQETZ2V0TGFzdEludGVyZXN0SW5mbwEFBHBvb2wEEmxhc3RJbnRlcmVzdEhlaWdodAgFDSR0MDEyMDU5MTIxNTcCXzEEDGZhcm1JbnRlcmVzdAgFDSR0MDEyMDU5MTIxNTcCXzIEDWJvb3N0SW50ZXJlc3QIBQ0kdDAxMjA1OTEyMTU3Al8zBA9ib29zdExQSW50ZXJlc3QIBQ0kdDAxMjA1OTEyMTU3Al80BA0kdDAxMjE2MjEyMjc2CQEKcmV3YXJkSW5mbwEFBHBvb2wEFWN1cnJlbnRSZXdhcmRQZXJCbG9jawgFDSR0MDEyMTYyMTIyNzYCXzEEEnJld2FyZFVwZGF0ZUhlaWdodAgFDSR0MDEyMTYyMTIyNzYCXzIEFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sIBQ0kdDAxMjE2MjEyMjc2Al8zBBZwb29sUmV3YXJkVXBkYXRlSGVpZ2h0CAUNJHQwMTIxNjIxMjI3NgJfNAQNdUZhcm1JbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAQOdUJvb3N0SW50ZXJlc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAQQdUJvb3N0TFBJbnRlcmVzdAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRhrQm9vc3RMUFVzZXJMYXN0SW50ZXJlc3QFD2Jvb3N0TFBJbnRlcmVzdAQSdVNoYXJlVG9rZW5zU3Rha2VkCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQQdVNoYXJlVG9rZW5zVmlydAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUSdVNoYXJlVG9rZW5zU3Rha2VkBA0kdDAxMjg0NDEzMjM3CQEMY2FsY0ludGVyZXN0DAUEcG9vbAUSbGFzdEludGVyZXN0SGVpZ2h0BRJyZXdhcmRVcGRhdGVIZWlnaHQFFnBvb2xSZXdhcmRVcGRhdGVIZWlnaHQFDGZhcm1JbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAUJcG9vbFZvdGVkBQ9ib29zdExQSW50ZXJlc3QFFWN1cnJlbnRSZXdhcmRQZXJCbG9jawURdG90YWxTaGFyZVZpcnR1YWwFFnByZXZpb3VzUmV3YXJkUGVyQmxvY2sFCnNjYWxlVmFsdWUED25ld0Zhcm1JbnRlcmVzdAgFDSR0MDEyODQ0MTMyMzcCXzEEEG5ld0Jvb3N0SW50ZXJlc3QIBQ0kdDAxMjg0NDEzMjM3Al8yBBJuZXdCb29zdExQSW50ZXJlc3QIBQ0kdDAxMjg0NDEzMjM3Al8zBAxjbGFpbUZhcm1pbmcJAGsDBRB1U2hhcmVUb2tlbnNWaXJ0CQBlAgUPbmV3RmFybUludGVyZXN0BQ11RmFybUludGVyZXN0BQpzY2FsZVZhbHVlBBBjbGFpbUJvb3N0aW5nTWF4CQBrAwUKdVBvb2xWb3RlZAkAZQIFEG5ld0Jvb3N0SW50ZXJlc3QFDnVCb29zdEludGVyZXN0BQtzY2FsZVZhbHVlOAQDbXVsCQC8AgMJALYCAQUQdVNoYXJlVG9rZW5zVmlydAkAtgIBBQp1UG9vbFZvdGVkCQC2AgEAAQQNY2xhaW1Cb29zdGluZwkAoAMBCQC8AgMJALwCAwUDbXVsCQC2AgEJAGUCBRJuZXdCb29zdExQSW50ZXJlc3QFEHVCb29zdExQSW50ZXJlc3QJALYCAQULc2NhbGVWYWx1ZTgJALYCAQABCQC2AgEFC3NjYWxlVmFsdWU4BAp0b1RyZWFzdXJ5CQBlAgUQY2xhaW1Cb29zdGluZ01heAUNY2xhaW1Cb29zdGluZwMJAGYCAAAFCnRvVHJlYXN1cnkJAAIBAg50b1RyZWFzdXJ5IDwgMAkAlwoFBQ9uZXdGYXJtSW50ZXJlc3QFEG5ld0Jvb3N0SW50ZXJlc3QFEm5ld0Jvb3N0TFBJbnRlcmVzdAkAZAIFDGNsYWltRmFybWluZwUNY2xhaW1Cb29zdGluZwUKdG9UcmVhc3VyeQEbYXZhaWxhYmxlQ2xhaW1DYWxjQWxsQnlVc2VyAgVwb29scwR1c2VyCgENY2FsY0F2YWlsYWJsZQIDYWNjBHBvb2wEDSR0MDE0MDcwMTQwOTkFA2FjYwQIbmV3UG9vbHMIBQ0kdDAxNDA3MDE0MDk5Al8xBAdhbW91bnRzCAUNJHQwMTQwNzAxNDA5OQJfMgQNJHQwMTQxMDgxNDE2NwkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEAmZpCAUNJHQwMTQxMDgxNDE2NwJfMQQCYmkIBQ0kdDAxNDEwODE0MTY3Al8yBARibHBpCAUNJHQwMTQxMDgxNDE2NwJfMwQLY2xhaW1BbW91bnQIBQ0kdDAxNDEwODE0MTY3Al80BAJ0dAgFDSR0MDE0MTA4MTQxNjcCXzUEDWF2YWlsYWJsZUZ1bmQJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAlAoCCQDNCAIFCG5ld1Bvb2xzBQRwb29sCQDNCAIFB2Ftb3VudHMFDWF2YWlsYWJsZUZ1bmQKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQ1jYWxjQXZhaWxhYmxlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA2MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQRwb29sBHVzZXIVdXNlclNoYXJlVG9rZW5zU3Rha2VkCXBtdEFtb3VudAhsb2NrVHlwZQMJAGYCCQEVZ2V0SGVpZ2h0Rmlyc3RIYXJ2ZXN0AQUEcG9vbAUGaGVpZ2h0BA90b3RhbFZvdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNdm90aW5nQWRkcmVzcwkArAICBQRwb29sBRBrSGFydmVzdFBvb2xWb3RlAAAEDnVzZXJWb3RlQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFDXZvdGluZ0FkZHJlc3MJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBHBvb2wFFGtIYXJ2ZXN0VXNlclBvb2xWb3RlAAAEEUZIU2hhcmVUb2tlbkxpbWl0CQEUZ2V0RkhTaGFyZUxpbWl0VG9rZW4BCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBBVGSFNoYXJlVG9rZW5Vc2VyTGltaXQJAGUCCQBrAwURRkhTaGFyZVRva2VuTGltaXQFDnVzZXJWb3RlQW1vdW50BQ90b3RhbFZvdGVBbW91bnQFFXVzZXJTaGFyZVRva2Vuc1N0YWtlZAMJAGYCBQhsb2NrVHlwZQAACQACAQIyWW91IGNhbid0IGxvY2sgc2hhcmVUb2tlbnMgdGlsbCBmaXJzdCBoYXJ2ZXN0IGVuZC4DCQAAAgUOdXNlclZvdGVBbW91bnQAAAAAAwkAZwIFCXBtdEFtb3VudAUVRkhTaGFyZVRva2VuVXNlckxpbWl0CQBlAgUJcG10QW1vdW50BRVGSFNoYXJlVG9rZW5Vc2VyTGltaXQAAAAAAQ1nZXRMb2NrUGFyYW1zAQR0eXBlBApsb2NrUGFyYW1zCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIJAKQDAQUEdHlwZQULa0xvY2tQYXJhbXMJAKwCAgIeVGhlcmUgYXJlIG5vIGtleSBmb3IgbG9jayB0eXBlCQCkAwEFBHR5cGUCAV8JAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY2tQYXJhbXMAAQEHc3VzcGVuZAEFY2F1c2UJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUHCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtDYXVzZQUFY2F1c2UFA25pbAEIaXNBY3RpdmUAAwMFBmFjdGl2ZQUKYWN0aXZlR2xvYgcFBHVuaXQJAAIBAh9EQXBwIGlzIGluYWN0aXZlIGF0IHRoaXMgbW9tZW50AQtpc0FkbWluQ2FsbAEBaQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFDGFkbWluUHViS2V5MQkAzAgCBQxhZG1pblB1YktleTIJAMwIAgUMYWRtaW5QdWJLZXkzBQNuaWwIBQFpD2NhbGxlclB1YmxpY0tleQUEdW5pdAkAAgECIU9ubHkgYWRtaW4gY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNQb29sQ2FsbAIBaQRwb29sAwMJAAACCQClCAEIBQFpBmNhbGxlcgUEcG9vbAYJAAACCAUBaQZjYWxsZXIFDGNwbW1Db250cmFjdAUEdW5pdAkAAgECIE9ubHkgcG9vbCBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uAQppc1NlbGZDYWxsAQFpAwkAAAIIBQFpBmNhbGxlcgUEdGhpcwUEdW5pdAkAAgECK09ubHkgY29udHJhY3QgaXRzZWxmIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BE2NhbGNMb2NrU2hhcmVUb2tlbnMEAWkGY2FsbGVyBHBvb2wIbG9ja1R5cGUEDHNoYXJlQXNzZXRJZAkBD2dldFNoYXJlQXNzZXRJZAEFBHBvb2wEBHVzZXIJAKUIAQUGY2FsbGVyBAp0b3RhbFNoYXJlCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQRdG90YWxTaGFyZVZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBQp0b3RhbFNoYXJlBBB1c2VyU3Rha2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQAAAQPdXNlckxvY2tlZEhlaWd0CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQAAAQQdXNlckxvY2tlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zTG9ja2VkAAAEEXVzZXJBbW91bnRWaXJ0dWFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRB1c2VyU3Rha2VkQW1vdW50BBR0b3RhbFVzZXJTaGFyZVRva2VucwkAZAIJAGQCBRB1c2VyU3Rha2VkQW1vdW50BRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQNJHQwMTY5NjgxNzAyMAkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDE2OTY4MTcwMjACXzEECGxvY2tDb2VmCAUNJHQwMTY5NjgxNzAyMAJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQxzaGFyZUFzc2V0SWQJAAIBAhtXcm9uZyBzaGFyZXRva2VuIGluIHBheW1lbnQDCQBnAgAACAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAAgECJVBheW1lbnQgYW1vdW50IG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgAABQhsb2NrVHlwZQkAAgECFWxvY2tUeXBlIG11c3QgYmUgPj0gMAQVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQEVY2FuTG9ja0luRmlyc3RIYXJ2ZXN0BQUEcG9vbAUEdXNlcgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGxvY2tUeXBlAwkAAAIFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZIBA0kdDAxNzQ0NzE5MzgxAwkAAAIFCGxvY2tUeXBlAAAEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBlAgkAZAIFEXVzZXJBbW91bnRWaXJ0dWFsCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUVc2hhcmVUb2tlbnNDaGFuZ2VPbkZICQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQJAGUCCQBkAgUQdXNlclN0YWtlZEFtb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFFXNoYXJlVG9rZW5zQ2hhbmdlT25GSAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGUCCQBkAgURdG90YWxTaGFyZVZpcnR1YWwICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyBRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUDbmlsCQBlAgkAZAIFCnRvdGFsU2hhcmUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BRVzaGFyZVRva2Vuc0NoYW5nZU9uRkgDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAAAwMJAGYCAAIJAJADAQgFAWkIcGF5bWVudHMGCQECIT0CCAkAkQMCCAUBaQhwYXltZW50cwABB2Fzc2V0SWQFBHVuaXQGCQBmAgUMbG9ja1dhdmVzRmVlCAkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAcJAAIBCQCsAgIJAKwCAgIrWW91IG5lZWQgdG8gcGF5IGFkZGl0aW9uYWwgd2F2ZXMgY29taXNzaW9uIAkApAMBBQxsb2NrV2F2ZXNGZWUCBVdBVkVTAwkAZgIFD3VzZXJMb2NrZWRIZWlndAkAZAIFBmhlaWdodAUKbG9ja1BlcmlvZAkAAgECT1lvdSBjYW5ub3QgbG9jayBzaGFyZXRva2VucyBmb3IgYSBwZXJpb2QgbGVzcyB0aGFuIHdoYXQgeW91IGhhdmUgYWxyZWFkeSBsb2NrZWQEE3VzZXJMb2NrZWRBbW91bnROZXcJAGQCBRB1c2VyTG9ja2VkQW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQSdXNlckxvY2tlZEhlaWd0TmV3CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kBBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZAIJAGsDBRN1c2VyTG9ja2VkQW1vdW50TmV3BQhsb2NrQ29lZgUSbG9ja0Jvb3N0Q29lZlNjYWxlBRB1c2VyU3Rha2VkQW1vdW50CQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQFE3VzZXJMb2NrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFHGtVc2VyU2hhcmVUb2tlbnNMb2NrZWRIZWlnaHQFEnVzZXJMb2NrZWRIZWlndE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUaa1VzZXJTaGFyZVRva2Vuc0xvY2tlZFR5cGUFCGxvY2tUeXBlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1NoYXJlVG9rZW5zVmlydHVhbAkAZAIJAGUCBRF0b3RhbFNoYXJlVmlydHVhbAURdXNlckFtb3VudFZpcnR1YWwFFHVzZXJBbW91bnRWaXJ0dWFsTmV3BQNuaWwJAGQCBQp0b3RhbFNoYXJlCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQLbG9ja0VudHJpZXMIBQ0kdDAxNzQ0NzE5MzgxAl8xBA10b3RhbFNoYXJlTmV3CAUNJHQwMTc0NDcxOTM4MQJfMgMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQxzaGFyZUFzc2V0SWQFDXRvdGFsU2hhcmVOZXcJAAIBAjBCYWxhbmNlIG9mIHNoYXJlLXRva2VuIGlzIGxvd2VyIHRoYW4gdG90YWxBbW91bnQEDSR0MDE5NTA2MTk2MDUJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAxOTUwNjE5NjA1Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMTk1MDYxOTYwNQJfMgQPYm9vc3RMUGludGVyZXN0CAUNJHQwMTk1MDYxOTYwNQJfMwQLY2xhaW1BbW91bnQIBQ0kdDAxOTUwNjE5NjA1Al80BAp0b1RyZWFzdXJlCAUNJHQwMTk1MDYxOTYwNQJfNQQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAQEdXBscAMJAAACCQCdCAIJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgd2ZXJzaW9uAgUzLjAuMAkA/AcEBRBscEZhcm1pbmdBZGRyZXNzAhJ1cGRhdGVVc2VySW50ZXJlc3QJAMwIAgUEdXNlcgkAzAgCBQRwb29sCQDMCAIFFHRvdGFsVXNlclNoYXJlVG9rZW5zBQNuaWwFA25pbAAAAwkAAAIFBHVwbHAFBHVwbHAJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFGGtCb29zdExQVXNlckxhc3RJbnRlcmVzdAUPYm9vc3RMUGludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0BQ9ib29zdExQaW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMFDXRvdGFsU2hhcmVOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFDmtBdmFpbGFibGVTV09QBRFhdmFpbGFibGVGdW5kc05ldwkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AFCnRvVHJlYXN1cmUGCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFE2Zhcm1pbmdUcmVhc3VyZUFkZHIFCnRvVHJlYXN1cmUFBFNXT1AFA25pbAULbG9ja0VudHJpZXMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAFpBmNhbGxlcgRwb29sGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDXNoYXJlVG9rZW5zSWQJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBBXZhbHVlAQkApggBBQRwb29sAg5zaGFyZV9hc3NldF9pZAQEdXNlcgkApQgBBQZjYWxsZXIEDSR0MDIwOTUwMjEwNDkJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyMDk1MDIxMDQ5Al8xBA1ib29zdEludGVyZXN0CAUNJHQwMjA5NTAyMTA0OQJfMgQPYm9vc3RMUGludGVyZXN0CAUNJHQwMjA5NTAyMTA0OQJfMwQLY2xhaW1BbW91bnQIBQ0kdDAyMDk1MDIxMDQ5Al80BAp0b1RyZWFzdXJlCAUNJHQwMjA5NTAyMTA0OQJfNQQQdXNlclN0YWtlZEFtb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkAAAEEHVzZXJMb2NrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAAABBF1c2VyQW1vdW50VmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUQdXNlclN0YWtlZEFtb3VudAQTdXNlclN0YWtlZEFtb3VudE5ldwkAZQIFEHVzZXJTdGFrZWRBbW91bnQFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQEEHRvdGFsU2hhcmVBbW91bnQJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFEHRvdGFsU2hhcmVBbW91bnQEE3RvdGFsU2hhcmVBbW91bnROZXcJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR0b3RhbFNoYXJlVmlydHVhbE5ldwkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50BBR1c2VyQW1vdW50VmlydHVhbE5ldwkAZQIFEXVzZXJBbW91bnRWaXJ0dWFsBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AwkAZgIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFEHVzZXJTdGFrZWRBbW91bnQJAAIBAixXaXRoZHJhdyBhbW91bnQgbW9yZSB0aGVuIHVzZXIgbG9ja2VkIGFtb3VudAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRB0b3RhbFNoYXJlQW1vdW50CQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAR1cGxwAwkAAAIJAJ0IAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB3ZlcnNpb24CBTMuMC4wCQD8BwQFEGxwRmFybWluZ0FkZHJlc3MCEnVwZGF0ZVVzZXJJbnRlcmVzdAkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgkAZAIFEHVzZXJTdGFrZWRBbW91bnQFEHVzZXJMb2NrZWRBbW91bnQFA25pbAUDbmlsAAADCQAAAgUEdXBscAUEdXBscAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUVa0Zhcm1Vc2VyTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtCb29zdFVzZXJMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFGGtCb29zdExQVXNlckxhc3RJbnRlcmVzdAUPYm9vc3RMUGludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0BQ9ib29zdExQaW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrVXNlclNoYXJlVG9rZW5zU3Rha2VkBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRdrVXNlclNoYXJlVG9rZW5zVmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUWa1NoYXJlVG90YWxTaGFyZVRva2VucwUTdG90YWxTaGFyZUFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsBRR0b3RhbFNoYXJlVmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQFDXNoYXJlVG9rZW5zSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEJY2FsY0NsYWltAwFpBHBvb2wGY2FsbGVyBA1zaGFyZVRva2Vuc0lkCQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQV2YWx1ZQEJAKYIAQUEcG9vbAIOc2hhcmVfYXNzZXRfaWQEBHVzZXIJAKUIAQUGY2FsbGVyBBBzaGFyZVRva2VuTG9ja2VkCQESZ2V0VG90YWxTaGFyZVRva2VuAQUEcG9vbAQNJHQwMjM3MTUyMzgxNAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDIzNzE1MjM4MTQCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyMzcxNTIzODE0Al8yBA9ib29zdExQaW50ZXJlc3QIBQ0kdDAyMzcxNTIzODE0Al8zBAtjbGFpbUFtb3VudAgFDSR0MDIzNzE1MjM4MTQCXzQECnRvVHJlYXN1cmUIBQ0kdDAyMzcxNTIzODE0Al81BA1hdmFpbGFibGVGdW5kCQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQDCQAAAgUNYXZhaWxhYmxlRnVuZAAACQACAQIZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAMJAGYCCQEOYWNjb3VudEJhbGFuY2UBBQ1zaGFyZVRva2Vuc0lkBRBzaGFyZVRva2VuTG9ja2VkCQACAQIwQmFsYW5jZSBvZiBzaGFyZS10b2tlbiBpcyBsb3dlciB0aGFuIHRvdGFsQW1vdW50BAZ1VHJhbnMDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQ1hdmFpbGFibGVGdW5kBQRTV09QBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRhrQm9vc3RMUFVzZXJMYXN0SW50ZXJlc3QFD2Jvb3N0TFBpbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRRrQm9vc3RMUExhc3RJbnRlcmVzdAUPYm9vc3RMUGludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AAAAkAzAgCCQEHUmVpc3N1ZQMFBFNXT1AJAGQCBQp0b1RyZWFzdXJlBQ1hdmFpbGFibGVGdW5kBgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmYXJtaW5nVHJlYXN1cmVBZGRyBQp0b1RyZWFzdXJlBQRTV09QBQNuaWwFBnVUcmFucwUNYXZhaWxhYmxlRnVuZBEBaQEEaW5pdAEHZWFybHlMUAMJAQlpc0RlZmluZWQBCQCdCAIFBHRoaXMFB2tTV09QaWQJAAIBAhhTV09QIGFscmVhZHkgaW5pdGlhbGl6ZWQECmluaXRBbW91bnQAgIDpg7HeFgQJU1dPUGlzc3VlCQDCCAUCBFNXT1ACE1NXT1AgcHJvdG9jb2wgdG9rZW4FCmluaXRBbW91bnQACAYEBlNXT1BpZAkAuAgBBQlTV09QaXNzdWUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAMIIBQIEU1dPUAITU1dPUCBwcm90b2NvbCB0b2tlbgUKaW5pdEFtb3VudAAIBgkAzAgCCQELU3RyaW5nRW50cnkCBQdrU1dPUGlkCQDYBAEFBlNXT1BpZAUDbmlsAWkBFGluaXRQb29sU2hhcmVGYXJtaW5nAQRwb29sCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFmtTaGFyZVRvdGFsU2hhcmVUb2tlbnMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0AAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBaQESdXBkYXRlUG9vbEludGVyZXN0AQRwb29sCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUAAwkBAiE9AggFAWkGY2FsbGVyBQpnb3ZBZGRyZXNzCQACAQImT25seSBHb3Zlcm5hbmNlIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24EBHVzZXIJAKUIAQkApwgBBRFhZG1pbkludm9rZVB1YktleQQNJHQwMjU5NjkyNjA0MwkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDI1OTY5MjYwNDMCXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAyNTk2OTI2MDQzAl8yBA9ib29zdExQaW50ZXJlc3QIBQ0kdDAyNTk2OTI2MDQzAl8zCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtGYXJtTGFzdEludGVyZXN0BQxmYXJtSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUSa0Jvb3N0TGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFFGtCb29zdExQTGFzdEludGVyZXN0BQ9ib29zdExQaW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa0xhc3RJbnRlcmVzdEhlaWdodAUGaGVpZ2h0BQNuaWwBaQEPbG9ja1NoYXJlVG9rZW5zAgRwb29sCGxvY2tUeXBlCQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQETY2FsY0xvY2tTaGFyZVRva2VucwQFAWkIBQFpBmNhbGxlcgUEcG9vbAUIbG9ja1R5cGUBaQEXbG9ja1NoYXJlVG9rZW5zRnJvbVBvb2wDC2NhbGxlckJ5dGVzBHBvb2wIbG9ja1R5cGUJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1Bvb2xDYWxsAgUBaQUEcG9vbAkBE2NhbGNMb2NrU2hhcmVUb2tlbnMEBQFpCQEHQWRkcmVzcwEFC2NhbGxlckJ5dGVzBQRwb29sBQhsb2NrVHlwZQFpARVsb2NrU3Rha2VkU2hhcmVUb2tlbnMDBHBvb2wIbG9ja1R5cGUKbG9ja0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAQMc2hhcmVBc3NldElkCQEPZ2V0U2hhcmVBc3NldElkAQUEcG9vbAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECnRvdGFsU2hhcmUJARJnZXRUb3RhbFNoYXJlVG9rZW4BBQRwb29sBBF0b3RhbFNoYXJlVmlydHVhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwFCnRvdGFsU2hhcmUEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABA91c2VyTG9ja2VkSGVpZ3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQEFHRvdGFsVXNlclNoYXJlVG9rZW5zCQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAQNJHQwMjc1MzAyNzU4MgkBDWdldExvY2tQYXJhbXMBBQhsb2NrVHlwZQQKbG9ja1BlcmlvZAgFDSR0MDI3NTMwMjc1ODICXzEECGxvY2tDb2VmCAUNJHQwMjc1MzAyNzU4MgJfMgQMbG9ja1dhdmVzRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzBQ1rTG9ja1dhdmVzRmVlAwkAZgIJARVnZXRIZWlnaHRGaXJzdEhhcnZlc3QBBQRwb29sBQZoZWlnaHQJAAIBAjJZb3UgY2FuJ3QgbG9jayBzaGFyZVRva2VucyB0aWxsIGZpcnN0IGhhcnZlc3QgZW5kLgMJAGcCAAAFCGxvY2tUeXBlCQACAQIUbG9ja1R5cGUgbXVzdCBiZSA+IDADCQBmAgUKbG9ja0Ftb3VudAUQdXNlclN0YWtlZEFtb3VudAkAAgEJAKwCAgIZWW91IGNhbid0IGxvY2sgbW9yZSB0aGFuIAkApAMBBRB1c2VyU3Rha2VkQW1vdW50AwkAZgIJAQ5hY2NvdW50QmFsYW5jZQEFDHNoYXJlQXNzZXRJZAUKdG90YWxTaGFyZQkAAgECMEJhbGFuY2Ugb2Ygc2hhcmUtdG9rZW4gaXMgbG93ZXIgdGhhbiB0b3RhbEFtb3VudAMDCQAAAgUPdXNlckxvY2tlZEhlaWd0AAADAwkAZgIAAQkAkAMBCAUBaQhwYXltZW50cwYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUEdW5pdAYJAGYCBQxsb2NrV2F2ZXNGZWUICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BwkAAgEJAKwCAgkArAICAitZb3UgbmVlZCB0byBwYXkgYWRkaXRpb25hbCB3YXZlcyBjb21pc3Npb24gCQCkAwEFDGxvY2tXYXZlc0ZlZQIFV0FWRVMDAwkAAAIFD3VzZXJMb2NrZWRIZWlndAAACQBnAgAABQpsb2NrQW1vdW50BwkAAgECIWxvY2tBbW91bnQgbXVzdCBiZSBncmVhdGVyIHRoYW4gMAMJAGYCAAAFCmxvY2tBbW91bnQJAAIBAhtsb2NrQW1vdW50IG11c3QgYmUgcG9zaXRpdmUDCQBmAgUPdXNlckxvY2tlZEhlaWd0CQBkAgUGaGVpZ2h0BQpsb2NrUGVyaW9kCQACAQJPWW91IGNhbm5vdCBsb2NrIHNoYXJldG9rZW5zIGZvciBhIHBlcmlvZCBsZXNzIHRoYW4gd2hhdCB5b3UgaGF2ZSBhbHJlYWR5IGxvY2tlZAQTdXNlckxvY2tlZEFtb3VudE5ldwkAZAIFEHVzZXJMb2NrZWRBbW91bnQFCmxvY2tBbW91bnQEE3VzZXJTdGFrZWRBbW91bnROZXcJAGUCBRB1c2VyU3Rha2VkQW1vdW50BQpsb2NrQW1vdW50BBJ1c2VyTG9ja2VkSGVpZ3ROZXcJAGQCBQZoZWlnaHQFCmxvY2tQZXJpb2QEFHVzZXJBbW91bnRWaXJ0dWFsTmV3CQBkAgkAawMFE3VzZXJMb2NrZWRBbW91bnROZXcFCGxvY2tDb2VmBRJsb2NrQm9vc3RDb2VmU2NhbGUFE3VzZXJTdGFrZWRBbW91bnROZXcEDSR0MDI4ODcyMjg5NzEJAQljbGFpbUNhbGMCBQRwb29sBQR1c2VyBAxmYXJtSW50ZXJlc3QIBQ0kdDAyODg3MjI4OTcxAl8xBA1ib29zdEludGVyZXN0CAUNJHQwMjg4NzIyODk3MQJfMgQPYm9vc3RMUGludGVyZXN0CAUNJHQwMjg4NzIyODk3MQJfMwQLY2xhaW1BbW91bnQIBQ0kdDAyODg3MjI4OTcxAl80BAp0b1RyZWFzdXJlCAUNJHQwMjg4NzIyODk3MQJfNQQRYXZhaWxhYmxlRnVuZHNOZXcJAGQCCQERdXNlckF2YWlsYWJsZVNXT1ACBQRwb29sBQR1c2VyBQtjbGFpbUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAUTdXNlclN0YWtlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAUTdXNlckxvY2tlZEFtb3VudE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAUSdXNlckxvY2tlZEhlaWd0TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRprVXNlclNoYXJlVG9rZW5zTG9ja2VkVHlwZQUIbG9ja1R5cGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRR1c2VyQW1vdW50VmlydHVhbE5ldwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrU2hhcmVUb2tlbnNWaXJ0dWFsCQBkAgkAZQIFEXRvdGFsU2hhcmVWaXJ0dWFsBRF1c2VyQW1vdW50VmlydHVhbAUUdXNlckFtb3VudFZpcnR1YWxOZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRhrQm9vc3RMUFVzZXJMYXN0SW50ZXJlc3QFD2Jvb3N0TFBpbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRRrQm9vc3RMUExhc3RJbnRlcmVzdAUPYm9vc3RMUGludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsAWkBDnVubG9ja1VzZXJMb2NrAgRwb29sBHVzZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEDGxvY2tXYXZlc0ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwUNa0xvY2tXYXZlc0ZlZQQPdXNlckxvY2tlZEhlaWd0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUca1VzZXJTaGFyZVRva2Vuc0xvY2tlZEhlaWdodAkArAICCQCsAgIJAKwCAgkArAICAhFUaGVyZSBpcyBubyBwb29sIAUEcG9vbAIJIG9yIHVzZXIgBQR1c2VyAgl3aXRoIGxvY2sEEXRvdGFsU2hhcmVWaXJ0dWFsCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwEEHVzZXJTdGFrZWRBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc1N0YWtlZAAABBB1c2VyTG9ja2VkQW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNMb2NrZWQAAAQRdXNlckFtb3VudFZpcnR1YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUXa1VzZXJTaGFyZVRva2Vuc1ZpcnR1YWwFEHVzZXJTdGFrZWRBbW91bnQDCQBmAgUPdXNlckxvY2tlZEhlaWd0BQZoZWlnaHQJAAIBCQCsAgICIllvdSBjYW4ndCB1bmxvY2sgc2hhcmV0b2tlbnMgdGlsbCAJAKQDAQUPdXNlckxvY2tlZEhlaWd0BBN1c2VyU3Rha2VkQW1vdW50TmV3CQBkAgUQdXNlclN0YWtlZEFtb3VudAUQdXNlckxvY2tlZEFtb3VudAQNJHQwMzEyMDEzMTMwMAkBCWNsYWltQ2FsYwIFBHBvb2wFBHVzZXIEDGZhcm1JbnRlcmVzdAgFDSR0MDMxMjAxMzEzMDACXzEEDWJvb3N0SW50ZXJlc3QIBQ0kdDAzMTIwMTMxMzAwAl8yBA9ib29zdExQaW50ZXJlc3QIBQ0kdDAzMTIwMTMxMzAwAl8zBAtjbGFpbUFtb3VudAgFDSR0MDMxMjAxMzEzMDACXzQECnRvVHJlYXN1cmUIBQ0kdDAzMTIwMTMxMzAwAl81BBFhdmFpbGFibGVGdW5kc05ldwkAZAIJARF1c2VyQXZhaWxhYmxlU1dPUAIFBHBvb2wFBHVzZXIFC2NsYWltQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRVrRmFybVVzZXJMYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa0Jvb3N0VXNlckxhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUYa0Jvb3N0TFBVc2VyTGFzdEludGVyZXN0BQ9ib29zdExQaW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa0Zhcm1MYXN0SW50ZXJlc3QFDGZhcm1JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRJrQm9vc3RMYXN0SW50ZXJlc3QFDWJvb3N0SW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUUa0Jvb3N0TFBMYXN0SW50ZXJlc3QFD2Jvb3N0TFBpbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrTGFzdEludGVyZXN0SGVpZ2h0BQZoZWlnaHQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFmtVc2VyU2hhcmVUb2tlbnNTdGFrZWQFE3VzZXJTdGFrZWRBbW91bnROZXcJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFF2tVc2VyU2hhcmVUb2tlbnNWaXJ0dWFsBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tTaGFyZVRva2Vuc1ZpcnR1YWwJAGQCCQBlAgURdG90YWxTaGFyZVZpcnR1YWwFEXVzZXJBbW91bnRWaXJ0dWFsBRN1c2VyU3Rha2VkQW1vdW50TmV3CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBQ5rQXZhaWxhYmxlU1dPUAURYXZhaWxhYmxlRnVuZHNOZXcJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUWa1VzZXJTaGFyZVRva2Vuc0xvY2tlZAkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRxrVXNlclNoYXJlVG9rZW5zTG9ja2VkSGVpZ2h0CQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFGmtVc2VyU2hhcmVUb2tlbnNMb2NrZWRUeXBlCQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFDGxvY2tXYXZlc0ZlZQUEdW5pdAUDbmlsAWkBE3dpdGhkcmF3U2hhcmVUb2tlbnMCBHBvb2wZc2hhcmVUb2tlbnNXaXRoZHJhd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAkBF2NhbGNXaXRoZHJhd1NoYXJlVG9rZW5zBAUBaQgFAWkGY2FsbGVyBQRwb29sBRlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50AWkBG3dpdGhkcmF3U2hhcmVUb2tlbnNGcm9tUG9vbAMLY2FsbGVyQnl0ZXMEcG9vbBlzaGFyZVRva2Vuc1dpdGhkcmF3QW1vdW50CQELdmFsdWVPckVsc2UCCQEIaXNBY3RpdmUACQELdmFsdWVPckVsc2UCCQEKaXNQb29sQ2FsbAIFAWkFBHBvb2wJARdjYWxjV2l0aGRyYXdTaGFyZVRva2VucwQFAWkJAQdBZGRyZXNzAQULY2FsbGVyQnl0ZXMFBHBvb2wFGXNoYXJlVG9rZW5zV2l0aGRyYXdBbW91bnQBaQEFY2xhaW0BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQljYWxjQ2xhaW0DBQFpBQRwb29sCAUBaQZjYWxsZXIBaQENY2xhaW1JbnRlcm5hbAIEcG9vbAZjYWxsZXIJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAJAQt2YWx1ZU9yRWxzZQIJAQppc1NlbGZDYWxsAQUBaQkBCWNhbGNDbGFpbQMFAWkFBHBvb2wJAQdBZGRyZXNzAQUGY2FsbGVyAWkBDWNsYWltQW5kU3Rha2UBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAQhpc0FjdGl2ZQAEC2NsYWltQW1vdW50CgABQAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFBHBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFC2NsYWltQW1vdW50BQtjbGFpbUFtb3VudAQKc3Rha2VUb0dvdgkA/AcEBQpnb3ZBZGRyZXNzAhNsb2NrU1dPUEZyb21GYXJtaW5nBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBFNXT1AFC2NsYWltQW1vdW50BQNuaWwDCQAAAgUKc3Rha2VUb0dvdgUKc3Rha2VUb0dvdgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCGNsYWltQWxsAQVwb29scwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAoBCGNsYWltSW52AgpjbGFpbVRvdGFsBHBvb2wEC2NsYWltQW1vdW50CgABQAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFBHBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFC2NsYWltQW1vdW50BQtjbGFpbUFtb3VudAkAZAIFCmNsYWltVG90YWwFC2NsYWltQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBApjbGFpbVRvdGFsCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhjbGFpbUludgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwDCQAAAgUKY2xhaW1Ub3RhbAAACQACAQIZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFCmNsYWltVG90YWwFBFNXT1AFA25pbAFpARBjbGFpbUFsbEFuZFN0YWtlAQVwb29scwkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAoBCGNsYWltSW52AgpjbGFpbVRvdGFsBHBvb2wEC2NsYWltQW1vdW50CgABQAkA/AcEBQR0aGlzAg1jbGFpbUludGVybmFsCQDMCAIFBHBvb2wJAMwIAggIBQFpBmNhbGxlcgVieXRlcwUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFC2NsYWltQW1vdW50BQtjbGFpbUFtb3VudAkAZAIFCmNsYWltVG90YWwFC2NsYWltQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBApjbGFpbVRvdGFsCgACJGwFBXBvb2xzCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhjbGFpbUludgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyADMANAA1ADYANwA4ADkAOgA7ADwDCQAAAgUKY2xhaW1Ub3RhbAAACQACAQIZWW91IGhhdmUgMCBhdmFpbGFibGUgU1dPUAQKc3Rha2VUb0dvdgkA/AcEBQpnb3ZBZGRyZXNzAhNsb2NrU1dPUEZyb21GYXJtaW5nBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBFNXT1AFCmNsYWltVG90YWwFA25pbAMJAAACBQpzdGFrZVRvR292BQpzdGFrZVRvR292BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEXdXBkYXRlVXNlckJvb3N0SW50ZXJlc3QCBHBvb2wEdXNlcgkBC3ZhbHVlT3JFbHNlAgkBCGlzQWN0aXZlAAMJAQIhPQIIBQFpBmNhbGxlcgUNdm90aW5nQWRkcmVzcwkAAgECI09ubHkgdm9pdGluZyBjYW4gY2FsbCB0aGlzIGZ1bmN0aW9uBA0kdDAzNDc4MjM0ODgxCQEJY2xhaW1DYWxjAgUEcG9vbAUEdXNlcgQMZmFybUludGVyZXN0CAUNJHQwMzQ3ODIzNDg4MQJfMQQNYm9vc3RJbnRlcmVzdAgFDSR0MDM0NzgyMzQ4ODECXzIED2Jvb3N0TFBpbnRlcmVzdAgFDSR0MDM0NzgyMzQ4ODECXzMEC2NsYWltQW1vdW50CAUNJHQwMzQ3ODIzNDg4MQJfNAQKdG9UcmVhc3VyZQgFDSR0MDM0NzgyMzQ4ODECXzUEEWF2YWlsYWJsZUZ1bmRzTmV3CQBkAgkBEXVzZXJBdmFpbGFibGVTV09QAgUEcG9vbAUEdXNlcgULY2xhaW1BbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXIFFWtGYXJtVXNlckxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRZrQm9vc3RVc2VyTGFzdEludGVyZXN0BQ1ib29zdEludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyBRhrQm9vc3RMUFVzZXJMYXN0SW50ZXJlc3QFD2Jvb3N0TFBpbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRFrRmFybUxhc3RJbnRlcmVzdAUMZmFybUludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEmtCb29zdExhc3RJbnRlcmVzdAUNYm9vc3RJbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRRrQm9vc3RMUExhc3RJbnRlcmVzdAUPYm9vc3RMUGludGVyZXN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFE2tMYXN0SW50ZXJlc3RIZWlnaHQFBmhlaWdodAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgUOa0F2YWlsYWJsZVNXT1AFEWF2YWlsYWJsZUZ1bmRzTmV3CQDMCAIJAQdSZWlzc3VlAwUEU1dPUAUKdG9UcmVhc3VyZQYJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmFybWluZ1RyZWFzdXJlQWRkcgUKdG9UcmVhc3VyZQUEU1dPUAUDbmlsAWkBCHNodXRkb3duAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMJAQEhAQUGYWN0aXZlCQACAQkArAICAiJEQXBwIGlzIGFscmVhZHkgc3VzcGVuZGVkLiBDYXVzZTogCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtDYXVzZQIadGhlIGNhdXNlIHdhc24ndCBzcGVjaWZpZWQJAQdzdXNwZW5kAQIPUGF1c2VkIGJ5IGFkbWluAWkBCGFjdGl2YXRlAAkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMFBmFjdGl2ZQkAAgECFkRBcHAgaXMgYWxyZWFkeSBhY3RpdmUJAMwIAgkBDEJvb2xlYW5FbnRyeQIFB2tBY3RpdmUGCQDMCAIJAQtEZWxldGVFbnRyeQEFBmtDYXVzZQUDbmlsAQJ0eAEGdmVyaWZ5AAQHJG1hdGNoMAUCdHgEEmFkbWluUHViS2V5MVNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAFDGFkbWluUHViS2V5MQABAAAEEmFkbWluUHViS2V5MlNpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAEFDGFkbWluUHViS2V5MgABAAAEEmFkbWluUHViS2V5M1NpZ25lZAMJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAIFDGFkbWluUHViS2V5MwABAAAJAGcCCQBkAgkAZAIFEmFkbWluUHViS2V5MVNpZ25lZAUSYWRtaW5QdWJLZXkyU2lnbmVkBRJhZG1pblB1YktleTNTaWduZWQAAgTiMBg=", "height": 2317901, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GbotN5FiRVpLN44N6iBGD1kPERA9VAy8XwheBCenhrXo Next: 8twS7zvqugChLtVgFiBJ7SQcooSJNne1f97CvNwgjexG Diff:
OldNewDifferences
7171
7272 let I = "share_limit_on_first_harvest"
7373
74-let J = "admin_pub_1"
74+let J = "cpmm_contract"
7575
76-let K = "admin_pub_2"
76+let K = "admin_pub_1"
7777
78-let L = "admin_pub_3"
78+let L = "admin_pub_2"
7979
80-let M = "admin_invoke_pub"
80+let M = "admin_pub_3"
8181
82-let N = "money_box_address"
82+let N = "admin_invoke_pub"
8383
84-let O = "voting_address"
84+let O = "money_box_address"
8585
86-let P = "governance_address"
86+let P = "voting_address"
8787
88-let Q = "lp_farming"
88+let Q = "governance_address"
8989
90-let R = "farming_treasure"
90+let R = "lp_farming"
9191
92-let S = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
92+let S = "farming_treasure"
9393
94-let T = 10000000000
94+let T = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9595
96-let U = 100000000
96+let U = 10000000000
9797
98-let V = 1000
98+let V = 100000000
9999
100-let W = 500
100+let W = 1000
101101
102-func X (Y) = {
103- let Z = getString(S, Y)
104- if ($isInstanceOf(Z, "String"))
102+let X = 500
103+
104+func Y (Z) = {
105+ let aa = getString(T, Z)
106+ if ($isInstanceOf(aa, "String"))
105107 then {
106- let aa = Z
107- fromBase58String(aa)
108+ let ab = aa
109+ fromBase58String(ab)
108110 }
109111 else {
110- let ab = Z
111- throw((Y + "is empty"))
112+ let ac = aa
113+ throw((Z + "is empty"))
112114 }
113115 }
114116
115117
116-let ac = X(J)
118+let ad = Y(K)
117119
118-let ad = X(K)
120+let ae = Y(L)
119121
120-let ae = X(L)
122+let af = Y(M)
121123
122-let af = Address(X(N))
124+let ag = Address(Y(O))
123125
124-let ag = Address(X(O))
126+let ah = Address(Y(P))
125127
126-let ah = Address(X(P))
128+let ai = Address(Y(Q))
127129
128-let ai = X(M)
130+let aj = Y(N)
129131
130-let aj = Address(X(Q))
132+let ak = Address(Y(R))
131133
132-let ak = Address(X(R))
134+let al = Address(Y(S))
133135
134-let al = getBooleanValue(this, a)
136+let am = Address(Y(J))
135137
136-let am = valueOrElse(getBoolean(S, b), true)
138+let an = getBooleanValue(this, a)
137139
138-let an = fromBase58String(getStringValue(this, A))
140+let ao = valueOrElse(getBoolean(T, b), true)
139141
140-func ao (ap) = valueOrElse(getInteger(Address(fromBase58String(ap)), H), 0)
142+let ap = fromBase58String(getStringValue(this, A))
143+
144+func aq (ar) = valueOrElse(getInteger(Address(fromBase58String(ar)), H), 0)
141145
142146
143-func aq (ap) = valueOrErrorMessage(getInteger(ap, I), ("No data on the key: " + I))
147+func as (ar) = valueOrErrorMessage(getInteger(ar, I), ("No data on the key: " + I))
144148
145149
146-func ar (ap) = valueOrErrorMessage(getInteger(this, (ap + o)), (("No data on the key: " + ap) + o))
150+func at (ar) = valueOrErrorMessage(getInteger(this, (ar + o)), (("No data on the key: " + ar) + o))
147151
148152
149-func as (ap) = valueOrElse(getInteger(ag, (ap + E)), 0)
153+func au (ar) = valueOrElse(getInteger(ah, (ar + E)), 0)
150154
151155
152-func at (ap,au) = valueOrElse(getInteger(ag, (((au + "_") + ap) + F)), 0)
156+func av (ar,aw) = valueOrElse(getInteger(ah, (((aw + "_") + ar) + F)), 0)
153157
154158
155-func av (ap) = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
159+func ax (ar) = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
156160
157161
158-func aw (ax) = {
159- let Z = ax
160- if ($isInstanceOf(Z, "ByteVector"))
162+func ay (az) = {
163+ let aa = az
164+ if ($isInstanceOf(aa, "ByteVector"))
161165 then {
162- let ay = Z
163- assetBalance(this, ay)
166+ let aA = aa
167+ assetBalance(this, aA)
164168 }
165- else if ($isInstanceOf(Z, "Unit"))
169+ else if ($isInstanceOf(aa, "Unit"))
166170 then {
167- let az = Z
171+ let aB = aa
168172 wavesBalance(this).available
169173 }
170174 else throw("Match error")
171175 }
172176
173177
174-func aA (aB,aC) = {
175- let aD = value(assetInfo(aB)).decimals
176- let aE = value(assetInfo(aC)).decimals
177- let aF = ((aE - aD) + 8)
178- pow(10, 0, aF, 0, 0, DOWN)
178+func aC (aD,aE) = {
179+ let aF = value(assetInfo(aD)).decimals
180+ let aG = value(assetInfo(aE)).decimals
181+ let aH = ((aG - aF) + 8)
182+ pow(10, 0, aH, 0, 0, DOWN)
179183 }
180184
181185
182-func aG (ap,au) = valueOrElse(getInteger(this, (((ap + "_") + au) + B)), 0)
186+func aI (ar,aw) = valueOrElse(getInteger(this, (((ar + "_") + aw) + B)), 0)
183187
184188
185-func aH (ap) = {
186- let aI = valueOrErrorMessage(getInteger(ah, g), ((("No data on the key: " + g) + " at address ") + toString(ah)))
187- let aJ = valueOrErrorMessage(getInteger(ah, h), ((("No data on the key: " + h) + " at address ") + toString(ah)))
188- let aK = valueOrErrorMessage(getInteger(ah, (ap + d)), (((("No data on the key: " + ap) + d) + " at address ") + toString(ah)))
189- let aL = valueOrErrorMessage(getInteger(ah, i), ((("No data on the key: " + i) + " at address ") + toString(ah)))
190- let aM = valueOrElse(getInteger(ah, (ap + f)), aL)
191- let aN = valueOrErrorMessage(getInteger(ah, (ap + e)), (((("No data on the key: " + ap) + e) + " at address ") + toString(ah)))
192- let aO = fraction(aI, aK, T)
193- let aP = fraction(aI, aN, T)
194- if (if ((aO > aI))
189+func aJ (ar) = {
190+ let aK = valueOrErrorMessage(getInteger(ai, g), ((("No data on the key: " + g) + " at address ") + toString(ai)))
191+ let aL = valueOrErrorMessage(getInteger(ai, h), ((("No data on the key: " + h) + " at address ") + toString(ai)))
192+ let aM = valueOrErrorMessage(getInteger(ai, (ar + d)), (((("No data on the key: " + ar) + d) + " at address ") + toString(ai)))
193+ let aN = valueOrErrorMessage(getInteger(ai, i), ((("No data on the key: " + i) + " at address ") + toString(ai)))
194+ let aO = valueOrElse(getInteger(ai, (ar + f)), aN)
195+ let aP = valueOrErrorMessage(getInteger(ai, (ar + e)), (((("No data on the key: " + ar) + e) + " at address ") + toString(ai)))
196+ let aQ = fraction(aK, aM, U)
197+ let aR = fraction(aK, aP, U)
198+ if (if ((aQ > aK))
195199 then true
196- else (aP > aJ))
200+ else (aR > aL))
197201 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
198- else $Tuple4(aO, aL, aP, aM)
202+ else $Tuple4(aQ, aN, aR, aO)
199203 }
200204
201205
202-func aQ (ap) = {
203- let aR = valueOrErrorMessage(getInteger(this, (ap + t)), (("No data on the key: " + ap) + t))
204- let aS = valueOrErrorMessage(getInteger(this, (ap + v)), (("No data on the key: " + ap) + v))
205- let aT = valueOrErrorMessage(getInteger(this, (ap + x)), (("No data on the key: " + ap) + x))
206- let aU = valueOrElse(getInteger(this, (ap + z)), height)
207- $Tuple4(aU, aR, aS, aT)
206+func aS (ar) = {
207+ let aT = valueOrErrorMessage(getInteger(this, (ar + t)), (("No data on the key: " + ar) + t))
208+ let aU = valueOrErrorMessage(getInteger(this, (ar + v)), (("No data on the key: " + ar) + v))
209+ let aV = valueOrErrorMessage(getInteger(this, (ar + x)), (("No data on the key: " + ar) + x))
210+ let aW = valueOrElse(getInteger(this, (ar + z)), height)
211+ $Tuple4(aW, aT, aU, aV)
208212 }
209213
210214
211-func aV (ap,aW) = {
212- let aX = valueOrElse(getInteger(this, (ap + s)), W)
213- fraction(aW, V, (aX + V))
215+func aX (ar,aY) = {
216+ let aZ = valueOrElse(getInteger(this, (ar + s)), X)
217+ fraction(aY, W, (aZ + W))
214218 }
215219
216220
217-func aY (ap,aW) = {
218- let aX = valueOrElse(getInteger(this, (ap + s)), W)
219- fraction(aW, aX, (aX + V))
221+func ba (ar,aY) = {
222+ let aZ = valueOrElse(getInteger(this, (ar + s)), X)
223+ fraction(aY, aZ, (aZ + W))
220224 }
221225
222226
223-func aZ (ap,aU,aL,aM,aR,aS,ba,bb,bc,bd,be,bf) = if ((bd == 0))
224- then $Tuple3(aR, aS, bb)
227+func bb (ar,aW,aN,aO,aT,aU,bc,bd,be,bf,bg,bh) = if ((bf == 0))
228+ then $Tuple3(aT, aU, bd)
225229 else {
226- let bg = if (if (if ((aL > height))
227- then (aL == aM)
230+ let bi = if (if (if ((aN > height))
231+ then (aN == aO)
228232 else false)
229233 then true
230- else if ((height > aL))
231- then (aL != aM)
234+ else if ((height > aN))
235+ then (aN != aO)
232236 else false)
233237 then {
234- let bh = (be * (height - aU))
235- $Tuple4(bh, aR, aS, bb)
238+ let bj = (bg * (height - aW))
239+ $Tuple4(bj, aT, aU, bd)
236240 }
237- else if (if (if ((height > aL))
238- then (aL == aM)
241+ else if (if (if ((height > aN))
242+ then (aN == aO)
239243 else false)
240- then (aU > aL)
244+ then (aW > aN)
241245 else false)
242246 then {
243- let bh = (bc * (height - aU))
244- $Tuple4(bh, aR, aS, bb)
247+ let bj = (be * (height - aW))
248+ $Tuple4(bj, aT, aU, bd)
245249 }
246250 else {
247- let bi = (be * (aL - aU))
248- let bj = (aR + fraction(aV(ap, bi), bf, bd))
249- let bk = (aS + (if ((ba > 0))
250- then fraction(aY(ap, bi), U, ba)
251+ let bk = (bg * (aN - aW))
252+ let bl = (aT + fraction(aX(ar, bk), bh, bf))
253+ let bm = (aU + (if ((bc > 0))
254+ then fraction(ba(ar, bk), V, bc)
251255 else 0))
252- let bl = (bb + (if ((ba > 0))
253- then fraction(fraction(aY(ap, bi), U, bd), U, ba)
256+ let bn = (bd + (if ((bc > 0))
257+ then fraction(fraction(ba(ar, bk), V, bf), V, bc)
254258 else 0))
255- let bm = (bc * (height - aL))
256- $Tuple4(bm, bj, bk, bl)
259+ let bo = (be * (height - aN))
260+ $Tuple4(bo, bl, bm, bn)
257261 }
258- let bn = bg._1
259- let bo = bg._2
260- let bp = bg._3
261- let bq = bg._4
262- let br = (bo + fraction(aV(ap, bn), bf, bd))
263- let bs = (bp + (if ((ba > 0))
264- then fraction(aY(ap, bn), U, ba)
262+ let bp = bi._1
263+ let bq = bi._2
264+ let br = bi._3
265+ let bs = bi._4
266+ let bt = (bq + fraction(aX(ar, bp), bh, bf))
267+ let bu = (br + (if ((bc > 0))
268+ then fraction(ba(ar, bp), V, bc)
265269 else 0))
266- let bt = (bq + (if ((ba > 0))
267- then fraction(fraction(aY(ap, bn), U, bd), U, ba)
270+ let bv = (bs + (if ((bc > 0))
271+ then fraction(fraction(ba(ar, bp), V, bf), V, bc)
268272 else 0))
269- $Tuple3(br, bs, bt)
273+ $Tuple3(bt, bu, bv)
270274 }
271275
272276
273-func bu (ap,au) = {
274- let bf = aA(an, av(ap))
275- let ba = as(ap)
276- let bv = at(ap, au)
277- let bw = ar(ap)
278- let bx = valueOrElse(getInteger(this, (ap + p)), bw)
279- let by = aQ(ap)
280- let aU = by._1
281- let aR = by._2
282- let aS = by._3
283- let aT = by._4
284- let bz = aH(ap)
285- let bc = bz._1
286- let aL = bz._2
287- let be = bz._3
288- let aM = bz._4
289- let bA = valueOrElse(getInteger(this, (((ap + "_") + au) + u)), aR)
290- let bB = valueOrElse(getInteger(this, (((ap + "_") + au) + w)), aS)
291- let bC = valueOrElse(getInteger(this, (((ap + "_") + au) + y)), aT)
292- let bD = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
293- let bE = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), bD)
294- let bF = aZ(ap, aU, aL, aM, aR, aS, ba, aT, bc, bx, be, bf)
295- let br = bF._1
296- let bs = bF._2
297- let bt = bF._3
298- let bG = fraction(bE, (br - bA), bf)
299- let bH = fraction(bv, (bs - bB), U)
300- let bI = fraction(toBigInt(bE), toBigInt(bv), toBigInt(1))
301- let bJ = toInt(fraction(fraction(bI, toBigInt((bt - bC)), toBigInt(U)), toBigInt(1), toBigInt(U)))
302- let bK = (bH - bJ)
303- if ((0 > bK))
277+func bw (ar,aw) = {
278+ let bh = aC(ap, ax(ar))
279+ let bc = au(ar)
280+ let bx = av(ar, aw)
281+ let by = at(ar)
282+ let bz = valueOrElse(getInteger(this, (ar + p)), by)
283+ let bA = aS(ar)
284+ let aW = bA._1
285+ let aT = bA._2
286+ let aU = bA._3
287+ let aV = bA._4
288+ let bB = aJ(ar)
289+ let be = bB._1
290+ let aN = bB._2
291+ let bg = bB._3
292+ let aO = bB._4
293+ let bC = valueOrElse(getInteger(this, (((ar + "_") + aw) + u)), aT)
294+ let bD = valueOrElse(getInteger(this, (((ar + "_") + aw) + w)), aU)
295+ let bE = valueOrElse(getInteger(this, (((ar + "_") + aw) + y)), aV)
296+ let bF = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
297+ let bG = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), bF)
298+ let bH = bb(ar, aW, aN, aO, aT, aU, bc, aV, be, bz, bg, bh)
299+ let bt = bH._1
300+ let bu = bH._2
301+ let bv = bH._3
302+ let bI = fraction(bG, (bt - bC), bh)
303+ let bJ = fraction(bx, (bu - bD), V)
304+ let bK = fraction(toBigInt(bG), toBigInt(bx), toBigInt(1))
305+ let bL = toInt(fraction(fraction(bK, toBigInt((bv - bE)), toBigInt(V)), toBigInt(1), toBigInt(V)))
306+ let bM = (bJ - bL)
307+ if ((0 > bM))
304308 then throw("toTreasury < 0")
305- else $Tuple5(br, bs, bt, (bG + bJ), bK)
309+ else $Tuple5(bt, bu, bv, (bI + bL), bM)
306310 }
307311
308312
309-func bL (bM,au) = {
310- func bN (bO,ap) = {
311- let bP = bO
312- let bQ = bP._1
313- let bR = bP._2
314- let bS = bu(ap, au)
315- let bT = bS._1
316- let bU = bS._2
317- let bV = bS._3
318- let bW = bS._4
319- let bX = bS._5
320- let bY = (aG(ap, au) + bW)
321- $Tuple2((bQ :+ ap), (bR :+ bY))
313+func bN (bO,aw) = {
314+ func bP (bQ,ar) = {
315+ let bR = bQ
316+ let bS = bR._1
317+ let bT = bR._2
318+ let bU = bw(ar, aw)
319+ let bV = bU._1
320+ let bW = bU._2
321+ let bX = bU._3
322+ let bY = bU._4
323+ let bZ = bU._5
324+ let ca = (aI(ar, aw) + bY)
325+ $Tuple2((bS :+ ar), (bT :+ ca))
322326 }
323327
324- let bZ = bM
325- let ca = size(bZ)
326- let cb = $Tuple2(nil, nil)
327- func cc (cd,ce) = if ((ce >= ca))
328- then cd
329- else bN(cd, bZ[ce])
328+ let cb = bO
329+ let cc = size(cb)
330+ let cd = $Tuple2(nil, nil)
331+ func ce (cf,cg) = if ((cg >= cc))
332+ then cf
333+ else bP(cf, cb[cg])
330334
331- func cf (cd,ce) = if ((ce >= ca))
332- then cd
335+ func ch (cf,cg) = if ((cg >= cc))
336+ then cf
333337 else throw("List size exceeds 60")
334338
335- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
339+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
336340 }
337341
338342
339-func cg (ap,au,ch,ci,cj) = if ((ao(ap) > height))
343+func ci (ar,aw,cj,ck,cl) = if ((aq(ar) > height))
340344 then {
341- let ck = valueOrElse(getInteger(ag, (ap + D)), 0)
342- let cl = valueOrElse(getInteger(ag, (((au + "_") + ap) + G)), 0)
343- let cm = aq(addressFromStringValue(ap))
344- let cn = (fraction(cm, cl, ck) - ch)
345- if ((cj > 0))
345+ let cm = valueOrElse(getInteger(ah, (ar + D)), 0)
346+ let cn = valueOrElse(getInteger(ah, (((aw + "_") + ar) + G)), 0)
347+ let co = as(addressFromStringValue(ar))
348+ let cp = (fraction(co, cn, cm) - cj)
349+ if ((cl > 0))
346350 then throw("You can't lock shareTokens till first harvest end.")
347- else if ((cl == 0))
351+ else if ((cn == 0))
348352 then 0
349- else if ((ci >= cn))
350- then (ci - cn)
353+ else if ((ck >= cp))
354+ then (ck - cp)
351355 else 0
352356 }
353357 else 0
354358
355359
356-func co (cp) = {
357- let cq = split(valueOrErrorMessage(getString(this, (toString(cp) + q)), ("There are no key for lock type" + toString(cp))), "_")
358- $Tuple2(parseIntValue(cq[0]), parseIntValue(cq[1]))
360+func cq (cr) = {
361+ let cs = split(valueOrErrorMessage(getString(this, (toString(cr) + q)), ("There are no key for lock type" + toString(cr))), "_")
362+ $Tuple2(parseIntValue(cs[0]), parseIntValue(cs[1]))
359363 }
360364
361365
362-func cr (cs) = [BooleanEntry(a, false), StringEntry(c, cs)]
366+func ct (cu) = [BooleanEntry(a, false), StringEntry(c, cu)]
363367
364368
365-func ct () = if (if (al)
366- then am
369+func cv () = if (if (an)
370+ then ao
367371 else false)
368372 then unit
369373 else throw("DApp is inactive at this moment")
370374
371375
372-func cu (cv) = if (containsElement([ac, ad, ae], cv.callerPublicKey))
376+func cw (cx) = if (containsElement([ad, ae, af], cx.callerPublicKey))
373377 then unit
374378 else throw("Only admin can call this function")
375379
376380
377-func cw (cv,ap) = if ((toString(cv.caller) == ap))
381+func cy (cx,ar) = if (if ((toString(cx.caller) == ar))
382+ then true
383+ else (cx.caller == am))
378384 then unit
379385 else throw("Only pool can call this function")
380386
381387
382-func cx (cv) = if ((cv.caller == this))
388+func cz (cx) = if ((cx.caller == this))
383389 then unit
384390 else throw("Only contract itself can call this function")
385391
386392
387-func cy (cv,cz,ap,cj) = {
388- let cA = av(ap)
389- let au = toString(cz)
390- let cB = ar(ap)
391- let bx = valueOrElse(getInteger(this, (ap + p)), cB)
392- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
393- let cD = valueOrElse(getInteger(this, (((ap + "_") + au) + m)), 0)
394- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
395- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
396- let cG = ((cC + cE) + cv.payments[0].amount)
397- let cH = co(cj)
398- let cI = cH._1
399- let cJ = cH._2
400- let cK = getIntegerValue(this, r)
401- if ((cv.payments[0].assetId != cA))
393+func cA (cx,cB,ar,cl) = {
394+ let cC = ax(ar)
395+ let aw = toString(cB)
396+ let cD = at(ar)
397+ let bz = valueOrElse(getInteger(this, (ar + p)), cD)
398+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
399+ let cF = valueOrElse(getInteger(this, (((ar + "_") + aw) + m)), 0)
400+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
401+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
402+ let cI = ((cE + cG) + cx.payments[0].amount)
403+ let cJ = cq(cl)
404+ let cK = cJ._1
405+ let cL = cJ._2
406+ let cM = getIntegerValue(this, r)
407+ if ((cx.payments[0].assetId != cC))
402408 then throw("Wrong sharetoken in payment")
403- else if ((0 >= cv.payments[0].amount))
409+ else if ((0 >= cx.payments[0].amount))
404410 then throw("Payment amount must be greater than 0")
405- else if ((0 > cj))
411+ else if ((0 > cl))
406412 then throw("lockType must be >= 0")
407413 else {
408- let cL = cg(ap, au, cC, cv.payments[0].amount, cj)
409- if ((cL == cL))
414+ let cN = ci(ar, aw, cE, cx.payments[0].amount, cl)
415+ if ((cN == cN))
410416 then {
411- let cM = if ((cj == 0))
417+ let cO = if ((cl == 0))
412418 then {
413- let cN = ((cF + cv.payments[0].amount) - cL)
414- $Tuple2([IntegerEntry((((ap + "_") + au) + j), ((cC + cv.payments[0].amount) - cL)), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx + cv.payments[0].amount) - cL)), ScriptTransfer(cz, cL, cv.payments[0].assetId)], ((cB + cv.payments[0].amount) - cL))
419+ let cP = ((cH + cx.payments[0].amount) - cN)
420+ $Tuple2([IntegerEntry((((ar + "_") + aw) + j), ((cE + cx.payments[0].amount) - cN)), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz + cx.payments[0].amount) - cN)), ScriptTransfer(cB, cN, cx.payments[0].assetId)], ((cD + cx.payments[0].amount) - cN))
415421 }
416- else if (if ((cD == 0))
417- then if (if ((2 > size(cv.payments)))
422+ else if (if ((cF == 0))
423+ then if (if ((2 > size(cx.payments)))
418424 then true
419- else (cv.payments[1].assetId != unit))
425+ else (cx.payments[1].assetId != unit))
420426 then true
421- else (cK > cv.payments[1].amount)
427+ else (cM > cx.payments[1].amount)
422428 else false)
423- then throw((("You need to pay additional waves comission " + toString(cK)) + "WAVES"))
424- else if ((cD > (height + cI)))
429+ then throw((("You need to pay additional waves comission " + toString(cM)) + "WAVES"))
430+ else if ((cF > (height + cK)))
425431 then throw("You cannot lock sharetokens for a period less than what you have already locked")
426432 else {
427- let cO = (cE + cv.payments[0].amount)
428- let cP = (height + cI)
429- let cN = (fraction(cO, cJ, V) + cC)
430- $Tuple2([IntegerEntry((((ap + "_") + au) + k), cO), IntegerEntry((((ap + "_") + au) + m), cP), IntegerEntry((((ap + "_") + au) + l), cj), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx - cF) + cN))], (cB + cv.payments[0].amount))
433+ let cQ = (cG + cx.payments[0].amount)
434+ let cR = (height + cK)
435+ let cP = (fraction(cQ, cL, W) + cE)
436+ $Tuple2([IntegerEntry((((ar + "_") + aw) + k), cQ), IntegerEntry((((ar + "_") + aw) + m), cR), IntegerEntry((((ar + "_") + aw) + l), cl), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz - cH) + cP))], (cD + cx.payments[0].amount))
431437 }
432- let cQ = cM._1
433- let cR = cM._2
434- if ((aw(cA) > cR))
438+ let cS = cO._1
439+ let cT = cO._2
440+ if ((ay(cC) > cT))
435441 then throw("Balance of share-token is lower than totalAmount")
436442 else {
437- let cS = bu(ap, au)
438- let aR = cS._1
439- let aS = cS._2
440- let cT = cS._3
441- let bW = cS._4
442- let cU = cS._5
443- let cV = (aG(ap, au) + bW)
444- let cW = if ((getString(Address(fromBase58String(ap)), "version") == "3.0.0"))
445- then invoke(aj, "updateUserInterest", [au, ap, cG], nil)
443+ let cU = bw(ar, aw)
444+ let aT = cU._1
445+ let aU = cU._2
446+ let cV = cU._3
447+ let bY = cU._4
448+ let cW = cU._5
449+ let cX = (aI(ar, aw) + bY)
450+ let cY = if ((getString(Address(fromBase58String(ar)), "version") == "3.0.0"))
451+ then invoke(ak, "updateUserInterest", [aw, ar, cI], nil)
446452 else 0
447- if ((cW == cW))
448- then ([IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((ap + o), cR), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)] ++ cQ)
453+ if ((cY == cY))
454+ then ([IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((ar + o), cT), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)] ++ cS)
449455 else throw("Strict value is not equal to itself.")
450456 }
451457 }
454460 }
455461
456462
457-func cX (cv,cz,ap,cY) = valueOrElse(ct(), {
458- let cZ = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
459- let au = toString(cz)
460- let da = bu(ap, au)
461- let aR = da._1
462- let aS = da._2
463- let cT = da._3
464- let bW = da._4
465- let cU = da._5
466- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
467- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
468- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
469- let db = (cC - cY)
470- let cV = (aG(ap, au) + bW)
471- let dc = ar(ap)
472- let bx = valueOrElse(getInteger(this, (ap + p)), dc)
473- let dd = (dc - cY)
474- let de = (bx - cY)
475- let cN = (cF - cY)
476- if ((cY > cC))
463+func cZ (cx,cB,ar,da) = valueOrElse(cv(), {
464+ let db = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
465+ let aw = toString(cB)
466+ let dc = bw(ar, aw)
467+ let aT = dc._1
468+ let aU = dc._2
469+ let cV = dc._3
470+ let bY = dc._4
471+ let cW = dc._5
472+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
473+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
474+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
475+ let dd = (cE - da)
476+ let cX = (aI(ar, aw) + bY)
477+ let de = at(ar)
478+ let bz = valueOrElse(getInteger(this, (ar + p)), de)
479+ let df = (de - da)
480+ let dg = (bz - da)
481+ let cP = (cH - da)
482+ if ((da > cE))
477483 then throw("Withdraw amount more then user locked amount")
478- else if ((aw(cZ) > dc))
484+ else if ((ay(db) > de))
479485 then throw("Balance of share-token is lower than totalAmount")
480486 else {
481- let cW = if ((getString(Address(fromBase58String(ap)), "version") == "3.0.0"))
482- then invoke(aj, "updateUserInterest", [au, ap, (cC + cE)], nil)
487+ let cY = if ((getString(Address(fromBase58String(ar)), "version") == "3.0.0"))
488+ then invoke(ak, "updateUserInterest", [aw, ar, (cE + cG)], nil)
483489 else 0
484- if ((cW == cW))
485- then [IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + o), dd), IntegerEntry((ap + p), de), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an), ScriptTransfer(cv.caller, cY, cZ)]
490+ if ((cY == cY))
491+ then [IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + o), df), IntegerEntry((ar + p), dg), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap), ScriptTransfer(cx.caller, da, db)]
486492 else throw("Strict value is not equal to itself.")
487493 }
488494 })
489495
490496
491-func df (cv,ap,cz) = {
492- let cZ = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
493- let au = toString(cz)
494- let bd = ar(ap)
495- let dg = bu(ap, au)
496- let aR = dg._1
497- let aS = dg._2
498- let cT = dg._3
499- let bW = dg._4
500- let cU = dg._5
501- let bY = (aG(ap, au) + bW)
502- if ((bY == 0))
497+func dh (cx,ar,cB) = {
498+ let db = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
499+ let aw = toString(cB)
500+ let bf = at(ar)
501+ let di = bw(ar, aw)
502+ let aT = di._1
503+ let aU = di._2
504+ let cV = di._3
505+ let bY = di._4
506+ let cW = di._5
507+ let ca = (aI(ar, aw) + bY)
508+ if ((ca == 0))
503509 then throw("You have 0 available SWOP")
504- else if ((aw(cZ) > bd))
510+ else if ((ay(db) > bf))
505511 then throw("Balance of share-token is lower than totalAmount")
506512 else {
507- let dh = if ((cv.caller != this))
508- then [ScriptTransfer(cv.caller, bY, an)]
513+ let dj = if ((cx.caller != this))
514+ then [ScriptTransfer(cx.caller, ca, ap)]
509515 else nil
510- $Tuple2(([IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), 0), Reissue(an, (cU + bY), true), ScriptTransfer(ak, cU, an)] ++ dh), bY)
516+ $Tuple2(([IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), 0), Reissue(ap, (cW + ca), true), ScriptTransfer(al, cW, ap)] ++ dj), ca)
511517 }
512518 }
513519
514520
515-@Callable(cv)
516-func init (di) = if (isDefined(getString(this, A)))
521+@Callable(cx)
522+func init (dk) = if (isDefined(getString(this, A)))
517523 then throw("SWOP already initialized")
518524 else {
519- let dj = 100000000000000
520- let dk = Issue("SWOP", "SWOP protocol token", dj, 8, true)
521- let dl = calculateAssetId(dk)
522-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dj, 8, true), StringEntry(A, toBase58String(dl))]
525+ let dl = 100000000000000
526+ let dm = Issue("SWOP", "SWOP protocol token", dl, 8, true)
527+ let dn = calculateAssetId(dm)
528+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dl, 8, true), StringEntry(A, toBase58String(dn))]
523529 }
524530
525531
526532
527-@Callable(cv)
528-func initPoolShareFarming (ap) = valueOrElse(cu(cv), [IntegerEntry((ap + o), 0), IntegerEntry((ap + t), 0), IntegerEntry((ap + v), 0), IntegerEntry((ap + x), 0), IntegerEntry((ap + z), height)])
533+@Callable(cx)
534+func initPoolShareFarming (ar) = valueOrElse(cw(cx), [IntegerEntry((ar + o), 0), IntegerEntry((ar + t), 0), IntegerEntry((ar + v), 0), IntegerEntry((ar + x), 0), IntegerEntry((ar + z), height)])
529535
530536
531537
532-@Callable(cv)
533-func updatePoolInterest (ap) = valueOrElse(ct(), if ((cv.caller != ah))
538+@Callable(cx)
539+func updatePoolInterest (ar) = valueOrElse(cv(), if ((cx.caller != ai))
534540 then throw("Only Governance can call this function")
535541 else {
536- let au = toString(addressFromPublicKey(ai))
537- let dm = bu(ap, au)
538- let aR = dm._1
539- let aS = dm._2
540- let cT = dm._3
541-[IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height)]
542+ let aw = toString(addressFromPublicKey(aj))
543+ let do = bw(ar, aw)
544+ let aT = do._1
545+ let aU = do._2
546+ let cV = do._3
547+[IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height)]
542548 })
543549
544550
545551
546-@Callable(cv)
547-func lockShareTokens (ap,cj) = valueOrElse(ct(), cy(cv, cv.caller, ap, cj))
552+@Callable(cx)
553+func lockShareTokens (ar,cl) = valueOrElse(cv(), cA(cx, cx.caller, ar, cl))
548554
549555
550556
551-@Callable(cv)
552-func lockShareTokensFromPool (dn,ap,cj) = valueOrElse(ct(), valueOrElse(cw(cv, ap), cy(cv, Address(dn), ap, cj)))
557+@Callable(cx)
558+func lockShareTokensFromPool (dp,ar,cl) = valueOrElse(cv(), valueOrElse(cy(cx, ar), cA(cx, Address(dp), ar, cl)))
553559
554560
555561
556-@Callable(cv)
557-func lockStakedShareTokens (ap,cj,do) = valueOrElse(ct(), {
558- let cA = av(ap)
559- let au = toString(cv.caller)
560- let cB = ar(ap)
561- let bx = valueOrElse(getInteger(this, (ap + p)), cB)
562- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
563- let cD = valueOrElse(getInteger(this, (((ap + "_") + au) + m)), 0)
564- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
565- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
566- let cG = (cC + cE)
567- let dp = co(cj)
568- let cI = dp._1
569- let cJ = dp._2
570- let cK = getIntegerValue(this, r)
571- if ((ao(ap) > height))
562+@Callable(cx)
563+func lockStakedShareTokens (ar,cl,dq) = valueOrElse(cv(), {
564+ let cC = ax(ar)
565+ let aw = toString(cx.caller)
566+ let cD = at(ar)
567+ let bz = valueOrElse(getInteger(this, (ar + p)), cD)
568+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
569+ let cF = valueOrElse(getInteger(this, (((ar + "_") + aw) + m)), 0)
570+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
571+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
572+ let cI = (cE + cG)
573+ let dr = cq(cl)
574+ let cK = dr._1
575+ let cL = dr._2
576+ let cM = getIntegerValue(this, r)
577+ if ((aq(ar) > height))
572578 then throw("You can't lock shareTokens till first harvest end.")
573- else if ((0 >= cj))
579+ else if ((0 >= cl))
574580 then throw("lockType must be > 0")
575- else if ((do > cC))
576- then throw(("You can't lock more than " + toString(cC)))
577- else if ((aw(cA) > cB))
581+ else if ((dq > cE))
582+ then throw(("You can't lock more than " + toString(cE)))
583+ else if ((ay(cC) > cD))
578584 then throw("Balance of share-token is lower than totalAmount")
579- else if (if ((cD == 0))
580- then if (if ((1 > size(cv.payments)))
585+ else if (if ((cF == 0))
586+ then if (if ((1 > size(cx.payments)))
581587 then true
582- else (cv.payments[0].assetId != unit))
588+ else (cx.payments[0].assetId != unit))
583589 then true
584- else (cK > cv.payments[0].amount)
590+ else (cM > cx.payments[0].amount)
585591 else false)
586- then throw((("You need to pay additional waves comission " + toString(cK)) + "WAVES"))
587- else if (if ((cD == 0))
588- then (0 >= do)
592+ then throw((("You need to pay additional waves comission " + toString(cM)) + "WAVES"))
593+ else if (if ((cF == 0))
594+ then (0 >= dq)
589595 else false)
590596 then throw("lockAmount must be greater than 0")
591- else if ((0 > do))
597+ else if ((0 > dq))
592598 then throw("lockAmount must be positive")
593- else if ((cD > (height + cI)))
599+ else if ((cF > (height + cK)))
594600 then throw("You cannot lock sharetokens for a period less than what you have already locked")
595601 else {
596- let cO = (cE + do)
597- let db = (cC - do)
598- let cP = (height + cI)
599- let cN = (fraction(cO, cJ, V) + db)
600- let dq = bu(ap, au)
601- let aR = dq._1
602- let aS = dq._2
603- let cT = dq._3
604- let bW = dq._4
605- let cU = dq._5
606- let cV = (aG(ap, au) + bW)
607-[IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + k), cO), IntegerEntry((((ap + "_") + au) + m), cP), IntegerEntry((((ap + "_") + au) + l), cj), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx - cF) + cN)), IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)]
602+ let cQ = (cG + dq)
603+ let dd = (cE - dq)
604+ let cR = (height + cK)
605+ let cP = (fraction(cQ, cL, W) + dd)
606+ let ds = bw(ar, aw)
607+ let aT = ds._1
608+ let aU = ds._2
609+ let cV = ds._3
610+ let bY = ds._4
611+ let cW = ds._5
612+ let cX = (aI(ar, aw) + bY)
613+[IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + k), cQ), IntegerEntry((((ar + "_") + aw) + m), cR), IntegerEntry((((ar + "_") + aw) + l), cl), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz - cH) + cP)), IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)]
608614 }
609615 })
610616
611617
612618
613-@Callable(cv)
614-func unlockUserLock (ap,au) = valueOrElse(ct(), {
615- let cK = getIntegerValue(this, r)
616- let cD = valueOrErrorMessage(getInteger(this, (((ap + "_") + au) + m)), (((("There is no pool " + ap) + " or user ") + au) + "with lock"))
617- let bx = getIntegerValue(this, (ap + p))
618- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
619- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
620- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
621- if ((cD > height))
622- then throw(("You can't unlock sharetokens till " + toString(cD)))
619+@Callable(cx)
620+func unlockUserLock (ar,aw) = valueOrElse(cv(), {
621+ let cM = getIntegerValue(this, r)
622+ let cF = valueOrErrorMessage(getInteger(this, (((ar + "_") + aw) + m)), (((("There is no pool " + ar) + " or user ") + aw) + "with lock"))
623+ let bz = getIntegerValue(this, (ar + p))
624+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
625+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
626+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
627+ if ((cF > height))
628+ then throw(("You can't unlock sharetokens till " + toString(cF)))
623629 else {
624- let db = (cC + cE)
625- let dr = bu(ap, au)
626- let aR = dr._1
627- let aS = dr._2
628- let cT = dr._3
629- let bW = dr._4
630- let cU = dr._5
631- let cV = (aG(ap, au) + bW)
632-[IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + n), db), IntegerEntry((ap + p), ((bx - cF) + db)), IntegerEntry((((ap + "_") + au) + B), cV), DeleteEntry((((ap + "_") + au) + k)), DeleteEntry((((ap + "_") + au) + m)), DeleteEntry((((ap + "_") + au) + l)), Reissue(an, cU, true), ScriptTransfer(ak, cU, an), ScriptTransfer(cv.caller, cK, unit)]
630+ let dd = (cE + cG)
631+ let dt = bw(ar, aw)
632+ let aT = dt._1
633+ let aU = dt._2
634+ let cV = dt._3
635+ let bY = dt._4
636+ let cW = dt._5
637+ let cX = (aI(ar, aw) + bY)
638+[IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + n), dd), IntegerEntry((ar + p), ((bz - cH) + dd)), IntegerEntry((((ar + "_") + aw) + B), cX), DeleteEntry((((ar + "_") + aw) + k)), DeleteEntry((((ar + "_") + aw) + m)), DeleteEntry((((ar + "_") + aw) + l)), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap), ScriptTransfer(cx.caller, cM, unit)]
633639 }
634640 })
635641
636642
637643
638-@Callable(cv)
639-func withdrawShareTokens (ap,cY) = valueOrElse(ct(), cX(cv, cv.caller, ap, cY))
644+@Callable(cx)
645+func withdrawShareTokens (ar,da) = valueOrElse(cv(), cZ(cx, cx.caller, ar, da))
640646
641647
642648
643-@Callable(cv)
644-func withdrawShareTokensFromPool (dn,ap,cY) = valueOrElse(ct(), valueOrElse(cw(cv, ap), cX(cv, Address(dn), ap, cY)))
649+@Callable(cx)
650+func withdrawShareTokensFromPool (dp,ar,da) = valueOrElse(cv(), valueOrElse(cy(cx, ar), cZ(cx, Address(dp), ar, da)))
645651
646652
647653
648-@Callable(cv)
649-func claim (ap) = valueOrElse(ct(), df(cv, ap, cv.caller))
654+@Callable(cx)
655+func claim (ar) = valueOrElse(cv(), dh(cx, ar, cx.caller))
650656
651657
652658
653-@Callable(cv)
654-func claimInternal (ap,cz) = valueOrElse(ct(), valueOrElse(cx(cv), df(cv, ap, Address(cz))))
659+@Callable(cx)
660+func claimInternal (ar,cB) = valueOrElse(cv(), valueOrElse(cz(cx), dh(cx, ar, Address(cB))))
655661
656662
657663
658-@Callable(cv)
659-func claimAndStake (ap) = valueOrElse(ct(), {
660- let bW = {
661- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
662- if ($isInstanceOf(ds, "Int"))
663- then ds
664- else throw(($getType(ds) + " couldn't be cast to Int"))
664+@Callable(cx)
665+func claimAndStake (ar) = valueOrElse(cv(), {
666+ let bY = {
667+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
668+ if ($isInstanceOf(du, "Int"))
669+ then du
670+ else throw(($getType(du) + " couldn't be cast to Int"))
665671 }
666- if ((bW == bW))
672+ if ((bY == bY))
667673 then {
668- let dt = invoke(ah, "lockSWOPFromFarming", nil, [AttachedPayment(an, bW)])
669- if ((dt == dt))
674+ let dv = invoke(ai, "lockSWOPFromFarming", nil, [AttachedPayment(ap, bY)])
675+ if ((dv == dv))
670676 then nil
671677 else throw("Strict value is not equal to itself.")
672678 }
675681
676682
677683
678-@Callable(cv)
679-func claimAll (bM) = valueOrElse(ct(), {
680- func du (dv,ap) = {
681- let bW = {
682- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
683- if ($isInstanceOf(ds, "Int"))
684- then ds
685- else throw(($getType(ds) + " couldn't be cast to Int"))
684+@Callable(cx)
685+func claimAll (bO) = valueOrElse(cv(), {
686+ func dw (dx,ar) = {
687+ let bY = {
688+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
689+ if ($isInstanceOf(du, "Int"))
690+ then du
691+ else throw(($getType(du) + " couldn't be cast to Int"))
686692 }
687- if ((bW == bW))
688- then (dv + bW)
693+ if ((bY == bY))
694+ then (dx + bY)
689695 else throw("Strict value is not equal to itself.")
690696 }
691697
692- let dv = {
693- let bZ = bM
694- let ca = size(bZ)
695- let cb = 0
696- func cc (cd,ce) = if ((ce >= ca))
697- then cd
698- else du(cd, bZ[ce])
698+ let dx = {
699+ let cb = bO
700+ let cc = size(cb)
701+ let cd = 0
702+ func ce (cf,cg) = if ((cg >= cc))
703+ then cf
704+ else dw(cf, cb[cg])
699705
700- func cf (cd,ce) = if ((ce >= ca))
701- then cd
706+ func ch (cf,cg) = if ((cg >= cc))
707+ then cf
702708 else throw("List size exceeds 60")
703709
704- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
710+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
705711 }
706- if ((dv == 0))
712+ if ((dx == 0))
707713 then throw("You have 0 available SWOP")
708- else [ScriptTransfer(cv.caller, dv, an)]
714+ else [ScriptTransfer(cx.caller, dx, ap)]
709715 })
710716
711717
712718
713-@Callable(cv)
714-func claimAllAndStake (bM) = valueOrElse(ct(), {
715- func du (dv,ap) = {
716- let bW = {
717- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
718- if ($isInstanceOf(ds, "Int"))
719- then ds
720- else throw(($getType(ds) + " couldn't be cast to Int"))
719+@Callable(cx)
720+func claimAllAndStake (bO) = valueOrElse(cv(), {
721+ func dw (dx,ar) = {
722+ let bY = {
723+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
724+ if ($isInstanceOf(du, "Int"))
725+ then du
726+ else throw(($getType(du) + " couldn't be cast to Int"))
721727 }
722- if ((bW == bW))
723- then (dv + bW)
728+ if ((bY == bY))
729+ then (dx + bY)
724730 else throw("Strict value is not equal to itself.")
725731 }
726732
727- let dv = {
728- let bZ = bM
729- let ca = size(bZ)
730- let cb = 0
731- func cc (cd,ce) = if ((ce >= ca))
732- then cd
733- else du(cd, bZ[ce])
733+ let dx = {
734+ let cb = bO
735+ let cc = size(cb)
736+ let cd = 0
737+ func ce (cf,cg) = if ((cg >= cc))
738+ then cf
739+ else dw(cf, cb[cg])
734740
735- func cf (cd,ce) = if ((ce >= ca))
736- then cd
741+ func ch (cf,cg) = if ((cg >= cc))
742+ then cf
737743 else throw("List size exceeds 60")
738744
739- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
745+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
740746 }
741- if ((dv == 0))
747+ if ((dx == 0))
742748 then throw("You have 0 available SWOP")
743749 else {
744- let dt = invoke(ah, "lockSWOPFromFarming", nil, [AttachedPayment(an, dv)])
745- if ((dt == dt))
750+ let dv = invoke(ai, "lockSWOPFromFarming", nil, [AttachedPayment(ap, dx)])
751+ if ((dv == dv))
746752 then nil
747753 else throw("Strict value is not equal to itself.")
748754 }
750756
751757
752758
753-@Callable(cv)
754-func updateUserBoostInterest (ap,au) = valueOrElse(ct(), if ((cv.caller != ag))
759+@Callable(cx)
760+func updateUserBoostInterest (ar,aw) = valueOrElse(cv(), if ((cx.caller != ah))
755761 then throw("Only voiting can call this function")
756762 else {
757- let dw = bu(ap, au)
758- let aR = dw._1
759- let aS = dw._2
760- let cT = dw._3
761- let bW = dw._4
762- let cU = dw._5
763- let cV = (aG(ap, au) + bW)
764-[IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)]
763+ let dy = bw(ar, aw)
764+ let aT = dy._1
765+ let aU = dy._2
766+ let cV = dy._3
767+ let bY = dy._4
768+ let cW = dy._5
769+ let cX = (aI(ar, aw) + bY)
770+[IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)]
765771 })
766772
767773
768774
769-@Callable(cv)
770-func shutdown () = valueOrElse(cu(cv), if (!(al))
775+@Callable(cx)
776+func shutdown () = valueOrElse(cw(cx), if (!(an))
771777 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
772- else cr("Paused by admin"))
778+ else ct("Paused by admin"))
773779
774780
775781
776-@Callable(cv)
777-func activate () = valueOrElse(cu(cv), if (al)
782+@Callable(cx)
783+func activate () = valueOrElse(cw(cx), if (an)
778784 then throw("DApp is already active")
779785 else [BooleanEntry(a, true), DeleteEntry(c)])
780786
781787
782-@Verifier(dx)
783-func dy () = {
784- let Z = dx
785- let dz = if (sigVerify(dx.bodyBytes, dx.proofs[0], ac))
788+@Verifier(dz)
789+func dA () = {
790+ let aa = dz
791+ let dB = if (sigVerify(dz.bodyBytes, dz.proofs[0], ad))
786792 then 1
787793 else 0
788- let dA = if (sigVerify(dx.bodyBytes, dx.proofs[1], ad))
794+ let dC = if (sigVerify(dz.bodyBytes, dz.proofs[1], ae))
789795 then 1
790796 else 0
791- let dB = if (sigVerify(dx.bodyBytes, dx.proofs[2], ae))
797+ let dD = if (sigVerify(dz.bodyBytes, dz.proofs[2], af))
792798 then 1
793799 else 0
794- (((dz + dA) + dB) >= 2)
800+ (((dB + dC) + dD) >= 2)
795801 }
796802
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "active"
55
66 let b = "active_all_contracts"
77
88 let c = "shutdown_cause"
99
1010 let d = "_current_pool_fraction_reward"
1111
1212 let e = "_previous_pool_fraction_reward"
1313
1414 let f = "_pool_reward_update_height"
1515
1616 let g = "total_reward_per_block_current"
1717
1818 let h = "total_reward_per_block_previous"
1919
2020 let i = "reward_update_height"
2121
2222 let j = "_share_tokens_locked"
2323
2424 let k = "_share_tokens_blocked"
2525
2626 let l = "_share_tokens_blocked_type"
2727
2828 let m = "_share_tokens_blocked_height"
2929
3030 let n = "_share_tokens_virtual"
3131
3232 let o = "_total_share_tokens_locked"
3333
3434 let p = "_total_share_tokens_virtual"
3535
3636 let q = "_lock_params"
3737
3838 let r = "lock_waves_fee"
3939
4040 let s = "_boost_coef"
4141
4242 let t = "_last_interest"
4343
4444 let u = "_last_interest"
4545
4646 let v = "_last_interest_b"
4747
4848 let w = "_last_interest_u_b"
4949
5050 let x = "_last_interest_lpb"
5151
5252 let y = "_last_interest_u_lpb"
5353
5454 let z = "_last_interest_height"
5555
5656 let A = "SWOP_id"
5757
5858 let B = "_available_SWOP"
5959
6060 let C = "swop_year_emission"
6161
6262 let D = "_harvest_pool_vote_gSWOP"
6363
6464 let E = "_pool_vote_gSWOP"
6565
6666 let F = "_user_vote_gSWOP"
6767
6868 let G = "_harvest_user_pool_vote_gSWOP"
6969
7070 let H = "first_harvest_height"
7171
7272 let I = "share_limit_on_first_harvest"
7373
74-let J = "admin_pub_1"
74+let J = "cpmm_contract"
7575
76-let K = "admin_pub_2"
76+let K = "admin_pub_1"
7777
78-let L = "admin_pub_3"
78+let L = "admin_pub_2"
7979
80-let M = "admin_invoke_pub"
80+let M = "admin_pub_3"
8181
82-let N = "money_box_address"
82+let N = "admin_invoke_pub"
8383
84-let O = "voting_address"
84+let O = "money_box_address"
8585
86-let P = "governance_address"
86+let P = "voting_address"
8787
88-let Q = "lp_farming"
88+let Q = "governance_address"
8989
90-let R = "farming_treasure"
90+let R = "lp_farming"
9191
92-let S = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
92+let S = "farming_treasure"
9393
94-let T = 10000000000
94+let T = Address(base58'3MvVBtsXroQpy1tsPw21TU2ET9A8WfmrNjz')
9595
96-let U = 100000000
96+let U = 10000000000
9797
98-let V = 1000
98+let V = 100000000
9999
100-let W = 500
100+let W = 1000
101101
102-func X (Y) = {
103- let Z = getString(S, Y)
104- if ($isInstanceOf(Z, "String"))
102+let X = 500
103+
104+func Y (Z) = {
105+ let aa = getString(T, Z)
106+ if ($isInstanceOf(aa, "String"))
105107 then {
106- let aa = Z
107- fromBase58String(aa)
108+ let ab = aa
109+ fromBase58String(ab)
108110 }
109111 else {
110- let ab = Z
111- throw((Y + "is empty"))
112+ let ac = aa
113+ throw((Z + "is empty"))
112114 }
113115 }
114116
115117
116-let ac = X(J)
118+let ad = Y(K)
117119
118-let ad = X(K)
120+let ae = Y(L)
119121
120-let ae = X(L)
122+let af = Y(M)
121123
122-let af = Address(X(N))
124+let ag = Address(Y(O))
123125
124-let ag = Address(X(O))
126+let ah = Address(Y(P))
125127
126-let ah = Address(X(P))
128+let ai = Address(Y(Q))
127129
128-let ai = X(M)
130+let aj = Y(N)
129131
130-let aj = Address(X(Q))
132+let ak = Address(Y(R))
131133
132-let ak = Address(X(R))
134+let al = Address(Y(S))
133135
134-let al = getBooleanValue(this, a)
136+let am = Address(Y(J))
135137
136-let am = valueOrElse(getBoolean(S, b), true)
138+let an = getBooleanValue(this, a)
137139
138-let an = fromBase58String(getStringValue(this, A))
140+let ao = valueOrElse(getBoolean(T, b), true)
139141
140-func ao (ap) = valueOrElse(getInteger(Address(fromBase58String(ap)), H), 0)
142+let ap = fromBase58String(getStringValue(this, A))
143+
144+func aq (ar) = valueOrElse(getInteger(Address(fromBase58String(ar)), H), 0)
141145
142146
143-func aq (ap) = valueOrErrorMessage(getInteger(ap, I), ("No data on the key: " + I))
147+func as (ar) = valueOrErrorMessage(getInteger(ar, I), ("No data on the key: " + I))
144148
145149
146-func ar (ap) = valueOrErrorMessage(getInteger(this, (ap + o)), (("No data on the key: " + ap) + o))
150+func at (ar) = valueOrErrorMessage(getInteger(this, (ar + o)), (("No data on the key: " + ar) + o))
147151
148152
149-func as (ap) = valueOrElse(getInteger(ag, (ap + E)), 0)
153+func au (ar) = valueOrElse(getInteger(ah, (ar + E)), 0)
150154
151155
152-func at (ap,au) = valueOrElse(getInteger(ag, (((au + "_") + ap) + F)), 0)
156+func av (ar,aw) = valueOrElse(getInteger(ah, (((aw + "_") + ar) + F)), 0)
153157
154158
155-func av (ap) = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
159+func ax (ar) = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
156160
157161
158-func aw (ax) = {
159- let Z = ax
160- if ($isInstanceOf(Z, "ByteVector"))
162+func ay (az) = {
163+ let aa = az
164+ if ($isInstanceOf(aa, "ByteVector"))
161165 then {
162- let ay = Z
163- assetBalance(this, ay)
166+ let aA = aa
167+ assetBalance(this, aA)
164168 }
165- else if ($isInstanceOf(Z, "Unit"))
169+ else if ($isInstanceOf(aa, "Unit"))
166170 then {
167- let az = Z
171+ let aB = aa
168172 wavesBalance(this).available
169173 }
170174 else throw("Match error")
171175 }
172176
173177
174-func aA (aB,aC) = {
175- let aD = value(assetInfo(aB)).decimals
176- let aE = value(assetInfo(aC)).decimals
177- let aF = ((aE - aD) + 8)
178- pow(10, 0, aF, 0, 0, DOWN)
178+func aC (aD,aE) = {
179+ let aF = value(assetInfo(aD)).decimals
180+ let aG = value(assetInfo(aE)).decimals
181+ let aH = ((aG - aF) + 8)
182+ pow(10, 0, aH, 0, 0, DOWN)
179183 }
180184
181185
182-func aG (ap,au) = valueOrElse(getInteger(this, (((ap + "_") + au) + B)), 0)
186+func aI (ar,aw) = valueOrElse(getInteger(this, (((ar + "_") + aw) + B)), 0)
183187
184188
185-func aH (ap) = {
186- let aI = valueOrErrorMessage(getInteger(ah, g), ((("No data on the key: " + g) + " at address ") + toString(ah)))
187- let aJ = valueOrErrorMessage(getInteger(ah, h), ((("No data on the key: " + h) + " at address ") + toString(ah)))
188- let aK = valueOrErrorMessage(getInteger(ah, (ap + d)), (((("No data on the key: " + ap) + d) + " at address ") + toString(ah)))
189- let aL = valueOrErrorMessage(getInteger(ah, i), ((("No data on the key: " + i) + " at address ") + toString(ah)))
190- let aM = valueOrElse(getInteger(ah, (ap + f)), aL)
191- let aN = valueOrErrorMessage(getInteger(ah, (ap + e)), (((("No data on the key: " + ap) + e) + " at address ") + toString(ah)))
192- let aO = fraction(aI, aK, T)
193- let aP = fraction(aI, aN, T)
194- if (if ((aO > aI))
189+func aJ (ar) = {
190+ let aK = valueOrErrorMessage(getInteger(ai, g), ((("No data on the key: " + g) + " at address ") + toString(ai)))
191+ let aL = valueOrErrorMessage(getInteger(ai, h), ((("No data on the key: " + h) + " at address ") + toString(ai)))
192+ let aM = valueOrErrorMessage(getInteger(ai, (ar + d)), (((("No data on the key: " + ar) + d) + " at address ") + toString(ai)))
193+ let aN = valueOrErrorMessage(getInteger(ai, i), ((("No data on the key: " + i) + " at address ") + toString(ai)))
194+ let aO = valueOrElse(getInteger(ai, (ar + f)), aN)
195+ let aP = valueOrErrorMessage(getInteger(ai, (ar + e)), (((("No data on the key: " + ar) + e) + " at address ") + toString(ai)))
196+ let aQ = fraction(aK, aM, U)
197+ let aR = fraction(aK, aP, U)
198+ if (if ((aQ > aK))
195199 then true
196- else (aP > aJ))
200+ else (aR > aL))
197201 then throw("rewardPoolCurrent > totalRewardPerBlockCurrent or rewardPoolPrevious > totalRewardPerBlockPrevious")
198- else $Tuple4(aO, aL, aP, aM)
202+ else $Tuple4(aQ, aN, aR, aO)
199203 }
200204
201205
202-func aQ (ap) = {
203- let aR = valueOrErrorMessage(getInteger(this, (ap + t)), (("No data on the key: " + ap) + t))
204- let aS = valueOrErrorMessage(getInteger(this, (ap + v)), (("No data on the key: " + ap) + v))
205- let aT = valueOrErrorMessage(getInteger(this, (ap + x)), (("No data on the key: " + ap) + x))
206- let aU = valueOrElse(getInteger(this, (ap + z)), height)
207- $Tuple4(aU, aR, aS, aT)
206+func aS (ar) = {
207+ let aT = valueOrErrorMessage(getInteger(this, (ar + t)), (("No data on the key: " + ar) + t))
208+ let aU = valueOrErrorMessage(getInteger(this, (ar + v)), (("No data on the key: " + ar) + v))
209+ let aV = valueOrErrorMessage(getInteger(this, (ar + x)), (("No data on the key: " + ar) + x))
210+ let aW = valueOrElse(getInteger(this, (ar + z)), height)
211+ $Tuple4(aW, aT, aU, aV)
208212 }
209213
210214
211-func aV (ap,aW) = {
212- let aX = valueOrElse(getInteger(this, (ap + s)), W)
213- fraction(aW, V, (aX + V))
215+func aX (ar,aY) = {
216+ let aZ = valueOrElse(getInteger(this, (ar + s)), X)
217+ fraction(aY, W, (aZ + W))
214218 }
215219
216220
217-func aY (ap,aW) = {
218- let aX = valueOrElse(getInteger(this, (ap + s)), W)
219- fraction(aW, aX, (aX + V))
221+func ba (ar,aY) = {
222+ let aZ = valueOrElse(getInteger(this, (ar + s)), X)
223+ fraction(aY, aZ, (aZ + W))
220224 }
221225
222226
223-func aZ (ap,aU,aL,aM,aR,aS,ba,bb,bc,bd,be,bf) = if ((bd == 0))
224- then $Tuple3(aR, aS, bb)
227+func bb (ar,aW,aN,aO,aT,aU,bc,bd,be,bf,bg,bh) = if ((bf == 0))
228+ then $Tuple3(aT, aU, bd)
225229 else {
226- let bg = if (if (if ((aL > height))
227- then (aL == aM)
230+ let bi = if (if (if ((aN > height))
231+ then (aN == aO)
228232 else false)
229233 then true
230- else if ((height > aL))
231- then (aL != aM)
234+ else if ((height > aN))
235+ then (aN != aO)
232236 else false)
233237 then {
234- let bh = (be * (height - aU))
235- $Tuple4(bh, aR, aS, bb)
238+ let bj = (bg * (height - aW))
239+ $Tuple4(bj, aT, aU, bd)
236240 }
237- else if (if (if ((height > aL))
238- then (aL == aM)
241+ else if (if (if ((height > aN))
242+ then (aN == aO)
239243 else false)
240- then (aU > aL)
244+ then (aW > aN)
241245 else false)
242246 then {
243- let bh = (bc * (height - aU))
244- $Tuple4(bh, aR, aS, bb)
247+ let bj = (be * (height - aW))
248+ $Tuple4(bj, aT, aU, bd)
245249 }
246250 else {
247- let bi = (be * (aL - aU))
248- let bj = (aR + fraction(aV(ap, bi), bf, bd))
249- let bk = (aS + (if ((ba > 0))
250- then fraction(aY(ap, bi), U, ba)
251+ let bk = (bg * (aN - aW))
252+ let bl = (aT + fraction(aX(ar, bk), bh, bf))
253+ let bm = (aU + (if ((bc > 0))
254+ then fraction(ba(ar, bk), V, bc)
251255 else 0))
252- let bl = (bb + (if ((ba > 0))
253- then fraction(fraction(aY(ap, bi), U, bd), U, ba)
256+ let bn = (bd + (if ((bc > 0))
257+ then fraction(fraction(ba(ar, bk), V, bf), V, bc)
254258 else 0))
255- let bm = (bc * (height - aL))
256- $Tuple4(bm, bj, bk, bl)
259+ let bo = (be * (height - aN))
260+ $Tuple4(bo, bl, bm, bn)
257261 }
258- let bn = bg._1
259- let bo = bg._2
260- let bp = bg._3
261- let bq = bg._4
262- let br = (bo + fraction(aV(ap, bn), bf, bd))
263- let bs = (bp + (if ((ba > 0))
264- then fraction(aY(ap, bn), U, ba)
262+ let bp = bi._1
263+ let bq = bi._2
264+ let br = bi._3
265+ let bs = bi._4
266+ let bt = (bq + fraction(aX(ar, bp), bh, bf))
267+ let bu = (br + (if ((bc > 0))
268+ then fraction(ba(ar, bp), V, bc)
265269 else 0))
266- let bt = (bq + (if ((ba > 0))
267- then fraction(fraction(aY(ap, bn), U, bd), U, ba)
270+ let bv = (bs + (if ((bc > 0))
271+ then fraction(fraction(ba(ar, bp), V, bf), V, bc)
268272 else 0))
269- $Tuple3(br, bs, bt)
273+ $Tuple3(bt, bu, bv)
270274 }
271275
272276
273-func bu (ap,au) = {
274- let bf = aA(an, av(ap))
275- let ba = as(ap)
276- let bv = at(ap, au)
277- let bw = ar(ap)
278- let bx = valueOrElse(getInteger(this, (ap + p)), bw)
279- let by = aQ(ap)
280- let aU = by._1
281- let aR = by._2
282- let aS = by._3
283- let aT = by._4
284- let bz = aH(ap)
285- let bc = bz._1
286- let aL = bz._2
287- let be = bz._3
288- let aM = bz._4
289- let bA = valueOrElse(getInteger(this, (((ap + "_") + au) + u)), aR)
290- let bB = valueOrElse(getInteger(this, (((ap + "_") + au) + w)), aS)
291- let bC = valueOrElse(getInteger(this, (((ap + "_") + au) + y)), aT)
292- let bD = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
293- let bE = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), bD)
294- let bF = aZ(ap, aU, aL, aM, aR, aS, ba, aT, bc, bx, be, bf)
295- let br = bF._1
296- let bs = bF._2
297- let bt = bF._3
298- let bG = fraction(bE, (br - bA), bf)
299- let bH = fraction(bv, (bs - bB), U)
300- let bI = fraction(toBigInt(bE), toBigInt(bv), toBigInt(1))
301- let bJ = toInt(fraction(fraction(bI, toBigInt((bt - bC)), toBigInt(U)), toBigInt(1), toBigInt(U)))
302- let bK = (bH - bJ)
303- if ((0 > bK))
277+func bw (ar,aw) = {
278+ let bh = aC(ap, ax(ar))
279+ let bc = au(ar)
280+ let bx = av(ar, aw)
281+ let by = at(ar)
282+ let bz = valueOrElse(getInteger(this, (ar + p)), by)
283+ let bA = aS(ar)
284+ let aW = bA._1
285+ let aT = bA._2
286+ let aU = bA._3
287+ let aV = bA._4
288+ let bB = aJ(ar)
289+ let be = bB._1
290+ let aN = bB._2
291+ let bg = bB._3
292+ let aO = bB._4
293+ let bC = valueOrElse(getInteger(this, (((ar + "_") + aw) + u)), aT)
294+ let bD = valueOrElse(getInteger(this, (((ar + "_") + aw) + w)), aU)
295+ let bE = valueOrElse(getInteger(this, (((ar + "_") + aw) + y)), aV)
296+ let bF = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
297+ let bG = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), bF)
298+ let bH = bb(ar, aW, aN, aO, aT, aU, bc, aV, be, bz, bg, bh)
299+ let bt = bH._1
300+ let bu = bH._2
301+ let bv = bH._3
302+ let bI = fraction(bG, (bt - bC), bh)
303+ let bJ = fraction(bx, (bu - bD), V)
304+ let bK = fraction(toBigInt(bG), toBigInt(bx), toBigInt(1))
305+ let bL = toInt(fraction(fraction(bK, toBigInt((bv - bE)), toBigInt(V)), toBigInt(1), toBigInt(V)))
306+ let bM = (bJ - bL)
307+ if ((0 > bM))
304308 then throw("toTreasury < 0")
305- else $Tuple5(br, bs, bt, (bG + bJ), bK)
309+ else $Tuple5(bt, bu, bv, (bI + bL), bM)
306310 }
307311
308312
309-func bL (bM,au) = {
310- func bN (bO,ap) = {
311- let bP = bO
312- let bQ = bP._1
313- let bR = bP._2
314- let bS = bu(ap, au)
315- let bT = bS._1
316- let bU = bS._2
317- let bV = bS._3
318- let bW = bS._4
319- let bX = bS._5
320- let bY = (aG(ap, au) + bW)
321- $Tuple2((bQ :+ ap), (bR :+ bY))
313+func bN (bO,aw) = {
314+ func bP (bQ,ar) = {
315+ let bR = bQ
316+ let bS = bR._1
317+ let bT = bR._2
318+ let bU = bw(ar, aw)
319+ let bV = bU._1
320+ let bW = bU._2
321+ let bX = bU._3
322+ let bY = bU._4
323+ let bZ = bU._5
324+ let ca = (aI(ar, aw) + bY)
325+ $Tuple2((bS :+ ar), (bT :+ ca))
322326 }
323327
324- let bZ = bM
325- let ca = size(bZ)
326- let cb = $Tuple2(nil, nil)
327- func cc (cd,ce) = if ((ce >= ca))
328- then cd
329- else bN(cd, bZ[ce])
328+ let cb = bO
329+ let cc = size(cb)
330+ let cd = $Tuple2(nil, nil)
331+ func ce (cf,cg) = if ((cg >= cc))
332+ then cf
333+ else bP(cf, cb[cg])
330334
331- func cf (cd,ce) = if ((ce >= ca))
332- then cd
335+ func ch (cf,cg) = if ((cg >= cc))
336+ then cf
333337 else throw("List size exceeds 60")
334338
335- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
339+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
336340 }
337341
338342
339-func cg (ap,au,ch,ci,cj) = if ((ao(ap) > height))
343+func ci (ar,aw,cj,ck,cl) = if ((aq(ar) > height))
340344 then {
341- let ck = valueOrElse(getInteger(ag, (ap + D)), 0)
342- let cl = valueOrElse(getInteger(ag, (((au + "_") + ap) + G)), 0)
343- let cm = aq(addressFromStringValue(ap))
344- let cn = (fraction(cm, cl, ck) - ch)
345- if ((cj > 0))
345+ let cm = valueOrElse(getInteger(ah, (ar + D)), 0)
346+ let cn = valueOrElse(getInteger(ah, (((aw + "_") + ar) + G)), 0)
347+ let co = as(addressFromStringValue(ar))
348+ let cp = (fraction(co, cn, cm) - cj)
349+ if ((cl > 0))
346350 then throw("You can't lock shareTokens till first harvest end.")
347- else if ((cl == 0))
351+ else if ((cn == 0))
348352 then 0
349- else if ((ci >= cn))
350- then (ci - cn)
353+ else if ((ck >= cp))
354+ then (ck - cp)
351355 else 0
352356 }
353357 else 0
354358
355359
356-func co (cp) = {
357- let cq = split(valueOrErrorMessage(getString(this, (toString(cp) + q)), ("There are no key for lock type" + toString(cp))), "_")
358- $Tuple2(parseIntValue(cq[0]), parseIntValue(cq[1]))
360+func cq (cr) = {
361+ let cs = split(valueOrErrorMessage(getString(this, (toString(cr) + q)), ("There are no key for lock type" + toString(cr))), "_")
362+ $Tuple2(parseIntValue(cs[0]), parseIntValue(cs[1]))
359363 }
360364
361365
362-func cr (cs) = [BooleanEntry(a, false), StringEntry(c, cs)]
366+func ct (cu) = [BooleanEntry(a, false), StringEntry(c, cu)]
363367
364368
365-func ct () = if (if (al)
366- then am
369+func cv () = if (if (an)
370+ then ao
367371 else false)
368372 then unit
369373 else throw("DApp is inactive at this moment")
370374
371375
372-func cu (cv) = if (containsElement([ac, ad, ae], cv.callerPublicKey))
376+func cw (cx) = if (containsElement([ad, ae, af], cx.callerPublicKey))
373377 then unit
374378 else throw("Only admin can call this function")
375379
376380
377-func cw (cv,ap) = if ((toString(cv.caller) == ap))
381+func cy (cx,ar) = if (if ((toString(cx.caller) == ar))
382+ then true
383+ else (cx.caller == am))
378384 then unit
379385 else throw("Only pool can call this function")
380386
381387
382-func cx (cv) = if ((cv.caller == this))
388+func cz (cx) = if ((cx.caller == this))
383389 then unit
384390 else throw("Only contract itself can call this function")
385391
386392
387-func cy (cv,cz,ap,cj) = {
388- let cA = av(ap)
389- let au = toString(cz)
390- let cB = ar(ap)
391- let bx = valueOrElse(getInteger(this, (ap + p)), cB)
392- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
393- let cD = valueOrElse(getInteger(this, (((ap + "_") + au) + m)), 0)
394- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
395- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
396- let cG = ((cC + cE) + cv.payments[0].amount)
397- let cH = co(cj)
398- let cI = cH._1
399- let cJ = cH._2
400- let cK = getIntegerValue(this, r)
401- if ((cv.payments[0].assetId != cA))
393+func cA (cx,cB,ar,cl) = {
394+ let cC = ax(ar)
395+ let aw = toString(cB)
396+ let cD = at(ar)
397+ let bz = valueOrElse(getInteger(this, (ar + p)), cD)
398+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
399+ let cF = valueOrElse(getInteger(this, (((ar + "_") + aw) + m)), 0)
400+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
401+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
402+ let cI = ((cE + cG) + cx.payments[0].amount)
403+ let cJ = cq(cl)
404+ let cK = cJ._1
405+ let cL = cJ._2
406+ let cM = getIntegerValue(this, r)
407+ if ((cx.payments[0].assetId != cC))
402408 then throw("Wrong sharetoken in payment")
403- else if ((0 >= cv.payments[0].amount))
409+ else if ((0 >= cx.payments[0].amount))
404410 then throw("Payment amount must be greater than 0")
405- else if ((0 > cj))
411+ else if ((0 > cl))
406412 then throw("lockType must be >= 0")
407413 else {
408- let cL = cg(ap, au, cC, cv.payments[0].amount, cj)
409- if ((cL == cL))
414+ let cN = ci(ar, aw, cE, cx.payments[0].amount, cl)
415+ if ((cN == cN))
410416 then {
411- let cM = if ((cj == 0))
417+ let cO = if ((cl == 0))
412418 then {
413- let cN = ((cF + cv.payments[0].amount) - cL)
414- $Tuple2([IntegerEntry((((ap + "_") + au) + j), ((cC + cv.payments[0].amount) - cL)), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx + cv.payments[0].amount) - cL)), ScriptTransfer(cz, cL, cv.payments[0].assetId)], ((cB + cv.payments[0].amount) - cL))
419+ let cP = ((cH + cx.payments[0].amount) - cN)
420+ $Tuple2([IntegerEntry((((ar + "_") + aw) + j), ((cE + cx.payments[0].amount) - cN)), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz + cx.payments[0].amount) - cN)), ScriptTransfer(cB, cN, cx.payments[0].assetId)], ((cD + cx.payments[0].amount) - cN))
415421 }
416- else if (if ((cD == 0))
417- then if (if ((2 > size(cv.payments)))
422+ else if (if ((cF == 0))
423+ then if (if ((2 > size(cx.payments)))
418424 then true
419- else (cv.payments[1].assetId != unit))
425+ else (cx.payments[1].assetId != unit))
420426 then true
421- else (cK > cv.payments[1].amount)
427+ else (cM > cx.payments[1].amount)
422428 else false)
423- then throw((("You need to pay additional waves comission " + toString(cK)) + "WAVES"))
424- else if ((cD > (height + cI)))
429+ then throw((("You need to pay additional waves comission " + toString(cM)) + "WAVES"))
430+ else if ((cF > (height + cK)))
425431 then throw("You cannot lock sharetokens for a period less than what you have already locked")
426432 else {
427- let cO = (cE + cv.payments[0].amount)
428- let cP = (height + cI)
429- let cN = (fraction(cO, cJ, V) + cC)
430- $Tuple2([IntegerEntry((((ap + "_") + au) + k), cO), IntegerEntry((((ap + "_") + au) + m), cP), IntegerEntry((((ap + "_") + au) + l), cj), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx - cF) + cN))], (cB + cv.payments[0].amount))
433+ let cQ = (cG + cx.payments[0].amount)
434+ let cR = (height + cK)
435+ let cP = (fraction(cQ, cL, W) + cE)
436+ $Tuple2([IntegerEntry((((ar + "_") + aw) + k), cQ), IntegerEntry((((ar + "_") + aw) + m), cR), IntegerEntry((((ar + "_") + aw) + l), cl), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz - cH) + cP))], (cD + cx.payments[0].amount))
431437 }
432- let cQ = cM._1
433- let cR = cM._2
434- if ((aw(cA) > cR))
438+ let cS = cO._1
439+ let cT = cO._2
440+ if ((ay(cC) > cT))
435441 then throw("Balance of share-token is lower than totalAmount")
436442 else {
437- let cS = bu(ap, au)
438- let aR = cS._1
439- let aS = cS._2
440- let cT = cS._3
441- let bW = cS._4
442- let cU = cS._5
443- let cV = (aG(ap, au) + bW)
444- let cW = if ((getString(Address(fromBase58String(ap)), "version") == "3.0.0"))
445- then invoke(aj, "updateUserInterest", [au, ap, cG], nil)
443+ let cU = bw(ar, aw)
444+ let aT = cU._1
445+ let aU = cU._2
446+ let cV = cU._3
447+ let bY = cU._4
448+ let cW = cU._5
449+ let cX = (aI(ar, aw) + bY)
450+ let cY = if ((getString(Address(fromBase58String(ar)), "version") == "3.0.0"))
451+ then invoke(ak, "updateUserInterest", [aw, ar, cI], nil)
446452 else 0
447- if ((cW == cW))
448- then ([IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((ap + o), cR), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)] ++ cQ)
453+ if ((cY == cY))
454+ then ([IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((ar + o), cT), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)] ++ cS)
449455 else throw("Strict value is not equal to itself.")
450456 }
451457 }
452458 else throw("Strict value is not equal to itself.")
453459 }
454460 }
455461
456462
457-func cX (cv,cz,ap,cY) = valueOrElse(ct(), {
458- let cZ = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
459- let au = toString(cz)
460- let da = bu(ap, au)
461- let aR = da._1
462- let aS = da._2
463- let cT = da._3
464- let bW = da._4
465- let cU = da._5
466- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
467- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
468- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
469- let db = (cC - cY)
470- let cV = (aG(ap, au) + bW)
471- let dc = ar(ap)
472- let bx = valueOrElse(getInteger(this, (ap + p)), dc)
473- let dd = (dc - cY)
474- let de = (bx - cY)
475- let cN = (cF - cY)
476- if ((cY > cC))
463+func cZ (cx,cB,ar,da) = valueOrElse(cv(), {
464+ let db = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
465+ let aw = toString(cB)
466+ let dc = bw(ar, aw)
467+ let aT = dc._1
468+ let aU = dc._2
469+ let cV = dc._3
470+ let bY = dc._4
471+ let cW = dc._5
472+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
473+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
474+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
475+ let dd = (cE - da)
476+ let cX = (aI(ar, aw) + bY)
477+ let de = at(ar)
478+ let bz = valueOrElse(getInteger(this, (ar + p)), de)
479+ let df = (de - da)
480+ let dg = (bz - da)
481+ let cP = (cH - da)
482+ if ((da > cE))
477483 then throw("Withdraw amount more then user locked amount")
478- else if ((aw(cZ) > dc))
484+ else if ((ay(db) > de))
479485 then throw("Balance of share-token is lower than totalAmount")
480486 else {
481- let cW = if ((getString(Address(fromBase58String(ap)), "version") == "3.0.0"))
482- then invoke(aj, "updateUserInterest", [au, ap, (cC + cE)], nil)
487+ let cY = if ((getString(Address(fromBase58String(ar)), "version") == "3.0.0"))
488+ then invoke(ak, "updateUserInterest", [aw, ar, (cE + cG)], nil)
483489 else 0
484- if ((cW == cW))
485- then [IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + o), dd), IntegerEntry((ap + p), de), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an), ScriptTransfer(cv.caller, cY, cZ)]
490+ if ((cY == cY))
491+ then [IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + o), df), IntegerEntry((ar + p), dg), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap), ScriptTransfer(cx.caller, da, db)]
486492 else throw("Strict value is not equal to itself.")
487493 }
488494 })
489495
490496
491-func df (cv,ap,cz) = {
492- let cZ = fromBase58String(getStringValue(value(addressFromString(ap)), "share_asset_id"))
493- let au = toString(cz)
494- let bd = ar(ap)
495- let dg = bu(ap, au)
496- let aR = dg._1
497- let aS = dg._2
498- let cT = dg._3
499- let bW = dg._4
500- let cU = dg._5
501- let bY = (aG(ap, au) + bW)
502- if ((bY == 0))
497+func dh (cx,ar,cB) = {
498+ let db = fromBase58String(getStringValue(value(addressFromString(ar)), "share_asset_id"))
499+ let aw = toString(cB)
500+ let bf = at(ar)
501+ let di = bw(ar, aw)
502+ let aT = di._1
503+ let aU = di._2
504+ let cV = di._3
505+ let bY = di._4
506+ let cW = di._5
507+ let ca = (aI(ar, aw) + bY)
508+ if ((ca == 0))
503509 then throw("You have 0 available SWOP")
504- else if ((aw(cZ) > bd))
510+ else if ((ay(db) > bf))
505511 then throw("Balance of share-token is lower than totalAmount")
506512 else {
507- let dh = if ((cv.caller != this))
508- then [ScriptTransfer(cv.caller, bY, an)]
513+ let dj = if ((cx.caller != this))
514+ then [ScriptTransfer(cx.caller, ca, ap)]
509515 else nil
510- $Tuple2(([IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), 0), Reissue(an, (cU + bY), true), ScriptTransfer(ak, cU, an)] ++ dh), bY)
516+ $Tuple2(([IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), 0), Reissue(ap, (cW + ca), true), ScriptTransfer(al, cW, ap)] ++ dj), ca)
511517 }
512518 }
513519
514520
515-@Callable(cv)
516-func init (di) = if (isDefined(getString(this, A)))
521+@Callable(cx)
522+func init (dk) = if (isDefined(getString(this, A)))
517523 then throw("SWOP already initialized")
518524 else {
519- let dj = 100000000000000
520- let dk = Issue("SWOP", "SWOP protocol token", dj, 8, true)
521- let dl = calculateAssetId(dk)
522-[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dj, 8, true), StringEntry(A, toBase58String(dl))]
525+ let dl = 100000000000000
526+ let dm = Issue("SWOP", "SWOP protocol token", dl, 8, true)
527+ let dn = calculateAssetId(dm)
528+[BooleanEntry(a, true), Issue("SWOP", "SWOP protocol token", dl, 8, true), StringEntry(A, toBase58String(dn))]
523529 }
524530
525531
526532
527-@Callable(cv)
528-func initPoolShareFarming (ap) = valueOrElse(cu(cv), [IntegerEntry((ap + o), 0), IntegerEntry((ap + t), 0), IntegerEntry((ap + v), 0), IntegerEntry((ap + x), 0), IntegerEntry((ap + z), height)])
533+@Callable(cx)
534+func initPoolShareFarming (ar) = valueOrElse(cw(cx), [IntegerEntry((ar + o), 0), IntegerEntry((ar + t), 0), IntegerEntry((ar + v), 0), IntegerEntry((ar + x), 0), IntegerEntry((ar + z), height)])
529535
530536
531537
532-@Callable(cv)
533-func updatePoolInterest (ap) = valueOrElse(ct(), if ((cv.caller != ah))
538+@Callable(cx)
539+func updatePoolInterest (ar) = valueOrElse(cv(), if ((cx.caller != ai))
534540 then throw("Only Governance can call this function")
535541 else {
536- let au = toString(addressFromPublicKey(ai))
537- let dm = bu(ap, au)
538- let aR = dm._1
539- let aS = dm._2
540- let cT = dm._3
541-[IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height)]
542+ let aw = toString(addressFromPublicKey(aj))
543+ let do = bw(ar, aw)
544+ let aT = do._1
545+ let aU = do._2
546+ let cV = do._3
547+[IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height)]
542548 })
543549
544550
545551
546-@Callable(cv)
547-func lockShareTokens (ap,cj) = valueOrElse(ct(), cy(cv, cv.caller, ap, cj))
552+@Callable(cx)
553+func lockShareTokens (ar,cl) = valueOrElse(cv(), cA(cx, cx.caller, ar, cl))
548554
549555
550556
551-@Callable(cv)
552-func lockShareTokensFromPool (dn,ap,cj) = valueOrElse(ct(), valueOrElse(cw(cv, ap), cy(cv, Address(dn), ap, cj)))
557+@Callable(cx)
558+func lockShareTokensFromPool (dp,ar,cl) = valueOrElse(cv(), valueOrElse(cy(cx, ar), cA(cx, Address(dp), ar, cl)))
553559
554560
555561
556-@Callable(cv)
557-func lockStakedShareTokens (ap,cj,do) = valueOrElse(ct(), {
558- let cA = av(ap)
559- let au = toString(cv.caller)
560- let cB = ar(ap)
561- let bx = valueOrElse(getInteger(this, (ap + p)), cB)
562- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
563- let cD = valueOrElse(getInteger(this, (((ap + "_") + au) + m)), 0)
564- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
565- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
566- let cG = (cC + cE)
567- let dp = co(cj)
568- let cI = dp._1
569- let cJ = dp._2
570- let cK = getIntegerValue(this, r)
571- if ((ao(ap) > height))
562+@Callable(cx)
563+func lockStakedShareTokens (ar,cl,dq) = valueOrElse(cv(), {
564+ let cC = ax(ar)
565+ let aw = toString(cx.caller)
566+ let cD = at(ar)
567+ let bz = valueOrElse(getInteger(this, (ar + p)), cD)
568+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
569+ let cF = valueOrElse(getInteger(this, (((ar + "_") + aw) + m)), 0)
570+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
571+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
572+ let cI = (cE + cG)
573+ let dr = cq(cl)
574+ let cK = dr._1
575+ let cL = dr._2
576+ let cM = getIntegerValue(this, r)
577+ if ((aq(ar) > height))
572578 then throw("You can't lock shareTokens till first harvest end.")
573- else if ((0 >= cj))
579+ else if ((0 >= cl))
574580 then throw("lockType must be > 0")
575- else if ((do > cC))
576- then throw(("You can't lock more than " + toString(cC)))
577- else if ((aw(cA) > cB))
581+ else if ((dq > cE))
582+ then throw(("You can't lock more than " + toString(cE)))
583+ else if ((ay(cC) > cD))
578584 then throw("Balance of share-token is lower than totalAmount")
579- else if (if ((cD == 0))
580- then if (if ((1 > size(cv.payments)))
585+ else if (if ((cF == 0))
586+ then if (if ((1 > size(cx.payments)))
581587 then true
582- else (cv.payments[0].assetId != unit))
588+ else (cx.payments[0].assetId != unit))
583589 then true
584- else (cK > cv.payments[0].amount)
590+ else (cM > cx.payments[0].amount)
585591 else false)
586- then throw((("You need to pay additional waves comission " + toString(cK)) + "WAVES"))
587- else if (if ((cD == 0))
588- then (0 >= do)
592+ then throw((("You need to pay additional waves comission " + toString(cM)) + "WAVES"))
593+ else if (if ((cF == 0))
594+ then (0 >= dq)
589595 else false)
590596 then throw("lockAmount must be greater than 0")
591- else if ((0 > do))
597+ else if ((0 > dq))
592598 then throw("lockAmount must be positive")
593- else if ((cD > (height + cI)))
599+ else if ((cF > (height + cK)))
594600 then throw("You cannot lock sharetokens for a period less than what you have already locked")
595601 else {
596- let cO = (cE + do)
597- let db = (cC - do)
598- let cP = (height + cI)
599- let cN = (fraction(cO, cJ, V) + db)
600- let dq = bu(ap, au)
601- let aR = dq._1
602- let aS = dq._2
603- let cT = dq._3
604- let bW = dq._4
605- let cU = dq._5
606- let cV = (aG(ap, au) + bW)
607-[IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + k), cO), IntegerEntry((((ap + "_") + au) + m), cP), IntegerEntry((((ap + "_") + au) + l), cj), IntegerEntry((((ap + "_") + au) + n), cN), IntegerEntry((ap + p), ((bx - cF) + cN)), IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)]
602+ let cQ = (cG + dq)
603+ let dd = (cE - dq)
604+ let cR = (height + cK)
605+ let cP = (fraction(cQ, cL, W) + dd)
606+ let ds = bw(ar, aw)
607+ let aT = ds._1
608+ let aU = ds._2
609+ let cV = ds._3
610+ let bY = ds._4
611+ let cW = ds._5
612+ let cX = (aI(ar, aw) + bY)
613+[IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + k), cQ), IntegerEntry((((ar + "_") + aw) + m), cR), IntegerEntry((((ar + "_") + aw) + l), cl), IntegerEntry((((ar + "_") + aw) + n), cP), IntegerEntry((ar + p), ((bz - cH) + cP)), IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)]
608614 }
609615 })
610616
611617
612618
613-@Callable(cv)
614-func unlockUserLock (ap,au) = valueOrElse(ct(), {
615- let cK = getIntegerValue(this, r)
616- let cD = valueOrErrorMessage(getInteger(this, (((ap + "_") + au) + m)), (((("There is no pool " + ap) + " or user ") + au) + "with lock"))
617- let bx = getIntegerValue(this, (ap + p))
618- let cC = valueOrElse(getInteger(this, (((ap + "_") + au) + j)), 0)
619- let cE = valueOrElse(getInteger(this, (((ap + "_") + au) + k)), 0)
620- let cF = valueOrElse(getInteger(this, (((ap + "_") + au) + n)), cC)
621- if ((cD > height))
622- then throw(("You can't unlock sharetokens till " + toString(cD)))
619+@Callable(cx)
620+func unlockUserLock (ar,aw) = valueOrElse(cv(), {
621+ let cM = getIntegerValue(this, r)
622+ let cF = valueOrErrorMessage(getInteger(this, (((ar + "_") + aw) + m)), (((("There is no pool " + ar) + " or user ") + aw) + "with lock"))
623+ let bz = getIntegerValue(this, (ar + p))
624+ let cE = valueOrElse(getInteger(this, (((ar + "_") + aw) + j)), 0)
625+ let cG = valueOrElse(getInteger(this, (((ar + "_") + aw) + k)), 0)
626+ let cH = valueOrElse(getInteger(this, (((ar + "_") + aw) + n)), cE)
627+ if ((cF > height))
628+ then throw(("You can't unlock sharetokens till " + toString(cF)))
623629 else {
624- let db = (cC + cE)
625- let dr = bu(ap, au)
626- let aR = dr._1
627- let aS = dr._2
628- let cT = dr._3
629- let bW = dr._4
630- let cU = dr._5
631- let cV = (aG(ap, au) + bW)
632-[IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + j), db), IntegerEntry((((ap + "_") + au) + n), db), IntegerEntry((ap + p), ((bx - cF) + db)), IntegerEntry((((ap + "_") + au) + B), cV), DeleteEntry((((ap + "_") + au) + k)), DeleteEntry((((ap + "_") + au) + m)), DeleteEntry((((ap + "_") + au) + l)), Reissue(an, cU, true), ScriptTransfer(ak, cU, an), ScriptTransfer(cv.caller, cK, unit)]
630+ let dd = (cE + cG)
631+ let dt = bw(ar, aw)
632+ let aT = dt._1
633+ let aU = dt._2
634+ let cV = dt._3
635+ let bY = dt._4
636+ let cW = dt._5
637+ let cX = (aI(ar, aw) + bY)
638+[IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + j), dd), IntegerEntry((((ar + "_") + aw) + n), dd), IntegerEntry((ar + p), ((bz - cH) + dd)), IntegerEntry((((ar + "_") + aw) + B), cX), DeleteEntry((((ar + "_") + aw) + k)), DeleteEntry((((ar + "_") + aw) + m)), DeleteEntry((((ar + "_") + aw) + l)), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap), ScriptTransfer(cx.caller, cM, unit)]
633639 }
634640 })
635641
636642
637643
638-@Callable(cv)
639-func withdrawShareTokens (ap,cY) = valueOrElse(ct(), cX(cv, cv.caller, ap, cY))
644+@Callable(cx)
645+func withdrawShareTokens (ar,da) = valueOrElse(cv(), cZ(cx, cx.caller, ar, da))
640646
641647
642648
643-@Callable(cv)
644-func withdrawShareTokensFromPool (dn,ap,cY) = valueOrElse(ct(), valueOrElse(cw(cv, ap), cX(cv, Address(dn), ap, cY)))
649+@Callable(cx)
650+func withdrawShareTokensFromPool (dp,ar,da) = valueOrElse(cv(), valueOrElse(cy(cx, ar), cZ(cx, Address(dp), ar, da)))
645651
646652
647653
648-@Callable(cv)
649-func claim (ap) = valueOrElse(ct(), df(cv, ap, cv.caller))
654+@Callable(cx)
655+func claim (ar) = valueOrElse(cv(), dh(cx, ar, cx.caller))
650656
651657
652658
653-@Callable(cv)
654-func claimInternal (ap,cz) = valueOrElse(ct(), valueOrElse(cx(cv), df(cv, ap, Address(cz))))
659+@Callable(cx)
660+func claimInternal (ar,cB) = valueOrElse(cv(), valueOrElse(cz(cx), dh(cx, ar, Address(cB))))
655661
656662
657663
658-@Callable(cv)
659-func claimAndStake (ap) = valueOrElse(ct(), {
660- let bW = {
661- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
662- if ($isInstanceOf(ds, "Int"))
663- then ds
664- else throw(($getType(ds) + " couldn't be cast to Int"))
664+@Callable(cx)
665+func claimAndStake (ar) = valueOrElse(cv(), {
666+ let bY = {
667+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
668+ if ($isInstanceOf(du, "Int"))
669+ then du
670+ else throw(($getType(du) + " couldn't be cast to Int"))
665671 }
666- if ((bW == bW))
672+ if ((bY == bY))
667673 then {
668- let dt = invoke(ah, "lockSWOPFromFarming", nil, [AttachedPayment(an, bW)])
669- if ((dt == dt))
674+ let dv = invoke(ai, "lockSWOPFromFarming", nil, [AttachedPayment(ap, bY)])
675+ if ((dv == dv))
670676 then nil
671677 else throw("Strict value is not equal to itself.")
672678 }
673679 else throw("Strict value is not equal to itself.")
674680 })
675681
676682
677683
678-@Callable(cv)
679-func claimAll (bM) = valueOrElse(ct(), {
680- func du (dv,ap) = {
681- let bW = {
682- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
683- if ($isInstanceOf(ds, "Int"))
684- then ds
685- else throw(($getType(ds) + " couldn't be cast to Int"))
684+@Callable(cx)
685+func claimAll (bO) = valueOrElse(cv(), {
686+ func dw (dx,ar) = {
687+ let bY = {
688+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
689+ if ($isInstanceOf(du, "Int"))
690+ then du
691+ else throw(($getType(du) + " couldn't be cast to Int"))
686692 }
687- if ((bW == bW))
688- then (dv + bW)
693+ if ((bY == bY))
694+ then (dx + bY)
689695 else throw("Strict value is not equal to itself.")
690696 }
691697
692- let dv = {
693- let bZ = bM
694- let ca = size(bZ)
695- let cb = 0
696- func cc (cd,ce) = if ((ce >= ca))
697- then cd
698- else du(cd, bZ[ce])
698+ let dx = {
699+ let cb = bO
700+ let cc = size(cb)
701+ let cd = 0
702+ func ce (cf,cg) = if ((cg >= cc))
703+ then cf
704+ else dw(cf, cb[cg])
699705
700- func cf (cd,ce) = if ((ce >= ca))
701- then cd
706+ func ch (cf,cg) = if ((cg >= cc))
707+ then cf
702708 else throw("List size exceeds 60")
703709
704- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
710+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
705711 }
706- if ((dv == 0))
712+ if ((dx == 0))
707713 then throw("You have 0 available SWOP")
708- else [ScriptTransfer(cv.caller, dv, an)]
714+ else [ScriptTransfer(cx.caller, dx, ap)]
709715 })
710716
711717
712718
713-@Callable(cv)
714-func claimAllAndStake (bM) = valueOrElse(ct(), {
715- func du (dv,ap) = {
716- let bW = {
717- let ds = invoke(this, "claimInternal", [ap, cv.caller.bytes], nil)
718- if ($isInstanceOf(ds, "Int"))
719- then ds
720- else throw(($getType(ds) + " couldn't be cast to Int"))
719+@Callable(cx)
720+func claimAllAndStake (bO) = valueOrElse(cv(), {
721+ func dw (dx,ar) = {
722+ let bY = {
723+ let du = invoke(this, "claimInternal", [ar, cx.caller.bytes], nil)
724+ if ($isInstanceOf(du, "Int"))
725+ then du
726+ else throw(($getType(du) + " couldn't be cast to Int"))
721727 }
722- if ((bW == bW))
723- then (dv + bW)
728+ if ((bY == bY))
729+ then (dx + bY)
724730 else throw("Strict value is not equal to itself.")
725731 }
726732
727- let dv = {
728- let bZ = bM
729- let ca = size(bZ)
730- let cb = 0
731- func cc (cd,ce) = if ((ce >= ca))
732- then cd
733- else du(cd, bZ[ce])
733+ let dx = {
734+ let cb = bO
735+ let cc = size(cb)
736+ let cd = 0
737+ func ce (cf,cg) = if ((cg >= cc))
738+ then cf
739+ else dw(cf, cb[cg])
734740
735- func cf (cd,ce) = if ((ce >= ca))
736- then cd
741+ func ch (cf,cg) = if ((cg >= cc))
742+ then cf
737743 else throw("List size exceeds 60")
738744
739- cf(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cc(cb, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
745+ ch(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(ce(cd, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60)
740746 }
741- if ((dv == 0))
747+ if ((dx == 0))
742748 then throw("You have 0 available SWOP")
743749 else {
744- let dt = invoke(ah, "lockSWOPFromFarming", nil, [AttachedPayment(an, dv)])
745- if ((dt == dt))
750+ let dv = invoke(ai, "lockSWOPFromFarming", nil, [AttachedPayment(ap, dx)])
751+ if ((dv == dv))
746752 then nil
747753 else throw("Strict value is not equal to itself.")
748754 }
749755 })
750756
751757
752758
753-@Callable(cv)
754-func updateUserBoostInterest (ap,au) = valueOrElse(ct(), if ((cv.caller != ag))
759+@Callable(cx)
760+func updateUserBoostInterest (ar,aw) = valueOrElse(cv(), if ((cx.caller != ah))
755761 then throw("Only voiting can call this function")
756762 else {
757- let dw = bu(ap, au)
758- let aR = dw._1
759- let aS = dw._2
760- let cT = dw._3
761- let bW = dw._4
762- let cU = dw._5
763- let cV = (aG(ap, au) + bW)
764-[IntegerEntry((((ap + "_") + au) + u), aR), IntegerEntry((((ap + "_") + au) + w), aS), IntegerEntry((((ap + "_") + au) + y), cT), IntegerEntry((ap + t), aR), IntegerEntry((ap + v), aS), IntegerEntry((ap + x), cT), IntegerEntry((ap + z), height), IntegerEntry((((ap + "_") + au) + B), cV), Reissue(an, cU, true), ScriptTransfer(ak, cU, an)]
763+ let dy = bw(ar, aw)
764+ let aT = dy._1
765+ let aU = dy._2
766+ let cV = dy._3
767+ let bY = dy._4
768+ let cW = dy._5
769+ let cX = (aI(ar, aw) + bY)
770+[IntegerEntry((((ar + "_") + aw) + u), aT), IntegerEntry((((ar + "_") + aw) + w), aU), IntegerEntry((((ar + "_") + aw) + y), cV), IntegerEntry((ar + t), aT), IntegerEntry((ar + v), aU), IntegerEntry((ar + x), cV), IntegerEntry((ar + z), height), IntegerEntry((((ar + "_") + aw) + B), cX), Reissue(ap, cW, true), ScriptTransfer(al, cW, ap)]
765771 })
766772
767773
768774
769-@Callable(cv)
770-func shutdown () = valueOrElse(cu(cv), if (!(al))
775+@Callable(cx)
776+func shutdown () = valueOrElse(cw(cx), if (!(an))
771777 then throw(("DApp is already suspended. Cause: " + valueOrElse(getString(this, c), "the cause wasn't specified")))
772- else cr("Paused by admin"))
778+ else ct("Paused by admin"))
773779
774780
775781
776-@Callable(cv)
777-func activate () = valueOrElse(cu(cv), if (al)
782+@Callable(cx)
783+func activate () = valueOrElse(cw(cx), if (an)
778784 then throw("DApp is already active")
779785 else [BooleanEntry(a, true), DeleteEntry(c)])
780786
781787
782-@Verifier(dx)
783-func dy () = {
784- let Z = dx
785- let dz = if (sigVerify(dx.bodyBytes, dx.proofs[0], ac))
788+@Verifier(dz)
789+func dA () = {
790+ let aa = dz
791+ let dB = if (sigVerify(dz.bodyBytes, dz.proofs[0], ad))
786792 then 1
787793 else 0
788- let dA = if (sigVerify(dx.bodyBytes, dx.proofs[1], ad))
794+ let dC = if (sigVerify(dz.bodyBytes, dz.proofs[1], ae))
789795 then 1
790796 else 0
791- let dB = if (sigVerify(dx.bodyBytes, dx.proofs[2], ae))
797+ let dD = if (sigVerify(dz.bodyBytes, dz.proofs[2], af))
792798 then 1
793799 else 0
794- (((dz + dA) + dB) >= 2)
800+ (((dB + dC) + dD) >= 2)
795801 }
796802

github/deemru/w8io/169f3d6 
536.20 ms