tx · DYWprMNgwRcxyBQsbywLHWYo17cbCotJBzWj3wpP2zmM

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.10800000 Waves

2023.11.03 16:30 [2827211] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "DYWprMNgwRcxyBQsbywLHWYo17cbCotJBzWj3wpP2zmM", "fee": 10800000, "feeAssetId": null, "timestamp": 1699018135348, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4EM9fgwjV5JqhkcaAgFszTs295AQ4CcWh8CvngYVUhJhp7YKfy5SgdvgVqcLAKNfDW4zuSKBjKg3AmkUokgPXKwN" ], "script": "base64:BgLiAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASABIECgICAhIAEgMKAQgSBAoCCAgSAwoBGBIECgIICBIECgIICBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCBIECgIICBIDCgEIEgASAwoBCBIDCgEIEgYKBAgBCAESABIECgICAhIECgICAhIAEgMKAQgSBAoCAQGnAgAJREFZTUlMTElTAIC4mSkBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQRhZGRyCQCsAgICEGxhc3RBcmJUaW1lVXNlcl8FBGFkZHIBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQRhZGRyCQCsAgICGGFjcmVzU3Rha2VkQW1vdW50QnlVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAOcm9iYmVyeUNvc3RNaW4AgMLXLwAUcm9iYmVyeUNvb2xkb3duQ29lZmYAkAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgAQbGFuZFJvYkNvb2xkb3ducwkAzAgCAAAJAMwIAgDAzyQJAMwIAgCg9zYJAMwIAgCA3MwUCQDMCAIAgK6mCgUDbmlsAA5NSU5fUkVTX1RPX1JPQgCA2sQJAAxyb2JJZHhMb2NrZWQAAQALZHVja0lkeEZyZWUAAAAQZHVja0lkeFByZXBhcmluZwABAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5Q29zdF8FC2R1Y2tBc3NldElkARNrZXlMYW5kUm9iYmVyeVN0YXRlAQtsYW5kQXNzZXRJZAkArAICAhFsYW5kUm9iYmVyeVN0YXRlXwULbGFuZEFzc2V0SWQBEmtleUxhbmRDb29sZG93bkVUQQELbGFuZEFzc2V0SWQJAKwCAgIQbGFuZENvb2xkb3duRVRBXwULbGFuZEFzc2V0SWQBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBC2R1Y2tBc3NldElkCQCsAgICEWR1Y2tSb2JiZXJ5U3RhdGVfBQtkdWNrQXNzZXRJZAETa2V5TG9ja2VkTGFuZEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIRbG9ja2VkTGFuZEJ5RHVja18FC2R1Y2tBc3NldElkARZrZXlEZWxpdmVyeURlbGF5QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhRkZWxpdmVyeURlbGF5QnlEdWNrXwULZHVja0Fzc2V0SWQBFGtleVVzZXJEZWxpdmVyeUNvdW50AQRhZGRyCQCsAgICEnVzZXJEZWxpdmVyeUNvdW50XwUEYWRkcgEWa2V5VXNlckxhc3REZWxpdmVyeURheQEEYWRkcgkArAICAhR1c2VyTGFzdERlbGl2ZXJ5RGF5XwUEYWRkcgAHeHBDbGFpbQCQTgAPeHBTdWNjZXNzRmxpZ2h0AJBOAAx4cEZhaWxGbGlnaHQA0A8ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCEPQAKeHBOZXdTTGFuZADAlrECAA54cFVwZ3JhZGVJbmZyYQCQTgAHeHBNZXJnZQDAhD0ACXhwT25ib2FyZADAhD0ABnhwSGVhbACQTgEJbGV2ZWxCeVhQAQJ4cAkAawMFDHhwTGV2ZWxTY2FsZQkAbAYFAnhwAAQFD3hwTGV2ZWxSZWNpcFBvdwAEAAQFBERPV04FBlNDQUxFOAEJbWF4SGVhbHRoAQVsZXZlbAkAZAIAZAUFbGV2ZWwBB2xldmVsVXACCWN1cnJMZXZlbAVuZXdYUAQIbmV3TGV2ZWwJAQlsZXZlbEJ5WFABBQVuZXdYUAkAzAgCBQhuZXdMZXZlbAkAzAgCCQBoAgUSbnVtUG9pbnRzT25MZXZlbFVwCQBlAgUIbmV3TGV2ZWwFCWN1cnJMZXZlbAUDbmlsAQxnZXREdWNrU3RhdHMED3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZApidWZmRWZmZWN0CmZvcmNlQnVmZnMEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwECnN0YXRlQnVmZnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wAgFfCQDOCAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAwUKZm9yY2VCdWZmcwkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QFA25pbAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJJbnRlbGxlY3QJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDWNoYXJEZXh0ZXJpdHkFA25pbAEOZ2V0Um9iYmVyeURhdGECD3N0YWtpbmdDb250cmFjdAtkdWNrQXNzZXRJZAQLbGFzdFJvYkNvc3QJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQULZHVja0Fzc2V0SWQAAAQLbGFzdFJvYlRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQAAAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQHcm9iQ29zdAkAlgMBCQDMCAIFDnJvYmJlcnlDb3N0TWluCQDMCAIJAGUCBQtsYXN0Um9iQ29zdAkAaAIFFHJvYmJlcnlDb29sZG93bkNvZWZmCQBlAgUDbm93BQtsYXN0Um9iVGltZQUDbmlsBAlkdWNrU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQESa2V5TGFuZENvb2xkb3duRVRBAQUKbG9ja2VkTGFuZAAACQCXCgUFB3JvYkNvc3QFC2xhc3RSb2JUaW1lBQlkdWNrU3RhdGUFCmxvY2tlZExhbmQFB2xhbmRFVEEACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGABhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIAGQAPREFJTFlSRVNCWVBJRUNFAID40gEADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoAFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQDQhgMAElRFTl9NSU5VVEVTX01JTExJUwDAzyQAF0FMTE9XRURfRlJFRV9ERUxJVkVSSUVTAAEAGkFDUkVTX0ZPUl9ERUxJVkVSWV9BVFRFTVBUAIDh6xcACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwkAzAgCAgdNaW5lIEwxCQDMCAICB01pbmUgTDIJAMwIAgIHTWluZSBMMwkAzAgCAgdUcmFwIEwxCQDMCAICB1RyYXAgTDIJAMwIAgIHVHJhcCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBmb3J0QWxsb3dlZFByb2RzCQDMCAIADwkAzAgCABAJAMwIAgARCQDMCAIAEgkAzAgCABMJAMwIAgAUBQNuaWwAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAARZGVsaXZlcnlMb2NrZWRLZXkCDmRlbGl2ZXJ5TG9ja2VkAA1sYXN0VG91cklkS2V5Ag4lc19fbGFzdFRvdXJJZAEVa2V5VG91clN0YXRpY0RhdGFCeUlkAQN0SWQJAKwCAgIWJXMlZF9fdG91clN0YXRpY0RhdGFfXwkApAMBBQN0SWQBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBA3RJZAkArAICAhclcyVkX190b3VyRHluYW1pY0RhdGFfXwkApAMBBQN0SWQBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgN0SWQLZHVja0Fzc2V0SWQJALkJAgkAzAgCAh8lcyVkJXNfX2Jlc3RSZXN1bHRCeVRvdXJBbmREdWNrCQDMCAIJAKQDAQUDdElkCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwCAl9fAAlpZHhTdGF0aWMAAAAKaWR4RHluYW1pYwABAAp0U3RhdGljRW5kAAYADnREeW5hbWljU3RhdHVzAAEBC2dldFRvdXJEYXRhAgx0b3VyQ29udHJhY3QDdElkBAZzdGF0aWMJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEFA3RJZAkArAICCQCsAgICGUVycm9yIHJlYWRpbmcgdG91cm5hbWVudCAJAKQDAQUDdElkAgUgZGF0YQICX18EB2R5bmFtaWMJALwJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFDHRvdXJDb250cmFjdAkBFmtleVRvdXJEeW5hbWljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fCQDMCAIFBnN0YXRpYwkAzAgCBQdkeW5hbWljBQNuaWwBDmlzSW5Ub3VybmFtZW50Agx0b3VyQ29udHJhY3QIbG9jYXRpb24EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQx0b3VyQ29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQDbG9jCQC1CQIFCGxvY2F0aW9uAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUMdG91ckNvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBDGlzSW5EZWxpdmVyeQEIbG9jYXRpb24EA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQECGRpc3RhbmNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQhsb2NJZHhJZAMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQJAGYCCQBkAgUJc3RhcnRUaW1lBRJURU5fTUlOVVRFU19NSUxMSVMFA25vdwcJAGcCAAMFCGRpc3RhbmNlBwEPaXNVc3VhbExvY2F0aW9uAQhsb2NhdGlvbgQHbG9jVHlwZQkAkQMCCQC1CQIFCGxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAwkBAiE9AgUHbG9jVHlwZQIBVAkBAiE9AgUHbG9jVHlwZQIBRAcBCW9uTWlzc2lvbgIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwQHbG9jVHlwZQkAkQMCBQNsb2MFCmxvY0lkeFR5cGUDCQAAAgUHbG9jVHlwZQIBRAYDAwMJAAACCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBVAkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNsb2MFD2xvY0lkeENvbnRpbmVudAUGbGFzdElkBwkAAAIJAJEDAgUHZHluYW1pYwUOdER5bmFtaWNTdGF0dXMCCklOUFJPR1JFU1MHCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnN0YXRpYwUKdFN0YXRpY0VuZAUDbm93BwESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAEMY2hlYXRBdHRlbXB0AwZvbGRMb2MGbmV3TG9jCWNoZWF0Q2FzZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZDaGVhdCBhdHRlbXB0OiBvbGRMb2M9BQZvbGRMb2MCCSwgbmV3TG9jPQUGbmV3TG9jAgcsIGNhc2U9CQCkAwEFCWNoZWF0Q2FzZQAWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQcAGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQcACkRBWV9NSUxMSVMAgLiZKQAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAUKREFZX01JTExJUwMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AE0RFTElWRVJZX1BVTklTSE1FTlQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgJeTBQMJAAACAQFUBQckbWF0Y2gwAKD3NgkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAAUSWR4Q2ZnVG91cm5hbWVudERhcHAABwAPSWR4Q2ZnQWNyZXNEYXBwAAgBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAAEnRvdXJuYW1lbnRDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ1RvdXJuYW1lbnREYXBwAA1hY3Jlc0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUPSWR4Q2ZnQWNyZXNEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADAA13bGdBc3NldElkS2V5Agt3bGdfYXNzZXRJZAAKd2xnQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFC3dsZ0NvbnRyYWN0BQ13bGdBc3NldElkS2V5AhhXTEdPTEQgaXMgbm90IGlzc3VlZCB5ZXQAD2FjcmVzQXNzZXRJZEtleQIMYWNyZXNBc3NldElkAAxhY3Jlc0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQ1hY3Jlc0NvbnRyYWN0BQ9hY3Jlc0Fzc2V0SWRLZXkCF0FDUkVTIGlzIG5vdCBpc3N1ZWQgeWV0AAtyYW5kb21EZWxheQACAQlrZXlDb21taXQBB2FkZHJlc3MJAKwCAgITZmluaXNoQmxvY2tGb3JBZGRyXwUHYWRkcmVzcwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQljb250aW5lbnQJAKwCAgIUcmVzVHlwZXNCeUNvbnRpbmVudF8FCWNvbnRpbmVudAEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQlvd25lckFkZHIJAKwCAgITc3Rha2VkTGFuZHNCeU93bmVyXwUJb3duZXJBZGRyARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQlvd25lckFkZHIJAKwCAgIUc3Rha2VkUGllY2VzQnlPd25lcl8FCW93bmVyQWRkcgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCWFzQW55TGlzdAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAglMaXN0W0FueV0EAWwFByRtYXRjaDAFAWwJAAIBAhtmYWlsIHRvIGNhc3QgaW50byBMaXN0W0FueV0BCWFzQm9vbGVhbgEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgdCb29sZWFuBAFzBQckbWF0Y2gwBQFzCQACAQIZZmFpbCB0byBjYXN0IGludG8gQm9vbGVhbgEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQEHaXNEaWdpdAEBcwkBCWlzRGVmaW5lZAEJALYJAQUBcwEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEKZml4ZWRQb2ludAIDdmFsCGRlY2ltYWxzBAZ0ZW5Qb3cJAGwGAAoAAAUIZGVjaW1hbHMAAAAABQRET1dOBAdsb3dQYXJ0CQCkAwEJAGoCBQN2YWwFBnRlblBvdwQGemVyb2VzCQCwAgIJAKQDAQUGdGVuUG93CQBkAgABCQCxAgEFB2xvd1BhcnQJAKwCAgkArAICCQCsAgIJAKQDAQkAaQIFA3ZhbAUGdGVuUG93AgEuBQZ6ZXJvZXMFB2xvd1BhcnQBD2dldFJhbmRvbU51bWJlcgMIbWF4VmFsdWUEc2FsdAdlbnRyb3B5BApyYW5kb21IYXNoCQD3AwEJAMsBAgUEc2FsdAUHZW50cm9weQkAagIJALEJAQUKcmFuZG9tSGFzaAUIbWF4VmFsdWUADWluY3ViYXRvckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRWt0VnV4MlJoY2hTTjYzRHNEbzRiNG16NFFxektTZUR2AwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAAticmVlZGVyQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BEVnVVNDVIN0VoNWRtdE5iblJOUlN0R3dVTEE3Tlk2SGIDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AA3B1YgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAMFFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkBIKsXV48VZ+NZVEGw1nLrZpvEo9NmXtWZhlDfmDcfsgkIASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAMJAAACAQFUBQckbWF0Y2gwASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAkAAgECDVVua25vd24gY2hhaW4ADEVNUFRZX1BST0Q1MAGQAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEUZJVkVNSU5VVEVTTUlMTElTAOCnEgAMUkVOQU1JTkdDT1NUAMCWsQIACk1BWE5BTUVMRU4AMgAVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AICt4gQADEVYUE1BVEVSSUFMUwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACm3YLtqwcDCQAAAgEBVAUHJG1hdGNoMACqp4GzCQkAAgECDVVua25vd24gY2hhaW4AB0VYUFVTRFQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgOWadwMJAAACAQFUBQckbWF0Y2gwAIDlmncJAAIBAg1Vbmtub3duIGNoYWluAAxTX0NPU1RfQUNSRVMAgPKLqAkABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIEbGNuXwUEbmFtZQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgNsYV8FB2xhbmROdW0BHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICBWlsYW9fBQdhc3NldElkAgFfBQlvd25lckFkZHIBEWtleUxhbmROdW1Ub093bmVyAQdsYW5kTnVtCQCsAgICA2xvXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBt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BGZyZWUEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQGbmV3QW10AwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcJAGUCBQRjdXJyBQVjb3VudAkAZAIFBGN1cnIFBWNvdW50BAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIFBm5ld0FtdAUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFBGN1cnIFDlBST0RVQ1RQS0dTSVpFCQCVCgMJAMsBAgkAywECBQRoZWFkCQCaAwEFBm5ld0FtdAUEdGFpbAkAZAIFCG9jY3VwaWVkBQhkZWx0YVZvbAkAZQIFBGZyZWUFCGRlbHRhVm9sAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQBmAgUFY291bnQFDU1BWFBST0RJTlNMT1QJAAIBCQCsAgIJAKwCAgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAlpc0JpZ0l0ZW0DAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwQGY29tcGF0CQCRAwIFBnJlY2lwZQUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJQKAgkAywECCQDLAQIFBGhlYWQJAJoDAQkAZAIFBGN1cnIDBQppc1Bvc2l0aXZlBQVjb3VudAkBAS0BBQVjb3VudAUEdGFpbAUJaXNCaWdJdGVtAQtzbG90c0dyb3VwQgYBZwRicEluCmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BXN0YXRzAwkBAiE9AgUBZwIABAVzbG90cwkAtQkCBQFnAgEsAwkAZgIJAJADAQUFc2xvdHMFCE1BWFNMT1RTCQACAQISV3Jvbmcgc2xvdHMgZm9ybWF0BAJzMAkAkQMCBQVzbG90cwAABAJzMQMJAGYCCQCQAwEFBXNsb3RzAAEJAJEDAgUFc2xvdHMAAQIAAwMJAAACBQJzMAIACQAAAgUCczECAAcFBGJwSW4EBXRtcFMwAwkBAiE9AgUCczACAAkBCGFkZFByb2RCBwUCczAFBGJwSW4FCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAAUFc3RhdHMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQVzdGF0cwJfMQgFBXRtcFMwAl8xBQRicEluAQZkcmVzc0IEB3NlZ0xpc3QGcEJ5dGVzCmlzUG9zaXRpdmUFc3RhdHMKAQdzZWdtZW50AgNhY2MDc2VnBAFqCAUDYWNjAl8xBAdtYWluQXV4CQC1CQIFA3NlZwIBOwMJAQIhPQIJAJADAQUHbWFpbkF1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BmN1cnJFcQUJdGVtcFByb2RCBwUFc3RhdHMJAAACBQhuZXdQcm9kQgUIbmV3UHJvZEIBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgITLCB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfAQl2aXJ0Q2xhaW0EDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgID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CAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkA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bAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALoJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALoJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkBASEBCQEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFkVxdWlwbWVudCBpbmNvbXBhdGlibGUEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDM2NjkyMzcyMzEDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzY2OTIzNzIzMQJfMQQGZHVja0lkCAUNJHQwMzY2OTIzNzIzMQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzOTYwNTQwNDc2AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzOTYwNTQwNDc2Al8xBAVicFJlcwgFDSR0MDM5NjA1NDA0NzYCXzIEBWxvZnRPCAUNJHQwMzk2MDU0MDQ3NgJfMwQFbG9mdEYIBQ0kdDAzOTYwNTQwNDc2Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMDCQEBIQEFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZwIFCGN1ckxldmVsAAMHCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG1heEluZnJhCQBkAgkAaQIJAQRzcXJ0BAUGcGllY2VzAAAAAAUERE9XTgAFAAIECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQMDBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGYCBQhuZXdMZXZlbAUIbWF4SW5mcmEHCQACAQkArAICAiVDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gCQCkAwEFCG1heEluZnJhBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkCQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBQdkZWx0YVhQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAJARN1cGRhdGVTdGF0c0ludGVybmFsBAkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQlrZXlVc2VyWFABBQRhZGRyCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBQdkZWx0YVhQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93CQBmAgABBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsARJleGl0RGVsaXZlcnlDb21tb24EC2R1Y2tBc3NldElkBWNoZWNrBW5ld0hQBXNjb3JlBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAlzdGFydFRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAhkaXN0YW5jZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkAhRORlQgZHVjayBpcyBvcnBoYW5lZAQJaGVhbHRoS2V5CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAljdXJIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEFCWhlYWx0aEtleQQOb3V0Y29tZUFjdGlvbnMDAwkAZgIFCGRpc3RhbmNlAAAGAwMFBWNoZWNrCQBmAgUFc2NvcmUAAAcJAGYCBQVuZXdIUAAABwQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFBW93bmVyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFBW93bmVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhjb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIY291bnRLZXkAAAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBW93bmVyCQBpAgUJc3RhcnRUaW1lBQlEQVlNSUxMSVMFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMDAwUFY2hlY2sJAGYCBQVuZXdIUAAABwkAZgIJAGQCBQlzdGFydFRpbWUFElRFTl9NSU5VVEVTX01JTExJUwUDbm93BwkAAgECJllvdXIgZHVjayBpcyBzdGlsbCBvbiBkZWxpdmVyeSBtaXNzaW9uBAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEBnVubG9jawkA/AcEBQ9lY29ub215Q29udHJhY3QCFHVwZGF0ZURlbGl2ZXJ5TG9ja2VkCQDMCAIJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFA25pbAMJAAACBQZ1bmxvY2sFBnVubG9jawMDAwUFY2hlY2sJAGcCAAAFBW5ld0hQBwYJAGcCAAAFCWN1ckhlYWx0aAUDbmlsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQBkAgUJc3RhcnRUaW1lBRNERUxJVkVSWV9QVU5JU0hNRU5UBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJUKAwUOb3V0Y29tZUFjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ1zYXZlZExvY2F0aW9uBQNuaWwFDXNhdmVkTG9jYXRpb24BDW1lcmdlSW50ZXJuYWwGC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIdbWVyZ2VJbnRlcm5hbF9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIbbWVyZ2VJbnRlcm5hbF9jaGVja0RlbGl2ZXJ5CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEIdXNlckFkZHIEBGR1Y2sJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHIDCQEJaXNEZWZpbmVkAQUEZHVjawQLZHVja0Fzc2V0SWQJAQV2YWx1ZQEFBGR1Y2sEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBANsb2MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgIBXwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQDAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUQGCQBmAgkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUDbmlsBAloZWFsdGhLZXkJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUIbG9jSWR4SWQAAAQGcmV3YXJkCQD8BwQFD2Vjb25vbXlDb250cmFjdAISc2VuZERlbGl2ZXJ5UmV3YXJkCQDMCAIFCHVzZXJBZGRyBQNuaWwFA25pbAMJAAACBQZyZXdhcmQFBnJld2FyZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDNCAIJAM0IAgQLbG9ja2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BRFkZWxpdmVyeUxvY2tlZEtleQAABAZ1bmxvY2sJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sDCQBnAgAACQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWFsdGhLZXkFA25pbAQKcHVuaXNobWVudAkA/AcEBQR0aGlzAgtzYXZlSW50ZWdlcgkAzAgCCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkCQDMCAIJAGQCBQlzdGFydFRpbWUFE0RFTElWRVJZX1BVTklTSE1FTlQFA25pbAUDbmlsAwkAAAIFCnB1bmlzaG1lbnQFCnB1bmlzaG1lbnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkBDEludGVnZXJFbnRyeQIFCWhlYWx0aEtleQkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBAh1c2VyQWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIJAM0IAgkBFWNoZWNrT3V0ZGF0ZWREZWxpdmVyeQEFCHVzZXJBZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkAQxwcm9sb2dGbGlnaHQBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYXN0VHhJZEJ5VXNlcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFA25pbC0BaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBC3NhdmVJbnRlZ2VyAgNrZXkGYW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIgc2F2ZUludGVnZXIgaXMgbm90IHB1YmxpYyBtZXRob2QJAMwIAgkBDEludGVnZXJFbnRyeQIFA2tleQUGYW1vdW50BQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAxyZXNCeUNvbnRLZXkJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQkAkQMCBQFkBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFDHJlc0J5Q29udEtleQILMF8wXzBfMF8wXzACAV8EEHVwZGF0ZWRDb250UHJvcHMJALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQljb250UHJvcHMFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQDCQBnAgkAkAMBBQVsYW5kcwUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSCQACAQkArAICCQCsAgICGVlvdXIgYWxyZWFkeSBzdGFrZWQgbWF4ICgJAKQDAQUYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSAgcpIGxhbmRzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFB2FkZHJlc3MECW9sZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJd2xnUmVzdWx0CQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUHYWRkcmVzcwUDbmlsBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQt1bnN0YWtlTGFuZAENbGFuZEFzc2V0SWRJbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEJANkEAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIFDHJlc0J5Q29udEtleQUQdXBkYXRlZENvbnRQcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwUDbmlsBQ1wcm9sb2dBY3Rpb25zBQl3bGdSZXN1bHQBaQEJc3Rha2VEdWNrAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDOCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQ1wcm9sb2dBY3Rpb25zAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFCmFzc2V0SWRTdHIJAAIBAhl1bnN0YWtlRHVja19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzggCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAWkBCGNsYWltUmVzAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQtjbGFpbU1vZGVXaAUObGFuZEFzc2V0SWRTdHIJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDXByb2xvZ0FjdGlvbnMJAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBDHByb2xvZ0ZsaWdodAEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQFbmV3SFAIBQFmAl8xBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQLbmV3TG9jYXRpb24IBQFmAl80AwkAAAIFC25ld0xvY2F0aW9uBQtjdXJMb2NhdGlvbgkAAgECIllvdSBjYW4ndCBmbHkgdG8gdGhlIHNhbWUgbG9jYXRpb24EBm5ld0xvYwkAtQkCBQtuZXdMb2NhdGlvbgIBXwQGaXNUb3VyCQAAAgkAkQMCBQZuZXdMb2MFCmxvY0lkeFR5cGUCAVQEB2lzRGVsaXYJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBRAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDczMTE4NzMyMTUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzMxMTg3MzIxNQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzMxMTg3MzIxNQJfMgQNJHQwNzMyMTg3NjMzMAMJAQEhAQkBCW9uTWlzc2lvbgIFEnRvdXJuYW1lbnRDb250cmFjdAULY3VyTG9jYXRpb24DCQEBIQEJAQ9pc1VzdWFsTG9jYXRpb24BBQtuZXdMb2NhdGlvbgkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAFAwkAZgIFBW5ld0hQAAAJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAcDCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAMJAQEhAQkBDGlzSW5EZWxpdmVyeQEFC2N1ckxvY2F0aW9uBAhzYXZlZExvYwkBCGFzU3RyaW5nAQkA/AcEBQR0aGlzAhBhdXRvRXhpdERlbGl2ZXJ5CQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFBW5ld0hQCQDMCAIDBQdpc0RlbGl2AgIxMAICMTEJAMwIAgAABQNuaWwFA25pbAMJAAACBQhzYXZlZExvYwUIc2F2ZWRMb2MDBQdpc0RlbGl2CQCUCgIFCHNhdmVkTG9jBQVuZXdIUAMJAGYCBQVuZXdIUAAACQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAkAlAoCBQhzYXZlZExvYwAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkBASEBBQdpc0RlbGl2CQACAQIkWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIGRlbGl2ZXJ5AwkBASEBCQEMaXNJbkRlbGl2ZXJ5AQULbmV3TG9jYXRpb24JAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ADQQFc2NvcmUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZuZXdMb2MFCGxvY0lkeElkBAZjdXJMb2MJALUJAgULY3VyTG9jYXRpb24CAV8DCQECIT0CBQVzY29yZQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZjdXJMb2MFCGxvY0lkeElkAAEJAQxjaGVhdEF0dGVtcHQDBQtjdXJMb2NhdGlvbgULbmV3TG9jYXRpb24ADgMDCQBmAgUFbmV3SFAAAAkAZgIAAQUFc2NvcmUHCQCUCgIFC25ld0xvY2F0aW9uBQVuZXdIUAQIc2F2ZWRMb2MJAQhhc1N0cmluZwEJAPwHBAUEdGhpcwIQYXV0b0V4aXREZWxpdmVyeQkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQVuZXdIUAkAzAgCAgUxNS0xNwkAzAgCBQVzY29yZQUDbmlsBQNuaWwDCQAAAgUIc2F2ZWRMb2MFCHNhdmVkTG9jCQCUCgIFCHNhdmVkTG9jBQVuZXdIUAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQJbG9jVG9TYXZlCAUNJHQwNzMyMTg3NjMzMAJfMQQIaHBUb1NhdmUIBQ0kdDA3MzIxODc2MzMwAl8yCQCUCgIJAM4IAgkAzggCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQlsb2NUb1NhdmUJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQhocFRvU2F2ZQUDbmlsBQ1wcm9sb2dBY3Rpb25zAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIFBW5ld0hQAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECEmhlYWxfY2hlY2tEZWxpdmVyeQQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MGcmVjaXBlBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCBQZyZWNpcGUCAV8FCnJJZHhFZmZlY3QFAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZoZWFsRVNfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECFGhlYWxFU19jaGVja0RlbGl2ZXJ5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC8CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8FCnJJZHhFZmZlY3QEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgUFTVVMVDgFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQ9jb21taXRGb3JSYW5kb20ABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawUDbmlsBQ1wcm9sb2dBY3Rpb25zBQtmaW5pc2hCbG9jawFpAQhidXlTTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwODM3NzA4Mzg2NwkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA4Mzc3MDgzODY3Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA4Mzc3MDgzODY3Al8yBAFlCQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAJpZAgIBQFlAl8yAl8xBAZyZXN1bHQDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEFA25pbAIAAAAJAJUKAwkAzggCCAUBZQJfMQMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDNCAIJAM0IAgkAzQgCCQDNCAIFA25pbAkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAgFAWYCXzEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQIBQFmAl8zAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIaZXhwZWRpdGlvbl9jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIYZXhwZWRpdGlvbl9jaGVja0RlbGl2ZXJ5BAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCVCgMIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMFC2FjcmVzUmVzdWx0AWkBEGJ1eVNMYW5kRm9yQWNyZXMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUMYWNyZXNBc3NldElkCQACAQIUQUNSRVMgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFDFNfQ09TVF9BQ1JFUwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFDFNfQ09TVF9BQ1JFUwQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAthY3Jlc1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ1hY3Jlc0NvbnRyYWN0AglidXJuQWNyZXMJAMwIAgUMU19DT1NUX0FDUkVTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFDGFjcmVzQXNzZXRJZAUDYW10BQNuaWwJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzggCBQZyZXN1bHQFDXByb2xvZ0FjdGlvbnMBaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgIJAKUIAQgFAWkGY2FsbGVyBQxsYW5kQXNzZXRJZHMJAJQKAgkAzggCCQDOCAIIBQZyZXN1bHQCXzEFDXByb2xvZ0FjdGlvbnMICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6BQNuaWwFDXByb2xvZ0FjdGlvbnMBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPAwkAZgIAAAUFbG9mdEYJAAIBAjBPcGVyYXRpb24gbGVhZHMgdG8gbmVnYXRpdmUgZnJlZSB3YXJlaG91c2Ugc3BhY2UECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQENc2V0Q3VzdG9tTmFtZQMHYXNzZXRJZApjdXN0b21OYW1lBHR5cGUEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM4IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUNcHJvbG9nQWN0aW9ucwAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA0kdDA5OTQ4Nzk5ODc3AwkAZwIAAAUNdmlydFdsZ1BvaW50cwkAlAoCAAAFA25pbAQHZGVsdGFYUAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIJdGFrZVdsZ1hwCQDMCAIFBGFkZHIFA25pbAUDbmlsAwkAAAIFB2RlbHRhWFAFB2RlbHRhWFAJAJQKAgUNdmlydFdsZ1BvaW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVVzZXJYUAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAl3bGdQb2ludHMIBQ0kdDA5OTQ4Nzk5ODc3Al8xBAp3bGdBY3Rpb25zCAUNJHQwOTk0ODc5OTg3NwJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIZZXF1aXBEdWNrX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhdlcXVpcER1Y2tfY2hlY2tEZWxpdmVyeQQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUFbmV3RXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBXN0YXRzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA8kdDAxMDY3MTUxMDY4MzAJAQVmb3J0QgYFDGN1cnJlbnRGb3J0cwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQJ3aAUJd2hJZHhQcm9kBQRjdXJPBQRjdXJGBgUDbmlsBAl0ZW1wUHJvZEIIBQ8kdDAxMDY3MTUxMDY4MzACXzEEBXRlbXBPCAUPJHQwMTA2NzE1MTA2ODMwAl8yBAV0ZW1wRggFDyR0MDEwNjcxNTEwNjgzMAJfMwQPJHQwMTA2ODMzMTA2OTI5CQEFZm9ydEIGBQhuZXdGb3J0cwUJdGVtcFByb2RCBQV0ZW1wTwUFdGVtcEYHBQlkdWNrU3RhdHMECG5ld1Byb2RCCAUPJHQwMTA2ODMzMTA2OTI5Al8xBARuZXdPCAUPJHQwMTA2ODMzMTA2OTI5Al8yBARuZXdGCAUPJHQwMTA2ODMzMTA2OTI5Al8zBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUHY3VyTG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUEbmV3TwkAzAgCCQCkAwEFBG5ld0YJAMwIAgkAkQMCBQdjdXJMb2Z0BQh2b2xUb3RhbAUDbmlsAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBE2luaXREdWNrVG91ckF0dGVtcHQBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAx0b3VyTG9jYXRpb24JAKwCAgkApAMBBQZsYXN0SWQCBF9UXzAJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDHRvdXJMb2NhdGlvbgUDbmlsBQx0b3VyTG9jYXRpb24BaQEMYnJlYWtBdHRlbXB0AAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAQIhPQIJAJEDAgkAtQkCBQtjdXJMb2NhdGlvbgIBXwUKbG9jSWR4VHlwZQIBVAkAAgECIllvdXIgZHVjayBpcyBub3QgaW4gdGhlIHRvdXJuYW1lbnQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUNcHJvbG9nQWN0aW9ucwkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFDXNhdmVkTG9jYXRpb24FC2N1ckxvY2F0aW9uAWkBFmV4aXRUb3VybmFtZW50SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUNc2F2ZWRMb2NhdGlvbgUDbmlsBwFpARRleGl0RGVsaXZlcnlJbnRlcm5hbAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkBAFlCQESZXhpdERlbGl2ZXJ5Q29tbW9uBAULZHVja0Fzc2V0SWQHAAAAAAkAlAoCCQDOCAIIBQFlAl8xCAUBZQJfMgcBaQEQYXV0b0V4aXREZWxpdmVyeQQLZHVja0Fzc2V0SWQFbmV3SFAGcmVhc29uBXNjb3JlAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQBZQkBEmV4aXREZWxpdmVyeUNvbW1vbgQFC2R1Y2tBc3NldElkBgUFbmV3SFAFBXNjb3JlCQCUCgIIBQFlAl8xCAUBZQJfMwFpAQ1icmVha0RlbGl2ZXJ5AAkAlAoCCQEGcHJvbG9nAQUBaQINYnJlYWtEZWxpdmVyeQFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAhRXcm9uZyBtZXNzYWdlIGZvcm1hdAQLZHVja0Fzc2V0SWQJAJEDAgUFcGFydHMAAAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHnByZXBhcmVSb2JiZXJ5X2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhxwcmVwYXJlUm9iYmVyeV9jaGVja0RlbGl2ZXJ5BAdyb2JDb3N0CAkBDmdldFJvYmJlcnlEYXRhAgUEdGhpcwULZHVja0Fzc2V0SWQCXzEDCQBmAgUHcm9iQ29zdAUGd2xnQW10CQACAQkArAICCQCsAgIJAKwCAgIIUGF5bWVudCAJAKQDAQUGd2xnQW10AgwgPCByZXF1aXJlZCAJAKQDAQUHcm9iQ29zdAQKY2FuZGlkYXRlcwkAtQkCCQCRAwIFBXBhcnRzAAECAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAADAwkBAiE9AgUJZHVja1N0YXRlBQtkdWNrSWR4RnJlZQkAZgIFB2xhbmRFVEEFA25vdwcJAAIBCQCsAgICJ1lvdSBhbHJlYWR5IHN0YXJ0ZWQgcm9iYmluZywgd2FpdCB0aWxsIAkApAMBBQdsYW5kRVRBCgEHY2hlY2tlcgIDYWNjC2xhbmRBc3NldElkBAVzdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkAAAEC2Nvb2xkb3duRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAAAAwkAZgIFBXN0YXRlCQCQAwEFEGxhbmRSb2JDb29sZG93bnMJAAIBAg1JbnZhbGlkIHN0YXRlAwkAZgIFA25vdwULY29vbGRvd25FVEEECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAwkAZwIAAAUKc3Rha2VkVGltZQUDYWNjBAFhCQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFAWELZGVzY3JpcHRpb24CAV8EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIFA25vdwUKc3Rha2VkVGltZQQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQxwcm9kdWN0aXZpdHkFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFDk1JTl9SRVNfVE9fUk9CBQhhdmFpbFJlcwUDYWNjCQDNCAIFA2FjYwULbGFuZEFzc2V0SWQFA2FjYwQIZmlsdGVyZWQKAAIkbAUKY2FuZGlkYXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCQCQAwEFCGZpbHRlcmVkAAAJAAIBAhlObyBjYW5kaWRhdGVzIGZvciByb2JiZXJ5BAZybmRJZHgJAQ9nZXRSYW5kb21OdW1iZXIDCQCQAwEFCGZpbHRlcmVkBQdtZXNzYWdlBQNzaWcEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAkAZAIFA25vdwkAkQMCBRBsYW5kUm9iQ29vbGRvd25zBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQFEGR1Y2tJZHhQcmVwYXJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwULbGFuZEFzc2V0SWQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJQKAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cAAAFpAQ5hY2NlcHREZWxpdmVyeQAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFD2RlbGl2ZXJ5RnVuZEtleQAABAtsb2NrZWRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9lY29ub215Q29udHJhY3QFEWRlbGl2ZXJ5TG9ja2VkS2V5AAADCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZCQBlAgUJZnVuZFRvdGFsBQtsb2NrZWRUb3RhbAkAAgEJAKwCAgkArAICCQCsAgICIERlbGl2ZXJ5IGlzIG5vdCBhdmFpbGFibGUsIGZ1bmQ9CQEKZml4ZWRQb2ludAIFCWZ1bmRUb3RhbAAGAgksIGxvY2tlZD0JAQpmaXhlZFBvaW50AgULbG9ja2VkVG90YWwABgQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQIZGVsYXlFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAAAAwkAZgIFCGRlbGF5RVRBBQNub3cJAAIBCQCsAgICKkRlbGl2ZXJ5IGlzIGZvcmJpZGRlbiBmb3IgeW91ciBkdWNrIHVudGlsIAkApAMBBQhkZWxheUVUQQQGaGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkAwkAZwIAAAUGaGVhbHRoCQACAQIrWW91IGNhbm5vdCBhY2NlcHQgZGVsaXZlcnkgd2l0aCB6ZXJvIGhlYWx0aAQIY291bnRLZXkJARRrZXlVc2VyRGVsaXZlcnlDb3VudAEFCHVzZXJBZGRyBAVjb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAABAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUIdXNlckFkZHIAAAQFdG9kYXkJAGkCBQNub3cFCURBWU1JTExJUwQFYWNyZXMJAQt2YWx1ZU9yRWxzZQIJAJoIAgUNYWNyZXNDb250cmFjdAkBGmtleUFjcmVzU3Rha2VkQW1vdW50QnlVc2VyAQUIdXNlckFkZHIAAAQRYWxsb3dlZERlbGl2ZXJpZXMJAGQCBRdBTExPV0VEX0ZSRUVfREVMSVZFUklFUwkAaQIFBWFjcmVzBRpBQ1JFU19GT1JfREVMSVZFUllfQVRURU1QVAMDCQBnAgUFY291bnQFEWFsbG93ZWREZWxpdmVyaWVzCQAAAgUHbGFzdERheQUFdG9kYXkHCQACAQkArAICCQCsAgICEVlvdSBhbHJlYWR5IHVzZWQgCQCkAwEFEWFsbG93ZWREZWxpdmVyaWVzAhwgZGVsaXZlcnkgYXR0ZW1wdHMgZm9yIHRvZGF5AwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIeYWNjZXB0RGVsaXZlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHGFjY2VwdERlbGl2ZXJ5X2NoZWNrRGVsaXZlcnkEDm5ld0xvY2tlZFRvdGFsCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZAIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EEGRlbGl2ZXJ5TG9jYXRpb24JAKwCAgkApAMBBQNub3cCBF9EXzAJAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUQZGVsaXZlcnlMb2NhdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkDCQECIT0CBQdsYXN0RGF5BQV0b2RheQAABQVjb3VudAUDbmlsBQ1wcm9sb2dBY3Rpb25zCQCUCgIFEGRlbGl2ZXJ5TG9jYXRpb24FDm5ld0xvY2tlZFRvdGFsAWkBFWNoZWNrRGVsaXZlcnlDYWxsYmFjawELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgUDbmlsCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkAWkBD2dlblRlc3RSRUFET05MWQIEc2VlZA1sYW5kU2l6ZUluZGV4BAN2cmYJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEA/sWsAQN2cmYEBmJpZ051bQkBA2FicwEJAJ4DAQkAywECBQN2cmYJAPcDAQkAmgMBBQRzZWVkCQCUCgIFA25pbAkBBGdlbjECBQZiaWdOdW0FDWxhbmRTaXplSW5kZXgAzOYjrg==", "height": 2827211, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: BohPRMGBuTGSqzCqDj6UiF84FXk4jdEoYApe7tp26RBv Next: 6JQn6zjbVZccBYm5XhfrGCh2R1LZUiQ3jmVyQ495S3pC Diff:
OldNewDifferences
14521452
14531453 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
14541454 }
1455- let hE = hG[hR]
1456- func hX (hC,hY) = {
1457- func hZ (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3)))
1458-
1459- let ia = {
1455+ let hX = hG[hR]
1456+ func hY (hC,hZ) = {
1457+ func ia (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3)))
1458+
1459+ let ib = {
14601460 let eW = cQ
14611461 let eX = size(eW)
14621462 let eY = nil
1463- func ib (fa,fb) = if ((fb >= eX))
1464- then fa
1465- else hZ(fa, eW[fb])
1466-
14671463 func ic (fa,fb) = if ((fb >= eX))
14681464 then fa
1465+ else ia(fa, eW[fb])
1466+
1467+ func id (fa,fb) = if ((fb >= eX))
1468+ then fa
14691469 else throw("List size exceeds 6")
14701470
1471- ic(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6)
1472- }
1473- let id = max(ia)
1474- func ie (eU,ho) = {
1475- let dE = (id - ho)
1471+ id(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6)
1472+ }
1473+ let ie = max(ib)
1474+ func if (eU,ho) = {
1475+ let dE = (ie - ho)
14761476 $Tuple2((eU._1 :+ dE), (eU._2 + dE))
14771477 }
14781478
1479- let if = {
1480- let eW = ia
1479+ let ig = {
1480+ let eW = ib
14811481 let eX = size(eW)
14821482 let eY = $Tuple2(nil, 0)
1483- func ig (fa,fb) = if ((fb >= eX))
1484- then fa
1485- else ie(fa, eW[fb])
1486-
14871483 func ih (fa,fb) = if ((fb >= eX))
14881484 then fa
1485+ else if(fa, eW[fb])
1486+
1487+ func ii (fa,fb) = if ((fb >= eX))
1488+ then fa
14891489 else throw("List size exceeds 6")
14901490
1491- ih(ig(ig(ig(ig(ig(ig(eY, 0), 1), 2), 3), 4), 5), 6)
1492- }
1493- let ii = if._1
1494- let ij = if._2
1495- let ik = (ij / 60)
1496- let il = if ((ij == 0))
1491+ ii(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6)
1492+ }
1493+ let ij = ig._1
1494+ let ik = ig._2
1495+ let il = (ik / 60)
1496+ let im = if ((ik == 0))
14971497 then hp(6, hC._4)
14981498 else {
1499- let im = hp((ij + (ik * 6)), hC._4)
1500- let ff = im._1
1501- let hM = im._2
1502- $Tuple2(ht(ii, ff, ik), hM)
1499+ let in = hp((ik + (il * 6)), hC._4)
1500+ let ff = in._1
1501+ let hM = in._2
1502+ $Tuple2(ht(ij, ff, il), hM)
15031503 }
1504- let dg = il._1
1505- let in = il._2
1506- func io (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg))
1504+ let dg = im._1
1505+ let io = im._2
1506+ func ip (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg))
15071507 then gK
15081508 else 0)))
15091509
1510- let ip = {
1510+ let iq = {
15111511 let eW = cQ
15121512 let eX = size(eW)
15131513 let eY = nil
1514- func iq (fa,fb) = if ((fb >= eX))
1515- then fa
1516- else io(fa, eW[fb])
1517-
15181514 func ir (fa,fb) = if ((fb >= eX))
15191515 then fa
1516+ else ip(fa, eW[fb])
1517+
1518+ func is (fa,fb) = if ((fb >= eX))
1519+ then fa
15201520 else throw("List size exceeds 6")
15211521
1522- ir(iq(iq(iq(iq(iq(iq(eY, 0), 1), 2), 3), 4), 5), 6)
1523- }
1524- $Tuple4((hC._1 :+ hm[dg]), ip, (hC._3 + gK), in)
1522+ is(ir(ir(ir(ir(ir(ir(eY, 0), 1), 2), 3), 4), 5), 6)
1523+ }
1524+ $Tuple4((hC._1 :+ hm[dg]), iq, (hC._3 + gK), io)
15251525 }
15261526
15271527 let fm = {
15281528 let eW = hl
15291529 let eX = size(eW)
1530- let eY = $Tuple4(nil, hW, hE, hS)
1531- func ib (fa,fb) = if ((fb >= eX))
1532- then fa
1533- else hX(fa, eW[fb])
1534-
1530+ let eY = $Tuple4(nil, hW, hX, hS)
15351531 func ic (fa,fb) = if ((fb >= eX))
15361532 then fa
1533+ else hY(fa, eW[fb])
1534+
1535+ func id (fa,fb) = if ((fb >= eX))
1536+ then fa
15371537 else throw("List size exceeds 25")
15381538
1539- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1539+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
15401540 }
1541- func is (eU,fE) = (eU + fm._1[fE])
1541+ func it (eU,fE) = (eU + fm._1[fE])
15421542
15431543 $Tuple2(hR, {
15441544 let eW = hl
15451545 let eX = size(eW)
15461546 let eY = ""
1547- func ig (fa,fb) = if ((fb >= eX))
1548- then fa
1549- else is(fa, eW[fb])
1550-
15511547 func ih (fa,fb) = if ((fb >= eX))
15521548 then fa
1549+ else it(fa, eW[fb])
1550+
1551+ func ii (fa,fb) = if ((fb >= eX))
1552+ then fa
15531553 else throw("List size exceeds 25")
15541554
1555- ih(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1555+ ii(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
15561556 })
15571557 }
15581558
15591559
1560-let it = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1561-
1562-func iu (dG,iv) = {
1560+let iu = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1561+
1562+func iv (dG,iw) = {
15631563 let hy = toInt((dG % em))
1564- let iw = if ((iv[0] > hy))
1564+ let ix = if ((iw[0] > hy))
15651565 then "A"
1566- else if ((iv[1] > hy))
1566+ else if ((iw[1] > hy))
15671567 then "B"
1568- else if ((iv[2] > hy))
1568+ else if ((iw[2] > hy))
15691569 then "C"
1570- else if ((iv[3] > hy))
1570+ else if ((iw[3] > hy))
15711571 then "D"
1572- else if ((iv[4] > hy))
1572+ else if ((iw[4] > hy))
15731573 then "E"
15741574 else "F"
1575- iw
1576- }
1577-
1578-
1579-func ix (iy,iz) = {
1580- let iA = it[iz]
1581- func iB (eU,eV) = $Tuple2((((((eU._1 + iu(eU._2, iA)) + iu((eU._2 / em), iA)) + iu((eU._2 / en), iA)) + iu((eU._2 / eo), iA)) + iu((eU._2 / ep), iA)), (eU._2 / eq))
1575+ ix
1576+ }
1577+
1578+
1579+func iy (iz,iA) = {
1580+ let iB = iu[iA]
1581+ func iC (eU,eV) = $Tuple2((((((eU._1 + iv(eU._2, iB)) + iv((eU._2 / em), iB)) + iv((eU._2 / en), iB)) + iv((eU._2 / eo), iB)) + iv((eU._2 / ep), iB)), (eU._2 / eq))
15821582
15831583 let gy = {
15841584 let eW = [1, 2, 3, 4, 5]
15851585 let eX = size(eW)
1586- let eY = $Tuple2("", (iy / el))
1586+ let eY = $Tuple2("", (iz / el))
15871587 func eZ (fa,fb) = if ((fb >= eX))
15881588 then fa
1589- else iB(fa, eW[fb])
1589+ else iC(fa, eW[fb])
15901590
15911591 func fc (fa,fb) = if ((fb >= eX))
15921592 then fa
15981598 }
15991599
16001600
1601-func iC (iD,gK) = {
1602- func iE (eU,dE) = {
1601+func iD (iE,gK) = {
1602+ func iF (eU,dE) = {
16031603 let fE = eU._2
16041604 let ho = parseIntValue(dE)
16051605 let hj = if ((ho == 0))
16131613 }
16141614
16151615 let gy = {
1616- let eW = iD
1616+ let eW = iE
16171617 let eX = size(eW)
16181618 let eY = $Tuple3(nil, 0, 0)
16191619 func eZ (fa,fb) = if ((fb >= eX))
16201620 then fa
1621- else iE(fa, eW[fb])
1621+ else iF(fa, eW[fb])
16221622
16231623 func fc (fa,fb) = if ((fb >= eX))
16241624 then fa
16271627 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
16281628 }
16291629 let hu = gy._1
1630- let iF = value(indexOf(hu, max(hu)))
1630+ let iG = value(indexOf(hu, max(hu)))
16311631 let hw = (gy._3 - 25)
1632- func iG (eU,dg) = {
1633- let dQ = (hu[dg] - (if ((dg == iF))
1632+ func iH (eU,dg) = {
1633+ let dQ = (hu[dg] - (if ((dg == iG))
16341634 then hw
16351635 else 0))
16361636 let dU = if ((dQ == 0))
16371637 then nil
16381638 else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "")
16391639 let gd = hm[dg]
1640- func iH (hC,hY) = (hC :+ gd)
1641-
1642- let iI = {
1640+ func iI (hC,hZ) = (hC :+ gd)
1641+
1642+ let iJ = {
16431643 let eW = dU
16441644 let eX = size(eW)
16451645 let eY = nil
16461646 func hP (fa,fb) = if ((fb >= eX))
16471647 then fa
1648- else iH(fa, eW[fb])
1648+ else iI(fa, eW[fb])
16491649
16501650 func hQ (fa,fb) = if ((fb >= eX))
16511651 then fa
16531653
16541654 hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
16551655 }
1656- (eU ++ iI)
1656+ (eU ++ iJ)
16571657 }
16581658
16591659 let ff = {
16621662 let eY = nil
16631663 func hP (fa,fb) = if ((fb >= eX))
16641664 then fa
1665- else iG(fa, eW[fb])
1665+ else iH(fa, eW[fb])
16661666
16671667 func hQ (fa,fb) = if ((fb >= eX))
16681668 then fa
16701670
16711671 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
16721672 }
1673- func is (eU,fE) = (eU + ff[fE])
1673+ func it (eU,fE) = (eU + ff[fE])
16741674
16751675 let eW = hl
16761676 let eX = size(eW)
16771677 let eY = ""
1678- func ib (fa,fb) = if ((fb >= eX))
1679- then fa
1680- else is(fa, eW[fb])
1681-
16821678 func ic (fa,fb) = if ((fb >= eX))
16831679 then fa
1680+ else it(fa, eW[fb])
1681+
1682+ func id (fa,fb) = if ((fb >= eX))
1683+ then fa
16841684 else throw("List size exceeds 25")
16851685
1686- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1687- }
1688-
1689-
1690-func iJ (iK) = {
1691- let gx = split(valueOrElse(getString(iK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1686+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1687+ }
1688+
1689+
1690+func iK (iL) = {
1691+ let gx = split(valueOrElse(getString(iL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
16921692 [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI))
16931693 then gx[bn]
16941694 else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI))
16971697 }
16981698
16991699
1700-func iL (iM) = {
1701- let fs = split(iM, "_")
1700+func iM (iN) = {
1701+ let fs = split(iN, "_")
17021702 ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0]))
17031703 }
17041704
17051705
1706-func iN (iO) = {
1707- let iP = iO[bg]
1708- func iQ (eU,iR) = (eU + parseIntValue(iR))
1709-
1710- func iS (eU,iR) = {
1706+func iO (iP) = {
1707+ let iQ = iP[bg]
1708+ func iR (eU,iS) = (eU + parseIntValue(iS))
1709+
1710+ func iT (eU,iS) = {
17111711 let dg = eU._1
1712- let eN = (((parseIntValue(iR) + bc) - 1) / bc)
1712+ let eN = (((parseIntValue(iS) + bc) - 1) / bc)
17131713 $Tuple2((dg + 1), (eU._2 + (eN * cK)))
17141714 }
17151715
1716- let iT = {
1717- let eW = split(iO[be], "_")
1716+ let iU = {
1717+ let eW = split(iP[be], "_")
17181718 let eX = size(eW)
17191719 let eY = 0
17201720 func eZ (fa,fb) = if ((fb >= eX))
17211721 then fa
1722- else iQ(fa, eW[fb])
1722+ else iR(fa, eW[fb])
17231723
17241724 func fc (fa,fb) = if ((fb >= eX))
17251725 then fa
17271727
17281728 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
17291729 }
1730- let iU = {
1731- let eW = split(iO[bf], "_")
1730+ let iV = {
1731+ let eW = split(iP[bf], "_")
17321732 let eX = size(eW)
17331733 let eY = 0
17341734 func hP (fa,fb) = if ((fb >= eX))
17351735 then fa
1736- else iQ(fa, eW[fb])
1736+ else iR(fa, eW[fb])
17371737
17381738 func hQ (fa,fb) = if ((fb >= eX))
17391739 then fa
17411741
17421742 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
17431743 }
1744- let iV = if ((iP == ""))
1744+ let iW = if ((iQ == ""))
17451745 then 0
1746- else ( let eW = split_4C(iP, "_")
1746+ else ( let eW = split_4C(iQ, "_")
17471747 let eX = size(eW)
17481748 let eY = $Tuple2(0, 0)
1749- func ib (fa,fb) = if ((fb >= eX))
1750- then fa
1751- else iS(fa, eW[fb])
1752-
17531749 func ic (fa,fb) = if ((fb >= eX))
17541750 then fa
1751+ else iT(fa, eW[fb])
1752+
1753+ func id (fa,fb) = if ((fb >= eX))
1754+ then fa
17551755 else throw("List size exceeds 50")
17561756
1757- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1758- ((iT + iU) + iV)
1759- }
1760-
1761-
1762-func iW (iX,iY,iZ) = {
1763- let iM = ((toString(iY) + "_") + toString(iZ))
1764- let ja = iL(iM)
1765- let jb = valueOrElse(getString(iX), (iM + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1766- let jc = split_4C(jb, ":")
1767- let jd = iN(jc)
1768- let je = if ((5 > size(jc)))
1769- then makeString(["0", toString(jd), toString((ja - jd)), toString(ja)], "_")
1757+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1758+ ((iU + iV) + iW)
1759+ }
1760+
1761+
1762+func iX (iY,iZ,ja) = {
1763+ let iN = ((toString(iZ) + "_") + toString(ja))
1764+ let jb = iM(iN)
1765+ let jc = valueOrElse(getString(iY), (iN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1766+ let jd = split_4C(jc, ":")
1767+ let je = iO(jd)
1768+ let jf = if ((5 > size(jd)))
1769+ then makeString(["0", toString(je), toString((jb - je)), toString(jb)], "_")
17701770 else {
1771- let jf = split(jc[bh], "_")
1772- let jg = parseIntValue(jf[bi])
1773- let jh = if ((size(jf) > 1))
1774- then parseIntValue(jf[bj])
1775- else jd
1776- makeString([toString(jg), toString(jh), toString(((ja - jg) - jh)), toString(ja)], "_")
1777- }
1778-[jc[bd], if ((size(split(jc[be], "_")) == aI))
1779- then jc[be]
1780- else "0_0_0_0_0_0", if ((size(split(jc[bf], "_")) == aI))
1781- then jc[bf]
1782- else "0_0_0_0_0_0", jc[bg], je]
1783- }
1784-
1785-
1786-func ji (iO) = {
1787- let jj = iN(iO)
1788- let jk = parseIntValue(split(iO[bh], "_")[bi])
1789- ((iL(iO[bd]) - jj) - jk)
1790- }
1791-
1792-
1793-func jl (jm,iO,jn) = if ((size(jm) != 3))
1771+ let jg = split(jd[bh], "_")
1772+ let jh = parseIntValue(jg[bi])
1773+ let ji = if ((size(jg) > 1))
1774+ then parseIntValue(jg[bj])
1775+ else je
1776+ makeString([toString(jh), toString(ji), toString(((jb - jh) - ji)), toString(jb)], "_")
1777+ }
1778+[jd[bd], if ((size(split(jd[be], "_")) == aI))
1779+ then jd[be]
1780+ else "0_0_0_0_0_0", if ((size(split(jd[bf], "_")) == aI))
1781+ then jd[bf]
1782+ else "0_0_0_0_0_0", jd[bg], jf]
1783+ }
1784+
1785+
1786+func jj (iP) = {
1787+ let jk = iO(iP)
1788+ let jl = parseIntValue(split(iP[bh], "_")[bi])
1789+ ((iM(iP[bd]) - jk) - jl)
1790+ }
1791+
1792+
1793+func jm (jn,iP,jo) = if ((size(jn) != 3))
17941794 then throw("cargoListStr should contain exactly 2 ':' separators")
17951795 else {
1796- let jo = split(jm[0], "_")
1797- let jp = split(jm[1], "_")
1798- let jq = if ((jm[2] == ""))
1796+ let jp = split(jn[0], "_")
1797+ let jq = split(jn[1], "_")
1798+ let jr = if ((jn[2] == ""))
17991799 then nil
1800- else split_4C(jm[2], "_")
1801- if ((size(jo) != aI))
1800+ else split_4C(jn[2], "_")
1801+ if ((size(jp) != aI))
18021802 then throw("All 6 resources should be passed")
1803- else if ((size(jp) != aI))
1803+ else if ((size(jq) != aI))
18041804 then throw("All 6 materials should be passed")
18051805 else {
1806- let hc = ji(iO)
1807- let jr = split(iO[be], "_")
1808- let js = split(iO[bf], "_")
1809- let jt = if ((iO[bg] == ""))
1806+ let hc = jj(iP)
1807+ let js = split(iP[be], "_")
1808+ let jt = split(iP[bf], "_")
1809+ let ju = if ((iP[bg] == ""))
18101810 then nil
1811- else split_4C(iO[bg], "_")
1812- let ha = split(jn[bn], "_")
1813- let ju = split(jn[bo], "_")
1814- let jv = if ((jn[bp] == ""))
1811+ else split_4C(iP[bg], "_")
1812+ let ha = split(jo[bn], "_")
1813+ let jv = split(jo[bo], "_")
1814+ let jw = if ((jo[bp] == ""))
18151815 then nil
1816- else split_4C(jn[bp], "_")
1817- func jw (eU,iR) = {
1816+ else split_4C(jo[bp], "_")
1817+ func jx (eU,iS) = {
18181818 let gN = eU._1
1819- let jx = parseIntValue(iR)
1820- let jy = parseIntValue(jr[gN])
1821- let jz = parseIntValue(ha[gN])
1822- if ((jx == 0))
1823- then $Tuple4((gN + 1), (eU._2 :+ jr[gN]), (eU._3 :+ ha[gN]), eU._4)
1824- else if ((jx > 0))
1825- then if ((jx > jz))
1826- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jz)) + " available"))
1827- else $Tuple4((gN + 1), (eU._2 :+ toString((jy + jx))), (eU._3 :+ toString((jz - jx))), (eU._4 + jx))
1828- else if ((-(jx) > jy))
1829- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jy)) + " available"))
1830- else $Tuple4((gN + 1), (eU._2 :+ toString((jy + jx))), (eU._3 :+ toString((jz - jx))), (eU._4 + jx))
1819+ let jy = parseIntValue(iS)
1820+ let jz = parseIntValue(js[gN])
1821+ let jA = parseIntValue(ha[gN])
1822+ if ((jy == 0))
1823+ then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ha[gN]), eU._4)
1824+ else if ((jy > 0))
1825+ then if ((jy > jA))
1826+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jA)) + " available"))
1827+ else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy))
1828+ else if ((-(jy) > jz))
1829+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jz)) + " available"))
1830+ else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy))
18311831 }
18321832
18331833 let ff = {
1834- let eW = jo
1834+ let eW = jp
18351835 let eX = size(eW)
18361836 let eY = $Tuple4(0, nil, nil, 0)
18371837 func eZ (fa,fb) = if ((fb >= eX))
18381838 then fa
1839- else jw(fa, eW[fb])
1839+ else jx(fa, eW[fb])
18401840
18411841 func fc (fa,fb) = if ((fb >= eX))
18421842 then fa
18441844
18451845 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
18461846 }
1847- func jA (eU,iR) = {
1847+ func jB (eU,iS) = {
18481848 let gN = eU._1
1849- let jx = parseIntValue(iR)
1850- let jB = parseIntValue(js[gN])
1851- let jC = parseIntValue(ju[gN])
1852- if ((jx == 0))
1853- then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ju[gN]), eU._4)
1854- else if ((jx > 0))
1855- then if ((jx > jC))
1856- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jC)) + " available"))
1857- else $Tuple4((gN + 1), (eU._2 :+ toString((jB + jx))), (eU._3 :+ toString((jC - jx))), (eU._4 + jx))
1858- else if ((-(jx) > jB))
1859- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jB)) + " available"))
1860- else $Tuple4((gN + 1), (eU._2 :+ toString((jB + jx))), (eU._3 :+ toString((jC - jx))), (eU._4 + jx))
1849+ let jy = parseIntValue(iS)
1850+ let jC = parseIntValue(jt[gN])
1851+ let jD = parseIntValue(jv[gN])
1852+ if ((jy == 0))
1853+ then $Tuple4((gN + 1), (eU._2 :+ jt[gN]), (eU._3 :+ jv[gN]), eU._4)
1854+ else if ((jy > 0))
1855+ then if ((jy > jD))
1856+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jD)) + " available"))
1857+ else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy))
1858+ else if ((-(jy) > jC))
1859+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jC)) + " available"))
1860+ else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy))
18611861 }
18621862
18631863 let gt = {
1864- let eW = jp
1864+ let eW = jq
18651865 let eX = size(eW)
18661866 let eY = $Tuple4(0, nil, nil, ff._4)
18671867 func hP (fa,fb) = if ((fb >= eX))
18681868 then fa
1869- else jA(fa, eW[fb])
1869+ else jB(fa, eW[fb])
18701870
18711871 func hQ (fa,fb) = if ((fb >= eX))
18721872 then fa
18741874
18751875 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
18761876 }
1877- func jD (eU,iR) = {
1877+ func jE (eU,iS) = {
18781878 let gN = eU._1
1879- let jx = parseIntValue(iR)
1880- let jE = if ((size(jt) > gN))
1881- then parseIntValue(jt[gN])
1879+ let jy = parseIntValue(iS)
1880+ let jF = if ((size(ju) > gN))
1881+ then parseIntValue(ju[gN])
18821882 else 0
1883- let jF = if ((size(jv) > gN))
1884- then parseIntValue(jv[gN])
1883+ let jG = if ((size(jw) > gN))
1884+ then parseIntValue(jw[gN])
18851885 else 0
1886- if ((jx == 0))
1887- then $Tuple4((gN + 1), (eU._2 :+ toString(jE)), (eU._3 :+ toString(jF)), eU._4)
1888- else if ((jx > 0))
1889- then if ((jx > jF))
1890- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jF)) + " available"))
1886+ if ((jy == 0))
1887+ then $Tuple4((gN + 1), (eU._2 :+ toString(jF)), (eU._3 :+ toString(jG)), eU._4)
1888+ else if ((jy > 0))
1889+ then if ((jy > jG))
1890+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jG)) + " available"))
18911891 else {
1892- let fW = (eK((jE + jx), bc) - eK(jE, bc))
1893- $Tuple4((gN + 1), (eU._2 :+ toString((jE + jx))), (eU._3 :+ toString((jF - jx))), (eU._4 + fW))
1892+ let fW = (eK((jF + jy), bc) - eK(jF, bc))
1893+ $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW))
18941894 }
1895- else if ((-(jx) > jE))
1896- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jE)) + " available"))
1895+ else if ((-(jy) > jF))
1896+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jF)) + " available"))
18971897 else {
1898- let fW = (eK((jE + jx), bc) - eK(jE, bc))
1899- $Tuple4((gN + 1), (eU._2 :+ toString((jE + jx))), (eU._3 :+ toString((jF - jx))), (eU._4 + fW))
1898+ let fW = (eK((jF + jy), bc) - eK(jF, bc))
1899+ $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW))
19001900 }
19011901 }
19021902
1903- let gx = if ((size(jq) != 0))
1903+ let gx = if ((size(jr) != 0))
19041904 then {
1905- let eW = jq
1905+ let eW = jr
19061906 let eX = size(eW)
19071907 let eY = $Tuple4(0, nil, nil, gt._4)
1908- func ib (fa,fb) = if ((fb >= eX))
1909- then fa
1910- else jD(fa, eW[fb])
1911-
19121908 func ic (fa,fb) = if ((fb >= eX))
19131909 then fa
1910+ else jE(fa, eW[fb])
1911+
1912+ func id (fa,fb) = if ((fb >= eX))
1913+ then fa
19141914 else throw("List size exceeds 50")
19151915
1916- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1916+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
19171917 }
1918- else $Tuple4(0, jt, jv, gt._4)
1919- let jG = gx._4
1920- if ((jG > hc))
1921- then throw((((("Attempt to put total " + toString(jG)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1922- else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jG)
1918+ else $Tuple4(0, ju, jw, gt._4)
1919+ let jH = gx._4
1920+ if ((jH > hc))
1921+ then throw((((("Attempt to put total " + toString(jH)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1922+ else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jH)
19231923 }
19241924 }
19251925
19261926
1927-func jH (jI,jJ) = {
1928- let bQ = toString(jI)
1929- let jK = hi(toBigInt(jJ))
1930- let jL = valueOrElse(getInteger(es()), (er + 1))
1931- let ew = toString(jL)
1932- let iz = toInt((jK % el))
1933- let gQ = ix(jK, iz)
1934- let dz = aU[iz]
1935- let jM = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1936- let bu = calculateAssetId(jM)
1937- let jN = toBase58String(bu)
1938- $Tuple2([IntegerEntry(es(), (jL + 1)), jM, StringEntry(ev(ew), jN), StringEntry(bt(jN), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jN), 0), IntegerEntry(ex(jN, bQ), 0), ScriptTransfer(jI, 1, bu)], $Tuple2(jN, dz))
1939- }
1940-
1941-
1942-func jO (bQ,jP,jQ) = if (!(sigVerify_8Kb(jP, jQ, ec)))
1927+func jI (jJ,jK) = {
1928+ let bQ = toString(jJ)
1929+ let jL = hi(toBigInt(jK))
1930+ let jM = valueOrElse(getInteger(es()), (er + 1))
1931+ let ew = toString(jM)
1932+ let iA = toInt((jL % el))
1933+ let gQ = iy(jL, iA)
1934+ let dz = aU[iA]
1935+ let jN = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1936+ let bu = calculateAssetId(jN)
1937+ let jO = toBase58String(bu)
1938+ $Tuple2([IntegerEntry(es(), (jM + 1)), jN, StringEntry(ev(ew), jO), StringEntry(bt(jO), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jO), 0), IntegerEntry(ex(jO, bQ), 0), ScriptTransfer(jJ, 1, bu)], $Tuple2(jO, dz))
1939+ }
1940+
1941+
1942+func jP (bQ,jQ,jR) = if (!(sigVerify_8Kb(jQ, jR, ec)))
19431943 then throw("signature does not match")
19441944 else {
1945- let fs = split_4C(toUtf8String(jP), ";")
1946- let jR = split_4C(fs[0], "|")
1947- let jS = split(jR[eF], "_")
1948- let jT = parseIntValue(jS[0])
1949- let jU = parseIntValue(jS[1])
1950- let jV = split(fs[1], ":")
1951- let jW = jV[0]
1952- let jX = parseIntValue(jR[eG])
1953- if (if ((jX > (lastBlock.timestamp + ee)))
1945+ let fs = split_4C(toUtf8String(jQ), ";")
1946+ let jS = split_4C(fs[0], "|")
1947+ let jT = split(jS[eF], "_")
1948+ let jU = parseIntValue(jT[0])
1949+ let jV = parseIntValue(jT[1])
1950+ let jW = split(fs[1], ":")
1951+ let jX = jW[0]
1952+ let jY = parseIntValue(jS[eG])
1953+ if (if ((jY > (lastBlock.timestamp + ee)))
19541954 then true
1955- else ((lastBlock.timestamp - ee) > jX))
1956- then throw(((("signature outdated: logTime=" + toString(jX)) + ", bcTime=") + toString(lastBlock.timestamp)))
1955+ else ((lastBlock.timestamp - ee) > jY))
1956+ then throw(((("signature outdated: logTime=" + toString(jY)) + ", bcTime=") + toString(lastBlock.timestamp)))
19571957 else {
1958- let jY = jV[1]
1959- let jZ = valueOrElse(getString(dO(bQ)), "")
1960- if ((jZ != jY))
1961- then throw(((("Tx ids don't match! In state: " + jZ) + ", in msg: ") + jY))
1958+ let jZ = jW[1]
1959+ let ka = valueOrElse(getString(dO(bQ)), "")
1960+ if ((ka != jZ))
1961+ then throw(((("Tx ids don't match! In state: " + ka) + ", in msg: ") + jZ))
19621962 else {
19631963 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1964- let ka = A(B)
1965- let kb = aj(valueOrElse(getInteger(E(B)), 0))
1966- let kc = valueOrElse(getInteger(ka), kb)
1967- if ((kc != jT))
1968- then throw(((("oldHealth=" + toString(kc)) + " from state does not match one from flight log=") + toString(jT)))
1969- else if ((0 >= jT))
1964+ let kb = A(B)
1965+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
1966+ let kd = valueOrElse(getInteger(kb), kc)
1967+ if ((kd != jU))
1968+ then throw(((("oldHealth=" + toString(kd)) + " from state does not match one from flight log=") + toString(jU)))
1969+ else if ((0 >= jU))
19701970 then throw("You can't fly with zero health")
19711971 else if (!(gz(B)))
19721972 then throw("Equipment incompatible")
19731973 else {
1974- let kd = if ((size(jR) > eH))
1975- then jR[eH]
1974+ let ke = if ((size(jS) > eH))
1975+ then jS[eH]
19761976 else ""
1977- let ke = if ((size(jR) > eI))
1978- then jR[eI]
1977+ let kf = if ((size(jS) > eI))
1978+ then jS[eI]
19791979 else ""
1980- let kf = if (if ((jU > 0))
1981- then (kd == "$")
1980+ let kg = if (if ((jV > 0))
1981+ then (ke == "$")
19821982 else false)
19831983 then dF(invoke(dh, "sendUsdtPrize", [bQ], nil))
19841984 else 0
1985- $Tuple5(jU, B, kf, jW, ke)
1985+ $Tuple5(jV, B, kg, jX, kf)
19861986 }
19871987 }
19881988 }
19891989 }
19901990
19911991
1992-func kg (Q,kh) = {
1993- let iZ = valueOrElse(getInteger(bD(Q)), 0)
1994- let ki = valueOrElse(getInteger(bx(aH, Q)), 0)
1995- let kj = (iZ / 6)
1996- let kk = (iZ / 7)
1997- ((aK + fraction(aK, ((iZ + kj) + (2 * kk)), 5)) + fraction(aK, ki, (kh * 5)))
1998- }
1999-
2000-
2001-func kl (c,km,kn) = {
2002- let ko = if ((km == eC))
2003- then $Tuple2(kn, valueOrElse(getString(bM(c)), ""))
1992+func kh (Q,ki) = {
1993+ let ja = valueOrElse(getInteger(bD(Q)), 0)
1994+ let kj = valueOrElse(getInteger(bx(aH, Q)), 0)
1995+ let kk = (ja / 6)
1996+ let kl = (ja / 7)
1997+ ((aK + fraction(aK, ((ja + kk) + (2 * kl)), 5)) + fraction(aK, kj, (ki * 5)))
1998+ }
1999+
2000+
2001+func km (c,kn,ko) = {
2002+ let kp = if ((kn == eC))
2003+ then $Tuple2(ko, valueOrElse(getString(bM(c)), ""))
20042004 else {
20052005 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2006- let kp = valueOrElse(getString(bO(B)), aM)
2007- let ck = split(value(kp), "_")
2006+ let kq = valueOrElse(getString(bO(B)), aM)
2007+ let ck = split(value(kq), "_")
20082008 if ((ck[br] != "L"))
20092009 then throw((("Duck location type is " + ck[br]) + ", but should be L"))
20102010 else $Tuple2(ck[bs], B)
20112011 }
2012- let Q = ko._1
2013- let kq = ko._2
2014- let kr = value(assetInfo(fromBase58String(Q)))
2015- let ks = bw(Q)
2016- let kt = valueOrErrorMessage(getInteger(ks), (("Land " + kr.name) + " is not staked"))
2017- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
2018- if ((ku != c))
2012+ let Q = kp._1
2013+ let kr = kp._2
2014+ let ks = value(assetInfo(fromBase58String(Q)))
2015+ let kt = bw(Q)
2016+ let ku = valueOrErrorMessage(getInteger(kt), (("Land " + ks.name) + " is not staked"))
2017+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
2018+ if ((kv != c))
20192019 then throw((aF + " is not yours"))
20202020 else {
2021- let kv = split(kr.description, "_")
2022- $Tuple4(kq, Q, kv, kt)
2023- }
2024- }
2025-
2026-
2027-func kw (c,eL,km,kn) = if ((0 > eL))
2021+ let kw = split(ks.description, "_")
2022+ $Tuple4(kr, Q, kw, ku)
2023+ }
2024+ }
2025+
2026+
2027+func kx (c,eL,kn,ko) = if ((0 > eL))
20282028 then throw("Negative amount")
20292029 else {
2030- let gd = kl(c, km, kn)
2030+ let gd = km(c, kn, ko)
20312031 let dL = gd._3[do]
20322032 let gJ = gP(gd._3[dp])
20332033 let gT = (lastBlock.timestamp - gd._4)
20342034 if ((0 > gT))
20352035 then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp)))
20362036 else {
2037- let kh = dK(dL)
2038- let kx = kg(gd._2, kh)
2039- let ky = fraction(gT, (kx * kh), a)
2040- if ((eL > ky))
2041- then throw(((("Not enough resources, available = " + toString(ky)) + ", requested = ") + toString(eL)))
2037+ let ki = dK(dL)
2038+ let ky = kh(gd._2, ki)
2039+ let kz = fraction(gT, (ky * ki), a)
2040+ if ((eL > kz))
2041+ then throw(((("Not enough resources, available = " + toString(kz)) + ", requested = ") + toString(eL)))
20422042 else {
2043- let kz = fraction((ky - eL), a, (kx * kh))
2044- let kA = (lastBlock.timestamp - kz)
2045- let iY = (kh / cL)
2046- let hb = gX(gJ, (gT - kz), iY, kx)
2047- let iX = bC(gd._2)
2048- let iZ = valueOrElse(getInteger(bD(gd._2)), 0)
2049- let iO = iW(iX, iY, iZ)
2050- let jf = split(iO[bh], "_")
2051- let hc = parseIntValue(jf[bk])
2052- if (if ((km == eC))
2043+ let kA = fraction((kz - eL), a, (ky * ki))
2044+ let kB = (lastBlock.timestamp - kA)
2045+ let iZ = (ki / cL)
2046+ let hb = gX(gJ, (gT - kA), iZ, ky)
2047+ let iY = bC(gd._2)
2048+ let ja = valueOrElse(getInteger(bD(gd._2)), 0)
2049+ let iP = iX(iY, iZ, ja)
2050+ let jg = split(iP[bh], "_")
2051+ let hc = parseIntValue(jg[bk])
2052+ if (if ((kn == eC))
20532053 then (eL > hc)
20542054 else false)
20552055 then throw((("Only " + toString(hc)) + " space left in warehouse"))
20562056 else {
2057- let iK = bN(gd._1)
2058- let jn = iJ(iK)
2059- let ha = split(jn[bn], "_")
2060- let gZ = split(iO[be], "_")
2061- let kB = if ((km == eC))
2062- then $Tuple4(gR(gZ, gJ, (gT - kz), iY, kx), jn[bn], (parseIntValue(jf[bj]) + hb._2), (parseIntValue(jf[bk]) - hb._2))
2063- else if ((km == eD))
2064- then $Tuple4(iO[be], gR(ha, gJ, (gT - kz), iY, kx), parseIntValue(jf[bj]), parseIntValue(jf[bk]))
2057+ let iL = bN(gd._1)
2058+ let jo = iK(iL)
2059+ let ha = split(jo[bn], "_")
2060+ let gZ = split(iP[be], "_")
2061+ let kC = if ((kn == eC))
2062+ then $Tuple4(gR(gZ, gJ, (gT - kA), iZ, ky), jo[bn], (parseIntValue(jg[bj]) + hb._2), (parseIntValue(jg[bk]) - hb._2))
2063+ else if ((kn == eD))
2064+ then $Tuple4(iP[be], gR(ha, gJ, (gT - kA), iZ, ky), parseIntValue(jg[bj]), parseIntValue(jg[bk]))
20652065 else {
2066- let kC = gY(gZ, ha, hb, hc)
2067- let kD = min([parseIntValue(jf[bk]), hb._2])
2068- $Tuple4(kC._1, kC._2, (parseIntValue(jf[bj]) + kD), (parseIntValue(jf[bk]) - kD))
2066+ let kD = gY(gZ, ha, hb, hc)
2067+ let kE = min([parseIntValue(jg[bk]), hb._2])
2068+ $Tuple4(kD._1, kD._2, (parseIntValue(jg[bj]) + kE), (parseIntValue(jg[bk]) - kE))
20692069 }
2070- let kE = kB._1
2071- let kF = kB._2
2072- let kG = kB._3
2073- let kH = kB._4
2074- $Tuple5([IntegerEntry(bw(gd._2), kA), IntegerEntry(bz(aF, gd._2, c), kA)], iK, [jn[bm], kF, jn[bo], jn[bp]], iX, [iO[bd], kE, iO[bf], iO[bg], makeString([jf[bi], toString(kG), toString(kH), jf[bl]], "_")])
2070+ let kF = kC._1
2071+ let kG = kC._2
2072+ let kH = kC._3
2073+ let kI = kC._4
2074+ $Tuple5([IntegerEntry(bw(gd._2), kB), IntegerEntry(bz(aF, gd._2, c), kB)], iL, [jo[bm], kG, jo[bo], jo[bp]], iY, [iP[bd], kF, iP[bf], iP[bg], makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")])
20752075 }
20762076 }
20772077 }
20782078 }
20792079
20802080
2081-func kI (c,Q,kh,km) = {
2082- let ks = bw(Q)
2083- let kt = value(getInteger(ks))
2084- let ky = (fraction((lastBlock.timestamp - kt), kg(Q, kh), a) * kh)
2085- kw(c, ky, km, Q)
2086- }
2087-
2088-
2089-func kJ (fh,jI,kK,Q) = {
2090- let c = toString(jI)
2091- let gd = kl(c, eE, Q)
2092- let kh = dK(gd._3[do])
2093- let kL = bD(gd._2)
2094- let kM = valueOrElse(getInteger(kL), 0)
2081+func kJ (c,Q,ki,kn) = {
2082+ let kt = bw(Q)
2083+ let ku = value(getInteger(kt))
2084+ let kz = (fraction((lastBlock.timestamp - ku), kh(Q, ki), a) * ki)
2085+ kx(c, kz, kn, Q)
2086+ }
2087+
2088+
2089+func kK (fh,jJ,kL,Q) = {
2090+ let c = toString(jJ)
2091+ let gd = km(c, eE, Q)
2092+ let ki = dK(gd._3[do])
2093+ let kM = bD(gd._2)
2094+ let kN = valueOrElse(getInteger(kM), 0)
20952095 if (if (!(cz))
2096- then (kM >= 3)
2096+ then (kN >= 3)
20972097 else false)
20982098 then throw("Currently max infrastructure level = 3")
20992099 else {
2100- let kN = ((sqrt(kh, 0, 0, DOWN) / 5) + 2)
2101- let ao = (kM + 1)
2100+ let kO = ((sqrt(ki, 0, 0, DOWN) / 5) + 2)
2101+ let ao = (kN + 1)
21022102 if (if (cz)
2103- then (ao > kN)
2103+ then (ao > kO)
21042104 else false)
2105- then throw(("Currently max infrastructure level = " + toString(kN)))
2105+ then throw(("Currently max infrastructure level = " + toString(kO)))
21062106 else {
2107- let kO = fraction(eh, (kh * ao), cL)
2107+ let kP = fraction(eh, (ki * ao), cL)
21082108 if (if (!(fh))
2109- then (kK != kO)
2109+ then (kL != kP)
21102110 else false)
2111- then throw(("Payment attached should be " + toString(kO)))
2111+ then throw(("Payment attached should be " + toString(kP)))
21122112 else {
2113- let iK = bN(gd._1)
2114- let jn = iJ(iK)
2115- let kP = split(jn[bo], "_")
2116- let kQ = fraction(cF, (kh * ao), cL)
2117- let kR = makeString(fg(fh, kP, kQ), "_")
2118- let kS = kI(c, gd._2, kh, eE)
2119- let kT = kS._5
2120- let kU = iL(kT[bd])
2121- let kV = makeString([split(kT[bd], "_")[0], toString(ao)], "_")
2122- let kW = iL(kV)
2123- let jf = split(kT[bh], "_")
2124- let kX = makeString([jf[bi], jf[bj], toString(((parseIntValue(jf[bk]) + kW) - kU)), toString(kW)], "_")
2125- $Tuple3(([IntegerEntry(kL, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iK, makeString([jn[bm], kS._3[bn], kR, jn[bp]], ":")), StringEntry(kS._4, makeString([kV, kT[be], kT[bf], kT[bg], kX], ":"))] ++ kS._1), ao, kQ)
2113+ let iL = bN(gd._1)
2114+ let jo = iK(iL)
2115+ let kQ = split(jo[bo], "_")
2116+ let kR = fraction(cF, (ki * ao), cL)
2117+ let kS = makeString(fg(fh, kQ, kR), "_")
2118+ let kT = kJ(c, gd._2, ki, eE)
2119+ let kU = kT._5
2120+ let kV = iM(kU[bd])
2121+ let kW = makeString([split(kU[bd], "_")[0], toString(ao)], "_")
2122+ let kX = iM(kW)
2123+ let jg = split(kU[bh], "_")
2124+ let kY = makeString([jg[bi], jg[bj], toString(((parseIntValue(jg[bk]) + kX) - kV)), toString(kX)], "_")
2125+ $Tuple3(([IntegerEntry(kM, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iL, makeString([jo[bm], kT._3[bn], kS, jo[bp]], ":")), StringEntry(kT._4, makeString([kW, kU[be], kU[bf], kU[bg], kY], ":"))] ++ kT._1), ao, kR)
21262126 }
21272127 }
21282128 }
21292129 }
21302130
21312131
2132-func kY (kZ,la,lb,lc) = {
2133- let ai = valueOrElse(getInteger(la), 0)
2134- let an = (ai + lc)
2135- let ld = al(valueOrElse(getInteger(kZ), 0), an)
2136- $Tuple2([IntegerEntry(kZ, ld[0]), IntegerEntry(la, an), IntegerEntry(lb, (valueOrElse(getInteger(lb), 0) + ld[1]))], an)
2137- }
2138-
2139-
2140-func le (B,lc) = kY(E(B), D(B), F(B), lc)
2141-
2142-
2143-func lf (c,lc) = kY(I(c), H(c), J(c), lc)
2144-
2145-
2146-func lg (c) = {
2132+func kZ (la,lb,lc,ld) = {
2133+ let ai = valueOrElse(getInteger(lb), 0)
2134+ let an = (ai + ld)
2135+ let le = al(valueOrElse(getInteger(la), 0), an)
2136+ $Tuple2([IntegerEntry(la, le[0]), IntegerEntry(lb, an), IntegerEntry(lc, (valueOrElse(getInteger(lc), 0) + le[1]))], an)
2137+ }
2138+
2139+
2140+func lf (B,ld) = kZ(E(B), D(B), F(B), ld)
2141+
2142+
2143+func lg (c,ld) = kZ(I(c), H(c), J(c), ld)
2144+
2145+
2146+func lh (c) = {
21472147 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2148- let lh = bH(c)
2149- let li = getString(lh)
2150- if (!(isDefined(li)))
2148+ let li = bH(c)
2149+ let lj = getString(li)
2150+ if (!(isDefined(lj)))
21512151 then throw("You are not eligible for ONBOARD artifact")
21522152 else {
2153- let lj = bJ(c)
2154- let lk = getString(lj)
2155- if (isDefined(lk))
2156- then throw(("You already used your ONBOARD artifact on duck " + value(lk)))
2153+ let lk = bJ(c)
2154+ let ll = getString(lk)
2155+ if (isDefined(ll))
2156+ then throw(("You already used your ONBOARD artifact on duck " + value(ll)))
21572157 else {
2158- let ll = bI(B)
2159- let lm = getString(ll)
2160- if (isDefined(lm))
2161- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(lm)))
2162- else ([StringEntry(lj, B), StringEntry(ll, c)] ++ le(B, af)._1)
2158+ let lm = bI(B)
2159+ let ln = getString(lm)
2160+ if (isDefined(ln))
2161+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ln)))
2162+ else ([StringEntry(lk, B), StringEntry(lm, c)] ++ lf(B, af)._1)
21632163 }
21642164 }
21652165 }
21662166
21672167
2168-func ln (c,kn) = {
2169- let gd = kl(c, eE, kn)
2168+func lo (c,ko) = {
2169+ let gd = km(c, eE, ko)
21702170 let Q = gd._2
2171- let kh = dK(gd._3[do])
2172- let lo = bx(aH, Q)
2173- if ((valueOrElse(getInteger(lo), 0) > 0))
2171+ let ki = dK(gd._3[do])
2172+ let lp = bx(aH, Q)
2173+ if ((valueOrElse(getInteger(lp), 0) > 0))
21742174 then throw("Presale artifact is already activated")
21752175 else if ((parseIntValue(gd._3[dn]) > er))
21762176 then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
21772177 else {
2178- let kS = kI(c, Q, kh, eE)
2179- (((kS._1 :+ IntegerEntry(lo, kh)) :+ StringEntry(kS._2, makeString(kS._3, ":"))) :+ StringEntry(kS._4, makeString(kS._5, ":")))
2178+ let kT = kJ(c, Q, ki, eE)
2179+ (((kT._1 :+ IntegerEntry(lp, ki)) :+ StringEntry(kT._2, makeString(kT._3, ":"))) :+ StringEntry(kT._4, makeString(kT._5, ":")))
21802180 }
21812181 }
21822182
21832183
2184-func lp (B) = {
2184+func lq (B) = {
21852185 let cj = valueOrElse(getInteger(dl, bU), 0)
2186- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2186+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
21872187 let aA = lastBlock.timestamp
21882188 let cl = cd(dl, cj)
21892189 let cf = cl[bZ]
21902190 let cg = cl[ca]
2191- if ((kp[br] != "T"))
2191+ if ((kq[br] != "T"))
21922192 then false
2193- else if (if (if ((parseIntValue(kp[bq]) == cj))
2193+ else if (if (if ((parseIntValue(kq[bq]) == cj))
21942194 then (cg[cc] == "INPROGRESS")
21952195 else false)
21962196 then (parseIntValue(cf[cb]) > aA)
22002200 }
22012201
22022202
2203-func lq (B) = {
2204- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2203+func lr (B) = {
2204+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
22052205 let aA = lastBlock.timestamp
2206- if ((kp[br] != "D"))
2206+ if ((kq[br] != "D"))
22072207 then false
22082208 else {
2209- let cn = parseIntValue(kp[bq])
2210- let co = parseIntValue(kp[bs])
2209+ let cn = parseIntValue(kq[bq])
2210+ let co = parseIntValue(kq[bs])
22112211 if (if (((cn + aQ) > aA))
22122212 then (1 > co)
22132213 else false)
22172217 }
22182218
22192219
2220-func lr (B,fM,jU,ls) = {
2221- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2220+func ls (B,fM,jV,lt) = {
2221+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
22222222 let aA = lastBlock.timestamp
2223- let cn = parseIntValue(kp[bq])
2224- let co = parseIntValue(kp[bs])
2225- let ku = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
2226- let lt = A(B)
2227- let lu = getIntegerValue(lt)
2228- let lv = if (if ((co > 0))
2223+ let cn = parseIntValue(kq[bq])
2224+ let co = parseIntValue(kq[bs])
2225+ let kv = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
2226+ let lu = A(B)
2227+ let lv = getIntegerValue(lu)
2228+ let lw = if (if ((co > 0))
22292229 then true
22302230 else if (if (fM)
2231- then (ls > 0)
2231+ then (lt > 0)
22322232 else false)
2233- then (jU > 0)
2233+ then (jV > 0)
22342234 else false)
22352235 then {
2236- let lw = invoke(di, "sendDeliveryReward", [ku], nil)
2237- if ((lw == lw))
2236+ let lx = invoke(di, "sendDeliveryReward", [kv], nil)
2237+ if ((lx == lx))
22382238 then {
2239- let lx = V(ku)
2240-[IntegerEntry(lx, (valueOrElse(getInteger(lx), 0) + 1)), IntegerEntry(W(ku), (cn / a))]
2239+ let ly = V(kv)
2240+[IntegerEntry(ly, (valueOrElse(getInteger(ly), 0) + 1)), IntegerEntry(W(kv), (cn / a))]
22412241 }
22422242 else throw("Strict value is not equal to itself.")
22432243 }
22442244 else if (if (if (fM)
2245- then (jU > 0)
2245+ then (jV > 0)
22462246 else false)
22472247 then ((cn + aQ) > aA)
22482248 else false)
22492249 then throw("Your duck is still on delivery mission")
22502250 else {
2251- let ly = valueOrElse(getInteger(di, bT), 0)
2252- let lz = invoke(di, "updateDeliveryLocked", [(ly - aP)], nil)
2253- if ((lz == lz))
2251+ let lz = valueOrElse(getInteger(di, bT), 0)
2252+ let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil)
2253+ if ((lA == lA))
22542254 then if (if (if (fM)
2255- then (0 >= jU)
2255+ then (0 >= jV)
22562256 else false)
22572257 then true
2258- else (0 >= lu))
2258+ else (0 >= lv))
22592259 then nil
22602260 else [IntegerEntry(U(B), (cn + cH))]
22612261 else throw("Strict value is not equal to itself.")
22622262 }
2263- let lA = getStringValue(L(B))
2264- $Tuple3(lv, [StringEntry(bO(B), lA)], lA)
2265- }
2266-
2267-
2268-func lB (lC,ao,lD,c,lE,lF) = {
2263+ let lB = getStringValue(L(B))
2264+ $Tuple3(lw, [StringEntry(bO(B), lB)], lB)
2265+ }
2266+
2267+
2268+func lC (lD,ao,lE,c,lF,lG) = {
22692269 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2270- if (lp(B))
2270+ if (lq(B))
22712271 then throw("mergeInternal_checkTournament")
2272- else if (lq(B))
2272+ else if (lr(B))
22732273 then throw("mergeInternal_checkDelivery")
22742274 else {
2275- func lG (eU,Q) = {
2276- let kr = value(assetInfo(fromBase58String(Q)))
2277- let ks = bw(Q)
2278- let kt = valueOrErrorMessage(getInteger(ks), (("NFT " + kr.name) + " is not staked"))
2279- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
2280- if ((ku != c))
2275+ func lH (eU,Q) = {
2276+ let ks = value(assetInfo(fromBase58String(Q)))
2277+ let kt = bw(Q)
2278+ let ku = valueOrErrorMessage(getInteger(kt), (("NFT " + ks.name) + " is not staked"))
2279+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
2280+ if ((kv != c))
22812281 then throw((aF + " is not yours"))
22822282 else {
2283- let kv = split(kr.description, "_")
2284- let dz = kv[dq]
2283+ let kw = split(ks.description, "_")
2284+ let dz = kw[dq]
22852285 if (if ((eU._3 != ""))
22862286 then (eU._3 != dz)
22872287 else false)
22882288 then throw("Lands should be on the same continent to merge")
22892289 else {
2290- let dL = kv[do]
2291- let lH = eU._1
2292- let gN = valueOrErrorMessage(indexOf(lH, dL), "You haven't passed all the lands needed")
2293- let lI = (take(lH, gN) + drop(lH, (gN + 1)))
2294- let kh = dK(dL)
2295- let lJ = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2296- let iZ = valueOrElse(getInteger(bD(Q)), 0)
2297- let lK = {
2290+ let dL = kw[do]
2291+ let lI = eU._1
2292+ let gN = valueOrErrorMessage(indexOf(lI, dL), "You haven't passed all the lands needed")
2293+ let lJ = (take(lI, gN) + drop(lI, (gN + 1)))
2294+ let ki = dK(dL)
2295+ let lK = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2296+ let ja = valueOrElse(getInteger(bD(Q)), 0)
2297+ let lL = {
22982298 let cD = dL
22992299 if (("S" == cD))
23002300 then 3
23062306 then 6
23072307 else throw("Only S, M, L, XL can merge")
23082308 }
2309- if ((iZ != lK))
2309+ if ((ja != lL))
23102310 then throw("All lands should be maxed to merge")
23112311 else {
2312- let ew = kv[dn]
2313- let gJ = gP(kv[dp])
2314- let gT = (lastBlock.timestamp - kt)
2312+ let ew = kw[dn]
2313+ let gJ = gP(kw[dp])
2314+ let gT = (lastBlock.timestamp - ku)
23152315 if ((0 > gT))
2316- then throw(((("Saved timestamp is in future, saved = " + toString(kt)) + ", current = ") + toString(lastBlock.timestamp)))
2316+ then throw(((("Saved timestamp is in future, saved = " + toString(ku)) + ", current = ") + toString(lastBlock.timestamp)))
23172317 else {
2318- let kx = kg(Q, kh)
2319- let iY = (kh / cL)
2320- let kF = gR(split(eU._4, "_"), gJ, gT, iY, kx)
2321- let fe = gH(eU._6, gJ, iY, -1)
2322- let lL = gH(eU._10, gJ, iY, -1)
2323- let iD = gH(eU._9, gJ, iY, 1)
2324- let lM = eU._7
2325- let dg = indexOf(lM, Q)
2318+ let ky = kh(Q, ki)
2319+ let iZ = (ki / cL)
2320+ let kG = gR(split(eU._4, "_"), gJ, gT, iZ, ky)
2321+ let fe = gH(eU._6, gJ, iZ, -1)
2322+ let lM = gH(eU._10, gJ, iZ, -1)
2323+ let iE = gH(eU._9, gJ, iZ, 1)
2324+ let lN = eU._7
2325+ let dg = indexOf(lN, Q)
23262326 if (!(isDefined(dg)))
23272327 then throw(("Your staked lands don't contain " + Q))
23282328 else {
2329- let lN = bv(Q)
2330- let lO = valueOrElse(getString(lN), "")
2331- $Tuple10(lI, lJ, dz, kF, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lN)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lO != ""))
2332- then [DeleteEntry(et(lO))]
2333- else nil)), fe, removeByIndex(lM, value(dg)), (eU._8 + kh), iD, lL)
2329+ let lO = bv(Q)
2330+ let lP = valueOrElse(getString(lO), "")
2331+ $Tuple10(lJ, lK, dz, kG, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lO)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lP != ""))
2332+ then [DeleteEntry(et(lP))]
2333+ else nil)), fe, removeByIndex(lN, value(dg)), (eU._8 + ki), iE, lM)
23342334 }
23352335 }
23362336 }
23382338 }
23392339 }
23402340
2341- let iK = bN(B)
2342- let jn = iJ(iK)
2341+ let iL = bN(B)
2342+ let jo = iK(iL)
23432343 let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
2344- let lP = dA(c)
2345- let lQ = getString(lP)
2346- let lR = if (isDefined(lQ))
2347- then split_51C(value(lQ), "_")
2344+ let lQ = dA(c)
2345+ let lR = getString(lQ)
2346+ let lS = if (isDefined(lR))
2347+ then split_51C(value(lR), "_")
23482348 else nil
2349- let lS = split(value(assetInfo(fromBase58String(lE[0]))).description, "_")[dq]
2350- let lT = split(valueOrElse(getString(dy(lS)), "0_0_0_0_0_0"), "_")
2349+ let lT = split(value(assetInfo(fromBase58String(lF[0]))).description, "_")[dq]
2350+ let lU = split(valueOrElse(getString(dy(lT)), "0_0_0_0_0_0"), "_")
23512351 let ff = {
2352- let eW = lE
2352+ let eW = lF
23532353 let eX = size(eW)
2354- let eY = $Tuple10(lD, 0, "", jn[bn], nil, gI, lR, 0, split("0_0_0_0_0_0", "_"), lT)
2354+ let eY = $Tuple10(lE, 0, "", jo[bn], nil, gI, lS, 0, split("0_0_0_0_0_0", "_"), lU)
23552355 func eZ (fa,fb) = if ((fb >= eX))
23562356 then fa
2357- else lG(fa, eW[fb])
2357+ else lH(fa, eW[fb])
23582358
23592359 func fc (fa,fb) = if ((fb >= eX))
23602360 then fa
23632363 fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
23642364 }
23652365 let dz = ff._3
2366- let iz = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2367- let gQ = iC(ff._9, (dK(lC) / cL))
2368- let jL = valueOrElse(getInteger(es()), (er + 1))
2369- let lU = toString(jL)
2370- let jM = Issue(eJ(lU, lC), makeString([lU, lC, gQ, dz], "_"), 1, 0, false)
2371- let bu = calculateAssetId(jM)
2372- let lV = toBase58String(bu)
2373- let kR = makeString(fg((lF > 0), split(jn[bo], "_"), lF), "_")
2374- let lW = dB(c)
2375- let lX = valueOrElse(getInteger(lW), 0)
2366+ let iA = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2367+ let gQ = iD(ff._9, (dK(lD) / cL))
2368+ let jM = valueOrElse(getInteger(es()), (er + 1))
2369+ let lV = toString(jM)
2370+ let jN = Issue(eJ(lV, lD), makeString([lV, lD, gQ, dz], "_"), 1, 0, false)
2371+ let bu = calculateAssetId(jN)
2372+ let lW = toBase58String(bu)
2373+ let kS = makeString(fg((lG > 0), split(jo[bo], "_"), lG), "_")
2374+ let lX = dB(c)
2375+ let lY = valueOrElse(getInteger(lX), 0)
23762376 $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0))
2377- then StringEntry(lP, makeString_11C(ff._7, "_"))
2378- else DeleteEntry(lP))) :+ IntegerEntry(lW, if ((ff._8 > lX))
2377+ then StringEntry(lQ, makeString_11C(ff._7, "_"))
2378+ else DeleteEntry(lQ))) :+ IntegerEntry(lX, if ((ff._8 > lY))
23792379 then 0
2380- else (lX - ff._8))) :+ IntegerEntry(es(), (jL + 1))) :+ jM) :+ StringEntry(ev(lU), lV)) :+ StringEntry(bt(lV), c)) :+ StringEntry(ey(lU), c)) :+ IntegerEntry(bx(aH, lV), ff._2)) :+ IntegerEntry(bD(lV), ao)) :+ IntegerEntry(ex(lV, c), ao)) :+ StringEntry(iK, makeString([jn[bm], ff._4, kR, jn[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lV], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lV)
2380+ else (lY - ff._8))) :+ IntegerEntry(es(), (jM + 1))) :+ jN) :+ StringEntry(ev(lV), lW)) :+ StringEntry(bt(lW), c)) :+ StringEntry(ey(lV), c)) :+ IntegerEntry(bx(aH, lW), ff._2)) :+ IntegerEntry(bD(lW), ao)) :+ IntegerEntry(ex(lW, c), ao)) :+ StringEntry(iL, makeString([jo[bm], ff._4, kS, jo[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lW], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lW)
23812381 }
23822382 }
23832383
23842384
2385-func lY (c,lE) = lB("M", 3, "SSSS", c, lE, 0)
2386-
2387-
2388-func lZ (c,lE) = lB("L", 4, "SMM", c, lE, (cF * 4))
2389-
2390-
2391-func ma (c,lE) = lB("XL", 5, "SSSML", c, lE, (cF * 47))
2392-
2393-
2394-func mb (c,lE) = lB("XXL", 6, "LXL", c, lE, (cF * 54))
2395-
2396-
2397-func mc (c,lE) = {
2398- let cD = size(lE)
2385+func lZ (c,lF) = lC("M", 3, "SSSS", c, lF, 0)
2386+
2387+
2388+func ma (c,lF) = lC("L", 4, "SMM", c, lF, (cF * 4))
2389+
2390+
2391+func mb (c,lF) = lC("XL", 5, "SSSML", c, lF, (cF * 47))
2392+
2393+
2394+func mc (c,lF) = lC("XXL", 6, "LXL", c, lF, (cF * 54))
2395+
2396+
2397+func md (c,lF) = {
2398+ let cD = size(lF)
23992399 if ((4 == cD))
2400- then lY(c, lE)
2400+ then lZ(c, lF)
24012401 else if ((3 == cD))
2402- then lZ(c, lE)
2402+ then ma(c, lF)
24032403 else if ((5 == cD))
2404- then ma(c, lE)
2404+ then mb(c, lF)
24052405 else if ((2 == cD))
2406- then mb(c, lE)
2406+ then mc(c, lF)
24072407 else throw("Unknown merge")
24082408 }
24092409
24102410
2411-func md (bQ) = {
2412- let me = getString(bM(bQ))
2413- if (isDefined(me))
2411+func me (bQ) = {
2412+ let mf = getString(bM(bQ))
2413+ if (isDefined(mf))
24142414 then {
2415- let B = value(me)
2416- let mf = bO(B)
2417- let ck = split(valueOrElse(getString(mf), aM), "_")
2415+ let B = value(mf)
2416+ let mg = bO(B)
2417+ let ck = split(valueOrElse(getString(mg), aM), "_")
24182418 let cn = parseIntValue(ck[bq])
24192419 if (if ((ck[br] != "D"))
24202420 then true
24212421 else ((cn + aQ) > lastBlock.timestamp))
24222422 then nil
24232423 else {
2424- let lt = A(B)
2424+ let lu = A(B)
24252425 if ((parseIntValue(ck[bs]) > 0))
24262426 then {
2427- let lw = invoke(di, "sendDeliveryReward", [bQ], nil)
2428- if ((lw == lw))
2427+ let lx = invoke(di, "sendDeliveryReward", [bQ], nil)
2428+ if ((lx == lx))
24292429 then nil
24302430 else throw("Strict value is not equal to itself.")
24312431 }
24322432 else (({
2433- let ly = valueOrElse(getInteger(di, bT), 0)
2434- let lz = invoke(di, "updateDeliveryLocked", [(ly - aP)], nil)
2435- if ((lz == lz))
2436- then if ((0 >= getIntegerValue(lt)))
2433+ let lz = valueOrElse(getInteger(di, bT), 0)
2434+ let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil)
2435+ if ((lA == lA))
2436+ then if ((0 >= getIntegerValue(lu)))
24372437 then nil
24382438 else {
2439- let mg = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2440- if ((mg == mg))
2439+ let mh = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2440+ if ((mh == mh))
24412441 then nil
24422442 else throw("Strict value is not equal to itself.")
24432443 }
24442444 else throw("Strict value is not equal to itself.")
2445- } :+ IntegerEntry(lt, getIntegerValue(K(B)))) :+ StringEntry(mf, getStringValue(L(B))))
2445+ } :+ IntegerEntry(lu, getIntegerValue(K(B)))) :+ StringEntry(mg, getStringValue(L(B))))
24462446 }
24472447 }
24482448 else nil
24492449 }
24502450
24512451
2452-func mh (gN) = if (if ((gN.originCaller != dh))
2452+func mi (gN) = if (if ((gN.originCaller != dh))
24532453 then valueOrElse(getBoolean(dN()), false)
24542454 else false)
24552455 then throw("Contracts are under maintenance")
24562456 else {
24572457 let bQ = toString(gN.originCaller)
2458- (md(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
2458+ (me(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
24592459 }
24602460
24612461
2462-func mi (gN) = if (if ((gN.originCaller != dh))
2462+func mj (gN) = if (if ((gN.originCaller != dh))
24632463 then valueOrElse(getBoolean(dN()), false)
24642464 else false)
24652465 then throw("Contracts are under maintenance")
24672467
24682468
24692469 @Callable(gN)
2470-func constructorV1 (mj) = if ((gN.caller != this))
2470+func constructorV1 (mk) = if ((gN.caller != this))
24712471 then throw("Permission denied")
2472- else [StringEntry(db(), mj)]
2472+ else [StringEntry(db(), mk)]
24732473
24742474
24752475
24812481
24822482
24832483 @Callable(gN)
2484-func setBlocked (mk) = if ((gN.caller != this))
2484+func setBlocked (ml) = if ((gN.caller != this))
24852485 then throw("permission denied")
2486- else [BooleanEntry(dN(), mk)]
2486+ else [BooleanEntry(dN(), ml)]
24872487
24882488
24892489
24902490 @Callable(gN)
24912491 func stakeLand () = {
2492- let ml = mh(gN)
2492+ let mm = mi(gN)
24932493 if ((size(gN.payments) != 1))
24942494 then throw("Exactly one payment required")
24952495 else {
2496- let mm = value(gN.payments[0])
2497- let bu = value(mm.assetId)
2496+ let mn = value(gN.payments[0])
2497+ let bu = value(mn.assetId)
24982498 let cS = toString(gN.caller)
2499- if ((mm.amount != 1))
2499+ if ((mn.amount != 1))
25002500 then throw((("NFT " + aF) + " token should be attached as payment"))
25012501 else {
2502- let kr = value(assetInfo(bu))
2503- if ((kr.issuer != this))
2502+ let ks = value(assetInfo(bu))
2503+ if ((ks.issuer != this))
25042504 then throw("Unknown issuer of token")
2505- else if (!(contains(kr.name, aF)))
2505+ else if (!(contains(ks.name, aF)))
25062506 then throw((("Only NFT " + aF) + " tokens are accepted"))
25072507 else {
2508- let mn = drop(kr.name, 4)
2509- let ew = if (contains(mn, "XXL"))
2510- then dropRight(mn, 3)
2511- else if (contains(mn, "XL"))
2512- then dropRight(mn, 2)
2513- else dropRight(mn, 1)
2508+ let mo = drop(ks.name, 4)
2509+ let ew = if (contains(mo, "XXL"))
2510+ then dropRight(mo, 3)
2511+ else if (contains(mo, "XL"))
2512+ then dropRight(mo, 2)
2513+ else dropRight(mo, 1)
25142514 if (!(isDefined(parseInt(ew))))
2515- then throw(("Cannot parse land number from " + kr.name))
2515+ then throw(("Cannot parse land number from " + ks.name))
25162516 else {
25172517 let Q = toBase58String(bu)
2518- let ks = bw(Q)
2519- if (isDefined(getInteger(ks)))
2520- then throw((("NFT " + kr.name) + " is already staked"))
2518+ let kt = bw(Q)
2519+ if (isDefined(getInteger(kt)))
2520+ then throw((("NFT " + ks.name) + " is already staked"))
25212521 else {
2522- let kv = split(kr.description, "_")
2523- let gJ = gP(kv[dp])
2524- let kh = dK(kv[do])
2525- let iY = (kh / cL)
2526- let fe = gO(gJ, iY, 1)
2527- let mo = dy(kv[dq])
2528- let lT = split(valueOrElse(getString(mo), "0_0_0_0_0_0"), "_")
2529- let mp = makeString(gH(lT, gJ, iY, 1), "_")
2530- let lP = dA(cS)
2531- let lQ = getString(lP)
2532- let lM = if (isDefined(lQ))
2533- then split_51C(value(lQ), "_")
2522+ let kw = split(ks.description, "_")
2523+ let gJ = gP(kw[dp])
2524+ let ki = dK(kw[do])
2525+ let iZ = (ki / cL)
2526+ let fe = gO(gJ, iZ, 1)
2527+ let mp = dy(kw[dq])
2528+ let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_")
2529+ let mq = makeString(gH(lU, gJ, iZ, 1), "_")
2530+ let lQ = dA(cS)
2531+ let lR = getString(lQ)
2532+ let lN = if (isDefined(lR))
2533+ then split_51C(value(lR), "_")
25342534 else nil
2535- if (containsElement(lM, Q))
2535+ if (containsElement(lN, Q))
25362536 then throw(("Your staked lands already contain " + Q))
2537- else if ((size(lM) >= aJ))
2537+ else if ((size(lN) >= aJ))
25382538 then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
25392539 else {
2540- let iZ = valueOrElse(getInteger(bD(Q)), 0)
2541- let lW = dB(cS)
2542- let mq = valueOrElse(getInteger(lW), 0)
2543- let mr = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2544- $Tuple2(([IntegerEntry(ks, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lP, makeString_11C((lM :+ Q), "_")), IntegerEntry(lW, (mq + kh)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), iZ), StringEntry(dx(), fe), StringEntry(mo, mp)] ++ ml), mr)
2540+ let ja = valueOrElse(getInteger(bD(Q)), 0)
2541+ let lX = dB(cS)
2542+ let mr = valueOrElse(getInteger(lX), 0)
2543+ let ms = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2544+ $Tuple2(([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lQ, makeString_11C((lN :+ Q), "_")), IntegerEntry(lX, (mr + ki)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), ja), StringEntry(dx(), fe), StringEntry(mp, mq)] ++ mm), ms)
25452545 }
25462546 }
25472547 }
25532553
25542554
25552555 @Callable(gN)
2556-func unstakeLand (kn) = {
2557- let ml = mh(gN)
2556+func unstakeLand (ko) = {
2557+ let mm = mi(gN)
25582558 if ((size(gN.payments) != 0))
25592559 then throw("No payments required")
25602560 else {
25612561 let c = toString(gN.caller)
2562- let gd = kl(c, eD, kn)
2562+ let gd = km(c, eD, ko)
25632563 let Q = gd._2
2564- let kv = gd._3
2565- let lP = dA(c)
2566- let gJ = gP(kv[dp])
2567- let kh = dK(kv[do])
2568- let iY = (kh / cL)
2569- let fe = gO(gJ, iY, -1)
2570- let mo = dy(kv[dq])
2571- let lT = split(valueOrElse(getString(mo), "0_0_0_0_0_0"), "_")
2572- let mp = makeString(gH(lT, gJ, iY, -1), "_")
2573- let kS = kI(c, Q, kh, eD)
2574- let lM = split_51C(valueOrElse(getString(lP), ""), "_")
2575- let dg = indexOf(lM, Q)
2564+ let kw = gd._3
2565+ let lQ = dA(c)
2566+ let gJ = gP(kw[dp])
2567+ let ki = dK(kw[do])
2568+ let iZ = (ki / cL)
2569+ let fe = gO(gJ, iZ, -1)
2570+ let mp = dy(kw[dq])
2571+ let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_")
2572+ let mq = makeString(gH(lU, gJ, iZ, -1), "_")
2573+ let kT = kJ(c, Q, ki, eD)
2574+ let lN = split_51C(valueOrElse(getString(lQ), ""), "_")
2575+ let dg = indexOf(lN, Q)
25762576 if (!(isDefined(dg)))
25772577 then throw(("Your staked lands don't contain " + Q))
25782578 else {
25792579 let aA = lastBlock.timestamp
2580- let ms = valueOrElse(getInteger(dj, bP(c)), 0)
2581- if ((ms >= aA))
2582- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ms)))
2580+ let mt = valueOrElse(getInteger(dj, bP(c)), 0)
2581+ if ((mt >= aA))
2582+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(mt)))
25832583 else {
2584- let mt = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2585- if ((mt > aA))
2586- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mt)))
2584+ let mu = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2585+ if ((mu > aA))
2586+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mu)))
25872587 else {
2588- let lW = dB(c)
2589- let lX = valueOrElse(getInteger(lW), 0)
2590- let mu = if ((kh > lX))
2588+ let lX = dB(c)
2589+ let lY = valueOrElse(getInteger(lX), 0)
2590+ let mv = if ((ki > lY))
25912591 then 0
2592- else (lX - kh)
2593- let mr = invoke(dk, "onStakeUnstakeLand", [c], nil)
2594- $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mo, mp), StringEntry(kS._2, makeString(kS._3, ":")), if ((size(lM) > 1))
2595- then StringEntry(lP, makeString_11C(removeByIndex(lM, value(dg)), "_"))
2596- else DeleteEntry(lP), IntegerEntry(lW, mu)] ++ ml), mr)
2592+ else (lY - ki)
2593+ let ms = invoke(dk, "onStakeUnstakeLand", [c], nil)
2594+ $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mp, mq), StringEntry(kT._2, makeString(kT._3, ":")), if ((size(lN) > 1))
2595+ then StringEntry(lQ, makeString_11C(removeByIndex(lN, value(dg)), "_"))
2596+ else DeleteEntry(lQ), IntegerEntry(lX, mv)] ++ mm), ms)
25972597 }
25982598 }
25992599 }
26042604
26052605 @Callable(gN)
26062606 func stakeDuck () = {
2607- let ml = mh(gN)
2607+ let mm = mi(gN)
26082608 if ((size(gN.payments) != 1))
26092609 then throw("Exactly one payment required")
26102610 else {
2611- let mm = value(gN.payments[0])
2612- let bu = value(mm.assetId)
2611+ let mn = value(gN.payments[0])
2612+ let bu = value(mn.assetId)
26132613 let cS = toString(gN.caller)
2614- if ((mm.amount != 1))
2614+ if ((mn.amount != 1))
26152615 then throw((("NFT " + aG) + " token should be attached as payment"))
26162616 else {
2617- let kr = value(assetInfo(bu))
2618- if (if ((kr.issuer != ea))
2619- then (kr.issuer != eb)
2617+ let ks = value(assetInfo(bu))
2618+ if (if ((ks.issuer != ea))
2619+ then (ks.issuer != eb)
26202620 else false)
26212621 then throw((("Unknown issuer of " + aG) + " token"))
2622- else if (!(contains(kr.name, aG)))
2622+ else if (!(contains(ks.name, aG)))
26232623 then throw((("Only NFT " + aG) + " tokens are accepted"))
26242624 else {
2625- let mv = toBase58String(bu)
2626- let ks = bw(mv)
2627- if (isDefined(getInteger(ks)))
2628- then throw((("NFT " + kr.name) + " is already staked"))
2625+ let mw = toBase58String(bu)
2626+ let kt = bw(mw)
2627+ if (isDefined(getInteger(kt)))
2628+ then throw((("NFT " + ks.name) + " is already staked"))
26292629 else if (isDefined(getString(bM(cS))))
2630- then throw(("You already staked one duck: " + kr.name))
2630+ then throw(("You already staked one duck: " + ks.name))
26312631 else {
2632- let mf = bO(mv)
2633- let ci = getString(mf)
2634- let iK = bN(mv)
2635- let mw = getString(iK)
2636- let ka = A(mv)
2637- let kb = aj(valueOrElse(getInteger(E(mv)), 0))
2638- let lu = valueOrElse(getInteger(ka), kb)
2639- ([IntegerEntry(ks, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mv), cS), StringEntry(bM(cS), mv)] ++ (if (isDefined(ci))
2632+ let mg = bO(mw)
2633+ let ci = getString(mg)
2634+ let iL = bN(mw)
2635+ let mx = getString(iL)
2636+ let kb = A(mw)
2637+ let kc = aj(valueOrElse(getInteger(E(mw)), 0))
2638+ let lv = valueOrElse(getInteger(kb), kc)
2639+ ([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mw), cS), StringEntry(bM(cS), mw)] ++ (if (isDefined(ci))
26402640 then nil
2641- else ([StringEntry(mf, aM)] ++ (if (isDefined(mw))
2641+ else ([StringEntry(mg, aM)] ++ (if (isDefined(mx))
26422642 then nil
2643- else (([StringEntry(iK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ka, lu)) ++ ml)))))
2643+ else (([StringEntry(iL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(kb, lv)) ++ mm)))))
26442644 }
26452645 }
26462646 }
26502650
26512651
26522652 @Callable(gN)
2653-func unstakeDuck (mv) = {
2654- let ml = mh(gN)
2653+func unstakeDuck (mw) = {
2654+ let mm = mi(gN)
26552655 if ((size(gN.payments) != 0))
26562656 then throw("No payments required")
26572657 else {
2658- let bu = fromBase58String(mv)
2658+ let bu = fromBase58String(mw)
26592659 let cS = toString(gN.caller)
2660- let kr = value(assetInfo(bu))
2661- let ks = bw(mv)
2662- if (!(isDefined(getInteger(ks))))
2663- then throw((("NFT " + kr.name) + " is not staked"))
2660+ let ks = value(assetInfo(bu))
2661+ let kt = bw(mw)
2662+ if (!(isDefined(getInteger(kt))))
2663+ then throw((("NFT " + ks.name) + " is not staked"))
26642664 else if (!(isDefined(getString(bM(cS)))))
2665- then throw((("The duck " + kr.name) + " is not staked"))
2665+ then throw((("The duck " + ks.name) + " is not staked"))
26662666 else {
2667- let ku = valueOrErrorMessage(getString(bL(mv)), (("NFT " + kr.name) + " is orphaned"))
2668- if ((ku != cS))
2667+ let kv = valueOrErrorMessage(getString(bL(mw)), (("NFT " + ks.name) + " is orphaned"))
2668+ if ((kv != cS))
26692669 then throw("Staked NFT is not yours")
2670- else if (lp(mv))
2670+ else if (lq(mw))
26712671 then throw("unstakeDuck_checkTournament")
2672- else if (lq(mv))
2672+ else if (lr(mw))
26732673 then throw("unstakeDuck_checkDelivery")
26742674 else {
2675- let ka = A(mv)
2676- let kb = aj(valueOrElse(getInteger(E(mv)), 0))
2677- let av = valueOrElse(getInteger(ka), kb)
2678- if ((kb > av))
2679- then throw((("Please heal your duck to " + toString(kb)) + "hp before unstaking"))
2680- else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(ks), DeleteEntry(ka), DeleteEntry(bO(mv)), DeleteEntry(bL(mv)), DeleteEntry(bz(aG, mv, cS)), DeleteEntry(bM(cS))] ++ ml)
2675+ let kb = A(mw)
2676+ let kc = aj(valueOrElse(getInteger(E(mw)), 0))
2677+ let av = valueOrElse(getInteger(kb), kc)
2678+ if ((kc > av))
2679+ then throw((("Please heal your duck to " + toString(kc)) + "hp before unstaking"))
2680+ else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(kt), DeleteEntry(kb), DeleteEntry(bO(mw)), DeleteEntry(bL(mw)), DeleteEntry(bz(aG, mw, cS)), DeleteEntry(bM(cS))] ++ mm)
26812681 }
26822682 }
26832683 }
26862686
26872687
26882688 @Callable(gN)
2689-func claimRes (eL,mx) = {
2690- let ml = mh(gN)
2689+func claimRes (eL,my) = {
2690+ let mm = mi(gN)
26912691 if ((size(gN.payments) != 0))
26922692 then throw("No payments required")
26932693 else {
26942694 let c = toString(gN.originCaller)
2695- let fm = kw(c, eL, eD, mx)
2695+ let fm = kx(c, eL, eD, my)
26962696 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2697- $Tuple2(((((fm._1 ++ le(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ ml), fm._3[bn])
2698- }
2699- }
2700-
2701-
2702-
2703-@Callable(gN)
2704-func claimResToWH (eL,mx) = {
2705- let ml = mh(gN)
2697+ $Tuple2(((((fm._1 ++ lf(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._3[bn])
2698+ }
2699+ }
2700+
2701+
2702+
2703+@Callable(gN)
2704+func claimResToWH (eL,my) = {
2705+ let mm = mi(gN)
27062706 if ((size(gN.payments) != 0))
27072707 then throw("No payments required")
27082708 else {
27092709 let c = toString(gN.originCaller)
2710- let fm = kw(c, eL, eC, mx)
2711- $Tuple2(((((fm._1 ++ lf(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ ml), fm._5[be])
2712- }
2713- }
2714-
2715-
2716-
2717-@Callable(gN)
2718-func flight (jP,jQ) = {
2719- let ml = mi(gN)
2710+ let fm = kx(c, eL, eC, my)
2711+ $Tuple2(((((fm._1 ++ lg(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._5[be])
2712+ }
2713+ }
2714+
2715+
2716+
2717+@Callable(gN)
2718+func flight (jQ,jR) = {
2719+ let mm = mj(gN)
27202720 if ((size(gN.payments) != 0))
27212721 then throw("No payments required")
27222722 else {
27232723 let bQ = toString(gN.caller)
2724- let iA = jO(bQ, jP, jQ)
2725- let jU = iA._1
2726- let B = iA._2
2727- let mf = bO(B)
2728- let kp = valueOrElse(getString(mf), aM)
2729- let jW = iA._4
2730- if ((jW == kp))
2724+ let iB = jP(bQ, jQ, jR)
2725+ let jV = iB._1
2726+ let B = iB._2
2727+ let mg = bO(B)
2728+ let kq = valueOrElse(getString(mg), aM)
2729+ let jX = iB._4
2730+ if ((jX == kq))
27312731 then throw("You can't fly to the same location")
27322732 else {
2733- let cw = split(jW, "_")
2734- let my = (cw[br] == "T")
2735- let mz = (cw[br] == "D")
2733+ let cw = split(jX, "_")
2734+ let mz = (cw[br] == "T")
2735+ let mA = (cw[br] == "D")
27362736 let gA = G(B)
2737- let mA = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2738- let mB = fn(mA, iA._5)
2739- let mC = mB._1
2740- let mD = mB._2
2741- let mE = if (!(cr(dl, kp)))
2742- then if (!(cp(jW)))
2743- then cu(kp, jW, 5)
2744- else if ((jU > 0))
2745- then $Tuple2(jW, jU)
2746- else $Tuple2(kp, 0)
2747- else if (ch(dl, kp))
2748- then if (!(ch(dl, jW)))
2737+ let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2738+ let mC = fn(mB, iB._5)
2739+ let mD = mC._1
2740+ let mE = mC._2
2741+ let mF = if (!(cr(dl, kq)))
2742+ then if (!(cp(jX)))
2743+ then cu(kq, jX, 5)
2744+ else if ((jV > 0))
2745+ then $Tuple2(jX, jV)
2746+ else $Tuple2(kq, 0)
2747+ else if (ch(dl, kq))
2748+ then if (!(ch(dl, jX)))
27492749 then throw("Your duck is taking part in the tournament")
27502750 else {
2751- let ls = parseIntValue(cw[bs])
2752- let mF = split(kp, "_")
2751+ let lt = parseIntValue(cw[bs])
2752+ let mG = split(kq, "_")
27532753 let cj = valueOrElse(getInteger(dl, bU), 0)
2754- if ((ls != (parseIntValue(mF[bs]) + 1)))
2755- then cu(kp, jW, 7)
2756- else if ((jU > 0))
2754+ if ((lt != (parseIntValue(mG[bs]) + 1)))
2755+ then cu(kq, jX, 7)
2756+ else if ((jV > 0))
27572757 then {
2758- let mG = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2759- let mH = if ((ls > mG))
2760- then invoke(dl, "saveDuckResult", [B, ls], nil)
2758+ let mH = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2759+ let mI = if ((lt > mH))
2760+ then invoke(dl, "saveDuckResult", [B, lt], nil)
27612761 else unit
2762- if ((mH == mH))
2763- then $Tuple2(jW, jU)
2762+ if ((mI == mI))
2763+ then $Tuple2(jX, jV)
27642764 else throw("Strict value is not equal to itself.")
27652765 }
2766- else $Tuple2(kp, 0)
2766+ else $Tuple2(kq, 0)
27672767 }
2768- else if (!(cm(kp)))
2768+ else if (!(cm(kq)))
27692769 then {
2770- let mI = dC(invoke(this, "autoExitDelivery", [B, jU, if (mz)
2770+ let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, if (mA)
27712771 then "10"
27722772 else "11", 0], nil))
2773- if ((mI == mI))
2774- then if (mz)
2775- then $Tuple2(mI, jU)
2776- else if ((jU > 0))
2777- then $Tuple2(jW, jU)
2778- else $Tuple2(mI, 0)
2773+ if ((mJ == mJ))
2774+ then if (mA)
2775+ then $Tuple2(mJ, jV)
2776+ else if ((jV > 0))
2777+ then $Tuple2(jX, jV)
2778+ else $Tuple2(mJ, 0)
27792779 else throw("Strict value is not equal to itself.")
27802780 }
2781- else if (!(mz))
2781+ else if (!(mA))
27822782 then throw("Your duck is taking part in delivery")
2783- else if (!(cm(jW)))
2784- then cu(kp, jW, 13)
2783+ else if (!(cm(jX)))
2784+ then cu(kq, jX, 13)
27852785 else {
2786- let ls = parseIntValue(cw[bs])
2787- let mF = split(kp, "_")
2788- if ((ls != (parseIntValue(mF[bs]) + 1)))
2789- then cu(kp, jW, 14)
2790- else if (if ((jU > 0))
2791- then (1 > ls)
2786+ let lt = parseIntValue(cw[bs])
2787+ let mG = split(kq, "_")
2788+ if ((lt != (parseIntValue(mG[bs]) + 1)))
2789+ then cu(kq, jX, 14)
2790+ else if (if ((jV > 0))
2791+ then (1 > lt)
27922792 else false)
2793- then $Tuple2(jW, jU)
2793+ then $Tuple2(jX, jV)
27942794 else {
2795- let mI = dC(invoke(this, "autoExitDelivery", [B, jU, "15-17", ls], nil))
2796- if ((mI == mI))
2797- then $Tuple2(mI, jU)
2795+ let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, "15-17", lt], nil))
2796+ if ((mJ == mJ))
2797+ then $Tuple2(mJ, jV)
27982798 else throw("Strict value is not equal to itself.")
27992799 }
28002800 }
2801- let mJ = mE._1
2802- let mK = mE._2
2803- $Tuple2(((([StringEntry(mf, mJ), StringEntry(gA, mC), IntegerEntry(A(B), mK)] ++ ml) ++ (if (mD)
2801+ let mK = mF._1
2802+ let mL = mF._2
2803+ $Tuple2(((([StringEntry(mg, mK), StringEntry(gA, mD), IntegerEntry(A(B), mL)] ++ mm) ++ (if (mE)
28042804 then [StringEntry(M(B), "0_0_0_0_0")]
2805- else nil)) ++ le(B, if ((jU > 0))
2805+ else nil)) ++ lf(B, if ((jV > 0))
28062806 then Y
2807- else Z)._1), iA._3)
2807+ else Z)._1), iB._3)
28082808 }
28092809 }
28102810 }
28122812
28132813
28142814 @Callable(gN)
2815-func heal (mL,mM,mN) = {
2816- let ml = mh(gN)
2817- if (if (if ((0 > mL))
2818- then true
2819- else (0 > mM))
2815+func heal (mM,mN,mO) = {
2816+ let mm = mi(gN)
2817+ if (if (if ((0 > mM))
28202818 then true
28212819 else (0 > mN))
2820+ then true
2821+ else (0 > mO))
28222822 then throw("Quantity cannot be negative")
28232823 else {
28242824 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2825- if (lp(B))
2825+ if (lq(B))
28262826 then throw("heal_checkTournament")
2827- else if (lq(B))
2827+ else if (lr(B))
28282828 then throw("heal_checkDelivery")
28292829 else {
2830- let mO = [mL, mM, mN]
2831- let ka = A(B)
2832- let kb = aj(valueOrElse(getInteger(E(B)), 0))
2833- let mP = valueOrElse(getInteger(ka), kb)
2834- if ((mP >= kb))
2835- then throw((("HP should be < " + toString(kb)) + " to heal"))
2830+ let mP = [mM, mN, mO]
2831+ let kb = A(B)
2832+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
2833+ let mQ = valueOrElse(getInteger(kb), kc)
2834+ if ((mQ >= kc))
2835+ then throw((("HP should be < " + toString(kc)) + " to heal"))
28362836 else {
2837- let iK = bN(B)
2838- let jn = iJ(iK)
2839- let mQ = if ((jn[bp] == ""))
2837+ let iL = bN(B)
2838+ let jo = iK(iL)
2839+ let mR = if ((jo[bp] == ""))
28402840 then nil
2841- else split_4C(jn[bp], "_")
2842- func mR (eU,ct) = {
2841+ else split_4C(jo[bp], "_")
2842+ func mS (eU,ct) = {
28432843 let dG = eU._2
2844- let hj = if ((size(mQ) > dG))
2845- then parseIntValue(mQ[dG])
2844+ let hj = if ((size(mR) > dG))
2845+ then parseIntValue(mR[dG])
28462846 else 0
28472847 if ((3 > dG))
28482848 then {
2849- let mS = mO[dG]
2850- if ((mS > hj))
2849+ let mT = mP[dG]
2850+ if ((mT > hj))
28512851 then throw(((("You have only " + toString(hj)) + " of ") + aT[dG]))
2852- else $Tuple3((eU._1 :+ toString((hj - mS))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mS)))
2852+ else $Tuple3((eU._1 :+ toString((hj - mT))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mT)))
28532853 }
28542854 else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3)
28552855 }
28602860 let eY = $Tuple3(nil, 0, 0)
28612861 func eZ (fa,fb) = if ((fb >= eX))
28622862 then fa
2863- else mR(fa, eW[fb])
2863+ else mS(fa, eW[fb])
28642864
28652865 func fc (fa,fb) = if ((fb >= eX))
28662866 then fa
28682868
28692869 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
28702870 }
2871- let mT = min([kb, (mP + fm._3)])
2872- $Tuple2((([IntegerEntry(ka, mT), StringEntry(iK, makeString_2C([jn[bm], jn[bn], jn[bo], makeString(fm._1, "_")], ":"))] ++ ml) ++ le(B, (ag * ((mL + mM) + mN)))._1), mT)
2871+ let mU = min([kc, (mQ + fm._3)])
2872+ $Tuple2((([IntegerEntry(kb, mU), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], makeString(fm._1, "_")], ":"))] ++ mm) ++ lf(B, (ag * ((mM + mN) + mO)))._1), mU)
28732873 }
28742874 }
28752875 }
28792879
28802880 @Callable(gN)
28812881 func healES () = {
2882- let ml = mh(gN)
2882+ let mm = mi(gN)
28832883 if ((size(gN.payments) != 1))
28842884 then throw("Exactly one payment required")
28852885 else {
2886- let mm = value(gN.payments[0])
2887- if ((mm.assetId != cC))
2886+ let mn = value(gN.payments[0])
2887+ if ((mn.assetId != cC))
28882888 then throw("Allowed USDT payment only!")
28892889 else {
28902890 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2891- if (lp(B))
2891+ if (lq(B))
28922892 then throw("healES_checkTournament")
2893- else if (lq(B))
2893+ else if (lr(B))
28942894 then throw("healES_checkDelivery")
28952895 else {
2896- let ka = A(B)
2897- let kb = aj(valueOrElse(getInteger(E(B)), 0))
2898- let mP = valueOrElse(getInteger(ka), kb)
2899- if ((mP > 0))
2896+ let kb = A(B)
2897+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
2898+ let mQ = valueOrElse(getInteger(kb), kc)
2899+ if ((mQ > 0))
29002900 then throw("HP should be 0 to call Emergency Service")
29012901 else {
2902- let iK = bN(B)
2903- let jn = iJ(iK)
2904- let mQ = if ((jn[bp] == ""))
2902+ let iL = bN(B)
2903+ let jo = iK(iL)
2904+ let mR = if ((jo[bp] == ""))
29052905 then nil
2906- else split_4C(jn[bp], "_")
2907- let mU = if ((size(mQ) > 0))
2908- then parseIntValue(mQ[0])
2906+ else split_4C(jo[bp], "_")
2907+ let mV = if ((size(mR) > 0))
2908+ then parseIntValue(mR[0])
29092909 else 0
2910- let mV = if ((size(mQ) > 1))
2911- then parseIntValue(mQ[1])
2910+ let mW = if ((size(mR) > 1))
2911+ then parseIntValue(mR[1])
29122912 else 0
2913- let mW = if ((size(mQ) > 2))
2914- then parseIntValue(mQ[2])
2913+ let mX = if ((size(mR) > 2))
2914+ then parseIntValue(mR[2])
29152915 else 0
2916- if (if (if ((mU > 0))
2917- then true
2918- else (mV > 0))
2916+ if (if (if ((mV > 0))
29192917 then true
29202918 else (mW > 0))
2919+ then true
2920+ else (mX > 0))
29212921 then throw("You have to use own Medical Kit")
29222922 else {
2923- let mX = getString(di, bR())
2924- let mY = if (isDefined(mX))
2925- then split_4C(value(mX), "_")
2923+ let mY = getString(di, bR())
2924+ let mZ = if (isDefined(mY))
2925+ then split_4C(value(mY), "_")
29262926 else nil
2927- let mZ = if ((size(mY) > 0))
2928- then parseIntValue(mY[0])
2927+ let na = if ((size(mZ) > 0))
2928+ then parseIntValue(mZ[0])
29292929 else 0
2930- if ((0 >= mZ))
2930+ if ((0 >= na))
29312931 then throw("There are no Medical Kits L1 at Emergency Service storage")
29322932 else {
2933- let mT = (mP + parseIntValue(split(aX[0], "_")[aZ]))
2934- let na = makeString([toString((mZ - 1)), removeByIndex(mY, 0)], "_")
2933+ let mU = (mQ + parseIntValue(split(aX[0], "_")[aZ]))
2934+ let nb = makeString([toString((na - 1)), removeByIndex(mZ, 0)], "_")
29352935 let ct = split(aX[0], "_")
2936- let nb = cs(ct)
2937- let nc = fraction((nb * aO), aN, (cK * bc))
2938- if ((mm.amount != nc))
2939- then throw(("Payment attached should be " + toString(nc)))
2936+ let nc = cs(ct)
2937+ let nd = fraction((nc * aO), aN, (cK * bc))
2938+ if ((mn.amount != nd))
2939+ then throw(("Payment attached should be " + toString(nd)))
29402940 else {
2941- let fm = dC(invoke(di, "updateEsStorage", [na], [AttachedPayment(cC, nc)]))
2942- $Tuple2(((ml :+ IntegerEntry(ka, mT)) ++ le(B, aa)._1), fm)
2941+ let fm = dC(invoke(di, "updateEsStorage", [nb], [AttachedPayment(cC, nd)]))
2942+ $Tuple2(((mm :+ IntegerEntry(kb, mU)) ++ lf(B, aa)._1), fm)
29432943 }
29442944 }
29452945 }
29522952
29532953
29542954 @Callable(gN)
2955-func updateBackpack (B,nd) = if ((gN.caller != di))
2955+func updateBackpack (B,ne) = if ((gN.caller != di))
29562956 then throw("permission denied")
2957- else $Tuple2([StringEntry(bN(B), nd)], nd)
2957+ else $Tuple2([StringEntry(bN(B), ne)], ne)
29582958
29592959
29602960
29612961 @Callable(gN)
29622962 func commitForRandom () = {
2963- let ml = mh(gN)
2964- let ne = (height + dv)
2963+ let mm = mi(gN)
2964+ let nf = (height + dv)
29652965 let c = toString(gN.caller)
2966- $Tuple2(([IntegerEntry(dw(c), ne)] ++ ml), ne)
2966+ $Tuple2(([IntegerEntry(dw(c), nf)] ++ mm), nf)
29672967 }
29682968
29692969
29702970
29712971 @Callable(gN)
29722972 func buySLand () = {
2973- let ml = mh(gN)
2973+ let mm = mi(gN)
29742974 if ((size(gN.payments) != 1))
29752975 then throw("Exactly one payment required")
29762976 else {
2977- let mm = value(gN.payments[0])
2978- if ((mm.assetId != cC))
2977+ let mn = value(gN.payments[0])
2978+ if ((mn.assetId != cC))
29792979 then throw("Allowed USDT payment only!")
2980- else if ((mm.amount != ej))
2980+ else if ((mn.amount != ej))
29812981 then throw(("Payment attached should be " + toString(ej)))
29822982 else {
2983- let fm = jH(gN.caller, gN.transactionId)
2984- let nf = dF(invoke(dm, "burnAcres", [ek], nil))
2985- $Tuple2((((fm._1 :+ ScriptTransfer(di, mm.amount, cC)) ++ lf(toString(gN.caller), ac)._1) ++ ml), $Tuple2(fm._2._1, nf))
2983+ let fm = jI(gN.caller, gN.transactionId)
2984+ let ng = dF(invoke(dm, "burnAcres", [ek], nil))
2985+ $Tuple2((((fm._1 :+ ScriptTransfer(di, mn.amount, cC)) ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng))
29862986 }
29872987 }
29882988 }
29902990
29912991
29922992 @Callable(gN)
2993-func expedition (jP,jQ) = {
2994- let ml = mh(gN)
2993+func expedition (jQ,jR) = {
2994+ let mm = mi(gN)
29952995 if ((size(gN.payments) != 0))
29962996 then throw("No payments required")
29972997 else {
29982998 let bQ = toString(gN.caller)
2999- let iA = jO(bQ, jP, jQ)
3000- let B = iA._2
3001- let ka = A(B)
3002- let iK = bN(B)
3003- let jn = iJ(iK)
3004- let kP = split(jn[bo], "_")
3005- let kR = makeString(fg(true, kP, ei), "_")
2999+ let iB = jP(bQ, jQ, jR)
3000+ let B = iB._2
3001+ let kb = A(B)
3002+ let iL = bN(B)
3003+ let jo = iK(iL)
3004+ let kQ = split(jo[bo], "_")
3005+ let kS = makeString(fg(true, kQ, ei), "_")
30063006 let gA = G(B)
3007- let mA = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
3008- let ng = fn(mA, iA._5)
3009- let mC = ng._1
3010- let mD = ng._2
3011- let nh = jH(gN.caller, gN.transactionId)
3012- let jN = nh._2._1
3013- let fm = if ((0 >= iA._1))
3014- then $Tuple3([IntegerEntry(ka, 0), StringEntry(gA, mC)], "", 0)
3015- else $Tuple3((nh._1 ++ (if (mD)
3007+ let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
3008+ let nh = fn(mB, iB._5)
3009+ let mD = nh._1
3010+ let mE = nh._2
3011+ let ni = jI(gN.caller, gN.transactionId)
3012+ let jO = ni._2._1
3013+ let fm = if ((0 >= iB._1))
3014+ then $Tuple3([IntegerEntry(kb, 0), StringEntry(gA, mD)], "", 0)
3015+ else $Tuple3((ni._1 ++ (if (mE)
30163016 then [StringEntry(M(B), "0_0_0_0_0")]
3017- else ((((nil :+ StringEntry(bO(B), makeString([nh._2._2, "L", jN], "_"))) :+ IntegerEntry(ka, iA._1)) :+ StringEntry(gA, mC)) :+ StringEntry(iK, makeString([jn[bm], jn[bn], kR, jn[bp]], ":"))))), jN, iA._3)
3018- if (lp(B))
3017+ else ((((nil :+ StringEntry(bO(B), makeString([ni._2._2, "L", jO], "_"))) :+ IntegerEntry(kb, iB._1)) :+ StringEntry(gA, mD)) :+ StringEntry(iL, makeString([jo[bm], jo[bn], kS, jo[bp]], ":"))))), jO, iB._3)
3018+ if (lq(B))
30193019 then throw("expedition_checkTournament")
3020- else if (lq(B))
3020+ else if (lr(B))
30213021 then throw("expedition_checkDelivery")
30223022 else {
3023- let nf = dF(invoke(dm, "burnAcres", [ek], nil))
3024- $Tuple2(((fm._1 ++ le(B, ac)._1) ++ ml), $Tuple3(fm._2, fm._3, nf))
3023+ let ng = dF(invoke(dm, "burnAcres", [ek], nil))
3024+ $Tuple2(((fm._1 ++ lf(B, ac)._1) ++ mm), $Tuple3(fm._2, fm._3, ng))
30253025 }
30263026 }
30273027 }
30303030
30313031 @Callable(gN)
30323032 func buySLandForAcres () = {
3033- let ml = mh(gN)
3033+ let mm = mi(gN)
30343034 if ((size(gN.payments) != 1))
30353035 then throw("exactly 1 payment must be attached")
30363036 else {
3037- let mm = gN.payments[0]
3038- let ft = mm.amount
3039- if (if (!(isDefined(mm.assetId)))
3037+ let mn = gN.payments[0]
3038+ let ft = mn.amount
3039+ if (if (!(isDefined(mn.assetId)))
30403040 then true
3041- else (value(mm.assetId) != du))
3041+ else (value(mn.assetId) != du))
30423042 then throw("ACRES payments only!")
30433043 else if ((ft != ek))
30443044 then throw(("Payment attached should be " + toString(ek)))
30453045 else {
3046- let fm = jH(gN.caller, gN.transactionId)
3047- let nf = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
3048- $Tuple2(((fm._1 ++ lf(toString(gN.caller), ac)._1) ++ ml), $Tuple2(fm._2._1, nf))
3046+ let fm = jI(gN.caller, gN.transactionId)
3047+ let ng = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
3048+ $Tuple2(((fm._1 ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng))
30493049 }
30503050 }
30513051 }
30543054
30553055 @Callable(gN)
30563056 func upgradeInfra (Q) = {
3057- let ml = mh(gN)
3057+ let mm = mi(gN)
30583058 if ((size(gN.payments) != 0))
30593059 then throw("No payments required")
30603060 else {
3061- let fm = kJ(true, gN.caller, 0, Q)
3061+ let fm = kK(true, gN.caller, 0, Q)
30623062 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3063- $Tuple2(((fm._1 ++ ml) ++ le(B, fraction(ad, fm._3, cK))._1), fm._2)
3064- }
3065- }
3066-
3067-
3068-
3069-@Callable(gN)
3070-func activateArtifact (ni,nj) = {
3071- let ml = mh(gN)
3063+ $Tuple2(((fm._1 ++ mm) ++ lf(B, fraction(ad, fm._3, cK))._1), fm._2)
3064+ }
3065+ }
3066+
3067+
3068+
3069+@Callable(gN)
3070+func activateArtifact (nj,nk) = {
3071+ let mm = mi(gN)
30723072 if ((size(gN.payments) != 0))
30733073 then throw("No payments required")
30743074 else {
30753075 let c = toString(gN.caller)
30763076 let fm = {
3077- let cD = ni
3077+ let cD = nj
30783078 if (("PRESALE" == cD))
3079- then ln(c, nj)
3079+ then lo(c, nk)
30803080 else if (("ONBOARD" == cD))
3081- then lg(c)
3081+ then lh(c)
30823082 else throw("Unknown artifact")
30833083 }
3084- (fm ++ ml)
3085- }
3086- }
3087-
3088-
3089-
3090-@Callable(gN)
3091-func mergeLands (lE) = {
3092- let ml = mh(gN)
3084+ (fm ++ mm)
3085+ }
3086+ }
3087+
3088+
3089+
3090+@Callable(gN)
3091+func mergeLands (lF) = {
3092+ let mm = mi(gN)
30933093 if ((size(gN.payments) != 0))
30943094 then throw("No payments required")
30953095 else {
3096- let fm = mc(toString(gN.caller), lE)
3097- $Tuple2(((fm._1 ++ ml) ++ lf(toString(gN.caller), ae)._1), fm._2)
3098- }
3099- }
3100-
3101-
3102-
3103-@Callable(gN)
3104-func cargoExchange (nk,Q) = {
3105- let ml = mh(gN)
3096+ let fm = md(toString(gN.caller), lF)
3097+ $Tuple2(((fm._1 ++ mm) ++ lg(toString(gN.caller), ae)._1), fm._2)
3098+ }
3099+ }
3100+
3101+
3102+
3103+@Callable(gN)
3104+func cargoExchange (nl,Q) = {
3105+ let mm = mi(gN)
31063106 if ((size(gN.payments) != 0))
31073107 then throw("No payments required")
31083108 else {
3109- let jm = split_4C(nk, ":")
3109+ let jn = split_4C(nl, ":")
31103110 let c = toString(gN.originCaller)
3111- let kr = value(assetInfo(fromBase58String(Q)))
3112- let ks = bw(Q)
3113- if (!(isDefined(getInteger(ks))))
3114- then throw((kr.name + " is not staked"))
3111+ let ks = value(assetInfo(fromBase58String(Q)))
3112+ let kt = bw(Q)
3113+ if (!(isDefined(getInteger(kt))))
3114+ then throw((ks.name + " is not staked"))
31153115 else {
3116- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
3117- if ((ku != c))
3116+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
3117+ if ((kv != c))
31183118 then throw((aF + " is not yours"))
31193119 else {
3120- let iY = (dK(split(kr.description, "_")[do]) / cL)
3121- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3120+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3121+ let ja = valueOrElse(getInteger(bD(Q)), 0)
31223122 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3123- let kp = valueOrElse(getString(bO(B)), aM)
3124- let ck = split(value(kp), "_")
3123+ let kq = valueOrElse(getString(bO(B)), aM)
3124+ let ck = split(value(kq), "_")
31253125 if ((ck[br] != "L"))
31263126 then throw((("Duck location type is " + ck[br]) + ", but should be L"))
31273127 else if ((ck[bs] != Q))
31283128 then throw(("Duck should be on the land " + Q))
31293129 else {
3130- let iX = bC(Q)
3131- let iO = iW(iX, iY, iZ)
3132- let iK = bN(B)
3133- let jn = iJ(iK)
3134- let fm = jl(jm, iO, jn)
3135- let jf = split(iO[bh], "_")
3136- let kG = (parseIntValue(jf[bj]) + fm._7)
3137- let kH = (parseIntValue(jf[bk]) - fm._7)
3138- ([StringEntry(iK, makeString_2C([jn[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iX, makeString_2C([iO[bd], fm._1, fm._2, fm._3, makeString([jf[bi], toString(kG), toString(kH), jf[bl]], "_")], ":"))] ++ ml)
3130+ let iY = bC(Q)
3131+ let iP = iX(iY, iZ, ja)
3132+ let iL = bN(B)
3133+ let jo = iK(iL)
3134+ let fm = jm(jn, iP, jo)
3135+ let jg = split(iP[bh], "_")
3136+ let kH = (parseIntValue(jg[bj]) + fm._7)
3137+ let kI = (parseIntValue(jg[bk]) - fm._7)
3138+ ([StringEntry(iL, makeString_2C([jo[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iY, makeString_2C([iP[bd], fm._1, fm._2, fm._3, makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")], ":"))] ++ mm)
31393139 }
31403140 }
31413141 }
31453145
31463146
31473147 @Callable(gN)
3148-func saveWarehouse (jb,Q) = if ((gN.caller != di))
3148+func saveWarehouse (jc,Q) = if ((gN.caller != di))
31493149 then throw("Access denied")
31503150 else {
3151- let iX = bC(Q)
3152- let jc = split_4C(jb, ":")
3153- if ((size(jc) != 5))
3151+ let iY = bC(Q)
3152+ let jd = split_4C(jc, ":")
3153+ if ((size(jd) != 5))
31543154 then throw("warehouse string should contain 4 ':' separators")
31553155 else {
3156- let nl = split(jc[bh], "_")[bi]
3157- let kG = iN(jc)
3158- let nm = iL(jc[bd])
3159- let kH = ((nm - parseIntValue(nl)) - kG)
3160- if ((0 > kH))
3156+ let nm = split(jd[bh], "_")[bi]
3157+ let kH = iO(jd)
3158+ let nn = iM(jd[bd])
3159+ let kI = ((nn - parseIntValue(nm)) - kH)
3160+ if ((0 > kI))
31613161 then throw("Operation leads to negative free warehouse space")
31623162 else {
3163- let nn = makeString_2C([jc[bd], jc[be], jc[bf], jc[bg], makeString([nl, toString(kG), toString(kH), toString(nm)], "_")], ":")
3164- $Tuple2([StringEntry(iX, nn)], nn)
3163+ let no = makeString_2C([jd[bd], jd[be], jd[bf], jd[bg], makeString([nm, toString(kH), toString(kI), toString(nn)], "_")], ":")
3164+ $Tuple2([StringEntry(iY, no)], no)
31653165 }
31663166 }
31673167 }
31693169
31703170
31713171 @Callable(gN)
3172-func setCustomName (bu,lO,by) = {
3173- let ml = mh(gN)
3172+func setCustomName (bu,lP,by) = {
3173+ let mm = mi(gN)
31743174 if ((size(gN.payments) != 1))
31753175 then throw("Exactly one payment required")
31763176 else {
3177- let mm = value(gN.payments[0])
3178- if ((mm.assetId != cC))
3177+ let mn = value(gN.payments[0])
3178+ if ((mn.assetId != cC))
31793179 then throw("Allowed USDT payment only!")
3180- else if ((mm.amount != ef))
3180+ else if ((mn.amount != ef))
31813181 then throw(("Payment should be " + toString(ef)))
3182- else if (contains(lO, "__"))
3183- then throw(("Name should not contain '__': " + lO))
3184- else if ((size(lO) > eg))
3182+ else if (contains(lP, "__"))
3183+ then throw(("Name should not contain '__': " + lP))
3184+ else if ((size(lP) > eg))
31853185 then throw(("Name too long, maxLength=" + toString(eg)))
31863186 else {
31873187 let c = toString(gN.originCaller)
3188- let no = {
3188+ let np = {
31893189 let cD = by
31903190 if (("ACCOUNT" == cD))
31913191 then {
3192- let np = eA(lO)
3193- let nq = getString(np)
3194- if (isDefined(nq))
3195- then throw(("Name already registered: " + lO))
3192+ let nq = eA(lP)
3193+ let nr = getString(nq)
3194+ if (isDefined(nr))
3195+ then throw(("Name already registered: " + lP))
31963196 else {
3197- let nr = bG(c)
3198- let ns = getString(nr)
3199- let nt = if (isDefined(ns))
3200- then [DeleteEntry(eA(value(ns)))]
3197+ let ns = bG(c)
3198+ let nt = getString(ns)
3199+ let nu = if (isDefined(nt))
3200+ then [DeleteEntry(eA(value(nt)))]
32013201 else nil
3202- (((nt :+ StringEntry(nr, lO)) :+ StringEntry(np, c)) ++ lf(c, ab)._1)
3202+ (((nu :+ StringEntry(ns, lP)) :+ StringEntry(nq, c)) ++ lg(c, ab)._1)
32033203 }
32043204 }
32053205 else if (("LAND" == cD))
32063206 then {
3207- let kr = value(assetInfo(fromBase58String(bu)))
3208- let ks = bw(bu)
3209- if (!(isDefined(getInteger(ks))))
3210- then throw((kr.name + " is not staked"))
3207+ let ks = value(assetInfo(fromBase58String(bu)))
3208+ let kt = bw(bu)
3209+ if (!(isDefined(getInteger(kt))))
3210+ then throw((ks.name + " is not staked"))
32113211 else {
3212- let ku = valueOrErrorMessage(getString(bt(bu)), (("NFT " + kr.name) + " is orphaned"))
3213- if ((ku != c))
3212+ let kv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + ks.name) + " is orphaned"))
3213+ if ((kv != c))
32143214 then throw((aF + " is not yours"))
32153215 else {
3216- let np = et(lO)
3217- let nq = getString(np)
3218- if (isDefined(nq))
3219- then throw(("Name already registered: " + lO))
3216+ let nq = et(lP)
3217+ let nr = getString(nq)
3218+ if (isDefined(nr))
3219+ then throw(("Name already registered: " + lP))
32203220 else {
3221- let nu = bv(bu)
3222- let ns = getString(nu)
3223- let nt = if (isDefined(ns))
3224- then [DeleteEntry(et(value(ns)))]
3221+ let nv = bv(bu)
3222+ let nt = getString(nv)
3223+ let nu = if (isDefined(nt))
3224+ then [DeleteEntry(et(value(nt)))]
32253225 else nil
3226- (((nt :+ StringEntry(nu, lO)) :+ StringEntry(np, bu)) ++ lf(c, ab)._1)
3226+ (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lg(c, ab)._1)
32273227 }
32283228 }
32293229 }
32303230 }
32313231 else if (("DUCK" == cD))
32323232 then {
3233- let kr = value(assetInfo(fromBase58String(bu)))
3234- let ks = bw(bu)
3235- if (if (!(isDefined(getInteger(ks))))
3233+ let ks = value(assetInfo(fromBase58String(bu)))
3234+ let kt = bw(bu)
3235+ if (if (!(isDefined(getInteger(kt))))
32363236 then true
32373237 else !(isDefined(getString(bM(c)))))
3238- then throw((kr.name + " is not staked"))
3238+ then throw((ks.name + " is not staked"))
32393239 else {
3240- let ku = valueOrErrorMessage(getString(bL(bu)), (("NFT " + kr.name) + " is orphaned"))
3241- if ((ku != c))
3240+ let kv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + ks.name) + " is orphaned"))
3241+ if ((kv != c))
32423242 then throw((aG + " is not yours"))
32433243 else {
3244- let np = ez(lO)
3245- let nq = getString(np)
3246- if (isDefined(nq))
3247- then throw(("Name already registered: " + lO))
3244+ let nq = ez(lP)
3245+ let nr = getString(nq)
3246+ if (isDefined(nr))
3247+ then throw(("Name already registered: " + lP))
32483248 else {
3249- let nu = bF(bu)
3250- let ns = getString(nu)
3251- let nt = if (isDefined(ns))
3252- then [DeleteEntry(ez(value(ns)))]
3249+ let nv = bF(bu)
3250+ let nt = getString(nv)
3251+ let nu = if (isDefined(nt))
3252+ then [DeleteEntry(ez(value(nt)))]
32533253 else nil
3254- (((nt :+ StringEntry(nu, lO)) :+ StringEntry(np, bu)) ++ le(bu, ab)._1)
3254+ (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lf(bu, ab)._1)
32553255 }
32563256 }
32573257 }
32583258 }
32593259 else throw("Unknown entity type")
32603260 }
3261- $Tuple2(((no :+ ScriptTransfer(di, mm.amount, cC)) ++ ml), 0)
3261+ $Tuple2(((np :+ ScriptTransfer(di, mn.amount, cC)) ++ mm), 0)
32623262 }
32633263 }
32643264 }
32663266
32673267
32683268 @Callable(gN)
3269-func setReferrals (nv,nw) = if ((gN.callerPublicKey != ec))
3269+func setReferrals (nw,nx) = if ((gN.callerPublicKey != ec))
32703270 then throw("Permission denied")
32713271 else {
3272- let ml = mh(gN)
3272+ let mm = mi(gN)
32733273 if ((size(gN.payments) != 0))
32743274 then throw("No payments required")
3275- else if (!(isDefined(addressFromString(nv))))
3276- then throw(("Invalid address: " + nv))
3277- else if (!(isDefined(addressFromString(nw))))
3278- then throw(("Invalid address: " + nw))
3275+ else if (!(isDefined(addressFromString(nw))))
3276+ then throw(("Invalid address: " + nw))
3277+ else if (!(isDefined(addressFromString(nx))))
3278+ then throw(("Invalid address: " + nx))
32793279 else {
3280- let nx = eB()
3281- let ny = getString(nx)
3282- let nz = if (isDefined(ny))
3283- then split_4C(value(ny), "_")
3280+ let ny = eB()
3281+ let nz = getString(ny)
3282+ let nA = if (isDefined(nz))
3283+ then split_4C(value(nz), "_")
32843284 else nil
3285- if (containsElement(nz, nw))
3286- then throw((nw + " is not newbie (already has referrals)"))
3285+ if (containsElement(nA, nx))
3286+ then throw((nx + " is not newbie (already has referrals)"))
32873287 else {
3288- let lh = bH(nw)
3289- let li = getString(lh)
3290- if (if (isDefined(li))
3291- then isDefined(addressFromString(value(li)))
3288+ let li = bH(nx)
3289+ let lj = getString(li)
3290+ if (if (isDefined(lj))
3291+ then isDefined(addressFromString(value(lj)))
32923292 else false)
3293- then throw(((nw + " already has refBy: ") + value(li)))
3293+ then throw(((nx + " already has refBy: ") + value(lj)))
32943294 else {
3295- let nA = bK(nv)
3296- let nB = getString(nA)
3297- let nC = if (isDefined(nB))
3298- then split_4C(value(nB), "_")
3295+ let nB = bK(nw)
3296+ let nC = getString(nB)
3297+ let nD = if (isDefined(nC))
3298+ then split_4C(value(nC), "_")
32993299 else nil
3300- if (containsElement(nC, nw))
3301- then throw((((nv + " already contains ") + nw) + " within referrals"))
3300+ if (containsElement(nD, nx))
3301+ then throw((((nw + " already contains ") + nx) + " within referrals"))
33023302 else {
3303- let nD = makeString_2C((nC :+ nw), "_")
3304- let nE = if (containsElement(nz, nv))
3305- then value(ny)
3306- else makeString_2C((nz :+ nv), "_")
3307- $Tuple2(([StringEntry(lh, nv), StringEntry(nA, nD), StringEntry(nx, nE)] ++ ml), 0)
3303+ let nE = makeString_2C((nD :+ nx), "_")
3304+ let nF = if (containsElement(nA, nw))
3305+ then value(nz)
3306+ else makeString_2C((nA :+ nw), "_")
3307+ $Tuple2(([StringEntry(li, nw), StringEntry(nB, nE), StringEntry(ny, nF)] ++ mm), 0)
33083308 }
33093309 }
33103310 }
33143314
33153315
33163316 @Callable(gN)
3317-func distributePoints (nF,nG,nH,nI,nJ) = {
3318- let ml = mh(gN)
3317+func distributePoints (nG,nH,nI,nJ,nK) = {
3318+ let mm = mi(gN)
33193319 if ((size(gN.payments) != 0))
33203320 then throw("No payments required")
33213321 else {
33223322 let c = toString(gN.originCaller)
3323- let nK = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3324- let nL = dF(nK[1])
3325- let nM = if ((0 >= nL))
3323+ let nL = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3324+ let nM = dF(nL[1])
3325+ let nN = if ((0 >= nM))
33263326 then $Tuple2(0, nil)
33273327 else {
3328- let lc = dF(invoke(dk, "takeWlgXp", [c], nil))
3329- if ((lc == lc))
3330- then $Tuple2(nL, [IntegerEntry(I(c), dF(nK[0])), IntegerEntry(H(c), dF(nK[2]))])
3328+ let ld = dF(invoke(dk, "takeWlgXp", [c], nil))
3329+ if ((ld == ld))
3330+ then $Tuple2(nM, [IntegerEntry(I(c), dF(nL[0])), IntegerEntry(H(c), dF(nL[2]))])
33313331 else throw("Strict value is not equal to itself.")
33323332 }
3333- let nN = nM._1
3334- let nO = nM._2
3333+ let nO = nN._1
3334+ let nP = nN._2
33353335 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3336- let nP = J(c)
3337- let nQ = (valueOrElse(getInteger(nP), 0) + nN)
3338- let nR = F(B)
3339- let nS = valueOrElse(getInteger(nR), 0)
3340- let nT = (nQ + nS)
3341- let nU = ((((nF + nG) + nH) + nI) + nJ)
3342- if ((nU > nT))
3343- then throw((("There are only " + toString(nT)) + " free points to distribute"))
3336+ let nQ = J(c)
3337+ let nR = (valueOrElse(getInteger(nQ), 0) + nO)
3338+ let nS = F(B)
3339+ let nT = valueOrElse(getInteger(nS), 0)
3340+ let nU = (nR + nT)
3341+ let nV = ((((nG + nH) + nI) + nJ) + nK)
3342+ if ((nV > nU))
3343+ then throw((("There are only " + toString(nU)) + " free points to distribute"))
33443344 else {
3345- let nV = C(B)
3346- let at = split(valueOrElse(getString(nV), "0_0_0_0_0"), "_")
3347- let nW = (nQ - nU)
3348- $Tuple2((([IntegerEntry(nP, if ((0 > nW))
3345+ let nW = C(B)
3346+ let at = split(valueOrElse(getString(nW), "0_0_0_0_0"), "_")
3347+ let nX = (nR - nV)
3348+ $Tuple2((([IntegerEntry(nQ, if ((0 > nX))
33493349 then 0
3350- else nW), IntegerEntry(nR, if ((0 > nW))
3351- then (nS + nW)
3352- else nS), StringEntry(nV, makeString([toString((parseIntValue(at[l]) + nF)), toString((parseIntValue(at[m]) + nG)), toString((parseIntValue(at[n]) + nH)), toString((parseIntValue(at[o]) + nI)), toString((parseIntValue(at[p]) + nJ))], "_"))] ++ ml) ++ nO), 0)
3350+ else nX), IntegerEntry(nS, if ((0 > nX))
3351+ then (nT + nX)
3352+ else nT), StringEntry(nW, makeString([toString((parseIntValue(at[l]) + nG)), toString((parseIntValue(at[m]) + nH)), toString((parseIntValue(at[n]) + nI)), toString((parseIntValue(at[o]) + nJ)), toString((parseIntValue(at[p]) + nK))], "_"))] ++ mm) ++ nP), 0)
33533353 }
33543354 }
33553355 }
33623362
33633363
33643364 @Callable(gN)
3365-func splitByGlobalAndLocalWeightsREADONLY (nX,nY,gQ) = {
3365+func splitByGlobalAndLocalWeightsREADONLY (nY,nZ,gQ) = {
33663366 let gJ = gP(gQ)
3367- $Tuple2(nil, $Tuple2(fd(nX), eO(nY, gJ)))
3368- }
3369-
3370-
3371-
3372-@Callable(gN)
3373-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iJ(bN(B)), ":"))
3367+ $Tuple2(nil, $Tuple2(fd(nY), eO(nZ, gJ)))
3368+ }
3369+
3370+
3371+
3372+@Callable(gN)
3373+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iK(bN(B)), ":"))
33743374
33753375
33763376
33773377 @Callable(gN)
33783378 func getWarehouseREADONLY (Q) = {
3379- let kr = value(assetInfo(fromBase58String(Q)))
3380- let iY = (dK(split(kr.description, "_")[do]) / cL)
3381- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3382- $Tuple2(nil, makeString_2C(iW(bC(Q), iY, iZ), ":"))
3379+ let ks = value(assetInfo(fromBase58String(Q)))
3380+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3381+ let ja = valueOrElse(getInteger(bD(Q)), 0)
3382+ $Tuple2(nil, makeString_2C(iX(bC(Q), iZ, ja), ":"))
33833383 }
33843384
33853385
33873387 @Callable(gN)
33883388 func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller)))
33893389 then throw("Access denied")
3390- else $Tuple2(mh(gN), 42)
3391-
3392-
3393-
3394-@Callable(gN)
3395-func updateDuckStats (B,lc) = if ((gN.caller != di))
3390+ else $Tuple2(mi(gN), 42)
3391+
3392+
3393+
3394+@Callable(gN)
3395+func updateDuckStats (B,ld) = if ((gN.caller != di))
33963396 then throw("Access denied")
3397- else le(B, lc)
3398-
3399-
3400-
3401-@Callable(gN)
3402-func updateAccStats (c,lc) = if (!(containsElement([dk, di, dm], gN.caller)))
3397+ else lf(B, ld)
3398+
3399+
3400+
3401+@Callable(gN)
3402+func updateAccStats (c,ld) = if (!(containsElement([dk, di, dm], gN.caller)))
34033403 then throw("Access denied")
3404- else lf(c, lc)
3405-
3406-
3407-
3408-@Callable(gN)
3409-func equipDuck (nZ) = {
3410- let ml = mh(gN)
3404+ else lg(c, ld)
3405+
3406+
3407+
3408+@Callable(gN)
3409+func equipDuck (oa) = {
3410+ let mm = mi(gN)
34113411 if ((size(gN.payments) != 0))
34123412 then throw("No payments required")
34133413 else {
34143414 let c = toString(gN.originCaller)
34153415 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3416- if (lp(B))
3416+ if (lq(B))
34173417 then throw("equipDuck_checkTournament")
3418- else if (lq(B))
3418+ else if (lr(B))
34193419 then throw("equipDuck_checkDelivery")
34203420 else {
34213421 let gA = G(B)
3422- let oa = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3423- let iK = bN(B)
3424- let jn = iJ(iK)
3425- let mC = split(nZ, "_")
3426- if ((size(mC) != r))
3422+ let ob = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3423+ let iL = bN(B)
3424+ let jo = iK(iL)
3425+ let mD = split(oa, "_")
3426+ if ((size(mD) != r))
34273427 then throw("Wrong equipment string")
34283428 else {
3429- let gC = gp(oa, fA(jn[bp]), true, nil)
3430- let gD = split(mC[q], ";")[1]
3429+ let gC = gp(ob, fA(jo[bp]), true, nil)
3430+ let gD = split(mD[q], ";")[1]
34313431 let ar = if ((gD == ""))
34323432 then 0
34333433 else {
34523452 }
34533453 }
34543454 let gk = ap(this, B, ar, true)
3455- let gG = gp(mC, gC, false, gk)
3456- let ob = fF(gG)
3457- $Tuple2(([StringEntry(gA, nZ), StringEntry(iK, makeString_2C([jn[bm], jn[bn], jn[bo], ob], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ ml), 0)
3455+ let gG = gp(mD, gC, false, gk)
3456+ let oc = fF(gG)
3457+ $Tuple2(([StringEntry(gA, oa), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], oc], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ mm), 0)
34583458 }
34593459 }
34603460 }
34633463
34643464
34653465 @Callable(gN)
3466-func fortificateLand (Q,oc) = {
3467- let ml = mh(gN)
3466+func fortificateLand (Q,od) = {
3467+ let mm = mi(gN)
34683468 if ((size(gN.payments) != 0))
34693469 then throw("No payments required")
34703470 else {
34713471 let c = toString(gN.originCaller)
34723472 let B = valueOrElse(getString(bM(c)), "")
34733473 let fK = ap(this, B, 0, false)
3474- let od = bE(Q)
3475- let oe = split(valueOrElse(getString(od), ":0_15:0_18:0"), "_")
3476- let kr = value(assetInfo(fromBase58String(Q)))
3477- let iY = (dK(split(kr.description, "_")[do]) / cL)
3478- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3479- let iX = bC(Q)
3480- let jc = iW(iX, iY, iZ)
3481- let of = split(jc[bh], "_")
3482- let og = parseIntValue(of[bj])
3483- let oh = parseIntValue(of[bk])
3484- let oi = split(oc, "_")
3485- let oj = gw(oe, fA(jc[bg]), og, oh, true, nil)
3486- let gC = oj._1
3487- let ok = oj._2
3488- let ol = oj._3
3489- let om = gw(oi, gC, ok, ol, false, fK)
3490- let gG = om._1
3491- let on = om._2
3492- let oo = om._3
3493- let ob = fF(gG)
3494- let kX = makeString([of[bi], toString(on), toString(oo), of[bl]], "_")
3495- $Tuple2(([StringEntry(od, oc), StringEntry(iX, makeString_2C([jc[bd], jc[be], jc[bf], ob, kX], ":"))] ++ ml), 0)
3474+ let oe = bE(Q)
3475+ let of = split(valueOrElse(getString(oe), ":0_15:0_18:0"), "_")
3476+ let ks = value(assetInfo(fromBase58String(Q)))
3477+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3478+ let ja = valueOrElse(getInteger(bD(Q)), 0)
3479+ let iY = bC(Q)
3480+ let jd = iX(iY, iZ, ja)
3481+ let og = split(jd[bh], "_")
3482+ let oh = parseIntValue(og[bj])
3483+ let oi = parseIntValue(og[bk])
3484+ let oj = split(od, "_")
3485+ let ok = gw(of, fA(jd[bg]), oh, oi, true, nil)
3486+ let gC = ok._1
3487+ let ol = ok._2
3488+ let om = ok._3
3489+ let on = gw(oj, gC, ol, om, false, fK)
3490+ let gG = on._1
3491+ let oo = on._2
3492+ let op = on._3
3493+ let oc = fF(gG)
3494+ let kY = makeString([og[bi], toString(oo), toString(op), og[bl]], "_")
3495+ $Tuple2(([StringEntry(oe, od), StringEntry(iY, makeString_2C([jd[bd], jd[be], jd[bf], oc, kY], ":"))] ++ mm), 0)
34963496 }
34973497 }
34983498
35023502 func initDuckTourAttempt (B) = if ((gN.caller != dl))
35033503 then throw("Access denied")
35043504 else {
3505- let ka = A(B)
3506- let kb = aj(valueOrElse(getInteger(E(B)), 0))
3507- let lu = valueOrElse(getInteger(ka), kb)
3508- let op = bO(B)
3509- let kp = valueOrElse(getString(op), aM)
3505+ let kb = A(B)
3506+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
3507+ let lv = valueOrElse(getInteger(kb), kc)
3508+ let oq = bO(B)
3509+ let kq = valueOrElse(getString(oq), aM)
35103510 let cj = valueOrElse(getInteger(dl, bU), 0)
3511- let oq = (toString(cj) + "_T_0")
3512- $Tuple2([IntegerEntry(K(B), lu), IntegerEntry(ka, kb), StringEntry(L(B), kp), StringEntry(op, oq)], oq)
3511+ let or = (toString(cj) + "_T_0")
3512+ $Tuple2([IntegerEntry(K(B), lv), IntegerEntry(kb, kc), StringEntry(L(B), kq), StringEntry(oq, or)], or)
35133513 }
35143514
35153515
35163516
35173517 @Callable(gN)
35183518 func breakAttempt () = {
3519- let ml = mh(gN)
3519+ let mm = mi(gN)
35203520 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3521- let op = bO(B)
3522- let kp = valueOrElse(getString(op), aM)
3523- if ((split(kp, "_")[br] != "T"))
3521+ let oq = bO(B)
3522+ let kq = valueOrElse(getString(oq), aM)
3523+ if ((split(kq, "_")[br] != "T"))
35243524 then throw("Your duck is not in the tournament")
35253525 else {
3526- let or = getIntegerValue(K(B))
3527- let lA = getStringValue(L(B))
3528- $Tuple2(((ml :+ IntegerEntry(A(B), or)) :+ StringEntry(op, lA)), kp)
3526+ let os = getIntegerValue(K(B))
3527+ let lB = getStringValue(L(B))
3528+ $Tuple2(((mm :+ IntegerEntry(A(B), os)) :+ StringEntry(oq, lB)), kq)
35293529 }
35303530 }
35313531
35353535 func exitTournamentInternal (B) = if ((gN.caller != this))
35363536 then throw("Access denied")
35373537 else {
3538- let or = getIntegerValue(K(B))
3539- let lA = getStringValue(L(B))
3540- $Tuple2([IntegerEntry(A(B), or), StringEntry(bO(B), lA)], false)
3538+ let os = getIntegerValue(K(B))
3539+ let lB = getStringValue(L(B))
3540+ $Tuple2([IntegerEntry(A(B), os), StringEntry(bO(B), lB)], false)
35413541 }
35423542
35433543
35463546 func exitDeliveryInternal (B) = if ((gN.caller != this))
35473547 then throw("Access denied")
35483548 else {
3549- let nh = lr(B, false, 0, 0)
3550- $Tuple2((nh._1 ++ nh._2), false)
3549+ let ni = ls(B, false, 0, 0)
3550+ $Tuple2((ni._1 ++ ni._2), false)
35513551 }
35523552
35533553
35543554
35553555 @Callable(gN)
3556-func autoExitDelivery (B,jU,os,ls) = if ((gN.caller != this))
3556+func autoExitDelivery (B,jV,ot,lt) = if ((gN.caller != this))
35573557 then throw("Access denied")
35583558 else {
3559- let nh = lr(B, true, jU, ls)
3560- $Tuple2(nh._1, nh._3)
3559+ let ni = ls(B, true, jV, lt)
3560+ $Tuple2(ni._1, ni._3)
35613561 }
35623562
35633563
35643564
35653565 @Callable(gN)
3566-func breakDelivery () = $Tuple2(mh(gN), "breakDelivery")
3567-
3568-
3569-
3570-@Callable(gN)
3571-func prepareRobbery (jP,jQ) = {
3572- let ml = mh(gN)
3573- if (!(sigVerify_8Kb(jP, jQ, ec)))
3566+func breakDelivery () = $Tuple2(mi(gN), "breakDelivery")
3567+
3568+
3569+
3570+@Callable(gN)
3571+func prepareRobbery (jQ,jR) = {
3572+ let mm = mi(gN)
3573+ if (!(sigVerify_8Kb(jQ, jR, ec)))
35743574 then throw("signature does not match")
35753575 else if ((size(gN.payments) != 1))
35763576 then throw("exactly 1 payment must be attached")
35773577 else {
3578- let mm = gN.payments[0]
3579- let ot = mm.amount
3580- if (if (!(isDefined(mm.assetId)))
3578+ let mn = gN.payments[0]
3579+ let ou = mn.amount
3580+ if (if (!(isDefined(mn.assetId)))
35813581 then true
3582- else (value(mm.assetId) != ds))
3582+ else (value(mn.assetId) != ds))
35833583 then throw("WLGOLD payments only!")
35843584 else {
3585- let fs = split(toUtf8String(jP), "|")
3585+ let fs = split(toUtf8String(jQ), "|")
35863586 if ((size(fs) != 2))
35873587 then throw("Wrong message format")
35883588 else {
35893589 let B = fs[0]
3590- if (lp(B))
3590+ if (lq(B))
35913591 then throw("prepareRobbery_checkTournament")
3592- else if (lq(B))
3592+ else if (lr(B))
35933593 then throw("prepareRobbery_checkDelivery")
35943594 else {
35953595 let aB = ax(this, B)._1
3596- if ((aB > ot))
3597- then throw(((("Payment " + toString(ot)) + " < required ") + toString(aB)))
3596+ if ((aB > ou))
3597+ then throw(((("Payment " + toString(ou)) + " < required ") + toString(aB)))
35983598 else {
3599- let ou = split(fs[1], "_")
3599+ let ov = split(fs[1], "_")
36003600 let aA = lastBlock.timestamp
36013601 let aC = valueOrElse(getInteger(S(B)), 0)
36023602 let aD = valueOrElse(getString(T(B)), "")
36063606 else false)
36073607 then throw(("You already started robbing, wait till " + toString(aE)))
36083608 else {
3609- func ov (eU,Q) = {
3610- let ow = valueOrElse(getInteger(P(Q)), 0)
3611- let ox = valueOrElse(getInteger(R(Q)), 0)
3612- if ((ow > size(v)))
3609+ func ow (eU,Q) = {
3610+ let ox = valueOrElse(getInteger(P(Q)), 0)
3611+ let oy = valueOrElse(getInteger(R(Q)), 0)
3612+ if ((ox > size(v)))
36133613 then throw("Invalid state")
3614- else if ((aA > ox))
3614+ else if ((aA > oy))
36153615 then {
3616- let oy = valueOrElse(getInteger(bw(Q)), 0)
3617- if ((0 >= oy))
3616+ let oz = valueOrElse(getInteger(bw(Q)), 0)
3617+ if ((0 >= oz))
36183618 then eU
36193619 else {
36203620 let gu = value(assetInfo(fromBase58String(Q)))
3621- let kv = split(gu.description, "_")
3622- let kh = dK(kv[do])
3623- let oz = kg(Q, kh)
3624- let gT = (aA - oy)
3625- let ky = fraction(gT, (oz * kh), a)
3626- if ((w > ky))
3621+ let kw = split(gu.description, "_")
3622+ let ki = dK(kw[do])
3623+ let oA = kh(Q, ki)
3624+ let gT = (aA - oz)
3625+ let kz = fraction(gT, (oA * ki), a)
3626+ if ((w > kz))
36273627 then eU
36283628 else (eU :+ Q)
36293629 }
36313631 else eU
36323632 }
36333633
3634- let oA = {
3635- let eW = ou
3634+ let oB = {
3635+ let eW = ov
36363636 let eX = size(eW)
36373637 let eY = nil
36383638 func eZ (fa,fb) = if ((fb >= eX))
36393639 then fa
3640- else ov(fa, eW[fb])
3640+ else ow(fa, eW[fb])
36413641
36423642 func fc (fa,fb) = if ((fb >= eX))
36433643 then fa
36453645
36463646 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
36473647 }
3648- if ((size(oA) == 0))
3648+ if ((size(oB) == 0))
36493649 then throw("No candidates for robbery")
36503650 else {
3651- let oB = dV(size(oA), jP, jQ)
3652- let Q = oA[oB]
3653- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ ml), Q)
3651+ let oC = dV(size(oB), jQ, jR)
3652+ let Q = oB[oC]
3653+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ mm), Q)
36543654 }
36553655 }
36563656 }
36633663
36643664
36653665 @Callable(gN)
3666-func robLand (jP,jQ) = {
3667- let ml = mh(gN)
3668- if (!(sigVerify_8Kb(jP, jQ, ec)))
3666+func robLand (jQ,jR) = {
3667+ let mm = mi(gN)
3668+ if (!(sigVerify_8Kb(jQ, jR, ec)))
36693669 then throw("signature does not match")
36703670 else {
36713671 let bQ = toString(gN.caller)
36723672 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
36733673 let aA = lastBlock.timestamp
3674- $Tuple2((ml :+ IntegerEntry(N(B), aA)), 0)
3674+ $Tuple2((mm :+ IntegerEntry(N(B), aA)), 0)
36753675 }
36763676 }
36773677
36793679
36803680 @Callable(gN)
36813681 func acceptDelivery () = {
3682- let ml = mh(gN)
3682+ let mm = mi(gN)
36833683 let bQ = toString(gN.caller)
36843684 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3685- let oC = valueOrElse(getInteger(di, bS), 0)
3686- let ly = valueOrElse(getInteger(di, bT), 0)
3687- if ((aP > (oC - ly)))
3688- then throw(((("Delivery is not available, fund=" + dP(oC, 6)) + ", locked=") + dP(ly, 6)))
3685+ let oD = valueOrElse(getInteger(di, bS), 0)
3686+ let lz = valueOrElse(getInteger(di, bT), 0)
3687+ if ((aP > (oD - lz)))
3688+ then throw(((("Delivery is not available, fund=" + dP(oD, 6)) + ", locked=") + dP(lz, 6)))
36893689 else {
36903690 let aA = lastBlock.timestamp
3691- let oD = valueOrElse(getInteger(U(B)), 0)
3692- if ((oD > aA))
3693- then throw(("Delivery is forbidden for your duck until " + toString(oD)))
3691+ let oE = valueOrElse(getInteger(U(B)), 0)
3692+ if ((oE > aA))
3693+ then throw(("Delivery is forbidden for your duck until " + toString(oE)))
36943694 else {
36953695 let av = getIntegerValue(A(B))
36963696 if ((0 >= av))
36973697 then throw("You cannot accept delivery with zero health")
36983698 else {
3699- let lx = V(bQ)
3700- let fU = valueOrElse(getInteger(lx), 0)
3701- let oE = valueOrElse(getInteger(W(bQ)), 0)
3702- let oF = (aA / a)
3703- let oG = valueOrElse(getInteger(dm, d(bQ)), 0)
3704- let oH = (aR + (oG / aS))
3705- if (if ((fU >= oH))
3706- then (oE == oF)
3699+ let ly = V(bQ)
3700+ let fU = valueOrElse(getInteger(ly), 0)
3701+ let oF = valueOrElse(getInteger(W(bQ)), 0)
3702+ let oG = (aA / a)
3703+ let oH = valueOrElse(getInteger(dm, d(bQ)), 0)
3704+ let oI = (aR + (oH / aS))
3705+ if (if ((fU >= oI))
3706+ then (oF == oG)
37073707 else false)
3708- then throw((("You already used " + toString(oH)) + " delivery attempts for today"))
3709- else if (lp(B))
3708+ then throw((("You already used " + toString(oI)) + " delivery attempts for today"))
3709+ else if (lq(B))
37103710 then throw("acceptDelivery_checkTournament")
3711- else if (lq(B))
3711+ else if (lr(B))
37123712 then throw("acceptDelivery_checkDelivery")
37133713 else {
3714- let oI = dF(invoke(di, "updateDeliveryLocked", [(ly + aP)], nil))
3715- let op = bO(B)
3716- let kp = valueOrElse(getString(op), aM)
3717- let oJ = (toString(aA) + "_D_0")
3718- $Tuple2(([StringEntry(L(B), kp), StringEntry(op, oJ), IntegerEntry(lx, if ((oE != oF))
3714+ let oJ = dF(invoke(di, "updateDeliveryLocked", [(lz + aP)], nil))
3715+ let oq = bO(B)
3716+ let kq = valueOrElse(getString(oq), aM)
3717+ let oK = (toString(aA) + "_D_0")
3718+ $Tuple2(([StringEntry(L(B), kq), StringEntry(oq, oK), IntegerEntry(ly, if ((oF != oG))
37193719 then 0
3720- else fU)] ++ ml), $Tuple2(oJ, oI))
3720+ else fU)] ++ mm), $Tuple2(oK, oJ))
37213721 }
37223722 }
37233723 }
37293729 @Callable(gN)
37303730 func checkDeliveryCallback (B) = if ((gN.caller != dl))
37313731 then throw("Access denied")
3732- else $Tuple2(nil, lq(B))
3733-
3734-
3735-
3736-@Callable(gN)
3737-func genTestREADONLY (iy,gK) = {
3738- let jK = hi(toBigInt(sha256(toBytes(iy))))
3739- $Tuple2(nil, hz(jK, gK))
3732+ else $Tuple2(nil, lr(B))
3733+
3734+
3735+
3736+@Callable(gN)
3737+func genTestREADONLY (iz,gK) = {
3738+ let oL = value(value(blockInfoByHeight(2827006)).vrf)
3739+ let jL = hi(toBigInt((oL + sha256(toBytes(iz)))))
3740+ $Tuple2(nil, hz(jL, gK))
37403741 }
37413742
37423743
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 86400000
55
66 func b (c) = ("lastArbTimeUser_" + c)
77
88
99 func d (c) = ("acresStakedAmountByUser_" + c)
1010
1111
1212 let e = 100000000
1313
1414 let f = 3200
1515
1616 let g = 4000
1717
1818 let h = 3
1919
2020 let i = 100000000
2121
2222 let j = 400
2323
2424 let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
2525
2626 let l = 0
2727
2828 let m = 1
2929
3030 let n = 2
3131
3232 let o = 3
3333
3434 let p = 4
3535
3636 let q = 0
3737
3838 let r = 6
3939
4040 let s = 2
4141
4242 let t = 2
4343
4444 let u = 30
4545
4646 let v = [0, 600000, 900000, 43200000, 21600000]
4747
4848 let w = 20000000
4949
5050 let x = 1
5151
5252 let y = 0
5353
5454 let z = 1
5555
5656 func A (B) = ("duckHealth_" + B)
5757
5858
5959 func C (B) = ("duckChars_" + B)
6060
6161
6262 func D (B) = ("duckXP_" + B)
6363
6464
6565 func E (B) = ("duckLevel_" + B)
6666
6767
6868 func F (B) = ("duckFreePoints_" + B)
6969
7070
7171 func G (B) = ("duckEquipment_" + B)
7272
7373
7474 func H (c) = ("userXP_" + c)
7575
7676
7777 func I (c) = ("userLevel_" + c)
7878
7979
8080 func J (c) = ("userFreePoints_" + c)
8181
8282
8383 func K (B) = ("savedHealth_" + B)
8484
8585
8686 func L (B) = ("savedLocation_" + B)
8787
8888
8989 func M (B) = ("duckBuffs_" + B)
9090
9191
9292 func N (B) = ("lastRobberyTime_" + B)
9393
9494
9595 func O (B) = ("lastRobberyCost_" + B)
9696
9797
9898 func P (Q) = ("landRobberyState_" + Q)
9999
100100
101101 func R (Q) = ("landCooldownETA_" + Q)
102102
103103
104104 func S (B) = ("duckRobberyState_" + B)
105105
106106
107107 func T (B) = ("lockedLandByDuck_" + B)
108108
109109
110110 func U (B) = ("deliveryDelayByDuck_" + B)
111111
112112
113113 func V (c) = ("userDeliveryCount_" + c)
114114
115115
116116 func W (c) = ("userLastDeliveryDay_" + c)
117117
118118
119119 let X = 10000
120120
121121 let Y = 10000
122122
123123 let Z = 2000
124124
125125 let aa = 100000
126126
127127 let ab = 1000000
128128
129129 let ac = 5000000
130130
131131 let ad = 10000
132132
133133 let ae = 1000000
134134
135135 let af = 1000000
136136
137137 let ag = 10000
138138
139139 func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140140
141141
142142 func aj (ak) = (100 + ak)
143143
144144
145145 func al (am,an) = {
146146 let ao = ah(an)
147147 [ao, (h * (ao - am))]
148148 }
149149
150150
151151 func ap (aq,B,ar,as) = {
152152 let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153153 let au = valueOrElse(getInteger(aq, E(B)), 0)
154154 let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155155 let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156156 ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157157 then [ar, ar, ar, ar, ar]
158158 else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159159 }
160160
161161
162162 func ax (aq,B) = {
163163 let ay = valueOrElse(getInteger(aq, O(B)), 0)
164164 let az = valueOrElse(getInteger(aq, N(B)), 0)
165165 let aA = lastBlock.timestamp
166166 let aB = max([i, (ay - (j * (aA - az)))])
167167 let aC = valueOrElse(getInteger(aq, S(B)), 0)
168168 let aD = valueOrElse(getString(aq, T(B)), "")
169169 let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170170 $Tuple5(aB, az, aC, aD, aE)
171171 }
172172
173173
174174 let aF = "LAND"
175175
176176 let aG = "DUCK"
177177
178178 let aH = "PRESALE"
179179
180180 let aI = 6
181181
182182 let aJ = 25
183183
184184 let aK = 3456000
185185
186186 let aL = 10000000000
187187
188188 let aM = "Africa_F_Africa"
189189
190190 let aN = 39637
191191
192192 let aO = 10
193193
194194 let aP = 50000
195195
196196 let aQ = 600000
197197
198198 let aR = 1
199199
200200 let aS = 50000000
201201
202202 let aT = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
203203
204204 let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205205
206206 let aV = 10000000
207207
208208 let aW = [15, 16, 17, 18, 19, 20]
209209
210210 let aX = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
211211
212212 let aY = 6
213213
214214 let aZ = 8
215215
216216 let ba = 9
217217
218218 let bb = 10
219219
220220 let bc = 10
221221
222222 let bd = 0
223223
224224 let be = 1
225225
226226 let bf = 2
227227
228228 let bg = 3
229229
230230 let bh = 4
231231
232232 let bi = 0
233233
234234 let bj = 1
235235
236236 let bk = 2
237237
238238 let bl = 3
239239
240240 let bm = 0
241241
242242 let bn = 1
243243
244244 let bo = 2
245245
246246 let bp = 3
247247
248248 let bq = 0
249249
250250 let br = 1
251251
252252 let bs = 2
253253
254254 func bt (bu) = ("no_" + bu)
255255
256256
257257 func bv (bu) = ("lcna_" + bu)
258258
259259
260260 func bw (bu) = ("st_" + bu)
261261
262262
263263 func bx (by,bu) = makeString(["las", by, bu], "_")
264264
265265
266266 func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267267
268268
269269 func bC (Q) = ("wh_" + Q)
270270
271271
272272 func bD (bu) = ("infraLevel_" + bu)
273273
274274
275275 func bE (Q) = ("fortifications_" + Q)
276276
277277
278278 func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279279
280280
281281 func bG (c) = ("accountCustomNameByAddr_" + c)
282282
283283
284284 func bH (c) = ("accRefBy_" + c)
285285
286286
287287 func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288288
289289
290290 func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291291
292292
293293 func bK (c) = ("accReferrals_" + c)
294294
295295
296296 func bL (bu) = ("duckOwner_" + bu)
297297
298298
299299 func bM (bB) = ("stakedDuckByOwner_" + bB)
300300
301301
302302 func bN (B) = ("backPack_" + B)
303303
304304
305305 func bO (B) = ("duckLocation_" + B)
306306
307307
308308 func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309309
310310
311311 func bR () = "emergencyWarehouseProducts"
312312
313313
314314 let bS = "deliveryFund"
315315
316316 let bT = "deliveryLocked"
317317
318318 let bU = "%s__lastTourId"
319319
320320 func bV (bW) = ("%s%d__tourStaticData__" + toString(bW))
321321
322322
323323 func bX (bW) = ("%s%d__tourDynamicData__" + toString(bW))
324324
325325
326326 func bY (bW,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bW), B], "__")
327327
328328
329329 let bZ = 0
330330
331331 let ca = 1
332332
333333 let cb = 6
334334
335335 let cc = 1
336336
337337 func cd (ce,bW) = {
338338 let cf = split(valueOrErrorMessage(getString(ce, bV(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
339339 let cg = split_4C(valueOrErrorMessage(getString(ce, bX(bW)), (("Error reading tournament " + toString(bW)) + " data")), "__")
340340 [cf, cg]
341341 }
342342
343343
344344 func ch (ce,ci) = {
345345 let cj = valueOrElse(getInteger(ce, bU), 0)
346346 let ck = split(ci, "_")
347347 let aA = lastBlock.timestamp
348348 let cl = cd(ce, cj)
349349 let cf = cl[bZ]
350350 let cg = cl[ca]
351351 if (if (if ((ck[br] == "T"))
352352 then (parseIntValue(ck[bq]) == cj)
353353 else false)
354354 then (cg[cc] == "INPROGRESS")
355355 else false)
356356 then (parseIntValue(cf[cb]) > aA)
357357 else false
358358 }
359359
360360
361361 func cm (ci) = {
362362 let ck = split(ci, "_")
363363 let aA = lastBlock.timestamp
364364 let cn = parseIntValue(ck[bq])
365365 let co = parseIntValue(ck[bs])
366366 if (if ((ck[br] == "D"))
367367 then ((cn + aQ) > aA)
368368 else false)
369369 then (3 >= co)
370370 else false
371371 }
372372
373373
374374 func cp (ci) = {
375375 let cq = split(ci, "_")[br]
376376 if ((cq != "T"))
377377 then (cq != "D")
378378 else false
379379 }
380380
381381
382382 func cr (ce,ci) = {
383383 let cj = valueOrElse(getInteger(ce, bU), 0)
384384 let ck = split(ci, "_")
385385 let aA = lastBlock.timestamp
386386 let cl = cd(ce, cj)
387387 let cf = cl[bZ]
388388 let cg = cl[ca]
389389 let cq = ck[br]
390390 if ((cq == "D"))
391391 then true
392392 else if (if (if ((ck[br] == "T"))
393393 then (parseIntValue(ck[bq]) == cj)
394394 else false)
395395 then (cg[cc] == "INPROGRESS")
396396 else false)
397397 then (parseIntValue(cf[cb]) > aA)
398398 else false
399399 }
400400
401401
402402 func cs (ct) = (parseIntValue(ct[aY]) * aV)
403403
404404
405405 func cu (cv,cw,cx) = throw(((((("Cheat attempt: oldLoc=" + cv) + ", newLoc=") + cw) + ", case=") + toString(cx)))
406406
407407
408408 let cy = false
409409
410410 let cz = false
411411
412412 let cA = 86400000
413413
414414 let cB = take(drop(this.bytes, 1), 1)
415415
416416 let cC = {
417417 let cD = cB
418418 if ((base58'2W' == cD))
419419 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
420420 else if ((base58'2T' == cD))
421421 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
422422 else throw("Unknown chain")
423423 }
424424
425425 let cE = {
426426 let cD = cB
427427 if ((base58'2W' == cD))
428428 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
429429 else if ((base58'2T' == cD))
430430 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
431431 else throw("Unknown chain")
432432 }
433433
434434 let cF = {
435435 let cD = cB
436436 if ((base58'2W' == cD))
437437 then 10000000000
438438 else if ((base58'2T' == cD))
439439 then 100000000
440440 else throw("Unknown chain")
441441 }
442442
443443 let cG = {
444444 let cD = cB
445445 if ((base58'2W' == cD))
446446 then cA
447447 else if ((base58'2T' == cD))
448448 then 60000
449449 else throw("Unknown chain")
450450 }
451451
452452 let cH = {
453453 let cD = cB
454454 if ((base58'2W' == cD))
455455 then 10800000
456456 else if ((base58'2T' == cD))
457457 then 900000
458458 else throw("Unknown chain")
459459 }
460460
461461 let cI = "__"
462462
463463 let cJ = 1000000
464464
465465 let cK = 100000000
466466
467467 let cL = 25
468468
469469 let cM = 100
470470
471471 let cN = 225
472472
473473 let cO = 400
474474
475475 let cP = 625
476476
477477 let cQ = [0, 1, 2, 3, 4, 5]
478478
479479 func cR (cS,cT) = valueOrErrorMessage(getString(cS, cT), makeString(["mandatory ", toString(cS), ".", cT, " is not defined"], ""))
480480
481481
482482 let cU = 1
483483
484484 let cV = 2
485485
486486 let cW = 3
487487
488488 let cX = 4
489489
490490 let cY = 7
491491
492492 let cZ = 8
493493
494494 func da () = "%s__restConfig"
495495
496496
497497 func db () = "%s__restAddr"
498498
499499
500500 func dc (dd) = split_4C(cR(dd, da()), cI)
501501
502502
503503 func de (df,dg) = valueOrErrorMessage(addressFromString(df[dg]), ("Rest cfg doesn't contain address at index " + toString(dg)))
504504
505505
506506 let dh = addressFromStringValue(valueOrElse(getString(this, db()), cE))
507507
508508 let df = dc(dh)
509509
510510 let aq = de(df, cU)
511511
512512 let di = de(df, cV)
513513
514514 let dj = de(df, cW)
515515
516516 let dk = de(df, cX)
517517
518518 let dl = de(df, cY)
519519
520520 let dm = de(df, cZ)
521521
522522 let dn = 0
523523
524524 let do = 1
525525
526526 let dp = 2
527527
528528 let dq = 3
529529
530530 let dr = "wlg_assetId"
531531
532532 let ds = valueOrErrorMessage(getBinary(dk, dr), "WLGOLD is not issued yet")
533533
534534 let dt = "acresAssetId"
535535
536536 let du = valueOrErrorMessage(getBinary(dm, dt), "ACRES is not issued yet")
537537
538538 let dv = 2
539539
540540 func dw (cS) = ("finishBlockForAddr_" + cS)
541541
542542
543543 func dx () = "resTypesProportions"
544544
545545
546546 func dy (dz) = ("resTypesByContinent_" + dz)
547547
548548
549549 func dA (bB) = ("stakedLandsByOwner_" + bB)
550550
551551
552552 func dB (bB) = ("stakedPiecesByOwner_" + bB)
553553
554554
555555 func dC (dD) = {
556556 let cD = dD
557557 if ($isInstanceOf(cD, "String"))
558558 then {
559559 let dE = cD
560560 dE
561561 }
562562 else throw("fail to cast into String")
563563 }
564564
565565
566566 func dF (dD) = {
567567 let cD = dD
568568 if ($isInstanceOf(cD, "Int"))
569569 then {
570570 let dG = cD
571571 dG
572572 }
573573 else throw("fail to cast into Int")
574574 }
575575
576576
577577 func dH (dD) = {
578578 let cD = dD
579579 if ($isInstanceOf(cD, "List[Any]"))
580580 then {
581581 let dI = cD
582582 dI
583583 }
584584 else throw("fail to cast into List[Any]")
585585 }
586586
587587
588588 func dJ (dD) = {
589589 let cD = dD
590590 if ($isInstanceOf(cD, "Boolean"))
591591 then {
592592 let dE = cD
593593 dE
594594 }
595595 else throw("fail to cast into Boolean")
596596 }
597597
598598
599599 func dK (dL) = {
600600 let cD = dL
601601 if (("S" == cD))
602602 then cL
603603 else if (("M" == cD))
604604 then cM
605605 else if (("L" == cD))
606606 then cN
607607 else if (("XL" == cD))
608608 then cO
609609 else if (("XXL" == cD))
610610 then cP
611611 else throw("Unknown land size")
612612 }
613613
614614
615615 func dM (dE) = isDefined(parseInt(dE))
616616
617617
618618 func dN () = "contractsBlocked"
619619
620620
621621 func dO (c) = ("lastTxIdByUser_" + c)
622622
623623
624624 func dP (dQ,dR) = {
625625 let dS = pow(10, 0, dR, 0, 0, DOWN)
626626 let dT = toString((dQ % dS))
627627 let dU = drop(toString(dS), (1 + size(dT)))
628628 (((toString((dQ / dS)) + ".") + dU) + dT)
629629 }
630630
631631
632632 func dV (dW,dX,dY) = {
633633 let dZ = sha256((dX + dY))
634634 (toInt(dZ) % dW)
635635 }
636636
637637
638638 let ea = {
639639 let cD = cB
640640 if ((base58'2W' == cD))
641641 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
642642 else if ((base58'2T' == cD))
643643 then this
644644 else throw("Unknown chain")
645645 }
646646
647647 let eb = {
648648 let cD = cB
649649 if ((base58'2W' == cD))
650650 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
651651 else if ((base58'2T' == cD))
652652 then this
653653 else throw("Unknown chain")
654654 }
655655
656656 let ec = {
657657 let cD = cB
658658 if ((base58'2W' == cD))
659659 then if (cy)
660660 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
661661 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
662662 else if ((base58'2T' == cD))
663663 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
664664 else throw("Unknown chain")
665665 }
666666
667667 let ed = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
668668
669669 let ee = 300000
670670
671671 let ef = 5000000
672672
673673 let eg = 50
674674
675675 let eh = 10000000
676676
677677 let ei = {
678678 let cD = cB
679679 if ((base58'2W' == cD))
680680 then 252289527462
681681 else if ((base58'2T' == cD))
682682 then 2522895274
683683 else throw("Unknown chain")
684684 }
685685
686686 let ej = {
687687 let cD = cB
688688 if ((base58'2W' == cD))
689689 then 250000000
690690 else if ((base58'2T' == cD))
691691 then 250000000
692692 else throw("Unknown chain")
693693 }
694694
695695 let ek = 2500000000
696696
697697 let el = toBigInt(5)
698698
699699 let em = toBigInt(20)
700700
701701 let en = toBigInt((20 * 20))
702702
703703 let eo = toBigInt(((20 * 20) * 20))
704704
705705 let ep = toBigInt((((20 * 20) * 20) * 20))
706706
707707 let eq = toBigInt(((((20 * 20) * 20) * 20) * 20))
708708
709709 let er = 500
710710
711711 func es () = "nextLandNum"
712712
713713
714714 func et (eu) = ("lcn_" + eu)
715715
716716
717717 func ev (ew) = ("la_" + ew)
718718
719719
720720 func ex (bu,bB) = ((("ilao_" + bu) + "_") + bB)
721721
722722
723723 func ey (ew) = ("lo_" + ew)
724724
725725
726726 func ez (eu) = ("duckByCustomName_" + eu)
727727
728728
729729 func eA (eu) = ("accountByCustomName_" + eu)
730730
731731
732732 func eB () = "oldiesList"
733733
734734
735735 let eC = 0
736736
737737 let eD = 1
738738
739739 let eE = 2
740740
741741 let eF = 0
742742
743743 let eG = 5
744744
745745 let eH = 6
746746
747747 let eI = 7
748748
749749 func eJ (ew,dL) = ((aF + ew) + dL)
750750
751751
752752 func eK (eL,eM) = {
753753 let eN = if ((eL >= 0))
754754 then (((eL + eM) - 1) / eM)
755755 else -((((-(eL) + eM) - 1) / eM))
756756 (eN * cK)
757757 }
758758
759759
760760 func eO (eP,eQ) = {
761761 let eR = (((((eQ[0] + eQ[1]) + eQ[2]) + eQ[3]) + eQ[4]) + eQ[5])
762762 if ((0 >= eR))
763763 then throw("Zero weights sum")
764764 else {
765765 let eS = fraction(eP, cJ, eR)
766766 func eT (eU,eV) = (eU :+ fraction(eV, eS, cJ))
767767
768768 let eW = eQ
769769 let eX = size(eW)
770770 let eY = nil
771771 func eZ (fa,fb) = if ((fb >= eX))
772772 then fa
773773 else eT(fa, eW[fb])
774774
775775 func fc (fa,fb) = if ((fb >= eX))
776776 then fa
777777 else throw("List size exceeds 6")
778778
779779 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
780780 }
781781 }
782782
783783
784784 func fd (eP) = {
785785 let fe = split(value(getString(dx())), "_")
786786 if ((size(fe) != aI))
787787 then throw("Wrong proportions data")
788788 else {
789789 let ff = [parseIntValue(fe[0]), parseIntValue(fe[1]), parseIntValue(fe[2]), parseIntValue(fe[3]), parseIntValue(fe[4]), parseIntValue(fe[5])]
790790 eO(eP, ff)
791791 }
792792 }
793793
794794
795795 func fg (fh,fi,fj) = {
796796 let fk = fd(fj)
797797 func fl (eU,dg) = {
798798 let fm = (parseIntValue(fi[dg]) - fk[dg])
799799 if ((0 > fm))
800800 then throw(((((("Not enough material idx=" + toString(dg)) + ", you have ") + fi[dg]) + ", but need ") + toString(fk[dg])))
801801 else (eU :+ toString(fm))
802802 }
803803
804804 if (fh)
805805 then {
806806 let eW = cQ
807807 let eX = size(eW)
808808 let eY = nil
809809 func eZ (fa,fb) = if ((fb >= eX))
810810 then fa
811811 else fl(fa, eW[fb])
812812
813813 func fc (fa,fb) = if ((fb >= eX))
814814 then fa
815815 else throw("List size exceeds 6")
816816
817817 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
818818 }
819819 else fi
820820 }
821821
822822
823823 func fn (fo,fp) = if ((fp == ""))
824824 then $Tuple2(fo, false)
825825 else {
826826 func fq (eU,fr) = {
827827 let fs = split(fr, ",")
828828 if ((size(fs) != 2))
829829 then throw("Incorrect format, should be index,amount")
830830 else {
831831 let dg = parseIntValue(fs[0])
832832 if (if ((0 > dg))
833833 then true
834834 else (dg >= size(aX)))
835835 then throw("Unknown product idx")
836836 else {
837837 let ft = parseIntValue(fs[1])
838838 let fu = split(eU._1, (fs[0] + ":"))
839839 if ((size(fu) != 2))
840840 then throw((("You don't have " + aT[dg]) + " equipped"))
841841 else {
842842 let fv = fu[1]
843843 let fw = if (dM(take(drop(fv, 1), 1)))
844844 then 2
845845 else 1
846846 let fx = parseIntValue(take(fv, fw))
847847 let fy = drop(fv, fw)
848848 let fz = if ((fx >= ft))
849849 then (fx - ft)
850850 else throw(((((("You equipped " + toString(fx)) + " of ") + aT[dg]) + ", but tried to use ") + toString(ft)))
851851 $Tuple2(((((fu[0] + fs[0]) + ":") + toString(fz)) + fy), if (eU._2)
852852 then true
853853 else if (if ((dg >= 6))
854854 then (8 >= dg)
855855 else false)
856856 then (fz == 0)
857857 else false)
858858 }
859859 }
860860 }
861861 }
862862
863863 let eW = split(fp, "_")
864864 let eX = size(eW)
865865 let eY = $Tuple2(fo, false)
866866 func eZ (fa,fb) = if ((fb >= eX))
867867 then fa
868868 else fq(fa, eW[fb])
869869
870870 func fc (fa,fb) = if ((fb >= eX))
871871 then fa
872872 else throw("List size exceeds 10")
873873
874874 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
875875 }
876876
877877
878878 func fA (fB) = {
879879 let fC = if ((fB == ""))
880880 then nil
881881 else split_4C(fB, "_")
882882 func fD (eU,ct) = {
883883 let fE = (size(eU) / 8)
884884 let fx = if ((size(fC) > fE))
885885 then parseIntValue(fC[fE])
886886 else 0
887887 (eU + toBytes(fx))
888888 }
889889
890890 let eW = aX
891891 let eX = size(eW)
892892 let eY = base58''
893893 func eZ (fa,fb) = if ((fb >= eX))
894894 then fa
895895 else fD(fa, eW[fb])
896896
897897 func fc (fa,fb) = if ((fb >= eX))
898898 then fa
899899 else throw("List size exceeds 50")
900900
901901 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
902902 }
903903
904904
905905 func fF (fG) = {
906906 func fH (eU,ct) = {
907907 let fE = size(eU)
908908 let fI = take(drop(fG, (8 * fE)), 8)
909909 (eU :+ toString(toInt(fI)))
910910 }
911911
912912 makeString_2C({
913913 let eW = aX
914914 let eX = size(eW)
915915 let eY = nil
916916 func eZ (fa,fb) = if ((fb >= eX))
917917 then fa
918918 else fH(fa, eW[fb])
919919
920920 func fc (fa,fb) = if ((fb >= eX))
921921 then fa
922922 else throw("List size exceeds 50")
923923
924924 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
925925 }, "_")
926926 }
927927
928928
929929 func fJ (fK,fL) = {
930930 func fM (eU,fE) = {
931931 let fN = if ((size(fK) > (7 + fE)))
932932 then fK[(7 + fE)]
933933 else 0
934934 if ((parseIntValue(fL[fE]) > (fK[fE] + fN)))
935935 then throw(("Requirement not satisfied: " + k[fE]))
936936 else true
937937 }
938938
939939 let eW = [0, 1, 2, 3, 4, 5, 6]
940940 let eX = size(eW)
941941 let eY = false
942942 func eZ (fa,fb) = if ((fb >= eX))
943943 then fa
944944 else fM(fa, eW[fb])
945945
946946 func fc (fa,fb) = if ((fb >= eX))
947947 then fa
948948 else throw("List size exceeds 7")
949949
950950 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7)
951951 }
952952
953953
954954 func fO (fP,fC,fQ,fK,fR,fS) = {
955955 let fs = split(fP, ":")
956956 if ((size(fs) != 2))
957957 then throw("Incorrect format, should be index:amount")
958958 else if (if (!(fQ))
959959 then (size(fs[0]) != 2)
960960 else false)
961961 then throw("Product idx should be 2 digits, zero padded")
962962 else {
963963 let fT = parseIntValue(fs[0])
964964 let fU = parseIntValue(fs[1])
965965 if (!(containsElement(aW, fT)))
966966 then throw((("Product '" + aT[fT]) + "' cannot be used for land defense"))
967967 else if ((0 > fU))
968968 then throw("Count can't be negative")
969969 else if ((fU > u))
970970 then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
971971 else if ((fU == 0))
972972 then $Tuple3(fC, fR, fS)
973973 else {
974974 let fV = take(fC, (8 * fT))
975975 let fx = toInt(take(drop(fC, (8 * fT)), 8))
976976 let fy = drop(fC, (8 * (fT + 1)))
977977 let ct = split(aX[fT], "_")
978978 if (if (!(fQ))
979979 then (fU > fx)
980980 else false)
981981 then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
982982 else {
983983 let fz = if (if (!(fQ))
984984 then fJ(fK, split(ct[ba], ","))
985985 else false)
986986 then (fx - fU)
987987 else (fx + fU)
988988 let fW = (eK(fz, bc) - eK(fx, bc))
989989 $Tuple3(((fV + toBytes(fz)) + fy), (fR + fW), (fS - fW))
990990 }
991991 }
992992 }
993993 }
994994
995995
996996 func fX (fP,fC,fQ,fY,fZ,ga,fK) = {
997997 let fs = split(fP, ":")
998998 if ((size(fs) != 2))
999999 then throw("Incorrect format, should be index:amount")
10001000 else if (if (!(fQ))
10011001 then (size(fs[0]) != 2)
10021002 else false)
10031003 then throw("Product idx should be 2 digits, zero padded")
10041004 else {
10051005 let fT = parseIntValue(fs[0])
10061006 let fU = parseIntValue(fs[1])
10071007 if (if ((0 > fT))
10081008 then true
10091009 else (fT >= size(aX)))
10101010 then throw("Unknown product idx")
10111011 else if ((0 > fU))
10121012 then throw("Count can't be negative")
10131013 else if ((fU > u))
10141014 then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fT]))
10151015 else if ((fU == 0))
10161016 then $Tuple2(fC, false)
10171017 else {
10181018 let fV = take(fC, (8 * fT))
10191019 let fx = toInt(take(drop(fC, (8 * fT)), 8))
10201020 let fy = drop(fC, (8 * (fT + 1)))
10211021 let ct = split(aX[fT], "_")
10221022 if (if (!(fQ))
10231023 then (fU > fx)
10241024 else false)
10251025 then throw(((((("You have " + toString(fx)) + " of ") + aT[fT]) + ", but tried to use ") + toString(fU)))
10261026 else {
10271027 let gb = if (if (!(fQ))
10281028 then fJ(fK, split(ct[ba], ","))
10291029 else false)
10301030 then {
10311031 let gc = ct[bb]
10321032 if ((gc == ""))
10331033 then throw("Item cannot be equipped")
10341034 else {
10351035 let gd = parseIntValue(gc)
10361036 let ge = (gd / 100)
10371037 if ((fY != ge))
10381038 then throw("Segment incompatible")
10391039 else {
10401040 let gf = ((gd % 100) / 10)
10411041 if ((fZ != gf))
10421042 then throw("Slot incompatible")
10431043 else {
10441044 let gg = (gd % 10)
10451045 if (if ((ga != 0))
10461046 then (gg > 1)
10471047 else false)
10481048 then throw("Big items should occupy slot 0")
10491049 else (gg > 1)
10501050 }
10511051 }
10521052 }
10531053 }
10541054 else false
10551055 $Tuple2(((fV + toBytes((fx + (if (fQ)
10561056 then fU
10571057 else -(fU))))) + fy), gb)
10581058 }
10591059 }
10601060 }
10611061 }
10621062
10631063
10641064 func gh (gi,gj,fQ,fY,fZ,gk) = if ((gi != ""))
10651065 then {
10661066 let gl = split(gi, ",")
10671067 if ((size(gl) > t))
10681068 then throw("Wrong slots format")
10691069 else {
10701070 let gm = gl[0]
10711071 let gn = if ((size(gl) > 1))
10721072 then gl[1]
10731073 else ""
10741074 if (if ((gm == ""))
10751075 then (gn == "")
10761076 else false)
10771077 then gj
10781078 else {
10791079 let go = if ((gm != ""))
10801080 then fX(gm, gj, fQ, fY, fZ, 0, gk)
10811081 else $Tuple2(gj, false)
10821082 if ((gn != ""))
10831083 then if (go._2)
10841084 then throw("Big item already occupies slot")
10851085 else fX(gn, go._1, fQ, fY, fZ, 1, gk)._1
10861086 else go._1
10871087 }
10881088 }
10891089 }
10901090 else gj
10911091
10921092
10931093 func gp (gq,gr,fQ,gk) = {
10941094 func fY (eU,gs) = {
10951095 let fE = eU._1
10961096 let fZ = split(gs, ";")
10971097 if ((size(fZ) != s))
10981098 then throw("Wrong segment format")
10991099 else {
11001100 let gt = fZ[0]
11011101 let gu = fZ[1]
11021102 if (if ((gt == ""))
11031103 then (gu == "")
11041104 else false)
11051105 then $Tuple2((fE + 1), eU._2)
11061106 else {
11071107 let gv = gh(gt, eU._2, fQ, fE, 0, gk)
11081108 $Tuple2((fE + 1), gh(gu, gv, fQ, fE, 1, gk))
11091109 }
11101110 }
11111111 }
11121112
11131113 ( let eW = gq
11141114 let eX = size(eW)
11151115 let eY = $Tuple2(0, gr)
11161116 func eZ (fa,fb) = if ((fb >= eX))
11171117 then fa
11181118 else fY(fa, eW[fb])
11191119
11201120 func fc (fa,fb) = if ((fb >= eX))
11211121 then fa
11221122 else throw("List size exceeds 6")
11231123
11241124 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6))._2
11251125 }
11261126
11271127
11281128 func gw (gq,gr,fR,fS,fQ,fK) = if ((3 > size(gq)))
11291129 then throw("At least duck, mines and traps parts are required")
11301130 else {
11311131 func fY (eU,gs) = {
11321132 let fE = eU._1
11331133 if ((fE == 0))
11341134 then $Tuple4((fE + 1), eU._2, eU._3, eU._4)
11351135 else {
11361136 let gx = fO(gs, eU._2, fQ, fK, eU._3, eU._4)
11371137 $Tuple4((fE + 1), gx._1, gx._2, gx._3)
11381138 }
11391139 }
11401140
11411141 let gy = {
11421142 let eW = gq
11431143 let eX = size(eW)
11441144 let eY = $Tuple4(0, gr, fR, fS)
11451145 func eZ (fa,fb) = if ((fb >= eX))
11461146 then fa
11471147 else fY(fa, eW[fb])
11481148
11491149 func fc (fa,fb) = if ((fb >= eX))
11501150 then fa
11511151 else throw("List size exceeds 10")
11521152
11531153 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
11541154 }
11551155 $Tuple3(gy._2, gy._3, gy._4)
11561156 }
11571157
11581158
11591159 func gz (B) = {
11601160 let gA = G(B)
11611161 let gB = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
11621162 let gC = gp(gB, ed, true, nil)
11631163 let gD = split(gB[q], ";")[1]
11641164 let ar = if ((gD == ""))
11651165 then 0
11661166 else {
11671167 let gE = split(gD, ",")[0]
11681168 if ((gE == ""))
11691169 then 0
11701170 else {
11711171 let fP = split(gE, ":")
11721172 let dg = fP[0]
11731173 let gF = fP[1]
11741174 if (if (if (if (if ((dg == "06"))
11751175 then true
11761176 else (dg == "07"))
11771177 then true
11781178 else (dg == "08"))
11791179 then (gF != "")
11801180 else false)
11811181 then (parseIntValue(gF) > 0)
11821182 else false)
11831183 then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
11841184 else 0
11851185 }
11861186 }
11871187 let gk = ap(this, B, ar, true)
11881188 let gG = gp(gB, gC, false, gk)
11891189 (gG == gG)
11901190 }
11911191
11921192
11931193 func gH (gI,gJ,gK,gL) = if ((size(gI) != aI))
11941194 then throw("Wrong proportions data")
11951195 else {
11961196 func gM (eU,gN) = {
11971197 let fm = (parseIntValue(gI[gN]) + ((gL * gJ[gN]) * gK))
11981198 if ((0 > fm))
11991199 then throw(((((((("Panic! Pieces of type=" + toString(gN)) + ", sign=") + toString(gL)) + ", terrainCounts[i]=") + toString(gJ[gN])) + ", landSizeIndex=") + toString(gK)))
12001200 else (eU :+ toString(fm))
12011201 }
12021202
12031203 let eW = cQ
12041204 let eX = size(eW)
12051205 let eY = nil
12061206 func eZ (fa,fb) = if ((fb >= eX))
12071207 then fa
12081208 else gM(fa, eW[fb])
12091209
12101210 func fc (fa,fb) = if ((fb >= eX))
12111211 then fa
12121212 else throw("List size exceeds 6")
12131213
12141214 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
12151215 }
12161216
12171217
12181218 func gO (gJ,gK,gL) = {
12191219 let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
12201220 makeString(gH(gI, gJ, gK, gL), "_")
12211221 }
12221222
12231223
12241224 func gP (gQ) = [(size(split(gQ, "A")) - 1), (size(split(gQ, "B")) - 1), (size(split(gQ, "C")) - 1), (size(split(gQ, "D")) - 1), (size(split(gQ, "E")) - 1), (size(split(gQ, "F")) - 1)]
12251225
12261226
12271227 func gR (gS,gJ,gT,gK,gU) = {
12281228 func gV (eU,gN) = {
12291229 let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
12301230 (eU :+ toString((parseIntValue(gS[gN]) + gW)))
12311231 }
12321232
12331233 let ff = {
12341234 let eW = cQ
12351235 let eX = size(eW)
12361236 let eY = nil
12371237 func eZ (fa,fb) = if ((fb >= eX))
12381238 then fa
12391239 else gV(fa, eW[fb])
12401240
12411241 func fc (fa,fb) = if ((fb >= eX))
12421242 then fa
12431243 else throw("List size exceeds 6")
12441244
12451245 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
12461246 }
12471247 makeString(ff, "_")
12481248 }
12491249
12501250
12511251 func gX (gJ,gT,gK,gU) = {
12521252 func gV (eU,gN) = {
12531253 let gW = ((fraction(gT, gU, a) * gJ[gN]) * gK)
12541254 $Tuple2((eU._1 :+ gW), (eU._2 + gW))
12551255 }
12561256
12571257 let eW = cQ
12581258 let eX = size(eW)
12591259 let eY = $Tuple2(nil, 0)
12601260 func eZ (fa,fb) = if ((fb >= eX))
12611261 then fa
12621262 else gV(fa, eW[fb])
12631263
12641264 func fc (fa,fb) = if ((fb >= eX))
12651265 then fa
12661266 else throw("List size exceeds 6")
12671267
12681268 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
12691269 }
12701270
12711271
12721272 func gY (gZ,ha,hb,hc) = {
12731273 let hd = hb._1
12741274 let he = hb._2
12751275 if ((he == 0))
12761276 then $Tuple2(makeString(gZ, "_"), makeString(ha, "_"))
12771277 else if ((hc >= he))
12781278 then {
12791279 func hf (eU,gN) = (eU :+ toString((parseIntValue(gZ[gN]) + hd[gN])))
12801280
12811281 let ff = {
12821282 let eW = cQ
12831283 let eX = size(eW)
12841284 let eY = nil
12851285 func eZ (fa,fb) = if ((fb >= eX))
12861286 then fa
12871287 else hf(fa, eW[fb])
12881288
12891289 func fc (fa,fb) = if ((fb >= eX))
12901290 then fa
12911291 else throw("List size exceeds 6")
12921292
12931293 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
12941294 }
12951295 $Tuple2(makeString(ff, "_"), makeString(ha, "_"))
12961296 }
12971297 else {
12981298 func hg (eU,gN) = {
12991299 let hh = fraction(hd[gN], hc, he)
13001300 $Tuple2((eU._1 :+ toString((parseIntValue(gZ[gN]) + hh))), (eU._2 :+ toString(((parseIntValue(ha[gN]) + hd[gN]) - hh))))
13011301 }
13021302
13031303 let ff = {
13041304 let eW = cQ
13051305 let eX = size(eW)
13061306 let eY = $Tuple2(nil, nil)
13071307 func eZ (fa,fb) = if ((fb >= eX))
13081308 then fa
13091309 else hg(fa, eW[fb])
13101310
13111311 func fc (fa,fb) = if ((fb >= eX))
13121312 then fa
13131313 else throw("List size exceeds 6")
13141314
13151315 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
13161316 }
13171317 $Tuple2(makeString(ff._1, "_"), makeString(ff._2, "_"))
13181318 }
13191319 }
13201320
13211321
13221322 func hi (hj) = if ((hj >= toBigInt(0)))
13231323 then hj
13241324 else -(hj)
13251325
13261326
13271327 let hk = [[35, 18, 30, 7, 6, 24], [29, 18, 29, 7, 8, 29], [6, 18, 29, 8, 30, 29], [6, 28, 6, 48, 26, 6], [24, 18, 6, 30, 30, 12]]
13281328
13291329 let hl = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14]
13301330
13311331 let hm = ["A", "B", "C", "D", "E", "F"]
13321332
13331333 func hn (eU,ho) = (eU + parseIntValue(ho))
13341334
13351335
13361336 func hp (hq,hr) = if ((hq == 0))
13371337 then throw("maxRand should be non-zero")
13381338 else {
13391339 let hs = toBigInt(hq)
13401340 $Tuple2(toInt((hr % hs)), (hr / hs))
13411341 }
13421342
13431343
13441344 func ht (hu,hv,hw) = {
13451345 func hx (eU,ho) = if (eU._1)
13461346 then eU
13471347 else {
13481348 let hy = ((eU._3 - ho) - hw)
13491349 if ((0 > hy))
13501350 then $Tuple3(true, eU._2, 0)
13511351 else $Tuple3(false, (eU._2 + 1), hy)
13521352 }
13531353
13541354 let ff = {
13551355 let eW = hu
13561356 let eX = size(eW)
13571357 let eY = $Tuple3(false, 0, hv)
13581358 func eZ (fa,fb) = if ((fb >= eX))
13591359 then fa
13601360 else hx(fa, eW[fb])
13611361
13621362 func fc (fa,fb) = if ((fb >= eX))
13631363 then fa
13641364 else throw("List size exceeds 6")
13651365
13661366 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
13671367 }
13681368 ff._2
13691369 }
13701370
13711371
13721372 func hz (hA,gK) = {
13731373 func hB (hC,hD) = {
13741374 let fx = split(valueOrElse(getString(dy(hD)), "0_0_0_0_0_0"), "_")
13751375 let hE = {
13761376 let eW = fx
13771377 let eX = size(eW)
13781378 let eY = 0
13791379 func eZ (fa,fb) = if ((fb >= eX))
13801380 then fa
13811381 else hn(fa, eW[fb])
13821382
13831383 func fc (fa,fb) = if ((fb >= eX))
13841384 then fa
13851385 else throw("List size exceeds 6")
13861386
13871387 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
13881388 }
13891389 $Tuple2((hC._1 :+ hE), (hC._2 + hE))
13901390 }
13911391
13921392 let hF = {
13931393 let eW = aU
13941394 let eX = size(eW)
13951395 let eY = $Tuple2(nil, 0)
13961396 func eZ (fa,fb) = if ((fb >= eX))
13971397 then fa
13981398 else hB(fa, eW[fb])
13991399
14001400 func fc (fa,fb) = if ((fb >= eX))
14011401 then fa
14021402 else throw("List size exceeds 5")
14031403
14041404 fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
14051405 }
14061406 let hG = hF._1
14071407 let eP = hF._2
14081408 let hH = max(hG)
14091409 let hI = ((hH * 5) - eP)
14101410 let hJ = (hI / 50)
14111411 let hK = if ((hI == 0))
14121412 then hp(5, hA)
14131413 else {
14141414 let hL = hp((hI + (hJ * 5)), hA)
14151415 let ff = hL._1
14161416 let hM = hL._2
14171417 func hN (eU,ho) = (eU :+ (hH - ho))
14181418
14191419 let hO = {
14201420 let eW = hG
14211421 let eX = size(eW)
14221422 let eY = nil
14231423 func hP (fa,fb) = if ((fb >= eX))
14241424 then fa
14251425 else hN(fa, eW[fb])
14261426
14271427 func hQ (fa,fb) = if ((fb >= eX))
14281428 then fa
14291429 else throw("List size exceeds 6")
14301430
14311431 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
14321432 }
14331433 $Tuple2(ht(hO, ff, hJ), hM)
14341434 }
14351435 let hR = hK._1
14361436 let hS = hK._2
14371437 let hT = hk[hR]
14381438 let hU = split(valueOrElse(getString(dy(aU[hR])), "0_0_0_0_0_0"), "_")
14391439 func hV (eU,ho) = (eU :+ parseIntValue(ho))
14401440
14411441 let hW = {
14421442 let eW = hU
14431443 let eX = size(eW)
14441444 let eY = nil
14451445 func hP (fa,fb) = if ((fb >= eX))
14461446 then fa
14471447 else hV(fa, eW[fb])
14481448
14491449 func hQ (fa,fb) = if ((fb >= eX))
14501450 then fa
14511451 else throw("List size exceeds 6")
14521452
14531453 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
14541454 }
1455- let hE = hG[hR]
1456- func hX (hC,hY) = {
1457- func hZ (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3)))
1458-
1459- let ia = {
1455+ let hX = hG[hR]
1456+ func hY (hC,hZ) = {
1457+ func ia (eU,fE) = (eU :+ ((hC._2[fE] * 120) - (hT[fE] * hC._3)))
1458+
1459+ let ib = {
14601460 let eW = cQ
14611461 let eX = size(eW)
14621462 let eY = nil
1463- func ib (fa,fb) = if ((fb >= eX))
1464- then fa
1465- else hZ(fa, eW[fb])
1466-
14671463 func ic (fa,fb) = if ((fb >= eX))
14681464 then fa
1465+ else ia(fa, eW[fb])
1466+
1467+ func id (fa,fb) = if ((fb >= eX))
1468+ then fa
14691469 else throw("List size exceeds 6")
14701470
1471- ic(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6)
1472- }
1473- let id = max(ia)
1474- func ie (eU,ho) = {
1475- let dE = (id - ho)
1471+ id(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6)
1472+ }
1473+ let ie = max(ib)
1474+ func if (eU,ho) = {
1475+ let dE = (ie - ho)
14761476 $Tuple2((eU._1 :+ dE), (eU._2 + dE))
14771477 }
14781478
1479- let if = {
1480- let eW = ia
1479+ let ig = {
1480+ let eW = ib
14811481 let eX = size(eW)
14821482 let eY = $Tuple2(nil, 0)
1483- func ig (fa,fb) = if ((fb >= eX))
1484- then fa
1485- else ie(fa, eW[fb])
1486-
14871483 func ih (fa,fb) = if ((fb >= eX))
14881484 then fa
1485+ else if(fa, eW[fb])
1486+
1487+ func ii (fa,fb) = if ((fb >= eX))
1488+ then fa
14891489 else throw("List size exceeds 6")
14901490
1491- ih(ig(ig(ig(ig(ig(ig(eY, 0), 1), 2), 3), 4), 5), 6)
1492- }
1493- let ii = if._1
1494- let ij = if._2
1495- let ik = (ij / 60)
1496- let il = if ((ij == 0))
1491+ ii(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6)
1492+ }
1493+ let ij = ig._1
1494+ let ik = ig._2
1495+ let il = (ik / 60)
1496+ let im = if ((ik == 0))
14971497 then hp(6, hC._4)
14981498 else {
1499- let im = hp((ij + (ik * 6)), hC._4)
1500- let ff = im._1
1501- let hM = im._2
1502- $Tuple2(ht(ii, ff, ik), hM)
1499+ let in = hp((ik + (il * 6)), hC._4)
1500+ let ff = in._1
1501+ let hM = in._2
1502+ $Tuple2(ht(ij, ff, il), hM)
15031503 }
1504- let dg = il._1
1505- let in = il._2
1506- func io (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg))
1504+ let dg = im._1
1505+ let io = im._2
1506+ func ip (eU,fE) = (eU :+ (hC._2[fE] + (if ((fE == dg))
15071507 then gK
15081508 else 0)))
15091509
1510- let ip = {
1510+ let iq = {
15111511 let eW = cQ
15121512 let eX = size(eW)
15131513 let eY = nil
1514- func iq (fa,fb) = if ((fb >= eX))
1515- then fa
1516- else io(fa, eW[fb])
1517-
15181514 func ir (fa,fb) = if ((fb >= eX))
15191515 then fa
1516+ else ip(fa, eW[fb])
1517+
1518+ func is (fa,fb) = if ((fb >= eX))
1519+ then fa
15201520 else throw("List size exceeds 6")
15211521
1522- ir(iq(iq(iq(iq(iq(iq(eY, 0), 1), 2), 3), 4), 5), 6)
1523- }
1524- $Tuple4((hC._1 :+ hm[dg]), ip, (hC._3 + gK), in)
1522+ is(ir(ir(ir(ir(ir(ir(eY, 0), 1), 2), 3), 4), 5), 6)
1523+ }
1524+ $Tuple4((hC._1 :+ hm[dg]), iq, (hC._3 + gK), io)
15251525 }
15261526
15271527 let fm = {
15281528 let eW = hl
15291529 let eX = size(eW)
1530- let eY = $Tuple4(nil, hW, hE, hS)
1531- func ib (fa,fb) = if ((fb >= eX))
1532- then fa
1533- else hX(fa, eW[fb])
1534-
1530+ let eY = $Tuple4(nil, hW, hX, hS)
15351531 func ic (fa,fb) = if ((fb >= eX))
15361532 then fa
1533+ else hY(fa, eW[fb])
1534+
1535+ func id (fa,fb) = if ((fb >= eX))
1536+ then fa
15371537 else throw("List size exceeds 25")
15381538
1539- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1539+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
15401540 }
1541- func is (eU,fE) = (eU + fm._1[fE])
1541+ func it (eU,fE) = (eU + fm._1[fE])
15421542
15431543 $Tuple2(hR, {
15441544 let eW = hl
15451545 let eX = size(eW)
15461546 let eY = ""
1547- func ig (fa,fb) = if ((fb >= eX))
1548- then fa
1549- else is(fa, eW[fb])
1550-
15511547 func ih (fa,fb) = if ((fb >= eX))
15521548 then fa
1549+ else it(fa, eW[fb])
1550+
1551+ func ii (fa,fb) = if ((fb >= eX))
1552+ then fa
15531553 else throw("List size exceeds 25")
15541554
1555- ih(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(ig(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1555+ ii(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(ih(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
15561556 })
15571557 }
15581558
15591559
1560-let it = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1561-
1562-func iu (dG,iv) = {
1560+let iu = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
1561+
1562+func iv (dG,iw) = {
15631563 let hy = toInt((dG % em))
1564- let iw = if ((iv[0] > hy))
1564+ let ix = if ((iw[0] > hy))
15651565 then "A"
1566- else if ((iv[1] > hy))
1566+ else if ((iw[1] > hy))
15671567 then "B"
1568- else if ((iv[2] > hy))
1568+ else if ((iw[2] > hy))
15691569 then "C"
1570- else if ((iv[3] > hy))
1570+ else if ((iw[3] > hy))
15711571 then "D"
1572- else if ((iv[4] > hy))
1572+ else if ((iw[4] > hy))
15731573 then "E"
15741574 else "F"
1575- iw
1576- }
1577-
1578-
1579-func ix (iy,iz) = {
1580- let iA = it[iz]
1581- func iB (eU,eV) = $Tuple2((((((eU._1 + iu(eU._2, iA)) + iu((eU._2 / em), iA)) + iu((eU._2 / en), iA)) + iu((eU._2 / eo), iA)) + iu((eU._2 / ep), iA)), (eU._2 / eq))
1575+ ix
1576+ }
1577+
1578+
1579+func iy (iz,iA) = {
1580+ let iB = iu[iA]
1581+ func iC (eU,eV) = $Tuple2((((((eU._1 + iv(eU._2, iB)) + iv((eU._2 / em), iB)) + iv((eU._2 / en), iB)) + iv((eU._2 / eo), iB)) + iv((eU._2 / ep), iB)), (eU._2 / eq))
15821582
15831583 let gy = {
15841584 let eW = [1, 2, 3, 4, 5]
15851585 let eX = size(eW)
1586- let eY = $Tuple2("", (iy / el))
1586+ let eY = $Tuple2("", (iz / el))
15871587 func eZ (fa,fb) = if ((fb >= eX))
15881588 then fa
1589- else iB(fa, eW[fb])
1589+ else iC(fa, eW[fb])
15901590
15911591 func fc (fa,fb) = if ((fb >= eX))
15921592 then fa
15931593 else throw("List size exceeds 5")
15941594
15951595 fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
15961596 }
15971597 gy._1
15981598 }
15991599
16001600
1601-func iC (iD,gK) = {
1602- func iE (eU,dE) = {
1601+func iD (iE,gK) = {
1602+ func iF (eU,dE) = {
16031603 let fE = eU._2
16041604 let ho = parseIntValue(dE)
16051605 let hj = if ((ho == 0))
16061606 then 0
16071607 else if ((ho >= (4 * gK)))
16081608 then (ho / gK)
16091609 else if ((ho > (3 * gK)))
16101610 then 3
16111611 else (((ho - 1) / gK) + 1)
16121612 $Tuple3((eU._1 :+ hj), (eU._2 + 1), (eU._3 + hj))
16131613 }
16141614
16151615 let gy = {
1616- let eW = iD
1616+ let eW = iE
16171617 let eX = size(eW)
16181618 let eY = $Tuple3(nil, 0, 0)
16191619 func eZ (fa,fb) = if ((fb >= eX))
16201620 then fa
1621- else iE(fa, eW[fb])
1621+ else iF(fa, eW[fb])
16221622
16231623 func fc (fa,fb) = if ((fb >= eX))
16241624 then fa
16251625 else throw("List size exceeds 6")
16261626
16271627 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
16281628 }
16291629 let hu = gy._1
1630- let iF = value(indexOf(hu, max(hu)))
1630+ let iG = value(indexOf(hu, max(hu)))
16311631 let hw = (gy._3 - 25)
1632- func iG (eU,dg) = {
1633- let dQ = (hu[dg] - (if ((dg == iF))
1632+ func iH (eU,dg) = {
1633+ let dQ = (hu[dg] - (if ((dg == iG))
16341634 then hw
16351635 else 0))
16361636 let dU = if ((dQ == 0))
16371637 then nil
16381638 else split(drop(toString(pow(10, 0, dQ, 0, 0, DOWN)), 1), "")
16391639 let gd = hm[dg]
1640- func iH (hC,hY) = (hC :+ gd)
1641-
1642- let iI = {
1640+ func iI (hC,hZ) = (hC :+ gd)
1641+
1642+ let iJ = {
16431643 let eW = dU
16441644 let eX = size(eW)
16451645 let eY = nil
16461646 func hP (fa,fb) = if ((fb >= eX))
16471647 then fa
1648- else iH(fa, eW[fb])
1648+ else iI(fa, eW[fb])
16491649
16501650 func hQ (fa,fb) = if ((fb >= eX))
16511651 then fa
16521652 else throw("List size exceeds 25")
16531653
16541654 hQ(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
16551655 }
1656- (eU ++ iI)
1656+ (eU ++ iJ)
16571657 }
16581658
16591659 let ff = {
16601660 let eW = cQ
16611661 let eX = size(eW)
16621662 let eY = nil
16631663 func hP (fa,fb) = if ((fb >= eX))
16641664 then fa
1665- else iG(fa, eW[fb])
1665+ else iH(fa, eW[fb])
16661666
16671667 func hQ (fa,fb) = if ((fb >= eX))
16681668 then fa
16691669 else throw("List size exceeds 6")
16701670
16711671 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
16721672 }
1673- func is (eU,fE) = (eU + ff[fE])
1673+ func it (eU,fE) = (eU + ff[fE])
16741674
16751675 let eW = hl
16761676 let eX = size(eW)
16771677 let eY = ""
1678- func ib (fa,fb) = if ((fb >= eX))
1679- then fa
1680- else is(fa, eW[fb])
1681-
16821678 func ic (fa,fb) = if ((fb >= eX))
16831679 then fa
1680+ else it(fa, eW[fb])
1681+
1682+ func id (fa,fb) = if ((fb >= eX))
1683+ then fa
16841684 else throw("List size exceeds 25")
16851685
1686- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1687- }
1688-
1689-
1690-func iJ (iK) = {
1691- let gx = split(valueOrElse(getString(iK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1686+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25)
1687+ }
1688+
1689+
1690+func iK (iL) = {
1691+ let gx = split(valueOrElse(getString(iL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
16921692 [toString(valueOrElse(parseInt(gx[bm]), 0)), if ((size(split(gx[bn], "_")) == aI))
16931693 then gx[bn]
16941694 else "0_0_0_0_0_0", if ((size(split(gx[bo], "_")) == aI))
16951695 then gx[bo]
16961696 else "0_0_0_0_0_0", gx[bp]]
16971697 }
16981698
16991699
1700-func iL (iM) = {
1701- let fs = split(iM, "_")
1700+func iM (iN) = {
1701+ let fs = split(iN, "_")
17021702 ((aL * (parseIntValue(fs[1]) + 1)) * parseIntValue(fs[0]))
17031703 }
17041704
17051705
1706-func iN (iO) = {
1707- let iP = iO[bg]
1708- func iQ (eU,iR) = (eU + parseIntValue(iR))
1709-
1710- func iS (eU,iR) = {
1706+func iO (iP) = {
1707+ let iQ = iP[bg]
1708+ func iR (eU,iS) = (eU + parseIntValue(iS))
1709+
1710+ func iT (eU,iS) = {
17111711 let dg = eU._1
1712- let eN = (((parseIntValue(iR) + bc) - 1) / bc)
1712+ let eN = (((parseIntValue(iS) + bc) - 1) / bc)
17131713 $Tuple2((dg + 1), (eU._2 + (eN * cK)))
17141714 }
17151715
1716- let iT = {
1717- let eW = split(iO[be], "_")
1716+ let iU = {
1717+ let eW = split(iP[be], "_")
17181718 let eX = size(eW)
17191719 let eY = 0
17201720 func eZ (fa,fb) = if ((fb >= eX))
17211721 then fa
1722- else iQ(fa, eW[fb])
1722+ else iR(fa, eW[fb])
17231723
17241724 func fc (fa,fb) = if ((fb >= eX))
17251725 then fa
17261726 else throw("List size exceeds 6")
17271727
17281728 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
17291729 }
1730- let iU = {
1731- let eW = split(iO[bf], "_")
1730+ let iV = {
1731+ let eW = split(iP[bf], "_")
17321732 let eX = size(eW)
17331733 let eY = 0
17341734 func hP (fa,fb) = if ((fb >= eX))
17351735 then fa
1736- else iQ(fa, eW[fb])
1736+ else iR(fa, eW[fb])
17371737
17381738 func hQ (fa,fb) = if ((fb >= eX))
17391739 then fa
17401740 else throw("List size exceeds 6")
17411741
17421742 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
17431743 }
1744- let iV = if ((iP == ""))
1744+ let iW = if ((iQ == ""))
17451745 then 0
1746- else ( let eW = split_4C(iP, "_")
1746+ else ( let eW = split_4C(iQ, "_")
17471747 let eX = size(eW)
17481748 let eY = $Tuple2(0, 0)
1749- func ib (fa,fb) = if ((fb >= eX))
1750- then fa
1751- else iS(fa, eW[fb])
1752-
17531749 func ic (fa,fb) = if ((fb >= eX))
17541750 then fa
1751+ else iT(fa, eW[fb])
1752+
1753+ func id (fa,fb) = if ((fb >= eX))
1754+ then fa
17551755 else throw("List size exceeds 50")
17561756
1757- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1758- ((iT + iU) + iV)
1759- }
1760-
1761-
1762-func iW (iX,iY,iZ) = {
1763- let iM = ((toString(iY) + "_") + toString(iZ))
1764- let ja = iL(iM)
1765- let jb = valueOrElse(getString(iX), (iM + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1766- let jc = split_4C(jb, ":")
1767- let jd = iN(jc)
1768- let je = if ((5 > size(jc)))
1769- then makeString(["0", toString(jd), toString((ja - jd)), toString(ja)], "_")
1757+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1758+ ((iU + iV) + iW)
1759+ }
1760+
1761+
1762+func iX (iY,iZ,ja) = {
1763+ let iN = ((toString(iZ) + "_") + toString(ja))
1764+ let jb = iM(iN)
1765+ let jc = valueOrElse(getString(iY), (iN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1766+ let jd = split_4C(jc, ":")
1767+ let je = iO(jd)
1768+ let jf = if ((5 > size(jd)))
1769+ then makeString(["0", toString(je), toString((jb - je)), toString(jb)], "_")
17701770 else {
1771- let jf = split(jc[bh], "_")
1772- let jg = parseIntValue(jf[bi])
1773- let jh = if ((size(jf) > 1))
1774- then parseIntValue(jf[bj])
1775- else jd
1776- makeString([toString(jg), toString(jh), toString(((ja - jg) - jh)), toString(ja)], "_")
1777- }
1778-[jc[bd], if ((size(split(jc[be], "_")) == aI))
1779- then jc[be]
1780- else "0_0_0_0_0_0", if ((size(split(jc[bf], "_")) == aI))
1781- then jc[bf]
1782- else "0_0_0_0_0_0", jc[bg], je]
1783- }
1784-
1785-
1786-func ji (iO) = {
1787- let jj = iN(iO)
1788- let jk = parseIntValue(split(iO[bh], "_")[bi])
1789- ((iL(iO[bd]) - jj) - jk)
1790- }
1791-
1792-
1793-func jl (jm,iO,jn) = if ((size(jm) != 3))
1771+ let jg = split(jd[bh], "_")
1772+ let jh = parseIntValue(jg[bi])
1773+ let ji = if ((size(jg) > 1))
1774+ then parseIntValue(jg[bj])
1775+ else je
1776+ makeString([toString(jh), toString(ji), toString(((jb - jh) - ji)), toString(jb)], "_")
1777+ }
1778+[jd[bd], if ((size(split(jd[be], "_")) == aI))
1779+ then jd[be]
1780+ else "0_0_0_0_0_0", if ((size(split(jd[bf], "_")) == aI))
1781+ then jd[bf]
1782+ else "0_0_0_0_0_0", jd[bg], jf]
1783+ }
1784+
1785+
1786+func jj (iP) = {
1787+ let jk = iO(iP)
1788+ let jl = parseIntValue(split(iP[bh], "_")[bi])
1789+ ((iM(iP[bd]) - jk) - jl)
1790+ }
1791+
1792+
1793+func jm (jn,iP,jo) = if ((size(jn) != 3))
17941794 then throw("cargoListStr should contain exactly 2 ':' separators")
17951795 else {
1796- let jo = split(jm[0], "_")
1797- let jp = split(jm[1], "_")
1798- let jq = if ((jm[2] == ""))
1796+ let jp = split(jn[0], "_")
1797+ let jq = split(jn[1], "_")
1798+ let jr = if ((jn[2] == ""))
17991799 then nil
1800- else split_4C(jm[2], "_")
1801- if ((size(jo) != aI))
1800+ else split_4C(jn[2], "_")
1801+ if ((size(jp) != aI))
18021802 then throw("All 6 resources should be passed")
1803- else if ((size(jp) != aI))
1803+ else if ((size(jq) != aI))
18041804 then throw("All 6 materials should be passed")
18051805 else {
1806- let hc = ji(iO)
1807- let jr = split(iO[be], "_")
1808- let js = split(iO[bf], "_")
1809- let jt = if ((iO[bg] == ""))
1806+ let hc = jj(iP)
1807+ let js = split(iP[be], "_")
1808+ let jt = split(iP[bf], "_")
1809+ let ju = if ((iP[bg] == ""))
18101810 then nil
1811- else split_4C(iO[bg], "_")
1812- let ha = split(jn[bn], "_")
1813- let ju = split(jn[bo], "_")
1814- let jv = if ((jn[bp] == ""))
1811+ else split_4C(iP[bg], "_")
1812+ let ha = split(jo[bn], "_")
1813+ let jv = split(jo[bo], "_")
1814+ let jw = if ((jo[bp] == ""))
18151815 then nil
1816- else split_4C(jn[bp], "_")
1817- func jw (eU,iR) = {
1816+ else split_4C(jo[bp], "_")
1817+ func jx (eU,iS) = {
18181818 let gN = eU._1
1819- let jx = parseIntValue(iR)
1820- let jy = parseIntValue(jr[gN])
1821- let jz = parseIntValue(ha[gN])
1822- if ((jx == 0))
1823- then $Tuple4((gN + 1), (eU._2 :+ jr[gN]), (eU._3 :+ ha[gN]), eU._4)
1824- else if ((jx > 0))
1825- then if ((jx > jz))
1826- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jz)) + " available"))
1827- else $Tuple4((gN + 1), (eU._2 :+ toString((jy + jx))), (eU._3 :+ toString((jz - jx))), (eU._4 + jx))
1828- else if ((-(jx) > jy))
1829- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jy)) + " available"))
1830- else $Tuple4((gN + 1), (eU._2 :+ toString((jy + jx))), (eU._3 :+ toString((jz - jx))), (eU._4 + jx))
1819+ let jy = parseIntValue(iS)
1820+ let jz = parseIntValue(js[gN])
1821+ let jA = parseIntValue(ha[gN])
1822+ if ((jy == 0))
1823+ then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ha[gN]), eU._4)
1824+ else if ((jy > 0))
1825+ then if ((jy > jA))
1826+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jA)) + " available"))
1827+ else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy))
1828+ else if ((-(jy) > jz))
1829+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jz)) + " available"))
1830+ else $Tuple4((gN + 1), (eU._2 :+ toString((jz + jy))), (eU._3 :+ toString((jA - jy))), (eU._4 + jy))
18311831 }
18321832
18331833 let ff = {
1834- let eW = jo
1834+ let eW = jp
18351835 let eX = size(eW)
18361836 let eY = $Tuple4(0, nil, nil, 0)
18371837 func eZ (fa,fb) = if ((fb >= eX))
18381838 then fa
1839- else jw(fa, eW[fb])
1839+ else jx(fa, eW[fb])
18401840
18411841 func fc (fa,fb) = if ((fb >= eX))
18421842 then fa
18431843 else throw("List size exceeds 6")
18441844
18451845 fc(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6)
18461846 }
1847- func jA (eU,iR) = {
1847+ func jB (eU,iS) = {
18481848 let gN = eU._1
1849- let jx = parseIntValue(iR)
1850- let jB = parseIntValue(js[gN])
1851- let jC = parseIntValue(ju[gN])
1852- if ((jx == 0))
1853- then $Tuple4((gN + 1), (eU._2 :+ js[gN]), (eU._3 :+ ju[gN]), eU._4)
1854- else if ((jx > 0))
1855- then if ((jx > jC))
1856- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jC)) + " available"))
1857- else $Tuple4((gN + 1), (eU._2 :+ toString((jB + jx))), (eU._3 :+ toString((jC - jx))), (eU._4 + jx))
1858- else if ((-(jx) > jB))
1859- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jB)) + " available"))
1860- else $Tuple4((gN + 1), (eU._2 :+ toString((jB + jx))), (eU._3 :+ toString((jC - jx))), (eU._4 + jx))
1849+ let jy = parseIntValue(iS)
1850+ let jC = parseIntValue(jt[gN])
1851+ let jD = parseIntValue(jv[gN])
1852+ if ((jy == 0))
1853+ then $Tuple4((gN + 1), (eU._2 :+ jt[gN]), (eU._3 :+ jv[gN]), eU._4)
1854+ else if ((jy > 0))
1855+ then if ((jy > jD))
1856+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jD)) + " available"))
1857+ else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy))
1858+ else if ((-(jy) > jC))
1859+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jC)) + " available"))
1860+ else $Tuple4((gN + 1), (eU._2 :+ toString((jC + jy))), (eU._3 :+ toString((jD - jy))), (eU._4 + jy))
18611861 }
18621862
18631863 let gt = {
1864- let eW = jp
1864+ let eW = jq
18651865 let eX = size(eW)
18661866 let eY = $Tuple4(0, nil, nil, ff._4)
18671867 func hP (fa,fb) = if ((fb >= eX))
18681868 then fa
1869- else jA(fa, eW[fb])
1869+ else jB(fa, eW[fb])
18701870
18711871 func hQ (fa,fb) = if ((fb >= eX))
18721872 then fa
18731873 else throw("List size exceeds 6")
18741874
18751875 hQ(hP(hP(hP(hP(hP(hP(eY, 0), 1), 2), 3), 4), 5), 6)
18761876 }
1877- func jD (eU,iR) = {
1877+ func jE (eU,iS) = {
18781878 let gN = eU._1
1879- let jx = parseIntValue(iR)
1880- let jE = if ((size(jt) > gN))
1881- then parseIntValue(jt[gN])
1879+ let jy = parseIntValue(iS)
1880+ let jF = if ((size(ju) > gN))
1881+ then parseIntValue(ju[gN])
18821882 else 0
1883- let jF = if ((size(jv) > gN))
1884- then parseIntValue(jv[gN])
1883+ let jG = if ((size(jw) > gN))
1884+ then parseIntValue(jw[gN])
18851885 else 0
1886- if ((jx == 0))
1887- then $Tuple4((gN + 1), (eU._2 :+ toString(jE)), (eU._3 :+ toString(jF)), eU._4)
1888- else if ((jx > 0))
1889- then if ((jx > jF))
1890- then throw((((("Attempt to take " + iR) + " from backpack, but only ") + toString(jF)) + " available"))
1886+ if ((jy == 0))
1887+ then $Tuple4((gN + 1), (eU._2 :+ toString(jF)), (eU._3 :+ toString(jG)), eU._4)
1888+ else if ((jy > 0))
1889+ then if ((jy > jG))
1890+ then throw((((("Attempt to take " + iS) + " from backpack, but only ") + toString(jG)) + " available"))
18911891 else {
1892- let fW = (eK((jE + jx), bc) - eK(jE, bc))
1893- $Tuple4((gN + 1), (eU._2 :+ toString((jE + jx))), (eU._3 :+ toString((jF - jx))), (eU._4 + fW))
1892+ let fW = (eK((jF + jy), bc) - eK(jF, bc))
1893+ $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW))
18941894 }
1895- else if ((-(jx) > jE))
1896- then throw((((("Attempt to take " + toString(-(jx))) + " from warehouse, but only ") + toString(jE)) + " available"))
1895+ else if ((-(jy) > jF))
1896+ then throw((((("Attempt to take " + toString(-(jy))) + " from warehouse, but only ") + toString(jF)) + " available"))
18971897 else {
1898- let fW = (eK((jE + jx), bc) - eK(jE, bc))
1899- $Tuple4((gN + 1), (eU._2 :+ toString((jE + jx))), (eU._3 :+ toString((jF - jx))), (eU._4 + fW))
1898+ let fW = (eK((jF + jy), bc) - eK(jF, bc))
1899+ $Tuple4((gN + 1), (eU._2 :+ toString((jF + jy))), (eU._3 :+ toString((jG - jy))), (eU._4 + fW))
19001900 }
19011901 }
19021902
1903- let gx = if ((size(jq) != 0))
1903+ let gx = if ((size(jr) != 0))
19041904 then {
1905- let eW = jq
1905+ let eW = jr
19061906 let eX = size(eW)
19071907 let eY = $Tuple4(0, nil, nil, gt._4)
1908- func ib (fa,fb) = if ((fb >= eX))
1909- then fa
1910- else jD(fa, eW[fb])
1911-
19121908 func ic (fa,fb) = if ((fb >= eX))
19131909 then fa
1910+ else jE(fa, eW[fb])
1911+
1912+ func id (fa,fb) = if ((fb >= eX))
1913+ then fa
19141914 else throw("List size exceeds 50")
19151915
1916- ic(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(ib(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1916+ id(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(ic(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
19171917 }
1918- else $Tuple4(0, jt, jv, gt._4)
1919- let jG = gx._4
1920- if ((jG > hc))
1921- then throw((((("Attempt to put total " + toString(jG)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1922- else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jG)
1918+ else $Tuple4(0, ju, jw, gt._4)
1919+ let jH = gx._4
1920+ if ((jH > hc))
1921+ then throw((((("Attempt to put total " + toString(jH)) + " stuff, but only ") + toString(hc)) + " warehouse space left"))
1922+ else $Tuple7(makeString(ff._2, "_"), makeString(gt._2, "_"), makeString_2C(gx._2, "_"), makeString(ff._3, "_"), makeString(gt._3, "_"), makeString_2C(gx._3, "_"), jH)
19231923 }
19241924 }
19251925
19261926
1927-func jH (jI,jJ) = {
1928- let bQ = toString(jI)
1929- let jK = hi(toBigInt(jJ))
1930- let jL = valueOrElse(getInteger(es()), (er + 1))
1931- let ew = toString(jL)
1932- let iz = toInt((jK % el))
1933- let gQ = ix(jK, iz)
1934- let dz = aU[iz]
1935- let jM = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1936- let bu = calculateAssetId(jM)
1937- let jN = toBase58String(bu)
1938- $Tuple2([IntegerEntry(es(), (jL + 1)), jM, StringEntry(ev(ew), jN), StringEntry(bt(jN), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jN), 0), IntegerEntry(ex(jN, bQ), 0), ScriptTransfer(jI, 1, bu)], $Tuple2(jN, dz))
1939- }
1940-
1941-
1942-func jO (bQ,jP,jQ) = if (!(sigVerify_8Kb(jP, jQ, ec)))
1927+func jI (jJ,jK) = {
1928+ let bQ = toString(jJ)
1929+ let jL = hi(toBigInt(jK))
1930+ let jM = valueOrElse(getInteger(es()), (er + 1))
1931+ let ew = toString(jM)
1932+ let iA = toInt((jL % el))
1933+ let gQ = iy(jL, iA)
1934+ let dz = aU[iA]
1935+ let jN = Issue(eJ(ew, "S"), makeString([ew, "S", gQ, dz], "_"), 1, 0, false)
1936+ let bu = calculateAssetId(jN)
1937+ let jO = toBase58String(bu)
1938+ $Tuple2([IntegerEntry(es(), (jM + 1)), jN, StringEntry(ev(ew), jO), StringEntry(bt(jO), bQ), StringEntry(ey(ew), bQ), IntegerEntry(bD(jO), 0), IntegerEntry(ex(jO, bQ), 0), ScriptTransfer(jJ, 1, bu)], $Tuple2(jO, dz))
1939+ }
1940+
1941+
1942+func jP (bQ,jQ,jR) = if (!(sigVerify_8Kb(jQ, jR, ec)))
19431943 then throw("signature does not match")
19441944 else {
1945- let fs = split_4C(toUtf8String(jP), ";")
1946- let jR = split_4C(fs[0], "|")
1947- let jS = split(jR[eF], "_")
1948- let jT = parseIntValue(jS[0])
1949- let jU = parseIntValue(jS[1])
1950- let jV = split(fs[1], ":")
1951- let jW = jV[0]
1952- let jX = parseIntValue(jR[eG])
1953- if (if ((jX > (lastBlock.timestamp + ee)))
1945+ let fs = split_4C(toUtf8String(jQ), ";")
1946+ let jS = split_4C(fs[0], "|")
1947+ let jT = split(jS[eF], "_")
1948+ let jU = parseIntValue(jT[0])
1949+ let jV = parseIntValue(jT[1])
1950+ let jW = split(fs[1], ":")
1951+ let jX = jW[0]
1952+ let jY = parseIntValue(jS[eG])
1953+ if (if ((jY > (lastBlock.timestamp + ee)))
19541954 then true
1955- else ((lastBlock.timestamp - ee) > jX))
1956- then throw(((("signature outdated: logTime=" + toString(jX)) + ", bcTime=") + toString(lastBlock.timestamp)))
1955+ else ((lastBlock.timestamp - ee) > jY))
1956+ then throw(((("signature outdated: logTime=" + toString(jY)) + ", bcTime=") + toString(lastBlock.timestamp)))
19571957 else {
1958- let jY = jV[1]
1959- let jZ = valueOrElse(getString(dO(bQ)), "")
1960- if ((jZ != jY))
1961- then throw(((("Tx ids don't match! In state: " + jZ) + ", in msg: ") + jY))
1958+ let jZ = jW[1]
1959+ let ka = valueOrElse(getString(dO(bQ)), "")
1960+ if ((ka != jZ))
1961+ then throw(((("Tx ids don't match! In state: " + ka) + ", in msg: ") + jZ))
19621962 else {
19631963 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1964- let ka = A(B)
1965- let kb = aj(valueOrElse(getInteger(E(B)), 0))
1966- let kc = valueOrElse(getInteger(ka), kb)
1967- if ((kc != jT))
1968- then throw(((("oldHealth=" + toString(kc)) + " from state does not match one from flight log=") + toString(jT)))
1969- else if ((0 >= jT))
1964+ let kb = A(B)
1965+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
1966+ let kd = valueOrElse(getInteger(kb), kc)
1967+ if ((kd != jU))
1968+ then throw(((("oldHealth=" + toString(kd)) + " from state does not match one from flight log=") + toString(jU)))
1969+ else if ((0 >= jU))
19701970 then throw("You can't fly with zero health")
19711971 else if (!(gz(B)))
19721972 then throw("Equipment incompatible")
19731973 else {
1974- let kd = if ((size(jR) > eH))
1975- then jR[eH]
1974+ let ke = if ((size(jS) > eH))
1975+ then jS[eH]
19761976 else ""
1977- let ke = if ((size(jR) > eI))
1978- then jR[eI]
1977+ let kf = if ((size(jS) > eI))
1978+ then jS[eI]
19791979 else ""
1980- let kf = if (if ((jU > 0))
1981- then (kd == "$")
1980+ let kg = if (if ((jV > 0))
1981+ then (ke == "$")
19821982 else false)
19831983 then dF(invoke(dh, "sendUsdtPrize", [bQ], nil))
19841984 else 0
1985- $Tuple5(jU, B, kf, jW, ke)
1985+ $Tuple5(jV, B, kg, jX, kf)
19861986 }
19871987 }
19881988 }
19891989 }
19901990
19911991
1992-func kg (Q,kh) = {
1993- let iZ = valueOrElse(getInteger(bD(Q)), 0)
1994- let ki = valueOrElse(getInteger(bx(aH, Q)), 0)
1995- let kj = (iZ / 6)
1996- let kk = (iZ / 7)
1997- ((aK + fraction(aK, ((iZ + kj) + (2 * kk)), 5)) + fraction(aK, ki, (kh * 5)))
1998- }
1999-
2000-
2001-func kl (c,km,kn) = {
2002- let ko = if ((km == eC))
2003- then $Tuple2(kn, valueOrElse(getString(bM(c)), ""))
1992+func kh (Q,ki) = {
1993+ let ja = valueOrElse(getInteger(bD(Q)), 0)
1994+ let kj = valueOrElse(getInteger(bx(aH, Q)), 0)
1995+ let kk = (ja / 6)
1996+ let kl = (ja / 7)
1997+ ((aK + fraction(aK, ((ja + kk) + (2 * kl)), 5)) + fraction(aK, kj, (ki * 5)))
1998+ }
1999+
2000+
2001+func km (c,kn,ko) = {
2002+ let kp = if ((kn == eC))
2003+ then $Tuple2(ko, valueOrElse(getString(bM(c)), ""))
20042004 else {
20052005 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2006- let kp = valueOrElse(getString(bO(B)), aM)
2007- let ck = split(value(kp), "_")
2006+ let kq = valueOrElse(getString(bO(B)), aM)
2007+ let ck = split(value(kq), "_")
20082008 if ((ck[br] != "L"))
20092009 then throw((("Duck location type is " + ck[br]) + ", but should be L"))
20102010 else $Tuple2(ck[bs], B)
20112011 }
2012- let Q = ko._1
2013- let kq = ko._2
2014- let kr = value(assetInfo(fromBase58String(Q)))
2015- let ks = bw(Q)
2016- let kt = valueOrErrorMessage(getInteger(ks), (("Land " + kr.name) + " is not staked"))
2017- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
2018- if ((ku != c))
2012+ let Q = kp._1
2013+ let kr = kp._2
2014+ let ks = value(assetInfo(fromBase58String(Q)))
2015+ let kt = bw(Q)
2016+ let ku = valueOrErrorMessage(getInteger(kt), (("Land " + ks.name) + " is not staked"))
2017+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
2018+ if ((kv != c))
20192019 then throw((aF + " is not yours"))
20202020 else {
2021- let kv = split(kr.description, "_")
2022- $Tuple4(kq, Q, kv, kt)
2023- }
2024- }
2025-
2026-
2027-func kw (c,eL,km,kn) = if ((0 > eL))
2021+ let kw = split(ks.description, "_")
2022+ $Tuple4(kr, Q, kw, ku)
2023+ }
2024+ }
2025+
2026+
2027+func kx (c,eL,kn,ko) = if ((0 > eL))
20282028 then throw("Negative amount")
20292029 else {
2030- let gd = kl(c, km, kn)
2030+ let gd = km(c, kn, ko)
20312031 let dL = gd._3[do]
20322032 let gJ = gP(gd._3[dp])
20332033 let gT = (lastBlock.timestamp - gd._4)
20342034 if ((0 > gT))
20352035 then throw(((("Saved timestamp is in future, saved = " + toString(gd._4)) + ", current = ") + toString(lastBlock.timestamp)))
20362036 else {
2037- let kh = dK(dL)
2038- let kx = kg(gd._2, kh)
2039- let ky = fraction(gT, (kx * kh), a)
2040- if ((eL > ky))
2041- then throw(((("Not enough resources, available = " + toString(ky)) + ", requested = ") + toString(eL)))
2037+ let ki = dK(dL)
2038+ let ky = kh(gd._2, ki)
2039+ let kz = fraction(gT, (ky * ki), a)
2040+ if ((eL > kz))
2041+ then throw(((("Not enough resources, available = " + toString(kz)) + ", requested = ") + toString(eL)))
20422042 else {
2043- let kz = fraction((ky - eL), a, (kx * kh))
2044- let kA = (lastBlock.timestamp - kz)
2045- let iY = (kh / cL)
2046- let hb = gX(gJ, (gT - kz), iY, kx)
2047- let iX = bC(gd._2)
2048- let iZ = valueOrElse(getInteger(bD(gd._2)), 0)
2049- let iO = iW(iX, iY, iZ)
2050- let jf = split(iO[bh], "_")
2051- let hc = parseIntValue(jf[bk])
2052- if (if ((km == eC))
2043+ let kA = fraction((kz - eL), a, (ky * ki))
2044+ let kB = (lastBlock.timestamp - kA)
2045+ let iZ = (ki / cL)
2046+ let hb = gX(gJ, (gT - kA), iZ, ky)
2047+ let iY = bC(gd._2)
2048+ let ja = valueOrElse(getInteger(bD(gd._2)), 0)
2049+ let iP = iX(iY, iZ, ja)
2050+ let jg = split(iP[bh], "_")
2051+ let hc = parseIntValue(jg[bk])
2052+ if (if ((kn == eC))
20532053 then (eL > hc)
20542054 else false)
20552055 then throw((("Only " + toString(hc)) + " space left in warehouse"))
20562056 else {
2057- let iK = bN(gd._1)
2058- let jn = iJ(iK)
2059- let ha = split(jn[bn], "_")
2060- let gZ = split(iO[be], "_")
2061- let kB = if ((km == eC))
2062- then $Tuple4(gR(gZ, gJ, (gT - kz), iY, kx), jn[bn], (parseIntValue(jf[bj]) + hb._2), (parseIntValue(jf[bk]) - hb._2))
2063- else if ((km == eD))
2064- then $Tuple4(iO[be], gR(ha, gJ, (gT - kz), iY, kx), parseIntValue(jf[bj]), parseIntValue(jf[bk]))
2057+ let iL = bN(gd._1)
2058+ let jo = iK(iL)
2059+ let ha = split(jo[bn], "_")
2060+ let gZ = split(iP[be], "_")
2061+ let kC = if ((kn == eC))
2062+ then $Tuple4(gR(gZ, gJ, (gT - kA), iZ, ky), jo[bn], (parseIntValue(jg[bj]) + hb._2), (parseIntValue(jg[bk]) - hb._2))
2063+ else if ((kn == eD))
2064+ then $Tuple4(iP[be], gR(ha, gJ, (gT - kA), iZ, ky), parseIntValue(jg[bj]), parseIntValue(jg[bk]))
20652065 else {
2066- let kC = gY(gZ, ha, hb, hc)
2067- let kD = min([parseIntValue(jf[bk]), hb._2])
2068- $Tuple4(kC._1, kC._2, (parseIntValue(jf[bj]) + kD), (parseIntValue(jf[bk]) - kD))
2066+ let kD = gY(gZ, ha, hb, hc)
2067+ let kE = min([parseIntValue(jg[bk]), hb._2])
2068+ $Tuple4(kD._1, kD._2, (parseIntValue(jg[bj]) + kE), (parseIntValue(jg[bk]) - kE))
20692069 }
2070- let kE = kB._1
2071- let kF = kB._2
2072- let kG = kB._3
2073- let kH = kB._4
2074- $Tuple5([IntegerEntry(bw(gd._2), kA), IntegerEntry(bz(aF, gd._2, c), kA)], iK, [jn[bm], kF, jn[bo], jn[bp]], iX, [iO[bd], kE, iO[bf], iO[bg], makeString([jf[bi], toString(kG), toString(kH), jf[bl]], "_")])
2070+ let kF = kC._1
2071+ let kG = kC._2
2072+ let kH = kC._3
2073+ let kI = kC._4
2074+ $Tuple5([IntegerEntry(bw(gd._2), kB), IntegerEntry(bz(aF, gd._2, c), kB)], iL, [jo[bm], kG, jo[bo], jo[bp]], iY, [iP[bd], kF, iP[bf], iP[bg], makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")])
20752075 }
20762076 }
20772077 }
20782078 }
20792079
20802080
2081-func kI (c,Q,kh,km) = {
2082- let ks = bw(Q)
2083- let kt = value(getInteger(ks))
2084- let ky = (fraction((lastBlock.timestamp - kt), kg(Q, kh), a) * kh)
2085- kw(c, ky, km, Q)
2086- }
2087-
2088-
2089-func kJ (fh,jI,kK,Q) = {
2090- let c = toString(jI)
2091- let gd = kl(c, eE, Q)
2092- let kh = dK(gd._3[do])
2093- let kL = bD(gd._2)
2094- let kM = valueOrElse(getInteger(kL), 0)
2081+func kJ (c,Q,ki,kn) = {
2082+ let kt = bw(Q)
2083+ let ku = value(getInteger(kt))
2084+ let kz = (fraction((lastBlock.timestamp - ku), kh(Q, ki), a) * ki)
2085+ kx(c, kz, kn, Q)
2086+ }
2087+
2088+
2089+func kK (fh,jJ,kL,Q) = {
2090+ let c = toString(jJ)
2091+ let gd = km(c, eE, Q)
2092+ let ki = dK(gd._3[do])
2093+ let kM = bD(gd._2)
2094+ let kN = valueOrElse(getInteger(kM), 0)
20952095 if (if (!(cz))
2096- then (kM >= 3)
2096+ then (kN >= 3)
20972097 else false)
20982098 then throw("Currently max infrastructure level = 3")
20992099 else {
2100- let kN = ((sqrt(kh, 0, 0, DOWN) / 5) + 2)
2101- let ao = (kM + 1)
2100+ let kO = ((sqrt(ki, 0, 0, DOWN) / 5) + 2)
2101+ let ao = (kN + 1)
21022102 if (if (cz)
2103- then (ao > kN)
2103+ then (ao > kO)
21042104 else false)
2105- then throw(("Currently max infrastructure level = " + toString(kN)))
2105+ then throw(("Currently max infrastructure level = " + toString(kO)))
21062106 else {
2107- let kO = fraction(eh, (kh * ao), cL)
2107+ let kP = fraction(eh, (ki * ao), cL)
21082108 if (if (!(fh))
2109- then (kK != kO)
2109+ then (kL != kP)
21102110 else false)
2111- then throw(("Payment attached should be " + toString(kO)))
2111+ then throw(("Payment attached should be " + toString(kP)))
21122112 else {
2113- let iK = bN(gd._1)
2114- let jn = iJ(iK)
2115- let kP = split(jn[bo], "_")
2116- let kQ = fraction(cF, (kh * ao), cL)
2117- let kR = makeString(fg(fh, kP, kQ), "_")
2118- let kS = kI(c, gd._2, kh, eE)
2119- let kT = kS._5
2120- let kU = iL(kT[bd])
2121- let kV = makeString([split(kT[bd], "_")[0], toString(ao)], "_")
2122- let kW = iL(kV)
2123- let jf = split(kT[bh], "_")
2124- let kX = makeString([jf[bi], jf[bj], toString(((parseIntValue(jf[bk]) + kW) - kU)), toString(kW)], "_")
2125- $Tuple3(([IntegerEntry(kL, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iK, makeString([jn[bm], kS._3[bn], kR, jn[bp]], ":")), StringEntry(kS._4, makeString([kV, kT[be], kT[bf], kT[bg], kX], ":"))] ++ kS._1), ao, kQ)
2113+ let iL = bN(gd._1)
2114+ let jo = iK(iL)
2115+ let kQ = split(jo[bo], "_")
2116+ let kR = fraction(cF, (ki * ao), cL)
2117+ let kS = makeString(fg(fh, kQ, kR), "_")
2118+ let kT = kJ(c, gd._2, ki, eE)
2119+ let kU = kT._5
2120+ let kV = iM(kU[bd])
2121+ let kW = makeString([split(kU[bd], "_")[0], toString(ao)], "_")
2122+ let kX = iM(kW)
2123+ let jg = split(kU[bh], "_")
2124+ let kY = makeString([jg[bi], jg[bj], toString(((parseIntValue(jg[bk]) + kX) - kV)), toString(kX)], "_")
2125+ $Tuple3(([IntegerEntry(kM, ao), IntegerEntry(ex(gd._2, c), ao), StringEntry(iL, makeString([jo[bm], kT._3[bn], kS, jo[bp]], ":")), StringEntry(kT._4, makeString([kW, kU[be], kU[bf], kU[bg], kY], ":"))] ++ kT._1), ao, kR)
21262126 }
21272127 }
21282128 }
21292129 }
21302130
21312131
2132-func kY (kZ,la,lb,lc) = {
2133- let ai = valueOrElse(getInteger(la), 0)
2134- let an = (ai + lc)
2135- let ld = al(valueOrElse(getInteger(kZ), 0), an)
2136- $Tuple2([IntegerEntry(kZ, ld[0]), IntegerEntry(la, an), IntegerEntry(lb, (valueOrElse(getInteger(lb), 0) + ld[1]))], an)
2137- }
2138-
2139-
2140-func le (B,lc) = kY(E(B), D(B), F(B), lc)
2141-
2142-
2143-func lf (c,lc) = kY(I(c), H(c), J(c), lc)
2144-
2145-
2146-func lg (c) = {
2132+func kZ (la,lb,lc,ld) = {
2133+ let ai = valueOrElse(getInteger(lb), 0)
2134+ let an = (ai + ld)
2135+ let le = al(valueOrElse(getInteger(la), 0), an)
2136+ $Tuple2([IntegerEntry(la, le[0]), IntegerEntry(lb, an), IntegerEntry(lc, (valueOrElse(getInteger(lc), 0) + le[1]))], an)
2137+ }
2138+
2139+
2140+func lf (B,ld) = kZ(E(B), D(B), F(B), ld)
2141+
2142+
2143+func lg (c,ld) = kZ(I(c), H(c), J(c), ld)
2144+
2145+
2146+func lh (c) = {
21472147 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2148- let lh = bH(c)
2149- let li = getString(lh)
2150- if (!(isDefined(li)))
2148+ let li = bH(c)
2149+ let lj = getString(li)
2150+ if (!(isDefined(lj)))
21512151 then throw("You are not eligible for ONBOARD artifact")
21522152 else {
2153- let lj = bJ(c)
2154- let lk = getString(lj)
2155- if (isDefined(lk))
2156- then throw(("You already used your ONBOARD artifact on duck " + value(lk)))
2153+ let lk = bJ(c)
2154+ let ll = getString(lk)
2155+ if (isDefined(ll))
2156+ then throw(("You already used your ONBOARD artifact on duck " + value(ll)))
21572157 else {
2158- let ll = bI(B)
2159- let lm = getString(ll)
2160- if (isDefined(lm))
2161- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(lm)))
2162- else ([StringEntry(lj, B), StringEntry(ll, c)] ++ le(B, af)._1)
2158+ let lm = bI(B)
2159+ let ln = getString(lm)
2160+ if (isDefined(ln))
2161+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(ln)))
2162+ else ([StringEntry(lk, B), StringEntry(lm, c)] ++ lf(B, af)._1)
21632163 }
21642164 }
21652165 }
21662166
21672167
2168-func ln (c,kn) = {
2169- let gd = kl(c, eE, kn)
2168+func lo (c,ko) = {
2169+ let gd = km(c, eE, ko)
21702170 let Q = gd._2
2171- let kh = dK(gd._3[do])
2172- let lo = bx(aH, Q)
2173- if ((valueOrElse(getInteger(lo), 0) > 0))
2171+ let ki = dK(gd._3[do])
2172+ let lp = bx(aH, Q)
2173+ if ((valueOrElse(getInteger(lp), 0) > 0))
21742174 then throw("Presale artifact is already activated")
21752175 else if ((parseIntValue(gd._3[dn]) > er))
21762176 then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
21772177 else {
2178- let kS = kI(c, Q, kh, eE)
2179- (((kS._1 :+ IntegerEntry(lo, kh)) :+ StringEntry(kS._2, makeString(kS._3, ":"))) :+ StringEntry(kS._4, makeString(kS._5, ":")))
2178+ let kT = kJ(c, Q, ki, eE)
2179+ (((kT._1 :+ IntegerEntry(lp, ki)) :+ StringEntry(kT._2, makeString(kT._3, ":"))) :+ StringEntry(kT._4, makeString(kT._5, ":")))
21802180 }
21812181 }
21822182
21832183
2184-func lp (B) = {
2184+func lq (B) = {
21852185 let cj = valueOrElse(getInteger(dl, bU), 0)
2186- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2186+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
21872187 let aA = lastBlock.timestamp
21882188 let cl = cd(dl, cj)
21892189 let cf = cl[bZ]
21902190 let cg = cl[ca]
2191- if ((kp[br] != "T"))
2191+ if ((kq[br] != "T"))
21922192 then false
2193- else if (if (if ((parseIntValue(kp[bq]) == cj))
2193+ else if (if (if ((parseIntValue(kq[bq]) == cj))
21942194 then (cg[cc] == "INPROGRESS")
21952195 else false)
21962196 then (parseIntValue(cf[cb]) > aA)
21972197 else false)
21982198 then throw("Your duck is taking part in the tournament")
21992199 else dJ(invoke(this, "exitTournamentInternal", [B], nil))
22002200 }
22012201
22022202
2203-func lq (B) = {
2204- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2203+func lr (B) = {
2204+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
22052205 let aA = lastBlock.timestamp
2206- if ((kp[br] != "D"))
2206+ if ((kq[br] != "D"))
22072207 then false
22082208 else {
2209- let cn = parseIntValue(kp[bq])
2210- let co = parseIntValue(kp[bs])
2209+ let cn = parseIntValue(kq[bq])
2210+ let co = parseIntValue(kq[bs])
22112211 if (if (((cn + aQ) > aA))
22122212 then (1 > co)
22132213 else false)
22142214 then throw("Your duck is on delivery mission")
22152215 else dJ(invoke(this, "exitDeliveryInternal", [B], nil))
22162216 }
22172217 }
22182218
22192219
2220-func lr (B,fM,jU,ls) = {
2221- let kp = split(valueOrElse(getString(bO(B)), aM), "_")
2220+func ls (B,fM,jV,lt) = {
2221+ let kq = split(valueOrElse(getString(bO(B)), aM), "_")
22222222 let aA = lastBlock.timestamp
2223- let cn = parseIntValue(kp[bq])
2224- let co = parseIntValue(kp[bs])
2225- let ku = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
2226- let lt = A(B)
2227- let lu = getIntegerValue(lt)
2228- let lv = if (if ((co > 0))
2223+ let cn = parseIntValue(kq[bq])
2224+ let co = parseIntValue(kq[bs])
2225+ let kv = valueOrErrorMessage(getString(bL(B)), "NFT duck is orphaned")
2226+ let lu = A(B)
2227+ let lv = getIntegerValue(lu)
2228+ let lw = if (if ((co > 0))
22292229 then true
22302230 else if (if (fM)
2231- then (ls > 0)
2231+ then (lt > 0)
22322232 else false)
2233- then (jU > 0)
2233+ then (jV > 0)
22342234 else false)
22352235 then {
2236- let lw = invoke(di, "sendDeliveryReward", [ku], nil)
2237- if ((lw == lw))
2236+ let lx = invoke(di, "sendDeliveryReward", [kv], nil)
2237+ if ((lx == lx))
22382238 then {
2239- let lx = V(ku)
2240-[IntegerEntry(lx, (valueOrElse(getInteger(lx), 0) + 1)), IntegerEntry(W(ku), (cn / a))]
2239+ let ly = V(kv)
2240+[IntegerEntry(ly, (valueOrElse(getInteger(ly), 0) + 1)), IntegerEntry(W(kv), (cn / a))]
22412241 }
22422242 else throw("Strict value is not equal to itself.")
22432243 }
22442244 else if (if (if (fM)
2245- then (jU > 0)
2245+ then (jV > 0)
22462246 else false)
22472247 then ((cn + aQ) > aA)
22482248 else false)
22492249 then throw("Your duck is still on delivery mission")
22502250 else {
2251- let ly = valueOrElse(getInteger(di, bT), 0)
2252- let lz = invoke(di, "updateDeliveryLocked", [(ly - aP)], nil)
2253- if ((lz == lz))
2251+ let lz = valueOrElse(getInteger(di, bT), 0)
2252+ let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil)
2253+ if ((lA == lA))
22542254 then if (if (if (fM)
2255- then (0 >= jU)
2255+ then (0 >= jV)
22562256 else false)
22572257 then true
2258- else (0 >= lu))
2258+ else (0 >= lv))
22592259 then nil
22602260 else [IntegerEntry(U(B), (cn + cH))]
22612261 else throw("Strict value is not equal to itself.")
22622262 }
2263- let lA = getStringValue(L(B))
2264- $Tuple3(lv, [StringEntry(bO(B), lA)], lA)
2265- }
2266-
2267-
2268-func lB (lC,ao,lD,c,lE,lF) = {
2263+ let lB = getStringValue(L(B))
2264+ $Tuple3(lw, [StringEntry(bO(B), lB)], lB)
2265+ }
2266+
2267+
2268+func lC (lD,ao,lE,c,lF,lG) = {
22692269 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2270- if (lp(B))
2270+ if (lq(B))
22712271 then throw("mergeInternal_checkTournament")
2272- else if (lq(B))
2272+ else if (lr(B))
22732273 then throw("mergeInternal_checkDelivery")
22742274 else {
2275- func lG (eU,Q) = {
2276- let kr = value(assetInfo(fromBase58String(Q)))
2277- let ks = bw(Q)
2278- let kt = valueOrErrorMessage(getInteger(ks), (("NFT " + kr.name) + " is not staked"))
2279- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
2280- if ((ku != c))
2275+ func lH (eU,Q) = {
2276+ let ks = value(assetInfo(fromBase58String(Q)))
2277+ let kt = bw(Q)
2278+ let ku = valueOrErrorMessage(getInteger(kt), (("NFT " + ks.name) + " is not staked"))
2279+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
2280+ if ((kv != c))
22812281 then throw((aF + " is not yours"))
22822282 else {
2283- let kv = split(kr.description, "_")
2284- let dz = kv[dq]
2283+ let kw = split(ks.description, "_")
2284+ let dz = kw[dq]
22852285 if (if ((eU._3 != ""))
22862286 then (eU._3 != dz)
22872287 else false)
22882288 then throw("Lands should be on the same continent to merge")
22892289 else {
2290- let dL = kv[do]
2291- let lH = eU._1
2292- let gN = valueOrErrorMessage(indexOf(lH, dL), "You haven't passed all the lands needed")
2293- let lI = (take(lH, gN) + drop(lH, (gN + 1)))
2294- let kh = dK(dL)
2295- let lJ = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2296- let iZ = valueOrElse(getInteger(bD(Q)), 0)
2297- let lK = {
2290+ let dL = kw[do]
2291+ let lI = eU._1
2292+ let gN = valueOrErrorMessage(indexOf(lI, dL), "You haven't passed all the lands needed")
2293+ let lJ = (take(lI, gN) + drop(lI, (gN + 1)))
2294+ let ki = dK(dL)
2295+ let lK = (eU._2 + valueOrElse(getInteger(bx(aH, Q)), 0))
2296+ let ja = valueOrElse(getInteger(bD(Q)), 0)
2297+ let lL = {
22982298 let cD = dL
22992299 if (("S" == cD))
23002300 then 3
23012301 else if (("M" == cD))
23022302 then 4
23032303 else if (("L" == cD))
23042304 then 5
23052305 else if (("XL" == cD))
23062306 then 6
23072307 else throw("Only S, M, L, XL can merge")
23082308 }
2309- if ((iZ != lK))
2309+ if ((ja != lL))
23102310 then throw("All lands should be maxed to merge")
23112311 else {
2312- let ew = kv[dn]
2313- let gJ = gP(kv[dp])
2314- let gT = (lastBlock.timestamp - kt)
2312+ let ew = kw[dn]
2313+ let gJ = gP(kw[dp])
2314+ let gT = (lastBlock.timestamp - ku)
23152315 if ((0 > gT))
2316- then throw(((("Saved timestamp is in future, saved = " + toString(kt)) + ", current = ") + toString(lastBlock.timestamp)))
2316+ then throw(((("Saved timestamp is in future, saved = " + toString(ku)) + ", current = ") + toString(lastBlock.timestamp)))
23172317 else {
2318- let kx = kg(Q, kh)
2319- let iY = (kh / cL)
2320- let kF = gR(split(eU._4, "_"), gJ, gT, iY, kx)
2321- let fe = gH(eU._6, gJ, iY, -1)
2322- let lL = gH(eU._10, gJ, iY, -1)
2323- let iD = gH(eU._9, gJ, iY, 1)
2324- let lM = eU._7
2325- let dg = indexOf(lM, Q)
2318+ let ky = kh(Q, ki)
2319+ let iZ = (ki / cL)
2320+ let kG = gR(split(eU._4, "_"), gJ, gT, iZ, ky)
2321+ let fe = gH(eU._6, gJ, iZ, -1)
2322+ let lM = gH(eU._10, gJ, iZ, -1)
2323+ let iE = gH(eU._9, gJ, iZ, 1)
2324+ let lN = eU._7
2325+ let dg = indexOf(lN, Q)
23262326 if (!(isDefined(dg)))
23272327 then throw(("Your staked lands don't contain " + Q))
23282328 else {
2329- let lN = bv(Q)
2330- let lO = valueOrElse(getString(lN), "")
2331- $Tuple10(lI, lJ, dz, kF, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lN)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lO != ""))
2332- then [DeleteEntry(et(lO))]
2333- else nil)), fe, removeByIndex(lM, value(dg)), (eU._8 + kh), iD, lL)
2329+ let lO = bv(Q)
2330+ let lP = valueOrElse(getString(lO), "")
2331+ $Tuple10(lJ, lK, dz, kG, ((((((((((((eU._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(ev(ew))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(ex(Q, c))) :+ DeleteEntry(bx(aH, Q))) :+ DeleteEntry(ey(ew))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(lO)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((lP != ""))
2332+ then [DeleteEntry(et(lP))]
2333+ else nil)), fe, removeByIndex(lN, value(dg)), (eU._8 + ki), iE, lM)
23342334 }
23352335 }
23362336 }
23372337 }
23382338 }
23392339 }
23402340
2341- let iK = bN(B)
2342- let jn = iJ(iK)
2341+ let iL = bN(B)
2342+ let jo = iK(iL)
23432343 let gI = split(valueOrElse(getString(dx()), "0_0_0_0_0_0"), "_")
2344- let lP = dA(c)
2345- let lQ = getString(lP)
2346- let lR = if (isDefined(lQ))
2347- then split_51C(value(lQ), "_")
2344+ let lQ = dA(c)
2345+ let lR = getString(lQ)
2346+ let lS = if (isDefined(lR))
2347+ then split_51C(value(lR), "_")
23482348 else nil
2349- let lS = split(value(assetInfo(fromBase58String(lE[0]))).description, "_")[dq]
2350- let lT = split(valueOrElse(getString(dy(lS)), "0_0_0_0_0_0"), "_")
2349+ let lT = split(value(assetInfo(fromBase58String(lF[0]))).description, "_")[dq]
2350+ let lU = split(valueOrElse(getString(dy(lT)), "0_0_0_0_0_0"), "_")
23512351 let ff = {
2352- let eW = lE
2352+ let eW = lF
23532353 let eX = size(eW)
2354- let eY = $Tuple10(lD, 0, "", jn[bn], nil, gI, lR, 0, split("0_0_0_0_0_0", "_"), lT)
2354+ let eY = $Tuple10(lE, 0, "", jo[bn], nil, gI, lS, 0, split("0_0_0_0_0_0", "_"), lU)
23552355 func eZ (fa,fb) = if ((fb >= eX))
23562356 then fa
2357- else lG(fa, eW[fb])
2357+ else lH(fa, eW[fb])
23582358
23592359 func fc (fa,fb) = if ((fb >= eX))
23602360 then fa
23612361 else throw("List size exceeds 5")
23622362
23632363 fc(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5)
23642364 }
23652365 let dz = ff._3
2366- let iz = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2367- let gQ = iC(ff._9, (dK(lC) / cL))
2368- let jL = valueOrElse(getInteger(es()), (er + 1))
2369- let lU = toString(jL)
2370- let jM = Issue(eJ(lU, lC), makeString([lU, lC, gQ, dz], "_"), 1, 0, false)
2371- let bu = calculateAssetId(jM)
2372- let lV = toBase58String(bu)
2373- let kR = makeString(fg((lF > 0), split(jn[bo], "_"), lF), "_")
2374- let lW = dB(c)
2375- let lX = valueOrElse(getInteger(lW), 0)
2366+ let iA = valueOrErrorMessage(indexOf(aU, dz), ("Unknown continent: " + dz))
2367+ let gQ = iD(ff._9, (dK(lD) / cL))
2368+ let jM = valueOrElse(getInteger(es()), (er + 1))
2369+ let lV = toString(jM)
2370+ let jN = Issue(eJ(lV, lD), makeString([lV, lD, gQ, dz], "_"), 1, 0, false)
2371+ let bu = calculateAssetId(jN)
2372+ let lW = toBase58String(bu)
2373+ let kS = makeString(fg((lG > 0), split(jo[bo], "_"), lG), "_")
2374+ let lX = dB(c)
2375+ let lY = valueOrElse(getInteger(lX), 0)
23762376 $Tuple2((((((((((((((((ff._5 :+ (if ((size(ff._7) > 0))
2377- then StringEntry(lP, makeString_11C(ff._7, "_"))
2378- else DeleteEntry(lP))) :+ IntegerEntry(lW, if ((ff._8 > lX))
2377+ then StringEntry(lQ, makeString_11C(ff._7, "_"))
2378+ else DeleteEntry(lQ))) :+ IntegerEntry(lX, if ((ff._8 > lY))
23792379 then 0
2380- else (lX - ff._8))) :+ IntegerEntry(es(), (jL + 1))) :+ jM) :+ StringEntry(ev(lU), lV)) :+ StringEntry(bt(lV), c)) :+ StringEntry(ey(lU), c)) :+ IntegerEntry(bx(aH, lV), ff._2)) :+ IntegerEntry(bD(lV), ao)) :+ IntegerEntry(ex(lV, c), ao)) :+ StringEntry(iK, makeString([jn[bm], ff._4, kR, jn[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lV], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lV)
2380+ else (lY - ff._8))) :+ IntegerEntry(es(), (jM + 1))) :+ jN) :+ StringEntry(ev(lV), lW)) :+ StringEntry(bt(lW), c)) :+ StringEntry(ey(lV), c)) :+ IntegerEntry(bx(aH, lW), ff._2)) :+ IntegerEntry(bD(lW), ao)) :+ IntegerEntry(ex(lW, c), ao)) :+ StringEntry(iL, makeString([jo[bm], ff._4, kS, jo[bp]], ":"))) :+ StringEntry(dx(), makeString(ff._6, "_"))) :+ StringEntry(dy(dz), makeString(ff._10, "_"))) :+ StringEntry(bO(B), makeString([dz, "L", lW], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), lW)
23812381 }
23822382 }
23832383
23842384
2385-func lY (c,lE) = lB("M", 3, "SSSS", c, lE, 0)
2386-
2387-
2388-func lZ (c,lE) = lB("L", 4, "SMM", c, lE, (cF * 4))
2389-
2390-
2391-func ma (c,lE) = lB("XL", 5, "SSSML", c, lE, (cF * 47))
2392-
2393-
2394-func mb (c,lE) = lB("XXL", 6, "LXL", c, lE, (cF * 54))
2395-
2396-
2397-func mc (c,lE) = {
2398- let cD = size(lE)
2385+func lZ (c,lF) = lC("M", 3, "SSSS", c, lF, 0)
2386+
2387+
2388+func ma (c,lF) = lC("L", 4, "SMM", c, lF, (cF * 4))
2389+
2390+
2391+func mb (c,lF) = lC("XL", 5, "SSSML", c, lF, (cF * 47))
2392+
2393+
2394+func mc (c,lF) = lC("XXL", 6, "LXL", c, lF, (cF * 54))
2395+
2396+
2397+func md (c,lF) = {
2398+ let cD = size(lF)
23992399 if ((4 == cD))
2400- then lY(c, lE)
2400+ then lZ(c, lF)
24012401 else if ((3 == cD))
2402- then lZ(c, lE)
2402+ then ma(c, lF)
24032403 else if ((5 == cD))
2404- then ma(c, lE)
2404+ then mb(c, lF)
24052405 else if ((2 == cD))
2406- then mb(c, lE)
2406+ then mc(c, lF)
24072407 else throw("Unknown merge")
24082408 }
24092409
24102410
2411-func md (bQ) = {
2412- let me = getString(bM(bQ))
2413- if (isDefined(me))
2411+func me (bQ) = {
2412+ let mf = getString(bM(bQ))
2413+ if (isDefined(mf))
24142414 then {
2415- let B = value(me)
2416- let mf = bO(B)
2417- let ck = split(valueOrElse(getString(mf), aM), "_")
2415+ let B = value(mf)
2416+ let mg = bO(B)
2417+ let ck = split(valueOrElse(getString(mg), aM), "_")
24182418 let cn = parseIntValue(ck[bq])
24192419 if (if ((ck[br] != "D"))
24202420 then true
24212421 else ((cn + aQ) > lastBlock.timestamp))
24222422 then nil
24232423 else {
2424- let lt = A(B)
2424+ let lu = A(B)
24252425 if ((parseIntValue(ck[bs]) > 0))
24262426 then {
2427- let lw = invoke(di, "sendDeliveryReward", [bQ], nil)
2428- if ((lw == lw))
2427+ let lx = invoke(di, "sendDeliveryReward", [bQ], nil)
2428+ if ((lx == lx))
24292429 then nil
24302430 else throw("Strict value is not equal to itself.")
24312431 }
24322432 else (({
2433- let ly = valueOrElse(getInteger(di, bT), 0)
2434- let lz = invoke(di, "updateDeliveryLocked", [(ly - aP)], nil)
2435- if ((lz == lz))
2436- then if ((0 >= getIntegerValue(lt)))
2433+ let lz = valueOrElse(getInteger(di, bT), 0)
2434+ let lA = invoke(di, "updateDeliveryLocked", [(lz - aP)], nil)
2435+ if ((lA == lA))
2436+ then if ((0 >= getIntegerValue(lu)))
24372437 then nil
24382438 else {
2439- let mg = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2440- if ((mg == mg))
2439+ let mh = invoke(this, "saveInteger", [U(B), (cn + cH)], nil)
2440+ if ((mh == mh))
24412441 then nil
24422442 else throw("Strict value is not equal to itself.")
24432443 }
24442444 else throw("Strict value is not equal to itself.")
2445- } :+ IntegerEntry(lt, getIntegerValue(K(B)))) :+ StringEntry(mf, getStringValue(L(B))))
2445+ } :+ IntegerEntry(lu, getIntegerValue(K(B)))) :+ StringEntry(mg, getStringValue(L(B))))
24462446 }
24472447 }
24482448 else nil
24492449 }
24502450
24512451
2452-func mh (gN) = if (if ((gN.originCaller != dh))
2452+func mi (gN) = if (if ((gN.originCaller != dh))
24532453 then valueOrElse(getBoolean(dN()), false)
24542454 else false)
24552455 then throw("Contracts are under maintenance")
24562456 else {
24572457 let bQ = toString(gN.originCaller)
2458- (md(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
2458+ (me(bQ) :+ StringEntry(dO(bQ), toBase58String(gN.transactionId)))
24592459 }
24602460
24612461
2462-func mi (gN) = if (if ((gN.originCaller != dh))
2462+func mj (gN) = if (if ((gN.originCaller != dh))
24632463 then valueOrElse(getBoolean(dN()), false)
24642464 else false)
24652465 then throw("Contracts are under maintenance")
24662466 else [StringEntry(dO(toString(gN.originCaller)), toBase58String(gN.transactionId))]
24672467
24682468
24692469 @Callable(gN)
2470-func constructorV1 (mj) = if ((gN.caller != this))
2470+func constructorV1 (mk) = if ((gN.caller != this))
24712471 then throw("Permission denied")
2472- else [StringEntry(db(), mj)]
2472+ else [StringEntry(db(), mk)]
24732473
24742474
24752475
24762476 @Callable(gN)
24772477 func saveInteger (cT,eL) = if ((gN.caller != this))
24782478 then throw("saveInteger is not public method")
24792479 else [IntegerEntry(cT, eL)]
24802480
24812481
24822482
24832483 @Callable(gN)
2484-func setBlocked (mk) = if ((gN.caller != this))
2484+func setBlocked (ml) = if ((gN.caller != this))
24852485 then throw("permission denied")
2486- else [BooleanEntry(dN(), mk)]
2486+ else [BooleanEntry(dN(), ml)]
24872487
24882488
24892489
24902490 @Callable(gN)
24912491 func stakeLand () = {
2492- let ml = mh(gN)
2492+ let mm = mi(gN)
24932493 if ((size(gN.payments) != 1))
24942494 then throw("Exactly one payment required")
24952495 else {
2496- let mm = value(gN.payments[0])
2497- let bu = value(mm.assetId)
2496+ let mn = value(gN.payments[0])
2497+ let bu = value(mn.assetId)
24982498 let cS = toString(gN.caller)
2499- if ((mm.amount != 1))
2499+ if ((mn.amount != 1))
25002500 then throw((("NFT " + aF) + " token should be attached as payment"))
25012501 else {
2502- let kr = value(assetInfo(bu))
2503- if ((kr.issuer != this))
2502+ let ks = value(assetInfo(bu))
2503+ if ((ks.issuer != this))
25042504 then throw("Unknown issuer of token")
2505- else if (!(contains(kr.name, aF)))
2505+ else if (!(contains(ks.name, aF)))
25062506 then throw((("Only NFT " + aF) + " tokens are accepted"))
25072507 else {
2508- let mn = drop(kr.name, 4)
2509- let ew = if (contains(mn, "XXL"))
2510- then dropRight(mn, 3)
2511- else if (contains(mn, "XL"))
2512- then dropRight(mn, 2)
2513- else dropRight(mn, 1)
2508+ let mo = drop(ks.name, 4)
2509+ let ew = if (contains(mo, "XXL"))
2510+ then dropRight(mo, 3)
2511+ else if (contains(mo, "XL"))
2512+ then dropRight(mo, 2)
2513+ else dropRight(mo, 1)
25142514 if (!(isDefined(parseInt(ew))))
2515- then throw(("Cannot parse land number from " + kr.name))
2515+ then throw(("Cannot parse land number from " + ks.name))
25162516 else {
25172517 let Q = toBase58String(bu)
2518- let ks = bw(Q)
2519- if (isDefined(getInteger(ks)))
2520- then throw((("NFT " + kr.name) + " is already staked"))
2518+ let kt = bw(Q)
2519+ if (isDefined(getInteger(kt)))
2520+ then throw((("NFT " + ks.name) + " is already staked"))
25212521 else {
2522- let kv = split(kr.description, "_")
2523- let gJ = gP(kv[dp])
2524- let kh = dK(kv[do])
2525- let iY = (kh / cL)
2526- let fe = gO(gJ, iY, 1)
2527- let mo = dy(kv[dq])
2528- let lT = split(valueOrElse(getString(mo), "0_0_0_0_0_0"), "_")
2529- let mp = makeString(gH(lT, gJ, iY, 1), "_")
2530- let lP = dA(cS)
2531- let lQ = getString(lP)
2532- let lM = if (isDefined(lQ))
2533- then split_51C(value(lQ), "_")
2522+ let kw = split(ks.description, "_")
2523+ let gJ = gP(kw[dp])
2524+ let ki = dK(kw[do])
2525+ let iZ = (ki / cL)
2526+ let fe = gO(gJ, iZ, 1)
2527+ let mp = dy(kw[dq])
2528+ let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_")
2529+ let mq = makeString(gH(lU, gJ, iZ, 1), "_")
2530+ let lQ = dA(cS)
2531+ let lR = getString(lQ)
2532+ let lN = if (isDefined(lR))
2533+ then split_51C(value(lR), "_")
25342534 else nil
2535- if (containsElement(lM, Q))
2535+ if (containsElement(lN, Q))
25362536 then throw(("Your staked lands already contain " + Q))
2537- else if ((size(lM) >= aJ))
2537+ else if ((size(lN) >= aJ))
25382538 then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
25392539 else {
2540- let iZ = valueOrElse(getInteger(bD(Q)), 0)
2541- let lW = dB(cS)
2542- let mq = valueOrElse(getInteger(lW), 0)
2543- let mr = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2544- $Tuple2(([IntegerEntry(ks, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lP, makeString_11C((lM :+ Q), "_")), IntegerEntry(lW, (mq + kh)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), iZ), StringEntry(dx(), fe), StringEntry(mo, mp)] ++ ml), mr)
2540+ let ja = valueOrElse(getInteger(bD(Q)), 0)
2541+ let lX = dB(cS)
2542+ let mr = valueOrElse(getInteger(lX), 0)
2543+ let ms = invoke(dk, "onStakeUnstakeLand", [cS], nil)
2544+ $Tuple2(([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cS), lastBlock.timestamp), StringEntry(lQ, makeString_11C((lN :+ Q), "_")), IntegerEntry(lX, (mr + ki)), StringEntry(bt(Q), cS), StringEntry(ey(ew), cS), IntegerEntry(ex(Q, cS), ja), StringEntry(dx(), fe), StringEntry(mp, mq)] ++ mm), ms)
25452545 }
25462546 }
25472547 }
25482548 }
25492549 }
25502550 }
25512551 }
25522552
25532553
25542554
25552555 @Callable(gN)
2556-func unstakeLand (kn) = {
2557- let ml = mh(gN)
2556+func unstakeLand (ko) = {
2557+ let mm = mi(gN)
25582558 if ((size(gN.payments) != 0))
25592559 then throw("No payments required")
25602560 else {
25612561 let c = toString(gN.caller)
2562- let gd = kl(c, eD, kn)
2562+ let gd = km(c, eD, ko)
25632563 let Q = gd._2
2564- let kv = gd._3
2565- let lP = dA(c)
2566- let gJ = gP(kv[dp])
2567- let kh = dK(kv[do])
2568- let iY = (kh / cL)
2569- let fe = gO(gJ, iY, -1)
2570- let mo = dy(kv[dq])
2571- let lT = split(valueOrElse(getString(mo), "0_0_0_0_0_0"), "_")
2572- let mp = makeString(gH(lT, gJ, iY, -1), "_")
2573- let kS = kI(c, Q, kh, eD)
2574- let lM = split_51C(valueOrElse(getString(lP), ""), "_")
2575- let dg = indexOf(lM, Q)
2564+ let kw = gd._3
2565+ let lQ = dA(c)
2566+ let gJ = gP(kw[dp])
2567+ let ki = dK(kw[do])
2568+ let iZ = (ki / cL)
2569+ let fe = gO(gJ, iZ, -1)
2570+ let mp = dy(kw[dq])
2571+ let lU = split(valueOrElse(getString(mp), "0_0_0_0_0_0"), "_")
2572+ let mq = makeString(gH(lU, gJ, iZ, -1), "_")
2573+ let kT = kJ(c, Q, ki, eD)
2574+ let lN = split_51C(valueOrElse(getString(lQ), ""), "_")
2575+ let dg = indexOf(lN, Q)
25762576 if (!(isDefined(dg)))
25772577 then throw(("Your staked lands don't contain " + Q))
25782578 else {
25792579 let aA = lastBlock.timestamp
2580- let ms = valueOrElse(getInteger(dj, bP(c)), 0)
2581- if ((ms >= aA))
2582- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ms)))
2580+ let mt = valueOrElse(getInteger(dj, bP(c)), 0)
2581+ if ((mt >= aA))
2582+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(mt)))
25832583 else {
2584- let mt = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2585- if ((mt > aA))
2586- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mt)))
2584+ let mu = (valueOrElse(getInteger(dk, b(c)), 0) + cG)
2585+ if ((mu > aA))
2586+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(mu)))
25872587 else {
2588- let lW = dB(c)
2589- let lX = valueOrElse(getInteger(lW), 0)
2590- let mu = if ((kh > lX))
2588+ let lX = dB(c)
2589+ let lY = valueOrElse(getInteger(lX), 0)
2590+ let mv = if ((ki > lY))
25912591 then 0
2592- else (lX - kh)
2593- let mr = invoke(dk, "onStakeUnstakeLand", [c], nil)
2594- $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mo, mp), StringEntry(kS._2, makeString(kS._3, ":")), if ((size(lM) > 1))
2595- then StringEntry(lP, makeString_11C(removeByIndex(lM, value(dg)), "_"))
2596- else DeleteEntry(lP), IntegerEntry(lW, mu)] ++ ml), mr)
2592+ else (lY - ki)
2593+ let ms = invoke(dk, "onStakeUnstakeLand", [c], nil)
2594+ $Tuple2(([ScriptTransfer(gN.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dx(), fe), StringEntry(mp, mq), StringEntry(kT._2, makeString(kT._3, ":")), if ((size(lN) > 1))
2595+ then StringEntry(lQ, makeString_11C(removeByIndex(lN, value(dg)), "_"))
2596+ else DeleteEntry(lQ), IntegerEntry(lX, mv)] ++ mm), ms)
25972597 }
25982598 }
25992599 }
26002600 }
26012601 }
26022602
26032603
26042604
26052605 @Callable(gN)
26062606 func stakeDuck () = {
2607- let ml = mh(gN)
2607+ let mm = mi(gN)
26082608 if ((size(gN.payments) != 1))
26092609 then throw("Exactly one payment required")
26102610 else {
2611- let mm = value(gN.payments[0])
2612- let bu = value(mm.assetId)
2611+ let mn = value(gN.payments[0])
2612+ let bu = value(mn.assetId)
26132613 let cS = toString(gN.caller)
2614- if ((mm.amount != 1))
2614+ if ((mn.amount != 1))
26152615 then throw((("NFT " + aG) + " token should be attached as payment"))
26162616 else {
2617- let kr = value(assetInfo(bu))
2618- if (if ((kr.issuer != ea))
2619- then (kr.issuer != eb)
2617+ let ks = value(assetInfo(bu))
2618+ if (if ((ks.issuer != ea))
2619+ then (ks.issuer != eb)
26202620 else false)
26212621 then throw((("Unknown issuer of " + aG) + " token"))
2622- else if (!(contains(kr.name, aG)))
2622+ else if (!(contains(ks.name, aG)))
26232623 then throw((("Only NFT " + aG) + " tokens are accepted"))
26242624 else {
2625- let mv = toBase58String(bu)
2626- let ks = bw(mv)
2627- if (isDefined(getInteger(ks)))
2628- then throw((("NFT " + kr.name) + " is already staked"))
2625+ let mw = toBase58String(bu)
2626+ let kt = bw(mw)
2627+ if (isDefined(getInteger(kt)))
2628+ then throw((("NFT " + ks.name) + " is already staked"))
26292629 else if (isDefined(getString(bM(cS))))
2630- then throw(("You already staked one duck: " + kr.name))
2630+ then throw(("You already staked one duck: " + ks.name))
26312631 else {
2632- let mf = bO(mv)
2633- let ci = getString(mf)
2634- let iK = bN(mv)
2635- let mw = getString(iK)
2636- let ka = A(mv)
2637- let kb = aj(valueOrElse(getInteger(E(mv)), 0))
2638- let lu = valueOrElse(getInteger(ka), kb)
2639- ([IntegerEntry(ks, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mv), cS), StringEntry(bM(cS), mv)] ++ (if (isDefined(ci))
2632+ let mg = bO(mw)
2633+ let ci = getString(mg)
2634+ let iL = bN(mw)
2635+ let mx = getString(iL)
2636+ let kb = A(mw)
2637+ let kc = aj(valueOrElse(getInteger(E(mw)), 0))
2638+ let lv = valueOrElse(getInteger(kb), kc)
2639+ ([IntegerEntry(kt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cS), lastBlock.timestamp), StringEntry(bL(mw), cS), StringEntry(bM(cS), mw)] ++ (if (isDefined(ci))
26402640 then nil
2641- else ([StringEntry(mf, aM)] ++ (if (isDefined(mw))
2641+ else ([StringEntry(mg, aM)] ++ (if (isDefined(mx))
26422642 then nil
2643- else (([StringEntry(iK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ka, lu)) ++ ml)))))
2643+ else (([StringEntry(iL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(kb, lv)) ++ mm)))))
26442644 }
26452645 }
26462646 }
26472647 }
26482648 }
26492649
26502650
26512651
26522652 @Callable(gN)
2653-func unstakeDuck (mv) = {
2654- let ml = mh(gN)
2653+func unstakeDuck (mw) = {
2654+ let mm = mi(gN)
26552655 if ((size(gN.payments) != 0))
26562656 then throw("No payments required")
26572657 else {
2658- let bu = fromBase58String(mv)
2658+ let bu = fromBase58String(mw)
26592659 let cS = toString(gN.caller)
2660- let kr = value(assetInfo(bu))
2661- let ks = bw(mv)
2662- if (!(isDefined(getInteger(ks))))
2663- then throw((("NFT " + kr.name) + " is not staked"))
2660+ let ks = value(assetInfo(bu))
2661+ let kt = bw(mw)
2662+ if (!(isDefined(getInteger(kt))))
2663+ then throw((("NFT " + ks.name) + " is not staked"))
26642664 else if (!(isDefined(getString(bM(cS)))))
2665- then throw((("The duck " + kr.name) + " is not staked"))
2665+ then throw((("The duck " + ks.name) + " is not staked"))
26662666 else {
2667- let ku = valueOrErrorMessage(getString(bL(mv)), (("NFT " + kr.name) + " is orphaned"))
2668- if ((ku != cS))
2667+ let kv = valueOrErrorMessage(getString(bL(mw)), (("NFT " + ks.name) + " is orphaned"))
2668+ if ((kv != cS))
26692669 then throw("Staked NFT is not yours")
2670- else if (lp(mv))
2670+ else if (lq(mw))
26712671 then throw("unstakeDuck_checkTournament")
2672- else if (lq(mv))
2672+ else if (lr(mw))
26732673 then throw("unstakeDuck_checkDelivery")
26742674 else {
2675- let ka = A(mv)
2676- let kb = aj(valueOrElse(getInteger(E(mv)), 0))
2677- let av = valueOrElse(getInteger(ka), kb)
2678- if ((kb > av))
2679- then throw((("Please heal your duck to " + toString(kb)) + "hp before unstaking"))
2680- else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(ks), DeleteEntry(ka), DeleteEntry(bO(mv)), DeleteEntry(bL(mv)), DeleteEntry(bz(aG, mv, cS)), DeleteEntry(bM(cS))] ++ ml)
2675+ let kb = A(mw)
2676+ let kc = aj(valueOrElse(getInteger(E(mw)), 0))
2677+ let av = valueOrElse(getInteger(kb), kc)
2678+ if ((kc > av))
2679+ then throw((("Please heal your duck to " + toString(kc)) + "hp before unstaking"))
2680+ else ([ScriptTransfer(gN.caller, 1, bu), DeleteEntry(kt), DeleteEntry(kb), DeleteEntry(bO(mw)), DeleteEntry(bL(mw)), DeleteEntry(bz(aG, mw, cS)), DeleteEntry(bM(cS))] ++ mm)
26812681 }
26822682 }
26832683 }
26842684 }
26852685
26862686
26872687
26882688 @Callable(gN)
2689-func claimRes (eL,mx) = {
2690- let ml = mh(gN)
2689+func claimRes (eL,my) = {
2690+ let mm = mi(gN)
26912691 if ((size(gN.payments) != 0))
26922692 then throw("No payments required")
26932693 else {
26942694 let c = toString(gN.originCaller)
2695- let fm = kw(c, eL, eD, mx)
2695+ let fm = kx(c, eL, eD, my)
26962696 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2697- $Tuple2(((((fm._1 ++ le(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ ml), fm._3[bn])
2698- }
2699- }
2700-
2701-
2702-
2703-@Callable(gN)
2704-func claimResToWH (eL,mx) = {
2705- let ml = mh(gN)
2697+ $Tuple2(((((fm._1 ++ lf(B, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._3[bn])
2698+ }
2699+ }
2700+
2701+
2702+
2703+@Callable(gN)
2704+func claimResToWH (eL,my) = {
2705+ let mm = mi(gN)
27062706 if ((size(gN.payments) != 0))
27072707 then throw("No payments required")
27082708 else {
27092709 let c = toString(gN.originCaller)
2710- let fm = kw(c, eL, eC, mx)
2711- $Tuple2(((((fm._1 ++ lf(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ ml), fm._5[be])
2712- }
2713- }
2714-
2715-
2716-
2717-@Callable(gN)
2718-func flight (jP,jQ) = {
2719- let ml = mi(gN)
2710+ let fm = kx(c, eL, eC, my)
2711+ $Tuple2(((((fm._1 ++ lg(c, fraction(X, eL, cK))._1) :+ StringEntry(fm._2, makeString(fm._3, ":"))) :+ StringEntry(fm._4, makeString(fm._5, ":"))) ++ mm), fm._5[be])
2712+ }
2713+ }
2714+
2715+
2716+
2717+@Callable(gN)
2718+func flight (jQ,jR) = {
2719+ let mm = mj(gN)
27202720 if ((size(gN.payments) != 0))
27212721 then throw("No payments required")
27222722 else {
27232723 let bQ = toString(gN.caller)
2724- let iA = jO(bQ, jP, jQ)
2725- let jU = iA._1
2726- let B = iA._2
2727- let mf = bO(B)
2728- let kp = valueOrElse(getString(mf), aM)
2729- let jW = iA._4
2730- if ((jW == kp))
2724+ let iB = jP(bQ, jQ, jR)
2725+ let jV = iB._1
2726+ let B = iB._2
2727+ let mg = bO(B)
2728+ let kq = valueOrElse(getString(mg), aM)
2729+ let jX = iB._4
2730+ if ((jX == kq))
27312731 then throw("You can't fly to the same location")
27322732 else {
2733- let cw = split(jW, "_")
2734- let my = (cw[br] == "T")
2735- let mz = (cw[br] == "D")
2733+ let cw = split(jX, "_")
2734+ let mz = (cw[br] == "T")
2735+ let mA = (cw[br] == "D")
27362736 let gA = G(B)
2737- let mA = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2738- let mB = fn(mA, iA._5)
2739- let mC = mB._1
2740- let mD = mB._2
2741- let mE = if (!(cr(dl, kp)))
2742- then if (!(cp(jW)))
2743- then cu(kp, jW, 5)
2744- else if ((jU > 0))
2745- then $Tuple2(jW, jU)
2746- else $Tuple2(kp, 0)
2747- else if (ch(dl, kp))
2748- then if (!(ch(dl, jW)))
2737+ let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
2738+ let mC = fn(mB, iB._5)
2739+ let mD = mC._1
2740+ let mE = mC._2
2741+ let mF = if (!(cr(dl, kq)))
2742+ then if (!(cp(jX)))
2743+ then cu(kq, jX, 5)
2744+ else if ((jV > 0))
2745+ then $Tuple2(jX, jV)
2746+ else $Tuple2(kq, 0)
2747+ else if (ch(dl, kq))
2748+ then if (!(ch(dl, jX)))
27492749 then throw("Your duck is taking part in the tournament")
27502750 else {
2751- let ls = parseIntValue(cw[bs])
2752- let mF = split(kp, "_")
2751+ let lt = parseIntValue(cw[bs])
2752+ let mG = split(kq, "_")
27532753 let cj = valueOrElse(getInteger(dl, bU), 0)
2754- if ((ls != (parseIntValue(mF[bs]) + 1)))
2755- then cu(kp, jW, 7)
2756- else if ((jU > 0))
2754+ if ((lt != (parseIntValue(mG[bs]) + 1)))
2755+ then cu(kq, jX, 7)
2756+ else if ((jV > 0))
27572757 then {
2758- let mG = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2759- let mH = if ((ls > mG))
2760- then invoke(dl, "saveDuckResult", [B, ls], nil)
2758+ let mH = valueOrElse(getInteger(dl, bY(cj, B)), 0)
2759+ let mI = if ((lt > mH))
2760+ then invoke(dl, "saveDuckResult", [B, lt], nil)
27612761 else unit
2762- if ((mH == mH))
2763- then $Tuple2(jW, jU)
2762+ if ((mI == mI))
2763+ then $Tuple2(jX, jV)
27642764 else throw("Strict value is not equal to itself.")
27652765 }
2766- else $Tuple2(kp, 0)
2766+ else $Tuple2(kq, 0)
27672767 }
2768- else if (!(cm(kp)))
2768+ else if (!(cm(kq)))
27692769 then {
2770- let mI = dC(invoke(this, "autoExitDelivery", [B, jU, if (mz)
2770+ let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, if (mA)
27712771 then "10"
27722772 else "11", 0], nil))
2773- if ((mI == mI))
2774- then if (mz)
2775- then $Tuple2(mI, jU)
2776- else if ((jU > 0))
2777- then $Tuple2(jW, jU)
2778- else $Tuple2(mI, 0)
2773+ if ((mJ == mJ))
2774+ then if (mA)
2775+ then $Tuple2(mJ, jV)
2776+ else if ((jV > 0))
2777+ then $Tuple2(jX, jV)
2778+ else $Tuple2(mJ, 0)
27792779 else throw("Strict value is not equal to itself.")
27802780 }
2781- else if (!(mz))
2781+ else if (!(mA))
27822782 then throw("Your duck is taking part in delivery")
2783- else if (!(cm(jW)))
2784- then cu(kp, jW, 13)
2783+ else if (!(cm(jX)))
2784+ then cu(kq, jX, 13)
27852785 else {
2786- let ls = parseIntValue(cw[bs])
2787- let mF = split(kp, "_")
2788- if ((ls != (parseIntValue(mF[bs]) + 1)))
2789- then cu(kp, jW, 14)
2790- else if (if ((jU > 0))
2791- then (1 > ls)
2786+ let lt = parseIntValue(cw[bs])
2787+ let mG = split(kq, "_")
2788+ if ((lt != (parseIntValue(mG[bs]) + 1)))
2789+ then cu(kq, jX, 14)
2790+ else if (if ((jV > 0))
2791+ then (1 > lt)
27922792 else false)
2793- then $Tuple2(jW, jU)
2793+ then $Tuple2(jX, jV)
27942794 else {
2795- let mI = dC(invoke(this, "autoExitDelivery", [B, jU, "15-17", ls], nil))
2796- if ((mI == mI))
2797- then $Tuple2(mI, jU)
2795+ let mJ = dC(invoke(this, "autoExitDelivery", [B, jV, "15-17", lt], nil))
2796+ if ((mJ == mJ))
2797+ then $Tuple2(mJ, jV)
27982798 else throw("Strict value is not equal to itself.")
27992799 }
28002800 }
2801- let mJ = mE._1
2802- let mK = mE._2
2803- $Tuple2(((([StringEntry(mf, mJ), StringEntry(gA, mC), IntegerEntry(A(B), mK)] ++ ml) ++ (if (mD)
2801+ let mK = mF._1
2802+ let mL = mF._2
2803+ $Tuple2(((([StringEntry(mg, mK), StringEntry(gA, mD), IntegerEntry(A(B), mL)] ++ mm) ++ (if (mE)
28042804 then [StringEntry(M(B), "0_0_0_0_0")]
2805- else nil)) ++ le(B, if ((jU > 0))
2805+ else nil)) ++ lf(B, if ((jV > 0))
28062806 then Y
2807- else Z)._1), iA._3)
2807+ else Z)._1), iB._3)
28082808 }
28092809 }
28102810 }
28112811
28122812
28132813
28142814 @Callable(gN)
2815-func heal (mL,mM,mN) = {
2816- let ml = mh(gN)
2817- if (if (if ((0 > mL))
2818- then true
2819- else (0 > mM))
2815+func heal (mM,mN,mO) = {
2816+ let mm = mi(gN)
2817+ if (if (if ((0 > mM))
28202818 then true
28212819 else (0 > mN))
2820+ then true
2821+ else (0 > mO))
28222822 then throw("Quantity cannot be negative")
28232823 else {
28242824 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2825- if (lp(B))
2825+ if (lq(B))
28262826 then throw("heal_checkTournament")
2827- else if (lq(B))
2827+ else if (lr(B))
28282828 then throw("heal_checkDelivery")
28292829 else {
2830- let mO = [mL, mM, mN]
2831- let ka = A(B)
2832- let kb = aj(valueOrElse(getInteger(E(B)), 0))
2833- let mP = valueOrElse(getInteger(ka), kb)
2834- if ((mP >= kb))
2835- then throw((("HP should be < " + toString(kb)) + " to heal"))
2830+ let mP = [mM, mN, mO]
2831+ let kb = A(B)
2832+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
2833+ let mQ = valueOrElse(getInteger(kb), kc)
2834+ if ((mQ >= kc))
2835+ then throw((("HP should be < " + toString(kc)) + " to heal"))
28362836 else {
2837- let iK = bN(B)
2838- let jn = iJ(iK)
2839- let mQ = if ((jn[bp] == ""))
2837+ let iL = bN(B)
2838+ let jo = iK(iL)
2839+ let mR = if ((jo[bp] == ""))
28402840 then nil
2841- else split_4C(jn[bp], "_")
2842- func mR (eU,ct) = {
2841+ else split_4C(jo[bp], "_")
2842+ func mS (eU,ct) = {
28432843 let dG = eU._2
2844- let hj = if ((size(mQ) > dG))
2845- then parseIntValue(mQ[dG])
2844+ let hj = if ((size(mR) > dG))
2845+ then parseIntValue(mR[dG])
28462846 else 0
28472847 if ((3 > dG))
28482848 then {
2849- let mS = mO[dG]
2850- if ((mS > hj))
2849+ let mT = mP[dG]
2850+ if ((mT > hj))
28512851 then throw(((("You have only " + toString(hj)) + " of ") + aT[dG]))
2852- else $Tuple3((eU._1 :+ toString((hj - mS))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mS)))
2852+ else $Tuple3((eU._1 :+ toString((hj - mT))), (dG + 1), (eU._3 + (parseIntValue(split(ct, "_")[aZ]) * mT)))
28532853 }
28542854 else $Tuple3((eU._1 :+ toString(hj)), (dG + 1), eU._3)
28552855 }
28562856
28572857 let fm = {
28582858 let eW = aX
28592859 let eX = size(eW)
28602860 let eY = $Tuple3(nil, 0, 0)
28612861 func eZ (fa,fb) = if ((fb >= eX))
28622862 then fa
2863- else mR(fa, eW[fb])
2863+ else mS(fa, eW[fb])
28642864
28652865 func fc (fa,fb) = if ((fb >= eX))
28662866 then fa
28672867 else throw("List size exceeds 50")
28682868
28692869 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
28702870 }
2871- let mT = min([kb, (mP + fm._3)])
2872- $Tuple2((([IntegerEntry(ka, mT), StringEntry(iK, makeString_2C([jn[bm], jn[bn], jn[bo], makeString(fm._1, "_")], ":"))] ++ ml) ++ le(B, (ag * ((mL + mM) + mN)))._1), mT)
2871+ let mU = min([kc, (mQ + fm._3)])
2872+ $Tuple2((([IntegerEntry(kb, mU), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], makeString(fm._1, "_")], ":"))] ++ mm) ++ lf(B, (ag * ((mM + mN) + mO)))._1), mU)
28732873 }
28742874 }
28752875 }
28762876 }
28772877
28782878
28792879
28802880 @Callable(gN)
28812881 func healES () = {
2882- let ml = mh(gN)
2882+ let mm = mi(gN)
28832883 if ((size(gN.payments) != 1))
28842884 then throw("Exactly one payment required")
28852885 else {
2886- let mm = value(gN.payments[0])
2887- if ((mm.assetId != cC))
2886+ let mn = value(gN.payments[0])
2887+ if ((mn.assetId != cC))
28882888 then throw("Allowed USDT payment only!")
28892889 else {
28902890 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
2891- if (lp(B))
2891+ if (lq(B))
28922892 then throw("healES_checkTournament")
2893- else if (lq(B))
2893+ else if (lr(B))
28942894 then throw("healES_checkDelivery")
28952895 else {
2896- let ka = A(B)
2897- let kb = aj(valueOrElse(getInteger(E(B)), 0))
2898- let mP = valueOrElse(getInteger(ka), kb)
2899- if ((mP > 0))
2896+ let kb = A(B)
2897+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
2898+ let mQ = valueOrElse(getInteger(kb), kc)
2899+ if ((mQ > 0))
29002900 then throw("HP should be 0 to call Emergency Service")
29012901 else {
2902- let iK = bN(B)
2903- let jn = iJ(iK)
2904- let mQ = if ((jn[bp] == ""))
2902+ let iL = bN(B)
2903+ let jo = iK(iL)
2904+ let mR = if ((jo[bp] == ""))
29052905 then nil
2906- else split_4C(jn[bp], "_")
2907- let mU = if ((size(mQ) > 0))
2908- then parseIntValue(mQ[0])
2906+ else split_4C(jo[bp], "_")
2907+ let mV = if ((size(mR) > 0))
2908+ then parseIntValue(mR[0])
29092909 else 0
2910- let mV = if ((size(mQ) > 1))
2911- then parseIntValue(mQ[1])
2910+ let mW = if ((size(mR) > 1))
2911+ then parseIntValue(mR[1])
29122912 else 0
2913- let mW = if ((size(mQ) > 2))
2914- then parseIntValue(mQ[2])
2913+ let mX = if ((size(mR) > 2))
2914+ then parseIntValue(mR[2])
29152915 else 0
2916- if (if (if ((mU > 0))
2917- then true
2918- else (mV > 0))
2916+ if (if (if ((mV > 0))
29192917 then true
29202918 else (mW > 0))
2919+ then true
2920+ else (mX > 0))
29212921 then throw("You have to use own Medical Kit")
29222922 else {
2923- let mX = getString(di, bR())
2924- let mY = if (isDefined(mX))
2925- then split_4C(value(mX), "_")
2923+ let mY = getString(di, bR())
2924+ let mZ = if (isDefined(mY))
2925+ then split_4C(value(mY), "_")
29262926 else nil
2927- let mZ = if ((size(mY) > 0))
2928- then parseIntValue(mY[0])
2927+ let na = if ((size(mZ) > 0))
2928+ then parseIntValue(mZ[0])
29292929 else 0
2930- if ((0 >= mZ))
2930+ if ((0 >= na))
29312931 then throw("There are no Medical Kits L1 at Emergency Service storage")
29322932 else {
2933- let mT = (mP + parseIntValue(split(aX[0], "_")[aZ]))
2934- let na = makeString([toString((mZ - 1)), removeByIndex(mY, 0)], "_")
2933+ let mU = (mQ + parseIntValue(split(aX[0], "_")[aZ]))
2934+ let nb = makeString([toString((na - 1)), removeByIndex(mZ, 0)], "_")
29352935 let ct = split(aX[0], "_")
2936- let nb = cs(ct)
2937- let nc = fraction((nb * aO), aN, (cK * bc))
2938- if ((mm.amount != nc))
2939- then throw(("Payment attached should be " + toString(nc)))
2936+ let nc = cs(ct)
2937+ let nd = fraction((nc * aO), aN, (cK * bc))
2938+ if ((mn.amount != nd))
2939+ then throw(("Payment attached should be " + toString(nd)))
29402940 else {
2941- let fm = dC(invoke(di, "updateEsStorage", [na], [AttachedPayment(cC, nc)]))
2942- $Tuple2(((ml :+ IntegerEntry(ka, mT)) ++ le(B, aa)._1), fm)
2941+ let fm = dC(invoke(di, "updateEsStorage", [nb], [AttachedPayment(cC, nd)]))
2942+ $Tuple2(((mm :+ IntegerEntry(kb, mU)) ++ lf(B, aa)._1), fm)
29432943 }
29442944 }
29452945 }
29462946 }
29472947 }
29482948 }
29492949 }
29502950 }
29512951
29522952
29532953
29542954 @Callable(gN)
2955-func updateBackpack (B,nd) = if ((gN.caller != di))
2955+func updateBackpack (B,ne) = if ((gN.caller != di))
29562956 then throw("permission denied")
2957- else $Tuple2([StringEntry(bN(B), nd)], nd)
2957+ else $Tuple2([StringEntry(bN(B), ne)], ne)
29582958
29592959
29602960
29612961 @Callable(gN)
29622962 func commitForRandom () = {
2963- let ml = mh(gN)
2964- let ne = (height + dv)
2963+ let mm = mi(gN)
2964+ let nf = (height + dv)
29652965 let c = toString(gN.caller)
2966- $Tuple2(([IntegerEntry(dw(c), ne)] ++ ml), ne)
2966+ $Tuple2(([IntegerEntry(dw(c), nf)] ++ mm), nf)
29672967 }
29682968
29692969
29702970
29712971 @Callable(gN)
29722972 func buySLand () = {
2973- let ml = mh(gN)
2973+ let mm = mi(gN)
29742974 if ((size(gN.payments) != 1))
29752975 then throw("Exactly one payment required")
29762976 else {
2977- let mm = value(gN.payments[0])
2978- if ((mm.assetId != cC))
2977+ let mn = value(gN.payments[0])
2978+ if ((mn.assetId != cC))
29792979 then throw("Allowed USDT payment only!")
2980- else if ((mm.amount != ej))
2980+ else if ((mn.amount != ej))
29812981 then throw(("Payment attached should be " + toString(ej)))
29822982 else {
2983- let fm = jH(gN.caller, gN.transactionId)
2984- let nf = dF(invoke(dm, "burnAcres", [ek], nil))
2985- $Tuple2((((fm._1 :+ ScriptTransfer(di, mm.amount, cC)) ++ lf(toString(gN.caller), ac)._1) ++ ml), $Tuple2(fm._2._1, nf))
2983+ let fm = jI(gN.caller, gN.transactionId)
2984+ let ng = dF(invoke(dm, "burnAcres", [ek], nil))
2985+ $Tuple2((((fm._1 :+ ScriptTransfer(di, mn.amount, cC)) ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng))
29862986 }
29872987 }
29882988 }
29892989
29902990
29912991
29922992 @Callable(gN)
2993-func expedition (jP,jQ) = {
2994- let ml = mh(gN)
2993+func expedition (jQ,jR) = {
2994+ let mm = mi(gN)
29952995 if ((size(gN.payments) != 0))
29962996 then throw("No payments required")
29972997 else {
29982998 let bQ = toString(gN.caller)
2999- let iA = jO(bQ, jP, jQ)
3000- let B = iA._2
3001- let ka = A(B)
3002- let iK = bN(B)
3003- let jn = iJ(iK)
3004- let kP = split(jn[bo], "_")
3005- let kR = makeString(fg(true, kP, ei), "_")
2999+ let iB = jP(bQ, jQ, jR)
3000+ let B = iB._2
3001+ let kb = A(B)
3002+ let iL = bN(B)
3003+ let jo = iK(iL)
3004+ let kQ = split(jo[bo], "_")
3005+ let kS = makeString(fg(true, kQ, ei), "_")
30063006 let gA = G(B)
3007- let mA = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
3008- let ng = fn(mA, iA._5)
3009- let mC = ng._1
3010- let mD = ng._2
3011- let nh = jH(gN.caller, gN.transactionId)
3012- let jN = nh._2._1
3013- let fm = if ((0 >= iA._1))
3014- then $Tuple3([IntegerEntry(ka, 0), StringEntry(gA, mC)], "", 0)
3015- else $Tuple3((nh._1 ++ (if (mD)
3007+ let mB = valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,")
3008+ let nh = fn(mB, iB._5)
3009+ let mD = nh._1
3010+ let mE = nh._2
3011+ let ni = jI(gN.caller, gN.transactionId)
3012+ let jO = ni._2._1
3013+ let fm = if ((0 >= iB._1))
3014+ then $Tuple3([IntegerEntry(kb, 0), StringEntry(gA, mD)], "", 0)
3015+ else $Tuple3((ni._1 ++ (if (mE)
30163016 then [StringEntry(M(B), "0_0_0_0_0")]
3017- else ((((nil :+ StringEntry(bO(B), makeString([nh._2._2, "L", jN], "_"))) :+ IntegerEntry(ka, iA._1)) :+ StringEntry(gA, mC)) :+ StringEntry(iK, makeString([jn[bm], jn[bn], kR, jn[bp]], ":"))))), jN, iA._3)
3018- if (lp(B))
3017+ else ((((nil :+ StringEntry(bO(B), makeString([ni._2._2, "L", jO], "_"))) :+ IntegerEntry(kb, iB._1)) :+ StringEntry(gA, mD)) :+ StringEntry(iL, makeString([jo[bm], jo[bn], kS, jo[bp]], ":"))))), jO, iB._3)
3018+ if (lq(B))
30193019 then throw("expedition_checkTournament")
3020- else if (lq(B))
3020+ else if (lr(B))
30213021 then throw("expedition_checkDelivery")
30223022 else {
3023- let nf = dF(invoke(dm, "burnAcres", [ek], nil))
3024- $Tuple2(((fm._1 ++ le(B, ac)._1) ++ ml), $Tuple3(fm._2, fm._3, nf))
3023+ let ng = dF(invoke(dm, "burnAcres", [ek], nil))
3024+ $Tuple2(((fm._1 ++ lf(B, ac)._1) ++ mm), $Tuple3(fm._2, fm._3, ng))
30253025 }
30263026 }
30273027 }
30283028
30293029
30303030
30313031 @Callable(gN)
30323032 func buySLandForAcres () = {
3033- let ml = mh(gN)
3033+ let mm = mi(gN)
30343034 if ((size(gN.payments) != 1))
30353035 then throw("exactly 1 payment must be attached")
30363036 else {
3037- let mm = gN.payments[0]
3038- let ft = mm.amount
3039- if (if (!(isDefined(mm.assetId)))
3037+ let mn = gN.payments[0]
3038+ let ft = mn.amount
3039+ if (if (!(isDefined(mn.assetId)))
30403040 then true
3041- else (value(mm.assetId) != du))
3041+ else (value(mn.assetId) != du))
30423042 then throw("ACRES payments only!")
30433043 else if ((ft != ek))
30443044 then throw(("Payment attached should be " + toString(ek)))
30453045 else {
3046- let fm = jH(gN.caller, gN.transactionId)
3047- let nf = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
3048- $Tuple2(((fm._1 ++ lf(toString(gN.caller), ac)._1) ++ ml), $Tuple2(fm._2._1, nf))
3046+ let fm = jI(gN.caller, gN.transactionId)
3047+ let ng = dF(invoke(dm, "burnAcres", [ek], [AttachedPayment(du, ft)]))
3048+ $Tuple2(((fm._1 ++ lg(toString(gN.caller), ac)._1) ++ mm), $Tuple2(fm._2._1, ng))
30493049 }
30503050 }
30513051 }
30523052
30533053
30543054
30553055 @Callable(gN)
30563056 func upgradeInfra (Q) = {
3057- let ml = mh(gN)
3057+ let mm = mi(gN)
30583058 if ((size(gN.payments) != 0))
30593059 then throw("No payments required")
30603060 else {
3061- let fm = kJ(true, gN.caller, 0, Q)
3061+ let fm = kK(true, gN.caller, 0, Q)
30623062 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3063- $Tuple2(((fm._1 ++ ml) ++ le(B, fraction(ad, fm._3, cK))._1), fm._2)
3064- }
3065- }
3066-
3067-
3068-
3069-@Callable(gN)
3070-func activateArtifact (ni,nj) = {
3071- let ml = mh(gN)
3063+ $Tuple2(((fm._1 ++ mm) ++ lf(B, fraction(ad, fm._3, cK))._1), fm._2)
3064+ }
3065+ }
3066+
3067+
3068+
3069+@Callable(gN)
3070+func activateArtifact (nj,nk) = {
3071+ let mm = mi(gN)
30723072 if ((size(gN.payments) != 0))
30733073 then throw("No payments required")
30743074 else {
30753075 let c = toString(gN.caller)
30763076 let fm = {
3077- let cD = ni
3077+ let cD = nj
30783078 if (("PRESALE" == cD))
3079- then ln(c, nj)
3079+ then lo(c, nk)
30803080 else if (("ONBOARD" == cD))
3081- then lg(c)
3081+ then lh(c)
30823082 else throw("Unknown artifact")
30833083 }
3084- (fm ++ ml)
3085- }
3086- }
3087-
3088-
3089-
3090-@Callable(gN)
3091-func mergeLands (lE) = {
3092- let ml = mh(gN)
3084+ (fm ++ mm)
3085+ }
3086+ }
3087+
3088+
3089+
3090+@Callable(gN)
3091+func mergeLands (lF) = {
3092+ let mm = mi(gN)
30933093 if ((size(gN.payments) != 0))
30943094 then throw("No payments required")
30953095 else {
3096- let fm = mc(toString(gN.caller), lE)
3097- $Tuple2(((fm._1 ++ ml) ++ lf(toString(gN.caller), ae)._1), fm._2)
3098- }
3099- }
3100-
3101-
3102-
3103-@Callable(gN)
3104-func cargoExchange (nk,Q) = {
3105- let ml = mh(gN)
3096+ let fm = md(toString(gN.caller), lF)
3097+ $Tuple2(((fm._1 ++ mm) ++ lg(toString(gN.caller), ae)._1), fm._2)
3098+ }
3099+ }
3100+
3101+
3102+
3103+@Callable(gN)
3104+func cargoExchange (nl,Q) = {
3105+ let mm = mi(gN)
31063106 if ((size(gN.payments) != 0))
31073107 then throw("No payments required")
31083108 else {
3109- let jm = split_4C(nk, ":")
3109+ let jn = split_4C(nl, ":")
31103110 let c = toString(gN.originCaller)
3111- let kr = value(assetInfo(fromBase58String(Q)))
3112- let ks = bw(Q)
3113- if (!(isDefined(getInteger(ks))))
3114- then throw((kr.name + " is not staked"))
3111+ let ks = value(assetInfo(fromBase58String(Q)))
3112+ let kt = bw(Q)
3113+ if (!(isDefined(getInteger(kt))))
3114+ then throw((ks.name + " is not staked"))
31153115 else {
3116- let ku = valueOrErrorMessage(getString(bt(Q)), (("NFT " + kr.name) + " is orphaned"))
3117- if ((ku != c))
3116+ let kv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + ks.name) + " is orphaned"))
3117+ if ((kv != c))
31183118 then throw((aF + " is not yours"))
31193119 else {
3120- let iY = (dK(split(kr.description, "_")[do]) / cL)
3121- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3120+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3121+ let ja = valueOrElse(getInteger(bD(Q)), 0)
31223122 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3123- let kp = valueOrElse(getString(bO(B)), aM)
3124- let ck = split(value(kp), "_")
3123+ let kq = valueOrElse(getString(bO(B)), aM)
3124+ let ck = split(value(kq), "_")
31253125 if ((ck[br] != "L"))
31263126 then throw((("Duck location type is " + ck[br]) + ", but should be L"))
31273127 else if ((ck[bs] != Q))
31283128 then throw(("Duck should be on the land " + Q))
31293129 else {
3130- let iX = bC(Q)
3131- let iO = iW(iX, iY, iZ)
3132- let iK = bN(B)
3133- let jn = iJ(iK)
3134- let fm = jl(jm, iO, jn)
3135- let jf = split(iO[bh], "_")
3136- let kG = (parseIntValue(jf[bj]) + fm._7)
3137- let kH = (parseIntValue(jf[bk]) - fm._7)
3138- ([StringEntry(iK, makeString_2C([jn[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iX, makeString_2C([iO[bd], fm._1, fm._2, fm._3, makeString([jf[bi], toString(kG), toString(kH), jf[bl]], "_")], ":"))] ++ ml)
3130+ let iY = bC(Q)
3131+ let iP = iX(iY, iZ, ja)
3132+ let iL = bN(B)
3133+ let jo = iK(iL)
3134+ let fm = jm(jn, iP, jo)
3135+ let jg = split(iP[bh], "_")
3136+ let kH = (parseIntValue(jg[bj]) + fm._7)
3137+ let kI = (parseIntValue(jg[bk]) - fm._7)
3138+ ([StringEntry(iL, makeString_2C([jo[bm], fm._4, fm._5, fm._6], ":")), StringEntry(iY, makeString_2C([iP[bd], fm._1, fm._2, fm._3, makeString([jg[bi], toString(kH), toString(kI), jg[bl]], "_")], ":"))] ++ mm)
31393139 }
31403140 }
31413141 }
31423142 }
31433143 }
31443144
31453145
31463146
31473147 @Callable(gN)
3148-func saveWarehouse (jb,Q) = if ((gN.caller != di))
3148+func saveWarehouse (jc,Q) = if ((gN.caller != di))
31493149 then throw("Access denied")
31503150 else {
3151- let iX = bC(Q)
3152- let jc = split_4C(jb, ":")
3153- if ((size(jc) != 5))
3151+ let iY = bC(Q)
3152+ let jd = split_4C(jc, ":")
3153+ if ((size(jd) != 5))
31543154 then throw("warehouse string should contain 4 ':' separators")
31553155 else {
3156- let nl = split(jc[bh], "_")[bi]
3157- let kG = iN(jc)
3158- let nm = iL(jc[bd])
3159- let kH = ((nm - parseIntValue(nl)) - kG)
3160- if ((0 > kH))
3156+ let nm = split(jd[bh], "_")[bi]
3157+ let kH = iO(jd)
3158+ let nn = iM(jd[bd])
3159+ let kI = ((nn - parseIntValue(nm)) - kH)
3160+ if ((0 > kI))
31613161 then throw("Operation leads to negative free warehouse space")
31623162 else {
3163- let nn = makeString_2C([jc[bd], jc[be], jc[bf], jc[bg], makeString([nl, toString(kG), toString(kH), toString(nm)], "_")], ":")
3164- $Tuple2([StringEntry(iX, nn)], nn)
3163+ let no = makeString_2C([jd[bd], jd[be], jd[bf], jd[bg], makeString([nm, toString(kH), toString(kI), toString(nn)], "_")], ":")
3164+ $Tuple2([StringEntry(iY, no)], no)
31653165 }
31663166 }
31673167 }
31683168
31693169
31703170
31713171 @Callable(gN)
3172-func setCustomName (bu,lO,by) = {
3173- let ml = mh(gN)
3172+func setCustomName (bu,lP,by) = {
3173+ let mm = mi(gN)
31743174 if ((size(gN.payments) != 1))
31753175 then throw("Exactly one payment required")
31763176 else {
3177- let mm = value(gN.payments[0])
3178- if ((mm.assetId != cC))
3177+ let mn = value(gN.payments[0])
3178+ if ((mn.assetId != cC))
31793179 then throw("Allowed USDT payment only!")
3180- else if ((mm.amount != ef))
3180+ else if ((mn.amount != ef))
31813181 then throw(("Payment should be " + toString(ef)))
3182- else if (contains(lO, "__"))
3183- then throw(("Name should not contain '__': " + lO))
3184- else if ((size(lO) > eg))
3182+ else if (contains(lP, "__"))
3183+ then throw(("Name should not contain '__': " + lP))
3184+ else if ((size(lP) > eg))
31853185 then throw(("Name too long, maxLength=" + toString(eg)))
31863186 else {
31873187 let c = toString(gN.originCaller)
3188- let no = {
3188+ let np = {
31893189 let cD = by
31903190 if (("ACCOUNT" == cD))
31913191 then {
3192- let np = eA(lO)
3193- let nq = getString(np)
3194- if (isDefined(nq))
3195- then throw(("Name already registered: " + lO))
3192+ let nq = eA(lP)
3193+ let nr = getString(nq)
3194+ if (isDefined(nr))
3195+ then throw(("Name already registered: " + lP))
31963196 else {
3197- let nr = bG(c)
3198- let ns = getString(nr)
3199- let nt = if (isDefined(ns))
3200- then [DeleteEntry(eA(value(ns)))]
3197+ let ns = bG(c)
3198+ let nt = getString(ns)
3199+ let nu = if (isDefined(nt))
3200+ then [DeleteEntry(eA(value(nt)))]
32013201 else nil
3202- (((nt :+ StringEntry(nr, lO)) :+ StringEntry(np, c)) ++ lf(c, ab)._1)
3202+ (((nu :+ StringEntry(ns, lP)) :+ StringEntry(nq, c)) ++ lg(c, ab)._1)
32033203 }
32043204 }
32053205 else if (("LAND" == cD))
32063206 then {
3207- let kr = value(assetInfo(fromBase58String(bu)))
3208- let ks = bw(bu)
3209- if (!(isDefined(getInteger(ks))))
3210- then throw((kr.name + " is not staked"))
3207+ let ks = value(assetInfo(fromBase58String(bu)))
3208+ let kt = bw(bu)
3209+ if (!(isDefined(getInteger(kt))))
3210+ then throw((ks.name + " is not staked"))
32113211 else {
3212- let ku = valueOrErrorMessage(getString(bt(bu)), (("NFT " + kr.name) + " is orphaned"))
3213- if ((ku != c))
3212+ let kv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + ks.name) + " is orphaned"))
3213+ if ((kv != c))
32143214 then throw((aF + " is not yours"))
32153215 else {
3216- let np = et(lO)
3217- let nq = getString(np)
3218- if (isDefined(nq))
3219- then throw(("Name already registered: " + lO))
3216+ let nq = et(lP)
3217+ let nr = getString(nq)
3218+ if (isDefined(nr))
3219+ then throw(("Name already registered: " + lP))
32203220 else {
3221- let nu = bv(bu)
3222- let ns = getString(nu)
3223- let nt = if (isDefined(ns))
3224- then [DeleteEntry(et(value(ns)))]
3221+ let nv = bv(bu)
3222+ let nt = getString(nv)
3223+ let nu = if (isDefined(nt))
3224+ then [DeleteEntry(et(value(nt)))]
32253225 else nil
3226- (((nt :+ StringEntry(nu, lO)) :+ StringEntry(np, bu)) ++ lf(c, ab)._1)
3226+ (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lg(c, ab)._1)
32273227 }
32283228 }
32293229 }
32303230 }
32313231 else if (("DUCK" == cD))
32323232 then {
3233- let kr = value(assetInfo(fromBase58String(bu)))
3234- let ks = bw(bu)
3235- if (if (!(isDefined(getInteger(ks))))
3233+ let ks = value(assetInfo(fromBase58String(bu)))
3234+ let kt = bw(bu)
3235+ if (if (!(isDefined(getInteger(kt))))
32363236 then true
32373237 else !(isDefined(getString(bM(c)))))
3238- then throw((kr.name + " is not staked"))
3238+ then throw((ks.name + " is not staked"))
32393239 else {
3240- let ku = valueOrErrorMessage(getString(bL(bu)), (("NFT " + kr.name) + " is orphaned"))
3241- if ((ku != c))
3240+ let kv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + ks.name) + " is orphaned"))
3241+ if ((kv != c))
32423242 then throw((aG + " is not yours"))
32433243 else {
3244- let np = ez(lO)
3245- let nq = getString(np)
3246- if (isDefined(nq))
3247- then throw(("Name already registered: " + lO))
3244+ let nq = ez(lP)
3245+ let nr = getString(nq)
3246+ if (isDefined(nr))
3247+ then throw(("Name already registered: " + lP))
32483248 else {
3249- let nu = bF(bu)
3250- let ns = getString(nu)
3251- let nt = if (isDefined(ns))
3252- then [DeleteEntry(ez(value(ns)))]
3249+ let nv = bF(bu)
3250+ let nt = getString(nv)
3251+ let nu = if (isDefined(nt))
3252+ then [DeleteEntry(ez(value(nt)))]
32533253 else nil
3254- (((nt :+ StringEntry(nu, lO)) :+ StringEntry(np, bu)) ++ le(bu, ab)._1)
3254+ (((nu :+ StringEntry(nv, lP)) :+ StringEntry(nq, bu)) ++ lf(bu, ab)._1)
32553255 }
32563256 }
32573257 }
32583258 }
32593259 else throw("Unknown entity type")
32603260 }
3261- $Tuple2(((no :+ ScriptTransfer(di, mm.amount, cC)) ++ ml), 0)
3261+ $Tuple2(((np :+ ScriptTransfer(di, mn.amount, cC)) ++ mm), 0)
32623262 }
32633263 }
32643264 }
32653265
32663266
32673267
32683268 @Callable(gN)
3269-func setReferrals (nv,nw) = if ((gN.callerPublicKey != ec))
3269+func setReferrals (nw,nx) = if ((gN.callerPublicKey != ec))
32703270 then throw("Permission denied")
32713271 else {
3272- let ml = mh(gN)
3272+ let mm = mi(gN)
32733273 if ((size(gN.payments) != 0))
32743274 then throw("No payments required")
3275- else if (!(isDefined(addressFromString(nv))))
3276- then throw(("Invalid address: " + nv))
3277- else if (!(isDefined(addressFromString(nw))))
3278- then throw(("Invalid address: " + nw))
3275+ else if (!(isDefined(addressFromString(nw))))
3276+ then throw(("Invalid address: " + nw))
3277+ else if (!(isDefined(addressFromString(nx))))
3278+ then throw(("Invalid address: " + nx))
32793279 else {
3280- let nx = eB()
3281- let ny = getString(nx)
3282- let nz = if (isDefined(ny))
3283- then split_4C(value(ny), "_")
3280+ let ny = eB()
3281+ let nz = getString(ny)
3282+ let nA = if (isDefined(nz))
3283+ then split_4C(value(nz), "_")
32843284 else nil
3285- if (containsElement(nz, nw))
3286- then throw((nw + " is not newbie (already has referrals)"))
3285+ if (containsElement(nA, nx))
3286+ then throw((nx + " is not newbie (already has referrals)"))
32873287 else {
3288- let lh = bH(nw)
3289- let li = getString(lh)
3290- if (if (isDefined(li))
3291- then isDefined(addressFromString(value(li)))
3288+ let li = bH(nx)
3289+ let lj = getString(li)
3290+ if (if (isDefined(lj))
3291+ then isDefined(addressFromString(value(lj)))
32923292 else false)
3293- then throw(((nw + " already has refBy: ") + value(li)))
3293+ then throw(((nx + " already has refBy: ") + value(lj)))
32943294 else {
3295- let nA = bK(nv)
3296- let nB = getString(nA)
3297- let nC = if (isDefined(nB))
3298- then split_4C(value(nB), "_")
3295+ let nB = bK(nw)
3296+ let nC = getString(nB)
3297+ let nD = if (isDefined(nC))
3298+ then split_4C(value(nC), "_")
32993299 else nil
3300- if (containsElement(nC, nw))
3301- then throw((((nv + " already contains ") + nw) + " within referrals"))
3300+ if (containsElement(nD, nx))
3301+ then throw((((nw + " already contains ") + nx) + " within referrals"))
33023302 else {
3303- let nD = makeString_2C((nC :+ nw), "_")
3304- let nE = if (containsElement(nz, nv))
3305- then value(ny)
3306- else makeString_2C((nz :+ nv), "_")
3307- $Tuple2(([StringEntry(lh, nv), StringEntry(nA, nD), StringEntry(nx, nE)] ++ ml), 0)
3303+ let nE = makeString_2C((nD :+ nx), "_")
3304+ let nF = if (containsElement(nA, nw))
3305+ then value(nz)
3306+ else makeString_2C((nA :+ nw), "_")
3307+ $Tuple2(([StringEntry(li, nw), StringEntry(nB, nE), StringEntry(ny, nF)] ++ mm), 0)
33083308 }
33093309 }
33103310 }
33113311 }
33123312 }
33133313
33143314
33153315
33163316 @Callable(gN)
3317-func distributePoints (nF,nG,nH,nI,nJ) = {
3318- let ml = mh(gN)
3317+func distributePoints (nG,nH,nI,nJ,nK) = {
3318+ let mm = mi(gN)
33193319 if ((size(gN.payments) != 0))
33203320 then throw("No payments required")
33213321 else {
33223322 let c = toString(gN.originCaller)
3323- let nK = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3324- let nL = dF(nK[1])
3325- let nM = if ((0 >= nL))
3323+ let nL = dH(invoke(dk, "checkWlgXpREADONLY", [c], nil))
3324+ let nM = dF(nL[1])
3325+ let nN = if ((0 >= nM))
33263326 then $Tuple2(0, nil)
33273327 else {
3328- let lc = dF(invoke(dk, "takeWlgXp", [c], nil))
3329- if ((lc == lc))
3330- then $Tuple2(nL, [IntegerEntry(I(c), dF(nK[0])), IntegerEntry(H(c), dF(nK[2]))])
3328+ let ld = dF(invoke(dk, "takeWlgXp", [c], nil))
3329+ if ((ld == ld))
3330+ then $Tuple2(nM, [IntegerEntry(I(c), dF(nL[0])), IntegerEntry(H(c), dF(nL[2]))])
33313331 else throw("Strict value is not equal to itself.")
33323332 }
3333- let nN = nM._1
3334- let nO = nM._2
3333+ let nO = nN._1
3334+ let nP = nN._2
33353335 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3336- let nP = J(c)
3337- let nQ = (valueOrElse(getInteger(nP), 0) + nN)
3338- let nR = F(B)
3339- let nS = valueOrElse(getInteger(nR), 0)
3340- let nT = (nQ + nS)
3341- let nU = ((((nF + nG) + nH) + nI) + nJ)
3342- if ((nU > nT))
3343- then throw((("There are only " + toString(nT)) + " free points to distribute"))
3336+ let nQ = J(c)
3337+ let nR = (valueOrElse(getInteger(nQ), 0) + nO)
3338+ let nS = F(B)
3339+ let nT = valueOrElse(getInteger(nS), 0)
3340+ let nU = (nR + nT)
3341+ let nV = ((((nG + nH) + nI) + nJ) + nK)
3342+ if ((nV > nU))
3343+ then throw((("There are only " + toString(nU)) + " free points to distribute"))
33443344 else {
3345- let nV = C(B)
3346- let at = split(valueOrElse(getString(nV), "0_0_0_0_0"), "_")
3347- let nW = (nQ - nU)
3348- $Tuple2((([IntegerEntry(nP, if ((0 > nW))
3345+ let nW = C(B)
3346+ let at = split(valueOrElse(getString(nW), "0_0_0_0_0"), "_")
3347+ let nX = (nR - nV)
3348+ $Tuple2((([IntegerEntry(nQ, if ((0 > nX))
33493349 then 0
3350- else nW), IntegerEntry(nR, if ((0 > nW))
3351- then (nS + nW)
3352- else nS), StringEntry(nV, makeString([toString((parseIntValue(at[l]) + nF)), toString((parseIntValue(at[m]) + nG)), toString((parseIntValue(at[n]) + nH)), toString((parseIntValue(at[o]) + nI)), toString((parseIntValue(at[p]) + nJ))], "_"))] ++ ml) ++ nO), 0)
3350+ else nX), IntegerEntry(nS, if ((0 > nX))
3351+ then (nT + nX)
3352+ else nT), StringEntry(nW, makeString([toString((parseIntValue(at[l]) + nG)), toString((parseIntValue(at[m]) + nH)), toString((parseIntValue(at[n]) + nI)), toString((parseIntValue(at[o]) + nJ)), toString((parseIntValue(at[p]) + nK))], "_"))] ++ mm) ++ nP), 0)
33533353 }
33543354 }
33553355 }
33563356
33573357
33583358
33593359 @Callable(gN)
33603360 func splitByGlobalWeightsREADONLY (eL) = $Tuple2(nil, fd(eL))
33613361
33623362
33633363
33643364 @Callable(gN)
3365-func splitByGlobalAndLocalWeightsREADONLY (nX,nY,gQ) = {
3365+func splitByGlobalAndLocalWeightsREADONLY (nY,nZ,gQ) = {
33663366 let gJ = gP(gQ)
3367- $Tuple2(nil, $Tuple2(fd(nX), eO(nY, gJ)))
3368- }
3369-
3370-
3371-
3372-@Callable(gN)
3373-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iJ(bN(B)), ":"))
3367+ $Tuple2(nil, $Tuple2(fd(nY), eO(nZ, gJ)))
3368+ }
3369+
3370+
3371+
3372+@Callable(gN)
3373+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(iK(bN(B)), ":"))
33743374
33753375
33763376
33773377 @Callable(gN)
33783378 func getWarehouseREADONLY (Q) = {
3379- let kr = value(assetInfo(fromBase58String(Q)))
3380- let iY = (dK(split(kr.description, "_")[do]) / cL)
3381- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3382- $Tuple2(nil, makeString_2C(iW(bC(Q), iY, iZ), ":"))
3379+ let ks = value(assetInfo(fromBase58String(Q)))
3380+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3381+ let ja = valueOrElse(getInteger(bD(Q)), 0)
3382+ $Tuple2(nil, makeString_2C(iX(bC(Q), iZ, ja), ":"))
33833383 }
33843384
33853385
33863386
33873387 @Callable(gN)
33883388 func saveLastTx () = if (!(containsElement([dk, di, dl, dm], gN.caller)))
33893389 then throw("Access denied")
3390- else $Tuple2(mh(gN), 42)
3391-
3392-
3393-
3394-@Callable(gN)
3395-func updateDuckStats (B,lc) = if ((gN.caller != di))
3390+ else $Tuple2(mi(gN), 42)
3391+
3392+
3393+
3394+@Callable(gN)
3395+func updateDuckStats (B,ld) = if ((gN.caller != di))
33963396 then throw("Access denied")
3397- else le(B, lc)
3398-
3399-
3400-
3401-@Callable(gN)
3402-func updateAccStats (c,lc) = if (!(containsElement([dk, di, dm], gN.caller)))
3397+ else lf(B, ld)
3398+
3399+
3400+
3401+@Callable(gN)
3402+func updateAccStats (c,ld) = if (!(containsElement([dk, di, dm], gN.caller)))
34033403 then throw("Access denied")
3404- else lf(c, lc)
3405-
3406-
3407-
3408-@Callable(gN)
3409-func equipDuck (nZ) = {
3410- let ml = mh(gN)
3404+ else lg(c, ld)
3405+
3406+
3407+
3408+@Callable(gN)
3409+func equipDuck (oa) = {
3410+ let mm = mi(gN)
34113411 if ((size(gN.payments) != 0))
34123412 then throw("No payments required")
34133413 else {
34143414 let c = toString(gN.originCaller)
34153415 let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3416- if (lp(B))
3416+ if (lq(B))
34173417 then throw("equipDuck_checkTournament")
3418- else if (lq(B))
3418+ else if (lr(B))
34193419 then throw("equipDuck_checkDelivery")
34203420 else {
34213421 let gA = G(B)
3422- let oa = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3423- let iK = bN(B)
3424- let jn = iJ(iK)
3425- let mC = split(nZ, "_")
3426- if ((size(mC) != r))
3422+ let ob = split(valueOrElse(getString(gA), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3423+ let iL = bN(B)
3424+ let jo = iK(iL)
3425+ let mD = split(oa, "_")
3426+ if ((size(mD) != r))
34273427 then throw("Wrong equipment string")
34283428 else {
3429- let gC = gp(oa, fA(jn[bp]), true, nil)
3430- let gD = split(mC[q], ";")[1]
3429+ let gC = gp(ob, fA(jo[bp]), true, nil)
3430+ let gD = split(mD[q], ";")[1]
34313431 let ar = if ((gD == ""))
34323432 then 0
34333433 else {
34343434 let gE = split(gD, ",")[0]
34353435 if ((gE == ""))
34363436 then 0
34373437 else {
34383438 let fP = split(gE, ":")
34393439 let dg = fP[0]
34403440 let gF = fP[1]
34413441 if (if (if (if (if ((dg == "06"))
34423442 then true
34433443 else (dg == "07"))
34443444 then true
34453445 else (dg == "08"))
34463446 then (gF != "")
34473447 else false)
34483448 then (parseIntValue(gF) > 0)
34493449 else false)
34503450 then parseIntValue(split(aX[parseIntValue(dg)], "_")[aZ])
34513451 else 0
34523452 }
34533453 }
34543454 let gk = ap(this, B, ar, true)
3455- let gG = gp(mC, gC, false, gk)
3456- let ob = fF(gG)
3457- $Tuple2(([StringEntry(gA, nZ), StringEntry(iK, makeString_2C([jn[bm], jn[bn], jn[bo], ob], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ ml), 0)
3455+ let gG = gp(mD, gC, false, gk)
3456+ let oc = fF(gG)
3457+ $Tuple2(([StringEntry(gA, oa), StringEntry(iL, makeString_2C([jo[bm], jo[bn], jo[bo], oc], ":")), StringEntry(M(B), makeString([toString(gk[7]), toString(gk[8]), toString(gk[9]), toString(gk[10]), toString(gk[11])], "_"))] ++ mm), 0)
34583458 }
34593459 }
34603460 }
34613461 }
34623462
34633463
34643464
34653465 @Callable(gN)
3466-func fortificateLand (Q,oc) = {
3467- let ml = mh(gN)
3466+func fortificateLand (Q,od) = {
3467+ let mm = mi(gN)
34683468 if ((size(gN.payments) != 0))
34693469 then throw("No payments required")
34703470 else {
34713471 let c = toString(gN.originCaller)
34723472 let B = valueOrElse(getString(bM(c)), "")
34733473 let fK = ap(this, B, 0, false)
3474- let od = bE(Q)
3475- let oe = split(valueOrElse(getString(od), ":0_15:0_18:0"), "_")
3476- let kr = value(assetInfo(fromBase58String(Q)))
3477- let iY = (dK(split(kr.description, "_")[do]) / cL)
3478- let iZ = valueOrElse(getInteger(bD(Q)), 0)
3479- let iX = bC(Q)
3480- let jc = iW(iX, iY, iZ)
3481- let of = split(jc[bh], "_")
3482- let og = parseIntValue(of[bj])
3483- let oh = parseIntValue(of[bk])
3484- let oi = split(oc, "_")
3485- let oj = gw(oe, fA(jc[bg]), og, oh, true, nil)
3486- let gC = oj._1
3487- let ok = oj._2
3488- let ol = oj._3
3489- let om = gw(oi, gC, ok, ol, false, fK)
3490- let gG = om._1
3491- let on = om._2
3492- let oo = om._3
3493- let ob = fF(gG)
3494- let kX = makeString([of[bi], toString(on), toString(oo), of[bl]], "_")
3495- $Tuple2(([StringEntry(od, oc), StringEntry(iX, makeString_2C([jc[bd], jc[be], jc[bf], ob, kX], ":"))] ++ ml), 0)
3474+ let oe = bE(Q)
3475+ let of = split(valueOrElse(getString(oe), ":0_15:0_18:0"), "_")
3476+ let ks = value(assetInfo(fromBase58String(Q)))
3477+ let iZ = (dK(split(ks.description, "_")[do]) / cL)
3478+ let ja = valueOrElse(getInteger(bD(Q)), 0)
3479+ let iY = bC(Q)
3480+ let jd = iX(iY, iZ, ja)
3481+ let og = split(jd[bh], "_")
3482+ let oh = parseIntValue(og[bj])
3483+ let oi = parseIntValue(og[bk])
3484+ let oj = split(od, "_")
3485+ let ok = gw(of, fA(jd[bg]), oh, oi, true, nil)
3486+ let gC = ok._1
3487+ let ol = ok._2
3488+ let om = ok._3
3489+ let on = gw(oj, gC, ol, om, false, fK)
3490+ let gG = on._1
3491+ let oo = on._2
3492+ let op = on._3
3493+ let oc = fF(gG)
3494+ let kY = makeString([og[bi], toString(oo), toString(op), og[bl]], "_")
3495+ $Tuple2(([StringEntry(oe, od), StringEntry(iY, makeString_2C([jd[bd], jd[be], jd[bf], oc, kY], ":"))] ++ mm), 0)
34963496 }
34973497 }
34983498
34993499
35003500
35013501 @Callable(gN)
35023502 func initDuckTourAttempt (B) = if ((gN.caller != dl))
35033503 then throw("Access denied")
35043504 else {
3505- let ka = A(B)
3506- let kb = aj(valueOrElse(getInteger(E(B)), 0))
3507- let lu = valueOrElse(getInteger(ka), kb)
3508- let op = bO(B)
3509- let kp = valueOrElse(getString(op), aM)
3505+ let kb = A(B)
3506+ let kc = aj(valueOrElse(getInteger(E(B)), 0))
3507+ let lv = valueOrElse(getInteger(kb), kc)
3508+ let oq = bO(B)
3509+ let kq = valueOrElse(getString(oq), aM)
35103510 let cj = valueOrElse(getInteger(dl, bU), 0)
3511- let oq = (toString(cj) + "_T_0")
3512- $Tuple2([IntegerEntry(K(B), lu), IntegerEntry(ka, kb), StringEntry(L(B), kp), StringEntry(op, oq)], oq)
3511+ let or = (toString(cj) + "_T_0")
3512+ $Tuple2([IntegerEntry(K(B), lv), IntegerEntry(kb, kc), StringEntry(L(B), kq), StringEntry(oq, or)], or)
35133513 }
35143514
35153515
35163516
35173517 @Callable(gN)
35183518 func breakAttempt () = {
3519- let ml = mh(gN)
3519+ let mm = mi(gN)
35203520 let B = valueOrErrorMessage(getString(bM(toString(gN.caller))), "You don't have a duck staked")
3521- let op = bO(B)
3522- let kp = valueOrElse(getString(op), aM)
3523- if ((split(kp, "_")[br] != "T"))
3521+ let oq = bO(B)
3522+ let kq = valueOrElse(getString(oq), aM)
3523+ if ((split(kq, "_")[br] != "T"))
35243524 then throw("Your duck is not in the tournament")
35253525 else {
3526- let or = getIntegerValue(K(B))
3527- let lA = getStringValue(L(B))
3528- $Tuple2(((ml :+ IntegerEntry(A(B), or)) :+ StringEntry(op, lA)), kp)
3526+ let os = getIntegerValue(K(B))
3527+ let lB = getStringValue(L(B))
3528+ $Tuple2(((mm :+ IntegerEntry(A(B), os)) :+ StringEntry(oq, lB)), kq)
35293529 }
35303530 }
35313531
35323532
35333533
35343534 @Callable(gN)
35353535 func exitTournamentInternal (B) = if ((gN.caller != this))
35363536 then throw("Access denied")
35373537 else {
3538- let or = getIntegerValue(K(B))
3539- let lA = getStringValue(L(B))
3540- $Tuple2([IntegerEntry(A(B), or), StringEntry(bO(B), lA)], false)
3538+ let os = getIntegerValue(K(B))
3539+ let lB = getStringValue(L(B))
3540+ $Tuple2([IntegerEntry(A(B), os), StringEntry(bO(B), lB)], false)
35413541 }
35423542
35433543
35443544
35453545 @Callable(gN)
35463546 func exitDeliveryInternal (B) = if ((gN.caller != this))
35473547 then throw("Access denied")
35483548 else {
3549- let nh = lr(B, false, 0, 0)
3550- $Tuple2((nh._1 ++ nh._2), false)
3549+ let ni = ls(B, false, 0, 0)
3550+ $Tuple2((ni._1 ++ ni._2), false)
35513551 }
35523552
35533553
35543554
35553555 @Callable(gN)
3556-func autoExitDelivery (B,jU,os,ls) = if ((gN.caller != this))
3556+func autoExitDelivery (B,jV,ot,lt) = if ((gN.caller != this))
35573557 then throw("Access denied")
35583558 else {
3559- let nh = lr(B, true, jU, ls)
3560- $Tuple2(nh._1, nh._3)
3559+ let ni = ls(B, true, jV, lt)
3560+ $Tuple2(ni._1, ni._3)
35613561 }
35623562
35633563
35643564
35653565 @Callable(gN)
3566-func breakDelivery () = $Tuple2(mh(gN), "breakDelivery")
3567-
3568-
3569-
3570-@Callable(gN)
3571-func prepareRobbery (jP,jQ) = {
3572- let ml = mh(gN)
3573- if (!(sigVerify_8Kb(jP, jQ, ec)))
3566+func breakDelivery () = $Tuple2(mi(gN), "breakDelivery")
3567+
3568+
3569+
3570+@Callable(gN)
3571+func prepareRobbery (jQ,jR) = {
3572+ let mm = mi(gN)
3573+ if (!(sigVerify_8Kb(jQ, jR, ec)))
35743574 then throw("signature does not match")
35753575 else if ((size(gN.payments) != 1))
35763576 then throw("exactly 1 payment must be attached")
35773577 else {
3578- let mm = gN.payments[0]
3579- let ot = mm.amount
3580- if (if (!(isDefined(mm.assetId)))
3578+ let mn = gN.payments[0]
3579+ let ou = mn.amount
3580+ if (if (!(isDefined(mn.assetId)))
35813581 then true
3582- else (value(mm.assetId) != ds))
3582+ else (value(mn.assetId) != ds))
35833583 then throw("WLGOLD payments only!")
35843584 else {
3585- let fs = split(toUtf8String(jP), "|")
3585+ let fs = split(toUtf8String(jQ), "|")
35863586 if ((size(fs) != 2))
35873587 then throw("Wrong message format")
35883588 else {
35893589 let B = fs[0]
3590- if (lp(B))
3590+ if (lq(B))
35913591 then throw("prepareRobbery_checkTournament")
3592- else if (lq(B))
3592+ else if (lr(B))
35933593 then throw("prepareRobbery_checkDelivery")
35943594 else {
35953595 let aB = ax(this, B)._1
3596- if ((aB > ot))
3597- then throw(((("Payment " + toString(ot)) + " < required ") + toString(aB)))
3596+ if ((aB > ou))
3597+ then throw(((("Payment " + toString(ou)) + " < required ") + toString(aB)))
35983598 else {
3599- let ou = split(fs[1], "_")
3599+ let ov = split(fs[1], "_")
36003600 let aA = lastBlock.timestamp
36013601 let aC = valueOrElse(getInteger(S(B)), 0)
36023602 let aD = valueOrElse(getString(T(B)), "")
36033603 let aE = valueOrElse(getInteger(R(aD)), 0)
36043604 if (if ((aC != y))
36053605 then (aE > aA)
36063606 else false)
36073607 then throw(("You already started robbing, wait till " + toString(aE)))
36083608 else {
3609- func ov (eU,Q) = {
3610- let ow = valueOrElse(getInteger(P(Q)), 0)
3611- let ox = valueOrElse(getInteger(R(Q)), 0)
3612- if ((ow > size(v)))
3609+ func ow (eU,Q) = {
3610+ let ox = valueOrElse(getInteger(P(Q)), 0)
3611+ let oy = valueOrElse(getInteger(R(Q)), 0)
3612+ if ((ox > size(v)))
36133613 then throw("Invalid state")
3614- else if ((aA > ox))
3614+ else if ((aA > oy))
36153615 then {
3616- let oy = valueOrElse(getInteger(bw(Q)), 0)
3617- if ((0 >= oy))
3616+ let oz = valueOrElse(getInteger(bw(Q)), 0)
3617+ if ((0 >= oz))
36183618 then eU
36193619 else {
36203620 let gu = value(assetInfo(fromBase58String(Q)))
3621- let kv = split(gu.description, "_")
3622- let kh = dK(kv[do])
3623- let oz = kg(Q, kh)
3624- let gT = (aA - oy)
3625- let ky = fraction(gT, (oz * kh), a)
3626- if ((w > ky))
3621+ let kw = split(gu.description, "_")
3622+ let ki = dK(kw[do])
3623+ let oA = kh(Q, ki)
3624+ let gT = (aA - oz)
3625+ let kz = fraction(gT, (oA * ki), a)
3626+ if ((w > kz))
36273627 then eU
36283628 else (eU :+ Q)
36293629 }
36303630 }
36313631 else eU
36323632 }
36333633
3634- let oA = {
3635- let eW = ou
3634+ let oB = {
3635+ let eW = ov
36363636 let eX = size(eW)
36373637 let eY = nil
36383638 func eZ (fa,fb) = if ((fb >= eX))
36393639 then fa
3640- else ov(fa, eW[fb])
3640+ else ow(fa, eW[fb])
36413641
36423642 func fc (fa,fb) = if ((fb >= eX))
36433643 then fa
36443644 else throw("List size exceeds 10")
36453645
36463646 fc(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eY, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
36473647 }
3648- if ((size(oA) == 0))
3648+ if ((size(oB) == 0))
36493649 then throw("No candidates for robbery")
36503650 else {
3651- let oB = dV(size(oA), jP, jQ)
3652- let Q = oA[oB]
3653- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ ml), Q)
3651+ let oC = dV(size(oB), jQ, jR)
3652+ let Q = oB[oC]
3653+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ mm), Q)
36543654 }
36553655 }
36563656 }
36573657 }
36583658 }
36593659 }
36603660 }
36613661 }
36623662
36633663
36643664
36653665 @Callable(gN)
3666-func robLand (jP,jQ) = {
3667- let ml = mh(gN)
3668- if (!(sigVerify_8Kb(jP, jQ, ec)))
3666+func robLand (jQ,jR) = {
3667+ let mm = mi(gN)
3668+ if (!(sigVerify_8Kb(jQ, jR, ec)))
36693669 then throw("signature does not match")
36703670 else {
36713671 let bQ = toString(gN.caller)
36723672 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
36733673 let aA = lastBlock.timestamp
3674- $Tuple2((ml :+ IntegerEntry(N(B), aA)), 0)
3674+ $Tuple2((mm :+ IntegerEntry(N(B), aA)), 0)
36753675 }
36763676 }
36773677
36783678
36793679
36803680 @Callable(gN)
36813681 func acceptDelivery () = {
3682- let ml = mh(gN)
3682+ let mm = mi(gN)
36833683 let bQ = toString(gN.caller)
36843684 let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3685- let oC = valueOrElse(getInteger(di, bS), 0)
3686- let ly = valueOrElse(getInteger(di, bT), 0)
3687- if ((aP > (oC - ly)))
3688- then throw(((("Delivery is not available, fund=" + dP(oC, 6)) + ", locked=") + dP(ly, 6)))
3685+ let oD = valueOrElse(getInteger(di, bS), 0)
3686+ let lz = valueOrElse(getInteger(di, bT), 0)
3687+ if ((aP > (oD - lz)))
3688+ then throw(((("Delivery is not available, fund=" + dP(oD, 6)) + ", locked=") + dP(lz, 6)))
36893689 else {
36903690 let aA = lastBlock.timestamp
3691- let oD = valueOrElse(getInteger(U(B)), 0)
3692- if ((oD > aA))
3693- then throw(("Delivery is forbidden for your duck until " + toString(oD)))
3691+ let oE = valueOrElse(getInteger(U(B)), 0)
3692+ if ((oE > aA))
3693+ then throw(("Delivery is forbidden for your duck until " + toString(oE)))
36943694 else {
36953695 let av = getIntegerValue(A(B))
36963696 if ((0 >= av))
36973697 then throw("You cannot accept delivery with zero health")
36983698 else {
3699- let lx = V(bQ)
3700- let fU = valueOrElse(getInteger(lx), 0)
3701- let oE = valueOrElse(getInteger(W(bQ)), 0)
3702- let oF = (aA / a)
3703- let oG = valueOrElse(getInteger(dm, d(bQ)), 0)
3704- let oH = (aR + (oG / aS))
3705- if (if ((fU >= oH))
3706- then (oE == oF)
3699+ let ly = V(bQ)
3700+ let fU = valueOrElse(getInteger(ly), 0)
3701+ let oF = valueOrElse(getInteger(W(bQ)), 0)
3702+ let oG = (aA / a)
3703+ let oH = valueOrElse(getInteger(dm, d(bQ)), 0)
3704+ let oI = (aR + (oH / aS))
3705+ if (if ((fU >= oI))
3706+ then (oF == oG)
37073707 else false)
3708- then throw((("You already used " + toString(oH)) + " delivery attempts for today"))
3709- else if (lp(B))
3708+ then throw((("You already used " + toString(oI)) + " delivery attempts for today"))
3709+ else if (lq(B))
37103710 then throw("acceptDelivery_checkTournament")
3711- else if (lq(B))
3711+ else if (lr(B))
37123712 then throw("acceptDelivery_checkDelivery")
37133713 else {
3714- let oI = dF(invoke(di, "updateDeliveryLocked", [(ly + aP)], nil))
3715- let op = bO(B)
3716- let kp = valueOrElse(getString(op), aM)
3717- let oJ = (toString(aA) + "_D_0")
3718- $Tuple2(([StringEntry(L(B), kp), StringEntry(op, oJ), IntegerEntry(lx, if ((oE != oF))
3714+ let oJ = dF(invoke(di, "updateDeliveryLocked", [(lz + aP)], nil))
3715+ let oq = bO(B)
3716+ let kq = valueOrElse(getString(oq), aM)
3717+ let oK = (toString(aA) + "_D_0")
3718+ $Tuple2(([StringEntry(L(B), kq), StringEntry(oq, oK), IntegerEntry(ly, if ((oF != oG))
37193719 then 0
3720- else fU)] ++ ml), $Tuple2(oJ, oI))
3720+ else fU)] ++ mm), $Tuple2(oK, oJ))
37213721 }
37223722 }
37233723 }
37243724 }
37253725 }
37263726
37273727
37283728
37293729 @Callable(gN)
37303730 func checkDeliveryCallback (B) = if ((gN.caller != dl))
37313731 then throw("Access denied")
3732- else $Tuple2(nil, lq(B))
3733-
3734-
3735-
3736-@Callable(gN)
3737-func genTestREADONLY (iy,gK) = {
3738- let jK = hi(toBigInt(sha256(toBytes(iy))))
3739- $Tuple2(nil, hz(jK, gK))
3732+ else $Tuple2(nil, lr(B))
3733+
3734+
3735+
3736+@Callable(gN)
3737+func genTestREADONLY (iz,gK) = {
3738+ let oL = value(value(blockInfoByHeight(2827006)).vrf)
3739+ let jL = hi(toBigInt((oL + sha256(toBytes(iz)))))
3740+ $Tuple2(nil, hz(jL, gK))
37403741 }
37413742
37423743

github/deemru/w8io/026f985 
1055.48 ms