tx · EL2Xou7JPE4n1YSL6rvU8uSqZxH2w6NNRzURRatL4upC 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.07400000 Waves 2023.07.19 20:15 [2673028] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "EL2Xou7JPE4n1YSL6rvU8uSqZxH2w6NNRzURRatL4upC", "fee": 7400000, "feeAssetId": null, "timestamp": 1689786957044, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "3727u5eaysvjpH7PCUGtL8uQW8QtSYsJEnh5wMVNHBve2jS9qo6M4vXTURKwWjvjpvfTidYzicGvRRDPcV5nUqFQ" ], "script": "base64:BgKyAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQjNAQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAAd4cENsYWltAKCNBgAPeHBTdWNjZXNzRmxpZ2h0ANCGAwAMeHBGYWlsRmxpZ2h0AJBOAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAlrECAAp4cE5ld1NMYW5kAIDh6xcADnhwVXBncmFkZUluZnJhAKCNBgAHeHBNZXJnZQCAreIEAAl4cE9uYm9hcmQAgK3iBAAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sACkFSVFBSRVNBTEUCB1BSRVNBTEUABk5VTVJFUwAGAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAJREFZTUlMTElTAIC4mSkADFdITVVMVElQTElFUgCAyK+gJQAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAApFU1NFTExDT0VGAAoACXByb2RUeXBlcwkAzAgCAhBGaXJzdCBBaWQgS2l0IEwxCQDMCAICEEZpcnN0IEFpZCBLaXQgTDIJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMwkAzAgCAgtCYWNrcGFjayBMMQkAzAgCAgtCYWNrcGFjayBMMgkAzAgCAgtCYWNrcGFjayBMMwkAzAgCAg5Gb29kIFJhdGlvbiBMMQkAzAgCAg5Gb29kIFJhdGlvbiBMMgkAzAgCAg5Gb29kIFJhdGlvbiBMMwkAzAgCAgtKZXQgUGFjayBMMQkAzAgCAgtKZXQgUGFjayBMMgkAzAgCAgtKZXQgUGFjayBMMwkAzAgCAglTaGllbGQgTDEJAMwIAgIJU2hpZWxkIEwyCQDMCAICCVNoaWVsZCBMMwUDbmlsAApjb250aW5lbnRzCQDMCAICCEFtZXJpY2FzCQDMCAICBkV1cm9wZQkAzAgCAgRBc2lhCQDMCAICBkFmcmljYQkAzAgCAgdPY2VhbmlhBQNuaWwACUNPRUZGMk1BVACAreIEABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIiOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXwkAzAgCAiI4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8JAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzUwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfNzBfMCwwLDAsMCwwLDAsMF8yMDEFA25pbAAJcklkeENvZWZmAAYACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUAA9LU0FMTE9XWFBMRVZFTFMGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAMDPJAMJAAACAQFUBQckbWF0Y2gwAODUAwkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDgAgMLXLwAFU1NJWkUAGQAFTVNJWkUAZAAFTFNJWkUA4QEABlhMU0laRQCQAwAHWFhMU0laRQDxBAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAEUlkeENmZ0Vjb25vbXlEYXBwAAIAFElkeENmZ0dvdmVybmFuY2VEYXBwAAMADUlkeENmZ1dsZ0RhcHAABAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwERa2V5UmVzUHJvcG9ydGlvbnMAAhNyZXNUeXBlc1Byb3BvcnRpb25zARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEPbnVtUGllY2VzQnlTaXplAQhsYW5kU2l6ZQQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAUFU1NJWkUDCQAAAgIBTQUHJG1hdGNoMAUFTVNJWkUDCQAAAgIBTAUHJG1hdGNoMAUFTFNJWkUDCQAAAgICWEwFByRtYXRjaDAFBlhMU0laRQMJAAACAgNYWEwFByRtYXRjaDAFB1hYTFNJWkUJAAIBAhFVbmtub3duIGxhbmQgc2l6ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgADcHViASBPU+IaP1So1p1SThMdRidVvbNT8yx7yVRUsP9DwbQUKAAIbWVkS2l0SHAJAMwIAgAeCQDMCAIAPAkAzAgCAHgFA25pbAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ABUZJVkVYCQC2AgEABQAHVFdFTlRZWAkAtgIBABQACFRXRU5UWTJYCQC2AgEJAGgCABQAFAAIVFdFTlRZM1gJALYCAQkAaAIJAGgCABQAFAAUAAhUV0VOVFk0WAkAtgIBCQBoAgkAaAIJAGgCABQAFAAUABQACFRXRU5UWTVYCQC2AgEJAGgCCQBoAgkAaAIJAGgCABQAFAAUABQAFAAPUFJFU0FMRU5VTUxBTkRTAPQDARJrZXlOZXh0RnJlZUxhbmROdW0AAgtuZXh0TGFuZE51bQEQa2V5TGFuZFRvQXNzZXRJZAEHbGFuZE51bQkArAICAgxsYW5kVG9Bc3NldF8FB2xhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWxhbmRCeUN1c3RvbU5hbWVfBQRuYW1lAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAhxpbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXJfBQdhc3NldElkAgFfBQlvd25lckFkZHIBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBHR5cGUHYXNzZXRJZAlvd25lckFkZHIJALkJAgkAzAgCAiJsYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAkAzAgCBQlvd25lckFkZHIFA25pbAIBXwERa2V5TGFuZE51bVRvT3duZXIBB2xhbmROdW0JAKwCAgIKbGFuZE93bmVyXwUHbGFuZE51bQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRZHVja0J5Q3VzdG9tTmFtZV8FBG5hbWUBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBG5hbWUJAKwCAgIUYWNjb3VudEJ5Q3VzdG9tTmFtZV8FBG5hbWUBCWtleU9sZGllcwACCm9sZGllc0xpc3QAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFdG90YWwHd2VpZ2h0cwQDc3VtCQBkAgkAZAIJAGQCCQBkAgkAZAIJAJEDAgUHd2VpZ2h0cwAACQCRAwIFB3dlaWdodHMAAQkAkQMCBQd3ZWlnaHRzAAIJAJEDAgUHd2VpZ2h0cwADCQCRAwIFB3dlaWdodHMABAkAkQMCBQd3ZWlnaHRzAAUDCQBnAgAABQNzdW0JAAIBAhBaZXJvIHdlaWdodHMgc3VtBAVub3JtNgkAawMFBXRvdGFsBQVNVUxUNgUDc3VtCgEKbm9ybWFsaXplcgIDYWNjBGVsZW0JAM0IAgUDYWNjCQBrAwUEZWxlbQUFbm9ybTYFBU1VTFQ2CgACJGwFB3dlaWdodHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm5vcm1hbGl6ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEmdldE5lZWRlZE1hdGVyaWFscwEFdG90YWwEBXByb3BzCQC1CQIJAQV2YWx1ZQEJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAIBXwMJAQIhPQIJAJADAQUFcHJvcHMFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEEAXIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAAJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAIJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAMJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAQJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXByb3BzAAUFA25pbAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQV0b3RhbAUBcgERc3VidHJhY3RNYXRlcmlhbHMDDHNob3VsZFVzZU1hdANoYXMJdG90YWxOZWVkBARuZWVkCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJdG90YWxOZWVkCgEKc3VidHJhY3RvcgIDYWNjA2lkeAQGcmVzdWx0CQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2hhcwUDaWR4CQCRAwIFBG5lZWQFA2lkeAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhhOb3QgZW5vdWdoIG1hdGVyaWFsIGlkeD0JAKQDAQUDaWR4AgssIHlvdSBoYXZlIAkAkQMCBQNoYXMFA2lkeAILLCBidXQgbmVlZCAJAKQDAQkAkQMCBQRuZWVkBQNpZHgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAMFDHNob3VsZFVzZU1hdAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwEQc3VidHJhY3RQcm9kdWN0cwIEcEhhcwVwVXNlZAMJAAACBQVwVXNlZAIABQRwSGFzBAVwTGlzdAMJAAACBQRwSGFzAgAFA25pbAkAtQkCBQRwSGFzAgFfCgEEc3ViUAIDYWNjBGl0ZW0EAWoIBQNhY2MC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cGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcKAQRhZGRQAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqAhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAVpc0JpZwMJAQEhAQUKaXNQb3NpdGl2ZQQGY29tcGF0CQCRAwIJALUJAgUEaXRlbQIBXwUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEDCQECIT0CBQpwcm9kdWN0SWR4BQFqBQRjdXJyCQBk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OjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8y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b2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCs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bGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI4MTIzMjg2NjIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjgxMjMyODY2MgJfMQQGZHVja0lkCAUNJHQwMjgxMjMyODY2MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTAzNjMxOTA3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMTAzNjMxOTA3Al8xBAVicFJlcwgFDSR0MDMxMDM2MzE5MDcCXzIEBWxvZnRPCAUNJHQwMzEwMzYzMTkwNwJfMwQFbG9mdEYIBQ0kdDAzMTAzNjMxOTA3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCIBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkAkQMCBQhtZWRLaXRIcAUBbgUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25lTGFuZAIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAhs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AAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQGYnBQcm9kCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QEBXBMaXN0AwkAAAIFBmJwUHJvZAIABQNuaWwJALUJAgUGYnBQcm9kAgFfBAh0ZW1wUHJvZAkBBWRyZXNzAwULY3VycmVudFNlZ3MFBXBMaXN0BgQHbmV3UHJvZAkBBWRyZXNzAwUFbmV3RXEFCHRlbXBQcm9kBwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAgUHbmV3UHJvZAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAAAsA4g6w==", "height": 2673028, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GJdS8zUHF8CeiHdC2efy44VeWkNejZaHty4K7ZxowFkg Next: E9w2WP9s2HdvRQ2j5JGWRysKWfVfj82kg2rgmt4qt6Te Diff:
Old | New | Differences | |
---|---|---|---|
116 | 116 | ||
117 | 117 | let ae = 10 | |
118 | 118 | ||
119 | - | let af = 0 | |
120 | - | ||
121 | - | let ag = 1 | |
122 | - | ||
123 | - | let ah = 2 | |
124 | - | ||
125 | - | let ai = 3 | |
126 | - | ||
127 | - | let aj = 4 | |
128 | - | ||
129 | - | let ak = 0 | |
130 | - | ||
131 | - | let al = 1 | |
132 | - | ||
133 | - | let am = 2 | |
134 | - | ||
135 | - | let an = 3 | |
136 | - | ||
137 | - | let ao = 0 | |
138 | - | ||
139 | - | let ap = 1 | |
140 | - | ||
141 | - | let aq = 2 | |
142 | - | ||
143 | - | let ar = 3 | |
144 | - | ||
145 | - | func as (b) = ("lastTxIdByUser_" + b) | |
146 | - | ||
147 | - | ||
148 | - | func at (au) = ("nftOwner_" + au) | |
149 | - | ||
150 | - | ||
151 | - | func av (au) = ("landCustomNameByAssetId_" + au) | |
152 | - | ||
153 | - | ||
154 | - | func aw (au) = ("stakedTime_" + au) | |
155 | - | ||
156 | - | ||
157 | - | func ax (au) = ("infraLevel_" + au) | |
158 | - | ||
159 | - | ||
160 | - | func ay (az,au) = makeString(["landArtStatus", az, au], "_") | |
161 | - | ||
162 | - | ||
163 | - | func aA (aB,au,aC) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aB) + "_") + au) + "_") + aC) | |
164 | - | ||
165 | - | ||
166 | - | func aD (aE) = ("wareHouse_" + aE) | |
167 | - | ||
168 | - | ||
169 | - | func aF (au) = ("duckCustomNameByAssetId_" + au) | |
170 | - | ||
171 | - | ||
172 | - | func aG (b) = ("accountCustomNameByAddr_" + b) | |
173 | - | ||
174 | - | ||
175 | - | func aH (b) = ("accRefBy_" + b) | |
176 | - | ||
177 | - | ||
178 | - | func aI (p) = ("onboardArtActivatedOnDuck_" + p) | |
179 | - | ||
180 | - | ||
181 | - | func aJ (b) = ("onboardArtActivatedDuckBy_" + b) | |
182 | - | ||
183 | - | ||
184 | - | func aK (b) = ("accReferrals_" + b) | |
185 | - | ||
186 | - | ||
187 | - | func aL (au) = ("duckOwner_" + au) | |
188 | - | ||
189 | - | ||
190 | - | func aM (aC) = ("stakedDuckByOwner_" + aC) | |
191 | - | ||
192 | - | ||
193 | - | func aN (p) = ("backPack_" + p) | |
194 | - | ||
195 | - | ||
196 | - | func aO (p) = ("duckLocation_" + p) | |
197 | - | ||
198 | - | ||
199 | - | func aP (p) = ("duckHealth_" + p) | |
200 | - | ||
201 | - | ||
202 | - | func aQ () = "contractsBlocked" | |
203 | - | ||
204 | - | ||
205 | - | func aR (aS) = ("%s%s__userGwlReleaseTime__" + aS) | |
206 | - | ||
207 | - | ||
208 | - | func aT () = "emergencyWarehouseProducts" | |
209 | - | ||
210 | - | ||
211 | - | let aU = 1 | |
212 | - | ||
213 | - | let aV = 2 | |
214 | - | ||
215 | - | func aW (aX) = (parseIntValue(aX[ad]) * ab) | |
216 | - | ||
217 | - | ||
218 | - | let aY = true | |
219 | - | ||
220 | - | let aZ = take(drop(this.bytes, 1), 1) | |
221 | - | ||
222 | - | let ba = { | |
223 | - | let bb = aZ | |
224 | - | if ((base58'2W' == bb)) | |
119 | + | let af = 10 | |
120 | + | ||
121 | + | let ag = 0 | |
122 | + | ||
123 | + | let ah = 1 | |
124 | + | ||
125 | + | let ai = 2 | |
126 | + | ||
127 | + | let aj = 3 | |
128 | + | ||
129 | + | let ak = 4 | |
130 | + | ||
131 | + | let al = 0 | |
132 | + | ||
133 | + | let am = 1 | |
134 | + | ||
135 | + | let an = 2 | |
136 | + | ||
137 | + | let ao = 3 | |
138 | + | ||
139 | + | let ap = 0 | |
140 | + | ||
141 | + | let aq = 1 | |
142 | + | ||
143 | + | let ar = 2 | |
144 | + | ||
145 | + | let as = 3 | |
146 | + | ||
147 | + | func at (b) = ("lastTxIdByUser_" + b) | |
148 | + | ||
149 | + | ||
150 | + | func au (av) = ("nftOwner_" + av) | |
151 | + | ||
152 | + | ||
153 | + | func aw (av) = ("landCustomNameByAssetId_" + av) | |
154 | + | ||
155 | + | ||
156 | + | func ax (av) = ("stakedTime_" + av) | |
157 | + | ||
158 | + | ||
159 | + | func ay (av) = ("infraLevel_" + av) | |
160 | + | ||
161 | + | ||
162 | + | func az (aA,av) = makeString(["landArtStatus", aA, av], "_") | |
163 | + | ||
164 | + | ||
165 | + | func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD) | |
166 | + | ||
167 | + | ||
168 | + | func aE (aF) = ("wareHouse_" + aF) | |
169 | + | ||
170 | + | ||
171 | + | func aG (av) = ("duckCustomNameByAssetId_" + av) | |
172 | + | ||
173 | + | ||
174 | + | func aH (b) = ("accountCustomNameByAddr_" + b) | |
175 | + | ||
176 | + | ||
177 | + | func aI (b) = ("accRefBy_" + b) | |
178 | + | ||
179 | + | ||
180 | + | func aJ (p) = ("onboardArtActivatedOnDuck_" + p) | |
181 | + | ||
182 | + | ||
183 | + | func aK (b) = ("onboardArtActivatedDuckBy_" + b) | |
184 | + | ||
185 | + | ||
186 | + | func aL (b) = ("accReferrals_" + b) | |
187 | + | ||
188 | + | ||
189 | + | func aM (av) = ("duckOwner_" + av) | |
190 | + | ||
191 | + | ||
192 | + | func aN (aD) = ("stakedDuckByOwner_" + aD) | |
193 | + | ||
194 | + | ||
195 | + | func aO (p) = ("backPack_" + p) | |
196 | + | ||
197 | + | ||
198 | + | func aP (p) = ("duckLocation_" + p) | |
199 | + | ||
200 | + | ||
201 | + | func aQ (p) = ("duckHealth_" + p) | |
202 | + | ||
203 | + | ||
204 | + | func aR () = "contractsBlocked" | |
205 | + | ||
206 | + | ||
207 | + | func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT) | |
208 | + | ||
209 | + | ||
210 | + | func aU () = "emergencyWarehouseProducts" | |
211 | + | ||
212 | + | ||
213 | + | let aV = 1 | |
214 | + | ||
215 | + | let aW = 2 | |
216 | + | ||
217 | + | func aX (aY) = (parseIntValue(aY[ad]) * ab) | |
218 | + | ||
219 | + | ||
220 | + | let aZ = true | |
221 | + | ||
222 | + | let ba = take(drop(this.bytes, 1), 1) | |
223 | + | ||
224 | + | let bb = { | |
225 | + | let bc = ba | |
226 | + | if ((base58'2W' == bc)) | |
225 | 227 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
226 | - | else if ((base58'2T' == | |
228 | + | else if ((base58'2T' == bc)) | |
227 | 229 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
228 | 230 | else throw("Unknown chain") | |
229 | 231 | } | |
230 | 232 | ||
231 | - | let | |
232 | - | let | |
233 | - | if ((base58'2W' == | |
233 | + | let bd = { | |
234 | + | let bc = ba | |
235 | + | if ((base58'2W' == bc)) | |
234 | 236 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
235 | - | else if ((base58'2T' == | |
237 | + | else if ((base58'2T' == bc)) | |
236 | 238 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
237 | 239 | else throw("Unknown chain") | |
238 | 240 | } | |
239 | 241 | ||
240 | - | let | |
241 | - | let | |
242 | - | if ((base58'2W' == | |
242 | + | let be = { | |
243 | + | let bc = ba | |
244 | + | if ((base58'2W' == bc)) | |
243 | 245 | then 10000000000 | |
244 | - | else if ((base58'2T' == | |
246 | + | else if ((base58'2T' == bc)) | |
245 | 247 | then 100000000 | |
246 | 248 | else throw("Unknown chain") | |
247 | 249 | } | |
248 | 250 | ||
249 | - | let | |
250 | - | let | |
251 | - | if ((base58'2W' == | |
251 | + | let bf = { | |
252 | + | let bc = ba | |
253 | + | if ((base58'2W' == bc)) | |
252 | 254 | then 600000 | |
253 | - | else if ((base58'2T' == | |
255 | + | else if ((base58'2T' == bc)) | |
254 | 256 | then 60000 | |
255 | 257 | else throw("Unknown chain") | |
256 | 258 | } | |
257 | 259 | ||
258 | - | let | |
259 | - | ||
260 | - | let | |
261 | - | ||
262 | - | let | |
263 | - | ||
264 | - | let | |
265 | - | ||
266 | - | let | |
267 | - | ||
268 | - | let | |
269 | - | ||
270 | - | let | |
271 | - | ||
272 | - | let | |
273 | - | ||
274 | - | func | |
275 | - | ||
276 | - | ||
277 | - | let | |
278 | - | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | func | |
286 | - | ||
287 | - | ||
288 | - | func | |
289 | - | ||
290 | - | ||
291 | - | func | |
292 | - | ||
293 | - | ||
294 | - | func | |
295 | - | ||
296 | - | ||
297 | - | let | |
298 | - | ||
299 | - | let | |
300 | - | ||
301 | - | let | |
302 | - | ||
303 | - | let | |
304 | - | ||
305 | - | let | |
306 | - | ||
307 | - | let | |
308 | - | ||
309 | - | let | |
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | func | |
318 | - | ||
319 | - | ||
320 | - | func | |
321 | - | ||
322 | - | ||
323 | - | func | |
324 | - | ||
325 | - | ||
326 | - | func | |
327 | - | let | |
328 | - | if ($isInstanceOf( | |
260 | + | let bg = "__" | |
261 | + | ||
262 | + | let bh = 1000000 | |
263 | + | ||
264 | + | let bi = 100000000 | |
265 | + | ||
266 | + | let bj = 25 | |
267 | + | ||
268 | + | let bk = 100 | |
269 | + | ||
270 | + | let bl = 225 | |
271 | + | ||
272 | + | let bm = 400 | |
273 | + | ||
274 | + | let bn = 625 | |
275 | + | ||
276 | + | func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], "")) | |
277 | + | ||
278 | + | ||
279 | + | let br = 1 | |
280 | + | ||
281 | + | let bs = 2 | |
282 | + | ||
283 | + | let bt = 3 | |
284 | + | ||
285 | + | let bu = 4 | |
286 | + | ||
287 | + | func bv () = "%s__restConfig" | |
288 | + | ||
289 | + | ||
290 | + | func bw () = "%s__restAddr" | |
291 | + | ||
292 | + | ||
293 | + | func bx (by) = split_4C(bo(by, bv()), bg) | |
294 | + | ||
295 | + | ||
296 | + | func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB))) | |
297 | + | ||
298 | + | ||
299 | + | let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd)) | |
300 | + | ||
301 | + | let bA = bx(bC) | |
302 | + | ||
303 | + | let bD = bz(bA, br) | |
304 | + | ||
305 | + | let bE = bz(bA, bs) | |
306 | + | ||
307 | + | let bF = bz(bA, bt) | |
308 | + | ||
309 | + | let bG = bz(bA, bu) | |
310 | + | ||
311 | + | let bH = 0 | |
312 | + | ||
313 | + | let bI = 1 | |
314 | + | ||
315 | + | let bJ = 2 | |
316 | + | ||
317 | + | let bK = 3 | |
318 | + | ||
319 | + | func bL () = "resTypesProportions" | |
320 | + | ||
321 | + | ||
322 | + | func bM (aD) = ("stakedLandsByOwner_" + aD) | |
323 | + | ||
324 | + | ||
325 | + | func bN (aD) = ("stakedPiecesByOwner_" + aD) | |
326 | + | ||
327 | + | ||
328 | + | func bO (bP) = { | |
329 | + | let bc = bP | |
330 | + | if ($isInstanceOf(bc, "String")) | |
329 | 331 | then { | |
330 | - | let | |
331 | - | | |
332 | + | let bQ = bc | |
333 | + | bQ | |
332 | 334 | } | |
333 | 335 | else throw("fail to cast into String") | |
334 | 336 | } | |
335 | 337 | ||
336 | 338 | ||
337 | - | func | |
338 | - | let | |
339 | - | if ($isInstanceOf( | |
339 | + | func bR (bP) = { | |
340 | + | let bc = bP | |
341 | + | if ($isInstanceOf(bc, "Int")) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | | |
343 | + | let bS = bc | |
344 | + | bS | |
343 | 345 | } | |
344 | 346 | else throw("fail to cast into Int") | |
345 | 347 | } | |
346 | 348 | ||
347 | 349 | ||
348 | - | func | |
349 | - | let | |
350 | - | if (("S" == | |
351 | - | then | |
352 | - | else if (("M" == | |
353 | - | then | |
354 | - | else if (("L" == | |
355 | - | then | |
356 | - | else if (("XL" == | |
357 | - | then | |
358 | - | else if (("XXL" == | |
359 | - | then | |
350 | + | func bT (bU) = { | |
351 | + | let bc = bU | |
352 | + | if (("S" == bc)) | |
353 | + | then bj | |
354 | + | else if (("M" == bc)) | |
355 | + | then bk | |
356 | + | else if (("L" == bc)) | |
357 | + | then bl | |
358 | + | else if (("XL" == bc)) | |
359 | + | then bm | |
360 | + | else if (("XXL" == bc)) | |
361 | + | then bn | |
360 | 362 | else throw("Unknown land size") | |
361 | 363 | } | |
362 | 364 | ||
363 | 365 | ||
364 | - | let | |
365 | - | let | |
366 | - | if ((base58'2W' == | |
366 | + | let bV = { | |
367 | + | let bc = ba | |
368 | + | if ((base58'2W' == bc)) | |
367 | 369 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
368 | - | else if ((base58'2T' == | |
370 | + | else if ((base58'2T' == bc)) | |
369 | 371 | then this | |
370 | 372 | else throw("Unknown chain") | |
371 | 373 | } | |
372 | 374 | ||
373 | - | let | |
374 | - | let | |
375 | - | if ((base58'2W' == | |
375 | + | let bW = { | |
376 | + | let bc = ba | |
377 | + | if ((base58'2W' == bc)) | |
376 | 378 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
377 | - | else if ((base58'2T' == | |
379 | + | else if ((base58'2T' == bc)) | |
378 | 380 | then this | |
379 | 381 | else throw("Unknown chain") | |
380 | 382 | } | |
381 | 383 | ||
382 | - | let | |
383 | - | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | let | |
396 | - | if ((base58'2W' == | |
384 | + | let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
385 | + | ||
386 | + | let bY = [30, 60, 120] | |
387 | + | ||
388 | + | let bZ = 300000 | |
389 | + | ||
390 | + | let ca = 5000000 | |
391 | + | ||
392 | + | let cb = 50 | |
393 | + | ||
394 | + | let cc = 10000000 | |
395 | + | ||
396 | + | let cd = { | |
397 | + | let bc = ba | |
398 | + | if ((base58'2W' == bc)) | |
397 | 399 | then 252289527462 | |
398 | - | else if ((base58'2T' == | |
400 | + | else if ((base58'2T' == bc)) | |
399 | 401 | then 2522895274 | |
400 | 402 | else throw("Unknown chain") | |
401 | 403 | } | |
402 | 404 | ||
403 | - | let | |
404 | - | let | |
405 | - | if ((base58'2W' == | |
405 | + | let ce = { | |
406 | + | let bc = ba | |
407 | + | if ((base58'2W' == bc)) | |
406 | 408 | then 250000000 | |
407 | - | else if ((base58'2T' == | |
409 | + | else if ((base58'2T' == bc)) | |
408 | 410 | then 250000000 | |
409 | 411 | else throw("Unknown chain") | |
410 | 412 | } | |
411 | 413 | ||
412 | - | let | |
413 | - | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | func | |
427 | - | ||
428 | - | ||
429 | - | func | |
430 | - | ||
431 | - | ||
432 | - | func | |
433 | - | ||
434 | - | ||
435 | - | func | |
436 | - | ||
437 | - | ||
438 | - | func | |
439 | - | ||
440 | - | ||
441 | - | func | |
442 | - | ||
443 | - | ||
444 | - | func | |
445 | - | ||
446 | - | ||
447 | - | func | |
448 | - | ||
449 | - | ||
450 | - | func | |
451 | - | ||
452 | - | ||
453 | - | let | |
454 | - | ||
455 | - | let | |
456 | - | ||
457 | - | let | |
458 | - | ||
459 | - | let | |
460 | - | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | func | |
468 | - | ||
469 | - | ||
470 | - | func | |
471 | - | let | |
472 | - | if ((0 >= | |
414 | + | let cf = toBigInt(5) | |
415 | + | ||
416 | + | let cg = toBigInt(20) | |
417 | + | ||
418 | + | let ch = toBigInt((20 * 20)) | |
419 | + | ||
420 | + | let ci = toBigInt(((20 * 20) * 20)) | |
421 | + | ||
422 | + | let cj = toBigInt((((20 * 20) * 20) * 20)) | |
423 | + | ||
424 | + | let ck = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
425 | + | ||
426 | + | let cl = 500 | |
427 | + | ||
428 | + | func cm () = "nextLandNum" | |
429 | + | ||
430 | + | ||
431 | + | func cn (co) = ("landToAsset_" + co) | |
432 | + | ||
433 | + | ||
434 | + | func cp (cq) = ("landByCustomName_" + cq) | |
435 | + | ||
436 | + | ||
437 | + | func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD) | |
438 | + | ||
439 | + | ||
440 | + | func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_") | |
441 | + | ||
442 | + | ||
443 | + | func ct (co) = ("landOwner_" + co) | |
444 | + | ||
445 | + | ||
446 | + | func cu (cq) = ("duckByCustomName_" + cq) | |
447 | + | ||
448 | + | ||
449 | + | func cv (cq) = ("accountByCustomName_" + cq) | |
450 | + | ||
451 | + | ||
452 | + | func cw () = "oldiesList" | |
453 | + | ||
454 | + | ||
455 | + | let cx = 0 | |
456 | + | ||
457 | + | let cy = 1 | |
458 | + | ||
459 | + | let cz = 2 | |
460 | + | ||
461 | + | let cA = 0 | |
462 | + | ||
463 | + | let cB = 5 | |
464 | + | ||
465 | + | let cC = 6 | |
466 | + | ||
467 | + | let cD = 7 | |
468 | + | ||
469 | + | func cE (co,bU) = ((P + co) + bU) | |
470 | + | ||
471 | + | ||
472 | + | func cF (cG,cH) = { | |
473 | + | let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5]) | |
474 | + | if ((0 >= cI)) | |
473 | 475 | then throw("Zero weights sum") | |
474 | 476 | else { | |
475 | - | let | |
476 | - | func | |
477 | - | ||
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | func | |
482 | - | then | |
483 | - | else | |
484 | - | ||
485 | - | func | |
486 | - | then | |
477 | + | let cJ = fraction(cG, bh, cI) | |
478 | + | func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh)) | |
479 | + | ||
480 | + | let cN = cH | |
481 | + | let cO = size(cN) | |
482 | + | let cP = nil | |
483 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
484 | + | then cR | |
485 | + | else cK(cR, cN[cS]) | |
486 | + | ||
487 | + | func cT (cR,cS) = if ((cS >= cO)) | |
488 | + | then cR | |
487 | 489 | else throw("List size exceeds 6") | |
488 | 490 | ||
489 | - | | |
490 | - | } | |
491 | - | } | |
492 | - | ||
493 | - | ||
494 | - | func | |
495 | - | let | |
496 | - | if ((size( | |
491 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
492 | + | } | |
493 | + | } | |
494 | + | ||
495 | + | ||
496 | + | func cU (cG) = { | |
497 | + | let cV = split(value(getString(bL())), "_") | |
498 | + | if ((size(cV) != S)) | |
497 | 499 | then throw("Wrong proportions data") | |
498 | 500 | else { | |
499 | - | let | |
500 | - | | |
501 | - | } | |
502 | - | } | |
503 | - | ||
504 | - | ||
505 | - | func | |
506 | - | let | |
507 | - | func | |
508 | - | let | |
509 | - | if ((0 > | |
510 | - | then throw(((((("Not enough material idx=" + toString( | |
511 | - | else ( | |
501 | + | let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])] | |
502 | + | cF(cG, cW) | |
503 | + | } | |
504 | + | } | |
505 | + | ||
506 | + | ||
507 | + | func cX (cY,cZ,da) = { | |
508 | + | let db = cU(da) | |
509 | + | func dc (cL,bB) = { | |
510 | + | let dd = (parseIntValue(cZ[bB]) - db[bB]) | |
511 | + | if ((0 > dd)) | |
512 | + | then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB]))) | |
513 | + | else (cL :+ toString(dd)) | |
512 | 514 | } | |
513 | 515 | ||
514 | - | if ( | |
516 | + | if (cY) | |
515 | 517 | then { | |
516 | - | let | |
517 | - | let | |
518 | - | let | |
519 | - | func | |
520 | - | then | |
521 | - | else | |
522 | - | ||
523 | - | func | |
524 | - | then | |
518 | + | let cN = [0, 1, 2, 3, 4, 5] | |
519 | + | let cO = size(cN) | |
520 | + | let cP = nil | |
521 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
522 | + | then cR | |
523 | + | else dc(cR, cN[cS]) | |
524 | + | ||
525 | + | func cT (cR,cS) = if ((cS >= cO)) | |
526 | + | then cR | |
525 | 527 | else throw("List size exceeds 6") | |
526 | 528 | ||
527 | - | | |
528 | - | } | |
529 | - | else | |
530 | - | } | |
531 | - | ||
532 | - | ||
533 | - | func | |
534 | - | then | |
529 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
530 | + | } | |
531 | + | else cZ | |
532 | + | } | |
533 | + | ||
534 | + | ||
535 | + | func de (df,dg) = if ((dg == "")) | |
536 | + | then df | |
535 | 537 | else { | |
536 | - | let | |
538 | + | let dh = if ((df == "")) | |
537 | 539 | then nil | |
538 | - | else split( | |
539 | - | func | |
540 | - | let | |
541 | - | func | |
542 | - | let | |
543 | - | if ((size( | |
540 | + | else split(df, "_") | |
541 | + | func di (cL,dj) = { | |
542 | + | let dk = cL._1 | |
543 | + | func dl (dm,dn) = { | |
544 | + | let do = split(dn, ",") | |
545 | + | if ((size(do) != 2)) | |
544 | 546 | then throw("Incorrect format, should be index,amount") | |
545 | 547 | else { | |
546 | - | let | |
547 | - | if (if ((0 > | |
548 | + | let bB = parseIntValue(do[0]) | |
549 | + | if (if ((0 > bB)) | |
548 | 550 | then true | |
549 | - | else ( | |
551 | + | else (bB >= size(ac))) | |
550 | 552 | then throw("Unknown product idx") | |
551 | - | else if (( | |
552 | - | then | |
553 | + | else if ((bB != dk)) | |
554 | + | then dm | |
553 | 555 | else { | |
554 | - | let | |
555 | - | if ((0 >= | |
556 | + | let dp = parseIntValue(do[1]) | |
557 | + | if ((0 >= dp)) | |
556 | 558 | then throw("Pass only positive amounts") | |
557 | - | else ( | |
559 | + | else (dm + dp) | |
558 | 560 | } | |
559 | 561 | } | |
560 | 562 | } | |
561 | 563 | ||
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | let | |
566 | - | func | |
567 | - | then | |
568 | - | else | |
569 | - | ||
570 | - | func | |
571 | - | then | |
564 | + | let dq = { | |
565 | + | let cN = split(dg, "_") | |
566 | + | let cO = size(cN) | |
567 | + | let cP = 0 | |
568 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
569 | + | then cR | |
570 | + | else dl(cR, cN[cS]) | |
571 | + | ||
572 | + | func cT (cR,cS) = if ((cS >= cO)) | |
573 | + | then cR | |
572 | 574 | else throw("List size exceeds 10") | |
573 | 575 | ||
574 | - | | |
576 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
575 | 577 | } | |
576 | - | let | |
577 | - | then parseIntValue( | |
578 | + | let dr = if ((size(dh) > dk)) | |
579 | + | then parseIntValue(dh[dk]) | |
578 | 580 | else 0 | |
579 | - | let | |
580 | - | then ( | |
581 | - | else throw(((((("You have " + toString( | |
582 | - | $Tuple2(( | |
583 | - | } | |
584 | - | ||
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | func | |
590 | - | then | |
591 | - | else | |
592 | - | ||
593 | - | func | |
594 | - | then | |
581 | + | let ds = if ((dr >= dq)) | |
582 | + | then (dr - dq) | |
583 | + | else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq))) | |
584 | + | $Tuple2((dk + 1), (cL._2 :+ toString(ds))) | |
585 | + | } | |
586 | + | ||
587 | + | let dt = { | |
588 | + | let cN = ac | |
589 | + | let cO = size(cN) | |
590 | + | let cP = $Tuple2(0, nil) | |
591 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
592 | + | then cR | |
593 | + | else di(cR, cN[cS]) | |
594 | + | ||
595 | + | func cT (cR,cS) = if ((cS >= cO)) | |
596 | + | then cR | |
595 | 597 | else throw("List size exceeds 50") | |
596 | 598 | ||
597 | - | | |
598 | - | } | |
599 | - | makeString( | |
599 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
600 | + | } | |
601 | + | makeString(dt._2, "_") | |
600 | 602 | } | |
601 | 603 | ||
602 | 604 | ||
603 | - | func | |
604 | - | let | |
605 | - | if ((size( | |
605 | + | func du (dv,dh,dw,dx,dy,dz) = { | |
606 | + | let do = split(dv, ":") | |
607 | + | if ((size(do) != 2)) | |
606 | 608 | then throw("Incorrect format, should be index:amount") | |
607 | 609 | else { | |
608 | - | let | |
609 | - | let | |
610 | - | if (if ((0 > | |
610 | + | let dA = parseIntValue(do[0]) | |
611 | + | let dB = parseIntValue(do[1]) | |
612 | + | if (if ((0 > dA)) | |
611 | 613 | then true | |
612 | - | else ( | |
614 | + | else (dA >= size(ac))) | |
613 | 615 | then throw("Unknown product idx") | |
614 | - | else if ((0 > | |
616 | + | else if ((0 > dB)) | |
615 | 617 | then throw("Count can't be negative") | |
616 | - | else if (( | |
617 | - | then | |
618 | + | else if ((dB == 0)) | |
619 | + | then $Tuple2(dh, false) | |
618 | 620 | else { | |
619 | - | func | |
620 | - | let | |
621 | - | let | |
622 | - | then parseIntValue( | |
621 | + | func dC (cL,dj) = { | |
622 | + | let dk = cL._1 | |
623 | + | let dr = if ((size(dh) > dk)) | |
624 | + | then parseIntValue(dh[dk]) | |
623 | 625 | else 0 | |
624 | - | if (if (!( | |
625 | - | then ( | |
626 | + | if (if (!(dw)) | |
627 | + | then (dB > dr) | |
626 | 628 | else false) | |
627 | - | then throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dx))) | |
628 | - | else $Tuple2((dj + 1), (cK._2 :+ toString(if ((dw != dj)) | |
629 | - | then dq | |
630 | - | else (dq + (if (dv) | |
631 | - | then dx | |
632 | - | else -(dx)))))) | |
629 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB))) | |
630 | + | else { | |
631 | + | let dD = if (!(dw)) | |
632 | + | then { | |
633 | + | let dE = split(dj, "_")[ae] | |
634 | + | if ((dE == "")) | |
635 | + | then throw("Item cannot be equipped") | |
636 | + | else { | |
637 | + | let dF = parseIntValue(dE) | |
638 | + | let dG = (dF / 100) | |
639 | + | if ((dx != dG)) | |
640 | + | then throw("Segment incompatible") | |
641 | + | else { | |
642 | + | let dH = ((dF % 100) / 10) | |
643 | + | if ((dy != dH)) | |
644 | + | then throw("Slot incompatible") | |
645 | + | else { | |
646 | + | let dI = (dF % 10) | |
647 | + | if (if ((dz != 0)) | |
648 | + | then (dI > 1) | |
649 | + | else false) | |
650 | + | then throw("Big items should occupy slot 0") | |
651 | + | else (dI > 1) | |
652 | + | } | |
653 | + | } | |
654 | + | } | |
655 | + | } | |
656 | + | else false | |
657 | + | $Tuple3((dk + 1), (cL._2 :+ toString(if ((dA != dk)) | |
658 | + | then dr | |
659 | + | else (dr + (if (dw) | |
660 | + | then dB | |
661 | + | else -(dB))))), if (cL._3) | |
662 | + | then true | |
663 | + | else dD) | |
664 | + | } | |
633 | 665 | } | |
634 | 666 | ||
635 | - | ( let cM = ac | |
636 | - | let cN = size(cM) | |
637 | - | let cO = $Tuple2(0, nil) | |
638 | - | func cP (cQ,cR) = if ((cR >= cN)) | |
639 | - | then cQ | |
640 | - | else dy(cQ, cM[cR]) | |
641 | - | ||
642 | - | func cS (cQ,cR) = if ((cR >= cN)) | |
643 | - | then cQ | |
644 | - | else throw("List size exceeds 42") | |
645 | - | ||
646 | - | cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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))._2 | |
667 | + | let dd = { | |
668 | + | let cN = ac | |
669 | + | let cO = size(cN) | |
670 | + | let cP = $Tuple3(0, nil, false) | |
671 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
672 | + | then cR | |
673 | + | else dC(cR, cN[cS]) | |
674 | + | ||
675 | + | func cT (cR,cS) = if ((cS >= cO)) | |
676 | + | then cR | |
677 | + | else throw("List size exceeds 27") | |
678 | + | ||
679 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
680 | + | } | |
681 | + | $Tuple2(dd._2, dd._3) | |
647 | 682 | } | |
648 | 683 | } | |
649 | 684 | } | |
650 | 685 | ||
651 | 686 | ||
652 | - | func | |
687 | + | func dJ (dK,dL,dw,dx,dy) = if ((dK != "")) | |
653 | 688 | then { | |
654 | - | let | |
655 | - | if ((size( | |
689 | + | let dM = split(dK, ",") | |
690 | + | if ((size(dM) > n)) | |
656 | 691 | then throw("Wrong slots format") | |
657 | 692 | else { | |
658 | - | let | |
659 | - | let | |
660 | - | then | |
693 | + | let dN = dM[0] | |
694 | + | let dO = if ((size(dM) > 1)) | |
695 | + | then dM[1] | |
661 | 696 | else "" | |
662 | - | if (if (( | |
663 | - | then ( | |
697 | + | if (if ((dN == "")) | |
698 | + | then (dO == "") | |
664 | 699 | else false) | |
665 | - | then | |
700 | + | then dL | |
666 | 701 | else { | |
667 | - | let dF = if ((dD != "")) | |
668 | - | then dt(dD, dB, dv) | |
669 | - | else dB | |
670 | - | if ((dE != "")) | |
671 | - | then dt(dE, dF, dv) | |
672 | - | else dF | |
702 | + | let dP = if ((dN != "")) | |
703 | + | then du(dN, dL, dw, dx, dy, 0) | |
704 | + | else $Tuple2(dL, false) | |
705 | + | if ((dO != "")) | |
706 | + | then if (dP._2) | |
707 | + | then throw("Big item already occupies slot") | |
708 | + | else du(dO, dP._1, dw, dx, dy, 1)._1 | |
709 | + | else dP._1 | |
673 | 710 | } | |
674 | 711 | } | |
675 | 712 | } | |
676 | - | else dB | |
677 | - | ||
678 | - | ||
679 | - | func dG (dH,dg,dv) = { | |
680 | - | func dI (cK,dJ) = { | |
681 | - | let dK = split(dJ, ";") | |
682 | - | if ((size(dK) != m)) | |
713 | + | else dL | |
714 | + | ||
715 | + | ||
716 | + | func dQ (dR,dh,dw) = { | |
717 | + | func dx (cL,dS) = { | |
718 | + | let dk = cL._1 | |
719 | + | let dy = split(dS, ";") | |
720 | + | if ((size(dy) != m)) | |
683 | 721 | then throw("Wrong segment format") | |
684 | 722 | else { | |
685 | - | let | |
686 | - | let | |
687 | - | if (if (( | |
688 | - | then ( | |
723 | + | let dT = dy[0] | |
724 | + | let dq = dy[1] | |
725 | + | if (if ((dT == "")) | |
726 | + | then (dq == "") | |
689 | 727 | else false) | |
690 | - | then | |
728 | + | then $Tuple2((dk + 1), cL._2) | |
691 | 729 | else { | |
692 | - | let | |
693 | - | | |
730 | + | let dU = dJ(dT, cL._2, dw, dk, 0) | |
731 | + | $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1)) | |
694 | 732 | } | |
695 | 733 | } | |
696 | 734 | } | |
697 | 735 | ||
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | func | |
702 | - | then | |
703 | - | else | |
704 | - | ||
705 | - | func | |
706 | - | then | |
736 | + | ( let cN = dR | |
737 | + | let cO = size(cN) | |
738 | + | let cP = $Tuple2(0, dh) | |
739 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
740 | + | then cR | |
741 | + | else dx(cR, cN[cS]) | |
742 | + | ||
743 | + | func cT (cR,cS) = if ((cS >= cO)) | |
744 | + | then cR | |
707 | 745 | else throw("List size exceeds 6") | |
708 | 746 | ||
709 | - | | |
710 | - | } | |
711 | - | ||
712 | - | ||
713 | - | func | |
747 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2 | |
748 | + | } | |
749 | + | ||
750 | + | ||
751 | + | func dV (dW,dX,dY,dZ) = if ((size(dW) != S)) | |
714 | 752 | then throw("Wrong proportions data") | |
715 | 753 | else { | |
716 | - | func | |
717 | - | let | |
718 | - | if ((0 > | |
719 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
720 | - | else ( | |
721 | - | } | |
722 | - | ||
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | let | |
727 | - | func | |
728 | - | then | |
729 | - | else | |
730 | - | ||
731 | - | func | |
732 | - | then | |
754 | + | func ea (cL,eb) = { | |
755 | + | let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY)) | |
756 | + | if ((0 > dd)) | |
757 | + | then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY))) | |
758 | + | else (cL :+ toString(dd)) | |
759 | + | } | |
760 | + | ||
761 | + | let cW = { | |
762 | + | let cN = [0, 1, 2, 3, 4, 5] | |
763 | + | let cO = size(cN) | |
764 | + | let cP = nil | |
765 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
766 | + | then cR | |
767 | + | else ea(cR, cN[cS]) | |
768 | + | ||
769 | + | func cT (cR,cS) = if ((cS >= cO)) | |
770 | + | then cR | |
733 | 771 | else throw("List size exceeds 6") | |
734 | 772 | ||
735 | - | | |
736 | - | } | |
737 | - | makeString( | |
773 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
774 | + | } | |
775 | + | makeString(cW, "_") | |
738 | 776 | } | |
739 | 777 | ||
740 | 778 | ||
741 | - | func | |
742 | - | let | |
743 | - | | |
744 | - | } | |
745 | - | ||
746 | - | ||
747 | - | func | |
748 | - | ||
749 | - | ||
750 | - | func | |
751 | - | func | |
752 | - | let | |
753 | - | ( | |
779 | + | func ec (dX,dY,dZ) = { | |
780 | + | let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
781 | + | dV(dW, dX, dY, dZ) | |
782 | + | } | |
783 | + | ||
784 | + | ||
785 | + | func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)] | |
786 | + | ||
787 | + | ||
788 | + | func ef (eg,dX,eh,dY,ei) = { | |
789 | + | func ej (cL,eb) = { | |
790 | + | let ek = ((fraction(eh, ei, U) * dX[eb]) * dY) | |
791 | + | (cL :+ toString((parseIntValue(eg[eb]) + ek))) | |
754 | 792 | } | |
755 | 793 | ||
756 | - | let | |
757 | - | let | |
758 | - | let | |
759 | - | let | |
760 | - | func | |
761 | - | then | |
762 | - | else | |
763 | - | ||
764 | - | func | |
765 | - | then | |
794 | + | let cW = { | |
795 | + | let cN = [0, 1, 2, 3, 4, 5] | |
796 | + | let cO = size(cN) | |
797 | + | let cP = nil | |
798 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
799 | + | then cR | |
800 | + | else ej(cR, cN[cS]) | |
801 | + | ||
802 | + | func cT (cR,cS) = if ((cS >= cO)) | |
803 | + | then cR | |
766 | 804 | else throw("List size exceeds 6") | |
767 | 805 | ||
768 | - | | |
806 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
769 | 807 | } | |
770 | - | makeString( | |
771 | - | } | |
772 | - | ||
773 | - | ||
774 | - | func | |
775 | - | func | |
776 | - | let | |
777 | - | $Tuple2(( | |
808 | + | makeString(cW, "_") | |
809 | + | } | |
810 | + | ||
811 | + | ||
812 | + | func el (dX,eh,dY,ei) = { | |
813 | + | func ej (cL,eb) = { | |
814 | + | let ek = ((fraction(eh, ei, U) * dX[eb]) * dY) | |
815 | + | $Tuple2((cL._1 :+ ek), (cL._2 + ek)) | |
778 | 816 | } | |
779 | 817 | ||
780 | - | let | |
781 | - | let | |
782 | - | let | |
783 | - | func | |
784 | - | then | |
785 | - | else | |
786 | - | ||
787 | - | func | |
788 | - | then | |
818 | + | let cN = [0, 1, 2, 3, 4, 5] | |
819 | + | let cO = size(cN) | |
820 | + | let cP = $Tuple2(nil, 0) | |
821 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
822 | + | then cR | |
823 | + | else ej(cR, cN[cS]) | |
824 | + | ||
825 | + | func cT (cR,cS) = if ((cS >= cO)) | |
826 | + | then cR | |
789 | 827 | else throw("List size exceeds 6") | |
790 | 828 | ||
791 | - | | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | let | |
797 | - | let | |
798 | - | if (( | |
799 | - | then $Tuple2(makeString( | |
800 | - | else if (( | |
829 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
830 | + | } | |
831 | + | ||
832 | + | ||
833 | + | func em (en,eo,ep,eq) = { | |
834 | + | let er = ep._1 | |
835 | + | let es = ep._2 | |
836 | + | if ((es == 0)) | |
837 | + | then $Tuple2(makeString(en, "_"), makeString(eo, "_")) | |
838 | + | else if ((eq >= es)) | |
801 | 839 | then { | |
802 | - | func | |
803 | - | ||
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | let | |
808 | - | func | |
809 | - | then | |
810 | - | else | |
811 | - | ||
812 | - | func | |
813 | - | then | |
840 | + | func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb]))) | |
841 | + | ||
842 | + | let cW = { | |
843 | + | let cN = [0, 1, 2, 3, 4, 5] | |
844 | + | let cO = size(cN) | |
845 | + | let cP = nil | |
846 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
847 | + | then cR | |
848 | + | else et(cR, cN[cS]) | |
849 | + | ||
850 | + | func cT (cR,cS) = if ((cS >= cO)) | |
851 | + | then cR | |
814 | 852 | else throw("List size exceeds 6") | |
815 | 853 | ||
816 | - | | |
854 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
817 | 855 | } | |
818 | - | $Tuple2(makeString( | |
856 | + | $Tuple2(makeString(cW, "_"), makeString(eo, "_")) | |
819 | 857 | } | |
820 | 858 | else { | |
821 | - | func | |
822 | - | let | |
823 | - | $Tuple2(( | |
859 | + | func eu (cL,eb) = { | |
860 | + | let ev = fraction(er[eb], eq, es) | |
861 | + | $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev)))) | |
824 | 862 | } | |
825 | 863 | ||
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | func | |
831 | - | then | |
832 | - | else | |
833 | - | ||
834 | - | func | |
835 | - | then | |
864 | + | let cW = { | |
865 | + | let cN = [0, 1, 2, 3, 4, 5] | |
866 | + | let cO = size(cN) | |
867 | + | let cP = $Tuple2(nil, nil) | |
868 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
869 | + | then cR | |
870 | + | else eu(cR, cN[cS]) | |
871 | + | ||
872 | + | func cT (cR,cS) = if ((cS >= cO)) | |
873 | + | then cR | |
836 | 874 | else throw("List size exceeds 6") | |
837 | 875 | ||
838 | - | | |
876 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
839 | 877 | } | |
840 | - | $Tuple2(makeString( | |
878 | + | $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_")) | |
841 | 879 | } | |
842 | 880 | } | |
843 | 881 | ||
844 | 882 | ||
845 | - | func | |
846 | - | then | |
847 | - | else -( | |
848 | - | ||
849 | - | ||
850 | - | let | |
851 | - | ||
852 | - | func | |
853 | - | let | |
854 | - | let | |
883 | + | func ew (ex) = if ((ex >= toBigInt(0))) | |
884 | + | then ex | |
885 | + | else -(ex) | |
886 | + | ||
887 | + | ||
888 | + | let ey = [[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]] | |
889 | + | ||
890 | + | func ez (bS,eA) = { | |
891 | + | let eB = toInt((bS % cg)) | |
892 | + | let eC = if ((eA[0] > eB)) | |
855 | 893 | then "A" | |
856 | - | else if (( | |
894 | + | else if ((eA[1] > eB)) | |
857 | 895 | then "B" | |
858 | - | else if (( | |
896 | + | else if ((eA[2] > eB)) | |
859 | 897 | then "C" | |
860 | - | else if (( | |
898 | + | else if ((eA[3] > eB)) | |
861 | 899 | then "D" | |
862 | - | else if (( | |
900 | + | else if ((eA[4] > eB)) | |
863 | 901 | then "E" | |
864 | 902 | else "F" | |
865 | - | | |
866 | - | } | |
867 | - | ||
868 | - | ||
869 | - | func | |
870 | - | let | |
871 | - | func | |
872 | - | ||
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | func | |
878 | - | then | |
879 | - | else | |
880 | - | ||
881 | - | func | |
882 | - | then | |
903 | + | eC | |
904 | + | } | |
905 | + | ||
906 | + | ||
907 | + | func eD (eE,eF) = { | |
908 | + | let eG = ey[eF] | |
909 | + | func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck)) | |
910 | + | ||
911 | + | let eI = { | |
912 | + | let cN = [1, 2, 3, 4, 5] | |
913 | + | let cO = size(cN) | |
914 | + | let cP = $Tuple2("", (eE / cf)) | |
915 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
916 | + | then cR | |
917 | + | else eH(cR, cN[cS]) | |
918 | + | ||
919 | + | func cT (cR,cS) = if ((cS >= cO)) | |
920 | + | then cR | |
883 | 921 | else throw("List size exceeds 5") | |
884 | 922 | ||
885 | - | | |
923 | + | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
886 | 924 | } | |
887 | - | | |
888 | - | } | |
889 | - | ||
890 | - | ||
891 | - | func | |
892 | - | let | |
893 | - | [toString(valueOrElse(parseInt( | |
894 | - | then | |
895 | - | else "0_0_0_0_0_0", if ((size(split( | |
896 | - | then | |
897 | - | else "0_0_0_0_0_0", | |
898 | - | } | |
899 | - | ||
900 | - | ||
901 | - | func | |
902 | - | let | |
903 | - | ((V * (parseIntValue( | |
904 | - | } | |
905 | - | ||
906 | - | ||
907 | - | func | |
908 | - | let | |
909 | - | func | |
910 | - | ||
911 | - | func | |
912 | - | let | |
913 | - | let | |
914 | - | $Tuple2(( | |
925 | + | eI._1 | |
926 | + | } | |
927 | + | ||
928 | + | ||
929 | + | func eJ (eK) = { | |
930 | + | let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
931 | + | [toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S)) | |
932 | + | then eL[aq] | |
933 | + | else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S)) | |
934 | + | then eL[ar] | |
935 | + | else "0_0_0_0_0_0", eL[as]] | |
936 | + | } | |
937 | + | ||
938 | + | ||
939 | + | func eM (eN) = { | |
940 | + | let do = split(eN, "_") | |
941 | + | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
942 | + | } | |
943 | + | ||
944 | + | ||
945 | + | func eO (eP) = { | |
946 | + | let eQ = eP[aj] | |
947 | + | func eR (cL,dj) = (cL + parseIntValue(dj)) | |
948 | + | ||
949 | + | func eS (cL,dj) = { | |
950 | + | let bB = cL._1 | |
951 | + | let eT = (((parseIntValue(dj) + af) - 1) / af) | |
952 | + | $Tuple2((bB + 1), (cL._2 + (eT * bi))) | |
915 | 953 | } | |
916 | 954 | ||
917 | - | let | |
918 | - | let | |
919 | - | let | |
920 | - | let | |
921 | - | func | |
922 | - | then | |
923 | - | else | |
924 | - | ||
925 | - | func | |
926 | - | then | |
955 | + | let eU = { | |
956 | + | let cN = split(eP[ah], "_") | |
957 | + | let cO = size(cN) | |
958 | + | let cP = 0 | |
959 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
960 | + | then cR | |
961 | + | else eR(cR, cN[cS]) | |
962 | + | ||
963 | + | func cT (cR,cS) = if ((cS >= cO)) | |
964 | + | then cR | |
927 | 965 | else throw("List size exceeds 6") | |
928 | 966 | ||
929 | - | | |
967 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
930 | 968 | } | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | func | |
936 | - | then | |
937 | - | else | |
938 | - | ||
939 | - | func | |
940 | - | then | |
969 | + | let eV = { | |
970 | + | let cN = split(eP[ai], "_") | |
971 | + | let cO = size(cN) | |
972 | + | let cP = 0 | |
973 | + | func eW (cR,cS) = if ((cS >= cO)) | |
974 | + | then cR | |
975 | + | else eR(cR, cN[cS]) | |
976 | + | ||
977 | + | func eX (cR,cS) = if ((cS >= cO)) | |
978 | + | then cR | |
941 | 979 | else throw("List size exceeds 6") | |
942 | 980 | ||
943 | - | | |
981 | + | eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6) | |
944 | 982 | } | |
945 | - | let | |
983 | + | let eY = if ((eQ == "")) | |
946 | 984 | then 0 | |
947 | - | else ( let | |
948 | - | let | |
949 | - | let | |
950 | - | func | |
951 | - | then | |
952 | - | else | |
953 | - | ||
954 | - | func | |
955 | - | then | |
985 | + | else ( let cN = split_4C(eQ, "_") | |
986 | + | let cO = size(cN) | |
987 | + | let cP = $Tuple2(0, 0) | |
988 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
989 | + | then cR | |
990 | + | else eS(cR, cN[cS]) | |
991 | + | ||
992 | + | func fa (cR,cS) = if ((cS >= cO)) | |
993 | + | then cR | |
956 | 994 | else throw("List size exceeds 50") | |
957 | 995 | ||
958 | - | | |
959 | - | (( | |
960 | - | } | |
961 | - | ||
962 | - | ||
963 | - | func | |
964 | - | let | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | let | |
970 | - | then makeString(["0", toString( | |
971 | - | else { | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | then parseIntValue( | |
976 | - | else | |
977 | - | makeString([toString( | |
978 | - | } | |
979 | - | [ | |
980 | - | then | |
981 | - | else "0_0_0_0_0_0", if ((size(split( | |
982 | - | then | |
983 | - | else "0_0_0_0_0_0", | |
984 | - | } | |
985 | - | ||
986 | - | ||
987 | - | func | |
988 | - | let | |
989 | - | let | |
990 | - | (( | |
991 | - | } | |
992 | - | ||
993 | - | ||
994 | - | func | |
995 | - | let | |
996 | - | then ((( | |
997 | - | else -((((-( | |
998 | - | ( | |
999 | - | } | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
996 | + | fa(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(cP, 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 | |
997 | + | ((eU + eV) + eY) | |
998 | + | } | |
999 | + | ||
1000 | + | ||
1001 | + | func fb (fc,fd,fe) = { | |
1002 | + | let eN = ((toString(fd) + "_") + toString(fe)) | |
1003 | + | let ff = eM(eN) | |
1004 | + | let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1005 | + | let fh = split_4C(fg, ":") | |
1006 | + | let fi = eO(fh) | |
1007 | + | let fj = if ((5 > size(fh))) | |
1008 | + | then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_") | |
1009 | + | else { | |
1010 | + | let fk = split(fh[ak], "_") | |
1011 | + | let fl = parseIntValue(fk[al]) | |
1012 | + | let fm = if ((size(fk) > 1)) | |
1013 | + | then parseIntValue(fk[am]) | |
1014 | + | else fi | |
1015 | + | makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_") | |
1016 | + | } | |
1017 | + | [fh[ag], if ((size(split(fh[ah], "_")) == S)) | |
1018 | + | then fh[ah] | |
1019 | + | else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S)) | |
1020 | + | then fh[ai] | |
1021 | + | else "0_0_0_0_0_0", fh[aj], fj] | |
1022 | + | } | |
1023 | + | ||
1024 | + | ||
1025 | + | func fn (eP) = { | |
1026 | + | let fo = eO(eP) | |
1027 | + | let fp = parseIntValue(split(eP[ak], "_")[al]) | |
1028 | + | ((eM(eP[ag]) - fo) - fp) | |
1029 | + | } | |
1030 | + | ||
1031 | + | ||
1032 | + | func fq (fr,fs) = { | |
1033 | + | let eT = if ((fr >= 0)) | |
1034 | + | then (((fr + fs) - 1) / fs) | |
1035 | + | else -((((-(fr) + fs) - 1) / fs)) | |
1036 | + | (eT * bi) | |
1037 | + | } | |
1038 | + | ||
1039 | + | ||
1040 | + | func ft (fu,eP,fv) = if ((size(fu) != 3)) | |
1003 | 1041 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1004 | 1042 | else { | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1043 | + | let fw = split(fu[0], "_") | |
1044 | + | let fx = split(fu[1], "_") | |
1045 | + | let fy = if ((fu[2] == "")) | |
1008 | 1046 | then nil | |
1009 | - | else split( | |
1010 | - | if ((size( | |
1047 | + | else split(fu[2], "_") | |
1048 | + | if ((size(fw) != S)) | |
1011 | 1049 | then throw("All 6 resources should be passed") | |
1012 | - | else if ((size( | |
1050 | + | else if ((size(fx) != S)) | |
1013 | 1051 | then throw("All 6 materials should be passed") | |
1014 | 1052 | else { | |
1015 | - | let | |
1016 | - | let | |
1017 | - | let | |
1018 | - | let | |
1053 | + | let eq = fn(eP) | |
1054 | + | let fz = split(eP[ah], "_") | |
1055 | + | let fA = split(eP[ai], "_") | |
1056 | + | let fB = if ((eP[aj] == "")) | |
1019 | 1057 | then nil | |
1020 | - | else split( | |
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1058 | + | else split(eP[aj], "_") | |
1059 | + | let eo = split(fv[aq], "_") | |
1060 | + | let fC = split(fv[ar], "_") | |
1061 | + | let fD = if ((fv[as] == "")) | |
1024 | 1062 | then nil | |
1025 | - | else split( | |
1026 | - | func | |
1027 | - | let | |
1028 | - | let | |
1029 | - | let | |
1030 | - | let | |
1031 | - | if (( | |
1032 | - | then $Tuple4(( | |
1033 | - | else if (( | |
1034 | - | then if (( | |
1035 | - | then throw((((("Attempt to take " + | |
1036 | - | else $Tuple4(( | |
1037 | - | else if ((-( | |
1038 | - | then throw((((("Attempt to take " + toString(-( | |
1039 | - | else $Tuple4(( | |
1063 | + | else split(fv[as], "_") | |
1064 | + | func fE (cL,dj) = { | |
1065 | + | let eb = cL._1 | |
1066 | + | let fF = parseIntValue(dj) | |
1067 | + | let fG = parseIntValue(fz[eb]) | |
1068 | + | let fH = parseIntValue(eo[eb]) | |
1069 | + | if ((fF == 0)) | |
1070 | + | then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4) | |
1071 | + | else if ((fF > 0)) | |
1072 | + | then if ((fF > fH)) | |
1073 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available")) | |
1074 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF)) | |
1075 | + | else if ((-(fF) > fG)) | |
1076 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available")) | |
1077 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF)) | |
1040 | 1078 | } | |
1041 | 1079 | ||
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1046 | - | func | |
1047 | - | then | |
1048 | - | else | |
1049 | - | ||
1050 | - | func | |
1051 | - | then | |
1080 | + | let cW = { | |
1081 | + | let cN = fw | |
1082 | + | let cO = size(cN) | |
1083 | + | let cP = $Tuple4(0, nil, nil, 0) | |
1084 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1085 | + | then cR | |
1086 | + | else fE(cR, cN[cS]) | |
1087 | + | ||
1088 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1089 | + | then cR | |
1052 | 1090 | else throw("List size exceeds 6") | |
1053 | 1091 | ||
1054 | - | | |
1092 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1055 | 1093 | } | |
1056 | - | func | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | let | |
1061 | - | if (( | |
1062 | - | then $Tuple4(( | |
1063 | - | else if (( | |
1064 | - | then if (( | |
1065 | - | then throw((((("Attempt to take " + | |
1066 | - | else $Tuple4(( | |
1067 | - | else if ((-( | |
1068 | - | then throw((((("Attempt to take " + toString(-( | |
1069 | - | else $Tuple4(( | |
1094 | + | func fI (cL,dj) = { | |
1095 | + | let eb = cL._1 | |
1096 | + | let fF = parseIntValue(dj) | |
1097 | + | let fJ = parseIntValue(fA[eb]) | |
1098 | + | let fK = parseIntValue(fC[eb]) | |
1099 | + | if ((fF == 0)) | |
1100 | + | then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4) | |
1101 | + | else if ((fF > 0)) | |
1102 | + | then if ((fF > fK)) | |
1103 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available")) | |
1104 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF)) | |
1105 | + | else if ((-(fF) > fJ)) | |
1106 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available")) | |
1107 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF)) | |
1070 | 1108 | } | |
1071 | 1109 | ||
1072 | - | let | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | func | |
1077 | - | then | |
1078 | - | else | |
1079 | - | ||
1080 | - | func | |
1081 | - | then | |
1110 | + | let dT = { | |
1111 | + | let cN = fx | |
1112 | + | let cO = size(cN) | |
1113 | + | let cP = $Tuple4(0, nil, nil, cW._4) | |
1114 | + | func eW (cR,cS) = if ((cS >= cO)) | |
1115 | + | then cR | |
1116 | + | else fI(cR, cN[cS]) | |
1117 | + | ||
1118 | + | func eX (cR,cS) = if ((cS >= cO)) | |
1119 | + | then cR | |
1082 | 1120 | else throw("List size exceeds 6") | |
1083 | 1121 | ||
1084 | - | | |
1122 | + | eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6) | |
1085 | 1123 | } | |
1086 | - | func | |
1087 | - | let | |
1088 | - | let | |
1089 | - | let | |
1090 | - | then parseIntValue( | |
1124 | + | func fL (cL,dj) = { | |
1125 | + | let eb = cL._1 | |
1126 | + | let fF = parseIntValue(dj) | |
1127 | + | let fM = if ((size(fB) > eb)) | |
1128 | + | then parseIntValue(fB[eb]) | |
1091 | 1129 | else 0 | |
1092 | - | let | |
1093 | - | then parseIntValue( | |
1130 | + | let fN = if ((size(fD) > eb)) | |
1131 | + | then parseIntValue(fD[eb]) | |
1094 | 1132 | else 0 | |
1095 | - | if (( | |
1096 | - | then $Tuple4(( | |
1097 | - | else if (( | |
1098 | - | then if (( | |
1099 | - | then throw((((("Attempt to take " + | |
1133 | + | if ((fF == 0)) | |
1134 | + | then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4) | |
1135 | + | else if ((fF > 0)) | |
1136 | + | then if ((fF > fN)) | |
1137 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available")) | |
1100 | 1138 | else { | |
1101 | - | let | |
1102 | - | $Tuple4(( | |
1139 | + | let fO = (fq((fM + fF), af) - fq(fM, af)) | |
1140 | + | $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO)) | |
1103 | 1141 | } | |
1104 | - | else if ((-( | |
1105 | - | then throw((((("Attempt to take " + toString(-( | |
1142 | + | else if ((-(fF) > fM)) | |
1143 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available")) | |
1106 | 1144 | else { | |
1107 | - | let | |
1108 | - | $Tuple4(( | |
1145 | + | let fO = (fq((fM + fF), af) - fq(fM, af)) | |
1146 | + | $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO)) | |
1109 | 1147 | } | |
1110 | 1148 | } | |
1111 | 1149 | ||
1112 | - | let | |
1150 | + | let eL = if ((size(fy) != 0)) | |
1113 | 1151 | then { | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | func | |
1118 | - | then | |
1119 | - | else | |
1120 | - | ||
1121 | - | func | |
1122 | - | then | |
1152 | + | let cN = fy | |
1153 | + | let cO = size(cN) | |
1154 | + | let cP = $Tuple4(0, nil, nil, dT._4) | |
1155 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
1156 | + | then cR | |
1157 | + | else fL(cR, cN[cS]) | |
1158 | + | ||
1159 | + | func fa (cR,cS) = if ((cS >= cO)) | |
1160 | + | then cR | |
1123 | 1161 | else throw("List size exceeds 50") | |
1124 | 1162 | ||
1125 | - | | |
1163 | + | fa(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(cP, 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) | |
1126 | 1164 | } | |
1127 | - | else $Tuple4(0, | |
1128 | - | let | |
1129 | - | if (( | |
1130 | - | then throw((((("Attempt to put total " + toString( | |
1131 | - | else $Tuple7(makeString( | |
1165 | + | else $Tuple4(0, fB, fD, dT._4) | |
1166 | + | let fP = eL._4 | |
1167 | + | if ((fP > eq)) | |
1168 | + | then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left")) | |
1169 | + | else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP) | |
1132 | 1170 | } | |
1133 | 1171 | } | |
1134 | 1172 | ||
1135 | 1173 | ||
1136 | - | func | |
1137 | - | let | |
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | let | |
1147 | - | $Tuple2([IntegerEntry( | |
1148 | - | } | |
1149 | - | ||
1150 | - | ||
1151 | - | func | |
1174 | + | func fQ (fR,fS) = { | |
1175 | + | let aT = toString(fR) | |
1176 | + | let fT = ew(toBigInt(fS)) | |
1177 | + | let fU = valueOrElse(getInteger(cm()), (cl + 1)) | |
1178 | + | let co = toString(fU) | |
1179 | + | let eF = toInt((fT % cf)) | |
1180 | + | let ee = eD(fT, eF) | |
1181 | + | let fV = aa[eF] | |
1182 | + | let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false) | |
1183 | + | let av = calculateAssetId(fW) | |
1184 | + | let fX = toBase58String(av) | |
1185 | + | $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV)) | |
1186 | + | } | |
1187 | + | ||
1188 | + | ||
1189 | + | func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX))) | |
1152 | 1190 | then throw("signature does not match") | |
1153 | 1191 | else { | |
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | let | |
1159 | - | let | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (if (( | |
1192 | + | let do = split(toUtf8String(fZ), ";") | |
1193 | + | let gb = split(do[0], "|") | |
1194 | + | let gc = split(gb[cA], "_") | |
1195 | + | let gd = parseIntValue(gc[0]) | |
1196 | + | let ge = parseIntValue(gc[1]) | |
1197 | + | let gf = split(do[1], ":") | |
1198 | + | let gg = gf[0] | |
1199 | + | let gh = parseIntValue(gb[cB]) | |
1200 | + | if (if ((gh > (lastBlock.timestamp + bZ))) | |
1163 | 1201 | then true | |
1164 | - | else ((lastBlock.timestamp - | |
1165 | - | then throw(((("signature outdated: logTime=" + toString( | |
1202 | + | else ((lastBlock.timestamp - bZ) > gh)) | |
1203 | + | then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1166 | 1204 | else { | |
1167 | - | let | |
1168 | - | let | |
1169 | - | if (( | |
1170 | - | then throw(((("Tx ids don't match! In state: " + | |
1205 | + | let gi = gf[1] | |
1206 | + | let gj = valueOrElse(getString(at(aT)), "") | |
1207 | + | if ((gj != gi)) | |
1208 | + | then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi)) | |
1171 | 1209 | else { | |
1172 | - | let p = valueOrErrorMessage(getString( | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | if (( | |
1177 | - | then throw(((("oldHealth=" + toString( | |
1178 | - | else if ((0 >= | |
1210 | + | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1211 | + | let gk = aQ(p) | |
1212 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1213 | + | let gm = valueOrElse(getInteger(gk), gl) | |
1214 | + | if ((gm != gd)) | |
1215 | + | then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd))) | |
1216 | + | else if ((0 >= gd)) | |
1179 | 1217 | then throw("You can't fly with zero health") | |
1180 | 1218 | else { | |
1181 | - | let | |
1182 | - | then | |
1219 | + | let gn = if ((size(gb) > cC)) | |
1220 | + | then gb[cC] | |
1183 | 1221 | else "" | |
1184 | - | let | |
1185 | - | then | |
1222 | + | let go = if ((size(gb) > cD)) | |
1223 | + | then gb[cD] | |
1186 | 1224 | else "" | |
1187 | - | let | |
1188 | - | then ( | |
1225 | + | let gp = if (if ((ge > 0)) | |
1226 | + | then (gn == "$") | |
1189 | 1227 | else false) | |
1190 | - | then | |
1228 | + | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1191 | 1229 | else 0 | |
1192 | - | $Tuple5( | |
1230 | + | $Tuple5(ge, p, gp, gg, go) | |
1193 | 1231 | } | |
1194 | 1232 | } | |
1195 | 1233 | } | |
1196 | 1234 | } | |
1197 | 1235 | ||
1198 | 1236 | ||
1199 | - | func | |
1200 | - | let | |
1201 | - | let | |
1202 | - | let | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | if ((0 >= | |
1209 | - | then $Tuple3([IntegerEntry( | |
1210 | - | else { | |
1211 | - | let | |
1212 | - | let | |
1213 | - | $Tuple3(((( | |
1214 | - | } | |
1215 | - | } | |
1216 | - | ||
1217 | - | ||
1218 | - | func | |
1219 | - | let | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | ((T + fraction(T, (( | |
1224 | - | } | |
1225 | - | ||
1226 | - | ||
1227 | - | func | |
1228 | - | let | |
1229 | - | then $Tuple2( | |
1230 | - | else { | |
1231 | - | let p = valueOrErrorMessage(getString( | |
1232 | - | let | |
1233 | - | let | |
1234 | - | if (( | |
1235 | - | then throw((("Duck location type is " + | |
1236 | - | else $Tuple2( | |
1237 | - | } | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | if (( | |
1237 | + | func gq (fR,fS,fZ,ga) = { | |
1238 | + | let aT = toString(fR) | |
1239 | + | let eG = fY(aT, fZ, ga) | |
1240 | + | let gk = aQ(eG._2) | |
1241 | + | let eK = aO(eG._2) | |
1242 | + | let fv = eJ(eK) | |
1243 | + | let gr = split(fv[ar], "_") | |
1244 | + | let gs = makeString(cX(true, gr, cd), "_") | |
1245 | + | let dt = de(fv[as], eG._5) | |
1246 | + | if ((0 >= eG._1)) | |
1247 | + | then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0) | |
1248 | + | else { | |
1249 | + | let gt = fQ(fR, fS) | |
1250 | + | let fX = gt._2._1 | |
1251 | + | $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3) | |
1252 | + | } | |
1253 | + | } | |
1254 | + | ||
1255 | + | ||
1256 | + | func gu (aF,gv) = { | |
1257 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1258 | + | let gw = valueOrElse(getInteger(az(R, aF)), 0) | |
1259 | + | let gx = (fe / 6) | |
1260 | + | let gy = (fe / 7) | |
1261 | + | ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5))) | |
1262 | + | } | |
1263 | + | ||
1264 | + | ||
1265 | + | func gz (b,gA,gB) = { | |
1266 | + | let gC = if ((gA == cx)) | |
1267 | + | then $Tuple2(gB, valueOrElse(getString(aN(b)), "")) | |
1268 | + | else { | |
1269 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1270 | + | let gD = valueOrElse(getString(aP(p)), W) | |
1271 | + | let gE = split(value(gD), "_") | |
1272 | + | if ((gE[aV] != "L")) | |
1273 | + | then throw((("Duck location type is " + gE[aV]) + ", but should be L")) | |
1274 | + | else $Tuple2(gE[aW], p) | |
1275 | + | } | |
1276 | + | let aF = gC._1 | |
1277 | + | let gF = gC._2 | |
1278 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
1279 | + | let gH = ax(aF) | |
1280 | + | let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked")) | |
1281 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
1282 | + | if ((gJ != b)) | |
1245 | 1283 | then throw((P + " is not yours")) | |
1246 | 1284 | else { | |
1247 | - | let | |
1248 | - | $Tuple4( | |
1249 | - | } | |
1250 | - | } | |
1251 | - | ||
1252 | - | ||
1253 | - | func | |
1285 | + | let gK = split(gG.description, "_") | |
1286 | + | $Tuple4(gF, aF, gK, gI) | |
1287 | + | } | |
1288 | + | } | |
1289 | + | ||
1290 | + | ||
1291 | + | func gL (b,fr,gA,gB) = if ((0 > fr)) | |
1254 | 1292 | then throw("Negative amount") | |
1255 | 1293 | else { | |
1256 | - | let | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | if ((0 > | |
1261 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1294 | + | let dF = gz(b, gA, gB) | |
1295 | + | let bU = dF._3[bI] | |
1296 | + | let dX = ed(dF._3[bJ]) | |
1297 | + | let eh = (lastBlock.timestamp - dF._4) | |
1298 | + | if ((0 > eh)) | |
1299 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1262 | 1300 | else { | |
1263 | - | let | |
1264 | - | let | |
1265 | - | let | |
1266 | - | if (( | |
1267 | - | then throw(((("Not enough resources, available = " + toString( | |
1301 | + | let gv = bT(bU) | |
1302 | + | let gM = gu(dF._2, gv) | |
1303 | + | let gN = fraction(eh, (gM * gv), U) | |
1304 | + | if ((fr > gN)) | |
1305 | + | then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr))) | |
1268 | 1306 | else { | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | if (if (( | |
1279 | - | then ( | |
1307 | + | let gO = fraction((gN - fr), U, (gM * gv)) | |
1308 | + | let gP = (lastBlock.timestamp - gO) | |
1309 | + | let fd = (gv / bj) | |
1310 | + | let ep = el(dX, (eh - gO), fd, gM) | |
1311 | + | let fc = aE(dF._2) | |
1312 | + | let fe = valueOrElse(getInteger(ay(dF._2)), 0) | |
1313 | + | let eP = fb(fc, fd, fe) | |
1314 | + | let fk = split(eP[ak], "_") | |
1315 | + | let eq = parseIntValue(fk[an]) | |
1316 | + | if (if ((gA == cx)) | |
1317 | + | then (fr > eq) | |
1280 | 1318 | else false) | |
1281 | - | then throw((("Only " + toString( | |
1319 | + | then throw((("Only " + toString(eq)) + " space left in warehouse")) | |
1282 | 1320 | else { | |
1283 | - | let | |
1284 | - | let | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | then $Tuple4( | |
1289 | - | else if (( | |
1290 | - | then $Tuple4( | |
1321 | + | let eK = aO(dF._1) | |
1322 | + | let fv = eJ(eK) | |
1323 | + | let eo = split(fv[aq], "_") | |
1324 | + | let en = split(eP[ah], "_") | |
1325 | + | let gQ = if ((gA == cx)) | |
1326 | + | then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2)) | |
1327 | + | else if ((gA == cy)) | |
1328 | + | then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an])) | |
1291 | 1329 | else { | |
1292 | - | let | |
1293 | - | let | |
1294 | - | $Tuple4( | |
1330 | + | let gR = em(en, eo, ep, eq) | |
1331 | + | let gS = min([parseIntValue(fk[an]), ep._2]) | |
1332 | + | $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS)) | |
1295 | 1333 | } | |
1296 | - | let | |
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | $Tuple5([IntegerEntry( | |
1334 | + | let gT = gQ._1 | |
1335 | + | let gU = gQ._2 | |
1336 | + | let gV = gQ._3 | |
1337 | + | let gW = gQ._4 | |
1338 | + | $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")]) | |
1301 | 1339 | } | |
1302 | 1340 | } | |
1303 | 1341 | } | |
1304 | 1342 | } | |
1305 | 1343 | ||
1306 | 1344 | ||
1307 | - | func | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | | |
1312 | - | } | |
1313 | - | ||
1314 | - | ||
1315 | - | func | |
1316 | - | let b = toString( | |
1317 | - | let | |
1318 | - | let | |
1319 | - | let | |
1320 | - | let | |
1321 | - | if (( | |
1345 | + | func gX (b,aF,gv,gA) = { | |
1346 | + | let gH = ax(aF) | |
1347 | + | let gI = value(getInteger(gH)) | |
1348 | + | let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv) | |
1349 | + | gL(b, gN, gA, aF) | |
1350 | + | } | |
1351 | + | ||
1352 | + | ||
1353 | + | func gY (cY,fR,gZ,aF) = { | |
1354 | + | let b = toString(fR) | |
1355 | + | let dF = gz(b, cz, aF) | |
1356 | + | let gv = bT(dF._3[bI]) | |
1357 | + | let ha = ay(dF._2) | |
1358 | + | let hb = valueOrElse(getInteger(ha), 0) | |
1359 | + | if ((hb >= 3)) | |
1322 | 1360 | then throw("Currently max infrastructure level = 3") | |
1323 | 1361 | else { | |
1324 | - | let O = ( | |
1325 | - | let | |
1326 | - | if (if (!( | |
1327 | - | then ( | |
1362 | + | let O = (hb + 1) | |
1363 | + | let hc = fraction(cc, (gv * O), bj) | |
1364 | + | if (if (!(cY)) | |
1365 | + | then (gZ != hc) | |
1328 | 1366 | else false) | |
1329 | - | then throw(("Payment attached should be " + toString( | |
1367 | + | then throw(("Payment attached should be " + toString(hc))) | |
1330 | 1368 | else { | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | $Tuple3(([IntegerEntry( | |
1369 | + | let eK = aO(dF._1) | |
1370 | + | let fv = eJ(eK) | |
1371 | + | let gr = split(fv[ar], "_") | |
1372 | + | let hd = fraction(be, (gv * O), bj) | |
1373 | + | let gs = makeString(cX(cY, gr, hd), "_") | |
1374 | + | let he = gX(b, dF._2, gv, cz) | |
1375 | + | let hf = he._5 | |
1376 | + | let hg = eM(hf[ag]) | |
1377 | + | let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_") | |
1378 | + | let hi = eM(hh) | |
1379 | + | let fk = split(hf[ak], "_") | |
1380 | + | let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_") | |
1381 | + | $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd) | |
1344 | 1382 | } | |
1345 | 1383 | } | |
1346 | 1384 | } | |
1347 | 1385 | ||
1348 | 1386 | ||
1349 | - | func | |
1387 | + | func hk (p,hl) = if (!(aZ)) | |
1350 | 1388 | then $Tuple2(nil, 0) | |
1351 | 1389 | else { | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let I = valueOrElse(getInteger( | |
1355 | - | let N = (I + | |
1356 | - | let | |
1357 | - | let | |
1358 | - | $Tuple2([IntegerEntry( | |
1390 | + | let hm = r(p) | |
1391 | + | let hn = q(p) | |
1392 | + | let I = valueOrElse(getInteger(bD, hn), 0) | |
1393 | + | let N = (I + hl) | |
1394 | + | let ho = L(valueOrElse(getInteger(bD, hm), 0), N) | |
1395 | + | let hp = s(p) | |
1396 | + | $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N) | |
1359 | 1397 | } | |
1360 | 1398 | ||
1361 | 1399 | ||
1362 | - | func | |
1400 | + | func hq (b,hl) = if (!(aZ)) | |
1363 | 1401 | then $Tuple2(nil, 0) | |
1364 | 1402 | else { | |
1365 | - | let | |
1366 | - | let | |
1367 | - | let I = valueOrElse(getInteger( | |
1368 | - | let N = (I + | |
1369 | - | let | |
1370 | - | let | |
1371 | - | $Tuple2([IntegerEntry( | |
1403 | + | let hm = v(b) | |
1404 | + | let hn = u(b) | |
1405 | + | let I = valueOrElse(getInteger(bD, hn), 0) | |
1406 | + | let N = (I + hl) | |
1407 | + | let ho = L(valueOrElse(getInteger(bD, hm), 0), N) | |
1408 | + | let hp = w(b) | |
1409 | + | $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N) | |
1372 | 1410 | } | |
1373 | 1411 | ||
1374 | 1412 | ||
1375 | - | func | |
1376 | - | let p = valueOrErrorMessage(getString( | |
1377 | - | let | |
1378 | - | let | |
1379 | - | if (!(isDefined( | |
1413 | + | func hr (b) = { | |
1414 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1415 | + | let hs = aI(b) | |
1416 | + | let ht = getString(hs) | |
1417 | + | if (!(isDefined(ht))) | |
1380 | 1418 | then throw("You are not eligible for ONBOARD artifact") | |
1381 | 1419 | else { | |
1382 | - | let | |
1383 | - | let | |
1384 | - | if (isDefined( | |
1385 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1420 | + | let hu = aK(b) | |
1421 | + | let hv = getString(hu) | |
1422 | + | if (isDefined(hv)) | |
1423 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hv))) | |
1386 | 1424 | else { | |
1387 | - | let | |
1388 | - | let | |
1389 | - | if (isDefined( | |
1390 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1391 | - | else ([StringEntry( | |
1425 | + | let hw = aJ(p) | |
1426 | + | let hx = getString(hw) | |
1427 | + | if (isDefined(hx)) | |
1428 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx))) | |
1429 | + | else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1) | |
1392 | 1430 | } | |
1393 | 1431 | } | |
1394 | 1432 | } | |
1395 | 1433 | ||
1396 | 1434 | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | if ((valueOrElse(getInteger( | |
1435 | + | func hy (b,gB) = { | |
1436 | + | let dF = gz(b, cz, gB) | |
1437 | + | let aF = dF._2 | |
1438 | + | let gv = bT(dF._3[bI]) | |
1439 | + | let hz = az(R, aF) | |
1440 | + | if ((valueOrElse(getInteger(hz), 0) > 0)) | |
1403 | 1441 | then throw("Presale artifact is already activated") | |
1404 | - | else if ((parseIntValue( | |
1405 | - | then throw((((P + " ") + | |
1442 | + | else if ((parseIntValue(dF._3[bH]) > cl)) | |
1443 | + | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1406 | 1444 | else { | |
1407 | - | let | |
1408 | - | (((( | |
1445 | + | let he = gX(b, aF, gv, cz) | |
1446 | + | ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":"))) | |
1409 | 1447 | } | |
1410 | 1448 | } | |
1411 | 1449 | ||
1412 | 1450 | ||
1413 | - | func | |
1414 | - | let p = valueOrErrorMessage(getString( | |
1415 | - | func | |
1416 | - | let | |
1417 | - | let | |
1418 | - | let | |
1419 | - | let | |
1420 | - | if (( | |
1451 | + | func hA (hB,O,hC,b,hD,fS,hE) = { | |
1452 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1453 | + | func hF (cL,aF) = { | |
1454 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
1455 | + | let gH = ax(aF) | |
1456 | + | let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked")) | |
1457 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
1458 | + | if ((gJ != b)) | |
1421 | 1459 | then throw((P + " is not yours")) | |
1422 | 1460 | else { | |
1423 | - | let | |
1424 | - | let | |
1425 | - | if (if (( | |
1426 | - | then ( | |
1461 | + | let gK = split(gG.description, "_") | |
1462 | + | let fV = gK[bK] | |
1463 | + | if (if ((cL._3 != "")) | |
1464 | + | then (cL._3 != fV) | |
1427 | 1465 | else false) | |
1428 | 1466 | then throw("Lands should be on the same continent to merge") | |
1429 | 1467 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | if (("S" == | |
1468 | + | let bU = gK[bI] | |
1469 | + | let hG = cL._1 | |
1470 | + | let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed") | |
1471 | + | let hH = (take(hG, eb) + drop(hG, (eb + 1))) | |
1472 | + | let gv = bT(bU) | |
1473 | + | let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1474 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1475 | + | let hJ = { | |
1476 | + | let bc = bU | |
1477 | + | if (("S" == bc)) | |
1440 | 1478 | then 3 | |
1441 | - | else if (("M" == | |
1479 | + | else if (("M" == bc)) | |
1442 | 1480 | then 4 | |
1443 | - | else if (("L" == | |
1481 | + | else if (("L" == bc)) | |
1444 | 1482 | then 5 | |
1445 | - | else if (("XL" == | |
1483 | + | else if (("XL" == bc)) | |
1446 | 1484 | then 6 | |
1447 | 1485 | else throw("Only S, M, L, XL can merge") | |
1448 | 1486 | } | |
1449 | - | if (( | |
1487 | + | if ((fe != hJ)) | |
1450 | 1488 | then throw("All lands should be maxed to merge") | |
1451 | 1489 | else { | |
1452 | - | let | |
1453 | - | let | |
1454 | - | let | |
1455 | - | if ((0 > | |
1456 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1490 | + | let co = gK[bH] | |
1491 | + | let dX = ed(gK[bJ]) | |
1492 | + | let eh = (lastBlock.timestamp - gI) | |
1493 | + | if ((0 > eh)) | |
1494 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp))) | |
1457 | 1495 | else { | |
1458 | - | let | |
1459 | - | let | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | if (!(isDefined( | |
1465 | - | then throw(("Your staked lands don't contain " + | |
1496 | + | let gM = gu(aF, gv) | |
1497 | + | let fd = (gv / bj) | |
1498 | + | let gU = ef(split(cL._4, "_"), dX, eh, fd, gM) | |
1499 | + | let cV = dV(split(cL._6, "_"), dX, fd, -1) | |
1500 | + | let hK = cL._7 | |
1501 | + | let bB = indexOf(hK, aF) | |
1502 | + | if (!(isDefined(bB))) | |
1503 | + | then throw(("Your staked lands don't contain " + aF)) | |
1466 | 1504 | else { | |
1467 | - | let | |
1468 | - | let | |
1469 | - | $Tuple8( | |
1505 | + | let hL = aw(aF) | |
1506 | + | let hM = valueOrElse(getString(hL), "") | |
1507 | + | $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv)) | |
1470 | 1508 | } | |
1471 | 1509 | } | |
1472 | 1510 | } | |
1474 | 1512 | } | |
1475 | 1513 | } | |
1476 | 1514 | ||
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | let | |
1483 | - | then split_51C(value( | |
1515 | + | let eK = aO(p) | |
1516 | + | let fv = eJ(eK) | |
1517 | + | let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1518 | + | let hO = bM(b) | |
1519 | + | let hP = getString(hO) | |
1520 | + | let hQ = if (isDefined(hP)) | |
1521 | + | then split_51C(value(hP), "_") | |
1484 | 1522 | else nil | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | func | |
1490 | - | then | |
1491 | - | else | |
1492 | - | ||
1493 | - | func | |
1494 | - | then | |
1523 | + | let cW = { | |
1524 | + | let cN = hD | |
1525 | + | let cO = size(cN) | |
1526 | + | let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0) | |
1527 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1528 | + | then cR | |
1529 | + | else hF(cR, cN[cS]) | |
1530 | + | ||
1531 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1532 | + | then cR | |
1495 | 1533 | else throw("List size exceeds 5") | |
1496 | 1534 | ||
1497 | - | | |
1535 | + | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1498 | 1536 | } | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | let | |
1506 | - | let | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let | |
1510 | - | $Tuple2(((((((((((((((( | |
1511 | - | then StringEntry( | |
1512 | - | else DeleteEntry( | |
1537 | + | let fV = cW._3 | |
1538 | + | let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV)) | |
1539 | + | let ee = eD(ew(toBigInt(fS)), eF) | |
1540 | + | let fU = valueOrElse(getInteger(cm()), (cl + 1)) | |
1541 | + | let hR = toString(fU) | |
1542 | + | let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false) | |
1543 | + | let av = calculateAssetId(fW) | |
1544 | + | let hS = toBase58String(av) | |
1545 | + | let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_") | |
1546 | + | let hT = bN(b) | |
1547 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1548 | + | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1549 | + | then StringEntry(hO, makeString_11C(cW._7, "_")) | |
1550 | + | else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU)) | |
1513 | 1551 | then 0 | |
1514 | - | else ( | |
1515 | - | } | |
1516 | - | ||
1517 | - | ||
1518 | - | func | |
1519 | - | ||
1520 | - | ||
1521 | - | func | |
1522 | - | let | |
1523 | - | if (if (!( | |
1524 | - | then ( | |
1552 | + | else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS) | |
1553 | + | } | |
1554 | + | ||
1555 | + | ||
1556 | + | func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0) | |
1557 | + | ||
1558 | + | ||
1559 | + | func hW (b,hD,fS,cY,gZ) = { | |
1560 | + | let hc = (cc * 4) | |
1561 | + | if (if (!(cY)) | |
1562 | + | then (gZ != hc) | |
1525 | 1563 | else false) | |
1526 | - | then throw(("Payment attached should be " + toString( | |
1527 | - | else | |
1528 | - | } | |
1529 | - | ||
1530 | - | ||
1531 | - | func | |
1532 | - | let | |
1533 | - | if (if (!( | |
1534 | - | then ( | |
1564 | + | then throw(("Payment attached should be " + toString(hc))) | |
1565 | + | else hA("L", 4, "SMM", b, hD, fS, (be * 4)) | |
1566 | + | } | |
1567 | + | ||
1568 | + | ||
1569 | + | func hX (b,hD,fS,cY,gZ) = { | |
1570 | + | let hc = (cc * 47) | |
1571 | + | if (if (!(cY)) | |
1572 | + | then (gZ != hc) | |
1535 | 1573 | else false) | |
1536 | - | then throw(("Payment attached should be " + toString( | |
1537 | - | else | |
1538 | - | } | |
1539 | - | ||
1540 | - | ||
1541 | - | func | |
1542 | - | let | |
1543 | - | if (if (!( | |
1544 | - | then ( | |
1574 | + | then throw(("Payment attached should be " + toString(hc))) | |
1575 | + | else hA("XL", 5, "SSSML", b, hD, fS, (be * 47)) | |
1576 | + | } | |
1577 | + | ||
1578 | + | ||
1579 | + | func hY (b,hD,fS,cY,gZ) = { | |
1580 | + | let hc = (cc * 54) | |
1581 | + | if (if (!(cY)) | |
1582 | + | then (gZ != hc) | |
1545 | 1583 | else false) | |
1546 | - | then throw(("Payment attached should be " + toString( | |
1547 | - | else | |
1548 | - | } | |
1549 | - | ||
1550 | - | ||
1551 | - | func | |
1552 | - | let | |
1553 | - | let | |
1554 | - | if ((4 == | |
1555 | - | then | |
1556 | - | else if ((3 == | |
1557 | - | then | |
1558 | - | else if ((5 == | |
1559 | - | then | |
1560 | - | else if ((2 == | |
1561 | - | then | |
1584 | + | then throw(("Payment attached should be " + toString(hc))) | |
1585 | + | else hA("XXL", 6, "LXL", b, hD, fS, (be * 54)) | |
1586 | + | } | |
1587 | + | ||
1588 | + | ||
1589 | + | func hZ (cY,b,gZ,hD,fS) = { | |
1590 | + | let ia = { | |
1591 | + | let bc = size(hD) | |
1592 | + | if ((4 == bc)) | |
1593 | + | then hV(b, hD, fS) | |
1594 | + | else if ((3 == bc)) | |
1595 | + | then hW(b, hD, fS, cY, gZ) | |
1596 | + | else if ((5 == bc)) | |
1597 | + | then hX(b, hD, fS, cY, gZ) | |
1598 | + | else if ((2 == bc)) | |
1599 | + | then hY(b, hD, fS, cY, gZ) | |
1562 | 1600 | else throw("Unknown merge") | |
1563 | 1601 | } | |
1564 | - | | |
1565 | - | } | |
1566 | - | ||
1567 | - | ||
1568 | - | func | |
1569 | - | then valueOrElse(getBoolean( | |
1602 | + | ia | |
1603 | + | } | |
1604 | + | ||
1605 | + | ||
1606 | + | func ib (eb) = if (if ((eb.originCaller != bC)) | |
1607 | + | then valueOrElse(getBoolean(aR()), false) | |
1570 | 1608 | else false) | |
1571 | 1609 | then throw("Contracts are under maintenance") | |
1572 | - | else StringEntry( | |
1573 | - | ||
1574 | - | ||
1575 | - | @Callable( | |
1576 | - | func constructorV1 ( | |
1610 | + | else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId)) | |
1611 | + | ||
1612 | + | ||
1613 | + | @Callable(eb) | |
1614 | + | func constructorV1 (ic) = if ((eb.caller != this)) | |
1577 | 1615 | then throw("Permission denied") | |
1578 | - | else [StringEntry( | |
1579 | - | ||
1580 | - | ||
1581 | - | ||
1582 | - | @Callable( | |
1583 | - | func setBlocked ( | |
1616 | + | else [StringEntry(bw(), ic)] | |
1617 | + | ||
1618 | + | ||
1619 | + | ||
1620 | + | @Callable(eb) | |
1621 | + | func setBlocked (id) = if ((eb.caller != this)) | |
1584 | 1622 | then throw("permission denied") | |
1585 | - | else [BooleanEntry( | |
1586 | - | ||
1587 | - | ||
1588 | - | ||
1589 | - | @Callable( | |
1623 | + | else [BooleanEntry(aR(), id)] | |
1624 | + | ||
1625 | + | ||
1626 | + | ||
1627 | + | @Callable(eb) | |
1590 | 1628 | func stakeLand () = { | |
1591 | - | let | |
1592 | - | if ((size( | |
1629 | + | let ie = ib(eb) | |
1630 | + | if ((size(eb.payments) != 1)) | |
1593 | 1631 | then throw("Exactly one payment required") | |
1594 | 1632 | else { | |
1595 | - | let | |
1596 | - | let | |
1597 | - | let | |
1598 | - | if (( | |
1633 | + | let if = value(eb.payments[0]) | |
1634 | + | let av = value(if.assetId) | |
1635 | + | let bp = toString(eb.caller) | |
1636 | + | if ((if.amount != 1)) | |
1599 | 1637 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1600 | 1638 | else { | |
1601 | - | let | |
1602 | - | if (( | |
1639 | + | let gG = value(assetInfo(av)) | |
1640 | + | if ((gG.issuer != this)) | |
1603 | 1641 | then throw("Unknown issuer of token") | |
1604 | - | else if (!(contains( | |
1642 | + | else if (!(contains(gG.name, P))) | |
1605 | 1643 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1606 | 1644 | else { | |
1607 | - | let | |
1608 | - | let | |
1609 | - | then dropRight( | |
1610 | - | else if (contains( | |
1611 | - | then dropRight( | |
1612 | - | else dropRight( | |
1613 | - | if (!(isDefined(parseInt( | |
1614 | - | then throw(("Cannot parse land number from " + | |
1645 | + | let ig = drop(gG.name, 4) | |
1646 | + | let co = if (contains(ig, "XXL")) | |
1647 | + | then dropRight(ig, 3) | |
1648 | + | else if (contains(ig, "XL")) | |
1649 | + | then dropRight(ig, 2) | |
1650 | + | else dropRight(ig, 1) | |
1651 | + | if (!(isDefined(parseInt(co)))) | |
1652 | + | then throw(("Cannot parse land number from " + gG.name)) | |
1615 | 1653 | else { | |
1616 | - | let | |
1617 | - | let | |
1618 | - | if (isDefined(getInteger( | |
1619 | - | then throw((("NFT " + | |
1654 | + | let aF = toBase58String(av) | |
1655 | + | let gH = ax(aF) | |
1656 | + | if (isDefined(getInteger(gH))) | |
1657 | + | then throw((("NFT " + gG.name) + " is already staked")) | |
1620 | 1658 | else { | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | then split_51C(value( | |
1659 | + | let gK = split(gG.description, "_") | |
1660 | + | let dX = ed(gK[bJ]) | |
1661 | + | let gv = bT(gK[bI]) | |
1662 | + | let cV = ec(dX, (gv / bj), 1) | |
1663 | + | let gw = valueOrElse(getInteger(az(R, aF)), 0) | |
1664 | + | let hO = bM(bp) | |
1665 | + | let hP = getString(hO) | |
1666 | + | let hK = if (isDefined(hP)) | |
1667 | + | then split_51C(value(hP), "_") | |
1630 | 1668 | else nil | |
1631 | - | if (containsElement( | |
1632 | - | then throw(("Your staked lands already contain " + | |
1669 | + | if (containsElement(hK, aF)) | |
1670 | + | then throw(("Your staked lands already contain " + aF)) | |
1633 | 1671 | else { | |
1634 | - | let | |
1635 | - | let | |
1636 | - | let | |
1637 | - | let | |
1638 | - | $Tuple2([IntegerEntry( | |
1672 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1673 | + | let hT = bN(bp) | |
1674 | + | let ih = valueOrElse(getInteger(hT), 0) | |
1675 | + | let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1676 | + | $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii) | |
1639 | 1677 | } | |
1640 | 1678 | } | |
1641 | 1679 | } | |
1646 | 1684 | ||
1647 | 1685 | ||
1648 | 1686 | ||
1649 | - | @Callable( | |
1650 | - | func unstakeLand ( | |
1651 | - | let | |
1652 | - | if ((size( | |
1687 | + | @Callable(eb) | |
1688 | + | func unstakeLand (gB) = { | |
1689 | + | let ie = ib(eb) | |
1690 | + | if ((size(eb.payments) != 0)) | |
1653 | 1691 | then throw("No payments required") | |
1654 | 1692 | else { | |
1655 | - | let b = toString( | |
1656 | - | let | |
1657 | - | let | |
1658 | - | let | |
1659 | - | let | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | let | |
1665 | - | if (!(isDefined( | |
1666 | - | then throw(("Your staked lands don't contain " + | |
1693 | + | let b = toString(eb.caller) | |
1694 | + | let dF = gz(b, cy, gB) | |
1695 | + | let aF = dF._2 | |
1696 | + | let hO = bM(b) | |
1697 | + | let dX = ed(dF._3[bJ]) | |
1698 | + | let gv = bT(dF._3[bI]) | |
1699 | + | let cV = ec(dX, (gv / bj), -1) | |
1700 | + | let he = gX(b, aF, gv, cy) | |
1701 | + | let hK = split_51C(valueOrElse(getString(hO), ""), "_") | |
1702 | + | let bB = indexOf(hK, aF) | |
1703 | + | if (!(isDefined(bB))) | |
1704 | + | then throw(("Your staked lands don't contain " + aF)) | |
1667 | 1705 | else { | |
1668 | - | let | |
1669 | - | let | |
1670 | - | if (( | |
1671 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1706 | + | let ij = lastBlock.timestamp | |
1707 | + | let ik = valueOrElse(getInteger(bF, aS(b)), 0) | |
1708 | + | if ((ik >= ij)) | |
1709 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik))) | |
1672 | 1710 | else { | |
1673 | - | let | |
1674 | - | if (( | |
1675 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1711 | + | let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1712 | + | if ((il > ij)) | |
1713 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il))) | |
1676 | 1714 | else { | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1715 | + | let hT = bN(b) | |
1716 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1717 | + | let im = if ((gv > hU)) | |
1680 | 1718 | then 0 | |
1681 | - | else ( | |
1682 | - | let | |
1683 | - | $Tuple2([ScriptTransfer( | |
1684 | - | then StringEntry( | |
1685 | - | else DeleteEntry( | |
1719 | + | else (hU - gv) | |
1720 | + | let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1721 | + | $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1)) | |
1722 | + | then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_")) | |
1723 | + | else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii) | |
1686 | 1724 | } | |
1687 | 1725 | } | |
1688 | 1726 | } | |
1691 | 1729 | ||
1692 | 1730 | ||
1693 | 1731 | ||
1694 | - | @Callable( | |
1732 | + | @Callable(eb) | |
1695 | 1733 | func stakeDuck () = { | |
1696 | - | let | |
1697 | - | if ((size( | |
1734 | + | let ie = ib(eb) | |
1735 | + | if ((size(eb.payments) != 1)) | |
1698 | 1736 | then throw("Exactly one payment required") | |
1699 | 1737 | else { | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | if (( | |
1738 | + | let if = value(eb.payments[0]) | |
1739 | + | let av = value(if.assetId) | |
1740 | + | let bp = toString(eb.caller) | |
1741 | + | if ((if.amount != 1)) | |
1704 | 1742 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1705 | 1743 | else { | |
1706 | - | let | |
1707 | - | if (if (( | |
1708 | - | then ( | |
1744 | + | let gG = value(assetInfo(av)) | |
1745 | + | if (if ((gG.issuer != bV)) | |
1746 | + | then (gG.issuer != bW) | |
1709 | 1747 | else false) | |
1710 | 1748 | then throw((("Unknown issuer of " + Q) + " token")) | |
1711 | - | else if (!(contains( | |
1749 | + | else if (!(contains(gG.name, Q))) | |
1712 | 1750 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1713 | 1751 | else { | |
1714 | - | let | |
1715 | - | let | |
1716 | - | if (isDefined(getInteger( | |
1717 | - | then throw((("NFT " + | |
1718 | - | else if (isDefined(getString( | |
1719 | - | then throw(("You already staked one duck: " + | |
1752 | + | let in = toBase58String(av) | |
1753 | + | let gH = ax(in) | |
1754 | + | if (isDefined(getInteger(gH))) | |
1755 | + | then throw((("NFT " + gG.name) + " is already staked")) | |
1756 | + | else if (isDefined(getString(aN(bp)))) | |
1757 | + | then throw(("You already staked one duck: " + gG.name)) | |
1720 | 1758 | else { | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | ([IntegerEntry( | |
1759 | + | let io = aP(in) | |
1760 | + | let ip = getString(io) | |
1761 | + | let eK = aO(in) | |
1762 | + | let iq = getString(eK) | |
1763 | + | let gk = aQ(in) | |
1764 | + | let gl = J(valueOrElse(getInteger(r(in)), 0)) | |
1765 | + | let ir = valueOrElse(getInteger(gk), gl) | |
1766 | + | ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip)) | |
1729 | 1767 | then nil | |
1730 | - | else ([StringEntry( | |
1768 | + | else ([StringEntry(io, W)] ++ (if (isDefined(iq)) | |
1731 | 1769 | then nil | |
1732 | - | else (([StringEntry( | |
1770 | + | else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie))))) | |
1733 | 1771 | } | |
1734 | 1772 | } | |
1735 | 1773 | } | |
1738 | 1776 | ||
1739 | 1777 | ||
1740 | 1778 | ||
1741 | - | @Callable( | |
1742 | - | func unstakeDuck ( | |
1743 | - | let | |
1744 | - | if ((size( | |
1779 | + | @Callable(eb) | |
1780 | + | func unstakeDuck (in) = { | |
1781 | + | let ie = ib(eb) | |
1782 | + | if ((size(eb.payments) != 0)) | |
1745 | 1783 | then throw("No payments required") | |
1746 | 1784 | else { | |
1747 | - | let | |
1748 | - | let | |
1749 | - | let | |
1750 | - | let | |
1751 | - | if (!(isDefined(getInteger( | |
1752 | - | then throw((("NFT " + | |
1753 | - | else if (!(isDefined(getString( | |
1754 | - | then throw((("The duck " + | |
1785 | + | let av = fromBase58String(in) | |
1786 | + | let bp = toString(eb.caller) | |
1787 | + | let gG = value(assetInfo(av)) | |
1788 | + | let gH = ax(toBase58String(av)) | |
1789 | + | if (!(isDefined(getInteger(gH)))) | |
1790 | + | then throw((("NFT " + gG.name) + " is not staked")) | |
1791 | + | else if (!(isDefined(getString(aN(bp))))) | |
1792 | + | then throw((("The duck " + gG.name) + " is not staked")) | |
1755 | 1793 | else { | |
1756 | - | let | |
1757 | - | if (( | |
1794 | + | let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned")) | |
1795 | + | if ((gJ != bp)) | |
1758 | 1796 | then throw("Staked NFT is not yours") | |
1759 | 1797 | else { | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | if (( | |
1764 | - | then throw((("Please heal your duck to " + toString( | |
1765 | - | else [ScriptTransfer( | |
1798 | + | let gk = aQ(in) | |
1799 | + | let gl = J(valueOrElse(getInteger(r(in)), 0)) | |
1800 | + | let is = valueOrElse(getInteger(gk), gl) | |
1801 | + | if ((gl > is)) | |
1802 | + | then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking")) | |
1803 | + | else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie] | |
1766 | 1804 | } | |
1767 | 1805 | } | |
1768 | 1806 | } | |
1770 | 1808 | ||
1771 | 1809 | ||
1772 | 1810 | ||
1773 | - | @Callable( | |
1774 | - | func claimRes ( | |
1775 | - | let | |
1776 | - | if ((size( | |
1811 | + | @Callable(eb) | |
1812 | + | func claimRes (fr,it) = { | |
1813 | + | let ie = ib(eb) | |
1814 | + | if ((size(eb.payments) != 0)) | |
1777 | 1815 | then throw("No payments required") | |
1778 | 1816 | else { | |
1779 | - | let b = toString( | |
1780 | - | let | |
1781 | - | let p = valueOrErrorMessage(getString( | |
1782 | - | $Tuple2((((( | |
1783 | - | } | |
1784 | - | } | |
1785 | - | ||
1786 | - | ||
1787 | - | ||
1788 | - | @Callable( | |
1789 | - | func claimResToWH ( | |
1790 | - | let | |
1791 | - | if ((size( | |
1817 | + | let b = toString(eb.originCaller) | |
1818 | + | let dd = gL(b, fr, cy, it) | |
1819 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1820 | + | $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq]) | |
1821 | + | } | |
1822 | + | } | |
1823 | + | ||
1824 | + | ||
1825 | + | ||
1826 | + | @Callable(eb) | |
1827 | + | func claimResToWH (fr,it) = { | |
1828 | + | let ie = ib(eb) | |
1829 | + | if ((size(eb.payments) != 0)) | |
1792 | 1830 | then throw("No payments required") | |
1793 | 1831 | else { | |
1794 | - | let b = toString( | |
1795 | - | let | |
1796 | - | $Tuple2((((( | |
1797 | - | } | |
1798 | - | } | |
1799 | - | ||
1800 | - | ||
1801 | - | ||
1802 | - | @Callable( | |
1803 | - | func flight ( | |
1804 | - | let | |
1805 | - | if ((size( | |
1832 | + | let b = toString(eb.originCaller) | |
1833 | + | let dd = gL(b, fr, cx, it) | |
1834 | + | $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah]) | |
1835 | + | } | |
1836 | + | } | |
1837 | + | ||
1838 | + | ||
1839 | + | ||
1840 | + | @Callable(eb) | |
1841 | + | func flight (fZ,ga) = { | |
1842 | + | let ie = ib(eb) | |
1843 | + | if ((size(eb.payments) != 0)) | |
1806 | 1844 | then throw("No payments required") | |
1807 | 1845 | else { | |
1808 | - | let | |
1809 | - | let | |
1810 | - | let p = | |
1811 | - | let | |
1812 | - | let | |
1813 | - | if (( | |
1846 | + | let aT = toString(eb.caller) | |
1847 | + | let eG = fY(aT, fZ, ga) | |
1848 | + | let p = eG._2 | |
1849 | + | let io = aP(p) | |
1850 | + | let gD = valueOrElse(getString(io), W) | |
1851 | + | if ((eG._4 == gD)) | |
1814 | 1852 | then throw("You can't fly to the same location") | |
1815 | 1853 | else { | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | $Tuple2(([StringEntry( | |
1820 | - | then | |
1821 | - | else | |
1854 | + | let eK = aO(p) | |
1855 | + | let fv = eJ(eK) | |
1856 | + | let dt = de(fv[as], eG._5) | |
1857 | + | $Tuple2(([StringEntry(io, if ((eG._1 > 0)) | |
1858 | + | then eG._4 | |
1859 | + | else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0)) | |
1822 | 1860 | then y | |
1823 | - | else z)._1), | |
1861 | + | else z)._1), eG._3) | |
1824 | 1862 | } | |
1825 | 1863 | } | |
1826 | 1864 | } | |
1827 | 1865 | ||
1828 | 1866 | ||
1829 | 1867 | ||
1830 | - | @Callable( | |
1831 | - | func heal ( | |
1832 | - | let | |
1833 | - | if (if (if ((0 > | |
1868 | + | @Callable(eb) | |
1869 | + | func heal (iu,iv,iw) = { | |
1870 | + | let ie = ib(eb) | |
1871 | + | if (if (if ((0 > iu)) | |
1834 | 1872 | then true | |
1835 | - | else (0 > | |
1873 | + | else (0 > iv)) | |
1836 | 1874 | then true | |
1837 | - | else (0 > | |
1875 | + | else (0 > iw)) | |
1838 | 1876 | then throw("Quantity cannot be negative") | |
1839 | 1877 | else { | |
1840 | - | let p = valueOrErrorMessage(getString( | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | if (( | |
1846 | - | then throw((("HP should be < " + toString( | |
1878 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
1879 | + | let ix = [iu, iv, iw] | |
1880 | + | let gk = aQ(p) | |
1881 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1882 | + | let iy = valueOrElse(getInteger(gk), gl) | |
1883 | + | if ((iy >= gl)) | |
1884 | + | then throw((("HP should be < " + toString(gl)) + " to heal")) | |
1847 | 1885 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | let | |
1886 | + | let eK = aO(p) | |
1887 | + | let fv = eJ(eK) | |
1888 | + | let iz = if ((fv[as] == "")) | |
1851 | 1889 | then nil | |
1852 | - | else split( | |
1853 | - | func | |
1854 | - | let | |
1855 | - | let | |
1856 | - | then parseIntValue( | |
1890 | + | else split(fv[as], "_") | |
1891 | + | func iA (cL,iB) = { | |
1892 | + | let bS = cL._2 | |
1893 | + | let ex = if ((size(iz) > bS)) | |
1894 | + | then parseIntValue(iz[bS]) | |
1857 | 1895 | else 0 | |
1858 | - | if ((3 > | |
1896 | + | if ((3 > bS)) | |
1859 | 1897 | then { | |
1860 | - | let | |
1861 | - | if (( | |
1862 | - | then throw(((("You have only " + toString( | |
1863 | - | else $Tuple3(( | |
1898 | + | let iC = ix[bS] | |
1899 | + | if ((iC > ex)) | |
1900 | + | then throw(((("You have only " + toString(ex)) + " of ") + Z[bS])) | |
1901 | + | else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC))) | |
1864 | 1902 | } | |
1865 | - | else $Tuple3(( | |
1903 | + | else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3) | |
1866 | 1904 | } | |
1867 | 1905 | ||
1868 | - | let | |
1869 | - | let | |
1870 | - | let | |
1871 | - | let | |
1872 | - | func | |
1873 | - | then | |
1874 | - | else | |
1875 | - | ||
1876 | - | func | |
1877 | - | then | |
1906 | + | let dd = { | |
1907 | + | let cN = ac | |
1908 | + | let cO = size(cN) | |
1909 | + | let cP = $Tuple3(nil, 0, 0) | |
1910 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1911 | + | then cR | |
1912 | + | else iA(cR, cN[cS]) | |
1913 | + | ||
1914 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1915 | + | then cR | |
1878 | 1916 | else throw("List size exceeds 50") | |
1879 | 1917 | ||
1880 | - | | |
1918 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
1881 | 1919 | } | |
1882 | - | let | |
1883 | - | $Tuple2(([IntegerEntry( | |
1920 | + | let iD = min([gl, (iy + dd._3)]) | |
1921 | + | $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD) | |
1884 | 1922 | } | |
1885 | 1923 | } | |
1886 | 1924 | } | |
1887 | 1925 | ||
1888 | 1926 | ||
1889 | 1927 | ||
1890 | - | @Callable( | |
1928 | + | @Callable(eb) | |
1891 | 1929 | func healES () = { | |
1892 | - | let | |
1893 | - | if ((size( | |
1930 | + | let ie = ib(eb) | |
1931 | + | if ((size(eb.payments) != 1)) | |
1894 | 1932 | then throw("Exactly one payment required") | |
1895 | 1933 | else { | |
1896 | - | let | |
1897 | - | if (( | |
1934 | + | let if = value(eb.payments[0]) | |
1935 | + | if ((if.assetId != bb)) | |
1898 | 1936 | then throw("Allowed USDT payment only!") | |
1899 | 1937 | else { | |
1900 | - | let p = valueOrErrorMessage(getString( | |
1901 | - | let | |
1902 | - | let | |
1903 | - | let | |
1904 | - | if (( | |
1938 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
1939 | + | let gk = aQ(p) | |
1940 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1941 | + | let iy = valueOrElse(getInteger(gk), gl) | |
1942 | + | if ((iy > 0)) | |
1905 | 1943 | then throw("HP should be 0 to call Emergency Service") | |
1906 | 1944 | else { | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1945 | + | let eK = aO(p) | |
1946 | + | let fv = eJ(eK) | |
1947 | + | let iz = if ((fv[as] == "")) | |
1910 | 1948 | then nil | |
1911 | - | else split( | |
1912 | - | let | |
1913 | - | then parseIntValue( | |
1949 | + | else split(fv[as], "_") | |
1950 | + | let iE = if ((size(iz) > 0)) | |
1951 | + | then parseIntValue(iz[0]) | |
1914 | 1952 | else 0 | |
1915 | - | let | |
1916 | - | then parseIntValue( | |
1953 | + | let iF = if ((size(iz) > 1)) | |
1954 | + | then parseIntValue(iz[1]) | |
1917 | 1955 | else 0 | |
1918 | - | let | |
1919 | - | then parseIntValue( | |
1956 | + | let iG = if ((size(iz) > 2)) | |
1957 | + | then parseIntValue(iz[2]) | |
1920 | 1958 | else 0 | |
1921 | - | if (if (if (( | |
1959 | + | if (if (if ((iE > 0)) | |
1922 | 1960 | then true | |
1923 | - | else ( | |
1961 | + | else (iF > 0)) | |
1924 | 1962 | then true | |
1925 | - | else ( | |
1963 | + | else (iG > 0)) | |
1926 | 1964 | then throw("You have to use own Medical Kit") | |
1927 | 1965 | else { | |
1928 | - | let | |
1929 | - | let | |
1930 | - | then split(value( | |
1966 | + | let iH = getString(bE, aU()) | |
1967 | + | let iI = if (isDefined(iH)) | |
1968 | + | then split(value(iH), "_") | |
1931 | 1969 | else nil | |
1932 | - | let | |
1933 | - | then parseIntValue( | |
1970 | + | let iJ = if ((size(iI) > 0)) | |
1971 | + | then parseIntValue(iI[0]) | |
1934 | 1972 | else 0 | |
1935 | - | if ((0 >= | |
1973 | + | if ((0 >= iJ)) | |
1936 | 1974 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1937 | 1975 | else { | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let | |
1943 | - | if (( | |
1944 | - | then throw(("Payment attached should be " + toString( | |
1976 | + | let iD = (iy + bY[0]) | |
1977 | + | let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_") | |
1978 | + | let aY = split(ac[0], "_") | |
1979 | + | let iL = aX(aY) | |
1980 | + | let iM = fraction((iL * Y), X, (10 * af)) | |
1981 | + | if ((if.amount != iM)) | |
1982 | + | then throw(("Payment attached should be " + toString(iM))) | |
1945 | 1983 | else { | |
1946 | - | let | |
1947 | - | $Tuple2(([IntegerEntry( | |
1984 | + | let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)])) | |
1985 | + | $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd) | |
1948 | 1986 | } | |
1949 | 1987 | } | |
1950 | 1988 | } | |
1955 | 1993 | ||
1956 | 1994 | ||
1957 | 1995 | ||
1958 | - | @Callable( | |
1959 | - | func updateBackpack (p, | |
1996 | + | @Callable(eb) | |
1997 | + | func updateBackpack (p,iN) = if ((eb.caller != bE)) | |
1960 | 1998 | then throw("permission denied") | |
1961 | - | else $Tuple2([StringEntry( | |
1962 | - | ||
1963 | - | ||
1964 | - | ||
1965 | - | @Callable( | |
1999 | + | else $Tuple2([StringEntry(aO(p), iN)], iN) | |
2000 | + | ||
2001 | + | ||
2002 | + | ||
2003 | + | @Callable(eb) | |
1966 | 2004 | func buySLand () = { | |
1967 | - | let | |
1968 | - | if ((size( | |
2005 | + | let ie = ib(eb) | |
2006 | + | if ((size(eb.payments) != 1)) | |
1969 | 2007 | then throw("Exactly one payment required") | |
1970 | 2008 | else { | |
1971 | - | let | |
1972 | - | if (( | |
2009 | + | let if = value(eb.payments[0]) | |
2010 | + | if ((if.assetId != bb)) | |
1973 | 2011 | then throw("Allowed USDT payment only!") | |
1974 | - | else if (( | |
1975 | - | then throw(("Payment attached should be " + toString( | |
2012 | + | else if ((if.amount != ce)) | |
2013 | + | then throw(("Payment attached should be " + toString(ce))) | |
1976 | 2014 | else { | |
1977 | - | let | |
1978 | - | $Tuple2(((( | |
2015 | + | let dd = fQ(eb.caller, eb.transactionId) | |
2016 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1) | |
1979 | 2017 | } | |
1980 | 2018 | } | |
1981 | 2019 | } | |
1982 | 2020 | ||
1983 | 2021 | ||
1984 | 2022 | ||
1985 | - | @Callable( | |
1986 | - | func expedition ( | |
1987 | - | let | |
1988 | - | if ((size( | |
2023 | + | @Callable(eb) | |
2024 | + | func expedition (fZ,ga) = { | |
2025 | + | let ie = ib(eb) | |
2026 | + | if ((size(eb.payments) != 0)) | |
1989 | 2027 | then throw("No payments required") | |
1990 | 2028 | else { | |
1991 | - | let | |
1992 | - | let p = valueOrErrorMessage(getString( | |
1993 | - | $Tuple2((( | |
1994 | - | } | |
1995 | - | } | |
1996 | - | ||
1997 | - | ||
1998 | - | ||
1999 | - | @Callable( | |
2000 | - | func upgradeInfra ( | |
2001 | - | let | |
2002 | - | if ((size( | |
2029 | + | let dd = gq(eb.caller, eb.transactionId, fZ, ga) | |
2030 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
2031 | + | $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3)) | |
2032 | + | } | |
2033 | + | } | |
2034 | + | ||
2035 | + | ||
2036 | + | ||
2037 | + | @Callable(eb) | |
2038 | + | func upgradeInfra (aF) = { | |
2039 | + | let ie = ib(eb) | |
2040 | + | if ((size(eb.payments) != 0)) | |
2003 | 2041 | then throw("No payments required") | |
2004 | 2042 | else { | |
2005 | - | let | |
2006 | - | let p = valueOrErrorMessage(getString( | |
2007 | - | $Tuple2((( | |
2008 | - | } | |
2009 | - | } | |
2010 | - | ||
2011 | - | ||
2012 | - | ||
2013 | - | @Callable( | |
2014 | - | func upgradeInfraUsdt ( | |
2043 | + | let dd = gY(true, eb.caller, 0, aF) | |
2044 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
2045 | + | $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2) | |
2046 | + | } | |
2047 | + | } | |
2048 | + | ||
2049 | + | ||
2050 | + | ||
2051 | + | @Callable(eb) | |
2052 | + | func upgradeInfraUsdt (aF) = if ((eb.caller != this)) | |
2015 | 2053 | then throw("Permission denied") | |
2016 | 2054 | else { | |
2017 | - | let | |
2018 | - | if ((size( | |
2055 | + | let ie = ib(eb) | |
2056 | + | if ((size(eb.payments) != 1)) | |
2019 | 2057 | then throw("Exactly one payment required") | |
2020 | 2058 | else { | |
2021 | - | let | |
2022 | - | if (( | |
2059 | + | let if = value(eb.payments[0]) | |
2060 | + | if ((if.assetId != bb)) | |
2023 | 2061 | then throw("Allowed USDT payment only!") | |
2024 | 2062 | else { | |
2025 | - | let | |
2026 | - | $Tuple2((( | |
2063 | + | let dd = gY(false, eb.caller, if.amount, aF) | |
2064 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2) | |
2027 | 2065 | } | |
2028 | 2066 | } | |
2029 | 2067 | } | |
2030 | 2068 | ||
2031 | 2069 | ||
2032 | 2070 | ||
2033 | - | @Callable( | |
2034 | - | func activateArtifact ( | |
2035 | - | let | |
2036 | - | if ((size( | |
2071 | + | @Callable(eb) | |
2072 | + | func activateArtifact (iO,iP) = { | |
2073 | + | let ie = ib(eb) | |
2074 | + | if ((size(eb.payments) != 0)) | |
2037 | 2075 | then throw("No payments required") | |
2038 | 2076 | else { | |
2039 | - | let b = toString( | |
2040 | - | let | |
2041 | - | let | |
2042 | - | if (("PRESALE" == | |
2043 | - | then | |
2044 | - | else if (("ONBOARD" == | |
2045 | - | then | |
2077 | + | let b = toString(eb.caller) | |
2078 | + | let dd = { | |
2079 | + | let bc = iO | |
2080 | + | if (("PRESALE" == bc)) | |
2081 | + | then hy(b, iP) | |
2082 | + | else if (("ONBOARD" == bc)) | |
2083 | + | then hr(b) | |
2046 | 2084 | else throw("Unknown artifact") | |
2047 | 2085 | } | |
2048 | - | ( | |
2049 | - | } | |
2050 | - | } | |
2051 | - | ||
2052 | - | ||
2053 | - | ||
2054 | - | @Callable( | |
2055 | - | func mergeLands ( | |
2056 | - | let | |
2057 | - | if ((size( | |
2086 | + | (dd :+ ie) | |
2087 | + | } | |
2088 | + | } | |
2089 | + | ||
2090 | + | ||
2091 | + | ||
2092 | + | @Callable(eb) | |
2093 | + | func mergeLands (hD) = { | |
2094 | + | let ie = ib(eb) | |
2095 | + | if ((size(eb.payments) != 0)) | |
2058 | 2096 | then throw("No payments required") | |
2059 | 2097 | else { | |
2060 | - | let | |
2061 | - | $Tuple2((( | |
2062 | - | } | |
2063 | - | } | |
2064 | - | ||
2065 | - | ||
2066 | - | ||
2067 | - | @Callable( | |
2068 | - | func mergeLandsUsdt ( | |
2069 | - | let | |
2070 | - | if ((size( | |
2098 | + | let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId) | |
2099 | + | $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2) | |
2100 | + | } | |
2101 | + | } | |
2102 | + | ||
2103 | + | ||
2104 | + | ||
2105 | + | @Callable(eb) | |
2106 | + | func mergeLandsUsdt (hD) = { | |
2107 | + | let ie = ib(eb) | |
2108 | + | if ((size(eb.payments) != 1)) | |
2071 | 2109 | then throw("Exactly one payment required") | |
2072 | 2110 | else { | |
2073 | - | let | |
2074 | - | if (( | |
2111 | + | let if = value(eb.payments[0]) | |
2112 | + | if ((if.assetId != bb)) | |
2075 | 2113 | then throw("Allowed USDT payment only!") | |
2076 | 2114 | else { | |
2077 | - | let | |
2078 | - | $Tuple2((( | |
2115 | + | let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId) | |
2116 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2) | |
2079 | 2117 | } | |
2080 | 2118 | } | |
2081 | 2119 | } | |
2082 | 2120 | ||
2083 | 2121 | ||
2084 | 2122 | ||
2085 | - | @Callable( | |
2086 | - | func cargoExchange ( | |
2087 | - | let | |
2088 | - | if ((size( | |
2123 | + | @Callable(eb) | |
2124 | + | func cargoExchange (iQ,aF) = { | |
2125 | + | let ie = ib(eb) | |
2126 | + | if ((size(eb.payments) != 0)) | |
2089 | 2127 | then throw("No payments required") | |
2090 | 2128 | else { | |
2091 | - | let | |
2092 | - | let b = toString( | |
2093 | - | let | |
2094 | - | let | |
2095 | - | if (!(isDefined(getInteger( | |
2096 | - | then throw(( | |
2129 | + | let fu = split_4C(iQ, ":") | |
2130 | + | let b = toString(eb.originCaller) | |
2131 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2132 | + | let gH = ax(aF) | |
2133 | + | if (!(isDefined(getInteger(gH)))) | |
2134 | + | then throw((gG.name + " is not staked")) | |
2097 | 2135 | else { | |
2098 | - | let | |
2099 | - | if (( | |
2136 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
2137 | + | if ((gJ != b)) | |
2100 | 2138 | then throw((P + " is not yours")) | |
2101 | 2139 | else { | |
2102 | - | let | |
2103 | - | let | |
2104 | - | let p = valueOrErrorMessage(getString( | |
2105 | - | let | |
2106 | - | let | |
2107 | - | if (( | |
2108 | - | then throw((("Duck location type is " + | |
2109 | - | else if (( | |
2110 | - | then throw(("Duck should be on the land " + | |
2140 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2141 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2142 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2143 | + | let gD = valueOrElse(getString(aP(p)), W) | |
2144 | + | let gE = split(value(gD), "_") | |
2145 | + | if ((gE[aV] != "L")) | |
2146 | + | then throw((("Duck location type is " + gE[aV]) + ", but should be L")) | |
2147 | + | else if ((gE[aW] != aF)) | |
2148 | + | then throw(("Duck should be on the land " + aF)) | |
2111 | 2149 | else { | |
2112 | - | let | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | let | |
2119 | - | let | |
2120 | - | [StringEntry( | |
2150 | + | let fc = aE(aF) | |
2151 | + | let eP = fb(fc, fd, fe) | |
2152 | + | let eK = aO(p) | |
2153 | + | let fv = eJ(eK) | |
2154 | + | let dd = ft(fu, eP, fv) | |
2155 | + | let fk = split(eP[ak], "_") | |
2156 | + | let gV = (parseIntValue(fk[am]) + dd._7) | |
2157 | + | let gW = (parseIntValue(fk[an]) - dd._7) | |
2158 | + | [StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie] | |
2121 | 2159 | } | |
2122 | 2160 | } | |
2123 | 2161 | } | |
2126 | 2164 | ||
2127 | 2165 | ||
2128 | 2166 | ||
2129 | - | @Callable( | |
2130 | - | func saveWarehouse ( | |
2167 | + | @Callable(eb) | |
2168 | + | func saveWarehouse (fg,aF) = if ((eb.caller != bE)) | |
2131 | 2169 | then throw("Access denied") | |
2132 | 2170 | else { | |
2133 | - | let | |
2134 | - | let | |
2135 | - | if ((size( | |
2171 | + | let fc = aE(aF) | |
2172 | + | let fh = split_4C(fg, ":") | |
2173 | + | if ((size(fh) != 5)) | |
2136 | 2174 | then throw("warehouse string should contain 4 ':' separators") | |
2137 | 2175 | else { | |
2138 | - | let | |
2139 | - | let | |
2140 | - | let | |
2141 | - | let | |
2142 | - | let | |
2143 | - | $Tuple2([StringEntry( | |
2176 | + | let iR = split(fh[ak], "_")[al] | |
2177 | + | let gV = eO(fh) | |
2178 | + | let iS = eM(fh[ag]) | |
2179 | + | let gW = ((iS - parseIntValue(iR)) - gV) | |
2180 | + | let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":") | |
2181 | + | $Tuple2([StringEntry(fc, iT)], iT) | |
2144 | 2182 | } | |
2145 | 2183 | } | |
2146 | 2184 | ||
2147 | 2185 | ||
2148 | 2186 | ||
2149 | - | @Callable( | |
2150 | - | func fixWarehouseFormat ( | |
2187 | + | @Callable(eb) | |
2188 | + | func fixWarehouseFormat (aF) = if ((eb.caller != bC)) | |
2151 | 2189 | then throw("Access denied") | |
2152 | 2190 | else { | |
2153 | - | let | |
2154 | - | let | |
2155 | - | let | |
2156 | - | let | |
2157 | - | let | |
2158 | - | let | |
2159 | - | let | |
2160 | - | let | |
2161 | - | let | |
2162 | - | let | |
2163 | - | $Tuple2([StringEntry( | |
2191 | + | let fc = aE(aF) | |
2192 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2193 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2194 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2195 | + | let fh = fb(fc, fd, fe) | |
2196 | + | let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil)) | |
2197 | + | let gV = eO(fh) | |
2198 | + | let iS = eM(fh[ag]) | |
2199 | + | let gW = ((iS - iR) - gV) | |
2200 | + | let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":") | |
2201 | + | $Tuple2([StringEntry(fc, iT)], iT) | |
2164 | 2202 | } | |
2165 | 2203 | ||
2166 | 2204 | ||
2167 | 2205 | ||
2168 | - | @Callable( | |
2169 | - | func fixStakedPieces ( | |
2206 | + | @Callable(eb) | |
2207 | + | func fixStakedPieces (bp) = if ((eb.caller != bC)) | |
2170 | 2208 | then throw("Access denied") | |
2171 | 2209 | else { | |
2172 | - | let | |
2210 | + | let hU = if ((bp == "")) | |
2173 | 2211 | then 0 | |
2174 | 2212 | else { | |
2175 | - | let | |
2176 | - | let | |
2177 | - | then split_51C(value( | |
2213 | + | let hP = getString(bD, bM(bp)) | |
2214 | + | let hK = if (isDefined(hP)) | |
2215 | + | then split_51C(value(hP), "_") | |
2178 | 2216 | else nil | |
2179 | - | func | |
2180 | - | let | |
2181 | - | let | |
2182 | - | ( | |
2217 | + | func iU (cL,aF) = { | |
2218 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2219 | + | let bU = split(gG.description, "_")[bI] | |
2220 | + | (cL + bT(bU)) | |
2183 | 2221 | } | |
2184 | 2222 | ||
2185 | - | let | |
2186 | - | let | |
2187 | - | let | |
2188 | - | func | |
2189 | - | then | |
2190 | - | else | |
2191 | - | ||
2192 | - | func | |
2193 | - | then | |
2223 | + | let cN = hK | |
2224 | + | let cO = size(cN) | |
2225 | + | let cP = 0 | |
2226 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
2227 | + | then cR | |
2228 | + | else iU(cR, cN[cS]) | |
2229 | + | ||
2230 | + | func cT (cR,cS) = if ((cS >= cO)) | |
2231 | + | then cR | |
2194 | 2232 | else throw("List size exceeds 100") | |
2195 | 2233 | ||
2196 | - | | |
2234 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2197 | 2235 | } | |
2198 | - | $Tuple2([IntegerEntry( | |
2236 | + | $Tuple2([IntegerEntry(bN(bp), hU)], hU) | |
2199 | 2237 | } | |
2200 | 2238 | ||
2201 | 2239 | ||
2202 | 2240 | ||
2203 | - | @Callable( | |
2204 | - | func setCustomName ( | |
2205 | - | let | |
2206 | - | if ((size( | |
2241 | + | @Callable(eb) | |
2242 | + | func setCustomName (av,hM,aA) = { | |
2243 | + | let ie = ib(eb) | |
2244 | + | if ((size(eb.payments) != 1)) | |
2207 | 2245 | then throw("Exactly one payment required") | |
2208 | 2246 | else { | |
2209 | - | let | |
2210 | - | if (( | |
2247 | + | let if = value(eb.payments[0]) | |
2248 | + | if ((if.assetId != bb)) | |
2211 | 2249 | then throw("Allowed USDT payment only!") | |
2212 | - | else if (( | |
2213 | - | then throw(("Payment should be " + toString( | |
2214 | - | else if (contains( | |
2215 | - | then throw(("Name should not contain '__': " + | |
2216 | - | else if ((size( | |
2217 | - | then throw(("Name too long, maxLength=" + toString( | |
2250 | + | else if ((if.amount != ca)) | |
2251 | + | then throw(("Payment should be " + toString(ca))) | |
2252 | + | else if (contains(hM, "__")) | |
2253 | + | then throw(("Name should not contain '__': " + hM)) | |
2254 | + | else if ((size(hM) > cb)) | |
2255 | + | then throw(("Name too long, maxLength=" + toString(cb))) | |
2218 | 2256 | else { | |
2219 | - | let b = toString( | |
2220 | - | let | |
2221 | - | let | |
2222 | - | if (("ACCOUNT" == | |
2257 | + | let b = toString(eb.originCaller) | |
2258 | + | let iV = { | |
2259 | + | let bc = aA | |
2260 | + | if (("ACCOUNT" == bc)) | |
2223 | 2261 | then { | |
2224 | - | let | |
2225 | - | let | |
2226 | - | if (isDefined( | |
2227 | - | then throw(("Name already registered: " + | |
2262 | + | let iW = cv(hM) | |
2263 | + | let iX = getString(iW) | |
2264 | + | if (isDefined(iX)) | |
2265 | + | then throw(("Name already registered: " + hM)) | |
2228 | 2266 | else { | |
2229 | - | let | |
2230 | - | let | |
2231 | - | let | |
2232 | - | then [DeleteEntry( | |
2267 | + | let iY = aH(b) | |
2268 | + | let iZ = getString(iY) | |
2269 | + | let ja = if (isDefined(iZ)) | |
2270 | + | then [DeleteEntry(cv(value(iZ)))] | |
2233 | 2271 | else nil | |
2234 | - | ((( | |
2272 | + | (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1) | |
2235 | 2273 | } | |
2236 | 2274 | } | |
2237 | - | else if (("LAND" == | |
2275 | + | else if (("LAND" == bc)) | |
2238 | 2276 | then { | |
2239 | - | let | |
2240 | - | let | |
2241 | - | if (!(isDefined(getInteger( | |
2242 | - | then throw(( | |
2277 | + | let gG = value(assetInfo(fromBase58String(av))) | |
2278 | + | let gH = ax(av) | |
2279 | + | if (!(isDefined(getInteger(gH)))) | |
2280 | + | then throw((gG.name + " is not staked")) | |
2243 | 2281 | else { | |
2244 | - | let | |
2245 | - | if (( | |
2282 | + | let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned")) | |
2283 | + | if ((gJ != b)) | |
2246 | 2284 | then throw((P + " is not yours")) | |
2247 | 2285 | else { | |
2248 | - | let | |
2249 | - | let | |
2250 | - | if (isDefined( | |
2251 | - | then throw(("Name already registered: " + | |
2286 | + | let iW = cp(hM) | |
2287 | + | let iX = getString(iW) | |
2288 | + | if (isDefined(iX)) | |
2289 | + | then throw(("Name already registered: " + hM)) | |
2252 | 2290 | else { | |
2253 | - | let | |
2254 | - | let | |
2255 | - | let | |
2256 | - | then [DeleteEntry( | |
2291 | + | let jb = aw(av) | |
2292 | + | let iZ = getString(jb) | |
2293 | + | let ja = if (isDefined(iZ)) | |
2294 | + | then [DeleteEntry(cp(value(iZ)))] | |
2257 | 2295 | else nil | |
2258 | - | ((( | |
2296 | + | (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1) | |
2259 | 2297 | } | |
2260 | 2298 | } | |
2261 | 2299 | } | |
2262 | 2300 | } | |
2263 | - | else if (("DUCK" == | |
2301 | + | else if (("DUCK" == bc)) | |
2264 | 2302 | then { | |
2265 | - | let | |
2266 | - | let | |
2267 | - | if (if (!(isDefined(getInteger( | |
2303 | + | let gG = value(assetInfo(fromBase58String(av))) | |
2304 | + | let gH = ax(av) | |
2305 | + | if (if (!(isDefined(getInteger(gH)))) | |
2268 | 2306 | then true | |
2269 | - | else !(isDefined(getString( | |
2270 | - | then throw(( | |
2307 | + | else !(isDefined(getString(aN(b))))) | |
2308 | + | then throw((gG.name + " is not staked")) | |
2271 | 2309 | else { | |
2272 | - | let | |
2273 | - | if (( | |
2310 | + | let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned")) | |
2311 | + | if ((gJ != b)) | |
2274 | 2312 | then throw((Q + " is not yours")) | |
2275 | 2313 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | if (isDefined( | |
2279 | - | then throw(("Name already registered: " + | |
2314 | + | let iW = cu(hM) | |
2315 | + | let iX = getString(iW) | |
2316 | + | if (isDefined(iX)) | |
2317 | + | then throw(("Name already registered: " + hM)) | |
2280 | 2318 | else { | |
2281 | - | let | |
2282 | - | let | |
2283 | - | let | |
2284 | - | then [DeleteEntry( | |
2319 | + | let jb = aG(av) | |
2320 | + | let iZ = getString(jb) | |
2321 | + | let ja = if (isDefined(iZ)) | |
2322 | + | then [DeleteEntry(cu(value(iZ)))] | |
2285 | 2323 | else nil | |
2286 | - | ((( | |
2324 | + | (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1) | |
2287 | 2325 | } | |
2288 | 2326 | } | |
2289 | 2327 | } | |
2290 | 2328 | } | |
2291 | 2329 | else throw("Unknown entity type") | |
2292 | 2330 | } | |
2293 | - | $Tuple2((( | |
2331 | + | $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0) | |
2294 | 2332 | } | |
2295 | 2333 | } | |
2296 | 2334 | } | |
2297 | 2335 | ||
2298 | 2336 | ||
2299 | 2337 | ||
2300 | - | @Callable( | |
2301 | - | func setReferrals ( | |
2338 | + | @Callable(eb) | |
2339 | + | func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX)) | |
2302 | 2340 | then throw("Permission denied") | |
2303 | 2341 | else { | |
2304 | - | let | |
2305 | - | if ((size( | |
2342 | + | let ie = ib(eb) | |
2343 | + | if ((size(eb.payments) != 0)) | |
2306 | 2344 | then throw("No payments required") | |
2307 | - | else if (!(isDefined(addressFromString( | |
2308 | - | then throw(("Invalid address: " + | |
2309 | - | else if (!(isDefined(addressFromString( | |
2310 | - | then throw(("Invalid address: " + | |
2345 | + | else if (!(isDefined(addressFromString(jc)))) | |
2346 | + | then throw(("Invalid address: " + jc)) | |
2347 | + | else if (!(isDefined(addressFromString(jd)))) | |
2348 | + | then throw(("Invalid address: " + jd)) | |
2311 | 2349 | else { | |
2312 | - | let | |
2313 | - | let | |
2314 | - | let | |
2315 | - | then split_4C(value( | |
2350 | + | let je = cw() | |
2351 | + | let jf = getString(je) | |
2352 | + | let jg = if (isDefined(jf)) | |
2353 | + | then split_4C(value(jf), "_") | |
2316 | 2354 | else nil | |
2317 | - | if (containsElement( | |
2318 | - | then throw(( | |
2355 | + | if (containsElement(jg, jd)) | |
2356 | + | then throw((jd + " is not newbie (already has referrals)")) | |
2319 | 2357 | else { | |
2320 | - | let | |
2321 | - | let | |
2322 | - | if (if (isDefined( | |
2323 | - | then isDefined(addressFromString(value( | |
2358 | + | let hs = aI(jd) | |
2359 | + | let ht = getString(hs) | |
2360 | + | if (if (isDefined(ht)) | |
2361 | + | then isDefined(addressFromString(value(ht))) | |
2324 | 2362 | else false) | |
2325 | - | then throw((( | |
2363 | + | then throw(((jd + " already has refBy: ") + value(ht))) | |
2326 | 2364 | else { | |
2327 | - | let | |
2328 | - | let | |
2329 | - | let | |
2330 | - | then split_4C(value( | |
2365 | + | let jh = aL(jc) | |
2366 | + | let ji = getString(jh) | |
2367 | + | let jj = if (isDefined(ji)) | |
2368 | + | then split_4C(value(ji), "_") | |
2331 | 2369 | else nil | |
2332 | - | if (containsElement( | |
2333 | - | then throw(((( | |
2370 | + | if (containsElement(jj, jd)) | |
2371 | + | then throw((((jc + " already contains ") + jd) + " within referrals")) | |
2334 | 2372 | else { | |
2335 | - | let | |
2336 | - | let | |
2337 | - | then value( | |
2338 | - | else makeString_2C(( | |
2339 | - | $Tuple2([StringEntry( | |
2373 | + | let jk = makeString_2C((jj :+ jd), "_") | |
2374 | + | let jl = if (containsElement(jg, jc)) | |
2375 | + | then value(jf) | |
2376 | + | else makeString_2C((jg :+ jc), "_") | |
2377 | + | $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0) | |
2340 | 2378 | } | |
2341 | 2379 | } | |
2342 | 2380 | } | |
2345 | 2383 | ||
2346 | 2384 | ||
2347 | 2385 | ||
2348 | - | @Callable( | |
2349 | - | func distributePoints ( | |
2350 | - | let | |
2351 | - | if ((size( | |
2386 | + | @Callable(eb) | |
2387 | + | func distributePoints (jm,jn,jo,jp,jq) = { | |
2388 | + | let ie = ib(eb) | |
2389 | + | if ((size(eb.payments) != 0)) | |
2352 | 2390 | then throw("No payments required") | |
2353 | 2391 | else { | |
2354 | - | let b = toString( | |
2355 | - | let p = valueOrErrorMessage(getString( | |
2356 | - | let | |
2357 | - | let | |
2358 | - | let | |
2359 | - | let | |
2360 | - | let | |
2361 | - | let | |
2362 | - | if (( | |
2363 | - | then throw((("There are only " + toString( | |
2392 | + | let b = toString(eb.originCaller) | |
2393 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2394 | + | let jr = w(b) | |
2395 | + | let js = valueOrElse(getInteger(bD, jr), 0) | |
2396 | + | let jt = s(p) | |
2397 | + | let ju = valueOrElse(getInteger(bD, jt), 0) | |
2398 | + | let jv = (js + ju) | |
2399 | + | let jw = ((((jm + jn) + jo) + jp) + jq) | |
2400 | + | if ((jw > jv)) | |
2401 | + | then throw((("There are only " + toString(jv)) + " free points to distribute")) | |
2364 | 2402 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | $Tuple2([IntegerEntry( | |
2403 | + | let jx = o(p) | |
2404 | + | let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_") | |
2405 | + | let jz = (js - jw) | |
2406 | + | $Tuple2([IntegerEntry(jr, if ((0 > jz)) | |
2369 | 2407 | then 0 | |
2370 | - | else | |
2371 | - | then ( | |
2372 | - | else | |
2408 | + | else jz), IntegerEntry(jt, if ((0 > jz)) | |
2409 | + | then (ju + jz) | |
2410 | + | else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0) | |
2373 | 2411 | } | |
2374 | 2412 | } | |
2375 | 2413 | } | |
2376 | 2414 | ||
2377 | 2415 | ||
2378 | 2416 | ||
2379 | - | @Callable( | |
2380 | - | func splitByGlobalWeightsREADONLY ( | |
2381 | - | ||
2382 | - | ||
2383 | - | ||
2384 | - | @Callable( | |
2385 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2386 | - | let | |
2387 | - | $Tuple2(nil, $Tuple2( | |
2388 | - | } | |
2389 | - | ||
2390 | - | ||
2391 | - | ||
2392 | - | @Callable( | |
2393 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2394 | - | ||
2395 | - | ||
2396 | - | ||
2397 | - | @Callable( | |
2398 | - | func getWarehouseREADONLY ( | |
2399 | - | let | |
2400 | - | let | |
2401 | - | let | |
2402 | - | $Tuple2(nil, makeString_2C( | |
2403 | - | } | |
2404 | - | ||
2405 | - | ||
2406 | - | ||
2407 | - | @Callable( | |
2408 | - | func saveLastTx () = if (if (( | |
2409 | - | then ( | |
2417 | + | @Callable(eb) | |
2418 | + | func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr)) | |
2419 | + | ||
2420 | + | ||
2421 | + | ||
2422 | + | @Callable(eb) | |
2423 | + | func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = { | |
2424 | + | let dX = ed(ee) | |
2425 | + | $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX))) | |
2426 | + | } | |
2427 | + | ||
2428 | + | ||
2429 | + | ||
2430 | + | @Callable(eb) | |
2431 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":")) | |
2432 | + | ||
2433 | + | ||
2434 | + | ||
2435 | + | @Callable(eb) | |
2436 | + | func getWarehouseREADONLY (aF) = { | |
2437 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2438 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2439 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2440 | + | $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":")) | |
2441 | + | } | |
2442 | + | ||
2443 | + | ||
2444 | + | ||
2445 | + | @Callable(eb) | |
2446 | + | func saveLastTx () = if (if ((eb.caller != bG)) | |
2447 | + | then (eb.caller != bE) | |
2410 | 2448 | else false) | |
2411 | 2449 | then throw("Access denied") | |
2412 | - | else $Tuple2([ | |
2413 | - | ||
2414 | - | ||
2415 | - | ||
2416 | - | @Callable( | |
2417 | - | func updateDuckStats (p, | |
2450 | + | else $Tuple2([ib(eb)], 42) | |
2451 | + | ||
2452 | + | ||
2453 | + | ||
2454 | + | @Callable(eb) | |
2455 | + | func updateDuckStats (p,hl) = if ((eb.caller != bE)) | |
2418 | 2456 | then throw("Access denied") | |
2419 | - | else | |
2420 | - | ||
2421 | - | ||
2422 | - | ||
2423 | - | @Callable( | |
2424 | - | func updateAccStats (b, | |
2457 | + | else hk(p, hl) | |
2458 | + | ||
2459 | + | ||
2460 | + | ||
2461 | + | @Callable(eb) | |
2462 | + | func updateAccStats (b,hl) = if ((eb.caller != bE)) | |
2425 | 2463 | then throw("Access denied") | |
2426 | - | else | |
2427 | - | ||
2428 | - | ||
2429 | - | ||
2430 | - | @Callable( | |
2431 | - | func equipDuck ( | |
2432 | - | let | |
2433 | - | if ((size( | |
2464 | + | else hq(b, hl) | |
2465 | + | ||
2466 | + | ||
2467 | + | ||
2468 | + | @Callable(eb) | |
2469 | + | func equipDuck (jC) = { | |
2470 | + | let ie = ib(eb) | |
2471 | + | if ((size(eb.payments) != 0)) | |
2434 | 2472 | then throw("No payments required") | |
2435 | 2473 | else { | |
2436 | - | let b = toString( | |
2437 | - | let p = valueOrErrorMessage(getString( | |
2438 | - | let | |
2439 | - | let | |
2440 | - | let | |
2441 | - | let | |
2442 | - | let | |
2443 | - | if ((size( | |
2474 | + | let b = toString(eb.originCaller) | |
2475 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2476 | + | let jD = t(p) | |
2477 | + | let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2478 | + | let eK = aO(p) | |
2479 | + | let fv = eJ(eK) | |
2480 | + | let jF = split(jC, "_") | |
2481 | + | if ((size(jF) != l)) | |
2444 | 2482 | then throw("Wrong equipment string") | |
2445 | 2483 | else { | |
2446 | - | let | |
2447 | - | let | |
2484 | + | let jG = fv[as] | |
2485 | + | let dh = if ((jG == "")) | |
2448 | 2486 | then nil | |
2449 | - | else split( | |
2450 | - | let | |
2451 | - | let | |
2452 | - | $Tuple2([StringEntry( | |
2487 | + | else split(jG, "_") | |
2488 | + | let jH = dQ(jE, dh, true) | |
2489 | + | let dt = dQ(jF, jH, false) | |
2490 | + | $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0) | |
2453 | 2491 | } | |
2454 | 2492 | } | |
2455 | 2493 | } |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = 0 | |
16 | 16 | ||
17 | 17 | let h = 1 | |
18 | 18 | ||
19 | 19 | let i = 2 | |
20 | 20 | ||
21 | 21 | let j = 3 | |
22 | 22 | ||
23 | 23 | let k = 4 | |
24 | 24 | ||
25 | 25 | let l = 6 | |
26 | 26 | ||
27 | 27 | let m = 2 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
31 | 31 | func o (p) = ("duckChars_" + p) | |
32 | 32 | ||
33 | 33 | ||
34 | 34 | func q (p) = ("duckXP_" + p) | |
35 | 35 | ||
36 | 36 | ||
37 | 37 | func r (p) = ("duckLevel_" + p) | |
38 | 38 | ||
39 | 39 | ||
40 | 40 | func s (p) = ("duckFreePoints_" + p) | |
41 | 41 | ||
42 | 42 | ||
43 | 43 | func t (p) = ("duckEquipment_" + p) | |
44 | 44 | ||
45 | 45 | ||
46 | 46 | func u (b) = ("userXP_" + b) | |
47 | 47 | ||
48 | 48 | ||
49 | 49 | func v (b) = ("userLevel_" + b) | |
50 | 50 | ||
51 | 51 | ||
52 | 52 | func w (b) = ("userFreePoints_" + b) | |
53 | 53 | ||
54 | 54 | ||
55 | 55 | let x = 100000 | |
56 | 56 | ||
57 | 57 | let y = 50000 | |
58 | 58 | ||
59 | 59 | let z = 10000 | |
60 | 60 | ||
61 | 61 | let A = 100000 | |
62 | 62 | ||
63 | 63 | let B = 5000000 | |
64 | 64 | ||
65 | 65 | let C = 50000000 | |
66 | 66 | ||
67 | 67 | let D = 100000 | |
68 | 68 | ||
69 | 69 | let E = 10000000 | |
70 | 70 | ||
71 | 71 | let F = 10000000 | |
72 | 72 | ||
73 | 73 | let G = 10000 | |
74 | 74 | ||
75 | 75 | func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c) | |
76 | 76 | ||
77 | 77 | ||
78 | 78 | func J (K) = (100 + K) | |
79 | 79 | ||
80 | 80 | ||
81 | 81 | func L (M,N) = { | |
82 | 82 | let O = H(N) | |
83 | 83 | [O, (f * (O - M))] | |
84 | 84 | } | |
85 | 85 | ||
86 | 86 | ||
87 | 87 | let P = "LAND" | |
88 | 88 | ||
89 | 89 | let Q = "DUCK" | |
90 | 90 | ||
91 | 91 | let R = "PRESALE" | |
92 | 92 | ||
93 | 93 | let S = 6 | |
94 | 94 | ||
95 | 95 | let T = 3456000 | |
96 | 96 | ||
97 | 97 | let U = 86400000 | |
98 | 98 | ||
99 | 99 | let V = 10000000000 | |
100 | 100 | ||
101 | 101 | let W = "Africa_F_Africa" | |
102 | 102 | ||
103 | 103 | let X = 39637 | |
104 | 104 | ||
105 | 105 | let Y = 10 | |
106 | 106 | ||
107 | 107 | let Z = ["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"] | |
108 | 108 | ||
109 | 109 | let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
110 | 110 | ||
111 | 111 | let ab = 10000000 | |
112 | 112 | ||
113 | 113 | let ac = ["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_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "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_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
114 | 114 | ||
115 | 115 | let ad = 6 | |
116 | 116 | ||
117 | 117 | let ae = 10 | |
118 | 118 | ||
119 | - | let af = 0 | |
120 | - | ||
121 | - | let ag = 1 | |
122 | - | ||
123 | - | let ah = 2 | |
124 | - | ||
125 | - | let ai = 3 | |
126 | - | ||
127 | - | let aj = 4 | |
128 | - | ||
129 | - | let ak = 0 | |
130 | - | ||
131 | - | let al = 1 | |
132 | - | ||
133 | - | let am = 2 | |
134 | - | ||
135 | - | let an = 3 | |
136 | - | ||
137 | - | let ao = 0 | |
138 | - | ||
139 | - | let ap = 1 | |
140 | - | ||
141 | - | let aq = 2 | |
142 | - | ||
143 | - | let ar = 3 | |
144 | - | ||
145 | - | func as (b) = ("lastTxIdByUser_" + b) | |
146 | - | ||
147 | - | ||
148 | - | func at (au) = ("nftOwner_" + au) | |
149 | - | ||
150 | - | ||
151 | - | func av (au) = ("landCustomNameByAssetId_" + au) | |
152 | - | ||
153 | - | ||
154 | - | func aw (au) = ("stakedTime_" + au) | |
155 | - | ||
156 | - | ||
157 | - | func ax (au) = ("infraLevel_" + au) | |
158 | - | ||
159 | - | ||
160 | - | func ay (az,au) = makeString(["landArtStatus", az, au], "_") | |
161 | - | ||
162 | - | ||
163 | - | func aA (aB,au,aC) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aB) + "_") + au) + "_") + aC) | |
164 | - | ||
165 | - | ||
166 | - | func aD (aE) = ("wareHouse_" + aE) | |
167 | - | ||
168 | - | ||
169 | - | func aF (au) = ("duckCustomNameByAssetId_" + au) | |
170 | - | ||
171 | - | ||
172 | - | func aG (b) = ("accountCustomNameByAddr_" + b) | |
173 | - | ||
174 | - | ||
175 | - | func aH (b) = ("accRefBy_" + b) | |
176 | - | ||
177 | - | ||
178 | - | func aI (p) = ("onboardArtActivatedOnDuck_" + p) | |
179 | - | ||
180 | - | ||
181 | - | func aJ (b) = ("onboardArtActivatedDuckBy_" + b) | |
182 | - | ||
183 | - | ||
184 | - | func aK (b) = ("accReferrals_" + b) | |
185 | - | ||
186 | - | ||
187 | - | func aL (au) = ("duckOwner_" + au) | |
188 | - | ||
189 | - | ||
190 | - | func aM (aC) = ("stakedDuckByOwner_" + aC) | |
191 | - | ||
192 | - | ||
193 | - | func aN (p) = ("backPack_" + p) | |
194 | - | ||
195 | - | ||
196 | - | func aO (p) = ("duckLocation_" + p) | |
197 | - | ||
198 | - | ||
199 | - | func aP (p) = ("duckHealth_" + p) | |
200 | - | ||
201 | - | ||
202 | - | func aQ () = "contractsBlocked" | |
203 | - | ||
204 | - | ||
205 | - | func aR (aS) = ("%s%s__userGwlReleaseTime__" + aS) | |
206 | - | ||
207 | - | ||
208 | - | func aT () = "emergencyWarehouseProducts" | |
209 | - | ||
210 | - | ||
211 | - | let aU = 1 | |
212 | - | ||
213 | - | let aV = 2 | |
214 | - | ||
215 | - | func aW (aX) = (parseIntValue(aX[ad]) * ab) | |
216 | - | ||
217 | - | ||
218 | - | let aY = true | |
219 | - | ||
220 | - | let aZ = take(drop(this.bytes, 1), 1) | |
221 | - | ||
222 | - | let ba = { | |
223 | - | let bb = aZ | |
224 | - | if ((base58'2W' == bb)) | |
119 | + | let af = 10 | |
120 | + | ||
121 | + | let ag = 0 | |
122 | + | ||
123 | + | let ah = 1 | |
124 | + | ||
125 | + | let ai = 2 | |
126 | + | ||
127 | + | let aj = 3 | |
128 | + | ||
129 | + | let ak = 4 | |
130 | + | ||
131 | + | let al = 0 | |
132 | + | ||
133 | + | let am = 1 | |
134 | + | ||
135 | + | let an = 2 | |
136 | + | ||
137 | + | let ao = 3 | |
138 | + | ||
139 | + | let ap = 0 | |
140 | + | ||
141 | + | let aq = 1 | |
142 | + | ||
143 | + | let ar = 2 | |
144 | + | ||
145 | + | let as = 3 | |
146 | + | ||
147 | + | func at (b) = ("lastTxIdByUser_" + b) | |
148 | + | ||
149 | + | ||
150 | + | func au (av) = ("nftOwner_" + av) | |
151 | + | ||
152 | + | ||
153 | + | func aw (av) = ("landCustomNameByAssetId_" + av) | |
154 | + | ||
155 | + | ||
156 | + | func ax (av) = ("stakedTime_" + av) | |
157 | + | ||
158 | + | ||
159 | + | func ay (av) = ("infraLevel_" + av) | |
160 | + | ||
161 | + | ||
162 | + | func az (aA,av) = makeString(["landArtStatus", aA, av], "_") | |
163 | + | ||
164 | + | ||
165 | + | func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD) | |
166 | + | ||
167 | + | ||
168 | + | func aE (aF) = ("wareHouse_" + aF) | |
169 | + | ||
170 | + | ||
171 | + | func aG (av) = ("duckCustomNameByAssetId_" + av) | |
172 | + | ||
173 | + | ||
174 | + | func aH (b) = ("accountCustomNameByAddr_" + b) | |
175 | + | ||
176 | + | ||
177 | + | func aI (b) = ("accRefBy_" + b) | |
178 | + | ||
179 | + | ||
180 | + | func aJ (p) = ("onboardArtActivatedOnDuck_" + p) | |
181 | + | ||
182 | + | ||
183 | + | func aK (b) = ("onboardArtActivatedDuckBy_" + b) | |
184 | + | ||
185 | + | ||
186 | + | func aL (b) = ("accReferrals_" + b) | |
187 | + | ||
188 | + | ||
189 | + | func aM (av) = ("duckOwner_" + av) | |
190 | + | ||
191 | + | ||
192 | + | func aN (aD) = ("stakedDuckByOwner_" + aD) | |
193 | + | ||
194 | + | ||
195 | + | func aO (p) = ("backPack_" + p) | |
196 | + | ||
197 | + | ||
198 | + | func aP (p) = ("duckLocation_" + p) | |
199 | + | ||
200 | + | ||
201 | + | func aQ (p) = ("duckHealth_" + p) | |
202 | + | ||
203 | + | ||
204 | + | func aR () = "contractsBlocked" | |
205 | + | ||
206 | + | ||
207 | + | func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT) | |
208 | + | ||
209 | + | ||
210 | + | func aU () = "emergencyWarehouseProducts" | |
211 | + | ||
212 | + | ||
213 | + | let aV = 1 | |
214 | + | ||
215 | + | let aW = 2 | |
216 | + | ||
217 | + | func aX (aY) = (parseIntValue(aY[ad]) * ab) | |
218 | + | ||
219 | + | ||
220 | + | let aZ = true | |
221 | + | ||
222 | + | let ba = take(drop(this.bytes, 1), 1) | |
223 | + | ||
224 | + | let bb = { | |
225 | + | let bc = ba | |
226 | + | if ((base58'2W' == bc)) | |
225 | 227 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
226 | - | else if ((base58'2T' == | |
228 | + | else if ((base58'2T' == bc)) | |
227 | 229 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
228 | 230 | else throw("Unknown chain") | |
229 | 231 | } | |
230 | 232 | ||
231 | - | let | |
232 | - | let | |
233 | - | if ((base58'2W' == | |
233 | + | let bd = { | |
234 | + | let bc = ba | |
235 | + | if ((base58'2W' == bc)) | |
234 | 236 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
235 | - | else if ((base58'2T' == | |
237 | + | else if ((base58'2T' == bc)) | |
236 | 238 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
237 | 239 | else throw("Unknown chain") | |
238 | 240 | } | |
239 | 241 | ||
240 | - | let | |
241 | - | let | |
242 | - | if ((base58'2W' == | |
242 | + | let be = { | |
243 | + | let bc = ba | |
244 | + | if ((base58'2W' == bc)) | |
243 | 245 | then 10000000000 | |
244 | - | else if ((base58'2T' == | |
246 | + | else if ((base58'2T' == bc)) | |
245 | 247 | then 100000000 | |
246 | 248 | else throw("Unknown chain") | |
247 | 249 | } | |
248 | 250 | ||
249 | - | let | |
250 | - | let | |
251 | - | if ((base58'2W' == | |
251 | + | let bf = { | |
252 | + | let bc = ba | |
253 | + | if ((base58'2W' == bc)) | |
252 | 254 | then 600000 | |
253 | - | else if ((base58'2T' == | |
255 | + | else if ((base58'2T' == bc)) | |
254 | 256 | then 60000 | |
255 | 257 | else throw("Unknown chain") | |
256 | 258 | } | |
257 | 259 | ||
258 | - | let | |
259 | - | ||
260 | - | let | |
261 | - | ||
262 | - | let | |
263 | - | ||
264 | - | let | |
265 | - | ||
266 | - | let | |
267 | - | ||
268 | - | let | |
269 | - | ||
270 | - | let | |
271 | - | ||
272 | - | let | |
273 | - | ||
274 | - | func | |
275 | - | ||
276 | - | ||
277 | - | let | |
278 | - | ||
279 | - | let | |
280 | - | ||
281 | - | let | |
282 | - | ||
283 | - | let | |
284 | - | ||
285 | - | func | |
286 | - | ||
287 | - | ||
288 | - | func | |
289 | - | ||
290 | - | ||
291 | - | func | |
292 | - | ||
293 | - | ||
294 | - | func | |
295 | - | ||
296 | - | ||
297 | - | let | |
298 | - | ||
299 | - | let | |
300 | - | ||
301 | - | let | |
302 | - | ||
303 | - | let | |
304 | - | ||
305 | - | let | |
306 | - | ||
307 | - | let | |
308 | - | ||
309 | - | let | |
310 | - | ||
311 | - | let | |
312 | - | ||
313 | - | let | |
314 | - | ||
315 | - | let | |
316 | - | ||
317 | - | func | |
318 | - | ||
319 | - | ||
320 | - | func | |
321 | - | ||
322 | - | ||
323 | - | func | |
324 | - | ||
325 | - | ||
326 | - | func | |
327 | - | let | |
328 | - | if ($isInstanceOf( | |
260 | + | let bg = "__" | |
261 | + | ||
262 | + | let bh = 1000000 | |
263 | + | ||
264 | + | let bi = 100000000 | |
265 | + | ||
266 | + | let bj = 25 | |
267 | + | ||
268 | + | let bk = 100 | |
269 | + | ||
270 | + | let bl = 225 | |
271 | + | ||
272 | + | let bm = 400 | |
273 | + | ||
274 | + | let bn = 625 | |
275 | + | ||
276 | + | func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], "")) | |
277 | + | ||
278 | + | ||
279 | + | let br = 1 | |
280 | + | ||
281 | + | let bs = 2 | |
282 | + | ||
283 | + | let bt = 3 | |
284 | + | ||
285 | + | let bu = 4 | |
286 | + | ||
287 | + | func bv () = "%s__restConfig" | |
288 | + | ||
289 | + | ||
290 | + | func bw () = "%s__restAddr" | |
291 | + | ||
292 | + | ||
293 | + | func bx (by) = split_4C(bo(by, bv()), bg) | |
294 | + | ||
295 | + | ||
296 | + | func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB))) | |
297 | + | ||
298 | + | ||
299 | + | let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd)) | |
300 | + | ||
301 | + | let bA = bx(bC) | |
302 | + | ||
303 | + | let bD = bz(bA, br) | |
304 | + | ||
305 | + | let bE = bz(bA, bs) | |
306 | + | ||
307 | + | let bF = bz(bA, bt) | |
308 | + | ||
309 | + | let bG = bz(bA, bu) | |
310 | + | ||
311 | + | let bH = 0 | |
312 | + | ||
313 | + | let bI = 1 | |
314 | + | ||
315 | + | let bJ = 2 | |
316 | + | ||
317 | + | let bK = 3 | |
318 | + | ||
319 | + | func bL () = "resTypesProportions" | |
320 | + | ||
321 | + | ||
322 | + | func bM (aD) = ("stakedLandsByOwner_" + aD) | |
323 | + | ||
324 | + | ||
325 | + | func bN (aD) = ("stakedPiecesByOwner_" + aD) | |
326 | + | ||
327 | + | ||
328 | + | func bO (bP) = { | |
329 | + | let bc = bP | |
330 | + | if ($isInstanceOf(bc, "String")) | |
329 | 331 | then { | |
330 | - | let | |
331 | - | | |
332 | + | let bQ = bc | |
333 | + | bQ | |
332 | 334 | } | |
333 | 335 | else throw("fail to cast into String") | |
334 | 336 | } | |
335 | 337 | ||
336 | 338 | ||
337 | - | func | |
338 | - | let | |
339 | - | if ($isInstanceOf( | |
339 | + | func bR (bP) = { | |
340 | + | let bc = bP | |
341 | + | if ($isInstanceOf(bc, "Int")) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | | |
343 | + | let bS = bc | |
344 | + | bS | |
343 | 345 | } | |
344 | 346 | else throw("fail to cast into Int") | |
345 | 347 | } | |
346 | 348 | ||
347 | 349 | ||
348 | - | func | |
349 | - | let | |
350 | - | if (("S" == | |
351 | - | then | |
352 | - | else if (("M" == | |
353 | - | then | |
354 | - | else if (("L" == | |
355 | - | then | |
356 | - | else if (("XL" == | |
357 | - | then | |
358 | - | else if (("XXL" == | |
359 | - | then | |
350 | + | func bT (bU) = { | |
351 | + | let bc = bU | |
352 | + | if (("S" == bc)) | |
353 | + | then bj | |
354 | + | else if (("M" == bc)) | |
355 | + | then bk | |
356 | + | else if (("L" == bc)) | |
357 | + | then bl | |
358 | + | else if (("XL" == bc)) | |
359 | + | then bm | |
360 | + | else if (("XXL" == bc)) | |
361 | + | then bn | |
360 | 362 | else throw("Unknown land size") | |
361 | 363 | } | |
362 | 364 | ||
363 | 365 | ||
364 | - | let | |
365 | - | let | |
366 | - | if ((base58'2W' == | |
366 | + | let bV = { | |
367 | + | let bc = ba | |
368 | + | if ((base58'2W' == bc)) | |
367 | 369 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
368 | - | else if ((base58'2T' == | |
370 | + | else if ((base58'2T' == bc)) | |
369 | 371 | then this | |
370 | 372 | else throw("Unknown chain") | |
371 | 373 | } | |
372 | 374 | ||
373 | - | let | |
374 | - | let | |
375 | - | if ((base58'2W' == | |
375 | + | let bW = { | |
376 | + | let bc = ba | |
377 | + | if ((base58'2W' == bc)) | |
376 | 378 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
377 | - | else if ((base58'2T' == | |
379 | + | else if ((base58'2T' == bc)) | |
378 | 380 | then this | |
379 | 381 | else throw("Unknown chain") | |
380 | 382 | } | |
381 | 383 | ||
382 | - | let | |
383 | - | ||
384 | - | let | |
385 | - | ||
386 | - | let | |
387 | - | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | let | |
396 | - | if ((base58'2W' == | |
384 | + | let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
385 | + | ||
386 | + | let bY = [30, 60, 120] | |
387 | + | ||
388 | + | let bZ = 300000 | |
389 | + | ||
390 | + | let ca = 5000000 | |
391 | + | ||
392 | + | let cb = 50 | |
393 | + | ||
394 | + | let cc = 10000000 | |
395 | + | ||
396 | + | let cd = { | |
397 | + | let bc = ba | |
398 | + | if ((base58'2W' == bc)) | |
397 | 399 | then 252289527462 | |
398 | - | else if ((base58'2T' == | |
400 | + | else if ((base58'2T' == bc)) | |
399 | 401 | then 2522895274 | |
400 | 402 | else throw("Unknown chain") | |
401 | 403 | } | |
402 | 404 | ||
403 | - | let | |
404 | - | let | |
405 | - | if ((base58'2W' == | |
405 | + | let ce = { | |
406 | + | let bc = ba | |
407 | + | if ((base58'2W' == bc)) | |
406 | 408 | then 250000000 | |
407 | - | else if ((base58'2T' == | |
409 | + | else if ((base58'2T' == bc)) | |
408 | 410 | then 250000000 | |
409 | 411 | else throw("Unknown chain") | |
410 | 412 | } | |
411 | 413 | ||
412 | - | let | |
413 | - | ||
414 | - | let | |
415 | - | ||
416 | - | let | |
417 | - | ||
418 | - | let | |
419 | - | ||
420 | - | let | |
421 | - | ||
422 | - | let | |
423 | - | ||
424 | - | let | |
425 | - | ||
426 | - | func | |
427 | - | ||
428 | - | ||
429 | - | func | |
430 | - | ||
431 | - | ||
432 | - | func | |
433 | - | ||
434 | - | ||
435 | - | func | |
436 | - | ||
437 | - | ||
438 | - | func | |
439 | - | ||
440 | - | ||
441 | - | func | |
442 | - | ||
443 | - | ||
444 | - | func | |
445 | - | ||
446 | - | ||
447 | - | func | |
448 | - | ||
449 | - | ||
450 | - | func | |
451 | - | ||
452 | - | ||
453 | - | let | |
454 | - | ||
455 | - | let | |
456 | - | ||
457 | - | let | |
458 | - | ||
459 | - | let | |
460 | - | ||
461 | - | let | |
462 | - | ||
463 | - | let | |
464 | - | ||
465 | - | let | |
466 | - | ||
467 | - | func | |
468 | - | ||
469 | - | ||
470 | - | func | |
471 | - | let | |
472 | - | if ((0 >= | |
414 | + | let cf = toBigInt(5) | |
415 | + | ||
416 | + | let cg = toBigInt(20) | |
417 | + | ||
418 | + | let ch = toBigInt((20 * 20)) | |
419 | + | ||
420 | + | let ci = toBigInt(((20 * 20) * 20)) | |
421 | + | ||
422 | + | let cj = toBigInt((((20 * 20) * 20) * 20)) | |
423 | + | ||
424 | + | let ck = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
425 | + | ||
426 | + | let cl = 500 | |
427 | + | ||
428 | + | func cm () = "nextLandNum" | |
429 | + | ||
430 | + | ||
431 | + | func cn (co) = ("landToAsset_" + co) | |
432 | + | ||
433 | + | ||
434 | + | func cp (cq) = ("landByCustomName_" + cq) | |
435 | + | ||
436 | + | ||
437 | + | func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD) | |
438 | + | ||
439 | + | ||
440 | + | func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_") | |
441 | + | ||
442 | + | ||
443 | + | func ct (co) = ("landOwner_" + co) | |
444 | + | ||
445 | + | ||
446 | + | func cu (cq) = ("duckByCustomName_" + cq) | |
447 | + | ||
448 | + | ||
449 | + | func cv (cq) = ("accountByCustomName_" + cq) | |
450 | + | ||
451 | + | ||
452 | + | func cw () = "oldiesList" | |
453 | + | ||
454 | + | ||
455 | + | let cx = 0 | |
456 | + | ||
457 | + | let cy = 1 | |
458 | + | ||
459 | + | let cz = 2 | |
460 | + | ||
461 | + | let cA = 0 | |
462 | + | ||
463 | + | let cB = 5 | |
464 | + | ||
465 | + | let cC = 6 | |
466 | + | ||
467 | + | let cD = 7 | |
468 | + | ||
469 | + | func cE (co,bU) = ((P + co) + bU) | |
470 | + | ||
471 | + | ||
472 | + | func cF (cG,cH) = { | |
473 | + | let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5]) | |
474 | + | if ((0 >= cI)) | |
473 | 475 | then throw("Zero weights sum") | |
474 | 476 | else { | |
475 | - | let | |
476 | - | func | |
477 | - | ||
478 | - | let | |
479 | - | let | |
480 | - | let | |
481 | - | func | |
482 | - | then | |
483 | - | else | |
484 | - | ||
485 | - | func | |
486 | - | then | |
477 | + | let cJ = fraction(cG, bh, cI) | |
478 | + | func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh)) | |
479 | + | ||
480 | + | let cN = cH | |
481 | + | let cO = size(cN) | |
482 | + | let cP = nil | |
483 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
484 | + | then cR | |
485 | + | else cK(cR, cN[cS]) | |
486 | + | ||
487 | + | func cT (cR,cS) = if ((cS >= cO)) | |
488 | + | then cR | |
487 | 489 | else throw("List size exceeds 6") | |
488 | 490 | ||
489 | - | | |
490 | - | } | |
491 | - | } | |
492 | - | ||
493 | - | ||
494 | - | func | |
495 | - | let | |
496 | - | if ((size( | |
491 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
492 | + | } | |
493 | + | } | |
494 | + | ||
495 | + | ||
496 | + | func cU (cG) = { | |
497 | + | let cV = split(value(getString(bL())), "_") | |
498 | + | if ((size(cV) != S)) | |
497 | 499 | then throw("Wrong proportions data") | |
498 | 500 | else { | |
499 | - | let | |
500 | - | | |
501 | - | } | |
502 | - | } | |
503 | - | ||
504 | - | ||
505 | - | func | |
506 | - | let | |
507 | - | func | |
508 | - | let | |
509 | - | if ((0 > | |
510 | - | then throw(((((("Not enough material idx=" + toString( | |
511 | - | else ( | |
501 | + | let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])] | |
502 | + | cF(cG, cW) | |
503 | + | } | |
504 | + | } | |
505 | + | ||
506 | + | ||
507 | + | func cX (cY,cZ,da) = { | |
508 | + | let db = cU(da) | |
509 | + | func dc (cL,bB) = { | |
510 | + | let dd = (parseIntValue(cZ[bB]) - db[bB]) | |
511 | + | if ((0 > dd)) | |
512 | + | then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB]))) | |
513 | + | else (cL :+ toString(dd)) | |
512 | 514 | } | |
513 | 515 | ||
514 | - | if ( | |
516 | + | if (cY) | |
515 | 517 | then { | |
516 | - | let | |
517 | - | let | |
518 | - | let | |
519 | - | func | |
520 | - | then | |
521 | - | else | |
522 | - | ||
523 | - | func | |
524 | - | then | |
518 | + | let cN = [0, 1, 2, 3, 4, 5] | |
519 | + | let cO = size(cN) | |
520 | + | let cP = nil | |
521 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
522 | + | then cR | |
523 | + | else dc(cR, cN[cS]) | |
524 | + | ||
525 | + | func cT (cR,cS) = if ((cS >= cO)) | |
526 | + | then cR | |
525 | 527 | else throw("List size exceeds 6") | |
526 | 528 | ||
527 | - | | |
528 | - | } | |
529 | - | else | |
530 | - | } | |
531 | - | ||
532 | - | ||
533 | - | func | |
534 | - | then | |
529 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
530 | + | } | |
531 | + | else cZ | |
532 | + | } | |
533 | + | ||
534 | + | ||
535 | + | func de (df,dg) = if ((dg == "")) | |
536 | + | then df | |
535 | 537 | else { | |
536 | - | let | |
538 | + | let dh = if ((df == "")) | |
537 | 539 | then nil | |
538 | - | else split( | |
539 | - | func | |
540 | - | let | |
541 | - | func | |
542 | - | let | |
543 | - | if ((size( | |
540 | + | else split(df, "_") | |
541 | + | func di (cL,dj) = { | |
542 | + | let dk = cL._1 | |
543 | + | func dl (dm,dn) = { | |
544 | + | let do = split(dn, ",") | |
545 | + | if ((size(do) != 2)) | |
544 | 546 | then throw("Incorrect format, should be index,amount") | |
545 | 547 | else { | |
546 | - | let | |
547 | - | if (if ((0 > | |
548 | + | let bB = parseIntValue(do[0]) | |
549 | + | if (if ((0 > bB)) | |
548 | 550 | then true | |
549 | - | else ( | |
551 | + | else (bB >= size(ac))) | |
550 | 552 | then throw("Unknown product idx") | |
551 | - | else if (( | |
552 | - | then | |
553 | + | else if ((bB != dk)) | |
554 | + | then dm | |
553 | 555 | else { | |
554 | - | let | |
555 | - | if ((0 >= | |
556 | + | let dp = parseIntValue(do[1]) | |
557 | + | if ((0 >= dp)) | |
556 | 558 | then throw("Pass only positive amounts") | |
557 | - | else ( | |
559 | + | else (dm + dp) | |
558 | 560 | } | |
559 | 561 | } | |
560 | 562 | } | |
561 | 563 | ||
562 | - | let | |
563 | - | let | |
564 | - | let | |
565 | - | let | |
566 | - | func | |
567 | - | then | |
568 | - | else | |
569 | - | ||
570 | - | func | |
571 | - | then | |
564 | + | let dq = { | |
565 | + | let cN = split(dg, "_") | |
566 | + | let cO = size(cN) | |
567 | + | let cP = 0 | |
568 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
569 | + | then cR | |
570 | + | else dl(cR, cN[cS]) | |
571 | + | ||
572 | + | func cT (cR,cS) = if ((cS >= cO)) | |
573 | + | then cR | |
572 | 574 | else throw("List size exceeds 10") | |
573 | 575 | ||
574 | - | | |
576 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
575 | 577 | } | |
576 | - | let | |
577 | - | then parseIntValue( | |
578 | + | let dr = if ((size(dh) > dk)) | |
579 | + | then parseIntValue(dh[dk]) | |
578 | 580 | else 0 | |
579 | - | let | |
580 | - | then ( | |
581 | - | else throw(((((("You have " + toString( | |
582 | - | $Tuple2(( | |
583 | - | } | |
584 | - | ||
585 | - | let | |
586 | - | let | |
587 | - | let | |
588 | - | let | |
589 | - | func | |
590 | - | then | |
591 | - | else | |
592 | - | ||
593 | - | func | |
594 | - | then | |
581 | + | let ds = if ((dr >= dq)) | |
582 | + | then (dr - dq) | |
583 | + | else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq))) | |
584 | + | $Tuple2((dk + 1), (cL._2 :+ toString(ds))) | |
585 | + | } | |
586 | + | ||
587 | + | let dt = { | |
588 | + | let cN = ac | |
589 | + | let cO = size(cN) | |
590 | + | let cP = $Tuple2(0, nil) | |
591 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
592 | + | then cR | |
593 | + | else di(cR, cN[cS]) | |
594 | + | ||
595 | + | func cT (cR,cS) = if ((cS >= cO)) | |
596 | + | then cR | |
595 | 597 | else throw("List size exceeds 50") | |
596 | 598 | ||
597 | - | | |
598 | - | } | |
599 | - | makeString( | |
599 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
600 | + | } | |
601 | + | makeString(dt._2, "_") | |
600 | 602 | } | |
601 | 603 | ||
602 | 604 | ||
603 | - | func | |
604 | - | let | |
605 | - | if ((size( | |
605 | + | func du (dv,dh,dw,dx,dy,dz) = { | |
606 | + | let do = split(dv, ":") | |
607 | + | if ((size(do) != 2)) | |
606 | 608 | then throw("Incorrect format, should be index:amount") | |
607 | 609 | else { | |
608 | - | let | |
609 | - | let | |
610 | - | if (if ((0 > | |
610 | + | let dA = parseIntValue(do[0]) | |
611 | + | let dB = parseIntValue(do[1]) | |
612 | + | if (if ((0 > dA)) | |
611 | 613 | then true | |
612 | - | else ( | |
614 | + | else (dA >= size(ac))) | |
613 | 615 | then throw("Unknown product idx") | |
614 | - | else if ((0 > | |
616 | + | else if ((0 > dB)) | |
615 | 617 | then throw("Count can't be negative") | |
616 | - | else if (( | |
617 | - | then | |
618 | + | else if ((dB == 0)) | |
619 | + | then $Tuple2(dh, false) | |
618 | 620 | else { | |
619 | - | func | |
620 | - | let | |
621 | - | let | |
622 | - | then parseIntValue( | |
621 | + | func dC (cL,dj) = { | |
622 | + | let dk = cL._1 | |
623 | + | let dr = if ((size(dh) > dk)) | |
624 | + | then parseIntValue(dh[dk]) | |
623 | 625 | else 0 | |
624 | - | if (if (!( | |
625 | - | then ( | |
626 | + | if (if (!(dw)) | |
627 | + | then (dB > dr) | |
626 | 628 | else false) | |
627 | - | then throw(((((("You have " + toString(dq)) + " of ") + Z[dj]) + ", but tried to use ") + toString(dx))) | |
628 | - | else $Tuple2((dj + 1), (cK._2 :+ toString(if ((dw != dj)) | |
629 | - | then dq | |
630 | - | else (dq + (if (dv) | |
631 | - | then dx | |
632 | - | else -(dx)))))) | |
629 | + | then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB))) | |
630 | + | else { | |
631 | + | let dD = if (!(dw)) | |
632 | + | then { | |
633 | + | let dE = split(dj, "_")[ae] | |
634 | + | if ((dE == "")) | |
635 | + | then throw("Item cannot be equipped") | |
636 | + | else { | |
637 | + | let dF = parseIntValue(dE) | |
638 | + | let dG = (dF / 100) | |
639 | + | if ((dx != dG)) | |
640 | + | then throw("Segment incompatible") | |
641 | + | else { | |
642 | + | let dH = ((dF % 100) / 10) | |
643 | + | if ((dy != dH)) | |
644 | + | then throw("Slot incompatible") | |
645 | + | else { | |
646 | + | let dI = (dF % 10) | |
647 | + | if (if ((dz != 0)) | |
648 | + | then (dI > 1) | |
649 | + | else false) | |
650 | + | then throw("Big items should occupy slot 0") | |
651 | + | else (dI > 1) | |
652 | + | } | |
653 | + | } | |
654 | + | } | |
655 | + | } | |
656 | + | else false | |
657 | + | $Tuple3((dk + 1), (cL._2 :+ toString(if ((dA != dk)) | |
658 | + | then dr | |
659 | + | else (dr + (if (dw) | |
660 | + | then dB | |
661 | + | else -(dB))))), if (cL._3) | |
662 | + | then true | |
663 | + | else dD) | |
664 | + | } | |
633 | 665 | } | |
634 | 666 | ||
635 | - | ( let cM = ac | |
636 | - | let cN = size(cM) | |
637 | - | let cO = $Tuple2(0, nil) | |
638 | - | func cP (cQ,cR) = if ((cR >= cN)) | |
639 | - | then cQ | |
640 | - | else dy(cQ, cM[cR]) | |
641 | - | ||
642 | - | func cS (cQ,cR) = if ((cR >= cN)) | |
643 | - | then cQ | |
644 | - | else throw("List size exceeds 42") | |
645 | - | ||
646 | - | cS(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cP(cO, 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))._2 | |
667 | + | let dd = { | |
668 | + | let cN = ac | |
669 | + | let cO = size(cN) | |
670 | + | let cP = $Tuple3(0, nil, false) | |
671 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
672 | + | then cR | |
673 | + | else dC(cR, cN[cS]) | |
674 | + | ||
675 | + | func cT (cR,cS) = if ((cS >= cO)) | |
676 | + | then cR | |
677 | + | else throw("List size exceeds 27") | |
678 | + | ||
679 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
680 | + | } | |
681 | + | $Tuple2(dd._2, dd._3) | |
647 | 682 | } | |
648 | 683 | } | |
649 | 684 | } | |
650 | 685 | ||
651 | 686 | ||
652 | - | func | |
687 | + | func dJ (dK,dL,dw,dx,dy) = if ((dK != "")) | |
653 | 688 | then { | |
654 | - | let | |
655 | - | if ((size( | |
689 | + | let dM = split(dK, ",") | |
690 | + | if ((size(dM) > n)) | |
656 | 691 | then throw("Wrong slots format") | |
657 | 692 | else { | |
658 | - | let | |
659 | - | let | |
660 | - | then | |
693 | + | let dN = dM[0] | |
694 | + | let dO = if ((size(dM) > 1)) | |
695 | + | then dM[1] | |
661 | 696 | else "" | |
662 | - | if (if (( | |
663 | - | then ( | |
697 | + | if (if ((dN == "")) | |
698 | + | then (dO == "") | |
664 | 699 | else false) | |
665 | - | then | |
700 | + | then dL | |
666 | 701 | else { | |
667 | - | let dF = if ((dD != "")) | |
668 | - | then dt(dD, dB, dv) | |
669 | - | else dB | |
670 | - | if ((dE != "")) | |
671 | - | then dt(dE, dF, dv) | |
672 | - | else dF | |
702 | + | let dP = if ((dN != "")) | |
703 | + | then du(dN, dL, dw, dx, dy, 0) | |
704 | + | else $Tuple2(dL, false) | |
705 | + | if ((dO != "")) | |
706 | + | then if (dP._2) | |
707 | + | then throw("Big item already occupies slot") | |
708 | + | else du(dO, dP._1, dw, dx, dy, 1)._1 | |
709 | + | else dP._1 | |
673 | 710 | } | |
674 | 711 | } | |
675 | 712 | } | |
676 | - | else dB | |
677 | - | ||
678 | - | ||
679 | - | func dG (dH,dg,dv) = { | |
680 | - | func dI (cK,dJ) = { | |
681 | - | let dK = split(dJ, ";") | |
682 | - | if ((size(dK) != m)) | |
713 | + | else dL | |
714 | + | ||
715 | + | ||
716 | + | func dQ (dR,dh,dw) = { | |
717 | + | func dx (cL,dS) = { | |
718 | + | let dk = cL._1 | |
719 | + | let dy = split(dS, ";") | |
720 | + | if ((size(dy) != m)) | |
683 | 721 | then throw("Wrong segment format") | |
684 | 722 | else { | |
685 | - | let | |
686 | - | let | |
687 | - | if (if (( | |
688 | - | then ( | |
723 | + | let dT = dy[0] | |
724 | + | let dq = dy[1] | |
725 | + | if (if ((dT == "")) | |
726 | + | then (dq == "") | |
689 | 727 | else false) | |
690 | - | then | |
728 | + | then $Tuple2((dk + 1), cL._2) | |
691 | 729 | else { | |
692 | - | let | |
693 | - | | |
730 | + | let dU = dJ(dT, cL._2, dw, dk, 0) | |
731 | + | $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1)) | |
694 | 732 | } | |
695 | 733 | } | |
696 | 734 | } | |
697 | 735 | ||
698 | - | let | |
699 | - | let | |
700 | - | let | |
701 | - | func | |
702 | - | then | |
703 | - | else | |
704 | - | ||
705 | - | func | |
706 | - | then | |
736 | + | ( let cN = dR | |
737 | + | let cO = size(cN) | |
738 | + | let cP = $Tuple2(0, dh) | |
739 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
740 | + | then cR | |
741 | + | else dx(cR, cN[cS]) | |
742 | + | ||
743 | + | func cT (cR,cS) = if ((cS >= cO)) | |
744 | + | then cR | |
707 | 745 | else throw("List size exceeds 6") | |
708 | 746 | ||
709 | - | | |
710 | - | } | |
711 | - | ||
712 | - | ||
713 | - | func | |
747 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2 | |
748 | + | } | |
749 | + | ||
750 | + | ||
751 | + | func dV (dW,dX,dY,dZ) = if ((size(dW) != S)) | |
714 | 752 | then throw("Wrong proportions data") | |
715 | 753 | else { | |
716 | - | func | |
717 | - | let | |
718 | - | if ((0 > | |
719 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
720 | - | else ( | |
721 | - | } | |
722 | - | ||
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | let | |
727 | - | func | |
728 | - | then | |
729 | - | else | |
730 | - | ||
731 | - | func | |
732 | - | then | |
754 | + | func ea (cL,eb) = { | |
755 | + | let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY)) | |
756 | + | if ((0 > dd)) | |
757 | + | then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY))) | |
758 | + | else (cL :+ toString(dd)) | |
759 | + | } | |
760 | + | ||
761 | + | let cW = { | |
762 | + | let cN = [0, 1, 2, 3, 4, 5] | |
763 | + | let cO = size(cN) | |
764 | + | let cP = nil | |
765 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
766 | + | then cR | |
767 | + | else ea(cR, cN[cS]) | |
768 | + | ||
769 | + | func cT (cR,cS) = if ((cS >= cO)) | |
770 | + | then cR | |
733 | 771 | else throw("List size exceeds 6") | |
734 | 772 | ||
735 | - | | |
736 | - | } | |
737 | - | makeString( | |
773 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
774 | + | } | |
775 | + | makeString(cW, "_") | |
738 | 776 | } | |
739 | 777 | ||
740 | 778 | ||
741 | - | func | |
742 | - | let | |
743 | - | | |
744 | - | } | |
745 | - | ||
746 | - | ||
747 | - | func | |
748 | - | ||
749 | - | ||
750 | - | func | |
751 | - | func | |
752 | - | let | |
753 | - | ( | |
779 | + | func ec (dX,dY,dZ) = { | |
780 | + | let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_") | |
781 | + | dV(dW, dX, dY, dZ) | |
782 | + | } | |
783 | + | ||
784 | + | ||
785 | + | func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)] | |
786 | + | ||
787 | + | ||
788 | + | func ef (eg,dX,eh,dY,ei) = { | |
789 | + | func ej (cL,eb) = { | |
790 | + | let ek = ((fraction(eh, ei, U) * dX[eb]) * dY) | |
791 | + | (cL :+ toString((parseIntValue(eg[eb]) + ek))) | |
754 | 792 | } | |
755 | 793 | ||
756 | - | let | |
757 | - | let | |
758 | - | let | |
759 | - | let | |
760 | - | func | |
761 | - | then | |
762 | - | else | |
763 | - | ||
764 | - | func | |
765 | - | then | |
794 | + | let cW = { | |
795 | + | let cN = [0, 1, 2, 3, 4, 5] | |
796 | + | let cO = size(cN) | |
797 | + | let cP = nil | |
798 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
799 | + | then cR | |
800 | + | else ej(cR, cN[cS]) | |
801 | + | ||
802 | + | func cT (cR,cS) = if ((cS >= cO)) | |
803 | + | then cR | |
766 | 804 | else throw("List size exceeds 6") | |
767 | 805 | ||
768 | - | | |
806 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
769 | 807 | } | |
770 | - | makeString( | |
771 | - | } | |
772 | - | ||
773 | - | ||
774 | - | func | |
775 | - | func | |
776 | - | let | |
777 | - | $Tuple2(( | |
808 | + | makeString(cW, "_") | |
809 | + | } | |
810 | + | ||
811 | + | ||
812 | + | func el (dX,eh,dY,ei) = { | |
813 | + | func ej (cL,eb) = { | |
814 | + | let ek = ((fraction(eh, ei, U) * dX[eb]) * dY) | |
815 | + | $Tuple2((cL._1 :+ ek), (cL._2 + ek)) | |
778 | 816 | } | |
779 | 817 | ||
780 | - | let | |
781 | - | let | |
782 | - | let | |
783 | - | func | |
784 | - | then | |
785 | - | else | |
786 | - | ||
787 | - | func | |
788 | - | then | |
818 | + | let cN = [0, 1, 2, 3, 4, 5] | |
819 | + | let cO = size(cN) | |
820 | + | let cP = $Tuple2(nil, 0) | |
821 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
822 | + | then cR | |
823 | + | else ej(cR, cN[cS]) | |
824 | + | ||
825 | + | func cT (cR,cS) = if ((cS >= cO)) | |
826 | + | then cR | |
789 | 827 | else throw("List size exceeds 6") | |
790 | 828 | ||
791 | - | | |
792 | - | } | |
793 | - | ||
794 | - | ||
795 | - | func | |
796 | - | let | |
797 | - | let | |
798 | - | if (( | |
799 | - | then $Tuple2(makeString( | |
800 | - | else if (( | |
829 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
830 | + | } | |
831 | + | ||
832 | + | ||
833 | + | func em (en,eo,ep,eq) = { | |
834 | + | let er = ep._1 | |
835 | + | let es = ep._2 | |
836 | + | if ((es == 0)) | |
837 | + | then $Tuple2(makeString(en, "_"), makeString(eo, "_")) | |
838 | + | else if ((eq >= es)) | |
801 | 839 | then { | |
802 | - | func | |
803 | - | ||
804 | - | let | |
805 | - | let | |
806 | - | let | |
807 | - | let | |
808 | - | func | |
809 | - | then | |
810 | - | else | |
811 | - | ||
812 | - | func | |
813 | - | then | |
840 | + | func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb]))) | |
841 | + | ||
842 | + | let cW = { | |
843 | + | let cN = [0, 1, 2, 3, 4, 5] | |
844 | + | let cO = size(cN) | |
845 | + | let cP = nil | |
846 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
847 | + | then cR | |
848 | + | else et(cR, cN[cS]) | |
849 | + | ||
850 | + | func cT (cR,cS) = if ((cS >= cO)) | |
851 | + | then cR | |
814 | 852 | else throw("List size exceeds 6") | |
815 | 853 | ||
816 | - | | |
854 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
817 | 855 | } | |
818 | - | $Tuple2(makeString( | |
856 | + | $Tuple2(makeString(cW, "_"), makeString(eo, "_")) | |
819 | 857 | } | |
820 | 858 | else { | |
821 | - | func | |
822 | - | let | |
823 | - | $Tuple2(( | |
859 | + | func eu (cL,eb) = { | |
860 | + | let ev = fraction(er[eb], eq, es) | |
861 | + | $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev)))) | |
824 | 862 | } | |
825 | 863 | ||
826 | - | let | |
827 | - | let | |
828 | - | let | |
829 | - | let | |
830 | - | func | |
831 | - | then | |
832 | - | else | |
833 | - | ||
834 | - | func | |
835 | - | then | |
864 | + | let cW = { | |
865 | + | let cN = [0, 1, 2, 3, 4, 5] | |
866 | + | let cO = size(cN) | |
867 | + | let cP = $Tuple2(nil, nil) | |
868 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
869 | + | then cR | |
870 | + | else eu(cR, cN[cS]) | |
871 | + | ||
872 | + | func cT (cR,cS) = if ((cS >= cO)) | |
873 | + | then cR | |
836 | 874 | else throw("List size exceeds 6") | |
837 | 875 | ||
838 | - | | |
876 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
839 | 877 | } | |
840 | - | $Tuple2(makeString( | |
878 | + | $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_")) | |
841 | 879 | } | |
842 | 880 | } | |
843 | 881 | ||
844 | 882 | ||
845 | - | func | |
846 | - | then | |
847 | - | else -( | |
848 | - | ||
849 | - | ||
850 | - | let | |
851 | - | ||
852 | - | func | |
853 | - | let | |
854 | - | let | |
883 | + | func ew (ex) = if ((ex >= toBigInt(0))) | |
884 | + | then ex | |
885 | + | else -(ex) | |
886 | + | ||
887 | + | ||
888 | + | let ey = [[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]] | |
889 | + | ||
890 | + | func ez (bS,eA) = { | |
891 | + | let eB = toInt((bS % cg)) | |
892 | + | let eC = if ((eA[0] > eB)) | |
855 | 893 | then "A" | |
856 | - | else if (( | |
894 | + | else if ((eA[1] > eB)) | |
857 | 895 | then "B" | |
858 | - | else if (( | |
896 | + | else if ((eA[2] > eB)) | |
859 | 897 | then "C" | |
860 | - | else if (( | |
898 | + | else if ((eA[3] > eB)) | |
861 | 899 | then "D" | |
862 | - | else if (( | |
900 | + | else if ((eA[4] > eB)) | |
863 | 901 | then "E" | |
864 | 902 | else "F" | |
865 | - | | |
866 | - | } | |
867 | - | ||
868 | - | ||
869 | - | func | |
870 | - | let | |
871 | - | func | |
872 | - | ||
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | func | |
878 | - | then | |
879 | - | else | |
880 | - | ||
881 | - | func | |
882 | - | then | |
903 | + | eC | |
904 | + | } | |
905 | + | ||
906 | + | ||
907 | + | func eD (eE,eF) = { | |
908 | + | let eG = ey[eF] | |
909 | + | func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck)) | |
910 | + | ||
911 | + | let eI = { | |
912 | + | let cN = [1, 2, 3, 4, 5] | |
913 | + | let cO = size(cN) | |
914 | + | let cP = $Tuple2("", (eE / cf)) | |
915 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
916 | + | then cR | |
917 | + | else eH(cR, cN[cS]) | |
918 | + | ||
919 | + | func cT (cR,cS) = if ((cS >= cO)) | |
920 | + | then cR | |
883 | 921 | else throw("List size exceeds 5") | |
884 | 922 | ||
885 | - | | |
923 | + | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
886 | 924 | } | |
887 | - | | |
888 | - | } | |
889 | - | ||
890 | - | ||
891 | - | func | |
892 | - | let | |
893 | - | [toString(valueOrElse(parseInt( | |
894 | - | then | |
895 | - | else "0_0_0_0_0_0", if ((size(split( | |
896 | - | then | |
897 | - | else "0_0_0_0_0_0", | |
898 | - | } | |
899 | - | ||
900 | - | ||
901 | - | func | |
902 | - | let | |
903 | - | ((V * (parseIntValue( | |
904 | - | } | |
905 | - | ||
906 | - | ||
907 | - | func | |
908 | - | let | |
909 | - | func | |
910 | - | ||
911 | - | func | |
912 | - | let | |
913 | - | let | |
914 | - | $Tuple2(( | |
925 | + | eI._1 | |
926 | + | } | |
927 | + | ||
928 | + | ||
929 | + | func eJ (eK) = { | |
930 | + | let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
931 | + | [toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S)) | |
932 | + | then eL[aq] | |
933 | + | else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S)) | |
934 | + | then eL[ar] | |
935 | + | else "0_0_0_0_0_0", eL[as]] | |
936 | + | } | |
937 | + | ||
938 | + | ||
939 | + | func eM (eN) = { | |
940 | + | let do = split(eN, "_") | |
941 | + | ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0])) | |
942 | + | } | |
943 | + | ||
944 | + | ||
945 | + | func eO (eP) = { | |
946 | + | let eQ = eP[aj] | |
947 | + | func eR (cL,dj) = (cL + parseIntValue(dj)) | |
948 | + | ||
949 | + | func eS (cL,dj) = { | |
950 | + | let bB = cL._1 | |
951 | + | let eT = (((parseIntValue(dj) + af) - 1) / af) | |
952 | + | $Tuple2((bB + 1), (cL._2 + (eT * bi))) | |
915 | 953 | } | |
916 | 954 | ||
917 | - | let | |
918 | - | let | |
919 | - | let | |
920 | - | let | |
921 | - | func | |
922 | - | then | |
923 | - | else | |
924 | - | ||
925 | - | func | |
926 | - | then | |
955 | + | let eU = { | |
956 | + | let cN = split(eP[ah], "_") | |
957 | + | let cO = size(cN) | |
958 | + | let cP = 0 | |
959 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
960 | + | then cR | |
961 | + | else eR(cR, cN[cS]) | |
962 | + | ||
963 | + | func cT (cR,cS) = if ((cS >= cO)) | |
964 | + | then cR | |
927 | 965 | else throw("List size exceeds 6") | |
928 | 966 | ||
929 | - | | |
967 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
930 | 968 | } | |
931 | - | let | |
932 | - | let | |
933 | - | let | |
934 | - | let | |
935 | - | func | |
936 | - | then | |
937 | - | else | |
938 | - | ||
939 | - | func | |
940 | - | then | |
969 | + | let eV = { | |
970 | + | let cN = split(eP[ai], "_") | |
971 | + | let cO = size(cN) | |
972 | + | let cP = 0 | |
973 | + | func eW (cR,cS) = if ((cS >= cO)) | |
974 | + | then cR | |
975 | + | else eR(cR, cN[cS]) | |
976 | + | ||
977 | + | func eX (cR,cS) = if ((cS >= cO)) | |
978 | + | then cR | |
941 | 979 | else throw("List size exceeds 6") | |
942 | 980 | ||
943 | - | | |
981 | + | eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6) | |
944 | 982 | } | |
945 | - | let | |
983 | + | let eY = if ((eQ == "")) | |
946 | 984 | then 0 | |
947 | - | else ( let | |
948 | - | let | |
949 | - | let | |
950 | - | func | |
951 | - | then | |
952 | - | else | |
953 | - | ||
954 | - | func | |
955 | - | then | |
985 | + | else ( let cN = split_4C(eQ, "_") | |
986 | + | let cO = size(cN) | |
987 | + | let cP = $Tuple2(0, 0) | |
988 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
989 | + | then cR | |
990 | + | else eS(cR, cN[cS]) | |
991 | + | ||
992 | + | func fa (cR,cS) = if ((cS >= cO)) | |
993 | + | then cR | |
956 | 994 | else throw("List size exceeds 50") | |
957 | 995 | ||
958 | - | | |
959 | - | (( | |
960 | - | } | |
961 | - | ||
962 | - | ||
963 | - | func | |
964 | - | let | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | let | |
970 | - | then makeString(["0", toString( | |
971 | - | else { | |
972 | - | let | |
973 | - | let | |
974 | - | let | |
975 | - | then parseIntValue( | |
976 | - | else | |
977 | - | makeString([toString( | |
978 | - | } | |
979 | - | [ | |
980 | - | then | |
981 | - | else "0_0_0_0_0_0", if ((size(split( | |
982 | - | then | |
983 | - | else "0_0_0_0_0_0", | |
984 | - | } | |
985 | - | ||
986 | - | ||
987 | - | func | |
988 | - | let | |
989 | - | let | |
990 | - | (( | |
991 | - | } | |
992 | - | ||
993 | - | ||
994 | - | func | |
995 | - | let | |
996 | - | then ((( | |
997 | - | else -((((-( | |
998 | - | ( | |
999 | - | } | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
996 | + | fa(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(cP, 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 | |
997 | + | ((eU + eV) + eY) | |
998 | + | } | |
999 | + | ||
1000 | + | ||
1001 | + | func fb (fc,fd,fe) = { | |
1002 | + | let eN = ((toString(fd) + "_") + toString(fe)) | |
1003 | + | let ff = eM(eN) | |
1004 | + | let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1005 | + | let fh = split_4C(fg, ":") | |
1006 | + | let fi = eO(fh) | |
1007 | + | let fj = if ((5 > size(fh))) | |
1008 | + | then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_") | |
1009 | + | else { | |
1010 | + | let fk = split(fh[ak], "_") | |
1011 | + | let fl = parseIntValue(fk[al]) | |
1012 | + | let fm = if ((size(fk) > 1)) | |
1013 | + | then parseIntValue(fk[am]) | |
1014 | + | else fi | |
1015 | + | makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_") | |
1016 | + | } | |
1017 | + | [fh[ag], if ((size(split(fh[ah], "_")) == S)) | |
1018 | + | then fh[ah] | |
1019 | + | else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S)) | |
1020 | + | then fh[ai] | |
1021 | + | else "0_0_0_0_0_0", fh[aj], fj] | |
1022 | + | } | |
1023 | + | ||
1024 | + | ||
1025 | + | func fn (eP) = { | |
1026 | + | let fo = eO(eP) | |
1027 | + | let fp = parseIntValue(split(eP[ak], "_")[al]) | |
1028 | + | ((eM(eP[ag]) - fo) - fp) | |
1029 | + | } | |
1030 | + | ||
1031 | + | ||
1032 | + | func fq (fr,fs) = { | |
1033 | + | let eT = if ((fr >= 0)) | |
1034 | + | then (((fr + fs) - 1) / fs) | |
1035 | + | else -((((-(fr) + fs) - 1) / fs)) | |
1036 | + | (eT * bi) | |
1037 | + | } | |
1038 | + | ||
1039 | + | ||
1040 | + | func ft (fu,eP,fv) = if ((size(fu) != 3)) | |
1003 | 1041 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1004 | 1042 | else { | |
1005 | - | let | |
1006 | - | let | |
1007 | - | let | |
1043 | + | let fw = split(fu[0], "_") | |
1044 | + | let fx = split(fu[1], "_") | |
1045 | + | let fy = if ((fu[2] == "")) | |
1008 | 1046 | then nil | |
1009 | - | else split( | |
1010 | - | if ((size( | |
1047 | + | else split(fu[2], "_") | |
1048 | + | if ((size(fw) != S)) | |
1011 | 1049 | then throw("All 6 resources should be passed") | |
1012 | - | else if ((size( | |
1050 | + | else if ((size(fx) != S)) | |
1013 | 1051 | then throw("All 6 materials should be passed") | |
1014 | 1052 | else { | |
1015 | - | let | |
1016 | - | let | |
1017 | - | let | |
1018 | - | let | |
1053 | + | let eq = fn(eP) | |
1054 | + | let fz = split(eP[ah], "_") | |
1055 | + | let fA = split(eP[ai], "_") | |
1056 | + | let fB = if ((eP[aj] == "")) | |
1019 | 1057 | then nil | |
1020 | - | else split( | |
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1058 | + | else split(eP[aj], "_") | |
1059 | + | let eo = split(fv[aq], "_") | |
1060 | + | let fC = split(fv[ar], "_") | |
1061 | + | let fD = if ((fv[as] == "")) | |
1024 | 1062 | then nil | |
1025 | - | else split( | |
1026 | - | func | |
1027 | - | let | |
1028 | - | let | |
1029 | - | let | |
1030 | - | let | |
1031 | - | if (( | |
1032 | - | then $Tuple4(( | |
1033 | - | else if (( | |
1034 | - | then if (( | |
1035 | - | then throw((((("Attempt to take " + | |
1036 | - | else $Tuple4(( | |
1037 | - | else if ((-( | |
1038 | - | then throw((((("Attempt to take " + toString(-( | |
1039 | - | else $Tuple4(( | |
1063 | + | else split(fv[as], "_") | |
1064 | + | func fE (cL,dj) = { | |
1065 | + | let eb = cL._1 | |
1066 | + | let fF = parseIntValue(dj) | |
1067 | + | let fG = parseIntValue(fz[eb]) | |
1068 | + | let fH = parseIntValue(eo[eb]) | |
1069 | + | if ((fF == 0)) | |
1070 | + | then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4) | |
1071 | + | else if ((fF > 0)) | |
1072 | + | then if ((fF > fH)) | |
1073 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available")) | |
1074 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF)) | |
1075 | + | else if ((-(fF) > fG)) | |
1076 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available")) | |
1077 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF)) | |
1040 | 1078 | } | |
1041 | 1079 | ||
1042 | - | let | |
1043 | - | let | |
1044 | - | let | |
1045 | - | let | |
1046 | - | func | |
1047 | - | then | |
1048 | - | else | |
1049 | - | ||
1050 | - | func | |
1051 | - | then | |
1080 | + | let cW = { | |
1081 | + | let cN = fw | |
1082 | + | let cO = size(cN) | |
1083 | + | let cP = $Tuple4(0, nil, nil, 0) | |
1084 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1085 | + | then cR | |
1086 | + | else fE(cR, cN[cS]) | |
1087 | + | ||
1088 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1089 | + | then cR | |
1052 | 1090 | else throw("List size exceeds 6") | |
1053 | 1091 | ||
1054 | - | | |
1092 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6) | |
1055 | 1093 | } | |
1056 | - | func | |
1057 | - | let | |
1058 | - | let | |
1059 | - | let | |
1060 | - | let | |
1061 | - | if (( | |
1062 | - | then $Tuple4(( | |
1063 | - | else if (( | |
1064 | - | then if (( | |
1065 | - | then throw((((("Attempt to take " + | |
1066 | - | else $Tuple4(( | |
1067 | - | else if ((-( | |
1068 | - | then throw((((("Attempt to take " + toString(-( | |
1069 | - | else $Tuple4(( | |
1094 | + | func fI (cL,dj) = { | |
1095 | + | let eb = cL._1 | |
1096 | + | let fF = parseIntValue(dj) | |
1097 | + | let fJ = parseIntValue(fA[eb]) | |
1098 | + | let fK = parseIntValue(fC[eb]) | |
1099 | + | if ((fF == 0)) | |
1100 | + | then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4) | |
1101 | + | else if ((fF > 0)) | |
1102 | + | then if ((fF > fK)) | |
1103 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available")) | |
1104 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF)) | |
1105 | + | else if ((-(fF) > fJ)) | |
1106 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available")) | |
1107 | + | else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF)) | |
1070 | 1108 | } | |
1071 | 1109 | ||
1072 | - | let | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | func | |
1077 | - | then | |
1078 | - | else | |
1079 | - | ||
1080 | - | func | |
1081 | - | then | |
1110 | + | let dT = { | |
1111 | + | let cN = fx | |
1112 | + | let cO = size(cN) | |
1113 | + | let cP = $Tuple4(0, nil, nil, cW._4) | |
1114 | + | func eW (cR,cS) = if ((cS >= cO)) | |
1115 | + | then cR | |
1116 | + | else fI(cR, cN[cS]) | |
1117 | + | ||
1118 | + | func eX (cR,cS) = if ((cS >= cO)) | |
1119 | + | then cR | |
1082 | 1120 | else throw("List size exceeds 6") | |
1083 | 1121 | ||
1084 | - | | |
1122 | + | eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6) | |
1085 | 1123 | } | |
1086 | - | func | |
1087 | - | let | |
1088 | - | let | |
1089 | - | let | |
1090 | - | then parseIntValue( | |
1124 | + | func fL (cL,dj) = { | |
1125 | + | let eb = cL._1 | |
1126 | + | let fF = parseIntValue(dj) | |
1127 | + | let fM = if ((size(fB) > eb)) | |
1128 | + | then parseIntValue(fB[eb]) | |
1091 | 1129 | else 0 | |
1092 | - | let | |
1093 | - | then parseIntValue( | |
1130 | + | let fN = if ((size(fD) > eb)) | |
1131 | + | then parseIntValue(fD[eb]) | |
1094 | 1132 | else 0 | |
1095 | - | if (( | |
1096 | - | then $Tuple4(( | |
1097 | - | else if (( | |
1098 | - | then if (( | |
1099 | - | then throw((((("Attempt to take " + | |
1133 | + | if ((fF == 0)) | |
1134 | + | then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4) | |
1135 | + | else if ((fF > 0)) | |
1136 | + | then if ((fF > fN)) | |
1137 | + | then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available")) | |
1100 | 1138 | else { | |
1101 | - | let | |
1102 | - | $Tuple4(( | |
1139 | + | let fO = (fq((fM + fF), af) - fq(fM, af)) | |
1140 | + | $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO)) | |
1103 | 1141 | } | |
1104 | - | else if ((-( | |
1105 | - | then throw((((("Attempt to take " + toString(-( | |
1142 | + | else if ((-(fF) > fM)) | |
1143 | + | then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available")) | |
1106 | 1144 | else { | |
1107 | - | let | |
1108 | - | $Tuple4(( | |
1145 | + | let fO = (fq((fM + fF), af) - fq(fM, af)) | |
1146 | + | $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO)) | |
1109 | 1147 | } | |
1110 | 1148 | } | |
1111 | 1149 | ||
1112 | - | let | |
1150 | + | let eL = if ((size(fy) != 0)) | |
1113 | 1151 | then { | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | func | |
1118 | - | then | |
1119 | - | else | |
1120 | - | ||
1121 | - | func | |
1122 | - | then | |
1152 | + | let cN = fy | |
1153 | + | let cO = size(cN) | |
1154 | + | let cP = $Tuple4(0, nil, nil, dT._4) | |
1155 | + | func eZ (cR,cS) = if ((cS >= cO)) | |
1156 | + | then cR | |
1157 | + | else fL(cR, cN[cS]) | |
1158 | + | ||
1159 | + | func fa (cR,cS) = if ((cS >= cO)) | |
1160 | + | then cR | |
1123 | 1161 | else throw("List size exceeds 50") | |
1124 | 1162 | ||
1125 | - | | |
1163 | + | fa(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(cP, 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) | |
1126 | 1164 | } | |
1127 | - | else $Tuple4(0, | |
1128 | - | let | |
1129 | - | if (( | |
1130 | - | then throw((((("Attempt to put total " + toString( | |
1131 | - | else $Tuple7(makeString( | |
1165 | + | else $Tuple4(0, fB, fD, dT._4) | |
1166 | + | let fP = eL._4 | |
1167 | + | if ((fP > eq)) | |
1168 | + | then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left")) | |
1169 | + | else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP) | |
1132 | 1170 | } | |
1133 | 1171 | } | |
1134 | 1172 | ||
1135 | 1173 | ||
1136 | - | func | |
1137 | - | let | |
1138 | - | let | |
1139 | - | let | |
1140 | - | let | |
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | let | |
1147 | - | $Tuple2([IntegerEntry( | |
1148 | - | } | |
1149 | - | ||
1150 | - | ||
1151 | - | func | |
1174 | + | func fQ (fR,fS) = { | |
1175 | + | let aT = toString(fR) | |
1176 | + | let fT = ew(toBigInt(fS)) | |
1177 | + | let fU = valueOrElse(getInteger(cm()), (cl + 1)) | |
1178 | + | let co = toString(fU) | |
1179 | + | let eF = toInt((fT % cf)) | |
1180 | + | let ee = eD(fT, eF) | |
1181 | + | let fV = aa[eF] | |
1182 | + | let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false) | |
1183 | + | let av = calculateAssetId(fW) | |
1184 | + | let fX = toBase58String(av) | |
1185 | + | $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV)) | |
1186 | + | } | |
1187 | + | ||
1188 | + | ||
1189 | + | func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX))) | |
1152 | 1190 | then throw("signature does not match") | |
1153 | 1191 | else { | |
1154 | - | let | |
1155 | - | let | |
1156 | - | let | |
1157 | - | let | |
1158 | - | let | |
1159 | - | let | |
1160 | - | let | |
1161 | - | let | |
1162 | - | if (if (( | |
1192 | + | let do = split(toUtf8String(fZ), ";") | |
1193 | + | let gb = split(do[0], "|") | |
1194 | + | let gc = split(gb[cA], "_") | |
1195 | + | let gd = parseIntValue(gc[0]) | |
1196 | + | let ge = parseIntValue(gc[1]) | |
1197 | + | let gf = split(do[1], ":") | |
1198 | + | let gg = gf[0] | |
1199 | + | let gh = parseIntValue(gb[cB]) | |
1200 | + | if (if ((gh > (lastBlock.timestamp + bZ))) | |
1163 | 1201 | then true | |
1164 | - | else ((lastBlock.timestamp - | |
1165 | - | then throw(((("signature outdated: logTime=" + toString( | |
1202 | + | else ((lastBlock.timestamp - bZ) > gh)) | |
1203 | + | then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1166 | 1204 | else { | |
1167 | - | let | |
1168 | - | let | |
1169 | - | if (( | |
1170 | - | then throw(((("Tx ids don't match! In state: " + | |
1205 | + | let gi = gf[1] | |
1206 | + | let gj = valueOrElse(getString(at(aT)), "") | |
1207 | + | if ((gj != gi)) | |
1208 | + | then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi)) | |
1171 | 1209 | else { | |
1172 | - | let p = valueOrErrorMessage(getString( | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | if (( | |
1177 | - | then throw(((("oldHealth=" + toString( | |
1178 | - | else if ((0 >= | |
1210 | + | let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked") | |
1211 | + | let gk = aQ(p) | |
1212 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1213 | + | let gm = valueOrElse(getInteger(gk), gl) | |
1214 | + | if ((gm != gd)) | |
1215 | + | then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd))) | |
1216 | + | else if ((0 >= gd)) | |
1179 | 1217 | then throw("You can't fly with zero health") | |
1180 | 1218 | else { | |
1181 | - | let | |
1182 | - | then | |
1219 | + | let gn = if ((size(gb) > cC)) | |
1220 | + | then gb[cC] | |
1183 | 1221 | else "" | |
1184 | - | let | |
1185 | - | then | |
1222 | + | let go = if ((size(gb) > cD)) | |
1223 | + | then gb[cD] | |
1186 | 1224 | else "" | |
1187 | - | let | |
1188 | - | then ( | |
1225 | + | let gp = if (if ((ge > 0)) | |
1226 | + | then (gn == "$") | |
1189 | 1227 | else false) | |
1190 | - | then | |
1228 | + | then bR(invoke(bC, "sendUsdtPrize", [aT], nil)) | |
1191 | 1229 | else 0 | |
1192 | - | $Tuple5( | |
1230 | + | $Tuple5(ge, p, gp, gg, go) | |
1193 | 1231 | } | |
1194 | 1232 | } | |
1195 | 1233 | } | |
1196 | 1234 | } | |
1197 | 1235 | ||
1198 | 1236 | ||
1199 | - | func | |
1200 | - | let | |
1201 | - | let | |
1202 | - | let | |
1203 | - | let | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | let | |
1208 | - | if ((0 >= | |
1209 | - | then $Tuple3([IntegerEntry( | |
1210 | - | else { | |
1211 | - | let | |
1212 | - | let | |
1213 | - | $Tuple3(((( | |
1214 | - | } | |
1215 | - | } | |
1216 | - | ||
1217 | - | ||
1218 | - | func | |
1219 | - | let | |
1220 | - | let | |
1221 | - | let | |
1222 | - | let | |
1223 | - | ((T + fraction(T, (( | |
1224 | - | } | |
1225 | - | ||
1226 | - | ||
1227 | - | func | |
1228 | - | let | |
1229 | - | then $Tuple2( | |
1230 | - | else { | |
1231 | - | let p = valueOrErrorMessage(getString( | |
1232 | - | let | |
1233 | - | let | |
1234 | - | if (( | |
1235 | - | then throw((("Duck location type is " + | |
1236 | - | else $Tuple2( | |
1237 | - | } | |
1238 | - | let | |
1239 | - | let | |
1240 | - | let | |
1241 | - | let | |
1242 | - | let | |
1243 | - | let | |
1244 | - | if (( | |
1237 | + | func gq (fR,fS,fZ,ga) = { | |
1238 | + | let aT = toString(fR) | |
1239 | + | let eG = fY(aT, fZ, ga) | |
1240 | + | let gk = aQ(eG._2) | |
1241 | + | let eK = aO(eG._2) | |
1242 | + | let fv = eJ(eK) | |
1243 | + | let gr = split(fv[ar], "_") | |
1244 | + | let gs = makeString(cX(true, gr, cd), "_") | |
1245 | + | let dt = de(fv[as], eG._5) | |
1246 | + | if ((0 >= eG._1)) | |
1247 | + | then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0) | |
1248 | + | else { | |
1249 | + | let gt = fQ(fR, fS) | |
1250 | + | let fX = gt._2._1 | |
1251 | + | $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3) | |
1252 | + | } | |
1253 | + | } | |
1254 | + | ||
1255 | + | ||
1256 | + | func gu (aF,gv) = { | |
1257 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1258 | + | let gw = valueOrElse(getInteger(az(R, aF)), 0) | |
1259 | + | let gx = (fe / 6) | |
1260 | + | let gy = (fe / 7) | |
1261 | + | ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5))) | |
1262 | + | } | |
1263 | + | ||
1264 | + | ||
1265 | + | func gz (b,gA,gB) = { | |
1266 | + | let gC = if ((gA == cx)) | |
1267 | + | then $Tuple2(gB, valueOrElse(getString(aN(b)), "")) | |
1268 | + | else { | |
1269 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1270 | + | let gD = valueOrElse(getString(aP(p)), W) | |
1271 | + | let gE = split(value(gD), "_") | |
1272 | + | if ((gE[aV] != "L")) | |
1273 | + | then throw((("Duck location type is " + gE[aV]) + ", but should be L")) | |
1274 | + | else $Tuple2(gE[aW], p) | |
1275 | + | } | |
1276 | + | let aF = gC._1 | |
1277 | + | let gF = gC._2 | |
1278 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
1279 | + | let gH = ax(aF) | |
1280 | + | let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked")) | |
1281 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
1282 | + | if ((gJ != b)) | |
1245 | 1283 | then throw((P + " is not yours")) | |
1246 | 1284 | else { | |
1247 | - | let | |
1248 | - | $Tuple4( | |
1249 | - | } | |
1250 | - | } | |
1251 | - | ||
1252 | - | ||
1253 | - | func | |
1285 | + | let gK = split(gG.description, "_") | |
1286 | + | $Tuple4(gF, aF, gK, gI) | |
1287 | + | } | |
1288 | + | } | |
1289 | + | ||
1290 | + | ||
1291 | + | func gL (b,fr,gA,gB) = if ((0 > fr)) | |
1254 | 1292 | then throw("Negative amount") | |
1255 | 1293 | else { | |
1256 | - | let | |
1257 | - | let | |
1258 | - | let | |
1259 | - | let | |
1260 | - | if ((0 > | |
1261 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1294 | + | let dF = gz(b, gA, gB) | |
1295 | + | let bU = dF._3[bI] | |
1296 | + | let dX = ed(dF._3[bJ]) | |
1297 | + | let eh = (lastBlock.timestamp - dF._4) | |
1298 | + | if ((0 > eh)) | |
1299 | + | then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1262 | 1300 | else { | |
1263 | - | let | |
1264 | - | let | |
1265 | - | let | |
1266 | - | if (( | |
1267 | - | then throw(((("Not enough resources, available = " + toString( | |
1301 | + | let gv = bT(bU) | |
1302 | + | let gM = gu(dF._2, gv) | |
1303 | + | let gN = fraction(eh, (gM * gv), U) | |
1304 | + | if ((fr > gN)) | |
1305 | + | then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr))) | |
1268 | 1306 | else { | |
1269 | - | let | |
1270 | - | let | |
1271 | - | let | |
1272 | - | let | |
1273 | - | let | |
1274 | - | let | |
1275 | - | let | |
1276 | - | let | |
1277 | - | let | |
1278 | - | if (if (( | |
1279 | - | then ( | |
1307 | + | let gO = fraction((gN - fr), U, (gM * gv)) | |
1308 | + | let gP = (lastBlock.timestamp - gO) | |
1309 | + | let fd = (gv / bj) | |
1310 | + | let ep = el(dX, (eh - gO), fd, gM) | |
1311 | + | let fc = aE(dF._2) | |
1312 | + | let fe = valueOrElse(getInteger(ay(dF._2)), 0) | |
1313 | + | let eP = fb(fc, fd, fe) | |
1314 | + | let fk = split(eP[ak], "_") | |
1315 | + | let eq = parseIntValue(fk[an]) | |
1316 | + | if (if ((gA == cx)) | |
1317 | + | then (fr > eq) | |
1280 | 1318 | else false) | |
1281 | - | then throw((("Only " + toString( | |
1319 | + | then throw((("Only " + toString(eq)) + " space left in warehouse")) | |
1282 | 1320 | else { | |
1283 | - | let | |
1284 | - | let | |
1285 | - | let | |
1286 | - | let | |
1287 | - | let | |
1288 | - | then $Tuple4( | |
1289 | - | else if (( | |
1290 | - | then $Tuple4( | |
1321 | + | let eK = aO(dF._1) | |
1322 | + | let fv = eJ(eK) | |
1323 | + | let eo = split(fv[aq], "_") | |
1324 | + | let en = split(eP[ah], "_") | |
1325 | + | let gQ = if ((gA == cx)) | |
1326 | + | then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2)) | |
1327 | + | else if ((gA == cy)) | |
1328 | + | then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an])) | |
1291 | 1329 | else { | |
1292 | - | let | |
1293 | - | let | |
1294 | - | $Tuple4( | |
1330 | + | let gR = em(en, eo, ep, eq) | |
1331 | + | let gS = min([parseIntValue(fk[an]), ep._2]) | |
1332 | + | $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS)) | |
1295 | 1333 | } | |
1296 | - | let | |
1297 | - | let | |
1298 | - | let | |
1299 | - | let | |
1300 | - | $Tuple5([IntegerEntry( | |
1334 | + | let gT = gQ._1 | |
1335 | + | let gU = gQ._2 | |
1336 | + | let gV = gQ._3 | |
1337 | + | let gW = gQ._4 | |
1338 | + | $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")]) | |
1301 | 1339 | } | |
1302 | 1340 | } | |
1303 | 1341 | } | |
1304 | 1342 | } | |
1305 | 1343 | ||
1306 | 1344 | ||
1307 | - | func | |
1308 | - | let | |
1309 | - | let | |
1310 | - | let | |
1311 | - | | |
1312 | - | } | |
1313 | - | ||
1314 | - | ||
1315 | - | func | |
1316 | - | let b = toString( | |
1317 | - | let | |
1318 | - | let | |
1319 | - | let | |
1320 | - | let | |
1321 | - | if (( | |
1345 | + | func gX (b,aF,gv,gA) = { | |
1346 | + | let gH = ax(aF) | |
1347 | + | let gI = value(getInteger(gH)) | |
1348 | + | let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv) | |
1349 | + | gL(b, gN, gA, aF) | |
1350 | + | } | |
1351 | + | ||
1352 | + | ||
1353 | + | func gY (cY,fR,gZ,aF) = { | |
1354 | + | let b = toString(fR) | |
1355 | + | let dF = gz(b, cz, aF) | |
1356 | + | let gv = bT(dF._3[bI]) | |
1357 | + | let ha = ay(dF._2) | |
1358 | + | let hb = valueOrElse(getInteger(ha), 0) | |
1359 | + | if ((hb >= 3)) | |
1322 | 1360 | then throw("Currently max infrastructure level = 3") | |
1323 | 1361 | else { | |
1324 | - | let O = ( | |
1325 | - | let | |
1326 | - | if (if (!( | |
1327 | - | then ( | |
1362 | + | let O = (hb + 1) | |
1363 | + | let hc = fraction(cc, (gv * O), bj) | |
1364 | + | if (if (!(cY)) | |
1365 | + | then (gZ != hc) | |
1328 | 1366 | else false) | |
1329 | - | then throw(("Payment attached should be " + toString( | |
1367 | + | then throw(("Payment attached should be " + toString(hc))) | |
1330 | 1368 | else { | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | let | |
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | $Tuple3(([IntegerEntry( | |
1369 | + | let eK = aO(dF._1) | |
1370 | + | let fv = eJ(eK) | |
1371 | + | let gr = split(fv[ar], "_") | |
1372 | + | let hd = fraction(be, (gv * O), bj) | |
1373 | + | let gs = makeString(cX(cY, gr, hd), "_") | |
1374 | + | let he = gX(b, dF._2, gv, cz) | |
1375 | + | let hf = he._5 | |
1376 | + | let hg = eM(hf[ag]) | |
1377 | + | let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_") | |
1378 | + | let hi = eM(hh) | |
1379 | + | let fk = split(hf[ak], "_") | |
1380 | + | let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_") | |
1381 | + | $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd) | |
1344 | 1382 | } | |
1345 | 1383 | } | |
1346 | 1384 | } | |
1347 | 1385 | ||
1348 | 1386 | ||
1349 | - | func | |
1387 | + | func hk (p,hl) = if (!(aZ)) | |
1350 | 1388 | then $Tuple2(nil, 0) | |
1351 | 1389 | else { | |
1352 | - | let | |
1353 | - | let | |
1354 | - | let I = valueOrElse(getInteger( | |
1355 | - | let N = (I + | |
1356 | - | let | |
1357 | - | let | |
1358 | - | $Tuple2([IntegerEntry( | |
1390 | + | let hm = r(p) | |
1391 | + | let hn = q(p) | |
1392 | + | let I = valueOrElse(getInteger(bD, hn), 0) | |
1393 | + | let N = (I + hl) | |
1394 | + | let ho = L(valueOrElse(getInteger(bD, hm), 0), N) | |
1395 | + | let hp = s(p) | |
1396 | + | $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N) | |
1359 | 1397 | } | |
1360 | 1398 | ||
1361 | 1399 | ||
1362 | - | func | |
1400 | + | func hq (b,hl) = if (!(aZ)) | |
1363 | 1401 | then $Tuple2(nil, 0) | |
1364 | 1402 | else { | |
1365 | - | let | |
1366 | - | let | |
1367 | - | let I = valueOrElse(getInteger( | |
1368 | - | let N = (I + | |
1369 | - | let | |
1370 | - | let | |
1371 | - | $Tuple2([IntegerEntry( | |
1403 | + | let hm = v(b) | |
1404 | + | let hn = u(b) | |
1405 | + | let I = valueOrElse(getInteger(bD, hn), 0) | |
1406 | + | let N = (I + hl) | |
1407 | + | let ho = L(valueOrElse(getInteger(bD, hm), 0), N) | |
1408 | + | let hp = w(b) | |
1409 | + | $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N) | |
1372 | 1410 | } | |
1373 | 1411 | ||
1374 | 1412 | ||
1375 | - | func | |
1376 | - | let p = valueOrErrorMessage(getString( | |
1377 | - | let | |
1378 | - | let | |
1379 | - | if (!(isDefined( | |
1413 | + | func hr (b) = { | |
1414 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1415 | + | let hs = aI(b) | |
1416 | + | let ht = getString(hs) | |
1417 | + | if (!(isDefined(ht))) | |
1380 | 1418 | then throw("You are not eligible for ONBOARD artifact") | |
1381 | 1419 | else { | |
1382 | - | let | |
1383 | - | let | |
1384 | - | if (isDefined( | |
1385 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1420 | + | let hu = aK(b) | |
1421 | + | let hv = getString(hu) | |
1422 | + | if (isDefined(hv)) | |
1423 | + | then throw(("You already used your ONBOARD artifact on duck " + value(hv))) | |
1386 | 1424 | else { | |
1387 | - | let | |
1388 | - | let | |
1389 | - | if (isDefined( | |
1390 | - | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value( | |
1391 | - | else ([StringEntry( | |
1425 | + | let hw = aJ(p) | |
1426 | + | let hx = getString(hw) | |
1427 | + | if (isDefined(hx)) | |
1428 | + | then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx))) | |
1429 | + | else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1) | |
1392 | 1430 | } | |
1393 | 1431 | } | |
1394 | 1432 | } | |
1395 | 1433 | ||
1396 | 1434 | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | if ((valueOrElse(getInteger( | |
1435 | + | func hy (b,gB) = { | |
1436 | + | let dF = gz(b, cz, gB) | |
1437 | + | let aF = dF._2 | |
1438 | + | let gv = bT(dF._3[bI]) | |
1439 | + | let hz = az(R, aF) | |
1440 | + | if ((valueOrElse(getInteger(hz), 0) > 0)) | |
1403 | 1441 | then throw("Presale artifact is already activated") | |
1404 | - | else if ((parseIntValue( | |
1405 | - | then throw((((P + " ") + | |
1442 | + | else if ((parseIntValue(dF._3[bH]) > cl)) | |
1443 | + | then throw((((P + " ") + aF) + " is not eligible for presale artifact")) | |
1406 | 1444 | else { | |
1407 | - | let | |
1408 | - | (((( | |
1445 | + | let he = gX(b, aF, gv, cz) | |
1446 | + | ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":"))) | |
1409 | 1447 | } | |
1410 | 1448 | } | |
1411 | 1449 | ||
1412 | 1450 | ||
1413 | - | func | |
1414 | - | let p = valueOrErrorMessage(getString( | |
1415 | - | func | |
1416 | - | let | |
1417 | - | let | |
1418 | - | let | |
1419 | - | let | |
1420 | - | if (( | |
1451 | + | func hA (hB,O,hC,b,hD,fS,hE) = { | |
1452 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1453 | + | func hF (cL,aF) = { | |
1454 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
1455 | + | let gH = ax(aF) | |
1456 | + | let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked")) | |
1457 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
1458 | + | if ((gJ != b)) | |
1421 | 1459 | then throw((P + " is not yours")) | |
1422 | 1460 | else { | |
1423 | - | let | |
1424 | - | let | |
1425 | - | if (if (( | |
1426 | - | then ( | |
1461 | + | let gK = split(gG.description, "_") | |
1462 | + | let fV = gK[bK] | |
1463 | + | if (if ((cL._3 != "")) | |
1464 | + | then (cL._3 != fV) | |
1427 | 1465 | else false) | |
1428 | 1466 | then throw("Lands should be on the same continent to merge") | |
1429 | 1467 | else { | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | if (("S" == | |
1468 | + | let bU = gK[bI] | |
1469 | + | let hG = cL._1 | |
1470 | + | let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed") | |
1471 | + | let hH = (take(hG, eb) + drop(hG, (eb + 1))) | |
1472 | + | let gv = bT(bU) | |
1473 | + | let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0)) | |
1474 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1475 | + | let hJ = { | |
1476 | + | let bc = bU | |
1477 | + | if (("S" == bc)) | |
1440 | 1478 | then 3 | |
1441 | - | else if (("M" == | |
1479 | + | else if (("M" == bc)) | |
1442 | 1480 | then 4 | |
1443 | - | else if (("L" == | |
1481 | + | else if (("L" == bc)) | |
1444 | 1482 | then 5 | |
1445 | - | else if (("XL" == | |
1483 | + | else if (("XL" == bc)) | |
1446 | 1484 | then 6 | |
1447 | 1485 | else throw("Only S, M, L, XL can merge") | |
1448 | 1486 | } | |
1449 | - | if (( | |
1487 | + | if ((fe != hJ)) | |
1450 | 1488 | then throw("All lands should be maxed to merge") | |
1451 | 1489 | else { | |
1452 | - | let | |
1453 | - | let | |
1454 | - | let | |
1455 | - | if ((0 > | |
1456 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1490 | + | let co = gK[bH] | |
1491 | + | let dX = ed(gK[bJ]) | |
1492 | + | let eh = (lastBlock.timestamp - gI) | |
1493 | + | if ((0 > eh)) | |
1494 | + | then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp))) | |
1457 | 1495 | else { | |
1458 | - | let | |
1459 | - | let | |
1460 | - | let | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | if (!(isDefined( | |
1465 | - | then throw(("Your staked lands don't contain " + | |
1496 | + | let gM = gu(aF, gv) | |
1497 | + | let fd = (gv / bj) | |
1498 | + | let gU = ef(split(cL._4, "_"), dX, eh, fd, gM) | |
1499 | + | let cV = dV(split(cL._6, "_"), dX, fd, -1) | |
1500 | + | let hK = cL._7 | |
1501 | + | let bB = indexOf(hK, aF) | |
1502 | + | if (!(isDefined(bB))) | |
1503 | + | then throw(("Your staked lands don't contain " + aF)) | |
1466 | 1504 | else { | |
1467 | - | let | |
1468 | - | let | |
1469 | - | $Tuple8( | |
1505 | + | let hL = aw(aF) | |
1506 | + | let hM = valueOrElse(getString(hL), "") | |
1507 | + | $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv)) | |
1470 | 1508 | } | |
1471 | 1509 | } | |
1472 | 1510 | } | |
1473 | 1511 | } | |
1474 | 1512 | } | |
1475 | 1513 | } | |
1476 | 1514 | ||
1477 | - | let | |
1478 | - | let | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | let | |
1483 | - | then split_51C(value( | |
1515 | + | let eK = aO(p) | |
1516 | + | let fv = eJ(eK) | |
1517 | + | let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0") | |
1518 | + | let hO = bM(b) | |
1519 | + | let hP = getString(hO) | |
1520 | + | let hQ = if (isDefined(hP)) | |
1521 | + | then split_51C(value(hP), "_") | |
1484 | 1522 | else nil | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | func | |
1490 | - | then | |
1491 | - | else | |
1492 | - | ||
1493 | - | func | |
1494 | - | then | |
1523 | + | let cW = { | |
1524 | + | let cN = hD | |
1525 | + | let cO = size(cN) | |
1526 | + | let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0) | |
1527 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1528 | + | then cR | |
1529 | + | else hF(cR, cN[cS]) | |
1530 | + | ||
1531 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1532 | + | then cR | |
1495 | 1533 | else throw("List size exceeds 5") | |
1496 | 1534 | ||
1497 | - | | |
1535 | + | cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5) | |
1498 | 1536 | } | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | let | |
1503 | - | let | |
1504 | - | let | |
1505 | - | let | |
1506 | - | let | |
1507 | - | let | |
1508 | - | let | |
1509 | - | let | |
1510 | - | $Tuple2(((((((((((((((( | |
1511 | - | then StringEntry( | |
1512 | - | else DeleteEntry( | |
1537 | + | let fV = cW._3 | |
1538 | + | let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV)) | |
1539 | + | let ee = eD(ew(toBigInt(fS)), eF) | |
1540 | + | let fU = valueOrElse(getInteger(cm()), (cl + 1)) | |
1541 | + | let hR = toString(fU) | |
1542 | + | let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false) | |
1543 | + | let av = calculateAssetId(fW) | |
1544 | + | let hS = toBase58String(av) | |
1545 | + | let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_") | |
1546 | + | let hT = bN(b) | |
1547 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1548 | + | $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0)) | |
1549 | + | then StringEntry(hO, makeString_11C(cW._7, "_")) | |
1550 | + | else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU)) | |
1513 | 1551 | then 0 | |
1514 | - | else ( | |
1515 | - | } | |
1516 | - | ||
1517 | - | ||
1518 | - | func | |
1519 | - | ||
1520 | - | ||
1521 | - | func | |
1522 | - | let | |
1523 | - | if (if (!( | |
1524 | - | then ( | |
1552 | + | else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS) | |
1553 | + | } | |
1554 | + | ||
1555 | + | ||
1556 | + | func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0) | |
1557 | + | ||
1558 | + | ||
1559 | + | func hW (b,hD,fS,cY,gZ) = { | |
1560 | + | let hc = (cc * 4) | |
1561 | + | if (if (!(cY)) | |
1562 | + | then (gZ != hc) | |
1525 | 1563 | else false) | |
1526 | - | then throw(("Payment attached should be " + toString( | |
1527 | - | else | |
1528 | - | } | |
1529 | - | ||
1530 | - | ||
1531 | - | func | |
1532 | - | let | |
1533 | - | if (if (!( | |
1534 | - | then ( | |
1564 | + | then throw(("Payment attached should be " + toString(hc))) | |
1565 | + | else hA("L", 4, "SMM", b, hD, fS, (be * 4)) | |
1566 | + | } | |
1567 | + | ||
1568 | + | ||
1569 | + | func hX (b,hD,fS,cY,gZ) = { | |
1570 | + | let hc = (cc * 47) | |
1571 | + | if (if (!(cY)) | |
1572 | + | then (gZ != hc) | |
1535 | 1573 | else false) | |
1536 | - | then throw(("Payment attached should be " + toString( | |
1537 | - | else | |
1538 | - | } | |
1539 | - | ||
1540 | - | ||
1541 | - | func | |
1542 | - | let | |
1543 | - | if (if (!( | |
1544 | - | then ( | |
1574 | + | then throw(("Payment attached should be " + toString(hc))) | |
1575 | + | else hA("XL", 5, "SSSML", b, hD, fS, (be * 47)) | |
1576 | + | } | |
1577 | + | ||
1578 | + | ||
1579 | + | func hY (b,hD,fS,cY,gZ) = { | |
1580 | + | let hc = (cc * 54) | |
1581 | + | if (if (!(cY)) | |
1582 | + | then (gZ != hc) | |
1545 | 1583 | else false) | |
1546 | - | then throw(("Payment attached should be " + toString( | |
1547 | - | else | |
1548 | - | } | |
1549 | - | ||
1550 | - | ||
1551 | - | func | |
1552 | - | let | |
1553 | - | let | |
1554 | - | if ((4 == | |
1555 | - | then | |
1556 | - | else if ((3 == | |
1557 | - | then | |
1558 | - | else if ((5 == | |
1559 | - | then | |
1560 | - | else if ((2 == | |
1561 | - | then | |
1584 | + | then throw(("Payment attached should be " + toString(hc))) | |
1585 | + | else hA("XXL", 6, "LXL", b, hD, fS, (be * 54)) | |
1586 | + | } | |
1587 | + | ||
1588 | + | ||
1589 | + | func hZ (cY,b,gZ,hD,fS) = { | |
1590 | + | let ia = { | |
1591 | + | let bc = size(hD) | |
1592 | + | if ((4 == bc)) | |
1593 | + | then hV(b, hD, fS) | |
1594 | + | else if ((3 == bc)) | |
1595 | + | then hW(b, hD, fS, cY, gZ) | |
1596 | + | else if ((5 == bc)) | |
1597 | + | then hX(b, hD, fS, cY, gZ) | |
1598 | + | else if ((2 == bc)) | |
1599 | + | then hY(b, hD, fS, cY, gZ) | |
1562 | 1600 | else throw("Unknown merge") | |
1563 | 1601 | } | |
1564 | - | | |
1565 | - | } | |
1566 | - | ||
1567 | - | ||
1568 | - | func | |
1569 | - | then valueOrElse(getBoolean( | |
1602 | + | ia | |
1603 | + | } | |
1604 | + | ||
1605 | + | ||
1606 | + | func ib (eb) = if (if ((eb.originCaller != bC)) | |
1607 | + | then valueOrElse(getBoolean(aR()), false) | |
1570 | 1608 | else false) | |
1571 | 1609 | then throw("Contracts are under maintenance") | |
1572 | - | else StringEntry( | |
1573 | - | ||
1574 | - | ||
1575 | - | @Callable( | |
1576 | - | func constructorV1 ( | |
1610 | + | else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId)) | |
1611 | + | ||
1612 | + | ||
1613 | + | @Callable(eb) | |
1614 | + | func constructorV1 (ic) = if ((eb.caller != this)) | |
1577 | 1615 | then throw("Permission denied") | |
1578 | - | else [StringEntry( | |
1579 | - | ||
1580 | - | ||
1581 | - | ||
1582 | - | @Callable( | |
1583 | - | func setBlocked ( | |
1616 | + | else [StringEntry(bw(), ic)] | |
1617 | + | ||
1618 | + | ||
1619 | + | ||
1620 | + | @Callable(eb) | |
1621 | + | func setBlocked (id) = if ((eb.caller != this)) | |
1584 | 1622 | then throw("permission denied") | |
1585 | - | else [BooleanEntry( | |
1586 | - | ||
1587 | - | ||
1588 | - | ||
1589 | - | @Callable( | |
1623 | + | else [BooleanEntry(aR(), id)] | |
1624 | + | ||
1625 | + | ||
1626 | + | ||
1627 | + | @Callable(eb) | |
1590 | 1628 | func stakeLand () = { | |
1591 | - | let | |
1592 | - | if ((size( | |
1629 | + | let ie = ib(eb) | |
1630 | + | if ((size(eb.payments) != 1)) | |
1593 | 1631 | then throw("Exactly one payment required") | |
1594 | 1632 | else { | |
1595 | - | let | |
1596 | - | let | |
1597 | - | let | |
1598 | - | if (( | |
1633 | + | let if = value(eb.payments[0]) | |
1634 | + | let av = value(if.assetId) | |
1635 | + | let bp = toString(eb.caller) | |
1636 | + | if ((if.amount != 1)) | |
1599 | 1637 | then throw((("NFT " + P) + " token should be attached as payment")) | |
1600 | 1638 | else { | |
1601 | - | let | |
1602 | - | if (( | |
1639 | + | let gG = value(assetInfo(av)) | |
1640 | + | if ((gG.issuer != this)) | |
1603 | 1641 | then throw("Unknown issuer of token") | |
1604 | - | else if (!(contains( | |
1642 | + | else if (!(contains(gG.name, P))) | |
1605 | 1643 | then throw((("Only NFT " + P) + " tokens are accepted")) | |
1606 | 1644 | else { | |
1607 | - | let | |
1608 | - | let | |
1609 | - | then dropRight( | |
1610 | - | else if (contains( | |
1611 | - | then dropRight( | |
1612 | - | else dropRight( | |
1613 | - | if (!(isDefined(parseInt( | |
1614 | - | then throw(("Cannot parse land number from " + | |
1645 | + | let ig = drop(gG.name, 4) | |
1646 | + | let co = if (contains(ig, "XXL")) | |
1647 | + | then dropRight(ig, 3) | |
1648 | + | else if (contains(ig, "XL")) | |
1649 | + | then dropRight(ig, 2) | |
1650 | + | else dropRight(ig, 1) | |
1651 | + | if (!(isDefined(parseInt(co)))) | |
1652 | + | then throw(("Cannot parse land number from " + gG.name)) | |
1615 | 1653 | else { | |
1616 | - | let | |
1617 | - | let | |
1618 | - | if (isDefined(getInteger( | |
1619 | - | then throw((("NFT " + | |
1654 | + | let aF = toBase58String(av) | |
1655 | + | let gH = ax(aF) | |
1656 | + | if (isDefined(getInteger(gH))) | |
1657 | + | then throw((("NFT " + gG.name) + " is already staked")) | |
1620 | 1658 | else { | |
1621 | - | let | |
1622 | - | let | |
1623 | - | let | |
1624 | - | let | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | then split_51C(value( | |
1659 | + | let gK = split(gG.description, "_") | |
1660 | + | let dX = ed(gK[bJ]) | |
1661 | + | let gv = bT(gK[bI]) | |
1662 | + | let cV = ec(dX, (gv / bj), 1) | |
1663 | + | let gw = valueOrElse(getInteger(az(R, aF)), 0) | |
1664 | + | let hO = bM(bp) | |
1665 | + | let hP = getString(hO) | |
1666 | + | let hK = if (isDefined(hP)) | |
1667 | + | then split_51C(value(hP), "_") | |
1630 | 1668 | else nil | |
1631 | - | if (containsElement( | |
1632 | - | then throw(("Your staked lands already contain " + | |
1669 | + | if (containsElement(hK, aF)) | |
1670 | + | then throw(("Your staked lands already contain " + aF)) | |
1633 | 1671 | else { | |
1634 | - | let | |
1635 | - | let | |
1636 | - | let | |
1637 | - | let | |
1638 | - | $Tuple2([IntegerEntry( | |
1672 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
1673 | + | let hT = bN(bp) | |
1674 | + | let ih = valueOrElse(getInteger(hT), 0) | |
1675 | + | let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil)) | |
1676 | + | $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii) | |
1639 | 1677 | } | |
1640 | 1678 | } | |
1641 | 1679 | } | |
1642 | 1680 | } | |
1643 | 1681 | } | |
1644 | 1682 | } | |
1645 | 1683 | } | |
1646 | 1684 | ||
1647 | 1685 | ||
1648 | 1686 | ||
1649 | - | @Callable( | |
1650 | - | func unstakeLand ( | |
1651 | - | let | |
1652 | - | if ((size( | |
1687 | + | @Callable(eb) | |
1688 | + | func unstakeLand (gB) = { | |
1689 | + | let ie = ib(eb) | |
1690 | + | if ((size(eb.payments) != 0)) | |
1653 | 1691 | then throw("No payments required") | |
1654 | 1692 | else { | |
1655 | - | let b = toString( | |
1656 | - | let | |
1657 | - | let | |
1658 | - | let | |
1659 | - | let | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | let | |
1664 | - | let | |
1665 | - | if (!(isDefined( | |
1666 | - | then throw(("Your staked lands don't contain " + | |
1693 | + | let b = toString(eb.caller) | |
1694 | + | let dF = gz(b, cy, gB) | |
1695 | + | let aF = dF._2 | |
1696 | + | let hO = bM(b) | |
1697 | + | let dX = ed(dF._3[bJ]) | |
1698 | + | let gv = bT(dF._3[bI]) | |
1699 | + | let cV = ec(dX, (gv / bj), -1) | |
1700 | + | let he = gX(b, aF, gv, cy) | |
1701 | + | let hK = split_51C(valueOrElse(getString(hO), ""), "_") | |
1702 | + | let bB = indexOf(hK, aF) | |
1703 | + | if (!(isDefined(bB))) | |
1704 | + | then throw(("Your staked lands don't contain " + aF)) | |
1667 | 1705 | else { | |
1668 | - | let | |
1669 | - | let | |
1670 | - | if (( | |
1671 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1706 | + | let ij = lastBlock.timestamp | |
1707 | + | let ik = valueOrElse(getInteger(bF, aS(b)), 0) | |
1708 | + | if ((ik >= ij)) | |
1709 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik))) | |
1672 | 1710 | else { | |
1673 | - | let | |
1674 | - | if (( | |
1675 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1711 | + | let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf) | |
1712 | + | if ((il > ij)) | |
1713 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il))) | |
1676 | 1714 | else { | |
1677 | - | let | |
1678 | - | let | |
1679 | - | let | |
1715 | + | let hT = bN(b) | |
1716 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1717 | + | let im = if ((gv > hU)) | |
1680 | 1718 | then 0 | |
1681 | - | else ( | |
1682 | - | let | |
1683 | - | $Tuple2([ScriptTransfer( | |
1684 | - | then StringEntry( | |
1685 | - | else DeleteEntry( | |
1719 | + | else (hU - gv) | |
1720 | + | let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil)) | |
1721 | + | $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1)) | |
1722 | + | then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_")) | |
1723 | + | else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii) | |
1686 | 1724 | } | |
1687 | 1725 | } | |
1688 | 1726 | } | |
1689 | 1727 | } | |
1690 | 1728 | } | |
1691 | 1729 | ||
1692 | 1730 | ||
1693 | 1731 | ||
1694 | - | @Callable( | |
1732 | + | @Callable(eb) | |
1695 | 1733 | func stakeDuck () = { | |
1696 | - | let | |
1697 | - | if ((size( | |
1734 | + | let ie = ib(eb) | |
1735 | + | if ((size(eb.payments) != 1)) | |
1698 | 1736 | then throw("Exactly one payment required") | |
1699 | 1737 | else { | |
1700 | - | let | |
1701 | - | let | |
1702 | - | let | |
1703 | - | if (( | |
1738 | + | let if = value(eb.payments[0]) | |
1739 | + | let av = value(if.assetId) | |
1740 | + | let bp = toString(eb.caller) | |
1741 | + | if ((if.amount != 1)) | |
1704 | 1742 | then throw((("NFT " + Q) + " token should be attached as payment")) | |
1705 | 1743 | else { | |
1706 | - | let | |
1707 | - | if (if (( | |
1708 | - | then ( | |
1744 | + | let gG = value(assetInfo(av)) | |
1745 | + | if (if ((gG.issuer != bV)) | |
1746 | + | then (gG.issuer != bW) | |
1709 | 1747 | else false) | |
1710 | 1748 | then throw((("Unknown issuer of " + Q) + " token")) | |
1711 | - | else if (!(contains( | |
1749 | + | else if (!(contains(gG.name, Q))) | |
1712 | 1750 | then throw((("Only NFT " + Q) + " tokens are accepted")) | |
1713 | 1751 | else { | |
1714 | - | let | |
1715 | - | let | |
1716 | - | if (isDefined(getInteger( | |
1717 | - | then throw((("NFT " + | |
1718 | - | else if (isDefined(getString( | |
1719 | - | then throw(("You already staked one duck: " + | |
1752 | + | let in = toBase58String(av) | |
1753 | + | let gH = ax(in) | |
1754 | + | if (isDefined(getInteger(gH))) | |
1755 | + | then throw((("NFT " + gG.name) + " is already staked")) | |
1756 | + | else if (isDefined(getString(aN(bp)))) | |
1757 | + | then throw(("You already staked one duck: " + gG.name)) | |
1720 | 1758 | else { | |
1721 | - | let | |
1722 | - | let | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | ([IntegerEntry( | |
1759 | + | let io = aP(in) | |
1760 | + | let ip = getString(io) | |
1761 | + | let eK = aO(in) | |
1762 | + | let iq = getString(eK) | |
1763 | + | let gk = aQ(in) | |
1764 | + | let gl = J(valueOrElse(getInteger(r(in)), 0)) | |
1765 | + | let ir = valueOrElse(getInteger(gk), gl) | |
1766 | + | ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip)) | |
1729 | 1767 | then nil | |
1730 | - | else ([StringEntry( | |
1768 | + | else ([StringEntry(io, W)] ++ (if (isDefined(iq)) | |
1731 | 1769 | then nil | |
1732 | - | else (([StringEntry( | |
1770 | + | else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie))))) | |
1733 | 1771 | } | |
1734 | 1772 | } | |
1735 | 1773 | } | |
1736 | 1774 | } | |
1737 | 1775 | } | |
1738 | 1776 | ||
1739 | 1777 | ||
1740 | 1778 | ||
1741 | - | @Callable( | |
1742 | - | func unstakeDuck ( | |
1743 | - | let | |
1744 | - | if ((size( | |
1779 | + | @Callable(eb) | |
1780 | + | func unstakeDuck (in) = { | |
1781 | + | let ie = ib(eb) | |
1782 | + | if ((size(eb.payments) != 0)) | |
1745 | 1783 | then throw("No payments required") | |
1746 | 1784 | else { | |
1747 | - | let | |
1748 | - | let | |
1749 | - | let | |
1750 | - | let | |
1751 | - | if (!(isDefined(getInteger( | |
1752 | - | then throw((("NFT " + | |
1753 | - | else if (!(isDefined(getString( | |
1754 | - | then throw((("The duck " + | |
1785 | + | let av = fromBase58String(in) | |
1786 | + | let bp = toString(eb.caller) | |
1787 | + | let gG = value(assetInfo(av)) | |
1788 | + | let gH = ax(toBase58String(av)) | |
1789 | + | if (!(isDefined(getInteger(gH)))) | |
1790 | + | then throw((("NFT " + gG.name) + " is not staked")) | |
1791 | + | else if (!(isDefined(getString(aN(bp))))) | |
1792 | + | then throw((("The duck " + gG.name) + " is not staked")) | |
1755 | 1793 | else { | |
1756 | - | let | |
1757 | - | if (( | |
1794 | + | let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned")) | |
1795 | + | if ((gJ != bp)) | |
1758 | 1796 | then throw("Staked NFT is not yours") | |
1759 | 1797 | else { | |
1760 | - | let | |
1761 | - | let | |
1762 | - | let | |
1763 | - | if (( | |
1764 | - | then throw((("Please heal your duck to " + toString( | |
1765 | - | else [ScriptTransfer( | |
1798 | + | let gk = aQ(in) | |
1799 | + | let gl = J(valueOrElse(getInteger(r(in)), 0)) | |
1800 | + | let is = valueOrElse(getInteger(gk), gl) | |
1801 | + | if ((gl > is)) | |
1802 | + | then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking")) | |
1803 | + | else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie] | |
1766 | 1804 | } | |
1767 | 1805 | } | |
1768 | 1806 | } | |
1769 | 1807 | } | |
1770 | 1808 | ||
1771 | 1809 | ||
1772 | 1810 | ||
1773 | - | @Callable( | |
1774 | - | func claimRes ( | |
1775 | - | let | |
1776 | - | if ((size( | |
1811 | + | @Callable(eb) | |
1812 | + | func claimRes (fr,it) = { | |
1813 | + | let ie = ib(eb) | |
1814 | + | if ((size(eb.payments) != 0)) | |
1777 | 1815 | then throw("No payments required") | |
1778 | 1816 | else { | |
1779 | - | let b = toString( | |
1780 | - | let | |
1781 | - | let p = valueOrErrorMessage(getString( | |
1782 | - | $Tuple2((((( | |
1783 | - | } | |
1784 | - | } | |
1785 | - | ||
1786 | - | ||
1787 | - | ||
1788 | - | @Callable( | |
1789 | - | func claimResToWH ( | |
1790 | - | let | |
1791 | - | if ((size( | |
1817 | + | let b = toString(eb.originCaller) | |
1818 | + | let dd = gL(b, fr, cy, it) | |
1819 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
1820 | + | $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq]) | |
1821 | + | } | |
1822 | + | } | |
1823 | + | ||
1824 | + | ||
1825 | + | ||
1826 | + | @Callable(eb) | |
1827 | + | func claimResToWH (fr,it) = { | |
1828 | + | let ie = ib(eb) | |
1829 | + | if ((size(eb.payments) != 0)) | |
1792 | 1830 | then throw("No payments required") | |
1793 | 1831 | else { | |
1794 | - | let b = toString( | |
1795 | - | let | |
1796 | - | $Tuple2((((( | |
1797 | - | } | |
1798 | - | } | |
1799 | - | ||
1800 | - | ||
1801 | - | ||
1802 | - | @Callable( | |
1803 | - | func flight ( | |
1804 | - | let | |
1805 | - | if ((size( | |
1832 | + | let b = toString(eb.originCaller) | |
1833 | + | let dd = gL(b, fr, cx, it) | |
1834 | + | $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah]) | |
1835 | + | } | |
1836 | + | } | |
1837 | + | ||
1838 | + | ||
1839 | + | ||
1840 | + | @Callable(eb) | |
1841 | + | func flight (fZ,ga) = { | |
1842 | + | let ie = ib(eb) | |
1843 | + | if ((size(eb.payments) != 0)) | |
1806 | 1844 | then throw("No payments required") | |
1807 | 1845 | else { | |
1808 | - | let | |
1809 | - | let | |
1810 | - | let p = | |
1811 | - | let | |
1812 | - | let | |
1813 | - | if (( | |
1846 | + | let aT = toString(eb.caller) | |
1847 | + | let eG = fY(aT, fZ, ga) | |
1848 | + | let p = eG._2 | |
1849 | + | let io = aP(p) | |
1850 | + | let gD = valueOrElse(getString(io), W) | |
1851 | + | if ((eG._4 == gD)) | |
1814 | 1852 | then throw("You can't fly to the same location") | |
1815 | 1853 | else { | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | $Tuple2(([StringEntry( | |
1820 | - | then | |
1821 | - | else | |
1854 | + | let eK = aO(p) | |
1855 | + | let fv = eJ(eK) | |
1856 | + | let dt = de(fv[as], eG._5) | |
1857 | + | $Tuple2(([StringEntry(io, if ((eG._1 > 0)) | |
1858 | + | then eG._4 | |
1859 | + | else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0)) | |
1822 | 1860 | then y | |
1823 | - | else z)._1), | |
1861 | + | else z)._1), eG._3) | |
1824 | 1862 | } | |
1825 | 1863 | } | |
1826 | 1864 | } | |
1827 | 1865 | ||
1828 | 1866 | ||
1829 | 1867 | ||
1830 | - | @Callable( | |
1831 | - | func heal ( | |
1832 | - | let | |
1833 | - | if (if (if ((0 > | |
1868 | + | @Callable(eb) | |
1869 | + | func heal (iu,iv,iw) = { | |
1870 | + | let ie = ib(eb) | |
1871 | + | if (if (if ((0 > iu)) | |
1834 | 1872 | then true | |
1835 | - | else (0 > | |
1873 | + | else (0 > iv)) | |
1836 | 1874 | then true | |
1837 | - | else (0 > | |
1875 | + | else (0 > iw)) | |
1838 | 1876 | then throw("Quantity cannot be negative") | |
1839 | 1877 | else { | |
1840 | - | let p = valueOrErrorMessage(getString( | |
1841 | - | let | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let | |
1845 | - | if (( | |
1846 | - | then throw((("HP should be < " + toString( | |
1878 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
1879 | + | let ix = [iu, iv, iw] | |
1880 | + | let gk = aQ(p) | |
1881 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1882 | + | let iy = valueOrElse(getInteger(gk), gl) | |
1883 | + | if ((iy >= gl)) | |
1884 | + | then throw((("HP should be < " + toString(gl)) + " to heal")) | |
1847 | 1885 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | let | |
1886 | + | let eK = aO(p) | |
1887 | + | let fv = eJ(eK) | |
1888 | + | let iz = if ((fv[as] == "")) | |
1851 | 1889 | then nil | |
1852 | - | else split( | |
1853 | - | func | |
1854 | - | let | |
1855 | - | let | |
1856 | - | then parseIntValue( | |
1890 | + | else split(fv[as], "_") | |
1891 | + | func iA (cL,iB) = { | |
1892 | + | let bS = cL._2 | |
1893 | + | let ex = if ((size(iz) > bS)) | |
1894 | + | then parseIntValue(iz[bS]) | |
1857 | 1895 | else 0 | |
1858 | - | if ((3 > | |
1896 | + | if ((3 > bS)) | |
1859 | 1897 | then { | |
1860 | - | let | |
1861 | - | if (( | |
1862 | - | then throw(((("You have only " + toString( | |
1863 | - | else $Tuple3(( | |
1898 | + | let iC = ix[bS] | |
1899 | + | if ((iC > ex)) | |
1900 | + | then throw(((("You have only " + toString(ex)) + " of ") + Z[bS])) | |
1901 | + | else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC))) | |
1864 | 1902 | } | |
1865 | - | else $Tuple3(( | |
1903 | + | else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3) | |
1866 | 1904 | } | |
1867 | 1905 | ||
1868 | - | let | |
1869 | - | let | |
1870 | - | let | |
1871 | - | let | |
1872 | - | func | |
1873 | - | then | |
1874 | - | else | |
1875 | - | ||
1876 | - | func | |
1877 | - | then | |
1906 | + | let dd = { | |
1907 | + | let cN = ac | |
1908 | + | let cO = size(cN) | |
1909 | + | let cP = $Tuple3(nil, 0, 0) | |
1910 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
1911 | + | then cR | |
1912 | + | else iA(cR, cN[cS]) | |
1913 | + | ||
1914 | + | func cT (cR,cS) = if ((cS >= cO)) | |
1915 | + | then cR | |
1878 | 1916 | else throw("List size exceeds 50") | |
1879 | 1917 | ||
1880 | - | | |
1918 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 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) | |
1881 | 1919 | } | |
1882 | - | let | |
1883 | - | $Tuple2(([IntegerEntry( | |
1920 | + | let iD = min([gl, (iy + dd._3)]) | |
1921 | + | $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD) | |
1884 | 1922 | } | |
1885 | 1923 | } | |
1886 | 1924 | } | |
1887 | 1925 | ||
1888 | 1926 | ||
1889 | 1927 | ||
1890 | - | @Callable( | |
1928 | + | @Callable(eb) | |
1891 | 1929 | func healES () = { | |
1892 | - | let | |
1893 | - | if ((size( | |
1930 | + | let ie = ib(eb) | |
1931 | + | if ((size(eb.payments) != 1)) | |
1894 | 1932 | then throw("Exactly one payment required") | |
1895 | 1933 | else { | |
1896 | - | let | |
1897 | - | if (( | |
1934 | + | let if = value(eb.payments[0]) | |
1935 | + | if ((if.assetId != bb)) | |
1898 | 1936 | then throw("Allowed USDT payment only!") | |
1899 | 1937 | else { | |
1900 | - | let p = valueOrErrorMessage(getString( | |
1901 | - | let | |
1902 | - | let | |
1903 | - | let | |
1904 | - | if (( | |
1938 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
1939 | + | let gk = aQ(p) | |
1940 | + | let gl = J(valueOrElse(getInteger(r(p)), 0)) | |
1941 | + | let iy = valueOrElse(getInteger(gk), gl) | |
1942 | + | if ((iy > 0)) | |
1905 | 1943 | then throw("HP should be 0 to call Emergency Service") | |
1906 | 1944 | else { | |
1907 | - | let | |
1908 | - | let | |
1909 | - | let | |
1945 | + | let eK = aO(p) | |
1946 | + | let fv = eJ(eK) | |
1947 | + | let iz = if ((fv[as] == "")) | |
1910 | 1948 | then nil | |
1911 | - | else split( | |
1912 | - | let | |
1913 | - | then parseIntValue( | |
1949 | + | else split(fv[as], "_") | |
1950 | + | let iE = if ((size(iz) > 0)) | |
1951 | + | then parseIntValue(iz[0]) | |
1914 | 1952 | else 0 | |
1915 | - | let | |
1916 | - | then parseIntValue( | |
1953 | + | let iF = if ((size(iz) > 1)) | |
1954 | + | then parseIntValue(iz[1]) | |
1917 | 1955 | else 0 | |
1918 | - | let | |
1919 | - | then parseIntValue( | |
1956 | + | let iG = if ((size(iz) > 2)) | |
1957 | + | then parseIntValue(iz[2]) | |
1920 | 1958 | else 0 | |
1921 | - | if (if (if (( | |
1959 | + | if (if (if ((iE > 0)) | |
1922 | 1960 | then true | |
1923 | - | else ( | |
1961 | + | else (iF > 0)) | |
1924 | 1962 | then true | |
1925 | - | else ( | |
1963 | + | else (iG > 0)) | |
1926 | 1964 | then throw("You have to use own Medical Kit") | |
1927 | 1965 | else { | |
1928 | - | let | |
1929 | - | let | |
1930 | - | then split(value( | |
1966 | + | let iH = getString(bE, aU()) | |
1967 | + | let iI = if (isDefined(iH)) | |
1968 | + | then split(value(iH), "_") | |
1931 | 1969 | else nil | |
1932 | - | let | |
1933 | - | then parseIntValue( | |
1970 | + | let iJ = if ((size(iI) > 0)) | |
1971 | + | then parseIntValue(iI[0]) | |
1934 | 1972 | else 0 | |
1935 | - | if ((0 >= | |
1973 | + | if ((0 >= iJ)) | |
1936 | 1974 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1937 | 1975 | else { | |
1938 | - | let | |
1939 | - | let | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let | |
1943 | - | if (( | |
1944 | - | then throw(("Payment attached should be " + toString( | |
1976 | + | let iD = (iy + bY[0]) | |
1977 | + | let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_") | |
1978 | + | let aY = split(ac[0], "_") | |
1979 | + | let iL = aX(aY) | |
1980 | + | let iM = fraction((iL * Y), X, (10 * af)) | |
1981 | + | if ((if.amount != iM)) | |
1982 | + | then throw(("Payment attached should be " + toString(iM))) | |
1945 | 1983 | else { | |
1946 | - | let | |
1947 | - | $Tuple2(([IntegerEntry( | |
1984 | + | let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)])) | |
1985 | + | $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd) | |
1948 | 1986 | } | |
1949 | 1987 | } | |
1950 | 1988 | } | |
1951 | 1989 | } | |
1952 | 1990 | } | |
1953 | 1991 | } | |
1954 | 1992 | } | |
1955 | 1993 | ||
1956 | 1994 | ||
1957 | 1995 | ||
1958 | - | @Callable( | |
1959 | - | func updateBackpack (p, | |
1996 | + | @Callable(eb) | |
1997 | + | func updateBackpack (p,iN) = if ((eb.caller != bE)) | |
1960 | 1998 | then throw("permission denied") | |
1961 | - | else $Tuple2([StringEntry( | |
1962 | - | ||
1963 | - | ||
1964 | - | ||
1965 | - | @Callable( | |
1999 | + | else $Tuple2([StringEntry(aO(p), iN)], iN) | |
2000 | + | ||
2001 | + | ||
2002 | + | ||
2003 | + | @Callable(eb) | |
1966 | 2004 | func buySLand () = { | |
1967 | - | let | |
1968 | - | if ((size( | |
2005 | + | let ie = ib(eb) | |
2006 | + | if ((size(eb.payments) != 1)) | |
1969 | 2007 | then throw("Exactly one payment required") | |
1970 | 2008 | else { | |
1971 | - | let | |
1972 | - | if (( | |
2009 | + | let if = value(eb.payments[0]) | |
2010 | + | if ((if.assetId != bb)) | |
1973 | 2011 | then throw("Allowed USDT payment only!") | |
1974 | - | else if (( | |
1975 | - | then throw(("Payment attached should be " + toString( | |
2012 | + | else if ((if.amount != ce)) | |
2013 | + | then throw(("Payment attached should be " + toString(ce))) | |
1976 | 2014 | else { | |
1977 | - | let | |
1978 | - | $Tuple2(((( | |
2015 | + | let dd = fQ(eb.caller, eb.transactionId) | |
2016 | + | $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1) | |
1979 | 2017 | } | |
1980 | 2018 | } | |
1981 | 2019 | } | |
1982 | 2020 | ||
1983 | 2021 | ||
1984 | 2022 | ||
1985 | - | @Callable( | |
1986 | - | func expedition ( | |
1987 | - | let | |
1988 | - | if ((size( | |
2023 | + | @Callable(eb) | |
2024 | + | func expedition (fZ,ga) = { | |
2025 | + | let ie = ib(eb) | |
2026 | + | if ((size(eb.payments) != 0)) | |
1989 | 2027 | then throw("No payments required") | |
1990 | 2028 | else { | |
1991 | - | let | |
1992 | - | let p = valueOrErrorMessage(getString( | |
1993 | - | $Tuple2((( | |
1994 | - | } | |
1995 | - | } | |
1996 | - | ||
1997 | - | ||
1998 | - | ||
1999 | - | @Callable( | |
2000 | - | func upgradeInfra ( | |
2001 | - | let | |
2002 | - | if ((size( | |
2029 | + | let dd = gq(eb.caller, eb.transactionId, fZ, ga) | |
2030 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
2031 | + | $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3)) | |
2032 | + | } | |
2033 | + | } | |
2034 | + | ||
2035 | + | ||
2036 | + | ||
2037 | + | @Callable(eb) | |
2038 | + | func upgradeInfra (aF) = { | |
2039 | + | let ie = ib(eb) | |
2040 | + | if ((size(eb.payments) != 0)) | |
2003 | 2041 | then throw("No payments required") | |
2004 | 2042 | else { | |
2005 | - | let | |
2006 | - | let p = valueOrErrorMessage(getString( | |
2007 | - | $Tuple2((( | |
2008 | - | } | |
2009 | - | } | |
2010 | - | ||
2011 | - | ||
2012 | - | ||
2013 | - | @Callable( | |
2014 | - | func upgradeInfraUsdt ( | |
2043 | + | let dd = gY(true, eb.caller, 0, aF) | |
2044 | + | let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked") | |
2045 | + | $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2) | |
2046 | + | } | |
2047 | + | } | |
2048 | + | ||
2049 | + | ||
2050 | + | ||
2051 | + | @Callable(eb) | |
2052 | + | func upgradeInfraUsdt (aF) = if ((eb.caller != this)) | |
2015 | 2053 | then throw("Permission denied") | |
2016 | 2054 | else { | |
2017 | - | let | |
2018 | - | if ((size( | |
2055 | + | let ie = ib(eb) | |
2056 | + | if ((size(eb.payments) != 1)) | |
2019 | 2057 | then throw("Exactly one payment required") | |
2020 | 2058 | else { | |
2021 | - | let | |
2022 | - | if (( | |
2059 | + | let if = value(eb.payments[0]) | |
2060 | + | if ((if.assetId != bb)) | |
2023 | 2061 | then throw("Allowed USDT payment only!") | |
2024 | 2062 | else { | |
2025 | - | let | |
2026 | - | $Tuple2((( | |
2063 | + | let dd = gY(false, eb.caller, if.amount, aF) | |
2064 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2) | |
2027 | 2065 | } | |
2028 | 2066 | } | |
2029 | 2067 | } | |
2030 | 2068 | ||
2031 | 2069 | ||
2032 | 2070 | ||
2033 | - | @Callable( | |
2034 | - | func activateArtifact ( | |
2035 | - | let | |
2036 | - | if ((size( | |
2071 | + | @Callable(eb) | |
2072 | + | func activateArtifact (iO,iP) = { | |
2073 | + | let ie = ib(eb) | |
2074 | + | if ((size(eb.payments) != 0)) | |
2037 | 2075 | then throw("No payments required") | |
2038 | 2076 | else { | |
2039 | - | let b = toString( | |
2040 | - | let | |
2041 | - | let | |
2042 | - | if (("PRESALE" == | |
2043 | - | then | |
2044 | - | else if (("ONBOARD" == | |
2045 | - | then | |
2077 | + | let b = toString(eb.caller) | |
2078 | + | let dd = { | |
2079 | + | let bc = iO | |
2080 | + | if (("PRESALE" == bc)) | |
2081 | + | then hy(b, iP) | |
2082 | + | else if (("ONBOARD" == bc)) | |
2083 | + | then hr(b) | |
2046 | 2084 | else throw("Unknown artifact") | |
2047 | 2085 | } | |
2048 | - | ( | |
2049 | - | } | |
2050 | - | } | |
2051 | - | ||
2052 | - | ||
2053 | - | ||
2054 | - | @Callable( | |
2055 | - | func mergeLands ( | |
2056 | - | let | |
2057 | - | if ((size( | |
2086 | + | (dd :+ ie) | |
2087 | + | } | |
2088 | + | } | |
2089 | + | ||
2090 | + | ||
2091 | + | ||
2092 | + | @Callable(eb) | |
2093 | + | func mergeLands (hD) = { | |
2094 | + | let ie = ib(eb) | |
2095 | + | if ((size(eb.payments) != 0)) | |
2058 | 2096 | then throw("No payments required") | |
2059 | 2097 | else { | |
2060 | - | let | |
2061 | - | $Tuple2((( | |
2062 | - | } | |
2063 | - | } | |
2064 | - | ||
2065 | - | ||
2066 | - | ||
2067 | - | @Callable( | |
2068 | - | func mergeLandsUsdt ( | |
2069 | - | let | |
2070 | - | if ((size( | |
2098 | + | let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId) | |
2099 | + | $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2) | |
2100 | + | } | |
2101 | + | } | |
2102 | + | ||
2103 | + | ||
2104 | + | ||
2105 | + | @Callable(eb) | |
2106 | + | func mergeLandsUsdt (hD) = { | |
2107 | + | let ie = ib(eb) | |
2108 | + | if ((size(eb.payments) != 1)) | |
2071 | 2109 | then throw("Exactly one payment required") | |
2072 | 2110 | else { | |
2073 | - | let | |
2074 | - | if (( | |
2111 | + | let if = value(eb.payments[0]) | |
2112 | + | if ((if.assetId != bb)) | |
2075 | 2113 | then throw("Allowed USDT payment only!") | |
2076 | 2114 | else { | |
2077 | - | let | |
2078 | - | $Tuple2((( | |
2115 | + | let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId) | |
2116 | + | $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2) | |
2079 | 2117 | } | |
2080 | 2118 | } | |
2081 | 2119 | } | |
2082 | 2120 | ||
2083 | 2121 | ||
2084 | 2122 | ||
2085 | - | @Callable( | |
2086 | - | func cargoExchange ( | |
2087 | - | let | |
2088 | - | if ((size( | |
2123 | + | @Callable(eb) | |
2124 | + | func cargoExchange (iQ,aF) = { | |
2125 | + | let ie = ib(eb) | |
2126 | + | if ((size(eb.payments) != 0)) | |
2089 | 2127 | then throw("No payments required") | |
2090 | 2128 | else { | |
2091 | - | let | |
2092 | - | let b = toString( | |
2093 | - | let | |
2094 | - | let | |
2095 | - | if (!(isDefined(getInteger( | |
2096 | - | then throw(( | |
2129 | + | let fu = split_4C(iQ, ":") | |
2130 | + | let b = toString(eb.originCaller) | |
2131 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2132 | + | let gH = ax(aF) | |
2133 | + | if (!(isDefined(getInteger(gH)))) | |
2134 | + | then throw((gG.name + " is not staked")) | |
2097 | 2135 | else { | |
2098 | - | let | |
2099 | - | if (( | |
2136 | + | let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned")) | |
2137 | + | if ((gJ != b)) | |
2100 | 2138 | then throw((P + " is not yours")) | |
2101 | 2139 | else { | |
2102 | - | let | |
2103 | - | let | |
2104 | - | let p = valueOrErrorMessage(getString( | |
2105 | - | let | |
2106 | - | let | |
2107 | - | if (( | |
2108 | - | then throw((("Duck location type is " + | |
2109 | - | else if (( | |
2110 | - | then throw(("Duck should be on the land " + | |
2140 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2141 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2142 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2143 | + | let gD = valueOrElse(getString(aP(p)), W) | |
2144 | + | let gE = split(value(gD), "_") | |
2145 | + | if ((gE[aV] != "L")) | |
2146 | + | then throw((("Duck location type is " + gE[aV]) + ", but should be L")) | |
2147 | + | else if ((gE[aW] != aF)) | |
2148 | + | then throw(("Duck should be on the land " + aF)) | |
2111 | 2149 | else { | |
2112 | - | let | |
2113 | - | let | |
2114 | - | let | |
2115 | - | let | |
2116 | - | let | |
2117 | - | let | |
2118 | - | let | |
2119 | - | let | |
2120 | - | [StringEntry( | |
2150 | + | let fc = aE(aF) | |
2151 | + | let eP = fb(fc, fd, fe) | |
2152 | + | let eK = aO(p) | |
2153 | + | let fv = eJ(eK) | |
2154 | + | let dd = ft(fu, eP, fv) | |
2155 | + | let fk = split(eP[ak], "_") | |
2156 | + | let gV = (parseIntValue(fk[am]) + dd._7) | |
2157 | + | let gW = (parseIntValue(fk[an]) - dd._7) | |
2158 | + | [StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie] | |
2121 | 2159 | } | |
2122 | 2160 | } | |
2123 | 2161 | } | |
2124 | 2162 | } | |
2125 | 2163 | } | |
2126 | 2164 | ||
2127 | 2165 | ||
2128 | 2166 | ||
2129 | - | @Callable( | |
2130 | - | func saveWarehouse ( | |
2167 | + | @Callable(eb) | |
2168 | + | func saveWarehouse (fg,aF) = if ((eb.caller != bE)) | |
2131 | 2169 | then throw("Access denied") | |
2132 | 2170 | else { | |
2133 | - | let | |
2134 | - | let | |
2135 | - | if ((size( | |
2171 | + | let fc = aE(aF) | |
2172 | + | let fh = split_4C(fg, ":") | |
2173 | + | if ((size(fh) != 5)) | |
2136 | 2174 | then throw("warehouse string should contain 4 ':' separators") | |
2137 | 2175 | else { | |
2138 | - | let | |
2139 | - | let | |
2140 | - | let | |
2141 | - | let | |
2142 | - | let | |
2143 | - | $Tuple2([StringEntry( | |
2176 | + | let iR = split(fh[ak], "_")[al] | |
2177 | + | let gV = eO(fh) | |
2178 | + | let iS = eM(fh[ag]) | |
2179 | + | let gW = ((iS - parseIntValue(iR)) - gV) | |
2180 | + | let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":") | |
2181 | + | $Tuple2([StringEntry(fc, iT)], iT) | |
2144 | 2182 | } | |
2145 | 2183 | } | |
2146 | 2184 | ||
2147 | 2185 | ||
2148 | 2186 | ||
2149 | - | @Callable( | |
2150 | - | func fixWarehouseFormat ( | |
2187 | + | @Callable(eb) | |
2188 | + | func fixWarehouseFormat (aF) = if ((eb.caller != bC)) | |
2151 | 2189 | then throw("Access denied") | |
2152 | 2190 | else { | |
2153 | - | let | |
2154 | - | let | |
2155 | - | let | |
2156 | - | let | |
2157 | - | let | |
2158 | - | let | |
2159 | - | let | |
2160 | - | let | |
2161 | - | let | |
2162 | - | let | |
2163 | - | $Tuple2([StringEntry( | |
2191 | + | let fc = aE(aF) | |
2192 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2193 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2194 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2195 | + | let fh = fb(fc, fd, fe) | |
2196 | + | let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil)) | |
2197 | + | let gV = eO(fh) | |
2198 | + | let iS = eM(fh[ag]) | |
2199 | + | let gW = ((iS - iR) - gV) | |
2200 | + | let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":") | |
2201 | + | $Tuple2([StringEntry(fc, iT)], iT) | |
2164 | 2202 | } | |
2165 | 2203 | ||
2166 | 2204 | ||
2167 | 2205 | ||
2168 | - | @Callable( | |
2169 | - | func fixStakedPieces ( | |
2206 | + | @Callable(eb) | |
2207 | + | func fixStakedPieces (bp) = if ((eb.caller != bC)) | |
2170 | 2208 | then throw("Access denied") | |
2171 | 2209 | else { | |
2172 | - | let | |
2210 | + | let hU = if ((bp == "")) | |
2173 | 2211 | then 0 | |
2174 | 2212 | else { | |
2175 | - | let | |
2176 | - | let | |
2177 | - | then split_51C(value( | |
2213 | + | let hP = getString(bD, bM(bp)) | |
2214 | + | let hK = if (isDefined(hP)) | |
2215 | + | then split_51C(value(hP), "_") | |
2178 | 2216 | else nil | |
2179 | - | func | |
2180 | - | let | |
2181 | - | let | |
2182 | - | ( | |
2217 | + | func iU (cL,aF) = { | |
2218 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2219 | + | let bU = split(gG.description, "_")[bI] | |
2220 | + | (cL + bT(bU)) | |
2183 | 2221 | } | |
2184 | 2222 | ||
2185 | - | let | |
2186 | - | let | |
2187 | - | let | |
2188 | - | func | |
2189 | - | then | |
2190 | - | else | |
2191 | - | ||
2192 | - | func | |
2193 | - | then | |
2223 | + | let cN = hK | |
2224 | + | let cO = size(cN) | |
2225 | + | let cP = 0 | |
2226 | + | func cQ (cR,cS) = if ((cS >= cO)) | |
2227 | + | then cR | |
2228 | + | else iU(cR, cN[cS]) | |
2229 | + | ||
2230 | + | func cT (cR,cS) = if ((cS >= cO)) | |
2231 | + | then cR | |
2194 | 2232 | else throw("List size exceeds 100") | |
2195 | 2233 | ||
2196 | - | | |
2234 | + | cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100) | |
2197 | 2235 | } | |
2198 | - | $Tuple2([IntegerEntry( | |
2236 | + | $Tuple2([IntegerEntry(bN(bp), hU)], hU) | |
2199 | 2237 | } | |
2200 | 2238 | ||
2201 | 2239 | ||
2202 | 2240 | ||
2203 | - | @Callable( | |
2204 | - | func setCustomName ( | |
2205 | - | let | |
2206 | - | if ((size( | |
2241 | + | @Callable(eb) | |
2242 | + | func setCustomName (av,hM,aA) = { | |
2243 | + | let ie = ib(eb) | |
2244 | + | if ((size(eb.payments) != 1)) | |
2207 | 2245 | then throw("Exactly one payment required") | |
2208 | 2246 | else { | |
2209 | - | let | |
2210 | - | if (( | |
2247 | + | let if = value(eb.payments[0]) | |
2248 | + | if ((if.assetId != bb)) | |
2211 | 2249 | then throw("Allowed USDT payment only!") | |
2212 | - | else if (( | |
2213 | - | then throw(("Payment should be " + toString( | |
2214 | - | else if (contains( | |
2215 | - | then throw(("Name should not contain '__': " + | |
2216 | - | else if ((size( | |
2217 | - | then throw(("Name too long, maxLength=" + toString( | |
2250 | + | else if ((if.amount != ca)) | |
2251 | + | then throw(("Payment should be " + toString(ca))) | |
2252 | + | else if (contains(hM, "__")) | |
2253 | + | then throw(("Name should not contain '__': " + hM)) | |
2254 | + | else if ((size(hM) > cb)) | |
2255 | + | then throw(("Name too long, maxLength=" + toString(cb))) | |
2218 | 2256 | else { | |
2219 | - | let b = toString( | |
2220 | - | let | |
2221 | - | let | |
2222 | - | if (("ACCOUNT" == | |
2257 | + | let b = toString(eb.originCaller) | |
2258 | + | let iV = { | |
2259 | + | let bc = aA | |
2260 | + | if (("ACCOUNT" == bc)) | |
2223 | 2261 | then { | |
2224 | - | let | |
2225 | - | let | |
2226 | - | if (isDefined( | |
2227 | - | then throw(("Name already registered: " + | |
2262 | + | let iW = cv(hM) | |
2263 | + | let iX = getString(iW) | |
2264 | + | if (isDefined(iX)) | |
2265 | + | then throw(("Name already registered: " + hM)) | |
2228 | 2266 | else { | |
2229 | - | let | |
2230 | - | let | |
2231 | - | let | |
2232 | - | then [DeleteEntry( | |
2267 | + | let iY = aH(b) | |
2268 | + | let iZ = getString(iY) | |
2269 | + | let ja = if (isDefined(iZ)) | |
2270 | + | then [DeleteEntry(cv(value(iZ)))] | |
2233 | 2271 | else nil | |
2234 | - | ((( | |
2272 | + | (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1) | |
2235 | 2273 | } | |
2236 | 2274 | } | |
2237 | - | else if (("LAND" == | |
2275 | + | else if (("LAND" == bc)) | |
2238 | 2276 | then { | |
2239 | - | let | |
2240 | - | let | |
2241 | - | if (!(isDefined(getInteger( | |
2242 | - | then throw(( | |
2277 | + | let gG = value(assetInfo(fromBase58String(av))) | |
2278 | + | let gH = ax(av) | |
2279 | + | if (!(isDefined(getInteger(gH)))) | |
2280 | + | then throw((gG.name + " is not staked")) | |
2243 | 2281 | else { | |
2244 | - | let | |
2245 | - | if (( | |
2282 | + | let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned")) | |
2283 | + | if ((gJ != b)) | |
2246 | 2284 | then throw((P + " is not yours")) | |
2247 | 2285 | else { | |
2248 | - | let | |
2249 | - | let | |
2250 | - | if (isDefined( | |
2251 | - | then throw(("Name already registered: " + | |
2286 | + | let iW = cp(hM) | |
2287 | + | let iX = getString(iW) | |
2288 | + | if (isDefined(iX)) | |
2289 | + | then throw(("Name already registered: " + hM)) | |
2252 | 2290 | else { | |
2253 | - | let | |
2254 | - | let | |
2255 | - | let | |
2256 | - | then [DeleteEntry( | |
2291 | + | let jb = aw(av) | |
2292 | + | let iZ = getString(jb) | |
2293 | + | let ja = if (isDefined(iZ)) | |
2294 | + | then [DeleteEntry(cp(value(iZ)))] | |
2257 | 2295 | else nil | |
2258 | - | ((( | |
2296 | + | (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1) | |
2259 | 2297 | } | |
2260 | 2298 | } | |
2261 | 2299 | } | |
2262 | 2300 | } | |
2263 | - | else if (("DUCK" == | |
2301 | + | else if (("DUCK" == bc)) | |
2264 | 2302 | then { | |
2265 | - | let | |
2266 | - | let | |
2267 | - | if (if (!(isDefined(getInteger( | |
2303 | + | let gG = value(assetInfo(fromBase58String(av))) | |
2304 | + | let gH = ax(av) | |
2305 | + | if (if (!(isDefined(getInteger(gH)))) | |
2268 | 2306 | then true | |
2269 | - | else !(isDefined(getString( | |
2270 | - | then throw(( | |
2307 | + | else !(isDefined(getString(aN(b))))) | |
2308 | + | then throw((gG.name + " is not staked")) | |
2271 | 2309 | else { | |
2272 | - | let | |
2273 | - | if (( | |
2310 | + | let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned")) | |
2311 | + | if ((gJ != b)) | |
2274 | 2312 | then throw((Q + " is not yours")) | |
2275 | 2313 | else { | |
2276 | - | let | |
2277 | - | let | |
2278 | - | if (isDefined( | |
2279 | - | then throw(("Name already registered: " + | |
2314 | + | let iW = cu(hM) | |
2315 | + | let iX = getString(iW) | |
2316 | + | if (isDefined(iX)) | |
2317 | + | then throw(("Name already registered: " + hM)) | |
2280 | 2318 | else { | |
2281 | - | let | |
2282 | - | let | |
2283 | - | let | |
2284 | - | then [DeleteEntry( | |
2319 | + | let jb = aG(av) | |
2320 | + | let iZ = getString(jb) | |
2321 | + | let ja = if (isDefined(iZ)) | |
2322 | + | then [DeleteEntry(cu(value(iZ)))] | |
2285 | 2323 | else nil | |
2286 | - | ((( | |
2324 | + | (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1) | |
2287 | 2325 | } | |
2288 | 2326 | } | |
2289 | 2327 | } | |
2290 | 2328 | } | |
2291 | 2329 | else throw("Unknown entity type") | |
2292 | 2330 | } | |
2293 | - | $Tuple2((( | |
2331 | + | $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0) | |
2294 | 2332 | } | |
2295 | 2333 | } | |
2296 | 2334 | } | |
2297 | 2335 | ||
2298 | 2336 | ||
2299 | 2337 | ||
2300 | - | @Callable( | |
2301 | - | func setReferrals ( | |
2338 | + | @Callable(eb) | |
2339 | + | func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX)) | |
2302 | 2340 | then throw("Permission denied") | |
2303 | 2341 | else { | |
2304 | - | let | |
2305 | - | if ((size( | |
2342 | + | let ie = ib(eb) | |
2343 | + | if ((size(eb.payments) != 0)) | |
2306 | 2344 | then throw("No payments required") | |
2307 | - | else if (!(isDefined(addressFromString( | |
2308 | - | then throw(("Invalid address: " + | |
2309 | - | else if (!(isDefined(addressFromString( | |
2310 | - | then throw(("Invalid address: " + | |
2345 | + | else if (!(isDefined(addressFromString(jc)))) | |
2346 | + | then throw(("Invalid address: " + jc)) | |
2347 | + | else if (!(isDefined(addressFromString(jd)))) | |
2348 | + | then throw(("Invalid address: " + jd)) | |
2311 | 2349 | else { | |
2312 | - | let | |
2313 | - | let | |
2314 | - | let | |
2315 | - | then split_4C(value( | |
2350 | + | let je = cw() | |
2351 | + | let jf = getString(je) | |
2352 | + | let jg = if (isDefined(jf)) | |
2353 | + | then split_4C(value(jf), "_") | |
2316 | 2354 | else nil | |
2317 | - | if (containsElement( | |
2318 | - | then throw(( | |
2355 | + | if (containsElement(jg, jd)) | |
2356 | + | then throw((jd + " is not newbie (already has referrals)")) | |
2319 | 2357 | else { | |
2320 | - | let | |
2321 | - | let | |
2322 | - | if (if (isDefined( | |
2323 | - | then isDefined(addressFromString(value( | |
2358 | + | let hs = aI(jd) | |
2359 | + | let ht = getString(hs) | |
2360 | + | if (if (isDefined(ht)) | |
2361 | + | then isDefined(addressFromString(value(ht))) | |
2324 | 2362 | else false) | |
2325 | - | then throw((( | |
2363 | + | then throw(((jd + " already has refBy: ") + value(ht))) | |
2326 | 2364 | else { | |
2327 | - | let | |
2328 | - | let | |
2329 | - | let | |
2330 | - | then split_4C(value( | |
2365 | + | let jh = aL(jc) | |
2366 | + | let ji = getString(jh) | |
2367 | + | let jj = if (isDefined(ji)) | |
2368 | + | then split_4C(value(ji), "_") | |
2331 | 2369 | else nil | |
2332 | - | if (containsElement( | |
2333 | - | then throw(((( | |
2370 | + | if (containsElement(jj, jd)) | |
2371 | + | then throw((((jc + " already contains ") + jd) + " within referrals")) | |
2334 | 2372 | else { | |
2335 | - | let | |
2336 | - | let | |
2337 | - | then value( | |
2338 | - | else makeString_2C(( | |
2339 | - | $Tuple2([StringEntry( | |
2373 | + | let jk = makeString_2C((jj :+ jd), "_") | |
2374 | + | let jl = if (containsElement(jg, jc)) | |
2375 | + | then value(jf) | |
2376 | + | else makeString_2C((jg :+ jc), "_") | |
2377 | + | $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0) | |
2340 | 2378 | } | |
2341 | 2379 | } | |
2342 | 2380 | } | |
2343 | 2381 | } | |
2344 | 2382 | } | |
2345 | 2383 | ||
2346 | 2384 | ||
2347 | 2385 | ||
2348 | - | @Callable( | |
2349 | - | func distributePoints ( | |
2350 | - | let | |
2351 | - | if ((size( | |
2386 | + | @Callable(eb) | |
2387 | + | func distributePoints (jm,jn,jo,jp,jq) = { | |
2388 | + | let ie = ib(eb) | |
2389 | + | if ((size(eb.payments) != 0)) | |
2352 | 2390 | then throw("No payments required") | |
2353 | 2391 | else { | |
2354 | - | let b = toString( | |
2355 | - | let p = valueOrErrorMessage(getString( | |
2356 | - | let | |
2357 | - | let | |
2358 | - | let | |
2359 | - | let | |
2360 | - | let | |
2361 | - | let | |
2362 | - | if (( | |
2363 | - | then throw((("There are only " + toString( | |
2392 | + | let b = toString(eb.originCaller) | |
2393 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2394 | + | let jr = w(b) | |
2395 | + | let js = valueOrElse(getInteger(bD, jr), 0) | |
2396 | + | let jt = s(p) | |
2397 | + | let ju = valueOrElse(getInteger(bD, jt), 0) | |
2398 | + | let jv = (js + ju) | |
2399 | + | let jw = ((((jm + jn) + jo) + jp) + jq) | |
2400 | + | if ((jw > jv)) | |
2401 | + | then throw((("There are only " + toString(jv)) + " free points to distribute")) | |
2364 | 2402 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | let | |
2368 | - | $Tuple2([IntegerEntry( | |
2403 | + | let jx = o(p) | |
2404 | + | let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_") | |
2405 | + | let jz = (js - jw) | |
2406 | + | $Tuple2([IntegerEntry(jr, if ((0 > jz)) | |
2369 | 2407 | then 0 | |
2370 | - | else | |
2371 | - | then ( | |
2372 | - | else | |
2408 | + | else jz), IntegerEntry(jt, if ((0 > jz)) | |
2409 | + | then (ju + jz) | |
2410 | + | else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0) | |
2373 | 2411 | } | |
2374 | 2412 | } | |
2375 | 2413 | } | |
2376 | 2414 | ||
2377 | 2415 | ||
2378 | 2416 | ||
2379 | - | @Callable( | |
2380 | - | func splitByGlobalWeightsREADONLY ( | |
2381 | - | ||
2382 | - | ||
2383 | - | ||
2384 | - | @Callable( | |
2385 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2386 | - | let | |
2387 | - | $Tuple2(nil, $Tuple2( | |
2388 | - | } | |
2389 | - | ||
2390 | - | ||
2391 | - | ||
2392 | - | @Callable( | |
2393 | - | func getBackpackREADONLY (p) = $Tuple2(nil, makeString( | |
2394 | - | ||
2395 | - | ||
2396 | - | ||
2397 | - | @Callable( | |
2398 | - | func getWarehouseREADONLY ( | |
2399 | - | let | |
2400 | - | let | |
2401 | - | let | |
2402 | - | $Tuple2(nil, makeString_2C( | |
2403 | - | } | |
2404 | - | ||
2405 | - | ||
2406 | - | ||
2407 | - | @Callable( | |
2408 | - | func saveLastTx () = if (if (( | |
2409 | - | then ( | |
2417 | + | @Callable(eb) | |
2418 | + | func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr)) | |
2419 | + | ||
2420 | + | ||
2421 | + | ||
2422 | + | @Callable(eb) | |
2423 | + | func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = { | |
2424 | + | let dX = ed(ee) | |
2425 | + | $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX))) | |
2426 | + | } | |
2427 | + | ||
2428 | + | ||
2429 | + | ||
2430 | + | @Callable(eb) | |
2431 | + | func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":")) | |
2432 | + | ||
2433 | + | ||
2434 | + | ||
2435 | + | @Callable(eb) | |
2436 | + | func getWarehouseREADONLY (aF) = { | |
2437 | + | let gG = value(assetInfo(fromBase58String(aF))) | |
2438 | + | let fd = (bT(split(gG.description, "_")[bI]) / bj) | |
2439 | + | let fe = valueOrElse(getInteger(ay(aF)), 0) | |
2440 | + | $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":")) | |
2441 | + | } | |
2442 | + | ||
2443 | + | ||
2444 | + | ||
2445 | + | @Callable(eb) | |
2446 | + | func saveLastTx () = if (if ((eb.caller != bG)) | |
2447 | + | then (eb.caller != bE) | |
2410 | 2448 | else false) | |
2411 | 2449 | then throw("Access denied") | |
2412 | - | else $Tuple2([ | |
2413 | - | ||
2414 | - | ||
2415 | - | ||
2416 | - | @Callable( | |
2417 | - | func updateDuckStats (p, | |
2450 | + | else $Tuple2([ib(eb)], 42) | |
2451 | + | ||
2452 | + | ||
2453 | + | ||
2454 | + | @Callable(eb) | |
2455 | + | func updateDuckStats (p,hl) = if ((eb.caller != bE)) | |
2418 | 2456 | then throw("Access denied") | |
2419 | - | else | |
2420 | - | ||
2421 | - | ||
2422 | - | ||
2423 | - | @Callable( | |
2424 | - | func updateAccStats (b, | |
2457 | + | else hk(p, hl) | |
2458 | + | ||
2459 | + | ||
2460 | + | ||
2461 | + | @Callable(eb) | |
2462 | + | func updateAccStats (b,hl) = if ((eb.caller != bE)) | |
2425 | 2463 | then throw("Access denied") | |
2426 | - | else | |
2427 | - | ||
2428 | - | ||
2429 | - | ||
2430 | - | @Callable( | |
2431 | - | func equipDuck ( | |
2432 | - | let | |
2433 | - | if ((size( | |
2464 | + | else hq(b, hl) | |
2465 | + | ||
2466 | + | ||
2467 | + | ||
2468 | + | @Callable(eb) | |
2469 | + | func equipDuck (jC) = { | |
2470 | + | let ie = ib(eb) | |
2471 | + | if ((size(eb.payments) != 0)) | |
2434 | 2472 | then throw("No payments required") | |
2435 | 2473 | else { | |
2436 | - | let b = toString( | |
2437 | - | let p = valueOrErrorMessage(getString( | |
2438 | - | let | |
2439 | - | let | |
2440 | - | let | |
2441 | - | let | |
2442 | - | let | |
2443 | - | if ((size( | |
2474 | + | let b = toString(eb.originCaller) | |
2475 | + | let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked") | |
2476 | + | let jD = t(p) | |
2477 | + | let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2478 | + | let eK = aO(p) | |
2479 | + | let fv = eJ(eK) | |
2480 | + | let jF = split(jC, "_") | |
2481 | + | if ((size(jF) != l)) | |
2444 | 2482 | then throw("Wrong equipment string") | |
2445 | 2483 | else { | |
2446 | - | let | |
2447 | - | let | |
2484 | + | let jG = fv[as] | |
2485 | + | let dh = if ((jG == "")) | |
2448 | 2486 | then nil | |
2449 | - | else split( | |
2450 | - | let | |
2451 | - | let | |
2452 | - | $Tuple2([StringEntry( | |
2487 | + | else split(jG, "_") | |
2488 | + | let jH = dQ(jE, dh, true) | |
2489 | + | let dt = dQ(jF, jH, false) | |
2490 | + | $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0) | |
2453 | 2491 | } | |
2454 | 2492 | } | |
2455 | 2493 | } | |
2456 | 2494 | ||
2457 | 2495 |
github/deemru/w8io/c3f4982 979.53 ms ◑