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:
OldNewDifferences
113113
114114 let C = ["Asia", "Europe", "Americas", "Oceania", "Africa"]
115115
116-func D () = "nextLandNum"
116+let D = "PRESALE"
117+
118+func E () = "nextLandNum"
117119
118120
119-func E (F) = ("landToAsset_" + F)
121+func F (G) = ("landToAsset_" + G)
120122
121123
122-func G (F,H) = ((i + F) + H)
124+func H (G,I) = ((i + G) + I)
123125
124126
125-func I (J) = ("nftOwner_" + J)
127+func J (K) = ("nftOwner_" + K)
126128
127129
128-func K (J) = ("duckOwner_" + J)
130+func L (K) = ("duckOwner_" + K)
129131
130132
131-func L (J) = ("stakedTime_" + J)
133+func M (K) = ("stakedTime_" + K)
132134
133135
134-func M (J) = ("infraLevel_" + J)
136+func N (K) = ("infraLevel_" + K)
135137
136138
137-func N (J,O) = ((("infraLevelByAssetIdAndOwner_" + J) + "_") + O)
139+func O (K,P) = ((("infraLevelByAssetIdAndOwner_" + K) + "_") + P)
138140
139141
140-func P (J) = ("presaleArtActivated_" + J)
142+func Q (K) = ("presaleArtActivated_" + K)
141143
142144
143-func Q (J,O) = ((("presaleArtActivatedByAssetIdAndOwner_" + J) + "_") + O)
145+func R (K,P) = ((("presaleArtActivatedByAssetIdAndOwner_" + K) + "_") + P)
144146
145147
146-func R (O) = ("stakedDuckByOwner_" + O)
148+func S (T,K) = makeString(["landArtStatus", T, K], "_")
147149
148150
149-func S (T,J,O) = ((((("stakedTimeByTypeAssetIdAndOwner_" + T) + "_") + J) + "_") + O)
151+func U (T,K,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", T, K, P], "_")
150152
151153
152-func U (F) = ("landOwner_" + F)
154+func V (P) = ("stakedDuckByOwner_" + P)
153155
154156
155-func V (W) = ("backPack_" + W)
157+func W (X,K,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + X) + "_") + K) + "_") + P)
156158
157159
158-func X (W) = ("duckLocation_" + W)
160+func Y (G) = ("landOwner_" + G)
159161
160162
161-func Y (W) = ("duckHealth_" + W)
163+func Z (aa) = ("backPack_" + aa)
162164
163165
164-func Z () = "resTypesProportions"
166+func ab (aa) = ("duckLocation_" + aa)
165167
166168
167-let aa = 0
169+func ac (aa) = ("duckHealth_" + aa)
168170
169-let ab = 1
170171
171-let ac = 2
172+func ad () = "resTypesProportions"
172173
173-let ad = 3
174174
175175 let ae = 0
176176
178178
179179 let ag = 2
180180
181-let ah = 0
181+let ah = 3
182182
183-let ai = 1
183+let ai = 0
184184
185-let aj = 2
185+let aj = 1
186186
187-let ak = 3
187+let ak = 2
188188
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
191199 if ($isInstanceOf(c, "String"))
192200 then {
193- let an = c
194- an
201+ let ar = c
202+ ar
195203 }
196204 else throw("fail to cast into String")
197205 }
198206
199207
200-func ao (ap) = {
201- let aq = split(value(getString(Z())), "_")
202- if ((size(aq) != l))
208+func as (at) = {
209+ let au = split(value(getString(ad())), "_")
210+ if ((size(au) != l))
203211 then throw("Wrong proportions data")
204212 else {
205- let ar = [parseIntValue(aq[0]), parseIntValue(aq[1]), parseIntValue(aq[2]), parseIntValue(aq[3]), parseIntValue(aq[4]), parseIntValue(aq[5])]
206- let as = (((((ar[0] + ar[1]) + ar[2]) + ar[3]) + ar[4]) + ar[5])
207- if ((0 >= as))
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))
208216 then throw("No lands staked")
209217 else {
210- let at = fraction(ap, u, as)
211- func au (av,aw) = (av :+ fraction(aw, at, u))
218+ let ax = fraction(at, u, aw)
219+ func ay (az,aA) = (az :+ fraction(aA, ax, u))
212220
213- let ax = ar
214- let ay = size(ax)
215- let az = nil
216- func aA (aB,aC) = if ((aC >= ay))
217- then aB
218- else au(aB, ax[aC])
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])
219227
220- func aD (aB,aC) = if ((aC >= ay))
221- then aB
228+ func aH (aF,aG) = if ((aG >= aC))
229+ then aF
222230 else throw("List size exceeds 6")
223231
224- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
232+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
225233 }
226234 }
227235 }
228236
229237
230-func aE (aF,aG,aH) = {
231- let aI = ao(aH)
232- func aJ (av,aK) = {
233- let aL = (parseIntValue(aG[aK]) - aI[aK])
234- if ((0 > aL))
235- then throw(((((("Not enough material idx=" + toString(aK)) + ", you have ") + aG[aK]) + ", but need ") + toString(aI[aK])))
236- else (av :+ toString(aL))
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))
237245 }
238246
239- if (aF)
247+ if (aJ)
240248 then {
241- let ax = [0, 1, 2, 3, 4, 5]
242- let ay = size(ax)
243- let az = nil
244- func aA (aB,aC) = if ((aC >= ay))
245- then aB
246- else aJ(aB, ax[aC])
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])
247255
248- func aD (aB,aC) = if ((aC >= ay))
249- then aB
256+ func aH (aF,aG) = if ((aG >= aC))
257+ then aF
250258 else throw("List size exceeds 6")
251259
252- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
260+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
253261 }
254- else aG
262+ else aK
255263 }
256264
257265
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+ }
269275
270- let ar = {
271- let ax = [0, 1, 2, 3, 4, 5]
272- let ay = size(ax)
273- let az = nil
274- func aA (aB,aC) = if ((aC >= ay))
275- then aB
276- else aQ(aB, ax[aC])
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])
277283
278- func aD (aB,aC) = if ((aC >= ay))
279- then aB
280- else throw("List size exceeds 6")
284+ func aH (aF,aG) = if ((aG >= aC))
285+ then aF
286+ else throw("List size exceeds 6")
281287
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)
285289 }
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)
286297 }
287298
288299
289-func aS (aT) = [(size(split(aT, "A")) - 1), (size(split(aT, "B")) - 1), (size(split(aT, "C")) - 1), (size(split(aT, "D")) - 1), (size(split(aT, "E")) - 1), (size(split(aT, "F")) - 1)]
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)]
290301
291302
292-func aU (H) = {
293- let c = H
303+func ba (I) = {
304+ let c = I
294305 if (("S" == c))
295306 then 25
296307 else if (("M" == c))
305316 }
306317
307318
308-func aV (aW,aK,aX) = {
309- func aY (av,aR) = (av :+ (if ((aR == aK))
310- then toString((parseIntValue(aW[aR]) - aX))
311- else aW[aR]))
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]))
312323
313- let ar = {
314- let ax = [0, 1, 2, 3, 4, 5]
315- let ay = size(ax)
316- let az = nil
317- func aA (aB,aC) = if ((aC >= ay))
318- then aB
319- else aY(aB, ax[aC])
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])
320331
321- func aD (aB,aC) = if ((aC >= ay))
322- then aB
332+ func aH (aF,aG) = if ((aG >= aC))
333+ then aF
323334 else throw("List size exceeds 6")
324335
325- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
336+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
326337 }
327- makeString(ar, "_")
338+ makeString(av, "_")
328339 }
329340
330341
331-func aZ (ba,aN,bb,aO,bc) = {
332- func bd (av,aR) = {
333- let be = ((fraction(bb, bc, n) * aN[aR]) * aO)
334- (av :+ toString((parseIntValue(ba[aR]) + be)))
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)))
335346 }
336347
337- let ar = {
338- let ax = [0, 1, 2, 3, 4, 5]
339- let ay = size(ax)
340- let az = nil
341- func aA (aB,aC) = if ((aC >= ay))
342- then aB
343- else bd(aB, ax[aC])
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])
344355
345- func aD (aB,aC) = if ((aC >= ay))
346- then aB
356+ func aH (aF,aG) = if ((aG >= aC))
357+ then aF
347358 else throw("List size exceeds 6")
348359
349- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
360+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
350361 }
351- makeString(ar, "_")
362+ makeString(av, "_")
352363 }
353364
354365
355-func bf (bg) = if ((bg >= toBigInt(0)))
356- then bg
357- else -(bg)
366+func bl (bm) = if ((bm >= toBigInt(0)))
367+ then bm
368+ else -(bm)
358369
359370
360-let bh = [[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]]
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]]
361372
362-func bi (bj,bk) = {
363- let bl = toInt((bj % w))
364- let bm = if ((bk[0] > bl))
373+func bo (bp,bq) = {
374+ let br = toInt((bp % w))
375+ let bs = if ((bq[0] > br))
365376 then "A"
366- else if ((bk[1] > bl))
377+ else if ((bq[1] > br))
367378 then "B"
368- else if ((bk[2] > bl))
379+ else if ((bq[2] > br))
369380 then "C"
370- else if ((bk[3] > bl))
381+ else if ((bq[3] > br))
371382 then "D"
372- else if ((bk[4] > bl))
383+ else if ((bq[4] > br))
373384 then "E"
374385 else "F"
375- bm
386+ bs
376387 }
377388
378389
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
386409 }
387410
388411
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)))
390423 then throw("signature does not match")
391424 else {
392- let bv = split(toUtf8String(bt), ";")
393- let bw = split(split(bv[0], "|")[0], "_")
394- let bx = parseIntValue(bw[0])
395- let by = parseIntValue(bw[1])
396- let bz = split(bv[1], ":")
397- let bA = split(bz[0], "_")
398- if ((bA[1] != "E"))
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"))
399432 then throw("expedition target location type should be E")
400433 else {
401- let bB = parseIntValue(bz[1])
402- if (if ((bB > (lastBlock.timestamp + o)))
434+ let bN = parseIntValue(bL[1])
435+ if (if ((bN > (lastBlock.timestamp + o)))
403436 then true
404- else ((lastBlock.timestamp - o) > bB))
437+ else ((lastBlock.timestamp - o) > bN))
405438 then throw("signature outdated")
406439 else {
407- let bC = toString(br)
408- let W = valueOrErrorMessage(getString(R(bC)), "You don't have a duck staked")
409- let bD = Y(W)
410- let bE = valueOrElse(getInteger(bD), 100)
411- if ((bE != bx))
412- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bD), 100))) + " from state does not match one from flight log=") + toString(bx)))
413- else if ((0 >= bx))
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))
414447 then throw("You can't fly with zero health")
415- else if ((0 >= by))
416- then $Tuple2(((if (!(aF))
417- then [ScriptTransfer(br, t, b)]
418- else nil) :+ IntegerEntry(bD, 0)), "")
448+ else if ((0 >= bK))
449+ then $Tuple2(((if (!(aJ))
450+ then [ScriptTransfer(bD, t, b)]
451+ else nil) :+ IntegerEntry(bP, 0)), "")
419452 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)
450467 }
451468 }
452469 }
453470 }
454471
455472
456-func bR (bS) = {
457- let bT = valueOrElse(getInteger(M(bS)), 0)
458- let bU = if (valueOrElse(getBoolean(P(bS)), false))
459- then 3
460- else 0
461- ((m + fraction(m, bT, 4)) + fraction(m, bU, 20))
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)))
462479 }
463480
464481
465-func bV (bW) = {
466- let W = valueOrErrorMessage(getString(R(bW)), "You don't have a duck staked")
467- let bX = valueOrElse(getString(X(W)), k)
468- let bY = split(value(bX), "_")
469- if ((bY[af] != "L"))
470- then throw((("Duck location type is " + bY[af]) + ", but should be L"))
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"))
471488 else {
472- let bS = bY[ag]
473- let bZ = value(assetInfo(fromBase58String(bS)))
474- let ca = L(bS)
475- let cb = valueOrErrorMessage(getInteger(ca), (("NFT " + bZ.name) + " is not staked"))
476- let cc = valueOrErrorMessage(getString(I(bS)), (("NFT " + bZ.name) + " is orphaned"))
477- if ((cc != bW))
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))
478495 then throw((i + " is not yours"))
479496 else {
480- let cd = split(bZ.description, "_")
481- $Tuple4(W, bS, cd, cb)
497+ let cm = split(ci.description, "_")
498+ $Tuple4(aa, ca, cm, ck)
482499 }
483500 }
484501 }
485502
486503
487-func ce (bW,aX) = {
488- let cf = bV(bW)
489- let H = cf._3[ab]
490- let aN = aS(cf._3[ac])
491- let bb = (lastBlock.timestamp - cf._4)
492- if ((0 > bb))
493- then throw(((("Saved timestamp is in future, saved = " + toString(cf._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
494511 else {
495- let cg = aU(H)
496- let ch = bR(cf._2)
497- let ci = fraction(bb, (ch * cg), n)
498- if ((aX > ci))
499- then throw(((("Not enough resources, available = " + toString(ci)) + ", requested = ") + toString(aX)))
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)))
500517 else {
501- let cj = fraction((ci - aX), n, (ch * cg))
502- let ck = (lastBlock.timestamp - cj)
503- let bo = V(cf._1)
504- let bF = bn(bo)
505- let ba = split(bF[ai], "_")
506- let cl = aZ(ba, aN, (bb - cj), (cg / 25), ch)
507- $Tuple3([IntegerEntry(L(cf._2), ck), IntegerEntry(S(i, cf._2, bW), ck)], bo, [bF[ah], cl, bF[aj], bF[ak]])
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]])
508525 }
509526 }
510527 }
511528
512529
513-func cm (bW,bS,cg) = {
514- let ca = L(bS)
515- let cb = value(getInteger(ca))
516- let ci = (fraction((lastBlock.timestamp - cb), bR(bS), n) * cg)
517- ce(bW, ci)
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)
518535 }
519536
520537
521-func cn (aF,br,co) = {
522- let bW = toString(br)
523- let cf = bV(bW)
524- let cg = aU(cf._3[ab])
525- let cp = M(cf._2)
526- let cq = valueOrElse(getInteger(cp), 0)
527- if ((cq >= 3))
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))
528545 then throw("Currently max infrastructure level = 3")
529546 else {
530- let cr = (cq + 1)
531- let cs = fraction(r, (cg * cr), 25)
532- if (if (!(aF))
533- then (co != cs)
547+ let cz = (cy + 1)
548+ let cA = fraction(r, (cb * cz), 25)
549+ if (if (!(aJ))
550+ then (cw != cA)
534551 else false)
535- then throw(("Payment attached should be " + toString(cs)))
552+ then throw(("Payment attached should be " + toString(cA)))
536553 else {
537- let bo = V(cf._1)
538- let bF = bn(bo)
539- let bG = split(bF[aj], "_")
540- let bH = makeString(aE(aF, bG, fraction(q, (cg * cr), 25)), "_")
541- let ct = cm(bW, cf._2, cg)
542- $Tuple2(([IntegerEntry(cp, cr), IntegerEntry(N(cf._2, bW), cr), StringEntry(bo, makeString([bF[ah], ct._3[ai], bH, bF[ak]], ":"))] ++ ct._1), cr)
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)
543560 }
544561 }
545562 }
546563
547564
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))
552570 then throw("Presale artifact is already activated")
553- else if ((parseIntValue(cf._3[aa]) > 500))
554- then throw((((i + " ") + cf._2) + " is not eligible for presale artifact"))
571+ else if ((parseIntValue(co._3[ae]) > 500))
572+ then throw((((i + " ") + ca) + " is not eligible for presale artifact"))
555573 else {
556- let cg = aU(cf._3[ab])
557- let ct = cm(bW, cf._2, cg)
558- (((ct._1 :+ BooleanEntry(P(cf._2), true)) :+ BooleanEntry(Q(cf._2, bW), true)) :+ StringEntry(ct._2, makeString(ct._3, ":")))
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, ":")))
559577 }
560578 }
561579
562580
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)
564718 func stakeLand () = {
565- let cw = value(aR.payments[0])
566- let J = value(cw.assetId)
567- let cx = toString(aR.caller)
568- if ((cw.amount != 1))
719+ let cX = value(aW.payments[0])
720+ let K = value(cX.assetId)
721+ let cY = toString(aW.caller)
722+ if ((cX.amount != 1))
569723 then throw((("NFT " + i) + " token should be attached as payment"))
570724 else {
571- let bZ = value(assetInfo(J))
572- if ((bZ.issuer != this))
725+ let ci = value(assetInfo(K))
726+ if ((ci.issuer != this))
573727 then throw("Unknown issuer of token")
574- else if (!(contains(bZ.name, i)))
728+ else if (!(contains(ci.name, i)))
575729 then throw((("Only NFT " + i) + " tokens are accepted"))
576730 else {
577- let cy = drop(bZ.name, 4)
578- let F = if (contains(cy, "XXL"))
579- then dropRight(cy, 3)
580- else if (contains(cy, "XL"))
581- then dropRight(cy, 2)
582- else dropRight(cy, 1)
583- let cz = valueOrErrorMessage(parseInt(F), ("Cannot parse land number from " + bZ.name))
584- let bS = toBase58String(J)
585- let ca = L(bS)
586- if (isDefined(getInteger(ca)))
587- then throw((("NFT " + bZ.name) + " is already staked"))
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"))
588742 else {
589- let cd = split(bZ.description, "_")
590- let aN = aS(cd[ac])
591- let aq = aM(aN, (aU(cd[ab]) / 25), 1)
592-[IntegerEntry(ca, lastBlock.timestamp), IntegerEntry(S(i, bS, cx), lastBlock.timestamp), StringEntry(I(bS), cx), StringEntry(U(F), cx), StringEntry(Z(), aq)]
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)]
593747 }
594748 }
595749 }
597751
598752
599753
600-@Callable(aR)
601-func unstakeLand (cA) = if ((size(aR.payments) != 0))
754+@Callable(aW)
755+func unstakeLand (db) = if ((size(aW.payments) != 0))
602756 then throw("unstake doesn't require any payments")
603757 else {
604- let bW = toString(aR.caller)
605- let cf = bV(bW)
606- let aN = aS(cf._3[ac])
607- let cg = aU(cf._3[ab])
608- let aq = aM(aN, (cg / 25), -1)
609- let ct = cm(bW, cf._2, cg)
610-[ScriptTransfer(aR.caller, 1, fromBase58String(cf._2)), DeleteEntry(L(cf._2)), DeleteEntry(S(i, cf._2, bW)), StringEntry(Z(), aq), StringEntry(ct._2, makeString(ct._3, ":"))]
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, ":"))]
611765 }
612766
613767
614768
615-@Callable(aR)
769+@Callable(aW)
616770 func stakeDuck () = {
617- let cw = value(aR.payments[0])
618- let J = value(cw.assetId)
619- let cx = toString(aR.caller)
620- if ((cw.amount != 1))
771+ let cX = value(aW.payments[0])
772+ let K = value(cX.assetId)
773+ let cY = toString(aW.caller)
774+ if ((cX.amount != 1))
621775 then throw((("NFT " + j) + " token should be attached as payment"))
622776 else {
623- let bZ = value(assetInfo(J))
624- if (if ((bZ.issuer != d))
625- then (bZ.issuer != e)
777+ let ci = value(assetInfo(K))
778+ if (if ((ci.issuer != d))
779+ then (ci.issuer != e)
626780 else false)
627781 then throw((("Unknown issuer of " + j) + " token"))
628- else if (!(contains(bZ.name, j)))
782+ else if (!(contains(ci.name, j)))
629783 then throw((("Only NFT " + j) + " tokens are accepted"))
630784 else {
631- let cB = toBase58String(J)
632- let ca = L(cB)
633- if (isDefined(getInteger(ca)))
634- then throw((("NFT " + bZ.name) + " is already staked"))
635- else if (isDefined(getString(R(cx))))
636- then throw(("You already staked one duck: " + bZ.name))
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))
637791 else {
638- let cC = X(cB)
639- let cD = getString(cC)
640- let bD = Y(cB)
641- let cE = getInteger(bD)
642- let bo = V(cB)
643- let cF = getString(bo)
644- ([IntegerEntry(ca, lastBlock.timestamp), IntegerEntry(S(j, toBase58String(J), cx), lastBlock.timestamp), StringEntry(K(cB), cx), StringEntry(R(cx), cB)] ++ (if (isDefined(cD))
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))
645799 then nil
646- else ([StringEntry(cC, k)] ++ (if (isDefined(cE))
800+ else ([StringEntry(dd, k)] ++ (if (isDefined(df))
647801 then nil
648- else ([IntegerEntry(bD, 100)] ++ (if (isDefined(cF))
802+ else ([IntegerEntry(bP, 100)] ++ (if (isDefined(dg))
649803 then nil
650- else [StringEntry(bo, "0:0_0_0_0_0_0:0_0_0_0_0_0:")]))))))
804+ else [StringEntry(bA, "0:0_0_0_0_0_0:0_0_0_0_0_0:")]))))))
651805 }
652806 }
653807 }
655809
656810
657811
658-@Callable(aR)
659-func unstakeDuck (cB) = if ((size(aR.payments) != 0))
812+@Callable(aW)
813+func unstakeDuck (dc) = if ((size(aW.payments) != 0))
660814 then throw("unstake doesn't require any payments")
661815 else {
662- let J = fromBase58String(cB)
663- let cx = toString(aR.caller)
664- let bZ = value(assetInfo(J))
665- if (if ((bZ.issuer != d))
666- then (bZ.issuer != e)
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)
667821 else false)
668822 then throw((("Unknown issuer of " + j) + " token"))
669- else if (!(contains(bZ.name, j)))
823+ else if (!(contains(ci.name, j)))
670824 then throw((("Only NFT " + j) + " tokens can be unstaked"))
671825 else {
672- let ca = L(toBase58String(J))
673- if (!(isDefined(ca)))
674- then throw((("NFT " + bZ.name) + " is not staked"))
675- else if (!(isDefined(R(cx))))
676- then throw((("The duck " + bZ.name) + " is not staked"))
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"))
677831 else {
678- let cc = valueOrErrorMessage(getString(K(toBase58String(J))), (("NFT " + bZ.name) + " is orphaned"))
679- if ((cc != cx))
832+ let cl = valueOrErrorMessage(getString(L(toBase58String(K))), (("NFT " + ci.name) + " is orphaned"))
833+ if ((cl != cY))
680834 then throw("Staked NFT is not yours")
681- else [ScriptTransfer(aR.caller, 1, J), DeleteEntry(ca), DeleteEntry(X(cB)), DeleteEntry(K(cB)), DeleteEntry(S(j, cB, cx)), DeleteEntry(R(cx))]
835+ else [ScriptTransfer(aW.caller, 1, K), DeleteEntry(cj), DeleteEntry(ab(dc)), DeleteEntry(L(dc)), DeleteEntry(W(j, dc, cY)), DeleteEntry(V(cY))]
682836 }
683837 }
684838 }
685839
686840
687841
688-@Callable(aR)
689-func claimRes (aX,cA) = if ((size(aR.payments) != 0))
842+@Callable(aW)
843+func claimRes (bd,db) = if ((size(aW.payments) != 0))
690844 then throw("claimRes doesn't require any payments")
691845 else {
692- let bW = toString(aR.originCaller)
693- let aL = ce(bW, aX)
694- $Tuple2((aL._1 :+ StringEntry(aL._2, makeString(aL._3, ":"))), aL._3[ai])
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])
695849 }
696850
697851
698852
699-@Callable(aR)
700-func flight (bt,bu) = if (!(sigVerify_8Kb(bt, bu, g)))
853+@Callable(aW)
854+func flight (bF,bG) = if (!(sigVerify_8Kb(bF, bG, g)))
701855 then throw("signature does not match")
702- else if ((size(aR.payments) != 0))
856+ else if ((size(aW.payments) != 0))
703857 then throw("flight doesn't require any payments")
704858 else {
705- let bv = split(toUtf8String(bt), ";")
706- let bw = split(split(bv[0], "|")[0], "_")
707- let bx = parseIntValue(bw[0])
708- let by = parseIntValue(bw[1])
709- let cG = split(bv[1], ":")
710- let cH = cG[0]
711- let bB = parseIntValue(cG[1])
712- if (if ((bB > (lastBlock.timestamp + o)))
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)))
713867 then true
714- else ((lastBlock.timestamp - o) > bB))
868+ else ((lastBlock.timestamp - o) > bN))
715869 then throw("signature outdated")
716870 else {
717- let W = valueOrErrorMessage(getString(R(toString(aR.caller))), "You don't have a duck staked")
718- let bD = Y(W)
719- let bE = valueOrElse(getInteger(bD), 100)
720- if ((bE != bx))
721- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bD), 100))) + " from state does not match one from flight log=") + toString(bx)))
722- else if ((0 >= bx))
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))
723877 then throw("You can't fly with zero health")
724878 else {
725- let cC = X(W)
726- let bX = valueOrElse(getString(cC), k)
727- if ((cH == bX))
879+ let dd = ab(aa)
880+ let cg = valueOrElse(getString(dd), k)
881+ if ((di == cg))
728882 then throw("You can't fly to the same location")
729- else $Tuple2([StringEntry(cC, if ((by > 0))
730- then cH
731- else bX), IntegerEntry(bD, by)], unit)
883+ else $Tuple2([StringEntry(dd, if ((bK > 0))
884+ then di
885+ else cg), IntegerEntry(bP, bK)], unit)
732886 }
733887 }
734888 }
735889
736890
737891
738-@Callable(aR)
739-func setHealth (cE,W) = if (if ((0 > cE))
892+@Callable(aW)
893+func setHealth (df,aa) = if (if ((0 > df))
740894 then true
741- else (cE > 100))
895+ else (df > 100))
742896 then throw("HP should be within 0..100")
743- else [IntegerEntry(Y(W), cE)]
897+ else [IntegerEntry(ac(aa), df)]
744898
745899
746900
747-@Callable(aR)
748-func heal (cI,aX) = if (if ((0 > cI))
901+@Callable(aW)
902+func heal (dj,bd) = if (if ((0 > dj))
749903 then true
750- else (cI >= l))
751- then throw(("Unknown material: " + toString(cI)))
752- else if ((0 >= aX))
753- then throw(("Amount should be positive! " + toString(aX)))
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)))
754908 else {
755- let W = valueOrErrorMessage(getString(R(toString(aR.caller))), "You don't have a duck staked")
756- let bD = Y(W)
757- let cJ = valueOrElse(getInteger(bD), 100)
758- if ((cJ >= 100))
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))
759913 then throw("HP should be < 100 to heal")
760914 else {
761- let bo = V(W)
762- let bF = bn(bo)
763- let bG = split(bF[aj], "_")
764- let cK = parseIntValue(bG[cI])
765- let cL = min([(aX / h), (100 - cJ)])
766- let cM = (cL * h)
767- if ((cM > cK))
768- then throw(((((("You need " + toString(cM)) + " of ") + B[cI]) + " to heal, but you backpack contains ") + toString(cK)))
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)))
769923 else {
770- let bH = aV(bG, cI, cM)
771-[IntegerEntry(bD, (cJ + cL)), StringEntry(bo, makeString([bF[ah], bF[ai], bH, bF[ak]], ":"))]
924+ let bT = bb(bS, dj, dn)
925+[IntegerEntry(bP, (dk + dm)), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))]
772926 }
773927 }
774928 }
775929
776930
777931
778-@Callable(aR)
779-func updateBackpack (W,cN) = if ((aR.caller != f))
932+@Callable(aW)
933+func updateBackpack (aa,do) = if ((aW.caller != f))
780934 then throw("permission denied")
781- else $Tuple2([StringEntry(V(W), cN)], cN)
935+ else $Tuple2([StringEntry(Z(aa), do)], do)
782936
783937
784938
785-@Callable(aR)
786-func expeditionBuy (bt,bu) = if ((size(aR.payments) != 1))
939+@Callable(aW)
940+func expeditionBuy (bF,bG) = if ((size(aW.payments) != 1))
787941 then throw("Exactly one payment required")
788942 else {
789- let cw = value(aR.payments[0])
790- if ((cw.assetId != b))
943+ let cX = value(aW.payments[0])
944+ if ((cX.assetId != b))
791945 then throw("Allowed USDN payment only!")
792- else if ((cw.amount != t))
946+ else if ((cX.amount != t))
793947 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+ }
795952 }
796953
797954
798955
799-@Callable(aR)
800-func expedition (bt,bu) = if ((size(aR.payments) != 0))
956+@Callable(aW)
957+func expedition (bF,bG) = if ((size(aW.payments) != 0))
801958 then throw("expedition doesn't require any payments")
802- else bq(true, aR.caller, aR.transactionId, bt, bu)
959+ else bC(true, aW.caller, aW.transactionId, bF, bG)
803960
804961
805962
806-@Callable(aR)
807-func upgradeInfra (cO) = if ((size(aR.payments) != 0))
963+@Callable(aW)
964+func upgradeInfra (dp) = if ((size(aW.payments) != 0))
808965 then throw("Infrastructure upgrade doesn't require any payments")
809- else cn(true, aR.caller, 0)
966+ else cv(true, aW.caller, 0)
810967
811968
812969
813-@Callable(aR)
814-func upgradeInfraUsdn (cO) = if ((size(aR.payments) != 1))
970+@Callable(aW)
971+func upgradeInfraUsdn (dp) = if ((size(aW.payments) != 1))
815972 then throw("Exactly one payment required")
816973 else {
817- let cw = value(aR.payments[0])
818- if ((cw.assetId != b))
974+ let cX = value(aW.payments[0])
975+ if ((cX.assetId != b))
819976 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+ }
821981 }
822982
823983
824984
825-@Callable(aR)
826-func activateArtifact (cP) = if ((size(aR.payments) != 0))
985+@Callable(aW)
986+func activateArtifact (dq) = if ((size(aW.payments) != 0))
827987 then throw("Artifact activation doesn't require any payments")
828988 else {
829- let aL = {
830- let c = cP
989+ let aP = {
990+ let c = dq
831991 if (("PRESALE" == c))
832- then cu(toString(aR.caller))
992+ then cC(toString(aW.caller))
833993 else throw("Unknown artifact")
834994 }
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+ }
8361018 }
8371019
8381020
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = toUtf8String(take(drop(this.bytes, 1), 1))
55
66 let b = {
77 let c = a
88 if (("W" == c))
99 then base58'DG2xFkPdDwKUoBkzGAhQtLpSGzfXLiCYPEzeKH2Ad24p'
1010 else if (("T" == c))
1111 then base58'HezsdQuRDtzksAYUy97gfhKy7Z1NW2uXYSHA3bgqenNZ'
1212 else throw("Unknown chain")
1313 }
1414
1515 let d = {
1616 let c = a
1717 if (("W" == c))
1818 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
1919 else if (("T" == c))
2020 then this
2121 else throw("Unknown chain")
2222 }
2323
2424 let e = {
2525 let c = a
2626 if (("W" == c))
2727 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
2828 else if (("T" == c))
2929 then this
3030 else throw("Unknown chain")
3131 }
3232
3333 let f = {
3434 let c = a
3535 if (("W" == c))
3636 then addressFromStringValue("3P2sk1KncSxRaZs8b4CWGPw2jkvvav74u4D")
3737 else if (("T" == c))
3838 then addressFromStringValue("3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep")
3939 else throw("Unknown chain")
4040 }
4141
4242 let g = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
4343
4444 let h = 10000
4545
4646 let i = "LAND"
4747
4848 let j = "DUCK"
4949
5050 let k = "Africa_F_Africa"
5151
5252 let l = 6
5353
5454 let m = 3456000
5555
5656 let n = 86400000
5757
5858 let o = 300000
5959
6060 let p = 158549
6161
6262 let q = {
6363 let c = a
6464 if (("W" == c))
6565 then 18921595217
6666 else if (("T" == c))
6767 then 189215952
6868 else throw("Unknown chain")
6969 }
7070
7171 let r = {
7272 let c = a
7373 if (("W" == c))
7474 then 120000000
7575 else if (("T" == c))
7676 then 1200000
7777 else throw("Unknown chain")
7878 }
7979
8080 let s = {
8181 let c = a
8282 if (("W" == c))
8383 then 157679960139
8484 else if (("T" == c))
8585 then 1576799601
8686 else throw("Unknown chain")
8787 }
8888
8989 let t = {
9090 let c = a
9191 if (("W" == c))
9292 then 1000000000
9393 else if (("T" == c))
9494 then 10000000
9595 else throw("Unknown chain")
9696 }
9797
9898 let u = 1000000
9999
100100 let v = toBigInt(5)
101101
102102 let w = toBigInt(20)
103103
104104 let x = toBigInt((20 * 20))
105105
106106 let y = toBigInt(((20 * 20) * 20))
107107
108108 let z = toBigInt((((20 * 20) * 20) * 20))
109109
110110 let A = toBigInt(((((20 * 20) * 20) * 20) * 20))
111111
112112 let B = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
113113
114114 let C = ["Asia", "Europe", "Americas", "Oceania", "Africa"]
115115
116-func D () = "nextLandNum"
116+let D = "PRESALE"
117+
118+func E () = "nextLandNum"
117119
118120
119-func E (F) = ("landToAsset_" + F)
121+func F (G) = ("landToAsset_" + G)
120122
121123
122-func G (F,H) = ((i + F) + H)
124+func H (G,I) = ((i + G) + I)
123125
124126
125-func I (J) = ("nftOwner_" + J)
127+func J (K) = ("nftOwner_" + K)
126128
127129
128-func K (J) = ("duckOwner_" + J)
130+func L (K) = ("duckOwner_" + K)
129131
130132
131-func L (J) = ("stakedTime_" + J)
133+func M (K) = ("stakedTime_" + K)
132134
133135
134-func M (J) = ("infraLevel_" + J)
136+func N (K) = ("infraLevel_" + K)
135137
136138
137-func N (J,O) = ((("infraLevelByAssetIdAndOwner_" + J) + "_") + O)
139+func O (K,P) = ((("infraLevelByAssetIdAndOwner_" + K) + "_") + P)
138140
139141
140-func P (J) = ("presaleArtActivated_" + J)
142+func Q (K) = ("presaleArtActivated_" + K)
141143
142144
143-func Q (J,O) = ((("presaleArtActivatedByAssetIdAndOwner_" + J) + "_") + O)
145+func R (K,P) = ((("presaleArtActivatedByAssetIdAndOwner_" + K) + "_") + P)
144146
145147
146-func R (O) = ("stakedDuckByOwner_" + O)
148+func S (T,K) = makeString(["landArtStatus", T, K], "_")
147149
148150
149-func S (T,J,O) = ((((("stakedTimeByTypeAssetIdAndOwner_" + T) + "_") + J) + "_") + O)
151+func U (T,K,P) = makeString(["landArtStatusByTypeAssetIdAndOwner", T, K, P], "_")
150152
151153
152-func U (F) = ("landOwner_" + F)
154+func V (P) = ("stakedDuckByOwner_" + P)
153155
154156
155-func V (W) = ("backPack_" + W)
157+func W (X,K,P) = ((((("stakedTimeByTypeAssetIdAndOwner_" + X) + "_") + K) + "_") + P)
156158
157159
158-func X (W) = ("duckLocation_" + W)
160+func Y (G) = ("landOwner_" + G)
159161
160162
161-func Y (W) = ("duckHealth_" + W)
163+func Z (aa) = ("backPack_" + aa)
162164
163165
164-func Z () = "resTypesProportions"
166+func ab (aa) = ("duckLocation_" + aa)
165167
166168
167-let aa = 0
169+func ac (aa) = ("duckHealth_" + aa)
168170
169-let ab = 1
170171
171-let ac = 2
172+func ad () = "resTypesProportions"
172173
173-let ad = 3
174174
175175 let ae = 0
176176
177177 let af = 1
178178
179179 let ag = 2
180180
181-let ah = 0
181+let ah = 3
182182
183-let ai = 1
183+let ai = 0
184184
185-let aj = 2
185+let aj = 1
186186
187-let ak = 3
187+let ak = 2
188188
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
191199 if ($isInstanceOf(c, "String"))
192200 then {
193- let an = c
194- an
201+ let ar = c
202+ ar
195203 }
196204 else throw("fail to cast into String")
197205 }
198206
199207
200-func ao (ap) = {
201- let aq = split(value(getString(Z())), "_")
202- if ((size(aq) != l))
208+func as (at) = {
209+ let au = split(value(getString(ad())), "_")
210+ if ((size(au) != l))
203211 then throw("Wrong proportions data")
204212 else {
205- let ar = [parseIntValue(aq[0]), parseIntValue(aq[1]), parseIntValue(aq[2]), parseIntValue(aq[3]), parseIntValue(aq[4]), parseIntValue(aq[5])]
206- let as = (((((ar[0] + ar[1]) + ar[2]) + ar[3]) + ar[4]) + ar[5])
207- if ((0 >= as))
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))
208216 then throw("No lands staked")
209217 else {
210- let at = fraction(ap, u, as)
211- func au (av,aw) = (av :+ fraction(aw, at, u))
218+ let ax = fraction(at, u, aw)
219+ func ay (az,aA) = (az :+ fraction(aA, ax, u))
212220
213- let ax = ar
214- let ay = size(ax)
215- let az = nil
216- func aA (aB,aC) = if ((aC >= ay))
217- then aB
218- else au(aB, ax[aC])
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])
219227
220- func aD (aB,aC) = if ((aC >= ay))
221- then aB
228+ func aH (aF,aG) = if ((aG >= aC))
229+ then aF
222230 else throw("List size exceeds 6")
223231
224- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
232+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
225233 }
226234 }
227235 }
228236
229237
230-func aE (aF,aG,aH) = {
231- let aI = ao(aH)
232- func aJ (av,aK) = {
233- let aL = (parseIntValue(aG[aK]) - aI[aK])
234- if ((0 > aL))
235- then throw(((((("Not enough material idx=" + toString(aK)) + ", you have ") + aG[aK]) + ", but need ") + toString(aI[aK])))
236- else (av :+ toString(aL))
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))
237245 }
238246
239- if (aF)
247+ if (aJ)
240248 then {
241- let ax = [0, 1, 2, 3, 4, 5]
242- let ay = size(ax)
243- let az = nil
244- func aA (aB,aC) = if ((aC >= ay))
245- then aB
246- else aJ(aB, ax[aC])
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])
247255
248- func aD (aB,aC) = if ((aC >= ay))
249- then aB
256+ func aH (aF,aG) = if ((aG >= aC))
257+ then aF
250258 else throw("List size exceeds 6")
251259
252- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
260+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
253261 }
254- else aG
262+ else aK
255263 }
256264
257265
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+ }
269275
270- let ar = {
271- let ax = [0, 1, 2, 3, 4, 5]
272- let ay = size(ax)
273- let az = nil
274- func aA (aB,aC) = if ((aC >= ay))
275- then aB
276- else aQ(aB, ax[aC])
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])
277283
278- func aD (aB,aC) = if ((aC >= ay))
279- then aB
280- else throw("List size exceeds 6")
284+ func aH (aF,aG) = if ((aG >= aC))
285+ then aF
286+ else throw("List size exceeds 6")
281287
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)
285289 }
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)
286297 }
287298
288299
289-func aS (aT) = [(size(split(aT, "A")) - 1), (size(split(aT, "B")) - 1), (size(split(aT, "C")) - 1), (size(split(aT, "D")) - 1), (size(split(aT, "E")) - 1), (size(split(aT, "F")) - 1)]
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)]
290301
291302
292-func aU (H) = {
293- let c = H
303+func ba (I) = {
304+ let c = I
294305 if (("S" == c))
295306 then 25
296307 else if (("M" == c))
297308 then 100
298309 else if (("L" == c))
299310 then 225
300311 else if (("XL" == c))
301312 then 400
302313 else if (("XXL" == c))
303314 then 625
304315 else throw("Unknown land size")
305316 }
306317
307318
308-func aV (aW,aK,aX) = {
309- func aY (av,aR) = (av :+ (if ((aR == aK))
310- then toString((parseIntValue(aW[aR]) - aX))
311- else aW[aR]))
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]))
312323
313- let ar = {
314- let ax = [0, 1, 2, 3, 4, 5]
315- let ay = size(ax)
316- let az = nil
317- func aA (aB,aC) = if ((aC >= ay))
318- then aB
319- else aY(aB, ax[aC])
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])
320331
321- func aD (aB,aC) = if ((aC >= ay))
322- then aB
332+ func aH (aF,aG) = if ((aG >= aC))
333+ then aF
323334 else throw("List size exceeds 6")
324335
325- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
336+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
326337 }
327- makeString(ar, "_")
338+ makeString(av, "_")
328339 }
329340
330341
331-func aZ (ba,aN,bb,aO,bc) = {
332- func bd (av,aR) = {
333- let be = ((fraction(bb, bc, n) * aN[aR]) * aO)
334- (av :+ toString((parseIntValue(ba[aR]) + be)))
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)))
335346 }
336347
337- let ar = {
338- let ax = [0, 1, 2, 3, 4, 5]
339- let ay = size(ax)
340- let az = nil
341- func aA (aB,aC) = if ((aC >= ay))
342- then aB
343- else bd(aB, ax[aC])
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])
344355
345- func aD (aB,aC) = if ((aC >= ay))
346- then aB
356+ func aH (aF,aG) = if ((aG >= aC))
357+ then aF
347358 else throw("List size exceeds 6")
348359
349- aD(aA(aA(aA(aA(aA(aA(az, 0), 1), 2), 3), 4), 5), 6)
360+ aH(aE(aE(aE(aE(aE(aE(aD, 0), 1), 2), 3), 4), 5), 6)
350361 }
351- makeString(ar, "_")
362+ makeString(av, "_")
352363 }
353364
354365
355-func bf (bg) = if ((bg >= toBigInt(0)))
356- then bg
357- else -(bg)
366+func bl (bm) = if ((bm >= toBigInt(0)))
367+ then bm
368+ else -(bm)
358369
359370
360-let bh = [[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]]
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]]
361372
362-func bi (bj,bk) = {
363- let bl = toInt((bj % w))
364- let bm = if ((bk[0] > bl))
373+func bo (bp,bq) = {
374+ let br = toInt((bp % w))
375+ let bs = if ((bq[0] > br))
365376 then "A"
366- else if ((bk[1] > bl))
377+ else if ((bq[1] > br))
367378 then "B"
368- else if ((bk[2] > bl))
379+ else if ((bq[2] > br))
369380 then "C"
370- else if ((bk[3] > bl))
381+ else if ((bq[3] > br))
371382 then "D"
372- else if ((bk[4] > bl))
383+ else if ((bq[4] > br))
373384 then "E"
374385 else "F"
375- bm
386+ bs
376387 }
377388
378389
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
386409 }
387410
388411
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)))
390423 then throw("signature does not match")
391424 else {
392- let bv = split(toUtf8String(bt), ";")
393- let bw = split(split(bv[0], "|")[0], "_")
394- let bx = parseIntValue(bw[0])
395- let by = parseIntValue(bw[1])
396- let bz = split(bv[1], ":")
397- let bA = split(bz[0], "_")
398- if ((bA[1] != "E"))
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"))
399432 then throw("expedition target location type should be E")
400433 else {
401- let bB = parseIntValue(bz[1])
402- if (if ((bB > (lastBlock.timestamp + o)))
434+ let bN = parseIntValue(bL[1])
435+ if (if ((bN > (lastBlock.timestamp + o)))
403436 then true
404- else ((lastBlock.timestamp - o) > bB))
437+ else ((lastBlock.timestamp - o) > bN))
405438 then throw("signature outdated")
406439 else {
407- let bC = toString(br)
408- let W = valueOrErrorMessage(getString(R(bC)), "You don't have a duck staked")
409- let bD = Y(W)
410- let bE = valueOrElse(getInteger(bD), 100)
411- if ((bE != bx))
412- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bD), 100))) + " from state does not match one from flight log=") + toString(bx)))
413- else if ((0 >= bx))
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))
414447 then throw("You can't fly with zero health")
415- else if ((0 >= by))
416- then $Tuple2(((if (!(aF))
417- then [ScriptTransfer(br, t, b)]
418- else nil) :+ IntegerEntry(bD, 0)), "")
448+ else if ((0 >= bK))
449+ then $Tuple2(((if (!(aJ))
450+ then [ScriptTransfer(bD, t, b)]
451+ else nil) :+ IntegerEntry(bP, 0)), "")
419452 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)
450467 }
451468 }
452469 }
453470 }
454471
455472
456-func bR (bS) = {
457- let bT = valueOrElse(getInteger(M(bS)), 0)
458- let bU = if (valueOrElse(getBoolean(P(bS)), false))
459- then 3
460- else 0
461- ((m + fraction(m, bT, 4)) + fraction(m, bU, 20))
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)))
462479 }
463480
464481
465-func bV (bW) = {
466- let W = valueOrErrorMessage(getString(R(bW)), "You don't have a duck staked")
467- let bX = valueOrElse(getString(X(W)), k)
468- let bY = split(value(bX), "_")
469- if ((bY[af] != "L"))
470- then throw((("Duck location type is " + bY[af]) + ", but should be L"))
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"))
471488 else {
472- let bS = bY[ag]
473- let bZ = value(assetInfo(fromBase58String(bS)))
474- let ca = L(bS)
475- let cb = valueOrErrorMessage(getInteger(ca), (("NFT " + bZ.name) + " is not staked"))
476- let cc = valueOrErrorMessage(getString(I(bS)), (("NFT " + bZ.name) + " is orphaned"))
477- if ((cc != bW))
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))
478495 then throw((i + " is not yours"))
479496 else {
480- let cd = split(bZ.description, "_")
481- $Tuple4(W, bS, cd, cb)
497+ let cm = split(ci.description, "_")
498+ $Tuple4(aa, ca, cm, ck)
482499 }
483500 }
484501 }
485502
486503
487-func ce (bW,aX) = {
488- let cf = bV(bW)
489- let H = cf._3[ab]
490- let aN = aS(cf._3[ac])
491- let bb = (lastBlock.timestamp - cf._4)
492- if ((0 > bb))
493- then throw(((("Saved timestamp is in future, saved = " + toString(cf._4)) + ", current = ") + toString(lastBlock.timestamp)))
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)))
494511 else {
495- let cg = aU(H)
496- let ch = bR(cf._2)
497- let ci = fraction(bb, (ch * cg), n)
498- if ((aX > ci))
499- then throw(((("Not enough resources, available = " + toString(ci)) + ", requested = ") + toString(aX)))
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)))
500517 else {
501- let cj = fraction((ci - aX), n, (ch * cg))
502- let ck = (lastBlock.timestamp - cj)
503- let bo = V(cf._1)
504- let bF = bn(bo)
505- let ba = split(bF[ai], "_")
506- let cl = aZ(ba, aN, (bb - cj), (cg / 25), ch)
507- $Tuple3([IntegerEntry(L(cf._2), ck), IntegerEntry(S(i, cf._2, bW), ck)], bo, [bF[ah], cl, bF[aj], bF[ak]])
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]])
508525 }
509526 }
510527 }
511528
512529
513-func cm (bW,bS,cg) = {
514- let ca = L(bS)
515- let cb = value(getInteger(ca))
516- let ci = (fraction((lastBlock.timestamp - cb), bR(bS), n) * cg)
517- ce(bW, ci)
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)
518535 }
519536
520537
521-func cn (aF,br,co) = {
522- let bW = toString(br)
523- let cf = bV(bW)
524- let cg = aU(cf._3[ab])
525- let cp = M(cf._2)
526- let cq = valueOrElse(getInteger(cp), 0)
527- if ((cq >= 3))
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))
528545 then throw("Currently max infrastructure level = 3")
529546 else {
530- let cr = (cq + 1)
531- let cs = fraction(r, (cg * cr), 25)
532- if (if (!(aF))
533- then (co != cs)
547+ let cz = (cy + 1)
548+ let cA = fraction(r, (cb * cz), 25)
549+ if (if (!(aJ))
550+ then (cw != cA)
534551 else false)
535- then throw(("Payment attached should be " + toString(cs)))
552+ then throw(("Payment attached should be " + toString(cA)))
536553 else {
537- let bo = V(cf._1)
538- let bF = bn(bo)
539- let bG = split(bF[aj], "_")
540- let bH = makeString(aE(aF, bG, fraction(q, (cg * cr), 25)), "_")
541- let ct = cm(bW, cf._2, cg)
542- $Tuple2(([IntegerEntry(cp, cr), IntegerEntry(N(cf._2, bW), cr), StringEntry(bo, makeString([bF[ah], ct._3[ai], bH, bF[ak]], ":"))] ++ ct._1), cr)
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)
543560 }
544561 }
545562 }
546563
547564
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))
552570 then throw("Presale artifact is already activated")
553- else if ((parseIntValue(cf._3[aa]) > 500))
554- then throw((((i + " ") + cf._2) + " is not eligible for presale artifact"))
571+ else if ((parseIntValue(co._3[ae]) > 500))
572+ then throw((((i + " ") + ca) + " is not eligible for presale artifact"))
555573 else {
556- let cg = aU(cf._3[ab])
557- let ct = cm(bW, cf._2, cg)
558- (((ct._1 :+ BooleanEntry(P(cf._2), true)) :+ BooleanEntry(Q(cf._2, bW), true)) :+ StringEntry(ct._2, makeString(ct._3, ":")))
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, ":")))
559577 }
560578 }
561579
562580
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)
564718 func stakeLand () = {
565- let cw = value(aR.payments[0])
566- let J = value(cw.assetId)
567- let cx = toString(aR.caller)
568- if ((cw.amount != 1))
719+ let cX = value(aW.payments[0])
720+ let K = value(cX.assetId)
721+ let cY = toString(aW.caller)
722+ if ((cX.amount != 1))
569723 then throw((("NFT " + i) + " token should be attached as payment"))
570724 else {
571- let bZ = value(assetInfo(J))
572- if ((bZ.issuer != this))
725+ let ci = value(assetInfo(K))
726+ if ((ci.issuer != this))
573727 then throw("Unknown issuer of token")
574- else if (!(contains(bZ.name, i)))
728+ else if (!(contains(ci.name, i)))
575729 then throw((("Only NFT " + i) + " tokens are accepted"))
576730 else {
577- let cy = drop(bZ.name, 4)
578- let F = if (contains(cy, "XXL"))
579- then dropRight(cy, 3)
580- else if (contains(cy, "XL"))
581- then dropRight(cy, 2)
582- else dropRight(cy, 1)
583- let cz = valueOrErrorMessage(parseInt(F), ("Cannot parse land number from " + bZ.name))
584- let bS = toBase58String(J)
585- let ca = L(bS)
586- if (isDefined(getInteger(ca)))
587- then throw((("NFT " + bZ.name) + " is already staked"))
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"))
588742 else {
589- let cd = split(bZ.description, "_")
590- let aN = aS(cd[ac])
591- let aq = aM(aN, (aU(cd[ab]) / 25), 1)
592-[IntegerEntry(ca, lastBlock.timestamp), IntegerEntry(S(i, bS, cx), lastBlock.timestamp), StringEntry(I(bS), cx), StringEntry(U(F), cx), StringEntry(Z(), aq)]
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)]
593747 }
594748 }
595749 }
596750 }
597751
598752
599753
600-@Callable(aR)
601-func unstakeLand (cA) = if ((size(aR.payments) != 0))
754+@Callable(aW)
755+func unstakeLand (db) = if ((size(aW.payments) != 0))
602756 then throw("unstake doesn't require any payments")
603757 else {
604- let bW = toString(aR.caller)
605- let cf = bV(bW)
606- let aN = aS(cf._3[ac])
607- let cg = aU(cf._3[ab])
608- let aq = aM(aN, (cg / 25), -1)
609- let ct = cm(bW, cf._2, cg)
610-[ScriptTransfer(aR.caller, 1, fromBase58String(cf._2)), DeleteEntry(L(cf._2)), DeleteEntry(S(i, cf._2, bW)), StringEntry(Z(), aq), StringEntry(ct._2, makeString(ct._3, ":"))]
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, ":"))]
611765 }
612766
613767
614768
615-@Callable(aR)
769+@Callable(aW)
616770 func stakeDuck () = {
617- let cw = value(aR.payments[0])
618- let J = value(cw.assetId)
619- let cx = toString(aR.caller)
620- if ((cw.amount != 1))
771+ let cX = value(aW.payments[0])
772+ let K = value(cX.assetId)
773+ let cY = toString(aW.caller)
774+ if ((cX.amount != 1))
621775 then throw((("NFT " + j) + " token should be attached as payment"))
622776 else {
623- let bZ = value(assetInfo(J))
624- if (if ((bZ.issuer != d))
625- then (bZ.issuer != e)
777+ let ci = value(assetInfo(K))
778+ if (if ((ci.issuer != d))
779+ then (ci.issuer != e)
626780 else false)
627781 then throw((("Unknown issuer of " + j) + " token"))
628- else if (!(contains(bZ.name, j)))
782+ else if (!(contains(ci.name, j)))
629783 then throw((("Only NFT " + j) + " tokens are accepted"))
630784 else {
631- let cB = toBase58String(J)
632- let ca = L(cB)
633- if (isDefined(getInteger(ca)))
634- then throw((("NFT " + bZ.name) + " is already staked"))
635- else if (isDefined(getString(R(cx))))
636- then throw(("You already staked one duck: " + bZ.name))
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))
637791 else {
638- let cC = X(cB)
639- let cD = getString(cC)
640- let bD = Y(cB)
641- let cE = getInteger(bD)
642- let bo = V(cB)
643- let cF = getString(bo)
644- ([IntegerEntry(ca, lastBlock.timestamp), IntegerEntry(S(j, toBase58String(J), cx), lastBlock.timestamp), StringEntry(K(cB), cx), StringEntry(R(cx), cB)] ++ (if (isDefined(cD))
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))
645799 then nil
646- else ([StringEntry(cC, k)] ++ (if (isDefined(cE))
800+ else ([StringEntry(dd, k)] ++ (if (isDefined(df))
647801 then nil
648- else ([IntegerEntry(bD, 100)] ++ (if (isDefined(cF))
802+ else ([IntegerEntry(bP, 100)] ++ (if (isDefined(dg))
649803 then nil
650- else [StringEntry(bo, "0:0_0_0_0_0_0:0_0_0_0_0_0:")]))))))
804+ else [StringEntry(bA, "0:0_0_0_0_0_0:0_0_0_0_0_0:")]))))))
651805 }
652806 }
653807 }
654808 }
655809
656810
657811
658-@Callable(aR)
659-func unstakeDuck (cB) = if ((size(aR.payments) != 0))
812+@Callable(aW)
813+func unstakeDuck (dc) = if ((size(aW.payments) != 0))
660814 then throw("unstake doesn't require any payments")
661815 else {
662- let J = fromBase58String(cB)
663- let cx = toString(aR.caller)
664- let bZ = value(assetInfo(J))
665- if (if ((bZ.issuer != d))
666- then (bZ.issuer != e)
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)
667821 else false)
668822 then throw((("Unknown issuer of " + j) + " token"))
669- else if (!(contains(bZ.name, j)))
823+ else if (!(contains(ci.name, j)))
670824 then throw((("Only NFT " + j) + " tokens can be unstaked"))
671825 else {
672- let ca = L(toBase58String(J))
673- if (!(isDefined(ca)))
674- then throw((("NFT " + bZ.name) + " is not staked"))
675- else if (!(isDefined(R(cx))))
676- then throw((("The duck " + bZ.name) + " is not staked"))
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"))
677831 else {
678- let cc = valueOrErrorMessage(getString(K(toBase58String(J))), (("NFT " + bZ.name) + " is orphaned"))
679- if ((cc != cx))
832+ let cl = valueOrErrorMessage(getString(L(toBase58String(K))), (("NFT " + ci.name) + " is orphaned"))
833+ if ((cl != cY))
680834 then throw("Staked NFT is not yours")
681- else [ScriptTransfer(aR.caller, 1, J), DeleteEntry(ca), DeleteEntry(X(cB)), DeleteEntry(K(cB)), DeleteEntry(S(j, cB, cx)), DeleteEntry(R(cx))]
835+ else [ScriptTransfer(aW.caller, 1, K), DeleteEntry(cj), DeleteEntry(ab(dc)), DeleteEntry(L(dc)), DeleteEntry(W(j, dc, cY)), DeleteEntry(V(cY))]
682836 }
683837 }
684838 }
685839
686840
687841
688-@Callable(aR)
689-func claimRes (aX,cA) = if ((size(aR.payments) != 0))
842+@Callable(aW)
843+func claimRes (bd,db) = if ((size(aW.payments) != 0))
690844 then throw("claimRes doesn't require any payments")
691845 else {
692- let bW = toString(aR.originCaller)
693- let aL = ce(bW, aX)
694- $Tuple2((aL._1 :+ StringEntry(aL._2, makeString(aL._3, ":"))), aL._3[ai])
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])
695849 }
696850
697851
698852
699-@Callable(aR)
700-func flight (bt,bu) = if (!(sigVerify_8Kb(bt, bu, g)))
853+@Callable(aW)
854+func flight (bF,bG) = if (!(sigVerify_8Kb(bF, bG, g)))
701855 then throw("signature does not match")
702- else if ((size(aR.payments) != 0))
856+ else if ((size(aW.payments) != 0))
703857 then throw("flight doesn't require any payments")
704858 else {
705- let bv = split(toUtf8String(bt), ";")
706- let bw = split(split(bv[0], "|")[0], "_")
707- let bx = parseIntValue(bw[0])
708- let by = parseIntValue(bw[1])
709- let cG = split(bv[1], ":")
710- let cH = cG[0]
711- let bB = parseIntValue(cG[1])
712- if (if ((bB > (lastBlock.timestamp + o)))
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)))
713867 then true
714- else ((lastBlock.timestamp - o) > bB))
868+ else ((lastBlock.timestamp - o) > bN))
715869 then throw("signature outdated")
716870 else {
717- let W = valueOrErrorMessage(getString(R(toString(aR.caller))), "You don't have a duck staked")
718- let bD = Y(W)
719- let bE = valueOrElse(getInteger(bD), 100)
720- if ((bE != bx))
721- then throw(((("oldHealth=" + toString(valueOrElse(getInteger(bD), 100))) + " from state does not match one from flight log=") + toString(bx)))
722- else if ((0 >= bx))
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))
723877 then throw("You can't fly with zero health")
724878 else {
725- let cC = X(W)
726- let bX = valueOrElse(getString(cC), k)
727- if ((cH == bX))
879+ let dd = ab(aa)
880+ let cg = valueOrElse(getString(dd), k)
881+ if ((di == cg))
728882 then throw("You can't fly to the same location")
729- else $Tuple2([StringEntry(cC, if ((by > 0))
730- then cH
731- else bX), IntegerEntry(bD, by)], unit)
883+ else $Tuple2([StringEntry(dd, if ((bK > 0))
884+ then di
885+ else cg), IntegerEntry(bP, bK)], unit)
732886 }
733887 }
734888 }
735889
736890
737891
738-@Callable(aR)
739-func setHealth (cE,W) = if (if ((0 > cE))
892+@Callable(aW)
893+func setHealth (df,aa) = if (if ((0 > df))
740894 then true
741- else (cE > 100))
895+ else (df > 100))
742896 then throw("HP should be within 0..100")
743- else [IntegerEntry(Y(W), cE)]
897+ else [IntegerEntry(ac(aa), df)]
744898
745899
746900
747-@Callable(aR)
748-func heal (cI,aX) = if (if ((0 > cI))
901+@Callable(aW)
902+func heal (dj,bd) = if (if ((0 > dj))
749903 then true
750- else (cI >= l))
751- then throw(("Unknown material: " + toString(cI)))
752- else if ((0 >= aX))
753- then throw(("Amount should be positive! " + toString(aX)))
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)))
754908 else {
755- let W = valueOrErrorMessage(getString(R(toString(aR.caller))), "You don't have a duck staked")
756- let bD = Y(W)
757- let cJ = valueOrElse(getInteger(bD), 100)
758- if ((cJ >= 100))
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))
759913 then throw("HP should be < 100 to heal")
760914 else {
761- let bo = V(W)
762- let bF = bn(bo)
763- let bG = split(bF[aj], "_")
764- let cK = parseIntValue(bG[cI])
765- let cL = min([(aX / h), (100 - cJ)])
766- let cM = (cL * h)
767- if ((cM > cK))
768- then throw(((((("You need " + toString(cM)) + " of ") + B[cI]) + " to heal, but you backpack contains ") + toString(cK)))
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)))
769923 else {
770- let bH = aV(bG, cI, cM)
771-[IntegerEntry(bD, (cJ + cL)), StringEntry(bo, makeString([bF[ah], bF[ai], bH, bF[ak]], ":"))]
924+ let bT = bb(bS, dj, dn)
925+[IntegerEntry(bP, (dk + dm)), StringEntry(bA, makeString([bR[al], bR[am], bT, bR[ao]], ":"))]
772926 }
773927 }
774928 }
775929
776930
777931
778-@Callable(aR)
779-func updateBackpack (W,cN) = if ((aR.caller != f))
932+@Callable(aW)
933+func updateBackpack (aa,do) = if ((aW.caller != f))
780934 then throw("permission denied")
781- else $Tuple2([StringEntry(V(W), cN)], cN)
935+ else $Tuple2([StringEntry(Z(aa), do)], do)
782936
783937
784938
785-@Callable(aR)
786-func expeditionBuy (bt,bu) = if ((size(aR.payments) != 1))
939+@Callable(aW)
940+func expeditionBuy (bF,bG) = if ((size(aW.payments) != 1))
787941 then throw("Exactly one payment required")
788942 else {
789- let cw = value(aR.payments[0])
790- if ((cw.assetId != b))
943+ let cX = value(aW.payments[0])
944+ if ((cX.assetId != b))
791945 then throw("Allowed USDN payment only!")
792- else if ((cw.amount != t))
946+ else if ((cX.amount != t))
793947 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+ }
795952 }
796953
797954
798955
799-@Callable(aR)
800-func expedition (bt,bu) = if ((size(aR.payments) != 0))
956+@Callable(aW)
957+func expedition (bF,bG) = if ((size(aW.payments) != 0))
801958 then throw("expedition doesn't require any payments")
802- else bq(true, aR.caller, aR.transactionId, bt, bu)
959+ else bC(true, aW.caller, aW.transactionId, bF, bG)
803960
804961
805962
806-@Callable(aR)
807-func upgradeInfra (cO) = if ((size(aR.payments) != 0))
963+@Callable(aW)
964+func upgradeInfra (dp) = if ((size(aW.payments) != 0))
808965 then throw("Infrastructure upgrade doesn't require any payments")
809- else cn(true, aR.caller, 0)
966+ else cv(true, aW.caller, 0)
810967
811968
812969
813-@Callable(aR)
814-func upgradeInfraUsdn (cO) = if ((size(aR.payments) != 1))
970+@Callable(aW)
971+func upgradeInfraUsdn (dp) = if ((size(aW.payments) != 1))
815972 then throw("Exactly one payment required")
816973 else {
817- let cw = value(aR.payments[0])
818- if ((cw.assetId != b))
974+ let cX = value(aW.payments[0])
975+ if ((cX.assetId != b))
819976 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+ }
821981 }
822982
823983
824984
825-@Callable(aR)
826-func activateArtifact (cP) = if ((size(aR.payments) != 0))
985+@Callable(aW)
986+func activateArtifact (dq) = if ((size(aW.payments) != 0))
827987 then throw("Artifact activation doesn't require any payments")
828988 else {
829- let aL = {
830- let c = cP
989+ let aP = {
990+ let c = dq
831991 if (("PRESALE" == c))
832- then cu(toString(aR.caller))
992+ then cC(toString(aW.caller))
833993 else throw("Unknown artifact")
834994 }
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+ }
8361018 }
8371019
8381020

github/deemru/w8io/026f985 
277.34 ms