tx · BuDxLbzfHhTAMMSWGSuqi2m4qws1eKhjxMyTAgAQGASA

3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy:  -0.02600000 Waves

2023.08.10 15:20 [2704480] smart account 3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy > SELF 0.00000000 Waves

{ "type": 13, "id": "BuDxLbzfHhTAMMSWGSuqi2m4qws1eKhjxMyTAgAQGASA", "fee": 2600000, "feeAssetId": null, "timestamp": 1691670082535, "version": 2, "chainId": 84, "sender": "3Myn55vLkduxbX3ZXfiDCZhaQsLxYp1kmCy", "senderPublicKey": "9W33iCCNfmFxUbiC6XZcH5x7f6xfwC7Jb3BoExT5q2PV", "proofs": [ "2Ahq8ozGhJgeGn5VhYSEkyhTkbKfqabY7KaHqiN94CwsAQ5hEXjb1Q7xBrKLqBJ3NVNqkMTdVKyLvurHinF9z2Xu" ], "script": "base64:BgKULggCEggKBggIAQEBCBIFCgMBCAISAwoBARIECgIICBIECgIICBIECgIIARIDCgEIEgMKAQgSBAoCCAESAwoBCBIAEgASBQoDCAgEEgMKAQgSAwoBCBIECgIICBIECgIICCIDU0VQIgZTQ0FMRTgiBU1VTFQ4Ig5QT09MV0VJR0hUTVVMVCIQY29udHJhY3RGaWxlbmFtZSIHU0NBTEUxOCIGTVVMVDE4IghNVUxUMThCSSILYmxvY2tzSW5EYXkiDWJsb2Nrc0luTW9udGgiB3dyYXBFcnIiA21zZyIIdGhyb3dFcnIiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPclplcm8iD2dldEludE9yRGVmYXVsdCIKZGVmYXVsdFZhbCIMZ2V0SW50T3JGYWlsIgNhYnMiA3ZhbCIOZW5zdXJlUG9zaXRpdmUiAXYiAW0iG2tleVJlZmVycmFsc0NvbnRyYWN0QWRkcmVzcyIecmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzT3JGYWlsIhZrZXlSZWZlcnJhbFByb2dyYW1OYW1lIhpyZWZlcnJhbFByb2dyYW1OYW1lRGVmYXVsdCITcmVmZXJyYWxQcm9ncmFtTmFtZSIRa2V5RmFjdG9yeUFkZHJlc3MiGElkeEZhY3RvcnlDZmdTdGFraW5nRGFwcCIZSWR4RmFjdG9yeUNmZ0Jvb3N0aW5nRGFwcCIUSWR4RmFjdG9yeUNmZ0lkb0RhcHAiFUlkeEZhY3RvcnlDZmdUZWFtRGFwcCIZSWR4RmFjdG9yeUNmZ0VtaXNzaW9uRGFwcCIVSWR4RmFjdG9yeUNmZ1Jlc3REYXBwIhlJZHhGYWN0b3J5Q2ZnU2xpcHBhZ2VEYXBwIhRJZHhGYWN0b3J5Q2ZnRGFvRGFwcCIaSWR4RmFjdG9yeUNmZ01hcmtldGluZ0RhcHAiGklkeEZhY3RvcnlDZmdHd3hSZXdhcmREYXBwIhZJZHhGYWN0b3J5Q2ZnQmlyZHNEYXBwIg1rZXlGYWN0b3J5Q2ZnIiZrZXlGYWN0b3J5THBBc3NldFRvUG9vbENvbnRyYWN0QWRkcmVzcyIKbHBBc3NldFN0ciIUa2V5RmFjdG9yeVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIba2V5RmFjdG9yeVBvb2xXZWlnaHRIaXN0b3J5Igtwb29sQWRkcmVzcyIDbnVtIhhyZWFkRmFjdG9yeUFkZHJlc3NPckZhaWwiFHJlYWRGYWN0b3J5Q2ZnT3JGYWlsIgdmYWN0b3J5IhhnZXRCb29zdGluZ0FkZHJlc3NPckZhaWwiCmZhY3RvcnlDZmciGGdldEVtaXNzaW9uQWRkcmVzc09yRmFpbCIXZ2V0U3Rha2luZ0FkZHJlc3NPckZhaWwiGWdldEd3eFJld2FyZEFkZHJlc3NPckZhaWwiE2tleU1hbmFnZXJQdWJsaWNLZXkiFmtleU1hbmFnZXJWYXVsdEFkZHJlc3MiHmtleUVtaXNzaW9uUmF0ZVBlckJsb2NrQ3VycmVudCIha2V5RW1pc3Npb25SYXRlUGVyQmxvY2tNYXhDdXJyZW50IhVrZXlFbWlzc2lvblN0YXJ0QmxvY2siHWtleUJvb3N0aW5nVjJMYXN0VXBkYXRlSGVpZ2h0IhVrZXlCb29zdGluZ1YySW50ZWdyYWwiG2tleUVtaXNzaW9uRHVyYXRpb25JbkJsb2NrcyITa2V5RW1pc3Npb25FbmRCbG9jayIZa2V5TmV4dFBlcmdldEludE9yRGVmYXVsdCIfa2V5R3d4UmV3YXJkRW1pc3Npb25TdGFydEhlaWdodCINSWR4Q2ZnQXNzZXRJZCITSWR4Q2ZnTWluTG9ja0Ftb3VudCIVSWR4Q2ZnTWluTG9ja0R1cmF0aW9uIhVJZHhDZmdNYXhMb2NrRHVyYXRpb24iEklkeENmZ01hdGhDb250cmFjdCIUSWR4Q2ZnQmxvY2tzSW5QZXJpb2QiCWtleUNvbmZpZyIVcmVhZENvbmZpZ0FycmF5T3JGYWlsIghjZmdBcnJheSIHYXNzZXRJZCINbWluTG9ja0Ftb3VudCIPbWluTG9ja0R1cmF0aW9uIg9tYXhMb2NrRHVyYXRpb24iDG1hdGhDb250cmFjdCIOYmxvY2tzSW5QZXJpb2QiDWZvcm1hdENvbmZpZ1MiDGZvcm1hdENvbmZpZyIcZ2V0TWFuYWdlclZhdWx0QWRkcmVzc09yVGhpcyIHJG1hdGNoMCIBcyIWbWFuYWdlclB1YmxpY0tleU9yVW5pdCITbWFuYWdlclZhdWx0QWRkcmVzcyILbXVzdE1hbmFnZXIiAWkiAnBkIgJwayINSWR4TG9ja0Ftb3VudCIMSWR4TG9ja1N0YXJ0Ig9JZHhMb2NrRHVyYXRpb24iGklkeExvY2tMYXN0VXBkYXRlVGltZXN0YW1wIhBJZHhMb2NrR3d4QW1vdW50IhBJZHhMb2NrV3hDbGFpbWVkIhNrZXlMb2NrUGFyYW1zUmVjb3JkIgt1c2VyQWRkcmVzcyIEdHhJZCIBYiIacmVhZExvY2tQYXJhbXNSZWNvcmRPckZhaWwiFWtleVVzZXJHd3hBbW91bnRUb3RhbCIWZm9ybWF0TG9ja1BhcmFtc1JlY29yZCIGYW1vdW50IgVzdGFydCIIZHVyYXRpb24iCWd3eEFtb3VudCIJd3hDbGFpbWVkIg5rZXlOZXh0VXNlck51bSISa2V5VXNlcjJOdW1NYXBwaW5nIhJrZXlOdW0yVXNlck1hcHBpbmciF2tleUxvY2tQYXJhbVRvdGFsQW1vdW50IiBrZXlTdGF0c0xvY2tzRHVyYXRpb25TdW1JbkJsb2NrcyISa2V5U3RhdHNMb2Nrc0NvdW50IhJrZXlTdGF0c1VzZXJzQ291bnQiIGtleVVzZXJCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMIgd1c2VyTnVtIiJrZXlVc2VyTHBCb29zdEVtaXNzaW9uTGFzdElOVEVHUkFMIglscEFzc2V0SWQiF2tleVVzZXJNYXhCb29zdElOVEVHUkFMIhhrZXlUb3RhbE1heEJvb3N0SU5URUdSQUwiIWtleVVzZXJCb29zdEF2YWxhaWJsZVRvQ2xhaW1Ub3RhbCITa2V5VXNlckJvb3N0Q2xhaW1lZCILa2V5R3d4VG90YWwiB2tleVZvdGUiDWFtb3VudEFzc2V0SWQiDHByaWNlQXNzZXRJZCIFZXBvY2giFWtleVN0YXJ0SGVpZ2h0QnlFcG9jaCIRa2V5Q3VycmVudEVwb2NoVWkiFWtleVZvdGluZ1Jlc3VsdFN0YWtlZCIMbHBBc3NldElkU3RyIh1rZXlWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbCIla2V5Vm90aW5nUmVzdWx0U3Rha2VkTGFzdFVwZGF0ZUhlaWdodCIha2V5Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0IhVrZXlWb3RlU3Rha2VkSW50ZWdyYWwiHWtleVZvdGVTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0IhlrZXlWb3RlU3Rha2VkSW50ZWdyYWxMYXN0Ig9rZXlTdGFrZWRCeVVzZXIiDnVzZXJBZGRyZXNzU3RyIg9mYWN0b3J5Q29udHJhY3QiEGVtaXNzaW9uQ29udHJhY3QiD3N0YWtpbmdDb250cmFjdCIRZ3d4UmV3YXJkQ29udHJhY3QiFmxwU3Rha2luZ1Bvb2xzQ29udHJhY3QiGWtleVZvdGluZ0VtaXNzaW9uQ29udHJhY3QiFnZvdGluZ0VtaXNzaW9uQ29udHJhY3QiHWtleVZvdGluZ0VtaXNzaW9uUmF0ZUNvbnRyYWN0Igpib29zdENvZWZmIgFAIhl1c2VyTnVtYmVyQnlBZGRyZXNzT3JGYWlsIhFnZXRHd3hBbW91bnRUb3RhbCISZ2V0TG9ja2VkR3d4QW1vdW50IgxmdW5jdGlvbk5hbWUiGnZvdGluZ0VtaXNzaW9uUmF0ZUNvbnRyYWN0Ihhsb2NrZWRWb3RpbmdFbWlzc2lvblJhdGUiFGxvY2tlZFZvdGluZ0VtaXNzaW9uIgZsb2NrZWQiDEhpc3RvcnlFbnRyeSIEdHlwZSIEdXNlciIJbG9ja1N0YXJ0IgpoaXN0b3J5S0VZIgtoaXN0b3J5REFUQSIKU3RhdHNFbnRyeSIOdG90YWxMb2NrZWRJbmMiC2R1cmF0aW9uSW5jIgxsb2NrQ291bnRJbmMiDXVzZXJzQ291bnRJbmMiG2xvY2tzRHVyYXRpb25TdW1JbkJsb2Nrc0tFWSINbG9ja3NDb3VudEtFWSINdXNlcnNDb3VudEtFWSIOdG90YWxBbW91bnRLRVkiGGxvY2tzRHVyYXRpb25TdW1JbkJsb2NrcyIKbG9ja3NDb3VudCIKdXNlcnNDb3VudCILdG90YWxBbW91bnQiD0xvY2tQYXJhbXNFbnRyeSIiZXh0cmFjdE9wdGlvbmFsUGF5bWVudEFtb3VudE9yRmFpbCIPZXhwZWN0ZWRBc3NldElkIgNwbXQiFWdldFVzZXJHd3hBbW91bnRUb3RhbCIaZ2V0Vm90aW5nRW1pc3Npb25FcG9jaEluZm8iDSR0MDE1MTY0MTU0NTQiDmN1cnJlbnRFcG9jaFVpIhJsYXN0RmluYWxpemVkRXBvY2giF2N1cnJlbnRFcG9jaFN0YXJ0SGVpZ2h0IhhnZXRQb29sQXNzZXRzQnlMcEFzc2V0SWQiEGlkeEFtb3VudEFzc2V0SWQiD2lkeFByaWNlQXNzZXRJZCIHcG9vbENmZyIUZ2V0VXNlclZvdGVGaW5hbGl6ZWQiDSR0MDE2MTQ1MTYyMjUiDSR0MDE2MjI4MTYzMDMiC3VzZXJWb3RlS2V5Igh1c2VyVm90ZSIRZ2V0VXNlclZvdGVTdGFrZWQiDHN0YWtlZEJ5VXNlciIVZ2V0Vm90aW5nUmVzdWx0U3Rha2VkIg0kdDAxNjg0NzE2OTI3Ihd2b3RpbmdSZXN1bHRTdGFrZWRTdGFydCISdm90aW5nUmVzdWx0U3Rha2VkIh1nZXRWb3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbCINJHQwMTcyODkxNzM2OSIedm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxQcmV2IiJ2b3RpbmdSZXN1bHRTdGFrZWRMYXN0VXBkYXRlSGVpZ2h0Ihx2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbERoIhp2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbCIhcmVmcmVzaFZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsIg9zdGFrZWRWb3RlRGVsdGEiDSR0MDE4MjA2MTgyODYiFXZvdGluZ1Jlc3VsdFN0YWtlZE5ldyIZZ2V0VXNlclZvdGVTdGFrZWRJbnRlZ3JhbCINJHQwMTg4OTcxODk3NyIOdXNlclZvdGVTdGFrZWQiGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxQcmV2Ih51c2VyVm90ZVN0YWtlZExhc3RVcGRhdGVIZWlnaHQiGHVzZXJWb3RlU3Rha2VkSW50ZWdyYWxEaCIWdXNlclZvdGVTdGFrZWRJbnRlZ3JhbCIZcmVmcmVzaFZvdGVTdGFrZWRJbnRlZ3JhbCIEZWRnZSINJHQwMTk3NjUxOTg0NSIRdXNlclZvdGVGaW5hbGl6ZWQiB2FjdGlvbnMiE3ZvdGluZ1Jlc3VsdEFjdGlvbnMiC3ZvdGVBY3Rpb25zIhtnZXRTdGFrZWRWb3Rlc0ludGVncmFsc0RpZmYiDSR0MDIwNjk5MjA3NzkiHXVzZXJWb3RlU3Rha2VkSW50ZWdyYWxMYXN0S2V5Ihp1c2VyVm90ZVN0YWtlZEludGVncmFsTGFzdCIhdm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxMYXN0S2V5Ih52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3QiGnVzZXJWb3RlU3Rha2VkSW50ZWdyYWxEaWZmIh52b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbERpZmYiHHJlZnJlc2hCb29zdEVtaXNzaW9uSW50ZWdyYWwiEnd4RW1pc3Npb25QZXJCbG9jayIgYm9vc3RpbmdWMkxhc3RVcGRhdGVIZWlnaHRPcHRpb24iGGJvb3N0aW5nVjJJbmdlcmdhbE9wdGlvbiILZW1pc3Npb25FbmQiAWgiAmRoIhBsYXN0VXBkYXRlSGVpZ2h0IhVib29zdEVtaXNzaW9uUGVyQmxvY2siGWJvb3N0RW1pc3Npb25JbnRlZ3JhbFByZXYiFWJvb3N0RW1pc3Npb25JbnRlZ3JhbCIUaW50ZXJuYWxDbGFpbVd4Qm9vc3QiCHJlYWRPbmx5IghFTVBUWVNUUiIKcG9vbFdlaWdodCIOcG9vbEFkZHJlc3NTdHIiInVzZXJMcEJvb3N0RW1pc3Npb25MYXN0SW50ZWdyYWxLRVkiIHVzZXJCb29zdEVtaXNzaW9uTGFzdEludGVncmFsS0VZIh11c2VyQm9vc3RFbWlzc2lvbkxhc3RJbnRlZ3JhbCIZdXNlckJvb3N0RW1pc3Npb25JbnRlZ3JhbCINJHQwMjQzMjEyNDQ2MCIbc3Rha2VkVm90ZXNJbnRlZ3JhbHNBY3Rpb25zIhR1c2VyVm90ZUludGVncmFsRGlmZiIWdG90YWxWb3Rlc0ludGVncmFsRGlmZiIdcG9vbFVzZXJCb29zdEVtaXNzaW9uSW50ZWdyYWwiIXVzZXJCb29zdEF2YWxpYWJsZVRvQ2xhaW1Ub3RhbE5ldyIJZGF0YVN0YXRlIgVkZWJ1ZyILbG9ja0FjdGlvbnMiDmR1cmF0aW9uTW9udGhzIhVkdXJhdGlvbk1vbnRoc0FsbG93ZWQiCmFzc2V0SWRTdHIiCXBtdEFtb3VudCIObmV4dFVzZXJOdW1LRVkiDnVzZXJJc0V4aXN0aW5nIgp1c2VyTnVtU3RyIgdjb2VmZlg4Ig5nV3hBbW91bnRTdGFydCIOZ3d4QW1vdW50VG90YWwiEnVzZXJHd3hBbW91bnRUb3RhbCIMZ3d4UmV3YXJkSW52IgNhcnIiEWdldFd4V2l0aGRyYXdhYmxlIgp0eElkT3B0aW9uIg91c2VyUmVjb3JkQXJyYXkiCnVzZXJBbW91bnQiDGxvY2tEdXJhdGlvbiIHbG9ja0VuZCIBdCIIZXhwb25lbnQiDnd4V2l0aGRyYXdhYmxlIhFmYWN0b3J5QWRkcmVzc1N0ciIObG9ja0Fzc2V0SWRTdHIiC21pbkR1cmF0aW9uIgttYXhEdXJhdGlvbiILY2hlY2tDYWxsZXIiD3JlZmVycmVyQWRkcmVzcyIJc2lnbmF0dXJlIg0kdDAyOTQyNzI5NDkyIhFsb2NrQWN0aW9uc1Jlc3VsdCIPcmVmZXJyYWxBZGRyZXNzIgZyZWZJbnYiEXVwZGF0ZVJlZkFjdGl2aXR5Ig0kdDAyOTk1MDMwMDE1Ig0kdDAzMDMyNTMwNDI3IhJ1c2VyQm9vc3RBdmFpbGFibGUiDSR0MDMwNTU5MzA2NjAiB3R4SWRTdHIiCWd3eEJ1cm5lZCIMZ3d4UmVtYWluaW5nIg9sb2NrZWRHd3hBbW91bnQiFXVzZXJHd3hBbW91bnRUb3RhbE5ldyIMdGFyZ2V0SGVpZ2h0IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXmPAQABYQICX18AAWIACAABYwCAwtcvAAFkBQFjAAFlAg1ib29zdGluZy5yaWRlAAFmABIAAWcAgICQu7rWrfANAAFoCQC2AgEFAWcAAWkAoAsAAWoAmNYCAQFrAQFsCQC5CQIJAMwIAgUBZQkAzAgCAgI6IAkAzAgCBQFsBQNuaWwCAAEBbQEBbAkAAgEJAQFrAQUBbAEBbgIBbwFwCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUBbwUBcAkBAWsBCQCsAgIJAKwCAgIPbWFuZGF0b3J5IHRoaXMuBQFwAg8gaXMgbm90IGRlZmluZWQBAXECAW8BcAkBC3ZhbHVlT3JFbHNlAgkAmggCBQFvBQFwAAABAXIDAW8BcAFzCQELdmFsdWVPckVsc2UCCQCaCAIFAW8FAXAFAXMBAXQCAW8BcAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFAW8FAXAJAQFrAQkArAICCQCsAgICD21hbmRhdG9yeSB0aGlzLgUBcAIPIGlzIG5vdCBkZWZpbmVkAQF1AQF2AwkAZgIAAAUBdgkBAS0BBQF2BQF2AQF3AgF4AXkDCQBnAgUBeAAABQF4CQEBbQEJAKwCAgkBC3ZhbHVlT3JFbHNlAgUBeQIFdmFsdWUCEyBzaG91bGQgYmUgcG9zaXRpdmUBAXoACQC5CQIJAMwIAgIEJXMlcwkAzAgCAgZjb25maWcJAMwIAgIYcmVmZXJyYWxzQ29udHJhY3RBZGRyZXNzBQNuaWwFAWEAAUEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQFuAgUEdGhpcwkBAXoAAAFCCQC5CQIJAMwIAgIEJXMlcwkAzAgCAghyZWZlcnJhbAkAzAgCAgtwcm9ncmFtTmFtZQUDbmlsBQFhAAFDAgZ3eGxvY2sAAUQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUBQgUBQwEBRQACHCVzJXNfX2NvbmZpZ19fZmFjdG9yeUFkZHJlc3MAAUYAAQABRwACAAFIAAMAAUkABAABSgAFAAFLAAYAAUwABwABTQAIAAFOAAkAAU8ACgABUAALAQFRAAIRJXNfX2ZhY3RvcnlDb25maWcBAVIBAVMJALkJAgkAzAgCAgYlcyVzJXMJAMwIAgUBUwkAzAgCAh5tYXBwaW5nc19fbHBBc3NldDJQb29sQ29udHJhY3QFA25pbAUBYQEBVAEBVQkAuQkCCQDMCAICBCVzJXMJAMwIAgIKcG9vbFdlaWdodAkAzAgCBQFVBQNuaWwFAWEBAVYCAVcBWAkArAICCQCsAgIJAKwCAgISJXMlc19fcG9vbFdlaWdodF9fBQFXAgJfXwkApAMBBQFYAQFZAAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAW4CBQR0aGlzCQEBRQABAVoBAmFhCQC1CQIJAQFuAgUCYWEJAQFRAAUBYQECYWIBAmFjCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmFjBQFHAQJhZAECYWMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAJEDAgUCYWMFAUoBAmFlAQJhYwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhYwUBRgECYWYBAmFjCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmFjBQFPAQJhZwACFCVzX19tYW5hZ2VyUHVibGljS2V5AQJhaAACFyVzX19tYW5hZ2VyVmF1bHRBZGRyZXNzAQJhaQACGyVzJXNfX3JhdGVQZXJCbG9ja19fY3VycmVudAECYWoAAh4lcyVzX19yYXRlUGVyQmxvY2tNYXhfX2N1cnJlbnQBAmFrAAIaJXMlc19fZW1pc3Npb25fX3N0YXJ0QmxvY2sBAmFsAAIcJXMlc19fYm9vc3RpbmdWMl9fc3RhcnRCbG9jawECYW0AAholcyVzX19ib29zdGluZ1YyX19pbnRlZ3JhbAECYW4AAhglcyVzX19lbWlzc2lvbl9fZHVyYXRpb24BAmFvAAIYJXMlc19fZW1pc3Npb25fX2VuZEJsb2NrAQJhcAACDiVzX19uZXh0UGVyaW9kAQJhcQACKCVzJXNfX2d3eFJld2FyZEVtaXNzaW9uUGFydF9fc3RhcnRIZWlnaHQAAmFyAAEAAmFzAAIAAmF0AAMAAmF1AAQAAmF2AAUAAmF3AAYBAmF4AAIKJXNfX2NvbmZpZwECYXkACQC1CQIJAQFuAgUEdGhpcwkBAmF4AAUBYQACYXoJAQJheQAAAmFBCQDZBAEJAJEDAgUCYXoFAmFyAAJhQgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUCYXoFAmFzCQEBawECF2ludmFsaWQgbWluIGxvY2sgYW1vdW50AAJhQwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEJAJEDAgUCYXoFAmF0CQEBawECGWludmFsaWQgbWluIGxvY2sgZHVyYXRpb24AAmFECQETdmFsdWVPckVycm9yTWVzc2FnZQIJALYJAQkAkQMCBQJhegUCYXUJAQFrAQIZaW52YWxpZCBtYXggbG9jayBkdXJhdGlvbgACYUUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmF6BQJhdgkBAWsBAh1pbnZhbGlkIG1hdGggY29udHJhY3QgYWRkcmVzcwACYUYJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBCQCRAwIFAmF6BQJhdwkBAWsBAhhpbnZhbGlkIGJsb2NrcyBpbiBwZXJpb2QBAmFHBQJhQQJhQgJhQwJhRAJhRQkAuQkCCQDMCAICCiVzJWQlZCVkJXMJAMwIAgUCYUEJAMwIAgUCYUIJAMwIAgUCYUMJAMwIAgUCYUQJAMwIAgUCYUUFA25pbAUBYQECYUgFAmFBAmFCAmFDAmFEAmFFCQECYUcFBQJhQQkApAMBBQJhQgkApAMBBQJhQwkApAMBBQJhRAUCYUUBAmFJAAQCYUoJAKIIAQkBAmFoAAMJAAECBQJhSgIGU3RyaW5nBAJhSwUCYUoJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFLBQR0aGlzAQJhTAAEAmFNCQECYUkABAJhSgkAnQgCBQJhTQkBAmFnAAMJAAECBQJhSgIGU3RyaW5nBAJhSwUCYUoJANkEAQUCYUsDCQABAgUCYUoCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECYU4BAmFPBAJhUAkBAW0BAhFQZXJtaXNzaW9uIGRlbmllZAQCYUoJAQJhTAADCQABAgUCYUoCCkJ5dGVWZWN0b3IEAmFRBQJhSgMJAAACCAUCYU8PY2FsbGVyUHVibGljS2V5BQJhUQYFAmFQAwkAAQIFAmFKAgRVbml0AwkAAAIIBQJhTwZjYWxsZXIFBHRoaXMGBQJhUAkAAgECC01hdGNoIGVycm9yAAJhUgABAAJhUwACAAJhVAADAAJhVQAEAAJhVgAFAAJhVwAGAQJhWAICYVkCYVoJALkJAgkAzAgCAgwlcyVzJXNfX2xvY2sJAMwIAgkApQgBBQJhWQkAzAgCBAJhSgUCYVoDCQABAgUCYUoCCkJ5dGVWZWN0b3IEAmJhBQJhSgkA2AQBBQJiYQMJAAECBQJhSgIEVW5pdAIGbGVnYWN5CQACAQILTWF0Y2ggZXJyb3IFA25pbAUBYQECYmICAmFZAmFaCQC1CQIJAQFuAgUEdGhpcwkBAmFYAgUCYVkFAmFaBQFhAQJiYwECYVkJALkJAgkAzAgCAhQlcyVzX19nd3hBbW91bnRUb3RhbAkAzAgCCQClCAEFAmFZBQNuaWwFAWEBAmJkBQJiZQJiZgJiZwJiaAJiaQkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCYmUJAMwIAgkApAMBBQJiZgkAzAgCCQCkAwEFAmJnCQDMCAIJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkApAMBBQJiaAkAzAgCCQCkAwEFAmJpBQNuaWwFAWEBAmJqAAIPJXNfX25leHRVc2VyTnVtAQJiawECYVkJALkJAgkAzAgCAhklcyVzJXNfX21hcHBpbmdfX3VzZXIybnVtCQDMCAIFAmFZBQNuaWwFAWEBAmJsAQFYCQC5CQIJAMwIAgIZJXMlcyVzX19tYXBwaW5nX19udW0ydXNlcgkAzAgCBQFYBQNuaWwFAWEBAmJtAAIeJXMlc19fc3RhdHNfX2FjdGl2ZVRvdGFsTG9ja2VkAQJibgACJSVzJXNfX3N0YXRzX19sb2Nrc0R1cmF0aW9uU3VtSW5CbG9ja3MBAmJvAAIXJXMlc19fc3RhdHNfX2xvY2tzQ291bnQBAmJwAAIdJXMlc19fc3RhdHNfX2FjdGl2ZVVzZXJzQ291bnQBAmJxAQJicgkAuQkCCQDMCAICICVzJWRfX3VzZXJCb29zdEVtaXNzaW9uTGFzdEludFYyCQDMCAIJAKQDAQUCYnIFA25pbAUBYQECYnMCAmJyAmJ0CQC5CQIJAMwIAgIgJXMlZF9fdXNlckJvb3N0RW1pc3Npb25MYXN0SW50VjIJAMwIAgkApAMBBQJicgkAzAgCBQJidAUDbmlsBQFhAQJidQECYnIJALkJAgkAzAgCAhElcyVkX19tYXhCb29zdEludAkAzAgCCQCkAwEFAmJyBQNuaWwFAWEBAmJ2AAIYJXMlc19fbWF4Qm9vc3RJbnRfX3RvdGFsAQJidwECYnIJALkJAgkAzAgCAiQlcyVkX191c2VyQm9vc3RBdmFsaWFibGVUb0NsYWltVG90YWwJAMwIAgkApAMBBQJicgUDbmlsBQFhAQJieAECYnIJALkJAgkAzAgCAhYlcyVkX191c2VyQm9vc3RDbGFpbWVkCQDMCAIJAKQDAQUCYnIFA25pbAUBYQECYnkAAhAlcyVzX19nd3hfX3RvdGFsAQJiegQCYkECYkIBbwJiQwkAuQkCCQDMCAICCiVzJXMlcyVzJWQJAMwIAgIEdm90ZQkAzAgCBQJiQQkAzAgCBQJiQgkAzAgCCQClCAEFAW8JAMwIAgkApAMBBQJiQwUDbmlsBQFhAQJiRAECYkMJALkJAgkAzAgCAgQlcyVkCQDMCAICC3N0YXJ0SGVpZ2h0CQDMCAIJAKQDAQUCYkMFA25pbAUBYQECYkUACQC5CQIJAMwIAgICJXMJAMwIAgIOY3VycmVudEVwb2NoVWkFA25pbAUBYQECYkYCAmJHAmJDCQC5CQIJAMwIAgIGJXMlcyVkCQDMCAICEnZvdGluZ1Jlc3VsdFN0YWtlZAkAzAgCBQJiRwkAzAgCCQCkAwEFAmJDBQNuaWwFAWEBAmJIAgJiRwJiQwkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAhp2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbAkAzAgCBQJiRwkAzAgCCQCkAwEFAmJDBQNuaWwFAWEBAmJJAgJiRwJiQwkAuQkCCQDMCAICBiVzJXMlZAkAzAgCAip2b3RpbmdSZXN1bHRTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUCYkcJAMwIAgkApAMBBQJiQwUDbmlsBQFhAQJiSgMCYkcBbwJiQwkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICHnZvdGluZ1Jlc3VsdFN0YWtlZEludGVncmFsTGFzdAkAzAgCBQJiRwkAzAgCCQClCAEFAW8JAMwIAgkApAMBBQJiQwUDbmlsBQFhAQJiSwMCYkcBbwJiQwkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICEnZvdGVTdGFrZWRJbnRlZ3JhbAkAzAgCBQJiRwkAzAgCCQClCAEFAW8JAMwIAgkApAMBBQJiQwUDbmlsBQFhAQJiTAMCYkcBbwJiQwkAuQkCCQDMCAICCCVzJXMlcyVkCQDMCAICInZvdGVTdGFrZWRJbnRlZ3JhbExhc3RVcGRhdGVIZWlnaHQJAMwIAgUCYkcJAMwIAgkApQgBBQFvCQDMCAIJAKQDAQUCYkMFA25pbAUBYQECYk0DAmJHAW8CYkMJALkJAgkAzAgCAgglcyVzJXMlZAkAzAgCAhZ2b3RlU3Rha2VkSW50ZWdyYWxMYXN0CQDMCAIFAmJHCQDMCAIJAKUIAQUBbwkAzAgCCQCkAwEFAmJDBQNuaWwFAWEBAmJOAgJiTwJiRwkAuQkCCQDMCAICBiVzJXMlcwkAzAgCAgZzdGFrZWQJAMwIAgUCYk8JAMwIAgUCYkcFA25pbAUBYQACYlAJAQFZAAACYWMJAQFaAQUCYlAAAmJRCQECYWQBBQJhYwACYlIJAQJhZQEFAmFjAAJiUwkBAmFmAQUCYWMAAmJUCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJALkJAgkAzAgCAgIlcwkAzAgCAhZscFN0YWtpbmdQb29sc0NvbnRyYWN0BQNuaWwFAWEJAQFrAQIubHBfc3Rha2luZ19wb29scyBjb250cmFjdCBhZGRyZXNzIGlzIHVuZGVmaW5lZAkBAWsBAilpbnZhbGlkIGxwX3N0YWtpbmdfcG9vbHMgY29udHJhY3QgYWRkcmVzcwACYlUJALkJAgkAzAgCAgIlcwkAzAgCAhZ2b3RpbmdFbWlzc2lvbkNvbnRyYWN0BQNuaWwFAWEAAmJWCQERQGV4dHJOYXRpdmUoMTA2MikBCQERQGV4dHJOYXRpdmUoMTA1MykCBQJiUAUCYlUAAmJXCQC5CQIJAMwIAgICJXMJAMwIAgIadm90aW5nRW1pc3Npb25SYXRlQ29udHJhY3QFA25pbAUBYQACYlgKAAJiWQkA/AcEBQJiUQIVZ2V0Qm9vc3RDb2VmZlJFQURPTkxZBQNuaWwFA25pbAMJAAECBQJiWQIDSW50BQJiWQkAAgEJAKwCAgkAAwEFAmJZAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBAmJaAQJhWQQCYUoJAJ0IAgUEdGhpcwkBAmJrAQkApQgBBQJhWQMJAAECBQJhSgIGU3RyaW5nBAJhSwUCYUoJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAtgkBBQJhSwkBAWsBAhNpbnZhbGlkIHVzZXIgbnVtYmVyAwkAAQIFAmFKAgRVbml0CQEBbQECDGludmFsaWQgdXNlcgkAAgECC01hdGNoIGVycm9yAQJjYQAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBAmJ5AAAAAQJjYgECYVkEAmNjAhJnZXRMb2NrZWRHd3hBbW91bnQEAmNkCQETdmFsdWVPckVycm9yTWVzc2FnZQIEAmFKCQCdCAIFAmJWBQJiVwMJAAECBQJhSgIEVW5pdAUEdW5pdAMJAAECBQJhSgIGU3RyaW5nBAJhSwUCYUoJAKYIAQUCYUsJAAIBAgtNYXRjaCBlcnJvcgkBAWsBAiRpbnZhbGlkIHZvdGluZyBlbWlzc2lvbiByYXRlIGFkZHJlc3MEAmNlCgACYlkJAPwHBAUCYlYFAmNjCQDMCAIJAKUIAQUCYVkFA25pbAUDbmlsAwkAAQIFAmJZAgNJbnQFAmJZCQACAQkArAICCQADAQUCYlkCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQCY2YKAAJiWQkA/AcEBQJjZAUCY2MJAMwIAgkApQgBBQJhWQUDbmlsBQNuaWwDCQABAgUCYlkCA0ludAUCYlkJAAIBCQCsAgIJAAMBBQJiWQIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BAJjZwkAlgMBCQDMCAIFAmNlCQDMCAIFAmNmBQNuaWwFAmNnAQJjaAcCY2kCY2oCYmUCY2sCYmcCYmgCYU8EAmNsCQC5CQIJAMwIAgIRJXMlcyVzJXNfX2hpc3RvcnkJAMwIAgUCY2kJAMwIAgUCY2oJAMwIAgkA2AQBCAUCYU8NdHJhbnNhY3Rpb25JZAUDbmlsBQFhBAJjbQkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQgFCWxhc3RCbG9jawZoZWlnaHQJAMwIAgkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQCkAwEFAmJlCQDMCAIJAKQDAQUCY2sJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoBQNuaWwFAWEJAQtTdHJpbmdFbnRyeQIFAmNsBQJjbQECY24EAmNvAmNwAmNxAmNyBAJjcwkBAmJuAAQCY3QJAQJibwAEAmN1CQECYnAABAJjdgkBAmJtAAQCY3cJAQFxAgUEdGhpcwUCY3MEAmN4CQEBcQIFBHRoaXMFAmN0BAJjeQkBAXECBQR0aGlzBQJjdQQCY3oJAQFxAgUEdGhpcwUCY3YJAMwIAgkBDEludGVnZXJFbnRyeQIFAmNzCQBkAgUCY3cFAmNwCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJjdAkAZAIFAmN4BQJjcQkAzAgCCQEMSW50ZWdlckVudHJ5AgUCY3UJAGQCBQJjeQUCY3IJAMwIAgkBDEludGVnZXJFbnRyeQIFAmN2CQBkAgUCY3oFAmNvBQNuaWwBAmNBBwJhWQJhWgJiZQJiZgJiZwJiaAJiaQkAzAgCCQELU3RyaW5nRW50cnkCCQECYVgCBQJhWQUCYVoJAQJiZAUFAmJlBQJiZgUCYmcFAmJoBQJiaQUDbmlsAQJjQgICYU8CY0MD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c2UCBQJkSQAABAJkUAkAZAIJAGgCBQJkTgUCZEwFAmRPCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhbQAFAmRQCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWwABQZoZWlnaHQFA25pbAUCZFABAmRRAwJiRwJiTwJkUgQCYVkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQJiTwkBAWsBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwQCYnIJAQJiWgEFAmFZAwkAAAIFAmJyBQJicgQCZFMCBWVtcHR5BAJkVAMJAQIhPQIFAmJHBQJkUwQCZFUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJiUAkBAVIBBQJiRwkBAWsBCQCsAgICFXVuc3VwcG9ydGVkIGxwIGFzc2V0IAUCYkcJARFAZXh0ck5hdGl2ZSgxMDUwKQIFAmJQCQEBVAEFAmRVAwUCZFIAAAkBAW0BCQCsAgICKG5vdCByZWFkb25seSBtb2RlOiB1bnN1cHBvcnRlZCBscCBhc3NldCAFAmJHBAJkVgkBAmJzAgUCYnIFAmJHBAJkVwkBAmJxAQUCYnIEAmRYCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFAmRWCQEBcQIFBHRoaXMFAmRXBAJkUAgJAQJkRgACXzIEAmRZCQBlAgUCZFAFAmRYAwkAZgIAAAUCZFkJAQFtAQISd3JvbmcgY2FsY3VsYXRpb25zBAJkWgkBAmR4AgUCYkcFAmJPBAJlYQgFAmRaAl8xBAJlYggFAmRaAl8yBAJlYwgFAmRaAl8zBAJlZAkAawMFAmRZBQJkVAUBZAQCZWUDCQAAAgUCZWMAAAAACQBrAwUCZWQFAmViBQJlYwQCZWYJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZFYFAmRQBQNuaWwFAmVhBAJlZwkAuQkCCQDMCAIJAKQDAQUCZFgJAMwIAgkApAMBBQJkWQkAzAgCCQCkAwEFAmRUCQDMCAIJAKQDAQUCZWIJAMwIAgkApAMBBQJlYwUDbmlsAgE6CQCVCgMFAmVlBQJlZgUCZWcJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVoAgJhTwJlaQQCZWoJAMwIAgABCQDMCAIAAwkAzAgCAAYJAMwIAgAMCQDMCAIAGAkAzAgCADAFA25pbAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFAmVqBQJlaQkBAW0BAhBpbnZhbGlkIGR1cmF0aW9uBAJiZwkAaAIFAmVpBQFqBAJlawkA2AQBBQJhQQMJAQIhPQIJAJADAQgFAmFPCHBheW1lbnRzAAEJAQFtAQI0aW52YWxpZCBwYXltZW50IC0gZXhhY3Qgb25lIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQCY0QJAJEDAggFAmFPCHBheW1lbnRzAAAEAmVsCAUCY0QGYW1vdW50AwkBAiE9AgUCYUEJAQV2YWx1ZQEIBQJjRAdhc3NldElkCQEBbQEJAKwCAgkArAICAh5pbnZhbGlkIGFzc2V0IGlzIGluIHBheW1lbnQgLSAFAmVrAgwgaXMgZXhwZWN0ZWQEAmVtCQECYmoABAJhWQgFAmFPBmNhbGxlcgQCYk8JAKUIAQUCYVkEAmVuCQEJaXNEZWZpbmVkAQkAoggBCQECYmsBBQJiTwQCZW8DBQJlbgkBBXZhbHVlAQkAoggBCQECYmsBBQJiTwkApAMBCQEBdAIFBHRoaXMFAmVtBAJicgkBDXBhcnNlSW50VmFsdWUBBQJlbwQCY2sFBmhlaWdodAMDCQBmAgUCYUIFAmVsCQECIT0CBQJhWQUCYlQHCQEBbQEJAKwCAgIiYW1vdW50IGlzIGxlc3MgdGhlbiBtaW5Mb2NrQW1vdW50PQkApAMBBQJhQgMJAGYCBQJhQwUCYmcJAQFtAQkArAICAi1wYXNzZWQgZHVyYXRpb24gaXMgbGVzcyB0aGVuIG1pbkxvY2tEdXJhdGlvbj0JAKQDAQUCYUMDCQBmAgUCYmcFAmFECQEBbQEJAKwCAgIwcGFzc2VkIGR1cmF0aW9uIGlzIGdyZWF0ZXIgdGhlbiBtYXhMb2NrRHVyYXRpb249CQCkAwEFAmFEBAJlcAkAawMFAmJnBQFjBQJhRAQCZXEJAGsDBQJlbAUCZXAFAWMEAmVyCQECY2EABAJkVwkBAmJxAQUCYnIEAmRQCAkBAmRGAAJfMgQCZXMJAQJjRQEFAmFZBAJldAkA/QcEBQJiUwIRcmVmcmVzaFVzZXJSZXdhcmQJAMwIAggFAmFZBWJ5dGVzBQNuaWwFA25pbAMJAAACBQJldAUCZXQEAmV1AwUCZW4FA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgUCZW0JAGQCBQJicgABCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJiawEFAmJPBQJlbwkAzAgCCQELU3RyaW5nRW50cnkCCQECYmwBBQJlbwUCYk8FA25pbAkAlAoCCQDOCAIJAM0IAgkAzggCCQDOCAIFAmV1CQECY0EHBQJhWQgFAmFPDXRyYW5zYWN0aW9uSWQFAmVsBQJjawUCYmcFAmVxAAAJAQJjbgQFAmVsBQJiZwABAwUCZW4AAAABCQECY2gHAgRsb2NrBQJiTwUCZWwFAmNrBQJiZwUCZXEFAmFPCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJkVwUCZFAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJieQAJAGQCBQJlcgUCZXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiYwEFAmFZCQBkAgUCZXMFAmVxBQNuaWwFAmVxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJldgICYVkCZXcEAmV4CQECYmICBQJhWQUCZXcEAmV5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXgFAmFSBAJjawkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV4BQJhUwQCZXoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJleAUCYVQEAmVBCQBkAgUCY2sFAmV6BAJiaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV4BQJhVwQCYmgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJleAUCYVYEAmVCCQBpAgkAZQIFBmhlaWdodAUCY2sFAmFGBAJlQwkAvAIDCQC2AgEFAmVCCQC5AgIJALYCAQkAaAIACAUCYUYFAWgJALYCAQUCZXoEAmVEAwkAZgIFBmhlaWdodAUCZUEFAmV5CQBlAgkAoAMBCQC8AgMJALYCAQUCZXkJALgCAgUBaAkAdgYJALYCAQAFAAEFAmVDBQFmBQFmBQRET1dOBQFoBQJiaQUCZUQRAmFPAQtjb25zdHJ1Y3RvcgYCZUUCZUYCYUICZUcCZUgCYUUEAmVJCQECYU4BBQJhTwMJAAACBQJlSQUCZUkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmJqAAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJheAAJAQJhSAUFAmVGBQJhQgUCZUcFAmVIBQJhRQkAzAgCCQELU3RyaW5nRW50cnkCCQEBRQAFAmVFBQNuaWwJAQJjbgQAAAAAAAAAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTwEHbG9ja1JlZgMCYmcCZUoCZUsEAmVMCQECZWgCBQJhTwUCYmcEAmVNCAUCZUwCXzEEAmVxCAUCZUwCXzIEAmVOCQClCAEIBQJhTwZjYWxsZXIEAmVPAwMJAAACBQJlSgIABgkAAAIFAmVLAQAFBHVuaXQJAPwHBAUBQQIKY3JlYXRlUGFpcgkAzAgCBQFECQDMCAIFAmVKCQDMCAIFAmVOCQDMCAIFAmVLBQNuaWwFA25pbAMJAAACBQJlTwUCZU8EAmVQCQD8BwQFAmFFAhZ1cGRhdGVSZWZlcnJhbEFjdGl2aXR5CQDMCAIJAKUIAQgFAmFPBmNhbGxlcgkAzAgCBQJlcQUDbmlsBQNuaWwDCQAAAgUCZVAFAmVQCQCUCgIFAmVNBQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFPAQRsb2NrAQJiZwQCZVEJAQJlaAIFAmFPBQJiZwQCZU0IBQJlUQJfMQQCZXEIBQJlUQJfMgQCZVAJAPwHBAUCYUUCFnVwZGF0ZVJlZmVycmFsQWN0aXZpdHkJAMwIAgkApQgBCAUCYU8GY2FsbGVyCQDMCAIFAmVxBQNuaWwFA25pbAMJAAACBQJlUAUCZVAJAJQKAgUCZU0FBHVuaXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CYU8BDGNsYWltV3hCb29zdAICYkcCYk8DCQECIT0CBQJiUggFAmFPBmNhbGxlcgkBAW0BAhJwZXJtaXNzaW9ucyBkZW5pZWQEAmVSCQECZFEDBQJiRwUCYk8HBAJlUwgFAmVSAl8xBAJlZggFAmVSAl8yBAJlZwgFAmVSAl8zCQCUCgIFAmVmCQDMCAIFAmVTBQNuaWwCYU8BFGNsYWltV3hCb29zdFJFQURPTkxZAgJiRwJiTwQCZVQJAQJkUQMFAmJHBQJiTwYEAmVTCAUCZVQCXzEEAmVmCAUCZVQCXzIEAmVnCAUCZVQCXzMJAJQKAgUDbmlsCQDMCAIFAmVTCQDMCAIFAmVnBQNuaWwCYU8BBnVubG9jawICZVUCYmUEAmFZCAUCYU8GY2FsbGVyBAJiTwkApQgBBQJhWQQCYVoJANkEAQUCZVUEAmV4CQECYmICBQJhWQMJAAACBQJlVQIABQR1bml0BQJhWgQCZXkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJleAUCYVIEAmNrCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXgFAmFTBAJlegkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV4BQJhVAQCZUEJAGQCBQJjawUCZXoEAmJpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCZXgFAmFXBAJiaAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmV4BQJhVgQCZUIJAGkCCQBlAgUGaGVpZ2h0BQJjawUCYUYEAmVECQECZXYCBQJhWQMJAAACBQJlVQIABQR1bml0BQJhWgMJAGYCBQJiZQUCZUQJAQFtAQkArAICAhptYXhpbXVtIGFtb3VudCB0byB1bmxvY2s6IAkApAMBBQJlRAQCZXAJAGsDBQJlegUBYwUCYUQEAmVxCQBrAwUCZXkFAmVwBQFjBAJlVgkAawMJAGgCBQJlQgUCYUYFAmVxBQJhRAQCZVcJAQF3AgkAZQIFAmJoBQJlVgIMZ3d4UmVtYWluaW5nBAJlWAkBAmNiAQUCYVkDCQBnAgAABQJleQkBAW0BAhFub3RoaW5nIHRvIHVubG9jawQCZXIJAQJjYQAEAmVzCQECY0UBBQJhWQQCZVkJAQF3AgkAZQIFAmVzBQJlVgIVdXNlckd3eEFtb3VudFRvdGFsTmV3AwkAZgIFAmVYBQJlWQkBAW0BCQCsAgICE2xvY2tlZCBnd3ggYW1vdW50OiAJAKQDAQUCZVgEAmV0CQD9BwQFAmJTAhFyZWZyZXNoVXNlclJld2FyZAkAzAgCCAUCYVkFYnl0ZXMFA25pbAUDbmlsAwkAAAIFAmV0BQJldAkAzggCCQDNCAIJAM0IAgkAzggCCQECY0EHBQJhWQUCYVoFAmV5BQJjawUCZXoFAmVXCQBkAgUCYmkFAmJlCQECY24ECQEBLQEFAmJlAAAAAAAACQECY2gHAgZ1bmxvY2sFAmJPBQJiZQUCY2sFAmV6BQJlVgUCYU8JAQ5TY3JpcHRUcmFuc2ZlcgMFAmFZBQJiZQUCYUEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJieQAJAQF3AgkAZQIFAmVyBQJlVgIIZ3d4VG90YWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJiYwEFAmFZBQJlWQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFPARNnd3hVc2VySW5mb1JFQURPTkxZAQJiTwQCYVkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQJiTwkBAWsBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwQCYmgJAQJjRQEFAmFZCQCUCgIFA25pbAkAzAgCBQJiaAUDbmlsAmFPARd1c2VyTWF4RHVyYXRpb25SRUFET05MWQECYk8JAJQKAgUDbmlsCQCUCgICDGluY3JlYXNlTG9jawUCYUQCYU8BIGdldFVzZXJHd3hBbW91bnRBdEhlaWdodFJFQURPTkxZAgJiTwJlWgQCYVkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQJiTwkBAWsBAhRpbnZhbGlkIHVzZXIgYWRkcmVzcwQCYmgJAQJjRQEFAmFZCQCUCgIFA25pbAUCYmgCYU8BEGdldFVzZXJHd3hBbW91bnQBAmJPBAJhWQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEFAmJPCQEBawECFGludmFsaWQgdXNlciBhZGRyZXNzBAJiaAkBAmNFAQUCYVkJAJQKAgUDbmlsBQJiaAJhTwETZ2V0R3d4VG90YWxSRUFET05MWQAJAJQKAgUDbmlsCQECY2EAAmFPARVvbkJvb3N0RW1pc3Npb25VcGRhdGUABAJlSQMJAAACCAUCYU8GY2FsbGVyBQJiUQYJAQJhTgEFAmFPAwkAAAIFAmVJBQJlSQkBAmRGAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhTwESb25TdGFrZWRWb3RlVXBkYXRlAwJiRwJiTwJkcgQCZUkDCQAAAggFAmFPBmNhbGxlcgUCYlIGCQECYU4BBQJhTwMJAAACBQJlSQUCZUkEAmR1CQECZHEDBQJiRwUCYk8FAmRyCQCUCgIFAmR1BQR1bml0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmFPAR1nZXRWb3RpbmdSZXN1bHRTdGFrZWRSRUFET05MWQECYkcJAJQKAgUDbmlsCQECY1YBBQJiRwJhTwElZ2V0Vm90aW5nUmVzdWx0U3Rha2VkSW50ZWdyYWxSRUFET05MWQECYkcJAJQKAgUDbmlsCQECY1oBBQJiRwJhTwEcZ2V0VXNlclZvdGVGaW5hbGl6ZWRSRUFET05MWQICYkcCYk8JAJQKAgUDbmlsCQECY08CBQJiRwUCYk8CYU8BIWdldFVzZXJWb3RlU3Rha2VkSW50ZWdyYWxSRUFET05MWQICYkcCYk8JAJQKAgUDbmlsCQECZGoCBQJiRwUCYk8BAmZhAQJmYgAEAmZjBAJhSgkBAmFMAAMJAAECBQJhSgIKQnl0ZVZlY3RvcgQCYVEFAmFKBQJhUQMJAAECBQJhSgIEVW5pdAgFAmZhD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yCQD0AwMIBQJmYQlib2R5Qnl0ZXMJAJEDAggFAmZhBnByb29mcwAABQJmYx6ZiY8=", "height": 2704480, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 993Xf1ymMd9qgpdSFig7GKr4bsBBimv4CVd2yJHaCmc1 Next: 5mLpGSjrJ9FY9CnVPpc53f3Rku6vtNeMtpswhY5LcNi6 Diff:
OldNewDifferences
831831 let eV = fraction((eB * aF), eq, aD)
832832 let eW = w((bh - eV), "gwxRemaining")
833833 let eX = cb(aY)
834- if ((eX > eW))
835- then m(("locked gwx amount: " + toString(eX)))
836- else if ((0 >= ey))
837- then m("nothing to unlock")
838- else {
839- let er = ca()
840- let es = cE(aY)
841- let et = reentrantInvoke(bS, "refreshUserReward", [aY.bytes], nil)
842- if ((et == et))
843- then ((((cA(aY, aZ, ey, ck, ez, eW, (bi + be)) ++ cn(-(be), 0, 0, 0)) :+ ch("unlock", bO, be, ck, ez, eV, aO)) :+ ScriptTransfer(aY, be, aA)) ++ [IntegerEntry(by(), w((er - eV), "gwxTotal")), IntegerEntry(bc(aY), w((es - eV), "userGwxAmountTotal"))])
844- else throw("Strict value is not equal to itself.")
845- }
834+ if ((0 >= ey))
835+ then m("nothing to unlock")
836+ else {
837+ let er = ca()
838+ let es = cE(aY)
839+ let eY = w((es - eV), "userGwxAmountTotalNew")
840+ if ((eX > eY))
841+ then m(("locked gwx amount: " + toString(eX)))
842+ else {
843+ let et = reentrantInvoke(bS, "refreshUserReward", [aY.bytes], nil)
844+ if ((et == et))
845+ then ((((cA(aY, aZ, ey, ck, ez, eW, (bi + be)) ++ cn(-(be), 0, 0, 0)) :+ ch("unlock", bO, be, ck, ez, eV, aO)) :+ ScriptTransfer(aY, be, aA)) ++ [IntegerEntry(by(), w((er - eV), "gwxTotal")), IntegerEntry(bc(aY), eY)])
846+ else throw("Strict value is not equal to itself.")
847+ }
848+ }
846849 }
847850 }
848851
863866
864867
865868 @Callable(aO)
866-func getUserGwxAmountAtHeightREADONLY (bO,eY) = {
869+func getUserGwxAmountAtHeightREADONLY (bO,eZ) = {
867870 let aY = valueOrErrorMessage(addressFromString(bO), k("invalid user address"))
868871 let bh = cE(aY)
869872 $Tuple2(nil, bh)
931934 func getUserVoteStakedIntegralREADONLY (bG,bO) = $Tuple2(nil, dj(bG, bO))
932935
933936
934-@Verifier(eZ)
935-func fa () = {
936- let fb = {
937+@Verifier(fa)
938+func fb () = {
939+ let fc = {
937940 let aJ = aL()
938941 if ($isInstanceOf(aJ, "ByteVector"))
939942 then {
941944 aQ
942945 }
943946 else if ($isInstanceOf(aJ, "Unit"))
944- then eZ.senderPublicKey
947+ then fa.senderPublicKey
945948 else throw("Match error")
946949 }
947- sigVerify(eZ.bodyBytes, eZ.proofs[0], fb)
950+ sigVerify(fa.bodyBytes, fa.proofs[0], fc)
948951 }
949952
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 8
77
88 let c = 100000000
99
1010 let d = c
1111
1212 let e = "boosting.ride"
1313
1414 let f = 18
1515
1616 let g = 1000000000000000000
1717
1818 let h = toBigInt(g)
1919
2020 let i = 1440
2121
2222 let j = 43800
2323
2424 func k (l) = makeString([e, ": ", l], "")
2525
2626
2727 func m (l) = throw(k(l))
2828
2929
3030 func n (o,p) = valueOrErrorMessage(getString(o, p), k((("mandatory this." + p) + " is not defined")))
3131
3232
3333 func q (o,p) = valueOrElse(getInteger(o, p), 0)
3434
3535
3636 func r (o,p,s) = valueOrElse(getInteger(o, p), s)
3737
3838
3939 func t (o,p) = valueOrErrorMessage(getInteger(o, p), k((("mandatory this." + p) + " is not defined")))
4040
4141
4242 func u (v) = if ((0 > v))
4343 then -(v)
4444 else v
4545
4646
4747 func w (x,y) = if ((x >= 0))
4848 then x
4949 else m((valueOrElse(y, "value") + " should be positive"))
5050
5151
5252 func z () = makeString(["%s%s", "config", "referralsContractAddress"], a)
5353
5454
5555 let A = addressFromStringValue(n(this, z()))
5656
5757 let B = makeString(["%s%s", "referral", "programName"], a)
5858
5959 let C = "wxlock"
6060
6161 let D = valueOrElse(getString(this, B), C)
6262
6363 func E () = "%s%s__config__factoryAddress"
6464
6565
6666 let F = 1
6767
6868 let G = 2
6969
7070 let H = 3
7171
7272 let I = 4
7373
7474 let J = 5
7575
7676 let K = 6
7777
7878 let L = 7
7979
8080 let M = 8
8181
8282 let N = 9
8383
8484 let O = 10
8585
8686 let P = 11
8787
8888 func Q () = "%s__factoryConfig"
8989
9090
9191 func R (S) = makeString(["%s%s%s", S, "mappings__lpAsset2PoolContract"], a)
9292
9393
9494 func T (U) = makeString(["%s%s", "poolWeight", U], a)
9595
9696
9797 func V (W,X) = ((("%s%s__poolWeight__" + W) + "__") + toString(X))
9898
9999
100100 func Y () = addressFromStringValue(n(this, E()))
101101
102102
103103 func Z (aa) = split(n(aa, Q()), a)
104104
105105
106106 func ab (ac) = addressFromStringValue(ac[G])
107107
108108
109109 func ad (ac) = addressFromStringValue(ac[J])
110110
111111
112112 func ae (ac) = addressFromStringValue(ac[F])
113113
114114
115115 func af (ac) = addressFromStringValue(ac[O])
116116
117117
118118 func ag () = "%s__managerPublicKey"
119119
120120
121121 func ah () = "%s__managerVaultAddress"
122122
123123
124124 func ai () = "%s%s__ratePerBlock__current"
125125
126126
127127 func aj () = "%s%s__ratePerBlockMax__current"
128128
129129
130130 func ak () = "%s%s__emission__startBlock"
131131
132132
133133 func al () = "%s%s__boostingV2__startBlock"
134134
135135
136136 func am () = "%s%s__boostingV2__integral"
137137
138138
139139 func an () = "%s%s__emission__duration"
140140
141141
142142 func ao () = "%s%s__emission__endBlock"
143143
144144
145145 func ap () = "%s__nextPeriod"
146146
147147
148148 func aq () = "%s%s__gwxRewardEmissionPart__startHeight"
149149
150150
151151 let ar = 1
152152
153153 let as = 2
154154
155155 let at = 3
156156
157157 let au = 4
158158
159159 let av = 5
160160
161161 let aw = 6
162162
163163 func ax () = "%s__config"
164164
165165
166166 func ay () = split(n(this, ax()), a)
167167
168168
169169 let az = ay()
170170
171171 let aA = fromBase58String(az[ar])
172172
173173 let aB = valueOrErrorMessage(parseInt(az[as]), k("invalid min lock amount"))
174174
175175 let aC = valueOrErrorMessage(parseInt(az[at]), k("invalid min lock duration"))
176176
177177 let aD = valueOrErrorMessage(parseInt(az[au]), k("invalid max lock duration"))
178178
179179 let aE = valueOrErrorMessage(addressFromString(az[av]), k("invalid math contract address"))
180180
181181 let aF = valueOrErrorMessage(parseInt(az[aw]), k("invalid blocks in period"))
182182
183183 func aG (aA,aB,aC,aD,aE) = makeString(["%s%d%d%d%s", aA, aB, aC, aD, aE], a)
184184
185185
186186 func aH (aA,aB,aC,aD,aE) = aG(aA, toString(aB), toString(aC), toString(aD), aE)
187187
188188
189189 func aI () = {
190190 let aJ = getString(ah())
191191 if ($isInstanceOf(aJ, "String"))
192192 then {
193193 let aK = aJ
194194 addressFromStringValue(aK)
195195 }
196196 else this
197197 }
198198
199199
200200 func aL () = {
201201 let aM = aI()
202202 let aJ = getString(aM, ag())
203203 if ($isInstanceOf(aJ, "String"))
204204 then {
205205 let aK = aJ
206206 fromBase58String(aK)
207207 }
208208 else if ($isInstanceOf(aJ, "Unit"))
209209 then unit
210210 else throw("Match error")
211211 }
212212
213213
214214 func aN (aO) = {
215215 let aP = m("Permission denied")
216216 let aJ = aL()
217217 if ($isInstanceOf(aJ, "ByteVector"))
218218 then {
219219 let aQ = aJ
220220 if ((aO.callerPublicKey == aQ))
221221 then true
222222 else aP
223223 }
224224 else if ($isInstanceOf(aJ, "Unit"))
225225 then if ((aO.caller == this))
226226 then true
227227 else aP
228228 else throw("Match error")
229229 }
230230
231231
232232 let aR = 1
233233
234234 let aS = 2
235235
236236 let aT = 3
237237
238238 let aU = 4
239239
240240 let aV = 5
241241
242242 let aW = 6
243243
244244 func aX (aY,aZ) = makeString(["%s%s%s__lock", toString(aY), {
245245 let aJ = aZ
246246 if ($isInstanceOf(aJ, "ByteVector"))
247247 then {
248248 let ba = aJ
249249 toBase58String(ba)
250250 }
251251 else if ($isInstanceOf(aJ, "Unit"))
252252 then "legacy"
253253 else throw("Match error")
254254 }], a)
255255
256256
257257 func bb (aY,aZ) = split(n(this, aX(aY, aZ)), a)
258258
259259
260260 func bc (aY) = makeString(["%s%s__gwxAmountTotal", toString(aY)], a)
261261
262262
263263 func bd (be,bf,bg,bh,bi) = makeString(["%d%d%d%d%d%d%d", toString(be), toString(bf), toString(bg), toString(lastBlock.timestamp), toString(bh), toString(bi)], a)
264264
265265
266266 func bj () = "%s__nextUserNum"
267267
268268
269269 func bk (aY) = makeString(["%s%s%s__mapping__user2num", aY], a)
270270
271271
272272 func bl (X) = makeString(["%s%s%s__mapping__num2user", X], a)
273273
274274
275275 func bm () = "%s%s__stats__activeTotalLocked"
276276
277277
278278 func bn () = "%s%s__stats__locksDurationSumInBlocks"
279279
280280
281281 func bo () = "%s%s__stats__locksCount"
282282
283283
284284 func bp () = "%s%s__stats__activeUsersCount"
285285
286286
287287 func bq (br) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br)], a)
288288
289289
290290 func bs (br,bt) = makeString(["%s%d__userBoostEmissionLastIntV2", toString(br), bt], a)
291291
292292
293293 func bu (br) = makeString(["%s%d__maxBoostInt", toString(br)], a)
294294
295295
296296 func bv () = "%s%s__maxBoostInt__total"
297297
298298
299299 func bw (br) = makeString(["%s%d__userBoostAvaliableToClaimTotal", toString(br)], a)
300300
301301
302302 func bx (br) = makeString(["%s%d__userBoostClaimed", toString(br)], a)
303303
304304
305305 func by () = "%s%s__gwx__total"
306306
307307
308308 func bz (bA,bB,o,bC) = makeString(["%s%s%s%s%d", "vote", bA, bB, toString(o), toString(bC)], a)
309309
310310
311311 func bD (bC) = makeString(["%s%d", "startHeight", toString(bC)], a)
312312
313313
314314 func bE () = makeString(["%s", "currentEpochUi"], a)
315315
316316
317317 func bF (bG,bC) = makeString(["%s%s%d", "votingResultStaked", bG, toString(bC)], a)
318318
319319
320320 func bH (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegral", bG, toString(bC)], a)
321321
322322
323323 func bI (bG,bC) = makeString(["%s%s%d", "votingResultStakedIntegralLastUpdateHeight", bG, toString(bC)], a)
324324
325325
326326 func bJ (bG,o,bC) = makeString(["%s%s%s%d", "votingResultStakedIntegralLast", bG, toString(o), toString(bC)], a)
327327
328328
329329 func bK (bG,o,bC) = makeString(["%s%s%s%d", "voteStakedIntegral", bG, toString(o), toString(bC)], a)
330330
331331
332332 func bL (bG,o,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLastUpdateHeight", bG, toString(o), toString(bC)], a)
333333
334334
335335 func bM (bG,o,bC) = makeString(["%s%s%s%d", "voteStakedIntegralLast", bG, toString(o), toString(bC)], a)
336336
337337
338338 func bN (bO,bG) = makeString(["%s%s%s", "staked", bO, bG], a)
339339
340340
341341 let bP = Y()
342342
343343 let ac = Z(bP)
344344
345345 let bQ = ad(ac)
346346
347347 let bR = ae(ac)
348348
349349 let bS = af(ac)
350350
351351 let bT = valueOrErrorMessage(addressFromString(valueOrErrorMessage(getString(makeString(["%s", "lpStakingPoolsContract"], a)), k("lp_staking_pools contract address is undefined"))), k("invalid lp_staking_pools contract address"))
352352
353353 let bU = makeString(["%s", "votingEmissionContract"], a)
354354
355355 let bV = addressFromStringValue(getStringValue(bP, bU))
356356
357357 let bW = makeString(["%s", "votingEmissionRateContract"], a)
358358
359359 let bX = {
360360 let bY = invoke(bQ, "getBoostCoeffREADONLY", nil, nil)
361361 if ($isInstanceOf(bY, "Int"))
362362 then bY
363363 else throw(($getType(bY) + " couldn't be cast to Int"))
364364 }
365365
366366 func bZ (aY) = {
367367 let aJ = getString(this, bk(toString(aY)))
368368 if ($isInstanceOf(aJ, "String"))
369369 then {
370370 let aK = aJ
371371 valueOrErrorMessage(parseInt(aK), k("invalid user number"))
372372 }
373373 else if ($isInstanceOf(aJ, "Unit"))
374374 then m("invalid user")
375375 else throw("Match error")
376376 }
377377
378378
379379 func ca () = valueOrElse(getInteger(this, by()), 0)
380380
381381
382382 func cb (aY) = {
383383 let cc = "getLockedGwxAmount"
384384 let cd = valueOrErrorMessage({
385385 let aJ = getString(bV, bW)
386386 if ($isInstanceOf(aJ, "Unit"))
387387 then unit
388388 else if ($isInstanceOf(aJ, "String"))
389389 then {
390390 let aK = aJ
391391 addressFromString(aK)
392392 }
393393 else throw("Match error")
394394 }, k("invalid voting emission rate address"))
395395 let ce = {
396396 let bY = invoke(bV, cc, [toString(aY)], nil)
397397 if ($isInstanceOf(bY, "Int"))
398398 then bY
399399 else throw(($getType(bY) + " couldn't be cast to Int"))
400400 }
401401 let cf = {
402402 let bY = invoke(cd, cc, [toString(aY)], nil)
403403 if ($isInstanceOf(bY, "Int"))
404404 then bY
405405 else throw(($getType(bY) + " couldn't be cast to Int"))
406406 }
407407 let cg = max([ce, cf])
408408 cg
409409 }
410410
411411
412412 func ch (ci,cj,be,ck,bg,bh,aO) = {
413413 let cl = makeString(["%s%s%s%s__history", ci, cj, toBase58String(aO.transactionId)], a)
414414 let cm = makeString(["%d%d%d%d%d%d%d", toString(lastBlock.height), toString(lastBlock.timestamp), toString(be), toString(ck), toString(bg), toString(bh)], a)
415415 StringEntry(cl, cm)
416416 }
417417
418418
419419 func cn (co,cp,cq,cr) = {
420420 let cs = bn()
421421 let ct = bo()
422422 let cu = bp()
423423 let cv = bm()
424424 let cw = q(this, cs)
425425 let cx = q(this, ct)
426426 let cy = q(this, cu)
427427 let cz = q(this, cv)
428428 [IntegerEntry(cs, (cw + cp)), IntegerEntry(ct, (cx + cq)), IntegerEntry(cu, (cy + cr)), IntegerEntry(cv, (cz + co))]
429429 }
430430
431431
432432 func cA (aY,aZ,be,bf,bg,bh,bi) = [StringEntry(aX(aY, aZ), bd(be, bf, bg, bh, bi))]
433433
434434
435435 func cB (aO,cC) = if ((size(aO.payments) > 1))
436436 then m("only one payment is allowed")
437437 else if ((size(aO.payments) == 0))
438438 then 0
439439 else {
440440 let cD = aO.payments[0]
441441 if ((value(cD.assetId) != cC))
442442 then m("invalid asset id in payment")
443443 else cD.amount
444444 }
445445
446446
447447 func cE (aY) = valueOrElse(getInteger(this, bc(aY)), 0)
448448
449449
450450 func cF () = {
451451 let cG = {
452452 let cH = value(getInteger(bV, bE()))
453453 let cI = (cH - 1)
454454 if ((0 > cI))
455455 then m("invalid epoch")
456456 else $Tuple2(cH, cI)
457457 }
458458 let cH = cG._1
459459 let cI = cG._2
460460 let cJ = value(getInteger(bV, bD(cH)))
461461 $Tuple2(cI, cJ)
462462 }
463463
464464
465465 func cK (bG) = {
466466 let cL = 4
467467 let cM = 5
468468 let cN = {
469469 let bY = invoke(bP, "getPoolConfigByLpAssetIdREADONLY", [bG], nil)
470470 if ($isInstanceOf(bY, "List[Any]"))
471471 then bY
472472 else throw(($getType(bY) + " couldn't be cast to List[Any]"))
473473 }
474474 let bA = {
475475 let bY = cN[cL]
476476 if ($isInstanceOf(bY, "String"))
477477 then bY
478478 else throw(($getType(bY) + " couldn't be cast to String"))
479479 }
480480 let bB = {
481481 let bY = cN[cM]
482482 if ($isInstanceOf(bY, "String"))
483483 then bY
484484 else throw(($getType(bY) + " couldn't be cast to String"))
485485 }
486486 $Tuple2(bA, bB)
487487 }
488488
489489
490490 func cO (bG,bO) = {
491491 let aY = addressFromStringValue(bO)
492492 let cP = cF()
493493 let cI = cP._1
494494 let cJ = cP._2
495495 let cQ = cK(bG)
496496 let bA = cQ._1
497497 let bB = cQ._2
498498 let cR = bz(bA, bB, aY, cI)
499499 let cS = valueOrElse(getInteger(bV, cR), 0)
500500 cS
501501 }
502502
503503
504504 func cT (bG,bO) = {
505505 let cU = valueOrElse(getInteger(bR, bN(bO, bG)), 0)
506506 let cS = cO(bG, bO)
507507 if ((cU == 0))
508508 then 0
509509 else cS
510510 }
511511
512512
513513 func cV (bG) = {
514514 let cW = cF()
515515 let cI = cW._1
516516 let cJ = cW._2
517517 let cX = valueOrElse(getInteger(bV, bF(bG, cI)), 0)
518518 let cY = valueOrElse(getInteger(this, bF(bG, cI)), cX)
519519 cY
520520 }
521521
522522
523523 func cZ (bG) = {
524524 let da = cF()
525525 let cI = da._1
526526 let cJ = da._2
527527 let cY = cV(bG)
528528 let db = valueOrElse(getInteger(this, bH(bG, cI)), 0)
529529 let dc = valueOrElse(getInteger(this, bI(bG, cI)), cJ)
530530 let dd = (height - dc)
531531 let de = ((dd * cY) + db)
532532 de
533533 }
534534
535535
536536 func df (bG,dg) = {
537537 let dh = cF()
538538 let cI = dh._1
539539 let cJ = dh._2
540540 let cY = cV(bG)
541541 let di = (cY + dg)
542542 let de = cZ(bG)
543543 [IntegerEntry(bF(bG, cI), di), IntegerEntry(bI(bG, cI), height), IntegerEntry(bH(bG, cI), de)]
544544 }
545545
546546
547547 func dj (bG,bO) = {
548548 let dk = cF()
549549 let cI = dk._1
550550 let cJ = dk._2
551551 let aY = addressFromStringValue(bO)
552552 let dl = cT(bG, bO)
553553 let dm = valueOrElse(getInteger(this, bK(bG, aY, cI)), 0)
554554 let dn = valueOrElse(getInteger(this, bL(bG, aY, cI)), cJ)
555555 let do = (height - dn)
556556 let dp = ((do * dl) + dm)
557557 dp
558558 }
559559
560560
561561 func dq (bG,bO,dr) = {
562562 let ds = cF()
563563 let cI = ds._1
564564 let cJ = ds._2
565565 let aY = addressFromStringValue(bO)
566566 let dt = cO(bG, bO)
567567 let du = if ((dt == 0))
568568 then nil
569569 else {
570570 let dg = if (dr)
571571 then dt
572572 else -(dt)
573573 let dv = df(bG, dg)
574574 let dp = dj(bG, bO)
575575 let dw = [IntegerEntry(bL(bG, aY, cI), height), IntegerEntry(bK(bG, aY, cI), dp)]
576576 (dv ++ dw)
577577 }
578578 du
579579 }
580580
581581
582582 func dx (bG,bO) = {
583583 let dy = cF()
584584 let cI = dy._1
585585 let cJ = dy._2
586586 let aY = addressFromStringValue(bO)
587587 let dz = bM(bG, aY, cI)
588588 let dA = valueOrElse(getInteger(this, dz), 0)
589589 let dB = bJ(bG, aY, cI)
590590 let dC = valueOrElse(getInteger(this, dB), 0)
591591 let dp = dj(bG, bO)
592592 let de = cZ(bG)
593593 let dD = (dp - dA)
594594 let dE = (de - dC)
595595 $Tuple3([IntegerEntry(dz, dp), IntegerEntry(dB, de)], dD, dE)
596596 }
597597
598598
599599 func dF () = {
600600 let dG = t(bQ, ai())
601601 let dH = getInteger(this, al())
602602 let dI = getInteger(this, am())
603603 let dJ = t(bQ, ao())
604604 let dK = if ((height > dJ))
605605 then dJ
606606 else height
607607 let dL = {
608608 let aJ = dH
609609 if ($isInstanceOf(aJ, "Int"))
610610 then {
611611 let dM = aJ
612612 max([(dK - dM), 0])
613613 }
614614 else if ($isInstanceOf(aJ, "Unit"))
615615 then 0
616616 else throw("Match error")
617617 }
618618 let dN = ((dG * (bX - 1)) / bX)
619619 let dO = valueOrElse(dI, 0)
620620 let dP = ((dN * dL) + dO)
621621 $Tuple2([IntegerEntry(am(), dP), IntegerEntry(al(), height)], dP)
622622 }
623623
624624
625625 func dQ (bG,bO,dR) = {
626626 let aY = valueOrErrorMessage(addressFromString(bO), k("invalid user address"))
627627 let br = bZ(aY)
628628 if ((br == br))
629629 then {
630630 let dS = "empty"
631631 let dT = if ((bG != dS))
632632 then {
633633 let dU = valueOrErrorMessage(getString(bP, R(bG)), k(("unsupported lp asset " + bG)))
634634 getIntegerValue(bP, T(dU))
635635 }
636636 else if (dR)
637637 then 0
638638 else m(("not readonly mode: unsupported lp asset " + bG))
639639 let dV = bs(br, bG)
640640 let dW = bq(br)
641641 let dX = valueOrElse(getInteger(this, dV), q(this, dW))
642642 let dP = dF()._2
643643 let dY = (dP - dX)
644644 if ((0 > dY))
645645 then m("wrong calculations")
646646 else {
647647 let dZ = dx(bG, bO)
648648 let ea = dZ._1
649649 let eb = dZ._2
650650 let ec = dZ._3
651651 let ed = fraction(dY, dT, d)
652652 let ee = if ((ec == 0))
653653 then 0
654654 else fraction(ed, eb, ec)
655655 let ef = ([IntegerEntry(dV, dP)] ++ ea)
656656 let eg = makeString([toString(dX), toString(dY), toString(dT), toString(eb), toString(ec)], ":")
657657 $Tuple3(ee, ef, eg)
658658 }
659659 }
660660 else throw("Strict value is not equal to itself.")
661661 }
662662
663663
664664 func eh (aO,ei) = {
665665 let ej = [1, 3, 6, 12, 24, 48]
666666 if (!(containsElement(ej, ei)))
667667 then m("invalid duration")
668668 else {
669669 let bg = (ei * j)
670670 let ek = toBase58String(aA)
671671 if ((size(aO.payments) != 1))
672672 then m("invalid payment - exact one payment must be attached")
673673 else {
674674 let cD = aO.payments[0]
675675 let el = cD.amount
676676 if ((aA != value(cD.assetId)))
677677 then m((("invalid asset is in payment - " + ek) + " is expected"))
678678 else {
679679 let em = bj()
680680 let aY = aO.caller
681681 let bO = toString(aY)
682682 let en = isDefined(getString(bk(bO)))
683683 let eo = if (en)
684684 then value(getString(bk(bO)))
685685 else toString(t(this, em))
686686 let br = parseIntValue(eo)
687687 let ck = height
688688 if (if ((aB > el))
689689 then (aY != bT)
690690 else false)
691691 then m(("amount is less then minLockAmount=" + toString(aB)))
692692 else if ((aC > bg))
693693 then m(("passed duration is less then minLockDuration=" + toString(aC)))
694694 else if ((bg > aD))
695695 then m(("passed duration is greater then maxLockDuration=" + toString(aD)))
696696 else {
697697 let ep = fraction(bg, c, aD)
698698 let eq = fraction(el, ep, c)
699699 let er = ca()
700700 let dW = bq(br)
701701 let dP = dF()._2
702702 let es = cE(aY)
703703 let et = reentrantInvoke(bS, "refreshUserReward", [aY.bytes], nil)
704704 if ((et == et))
705705 then {
706706 let eu = if (en)
707707 then nil
708708 else [IntegerEntry(em, (br + 1)), StringEntry(bk(bO), eo), StringEntry(bl(eo), bO)]
709709 $Tuple2(((((eu ++ cA(aY, aO.transactionId, el, ck, bg, eq, 0)) ++ cn(el, bg, 1, if (en)
710710 then 0
711711 else 1)) :+ ch("lock", bO, el, ck, bg, eq, aO)) ++ [IntegerEntry(dW, dP), IntegerEntry(by(), (er + eq)), IntegerEntry(bc(aY), (es + eq))]), eq)
712712 }
713713 else throw("Strict value is not equal to itself.")
714714 }
715715 }
716716 }
717717 }
718718 }
719719
720720
721721 func ev (aY,ew) = {
722722 let ex = bb(aY, ew)
723723 let ey = parseIntValue(ex[aR])
724724 let ck = parseIntValue(ex[aS])
725725 let ez = parseIntValue(ex[aT])
726726 let eA = (ck + ez)
727727 let bi = parseIntValue(ex[aW])
728728 let bh = parseIntValue(ex[aV])
729729 let eB = ((height - ck) / aF)
730730 let eC = fraction(toBigInt(eB), (toBigInt((8 * aF)) * h), toBigInt(ez))
731731 let eD = if ((height > eA))
732732 then ey
733733 else (toInt(fraction(toBigInt(ey), (h - pow(toBigInt(5), 1, eC, f, f, DOWN)), h)) - bi)
734734 eD
735735 }
736736
737737
738738 @Callable(aO)
739739 func constructor (eE,eF,aB,eG,eH,aE) = {
740740 let eI = aN(aO)
741741 if ((eI == eI))
742742 then ([IntegerEntry(bj(), 0), StringEntry(ax(), aH(eF, aB, eG, eH, aE)), StringEntry(E(), eE)] ++ cn(0, 0, 0, 0))
743743 else throw("Strict value is not equal to itself.")
744744 }
745745
746746
747747
748748 @Callable(aO)
749749 func lockRef (bg,eJ,eK) = {
750750 let eL = eh(aO, bg)
751751 let eM = eL._1
752752 let eq = eL._2
753753 let eN = toString(aO.caller)
754754 let eO = if (if ((eJ == ""))
755755 then true
756756 else (eK == base58''))
757757 then unit
758758 else invoke(A, "createPair", [D, eJ, eN, eK], nil)
759759 if ((eO == eO))
760760 then {
761761 let eP = invoke(aE, "updateReferralActivity", [toString(aO.caller), eq], nil)
762762 if ((eP == eP))
763763 then $Tuple2(eM, unit)
764764 else throw("Strict value is not equal to itself.")
765765 }
766766 else throw("Strict value is not equal to itself.")
767767 }
768768
769769
770770
771771 @Callable(aO)
772772 func lock (bg) = {
773773 let eQ = eh(aO, bg)
774774 let eM = eQ._1
775775 let eq = eQ._2
776776 let eP = invoke(aE, "updateReferralActivity", [toString(aO.caller), eq], nil)
777777 if ((eP == eP))
778778 then $Tuple2(eM, unit)
779779 else throw("Strict value is not equal to itself.")
780780 }
781781
782782
783783
784784 @Callable(aO)
785785 func claimWxBoost (bG,bO) = if ((bR != aO.caller))
786786 then m("permissions denied")
787787 else {
788788 let eR = dQ(bG, bO, false)
789789 let eS = eR._1
790790 let ef = eR._2
791791 let eg = eR._3
792792 $Tuple2(ef, [eS])
793793 }
794794
795795
796796
797797 @Callable(aO)
798798 func claimWxBoostREADONLY (bG,bO) = {
799799 let eT = dQ(bG, bO, true)
800800 let eS = eT._1
801801 let ef = eT._2
802802 let eg = eT._3
803803 $Tuple2(nil, [eS, eg])
804804 }
805805
806806
807807
808808 @Callable(aO)
809809 func unlock (eU,be) = {
810810 let aY = aO.caller
811811 let bO = toString(aY)
812812 let aZ = fromBase58String(eU)
813813 let ex = bb(aY, if ((eU == ""))
814814 then unit
815815 else aZ)
816816 let ey = parseIntValue(ex[aR])
817817 let ck = parseIntValue(ex[aS])
818818 let ez = parseIntValue(ex[aT])
819819 let eA = (ck + ez)
820820 let bi = parseIntValue(ex[aW])
821821 let bh = parseIntValue(ex[aV])
822822 let eB = ((height - ck) / aF)
823823 let eD = ev(aY, if ((eU == ""))
824824 then unit
825825 else aZ)
826826 if ((be > eD))
827827 then m(("maximum amount to unlock: " + toString(eD)))
828828 else {
829829 let ep = fraction(ez, c, aD)
830830 let eq = fraction(ey, ep, c)
831831 let eV = fraction((eB * aF), eq, aD)
832832 let eW = w((bh - eV), "gwxRemaining")
833833 let eX = cb(aY)
834- if ((eX > eW))
835- then m(("locked gwx amount: " + toString(eX)))
836- else if ((0 >= ey))
837- then m("nothing to unlock")
838- else {
839- let er = ca()
840- let es = cE(aY)
841- let et = reentrantInvoke(bS, "refreshUserReward", [aY.bytes], nil)
842- if ((et == et))
843- then ((((cA(aY, aZ, ey, ck, ez, eW, (bi + be)) ++ cn(-(be), 0, 0, 0)) :+ ch("unlock", bO, be, ck, ez, eV, aO)) :+ ScriptTransfer(aY, be, aA)) ++ [IntegerEntry(by(), w((er - eV), "gwxTotal")), IntegerEntry(bc(aY), w((es - eV), "userGwxAmountTotal"))])
844- else throw("Strict value is not equal to itself.")
845- }
834+ if ((0 >= ey))
835+ then m("nothing to unlock")
836+ else {
837+ let er = ca()
838+ let es = cE(aY)
839+ let eY = w((es - eV), "userGwxAmountTotalNew")
840+ if ((eX > eY))
841+ then m(("locked gwx amount: " + toString(eX)))
842+ else {
843+ let et = reentrantInvoke(bS, "refreshUserReward", [aY.bytes], nil)
844+ if ((et == et))
845+ then ((((cA(aY, aZ, ey, ck, ez, eW, (bi + be)) ++ cn(-(be), 0, 0, 0)) :+ ch("unlock", bO, be, ck, ez, eV, aO)) :+ ScriptTransfer(aY, be, aA)) ++ [IntegerEntry(by(), w((er - eV), "gwxTotal")), IntegerEntry(bc(aY), eY)])
846+ else throw("Strict value is not equal to itself.")
847+ }
848+ }
846849 }
847850 }
848851
849852
850853
851854 @Callable(aO)
852855 func gwxUserInfoREADONLY (bO) = {
853856 let aY = valueOrErrorMessage(addressFromString(bO), k("invalid user address"))
854857 let bh = cE(aY)
855858 $Tuple2(nil, [bh])
856859 }
857860
858861
859862
860863 @Callable(aO)
861864 func userMaxDurationREADONLY (bO) = $Tuple2(nil, $Tuple2("increaseLock", aD))
862865
863866
864867
865868 @Callable(aO)
866-func getUserGwxAmountAtHeightREADONLY (bO,eY) = {
869+func getUserGwxAmountAtHeightREADONLY (bO,eZ) = {
867870 let aY = valueOrErrorMessage(addressFromString(bO), k("invalid user address"))
868871 let bh = cE(aY)
869872 $Tuple2(nil, bh)
870873 }
871874
872875
873876
874877 @Callable(aO)
875878 func getUserGwxAmount (bO) = {
876879 let aY = valueOrErrorMessage(addressFromString(bO), k("invalid user address"))
877880 let bh = cE(aY)
878881 $Tuple2(nil, bh)
879882 }
880883
881884
882885
883886 @Callable(aO)
884887 func getGwxTotalREADONLY () = $Tuple2(nil, ca())
885888
886889
887890
888891 @Callable(aO)
889892 func onBoostEmissionUpdate () = {
890893 let eI = if ((aO.caller == bQ))
891894 then true
892895 else aN(aO)
893896 if ((eI == eI))
894897 then dF()
895898 else throw("Strict value is not equal to itself.")
896899 }
897900
898901
899902
900903 @Callable(aO)
901904 func onStakedVoteUpdate (bG,bO,dr) = {
902905 let eI = if ((aO.caller == bR))
903906 then true
904907 else aN(aO)
905908 if ((eI == eI))
906909 then {
907910 let du = dq(bG, bO, dr)
908911 $Tuple2(du, unit)
909912 }
910913 else throw("Strict value is not equal to itself.")
911914 }
912915
913916
914917
915918 @Callable(aO)
916919 func getVotingResultStakedREADONLY (bG) = $Tuple2(nil, cV(bG))
917920
918921
919922
920923 @Callable(aO)
921924 func getVotingResultStakedIntegralREADONLY (bG) = $Tuple2(nil, cZ(bG))
922925
923926
924927
925928 @Callable(aO)
926929 func getUserVoteFinalizedREADONLY (bG,bO) = $Tuple2(nil, cO(bG, bO))
927930
928931
929932
930933 @Callable(aO)
931934 func getUserVoteStakedIntegralREADONLY (bG,bO) = $Tuple2(nil, dj(bG, bO))
932935
933936
934-@Verifier(eZ)
935-func fa () = {
936- let fb = {
937+@Verifier(fa)
938+func fb () = {
939+ let fc = {
937940 let aJ = aL()
938941 if ($isInstanceOf(aJ, "ByteVector"))
939942 then {
940943 let aQ = aJ
941944 aQ
942945 }
943946 else if ($isInstanceOf(aJ, "Unit"))
944- then eZ.senderPublicKey
947+ then fa.senderPublicKey
945948 else throw("Match error")
946949 }
947- sigVerify(eZ.bodyBytes, eZ.proofs[0], fb)
950+ sigVerify(fa.bodyBytes, fa.proofs[0], fc)
948951 }
949952

github/deemru/w8io/026f985 
95.83 ms