tx · BMPLrL7JaYrzdyMqEQaof9Z2476EU7k8anQRKiWia9m7 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.03100000 Waves 2023.01.14 18:30 [2404806] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "BMPLrL7JaYrzdyMqEQaof9Z2476EU7k8anQRKiWia9m7", "fee": 3100000, "feeAssetId": null, "timestamp": 1673710228941, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4EqpJQDTMftV7615w7kKj97qY8GAiaYMNhrkxj4MVUvafTgRUm7AZBDhW9HC8oauioVxzzm6bR2h1cRBAPN1CQzG" ], "script": "base64:BgJTCAISABIDCgEIEgASAwoBCBIECgIBCBIECgICAhIECgIBCBIECgIBARIECgIICBIECgICAhIECgICAhIDCgEIEgMKAQgSAwoBCBIDCgEYEgMKARhWAAVjaGFpbgkAsAkBCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2RuQXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMAEgtiYpwwT1zlORpA5LdSQvZIxRsfrfr1QpvUjSHSqyqtEDCQAAAgIBVAUHJG1hdGNoMAEg93bq9/eDymXbbhPuAjvPWCmVqcHRjfJL2mzYHWKAyN4JAAIBAg1Vbmtub3duIGNoYWluAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAgFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAICAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAICAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAtlY29ub215QWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1Ayc2sxS25jU3hSYVpzOGI0Q1dHUHcyamt2dmF2NzR1NEQDCQAAAgIBVAUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM044eTR3eFgzSkM0VGRyQ0pCWFgxNlNqV2Y2WDI1NmhyZXAJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhIRUFMQ09TVACQTgAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAQUkVTT1VSQ0VQUklDRU1JTgDV1gkAEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwANHCwr5GAwkAAAICAVQFByRtYXRjaDAA0OmcWgkAAgECDVVua25vd24gY2hhaW4AFUluZnJhVXBncmFkZUNvc3RTVXNkbgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMACAnJw5AwkAAAICAVQFByRtYXRjaDAAgJ9JCQACAQINVW5rbm93biBjaGFpbgAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAgFXBQckbWF0Y2gwAMuA1bPLBAMJAAACAgFUBQckbWF0Y2gwAPGa8O8FCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNETgQHJG1hdGNoMAUFY2hhaW4DCQAAAgIBVwUHJG1hdGNoMACAlOvcAwMJAAACAgFUBQckbWF0Y2gwAICt4gQJAAIBAg1Vbmtub3duIGNoYWluAAVNVUxUNgDAhD0ABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAKY29udGluZW50cwkAzAgCAgRBc2lhCQDMCAICBkV1cm9wZQkAzAgCAghBbWVyaWNhcwkAzAgCAgdPY2VhbmlhCQDMCAICBkFmcmljYQUDbmlsAApBUlRQUkVTQUxFAgdQUkVTQUxFARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BCmtleU5mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBH2tleVByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIUcHJlc2FsZUFydEFjdGl2YXRlZF8FB2Fzc2V0SWQBJ2tleVByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICJXByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICDWxhbmRBcnRTdGF0dXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICCmxhbmRPd25lcl8FB2xhbmROdW0BEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFAXIAAAkAkQMCBQFyAAEJAJEDAgUBcgACCQCRAwIFAXIAAwkAkQMCBQFyAAQJAJEDAgUBcgAFAwkAZwIAAAUDc3VtCQACAQIPTm8gbGFuZHMgc3Rha2VkBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFAXIKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgIULCAgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwABkDCQAAAgIBTQUHJG1hdGNoMABkAwkAAAICAUwFByRtYXRjaDAA4QEDCQAAAgICWEwFByRtYXRjaDAAkAMDCQAAAgIDWFhMBQckbWF0Y2gwAPEECQACAQIRVW5rbm93biBsYW5kIHNpemUBDHN1Yk9uZUluTGlzdAMFYUxpc3QDaWR4BmFtb3VudAoBBnN1YmJlcgIDYWNjAWkJAM0IAgUDYWNjAwkAAAIFAWkFA2lkeAkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWFMaXN0BQFpBQZhbW91bnQJAJEDAgUFYUxpc3QFAWkEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZzdWJiZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEDYWJzAQF4AwkAwAICBQF4CQC2AgEAAAUBeAkAvgIBBQF4AARmcmVxCQDMCAIJAMwIAgABCQDMCAIABAkAzAgCAAkJAMwIAgAKCQDMCAIADwUDbmlsCQDMCAIJAMwIAgAFCQDMCAIACAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCQDMCAIJAMwIAgAGCQDMCAIACQkAzAgCAA4JAMwIAgAPCQDMCAIAEAUDbmlsCQDMCAIJAMwIAgAECQDMCAIABwkAzAgCAAgJAMwIAgANCQDMCAIAEgUDbmlsCQDMCAIJAMwIAgABCQDMCAIABgkAzAgCAAcJAMwIAgAPCQDMCAIAEwUDbmlsBQNuaWwBB2dlbkNoYXICAW4FZnJlcXMEA3JlbQkAoAMBCQC7AgIFAW4FB1RXRU5UWVgEBmxldHRlcgMJAGYCCQCRAwIFBWZyZXFzAAAFA3JlbQIBQQMJAGYCCQCRAwIFBWZyZXFzAAEFA3JlbQIBQgMJAGYCCQCRAwIFBWZyZXFzAAIFA3JlbQIBQwMJAGYCCQCRAwIFBWZyZXFzAAMFA3JlbQIBRAMJAGYCCQCRAwIFBWZyZXFzAAQFA3JlbQIBRQIBRgUGbGV0dGVyAQtnZW5UZXJyYWlucwIEc2VlZAxjb250aW5lbnRJZHgEAWYJAJEDAgUEZnJlcQUMY29udGluZW50SWR4CgEQdGVycmFpbkdlbmVyYXRvcgIDYWNjBGVsZW0JAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIIBQNhY2MCXzEJAQdnZW5DaGFyAggFA2FjYwJfMgUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFB1RXRU5UWVgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkyWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTNYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZNFgFAWYJALoCAggFA2FjYwJfMgUIVFdFTlRZNVgEAXQKAAIkbAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAkAugICBQRzZWVkBQVGSVZFWAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQdGVycmFpbkdlbmVyYXRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUIBQF0Al8xAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARBleHBlZGl0aW9uQ29tbW9uBQxzaG91bGRVc2VNYXQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQCaHAJALUJAgkAkQMCCQC1CQIJAJEDAgUFcGFydHMAAAIBfAAAAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQKbG9jQW5kVGltZQkAtQkCCQCRAwIFBXBhcnRzAAECAToEDnRhcmdldExvY2F0aW9uCQC1CQIJAJEDAgUKbG9jQW5kVGltZQAAAgFfAwkBAiE9AgkAkQMCBQ50YXJnZXRMb2NhdGlvbgABAgFFCQACAQIrZXhwZWRpdGlvbiB0YXJnZXQgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRQQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmxvY0FuZFRpbWUAAQMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQISc2lnbmF0dXJlIG91dGRhdGVkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAGcCAAAFBW5ld0hQCQCUCgIJAM0IAgMJAQEhAQUMc2hvdWxkVXNlTWF0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgUHRVhQVVNETgULdXNkbkFzc2V0SWQFA25pbAUDbmlsCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAACAAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAZiaWdOdW0JAQNhYnMBCQCeAwEFBHR4SWQEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAA9QMEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEKa2V5TmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUDbmlsBQJpZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQELdmFsdWVPckVsc2UCCQCgCAEJAR9rZXlQcmVzYWxlQXJ0QWN0aXZhdGVkQnlBc3NldElkAQULbGFuZEFzc2V0SWQHBQZwaWVjZXMAAAkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCmluZnJhTGV2ZWwABAkAawMFD0RBSUxZUkVTQllQSUVDRQkAaAIFCWFydFBpZWNlcwADCQBoAgUGcGllY2VzABQBFGNoZWNrQ2xhaW1Db25kaXRpb25zAQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwEC2xhbmRBc3NldElkCQCRAwIFA2xvYwUIbG9jSWR4SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAIEYWRkcgZhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwEFBGFkZHIECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BApjdXJyZW50UmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAVicFJlcwkBBmFkZFJlcwUFCmN1cnJlbnRSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQkAaQIFBnBpZWNlcwAZBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwBCGNsYWltQWxsAwRhZGRyC2xhbmRBc3NldElkBnBpZWNlcwQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsAgUEYWRkcgUIYXZhaWxSZXMBDXVwSW5mcmFDb21tb24DDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwEFBGFkZHIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkbgkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwAGQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0CQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsABkCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwDBQRhZGRyCAUBYwJfMgUGcGllY2VzCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwBEmFjdGl2YXRlUHJlc2FsZUFydAEEYWRkcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAQUEYWRkcgQLbGFuZEFzc2V0SWQIBQFjAl8yBA1hY3RpdmF0aW9uS2V5CQEfa2V5UHJlc2FsZUFydEFjdGl2YXRlZEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBC3ZhbHVlT3JFbHNlAgkAoAgBBQ1hY3RpdmF0aW9uS2V5BwkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtAPQDCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsAwUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEJvb2xlYW5FbnRyeQIFDWFjdGl2YXRpb25LZXkGCQEMQm9vbGVhbkVudHJ5AgkBJ2tleVByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyBgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQZwaWVjZXMJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyBQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToBDW1lcmdlSW50ZXJuYWwHC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQELdmFsdWVPckVsc2UCCQCgCAEJAR9rZXlQcmVzYWxlQXJ0QWN0aXZhdGVkQnlBc3NldElkAQULbGFuZEFzc2V0SWQHBQZwaWVjZXMAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lCQBpAgUGcGllY2VzABkFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQJALUJAggFA2FjYwJfNgIBXwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwAZAP///////////wEJAJgKBgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFA2FjYwJfNQkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQEKa2V5TmZ0TmFtZQIFB2xhbmROdW0FCGxhbmRTaXplCQELRGVsZXRlRW50cnkBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBH2tleVByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJ2tleVByZXNhbGVBcnRBY3RpdmF0ZWRCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCYCgYFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQdwcm9wU3RyCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA0CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMIBQFyAl8zCQCsAgICE1Vua25vd24gY29udGluZW50OiAIBQFyAl8zBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgkBA2FicwEJAJ4DAQUEdHhJZAUMY29udGluZW50SWR4BAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0AAPUDBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQprZXlOZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIIBQFyAl8zBQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8JAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkbgAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZG4ALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZG4ANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0EAFpAQlzdGFrZUxhbmQABANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQQKbGFuZE51bUludAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQC2CQEFB2xhbmROdW0JAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQAZAAEJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwUDbmlsAWkBC3Vuc3Rha2VMYW5kAQ5sYW5kQXNzZXRJZFN0cgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECJHVuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwEFBGFkZHIEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwAZAP///////////wEEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwDBQRhZGRyCAUBYwJfMgUGcGllY2VzCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEIBQFjAl8yCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6BQNuaWwBaQEJc3Rha2VEdWNrAAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAZoZWFsdGgJAJ8IAQUJa2V5SGVhbHRoBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQUKYXNzZXRJZFN0cgQIYmFja3BhY2sJAKIIAQUFYnBLZXkJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUHdGltZUtleQgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAkA2AQBBQdhc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUKYXNzZXRJZFN0cgUDbmlsAwkBCWlzRGVmaW5lZAEFCGxvY2F0aW9uBQNuaWwJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgUDbmlsAwkBCWlzRGVmaW5lZAEFBmhlYWx0aAUDbmlsCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aABkBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAFpAQt1bnN0YWtlRHVjawEKYXNzZXRJZFN0cgMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECJHVuc3Rha2UgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIXIHRva2VucyBjYW4gYmUgdW5zdGFrZWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQkA2AQBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIlY2xhaW1SZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwCBQRhZGRyBQZhbW91bnQJAJQKAgkAzQgCCAUGcmVzdWx0Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECI2ZsaWdodCBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCATsEAmhwCQC1CQIJAJEDAgkAtQkCCQCRAwIFBXBhcnRzAAACAXwAAAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEDW5ld0xvY0FuZFRpbWUJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQ1uZXdMb2NBbmRUaW1lAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ1uZXdMb2NBbmRUaW1lAAEDAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgECEnNpZ25hdHVyZSBvdXRkYXRlZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoAGQDCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aABkAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQMJAGYCBQVuZXdIUAAABQtuZXdMb2NhdGlvbgULY3VyTG9jYXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUFbmV3SFAFA25pbAUEdW5pdAFpAQlzZXRIZWFsdGgCBmhlYWx0aAtkdWNrQXNzZXRJZAMDCQBmAgAABQZoZWFsdGgGCQBmAgUGaGVhbHRoAGQJAAIBAhpIUCBzaG91bGQgYmUgd2l0aGluIDAuLjEwMAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAUGaGVhbHRoBQNuaWwBaQEEaGVhbAIHbWF0VHlwZQZhbW91bnQDAwkAZgIAAAUHbWF0VHlwZQYJAGcCBQdtYXRUeXBlBQZOVU1SRVMJAAIBCQCsAgICElVua25vd24gbWF0ZXJpYWw6IAkApAMBBQdtYXRUeXBlAwkAZwIAAAUGYW1vdW50CQACAQkArAICAhtBbW91bnQgc2hvdWxkIGJlIHBvc2l0aXZlISAJAKQDAQUGYW1vdW50BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgAZAMJAGcCBQlvbGRIZWFsdGgAZAkAAgECGkhQIHNob3VsZCBiZSA8IDEwMCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDWN1cnJlbnRBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVtTGlzdAUHbWF0VHlwZQQLZGVsdGFIZWFsdGgJAJcDAQkAzAgCCQBpAgUGYW1vdW50BQhIRUFMQ09TVAkAzAgCCQBlAgBkBQlvbGRIZWFsdGgFA25pbAQLc3BlbmRBbW91bnQJAGgCBQtkZWx0YUhlYWx0aAUISEVBTENPU1QDCQBmAgULc3BlbmRBbW91bnQFDWN1cnJlbnRBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IG5lZWQgCQCkAwEFC3NwZW5kQW1vdW50AgQgb2YgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAiQgdG8gaGVhbCwgYnV0IHlvdSBiYWNrcGFjayBjb250YWlucyAJAKQDAQUNY3VycmVudEFtb3VudAQGbmV3TWF0CQEMc3ViT25lSW5MaXN0AwUFbUxpc3QFB21hdFR5cGUFC3NwZW5kQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgJAGQCBQlvbGRIZWFsdGgFC2RlbHRhSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFA25pbAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgULZWNvbm9teUFkZHIJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQENZXhwZWRpdGlvbkJ1eQIHbWVzc2FnZQNzaWcDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkbkFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRE4gcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0ROCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNETgQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgUHCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQFB21lc3NhZ2UFA3NpZwkAlAoCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFC2Vjb25vbXlBZGRyCAUDcG10BmFtb3VudAULdXNkbkFzc2V0SWQIBQZyZXN1bHQCXzIBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAidleHBlZGl0aW9uIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMJARBleHBlZGl0aW9uQ29tbW9uBQYIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnAWkBDHVwZ3JhZGVJbmZyYQESbGFuZEFzc2V0SWRJZ25vcmVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIzSW5mcmFzdHJ1Y3R1cmUgdXBncmFkZSBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzCQENdXBJbmZyYUNvbW1vbgMGCAUBaQZjYWxsZXIAAAFpARB1cGdyYWRlSW5mcmFVc2RuARJsYW5kQXNzZXRJZElnbm9yZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkbkFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRE4gcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgMHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50CQCUCgIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwULZWNvbm9teUFkZHIIBQNwbXQGYW1vdW50BQt1c2RuQXNzZXRJZAgFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AQdhcnROYW1lAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIwQXJ0aWZhY3QgYWN0aXZhdGlvbiBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAEJAKUIAQgFAWkGY2FsbGVyCQACAQIQVW5rbm93biBhcnRpZmFjdAUGcmVzdWx0AWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKkxhbmRzIG1lcmdpbmcgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAFpAQ5tZXJnZUxhbmRzVXNkbgEMbGFuZEFzc2V0SWRzAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZG5Bc3NldElkCQACAQIaQWxsb3dlZCBVU0ROIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwULZWNvbm9teUFkZHIIBQNwbXQGYW1vdW50BQt1c2RuQXNzZXRJZAgFBnJlc3VsdAJfMgDRLwz4", "height": 2404806, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GHnDLx9fbaZCDDUUZzSTzCGjWtWvrC3bi3Dnq8Zj8HgV Next: ESx94b7ZFJufZ3G1VNP6MNoB8gTVpkJoQ42tTVDbWA37 Diff:
Old | New | Differences | |
---|---|---|---|
113 | 113 | ||
114 | 114 | let C = ["Asia", "Europe", "Americas", "Oceania", "Africa"] | |
115 | 115 | ||
116 | - | func D () = "nextLandNum" | |
116 | + | let D = "PRESALE" | |
117 | + | ||
118 | + | func E () = "nextLandNum" | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func F (G) = ("landToAsset_" + G) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
124 | + | func H (G,I) = ((i + G) + I) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func J (K) = ("nftOwner_" + K) | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
130 | + | func L (K) = ("duckOwner_" + K) | |
129 | 131 | ||
130 | 132 | ||
131 | - | func | |
133 | + | func M (K) = ("stakedTime_" + K) | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
136 | + | func N (K) = ("infraLevel_" + K) | |
135 | 137 | ||
136 | 138 | ||
137 | - | func | |
139 | + | func O (K,P) = ((("infraLevelByAssetIdAndOwner_" + K) + "_") + P) | |
138 | 140 | ||
139 | 141 | ||
140 | - | func | |
142 | + | func Q (K) = ("presaleArtActivated_" + K) | |
141 | 143 | ||
142 | 144 | ||
143 | - | func | |
145 | + | func R (K,P) = ((("presaleArtActivatedByAssetIdAndOwner_" + K) + "_") + P) | |
144 | 146 | ||
145 | 147 | ||
146 | - | func | |
148 | + | func S (T,K) = makeString(["landArtStatus", T, K], "_") | |
147 | 149 | ||
148 | 150 | ||
149 | - | func | |
151 | + | func U (T,K,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", T, K, P], "_") | |
150 | 152 | ||
151 | 153 | ||
152 | - | func | |
154 | + | func V (P) = ("stakedDuckByOwner_" + P) | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func W (X,K,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + X) + "_") + K) + "_") + P) | |
156 | 158 | ||
157 | 159 | ||
158 | - | func | |
160 | + | func Y (G) = ("landOwner_" + G) | |
159 | 161 | ||
160 | 162 | ||
161 | - | func | |
163 | + | func Z (aa) = ("backPack_" + aa) | |
162 | 164 | ||
163 | 165 | ||
164 | - | func | |
166 | + | func ab (aa) = ("duckLocation_" + aa) | |
165 | 167 | ||
166 | 168 | ||
167 | - | ||
169 | + | func ac (aa) = ("duckHealth_" + aa) | |
168 | 170 | ||
169 | - | let ab = 1 | |
170 | 171 | ||
171 | - | ||
172 | + | func ad () = "resTypesProportions" | |
172 | 173 | ||
173 | - | let ad = 3 | |
174 | 174 | ||
175 | 175 | let ae = 0 | |
176 | 176 | ||
178 | 178 | ||
179 | 179 | let ag = 2 | |
180 | 180 | ||
181 | - | let ah = | |
181 | + | let ah = 3 | |
182 | 182 | ||
183 | - | let ai = | |
183 | + | let ai = 0 | |
184 | 184 | ||
185 | - | let aj = | |
185 | + | let aj = 1 | |
186 | 186 | ||
187 | - | let ak = | |
187 | + | let ak = 2 | |
188 | 188 | ||
189 | - | func al (am) = { | |
190 | - | let c = am | |
189 | + | let al = 0 | |
190 | + | ||
191 | + | let am = 1 | |
192 | + | ||
193 | + | let an = 2 | |
194 | + | ||
195 | + | let ao = 3 | |
196 | + | ||
197 | + | func ap (aq) = { | |
198 | + | let c = aq | |
191 | 199 | if ($isInstanceOf(c, "String")) | |
192 | 200 | then { | |
193 | - | let | |
194 | - | | |
201 | + | let ar = c | |
202 | + | ar | |
195 | 203 | } | |
196 | 204 | else throw("fail to cast into String") | |
197 | 205 | } | |
198 | 206 | ||
199 | 207 | ||
200 | - | func | |
201 | - | let | |
202 | - | if ((size( | |
208 | + | func as (at) = { | |
209 | + | let au = split(value(getString(ad())), "_") | |
210 | + | if ((size(au) != l)) | |
203 | 211 | then throw("Wrong proportions data") | |
204 | 212 | else { | |
205 | - | let | |
206 | - | let | |
207 | - | if ((0 >= | |
213 | + | let av = [parseIntValue(au[0]), parseIntValue(au[1]), parseIntValue(au[2]), parseIntValue(au[3]), parseIntValue(au[4]), parseIntValue(au[5])] | |
214 | + | let aw = (((((av[0] + av[1]) + av[2]) + av[3]) + av[4]) + av[5]) | |
215 | + | if ((0 >= aw)) | |
208 | 216 | then throw("No lands staked") | |
209 | 217 | else { | |
210 | - | let | |
211 | - | func | |
218 | + | let ax = fraction(at, u, aw) | |
219 | + | func ay (az,aA) = (az :+ fraction(aA, ax, u)) | |
212 | 220 | ||
213 | - | let | |
214 | - | let | |
215 | - | let | |
216 | - | func | |
217 | - | then | |
218 | - | else | |
221 | + | let aB = av | |
222 | + | let aC = size(aB) | |
223 | + | let aD = nil | |
224 | + | func aE (aF,aG) = if ((aG >= aC)) | |
225 | + | then aF | |
226 | + | else ay(aF, aB[aG]) | |
219 | 227 | ||
220 | - | func | |
221 | - | then | |
228 | + | func aH (aF,aG) = if ((aG >= aC)) | |
229 | + | then aF | |
222 | 230 | else throw("List size exceeds 6") | |
223 | 231 | ||
224 | - | aD | |
232 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
225 | 233 | } | |
226 | 234 | } | |
227 | 235 | } | |
228 | 236 | ||
229 | 237 | ||
230 | - | func | |
231 | - | let | |
232 | - | func | |
233 | - | let | |
234 | - | if ((0 > | |
235 | - | then throw(((((("Not enough material idx=" + toString( | |
236 | - | else ( | |
238 | + | func aI (aJ,aK,aL) = { | |
239 | + | let aM = as(aL) | |
240 | + | func aN (az,aO) = { | |
241 | + | let aP = (parseIntValue(aK[aO]) - aM[aO]) | |
242 | + | if ((0 > aP)) | |
243 | + | then throw(((((("Not enough material idx=" + toString(aO)) + ", you have ") + aK[aO]) + ", but need ") + toString(aM[aO]))) | |
244 | + | else (az :+ toString(aP)) | |
237 | 245 | } | |
238 | 246 | ||
239 | - | if ( | |
247 | + | if (aJ) | |
240 | 248 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | func | |
245 | - | then | |
246 | - | else | |
249 | + | let aB = [0, 1, 2, 3, 4, 5] | |
250 | + | let aC = size(aB) | |
251 | + | let aD = nil | |
252 | + | func aE (aF,aG) = if ((aG >= aC)) | |
253 | + | then aF | |
254 | + | else aN(aF, aB[aG]) | |
247 | 255 | ||
248 | - | func | |
249 | - | then | |
256 | + | func aH (aF,aG) = if ((aG >= aC)) | |
257 | + | then aF | |
250 | 258 | else throw("List size exceeds 6") | |
251 | 259 | ||
252 | - | aD | |
260 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
253 | 261 | } | |
254 | - | else | |
262 | + | else aK | |
255 | 263 | } | |
256 | 264 | ||
257 | 265 | ||
258 | - | func aM (aN,aO,aP) = { | |
259 | - | let aq = split(valueOrElse(getString(Z()), "0_0_0_0_0_0"), "_") | |
260 | - | if ((size(aq) != l)) | |
261 | - | then throw("Wrong proportions data") | |
262 | - | else { | |
263 | - | func aQ (av,aR) = { | |
264 | - | let aL = (parseIntValue(aq[aR]) + ((aP * aN[aR]) * aO)) | |
265 | - | if ((0 > aL)) | |
266 | - | then throw(((((((("Panic! Pieces of type=" + toString(aR)) + ", sign=") + toString(aP)) + ", terrainCounts[i]=") + toString(aN[aR])) + ", landSizeIndex=") + toString(aO))) | |
267 | - | else (av :+ toString(aL)) | |
268 | - | } | |
266 | + | func aQ (aR,aS,aT,aU) = if ((size(aR) != l)) | |
267 | + | then throw("Wrong proportions data") | |
268 | + | else { | |
269 | + | func aV (az,aW) = { | |
270 | + | let aP = (parseIntValue(aR[aW]) + ((aU * aS[aW]) * aT)) | |
271 | + | if ((0 > aP)) | |
272 | + | then throw(((((((("Panic! Pieces of type=" + toString(aW)) + ", sign=") + toString(aU)) + ", terrainCounts[i]=") + toString(aS[aW])) + ", landSizeIndex=") + toString(aT))) | |
273 | + | else (az :+ toString(aP)) | |
274 | + | } | |
269 | 275 | ||
270 | - | ||
271 | - | ||
272 | - | ||
273 | - | ||
274 | - | ||
275 | - | ||
276 | - | ||
276 | + | let av = { | |
277 | + | let aB = [0, 1, 2, 3, 4, 5] | |
278 | + | let aC = size(aB) | |
279 | + | let aD = nil | |
280 | + | func aE (aF,aG) = if ((aG >= aC)) | |
281 | + | then aF | |
282 | + | else aV(aF, aB[aG]) | |
277 | 283 | ||
278 | - | ||
279 | - | ||
280 | - | ||
284 | + | func aH (aF,aG) = if ((aG >= aC)) | |
285 | + | then aF | |
286 | + | else throw("List size exceeds 6") | |
281 | 287 | ||
282 | - | aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6) | |
283 | - | } | |
284 | - | makeString(ar, "_") | |
288 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
285 | 289 | } | |
290 | + | makeString(av, "_") | |
291 | + | } | |
292 | + | ||
293 | + | ||
294 | + | func aX (aS,aT,aU) = { | |
295 | + | let aR = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
296 | + | aQ(aR, aS, aT, aU) | |
286 | 297 | } | |
287 | 298 | ||
288 | 299 | ||
289 | - | func | |
300 | + | func aY (aZ) = [(size(split(aZ, "A")) - 1), (size(split(aZ, "B")) - 1), (size(split(aZ, "C")) - 1), (size(split(aZ, "D")) - 1), (size(split(aZ, "E")) - 1), (size(split(aZ, "F")) - 1)] | |
290 | 301 | ||
291 | 302 | ||
292 | - | func | |
293 | - | let c = | |
303 | + | func ba (I) = { | |
304 | + | let c = I | |
294 | 305 | if (("S" == c)) | |
295 | 306 | then 25 | |
296 | 307 | else if (("M" == c)) | |
305 | 316 | } | |
306 | 317 | ||
307 | 318 | ||
308 | - | func | |
309 | - | func | |
310 | - | then toString((parseIntValue(aW | |
311 | - | else aW | |
319 | + | func bb (bc,aO,bd) = { | |
320 | + | func be (az,aW) = (az :+ (if ((aW == aO)) | |
321 | + | then toString((parseIntValue(bc[aW]) - bd)) | |
322 | + | else bc[aW])) | |
312 | 323 | ||
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | func | |
318 | - | then | |
319 | - | else | |
324 | + | let av = { | |
325 | + | let aB = [0, 1, 2, 3, 4, 5] | |
326 | + | let aC = size(aB) | |
327 | + | let aD = nil | |
328 | + | func aE (aF,aG) = if ((aG >= aC)) | |
329 | + | then aF | |
330 | + | else be(aF, aB[aG]) | |
320 | 331 | ||
321 | - | func | |
322 | - | then | |
332 | + | func aH (aF,aG) = if ((aG >= aC)) | |
333 | + | then aF | |
323 | 334 | else throw("List size exceeds 6") | |
324 | 335 | ||
325 | - | aD | |
336 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
326 | 337 | } | |
327 | - | makeString( | |
338 | + | makeString(av, "_") | |
328 | 339 | } | |
329 | 340 | ||
330 | 341 | ||
331 | - | func | |
332 | - | func | |
333 | - | let | |
334 | - | ( | |
342 | + | func bf (bg,aS,bh,aT,bi) = { | |
343 | + | func bj (az,aW) = { | |
344 | + | let bk = ((fraction(bh, bi, n) * aS[aW]) * aT) | |
345 | + | (az :+ toString((parseIntValue(bg[aW]) + bk))) | |
335 | 346 | } | |
336 | 347 | ||
337 | - | let | |
338 | - | let | |
339 | - | let | |
340 | - | let | |
341 | - | func | |
342 | - | then | |
343 | - | else | |
348 | + | let av = { | |
349 | + | let aB = [0, 1, 2, 3, 4, 5] | |
350 | + | let aC = size(aB) | |
351 | + | let aD = nil | |
352 | + | func aE (aF,aG) = if ((aG >= aC)) | |
353 | + | then aF | |
354 | + | else bj(aF, aB[aG]) | |
344 | 355 | ||
345 | - | func | |
346 | - | then | |
356 | + | func aH (aF,aG) = if ((aG >= aC)) | |
357 | + | then aF | |
347 | 358 | else throw("List size exceeds 6") | |
348 | 359 | ||
349 | - | aD | |
360 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
350 | 361 | } | |
351 | - | makeString( | |
362 | + | makeString(av, "_") | |
352 | 363 | } | |
353 | 364 | ||
354 | 365 | ||
355 | - | func | |
356 | - | then | |
357 | - | else -( | |
366 | + | func bl (bm) = if ((bm >= toBigInt(0))) | |
367 | + | then bm | |
368 | + | else -(bm) | |
358 | 369 | ||
359 | 370 | ||
360 | - | let | |
371 | + | let bn = [[1, 4, 9, 10, 15], [5, 8, 13, 14, 15], [6, 9, 14, 15, 16], [4, 7, 8, 13, 18], [1, 6, 7, 15, 19]] | |
361 | 372 | ||
362 | - | func | |
363 | - | let | |
364 | - | let | |
373 | + | func bo (bp,bq) = { | |
374 | + | let br = toInt((bp % w)) | |
375 | + | let bs = if ((bq[0] > br)) | |
365 | 376 | then "A" | |
366 | - | else if (( | |
377 | + | else if ((bq[1] > br)) | |
367 | 378 | then "B" | |
368 | - | else if (( | |
379 | + | else if ((bq[2] > br)) | |
369 | 380 | then "C" | |
370 | - | else if (( | |
381 | + | else if ((bq[3] > br)) | |
371 | 382 | then "D" | |
372 | - | else if (( | |
383 | + | else if ((bq[4] > br)) | |
373 | 384 | then "E" | |
374 | 385 | else "F" | |
375 | - | | |
386 | + | bs | |
376 | 387 | } | |
377 | 388 | ||
378 | 389 | ||
379 | - | func bn (bo) = { | |
380 | - | let bp = split(valueOrElse(getString(bo), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
381 | - | [toString(valueOrElse(parseInt(bp[ah]), 0)), if ((size(split(bp[ai], "_")) == l)) | |
382 | - | then bp[ai] | |
383 | - | else "0_0_0_0_0_0", if ((size(split(bp[aj], "_")) == l)) | |
384 | - | then bp[aj] | |
385 | - | else "0_0_0_0_0_0", bp[ak]] | |
390 | + | func bt (bu,bv) = { | |
391 | + | let bw = bn[bv] | |
392 | + | func bx (az,aA) = $Tuple2((((((az._1 + bo(az._2, bw)) + bo((az._2 / w), bw)) + bo((az._2 / x), bw)) + bo((az._2 / y), bw)) + bo((az._2 / z), bw)), (az._2 / A)) | |
393 | + | ||
394 | + | let by = { | |
395 | + | let aB = [1, 2, 3, 4, 5] | |
396 | + | let aC = size(aB) | |
397 | + | let aD = $Tuple2("", (bu / v)) | |
398 | + | func aE (aF,aG) = if ((aG >= aC)) | |
399 | + | then aF | |
400 | + | else bx(aF, aB[aG]) | |
401 | + | ||
402 | + | func aH (aF,aG) = if ((aG >= aC)) | |
403 | + | then aF | |
404 | + | else throw("List size exceeds 5") | |
405 | + | ||
406 | + | aH(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5) | |
407 | + | } | |
408 | + | by._1 | |
386 | 409 | } | |
387 | 410 | ||
388 | 411 | ||
389 | - | func bq (aF,br,bs,bt,bu) = if (!(sigVerify_8Kb(bt, bu, g))) | |
412 | + | func bz (bA) = { | |
413 | + | let bB = split(valueOrElse(getString(bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
414 | + | [toString(valueOrElse(parseInt(bB[al]), 0)), if ((size(split(bB[am], "_")) == l)) | |
415 | + | then bB[am] | |
416 | + | else "0_0_0_0_0_0", if ((size(split(bB[an], "_")) == l)) | |
417 | + | then bB[an] | |
418 | + | else "0_0_0_0_0_0", bB[ao]] | |
419 | + | } | |
420 | + | ||
421 | + | ||
422 | + | func bC (aJ,bD,bE,bF,bG) = if (!(sigVerify_8Kb(bF, bG, g))) | |
390 | 423 | then throw("signature does not match") | |
391 | 424 | else { | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | if (( | |
425 | + | let bH = split(toUtf8String(bF), ";") | |
426 | + | let bI = split(split(bH[0], "|")[0], "_") | |
427 | + | let bJ = parseIntValue(bI[0]) | |
428 | + | let bK = parseIntValue(bI[1]) | |
429 | + | let bL = split(bH[1], ":") | |
430 | + | let bM = split(bL[0], "_") | |
431 | + | if ((bM[1] != "E")) | |
399 | 432 | then throw("expedition target location type should be E") | |
400 | 433 | else { | |
401 | - | let | |
402 | - | if (if (( | |
434 | + | let bN = parseIntValue(bL[1]) | |
435 | + | if (if ((bN > (lastBlock.timestamp + o))) | |
403 | 436 | then true | |
404 | - | else ((lastBlock.timestamp - o) > | |
437 | + | else ((lastBlock.timestamp - o) > bN)) | |
405 | 438 | then throw("signature outdated") | |
406 | 439 | else { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | if (( | |
412 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
413 | - | else if ((0 >= | |
440 | + | let bO = toString(bD) | |
441 | + | let aa = valueOrErrorMessage(getString(V(bO)), "You don't have a duck staked") | |
442 | + | let bP = ac(aa) | |
443 | + | let bQ = valueOrElse(getInteger(bP), 100) | |
444 | + | if ((bQ != bJ)) | |
445 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bP), 100))) + " from state does not match one from flight log=") + toString(bJ))) | |
446 | + | else if ((0 >= bJ)) | |
414 | 447 | then throw("You can't fly with zero health") | |
415 | - | else if ((0 >= | |
416 | - | then $Tuple2(((if (!( | |
417 | - | then [ScriptTransfer( | |
418 | - | else nil) :+ IntegerEntry( | |
448 | + | else if ((0 >= bK)) | |
449 | + | then $Tuple2(((if (!(aJ)) | |
450 | + | then [ScriptTransfer(bD, t, b)] | |
451 | + | else nil) :+ IntegerEntry(bP, 0)), "") | |
419 | 452 | else { | |
420 | - | let bo = V(W) | |
421 | - | let bF = bn(bo) | |
422 | - | let bG = split(bF[aj], "_") | |
423 | - | let bH = makeString(aE(aF, bG, s), "_") | |
424 | - | let bI = bf(toBigInt(bs)) | |
425 | - | let bJ = valueOrElse(getInteger(D()), 501) | |
426 | - | let F = toString(bJ) | |
427 | - | let bK = toInt((bI % v)) | |
428 | - | let bL = bh[bK] | |
429 | - | func bM (av,aw) = $Tuple2((((((av._1 + bi(av._2, bL)) + bi((av._2 / w), bL)) + bi((av._2 / x), bL)) + bi((av._2 / y), bL)) + bi((av._2 / z), bL)), (av._2 / A)) | |
430 | - | ||
431 | - | let bN = { | |
432 | - | let ax = [1, 2, 3, 4, 5] | |
433 | - | let ay = size(ax) | |
434 | - | let az = $Tuple2("", (bI / v)) | |
435 | - | func aA (aB,aC) = if ((aC >= ay)) | |
436 | - | then aB | |
437 | - | else bM(aB, ax[aC]) | |
438 | - | ||
439 | - | func aD (aB,aC) = if ((aC >= ay)) | |
440 | - | then aB | |
441 | - | else throw("List size exceeds 5") | |
442 | - | ||
443 | - | aD(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5) | |
444 | - | } | |
445 | - | let bO = C[bK] | |
446 | - | let bP = Issue(G(F, "S"), makeString([F, "S", bN._1, bO], "_"), 1, 0, false) | |
447 | - | let J = calculateAssetId(bP) | |
448 | - | let bQ = toBase58String(J) | |
449 | - | $Tuple2([IntegerEntry(D(), (bJ + 1)), bP, StringEntry(E(F), bQ), StringEntry(I(bQ), bC), StringEntry(U(F), bC), IntegerEntry(M(bQ), 0), IntegerEntry(N(bQ, bC), 0), ScriptTransfer(br, 1, J), StringEntry(X(W), makeString([bO, "L", bQ], "_")), IntegerEntry(bD, by), StringEntry(bo, makeString([bF[ah], bF[ai], bH, bF[ak]], ":"))], bQ) | |
453 | + | let bA = Z(aa) | |
454 | + | let bR = bz(bA) | |
455 | + | let bS = split(bR[an], "_") | |
456 | + | let bT = makeString(aI(aJ, bS, s), "_") | |
457 | + | let bU = bl(toBigInt(bE)) | |
458 | + | let bV = valueOrElse(getInteger(E()), 501) | |
459 | + | let G = toString(bV) | |
460 | + | let bv = toInt((bU % v)) | |
461 | + | let aZ = bt(bU, bv) | |
462 | + | let bW = C[bv] | |
463 | + | let bX = Issue(H(G, "S"), makeString([G, "S", aZ, bW], "_"), 1, 0, false) | |
464 | + | let K = calculateAssetId(bX) | |
465 | + | let bY = toBase58String(K) | |
466 | + | $Tuple2([IntegerEntry(E(), (bV + 1)), bX, StringEntry(F(G), bY), StringEntry(J(bY), bO), StringEntry(Y(G), bO), IntegerEntry(N(bY), 0), IntegerEntry(O(bY, bO), 0), ScriptTransfer(bD, 1, K), StringEntry(ab(aa), makeString([bW, "L", bY], "_")), IntegerEntry(bP, bK), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))], bY) | |
450 | 467 | } | |
451 | 468 | } | |
452 | 469 | } | |
453 | 470 | } | |
454 | 471 | ||
455 | 472 | ||
456 | - | func | |
457 | - | let | |
458 | - | let | |
459 | - | then | |
460 | - | else 0 | |
461 | - | ((m + fraction(m, | |
473 | + | func bZ (ca,cb) = { | |
474 | + | let cc = valueOrElse(getInteger(N(ca)), 0) | |
475 | + | let cd = valueOrElse(getInteger(S(D, ca)), if (valueOrElse(getBoolean(Q(ca)), false)) | |
476 | + | then cb | |
477 | + | else 0) | |
478 | + | ((m + fraction(m, cc, 4)) + fraction(m, (cd * 3), (cb * 20))) | |
462 | 479 | } | |
463 | 480 | ||
464 | 481 | ||
465 | - | func | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | if (( | |
470 | - | then throw((("Duck location type is " + | |
482 | + | func ce (cf) = { | |
483 | + | let aa = valueOrErrorMessage(getString(V(cf)), "You don't have a duck staked") | |
484 | + | let cg = valueOrElse(getString(ab(aa)), k) | |
485 | + | let ch = split(value(cg), "_") | |
486 | + | if ((ch[aj] != "L")) | |
487 | + | then throw((("Duck location type is " + ch[aj]) + ", but should be L")) | |
471 | 488 | else { | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | if (( | |
489 | + | let ca = ch[ak] | |
490 | + | let ci = value(assetInfo(fromBase58String(ca))) | |
491 | + | let cj = M(ca) | |
492 | + | let ck = valueOrErrorMessage(getInteger(cj), (("NFT " + ci.name) + " is not staked")) | |
493 | + | let cl = valueOrErrorMessage(getString(J(ca)), (("NFT " + ci.name) + " is orphaned")) | |
494 | + | if ((cl != cf)) | |
478 | 495 | then throw((i + " is not yours")) | |
479 | 496 | else { | |
480 | - | let | |
481 | - | $Tuple4( | |
497 | + | let cm = split(ci.description, "_") | |
498 | + | $Tuple4(aa, ca, cm, ck) | |
482 | 499 | } | |
483 | 500 | } | |
484 | 501 | } | |
485 | 502 | ||
486 | 503 | ||
487 | - | func | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | if ((0 > | |
493 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
504 | + | func cn (cf,bd) = { | |
505 | + | let co = ce(cf) | |
506 | + | let I = co._3[af] | |
507 | + | let aS = aY(co._3[ag]) | |
508 | + | let bh = (lastBlock.timestamp - co._4) | |
509 | + | if ((0 > bh)) | |
510 | + | then throw(((("Saved timestamp is in future, saved = " + toString(co._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
494 | 511 | else { | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | if (( | |
499 | - | then throw(((("Not enough resources, available = " + toString( | |
512 | + | let cb = ba(I) | |
513 | + | let cp = bZ(co._2, cb) | |
514 | + | let cq = fraction(bh, (cp * cb), n) | |
515 | + | if ((bd > cq)) | |
516 | + | then throw(((("Not enough resources, available = " + toString(cq)) + ", requested = ") + toString(bd))) | |
500 | 517 | else { | |
501 | - | let | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | let | |
506 | - | let | |
507 | - | $Tuple3([IntegerEntry( | |
518 | + | let cr = fraction((cq - bd), n, (cp * cb)) | |
519 | + | let cs = (lastBlock.timestamp - cr) | |
520 | + | let bA = Z(co._1) | |
521 | + | let bR = bz(bA) | |
522 | + | let bg = split(bR[am], "_") | |
523 | + | let ct = bf(bg, aS, (bh - cr), (cb / 25), cp) | |
524 | + | $Tuple3([IntegerEntry(M(co._2), cs), IntegerEntry(W(i, co._2, cf), cs)], bA, [bR[al], ct, bR[an], bR[ao]]) | |
508 | 525 | } | |
509 | 526 | } | |
510 | 527 | } | |
511 | 528 | ||
512 | 529 | ||
513 | - | func | |
514 | - | let | |
515 | - | let | |
516 | - | let | |
517 | - | | |
530 | + | func cu (cf,ca,cb) = { | |
531 | + | let cj = M(ca) | |
532 | + | let ck = value(getInteger(cj)) | |
533 | + | let cq = (fraction((lastBlock.timestamp - ck), bZ(ca, cb), n) * cb) | |
534 | + | cn(cf, cq) | |
518 | 535 | } | |
519 | 536 | ||
520 | 537 | ||
521 | - | func | |
522 | - | let | |
523 | - | let | |
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | if (( | |
538 | + | func cv (aJ,bD,cw) = { | |
539 | + | let cf = toString(bD) | |
540 | + | let co = ce(cf) | |
541 | + | let cb = ba(co._3[af]) | |
542 | + | let cx = N(co._2) | |
543 | + | let cy = valueOrElse(getInteger(cx), 0) | |
544 | + | if ((cy >= 3)) | |
528 | 545 | then throw("Currently max infrastructure level = 3") | |
529 | 546 | else { | |
530 | - | let | |
531 | - | let | |
532 | - | if (if (!( | |
533 | - | then ( | |
547 | + | let cz = (cy + 1) | |
548 | + | let cA = fraction(r, (cb * cz), 25) | |
549 | + | if (if (!(aJ)) | |
550 | + | then (cw != cA) | |
534 | 551 | else false) | |
535 | - | then throw(("Payment attached should be " + toString( | |
552 | + | then throw(("Payment attached should be " + toString(cA))) | |
536 | 553 | else { | |
537 | - | let | |
538 | - | let | |
539 | - | let | |
540 | - | let | |
541 | - | let | |
542 | - | $Tuple2(([IntegerEntry( | |
554 | + | let bA = Z(co._1) | |
555 | + | let bR = bz(bA) | |
556 | + | let bS = split(bR[an], "_") | |
557 | + | let bT = makeString(aI(aJ, bS, fraction(q, (cb * cz), 25)), "_") | |
558 | + | let cB = cu(cf, co._2, cb) | |
559 | + | $Tuple2(([IntegerEntry(cx, cz), IntegerEntry(O(co._2, cf), cz), StringEntry(bA, makeString([bR[al], cB._3[am], bT, bR[ao]], ":"))] ++ cB._1), cz) | |
543 | 560 | } | |
544 | 561 | } | |
545 | 562 | } | |
546 | 563 | ||
547 | 564 | ||
548 | - | func cu (bW) = { | |
549 | - | let cf = bV(bW) | |
550 | - | let cv = P(cf._2) | |
551 | - | if (valueOrElse(getBoolean(cv), false)) | |
565 | + | func cC (cf) = { | |
566 | + | let co = ce(cf) | |
567 | + | let ca = co._2 | |
568 | + | let cD = Q(ca) | |
569 | + | if (valueOrElse(getBoolean(cD), false)) | |
552 | 570 | then throw("Presale artifact is already activated") | |
553 | - | else if ((parseIntValue( | |
554 | - | then throw((((i + " ") + | |
571 | + | else if ((parseIntValue(co._3[ae]) > 500)) | |
572 | + | then throw((((i + " ") + ca) + " is not eligible for presale artifact")) | |
555 | 573 | else { | |
556 | - | let | |
557 | - | let | |
558 | - | ((( | |
574 | + | let cb = ba(co._3[af]) | |
575 | + | let cB = cu(cf, ca, cb) | |
576 | + | (((((cB._1 :+ BooleanEntry(cD, true)) :+ BooleanEntry(R(ca, cf), true)) :+ IntegerEntry(S(D, ca), cb)) :+ IntegerEntry(U(D, ca, cf), cb)) :+ StringEntry(cB._2, makeString(cB._3, ":"))) | |
559 | 577 | } | |
560 | 578 | } | |
561 | 579 | ||
562 | 580 | ||
563 | - | @Callable(aR) | |
581 | + | func cE (cF,cz,cG,cf,cH,bE,cI) = { | |
582 | + | let aa = valueOrErrorMessage(getString(V(cf)), "You don't have a duck staked") | |
583 | + | func cJ (az,ca) = { | |
584 | + | let ci = value(assetInfo(fromBase58String(ca))) | |
585 | + | let cj = M(ca) | |
586 | + | let ck = valueOrErrorMessage(getInteger(cj), (("NFT " + ci.name) + " is not staked")) | |
587 | + | let cl = valueOrErrorMessage(getString(J(ca)), (("NFT " + ci.name) + " is orphaned")) | |
588 | + | if ((cl != cf)) | |
589 | + | then throw((i + " is not yours")) | |
590 | + | else { | |
591 | + | let cm = split(ci.description, "_") | |
592 | + | let bW = cm[ah] | |
593 | + | if (if ((az._3 != "")) | |
594 | + | then (az._3 != bW) | |
595 | + | else false) | |
596 | + | then throw("Lands should be on the same continent to merge") | |
597 | + | else { | |
598 | + | let I = cm[af] | |
599 | + | let cK = az._1 | |
600 | + | let aW = valueOrErrorMessage(indexOf(cK, I), "You haven't passed all the lands needed") | |
601 | + | let cL = (take(cK, aW) + drop(cK, (aW + 1))) | |
602 | + | let cb = ba(I) | |
603 | + | let cM = (az._2 + valueOrElse(getInteger(S(D, ca)), if (valueOrElse(getBoolean(Q(ca)), false)) | |
604 | + | then cb | |
605 | + | else 0)) | |
606 | + | let cc = valueOrElse(getInteger(N(ca)), 0) | |
607 | + | let cN = { | |
608 | + | let c = I | |
609 | + | if (("S" == c)) | |
610 | + | then 3 | |
611 | + | else if (("M" == c)) | |
612 | + | then 4 | |
613 | + | else if (("L" == c)) | |
614 | + | then 5 | |
615 | + | else if (("XL" == c)) | |
616 | + | then 6 | |
617 | + | else throw("Only S, M, L, XL can merge") | |
618 | + | } | |
619 | + | if ((cc != cN)) | |
620 | + | then throw("All lands should be maxed to merge") | |
621 | + | else { | |
622 | + | let G = cm[ae] | |
623 | + | let aS = aY(cm[ag]) | |
624 | + | let bh = (lastBlock.timestamp - ck) | |
625 | + | if ((0 > bh)) | |
626 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ck)) + ", current = ") + toString(lastBlock.timestamp))) | |
627 | + | else { | |
628 | + | let cp = bZ(ca, cb) | |
629 | + | let ct = bf(split(az._4, "_"), aS, bh, (cb / 25), cp) | |
630 | + | let au = aQ(split(az._6, "_"), aS, (cb / 25), -1) | |
631 | + | $Tuple6(cL, cM, bW, ct, (((((((((((((az._5 :+ DeleteEntry(M(ca))) :+ DeleteEntry(W(i, ca, cf))) :+ DeleteEntry(F(G))) :+ DeleteEntry(H(G, I))) :+ DeleteEntry(J(ca))) :+ DeleteEntry(N(ca))) :+ DeleteEntry(O(ca, cf))) :+ DeleteEntry(Q(ca))) :+ DeleteEntry(R(ca, cf))) :+ DeleteEntry(S(D, ca))) :+ DeleteEntry(U(D, ca, cf))) :+ DeleteEntry(Y(G))) :+ Burn(fromBase58String(ca), 1)), au) | |
632 | + | } | |
633 | + | } | |
634 | + | } | |
635 | + | } | |
636 | + | } | |
637 | + | ||
638 | + | let bA = Z(aa) | |
639 | + | let bR = bz(bA) | |
640 | + | let cO = valueOrElse(getString(ad()), "0_0_0_0_0_0") | |
641 | + | let av = { | |
642 | + | let aB = cH | |
643 | + | let aC = size(aB) | |
644 | + | let aD = $Tuple6(cG, 0, "", bR[am], nil, cO) | |
645 | + | func aE (aF,aG) = if ((aG >= aC)) | |
646 | + | then aF | |
647 | + | else cJ(aF, aB[aG]) | |
648 | + | ||
649 | + | func aH (aF,aG) = if ((aG >= aC)) | |
650 | + | then aF | |
651 | + | else throw("List size exceeds 4") | |
652 | + | ||
653 | + | aH(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4) | |
654 | + | } | |
655 | + | let bv = valueOrErrorMessage(indexOf(C, av._3), ("Unknown continent: " + av._3)) | |
656 | + | let aZ = bt(bl(toBigInt(bE)), bv) | |
657 | + | let bV = valueOrElse(getInteger(E()), 501) | |
658 | + | let cP = toString(bV) | |
659 | + | let bX = Issue(H(cP, cF), makeString([cP, cF, aZ, av._3], "_"), 1, 0, false) | |
660 | + | let K = calculateAssetId(bX) | |
661 | + | let cQ = toBase58String(K) | |
662 | + | let bT = makeString(aI((cI > 0), split(bR[an], "_"), cI), "_") | |
663 | + | $Tuple2(((((((((((((av._5 :+ IntegerEntry(E(), (bV + 1))) :+ bX) :+ StringEntry(F(cP), cQ)) :+ StringEntry(J(cQ), cf)) :+ StringEntry(Y(cP), cf)) :+ IntegerEntry(S(D, cQ), av._2)) :+ IntegerEntry(U(D, cQ, cf), av._2)) :+ IntegerEntry(N(cQ), cz)) :+ IntegerEntry(O(cQ, cf), cz)) :+ StringEntry(bA, makeString([bR[al], av._4, bT, bR[ao]], ":"))) :+ StringEntry(ad(), av._6)) :+ ScriptTransfer(addressFromStringValue(cf), 1, K)), cQ) | |
664 | + | } | |
665 | + | ||
666 | + | ||
667 | + | func cR (cf,cH,bE) = cE("M", 3, "SSSS", cf, cH, bE, 0) | |
668 | + | ||
669 | + | ||
670 | + | func cS (cf,cH,bE,aJ,cw) = { | |
671 | + | let cA = (r * 4) | |
672 | + | if (if (!(aJ)) | |
673 | + | then (cw != cA) | |
674 | + | else false) | |
675 | + | then throw(("Payment attached should be " + toString(cA))) | |
676 | + | else cE("L", 4, "SMM", cf, cH, bE, (q * 4)) | |
677 | + | } | |
678 | + | ||
679 | + | ||
680 | + | func cT (cf,cH,bE,aJ,cw) = { | |
681 | + | let cA = (r * 47) | |
682 | + | if (if (!(aJ)) | |
683 | + | then (cw != cA) | |
684 | + | else false) | |
685 | + | then throw(("Payment attached should be " + toString(cA))) | |
686 | + | else cE("XL", 5, "SSSML", cf, cH, bE, (q * 47)) | |
687 | + | } | |
688 | + | ||
689 | + | ||
690 | + | func cU (cf,cH,bE,aJ,cw) = { | |
691 | + | let cA = (r * 54) | |
692 | + | if (if (!(aJ)) | |
693 | + | then (cw != cA) | |
694 | + | else false) | |
695 | + | then throw(("Payment attached should be " + toString(cA))) | |
696 | + | else cE("XXL", 6, "LXL", cf, cH, bE, (q * 54)) | |
697 | + | } | |
698 | + | ||
699 | + | ||
700 | + | func cV (aJ,cf,cw,cH,bE) = { | |
701 | + | let cW = { | |
702 | + | let c = size(cH) | |
703 | + | if ((4 == c)) | |
704 | + | then cR(cf, cH, bE) | |
705 | + | else if ((3 == c)) | |
706 | + | then cS(cf, cH, bE, aJ, cw) | |
707 | + | else if ((5 == c)) | |
708 | + | then cT(cf, cH, bE, aJ, cw) | |
709 | + | else if ((2 == c)) | |
710 | + | then cU(cf, cH, bE, aJ, cw) | |
711 | + | else throw("Unknown merge") | |
712 | + | } | |
713 | + | cW | |
714 | + | } | |
715 | + | ||
716 | + | ||
717 | + | @Callable(aW) | |
564 | 718 | func stakeLand () = { | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | if (( | |
719 | + | let cX = value(aW.payments[0]) | |
720 | + | let K = value(cX.assetId) | |
721 | + | let cY = toString(aW.caller) | |
722 | + | if ((cX.amount != 1)) | |
569 | 723 | then throw((("NFT " + i) + " token should be attached as payment")) | |
570 | 724 | else { | |
571 | - | let | |
572 | - | if (( | |
725 | + | let ci = value(assetInfo(K)) | |
726 | + | if ((ci.issuer != this)) | |
573 | 727 | then throw("Unknown issuer of token") | |
574 | - | else if (!(contains( | |
728 | + | else if (!(contains(ci.name, i))) | |
575 | 729 | then throw((("Only NFT " + i) + " tokens are accepted")) | |
576 | 730 | else { | |
577 | - | let | |
578 | - | let | |
579 | - | then dropRight( | |
580 | - | else if (contains( | |
581 | - | then dropRight( | |
582 | - | else dropRight( | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | if (isDefined(getInteger( | |
587 | - | then throw((("NFT " + | |
731 | + | let cZ = drop(ci.name, 4) | |
732 | + | let G = if (contains(cZ, "XXL")) | |
733 | + | then dropRight(cZ, 3) | |
734 | + | else if (contains(cZ, "XL")) | |
735 | + | then dropRight(cZ, 2) | |
736 | + | else dropRight(cZ, 1) | |
737 | + | let da = valueOrErrorMessage(parseInt(G), ("Cannot parse land number from " + ci.name)) | |
738 | + | let ca = toBase58String(K) | |
739 | + | let cj = M(ca) | |
740 | + | if (isDefined(getInteger(cj))) | |
741 | + | then throw((("NFT " + ci.name) + " is already staked")) | |
588 | 742 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | [IntegerEntry( | |
743 | + | let cm = split(ci.description, "_") | |
744 | + | let aS = aY(cm[ag]) | |
745 | + | let au = aX(aS, (ba(cm[af]) / 25), 1) | |
746 | + | [IntegerEntry(cj, lastBlock.timestamp), IntegerEntry(W(i, ca, cY), lastBlock.timestamp), StringEntry(J(ca), cY), StringEntry(Y(G), cY), StringEntry(ad(), au)] | |
593 | 747 | } | |
594 | 748 | } | |
595 | 749 | } | |
597 | 751 | ||
598 | 752 | ||
599 | 753 | ||
600 | - | @Callable( | |
601 | - | func unstakeLand ( | |
754 | + | @Callable(aW) | |
755 | + | func unstakeLand (db) = if ((size(aW.payments) != 0)) | |
602 | 756 | then throw("unstake doesn't require any payments") | |
603 | 757 | else { | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | [ScriptTransfer( | |
758 | + | let cf = toString(aW.caller) | |
759 | + | let co = ce(cf) | |
760 | + | let aS = aY(co._3[ag]) | |
761 | + | let cb = ba(co._3[af]) | |
762 | + | let au = aX(aS, (cb / 25), -1) | |
763 | + | let cB = cu(cf, co._2, cb) | |
764 | + | [ScriptTransfer(aW.caller, 1, fromBase58String(co._2)), DeleteEntry(M(co._2)), DeleteEntry(W(i, co._2, cf)), StringEntry(ad(), au), StringEntry(cB._2, makeString(cB._3, ":"))] | |
611 | 765 | } | |
612 | 766 | ||
613 | 767 | ||
614 | 768 | ||
615 | - | @Callable( | |
769 | + | @Callable(aW) | |
616 | 770 | func stakeDuck () = { | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | if (( | |
771 | + | let cX = value(aW.payments[0]) | |
772 | + | let K = value(cX.assetId) | |
773 | + | let cY = toString(aW.caller) | |
774 | + | if ((cX.amount != 1)) | |
621 | 775 | then throw((("NFT " + j) + " token should be attached as payment")) | |
622 | 776 | else { | |
623 | - | let | |
624 | - | if (if (( | |
625 | - | then ( | |
777 | + | let ci = value(assetInfo(K)) | |
778 | + | if (if ((ci.issuer != d)) | |
779 | + | then (ci.issuer != e) | |
626 | 780 | else false) | |
627 | 781 | then throw((("Unknown issuer of " + j) + " token")) | |
628 | - | else if (!(contains( | |
782 | + | else if (!(contains(ci.name, j))) | |
629 | 783 | then throw((("Only NFT " + j) + " tokens are accepted")) | |
630 | 784 | else { | |
631 | - | let | |
632 | - | let | |
633 | - | if (isDefined(getInteger( | |
634 | - | then throw((("NFT " + | |
635 | - | else if (isDefined(getString( | |
636 | - | then throw(("You already staked one duck: " + | |
785 | + | let dc = toBase58String(K) | |
786 | + | let cj = M(dc) | |
787 | + | if (isDefined(getInteger(cj))) | |
788 | + | then throw((("NFT " + ci.name) + " is already staked")) | |
789 | + | else if (isDefined(getString(V(cY)))) | |
790 | + | then throw(("You already staked one duck: " + ci.name)) | |
637 | 791 | else { | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | let | |
644 | - | ([IntegerEntry( | |
792 | + | let dd = ab(dc) | |
793 | + | let de = getString(dd) | |
794 | + | let bP = ac(dc) | |
795 | + | let df = getInteger(bP) | |
796 | + | let bA = Z(dc) | |
797 | + | let dg = getString(bA) | |
798 | + | ([IntegerEntry(cj, lastBlock.timestamp), IntegerEntry(W(j, toBase58String(K), cY), lastBlock.timestamp), StringEntry(L(dc), cY), StringEntry(V(cY), dc)] ++ (if (isDefined(de)) | |
645 | 799 | then nil | |
646 | - | else ([StringEntry( | |
800 | + | else ([StringEntry(dd, k)] ++ (if (isDefined(df)) | |
647 | 801 | then nil | |
648 | - | else ([IntegerEntry( | |
802 | + | else ([IntegerEntry(bP, 100)] ++ (if (isDefined(dg)) | |
649 | 803 | then nil | |
650 | - | else [StringEntry( | |
804 | + | else [StringEntry(bA, "0:0_0_0_0_0_0:0_0_0_0_0_0:")])))))) | |
651 | 805 | } | |
652 | 806 | } | |
653 | 807 | } | |
655 | 809 | ||
656 | 810 | ||
657 | 811 | ||
658 | - | @Callable( | |
659 | - | func unstakeDuck ( | |
812 | + | @Callable(aW) | |
813 | + | func unstakeDuck (dc) = if ((size(aW.payments) != 0)) | |
660 | 814 | then throw("unstake doesn't require any payments") | |
661 | 815 | else { | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | if (if (( | |
666 | - | then ( | |
816 | + | let K = fromBase58String(dc) | |
817 | + | let cY = toString(aW.caller) | |
818 | + | let ci = value(assetInfo(K)) | |
819 | + | if (if ((ci.issuer != d)) | |
820 | + | then (ci.issuer != e) | |
667 | 821 | else false) | |
668 | 822 | then throw((("Unknown issuer of " + j) + " token")) | |
669 | - | else if (!(contains( | |
823 | + | else if (!(contains(ci.name, j))) | |
670 | 824 | then throw((("Only NFT " + j) + " tokens can be unstaked")) | |
671 | 825 | else { | |
672 | - | let | |
673 | - | if (!(isDefined( | |
674 | - | then throw((("NFT " + | |
675 | - | else if (!(isDefined( | |
676 | - | then throw((("The duck " + | |
826 | + | let cj = M(toBase58String(K)) | |
827 | + | if (!(isDefined(cj))) | |
828 | + | then throw((("NFT " + ci.name) + " is not staked")) | |
829 | + | else if (!(isDefined(V(cY)))) | |
830 | + | then throw((("The duck " + ci.name) + " is not staked")) | |
677 | 831 | else { | |
678 | - | let | |
679 | - | if (( | |
832 | + | let cl = valueOrErrorMessage(getString(L(toBase58String(K))), (("NFT " + ci.name) + " is orphaned")) | |
833 | + | if ((cl != cY)) | |
680 | 834 | then throw("Staked NFT is not yours") | |
681 | - | else [ScriptTransfer( | |
835 | + | else [ScriptTransfer(aW.caller, 1, K), DeleteEntry(cj), DeleteEntry(ab(dc)), DeleteEntry(L(dc)), DeleteEntry(W(j, dc, cY)), DeleteEntry(V(cY))] | |
682 | 836 | } | |
683 | 837 | } | |
684 | 838 | } | |
685 | 839 | ||
686 | 840 | ||
687 | 841 | ||
688 | - | @Callable( | |
689 | - | func claimRes ( | |
842 | + | @Callable(aW) | |
843 | + | func claimRes (bd,db) = if ((size(aW.payments) != 0)) | |
690 | 844 | then throw("claimRes doesn't require any payments") | |
691 | 845 | else { | |
692 | - | let | |
693 | - | let | |
694 | - | $Tuple2(( | |
846 | + | let cf = toString(aW.originCaller) | |
847 | + | let aP = cn(cf, bd) | |
848 | + | $Tuple2((aP._1 :+ StringEntry(aP._2, makeString(aP._3, ":"))), aP._3[am]) | |
695 | 849 | } | |
696 | 850 | ||
697 | 851 | ||
698 | 852 | ||
699 | - | @Callable( | |
700 | - | func flight ( | |
853 | + | @Callable(aW) | |
854 | + | func flight (bF,bG) = if (!(sigVerify_8Kb(bF, bG, g))) | |
701 | 855 | then throw("signature does not match") | |
702 | - | else if ((size( | |
856 | + | else if ((size(aW.payments) != 0)) | |
703 | 857 | then throw("flight doesn't require any payments") | |
704 | 858 | else { | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | let | |
711 | - | let | |
712 | - | if (if (( | |
859 | + | let bH = split(toUtf8String(bF), ";") | |
860 | + | let bI = split(split(bH[0], "|")[0], "_") | |
861 | + | let bJ = parseIntValue(bI[0]) | |
862 | + | let bK = parseIntValue(bI[1]) | |
863 | + | let dh = split(bH[1], ":") | |
864 | + | let di = dh[0] | |
865 | + | let bN = parseIntValue(dh[1]) | |
866 | + | if (if ((bN > (lastBlock.timestamp + o))) | |
713 | 867 | then true | |
714 | - | else ((lastBlock.timestamp - o) > | |
868 | + | else ((lastBlock.timestamp - o) > bN)) | |
715 | 869 | then throw("signature outdated") | |
716 | 870 | else { | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | if (( | |
721 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
722 | - | else if ((0 >= | |
871 | + | let aa = valueOrErrorMessage(getString(V(toString(aW.caller))), "You don't have a duck staked") | |
872 | + | let bP = ac(aa) | |
873 | + | let bQ = valueOrElse(getInteger(bP), 100) | |
874 | + | if ((bQ != bJ)) | |
875 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bP), 100))) + " from state does not match one from flight log=") + toString(bJ))) | |
876 | + | else if ((0 >= bJ)) | |
723 | 877 | then throw("You can't fly with zero health") | |
724 | 878 | else { | |
725 | - | let | |
726 | - | let | |
727 | - | if (( | |
879 | + | let dd = ab(aa) | |
880 | + | let cg = valueOrElse(getString(dd), k) | |
881 | + | if ((di == cg)) | |
728 | 882 | then throw("You can't fly to the same location") | |
729 | - | else $Tuple2([StringEntry( | |
730 | - | then | |
731 | - | else | |
883 | + | else $Tuple2([StringEntry(dd, if ((bK > 0)) | |
884 | + | then di | |
885 | + | else cg), IntegerEntry(bP, bK)], unit) | |
732 | 886 | } | |
733 | 887 | } | |
734 | 888 | } | |
735 | 889 | ||
736 | 890 | ||
737 | 891 | ||
738 | - | @Callable( | |
739 | - | func setHealth ( | |
892 | + | @Callable(aW) | |
893 | + | func setHealth (df,aa) = if (if ((0 > df)) | |
740 | 894 | then true | |
741 | - | else ( | |
895 | + | else (df > 100)) | |
742 | 896 | then throw("HP should be within 0..100") | |
743 | - | else [IntegerEntry( | |
897 | + | else [IntegerEntry(ac(aa), df)] | |
744 | 898 | ||
745 | 899 | ||
746 | 900 | ||
747 | - | @Callable( | |
748 | - | func heal ( | |
901 | + | @Callable(aW) | |
902 | + | func heal (dj,bd) = if (if ((0 > dj)) | |
749 | 903 | then true | |
750 | - | else ( | |
751 | - | then throw(("Unknown material: " + toString( | |
752 | - | else if ((0 >= | |
753 | - | then throw(("Amount should be positive! " + toString( | |
904 | + | else (dj >= l)) | |
905 | + | then throw(("Unknown material: " + toString(dj))) | |
906 | + | else if ((0 >= bd)) | |
907 | + | then throw(("Amount should be positive! " + toString(bd))) | |
754 | 908 | else { | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | if (( | |
909 | + | let aa = valueOrErrorMessage(getString(V(toString(aW.caller))), "You don't have a duck staked") | |
910 | + | let bP = ac(aa) | |
911 | + | let dk = valueOrElse(getInteger(bP), 100) | |
912 | + | if ((dk >= 100)) | |
759 | 913 | then throw("HP should be < 100 to heal") | |
760 | 914 | else { | |
761 | - | let | |
762 | - | let | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | if (( | |
768 | - | then throw(((((("You need " + toString( | |
915 | + | let bA = Z(aa) | |
916 | + | let bR = bz(bA) | |
917 | + | let bS = split(bR[an], "_") | |
918 | + | let dl = parseIntValue(bS[dj]) | |
919 | + | let dm = min([(bd / h), (100 - dk)]) | |
920 | + | let dn = (dm * h) | |
921 | + | if ((dn > dl)) | |
922 | + | then throw(((((("You need " + toString(dn)) + " of ") + B[dj]) + " to heal, but you backpack contains ") + toString(dl))) | |
769 | 923 | else { | |
770 | - | let | |
771 | - | [IntegerEntry( | |
924 | + | let bT = bb(bS, dj, dn) | |
925 | + | [IntegerEntry(bP, (dk + dm)), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))] | |
772 | 926 | } | |
773 | 927 | } | |
774 | 928 | } | |
775 | 929 | ||
776 | 930 | ||
777 | 931 | ||
778 | - | @Callable( | |
779 | - | func updateBackpack ( | |
932 | + | @Callable(aW) | |
933 | + | func updateBackpack (aa,do) = if ((aW.caller != f)) | |
780 | 934 | then throw("permission denied") | |
781 | - | else $Tuple2([StringEntry( | |
935 | + | else $Tuple2([StringEntry(Z(aa), do)], do) | |
782 | 936 | ||
783 | 937 | ||
784 | 938 | ||
785 | - | @Callable( | |
786 | - | func expeditionBuy ( | |
939 | + | @Callable(aW) | |
940 | + | func expeditionBuy (bF,bG) = if ((size(aW.payments) != 1)) | |
787 | 941 | then throw("Exactly one payment required") | |
788 | 942 | else { | |
789 | - | let | |
790 | - | if (( | |
943 | + | let cX = value(aW.payments[0]) | |
944 | + | if ((cX.assetId != b)) | |
791 | 945 | then throw("Allowed USDN payment only!") | |
792 | - | else if (( | |
946 | + | else if ((cX.amount != t)) | |
793 | 947 | then throw(("Payment attached should be " + toString(t))) | |
794 | - | else bq(false, aR.caller, aR.transactionId, bt, bu) | |
948 | + | else { | |
949 | + | let aP = bC(false, aW.caller, aW.transactionId, bF, bG) | |
950 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
951 | + | } | |
795 | 952 | } | |
796 | 953 | ||
797 | 954 | ||
798 | 955 | ||
799 | - | @Callable( | |
800 | - | func expedition ( | |
956 | + | @Callable(aW) | |
957 | + | func expedition (bF,bG) = if ((size(aW.payments) != 0)) | |
801 | 958 | then throw("expedition doesn't require any payments") | |
802 | - | else | |
959 | + | else bC(true, aW.caller, aW.transactionId, bF, bG) | |
803 | 960 | ||
804 | 961 | ||
805 | 962 | ||
806 | - | @Callable( | |
807 | - | func upgradeInfra ( | |
963 | + | @Callable(aW) | |
964 | + | func upgradeInfra (dp) = if ((size(aW.payments) != 0)) | |
808 | 965 | then throw("Infrastructure upgrade doesn't require any payments") | |
809 | - | else | |
966 | + | else cv(true, aW.caller, 0) | |
810 | 967 | ||
811 | 968 | ||
812 | 969 | ||
813 | - | @Callable( | |
814 | - | func upgradeInfraUsdn ( | |
970 | + | @Callable(aW) | |
971 | + | func upgradeInfraUsdn (dp) = if ((size(aW.payments) != 1)) | |
815 | 972 | then throw("Exactly one payment required") | |
816 | 973 | else { | |
817 | - | let | |
818 | - | if (( | |
974 | + | let cX = value(aW.payments[0]) | |
975 | + | if ((cX.assetId != b)) | |
819 | 976 | then throw("Allowed USDN payment only!") | |
820 | - | else cn(false, aR.caller, cw.amount) | |
977 | + | else { | |
978 | + | let aP = cv(false, aW.caller, cX.amount) | |
979 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
980 | + | } | |
821 | 981 | } | |
822 | 982 | ||
823 | 983 | ||
824 | 984 | ||
825 | - | @Callable( | |
826 | - | func activateArtifact ( | |
985 | + | @Callable(aW) | |
986 | + | func activateArtifact (dq) = if ((size(aW.payments) != 0)) | |
827 | 987 | then throw("Artifact activation doesn't require any payments") | |
828 | 988 | else { | |
829 | - | let | |
830 | - | let c = | |
989 | + | let aP = { | |
990 | + | let c = dq | |
831 | 991 | if (("PRESALE" == c)) | |
832 | - | then | |
992 | + | then cC(toString(aW.caller)) | |
833 | 993 | else throw("Unknown artifact") | |
834 | 994 | } | |
835 | - | aL | |
995 | + | aP | |
996 | + | } | |
997 | + | ||
998 | + | ||
999 | + | ||
1000 | + | @Callable(aW) | |
1001 | + | func mergeLands (cH) = if ((size(aW.payments) != 0)) | |
1002 | + | then throw("Lands merging doesn't require any payments") | |
1003 | + | else cV(true, toString(aW.caller), 0, cH, aW.transactionId) | |
1004 | + | ||
1005 | + | ||
1006 | + | ||
1007 | + | @Callable(aW) | |
1008 | + | func mergeLandsUsdn (cH) = if ((size(aW.payments) != 1)) | |
1009 | + | then throw("Exactly one payment required") | |
1010 | + | else { | |
1011 | + | let cX = value(aW.payments[0]) | |
1012 | + | if ((cX.assetId != b)) | |
1013 | + | then throw("Allowed USDN payment only!") | |
1014 | + | else { | |
1015 | + | let aP = cV(false, toString(aW.caller), cX.amount, cH, aW.transactionId) | |
1016 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
1017 | + | } | |
836 | 1018 | } | |
837 | 1019 | ||
838 | 1020 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = toUtf8String(take(drop(this.bytes, 1), 1)) | |
5 | 5 | ||
6 | 6 | let b = { | |
7 | 7 | let c = a | |
8 | 8 | if (("W" == c)) | |
9 | 9 | then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p' | |
10 | 10 | else if (("T" == c)) | |
11 | 11 | then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ' | |
12 | 12 | else throw("Unknown chain") | |
13 | 13 | } | |
14 | 14 | ||
15 | 15 | let d = { | |
16 | 16 | let c = a | |
17 | 17 | if (("W" == c)) | |
18 | 18 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
19 | 19 | else if (("T" == c)) | |
20 | 20 | then this | |
21 | 21 | else throw("Unknown chain") | |
22 | 22 | } | |
23 | 23 | ||
24 | 24 | let e = { | |
25 | 25 | let c = a | |
26 | 26 | if (("W" == c)) | |
27 | 27 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
28 | 28 | else if (("T" == c)) | |
29 | 29 | then this | |
30 | 30 | else throw("Unknown chain") | |
31 | 31 | } | |
32 | 32 | ||
33 | 33 | let f = { | |
34 | 34 | let c = a | |
35 | 35 | if (("W" == c)) | |
36 | 36 | then addressFromStringValue("3P2sk1KncSxRaZs8b4CWGPw2jkvvav74u4D") | |
37 | 37 | else if (("T" == c)) | |
38 | 38 | then addressFromStringValue("3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep") | |
39 | 39 | else throw("Unknown chain") | |
40 | 40 | } | |
41 | 41 | ||
42 | 42 | let g = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
43 | 43 | ||
44 | 44 | let h = 10000 | |
45 | 45 | ||
46 | 46 | let i = "LAND" | |
47 | 47 | ||
48 | 48 | let j = "DUCK" | |
49 | 49 | ||
50 | 50 | let k = "Africa_F_Africa" | |
51 | 51 | ||
52 | 52 | let l = 6 | |
53 | 53 | ||
54 | 54 | let m = 3456000 | |
55 | 55 | ||
56 | 56 | let n = 86400000 | |
57 | 57 | ||
58 | 58 | let o = 300000 | |
59 | 59 | ||
60 | 60 | let p = 158549 | |
61 | 61 | ||
62 | 62 | let q = { | |
63 | 63 | let c = a | |
64 | 64 | if (("W" == c)) | |
65 | 65 | then 18921595217 | |
66 | 66 | else if (("T" == c)) | |
67 | 67 | then 189215952 | |
68 | 68 | else throw("Unknown chain") | |
69 | 69 | } | |
70 | 70 | ||
71 | 71 | let r = { | |
72 | 72 | let c = a | |
73 | 73 | if (("W" == c)) | |
74 | 74 | then 120000000 | |
75 | 75 | else if (("T" == c)) | |
76 | 76 | then 1200000 | |
77 | 77 | else throw("Unknown chain") | |
78 | 78 | } | |
79 | 79 | ||
80 | 80 | let s = { | |
81 | 81 | let c = a | |
82 | 82 | if (("W" == c)) | |
83 | 83 | then 157679960139 | |
84 | 84 | else if (("T" == c)) | |
85 | 85 | then 1576799601 | |
86 | 86 | else throw("Unknown chain") | |
87 | 87 | } | |
88 | 88 | ||
89 | 89 | let t = { | |
90 | 90 | let c = a | |
91 | 91 | if (("W" == c)) | |
92 | 92 | then 1000000000 | |
93 | 93 | else if (("T" == c)) | |
94 | 94 | then 10000000 | |
95 | 95 | else throw("Unknown chain") | |
96 | 96 | } | |
97 | 97 | ||
98 | 98 | let u = 1000000 | |
99 | 99 | ||
100 | 100 | let v = toBigInt(5) | |
101 | 101 | ||
102 | 102 | let w = toBigInt(20) | |
103 | 103 | ||
104 | 104 | let x = toBigInt((20 * 20)) | |
105 | 105 | ||
106 | 106 | let y = toBigInt(((20 * 20) * 20)) | |
107 | 107 | ||
108 | 108 | let z = toBigInt((((20 * 20) * 20) * 20)) | |
109 | 109 | ||
110 | 110 | let A = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
111 | 111 | ||
112 | 112 | let B = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
113 | 113 | ||
114 | 114 | let C = ["Asia", "Europe", "Americas", "Oceania", "Africa"] | |
115 | 115 | ||
116 | - | func D () = "nextLandNum" | |
116 | + | let D = "PRESALE" | |
117 | + | ||
118 | + | func E () = "nextLandNum" | |
117 | 119 | ||
118 | 120 | ||
119 | - | func | |
121 | + | func F (G) = ("landToAsset_" + G) | |
120 | 122 | ||
121 | 123 | ||
122 | - | func | |
124 | + | func H (G,I) = ((i + G) + I) | |
123 | 125 | ||
124 | 126 | ||
125 | - | func | |
127 | + | func J (K) = ("nftOwner_" + K) | |
126 | 128 | ||
127 | 129 | ||
128 | - | func | |
130 | + | func L (K) = ("duckOwner_" + K) | |
129 | 131 | ||
130 | 132 | ||
131 | - | func | |
133 | + | func M (K) = ("stakedTime_" + K) | |
132 | 134 | ||
133 | 135 | ||
134 | - | func | |
136 | + | func N (K) = ("infraLevel_" + K) | |
135 | 137 | ||
136 | 138 | ||
137 | - | func | |
139 | + | func O (K,P) = ((("infraLevelByAssetIdAndOwner_" + K) + "_") + P) | |
138 | 140 | ||
139 | 141 | ||
140 | - | func | |
142 | + | func Q (K) = ("presaleArtActivated_" + K) | |
141 | 143 | ||
142 | 144 | ||
143 | - | func | |
145 | + | func R (K,P) = ((("presaleArtActivatedByAssetIdAndOwner_" + K) + "_") + P) | |
144 | 146 | ||
145 | 147 | ||
146 | - | func | |
148 | + | func S (T,K) = makeString(["landArtStatus", T, K], "_") | |
147 | 149 | ||
148 | 150 | ||
149 | - | func | |
151 | + | func U (T,K,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", T, K, P], "_") | |
150 | 152 | ||
151 | 153 | ||
152 | - | func | |
154 | + | func V (P) = ("stakedDuckByOwner_" + P) | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func W (X,K,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + X) + "_") + K) + "_") + P) | |
156 | 158 | ||
157 | 159 | ||
158 | - | func | |
160 | + | func Y (G) = ("landOwner_" + G) | |
159 | 161 | ||
160 | 162 | ||
161 | - | func | |
163 | + | func Z (aa) = ("backPack_" + aa) | |
162 | 164 | ||
163 | 165 | ||
164 | - | func | |
166 | + | func ab (aa) = ("duckLocation_" + aa) | |
165 | 167 | ||
166 | 168 | ||
167 | - | ||
169 | + | func ac (aa) = ("duckHealth_" + aa) | |
168 | 170 | ||
169 | - | let ab = 1 | |
170 | 171 | ||
171 | - | ||
172 | + | func ad () = "resTypesProportions" | |
172 | 173 | ||
173 | - | let ad = 3 | |
174 | 174 | ||
175 | 175 | let ae = 0 | |
176 | 176 | ||
177 | 177 | let af = 1 | |
178 | 178 | ||
179 | 179 | let ag = 2 | |
180 | 180 | ||
181 | - | let ah = | |
181 | + | let ah = 3 | |
182 | 182 | ||
183 | - | let ai = | |
183 | + | let ai = 0 | |
184 | 184 | ||
185 | - | let aj = | |
185 | + | let aj = 1 | |
186 | 186 | ||
187 | - | let ak = | |
187 | + | let ak = 2 | |
188 | 188 | ||
189 | - | func al (am) = { | |
190 | - | let c = am | |
189 | + | let al = 0 | |
190 | + | ||
191 | + | let am = 1 | |
192 | + | ||
193 | + | let an = 2 | |
194 | + | ||
195 | + | let ao = 3 | |
196 | + | ||
197 | + | func ap (aq) = { | |
198 | + | let c = aq | |
191 | 199 | if ($isInstanceOf(c, "String")) | |
192 | 200 | then { | |
193 | - | let | |
194 | - | | |
201 | + | let ar = c | |
202 | + | ar | |
195 | 203 | } | |
196 | 204 | else throw("fail to cast into String") | |
197 | 205 | } | |
198 | 206 | ||
199 | 207 | ||
200 | - | func | |
201 | - | let | |
202 | - | if ((size( | |
208 | + | func as (at) = { | |
209 | + | let au = split(value(getString(ad())), "_") | |
210 | + | if ((size(au) != l)) | |
203 | 211 | then throw("Wrong proportions data") | |
204 | 212 | else { | |
205 | - | let | |
206 | - | let | |
207 | - | if ((0 >= | |
213 | + | let av = [parseIntValue(au[0]), parseIntValue(au[1]), parseIntValue(au[2]), parseIntValue(au[3]), parseIntValue(au[4]), parseIntValue(au[5])] | |
214 | + | let aw = (((((av[0] + av[1]) + av[2]) + av[3]) + av[4]) + av[5]) | |
215 | + | if ((0 >= aw)) | |
208 | 216 | then throw("No lands staked") | |
209 | 217 | else { | |
210 | - | let | |
211 | - | func | |
218 | + | let ax = fraction(at, u, aw) | |
219 | + | func ay (az,aA) = (az :+ fraction(aA, ax, u)) | |
212 | 220 | ||
213 | - | let | |
214 | - | let | |
215 | - | let | |
216 | - | func | |
217 | - | then | |
218 | - | else | |
221 | + | let aB = av | |
222 | + | let aC = size(aB) | |
223 | + | let aD = nil | |
224 | + | func aE (aF,aG) = if ((aG >= aC)) | |
225 | + | then aF | |
226 | + | else ay(aF, aB[aG]) | |
219 | 227 | ||
220 | - | func | |
221 | - | then | |
228 | + | func aH (aF,aG) = if ((aG >= aC)) | |
229 | + | then aF | |
222 | 230 | else throw("List size exceeds 6") | |
223 | 231 | ||
224 | - | aD | |
232 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
225 | 233 | } | |
226 | 234 | } | |
227 | 235 | } | |
228 | 236 | ||
229 | 237 | ||
230 | - | func | |
231 | - | let | |
232 | - | func | |
233 | - | let | |
234 | - | if ((0 > | |
235 | - | then throw(((((("Not enough material idx=" + toString( | |
236 | - | else ( | |
238 | + | func aI (aJ,aK,aL) = { | |
239 | + | let aM = as(aL) | |
240 | + | func aN (az,aO) = { | |
241 | + | let aP = (parseIntValue(aK[aO]) - aM[aO]) | |
242 | + | if ((0 > aP)) | |
243 | + | then throw(((((("Not enough material idx=" + toString(aO)) + ", you have ") + aK[aO]) + ", but need ") + toString(aM[aO]))) | |
244 | + | else (az :+ toString(aP)) | |
237 | 245 | } | |
238 | 246 | ||
239 | - | if ( | |
247 | + | if (aJ) | |
240 | 248 | then { | |
241 | - | let | |
242 | - | let | |
243 | - | let | |
244 | - | func | |
245 | - | then | |
246 | - | else | |
249 | + | let aB = [0, 1, 2, 3, 4, 5] | |
250 | + | let aC = size(aB) | |
251 | + | let aD = nil | |
252 | + | func aE (aF,aG) = if ((aG >= aC)) | |
253 | + | then aF | |
254 | + | else aN(aF, aB[aG]) | |
247 | 255 | ||
248 | - | func | |
249 | - | then | |
256 | + | func aH (aF,aG) = if ((aG >= aC)) | |
257 | + | then aF | |
250 | 258 | else throw("List size exceeds 6") | |
251 | 259 | ||
252 | - | aD | |
260 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
253 | 261 | } | |
254 | - | else | |
262 | + | else aK | |
255 | 263 | } | |
256 | 264 | ||
257 | 265 | ||
258 | - | func aM (aN,aO,aP) = { | |
259 | - | let aq = split(valueOrElse(getString(Z()), "0_0_0_0_0_0"), "_") | |
260 | - | if ((size(aq) != l)) | |
261 | - | then throw("Wrong proportions data") | |
262 | - | else { | |
263 | - | func aQ (av,aR) = { | |
264 | - | let aL = (parseIntValue(aq[aR]) + ((aP * aN[aR]) * aO)) | |
265 | - | if ((0 > aL)) | |
266 | - | then throw(((((((("Panic! Pieces of type=" + toString(aR)) + ", sign=") + toString(aP)) + ", terrainCounts[i]=") + toString(aN[aR])) + ", landSizeIndex=") + toString(aO))) | |
267 | - | else (av :+ toString(aL)) | |
268 | - | } | |
266 | + | func aQ (aR,aS,aT,aU) = if ((size(aR) != l)) | |
267 | + | then throw("Wrong proportions data") | |
268 | + | else { | |
269 | + | func aV (az,aW) = { | |
270 | + | let aP = (parseIntValue(aR[aW]) + ((aU * aS[aW]) * aT)) | |
271 | + | if ((0 > aP)) | |
272 | + | then throw(((((((("Panic! Pieces of type=" + toString(aW)) + ", sign=") + toString(aU)) + ", terrainCounts[i]=") + toString(aS[aW])) + ", landSizeIndex=") + toString(aT))) | |
273 | + | else (az :+ toString(aP)) | |
274 | + | } | |
269 | 275 | ||
270 | - | ||
271 | - | ||
272 | - | ||
273 | - | ||
274 | - | ||
275 | - | ||
276 | - | ||
276 | + | let av = { | |
277 | + | let aB = [0, 1, 2, 3, 4, 5] | |
278 | + | let aC = size(aB) | |
279 | + | let aD = nil | |
280 | + | func aE (aF,aG) = if ((aG >= aC)) | |
281 | + | then aF | |
282 | + | else aV(aF, aB[aG]) | |
277 | 283 | ||
278 | - | ||
279 | - | ||
280 | - | ||
284 | + | func aH (aF,aG) = if ((aG >= aC)) | |
285 | + | then aF | |
286 | + | else throw("List size exceeds 6") | |
281 | 287 | ||
282 | - | aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6) | |
283 | - | } | |
284 | - | makeString(ar, "_") | |
288 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
285 | 289 | } | |
290 | + | makeString(av, "_") | |
291 | + | } | |
292 | + | ||
293 | + | ||
294 | + | func aX (aS,aT,aU) = { | |
295 | + | let aR = split(valueOrElse(getString(ad()), "0_0_0_0_0_0"), "_") | |
296 | + | aQ(aR, aS, aT, aU) | |
286 | 297 | } | |
287 | 298 | ||
288 | 299 | ||
289 | - | func | |
300 | + | func aY (aZ) = [(size(split(aZ, "A")) - 1), (size(split(aZ, "B")) - 1), (size(split(aZ, "C")) - 1), (size(split(aZ, "D")) - 1), (size(split(aZ, "E")) - 1), (size(split(aZ, "F")) - 1)] | |
290 | 301 | ||
291 | 302 | ||
292 | - | func | |
293 | - | let c = | |
303 | + | func ba (I) = { | |
304 | + | let c = I | |
294 | 305 | if (("S" == c)) | |
295 | 306 | then 25 | |
296 | 307 | else if (("M" == c)) | |
297 | 308 | then 100 | |
298 | 309 | else if (("L" == c)) | |
299 | 310 | then 225 | |
300 | 311 | else if (("XL" == c)) | |
301 | 312 | then 400 | |
302 | 313 | else if (("XXL" == c)) | |
303 | 314 | then 625 | |
304 | 315 | else throw("Unknown land size") | |
305 | 316 | } | |
306 | 317 | ||
307 | 318 | ||
308 | - | func | |
309 | - | func | |
310 | - | then toString((parseIntValue(aW | |
311 | - | else aW | |
319 | + | func bb (bc,aO,bd) = { | |
320 | + | func be (az,aW) = (az :+ (if ((aW == aO)) | |
321 | + | then toString((parseIntValue(bc[aW]) - bd)) | |
322 | + | else bc[aW])) | |
312 | 323 | ||
313 | - | let | |
314 | - | let | |
315 | - | let | |
316 | - | let | |
317 | - | func | |
318 | - | then | |
319 | - | else | |
324 | + | let av = { | |
325 | + | let aB = [0, 1, 2, 3, 4, 5] | |
326 | + | let aC = size(aB) | |
327 | + | let aD = nil | |
328 | + | func aE (aF,aG) = if ((aG >= aC)) | |
329 | + | then aF | |
330 | + | else be(aF, aB[aG]) | |
320 | 331 | ||
321 | - | func | |
322 | - | then | |
332 | + | func aH (aF,aG) = if ((aG >= aC)) | |
333 | + | then aF | |
323 | 334 | else throw("List size exceeds 6") | |
324 | 335 | ||
325 | - | aD | |
336 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
326 | 337 | } | |
327 | - | makeString( | |
338 | + | makeString(av, "_") | |
328 | 339 | } | |
329 | 340 | ||
330 | 341 | ||
331 | - | func | |
332 | - | func | |
333 | - | let | |
334 | - | ( | |
342 | + | func bf (bg,aS,bh,aT,bi) = { | |
343 | + | func bj (az,aW) = { | |
344 | + | let bk = ((fraction(bh, bi, n) * aS[aW]) * aT) | |
345 | + | (az :+ toString((parseIntValue(bg[aW]) + bk))) | |
335 | 346 | } | |
336 | 347 | ||
337 | - | let | |
338 | - | let | |
339 | - | let | |
340 | - | let | |
341 | - | func | |
342 | - | then | |
343 | - | else | |
348 | + | let av = { | |
349 | + | let aB = [0, 1, 2, 3, 4, 5] | |
350 | + | let aC = size(aB) | |
351 | + | let aD = nil | |
352 | + | func aE (aF,aG) = if ((aG >= aC)) | |
353 | + | then aF | |
354 | + | else bj(aF, aB[aG]) | |
344 | 355 | ||
345 | - | func | |
346 | - | then | |
356 | + | func aH (aF,aG) = if ((aG >= aC)) | |
357 | + | then aF | |
347 | 358 | else throw("List size exceeds 6") | |
348 | 359 | ||
349 | - | aD | |
360 | + | aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6) | |
350 | 361 | } | |
351 | - | makeString( | |
362 | + | makeString(av, "_") | |
352 | 363 | } | |
353 | 364 | ||
354 | 365 | ||
355 | - | func | |
356 | - | then | |
357 | - | else -( | |
366 | + | func bl (bm) = if ((bm >= toBigInt(0))) | |
367 | + | then bm | |
368 | + | else -(bm) | |
358 | 369 | ||
359 | 370 | ||
360 | - | let | |
371 | + | let bn = [[1, 4, 9, 10, 15], [5, 8, 13, 14, 15], [6, 9, 14, 15, 16], [4, 7, 8, 13, 18], [1, 6, 7, 15, 19]] | |
361 | 372 | ||
362 | - | func | |
363 | - | let | |
364 | - | let | |
373 | + | func bo (bp,bq) = { | |
374 | + | let br = toInt((bp % w)) | |
375 | + | let bs = if ((bq[0] > br)) | |
365 | 376 | then "A" | |
366 | - | else if (( | |
377 | + | else if ((bq[1] > br)) | |
367 | 378 | then "B" | |
368 | - | else if (( | |
379 | + | else if ((bq[2] > br)) | |
369 | 380 | then "C" | |
370 | - | else if (( | |
381 | + | else if ((bq[3] > br)) | |
371 | 382 | then "D" | |
372 | - | else if (( | |
383 | + | else if ((bq[4] > br)) | |
373 | 384 | then "E" | |
374 | 385 | else "F" | |
375 | - | | |
386 | + | bs | |
376 | 387 | } | |
377 | 388 | ||
378 | 389 | ||
379 | - | func bn (bo) = { | |
380 | - | let bp = split(valueOrElse(getString(bo), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
381 | - | [toString(valueOrElse(parseInt(bp[ah]), 0)), if ((size(split(bp[ai], "_")) == l)) | |
382 | - | then bp[ai] | |
383 | - | else "0_0_0_0_0_0", if ((size(split(bp[aj], "_")) == l)) | |
384 | - | then bp[aj] | |
385 | - | else "0_0_0_0_0_0", bp[ak]] | |
390 | + | func bt (bu,bv) = { | |
391 | + | let bw = bn[bv] | |
392 | + | func bx (az,aA) = $Tuple2((((((az._1 + bo(az._2, bw)) + bo((az._2 / w), bw)) + bo((az._2 / x), bw)) + bo((az._2 / y), bw)) + bo((az._2 / z), bw)), (az._2 / A)) | |
393 | + | ||
394 | + | let by = { | |
395 | + | let aB = [1, 2, 3, 4, 5] | |
396 | + | let aC = size(aB) | |
397 | + | let aD = $Tuple2("", (bu / v)) | |
398 | + | func aE (aF,aG) = if ((aG >= aC)) | |
399 | + | then aF | |
400 | + | else bx(aF, aB[aG]) | |
401 | + | ||
402 | + | func aH (aF,aG) = if ((aG >= aC)) | |
403 | + | then aF | |
404 | + | else throw("List size exceeds 5") | |
405 | + | ||
406 | + | aH(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5) | |
407 | + | } | |
408 | + | by._1 | |
386 | 409 | } | |
387 | 410 | ||
388 | 411 | ||
389 | - | func bq (aF,br,bs,bt,bu) = if (!(sigVerify_8Kb(bt, bu, g))) | |
412 | + | func bz (bA) = { | |
413 | + | let bB = split(valueOrElse(getString(bA), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
414 | + | [toString(valueOrElse(parseInt(bB[al]), 0)), if ((size(split(bB[am], "_")) == l)) | |
415 | + | then bB[am] | |
416 | + | else "0_0_0_0_0_0", if ((size(split(bB[an], "_")) == l)) | |
417 | + | then bB[an] | |
418 | + | else "0_0_0_0_0_0", bB[ao]] | |
419 | + | } | |
420 | + | ||
421 | + | ||
422 | + | func bC (aJ,bD,bE,bF,bG) = if (!(sigVerify_8Kb(bF, bG, g))) | |
390 | 423 | then throw("signature does not match") | |
391 | 424 | else { | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | if (( | |
425 | + | let bH = split(toUtf8String(bF), ";") | |
426 | + | let bI = split(split(bH[0], "|")[0], "_") | |
427 | + | let bJ = parseIntValue(bI[0]) | |
428 | + | let bK = parseIntValue(bI[1]) | |
429 | + | let bL = split(bH[1], ":") | |
430 | + | let bM = split(bL[0], "_") | |
431 | + | if ((bM[1] != "E")) | |
399 | 432 | then throw("expedition target location type should be E") | |
400 | 433 | else { | |
401 | - | let | |
402 | - | if (if (( | |
434 | + | let bN = parseIntValue(bL[1]) | |
435 | + | if (if ((bN > (lastBlock.timestamp + o))) | |
403 | 436 | then true | |
404 | - | else ((lastBlock.timestamp - o) > | |
437 | + | else ((lastBlock.timestamp - o) > bN)) | |
405 | 438 | then throw("signature outdated") | |
406 | 439 | else { | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | let | |
411 | - | if (( | |
412 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
413 | - | else if ((0 >= | |
440 | + | let bO = toString(bD) | |
441 | + | let aa = valueOrErrorMessage(getString(V(bO)), "You don't have a duck staked") | |
442 | + | let bP = ac(aa) | |
443 | + | let bQ = valueOrElse(getInteger(bP), 100) | |
444 | + | if ((bQ != bJ)) | |
445 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bP), 100))) + " from state does not match one from flight log=") + toString(bJ))) | |
446 | + | else if ((0 >= bJ)) | |
414 | 447 | then throw("You can't fly with zero health") | |
415 | - | else if ((0 >= | |
416 | - | then $Tuple2(((if (!( | |
417 | - | then [ScriptTransfer( | |
418 | - | else nil) :+ IntegerEntry( | |
448 | + | else if ((0 >= bK)) | |
449 | + | then $Tuple2(((if (!(aJ)) | |
450 | + | then [ScriptTransfer(bD, t, b)] | |
451 | + | else nil) :+ IntegerEntry(bP, 0)), "") | |
419 | 452 | else { | |
420 | - | let bo = V(W) | |
421 | - | let bF = bn(bo) | |
422 | - | let bG = split(bF[aj], "_") | |
423 | - | let bH = makeString(aE(aF, bG, s), "_") | |
424 | - | let bI = bf(toBigInt(bs)) | |
425 | - | let bJ = valueOrElse(getInteger(D()), 501) | |
426 | - | let F = toString(bJ) | |
427 | - | let bK = toInt((bI % v)) | |
428 | - | let bL = bh[bK] | |
429 | - | func bM (av,aw) = $Tuple2((((((av._1 + bi(av._2, bL)) + bi((av._2 / w), bL)) + bi((av._2 / x), bL)) + bi((av._2 / y), bL)) + bi((av._2 / z), bL)), (av._2 / A)) | |
430 | - | ||
431 | - | let bN = { | |
432 | - | let ax = [1, 2, 3, 4, 5] | |
433 | - | let ay = size(ax) | |
434 | - | let az = $Tuple2("", (bI / v)) | |
435 | - | func aA (aB,aC) = if ((aC >= ay)) | |
436 | - | then aB | |
437 | - | else bM(aB, ax[aC]) | |
438 | - | ||
439 | - | func aD (aB,aC) = if ((aC >= ay)) | |
440 | - | then aB | |
441 | - | else throw("List size exceeds 5") | |
442 | - | ||
443 | - | aD(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5) | |
444 | - | } | |
445 | - | let bO = C[bK] | |
446 | - | let bP = Issue(G(F, "S"), makeString([F, "S", bN._1, bO], "_"), 1, 0, false) | |
447 | - | let J = calculateAssetId(bP) | |
448 | - | let bQ = toBase58String(J) | |
449 | - | $Tuple2([IntegerEntry(D(), (bJ + 1)), bP, StringEntry(E(F), bQ), StringEntry(I(bQ), bC), StringEntry(U(F), bC), IntegerEntry(M(bQ), 0), IntegerEntry(N(bQ, bC), 0), ScriptTransfer(br, 1, J), StringEntry(X(W), makeString([bO, "L", bQ], "_")), IntegerEntry(bD, by), StringEntry(bo, makeString([bF[ah], bF[ai], bH, bF[ak]], ":"))], bQ) | |
453 | + | let bA = Z(aa) | |
454 | + | let bR = bz(bA) | |
455 | + | let bS = split(bR[an], "_") | |
456 | + | let bT = makeString(aI(aJ, bS, s), "_") | |
457 | + | let bU = bl(toBigInt(bE)) | |
458 | + | let bV = valueOrElse(getInteger(E()), 501) | |
459 | + | let G = toString(bV) | |
460 | + | let bv = toInt((bU % v)) | |
461 | + | let aZ = bt(bU, bv) | |
462 | + | let bW = C[bv] | |
463 | + | let bX = Issue(H(G, "S"), makeString([G, "S", aZ, bW], "_"), 1, 0, false) | |
464 | + | let K = calculateAssetId(bX) | |
465 | + | let bY = toBase58String(K) | |
466 | + | $Tuple2([IntegerEntry(E(), (bV + 1)), bX, StringEntry(F(G), bY), StringEntry(J(bY), bO), StringEntry(Y(G), bO), IntegerEntry(N(bY), 0), IntegerEntry(O(bY, bO), 0), ScriptTransfer(bD, 1, K), StringEntry(ab(aa), makeString([bW, "L", bY], "_")), IntegerEntry(bP, bK), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))], bY) | |
450 | 467 | } | |
451 | 468 | } | |
452 | 469 | } | |
453 | 470 | } | |
454 | 471 | ||
455 | 472 | ||
456 | - | func | |
457 | - | let | |
458 | - | let | |
459 | - | then | |
460 | - | else 0 | |
461 | - | ((m + fraction(m, | |
473 | + | func bZ (ca,cb) = { | |
474 | + | let cc = valueOrElse(getInteger(N(ca)), 0) | |
475 | + | let cd = valueOrElse(getInteger(S(D, ca)), if (valueOrElse(getBoolean(Q(ca)), false)) | |
476 | + | then cb | |
477 | + | else 0) | |
478 | + | ((m + fraction(m, cc, 4)) + fraction(m, (cd * 3), (cb * 20))) | |
462 | 479 | } | |
463 | 480 | ||
464 | 481 | ||
465 | - | func | |
466 | - | let | |
467 | - | let | |
468 | - | let | |
469 | - | if (( | |
470 | - | then throw((("Duck location type is " + | |
482 | + | func ce (cf) = { | |
483 | + | let aa = valueOrErrorMessage(getString(V(cf)), "You don't have a duck staked") | |
484 | + | let cg = valueOrElse(getString(ab(aa)), k) | |
485 | + | let ch = split(value(cg), "_") | |
486 | + | if ((ch[aj] != "L")) | |
487 | + | then throw((("Duck location type is " + ch[aj]) + ", but should be L")) | |
471 | 488 | else { | |
472 | - | let | |
473 | - | let | |
474 | - | let | |
475 | - | let | |
476 | - | let | |
477 | - | if (( | |
489 | + | let ca = ch[ak] | |
490 | + | let ci = value(assetInfo(fromBase58String(ca))) | |
491 | + | let cj = M(ca) | |
492 | + | let ck = valueOrErrorMessage(getInteger(cj), (("NFT " + ci.name) + " is not staked")) | |
493 | + | let cl = valueOrErrorMessage(getString(J(ca)), (("NFT " + ci.name) + " is orphaned")) | |
494 | + | if ((cl != cf)) | |
478 | 495 | then throw((i + " is not yours")) | |
479 | 496 | else { | |
480 | - | let | |
481 | - | $Tuple4( | |
497 | + | let cm = split(ci.description, "_") | |
498 | + | $Tuple4(aa, ca, cm, ck) | |
482 | 499 | } | |
483 | 500 | } | |
484 | 501 | } | |
485 | 502 | ||
486 | 503 | ||
487 | - | func | |
488 | - | let | |
489 | - | let | |
490 | - | let | |
491 | - | let | |
492 | - | if ((0 > | |
493 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
504 | + | func cn (cf,bd) = { | |
505 | + | let co = ce(cf) | |
506 | + | let I = co._3[af] | |
507 | + | let aS = aY(co._3[ag]) | |
508 | + | let bh = (lastBlock.timestamp - co._4) | |
509 | + | if ((0 > bh)) | |
510 | + | then throw(((("Saved timestamp is in future, saved = " + toString(co._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
494 | 511 | else { | |
495 | - | let | |
496 | - | let | |
497 | - | let | |
498 | - | if (( | |
499 | - | then throw(((("Not enough resources, available = " + toString( | |
512 | + | let cb = ba(I) | |
513 | + | let cp = bZ(co._2, cb) | |
514 | + | let cq = fraction(bh, (cp * cb), n) | |
515 | + | if ((bd > cq)) | |
516 | + | then throw(((("Not enough resources, available = " + toString(cq)) + ", requested = ") + toString(bd))) | |
500 | 517 | else { | |
501 | - | let | |
502 | - | let | |
503 | - | let | |
504 | - | let | |
505 | - | let | |
506 | - | let | |
507 | - | $Tuple3([IntegerEntry( | |
518 | + | let cr = fraction((cq - bd), n, (cp * cb)) | |
519 | + | let cs = (lastBlock.timestamp - cr) | |
520 | + | let bA = Z(co._1) | |
521 | + | let bR = bz(bA) | |
522 | + | let bg = split(bR[am], "_") | |
523 | + | let ct = bf(bg, aS, (bh - cr), (cb / 25), cp) | |
524 | + | $Tuple3([IntegerEntry(M(co._2), cs), IntegerEntry(W(i, co._2, cf), cs)], bA, [bR[al], ct, bR[an], bR[ao]]) | |
508 | 525 | } | |
509 | 526 | } | |
510 | 527 | } | |
511 | 528 | ||
512 | 529 | ||
513 | - | func | |
514 | - | let | |
515 | - | let | |
516 | - | let | |
517 | - | | |
530 | + | func cu (cf,ca,cb) = { | |
531 | + | let cj = M(ca) | |
532 | + | let ck = value(getInteger(cj)) | |
533 | + | let cq = (fraction((lastBlock.timestamp - ck), bZ(ca, cb), n) * cb) | |
534 | + | cn(cf, cq) | |
518 | 535 | } | |
519 | 536 | ||
520 | 537 | ||
521 | - | func | |
522 | - | let | |
523 | - | let | |
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | if (( | |
538 | + | func cv (aJ,bD,cw) = { | |
539 | + | let cf = toString(bD) | |
540 | + | let co = ce(cf) | |
541 | + | let cb = ba(co._3[af]) | |
542 | + | let cx = N(co._2) | |
543 | + | let cy = valueOrElse(getInteger(cx), 0) | |
544 | + | if ((cy >= 3)) | |
528 | 545 | then throw("Currently max infrastructure level = 3") | |
529 | 546 | else { | |
530 | - | let | |
531 | - | let | |
532 | - | if (if (!( | |
533 | - | then ( | |
547 | + | let cz = (cy + 1) | |
548 | + | let cA = fraction(r, (cb * cz), 25) | |
549 | + | if (if (!(aJ)) | |
550 | + | then (cw != cA) | |
534 | 551 | else false) | |
535 | - | then throw(("Payment attached should be " + toString( | |
552 | + | then throw(("Payment attached should be " + toString(cA))) | |
536 | 553 | else { | |
537 | - | let | |
538 | - | let | |
539 | - | let | |
540 | - | let | |
541 | - | let | |
542 | - | $Tuple2(([IntegerEntry( | |
554 | + | let bA = Z(co._1) | |
555 | + | let bR = bz(bA) | |
556 | + | let bS = split(bR[an], "_") | |
557 | + | let bT = makeString(aI(aJ, bS, fraction(q, (cb * cz), 25)), "_") | |
558 | + | let cB = cu(cf, co._2, cb) | |
559 | + | $Tuple2(([IntegerEntry(cx, cz), IntegerEntry(O(co._2, cf), cz), StringEntry(bA, makeString([bR[al], cB._3[am], bT, bR[ao]], ":"))] ++ cB._1), cz) | |
543 | 560 | } | |
544 | 561 | } | |
545 | 562 | } | |
546 | 563 | ||
547 | 564 | ||
548 | - | func cu (bW) = { | |
549 | - | let cf = bV(bW) | |
550 | - | let cv = P(cf._2) | |
551 | - | if (valueOrElse(getBoolean(cv), false)) | |
565 | + | func cC (cf) = { | |
566 | + | let co = ce(cf) | |
567 | + | let ca = co._2 | |
568 | + | let cD = Q(ca) | |
569 | + | if (valueOrElse(getBoolean(cD), false)) | |
552 | 570 | then throw("Presale artifact is already activated") | |
553 | - | else if ((parseIntValue( | |
554 | - | then throw((((i + " ") + | |
571 | + | else if ((parseIntValue(co._3[ae]) > 500)) | |
572 | + | then throw((((i + " ") + ca) + " is not eligible for presale artifact")) | |
555 | 573 | else { | |
556 | - | let | |
557 | - | let | |
558 | - | ((( | |
574 | + | let cb = ba(co._3[af]) | |
575 | + | let cB = cu(cf, ca, cb) | |
576 | + | (((((cB._1 :+ BooleanEntry(cD, true)) :+ BooleanEntry(R(ca, cf), true)) :+ IntegerEntry(S(D, ca), cb)) :+ IntegerEntry(U(D, ca, cf), cb)) :+ StringEntry(cB._2, makeString(cB._3, ":"))) | |
559 | 577 | } | |
560 | 578 | } | |
561 | 579 | ||
562 | 580 | ||
563 | - | @Callable(aR) | |
581 | + | func cE (cF,cz,cG,cf,cH,bE,cI) = { | |
582 | + | let aa = valueOrErrorMessage(getString(V(cf)), "You don't have a duck staked") | |
583 | + | func cJ (az,ca) = { | |
584 | + | let ci = value(assetInfo(fromBase58String(ca))) | |
585 | + | let cj = M(ca) | |
586 | + | let ck = valueOrErrorMessage(getInteger(cj), (("NFT " + ci.name) + " is not staked")) | |
587 | + | let cl = valueOrErrorMessage(getString(J(ca)), (("NFT " + ci.name) + " is orphaned")) | |
588 | + | if ((cl != cf)) | |
589 | + | then throw((i + " is not yours")) | |
590 | + | else { | |
591 | + | let cm = split(ci.description, "_") | |
592 | + | let bW = cm[ah] | |
593 | + | if (if ((az._3 != "")) | |
594 | + | then (az._3 != bW) | |
595 | + | else false) | |
596 | + | then throw("Lands should be on the same continent to merge") | |
597 | + | else { | |
598 | + | let I = cm[af] | |
599 | + | let cK = az._1 | |
600 | + | let aW = valueOrErrorMessage(indexOf(cK, I), "You haven't passed all the lands needed") | |
601 | + | let cL = (take(cK, aW) + drop(cK, (aW + 1))) | |
602 | + | let cb = ba(I) | |
603 | + | let cM = (az._2 + valueOrElse(getInteger(S(D, ca)), if (valueOrElse(getBoolean(Q(ca)), false)) | |
604 | + | then cb | |
605 | + | else 0)) | |
606 | + | let cc = valueOrElse(getInteger(N(ca)), 0) | |
607 | + | let cN = { | |
608 | + | let c = I | |
609 | + | if (("S" == c)) | |
610 | + | then 3 | |
611 | + | else if (("M" == c)) | |
612 | + | then 4 | |
613 | + | else if (("L" == c)) | |
614 | + | then 5 | |
615 | + | else if (("XL" == c)) | |
616 | + | then 6 | |
617 | + | else throw("Only S, M, L, XL can merge") | |
618 | + | } | |
619 | + | if ((cc != cN)) | |
620 | + | then throw("All lands should be maxed to merge") | |
621 | + | else { | |
622 | + | let G = cm[ae] | |
623 | + | let aS = aY(cm[ag]) | |
624 | + | let bh = (lastBlock.timestamp - ck) | |
625 | + | if ((0 > bh)) | |
626 | + | then throw(((("Saved timestamp is in future, saved = " + toString(ck)) + ", current = ") + toString(lastBlock.timestamp))) | |
627 | + | else { | |
628 | + | let cp = bZ(ca, cb) | |
629 | + | let ct = bf(split(az._4, "_"), aS, bh, (cb / 25), cp) | |
630 | + | let au = aQ(split(az._6, "_"), aS, (cb / 25), -1) | |
631 | + | $Tuple6(cL, cM, bW, ct, (((((((((((((az._5 :+ DeleteEntry(M(ca))) :+ DeleteEntry(W(i, ca, cf))) :+ DeleteEntry(F(G))) :+ DeleteEntry(H(G, I))) :+ DeleteEntry(J(ca))) :+ DeleteEntry(N(ca))) :+ DeleteEntry(O(ca, cf))) :+ DeleteEntry(Q(ca))) :+ DeleteEntry(R(ca, cf))) :+ DeleteEntry(S(D, ca))) :+ DeleteEntry(U(D, ca, cf))) :+ DeleteEntry(Y(G))) :+ Burn(fromBase58String(ca), 1)), au) | |
632 | + | } | |
633 | + | } | |
634 | + | } | |
635 | + | } | |
636 | + | } | |
637 | + | ||
638 | + | let bA = Z(aa) | |
639 | + | let bR = bz(bA) | |
640 | + | let cO = valueOrElse(getString(ad()), "0_0_0_0_0_0") | |
641 | + | let av = { | |
642 | + | let aB = cH | |
643 | + | let aC = size(aB) | |
644 | + | let aD = $Tuple6(cG, 0, "", bR[am], nil, cO) | |
645 | + | func aE (aF,aG) = if ((aG >= aC)) | |
646 | + | then aF | |
647 | + | else cJ(aF, aB[aG]) | |
648 | + | ||
649 | + | func aH (aF,aG) = if ((aG >= aC)) | |
650 | + | then aF | |
651 | + | else throw("List size exceeds 4") | |
652 | + | ||
653 | + | aH(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4) | |
654 | + | } | |
655 | + | let bv = valueOrErrorMessage(indexOf(C, av._3), ("Unknown continent: " + av._3)) | |
656 | + | let aZ = bt(bl(toBigInt(bE)), bv) | |
657 | + | let bV = valueOrElse(getInteger(E()), 501) | |
658 | + | let cP = toString(bV) | |
659 | + | let bX = Issue(H(cP, cF), makeString([cP, cF, aZ, av._3], "_"), 1, 0, false) | |
660 | + | let K = calculateAssetId(bX) | |
661 | + | let cQ = toBase58String(K) | |
662 | + | let bT = makeString(aI((cI > 0), split(bR[an], "_"), cI), "_") | |
663 | + | $Tuple2(((((((((((((av._5 :+ IntegerEntry(E(), (bV + 1))) :+ bX) :+ StringEntry(F(cP), cQ)) :+ StringEntry(J(cQ), cf)) :+ StringEntry(Y(cP), cf)) :+ IntegerEntry(S(D, cQ), av._2)) :+ IntegerEntry(U(D, cQ, cf), av._2)) :+ IntegerEntry(N(cQ), cz)) :+ IntegerEntry(O(cQ, cf), cz)) :+ StringEntry(bA, makeString([bR[al], av._4, bT, bR[ao]], ":"))) :+ StringEntry(ad(), av._6)) :+ ScriptTransfer(addressFromStringValue(cf), 1, K)), cQ) | |
664 | + | } | |
665 | + | ||
666 | + | ||
667 | + | func cR (cf,cH,bE) = cE("M", 3, "SSSS", cf, cH, bE, 0) | |
668 | + | ||
669 | + | ||
670 | + | func cS (cf,cH,bE,aJ,cw) = { | |
671 | + | let cA = (r * 4) | |
672 | + | if (if (!(aJ)) | |
673 | + | then (cw != cA) | |
674 | + | else false) | |
675 | + | then throw(("Payment attached should be " + toString(cA))) | |
676 | + | else cE("L", 4, "SMM", cf, cH, bE, (q * 4)) | |
677 | + | } | |
678 | + | ||
679 | + | ||
680 | + | func cT (cf,cH,bE,aJ,cw) = { | |
681 | + | let cA = (r * 47) | |
682 | + | if (if (!(aJ)) | |
683 | + | then (cw != cA) | |
684 | + | else false) | |
685 | + | then throw(("Payment attached should be " + toString(cA))) | |
686 | + | else cE("XL", 5, "SSSML", cf, cH, bE, (q * 47)) | |
687 | + | } | |
688 | + | ||
689 | + | ||
690 | + | func cU (cf,cH,bE,aJ,cw) = { | |
691 | + | let cA = (r * 54) | |
692 | + | if (if (!(aJ)) | |
693 | + | then (cw != cA) | |
694 | + | else false) | |
695 | + | then throw(("Payment attached should be " + toString(cA))) | |
696 | + | else cE("XXL", 6, "LXL", cf, cH, bE, (q * 54)) | |
697 | + | } | |
698 | + | ||
699 | + | ||
700 | + | func cV (aJ,cf,cw,cH,bE) = { | |
701 | + | let cW = { | |
702 | + | let c = size(cH) | |
703 | + | if ((4 == c)) | |
704 | + | then cR(cf, cH, bE) | |
705 | + | else if ((3 == c)) | |
706 | + | then cS(cf, cH, bE, aJ, cw) | |
707 | + | else if ((5 == c)) | |
708 | + | then cT(cf, cH, bE, aJ, cw) | |
709 | + | else if ((2 == c)) | |
710 | + | then cU(cf, cH, bE, aJ, cw) | |
711 | + | else throw("Unknown merge") | |
712 | + | } | |
713 | + | cW | |
714 | + | } | |
715 | + | ||
716 | + | ||
717 | + | @Callable(aW) | |
564 | 718 | func stakeLand () = { | |
565 | - | let | |
566 | - | let | |
567 | - | let | |
568 | - | if (( | |
719 | + | let cX = value(aW.payments[0]) | |
720 | + | let K = value(cX.assetId) | |
721 | + | let cY = toString(aW.caller) | |
722 | + | if ((cX.amount != 1)) | |
569 | 723 | then throw((("NFT " + i) + " token should be attached as payment")) | |
570 | 724 | else { | |
571 | - | let | |
572 | - | if (( | |
725 | + | let ci = value(assetInfo(K)) | |
726 | + | if ((ci.issuer != this)) | |
573 | 727 | then throw("Unknown issuer of token") | |
574 | - | else if (!(contains( | |
728 | + | else if (!(contains(ci.name, i))) | |
575 | 729 | then throw((("Only NFT " + i) + " tokens are accepted")) | |
576 | 730 | else { | |
577 | - | let | |
578 | - | let | |
579 | - | then dropRight( | |
580 | - | else if (contains( | |
581 | - | then dropRight( | |
582 | - | else dropRight( | |
583 | - | let | |
584 | - | let | |
585 | - | let | |
586 | - | if (isDefined(getInteger( | |
587 | - | then throw((("NFT " + | |
731 | + | let cZ = drop(ci.name, 4) | |
732 | + | let G = if (contains(cZ, "XXL")) | |
733 | + | then dropRight(cZ, 3) | |
734 | + | else if (contains(cZ, "XL")) | |
735 | + | then dropRight(cZ, 2) | |
736 | + | else dropRight(cZ, 1) | |
737 | + | let da = valueOrErrorMessage(parseInt(G), ("Cannot parse land number from " + ci.name)) | |
738 | + | let ca = toBase58String(K) | |
739 | + | let cj = M(ca) | |
740 | + | if (isDefined(getInteger(cj))) | |
741 | + | then throw((("NFT " + ci.name) + " is already staked")) | |
588 | 742 | else { | |
589 | - | let | |
590 | - | let | |
591 | - | let | |
592 | - | [IntegerEntry( | |
743 | + | let cm = split(ci.description, "_") | |
744 | + | let aS = aY(cm[ag]) | |
745 | + | let au = aX(aS, (ba(cm[af]) / 25), 1) | |
746 | + | [IntegerEntry(cj, lastBlock.timestamp), IntegerEntry(W(i, ca, cY), lastBlock.timestamp), StringEntry(J(ca), cY), StringEntry(Y(G), cY), StringEntry(ad(), au)] | |
593 | 747 | } | |
594 | 748 | } | |
595 | 749 | } | |
596 | 750 | } | |
597 | 751 | ||
598 | 752 | ||
599 | 753 | ||
600 | - | @Callable( | |
601 | - | func unstakeLand ( | |
754 | + | @Callable(aW) | |
755 | + | func unstakeLand (db) = if ((size(aW.payments) != 0)) | |
602 | 756 | then throw("unstake doesn't require any payments") | |
603 | 757 | else { | |
604 | - | let | |
605 | - | let | |
606 | - | let | |
607 | - | let | |
608 | - | let | |
609 | - | let | |
610 | - | [ScriptTransfer( | |
758 | + | let cf = toString(aW.caller) | |
759 | + | let co = ce(cf) | |
760 | + | let aS = aY(co._3[ag]) | |
761 | + | let cb = ba(co._3[af]) | |
762 | + | let au = aX(aS, (cb / 25), -1) | |
763 | + | let cB = cu(cf, co._2, cb) | |
764 | + | [ScriptTransfer(aW.caller, 1, fromBase58String(co._2)), DeleteEntry(M(co._2)), DeleteEntry(W(i, co._2, cf)), StringEntry(ad(), au), StringEntry(cB._2, makeString(cB._3, ":"))] | |
611 | 765 | } | |
612 | 766 | ||
613 | 767 | ||
614 | 768 | ||
615 | - | @Callable( | |
769 | + | @Callable(aW) | |
616 | 770 | func stakeDuck () = { | |
617 | - | let | |
618 | - | let | |
619 | - | let | |
620 | - | if (( | |
771 | + | let cX = value(aW.payments[0]) | |
772 | + | let K = value(cX.assetId) | |
773 | + | let cY = toString(aW.caller) | |
774 | + | if ((cX.amount != 1)) | |
621 | 775 | then throw((("NFT " + j) + " token should be attached as payment")) | |
622 | 776 | else { | |
623 | - | let | |
624 | - | if (if (( | |
625 | - | then ( | |
777 | + | let ci = value(assetInfo(K)) | |
778 | + | if (if ((ci.issuer != d)) | |
779 | + | then (ci.issuer != e) | |
626 | 780 | else false) | |
627 | 781 | then throw((("Unknown issuer of " + j) + " token")) | |
628 | - | else if (!(contains( | |
782 | + | else if (!(contains(ci.name, j))) | |
629 | 783 | then throw((("Only NFT " + j) + " tokens are accepted")) | |
630 | 784 | else { | |
631 | - | let | |
632 | - | let | |
633 | - | if (isDefined(getInteger( | |
634 | - | then throw((("NFT " + | |
635 | - | else if (isDefined(getString( | |
636 | - | then throw(("You already staked one duck: " + | |
785 | + | let dc = toBase58String(K) | |
786 | + | let cj = M(dc) | |
787 | + | if (isDefined(getInteger(cj))) | |
788 | + | then throw((("NFT " + ci.name) + " is already staked")) | |
789 | + | else if (isDefined(getString(V(cY)))) | |
790 | + | then throw(("You already staked one duck: " + ci.name)) | |
637 | 791 | else { | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
642 | - | let | |
643 | - | let | |
644 | - | ([IntegerEntry( | |
792 | + | let dd = ab(dc) | |
793 | + | let de = getString(dd) | |
794 | + | let bP = ac(dc) | |
795 | + | let df = getInteger(bP) | |
796 | + | let bA = Z(dc) | |
797 | + | let dg = getString(bA) | |
798 | + | ([IntegerEntry(cj, lastBlock.timestamp), IntegerEntry(W(j, toBase58String(K), cY), lastBlock.timestamp), StringEntry(L(dc), cY), StringEntry(V(cY), dc)] ++ (if (isDefined(de)) | |
645 | 799 | then nil | |
646 | - | else ([StringEntry( | |
800 | + | else ([StringEntry(dd, k)] ++ (if (isDefined(df)) | |
647 | 801 | then nil | |
648 | - | else ([IntegerEntry( | |
802 | + | else ([IntegerEntry(bP, 100)] ++ (if (isDefined(dg)) | |
649 | 803 | then nil | |
650 | - | else [StringEntry( | |
804 | + | else [StringEntry(bA, "0:0_0_0_0_0_0:0_0_0_0_0_0:")])))))) | |
651 | 805 | } | |
652 | 806 | } | |
653 | 807 | } | |
654 | 808 | } | |
655 | 809 | ||
656 | 810 | ||
657 | 811 | ||
658 | - | @Callable( | |
659 | - | func unstakeDuck ( | |
812 | + | @Callable(aW) | |
813 | + | func unstakeDuck (dc) = if ((size(aW.payments) != 0)) | |
660 | 814 | then throw("unstake doesn't require any payments") | |
661 | 815 | else { | |
662 | - | let | |
663 | - | let | |
664 | - | let | |
665 | - | if (if (( | |
666 | - | then ( | |
816 | + | let K = fromBase58String(dc) | |
817 | + | let cY = toString(aW.caller) | |
818 | + | let ci = value(assetInfo(K)) | |
819 | + | if (if ((ci.issuer != d)) | |
820 | + | then (ci.issuer != e) | |
667 | 821 | else false) | |
668 | 822 | then throw((("Unknown issuer of " + j) + " token")) | |
669 | - | else if (!(contains( | |
823 | + | else if (!(contains(ci.name, j))) | |
670 | 824 | then throw((("Only NFT " + j) + " tokens can be unstaked")) | |
671 | 825 | else { | |
672 | - | let | |
673 | - | if (!(isDefined( | |
674 | - | then throw((("NFT " + | |
675 | - | else if (!(isDefined( | |
676 | - | then throw((("The duck " + | |
826 | + | let cj = M(toBase58String(K)) | |
827 | + | if (!(isDefined(cj))) | |
828 | + | then throw((("NFT " + ci.name) + " is not staked")) | |
829 | + | else if (!(isDefined(V(cY)))) | |
830 | + | then throw((("The duck " + ci.name) + " is not staked")) | |
677 | 831 | else { | |
678 | - | let | |
679 | - | if (( | |
832 | + | let cl = valueOrErrorMessage(getString(L(toBase58String(K))), (("NFT " + ci.name) + " is orphaned")) | |
833 | + | if ((cl != cY)) | |
680 | 834 | then throw("Staked NFT is not yours") | |
681 | - | else [ScriptTransfer( | |
835 | + | else [ScriptTransfer(aW.caller, 1, K), DeleteEntry(cj), DeleteEntry(ab(dc)), DeleteEntry(L(dc)), DeleteEntry(W(j, dc, cY)), DeleteEntry(V(cY))] | |
682 | 836 | } | |
683 | 837 | } | |
684 | 838 | } | |
685 | 839 | ||
686 | 840 | ||
687 | 841 | ||
688 | - | @Callable( | |
689 | - | func claimRes ( | |
842 | + | @Callable(aW) | |
843 | + | func claimRes (bd,db) = if ((size(aW.payments) != 0)) | |
690 | 844 | then throw("claimRes doesn't require any payments") | |
691 | 845 | else { | |
692 | - | let | |
693 | - | let | |
694 | - | $Tuple2(( | |
846 | + | let cf = toString(aW.originCaller) | |
847 | + | let aP = cn(cf, bd) | |
848 | + | $Tuple2((aP._1 :+ StringEntry(aP._2, makeString(aP._3, ":"))), aP._3[am]) | |
695 | 849 | } | |
696 | 850 | ||
697 | 851 | ||
698 | 852 | ||
699 | - | @Callable( | |
700 | - | func flight ( | |
853 | + | @Callable(aW) | |
854 | + | func flight (bF,bG) = if (!(sigVerify_8Kb(bF, bG, g))) | |
701 | 855 | then throw("signature does not match") | |
702 | - | else if ((size( | |
856 | + | else if ((size(aW.payments) != 0)) | |
703 | 857 | then throw("flight doesn't require any payments") | |
704 | 858 | else { | |
705 | - | let | |
706 | - | let | |
707 | - | let | |
708 | - | let | |
709 | - | let | |
710 | - | let | |
711 | - | let | |
712 | - | if (if (( | |
859 | + | let bH = split(toUtf8String(bF), ";") | |
860 | + | let bI = split(split(bH[0], "|")[0], "_") | |
861 | + | let bJ = parseIntValue(bI[0]) | |
862 | + | let bK = parseIntValue(bI[1]) | |
863 | + | let dh = split(bH[1], ":") | |
864 | + | let di = dh[0] | |
865 | + | let bN = parseIntValue(dh[1]) | |
866 | + | if (if ((bN > (lastBlock.timestamp + o))) | |
713 | 867 | then true | |
714 | - | else ((lastBlock.timestamp - o) > | |
868 | + | else ((lastBlock.timestamp - o) > bN)) | |
715 | 869 | then throw("signature outdated") | |
716 | 870 | else { | |
717 | - | let | |
718 | - | let | |
719 | - | let | |
720 | - | if (( | |
721 | - | then throw(((("oldHealth=" + toString(valueOrElse(getInteger( | |
722 | - | else if ((0 >= | |
871 | + | let aa = valueOrErrorMessage(getString(V(toString(aW.caller))), "You don't have a duck staked") | |
872 | + | let bP = ac(aa) | |
873 | + | let bQ = valueOrElse(getInteger(bP), 100) | |
874 | + | if ((bQ != bJ)) | |
875 | + | then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bP), 100))) + " from state does not match one from flight log=") + toString(bJ))) | |
876 | + | else if ((0 >= bJ)) | |
723 | 877 | then throw("You can't fly with zero health") | |
724 | 878 | else { | |
725 | - | let | |
726 | - | let | |
727 | - | if (( | |
879 | + | let dd = ab(aa) | |
880 | + | let cg = valueOrElse(getString(dd), k) | |
881 | + | if ((di == cg)) | |
728 | 882 | then throw("You can't fly to the same location") | |
729 | - | else $Tuple2([StringEntry( | |
730 | - | then | |
731 | - | else | |
883 | + | else $Tuple2([StringEntry(dd, if ((bK > 0)) | |
884 | + | then di | |
885 | + | else cg), IntegerEntry(bP, bK)], unit) | |
732 | 886 | } | |
733 | 887 | } | |
734 | 888 | } | |
735 | 889 | ||
736 | 890 | ||
737 | 891 | ||
738 | - | @Callable( | |
739 | - | func setHealth ( | |
892 | + | @Callable(aW) | |
893 | + | func setHealth (df,aa) = if (if ((0 > df)) | |
740 | 894 | then true | |
741 | - | else ( | |
895 | + | else (df > 100)) | |
742 | 896 | then throw("HP should be within 0..100") | |
743 | - | else [IntegerEntry( | |
897 | + | else [IntegerEntry(ac(aa), df)] | |
744 | 898 | ||
745 | 899 | ||
746 | 900 | ||
747 | - | @Callable( | |
748 | - | func heal ( | |
901 | + | @Callable(aW) | |
902 | + | func heal (dj,bd) = if (if ((0 > dj)) | |
749 | 903 | then true | |
750 | - | else ( | |
751 | - | then throw(("Unknown material: " + toString( | |
752 | - | else if ((0 >= | |
753 | - | then throw(("Amount should be positive! " + toString( | |
904 | + | else (dj >= l)) | |
905 | + | then throw(("Unknown material: " + toString(dj))) | |
906 | + | else if ((0 >= bd)) | |
907 | + | then throw(("Amount should be positive! " + toString(bd))) | |
754 | 908 | else { | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | if (( | |
909 | + | let aa = valueOrErrorMessage(getString(V(toString(aW.caller))), "You don't have a duck staked") | |
910 | + | let bP = ac(aa) | |
911 | + | let dk = valueOrElse(getInteger(bP), 100) | |
912 | + | if ((dk >= 100)) | |
759 | 913 | then throw("HP should be < 100 to heal") | |
760 | 914 | else { | |
761 | - | let | |
762 | - | let | |
763 | - | let | |
764 | - | let | |
765 | - | let | |
766 | - | let | |
767 | - | if (( | |
768 | - | then throw(((((("You need " + toString( | |
915 | + | let bA = Z(aa) | |
916 | + | let bR = bz(bA) | |
917 | + | let bS = split(bR[an], "_") | |
918 | + | let dl = parseIntValue(bS[dj]) | |
919 | + | let dm = min([(bd / h), (100 - dk)]) | |
920 | + | let dn = (dm * h) | |
921 | + | if ((dn > dl)) | |
922 | + | then throw(((((("You need " + toString(dn)) + " of ") + B[dj]) + " to heal, but you backpack contains ") + toString(dl))) | |
769 | 923 | else { | |
770 | - | let | |
771 | - | [IntegerEntry( | |
924 | + | let bT = bb(bS, dj, dn) | |
925 | + | [IntegerEntry(bP, (dk + dm)), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))] | |
772 | 926 | } | |
773 | 927 | } | |
774 | 928 | } | |
775 | 929 | ||
776 | 930 | ||
777 | 931 | ||
778 | - | @Callable( | |
779 | - | func updateBackpack ( | |
932 | + | @Callable(aW) | |
933 | + | func updateBackpack (aa,do) = if ((aW.caller != f)) | |
780 | 934 | then throw("permission denied") | |
781 | - | else $Tuple2([StringEntry( | |
935 | + | else $Tuple2([StringEntry(Z(aa), do)], do) | |
782 | 936 | ||
783 | 937 | ||
784 | 938 | ||
785 | - | @Callable( | |
786 | - | func expeditionBuy ( | |
939 | + | @Callable(aW) | |
940 | + | func expeditionBuy (bF,bG) = if ((size(aW.payments) != 1)) | |
787 | 941 | then throw("Exactly one payment required") | |
788 | 942 | else { | |
789 | - | let | |
790 | - | if (( | |
943 | + | let cX = value(aW.payments[0]) | |
944 | + | if ((cX.assetId != b)) | |
791 | 945 | then throw("Allowed USDN payment only!") | |
792 | - | else if (( | |
946 | + | else if ((cX.amount != t)) | |
793 | 947 | then throw(("Payment attached should be " + toString(t))) | |
794 | - | else bq(false, aR.caller, aR.transactionId, bt, bu) | |
948 | + | else { | |
949 | + | let aP = bC(false, aW.caller, aW.transactionId, bF, bG) | |
950 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
951 | + | } | |
795 | 952 | } | |
796 | 953 | ||
797 | 954 | ||
798 | 955 | ||
799 | - | @Callable( | |
800 | - | func expedition ( | |
956 | + | @Callable(aW) | |
957 | + | func expedition (bF,bG) = if ((size(aW.payments) != 0)) | |
801 | 958 | then throw("expedition doesn't require any payments") | |
802 | - | else | |
959 | + | else bC(true, aW.caller, aW.transactionId, bF, bG) | |
803 | 960 | ||
804 | 961 | ||
805 | 962 | ||
806 | - | @Callable( | |
807 | - | func upgradeInfra ( | |
963 | + | @Callable(aW) | |
964 | + | func upgradeInfra (dp) = if ((size(aW.payments) != 0)) | |
808 | 965 | then throw("Infrastructure upgrade doesn't require any payments") | |
809 | - | else | |
966 | + | else cv(true, aW.caller, 0) | |
810 | 967 | ||
811 | 968 | ||
812 | 969 | ||
813 | - | @Callable( | |
814 | - | func upgradeInfraUsdn ( | |
970 | + | @Callable(aW) | |
971 | + | func upgradeInfraUsdn (dp) = if ((size(aW.payments) != 1)) | |
815 | 972 | then throw("Exactly one payment required") | |
816 | 973 | else { | |
817 | - | let | |
818 | - | if (( | |
974 | + | let cX = value(aW.payments[0]) | |
975 | + | if ((cX.assetId != b)) | |
819 | 976 | then throw("Allowed USDN payment only!") | |
820 | - | else cn(false, aR.caller, cw.amount) | |
977 | + | else { | |
978 | + | let aP = cv(false, aW.caller, cX.amount) | |
979 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
980 | + | } | |
821 | 981 | } | |
822 | 982 | ||
823 | 983 | ||
824 | 984 | ||
825 | - | @Callable( | |
826 | - | func activateArtifact ( | |
985 | + | @Callable(aW) | |
986 | + | func activateArtifact (dq) = if ((size(aW.payments) != 0)) | |
827 | 987 | then throw("Artifact activation doesn't require any payments") | |
828 | 988 | else { | |
829 | - | let | |
830 | - | let c = | |
989 | + | let aP = { | |
990 | + | let c = dq | |
831 | 991 | if (("PRESALE" == c)) | |
832 | - | then | |
992 | + | then cC(toString(aW.caller)) | |
833 | 993 | else throw("Unknown artifact") | |
834 | 994 | } | |
835 | - | aL | |
995 | + | aP | |
996 | + | } | |
997 | + | ||
998 | + | ||
999 | + | ||
1000 | + | @Callable(aW) | |
1001 | + | func mergeLands (cH) = if ((size(aW.payments) != 0)) | |
1002 | + | then throw("Lands merging doesn't require any payments") | |
1003 | + | else cV(true, toString(aW.caller), 0, cH, aW.transactionId) | |
1004 | + | ||
1005 | + | ||
1006 | + | ||
1007 | + | @Callable(aW) | |
1008 | + | func mergeLandsUsdn (cH) = if ((size(aW.payments) != 1)) | |
1009 | + | then throw("Exactly one payment required") | |
1010 | + | else { | |
1011 | + | let cX = value(aW.payments[0]) | |
1012 | + | if ((cX.assetId != b)) | |
1013 | + | then throw("Allowed USDN payment only!") | |
1014 | + | else { | |
1015 | + | let aP = cV(false, toString(aW.caller), cX.amount, cH, aW.transactionId) | |
1016 | + | $Tuple2((aP._1 :+ ScriptTransfer(f, cX.amount, b)), aP._2) | |
1017 | + | } | |
836 | 1018 | } | |
837 | 1019 | ||
838 | 1020 |
github/deemru/w8io/026f985 277.34 ms ◑