tx · GSTt7Z228WrMXnJgjAsmhPN3H9DTj2vrnW34G31kWnj5 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.10300000 Waves 2023.09.22 21:26 [2766947] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "GSTt7Z228WrMXnJgjAsmhPN3H9DTj2vrnW34G31kWnj5", "fee": 10300000, "feeAssetId": null, "timestamp": 1695407246378, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "3PboT87FfUaFGMfipuvY9d93DUdsc7GFtD2BhwHhtYWabHkdQo164XidQUHp3pAJhfFPYCp657nWUSCYm8DwCdRn" ], "script": "base64:BgLbAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBCBIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgMKAQgSAwoBGBIDCgEIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgQKAggIEgMKAQgSABIDCgEIEgMKAQgSBAoCAgISBAoCAgISAJMCAAlEQVlNSUxMSVMAgLiZKQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAOcm9iYmVyeUNvc3RNaW4AgMLXLwAUcm9iYmVyeUNvb2xkb3duQ29lZmYAkAMADHJlcXVpcmVtZW50cwkAzAgCAghTdHJlbmd0aAkAzAgCAghBY2N1cmFjeQkAzAgCAglJbnRlbGxlY3QJAMwIAgIJRW5kdXJhbmNlCQDMCAICCURleHRlcml0eQkAzAgCAgVMZXZlbAkAzAgCAgZIZWFsdGgFA25pbAAMY2hhclN0cmVuZ3RoAAAADGNoYXJBY2N1cmFjeQABAA1jaGFySW50ZWxsZWN0AAIADWNoYXJFbmR1cmFuY2UAAwANY2hhckRleHRlcml0eQAEAAtzZWdCYWNrcGFjawAAAAtOVU1TRUdNRU5UUwAGAApOVU1NQUlOQVVYAAIACE1BWFNMT1RTAAIADU1BWFBST0RJTlNMT1QAHgAQbGFuZFJvYkNvb2xkb3ducwkAzAgCAAAJAMwIAgDAzyQJAMwIAgCg9zYJAMwIAgCA3MwUCQDMCAIAgK6mCgUDbmlsAA5NSU5fUkVTX1RPX1JPQgCA2sQJAAxyb2JJZHhMb2NrZWQAAQALZHVja0lkeEZyZWUAAAAQZHVja0lkeFByZXBhcmluZwABAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAQ5rZXlTYXZlZEhlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgIMc2F2ZWRIZWFsdGhfBQtkdWNrQXNzZXRJZAEQa2V5U2F2ZWRMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgIOc2F2ZWRMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQnVmZnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tCdWZmc18FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeVRpbWVCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5VGltZV8FC2R1Y2tBc3NldElkARhrZXlMYXN0Um9iYmVyeUNvc3RCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEGxhc3RSb2JiZXJ5Q29zdF8FC2R1Y2tBc3NldElkARNrZXlMYW5kUm9iYmVyeVN0YXRlAQtsYW5kQXNzZXRJZAkArAICAhFsYW5kUm9iYmVyeVN0YXRlXwULbGFuZEFzc2V0SWQBEmtleUxhbmRDb29sZG93bkVUQQELbGFuZEFzc2V0SWQJAKwCAgIQbGFuZENvb2xkb3duRVRBXwULbGFuZEFzc2V0SWQBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBC2R1Y2tBc3NldElkCQCsAgICEWR1Y2tSb2JiZXJ5U3RhdGVfBQtkdWNrQXNzZXRJZAETa2V5TG9ja2VkTGFuZEJ5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIRbG9ja2VkTGFuZEJ5RHVja18FC2R1Y2tBc3NldElkARZrZXlEZWxpdmVyeURlbGF5QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhRkZWxpdmVyeURlbGF5QnlEdWNrXwULZHVja0Fzc2V0SWQAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAYTUFYX0xBTkRTX1NUQUtFRF9CWV9VU0VSABkAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKRVNTRUxMQ09FRgAKABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMJAMwIAgIHTWluZSBMMQkAzAgCAgdNaW5lIEwyCQDMCAICB01pbmUgTDMJAMwIAgIHVHJhcCBMMQkAzAgCAgdUcmFwIEwyCQDMCAICB1RyYXAgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQZm9ydEFsbG93ZWRQcm9kcwkAzAgCAA8JAMwIAgAQCQDMCAIAEQkAzAgCABIJAMwIAgATCQDMCAIAFAUDbmlsABBwcm9kdWN0aW9uTWF0cml4CQDMCAICJThfOF84XzE3XzE3XzQyXzEyXzBfMzBfMCwwLDAsMCwwLDAsMF8JAMwIAgIlOF84XzhfMTdfMTdfNDJfMjRfMF82MF8wLDAsNSwyLDAsMCwwXwkAzAgCAic4XzhfOF8xN18xN180Ml8zNl8wXzEyMF8wLDAsMTAsNCwwLDAsMF8JAMwIAgIpOF8xOV8xOV84XzI3XzE5XzI2XzFfMjBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5XzUyXzFfNDBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIpOF8xOV8xOV84XzI3XzE5Xzc4XzFfODBfMCwwLDAsMCwwLDAsMF8wMDEJAMwIAgIlOF84XzhfOF84XzYwXzEzXzJfMl8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMjZfMl80XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8zOV8yXzhfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzMwXzNfMzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzYwXzNfNTBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIpMzBfMzBfM18xN18xN18zXzkwXzNfNzBfMCwwLDAsMCwwLDAsMF8xMTEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMTFfNF8xMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8yMl80XzIwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzMzXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIqNF8xM18yMl80XzM1XzIyXzIzXzBfNTAsMSwwXzAsMCwwLDAsMCwwLDBfCQDMCAICKjRfMTNfMjJfNF8zNV8yMl80Nl8wXzUwLDEsMV8wLDIsNSwwLDAsMCwwXwkAzAgCAis0XzEzXzIyXzRfMzVfMjJfNjlfMF81MCwyLDFfMCw1LDEwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV8yMF8xXzMwLDEsMV8wLDAsMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNDBfMV8zMCwxLDJfMiwxLDMsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzYwXzFfMzAsMSwzXzUsMiw4LDAsMCwwLDBfBQNuaWwACXJJZHhDb2VmZgAGAApySWR4RWZmZWN0AAgAEHJJZHhSZXF1aXJlbWVudHMACQAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICA25vXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIFbGNuYV8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgIDc3RfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgIDbGFzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIGc3R0YW9fBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIDd2hfBQtsYW5kQXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEXa2V5Rm9ydGlmaWNhdGlvbnNCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICD2ZvcnRpZmljYXRpb25zXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBCHVzZXJBZGRyCQCsAgICGiVzJXNfX3VzZXJHd2xSZWxlYXNlVGltZV9fBQh1c2VyQWRkcgEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHARJnZXRSZWNpcGVNYXRlcmlhbHMBBnJlY2lwZQkAaAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFCXJJZHhDb2VmZgUJQ09FRkYyTUFUABZLU19TRVBBUkFURV9QVUJMSUNfS0VZBwAYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFBwARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIC4mSkDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQAFElkeENmZ1RvdXJuYW1lbnREYXBwAAcAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwABJ0b3VybmFtZW50Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdUb3VybmFtZW50RGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAAKcmVjTGFuZE51bQAAAAtyZWNMYW5kU2l6ZQABAAtyZWNUZXJyYWlucwACAAxyZWNDb250aW5lbnQAAwANd2xnQXNzZXRJZEtleQILd2xnX2Fzc2V0SWQACndsZ0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnAgCBQt3bGdDb250cmFjdAUNd2xnQXNzZXRJZEtleQIYV0xHT0xEIGlzIG5vdCBpc3N1ZWQgeWV0AA9hY3Jlc0Fzc2V0SWRLZXkCDGFjcmVzQXNzZXRJZAAMYWNyZXNBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgUNYWNyZXNDb250cmFjdAUPYWNyZXNBc3NldElkS2V5AhdBQ1JFUyBpcyBub3QgaXNzdWVkIHlldAALcmFuZG9tRGVsYXkAAgEJa2V5Q29tbWl0AQdhZGRyZXNzCQCsAgICE2ZpbmlzaEJsb2NrRm9yQWRkcl8FB2FkZHJlc3MBEWtleVJlc1Byb3BvcnRpb25zAAITcmVzVHlwZXNQcm9wb3J0aW9ucwEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJY29udGluZW50CQCsAgICFHJlc1R5cGVzQnlDb250aW5lbnRfBQljb250aW5lbnQBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQlhc0Jvb2xlYW4BAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIHQm9vbGVhbgQBcwUHJG1hdGNoMAUBcwkAAgECGWZhaWwgdG8gY2FzdCBpbnRvIEJvb2xlYW4BD251bVBpZWNlc0J5U2l6ZQEIbGFuZFNpemUEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAFBVNTSVpFAwkAAAICAU0FByRtYXRjaDAFBU1TSVpFAwkAAAICAUwFByRtYXRjaDAFBUxTSVpFAwkAAAICAlhMBQckbWF0Y2gwBQZYTFNJWkUDCQAAAgIDWFhMBQckbWF0Y2gwBQdYWExTSVpFCQACAQIRVW5rbm93biBsYW5kIHNpemUBB2lzRGlnaXQBAXMJAQlpc0RlZmluZWQBCQC2CQEFAXMBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBCmZpeGVkUG9pbnQCA3ZhbAhkZWNpbWFscwQGdGVuUG93CQBsBgAKAAAFCGRlY2ltYWxzAAAAAAUERE9XTgQHbG93UGFydAkApAMBCQBqAgUDdmFsBQZ0ZW5Qb3cEBnplcm9lcwkAsAICCQCkAwEFBnRlblBvdwkAZAIAAQkAsQIBBQdsb3dQYXJ0CQCsAgIJAKwCAgkArAICCQCkAwEJAGkCBQN2YWwFBnRlblBvdwIBLgUGemVyb2VzBQdsb3dQYXJ0AQ9nZXRSYW5kb21OdW1iZXIDCG1heFZhbHVlDGZpbmlzaEhlaWdodAphdXhFbnRyb3B5BA9yYW5kb21TZWVkQmxvY2sJAQV2YWx1ZQEJAO0HAQUMZmluaXNoSGVpZ2h0BApyYW5kb21IYXNoCQD3AwEJAMsBAgkBBXZhbHVlAQgFD3JhbmRvbVNlZWRCbG9jawN2cmYFCmF1eEVudHJvcHkJAGoCCQCxCQEFCnJhbmRvbUhhc2gFCG1heFZhbHVlAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDADBRZLU19TRVBBUkFURV9QVUJMSUNfS0VZASCrF1ePFWfjWVRBsNZy62abxKPTZl7VmYZQ35g3H7IJCAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgDCQAAAgEBVAUHJG1hdGNoMAEgT1PiGj9UqNadUk4THUYnVb2zU/Mse8lUVLD/Q8G0FCgJAAIBAg1Vbmtub3duIGNoYWluAAxFTVBUWV9QUk9ENTABkAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFGSVZFTUlOVVRFU01JTExJUwDgpxIAElRFTl9NSU5VVEVTX01JTExJUwDAzyQADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAMU19DT1NUX0FDUkVTAIDyi6gJAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICBGxjbl8FBG5hbWUBEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIDbGFfBQdsYW5kTnVtAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AAtjbGFpbU1vZGVXaAAAAA1jbGFpbU1vZGVEdWNrAAEAE2NsYWltTW9kZVdoVGhlbkR1Y2sAAgAIZmxIZWFsdGgAAAALZmxUaW1lc3RhbXAABQAHZmxCb251cwAGAAtmbFByb2RzVXNlZAAHAQduZnROYW1lAgdsYW5kTnVtCGxhbmRTaXplCQCsAgIJAKwCAgUKTEFORFBSRUZJWAUHbGFuZE51bQUIbGFuZFNpemUBCHRvVm9sdW1lAgZhbW91bnQHcGtnU2l6ZQQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4ARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIACQCUCgIFBW9sZEVxBwoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCCAUDYWNjAl8xCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAMIBQNhY2MCXzIGAwMJAGcCBQNpZHgABgkAZwIACAUDaWR4BwkAAAIFBm5ld0FtdAAABwoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQVvbGRFcQcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBl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DXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIFEGZvcnRBbGxvd2VkUHJvZHMFCnByb2R1Y3RJZHgJAAIBCQCsAgIJAKwCAgIJUHJvZHVjdCAnCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAIhJyBjYW5ub3QgYmUgdXNlZCBmb3IgbGFuZCBkZWZlbnNlAwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJUKAwUFcExpc3QFCG9jY3VwaWVkBQRmcmVlBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQEBm5ld0FtdAMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHCQBlAgUEY3VycgUFY291bnQJAGQCBQRjdXJyBQVjb3VudAQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCBQZuZXdBbXQFDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQRjdXJyBQ5QUk9EVUNUUEtHU0laRQkAlQoDCQDLAQIJAMsBAgUEaGVhZAkAmgMBBQZuZXdBbXQFBHRhaWwJAGQCBQhvY2N1cGllZAUIZGVsdGFWb2wJAGUCBQRmcmVlBQhkZWx0YVZvbAEIYWRkUHJvZEIHBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eARzbG90CWR1Y2tTdGF0cwQFcGFydHMJALUJAgUGaWR4Q250AgE6AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4OmFtb3VudAMDCQEBIQEFCmlzUG9zaXRpdmUJAQIhPQIJALECAQkAkQMCBQVwYXJ0cwAAAAIHCQACAQIrUHJvZHVjdCBpZHggc2hvdWxkIGJlIDIgZGlnaXRzLCB6ZXJvIHBhZGRlZAQKcHJvZHVjdElkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAAEBWNvdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQMDCQBmAgAABQpwcm9kdWN0SWR4BgkAZwIFCnByb2R1Y3RJZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQJaXNCaWdJdGVtAwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcEBmNvbXBhdAkAkQMCBQZyZWNpcGUFCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1cHkgc2xvdCAwCQBmAgUJY051bVNsb3RzAAEHCQCUCgIJAMsBAgkAywECBQRoZWFkCQCaAwEJAGQCBQRjdXJyAwUKaXNQb3NpdGl2ZQUFY291bnQJAQEtAQUFY291bnQFBHRhaWwFCWlzQmlnSXRlbQELc2xvdHNHcm91cEIGAWcEYnBJbgppc1Bvc2l0aXZlB3NlZ21lbnQHbWFpbkF1eAVzdGF0cwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBXN0YXRzCQCUCgIFBGJwSW4HAwkBAiE9AgUCczECAAMIBQV0bXBTMAJfMgkAAgECHkJpZyBpdGVtIGFscmVhZHkgb2NjdXBpZXMgc2xvdAgJAQhhZGRQcm9kQgcFAnMxCAUFdG1wUzACXzEFCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAQUFc3RhdHMCXzEIBQV0bXBTMAJfMQUEYnBJbgEGZHJlc3NCBAdzZWdMaXN0BnBCeXRlcwppc1Bvc2l0aXZlBXN0YXRzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUFc3RhdHMJAJQKAgkAZAIFAWoAAQkBC3Nsb3RzR3JvdXBCBgUBYQUEdG1wTQUKaXNQb3NpdGl2ZQUBagABBQVzdGF0cwgKAAIkbAUHc2VnTGlzdAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAABQZwQnl0ZXMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3NlZ21lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYCXzIBBWZvcnRCBgdzZWdMaXN0BnBCeXRlcwhvY2N1cGllZARmcmVlCmlzUG9zaXRpdmUJZHVja1N0YXRzAwkAZgIAAwkAkAMBBQdzZWdMaXN0CQACAQIxQXQgbGVhc3QgZHVjaywgbWluZXMgYW5kIHRyYXBzIHBhcnRzIGFyZSByZXF1aXJlZAoBB3NlZ21lbnQCA2FjYwNzZWcEAWoIBQNhY2MCXzEDCQAAAgUBagAACQCWCgQJAGQCBQFqAAEIBQNhY2MCXzIIBQNhY2MCXzMIBQNhY2MCXzQEAXAJAQpwbGFjZVByb2RCBgUDc2VnCAUDYWNjAl8yBQppc1Bvc2l0aXZlBQlkdWNrU3RhdHMIBQNhY2MCXzMIBQNhY2MCXzQJAJYKBAkAZAIFAWoAAQgFAXACXzEIBQFwAl8yCAUBcAJfMwQBdAoAAiRsBQdzZWdMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFBnBCeXRlcwUIb2NjdXBpZWQFBGZyZWUKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3NlZ21lbnQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoJAJUKAwgFAXQCXzIIBQF0Al8zCAUBdAJfNAEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBC2R1Y2tBc3NldElkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQGY3VyckVxCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFDEVNUFRZX1BST0Q1MAYFA25pbAQIc2VnQnBBdXgJAJEDAgkAtQkCCQCRAwIFBmN1cnJFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQZjdXJyRXEFCXRlbXBQcm9kQgcFBXN0YXRzCQAAAgUIbmV3UHJvZEIFCG5ld1Byb2RCARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CEywgdGVycmFpbkNvdW50c1tpXT0JAKQDAQkAkQMCBQ10ZXJyYWluQ291bnRzBQFpAhAsIGxhbmRTaXplSW5kZXg9CQCkAwEFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEFBnJlc3VsdAoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXBkYXRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgERdXBkYXRlUHJvcG9ydGlvbnMDDXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduBAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUIcHJvcExpc3QFDXRlcnJhaW5Db3VudHMFDWxhbmRTaXplSW5kZXgFBHNpZ24CAV8BDWNvdW50VGVycmFpbnMBCHRlcnJhaW5zCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUEAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBDWRpc3RyaWJ1dGVSZXMEDGN1cnJlbnRXaFJlcw5jdXJyZW50UGFja1JlcwpyZXNUb0NsYWltC3doU3BhY2VMZWZ0BA5yZXNMaXN0VG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzEEDHJlc0FtVG9DbGFpbQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUMcmVzQW1Ub0NsYWltAAAJAJQKAgkAuQkCBQxjdXJyZW50V2hSZXMCAV8JALkJAgUOY3VycmVudFBhY2tSZXMCAV8DCQBnAgULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQoBCGFkZExpc3RzAgNhY2MBaQkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCGFkZExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAgUBcgIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwoBDGFkZFBhcnRMaXN0cwIDYWNjAWkEBndoUGFydAkAawMJAJEDAgUOcmVzTGlzdFRvQ2xhaW0FAWkFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0JAJQKAgkAzQgCCAUDYWNjAl8xCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpBQZ3aFBhcnQJAM0IAggFA2FjYwJfMgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQUGd2hQYXJ0BAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3Rz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dGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQltb3ZlU3R1ZmYDCmNhcmdvUGFydHMJY3VycmVudFdoC2N1cnJlbnRQYWNrAwkBAiE9AgkAkAMBBQpjYXJnb1BhcnRzAAMJAAIBAjRjYXJnb0xpc3RTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAAIBXwQIbWF0UGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAECAV8ECXByb2RQYXJ0cwMJAAACCQCRAwIFCmNhcmdvUGFydHMAAgIABQNuaWwJALwJAgkAkQMCBQpjYXJnb1BhcnRzAAICAV8DCQECIT0CCQCQAwEFCHJlc1BhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIbWF0UGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAt3aFNwYWNlTGVmdAkBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEFCWN1cnJlbnRXaAQJY3VycldoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQJY3VycldoTWF0CQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwQKY3VycldoUHJvZAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQOY3VycmVudFBhY2tNYXQJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ED2N1cnJlbnRQYWNrUHJvZAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBA212UgIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaFJlcwUBaQQDYnByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoUmVzBQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tSZXMFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnByCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwcgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2Fj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QUxFTlVNTEFORFMAAQQHbGFuZE51bQkApAMBBQdmcmVlTnVtBAxjb250aW5lbnRJZHgJAKADAQkAuwICBQZiaWdOdW0FBUZJVkVYBAh0ZXJyYWlucwkBC2dlblRlcnJhaW5zAgUGYmlnTnVtBQxjb250aW5lbnRJZHgECWNvbnRpbmVudAkAkQMCBQpjb250aW5lbnRzBQxjb250aW5lbnRJZHgEBWlzc3VlCQDCCAUJAQduZnROYW1lAgUHbGFuZE51bQIBUwkAuQkCCQDMCAIFB2xhbmROdW0JAMwIAgIBUwkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBAJpZAkA2AQBBQdhc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABCQDMCAIFBWlzc3VlCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQUCaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFAmlkBQh1c2VyQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQh1c2VyQWRkcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQJpZAAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUCaWQFCHVzZXJBZGRyAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUGY2FsbGVyAAEFB2Fzc2V0SWQFA25pbAkAlAoCBQJpZAUJY29udGluZW50AQxmbGlnaHRDb21tb24DCHVzZXJBZGRyB21lc3NhZ2UDc2lnAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAVwYXJ0cwkAvAkCCQCwCQEFB21lc3NhZ2UCATsECWZsaWdodExvZwkAvAkCCQCRAwIFBXBhcnRzAAACAXwEAmhwCQC1CQIJAJEDAgUJZmxpZ2h0TG9nBQhmbEhlYWx0aAIBXwQFY3VySFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAAABAVuZXdIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAEEC25ld0xvY1R4VmVyCQC1CQIJAJEDAgUFcGFydHMAAQIBOgQLbmV3TG9jYXRpb24JAJEDAgULbmV3TG9jVHhWZXIAAAQEdGltZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWZsaWdodExvZwULZmxUaW1lc3RhbXADAwkAZgIFBHRpbWUJAGQCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMGCQBmAgkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwUEdGltZQkAAgEJAKwCAgkArAICCQCsAgICHHNpZ25hdHVyZSBvdXRkYXRlZDogbG9nVGltZT0JAKQDAQUEdGltZQIJLCBiY1RpbWU9CQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAl0eEZyb21Nc2cJAJEDAgULbmV3TG9jVHhWZXIAAQQGbGFzdFR4CQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFCHVzZXJBZGRyAgADCQECIT0CBQZsYXN0VHgFCXR4RnJvbU1zZwkAAgEJAKwCAgkArAICCQCsAgICHlR4IGlkcyBkb24ndCBtYXRjaCEgSW4gc3RhdGU6IAUGbGFzdFR4AgosIGluIG1zZzogBQl0eEZyb21Nc2cEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAxvbGRGcm9tU3RhdGUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAQIhPQIFDG9sZEZyb21TdGF0ZQUFY3VySFAJAAIBCQCsAgIJAKwCAgkArAICAgpvbGRIZWFsdGg9CQCkAwEFDG9sZEZyb21TdGF0ZQIvIGZyb20gc3RhdGUgZG9lcyBub3QgbWF0Y2ggb25lIGZyb20gZmxpZ2h0IGxvZz0JAKQDAQUFY3VySFADCQBnAgAABQVjdXJIUAkAAgECHllvdSBjYW4ndCBmbHkgd2l0aCB6ZXJvIGhlYWx0aAMJAQEhAQkBF2NhbldlYXJDdXJyZW50RXF1aXBtZW50AQULZHVja0Fzc2V0SWQJAAIBAhZFcXVpcG1lbnQgaW5jb21wYXRpYmxlBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMzc4NDM0MzIzAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMzNzg0MzQzMjMCXzEEBmR1Y2tJZAgFDSR0MDMzNzg0MzQzMjMCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzY2OTczNzU2OAMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzY2OTczNzU2OAJfMQQFYnBSZXMIBQ0kdDAzNjY5NzM3NTY4Al8yBAVsb2Z0TwgFDSR0MDM2Njk3Mzc1NjgCXzMEBWxvZnRGCAUNJHQwMzY2OTczNzU2OAJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADAwkBASEBBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGcCBQhjdXJMZXZlbAADBwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhtYXhJbmZyYQkAZAIJAGkCCQEEc3FydAQFBnBpZWNlcwAAAAAFBERPV04ABQACBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEDAwUYS1NfQUxMT1dfQklHX0lORlJBX01FUkdFCQBmAgUIbmV3TGV2ZWwFCG1heEluZnJhBwkAAgEJAKwCAgIlQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IAkApAMBBQhtYXhJbmZyYQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBmx2bEtleQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkBAV4cEtleQkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFAEBmx2bEtleQkBDGtleVVzZXJMZXZlbAEFBGFkZHIEBXhwS2V5CQEJa2V5VXNlclhQAQUEYWRkcgQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgEPY2hlY2tUb3VybmFtZW50AQtkdWNrQXNzZXRJZAQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAV0RGF0YQkBC2dldFRvdXJEYXRhAgUSdG91cm5hbWVudENvbnRyYWN0BQZsYXN0SWQEBnN0YXRpYwkAkQMCBQV0RGF0YQUJaWR4U3RhdGljBAdkeW5hbWljCQCRAwIFBXREYXRhBQppZHhEeW5hbWljAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBVAcDAwMJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAUGbGFzdElkCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50CQEJYXNCb29sZWFuAQkA/AcEBQR0aGlzAhZleGl0VG91cm5hbWVudEludGVybmFsCQDMCAIFC2R1Y2tBc3NldElkBQNuaWwFA25pbAENY2hlY2tEZWxpdmVyeQELZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXADCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFEBwQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQDAwkAZgIFA25vdwkAZAIFCXN0YXJ0VGltZQUSVEVOX01JTlVURVNfTUlMTElTCQBmAgADBQhkaXN0YW5jZQcJAAIBAiBZb3VyIGR1Y2sgaXMgb24gZGVsaXZlcnkgbWlzc2lvbgkBCWFzQm9vbGVhbgEJAPwHBAUEdGhpcwIUZXhpdERlbGl2ZXJ5SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAQ1tZXJnZUludGVybmFsBgtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHW1lcmdlSW50ZXJuYWxfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECG21lcmdlSW50ZXJuYWxfY2hlY2tEZWxpdmVyeQoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfNgUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEBmNQcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjA18xMAUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEC3N1bVRlcnJhaW5zCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzkFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAABBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCcCgoFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDOCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABAwkBAiE9AgUKY3VzdG9tTmFtZQIACQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUFA25pbAUDbmlsBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwUGY1Byb3BzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAVjb250MAkAkQMCCQC1CQIICQEFdmFsdWUBCQDsBwEJANkEAQkAkQMCBQxsYW5kQXNzZXRJZHMAAAtkZXNjcmlwdGlvbgIBXwUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEFBWNvbnQwAgswXzBfMF8wXzBfMAIBXwQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfBQljb250UHJvcHMKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCmNoZWNrTWVyZ2UCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBAljb250aW5lbnQIBQFyAl8zBAxjb250aW5lbnRJZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAzwgCBQpjb250aW5lbnRzBQljb250aW5lbnQJAKwCAgITVW5rbm93biBjb250aW5lbnQ6IAUJY29udGluZW50BAh0ZXJyYWlucwkBE2dlblRlcnJhaW5zRm9yTWVyZ2UCCAUBcgJfOQkAaQIJAQ9udW1QaWVjZXNCeVNpemUBBQtuZXdMYW5kU2l6ZQUFU1NJWkUEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUJY29udGluZW50CQC5CQIIBQFyA18xMAIBXwkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwAAAQNtMmwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsAgRhZGRyDGxhbmRBc3NldElkcwkBDW1lcmdlSW50ZXJuYWwGAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgIEYWRkcgxsYW5kQXNzZXRJZHMEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAMFByRtYXRjaDAJAQNtMmwCBQRhZGRyBQxsYW5kQXNzZXRJZHMDCQAAAgAFBQckbWF0Y2gwCQEEbDJ4bAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwCBQRhZGRyBQxsYW5kQXNzZXRJZHMJAAIBAg1Vbmtub3duIG1lcmdlAQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkLAFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAMJAGcCCQCQAwEFBWxhbmRzBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVICBykgbGFuZHMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCmluZnJhTGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQBZAgFAWMCXzMECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AP///////////wECAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUKYXNzZXRJZFN0cgMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAAIBCQCsAgIJAKwCAgIJVGhlIGR1Y2sgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMDCQEPY2hlY2tUb3VybmFtZW50AQUKYXNzZXRJZFN0cgkAAgECG3Vuc3Rha2VEdWNrX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQUKYXNzZXRJZFN0cgkAAgECGXVuc3Rha2VEdWNrX2NoZWNrRGVsaXZlcnkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAVuZXdIUAgFAWYCXzEEC2R1Y2tBc3NldElkCAUBZgJfMgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAtuZXdMb2NhdGlvbggFAWYCXzQDCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDY2ODEzNjY5MTAJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNjY4MTM2NjkxMAJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNjY4MTM2NjkxMAJfMgQJbG9jVG9TYXZlAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwUGaXNUb3VyCQACAQkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQULY3VyTG9jYXRpb24CCSwgbmV3TG9jPQULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQACAQkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQULY3VyTG9jYXRpb24CCSwgbmV3TG9jPQULbmV3TG9jYXRpb24DCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAULbmV3TG9jYXRpb24JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FC2N1ckxvY2F0aW9uCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFCWxvY1RvU2F2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFBW5ld0hQCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAwUPc2hvdWxkWmVyb0J1ZmZzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAIJMF8wXzBfMF8wBQNuaWwJAM4IAgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhRoZWFsX2NoZWNrVG91cm5hbWVudAMJAQ1jaGVja0RlbGl2ZXJ5AQULZHVja0Fzc2V0SWQJAAIBAhJoZWFsX2NoZWNrRGVsaXZlcnkEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFmhlYWxFU19jaGVja1RvdXJuYW1lbnQDCQENY2hlY2tEZWxpdmVyeQEFC2R1Y2tBc3NldElkCQACAQIUaGVhbEVTX2NoZWNrRGVsaXZlcnkECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwUKcklkeEVmZmVjdAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCBQVNVUxUOAUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBD2NvbW1pdEZvclJhbmRvbQAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzQgCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUMcHJvbG9nQWN0aW9uBQtmaW5pc2hCbG9jawFpAQphd2FyZFNMYW5kAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB2FkZHJlc3MIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAggFBnJlc3VsdAJfMQgIBQZyZXN1bHQCXzICXzEBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEDSR0MDc1ODM4NzU5MzUJARFzdWJ0cmFjdEVxdWlwbWVudAIFCWN1cnJlbnRFcQgFAWYCXzUEBW5ld0VxCAUNJHQwNzU4Mzg3NTkzNQJfMQQPc2hvdWxkWmVyb0J1ZmZzCAUNJHQwNzU4Mzg3NTkzNQJfMgQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQCaWQICAUBZQJfMgJfMQQGcmVzdWx0AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAACQCVCgMJAM4IAggFAWUCXzEDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAkAzQgCCQDNCAIJAM0IAgkAzQgCBQNuaWwJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECGmV4cGVkaXRpb25fY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECGGV4cGVkaXRpb25fY2hlY2tEZWxpdmVyeQQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCVCgMIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMFC2FjcmVzUmVzdWx0AWkBEGJ1eVNMYW5kRm9yQWNyZXMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUMU19DT1NUX0FDUkVTCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUMU19DT1NUX0FDUkVTBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQNhbXQFA25pbAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAgFBnJlc3VsdAJfMgJfMQULYWNyZXNSZXN1bHQBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIFDGxhbmRBc3NldElkcwkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEXZml4Q29udGluZW50UHJvcG9ydGlvbnMBDGxhbmRBc3NldElkcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAoBCGdldFByb3BzAgNhY2MEY29udAkAzQgCBQNhY2MJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQRjb250AgswXzBfMF8wXzBfMAQBcAoAAiRsBQpjb250aW5lbnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhnZXRQcm9wcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUKAQlwcm9jZXNzb3ICA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBQVTU0laRQQEY29udAkAkQMCBQFkBQxyZWNDb250aW5lbnQEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQMY29udGluZW50SWR4CQEFdmFsdWUBCQDPCAIFCmNvbnRpbmVudHMFBGNvbnQECWNvbnRQcm9wcwkAtQkCCQCRAwIFA2FjYwUMY29udGluZW50SWR4AgFfBAd1cGRhdGVkCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQIBXwQHJG1hdGNoMAUEY29udAMJAAACAghBbWVyaWNhcwUHJG1hdGNoMAkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAEJAMwIAgkAkQMCBQNhY2MAAgkAzAgCCQCRAwIFA2FjYwADCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgZFdXJvcGUFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCBQd1cGRhdGVkCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgkAkQMCBQNhY2MAAwkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIEQXNpYQUHJG1hdGNoMAkAzAgCCQCRAwIFA2FjYwAACQDMCAIJAJEDAgUDYWNjAAEJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwADCQDMCAIJAJEDAgUDYWNjAAQFA25pbAMJAAACAgZBZnJpY2EFByRtYXRjaDAJAMwIAgkAkQMCBQNhY2MAAAkAzAgCCQCRAwIFA2FjYwABCQDMCAIJAJEDAgUDYWNjAAIJAMwIAgUHdXBkYXRlZAkAzAgCCQCRAwIFA2FjYwAEBQNuaWwDCQAAAgIHT2NlYW5pYQUHJG1hdGNoMAkAzAgCCQCR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cGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUMUkVOQU1JTkdDT1NUCQACAQkArAICAhJQYXltZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAQGY2FsbGVyCAUBaQZjYWxsZXIDCQEBIQEJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFC3dsZ0NvbnRyYWN0CQDMCAIFD2Vjb25vbXlDb250cmFjdAkAzAgCBRJ0b3VybmFtZW50Q29udHJhY3QJAMwIAgUNYWNyZXNDb250cmFjdAUDbmlsBQZjYWxsZXIJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQEPY2hlY2tUb3VybmFtZW50AQULZHVja0Fzc2V0SWQJAAIBAhllcXVpcER1Y2tfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECF2VxdWlwRHVja19jaGVja0RlbGl2ZXJ5BAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQNuaWwECHNlZ0JwQXV4CQCRAwIJALUJAgkAkQMCBQVuZXdFcQULc2VnQmFja3BhY2sCATsAAQQKYnVmZkVmZmVjdAMJAAACBQhzZWdCcEF1eAIAAAAEBGF1eDAJAJEDAgkAtQkCBQhzZWdCcEF1eAIBLAAAAwkAAAIFBGF1eDACAAAABAZpZHhDbnQJALUJAgUEYXV4MAIBOgQDaWR4CQCRAwIFBmlkeENudAAABANjbnQJAJEDAgUGaWR4Q250AAEDAwMDAwkAAAIFA2lkeAICMDYGCQAAAgUDaWR4AgIwNwYJAAACBQNpZHgCAjA4CQECIT0CBQNjbnQCAAcJAGYCCQENcGFyc2VJbnRWYWx1ZQEFA2NudAAABwkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4CQENcGFyc2VJbnRWYWx1ZQEFA2lkeAIBXwUKcklkeEVmZmVjdAAABAVzdGF0cwkBDGdldER1Y2tTdGF0cwQFBHRoaXMFC2R1Y2tBc3NldElkBQpidWZmRWZmZWN0BgQIbmV3UHJvZEIJAQZkcmVzc0IEBQVuZXdFcQUJdGVtcFByb2RCBwUFc3RhdHMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpAQ9mb3J0aWZpY2F0ZUxhbmQCC2xhbmRBc3NldElkBHBsYW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA0kdDA5Nzk5Mzk4MTA4CQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUNJHQwOTc5OTM5ODEwOAJfMQQFdGVtcE8IBQ0kdDA5Nzk5Mzk4MTA4Al8yBAV0ZW1wRggFDSR0MDk3OTkzOTgxMDgCXzMEDSR0MDk4MTExOTgyMDcJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ0kdDA5ODExMTk4MjA3Al8xBARuZXdPCAUNJHQwOTgxMTE5ODIwNwJfMgQEbmV3RggFDSR0MDk4MTExOTgyMDcCXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQdmb3J0S2V5BQRwbGFuCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARNpbml0RHVja1RvdXJBdHRlbXB0AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUSdG91cm5hbWVudENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04EBmxhc3RJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBRJ0b3VybmFtZW50Q29udHJhY3QFDWxhc3RUb3VySWRLZXkAAAQMdG91ckxvY2F0aW9uCQCsAgIJAKQDAQUGbGFzdElkAgRfVF8wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAljdXJMb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VyTG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQECIT0CCQCRAwIJALUJAgULY3VyTG9jYXRpb24CAV8FCmxvY0lkeFR5cGUCAVQJAAIBAiJZb3VyIGR1Y2sgaXMgbm90IGluIHRoZSB0b3VybmFtZW50BAtzYXZlZEhlYWx0aAkBEUBleHRyTmF0aXZlKDEwNTUpAQkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQEDXNhdmVkTG9jYXRpb24JARFAZXh0ck5hdGl2ZSgxMDU4KQEJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCBQxwcm9sb2dBY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFC3NhdmVkSGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgUDbmlsBQtjdXJMb2NhdGlvbgFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEUZXhpdERlbGl2ZXJ5SW50ZXJuYWwBC2R1Y2tBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQINQWNjZXNzIGRlbmllZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJc3RhcnRUaW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyTG9jYXRpb24FD2xvY0lkeENvbnRpbmVudAQIZGlzdGFuY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQtkdWNrQXNzZXRJZAIUTkZUIGR1Y2sgaXMgb3JwaGFuZWQECWhlYWx0aEtleQkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQJY3VySGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBBQloZWFsdGhLZXkEDm91dGNvbWVBY3Rpb25zAwkAZwIFCGRpc3RhbmNlAAMEBnJld2FyZAkA/AcEBQ9lY29ub215Q29udHJhY3QCEnNlbmREZWxpdmVyeVJld2FyZAkAzAgCBQVvd25lcgUDbmlsBQNuaWwDCQAAAgUGcmV3YXJkBQZyZXdhcmQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLbG9ja2VkVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BRFkZWxpdmVyeUxvY2tlZEtleQAABAZ1bmxvY2sJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhR1cGRhdGVEZWxpdmVyeUxvY2tlZAkAzAgCCQBlAgULbG9ja2VkVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUDbmlsBQNuaWwDCQAAAgUGdW5sb2NrBQZ1bmxvY2sDCQBnAgAABQljdXJIZWFsdGgFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleURlbGl2ZXJ5RGVsYXlCeUR1Y2sBBQtkdWNrQXNzZXRJZAkAZAIFCXN0YXJ0VGltZQUJREFZTUlMTElTBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDNCAIJAM0IAgUOb3V0Y29tZUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQloZWFsdGhLZXkFC3NhdmVkSGVhbHRoCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24HAWkBDnByZXBhcmVSb2JiZXJ5AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABAZ3bGdBbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAUKd2xnQXNzZXRJZAkAAgECFVdMR09MRCBwYXltZW50cyBvbmx5IQQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgF8AwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQEC2R1Y2tBc3NldElkCQCRAwIFBXBhcnRzAAAEB3JvYkNvc3QICQEOZ2V0Um9iYmVyeURhdGECBQR0aGlzBQtkdWNrQXNzZXRJZAJfMQMJAGYCBQdyb2JDb3N0BQZ3bGdBbXQJAAIBCQCsAgIJAKwCAgkArAICAghQYXltZW50IAkApAMBBQZ3bGdBbXQCDCA8IHJlcXVpcmVkIAkApAMBBQdyb2JDb3N0BApjYW5kaWRhdGVzCQC1CQIJAJEDAgUFcGFydHMAAQIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQAAAQKbG9ja2VkTGFuZAkBC3ZhbHVlT3JFbHNlAgkAoggBCQETa2V5TG9ja2VkTGFuZEJ5RHVjawEFC2R1Y2tBc3NldElkAgAEB2xhbmRFVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAMDCQECIT0CBQlkdWNrU3RhdGUFC2R1Y2tJZHhGcmVlCQBmAgUHbGFuZEVUQQUDbm93BwkAAgEJAKwCAgInWW91IGFscmVhZHkgc3RhcnRlZCByb2JiaW5nLCB3YWl0IHRpbGwgCQCkAwEFB2xhbmRFVEEKAQdjaGVja2VyAgNhY2MLbGFuZEFzc2V0SWQEBXN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEJARNrZXlMYW5kUm9iYmVyeVN0YXRlAQULbGFuZEFzc2V0SWQAAAQLY29vbGRvd25FVEEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleUxhbmRDb29sZG93bkVUQQEFC2xhbmRBc3NldElkAAADCQBmAgUFc3RhdGUJAJADAQUQbGFuZFJvYkNvb2xkb3ducwkAAgECDUludmFsaWQgc3RhdGUDCQBmAgUDbm93BQtjb29sZG93bkVUQQQKc3Rha2VkVGltZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAADCQBnAgAABQpzdGFrZWRUaW1lBQNhY2MEAWEJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQBZAkAtQkCCAUBYQtkZXNjcmlwdGlvbgIBXwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQMcHJvZHVjdGl2aXR5CQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJZGVsdGFUaW1lCQBlAgUDbm93BQpzdGFrZWRUaW1lBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFDHByb2R1Y3Rpdml0eQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUOTUlOX1JFU19UT19ST0IFCGF2YWlsUmVzBQNhY2MJAM0IAgUDYWNjBQtsYW5kQXNzZXRJZAUDYWNjBAhmaWx0ZXJlZAoAAiRsBQpjYW5kaWRhdGVzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdjaGVja2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAwkAAAIJAJADAQUIZmlsdGVyZWQAAAkAAgECGU5vIGNhbmRpZGF0ZXMgZm9yIHJvYmJlcnkEBnJuZElkeAkBD2dldFJhbmRvbU51bWJlcgMJAJADAQUIZmlsdGVyZWQFBmhlaWdodAkAywECBQNzaWcIBQFpDXRyYW5zYWN0aW9uSWQEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBE2tleUxhbmRSb2JiZXJ5U3RhdGUBBQtsYW5kQXNzZXRJZAUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TGFuZENvb2xkb3duRVRBAQULbGFuZEFzc2V0SWQJAGQCBQNub3cJAJEDAgUQbGFuZFJvYkNvb2xkb3ducwUMcm9iSWR4TG9ja2VkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkBRBkdWNrSWR4UHJlcGFyaW5nCQDMCAIJAQtTdHJpbmdFbnRyeQIJARNrZXlMb2NrZWRMYW5kQnlEdWNrAQULZHVja0Fzc2V0SWQFC2xhbmRBc3NldElkCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQtsYW5kQXNzZXRJZAFpAQdyb2JMYW5kAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQCUCgIJAMwIAgUMcHJvbG9nQWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQULZHVja0Fzc2V0SWQFA25vdwUDbmlsAAABaQEOYWNjZXB0RGVsaXZlcnkAAwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkECHVzZXJBZGRyCQClCAEIBQFpBmNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCaCAIFD2Vjb25vbXlDb250cmFjdAURZGVsaXZlcnlMb2NrZWRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkJAGUCBQlmdW5kVG90YWwFC2xvY2tlZFRvdGFsCQACAQkArAICCQCsAgIJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYCCSwgbG9ja2VkPQkBCmZpeGVkUG9pbnQCBQtsb2NrZWRUb3RhbAAGBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAhkZWxheUVUQQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5RGVsaXZlcnlEZWxheUJ5RHVjawEFC2R1Y2tBc3NldElkAAADCQBmAgUIZGVsYXlFVEEFA25vdwkAAgEJAKwCAgIqRGVsaXZlcnkgaXMgZm9yYmlkZGVuIGZvciB5b3VyIGR1Y2sgdW50aWwgCQCkAwEFCGRlbGF5RVRBAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIeYWNjZXB0RGVsaXZlcnlfY2hlY2tUb3VybmFtZW50AwkBDWNoZWNrRGVsaXZlcnkBBQtkdWNrQXNzZXRJZAkAAgECHGFjY2VwdERlbGl2ZXJ5X2NoZWNrRGVsaXZlcnkEDm5ld0xvY2tlZFRvdGFsCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIUdXBkYXRlRGVsaXZlcnlMb2NrZWQJAMwIAgkAZAIFC2xvY2tlZFRvdGFsBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFA25pbAUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJY3VySGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFAECWN1ckxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXJMb2NLZXkFD0RFRkFVTFRMT0NBVElPTgQQZGVsaXZlcnlMb2NhdGlvbgkArAICCQCkAwEFA25vdwIEX0RfMAkAlAoCCQDMCAIFDHByb2xvZ0FjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDmtleVNhdmVkSGVhbHRoAQULZHVja0Fzc2V0SWQFCWN1ckhlYWx0aAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQVtYXhIUAkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQljdXJMb2NLZXkFEGRlbGl2ZXJ5TG9jYXRpb24FA25pbAkAlAoCBRBkZWxpdmVyeUxvY2F0aW9uBQ5uZXdMb2NrZWRUb3RhbADfahVG", "height": 2766947, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HtbEAwFirdhETNzJKDa2ujMfb3udqtbRryyuY5Pv1bzR Next: 7j34EtuKEvVTLxQkXEdxVXzBS6knWJGGToPdzcTbUEZ3 Diff:
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | ||
5 | - | ||
6 | - | ||
7 | - | ||
8 | - | ||
9 | - | let d = | |
10 | - | ||
11 | - | let e = | |
12 | - | ||
13 | - | let f = | |
14 | - | ||
15 | - | let g = | |
16 | - | ||
17 | - | let h = | |
18 | - | ||
19 | - | let i = | |
20 | - | ||
21 | - | let j = | |
22 | - | ||
23 | - | let k = | |
24 | - | ||
25 | - | let l = | |
26 | - | ||
27 | - | let m = | |
28 | - | ||
29 | - | let n = | |
30 | - | ||
31 | - | let o = | |
32 | - | ||
33 | - | let p = | |
34 | - | ||
35 | - | let q = | |
4 | + | let a = 86400000 | |
5 | + | ||
6 | + | func b (c) = ("lastArbTimeUser_" + c) | |
7 | + | ||
8 | + | ||
9 | + | let d = 100000000 | |
10 | + | ||
11 | + | let e = 3200 | |
12 | + | ||
13 | + | let f = 4000 | |
14 | + | ||
15 | + | let g = 3 | |
16 | + | ||
17 | + | let h = 100000000 | |
18 | + | ||
19 | + | let i = 400 | |
20 | + | ||
21 | + | let j = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
22 | + | ||
23 | + | let k = 0 | |
24 | + | ||
25 | + | let l = 1 | |
26 | + | ||
27 | + | let m = 2 | |
28 | + | ||
29 | + | let n = 3 | |
30 | + | ||
31 | + | let o = 4 | |
32 | + | ||
33 | + | let p = 0 | |
34 | + | ||
35 | + | let q = 6 | |
36 | 36 | ||
37 | 37 | let r = 2 | |
38 | 38 | ||
39 | - | let s = 30 | |
40 | - | ||
41 | - | let t = [0, 600000, 900000, 43200000, 21600000] | |
42 | - | ||
43 | - | let u = 20000000 | |
44 | - | ||
45 | - | let v = 1 | |
46 | - | ||
47 | - | let w = 0 | |
48 | - | ||
49 | - | let x = 1 | |
50 | - | ||
51 | - | func y (z) = ("duckHealth_" + z) | |
52 | - | ||
53 | - | ||
54 | - | func A (z) = ("duckChars_" + z) | |
55 | - | ||
56 | - | ||
57 | - | func B (z) = ("duckXP_" + z) | |
58 | - | ||
59 | - | ||
60 | - | func C (z) = ("duckLevel_" + z) | |
61 | - | ||
62 | - | ||
63 | - | func D (z) = ("duckFreePoints_" + z) | |
64 | - | ||
65 | - | ||
66 | - | func E (z) = ("duckEquipment_" + z) | |
67 | - | ||
68 | - | ||
69 | - | func F (b) = ("userXP_" + b) | |
70 | - | ||
71 | - | ||
72 | - | func G (b) = ("userLevel_" + b) | |
73 | - | ||
74 | - | ||
75 | - | func H (b) = ("userFreePoints_" + b) | |
76 | - | ||
77 | - | ||
78 | - | func I (z) = ("savedHealth_" + z) | |
79 | - | ||
80 | - | ||
81 | - | func J (z) = ("savedLocation_" + z) | |
82 | - | ||
83 | - | ||
84 | - | func K (z) = ("duckBuffs_" + z) | |
85 | - | ||
86 | - | ||
87 | - | func L (z) = ("lastRobberyTime_" + z) | |
88 | - | ||
89 | - | ||
90 | - | func M (z) = ("lastRobberyCost_" + z) | |
91 | - | ||
92 | - | ||
93 | - | func N (O) = ("landRobberyState_" + O) | |
94 | - | ||
95 | - | ||
96 | - | func P (O) = ("landCooldownETA_" + O) | |
97 | - | ||
98 | - | ||
99 | - | func Q (z) = ("duckRobberyState_" + z) | |
100 | - | ||
101 | - | ||
102 | - | func R (z) = ("lockedLandByDuck_" + z) | |
103 | - | ||
104 | - | ||
105 | - | let S = 10000 | |
106 | - | ||
107 | - | let T = 10000 | |
108 | - | ||
109 | - | let U = 2000 | |
110 | - | ||
111 | - | let V = 100000 | |
112 | - | ||
113 | - | let W = 1000000 | |
114 | - | ||
115 | - | let X = 5000000 | |
116 | - | ||
117 | - | let Y = 10000 | |
118 | - | ||
119 | - | let Z = 1000000 | |
120 | - | ||
121 | - | let aa = 1000000 | |
122 | - | ||
123 | - | let ab = 10000 | |
124 | - | ||
125 | - | func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c) | |
126 | - | ||
127 | - | ||
128 | - | func ae (af) = (100 + af) | |
129 | - | ||
130 | - | ||
131 | - | func ag (ah,ai) = { | |
132 | - | let aj = ac(ai) | |
133 | - | [aj, (f * (aj - ah))] | |
134 | - | } | |
135 | - | ||
136 | - | ||
137 | - | func ak (al,z,am,an) = { | |
138 | - | let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_") | |
139 | - | let ap = valueOrElse(getInteger(al, C(z)), 0) | |
140 | - | let aq = valueOrElse(getInteger(al, y(z)), ae(ap)) | |
141 | - | let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_") | |
142 | - | ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an) | |
143 | - | then [am, am, am, am, am] | |
144 | - | else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])])) | |
145 | - | } | |
146 | - | ||
147 | - | ||
148 | - | func as (al,z) = { | |
149 | - | let at = valueOrElse(getInteger(al, M(z)), 0) | |
150 | - | let au = valueOrElse(getInteger(al, L(z)), 0) | |
151 | - | let av = lastBlock.timestamp | |
152 | - | let aw = max([g, (at - (h * (av - au)))]) | |
153 | - | let ax = valueOrElse(getInteger(al, Q(z)), 0) | |
154 | - | let ay = valueOrElse(getString(al, R(z)), "") | |
155 | - | let az = valueOrElse(getInteger(al, P(ay)), 0) | |
156 | - | $Tuple5(aw, au, ax, ay, az) | |
157 | - | } | |
158 | - | ||
159 | - | ||
160 | - | let aA = "LAND" | |
161 | - | ||
162 | - | let aB = "DUCK" | |
163 | - | ||
164 | - | let aC = "PRESALE" | |
165 | - | ||
166 | - | let aD = 6 | |
167 | - | ||
168 | - | let aE = 25 | |
169 | - | ||
170 | - | let aF = 3456000 | |
171 | - | ||
172 | - | let aG = 86400000 | |
173 | - | ||
174 | - | let aH = 10000000000 | |
175 | - | ||
176 | - | let aI = "Africa_F_Africa" | |
177 | - | ||
178 | - | let aJ = 39637 | |
179 | - | ||
180 | - | let aK = 10 | |
181 | - | ||
182 | - | let aL = 50000 | |
183 | - | ||
184 | - | let aM = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
185 | - | ||
186 | - | let aN = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
187 | - | ||
188 | - | let aO = 10000000 | |
189 | - | ||
190 | - | let aP = [15, 16, 17, 18, 19, 20] | |
191 | - | ||
192 | - | let aQ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
193 | - | ||
194 | - | let aR = 6 | |
195 | - | ||
196 | - | let aS = 8 | |
197 | - | ||
198 | - | let aT = 9 | |
199 | - | ||
200 | - | let aU = 10 | |
39 | + | let s = 2 | |
40 | + | ||
41 | + | let t = 30 | |
42 | + | ||
43 | + | let u = [0, 600000, 900000, 43200000, 21600000] | |
44 | + | ||
45 | + | let v = 20000000 | |
46 | + | ||
47 | + | let w = 1 | |
48 | + | ||
49 | + | let x = 0 | |
50 | + | ||
51 | + | let y = 1 | |
52 | + | ||
53 | + | func z (A) = ("duckHealth_" + A) | |
54 | + | ||
55 | + | ||
56 | + | func B (A) = ("duckChars_" + A) | |
57 | + | ||
58 | + | ||
59 | + | func C (A) = ("duckXP_" + A) | |
60 | + | ||
61 | + | ||
62 | + | func D (A) = ("duckLevel_" + A) | |
63 | + | ||
64 | + | ||
65 | + | func E (A) = ("duckFreePoints_" + A) | |
66 | + | ||
67 | + | ||
68 | + | func F (A) = ("duckEquipment_" + A) | |
69 | + | ||
70 | + | ||
71 | + | func G (c) = ("userXP_" + c) | |
72 | + | ||
73 | + | ||
74 | + | func H (c) = ("userLevel_" + c) | |
75 | + | ||
76 | + | ||
77 | + | func I (c) = ("userFreePoints_" + c) | |
78 | + | ||
79 | + | ||
80 | + | func J (A) = ("savedHealth_" + A) | |
81 | + | ||
82 | + | ||
83 | + | func K (A) = ("savedLocation_" + A) | |
84 | + | ||
85 | + | ||
86 | + | func L (A) = ("duckBuffs_" + A) | |
87 | + | ||
88 | + | ||
89 | + | func M (A) = ("lastRobberyTime_" + A) | |
90 | + | ||
91 | + | ||
92 | + | func N (A) = ("lastRobberyCost_" + A) | |
93 | + | ||
94 | + | ||
95 | + | func O (P) = ("landRobberyState_" + P) | |
96 | + | ||
97 | + | ||
98 | + | func Q (P) = ("landCooldownETA_" + P) | |
99 | + | ||
100 | + | ||
101 | + | func R (A) = ("duckRobberyState_" + A) | |
102 | + | ||
103 | + | ||
104 | + | func S (A) = ("lockedLandByDuck_" + A) | |
105 | + | ||
106 | + | ||
107 | + | func T (A) = ("deliveryDelayByDuck_" + A) | |
108 | + | ||
109 | + | ||
110 | + | let U = 10000 | |
111 | + | ||
112 | + | let V = 10000 | |
113 | + | ||
114 | + | let W = 2000 | |
115 | + | ||
116 | + | let X = 100000 | |
117 | + | ||
118 | + | let Y = 1000000 | |
119 | + | ||
120 | + | let Z = 5000000 | |
121 | + | ||
122 | + | let aa = 10000 | |
123 | + | ||
124 | + | let ab = 1000000 | |
125 | + | ||
126 | + | let ac = 1000000 | |
127 | + | ||
128 | + | let ad = 10000 | |
129 | + | ||
130 | + | func ae (af) = fraction(e, pow(af, 4, f, 4, 4, DOWN), d) | |
131 | + | ||
132 | + | ||
133 | + | func ag (ah) = (100 + ah) | |
134 | + | ||
135 | + | ||
136 | + | func ai (aj,ak) = { | |
137 | + | let al = ae(ak) | |
138 | + | [al, (g * (al - aj))] | |
139 | + | } | |
140 | + | ||
141 | + | ||
142 | + | func am (an,A,ao,ap) = { | |
143 | + | let aq = split(valueOrElse(getString(an, B(A)), "0_0_0_0_0"), "_") | |
144 | + | let ar = valueOrElse(getInteger(an, D(A)), 0) | |
145 | + | let as = valueOrElse(getInteger(an, z(A)), ag(ar)) | |
146 | + | let at = split(valueOrElse(getString(an, L(A)), "0_0_0_0_0"), "_") | |
147 | + | ([parseIntValue(aq[k]), parseIntValue(aq[l]), parseIntValue(aq[m]), parseIntValue(aq[n]), parseIntValue(aq[o]), ar, as] ++ (if (ap) | |
148 | + | then [ao, ao, ao, ao, ao] | |
149 | + | else [parseIntValue(at[k]), parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o])])) | |
150 | + | } | |
151 | + | ||
152 | + | ||
153 | + | func au (an,A) = { | |
154 | + | let av = valueOrElse(getInteger(an, N(A)), 0) | |
155 | + | let aw = valueOrElse(getInteger(an, M(A)), 0) | |
156 | + | let ax = lastBlock.timestamp | |
157 | + | let ay = max([h, (av - (i * (ax - aw)))]) | |
158 | + | let az = valueOrElse(getInteger(an, R(A)), 0) | |
159 | + | let aA = valueOrElse(getString(an, S(A)), "") | |
160 | + | let aB = valueOrElse(getInteger(an, Q(aA)), 0) | |
161 | + | $Tuple5(ay, aw, az, aA, aB) | |
162 | + | } | |
163 | + | ||
164 | + | ||
165 | + | let aC = "LAND" | |
166 | + | ||
167 | + | let aD = "DUCK" | |
168 | + | ||
169 | + | let aE = "PRESALE" | |
170 | + | ||
171 | + | let aF = 6 | |
172 | + | ||
173 | + | let aG = 25 | |
174 | + | ||
175 | + | let aH = 3456000 | |
176 | + | ||
177 | + | let aI = 10000000000 | |
178 | + | ||
179 | + | let aJ = "Africa_F_Africa" | |
180 | + | ||
181 | + | let aK = 39637 | |
182 | + | ||
183 | + | let aL = 10 | |
184 | + | ||
185 | + | let aM = 50000 | |
186 | + | ||
187 | + | let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
188 | + | ||
189 | + | let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
190 | + | ||
191 | + | let aP = 10000000 | |
192 | + | ||
193 | + | let aQ = [15, 16, 17, 18, 19, 20] | |
194 | + | ||
195 | + | let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
196 | + | ||
197 | + | let aS = 6 | |
198 | + | ||
199 | + | let aT = 8 | |
200 | + | ||
201 | + | let aU = 9 | |
201 | 202 | ||
202 | 203 | let aV = 10 | |
203 | 204 | ||
204 | - | let aW = | |
205 | - | ||
206 | - | let aX = | |
207 | - | ||
208 | - | let aY = | |
209 | - | ||
210 | - | let aZ = | |
211 | - | ||
212 | - | let ba = | |
213 | - | ||
214 | - | let bb = | |
215 | - | ||
216 | - | let bc = | |
217 | - | ||
218 | - | let bd = | |
219 | - | ||
220 | - | let be = | |
221 | - | ||
222 | - | let bf = | |
223 | - | ||
224 | - | let bg = | |
225 | - | ||
226 | - | let bh = | |
227 | - | ||
228 | - | let bi = | |
229 | - | ||
230 | - | let bj = | |
231 | - | ||
232 | - | let bk = | |
233 | - | ||
234 | - | let bl = | |
235 | - | ||
236 | - | ||
237 | - | ||
238 | - | ||
239 | - | ||
240 | - | ||
241 | - | ||
242 | - | ||
243 | - | ||
244 | - | ||
245 | - | ||
246 | - | ||
247 | - | ||
248 | - | ||
249 | - | ||
250 | - | ||
251 | - | ||
252 | - | ||
253 | - | ||
254 | - | ||
255 | - | ||
256 | - | ||
257 | - | ||
258 | - | ||
259 | - | ||
260 | - | ||
261 | - | ||
262 | - | ||
263 | - | ||
264 | - | ||
265 | - | ||
266 | - | ||
267 | - | ||
268 | - | ||
269 | - | ||
270 | - | ||
271 | - | ||
272 | - | ||
273 | - | ||
274 | - | ||
275 | - | ||
276 | - | ||
277 | - | ||
278 | - | ||
279 | - | ||
280 | - | ||
281 | - | ||
282 | - | ||
283 | - | ||
284 | - | ||
285 | - | ||
286 | - | ||
287 | - | ||
288 | - | ||
289 | - | ||
290 | - | ||
291 | - | ||
292 | - | ||
293 | - | ||
294 | - | ||
295 | - | ||
296 | - | ||
297 | - | ||
298 | - | let bM = " | |
299 | - | ||
300 | - | ||
301 | - | ||
302 | - | ||
303 | - | ||
304 | - | ||
305 | - | ||
306 | - | ||
307 | - | ||
308 | - | ||
309 | - | ||
310 | - | ||
311 | - | ||
312 | - | ||
313 | - | let bT = | |
205 | + | let aW = 10 | |
206 | + | ||
207 | + | let aX = 0 | |
208 | + | ||
209 | + | let aY = 1 | |
210 | + | ||
211 | + | let aZ = 2 | |
212 | + | ||
213 | + | let ba = 3 | |
214 | + | ||
215 | + | let bb = 4 | |
216 | + | ||
217 | + | let bc = 0 | |
218 | + | ||
219 | + | let bd = 1 | |
220 | + | ||
221 | + | let be = 2 | |
222 | + | ||
223 | + | let bf = 3 | |
224 | + | ||
225 | + | let bg = 0 | |
226 | + | ||
227 | + | let bh = 1 | |
228 | + | ||
229 | + | let bi = 2 | |
230 | + | ||
231 | + | let bj = 3 | |
232 | + | ||
233 | + | let bk = 0 | |
234 | + | ||
235 | + | let bl = 1 | |
236 | + | ||
237 | + | let bm = 2 | |
238 | + | ||
239 | + | func bn (bo) = ("no_" + bo) | |
240 | + | ||
241 | + | ||
242 | + | func bp (bo) = ("lcna_" + bo) | |
243 | + | ||
244 | + | ||
245 | + | func bq (bo) = ("st_" + bo) | |
246 | + | ||
247 | + | ||
248 | + | func br (bs,bo) = makeString(["las", bs, bo], "_") | |
249 | + | ||
250 | + | ||
251 | + | func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv) | |
252 | + | ||
253 | + | ||
254 | + | func bw (P) = ("wh_" + P) | |
255 | + | ||
256 | + | ||
257 | + | func bx (bo) = ("infraLevel_" + bo) | |
258 | + | ||
259 | + | ||
260 | + | func by (P) = ("fortifications_" + P) | |
261 | + | ||
262 | + | ||
263 | + | func bz (bo) = ("duckCustomNameByAssetId_" + bo) | |
264 | + | ||
265 | + | ||
266 | + | func bA (c) = ("accountCustomNameByAddr_" + c) | |
267 | + | ||
268 | + | ||
269 | + | func bB (c) = ("accRefBy_" + c) | |
270 | + | ||
271 | + | ||
272 | + | func bC (A) = ("onboardArtActivatedOnDuck_" + A) | |
273 | + | ||
274 | + | ||
275 | + | func bD (c) = ("onboardArtActivatedDuckBy_" + c) | |
276 | + | ||
277 | + | ||
278 | + | func bE (c) = ("accReferrals_" + c) | |
279 | + | ||
280 | + | ||
281 | + | func bF (bo) = ("duckOwner_" + bo) | |
282 | + | ||
283 | + | ||
284 | + | func bG (bv) = ("stakedDuckByOwner_" + bv) | |
285 | + | ||
286 | + | ||
287 | + | func bH (A) = ("backPack_" + A) | |
288 | + | ||
289 | + | ||
290 | + | func bI (A) = ("duckLocation_" + A) | |
291 | + | ||
292 | + | ||
293 | + | func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK) | |
294 | + | ||
295 | + | ||
296 | + | func bL () = "emergencyWarehouseProducts" | |
297 | + | ||
298 | + | ||
299 | + | let bM = "deliveryFund" | |
300 | + | ||
301 | + | let bN = "deliveryLocked" | |
302 | + | ||
303 | + | let bO = "%s__lastTourId" | |
304 | + | ||
305 | + | func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ)) | |
306 | + | ||
307 | + | ||
308 | + | func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ)) | |
309 | + | ||
310 | + | ||
311 | + | func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__") | |
312 | + | ||
313 | + | ||
314 | + | let bT = 0 | |
314 | 315 | ||
315 | 316 | let bU = 1 | |
316 | 317 | ||
317 | - | func bV (bW,bO) = { | |
318 | - | let bX = split(valueOrErrorMessage(getString(bW, bN(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__") | |
319 | - | let bY = split_4C(valueOrErrorMessage(getString(bW, bP(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__") | |
320 | - | [bX, bY] | |
321 | - | } | |
322 | - | ||
323 | - | ||
324 | - | func bZ (bW,ca) = { | |
325 | - | let cb = valueOrElse(getInteger(bW, bM), 0) | |
326 | - | let cc = split(ca, "_") | |
327 | - | let av = lastBlock.timestamp | |
328 | - | let cd = bV(bW, cb) | |
329 | - | let bX = cd[bR] | |
330 | - | let bY = cd[bS] | |
331 | - | if (if (if ((cc[bk] == "T")) | |
332 | - | then (parseIntValue(cc[bj]) == cb) | |
318 | + | let bV = 6 | |
319 | + | ||
320 | + | let bW = 1 | |
321 | + | ||
322 | + | func bX (bY,bQ) = { | |
323 | + | let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__") | |
324 | + | let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__") | |
325 | + | [bZ, ca] | |
326 | + | } | |
327 | + | ||
328 | + | ||
329 | + | func cb (bY,cc) = { | |
330 | + | let cd = valueOrElse(getInteger(bY, bO), 0) | |
331 | + | let ce = split(cc, "_") | |
332 | + | let ax = lastBlock.timestamp | |
333 | + | let cf = bX(bY, cd) | |
334 | + | let bZ = cf[bT] | |
335 | + | let ca = cf[bU] | |
336 | + | if (if (if ((ce[bl] == "T")) | |
337 | + | then (parseIntValue(ce[bk]) == cd) | |
333 | 338 | else false) | |
334 | - | then ( | |
339 | + | then (ca[bW] == "INPROGRESS") | |
335 | 340 | else false) | |
336 | - | then (parseIntValue( | |
341 | + | then (parseIntValue(bZ[bV]) > ax) | |
337 | 342 | else false | |
338 | 343 | } | |
339 | 344 | ||
340 | 345 | ||
341 | - | func | |
342 | - | ||
343 | - | ||
344 | - | let | |
345 | - | ||
346 | - | let | |
347 | - | ||
348 | - | let | |
349 | - | ||
350 | - | let | |
351 | - | ||
352 | - | let | |
353 | - | let | |
354 | - | if ((base58'2W' == | |
346 | + | func cg (ch) = (parseIntValue(ch[aS]) * aP) | |
347 | + | ||
348 | + | ||
349 | + | let ci = false | |
350 | + | ||
351 | + | let cj = false | |
352 | + | ||
353 | + | let ck = true | |
354 | + | ||
355 | + | let cl = take(drop(this.bytes, 1), 1) | |
356 | + | ||
357 | + | let cm = { | |
358 | + | let cn = cl | |
359 | + | if ((base58'2W' == cn)) | |
355 | 360 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
356 | - | else if ((base58'2T' == | |
361 | + | else if ((base58'2T' == cn)) | |
357 | 362 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
358 | 363 | else throw("Unknown chain") | |
359 | 364 | } | |
360 | 365 | ||
361 | - | let | |
362 | - | let | |
363 | - | if ((base58'2W' == | |
366 | + | let co = { | |
367 | + | let cn = cl | |
368 | + | if ((base58'2W' == cn)) | |
364 | 369 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
365 | - | else if ((base58'2T' == | |
370 | + | else if ((base58'2T' == cn)) | |
366 | 371 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
367 | 372 | else throw("Unknown chain") | |
368 | 373 | } | |
369 | 374 | ||
370 | - | let | |
371 | - | let | |
372 | - | if ((base58'2W' == | |
375 | + | let cp = { | |
376 | + | let cn = cl | |
377 | + | if ((base58'2W' == cn)) | |
373 | 378 | then 10000000000 | |
374 | - | else if ((base58'2T' == | |
379 | + | else if ((base58'2T' == cn)) | |
375 | 380 | then 100000000 | |
376 | 381 | else throw("Unknown chain") | |
377 | 382 | } | |
378 | 383 | ||
379 | - | let | |
380 | - | let | |
381 | - | if ((base58'2W' == | |
384 | + | let cq = { | |
385 | + | let cn = cl | |
386 | + | if ((base58'2W' == cn)) | |
382 | 387 | then 86400000 | |
383 | - | else if ((base58'2T' == | |
388 | + | else if ((base58'2T' == cn)) | |
384 | 389 | then 60000 | |
385 | 390 | else throw("Unknown chain") | |
386 | 391 | } | |
387 | 392 | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | ||
396 | - | let | |
397 | - | ||
398 | - | let | |
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | func | |
407 | - | ||
408 | - | ||
409 | - | let | |
410 | - | ||
411 | - | let | |
412 | - | ||
413 | - | let | |
414 | - | ||
415 | - | let | |
416 | - | ||
417 | - | let | |
418 | - | ||
419 | - | let | |
420 | - | ||
421 | - | func | |
422 | - | ||
423 | - | ||
424 | - | func | |
425 | - | ||
426 | - | ||
427 | - | func | |
428 | - | ||
429 | - | ||
430 | - | func | |
431 | - | ||
432 | - | ||
433 | - | let | |
434 | - | ||
435 | - | let | |
436 | - | ||
437 | - | let | |
438 | - | ||
439 | - | let | |
440 | - | ||
441 | - | let | |
442 | - | ||
443 | - | let | |
444 | - | ||
445 | - | let | |
446 | - | ||
447 | - | let | |
448 | - | ||
449 | - | let | |
450 | - | ||
451 | - | let | |
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 | - | ||
472 | - | ||
473 | - | func | |
474 | - | ||
475 | - | ||
476 | - | func | |
477 | - | ||
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | func | |
483 | - | let | |
484 | - | if ($isInstanceOf( | |
393 | + | let cr = "__" | |
394 | + | ||
395 | + | let cs = 1000000 | |
396 | + | ||
397 | + | let ct = 100000000 | |
398 | + | ||
399 | + | let cu = 25 | |
400 | + | ||
401 | + | let cv = 100 | |
402 | + | ||
403 | + | let cw = 225 | |
404 | + | ||
405 | + | let cx = 400 | |
406 | + | ||
407 | + | let cy = 625 | |
408 | + | ||
409 | + | let cz = [0, 1, 2, 3, 4, 5] | |
410 | + | ||
411 | + | func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], "")) | |
412 | + | ||
413 | + | ||
414 | + | let cD = 1 | |
415 | + | ||
416 | + | let cE = 2 | |
417 | + | ||
418 | + | let cF = 3 | |
419 | + | ||
420 | + | let cG = 4 | |
421 | + | ||
422 | + | let cH = 7 | |
423 | + | ||
424 | + | let cI = 8 | |
425 | + | ||
426 | + | func cJ () = "%s__restConfig" | |
427 | + | ||
428 | + | ||
429 | + | func cK () = "%s__restAddr" | |
430 | + | ||
431 | + | ||
432 | + | func cL (cM) = split_4C(cA(cM, cJ()), cr) | |
433 | + | ||
434 | + | ||
435 | + | func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP))) | |
436 | + | ||
437 | + | ||
438 | + | let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co)) | |
439 | + | ||
440 | + | let cO = cL(cQ) | |
441 | + | ||
442 | + | let an = cN(cO, cD) | |
443 | + | ||
444 | + | let cR = cN(cO, cE) | |
445 | + | ||
446 | + | let cS = cN(cO, cF) | |
447 | + | ||
448 | + | let cT = cN(cO, cG) | |
449 | + | ||
450 | + | let cU = cN(cO, cH) | |
451 | + | ||
452 | + | let cV = cN(cO, cI) | |
453 | + | ||
454 | + | let cW = 0 | |
455 | + | ||
456 | + | let cX = 1 | |
457 | + | ||
458 | + | let cY = 2 | |
459 | + | ||
460 | + | let cZ = 3 | |
461 | + | ||
462 | + | let da = "wlg_assetId" | |
463 | + | ||
464 | + | let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet") | |
465 | + | ||
466 | + | let dc = "acresAssetId" | |
467 | + | ||
468 | + | let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet") | |
469 | + | ||
470 | + | let de = 2 | |
471 | + | ||
472 | + | func df (cB) = ("finishBlockForAddr_" + cB) | |
473 | + | ||
474 | + | ||
475 | + | func dg () = "resTypesProportions" | |
476 | + | ||
477 | + | ||
478 | + | func dh (di) = ("resTypesByContinent_" + di) | |
479 | + | ||
480 | + | ||
481 | + | func dj (bv) = ("stakedLandsByOwner_" + bv) | |
482 | + | ||
483 | + | ||
484 | + | func dk (bv) = ("stakedPiecesByOwner_" + bv) | |
485 | + | ||
486 | + | ||
487 | + | func dl (dm) = { | |
488 | + | let cn = dm | |
489 | + | if ($isInstanceOf(cn, "String")) | |
485 | 490 | then { | |
486 | - | let | |
487 | - | | |
491 | + | let dn = cn | |
492 | + | dn | |
488 | 493 | } | |
489 | 494 | else throw("fail to cast into String") | |
490 | 495 | } | |
491 | 496 | ||
492 | 497 | ||
493 | - | func | |
494 | - | let | |
495 | - | if ($isInstanceOf( | |
498 | + | func do (dm) = { | |
499 | + | let cn = dm | |
500 | + | if ($isInstanceOf(cn, "Int")) | |
496 | 501 | then { | |
497 | - | let dn = cl | |
502 | + | let dp = cn | |
503 | + | dp | |
504 | + | } | |
505 | + | else throw("fail to cast into Int") | |
506 | + | } | |
507 | + | ||
508 | + | ||
509 | + | func dq (dm) = { | |
510 | + | let cn = dm | |
511 | + | if ($isInstanceOf(cn, "Boolean")) | |
512 | + | then { | |
513 | + | let dn = cn | |
498 | 514 | dn | |
499 | 515 | } | |
500 | - | else throw("fail to cast into Int") | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | func do (dk) = { | |
505 | - | let cl = dk | |
506 | - | if ($isInstanceOf(cl, "Boolean")) | |
507 | - | then { | |
508 | - | let dl = cl | |
509 | - | dl | |
510 | - | } | |
511 | 516 | else throw("fail to cast into Boolean") | |
512 | 517 | } | |
513 | 518 | ||
514 | 519 | ||
515 | - | func | |
516 | - | let | |
517 | - | if (("S" == | |
518 | - | then | |
519 | - | else if (("M" == | |
520 | - | then | |
521 | - | else if (("L" == | |
522 | - | then | |
523 | - | else if (("XL" == | |
524 | - | then | |
525 | - | else if (("XXL" == | |
526 | - | then | |
520 | + | func dr (ds) = { | |
521 | + | let cn = ds | |
522 | + | if (("S" == cn)) | |
523 | + | then cu | |
524 | + | else if (("M" == cn)) | |
525 | + | then cv | |
526 | + | else if (("L" == cn)) | |
527 | + | then cw | |
528 | + | else if (("XL" == cn)) | |
529 | + | then cx | |
530 | + | else if (("XXL" == cn)) | |
531 | + | then cy | |
527 | 532 | else throw("Unknown land size") | |
528 | 533 | } | |
529 | 534 | ||
530 | 535 | ||
531 | - | func dr (dl) = isDefined(parseInt(dl)) | |
532 | - | ||
533 | - | ||
534 | - | func ds () = "contractsBlocked" | |
535 | - | ||
536 | - | ||
537 | - | func dt (b) = ("lastTxIdByUser_" + b) | |
538 | - | ||
539 | - | ||
540 | - | func du (dv,dw,dx) = { | |
541 | - | let dy = value(blockInfoByHeight(dw)) | |
542 | - | let dz = sha256((value(dy.vrf) + dx)) | |
543 | - | (toInt(dz) % dv) | |
544 | - | } | |
545 | - | ||
546 | - | ||
547 | - | let dA = { | |
548 | - | let cl = cj | |
549 | - | if ((base58'2W' == cl)) | |
536 | + | func dt (dn) = isDefined(parseInt(dn)) | |
537 | + | ||
538 | + | ||
539 | + | func du () = "contractsBlocked" | |
540 | + | ||
541 | + | ||
542 | + | func dv (c) = ("lastTxIdByUser_" + c) | |
543 | + | ||
544 | + | ||
545 | + | func dw (dx,dy) = { | |
546 | + | let dz = pow(10, 0, dy, 0, 0, DOWN) | |
547 | + | let dA = toString((dx % dz)) | |
548 | + | let dB = drop(toString(dz), (1 + size(dA))) | |
549 | + | (((toString((dx / dz)) + ".") + dB) + dA) | |
550 | + | } | |
551 | + | ||
552 | + | ||
553 | + | func dC (dD,dE,dF) = { | |
554 | + | let dG = value(blockInfoByHeight(dE)) | |
555 | + | let dH = sha256((value(dG.vrf) + dF)) | |
556 | + | (toInt(dH) % dD) | |
557 | + | } | |
558 | + | ||
559 | + | ||
560 | + | let dI = { | |
561 | + | let cn = cl | |
562 | + | if ((base58'2W' == cn)) | |
550 | 563 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
551 | - | else if ((base58'2T' == | |
564 | + | else if ((base58'2T' == cn)) | |
552 | 565 | then this | |
553 | 566 | else throw("Unknown chain") | |
554 | 567 | } | |
555 | 568 | ||
556 | - | let | |
557 | - | let | |
558 | - | if ((base58'2W' == | |
569 | + | let dJ = { | |
570 | + | let cn = cl | |
571 | + | if ((base58'2W' == cn)) | |
559 | 572 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
560 | - | else if ((base58'2T' == | |
573 | + | else if ((base58'2T' == cn)) | |
561 | 574 | then this | |
562 | 575 | else throw("Unknown chain") | |
563 | 576 | } | |
564 | 577 | ||
565 | - | let | |
566 | - | let | |
567 | - | if ((base58'2W' == | |
568 | - | then if ( | |
578 | + | let dK = { | |
579 | + | let cn = cl | |
580 | + | if ((base58'2W' == cn)) | |
581 | + | then if (ci) | |
569 | 582 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
570 | 583 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
571 | - | else if ((base58'2T' == | |
584 | + | else if ((base58'2T' == cn)) | |
572 | 585 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
573 | 586 | else throw("Unknown chain") | |
574 | 587 | } | |
575 | 588 | ||
576 | - | let dD = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
577 | - | ||
578 | - | let dE = 300000 | |
579 | - | ||
580 | - | let dF = 5000000 | |
581 | - | ||
582 | - | let dG = 50 | |
583 | - | ||
584 | - | let dH = 10000000 | |
585 | - | ||
586 | - | let dI = { | |
587 | - | let cl = cj | |
588 | - | if ((base58'2W' == cl)) | |
589 | + | let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
590 | + | ||
591 | + | let dM = 300000 | |
592 | + | ||
593 | + | let dN = 600000 | |
594 | + | ||
595 | + | let dO = 5000000 | |
596 | + | ||
597 | + | let dP = 50 | |
598 | + | ||
599 | + | let dQ = 10000000 | |
600 | + | ||
601 | + | let dR = { | |
602 | + | let cn = cl | |
603 | + | if ((base58'2W' == cn)) | |
589 | 604 | then 252289527462 | |
590 | - | else if ((base58'2T' == | |
605 | + | else if ((base58'2T' == cn)) | |
591 | 606 | then 2522895274 | |
592 | 607 | else throw("Unknown chain") | |
593 | 608 | } | |
594 | 609 | ||
595 | - | let | |
596 | - | let | |
597 | - | if ((base58'2W' == | |
610 | + | let dS = { | |
611 | + | let cn = cl | |
612 | + | if ((base58'2W' == cn)) | |
598 | 613 | then 250000000 | |
599 | - | else if ((base58'2T' == | |
614 | + | else if ((base58'2T' == cn)) | |
600 | 615 | then 250000000 | |
601 | 616 | else throw("Unknown chain") | |
602 | 617 | } | |
603 | 618 | ||
604 | - | let | |
605 | - | ||
606 | - | let | |
607 | - | ||
608 | - | let | |
609 | - | ||
610 | - | let | |
611 | - | ||
612 | - | let | |
613 | - | ||
614 | - | let | |
615 | - | ||
616 | - | let | |
617 | - | ||
618 | - | let | |
619 | - | ||
620 | - | func | |
621 | - | ||
622 | - | ||
623 | - | func | |
624 | - | ||
625 | - | ||
626 | - | func | |
627 | - | ||
628 | - | ||
629 | - | func | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | ||
634 | - | ||
635 | - | func | |
636 | - | ||
637 | - | ||
638 | - | func | |
639 | - | ||
640 | - | ||
641 | - | func | |
642 | - | ||
643 | - | ||
644 | - | let | |
645 | - | ||
646 | - | let | |
647 | - | ||
648 | - | let | |
649 | - | ||
650 | - | let | |
651 | - | ||
652 | - | let | |
653 | - | ||
654 | - | let | |
655 | - | ||
656 | - | let | |
657 | - | ||
658 | - | func | |
659 | - | ||
660 | - | ||
661 | - | func | |
662 | - | let | |
663 | - | then ((( | |
664 | - | else -((((-( | |
665 | - | ( | |
666 | - | } | |
667 | - | ||
668 | - | ||
669 | - | func | |
670 | - | let | |
671 | - | if ((0 >= | |
619 | + | let dT = 2500000000 | |
620 | + | ||
621 | + | let dU = toBigInt(5) | |
622 | + | ||
623 | + | let dV = toBigInt(20) | |
624 | + | ||
625 | + | let dW = toBigInt((20 * 20)) | |
626 | + | ||
627 | + | let dX = toBigInt(((20 * 20) * 20)) | |
628 | + | ||
629 | + | let dY = toBigInt((((20 * 20) * 20) * 20)) | |
630 | + | ||
631 | + | let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
632 | + | ||
633 | + | let ea = 500 | |
634 | + | ||
635 | + | func eb () = "nextLandNum" | |
636 | + | ||
637 | + | ||
638 | + | func ec (ed) = ("lcn_" + ed) | |
639 | + | ||
640 | + | ||
641 | + | func ee (ef) = ("la_" + ef) | |
642 | + | ||
643 | + | ||
644 | + | func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv) | |
645 | + | ||
646 | + | ||
647 | + | func eh (ef) = ("lo_" + ef) | |
648 | + | ||
649 | + | ||
650 | + | func ei (ed) = ("duckByCustomName_" + ed) | |
651 | + | ||
652 | + | ||
653 | + | func ej (ed) = ("accountByCustomName_" + ed) | |
654 | + | ||
655 | + | ||
656 | + | func ek () = "oldiesList" | |
657 | + | ||
658 | + | ||
659 | + | let el = 0 | |
660 | + | ||
661 | + | let em = 1 | |
662 | + | ||
663 | + | let en = 2 | |
664 | + | ||
665 | + | let eo = 0 | |
666 | + | ||
667 | + | let ep = 5 | |
668 | + | ||
669 | + | let eq = 6 | |
670 | + | ||
671 | + | let er = 7 | |
672 | + | ||
673 | + | func es (ef,ds) = ((aC + ef) + ds) | |
674 | + | ||
675 | + | ||
676 | + | func et (eu,ev) = { | |
677 | + | let ew = if ((eu >= 0)) | |
678 | + | then (((eu + ev) - 1) / ev) | |
679 | + | else -((((-(eu) + ev) - 1) / ev)) | |
680 | + | (ew * ct) | |
681 | + | } | |
682 | + | ||
683 | + | ||
684 | + | func ex (ey,ez) = { | |
685 | + | let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5]) | |
686 | + | if ((0 >= eA)) | |
672 | 687 | then throw("Zero weights sum") | |
673 | 688 | else { | |
674 | - | let | |
675 | - | func | |
676 | - | ||
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | func | |
681 | - | then | |
682 | - | else | |
683 | - | ||
684 | - | func | |
685 | - | then | |
689 | + | let eB = fraction(ey, cs, eA) | |
690 | + | func eC (eD,eE) = (eD :+ fraction(eE, eB, cs)) | |
691 | + | ||
692 | + | let eF = ez | |
693 | + | let eG = size(eF) | |
694 | + | let eH = nil | |
695 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
696 | + | then eJ | |
697 | + | else eC(eJ, eF[eK]) | |
698 | + | ||
699 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
700 | + | then eJ | |
686 | 701 | else throw("List size exceeds 6") | |
687 | 702 | ||
688 | - | | |
689 | - | } | |
690 | - | } | |
691 | - | ||
692 | - | ||
693 | - | func | |
694 | - | let | |
695 | - | if ((size( | |
703 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
704 | + | } | |
705 | + | } | |
706 | + | ||
707 | + | ||
708 | + | func eM (ey) = { | |
709 | + | let eN = split(value(getString(dg())), "_") | |
710 | + | if ((size(eN) != aF)) | |
696 | 711 | then throw("Wrong proportions data") | |
697 | 712 | else { | |
698 | - | let | |
699 | - | | |
700 | - | } | |
701 | - | } | |
702 | - | ||
703 | - | ||
704 | - | func | |
705 | - | let | |
706 | - | func | |
707 | - | let | |
708 | - | if ((0 > | |
709 | - | then throw(((((("Not enough material idx=" + toString( | |
710 | - | else ( | |
713 | + | let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])] | |
714 | + | ex(ey, eO) | |
715 | + | } | |
716 | + | } | |
717 | + | ||
718 | + | ||
719 | + | func eP (eQ,eR,eS) = { | |
720 | + | let eT = eM(eS) | |
721 | + | func eU (eD,cP) = { | |
722 | + | let eV = (parseIntValue(eR[cP]) - eT[cP]) | |
723 | + | if ((0 > eV)) | |
724 | + | then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP]))) | |
725 | + | else (eD :+ toString(eV)) | |
711 | 726 | } | |
712 | 727 | ||
713 | - | if ( | |
728 | + | if (eQ) | |
714 | 729 | then { | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | then | |
720 | - | else | |
721 | - | ||
722 | - | func | |
723 | - | then | |
730 | + | let eF = cz | |
731 | + | let eG = size(eF) | |
732 | + | let eH = nil | |
733 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
734 | + | then eJ | |
735 | + | else eU(eJ, eF[eK]) | |
736 | + | ||
737 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
738 | + | then eJ | |
724 | 739 | else throw("List size exceeds 6") | |
725 | 740 | ||
726 | - | | |
727 | - | } | |
728 | - | else | |
729 | - | } | |
730 | - | ||
731 | - | ||
732 | - | func | |
733 | - | then $Tuple2( | |
741 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
742 | + | } | |
743 | + | else eR | |
744 | + | } | |
745 | + | ||
746 | + | ||
747 | + | func eW (eX,eY) = if ((eY == "")) | |
748 | + | then $Tuple2(eX, false) | |
734 | 749 | else { | |
735 | - | func | |
736 | - | let | |
737 | - | if ((size( | |
750 | + | func eZ (eD,fa) = { | |
751 | + | let fb = split(fa, ",") | |
752 | + | if ((size(fb) != 2)) | |
738 | 753 | then throw("Incorrect format, should be index,amount") | |
739 | 754 | else { | |
740 | - | let | |
741 | - | if (if ((0 > | |
755 | + | let cP = parseIntValue(fb[0]) | |
756 | + | if (if ((0 > cP)) | |
742 | 757 | then true | |
743 | - | else ( | |
758 | + | else (cP >= size(aR))) | |
744 | 759 | then throw("Unknown product idx") | |
745 | 760 | else { | |
746 | - | let | |
747 | - | let | |
748 | - | if ((size( | |
749 | - | then throw((("You don't have " + | |
761 | + | let fc = parseIntValue(fb[1]) | |
762 | + | let fd = split(eD._1, (fb[0] + ":")) | |
763 | + | if ((size(fd) != 2)) | |
764 | + | then throw((("You don't have " + aN[cP]) + " equipped")) | |
750 | 765 | else { | |
751 | - | let | |
752 | - | let | |
766 | + | let fe = fd[1] | |
767 | + | let ff = if (dt(take(drop(fe, 1), 1))) | |
753 | 768 | then 2 | |
754 | 769 | else 1 | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | then ( | |
759 | - | else throw(((((("You equipped " + toString( | |
760 | - | $Tuple2((((( | |
770 | + | let fg = parseIntValue(take(fe, ff)) | |
771 | + | let fh = drop(fe, ff) | |
772 | + | let fi = if ((fg >= fc)) | |
773 | + | then (fg - fc) | |
774 | + | else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc))) | |
775 | + | $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2) | |
761 | 776 | then true | |
762 | - | else if (if (( | |
763 | - | then (8 >= | |
777 | + | else if (if ((cP >= 6)) | |
778 | + | then (8 >= cP) | |
764 | 779 | else false) | |
765 | - | then ( | |
780 | + | then (fi == 0) | |
766 | 781 | else false) | |
767 | 782 | } | |
768 | 783 | } | |
769 | 784 | } | |
770 | 785 | } | |
771 | 786 | ||
772 | - | let | |
773 | - | let | |
774 | - | let | |
775 | - | func | |
776 | - | then | |
777 | - | else | |
778 | - | ||
779 | - | func | |
780 | - | then | |
787 | + | let eF = split(eY, "_") | |
788 | + | let eG = size(eF) | |
789 | + | let eH = $Tuple2(eX, false) | |
790 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
791 | + | then eJ | |
792 | + | else eZ(eJ, eF[eK]) | |
793 | + | ||
794 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
795 | + | then eJ | |
781 | 796 | else throw("List size exceeds 10") | |
782 | 797 | ||
783 | - | | |
798 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
784 | 799 | } | |
785 | 800 | ||
786 | 801 | ||
787 | - | func | |
788 | - | let | |
802 | + | func fj (fk) = { | |
803 | + | let fl = if ((fk == "")) | |
789 | 804 | then nil | |
790 | - | else split_4C( | |
791 | - | func | |
792 | - | let | |
793 | - | let | |
794 | - | then parseIntValue( | |
805 | + | else split_4C(fk, "_") | |
806 | + | func fm (eD,ch) = { | |
807 | + | let fn = (size(eD) / 8) | |
808 | + | let fg = if ((size(fl) > fn)) | |
809 | + | then parseIntValue(fl[fn]) | |
795 | 810 | else 0 | |
796 | - | ( | |
811 | + | (eD + toBytes(fg)) | |
797 | 812 | } | |
798 | 813 | ||
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
805 | - | ||
806 | - | func | |
807 | - | then | |
814 | + | let eF = aR | |
815 | + | let eG = size(eF) | |
816 | + | let eH = base58'' | |
817 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
818 | + | then eJ | |
819 | + | else fm(eJ, eF[eK]) | |
820 | + | ||
821 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
822 | + | then eJ | |
808 | 823 | else throw("List size exceeds 50") | |
809 | 824 | ||
810 | - | | |
811 | - | } | |
812 | - | ||
813 | - | ||
814 | - | func | |
815 | - | func | |
816 | - | let | |
817 | - | let | |
818 | - | ( | |
825 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
826 | + | } | |
827 | + | ||
828 | + | ||
829 | + | func fo (fp) = { | |
830 | + | func fq (eD,ch) = { | |
831 | + | let fn = size(eD) | |
832 | + | let fr = take(drop(fp, (8 * fn)), 8) | |
833 | + | (eD :+ toString(toInt(fr))) | |
819 | 834 | } | |
820 | 835 | ||
821 | 836 | makeString_2C({ | |
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | func | |
826 | - | then | |
827 | - | else | |
828 | - | ||
829 | - | func | |
830 | - | then | |
837 | + | let eF = aR | |
838 | + | let eG = size(eF) | |
839 | + | let eH = nil | |
840 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
841 | + | then eJ | |
842 | + | else fq(eJ, eF[eK]) | |
843 | + | ||
844 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
845 | + | then eJ | |
831 | 846 | else throw("List size exceeds 50") | |
832 | 847 | ||
833 | - | | |
848 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
834 | 849 | }, "_") | |
835 | 850 | } | |
836 | 851 | ||
837 | 852 | ||
838 | - | func | |
839 | - | func | |
840 | - | let | |
841 | - | then | |
853 | + | func fs (ft,fu) = { | |
854 | + | func fv (eD,fn) = { | |
855 | + | let fw = if ((size(ft) > (7 + fn))) | |
856 | + | then ft[(7 + fn)] | |
842 | 857 | else 0 | |
843 | - | if ((parseIntValue( | |
844 | - | then throw(("Requirement not satisfied: " + | |
858 | + | if ((parseIntValue(fu[fn]) > (ft[fn] + fw))) | |
859 | + | then throw(("Requirement not satisfied: " + j[fn])) | |
845 | 860 | else true | |
846 | 861 | } | |
847 | 862 | ||
848 | - | let | |
849 | - | let | |
850 | - | let | |
851 | - | func | |
852 | - | then | |
853 | - | else | |
854 | - | ||
855 | - | func | |
856 | - | then | |
863 | + | let eF = [0, 1, 2, 3, 4, 5, 6] | |
864 | + | let eG = size(eF) | |
865 | + | let eH = false | |
866 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
867 | + | then eJ | |
868 | + | else fv(eJ, eF[eK]) | |
869 | + | ||
870 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
871 | + | then eJ | |
857 | 872 | else throw("List size exceeds 7") | |
858 | 873 | ||
859 | - | | |
860 | - | } | |
861 | - | ||
862 | - | ||
863 | - | func | |
864 | - | let | |
865 | - | if ((size( | |
874 | + | eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7) | |
875 | + | } | |
876 | + | ||
877 | + | ||
878 | + | func fx (fy,fl,fz,ft,fA,fB) = { | |
879 | + | let fb = split(fy, ":") | |
880 | + | if ((size(fb) != 2)) | |
866 | 881 | then throw("Incorrect format, should be index:amount") | |
867 | - | else if (if (!( | |
868 | - | then (size( | |
882 | + | else if (if (!(fz)) | |
883 | + | then (size(fb[0]) != 2) | |
869 | 884 | else false) | |
870 | 885 | then throw("Product idx should be 2 digits, zero padded") | |
871 | 886 | else { | |
872 | - | let | |
873 | - | let | |
874 | - | if (!(containsElement( | |
875 | - | then throw((("Product '" + | |
876 | - | else if ((0 > | |
887 | + | let fC = parseIntValue(fb[0]) | |
888 | + | let fD = parseIntValue(fb[1]) | |
889 | + | if (!(containsElement(aQ, fC))) | |
890 | + | then throw((("Product '" + aN[fC]) + "' cannot be used for land defense")) | |
891 | + | else if ((0 > fD)) | |
877 | 892 | then throw("Count can't be negative") | |
878 | - | else if (( | |
879 | - | then throw(((("Can't put more than " + toString( | |
880 | - | else if (( | |
881 | - | then $Tuple3( | |
893 | + | else if ((fD > t)) | |
894 | + | then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC])) | |
895 | + | else if ((fD == 0)) | |
896 | + | then $Tuple3(fl, fA, fB) | |
882 | 897 | else { | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | let | |
887 | - | if (if (!( | |
888 | - | then ( | |
898 | + | let fE = take(fl, (8 * fC)) | |
899 | + | let fg = toInt(take(drop(fl, (8 * fC)), 8)) | |
900 | + | let fh = drop(fl, (8 * (fC + 1))) | |
901 | + | let ch = split(aR[fC], "_") | |
902 | + | if (if (!(fz)) | |
903 | + | then (fD > fg) | |
889 | 904 | else false) | |
890 | - | then throw(((((("You have " + toString( | |
905 | + | then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD))) | |
891 | 906 | else { | |
892 | - | let | |
893 | - | then | |
907 | + | let fi = if (if (!(fz)) | |
908 | + | then fs(ft, split(ch[aU], ",")) | |
894 | 909 | else false) | |
895 | - | then ( | |
896 | - | else ( | |
897 | - | let | |
898 | - | $Tuple3((( | |
910 | + | then (fg - fD) | |
911 | + | else (fg + fD) | |
912 | + | let fF = (et(fi, aW) - et(fg, aW)) | |
913 | + | $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF)) | |
899 | 914 | } | |
900 | 915 | } | |
901 | 916 | } | |
902 | 917 | } | |
903 | 918 | ||
904 | 919 | ||
905 | - | func | |
906 | - | let | |
907 | - | if ((size( | |
920 | + | func fG (fy,fl,fz,fH,fI,fJ,ft) = { | |
921 | + | let fb = split(fy, ":") | |
922 | + | if ((size(fb) != 2)) | |
908 | 923 | then throw("Incorrect format, should be index:amount") | |
909 | - | else if (if (!( | |
910 | - | then (size( | |
924 | + | else if (if (!(fz)) | |
925 | + | then (size(fb[0]) != 2) | |
911 | 926 | else false) | |
912 | 927 | then throw("Product idx should be 2 digits, zero padded") | |
913 | 928 | else { | |
914 | - | let | |
915 | - | let | |
916 | - | if (if ((0 > | |
929 | + | let fC = parseIntValue(fb[0]) | |
930 | + | let fD = parseIntValue(fb[1]) | |
931 | + | if (if ((0 > fC)) | |
917 | 932 | then true | |
918 | - | else ( | |
933 | + | else (fC >= size(aR))) | |
919 | 934 | then throw("Unknown product idx") | |
920 | - | else if ((0 > | |
935 | + | else if ((0 > fD)) | |
921 | 936 | then throw("Count can't be negative") | |
922 | - | else if (( | |
923 | - | then throw(((("Can't put more than " + toString( | |
924 | - | else if (( | |
925 | - | then $Tuple2( | |
937 | + | else if ((fD > t)) | |
938 | + | then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC])) | |
939 | + | else if ((fD == 0)) | |
940 | + | then $Tuple2(fl, false) | |
926 | 941 | else { | |
927 | - | let | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | if (if (!( | |
932 | - | then ( | |
942 | + | let fE = take(fl, (8 * fC)) | |
943 | + | let fg = toInt(take(drop(fl, (8 * fC)), 8)) | |
944 | + | let fh = drop(fl, (8 * (fC + 1))) | |
945 | + | let ch = split(aR[fC], "_") | |
946 | + | if (if (!(fz)) | |
947 | + | then (fD > fg) | |
933 | 948 | else false) | |
934 | - | then throw(((((("You have " + toString( | |
949 | + | then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD))) | |
935 | 950 | else { | |
936 | - | let | |
937 | - | then | |
951 | + | let fK = if (if (!(fz)) | |
952 | + | then fs(ft, split(ch[aU], ",")) | |
938 | 953 | else false) | |
939 | 954 | then { | |
940 | - | let | |
941 | - | if (( | |
955 | + | let fL = ch[aV] | |
956 | + | if ((fL == "")) | |
942 | 957 | then throw("Item cannot be equipped") | |
943 | 958 | else { | |
944 | - | let | |
945 | - | let | |
946 | - | if (( | |
959 | + | let fM = parseIntValue(fL) | |
960 | + | let fN = (fM / 100) | |
961 | + | if ((fH != fN)) | |
947 | 962 | then throw("Segment incompatible") | |
948 | 963 | else { | |
949 | - | let | |
950 | - | if (( | |
964 | + | let fO = ((fM % 100) / 10) | |
965 | + | if ((fI != fO)) | |
951 | 966 | then throw("Slot incompatible") | |
952 | 967 | else { | |
953 | - | let | |
954 | - | if (if (( | |
955 | - | then ( | |
968 | + | let fP = (fM % 10) | |
969 | + | if (if ((fJ != 0)) | |
970 | + | then (fP > 1) | |
956 | 971 | else false) | |
957 | 972 | then throw("Big items should occupy slot 0") | |
958 | - | else ( | |
973 | + | else (fP > 1) | |
959 | 974 | } | |
960 | 975 | } | |
961 | 976 | } | |
962 | 977 | } | |
963 | 978 | else false | |
964 | - | $Tuple2((( | |
965 | - | then | |
966 | - | else -( | |
979 | + | $Tuple2(((fE + toBytes((fg + (if (fz) | |
980 | + | then fD | |
981 | + | else -(fD))))) + fh), fK) | |
967 | 982 | } | |
968 | 983 | } | |
969 | 984 | } | |
970 | 985 | } | |
971 | 986 | ||
972 | 987 | ||
973 | - | func | |
988 | + | func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != "")) | |
974 | 989 | then { | |
975 | - | let | |
976 | - | if ((size( | |
990 | + | let fU = split(fR, ",") | |
991 | + | if ((size(fU) > s)) | |
977 | 992 | then throw("Wrong slots format") | |
978 | 993 | else { | |
979 | - | let | |
980 | - | let | |
981 | - | then | |
994 | + | let fV = fU[0] | |
995 | + | let fW = if ((size(fU) > 1)) | |
996 | + | then fU[1] | |
982 | 997 | else "" | |
983 | - | if (if (( | |
984 | - | then ( | |
998 | + | if (if ((fV == "")) | |
999 | + | then (fW == "") | |
985 | 1000 | else false) | |
986 | - | then | |
1001 | + | then fS | |
987 | 1002 | else { | |
988 | - | let | |
989 | - | then | |
990 | - | else $Tuple2( | |
991 | - | if (( | |
992 | - | then if ( | |
1003 | + | let fX = if ((fV != "")) | |
1004 | + | then fG(fV, fS, fz, fH, fI, 0, fT) | |
1005 | + | else $Tuple2(fS, false) | |
1006 | + | if ((fW != "")) | |
1007 | + | then if (fX._2) | |
993 | 1008 | then throw("Big item already occupies slot") | |
994 | - | else | |
995 | - | else | |
1009 | + | else fG(fW, fX._1, fz, fH, fI, 1, fT)._1 | |
1010 | + | else fX._1 | |
996 | 1011 | } | |
997 | 1012 | } | |
998 | 1013 | } | |
999 | - | else | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
1003 | - | func | |
1004 | - | let | |
1005 | - | let | |
1006 | - | if ((size( | |
1014 | + | else fS | |
1015 | + | ||
1016 | + | ||
1017 | + | func fY (fZ,ga,fz,fT) = { | |
1018 | + | func fH (eD,gb) = { | |
1019 | + | let fn = eD._1 | |
1020 | + | let fI = split(gb, ";") | |
1021 | + | if ((size(fI) != r)) | |
1007 | 1022 | then throw("Wrong segment format") | |
1008 | 1023 | else { | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (if (( | |
1012 | - | then ( | |
1024 | + | let gc = fI[0] | |
1025 | + | let gd = fI[1] | |
1026 | + | if (if ((gc == "")) | |
1027 | + | then (gd == "") | |
1013 | 1028 | else false) | |
1014 | - | then $Tuple2(( | |
1029 | + | then $Tuple2((fn + 1), eD._2) | |
1015 | 1030 | else { | |
1016 | - | let | |
1017 | - | $Tuple2(( | |
1031 | + | let ge = fQ(gc, eD._2, fz, fn, 0, fT) | |
1032 | + | $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT)) | |
1018 | 1033 | } | |
1019 | 1034 | } | |
1020 | 1035 | } | |
1021 | 1036 | ||
1022 | - | ( let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | func | |
1026 | - | then | |
1027 | - | else | |
1028 | - | ||
1029 | - | func | |
1030 | - | then | |
1037 | + | ( let eF = fZ | |
1038 | + | let eG = size(eF) | |
1039 | + | let eH = $Tuple2(0, ga) | |
1040 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1041 | + | then eJ | |
1042 | + | else fH(eJ, eF[eK]) | |
1043 | + | ||
1044 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1045 | + | then eJ | |
1031 | 1046 | else throw("List size exceeds 6") | |
1032 | 1047 | ||
1033 | - | | |
1034 | - | } | |
1035 | - | ||
1036 | - | ||
1037 | - | func | |
1048 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2 | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ))) | |
1038 | 1053 | then throw("At least duck, mines and traps parts are required") | |
1039 | 1054 | else { | |
1040 | - | func | |
1041 | - | let | |
1042 | - | if (( | |
1043 | - | then $Tuple4(( | |
1055 | + | func fH (eD,gb) = { | |
1056 | + | let fn = eD._1 | |
1057 | + | if ((fn == 0)) | |
1058 | + | then $Tuple4((fn + 1), eD._2, eD._3, eD._4) | |
1044 | 1059 | else { | |
1045 | - | let | |
1046 | - | $Tuple4(( | |
1060 | + | let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4) | |
1061 | + | $Tuple4((fn + 1), gg._1, gg._2, gg._3) | |
1047 | 1062 | } | |
1048 | 1063 | } | |
1049 | 1064 | ||
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | let | |
1054 | - | func | |
1055 | - | then | |
1056 | - | else | |
1057 | - | ||
1058 | - | func | |
1059 | - | then | |
1065 | + | let gh = { | |
1066 | + | let eF = fZ | |
1067 | + | let eG = size(eF) | |
1068 | + | let eH = $Tuple4(0, ga, fA, fB) | |
1069 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1070 | + | then eJ | |
1071 | + | else fH(eJ, eF[eK]) | |
1072 | + | ||
1073 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1074 | + | then eJ | |
1060 | 1075 | else throw("List size exceeds 10") | |
1061 | 1076 | ||
1062 | - | | |
1063 | - | } | |
1064 | - | $Tuple3( | |
1077 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1078 | + | } | |
1079 | + | $Tuple3(gh._2, gh._3, gh._4) | |
1065 | 1080 | } | |
1066 | 1081 | ||
1067 | 1082 | ||
1068 | - | func | |
1069 | - | let | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1083 | + | func gi (A) = { | |
1084 | + | let gj = F(A) | |
1085 | + | let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1086 | + | let gl = fY(gk, dL, true, nil) | |
1087 | + | let gm = split(gk[p], ";")[1] | |
1088 | + | let ao = if ((gm == "")) | |
1074 | 1089 | then 0 | |
1075 | 1090 | else { | |
1076 | - | let | |
1077 | - | if (( | |
1091 | + | let gn = split(gm, ",")[0] | |
1092 | + | if ((gn == "")) | |
1078 | 1093 | then 0 | |
1079 | 1094 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | let | |
1083 | - | if (if (if (if (if (( | |
1095 | + | let fy = split(gn, ":") | |
1096 | + | let cP = fy[0] | |
1097 | + | let go = fy[1] | |
1098 | + | if (if (if (if (if ((cP == "06")) | |
1084 | 1099 | then true | |
1085 | - | else ( | |
1100 | + | else (cP == "07")) | |
1086 | 1101 | then true | |
1087 | - | else ( | |
1088 | - | then ( | |
1102 | + | else (cP == "08")) | |
1103 | + | then (go != "") | |
1089 | 1104 | else false) | |
1090 | - | then (parseIntValue( | |
1105 | + | then (parseIntValue(go) > 0) | |
1091 | 1106 | else false) | |
1092 | - | then parseIntValue(split( | |
1107 | + | then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT]) | |
1093 | 1108 | else 0 | |
1094 | 1109 | } | |
1095 | 1110 | } | |
1096 | - | let | |
1097 | - | let | |
1098 | - | ( | |
1099 | - | } | |
1100 | - | ||
1101 | - | ||
1102 | - | func | |
1111 | + | let fT = am(this, A, ao, true) | |
1112 | + | let gp = fY(gk, gl, false, fT) | |
1113 | + | (gp == gp) | |
1114 | + | } | |
1115 | + | ||
1116 | + | ||
1117 | + | func gq (gr,gs,gt,gu) = if ((size(gr) != aF)) | |
1103 | 1118 | then throw("Wrong proportions data") | |
1104 | 1119 | else { | |
1105 | - | func | |
1106 | - | let | |
1107 | - | if ((0 > | |
1108 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1109 | - | else ( | |
1110 | - | } | |
1111 | - | ||
1112 | - | let | |
1113 | - | let | |
1114 | - | let | |
1115 | - | func | |
1116 | - | then | |
1117 | - | else | |
1118 | - | ||
1119 | - | func | |
1120 | - | then | |
1120 | + | func gv (eD,gw) = { | |
1121 | + | let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt)) | |
1122 | + | if ((0 > eV)) | |
1123 | + | then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt))) | |
1124 | + | else (eD :+ toString(eV)) | |
1125 | + | } | |
1126 | + | ||
1127 | + | let eF = cz | |
1128 | + | let eG = size(eF) | |
1129 | + | let eH = nil | |
1130 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1131 | + | then eJ | |
1132 | + | else gv(eJ, eF[eK]) | |
1133 | + | ||
1134 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1135 | + | then eJ | |
1121 | 1136 | else throw("List size exceeds 6") | |
1122 | 1137 | ||
1123 | - | | |
1138 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1124 | 1139 | } | |
1125 | 1140 | ||
1126 | 1141 | ||
1127 | - | func | |
1128 | - | let | |
1129 | - | makeString( | |
1130 | - | } | |
1131 | - | ||
1132 | - | ||
1133 | - | func | |
1134 | - | ||
1135 | - | ||
1136 | - | func | |
1137 | - | func | |
1138 | - | let | |
1139 | - | ( | |
1142 | + | func gx (gs,gt,gu) = { | |
1143 | + | let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_") | |
1144 | + | makeString(gq(gr, gs, gt, gu), "_") | |
1145 | + | } | |
1146 | + | ||
1147 | + | ||
1148 | + | func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)] | |
1149 | + | ||
1150 | + | ||
1151 | + | func gA (gB,gs,gC,gt,gD) = { | |
1152 | + | func gE (eD,gw) = { | |
1153 | + | let gF = ((fraction(gC, gD, a) * gs[gw]) * gt) | |
1154 | + | (eD :+ toString((parseIntValue(gB[gw]) + gF))) | |
1140 | 1155 | } | |
1141 | 1156 | ||
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | func | |
1147 | - | then | |
1148 | - | else | |
1149 | - | ||
1150 | - | func | |
1151 | - | then | |
1157 | + | let eO = { | |
1158 | + | let eF = cz | |
1159 | + | let eG = size(eF) | |
1160 | + | let eH = nil | |
1161 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1162 | + | then eJ | |
1163 | + | else gE(eJ, eF[eK]) | |
1164 | + | ||
1165 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1166 | + | then eJ | |
1152 | 1167 | else throw("List size exceeds 6") | |
1153 | 1168 | ||
1154 | - | | |
1169 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1155 | 1170 | } | |
1156 | - | makeString( | |
1157 | - | } | |
1158 | - | ||
1159 | - | ||
1160 | - | func | |
1161 | - | func | |
1162 | - | let | |
1163 | - | $Tuple2(( | |
1171 | + | makeString(eO, "_") | |
1172 | + | } | |
1173 | + | ||
1174 | + | ||
1175 | + | func gG (gs,gC,gt,gD) = { | |
1176 | + | func gE (eD,gw) = { | |
1177 | + | let gF = ((fraction(gC, gD, a) * gs[gw]) * gt) | |
1178 | + | $Tuple2((eD._1 :+ gF), (eD._2 + gF)) | |
1164 | 1179 | } | |
1165 | 1180 | ||
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | func | |
1170 | - | then | |
1171 | - | else | |
1172 | - | ||
1173 | - | func | |
1174 | - | then | |
1181 | + | let eF = cz | |
1182 | + | let eG = size(eF) | |
1183 | + | let eH = $Tuple2(nil, 0) | |
1184 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1185 | + | then eJ | |
1186 | + | else gE(eJ, eF[eK]) | |
1187 | + | ||
1188 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1189 | + | then eJ | |
1175 | 1190 | else throw("List size exceeds 6") | |
1176 | 1191 | ||
1177 | - | | |
1178 | - | } | |
1179 | - | ||
1180 | - | ||
1181 | - | func | |
1182 | - | let | |
1183 | - | let | |
1184 | - | if (( | |
1185 | - | then $Tuple2(makeString( | |
1186 | - | else if (( | |
1192 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1193 | + | } | |
1194 | + | ||
1195 | + | ||
1196 | + | func gH (gI,gJ,gK,gL) = { | |
1197 | + | let gM = gK._1 | |
1198 | + | let gN = gK._2 | |
1199 | + | if ((gN == 0)) | |
1200 | + | then $Tuple2(makeString(gI, "_"), makeString(gJ, "_")) | |
1201 | + | else if ((gL >= gN)) | |
1187 | 1202 | then { | |
1188 | - | func | |
1189 | - | ||
1190 | - | let | |
1191 | - | let | |
1192 | - | let | |
1193 | - | let | |
1194 | - | func | |
1195 | - | then | |
1196 | - | else | |
1197 | - | ||
1198 | - | func | |
1199 | - | then | |
1203 | + | func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw]))) | |
1204 | + | ||
1205 | + | let eO = { | |
1206 | + | let eF = cz | |
1207 | + | let eG = size(eF) | |
1208 | + | let eH = nil | |
1209 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1210 | + | then eJ | |
1211 | + | else gO(eJ, eF[eK]) | |
1212 | + | ||
1213 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1214 | + | then eJ | |
1200 | 1215 | else throw("List size exceeds 6") | |
1201 | 1216 | ||
1202 | - | | |
1217 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1203 | 1218 | } | |
1204 | - | $Tuple2(makeString( | |
1219 | + | $Tuple2(makeString(eO, "_"), makeString(gJ, "_")) | |
1205 | 1220 | } | |
1206 | 1221 | else { | |
1207 | - | func | |
1208 | - | let | |
1209 | - | $Tuple2(( | |
1222 | + | func gP (eD,gw) = { | |
1223 | + | let gQ = fraction(gM[gw], gL, gN) | |
1224 | + | $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ)))) | |
1210 | 1225 | } | |
1211 | 1226 | ||
1212 | - | let | |
1213 | - | let | |
1214 | - | let | |
1215 | - | let | |
1216 | - | func | |
1217 | - | then | |
1218 | - | else | |
1219 | - | ||
1220 | - | func | |
1221 | - | then | |
1227 | + | let eO = { | |
1228 | + | let eF = cz | |
1229 | + | let eG = size(eF) | |
1230 | + | let eH = $Tuple2(nil, nil) | |
1231 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1232 | + | then eJ | |
1233 | + | else gP(eJ, eF[eK]) | |
1234 | + | ||
1235 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1236 | + | then eJ | |
1222 | 1237 | else throw("List size exceeds 6") | |
1223 | 1238 | ||
1224 | - | | |
1239 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1225 | 1240 | } | |
1226 | - | $Tuple2(makeString( | |
1241 | + | $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_")) | |
1227 | 1242 | } | |
1228 | 1243 | } | |
1229 | 1244 | ||
1230 | 1245 | ||
1231 | - | func | |
1232 | - | then | |
1233 | - | else -( | |
1234 | - | ||
1235 | - | ||
1236 | - | let | |
1237 | - | ||
1238 | - | func | |
1239 | - | let | |
1240 | - | let | |
1246 | + | func gR (gS) = if ((gS >= toBigInt(0))) | |
1247 | + | then gS | |
1248 | + | else -(gS) | |
1249 | + | ||
1250 | + | ||
1251 | + | let gT = [[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]] | |
1252 | + | ||
1253 | + | func gU (dp,gV) = { | |
1254 | + | let gW = toInt((dp % dV)) | |
1255 | + | let gX = if ((gV[0] > gW)) | |
1241 | 1256 | then "A" | |
1242 | - | else if (( | |
1257 | + | else if ((gV[1] > gW)) | |
1243 | 1258 | then "B" | |
1244 | - | else if (( | |
1259 | + | else if ((gV[2] > gW)) | |
1245 | 1260 | then "C" | |
1246 | - | else if (( | |
1261 | + | else if ((gV[3] > gW)) | |
1247 | 1262 | then "D" | |
1248 | - | else if (( | |
1263 | + | else if ((gV[4] > gW)) | |
1249 | 1264 | then "E" | |
1250 | 1265 | else "F" | |
1251 | - | | |
1252 | - | } | |
1253 | - | ||
1254 | - | ||
1255 | - | func | |
1256 | - | let | |
1257 | - | func | |
1258 | - | ||
1259 | - | let | |
1260 | - | let | |
1261 | - | let | |
1262 | - | let | |
1263 | - | func | |
1264 | - | then | |
1265 | - | else | |
1266 | - | ||
1267 | - | func | |
1268 | - | then | |
1266 | + | gX | |
1267 | + | } | |
1268 | + | ||
1269 | + | ||
1270 | + | func gY (gZ,ha) = { | |
1271 | + | let hb = gT[ha] | |
1272 | + | func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ)) | |
1273 | + | ||
1274 | + | let gh = { | |
1275 | + | let eF = [1, 2, 3, 4, 5] | |
1276 | + | let eG = size(eF) | |
1277 | + | let eH = $Tuple2("", (gZ / dU)) | |
1278 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1279 | + | then eJ | |
1280 | + | else hc(eJ, eF[eK]) | |
1281 | + | ||
1282 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1283 | + | then eJ | |
1269 | 1284 | else throw("List size exceeds 5") | |
1270 | 1285 | ||
1271 | - | | |
1286 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
1272 | 1287 | } | |
1273 | - | | |
1274 | - | } | |
1275 | - | ||
1276 | - | ||
1277 | - | let | |
1278 | - | ||
1279 | - | let | |
1280 | - | ||
1281 | - | func | |
1282 | - | func | |
1283 | - | let | |
1284 | - | let | |
1285 | - | let | |
1288 | + | gh._1 | |
1289 | + | } | |
1290 | + | ||
1291 | + | ||
1292 | + | let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1293 | + | ||
1294 | + | let he = ["A", "B", "C", "D", "E", "F"] | |
1295 | + | ||
1296 | + | func hf (hg,gt) = { | |
1297 | + | func hh (eD,dn) = { | |
1298 | + | let fn = eD._2 | |
1299 | + | let hi = parseIntValue(dn) | |
1300 | + | let gS = if ((hi == 0)) | |
1286 | 1301 | then 0 | |
1287 | - | else if (( | |
1288 | - | then ( | |
1289 | - | else if (( | |
1302 | + | else if ((hi >= (4 * gt))) | |
1303 | + | then (hi / gt) | |
1304 | + | else if ((hi > (3 * gt))) | |
1290 | 1305 | then 3 | |
1291 | - | else ((( | |
1292 | - | $Tuple3(( | |
1306 | + | else (((hi - 1) / gt) + 1) | |
1307 | + | $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS)) | |
1293 | 1308 | } | |
1294 | 1309 | ||
1295 | - | let | |
1296 | - | let | |
1297 | - | let | |
1298 | - | let | |
1299 | - | func | |
1300 | - | then | |
1301 | - | else | |
1302 | - | ||
1303 | - | func | |
1304 | - | then | |
1310 | + | let gh = { | |
1311 | + | let eF = hg | |
1312 | + | let eG = size(eF) | |
1313 | + | let eH = $Tuple3(nil, 0, 0) | |
1314 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1315 | + | then eJ | |
1316 | + | else hh(eJ, eF[eK]) | |
1317 | + | ||
1318 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1319 | + | then eJ | |
1305 | 1320 | else throw("List size exceeds 6") | |
1306 | 1321 | ||
1307 | - | | |
1322 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1308 | 1323 | } | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | func | |
1313 | - | let | |
1314 | - | then ( | |
1315 | - | else | |
1316 | - | let | |
1324 | + | let hj = gh._1 | |
1325 | + | let hk = value(indexOf(hj, max(hj))) | |
1326 | + | let hl = (gh._3 - 25) | |
1327 | + | func hm (eD,cP) = { | |
1328 | + | let dx = if ((cP == hk)) | |
1329 | + | then (hj[cP] - hl) | |
1330 | + | else hj[cP] | |
1331 | + | let dB = if ((dx == 0)) | |
1317 | 1332 | then nil | |
1318 | - | else split(drop(toString(pow(10, 0, | |
1319 | - | let | |
1320 | - | func | |
1321 | - | ||
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | func | |
1327 | - | then | |
1328 | - | else | |
1329 | - | ||
1330 | - | func | |
1331 | - | then | |
1333 | + | else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "") | |
1334 | + | let fM = he[cP] | |
1335 | + | func hn (ho,hp) = (ho :+ fM) | |
1336 | + | ||
1337 | + | let hq = { | |
1338 | + | let eF = dB | |
1339 | + | let eG = size(eF) | |
1340 | + | let eH = nil | |
1341 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1342 | + | then eJ | |
1343 | + | else hn(eJ, eF[eK]) | |
1344 | + | ||
1345 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1346 | + | then eJ | |
1332 | 1347 | else throw("List size exceeds 25") | |
1333 | 1348 | ||
1334 | - | | |
1335 | - | } | |
1336 | - | ( | |
1349 | + | hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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) | |
1350 | + | } | |
1351 | + | (eD ++ hq) | |
1337 | 1352 | } | |
1338 | 1353 | ||
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | func | |
1344 | - | then | |
1345 | - | else | |
1346 | - | ||
1347 | - | func | |
1348 | - | then | |
1354 | + | let eO = { | |
1355 | + | let eF = cz | |
1356 | + | let eG = size(eF) | |
1357 | + | let eH = nil | |
1358 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1359 | + | then eJ | |
1360 | + | else hm(eJ, eF[eK]) | |
1361 | + | ||
1362 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1363 | + | then eJ | |
1349 | 1364 | else throw("List size exceeds 6") | |
1350 | 1365 | ||
1351 | - | | |
1366 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1352 | 1367 | } | |
1353 | - | func | |
1354 | - | ||
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | func | |
1359 | - | then | |
1360 | - | else | |
1361 | - | ||
1362 | - | func | |
1363 | - | then | |
1368 | + | func ht (eD,fn) = (eD + eO[fn]) | |
1369 | + | ||
1370 | + | let eF = hd | |
1371 | + | let eG = size(eF) | |
1372 | + | let eH = "" | |
1373 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1374 | + | then eJ | |
1375 | + | else ht(eJ, eF[eK]) | |
1376 | + | ||
1377 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1378 | + | then eJ | |
1364 | 1379 | else throw("List size exceeds 25") | |
1365 | 1380 | ||
1366 | - | | |
1367 | - | } | |
1368 | - | ||
1369 | - | ||
1370 | - | func | |
1371 | - | let | |
1372 | - | [toString(valueOrElse(parseInt( | |
1373 | - | then | |
1374 | - | else "0_0_0_0_0_0", if ((size(split( | |
1375 | - | then | |
1376 | - | else "0_0_0_0_0_0", | |
1377 | - | } | |
1378 | - | ||
1379 | - | ||
1380 | - | func | |
1381 | - | let | |
1382 | - | (( | |
1383 | - | } | |
1384 | - | ||
1385 | - | ||
1386 | - | func | |
1387 | - | let | |
1388 | - | func | |
1389 | - | ||
1390 | - | func | |
1391 | - | let | |
1392 | - | let | |
1393 | - | $Tuple2(( | |
1381 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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) | |
1382 | + | } | |
1383 | + | ||
1384 | + | ||
1385 | + | func hw (hx) = { | |
1386 | + | let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1387 | + | [toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF)) | |
1388 | + | then gg[bh] | |
1389 | + | else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF)) | |
1390 | + | then gg[bi] | |
1391 | + | else "0_0_0_0_0_0", gg[bj]] | |
1392 | + | } | |
1393 | + | ||
1394 | + | ||
1395 | + | func hy (hz) = { | |
1396 | + | let fb = split(hz, "_") | |
1397 | + | ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0])) | |
1398 | + | } | |
1399 | + | ||
1400 | + | ||
1401 | + | func hA (hB) = { | |
1402 | + | let hC = hB[ba] | |
1403 | + | func hD (eD,hE) = (eD + parseIntValue(hE)) | |
1404 | + | ||
1405 | + | func hF (eD,hE) = { | |
1406 | + | let cP = eD._1 | |
1407 | + | let ew = (((parseIntValue(hE) + aW) - 1) / aW) | |
1408 | + | $Tuple2((cP + 1), (eD._2 + (ew * ct))) | |
1394 | 1409 | } | |
1395 | 1410 | ||
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | func | |
1401 | - | then | |
1402 | - | else | |
1403 | - | ||
1404 | - | func | |
1405 | - | then | |
1411 | + | let hG = { | |
1412 | + | let eF = split(hB[aY], "_") | |
1413 | + | let eG = size(eF) | |
1414 | + | let eH = 0 | |
1415 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1416 | + | then eJ | |
1417 | + | else hD(eJ, eF[eK]) | |
1418 | + | ||
1419 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1420 | + | then eJ | |
1406 | 1421 | else throw("List size exceeds 6") | |
1407 | 1422 | ||
1408 | - | | |
1423 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1409 | 1424 | } | |
1410 | - | let | |
1411 | - | let | |
1412 | - | let | |
1413 | - | let | |
1414 | - | func | |
1415 | - | then | |
1416 | - | else | |
1417 | - | ||
1418 | - | func | |
1419 | - | then | |
1425 | + | let hH = { | |
1426 | + | let eF = split(hB[aZ], "_") | |
1427 | + | let eG = size(eF) | |
1428 | + | let eH = 0 | |
1429 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1430 | + | then eJ | |
1431 | + | else hD(eJ, eF[eK]) | |
1432 | + | ||
1433 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1434 | + | then eJ | |
1420 | 1435 | else throw("List size exceeds 6") | |
1421 | 1436 | ||
1422 | - | | |
1437 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1423 | 1438 | } | |
1424 | - | let | |
1439 | + | let hI = if ((hC == "")) | |
1425 | 1440 | then 0 | |
1426 | - | else ( let | |
1427 | - | let | |
1428 | - | let | |
1429 | - | func | |
1430 | - | then | |
1431 | - | else | |
1432 | - | ||
1433 | - | func | |
1434 | - | then | |
1441 | + | else ( let eF = split_4C(hC, "_") | |
1442 | + | let eG = size(eF) | |
1443 | + | let eH = $Tuple2(0, 0) | |
1444 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1445 | + | then eJ | |
1446 | + | else hF(eJ, eF[eK]) | |
1447 | + | ||
1448 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1449 | + | then eJ | |
1435 | 1450 | else throw("List size exceeds 50") | |
1436 | 1451 | ||
1437 | - | | |
1438 | - | (( | |
1439 | - | } | |
1440 | - | ||
1441 | - | ||
1442 | - | func | |
1443 | - | let | |
1444 | - | let | |
1445 | - | let | |
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | then makeString(["0", toString( | |
1452 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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 | |
1453 | + | ((hG + hH) + hI) | |
1454 | + | } | |
1455 | + | ||
1456 | + | ||
1457 | + | func hJ (hK,hL,hM) = { | |
1458 | + | let hz = ((toString(hL) + "_") + toString(hM)) | |
1459 | + | let hN = hy(hz) | |
1460 | + | let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1461 | + | let hP = split_4C(hO, ":") | |
1462 | + | let hQ = hA(hP) | |
1463 | + | let hR = if ((5 > size(hP))) | |
1464 | + | then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_") | |
1450 | 1465 | else { | |
1451 | - | let | |
1452 | - | let | |
1453 | - | let | |
1454 | - | then parseIntValue( | |
1455 | - | else | |
1456 | - | makeString([toString( | |
1457 | - | } | |
1458 | - | [ | |
1459 | - | then | |
1460 | - | else "0_0_0_0_0_0", if ((size(split( | |
1461 | - | then | |
1462 | - | else "0_0_0_0_0_0", | |
1463 | - | } | |
1464 | - | ||
1465 | - | ||
1466 | - | func | |
1467 | - | let | |
1468 | - | let | |
1469 | - | (( | |
1470 | - | } | |
1471 | - | ||
1472 | - | ||
1473 | - | func | |
1466 | + | let hS = split(hP[bb], "_") | |
1467 | + | let hT = parseIntValue(hS[bc]) | |
1468 | + | let hU = if ((size(hS) > 1)) | |
1469 | + | then parseIntValue(hS[bd]) | |
1470 | + | else hQ | |
1471 | + | makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_") | |
1472 | + | } | |
1473 | + | [hP[aX], if ((size(split(hP[aY], "_")) == aF)) | |
1474 | + | then hP[aY] | |
1475 | + | else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF)) | |
1476 | + | then hP[aZ] | |
1477 | + | else "0_0_0_0_0_0", hP[ba], hR] | |
1478 | + | } | |
1479 | + | ||
1480 | + | ||
1481 | + | func hV (hB) = { | |
1482 | + | let hW = hA(hB) | |
1483 | + | let hX = parseIntValue(split(hB[bb], "_")[bc]) | |
1484 | + | ((hy(hB[aX]) - hW) - hX) | |
1485 | + | } | |
1486 | + | ||
1487 | + | ||
1488 | + | func hY (hZ,hB,ia) = if ((size(hZ) != 3)) | |
1474 | 1489 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1475 | 1490 | else { | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1491 | + | let ib = split(hZ[0], "_") | |
1492 | + | let ic = split(hZ[1], "_") | |
1493 | + | let id = if ((hZ[2] == "")) | |
1479 | 1494 | then nil | |
1480 | - | else split_4C( | |
1481 | - | if ((size( | |
1495 | + | else split_4C(hZ[2], "_") | |
1496 | + | if ((size(ib) != aF)) | |
1482 | 1497 | then throw("All 6 resources should be passed") | |
1483 | - | else if ((size( | |
1498 | + | else if ((size(ic) != aF)) | |
1484 | 1499 | then throw("All 6 materials should be passed") | |
1485 | 1500 | else { | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1501 | + | let gL = hV(hB) | |
1502 | + | let ie = split(hB[aY], "_") | |
1503 | + | let if = split(hB[aZ], "_") | |
1504 | + | let ig = if ((hB[ba] == "")) | |
1490 | 1505 | then nil | |
1491 | - | else split_4C( | |
1492 | - | let | |
1493 | - | let | |
1494 | - | let | |
1506 | + | else split_4C(hB[ba], "_") | |
1507 | + | let gJ = split(ia[bh], "_") | |
1508 | + | let ih = split(ia[bi], "_") | |
1509 | + | let ii = if ((ia[bj] == "")) | |
1495 | 1510 | then nil | |
1496 | - | else split_4C( | |
1497 | - | func | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | if (( | |
1503 | - | then $Tuple4(( | |
1504 | - | else if (( | |
1505 | - | then if (( | |
1506 | - | then throw((((("Attempt to take " + | |
1507 | - | else $Tuple4(( | |
1508 | - | else if ((-( | |
1509 | - | then throw((((("Attempt to take " + toString(-( | |
1510 | - | else $Tuple4(( | |
1511 | + | else split_4C(ia[bj], "_") | |
1512 | + | func ij (eD,hE) = { | |
1513 | + | let gw = eD._1 | |
1514 | + | let ik = parseIntValue(hE) | |
1515 | + | let il = parseIntValue(ie[gw]) | |
1516 | + | let im = parseIntValue(gJ[gw]) | |
1517 | + | if ((ik == 0)) | |
1518 | + | then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4) | |
1519 | + | else if ((ik > 0)) | |
1520 | + | then if ((ik > im)) | |
1521 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available")) | |
1522 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik)) | |
1523 | + | else if ((-(ik) > il)) | |
1524 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available")) | |
1525 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik)) | |
1511 | 1526 | } | |
1512 | 1527 | ||
1513 | - | let | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | func | |
1518 | - | then | |
1519 | - | else | |
1520 | - | ||
1521 | - | func | |
1522 | - | then | |
1528 | + | let eO = { | |
1529 | + | let eF = ib | |
1530 | + | let eG = size(eF) | |
1531 | + | let eH = $Tuple4(0, nil, nil, 0) | |
1532 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1533 | + | then eJ | |
1534 | + | else ij(eJ, eF[eK]) | |
1535 | + | ||
1536 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1537 | + | then eJ | |
1523 | 1538 | else throw("List size exceeds 6") | |
1524 | 1539 | ||
1525 | - | | |
1540 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1526 | 1541 | } | |
1527 | - | func | |
1528 | - | let | |
1529 | - | let | |
1530 | - | let | |
1531 | - | let | |
1532 | - | if (( | |
1533 | - | then $Tuple4(( | |
1534 | - | else if (( | |
1535 | - | then if (( | |
1536 | - | then throw((((("Attempt to take " + | |
1537 | - | else $Tuple4(( | |
1538 | - | else if ((-( | |
1539 | - | then throw((((("Attempt to take " + toString(-( | |
1540 | - | else $Tuple4(( | |
1542 | + | func in (eD,hE) = { | |
1543 | + | let gw = eD._1 | |
1544 | + | let ik = parseIntValue(hE) | |
1545 | + | let io = parseIntValue(if[gw]) | |
1546 | + | let ip = parseIntValue(ih[gw]) | |
1547 | + | if ((ik == 0)) | |
1548 | + | then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4) | |
1549 | + | else if ((ik > 0)) | |
1550 | + | then if ((ik > ip)) | |
1551 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available")) | |
1552 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik)) | |
1553 | + | else if ((-(ik) > io)) | |
1554 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available")) | |
1555 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik)) | |
1541 | 1556 | } | |
1542 | 1557 | ||
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | func | |
1548 | - | then | |
1549 | - | else | |
1550 | - | ||
1551 | - | func | |
1552 | - | then | |
1558 | + | let gc = { | |
1559 | + | let eF = ic | |
1560 | + | let eG = size(eF) | |
1561 | + | let eH = $Tuple4(0, nil, nil, eO._4) | |
1562 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1563 | + | then eJ | |
1564 | + | else in(eJ, eF[eK]) | |
1565 | + | ||
1566 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1567 | + | then eJ | |
1553 | 1568 | else throw("List size exceeds 6") | |
1554 | 1569 | ||
1555 | - | | |
1570 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1556 | 1571 | } | |
1557 | - | func | |
1558 | - | let | |
1559 | - | let | |
1560 | - | let | |
1561 | - | then parseIntValue( | |
1572 | + | func iq (eD,hE) = { | |
1573 | + | let gw = eD._1 | |
1574 | + | let ik = parseIntValue(hE) | |
1575 | + | let ir = if ((size(ig) > gw)) | |
1576 | + | then parseIntValue(ig[gw]) | |
1562 | 1577 | else 0 | |
1563 | - | let | |
1564 | - | then parseIntValue( | |
1578 | + | let is = if ((size(ii) > gw)) | |
1579 | + | then parseIntValue(ii[gw]) | |
1565 | 1580 | else 0 | |
1566 | - | if (( | |
1567 | - | then $Tuple4(( | |
1568 | - | else if (( | |
1569 | - | then if (( | |
1570 | - | then throw((((("Attempt to take " + | |
1581 | + | if ((ik == 0)) | |
1582 | + | then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4) | |
1583 | + | else if ((ik > 0)) | |
1584 | + | then if ((ik > is)) | |
1585 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available")) | |
1571 | 1586 | else { | |
1572 | - | let | |
1573 | - | $Tuple4(( | |
1587 | + | let fF = (et((ir + ik), aW) - et(ir, aW)) | |
1588 | + | $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF)) | |
1574 | 1589 | } | |
1575 | - | else if ((-( | |
1576 | - | then throw((((("Attempt to take " + toString(-( | |
1590 | + | else if ((-(ik) > ir)) | |
1591 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available")) | |
1577 | 1592 | else { | |
1578 | - | let | |
1579 | - | $Tuple4(( | |
1593 | + | let fF = (et((ir + ik), aW) - et(ir, aW)) | |
1594 | + | $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF)) | |
1580 | 1595 | } | |
1581 | 1596 | } | |
1582 | 1597 | ||
1583 | - | let | |
1598 | + | let gg = if ((size(id) != 0)) | |
1584 | 1599 | then { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | func | |
1589 | - | then | |
1590 | - | else | |
1591 | - | ||
1592 | - | func | |
1593 | - | then | |
1600 | + | let eF = id | |
1601 | + | let eG = size(eF) | |
1602 | + | let eH = $Tuple4(0, nil, nil, gc._4) | |
1603 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1604 | + | then eJ | |
1605 | + | else iq(eJ, eF[eK]) | |
1606 | + | ||
1607 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1608 | + | then eJ | |
1594 | 1609 | else throw("List size exceeds 50") | |
1595 | 1610 | ||
1596 | - | | |
1611 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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) | |
1597 | 1612 | } | |
1598 | - | else $Tuple4(0, | |
1599 | - | let | |
1600 | - | if (( | |
1601 | - | then throw((((("Attempt to put total " + toString( | |
1602 | - | else $Tuple7(makeString( | |
1613 | + | else $Tuple4(0, ig, ii, gc._4) | |
1614 | + | let it = gg._4 | |
1615 | + | if ((it > gL)) | |
1616 | + | then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left")) | |
1617 | + | else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it) | |
1603 | 1618 | } | |
1604 | 1619 | } | |
1605 | 1620 | ||
1606 | 1621 | ||
1607 | - | func | |
1608 | - | let | |
1609 | - | let | |
1610 | - | let | |
1611 | - | let | |
1612 | - | let | |
1613 | - | let | |
1614 | - | let | |
1615 | - | let | |
1616 | - | let | |
1617 | - | let | |
1618 | - | $Tuple2([IntegerEntry( | |
1619 | - | } | |
1620 | - | ||
1621 | - | ||
1622 | - | func | |
1622 | + | func iu (iv,iw) = { | |
1623 | + | let bK = toString(iv) | |
1624 | + | let ix = gR(toBigInt(iw)) | |
1625 | + | let iy = valueOrElse(getInteger(eb()), (ea + 1)) | |
1626 | + | let ef = toString(iy) | |
1627 | + | let ha = toInt((ix % dU)) | |
1628 | + | let gz = gY(ix, ha) | |
1629 | + | let di = aO[ha] | |
1630 | + | let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false) | |
1631 | + | let bo = calculateAssetId(iz) | |
1632 | + | let iA = toBase58String(bo) | |
1633 | + | $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di)) | |
1634 | + | } | |
1635 | + | ||
1636 | + | ||
1637 | + | func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK))) | |
1623 | 1638 | then throw("signature does not match") | |
1624 | 1639 | else { | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | let | |
1632 | - | let | |
1633 | - | if (if (( | |
1640 | + | let fb = split_4C(toUtf8String(iC), ";") | |
1641 | + | let iE = split_4C(fb[0], "|") | |
1642 | + | let iF = split(iE[eo], "_") | |
1643 | + | let iG = parseIntValue(iF[0]) | |
1644 | + | let iH = parseIntValue(iF[1]) | |
1645 | + | let iI = split(fb[1], ":") | |
1646 | + | let iJ = iI[0] | |
1647 | + | let iK = parseIntValue(iE[ep]) | |
1648 | + | if (if ((iK > (lastBlock.timestamp + dM))) | |
1634 | 1649 | then true | |
1635 | - | else ((lastBlock.timestamp - | |
1636 | - | then throw(((("signature outdated: logTime=" + toString( | |
1650 | + | else ((lastBlock.timestamp - dM) > iK)) | |
1651 | + | then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1637 | 1652 | else { | |
1638 | - | let | |
1639 | - | let | |
1640 | - | if (( | |
1641 | - | then throw(((("Tx ids don't match! In state: " + | |
1653 | + | let iL = iI[1] | |
1654 | + | let iM = valueOrElse(getString(dv(bK)), "") | |
1655 | + | if ((iM != iL)) | |
1656 | + | then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL)) | |
1642 | 1657 | else { | |
1643 | - | let | |
1644 | - | let | |
1645 | - | let | |
1646 | - | let | |
1647 | - | if (( | |
1648 | - | then throw(((("oldHealth=" + toString( | |
1649 | - | else if ((0 >= | |
1658 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
1659 | + | let iN = z(A) | |
1660 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
1661 | + | let iP = valueOrElse(getInteger(iN), iO) | |
1662 | + | if ((iP != iG)) | |
1663 | + | then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG))) | |
1664 | + | else if ((0 >= iG)) | |
1650 | 1665 | then throw("You can't fly with zero health") | |
1651 | - | else if (!( | |
1666 | + | else if (!(gi(A))) | |
1652 | 1667 | then throw("Equipment incompatible") | |
1653 | 1668 | else { | |
1654 | - | let | |
1655 | - | then | |
1669 | + | let iQ = if ((size(iE) > eq)) | |
1670 | + | then iE[eq] | |
1656 | 1671 | else "" | |
1657 | - | let | |
1658 | - | then | |
1672 | + | let iR = if ((size(iE) > er)) | |
1673 | + | then iE[er] | |
1659 | 1674 | else "" | |
1660 | - | let | |
1661 | - | then ( | |
1675 | + | let iS = if (if ((iH > 0)) | |
1676 | + | then (iQ == "$") | |
1662 | 1677 | else false) | |
1663 | - | then | |
1678 | + | then do(invoke(cQ, "sendUsdtPrize", [bK], nil)) | |
1664 | 1679 | else 0 | |
1665 | - | $Tuple5( | |
1680 | + | $Tuple5(iH, A, iS, iJ, iR) | |
1666 | 1681 | } | |
1667 | 1682 | } | |
1668 | 1683 | } | |
1669 | 1684 | } | |
1670 | 1685 | ||
1671 | 1686 | ||
1672 | - | func | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | let | |
1677 | - | (( | |
1678 | - | } | |
1679 | - | ||
1680 | - | ||
1681 | - | func | |
1682 | - | let | |
1683 | - | then $Tuple2( | |
1687 | + | func iT (P,iU) = { | |
1688 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
1689 | + | let iV = valueOrElse(getInteger(br(aE, P)), 0) | |
1690 | + | let iW = (hM / 6) | |
1691 | + | let iX = (hM / 7) | |
1692 | + | ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5))) | |
1693 | + | } | |
1694 | + | ||
1695 | + | ||
1696 | + | func iY (c,iZ,ja) = { | |
1697 | + | let jb = if ((iZ == el)) | |
1698 | + | then $Tuple2(ja, valueOrElse(getString(bG(c)), "")) | |
1684 | 1699 | else { | |
1685 | - | let | |
1686 | - | let | |
1687 | - | let | |
1688 | - | if (( | |
1689 | - | then throw((("Duck location type is " + | |
1690 | - | else $Tuple2( | |
1691 | - | } | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | if (( | |
1699 | - | then throw(( | |
1700 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1701 | + | let jc = valueOrElse(getString(bI(A)), aJ) | |
1702 | + | let ce = split(value(jc), "_") | |
1703 | + | if ((ce[bl] != "L")) | |
1704 | + | then throw((("Duck location type is " + ce[bl]) + ", but should be L")) | |
1705 | + | else $Tuple2(ce[bm], A) | |
1706 | + | } | |
1707 | + | let P = jb._1 | |
1708 | + | let jd = jb._2 | |
1709 | + | let je = value(assetInfo(fromBase58String(P))) | |
1710 | + | let jf = bq(P) | |
1711 | + | let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked")) | |
1712 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
1713 | + | if ((jh != c)) | |
1714 | + | then throw((aC + " is not yours")) | |
1700 | 1715 | else { | |
1701 | - | let | |
1702 | - | $Tuple4( | |
1703 | - | } | |
1704 | - | } | |
1705 | - | ||
1706 | - | ||
1707 | - | func | |
1716 | + | let ji = split(je.description, "_") | |
1717 | + | $Tuple4(jd, P, ji, jg) | |
1718 | + | } | |
1719 | + | } | |
1720 | + | ||
1721 | + | ||
1722 | + | func jj (c,eu,iZ,ja) = if ((0 > eu)) | |
1708 | 1723 | then throw("Negative amount") | |
1709 | 1724 | else { | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | let | |
1714 | - | if ((0 > | |
1715 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1725 | + | let fM = iY(c, iZ, ja) | |
1726 | + | let ds = fM._3[cX] | |
1727 | + | let gs = gy(fM._3[cY]) | |
1728 | + | let gC = (lastBlock.timestamp - fM._4) | |
1729 | + | if ((0 > gC)) | |
1730 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1716 | 1731 | else { | |
1717 | - | let | |
1718 | - | let | |
1719 | - | let | |
1720 | - | if (( | |
1721 | - | then throw(((("Not enough resources, available = " + toString( | |
1732 | + | let iU = dr(ds) | |
1733 | + | let jk = iT(fM._2, iU) | |
1734 | + | let jl = fraction(gC, (jk * iU), a) | |
1735 | + | if ((eu > jl)) | |
1736 | + | then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu))) | |
1722 | 1737 | else { | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | let | |
1732 | - | if (if (( | |
1733 | - | then ( | |
1738 | + | let jm = fraction((jl - eu), a, (jk * iU)) | |
1739 | + | let jn = (lastBlock.timestamp - jm) | |
1740 | + | let hL = (iU / cu) | |
1741 | + | let gK = gG(gs, (gC - jm), hL, jk) | |
1742 | + | let hK = bw(fM._2) | |
1743 | + | let hM = valueOrElse(getInteger(bx(fM._2)), 0) | |
1744 | + | let hB = hJ(hK, hL, hM) | |
1745 | + | let hS = split(hB[bb], "_") | |
1746 | + | let gL = parseIntValue(hS[be]) | |
1747 | + | if (if ((iZ == el)) | |
1748 | + | then (eu > gL) | |
1734 | 1749 | else false) | |
1735 | - | then throw((("Only " + toString( | |
1750 | + | then throw((("Only " + toString(gL)) + " space left in warehouse")) | |
1736 | 1751 | else { | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | then $Tuple4( | |
1743 | - | else if (( | |
1744 | - | then $Tuple4( | |
1752 | + | let hx = bH(fM._1) | |
1753 | + | let ia = hw(hx) | |
1754 | + | let gJ = split(ia[bh], "_") | |
1755 | + | let gI = split(hB[aY], "_") | |
1756 | + | let jo = if ((iZ == el)) | |
1757 | + | then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2)) | |
1758 | + | else if ((iZ == em)) | |
1759 | + | then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be])) | |
1745 | 1760 | else { | |
1746 | - | let | |
1747 | - | let | |
1748 | - | $Tuple4( | |
1761 | + | let jp = gH(gI, gJ, gK, gL) | |
1762 | + | let jq = min([parseIntValue(hS[be]), gK._2]) | |
1763 | + | $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq)) | |
1749 | 1764 | } | |
1750 | - | let | |
1751 | - | let | |
1752 | - | let | |
1753 | - | let | |
1754 | - | $Tuple5([IntegerEntry( | |
1765 | + | let jr = jo._1 | |
1766 | + | let js = jo._2 | |
1767 | + | let jt = jo._3 | |
1768 | + | let ju = jo._4 | |
1769 | + | $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")]) | |
1755 | 1770 | } | |
1756 | 1771 | } | |
1757 | 1772 | } | |
1758 | 1773 | } | |
1759 | 1774 | ||
1760 | 1775 | ||
1761 | - | func | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | | |
1766 | - | } | |
1767 | - | ||
1768 | - | ||
1769 | - | func | |
1770 | - | let | |
1771 | - | let | |
1772 | - | let | |
1773 | - | let | |
1774 | - | let | |
1775 | - | if (if (!( | |
1776 | - | then ( | |
1776 | + | func jv (c,P,iU,iZ) = { | |
1777 | + | let jf = bq(P) | |
1778 | + | let jg = value(getInteger(jf)) | |
1779 | + | let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU) | |
1780 | + | jj(c, jl, iZ, P) | |
1781 | + | } | |
1782 | + | ||
1783 | + | ||
1784 | + | func jw (eQ,iv,jx,P) = { | |
1785 | + | let c = toString(iv) | |
1786 | + | let fM = iY(c, en, P) | |
1787 | + | let iU = dr(fM._3[cX]) | |
1788 | + | let jy = bx(fM._2) | |
1789 | + | let jz = valueOrElse(getInteger(jy), 0) | |
1790 | + | if (if (!(cj)) | |
1791 | + | then (jz >= 3) | |
1777 | 1792 | else false) | |
1778 | 1793 | then throw("Currently max infrastructure level = 3") | |
1779 | 1794 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | if (if ( | |
1783 | - | then ( | |
1795 | + | let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2) | |
1796 | + | let al = (jz + 1) | |
1797 | + | if (if (cj) | |
1798 | + | then (al > jA) | |
1784 | 1799 | else false) | |
1785 | - | then throw(("Currently max infrastructure level = " + toString( | |
1800 | + | then throw(("Currently max infrastructure level = " + toString(jA))) | |
1786 | 1801 | else { | |
1787 | - | let | |
1788 | - | if (if (!( | |
1789 | - | then ( | |
1802 | + | let jB = fraction(dQ, (iU * al), cu) | |
1803 | + | if (if (!(eQ)) | |
1804 | + | then (jx != jB) | |
1790 | 1805 | else false) | |
1791 | - | then throw(("Payment attached should be " + toString( | |
1806 | + | then throw(("Payment attached should be " + toString(jB))) | |
1792 | 1807 | else { | |
1793 | - | let | |
1794 | - | let | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | $Tuple3(([IntegerEntry( | |
1808 | + | let hx = bH(fM._1) | |
1809 | + | let ia = hw(hx) | |
1810 | + | let jC = split(ia[bi], "_") | |
1811 | + | let jD = fraction(cp, (iU * al), cu) | |
1812 | + | let jE = makeString(eP(eQ, jC, jD), "_") | |
1813 | + | let jF = jv(c, fM._2, iU, en) | |
1814 | + | let jG = jF._5 | |
1815 | + | let jH = hy(jG[aX]) | |
1816 | + | let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_") | |
1817 | + | let jJ = hy(jI) | |
1818 | + | let hS = split(jG[bb], "_") | |
1819 | + | let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_") | |
1820 | + | $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD) | |
1806 | 1821 | } | |
1807 | 1822 | } | |
1808 | 1823 | } | |
1809 | 1824 | } | |
1810 | 1825 | ||
1811 | 1826 | ||
1812 | - | func | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | $Tuple2([IntegerEntry( | |
1820 | - | } | |
1821 | - | ||
1822 | - | ||
1823 | - | func | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | let | |
1830 | - | $Tuple2([IntegerEntry( | |
1831 | - | } | |
1832 | - | ||
1833 | - | ||
1834 | - | func | |
1835 | - | let | |
1836 | - | let | |
1837 | - | let | |
1838 | - | if (!(isDefined( | |
1827 | + | func jL (A,jM) = { | |
1828 | + | let jN = D(A) | |
1829 | + | let jO = C(A) | |
1830 | + | let af = valueOrElse(getInteger(an, jO), 0) | |
1831 | + | let ak = (af + jM) | |
1832 | + | let jP = ai(valueOrElse(getInteger(an, jN), 0), ak) | |
1833 | + | let jQ = E(A) | |
1834 | + | $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak) | |
1835 | + | } | |
1836 | + | ||
1837 | + | ||
1838 | + | func jR (c,jM) = { | |
1839 | + | let jN = H(c) | |
1840 | + | let jO = G(c) | |
1841 | + | let af = valueOrElse(getInteger(an, jO), 0) | |
1842 | + | let ak = (af + jM) | |
1843 | + | let jP = ai(valueOrElse(getInteger(an, jN), 0), ak) | |
1844 | + | let jQ = I(c) | |
1845 | + | $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak) | |
1846 | + | } | |
1847 | + | ||
1848 | + | ||
1849 | + | func jS (c) = { | |
1850 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1851 | + | let jT = bB(c) | |
1852 | + | let jU = getString(jT) | |
1853 | + | if (!(isDefined(jU))) | |
1839 | 1854 | then throw("You are not eligible for ONBOARD artifact") | |
1840 | 1855 | else { | |
1841 | - | let | |
1842 | - | let | |
1843 | - | if (isDefined( | |
1844 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1856 | + | let jV = bD(c) | |
1857 | + | let jW = getString(jV) | |
1858 | + | if (isDefined(jW)) | |
1859 | + | then throw(("You already used your ONBOARD artifact on duck " + value(jW))) | |
1845 | 1860 | else { | |
1846 | - | let | |
1847 | - | let | |
1848 | - | if (isDefined( | |
1849 | - | then throw(((("The duck " + | |
1850 | - | else ([StringEntry( | |
1861 | + | let jX = bC(A) | |
1862 | + | let jY = getString(jX) | |
1863 | + | if (isDefined(jY)) | |
1864 | + | then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY))) | |
1865 | + | else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1) | |
1851 | 1866 | } | |
1852 | 1867 | } | |
1853 | 1868 | } | |
1854 | 1869 | ||
1855 | 1870 | ||
1856 | - | func | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1860 | - | let | |
1861 | - | if ((valueOrElse(getInteger( | |
1871 | + | func jZ (c,ja) = { | |
1872 | + | let fM = iY(c, en, ja) | |
1873 | + | let P = fM._2 | |
1874 | + | let iU = dr(fM._3[cX]) | |
1875 | + | let ka = br(aE, P) | |
1876 | + | if ((valueOrElse(getInteger(ka), 0) > 0)) | |
1862 | 1877 | then throw("Presale artifact is already activated") | |
1863 | - | else if ((parseIntValue( | |
1864 | - | then throw(((( | |
1878 | + | else if ((parseIntValue(fM._3[cW]) > ea)) | |
1879 | + | then throw((((aC + " ") + P) + " is not eligible for presale artifact")) | |
1865 | 1880 | else { | |
1866 | - | let | |
1867 | - | ((( | |
1881 | + | let jF = jv(c, P, iU, en) | |
1882 | + | (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":"))) | |
1868 | 1883 | } | |
1869 | 1884 | } | |
1870 | 1885 | ||
1871 | 1886 | ||
1872 | - | func | |
1873 | - | let | |
1874 | - | let | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (( | |
1887 | + | func kb (A) = { | |
1888 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
1889 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
1890 | + | let ax = lastBlock.timestamp | |
1891 | + | let cf = bX(cU, cd) | |
1892 | + | let bZ = cf[bT] | |
1893 | + | let ca = cf[bU] | |
1894 | + | if ((jc[bl] != "T")) | |
1880 | 1895 | then false | |
1881 | - | else if (if (if ((parseIntValue( | |
1882 | - | then ( | |
1896 | + | else if (if (if ((parseIntValue(jc[bk]) == cd)) | |
1897 | + | then (ca[bW] == "INPROGRESS") | |
1883 | 1898 | else false) | |
1884 | - | then (parseIntValue( | |
1899 | + | then (parseIntValue(bZ[bV]) > ax) | |
1885 | 1900 | else false) | |
1886 | 1901 | then throw("Your duck is taking part in the tournament") | |
1887 | - | else do(invoke(this, "exitTournamentInternal", [z], nil)) | |
1888 | - | } | |
1889 | - | ||
1890 | - | ||
1891 | - | func jV (jW,aj,jX,b,jY,jZ) = { | |
1892 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
1893 | - | if (jU(z)) | |
1902 | + | else dq(invoke(this, "exitTournamentInternal", [A], nil)) | |
1903 | + | } | |
1904 | + | ||
1905 | + | ||
1906 | + | func kc (A) = { | |
1907 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
1908 | + | let ax = lastBlock.timestamp | |
1909 | + | if ((jc[bl] != "D")) | |
1910 | + | then false | |
1911 | + | else { | |
1912 | + | let kd = parseIntValue(jc[bk]) | |
1913 | + | let ke = parseIntValue(jc[bm]) | |
1914 | + | if (if ((ax > (kd + dN))) | |
1915 | + | then (3 > ke) | |
1916 | + | else false) | |
1917 | + | then throw("Your duck is on delivery mission") | |
1918 | + | else dq(invoke(this, "exitDeliveryInternal", [A], nil)) | |
1919 | + | } | |
1920 | + | } | |
1921 | + | ||
1922 | + | ||
1923 | + | func kf (kg,al,kh,c,ki,kj) = { | |
1924 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1925 | + | if (kb(A)) | |
1894 | 1926 | then throw("mergeInternal_checkTournament") | |
1927 | + | else if (kc(A)) | |
1928 | + | then throw("mergeInternal_checkDelivery") | |
1929 | + | else { | |
1930 | + | func kk (eD,P) = { | |
1931 | + | let je = value(assetInfo(fromBase58String(P))) | |
1932 | + | let jf = bq(P) | |
1933 | + | let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked")) | |
1934 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
1935 | + | if ((jh != c)) | |
1936 | + | then throw((aC + " is not yours")) | |
1937 | + | else { | |
1938 | + | let ji = split(je.description, "_") | |
1939 | + | let di = ji[cZ] | |
1940 | + | if (if ((eD._3 != "")) | |
1941 | + | then (eD._3 != di) | |
1942 | + | else false) | |
1943 | + | then throw("Lands should be on the same continent to merge") | |
1944 | + | else { | |
1945 | + | let ds = ji[cX] | |
1946 | + | let kl = eD._1 | |
1947 | + | let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed") | |
1948 | + | let km = (take(kl, gw) + drop(kl, (gw + 1))) | |
1949 | + | let iU = dr(ds) | |
1950 | + | let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0)) | |
1951 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
1952 | + | let ko = { | |
1953 | + | let cn = ds | |
1954 | + | if (("S" == cn)) | |
1955 | + | then 3 | |
1956 | + | else if (("M" == cn)) | |
1957 | + | then 4 | |
1958 | + | else if (("L" == cn)) | |
1959 | + | then 5 | |
1960 | + | else if (("XL" == cn)) | |
1961 | + | then 6 | |
1962 | + | else throw("Only S, M, L, XL can merge") | |
1963 | + | } | |
1964 | + | if ((hM != ko)) | |
1965 | + | then throw("All lands should be maxed to merge") | |
1966 | + | else { | |
1967 | + | let ef = ji[cW] | |
1968 | + | let gs = gy(ji[cY]) | |
1969 | + | let gC = (lastBlock.timestamp - jg) | |
1970 | + | if ((0 > gC)) | |
1971 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp))) | |
1972 | + | else { | |
1973 | + | let jk = iT(P, iU) | |
1974 | + | let hL = (iU / cu) | |
1975 | + | let js = gA(split(eD._4, "_"), gs, gC, hL, jk) | |
1976 | + | let eN = gq(eD._6, gs, hL, -1) | |
1977 | + | let kp = gq(eD._10, gs, hL, -1) | |
1978 | + | let hg = gq(eD._9, gs, hL, 1) | |
1979 | + | let kq = eD._7 | |
1980 | + | let cP = indexOf(kq, P) | |
1981 | + | if (!(isDefined(cP))) | |
1982 | + | then throw(("Your staked lands don't contain " + P)) | |
1983 | + | else { | |
1984 | + | let kr = bp(P) | |
1985 | + | let ks = valueOrElse(getString(kr), "") | |
1986 | + | $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != "")) | |
1987 | + | then [DeleteEntry(ec(ks))] | |
1988 | + | else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp) | |
1989 | + | } | |
1990 | + | } | |
1991 | + | } | |
1992 | + | } | |
1993 | + | } | |
1994 | + | } | |
1995 | + | ||
1996 | + | let hx = bH(A) | |
1997 | + | let ia = hw(hx) | |
1998 | + | let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_") | |
1999 | + | let kt = dj(c) | |
2000 | + | let ku = getString(kt) | |
2001 | + | let kv = if (isDefined(ku)) | |
2002 | + | then split_51C(value(ku), "_") | |
2003 | + | else nil | |
2004 | + | let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ] | |
2005 | + | let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_") | |
2006 | + | let eO = { | |
2007 | + | let eF = ki | |
2008 | + | let eG = size(eF) | |
2009 | + | let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx) | |
2010 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2011 | + | then eJ | |
2012 | + | else kk(eJ, eF[eK]) | |
2013 | + | ||
2014 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2015 | + | then eJ | |
2016 | + | else throw("List size exceeds 5") | |
2017 | + | ||
2018 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
2019 | + | } | |
2020 | + | let di = eO._3 | |
2021 | + | let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di)) | |
2022 | + | let gz = hf(eO._9, (dr(kg) / cu)) | |
2023 | + | let iy = valueOrElse(getInteger(eb()), (ea + 1)) | |
2024 | + | let ky = toString(iy) | |
2025 | + | let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false) | |
2026 | + | let bo = calculateAssetId(iz) | |
2027 | + | let kz = toBase58String(bo) | |
2028 | + | let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_") | |
2029 | + | let kA = dk(c) | |
2030 | + | let kB = valueOrElse(getInteger(kA), 0) | |
2031 | + | $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0)) | |
2032 | + | then StringEntry(kt, makeString_11C(eO._7, "_")) | |
2033 | + | else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB)) | |
2034 | + | then 0 | |
2035 | + | else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz) | |
2036 | + | } | |
2037 | + | } | |
2038 | + | ||
2039 | + | ||
2040 | + | func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0) | |
2041 | + | ||
2042 | + | ||
2043 | + | func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4)) | |
2044 | + | ||
2045 | + | ||
2046 | + | func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47)) | |
2047 | + | ||
2048 | + | ||
2049 | + | func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54)) | |
2050 | + | ||
2051 | + | ||
2052 | + | func kG (c,ki) = { | |
2053 | + | let cn = size(ki) | |
2054 | + | if ((4 == cn)) | |
2055 | + | then kC(c, ki) | |
2056 | + | else if ((3 == cn)) | |
2057 | + | then kD(c, ki) | |
2058 | + | else if ((5 == cn)) | |
2059 | + | then kE(c, ki) | |
2060 | + | else if ((2 == cn)) | |
2061 | + | then kF(c, ki) | |
2062 | + | else throw("Unknown merge") | |
2063 | + | } | |
2064 | + | ||
2065 | + | ||
2066 | + | func kH (gw) = if (if ((gw.originCaller != cQ)) | |
2067 | + | then valueOrElse(getBoolean(du()), false) | |
2068 | + | else false) | |
2069 | + | then throw("Contracts are under maintenance") | |
2070 | + | else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId)) | |
2071 | + | ||
2072 | + | ||
2073 | + | @Callable(gw) | |
2074 | + | func constructorV1 (kI) = if ((gw.caller != this)) | |
2075 | + | then throw("Permission denied") | |
2076 | + | else [StringEntry(cK(), kI)] | |
2077 | + | ||
2078 | + | ||
2079 | + | ||
2080 | + | @Callable(gw) | |
2081 | + | func setBlocked (kJ) = if ((gw.caller != this)) | |
2082 | + | then throw("permission denied") | |
2083 | + | else [BooleanEntry(du(), kJ)] | |
2084 | + | ||
2085 | + | ||
2086 | + | ||
2087 | + | @Callable(gw) | |
2088 | + | func stakeLand () = { | |
2089 | + | let kK = kH(gw) | |
2090 | + | if ((size(gw.payments) != 1)) | |
2091 | + | then throw("Exactly one payment required") | |
1895 | 2092 | else { | |
1896 | - | func ka (eu,O) = { | |
1897 | - | let iX = value(assetInfo(fromBase58String(O))) | |
1898 | - | let iY = bp(O) | |
1899 | - | let iZ = valueOrErrorMessage(getInteger(iY), (("NFT " + iX.name) + " is not staked")) | |
1900 | - | let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned")) | |
1901 | - | if ((ja != b)) | |
1902 | - | then throw((aA + " is not yours")) | |
2093 | + | let kL = value(gw.payments[0]) | |
2094 | + | let bo = value(kL.assetId) | |
2095 | + | let cB = toString(gw.caller) | |
2096 | + | if ((kL.amount != 1)) | |
2097 | + | then throw((("NFT " + aC) + " token should be attached as payment")) | |
2098 | + | else { | |
2099 | + | let je = value(assetInfo(bo)) | |
2100 | + | if ((je.issuer != this)) | |
2101 | + | then throw("Unknown issuer of token") | |
2102 | + | else if (!(contains(je.name, aC))) | |
2103 | + | then throw((("Only NFT " + aC) + " tokens are accepted")) | |
2104 | + | else { | |
2105 | + | let kM = drop(je.name, 4) | |
2106 | + | let ef = if (contains(kM, "XXL")) | |
2107 | + | then dropRight(kM, 3) | |
2108 | + | else if (contains(kM, "XL")) | |
2109 | + | then dropRight(kM, 2) | |
2110 | + | else dropRight(kM, 1) | |
2111 | + | if (!(isDefined(parseInt(ef)))) | |
2112 | + | then throw(("Cannot parse land number from " + je.name)) | |
2113 | + | else { | |
2114 | + | let P = toBase58String(bo) | |
2115 | + | let jf = bq(P) | |
2116 | + | if (isDefined(getInteger(jf))) | |
2117 | + | then throw((("NFT " + je.name) + " is already staked")) | |
2118 | + | else { | |
2119 | + | let ji = split(je.description, "_") | |
2120 | + | let gs = gy(ji[cY]) | |
2121 | + | let iU = dr(ji[cX]) | |
2122 | + | let hL = (iU / cu) | |
2123 | + | let eN = gx(gs, hL, 1) | |
2124 | + | let kN = dh(ji[cZ]) | |
2125 | + | let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_") | |
2126 | + | let kO = makeString(gq(kx, gs, hL, 1), "_") | |
2127 | + | let kt = dj(cB) | |
2128 | + | let ku = getString(kt) | |
2129 | + | let kq = if (isDefined(ku)) | |
2130 | + | then split_51C(value(ku), "_") | |
2131 | + | else nil | |
2132 | + | if (containsElement(kq, P)) | |
2133 | + | then throw(("Your staked lands already contain " + P)) | |
2134 | + | else if ((size(kq) >= aG)) | |
2135 | + | then throw((("Your already staked max (" + toString(aG)) + ") lands")) | |
2136 | + | else { | |
2137 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2138 | + | let kA = dk(cB) | |
2139 | + | let kP = valueOrElse(getInteger(kA), 0) | |
2140 | + | let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil) | |
2141 | + | $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ) | |
2142 | + | } | |
2143 | + | } | |
2144 | + | } | |
2145 | + | } | |
2146 | + | } | |
2147 | + | } | |
2148 | + | } | |
2149 | + | ||
2150 | + | ||
2151 | + | ||
2152 | + | @Callable(gw) | |
2153 | + | func unstakeLand (ja) = { | |
2154 | + | let kK = kH(gw) | |
2155 | + | if ((size(gw.payments) != 0)) | |
2156 | + | then throw("No payments required") | |
2157 | + | else { | |
2158 | + | let c = toString(gw.caller) | |
2159 | + | let fM = iY(c, em, ja) | |
2160 | + | let P = fM._2 | |
2161 | + | let ji = fM._3 | |
2162 | + | let kt = dj(c) | |
2163 | + | let gs = gy(ji[cY]) | |
2164 | + | let iU = dr(ji[cX]) | |
2165 | + | let hL = (iU / cu) | |
2166 | + | let eN = gx(gs, hL, -1) | |
2167 | + | let kN = dh(ji[cZ]) | |
2168 | + | let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_") | |
2169 | + | let kO = makeString(gq(kx, gs, hL, -1), "_") | |
2170 | + | let jF = jv(c, P, iU, em) | |
2171 | + | let kq = split_51C(valueOrElse(getString(kt), ""), "_") | |
2172 | + | let cP = indexOf(kq, P) | |
2173 | + | if (!(isDefined(cP))) | |
2174 | + | then throw(("Your staked lands don't contain " + P)) | |
2175 | + | else { | |
2176 | + | let ax = lastBlock.timestamp | |
2177 | + | let kR = valueOrElse(getInteger(cS, bJ(c)), 0) | |
2178 | + | if ((kR >= ax)) | |
2179 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR))) | |
2180 | + | else { | |
2181 | + | let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq) | |
2182 | + | if ((kS > ax)) | |
2183 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS))) | |
2184 | + | else { | |
2185 | + | let kA = dk(c) | |
2186 | + | let kB = valueOrElse(getInteger(kA), 0) | |
2187 | + | let kT = if ((iU > kB)) | |
2188 | + | then 0 | |
2189 | + | else (kB - iU) | |
2190 | + | let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil) | |
2191 | + | $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1)) | |
2192 | + | then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_")) | |
2193 | + | else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ) | |
2194 | + | } | |
2195 | + | } | |
2196 | + | } | |
2197 | + | } | |
2198 | + | } | |
2199 | + | ||
2200 | + | ||
2201 | + | ||
2202 | + | @Callable(gw) | |
2203 | + | func stakeDuck () = { | |
2204 | + | let kK = kH(gw) | |
2205 | + | if ((size(gw.payments) != 1)) | |
2206 | + | then throw("Exactly one payment required") | |
2207 | + | else { | |
2208 | + | let kL = value(gw.payments[0]) | |
2209 | + | let bo = value(kL.assetId) | |
2210 | + | let cB = toString(gw.caller) | |
2211 | + | if ((kL.amount != 1)) | |
2212 | + | then throw((("NFT " + aD) + " token should be attached as payment")) | |
2213 | + | else { | |
2214 | + | let je = value(assetInfo(bo)) | |
2215 | + | if (if ((je.issuer != dI)) | |
2216 | + | then (je.issuer != dJ) | |
2217 | + | else false) | |
2218 | + | then throw((("Unknown issuer of " + aD) + " token")) | |
2219 | + | else if (!(contains(je.name, aD))) | |
2220 | + | then throw((("Only NFT " + aD) + " tokens are accepted")) | |
2221 | + | else { | |
2222 | + | let kU = toBase58String(bo) | |
2223 | + | let jf = bq(kU) | |
2224 | + | if (isDefined(getInteger(jf))) | |
2225 | + | then throw((("NFT " + je.name) + " is already staked")) | |
2226 | + | else if (isDefined(getString(bG(cB)))) | |
2227 | + | then throw(("You already staked one duck: " + je.name)) | |
2228 | + | else { | |
2229 | + | let kV = bI(kU) | |
2230 | + | let cc = getString(kV) | |
2231 | + | let hx = bH(kU) | |
2232 | + | let kW = getString(hx) | |
2233 | + | let iN = z(kU) | |
2234 | + | let iO = ag(valueOrElse(getInteger(D(kU)), 0)) | |
2235 | + | let kX = valueOrElse(getInteger(iN), iO) | |
2236 | + | ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc)) | |
2237 | + | then nil | |
2238 | + | else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW)) | |
2239 | + | then nil | |
2240 | + | else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK))))) | |
2241 | + | } | |
2242 | + | } | |
2243 | + | } | |
2244 | + | } | |
2245 | + | } | |
2246 | + | ||
2247 | + | ||
2248 | + | ||
2249 | + | @Callable(gw) | |
2250 | + | func unstakeDuck (kU) = { | |
2251 | + | let kK = kH(gw) | |
2252 | + | if ((size(gw.payments) != 0)) | |
2253 | + | then throw("No payments required") | |
2254 | + | else { | |
2255 | + | let bo = fromBase58String(kU) | |
2256 | + | let cB = toString(gw.caller) | |
2257 | + | let je = value(assetInfo(bo)) | |
2258 | + | let jf = bq(kU) | |
2259 | + | if (!(isDefined(getInteger(jf)))) | |
2260 | + | then throw((("NFT " + je.name) + " is not staked")) | |
2261 | + | else if (!(isDefined(getString(bG(cB))))) | |
2262 | + | then throw((("The duck " + je.name) + " is not staked")) | |
1903 | 2263 | else { | |
1904 | - | let jb = split(iX.description, "_") | |
1905 | - | let dg = jb[cX] | |
1906 | - | if (if ((eu._3 != "")) | |
1907 | - | then (eu._3 != dg) | |
1908 | - | else false) | |
1909 | - | then throw("Lands should be on the same continent to merge") | |
2264 | + | let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned")) | |
2265 | + | if ((jh != cB)) | |
2266 | + | then throw("Staked NFT is not yours") | |
2267 | + | else if (kb(kU)) | |
2268 | + | then throw("unstakeDuck_checkTournament") | |
2269 | + | else if (kc(kU)) | |
2270 | + | then throw("unstakeDuck_checkDelivery") | |
2271 | + | else { | |
2272 | + | let iN = z(kU) | |
2273 | + | let iO = ag(valueOrElse(getInteger(D(kU)), 0)) | |
2274 | + | let as = valueOrElse(getInteger(iN), iO) | |
2275 | + | if ((iO > as)) | |
2276 | + | then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking")) | |
2277 | + | else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK] | |
2278 | + | } | |
2279 | + | } | |
2280 | + | } | |
2281 | + | } | |
2282 | + | ||
2283 | + | ||
2284 | + | ||
2285 | + | @Callable(gw) | |
2286 | + | func claimRes (eu,kY) = { | |
2287 | + | let kK = kH(gw) | |
2288 | + | if ((size(gw.payments) != 0)) | |
2289 | + | then throw("No payments required") | |
2290 | + | else { | |
2291 | + | let c = toString(gw.originCaller) | |
2292 | + | let eV = jj(c, eu, em, kY) | |
2293 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
2294 | + | $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh]) | |
2295 | + | } | |
2296 | + | } | |
2297 | + | ||
2298 | + | ||
2299 | + | ||
2300 | + | @Callable(gw) | |
2301 | + | func claimResToWH (eu,kY) = { | |
2302 | + | let kK = kH(gw) | |
2303 | + | if ((size(gw.payments) != 0)) | |
2304 | + | then throw("No payments required") | |
2305 | + | else { | |
2306 | + | let c = toString(gw.originCaller) | |
2307 | + | let eV = jj(c, eu, el, kY) | |
2308 | + | $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY]) | |
2309 | + | } | |
2310 | + | } | |
2311 | + | ||
2312 | + | ||
2313 | + | ||
2314 | + | @Callable(gw) | |
2315 | + | func flight (iC,iD) = { | |
2316 | + | let kK = kH(gw) | |
2317 | + | if ((size(gw.payments) != 0)) | |
2318 | + | then throw("No payments required") | |
2319 | + | else { | |
2320 | + | let bK = toString(gw.caller) | |
2321 | + | let hb = iB(bK, iC, iD) | |
2322 | + | let iH = hb._1 | |
2323 | + | let A = hb._2 | |
2324 | + | let kV = bI(A) | |
2325 | + | let jc = valueOrElse(getString(kV), aJ) | |
2326 | + | let iJ = hb._4 | |
2327 | + | if ((iJ == jc)) | |
2328 | + | then throw("You can't fly to the same location") | |
2329 | + | else { | |
2330 | + | let kZ = split(iJ, "_") | |
2331 | + | let la = (kZ[bl] == "T") | |
2332 | + | let gj = F(A) | |
2333 | + | let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2334 | + | let lc = eW(lb, hb._5) | |
2335 | + | let ld = lc._1 | |
2336 | + | let le = lc._2 | |
2337 | + | let lf = if (!(cb(cU, jc))) | |
2338 | + | then if (la) | |
2339 | + | then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ)) | |
2340 | + | else if ((iH > 0)) | |
2341 | + | then iJ | |
2342 | + | else jc | |
2343 | + | else if (!(cb(cU, iJ))) | |
2344 | + | then throw("Your duck is taking part in the tournament") | |
1910 | 2345 | else { | |
1911 | - | let dq = jb[cV] | |
1912 | - | let kb = eu._1 | |
1913 | - | let gn = valueOrErrorMessage(indexOf(kb, dq), "You haven't passed all the lands needed") | |
1914 | - | let kc = (take(kb, gn) + drop(kb, (gn + 1))) | |
1915 | - | let iN = dp(dq) | |
1916 | - | let kd = (eu._2 + valueOrElse(getInteger(bq(aC, O)), 0)) | |
1917 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
1918 | - | let ke = { | |
1919 | - | let cl = dq | |
1920 | - | if (("S" == cl)) | |
1921 | - | then 3 | |
1922 | - | else if (("M" == cl)) | |
1923 | - | then 4 | |
1924 | - | else if (("L" == cl)) | |
1925 | - | then 5 | |
1926 | - | else if (("XL" == cl)) | |
1927 | - | then 6 | |
1928 | - | else throw("Only S, M, L, XL can merge") | |
2346 | + | let lg = parseIntValue(kZ[bm]) | |
2347 | + | let lh = split(jc, "_") | |
2348 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
2349 | + | if ((lg != (parseIntValue(lh[bm]) + 1))) | |
2350 | + | then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ)) | |
2351 | + | else if ((iH > 0)) | |
2352 | + | then { | |
2353 | + | let li = valueOrElse(getInteger(cU, bS(cd, A)), 0) | |
2354 | + | let lj = if ((lg > li)) | |
2355 | + | then invoke(cU, "saveDuckResult", [A, lg], nil) | |
2356 | + | else unit | |
2357 | + | if ((lj == lj)) | |
2358 | + | then iJ | |
2359 | + | else throw("Strict value is not equal to itself.") | |
2360 | + | } | |
2361 | + | else jc | |
2362 | + | } | |
2363 | + | $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le) | |
2364 | + | then [StringEntry(L(A), "0_0_0_0_0")] | |
2365 | + | else (nil ++ jL(A, if ((iH > 0)) | |
2366 | + | then V | |
2367 | + | else W)._1))), hb._3) | |
2368 | + | } | |
2369 | + | } | |
2370 | + | } | |
2371 | + | ||
2372 | + | ||
2373 | + | ||
2374 | + | @Callable(gw) | |
2375 | + | func heal (lk,ll,lm) = { | |
2376 | + | let kK = kH(gw) | |
2377 | + | if (if (if ((0 > lk)) | |
2378 | + | then true | |
2379 | + | else (0 > ll)) | |
2380 | + | then true | |
2381 | + | else (0 > lm)) | |
2382 | + | then throw("Quantity cannot be negative") | |
2383 | + | else { | |
2384 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2385 | + | if (kb(A)) | |
2386 | + | then throw("heal_checkTournament") | |
2387 | + | else if (kc(A)) | |
2388 | + | then throw("heal_checkDelivery") | |
2389 | + | else { | |
2390 | + | let ln = [lk, ll, lm] | |
2391 | + | let iN = z(A) | |
2392 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
2393 | + | let lo = valueOrElse(getInteger(iN), iO) | |
2394 | + | if ((lo >= iO)) | |
2395 | + | then throw((("HP should be < " + toString(iO)) + " to heal")) | |
2396 | + | else { | |
2397 | + | let hx = bH(A) | |
2398 | + | let ia = hw(hx) | |
2399 | + | let lp = if ((ia[bj] == "")) | |
2400 | + | then nil | |
2401 | + | else split_4C(ia[bj], "_") | |
2402 | + | func lq (eD,ch) = { | |
2403 | + | let dp = eD._2 | |
2404 | + | let gS = if ((size(lp) > dp)) | |
2405 | + | then parseIntValue(lp[dp]) | |
2406 | + | else 0 | |
2407 | + | if ((3 > dp)) | |
2408 | + | then { | |
2409 | + | let lr = ln[dp] | |
2410 | + | if ((lr > gS)) | |
2411 | + | then throw(((("You have only " + toString(gS)) + " of ") + aN[dp])) | |
2412 | + | else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr))) | |
2413 | + | } | |
2414 | + | else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3) | |
1929 | 2415 | } | |
1930 | - | if ((hF != ke)) | |
1931 | - | then throw("All lands should be maxed to merge") | |
2416 | + | ||
2417 | + | let eV = { | |
2418 | + | let eF = aR | |
2419 | + | let eG = size(eF) | |
2420 | + | let eH = $Tuple3(nil, 0, 0) | |
2421 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2422 | + | then eJ | |
2423 | + | else lq(eJ, eF[eK]) | |
2424 | + | ||
2425 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2426 | + | then eJ | |
2427 | + | else throw("List size exceeds 50") | |
2428 | + | ||
2429 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
2430 | + | } | |
2431 | + | let ls = min([iO, (lo + eV._3)]) | |
2432 | + | $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls) | |
2433 | + | } | |
2434 | + | } | |
2435 | + | } | |
2436 | + | } | |
2437 | + | ||
2438 | + | ||
2439 | + | ||
2440 | + | @Callable(gw) | |
2441 | + | func healES () = { | |
2442 | + | let kK = kH(gw) | |
2443 | + | if ((size(gw.payments) != 1)) | |
2444 | + | then throw("Exactly one payment required") | |
2445 | + | else { | |
2446 | + | let kL = value(gw.payments[0]) | |
2447 | + | if ((kL.assetId != cm)) | |
2448 | + | then throw("Allowed USDT payment only!") | |
2449 | + | else { | |
2450 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2451 | + | if (kb(A)) | |
2452 | + | then throw("healES_checkTournament") | |
2453 | + | else if (kc(A)) | |
2454 | + | then throw("healES_checkDelivery") | |
2455 | + | else { | |
2456 | + | let iN = z(A) | |
2457 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
2458 | + | let lo = valueOrElse(getInteger(iN), iO) | |
2459 | + | if ((lo > 0)) | |
2460 | + | then throw("HP should be 0 to call Emergency Service") | |
1932 | 2461 | else { | |
1933 | - | let dW = jb[cU] | |
1934 | - | let gj = gp(jb[cW]) | |
1935 | - | let gt = (lastBlock.timestamp - iZ) | |
1936 | - | if ((0 > gt)) | |
1937 | - | then throw(((("Saved timestamp is in future, saved = " + toString(iZ)) + ", current = ") + toString(lastBlock.timestamp))) | |
2462 | + | let hx = bH(A) | |
2463 | + | let ia = hw(hx) | |
2464 | + | let lp = if ((ia[bj] == "")) | |
2465 | + | then nil | |
2466 | + | else split_4C(ia[bj], "_") | |
2467 | + | let lt = if ((size(lp) > 0)) | |
2468 | + | then parseIntValue(lp[0]) | |
2469 | + | else 0 | |
2470 | + | let lu = if ((size(lp) > 1)) | |
2471 | + | then parseIntValue(lp[1]) | |
2472 | + | else 0 | |
2473 | + | let lv = if ((size(lp) > 2)) | |
2474 | + | then parseIntValue(lp[2]) | |
2475 | + | else 0 | |
2476 | + | if (if (if ((lt > 0)) | |
2477 | + | then true | |
2478 | + | else (lu > 0)) | |
2479 | + | then true | |
2480 | + | else (lv > 0)) | |
2481 | + | then throw("You have to use own Medical Kit") | |
1938 | 2482 | else { | |
1939 | - | let jd = iM(O, iN) | |
1940 | - | let hE = (iN / cs) | |
1941 | - | let jl = gr(split(eu._4, "_"), gj, gt, hE, jd) | |
1942 | - | let eE = gh(eu._6, gj, hE, -1) | |
1943 | - | let kf = gh(eu._10, gj, hE, -1) | |
1944 | - | let gX = gh(eu._9, gj, hE, 1) | |
1945 | - | let kg = eu._7 | |
1946 | - | let cN = indexOf(kg, O) | |
1947 | - | if (!(isDefined(cN))) | |
1948 | - | then throw(("Your staked lands don't contain " + O)) | |
2483 | + | let lw = getString(cR, bL()) | |
2484 | + | let lx = if (isDefined(lw)) | |
2485 | + | then split_4C(value(lw), "_") | |
2486 | + | else nil | |
2487 | + | let ly = if ((size(lx) > 0)) | |
2488 | + | then parseIntValue(lx[0]) | |
2489 | + | else 0 | |
2490 | + | if ((0 >= ly)) | |
2491 | + | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1949 | 2492 | else { | |
1950 | - | let kh = bo(O) | |
1951 | - | let ki = valueOrElse(getString(kh), "") | |
1952 | - | $Tuple10(kc, kd, dg, jl, ((((((((((((eu._5 :+ DeleteEntry(bp(O))) :+ DeleteEntry(bs(aA, O, b))) :+ DeleteEntry(dV(dW))) :+ DeleteEntry(bm(O))) :+ DeleteEntry(bw(O))) :+ DeleteEntry(dX(O, b))) :+ DeleteEntry(bq(aC, O))) :+ DeleteEntry(dY(dW))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(kh)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ki != "")) | |
1953 | - | then [DeleteEntry(dT(ki))] | |
1954 | - | else nil)), eE, removeByIndex(kg, value(cN)), (eu._8 + iN), gX, kf) | |
2493 | + | let ls = (lo + parseIntValue(split(aR[0], "_")[aT])) | |
2494 | + | let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_") | |
2495 | + | let ch = split(aR[0], "_") | |
2496 | + | let lA = cg(ch) | |
2497 | + | let lB = fraction((lA * aL), aK, (ct * aW)) | |
2498 | + | if ((kL.amount != lB)) | |
2499 | + | then throw(("Payment attached should be " + toString(lB))) | |
2500 | + | else { | |
2501 | + | let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)])) | |
2502 | + | $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV) | |
2503 | + | } | |
2504 | + | } | |
2505 | + | } | |
2506 | + | } | |
2507 | + | } | |
2508 | + | } | |
2509 | + | } | |
2510 | + | } | |
2511 | + | ||
2512 | + | ||
2513 | + | ||
2514 | + | @Callable(gw) | |
2515 | + | func updateBackpack (A,lC) = if ((gw.caller != cR)) | |
2516 | + | then throw("permission denied") | |
2517 | + | else $Tuple2([StringEntry(bH(A), lC)], lC) | |
2518 | + | ||
2519 | + | ||
2520 | + | ||
2521 | + | @Callable(gw) | |
2522 | + | func commitForRandom () = { | |
2523 | + | let kK = kH(gw) | |
2524 | + | let lD = (height + de) | |
2525 | + | let c = toString(gw.caller) | |
2526 | + | $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD) | |
2527 | + | } | |
2528 | + | ||
2529 | + | ||
2530 | + | ||
2531 | + | @Callable(gw) | |
2532 | + | func awardSLand (cB) = if ((gw.caller != cU)) | |
2533 | + | then throw("Access denied") | |
2534 | + | else if ((size(gw.payments) != 0)) | |
2535 | + | then throw("No payments required") | |
2536 | + | else { | |
2537 | + | let eV = iu(addressFromStringValue(cB), gw.transactionId) | |
2538 | + | $Tuple2(eV._1, eV._2._1) | |
2539 | + | } | |
2540 | + | ||
2541 | + | ||
2542 | + | ||
2543 | + | @Callable(gw) | |
2544 | + | func buySLand () = { | |
2545 | + | let kK = kH(gw) | |
2546 | + | if ((size(gw.payments) != 1)) | |
2547 | + | then throw("Exactly one payment required") | |
2548 | + | else { | |
2549 | + | let kL = value(gw.payments[0]) | |
2550 | + | if ((kL.assetId != cm)) | |
2551 | + | then throw("Allowed USDT payment only!") | |
2552 | + | else if ((kL.amount != dS)) | |
2553 | + | then throw(("Payment attached should be " + toString(dS))) | |
2554 | + | else { | |
2555 | + | let eV = iu(gw.caller, gw.transactionId) | |
2556 | + | let lE = do(invoke(cV, "burnAcres", [dT], nil)) | |
2557 | + | $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE)) | |
2558 | + | } | |
2559 | + | } | |
2560 | + | } | |
2561 | + | ||
2562 | + | ||
2563 | + | ||
2564 | + | @Callable(gw) | |
2565 | + | func expedition (iC,iD) = { | |
2566 | + | let kK = kH(gw) | |
2567 | + | if ((size(gw.payments) != 0)) | |
2568 | + | then throw("No payments required") | |
2569 | + | else { | |
2570 | + | let bK = toString(gw.caller) | |
2571 | + | let hb = iB(bK, iC, iD) | |
2572 | + | let A = hb._2 | |
2573 | + | let iN = z(A) | |
2574 | + | let hx = bH(A) | |
2575 | + | let ia = hw(hx) | |
2576 | + | let jC = split(ia[bi], "_") | |
2577 | + | let jE = makeString(eP(true, jC, dR), "_") | |
2578 | + | let gj = F(A) | |
2579 | + | let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2580 | + | let lF = eW(lb, hb._5) | |
2581 | + | let ld = lF._1 | |
2582 | + | let le = lF._2 | |
2583 | + | let lG = iu(gw.caller, gw.transactionId) | |
2584 | + | let iA = lG._2._1 | |
2585 | + | let eV = if ((0 >= hb._1)) | |
2586 | + | then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0) | |
2587 | + | else $Tuple3((lG._1 ++ (if (le) | |
2588 | + | then [StringEntry(L(A), "0_0_0_0_0")] | |
2589 | + | else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3) | |
2590 | + | if (kb(A)) | |
2591 | + | then throw("expedition_checkTournament") | |
2592 | + | else if (kc(A)) | |
2593 | + | then throw("expedition_checkDelivery") | |
2594 | + | else { | |
2595 | + | let lE = do(invoke(cV, "burnAcres", [dT], nil)) | |
2596 | + | $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE)) | |
2597 | + | } | |
2598 | + | } | |
2599 | + | } | |
2600 | + | ||
2601 | + | ||
2602 | + | ||
2603 | + | @Callable(gw) | |
2604 | + | func buySLandForAcres () = { | |
2605 | + | let kK = kH(gw) | |
2606 | + | if ((size(gw.payments) != 1)) | |
2607 | + | then throw("exactly 1 payment must be attached") | |
2608 | + | else { | |
2609 | + | let kL = gw.payments[0] | |
2610 | + | let fc = kL.amount | |
2611 | + | if (if (!(isDefined(kL.assetId))) | |
2612 | + | then true | |
2613 | + | else (value(kL.assetId) != dd)) | |
2614 | + | then throw("ACRES payments only!") | |
2615 | + | else if ((fc != dT)) | |
2616 | + | then throw(("Payment attached should be " + toString(dT))) | |
2617 | + | else { | |
2618 | + | let eV = iu(gw.caller, gw.transactionId) | |
2619 | + | let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)])) | |
2620 | + | $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE)) | |
2621 | + | } | |
2622 | + | } | |
2623 | + | } | |
2624 | + | ||
2625 | + | ||
2626 | + | ||
2627 | + | @Callable(gw) | |
2628 | + | func upgradeInfra (P) = { | |
2629 | + | let kK = kH(gw) | |
2630 | + | if ((size(gw.payments) != 0)) | |
2631 | + | then throw("No payments required") | |
2632 | + | else { | |
2633 | + | let eV = jw(true, gw.caller, 0, P) | |
2634 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2635 | + | $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2) | |
2636 | + | } | |
2637 | + | } | |
2638 | + | ||
2639 | + | ||
2640 | + | ||
2641 | + | @Callable(gw) | |
2642 | + | func activateArtifact (lH,lI) = { | |
2643 | + | let kK = kH(gw) | |
2644 | + | if ((size(gw.payments) != 0)) | |
2645 | + | then throw("No payments required") | |
2646 | + | else { | |
2647 | + | let c = toString(gw.caller) | |
2648 | + | let eV = { | |
2649 | + | let cn = lH | |
2650 | + | if (("PRESALE" == cn)) | |
2651 | + | then jZ(c, lI) | |
2652 | + | else if (("ONBOARD" == cn)) | |
2653 | + | then jS(c) | |
2654 | + | else throw("Unknown artifact") | |
2655 | + | } | |
2656 | + | (eV :+ kK) | |
2657 | + | } | |
2658 | + | } | |
2659 | + | ||
2660 | + | ||
2661 | + | ||
2662 | + | @Callable(gw) | |
2663 | + | func mergeLands (ki) = { | |
2664 | + | let kK = kH(gw) | |
2665 | + | if ((size(gw.payments) != 0)) | |
2666 | + | then throw("No payments required") | |
2667 | + | else { | |
2668 | + | let eV = kG(toString(gw.caller), ki) | |
2669 | + | $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2) | |
2670 | + | } | |
2671 | + | } | |
2672 | + | ||
2673 | + | ||
2674 | + | ||
2675 | + | @Callable(gw) | |
2676 | + | func cargoExchange (lJ,P) = { | |
2677 | + | let kK = kH(gw) | |
2678 | + | if ((size(gw.payments) != 0)) | |
2679 | + | then throw("No payments required") | |
2680 | + | else { | |
2681 | + | let hZ = split_4C(lJ, ":") | |
2682 | + | let c = toString(gw.originCaller) | |
2683 | + | let je = value(assetInfo(fromBase58String(P))) | |
2684 | + | let jf = bq(P) | |
2685 | + | if (!(isDefined(getInteger(jf)))) | |
2686 | + | then throw((je.name + " is not staked")) | |
2687 | + | else { | |
2688 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
2689 | + | if ((jh != c)) | |
2690 | + | then throw((aC + " is not yours")) | |
2691 | + | else { | |
2692 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
2693 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2694 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
2695 | + | let jc = valueOrElse(getString(bI(A)), aJ) | |
2696 | + | let ce = split(value(jc), "_") | |
2697 | + | if ((ce[bl] != "L")) | |
2698 | + | then throw((("Duck location type is " + ce[bl]) + ", but should be L")) | |
2699 | + | else if ((ce[bm] != P)) | |
2700 | + | then throw(("Duck should be on the land " + P)) | |
2701 | + | else { | |
2702 | + | let hK = bw(P) | |
2703 | + | let hB = hJ(hK, hL, hM) | |
2704 | + | let hx = bH(A) | |
2705 | + | let ia = hw(hx) | |
2706 | + | let eV = hY(hZ, hB, ia) | |
2707 | + | let hS = split(hB[bb], "_") | |
2708 | + | let jt = (parseIntValue(hS[bd]) + eV._7) | |
2709 | + | let ju = (parseIntValue(hS[be]) - eV._7) | |
2710 | + | [StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK] | |
2711 | + | } | |
2712 | + | } | |
2713 | + | } | |
2714 | + | } | |
2715 | + | } | |
2716 | + | ||
2717 | + | ||
2718 | + | ||
2719 | + | @Callable(gw) | |
2720 | + | func saveWarehouse (hO,P) = if ((gw.caller != cR)) | |
2721 | + | then throw("Access denied") | |
2722 | + | else { | |
2723 | + | let hK = bw(P) | |
2724 | + | let hP = split_4C(hO, ":") | |
2725 | + | if ((size(hP) != 5)) | |
2726 | + | then throw("warehouse string should contain 4 ':' separators") | |
2727 | + | else { | |
2728 | + | let lK = split(hP[bb], "_")[bc] | |
2729 | + | let jt = hA(hP) | |
2730 | + | let lL = hy(hP[aX]) | |
2731 | + | let ju = ((lL - parseIntValue(lK)) - jt) | |
2732 | + | let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":") | |
2733 | + | $Tuple2([StringEntry(hK, lM)], lM) | |
2734 | + | } | |
2735 | + | } | |
2736 | + | ||
2737 | + | ||
2738 | + | ||
2739 | + | @Callable(gw) | |
2740 | + | func fixWarehouseFormat (P) = if ((gw.caller != cQ)) | |
2741 | + | then throw("Access denied") | |
2742 | + | else { | |
2743 | + | let hK = bw(P) | |
2744 | + | let je = value(assetInfo(fromBase58String(P))) | |
2745 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
2746 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2747 | + | let hP = hJ(hK, hL, hM) | |
2748 | + | let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil)) | |
2749 | + | let jt = hA(hP) | |
2750 | + | let lL = hy(hP[aX]) | |
2751 | + | let ju = ((lL - lK) - jt) | |
2752 | + | let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":") | |
2753 | + | $Tuple2([StringEntry(hK, lM)], lM) | |
2754 | + | } | |
2755 | + | ||
2756 | + | ||
2757 | + | ||
2758 | + | @Callable(gw) | |
2759 | + | func fixContinentProportions (ki) = if ((gw.caller != cQ)) | |
2760 | + | then throw("Access denied") | |
2761 | + | else { | |
2762 | + | func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0")) | |
2763 | + | ||
2764 | + | let gg = { | |
2765 | + | let eF = aO | |
2766 | + | let eG = size(eF) | |
2767 | + | let eH = nil | |
2768 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2769 | + | then eJ | |
2770 | + | else lN(eJ, eF[eK]) | |
2771 | + | ||
2772 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2773 | + | then eJ | |
2774 | + | else throw("List size exceeds 5") | |
2775 | + | ||
2776 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
2777 | + | } | |
2778 | + | func lP (eD,P) = { | |
2779 | + | let je = value(assetInfo(fromBase58String(P))) | |
2780 | + | let ji = split(je.description, "_") | |
2781 | + | let hL = (dr(ji[cX]) / cu) | |
2782 | + | let lO = ji[cZ] | |
2783 | + | let gs = gy(ji[cY]) | |
2784 | + | let ha = value(indexOf(aO, lO)) | |
2785 | + | let kx = split(eD[ha], "_") | |
2786 | + | let lQ = makeString(gq(kx, gs, hL, 1), "_") | |
2787 | + | let cn = lO | |
2788 | + | if (("Americas" == cn)) | |
2789 | + | then [lQ, eD[1], eD[2], eD[3], eD[4]] | |
2790 | + | else if (("Europe" == cn)) | |
2791 | + | then [eD[0], lQ, eD[2], eD[3], eD[4]] | |
2792 | + | else if (("Asia" == cn)) | |
2793 | + | then [eD[0], eD[1], lQ, eD[3], eD[4]] | |
2794 | + | else if (("Africa" == cn)) | |
2795 | + | then [eD[0], eD[1], eD[2], lQ, eD[4]] | |
2796 | + | else if (("Oceania" == cn)) | |
2797 | + | then [eD[0], eD[1], eD[2], eD[3], lQ] | |
2798 | + | else throw("wrong continent") | |
2799 | + | } | |
2800 | + | ||
2801 | + | let eO = { | |
2802 | + | let eF = ki | |
2803 | + | let eG = size(eF) | |
2804 | + | let eH = gg | |
2805 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
2806 | + | then eJ | |
2807 | + | else lP(eJ, eF[eK]) | |
2808 | + | ||
2809 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
2810 | + | then eJ | |
2811 | + | else throw("List size exceeds 100") | |
2812 | + | ||
2813 | + | hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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) | |
2814 | + | } | |
2815 | + | $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0) | |
2816 | + | } | |
2817 | + | ||
2818 | + | ||
2819 | + | ||
2820 | + | @Callable(gw) | |
2821 | + | func fixStakedPieces (cB) = if ((gw.caller != cQ)) | |
2822 | + | then throw("Access denied") | |
2823 | + | else { | |
2824 | + | let kB = if ((cB == "")) | |
2825 | + | then 0 | |
2826 | + | else { | |
2827 | + | let ku = getString(an, dj(cB)) | |
2828 | + | let kq = if (isDefined(ku)) | |
2829 | + | then split_51C(value(ku), "_") | |
2830 | + | else nil | |
2831 | + | func lR (eD,P) = { | |
2832 | + | let je = value(assetInfo(fromBase58String(P))) | |
2833 | + | let ds = split(je.description, "_")[cX] | |
2834 | + | (eD + dr(ds)) | |
2835 | + | } | |
2836 | + | ||
2837 | + | let eF = kq | |
2838 | + | let eG = size(eF) | |
2839 | + | let eH = 0 | |
2840 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2841 | + | then eJ | |
2842 | + | else lR(eJ, eF[eK]) | |
2843 | + | ||
2844 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2845 | + | then eJ | |
2846 | + | else throw("List size exceeds 100") | |
2847 | + | ||
2848 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
2849 | + | } | |
2850 | + | $Tuple2([IntegerEntry(dk(cB), kB)], kB) | |
2851 | + | } | |
2852 | + | ||
2853 | + | ||
2854 | + | ||
2855 | + | @Callable(gw) | |
2856 | + | func setCustomName (bo,ks,bs) = { | |
2857 | + | let kK = kH(gw) | |
2858 | + | if ((size(gw.payments) != 1)) | |
2859 | + | then throw("Exactly one payment required") | |
2860 | + | else { | |
2861 | + | let kL = value(gw.payments[0]) | |
2862 | + | if ((kL.assetId != cm)) | |
2863 | + | then throw("Allowed USDT payment only!") | |
2864 | + | else if ((kL.amount != dO)) | |
2865 | + | then throw(("Payment should be " + toString(dO))) | |
2866 | + | else if (contains(ks, "__")) | |
2867 | + | then throw(("Name should not contain '__': " + ks)) | |
2868 | + | else if ((size(ks) > dP)) | |
2869 | + | then throw(("Name too long, maxLength=" + toString(dP))) | |
2870 | + | else { | |
2871 | + | let c = toString(gw.originCaller) | |
2872 | + | let lS = { | |
2873 | + | let cn = bs | |
2874 | + | if (("ACCOUNT" == cn)) | |
2875 | + | then { | |
2876 | + | let lT = ej(ks) | |
2877 | + | let lU = getString(lT) | |
2878 | + | if (isDefined(lU)) | |
2879 | + | then throw(("Name already registered: " + ks)) | |
2880 | + | else { | |
2881 | + | let lV = bA(c) | |
2882 | + | let lW = getString(lV) | |
2883 | + | let lX = if (isDefined(lW)) | |
2884 | + | then [DeleteEntry(ej(value(lW)))] | |
2885 | + | else nil | |
2886 | + | (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1) | |
2887 | + | } | |
2888 | + | } | |
2889 | + | else if (("LAND" == cn)) | |
2890 | + | then { | |
2891 | + | let je = value(assetInfo(fromBase58String(bo))) | |
2892 | + | let jf = bq(bo) | |
2893 | + | if (!(isDefined(getInteger(jf)))) | |
2894 | + | then throw((je.name + " is not staked")) | |
2895 | + | else { | |
2896 | + | let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned")) | |
2897 | + | if ((jh != c)) | |
2898 | + | then throw((aC + " is not yours")) | |
2899 | + | else { | |
2900 | + | let lT = ec(ks) | |
2901 | + | let lU = getString(lT) | |
2902 | + | if (isDefined(lU)) | |
2903 | + | then throw(("Name already registered: " + ks)) | |
2904 | + | else { | |
2905 | + | let lY = bp(bo) | |
2906 | + | let lW = getString(lY) | |
2907 | + | let lX = if (isDefined(lW)) | |
2908 | + | then [DeleteEntry(ec(value(lW)))] | |
2909 | + | else nil | |
2910 | + | (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1) | |
2911 | + | } | |
2912 | + | } | |
2913 | + | } | |
2914 | + | } | |
2915 | + | else if (("DUCK" == cn)) | |
2916 | + | then { | |
2917 | + | let je = value(assetInfo(fromBase58String(bo))) | |
2918 | + | let jf = bq(bo) | |
2919 | + | if (if (!(isDefined(getInteger(jf)))) | |
2920 | + | then true | |
2921 | + | else !(isDefined(getString(bG(c))))) | |
2922 | + | then throw((je.name + " is not staked")) | |
2923 | + | else { | |
2924 | + | let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned")) | |
2925 | + | if ((jh != c)) | |
2926 | + | then throw((aD + " is not yours")) | |
2927 | + | else { | |
2928 | + | let lT = ei(ks) | |
2929 | + | let lU = getString(lT) | |
2930 | + | if (isDefined(lU)) | |
2931 | + | then throw(("Name already registered: " + ks)) | |
2932 | + | else { | |
2933 | + | let lY = bz(bo) | |
2934 | + | let lW = getString(lY) | |
2935 | + | let lX = if (isDefined(lW)) | |
2936 | + | then [DeleteEntry(ei(value(lW)))] | |
2937 | + | else nil | |
2938 | + | (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1) | |
2939 | + | } | |
2940 | + | } | |
2941 | + | } | |
2942 | + | } | |
2943 | + | else throw("Unknown entity type") | |
2944 | + | } | |
2945 | + | $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0) | |
2946 | + | } | |
2947 | + | } | |
2948 | + | } | |
2949 | + | ||
2950 | + | ||
2951 | + | ||
2952 | + | @Callable(gw) | |
2953 | + | func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK)) | |
2954 | + | then throw("Permission denied") | |
2955 | + | else { | |
2956 | + | let kK = kH(gw) | |
2957 | + | if ((size(gw.payments) != 0)) | |
2958 | + | then throw("No payments required") | |
2959 | + | else if (!(isDefined(addressFromString(lZ)))) | |
2960 | + | then throw(("Invalid address: " + lZ)) | |
2961 | + | else if (!(isDefined(addressFromString(ma)))) | |
2962 | + | then throw(("Invalid address: " + ma)) | |
2963 | + | else { | |
2964 | + | let mb = ek() | |
2965 | + | let mc = getString(mb) | |
2966 | + | let md = if (isDefined(mc)) | |
2967 | + | then split_4C(value(mc), "_") | |
2968 | + | else nil | |
2969 | + | if (containsElement(md, ma)) | |
2970 | + | then throw((ma + " is not newbie (already has referrals)")) | |
2971 | + | else { | |
2972 | + | let jT = bB(ma) | |
2973 | + | let jU = getString(jT) | |
2974 | + | if (if (isDefined(jU)) | |
2975 | + | then isDefined(addressFromString(value(jU))) | |
2976 | + | else false) | |
2977 | + | then throw(((ma + " already has refBy: ") + value(jU))) | |
2978 | + | else { | |
2979 | + | let me = bE(lZ) | |
2980 | + | let mf = getString(me) | |
2981 | + | let mg = if (isDefined(mf)) | |
2982 | + | then split_4C(value(mf), "_") | |
2983 | + | else nil | |
2984 | + | if (containsElement(mg, ma)) | |
2985 | + | then throw((((lZ + " already contains ") + ma) + " within referrals")) | |
2986 | + | else { | |
2987 | + | let mh = makeString_2C((mg :+ ma), "_") | |
2988 | + | let mi = if (containsElement(md, lZ)) | |
2989 | + | then value(mc) | |
2990 | + | else makeString_2C((md :+ lZ), "_") | |
2991 | + | $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0) | |
2992 | + | } | |
2993 | + | } | |
2994 | + | } | |
2995 | + | } | |
2996 | + | } | |
2997 | + | ||
2998 | + | ||
2999 | + | ||
3000 | + | @Callable(gw) | |
3001 | + | func distributePoints (mj,mk,ml,mm,mn) = { | |
3002 | + | let kK = kH(gw) | |
3003 | + | if ((size(gw.payments) != 0)) | |
3004 | + | then throw("No payments required") | |
3005 | + | else { | |
3006 | + | let c = toString(gw.originCaller) | |
3007 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
3008 | + | let mo = I(c) | |
3009 | + | let mp = valueOrElse(getInteger(an, mo), 0) | |
3010 | + | let mq = E(A) | |
3011 | + | let mr = valueOrElse(getInteger(an, mq), 0) | |
3012 | + | let ms = (mp + mr) | |
3013 | + | let mt = ((((mj + mk) + ml) + mm) + mn) | |
3014 | + | if ((mt > ms)) | |
3015 | + | then throw((("There are only " + toString(ms)) + " free points to distribute")) | |
3016 | + | else { | |
3017 | + | let mu = B(A) | |
3018 | + | let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_") | |
3019 | + | let mv = (mp - mt) | |
3020 | + | $Tuple2([IntegerEntry(mo, if ((0 > mv)) | |
3021 | + | then 0 | |
3022 | + | else mv), IntegerEntry(mq, if ((0 > mv)) | |
3023 | + | then (mr + mv) | |
3024 | + | else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0) | |
3025 | + | } | |
3026 | + | } | |
3027 | + | } | |
3028 | + | ||
3029 | + | ||
3030 | + | ||
3031 | + | @Callable(gw) | |
3032 | + | func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu)) | |
3033 | + | ||
3034 | + | ||
3035 | + | ||
3036 | + | @Callable(gw) | |
3037 | + | func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = { | |
3038 | + | let gs = gy(gz) | |
3039 | + | $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs))) | |
3040 | + | } | |
3041 | + | ||
3042 | + | ||
3043 | + | ||
3044 | + | @Callable(gw) | |
3045 | + | func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":")) | |
3046 | + | ||
3047 | + | ||
3048 | + | ||
3049 | + | @Callable(gw) | |
3050 | + | func getWarehouseREADONLY (P) = { | |
3051 | + | let je = value(assetInfo(fromBase58String(P))) | |
3052 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
3053 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
3054 | + | $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":")) | |
3055 | + | } | |
3056 | + | ||
3057 | + | ||
3058 | + | ||
3059 | + | @Callable(gw) | |
3060 | + | func saveLastTx () = { | |
3061 | + | let iv = gw.caller | |
3062 | + | if (!(containsElement([cT, cR, cU, cV], iv))) | |
3063 | + | then throw("Access denied") | |
3064 | + | else $Tuple2([kH(gw)], 42) | |
3065 | + | } | |
3066 | + | ||
3067 | + | ||
3068 | + | ||
3069 | + | @Callable(gw) | |
3070 | + | func updateDuckStats (A,jM) = if ((gw.caller != cR)) | |
3071 | + | then throw("Access denied") | |
3072 | + | else jL(A, jM) | |
3073 | + | ||
3074 | + | ||
3075 | + | ||
3076 | + | @Callable(gw) | |
3077 | + | func updateAccStats (c,jM) = if ((gw.caller != cR)) | |
3078 | + | then throw("Access denied") | |
3079 | + | else jR(c, jM) | |
3080 | + | ||
3081 | + | ||
3082 | + | ||
3083 | + | @Callable(gw) | |
3084 | + | func equipDuck (my) = { | |
3085 | + | let kK = kH(gw) | |
3086 | + | if ((size(gw.payments) != 0)) | |
3087 | + | then throw("No payments required") | |
3088 | + | else { | |
3089 | + | let c = toString(gw.originCaller) | |
3090 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
3091 | + | if (kb(A)) | |
3092 | + | then throw("equipDuck_checkTournament") | |
3093 | + | else if (kc(A)) | |
3094 | + | then throw("equipDuck_checkDelivery") | |
3095 | + | else { | |
3096 | + | let gj = F(A) | |
3097 | + | let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3098 | + | let hx = bH(A) | |
3099 | + | let ia = hw(hx) | |
3100 | + | let ld = split(my, "_") | |
3101 | + | if ((size(ld) != q)) | |
3102 | + | then throw("Wrong equipment string") | |
3103 | + | else { | |
3104 | + | let gl = fY(mz, fj(ia[bj]), true, nil) | |
3105 | + | let gm = split(ld[p], ";")[1] | |
3106 | + | let ao = if ((gm == "")) | |
3107 | + | then 0 | |
3108 | + | else { | |
3109 | + | let gn = split(gm, ",")[0] | |
3110 | + | if ((gn == "")) | |
3111 | + | then 0 | |
3112 | + | else { | |
3113 | + | let fy = split(gn, ":") | |
3114 | + | let cP = fy[0] | |
3115 | + | let go = fy[1] | |
3116 | + | if (if (if (if (if ((cP == "06")) | |
3117 | + | then true | |
3118 | + | else (cP == "07")) | |
3119 | + | then true | |
3120 | + | else (cP == "08")) | |
3121 | + | then (go != "") | |
3122 | + | else false) | |
3123 | + | then (parseIntValue(go) > 0) | |
3124 | + | else false) | |
3125 | + | then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT]) | |
3126 | + | else 0 | |
3127 | + | } | |
3128 | + | } | |
3129 | + | let fT = am(this, A, ao, true) | |
3130 | + | let gp = fY(ld, gl, false, fT) | |
3131 | + | let mA = fo(gp) | |
3132 | + | $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0) | |
3133 | + | } | |
3134 | + | } | |
3135 | + | } | |
3136 | + | } | |
3137 | + | ||
3138 | + | ||
3139 | + | ||
3140 | + | @Callable(gw) | |
3141 | + | func fortificateLand (P,mB) = { | |
3142 | + | let kK = kH(gw) | |
3143 | + | if ((size(gw.payments) != 0)) | |
3144 | + | then throw("No payments required") | |
3145 | + | else { | |
3146 | + | let c = toString(gw.originCaller) | |
3147 | + | let A = valueOrElse(getString(bG(c)), "") | |
3148 | + | let ft = am(this, A, 0, false) | |
3149 | + | let mC = by(P) | |
3150 | + | let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_") | |
3151 | + | let je = value(assetInfo(fromBase58String(P))) | |
3152 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
3153 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
3154 | + | let hK = bw(P) | |
3155 | + | let hP = hJ(hK, hL, hM) | |
3156 | + | let mE = split(hP[bb], "_") | |
3157 | + | let mF = parseIntValue(mE[bd]) | |
3158 | + | let mG = parseIntValue(mE[be]) | |
3159 | + | let mH = split(mB, "_") | |
3160 | + | let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil) | |
3161 | + | let gl = mI._1 | |
3162 | + | let mJ = mI._2 | |
3163 | + | let mK = mI._3 | |
3164 | + | let mL = gf(mH, gl, mJ, mK, false, ft) | |
3165 | + | let gp = mL._1 | |
3166 | + | let mM = mL._2 | |
3167 | + | let mN = mL._3 | |
3168 | + | let mA = fo(gp) | |
3169 | + | let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_") | |
3170 | + | $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0) | |
3171 | + | } | |
3172 | + | } | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gw) | |
3177 | + | func initDuckTourAttempt (A) = if ((gw.caller != cU)) | |
3178 | + | then throw("Access denied") | |
3179 | + | else { | |
3180 | + | let kK = kH(gw) | |
3181 | + | let iN = z(A) | |
3182 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
3183 | + | let kX = valueOrElse(getInteger(iN), iO) | |
3184 | + | let mO = bI(A) | |
3185 | + | let jc = valueOrElse(getString(mO), aJ) | |
3186 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
3187 | + | let mP = (toString(cd) + "_T_0") | |
3188 | + | $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP) | |
3189 | + | } | |
3190 | + | ||
3191 | + | ||
3192 | + | ||
3193 | + | @Callable(gw) | |
3194 | + | func breakAttempt () = { | |
3195 | + | let kK = kH(gw) | |
3196 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
3197 | + | let mO = bI(A) | |
3198 | + | let jc = valueOrElse(getString(mO), aJ) | |
3199 | + | if ((split(jc, "_")[bl] != "T")) | |
3200 | + | then throw("Your duck is not in the tournament") | |
3201 | + | else { | |
3202 | + | let mQ = getIntegerValue(J(A)) | |
3203 | + | let mR = getStringValue(K(A)) | |
3204 | + | $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc) | |
3205 | + | } | |
3206 | + | } | |
3207 | + | ||
3208 | + | ||
3209 | + | ||
3210 | + | @Callable(gw) | |
3211 | + | func exitTournamentInternal (A) = if ((gw.caller != this)) | |
3212 | + | then throw("Access denied") | |
3213 | + | else { | |
3214 | + | let mQ = getIntegerValue(J(A)) | |
3215 | + | let mR = getStringValue(K(A)) | |
3216 | + | $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false) | |
3217 | + | } | |
3218 | + | ||
3219 | + | ||
3220 | + | ||
3221 | + | @Callable(gw) | |
3222 | + | func exitDeliveryInternal (A) = if ((gw.caller != this)) | |
3223 | + | then throw("Access denied") | |
3224 | + | else { | |
3225 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
3226 | + | let ax = lastBlock.timestamp | |
3227 | + | let kd = parseIntValue(jc[bk]) | |
3228 | + | let ke = parseIntValue(jc[bm]) | |
3229 | + | let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned") | |
3230 | + | let mS = z(A) | |
3231 | + | let kX = getIntegerValue(mS) | |
3232 | + | let mT = if ((ke >= 3)) | |
3233 | + | then { | |
3234 | + | let mU = invoke(cR, "sendDeliveryReward", [jh], nil) | |
3235 | + | if ((mU == mU)) | |
3236 | + | then nil | |
3237 | + | else throw("Strict value is not equal to itself.") | |
3238 | + | } | |
3239 | + | else { | |
3240 | + | let mV = valueOrElse(getInteger(cR, bN), 0) | |
3241 | + | let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil) | |
3242 | + | if ((mW == mW)) | |
3243 | + | then if ((0 >= kX)) | |
3244 | + | then nil | |
3245 | + | else [IntegerEntry(T(A), (kd + a))] | |
3246 | + | else throw("Strict value is not equal to itself.") | |
3247 | + | } | |
3248 | + | let mQ = getIntegerValue(J(A)) | |
3249 | + | let mR = getStringValue(K(A)) | |
3250 | + | $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false) | |
3251 | + | } | |
3252 | + | ||
3253 | + | ||
3254 | + | ||
3255 | + | @Callable(gw) | |
3256 | + | func prepareRobbery (iC,iD) = { | |
3257 | + | let kK = kH(gw) | |
3258 | + | if (!(sigVerify_8Kb(iC, iD, dK))) | |
3259 | + | then throw("signature does not match") | |
3260 | + | else if ((size(gw.payments) != 1)) | |
3261 | + | then throw("exactly 1 payment must be attached") | |
3262 | + | else { | |
3263 | + | let kL = gw.payments[0] | |
3264 | + | let mX = kL.amount | |
3265 | + | if (if (!(isDefined(kL.assetId))) | |
3266 | + | then true | |
3267 | + | else (value(kL.assetId) != db)) | |
3268 | + | then throw("WLGOLD payments only!") | |
3269 | + | else { | |
3270 | + | let fb = split(toUtf8String(iC), "|") | |
3271 | + | if ((size(fb) != 2)) | |
3272 | + | then throw("Wrong message format") | |
3273 | + | else { | |
3274 | + | let A = fb[0] | |
3275 | + | let ay = au(this, A)._1 | |
3276 | + | if ((ay > mX)) | |
3277 | + | then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay))) | |
3278 | + | else { | |
3279 | + | let mY = split(fb[1], "_") | |
3280 | + | let ax = lastBlock.timestamp | |
3281 | + | let az = valueOrElse(getInteger(R(A)), 0) | |
3282 | + | let aA = valueOrElse(getString(S(A)), "") | |
3283 | + | let aB = valueOrElse(getInteger(Q(aA)), 0) | |
3284 | + | if (if ((az != x)) | |
3285 | + | then (aB > ax) | |
3286 | + | else false) | |
3287 | + | then throw(("You already started robbing, wait till " + toString(aB))) | |
3288 | + | else { | |
3289 | + | func mZ (eD,P) = { | |
3290 | + | let na = valueOrElse(getInteger(O(P)), 0) | |
3291 | + | let nb = valueOrElse(getInteger(Q(P)), 0) | |
3292 | + | if ((na > size(u))) | |
3293 | + | then throw("Invalid state") | |
3294 | + | else if ((ax > nb)) | |
3295 | + | then { | |
3296 | + | let nc = valueOrElse(getInteger(bq(P)), 0) | |
3297 | + | if ((0 >= nc)) | |
3298 | + | then eD | |
3299 | + | else { | |
3300 | + | let gd = value(assetInfo(fromBase58String(P))) | |
3301 | + | let ji = split(gd.description, "_") | |
3302 | + | let iU = dr(ji[cX]) | |
3303 | + | let nd = iT(P, iU) | |
3304 | + | let gC = (ax - nc) | |
3305 | + | let jl = fraction(gC, (nd * iU), a) | |
3306 | + | if ((v > jl)) | |
3307 | + | then eD | |
3308 | + | else (eD :+ P) | |
3309 | + | } | |
3310 | + | } | |
3311 | + | else eD | |
3312 | + | } | |
3313 | + | ||
3314 | + | let ne = { | |
3315 | + | let eF = mY | |
3316 | + | let eG = size(eF) | |
3317 | + | let eH = nil | |
3318 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
3319 | + | then eJ | |
3320 | + | else mZ(eJ, eF[eK]) | |
3321 | + | ||
3322 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
3323 | + | then eJ | |
3324 | + | else throw("List size exceeds 10") | |
3325 | + | ||
3326 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3327 | + | } | |
3328 | + | if ((size(ne) == 0)) | |
3329 | + | then throw("No candidates for robbery") | |
3330 | + | else { | |
3331 | + | let nf = dC(size(ne), height, (iD + gw.transactionId)) | |
3332 | + | let P = ne[nf] | |
3333 | + | $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P) | |
1955 | 3334 | } | |
1956 | 3335 | } | |
1957 | 3336 | } | |
1958 | 3337 | } | |
1959 | 3338 | } | |
1960 | 3339 | } | |
1961 | - | ||
1962 | - | let hq = bG(z) | |
1963 | - | let hT = hp(hq) | |
1964 | - | let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_") | |
1965 | - | let kj = dh(b) | |
1966 | - | let kk = getString(kj) | |
1967 | - | let kl = if (isDefined(kk)) | |
1968 | - | then split_51C(value(kk), "_") | |
1969 | - | else nil | |
1970 | - | let km = split(value(assetInfo(fromBase58String(jY[0]))).description, "_")[cX] | |
1971 | - | let kn = split(valueOrElse(getString(df(km)), "0_0_0_0_0_0"), "_") | |
1972 | - | let eF = { | |
1973 | - | let ew = jY | |
1974 | - | let ex = size(ew) | |
1975 | - | let ey = $Tuple10(jX, 0, "", hT[bg], nil, gi, kl, 0, split("0_0_0_0_0_0", "_"), kn) | |
1976 | - | func ez (eA,eB) = if ((eB >= ex)) | |
1977 | - | then eA | |
1978 | - | else ka(eA, ew[eB]) | |
1979 | - | ||
1980 | - | func eC (eA,eB) = if ((eB >= ex)) | |
1981 | - | then eA | |
1982 | - | else throw("List size exceeds 5") | |
1983 | - | ||
1984 | - | eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5) | |
1985 | - | } | |
1986 | - | let dg = eF._3 | |
1987 | - | let gR = valueOrErrorMessage(indexOf(aN, dg), ("Unknown continent: " + dg)) | |
1988 | - | let gq = gW(eF._9, (dp(jW) / cs)) | |
1989 | - | let ir = valueOrElse(getInteger(dS()), (dR + 1)) | |
1990 | - | let ko = toString(ir) | |
1991 | - | let is = Issue(ej(ko, jW), makeString([ko, jW, gq, dg], "_"), 1, 0, false) | |
1992 | - | let bn = calculateAssetId(is) | |
1993 | - | let kp = toBase58String(bn) | |
1994 | - | let jx = makeString(eG((jZ > 0), split(hT[bh], "_"), jZ), "_") | |
1995 | - | let kq = di(b) | |
1996 | - | let kr = valueOrElse(getInteger(kq), 0) | |
1997 | - | $Tuple2((((((((((((((((eF._5 :+ (if ((size(eF._7) > 0)) | |
1998 | - | then StringEntry(kj, makeString_11C(eF._7, "_")) | |
1999 | - | else DeleteEntry(kj))) :+ IntegerEntry(kq, if ((eF._8 > kr)) | |
2000 | - | then 0 | |
2001 | - | else (kr - eF._8))) :+ IntegerEntry(dS(), (ir + 1))) :+ is) :+ StringEntry(dV(ko), kp)) :+ StringEntry(bm(kp), b)) :+ StringEntry(dY(ko), b)) :+ IntegerEntry(bq(aC, kp), eF._2)) :+ IntegerEntry(bw(kp), aj)) :+ IntegerEntry(dX(kp, b), aj)) :+ StringEntry(hq, makeString([hT[bf], eF._4, jx, hT[bi]], ":"))) :+ StringEntry(de(), makeString(eF._6, "_"))) :+ StringEntry(df(dg), makeString(eF._10, "_"))) :+ StringEntry(bH(z), makeString([dg, "L", kp], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bn)), kp) | |
2002 | - | } | |
2003 | - | } | |
2004 | - | ||
2005 | - | ||
2006 | - | func ks (b,jY) = jV("M", 3, "SSSS", b, jY, 0) | |
2007 | - | ||
2008 | - | ||
2009 | - | func kt (b,jY) = jV("L", 4, "SMM", b, jY, (cn * 4)) | |
2010 | - | ||
2011 | - | ||
2012 | - | func ku (b,jY) = jV("XL", 5, "SSSML", b, jY, (cn * 47)) | |
2013 | - | ||
2014 | - | ||
2015 | - | func kv (b,jY) = jV("XXL", 6, "LXL", b, jY, (cn * 54)) | |
2016 | - | ||
2017 | - | ||
2018 | - | func kw (b,jY) = { | |
2019 | - | let cl = size(jY) | |
2020 | - | if ((4 == cl)) | |
2021 | - | then ks(b, jY) | |
2022 | - | else if ((3 == cl)) | |
2023 | - | then kt(b, jY) | |
2024 | - | else if ((5 == cl)) | |
2025 | - | then ku(b, jY) | |
2026 | - | else if ((2 == cl)) | |
2027 | - | then kv(b, jY) | |
2028 | - | else throw("Unknown merge") | |
2029 | - | } | |
2030 | - | ||
2031 | - | ||
2032 | - | func kx (gn) = if (if ((gn.originCaller != cO)) | |
2033 | - | then valueOrElse(getBoolean(ds()), false) | |
2034 | - | else false) | |
2035 | - | then throw("Contracts are under maintenance") | |
2036 | - | else StringEntry(dt(toString(gn.originCaller)), toBase58String(gn.transactionId)) | |
2037 | - | ||
2038 | - | ||
2039 | - | @Callable(gn) | |
2040 | - | func constructorV1 (ky) = if ((gn.caller != this)) | |
2041 | - | then throw("Permission denied") | |
2042 | - | else [StringEntry(cI(), ky)] | |
2043 | - | ||
2044 | - | ||
2045 | - | ||
2046 | - | @Callable(gn) | |
2047 | - | func setBlocked (kz) = if ((gn.caller != this)) | |
2048 | - | then throw("permission denied") | |
2049 | - | else [BooleanEntry(ds(), kz)] | |
2050 | - | ||
2051 | - | ||
2052 | - | ||
2053 | - | @Callable(gn) | |
2054 | - | func stakeLand () = { | |
2055 | - | let kA = kx(gn) | |
2056 | - | if ((size(gn.payments) != 1)) | |
2057 | - | then throw("Exactly one payment required") | |
2058 | - | else { | |
2059 | - | let kB = value(gn.payments[0]) | |
2060 | - | let bn = value(kB.assetId) | |
2061 | - | let cz = toString(gn.caller) | |
2062 | - | if ((kB.amount != 1)) | |
2063 | - | then throw((("NFT " + aA) + " token should be attached as payment")) | |
2064 | - | else { | |
2065 | - | let iX = value(assetInfo(bn)) | |
2066 | - | if ((iX.issuer != this)) | |
2067 | - | then throw("Unknown issuer of token") | |
2068 | - | else if (!(contains(iX.name, aA))) | |
2069 | - | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
2070 | - | else { | |
2071 | - | let kC = drop(iX.name, 4) | |
2072 | - | let dW = if (contains(kC, "XXL")) | |
2073 | - | then dropRight(kC, 3) | |
2074 | - | else if (contains(kC, "XL")) | |
2075 | - | then dropRight(kC, 2) | |
2076 | - | else dropRight(kC, 1) | |
2077 | - | if (!(isDefined(parseInt(dW)))) | |
2078 | - | then throw(("Cannot parse land number from " + iX.name)) | |
2079 | - | else { | |
2080 | - | let O = toBase58String(bn) | |
2081 | - | let iY = bp(O) | |
2082 | - | if (isDefined(getInteger(iY))) | |
2083 | - | then throw((("NFT " + iX.name) + " is already staked")) | |
2084 | - | else { | |
2085 | - | let jb = split(iX.description, "_") | |
2086 | - | let gj = gp(jb[cW]) | |
2087 | - | let iN = dp(jb[cV]) | |
2088 | - | let hE = (iN / cs) | |
2089 | - | let eE = go(gj, hE, 1) | |
2090 | - | let kD = df(jb[cX]) | |
2091 | - | let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_") | |
2092 | - | let kE = makeString(gh(kn, gj, hE, 1), "_") | |
2093 | - | let kj = dh(cz) | |
2094 | - | let kk = getString(kj) | |
2095 | - | let kg = if (isDefined(kk)) | |
2096 | - | then split_51C(value(kk), "_") | |
2097 | - | else nil | |
2098 | - | if (containsElement(kg, O)) | |
2099 | - | then throw(("Your staked lands already contain " + O)) | |
2100 | - | else if ((size(kg) >= aE)) | |
2101 | - | then throw((("Your already staked max (" + toString(aE)) + ") lands")) | |
2102 | - | else { | |
2103 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2104 | - | let kq = di(cz) | |
2105 | - | let kF = valueOrElse(getInteger(kq), 0) | |
2106 | - | let kG = invoke(cR, "onStakeUnstakeLand", [cz], nil) | |
2107 | - | $Tuple2([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aA, O, cz), lastBlock.timestamp), StringEntry(kj, makeString_11C((kg :+ O), "_")), IntegerEntry(kq, (kF + iN)), StringEntry(bm(O), cz), StringEntry(dY(dW), cz), IntegerEntry(dX(O, cz), hF), StringEntry(de(), eE), StringEntry(kD, kE), kA], kG) | |
2108 | - | } | |
2109 | - | } | |
2110 | - | } | |
2111 | - | } | |
2112 | - | } | |
2113 | - | } | |
2114 | - | } | |
2115 | - | ||
2116 | - | ||
2117 | - | ||
2118 | - | @Callable(gn) | |
2119 | - | func unstakeLand (iT) = { | |
2120 | - | let kA = kx(gn) | |
2121 | - | if ((size(gn.payments) != 0)) | |
2122 | - | then throw("No payments required") | |
2123 | - | else { | |
2124 | - | let b = toString(gn.caller) | |
2125 | - | let fD = iR(b, ed, iT) | |
2126 | - | let O = fD._2 | |
2127 | - | let jb = fD._3 | |
2128 | - | let kj = dh(b) | |
2129 | - | let gj = gp(jb[cW]) | |
2130 | - | let iN = dp(jb[cV]) | |
2131 | - | let hE = (iN / cs) | |
2132 | - | let eE = go(gj, hE, -1) | |
2133 | - | let kD = df(jb[cX]) | |
2134 | - | let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_") | |
2135 | - | let kE = makeString(gh(kn, gj, hE, -1), "_") | |
2136 | - | let jy = jo(b, O, iN, ed) | |
2137 | - | let kg = split_51C(valueOrElse(getString(kj), ""), "_") | |
2138 | - | let cN = indexOf(kg, O) | |
2139 | - | if (!(isDefined(cN))) | |
2140 | - | then throw(("Your staked lands don't contain " + O)) | |
2141 | - | else { | |
2142 | - | let av = lastBlock.timestamp | |
2143 | - | let kH = valueOrElse(getInteger(cQ, bI(b)), 0) | |
2144 | - | if ((kH >= av)) | |
2145 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kH))) | |
2146 | - | else { | |
2147 | - | let kI = (valueOrElse(getInteger(cR, a(b)), 0) + co) | |
2148 | - | if ((kI > av)) | |
2149 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kI))) | |
2150 | - | else { | |
2151 | - | let kq = di(b) | |
2152 | - | let kr = valueOrElse(getInteger(kq), 0) | |
2153 | - | let kJ = if ((iN > kr)) | |
2154 | - | then 0 | |
2155 | - | else (kr - iN) | |
2156 | - | let kG = invoke(cR, "onStakeUnstakeLand", [b], nil) | |
2157 | - | $Tuple2([ScriptTransfer(gn.caller, 1, fromBase58String(O)), DeleteEntry(bp(O)), DeleteEntry(bs(aA, O, b)), StringEntry(de(), eE), StringEntry(kD, kE), StringEntry(jy._2, makeString(jy._3, ":")), if ((size(kg) > 1)) | |
2158 | - | then StringEntry(kj, makeString_11C(removeByIndex(kg, value(cN)), "_")) | |
2159 | - | else DeleteEntry(kj), IntegerEntry(kq, kJ), kA], kG) | |
2160 | - | } | |
2161 | - | } | |
2162 | - | } | |
2163 | - | } | |
2164 | - | } | |
2165 | - | ||
2166 | - | ||
2167 | - | ||
2168 | - | @Callable(gn) | |
2169 | - | func stakeDuck () = { | |
2170 | - | let kA = kx(gn) | |
2171 | - | if ((size(gn.payments) != 1)) | |
2172 | - | then throw("Exactly one payment required") | |
2173 | - | else { | |
2174 | - | let kB = value(gn.payments[0]) | |
2175 | - | let bn = value(kB.assetId) | |
2176 | - | let cz = toString(gn.caller) | |
2177 | - | if ((kB.amount != 1)) | |
2178 | - | then throw((("NFT " + aB) + " token should be attached as payment")) | |
2179 | - | else { | |
2180 | - | let iX = value(assetInfo(bn)) | |
2181 | - | if (if ((iX.issuer != dA)) | |
2182 | - | then (iX.issuer != dB) | |
2183 | - | else false) | |
2184 | - | then throw((("Unknown issuer of " + aB) + " token")) | |
2185 | - | else if (!(contains(iX.name, aB))) | |
2186 | - | then throw((("Only NFT " + aB) + " tokens are accepted")) | |
2187 | - | else { | |
2188 | - | let kK = toBase58String(bn) | |
2189 | - | let iY = bp(kK) | |
2190 | - | if (isDefined(getInteger(iY))) | |
2191 | - | then throw((("NFT " + iX.name) + " is already staked")) | |
2192 | - | else if (isDefined(getString(bF(cz)))) | |
2193 | - | then throw(("You already staked one duck: " + iX.name)) | |
2194 | - | else if (jU(kK)) | |
2195 | - | then throw("stakeDuck_checkTournament") | |
2196 | - | else { | |
2197 | - | let kL = bH(kK) | |
2198 | - | let ca = getString(kL) | |
2199 | - | let hq = bG(kK) | |
2200 | - | let kM = getString(hq) | |
2201 | - | let iG = y(kK) | |
2202 | - | let iH = ae(valueOrElse(getInteger(C(kK)), 0)) | |
2203 | - | let kN = valueOrElse(getInteger(iG), iH) | |
2204 | - | ([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aB, toBase58String(bn), cz), lastBlock.timestamp), StringEntry(bE(kK), cz), StringEntry(bF(cz), kK)] ++ (if (isDefined(ca)) | |
2205 | - | then nil | |
2206 | - | else ([StringEntry(kL, aI)] ++ (if (isDefined(kM)) | |
2207 | - | then nil | |
2208 | - | else (([StringEntry(hq, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iG, kN)) :+ kA))))) | |
2209 | - | } | |
2210 | - | } | |
2211 | - | } | |
2212 | - | } | |
2213 | - | } | |
2214 | - | ||
2215 | - | ||
2216 | - | ||
2217 | - | @Callable(gn) | |
2218 | - | func unstakeDuck (kK) = { | |
2219 | - | let kA = kx(gn) | |
2220 | - | if ((size(gn.payments) != 0)) | |
2221 | - | then throw("No payments required") | |
2222 | - | else { | |
2223 | - | let bn = fromBase58String(kK) | |
2224 | - | let cz = toString(gn.caller) | |
2225 | - | let iX = value(assetInfo(bn)) | |
2226 | - | let iY = bp(kK) | |
2227 | - | if (!(isDefined(getInteger(iY)))) | |
2228 | - | then throw((("NFT " + iX.name) + " is not staked")) | |
2229 | - | else if (!(isDefined(getString(bF(cz))))) | |
2230 | - | then throw((("The duck " + iX.name) + " is not staked")) | |
2231 | - | else { | |
2232 | - | let ja = valueOrErrorMessage(getString(bE(kK)), (("NFT " + iX.name) + " is orphaned")) | |
2233 | - | if ((ja != cz)) | |
2234 | - | then throw("Staked NFT is not yours") | |
2235 | - | else if (jU(kK)) | |
2236 | - | then throw("unstakeDuck_checkTournament") | |
2237 | - | else { | |
2238 | - | let iG = y(kK) | |
2239 | - | let iH = ae(valueOrElse(getInteger(C(kK)), 0)) | |
2240 | - | let aq = valueOrElse(getInteger(iG), iH) | |
2241 | - | if ((iH > aq)) | |
2242 | - | then throw((("Please heal your duck to " + toString(iH)) + "hp before unstaking")) | |
2243 | - | else [ScriptTransfer(gn.caller, 1, bn), DeleteEntry(iY), DeleteEntry(iG), DeleteEntry(bH(kK)), DeleteEntry(bE(kK)), DeleteEntry(bs(aB, kK, cz)), DeleteEntry(bF(cz)), kA] | |
2244 | - | } | |
2245 | - | } | |
2246 | - | } | |
2247 | - | } | |
2248 | - | ||
2249 | - | ||
2250 | - | ||
2251 | - | @Callable(gn) | |
2252 | - | func claimRes (el,kO) = { | |
2253 | - | let kA = kx(gn) | |
2254 | - | if ((size(gn.payments) != 0)) | |
2255 | - | then throw("No payments required") | |
2256 | - | else { | |
2257 | - | let b = toString(gn.originCaller) | |
2258 | - | let eM = jc(b, el, ed, kO) | |
2259 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2260 | - | $Tuple2(((((eM._1 ++ jE(z, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._3[bg]) | |
2261 | - | } | |
2262 | - | } | |
2263 | - | ||
2264 | - | ||
2265 | - | ||
2266 | - | @Callable(gn) | |
2267 | - | func claimResToWH (el,kO) = { | |
2268 | - | let kA = kx(gn) | |
2269 | - | if ((size(gn.payments) != 0)) | |
2270 | - | then throw("No payments required") | |
2271 | - | else { | |
2272 | - | let b = toString(gn.originCaller) | |
2273 | - | let eM = jc(b, el, ec, kO) | |
2274 | - | $Tuple2(((((eM._1 ++ jK(b, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._5[aX]) | |
2275 | - | } | |
2276 | - | } | |
2277 | - | ||
2278 | - | ||
2279 | - | ||
2280 | - | @Callable(gn) | |
2281 | - | func flight (iv,iw) = { | |
2282 | - | let kA = kx(gn) | |
2283 | - | if ((size(gn.payments) != 0)) | |
2284 | - | then throw("No payments required") | |
2285 | - | else { | |
2286 | - | let bJ = toString(gn.caller) | |
2287 | - | let gS = iu(bJ, iv, iw) | |
2288 | - | let iA = gS._1 | |
2289 | - | let z = gS._2 | |
2290 | - | let kL = bH(z) | |
2291 | - | let iV = valueOrElse(getString(kL), aI) | |
2292 | - | let iC = gS._4 | |
2293 | - | if ((iC == iV)) | |
2294 | - | then throw("You can't fly to the same location") | |
2295 | - | else { | |
2296 | - | let kP = split(iC, "_") | |
2297 | - | let kQ = (kP[bk] == "T") | |
2298 | - | let ga = E(z) | |
2299 | - | let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2300 | - | let kS = eN(kR, gS._5) | |
2301 | - | let kT = kS._1 | |
2302 | - | let kU = kS._2 | |
2303 | - | let kV = if (!(bZ(cS, iV))) | |
2304 | - | then if (kQ) | |
2305 | - | then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC)) | |
2306 | - | else if ((iA > 0)) | |
2307 | - | then iC | |
2308 | - | else iV | |
2309 | - | else if (!(bZ(cS, iC))) | |
2310 | - | then throw("Your duck is taking part in the tournament") | |
2311 | - | else { | |
2312 | - | let kW = parseIntValue(kP[bl]) | |
2313 | - | let kX = split(iV, "_") | |
2314 | - | let cb = valueOrElse(getInteger(cS, bM), 0) | |
2315 | - | if ((kW != (parseIntValue(kX[bl]) + 1))) | |
2316 | - | then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC)) | |
2317 | - | else if ((iA > 0)) | |
2318 | - | then { | |
2319 | - | let kY = valueOrElse(getInteger(cS, bQ(cb, z)), 0) | |
2320 | - | let kZ = if ((kW > kY)) | |
2321 | - | then invoke(cS, "saveDuckResult", [z, kW], nil) | |
2322 | - | else unit | |
2323 | - | if ((kZ == kZ)) | |
2324 | - | then iC | |
2325 | - | else throw("Strict value is not equal to itself.") | |
2326 | - | } | |
2327 | - | else iV | |
2328 | - | } | |
2329 | - | $Tuple2(([StringEntry(kL, kV), StringEntry(ga, kT), IntegerEntry(y(z), iA), kA] ++ (if (kU) | |
2330 | - | then [StringEntry(K(z), "0_0_0_0_0")] | |
2331 | - | else (nil ++ jE(z, if ((iA > 0)) | |
2332 | - | then T | |
2333 | - | else U)._1))), gS._3) | |
2334 | - | } | |
2335 | - | } | |
2336 | - | } | |
2337 | - | ||
2338 | - | ||
2339 | - | ||
2340 | - | @Callable(gn) | |
2341 | - | func heal (la,lb,lc) = { | |
2342 | - | let kA = kx(gn) | |
2343 | - | if (if (if ((0 > la)) | |
2344 | - | then true | |
2345 | - | else (0 > lb)) | |
2346 | - | then true | |
2347 | - | else (0 > lc)) | |
2348 | - | then throw("Quantity cannot be negative") | |
2349 | - | else { | |
2350 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2351 | - | if (jU(z)) | |
2352 | - | then throw("heal_checkTournament") | |
2353 | - | else { | |
2354 | - | let ld = [la, lb, lc] | |
2355 | - | let iG = y(z) | |
2356 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
2357 | - | let le = valueOrElse(getInteger(iG), iH) | |
2358 | - | if ((le >= iH)) | |
2359 | - | then throw((("HP should be < " + toString(iH)) + " to heal")) | |
2360 | - | else { | |
2361 | - | let hq = bG(z) | |
2362 | - | let hT = hp(hq) | |
2363 | - | let lf = if ((hT[bi] == "")) | |
2364 | - | then nil | |
2365 | - | else split_4C(hT[bi], "_") | |
2366 | - | func lg (eu,cf) = { | |
2367 | - | let dn = eu._2 | |
2368 | - | let gJ = if ((size(lf) > dn)) | |
2369 | - | then parseIntValue(lf[dn]) | |
2370 | - | else 0 | |
2371 | - | if ((3 > dn)) | |
2372 | - | then { | |
2373 | - | let lh = ld[dn] | |
2374 | - | if ((lh > gJ)) | |
2375 | - | then throw(((("You have only " + toString(gJ)) + " of ") + aM[dn])) | |
2376 | - | else $Tuple3((eu._1 :+ toString((gJ - lh))), (dn + 1), (eu._3 + (parseIntValue(split(cf, "_")[aS]) * lh))) | |
2377 | - | } | |
2378 | - | else $Tuple3((eu._1 :+ toString(gJ)), (dn + 1), eu._3) | |
2379 | - | } | |
2380 | - | ||
2381 | - | let eM = { | |
2382 | - | let ew = aQ | |
2383 | - | let ex = size(ew) | |
2384 | - | let ey = $Tuple3(nil, 0, 0) | |
2385 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2386 | - | then eA | |
2387 | - | else lg(eA, ew[eB]) | |
2388 | - | ||
2389 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2390 | - | then eA | |
2391 | - | else throw("List size exceeds 50") | |
2392 | - | ||
2393 | - | eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2394 | - | } | |
2395 | - | let li = min([iH, (le + eM._3)]) | |
2396 | - | $Tuple2(([IntegerEntry(iG, li), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], makeString(eM._1, "_")], ":")), kA] ++ jE(z, (ab * ((la + lb) + lc)))._1), li) | |
2397 | - | } | |
2398 | - | } | |
2399 | - | } | |
2400 | - | } | |
2401 | - | ||
2402 | - | ||
2403 | - | ||
2404 | - | @Callable(gn) | |
2405 | - | func healES () = { | |
2406 | - | let kA = kx(gn) | |
2407 | - | if ((size(gn.payments) != 1)) | |
2408 | - | then throw("Exactly one payment required") | |
2409 | - | else { | |
2410 | - | let kB = value(gn.payments[0]) | |
2411 | - | if ((kB.assetId != ck)) | |
2412 | - | then throw("Allowed USDT payment only!") | |
2413 | - | else { | |
2414 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2415 | - | if (jU(z)) | |
2416 | - | then throw("healES_checkTournament") | |
2417 | - | else { | |
2418 | - | let iG = y(z) | |
2419 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
2420 | - | let le = valueOrElse(getInteger(iG), iH) | |
2421 | - | if ((le > 0)) | |
2422 | - | then throw("HP should be 0 to call Emergency Service") | |
2423 | - | else { | |
2424 | - | let hq = bG(z) | |
2425 | - | let hT = hp(hq) | |
2426 | - | let lf = if ((hT[bi] == "")) | |
2427 | - | then nil | |
2428 | - | else split_4C(hT[bi], "_") | |
2429 | - | let lj = if ((size(lf) > 0)) | |
2430 | - | then parseIntValue(lf[0]) | |
2431 | - | else 0 | |
2432 | - | let lk = if ((size(lf) > 1)) | |
2433 | - | then parseIntValue(lf[1]) | |
2434 | - | else 0 | |
2435 | - | let ll = if ((size(lf) > 2)) | |
2436 | - | then parseIntValue(lf[2]) | |
2437 | - | else 0 | |
2438 | - | if (if (if ((lj > 0)) | |
2439 | - | then true | |
2440 | - | else (lk > 0)) | |
2441 | - | then true | |
2442 | - | else (ll > 0)) | |
2443 | - | then throw("You have to use own Medical Kit") | |
2444 | - | else { | |
2445 | - | let lm = getString(cP, bK()) | |
2446 | - | let ln = if (isDefined(lm)) | |
2447 | - | then split_4C(value(lm), "_") | |
2448 | - | else nil | |
2449 | - | let lo = if ((size(ln) > 0)) | |
2450 | - | then parseIntValue(ln[0]) | |
2451 | - | else 0 | |
2452 | - | if ((0 >= lo)) | |
2453 | - | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2454 | - | else { | |
2455 | - | let li = (le + parseIntValue(split(aQ[0], "_")[aS])) | |
2456 | - | let lp = makeString([toString((lo - 1)), removeByIndex(ln, 0)], "_") | |
2457 | - | let cf = split(aQ[0], "_") | |
2458 | - | let lq = ce(cf) | |
2459 | - | let lr = fraction((lq * aK), aJ, (cr * aV)) | |
2460 | - | if ((kB.amount != lr)) | |
2461 | - | then throw(("Payment attached should be " + toString(lr))) | |
2462 | - | else { | |
2463 | - | let eM = dj(invoke(cP, "updateEsStorage", [lp], [AttachedPayment(ck, lr)])) | |
2464 | - | $Tuple2(([IntegerEntry(iG, li), kA] ++ jE(z, V)._1), eM) | |
2465 | - | } | |
2466 | - | } | |
2467 | - | } | |
2468 | - | } | |
2469 | - | } | |
2470 | - | } | |
2471 | - | } | |
2472 | - | } | |
2473 | - | ||
2474 | - | ||
2475 | - | ||
2476 | - | @Callable(gn) | |
2477 | - | func updateBackpack (z,ls) = if ((gn.caller != cP)) | |
2478 | - | then throw("permission denied") | |
2479 | - | else $Tuple2([StringEntry(bG(z), ls)], ls) | |
2480 | - | ||
2481 | - | ||
2482 | - | ||
2483 | - | @Callable(gn) | |
2484 | - | func commitForRandom () = { | |
2485 | - | let kA = kx(gn) | |
2486 | - | let lt = (height + dc) | |
2487 | - | let b = toString(gn.caller) | |
2488 | - | $Tuple2(([IntegerEntry(dd(b), lt)] :+ kA), lt) | |
2489 | - | } | |
2490 | - | ||
2491 | - | ||
2492 | - | ||
2493 | - | @Callable(gn) | |
2494 | - | func awardSLand (cz) = if ((gn.caller != cS)) | |
2495 | - | then throw("Access denied") | |
2496 | - | else if ((size(gn.payments) != 0)) | |
2497 | - | then throw("No payments required") | |
2498 | - | else { | |
2499 | - | let eM = in(addressFromStringValue(cz), gn.transactionId) | |
2500 | - | $Tuple2(eM._1, eM._2._1) | |
2501 | - | } | |
2502 | - | ||
2503 | - | ||
2504 | - | ||
2505 | - | @Callable(gn) | |
2506 | - | func buySLand () = { | |
2507 | - | let kA = kx(gn) | |
2508 | - | if ((size(gn.payments) != 1)) | |
2509 | - | then throw("Exactly one payment required") | |
2510 | - | else { | |
2511 | - | let kB = value(gn.payments[0]) | |
2512 | - | if ((kB.assetId != ck)) | |
2513 | - | then throw("Allowed USDT payment only!") | |
2514 | - | else if ((kB.amount != dJ)) | |
2515 | - | then throw(("Payment attached should be " + toString(dJ))) | |
2516 | - | else { | |
2517 | - | let eM = in(gn.caller, gn.transactionId) | |
2518 | - | let lu = dm(invoke(cT, "burnAcres", [dK], nil)) | |
2519 | - | $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu)) | |
2520 | - | } | |
2521 | - | } | |
2522 | - | } | |
2523 | - | ||
2524 | - | ||
2525 | - | ||
2526 | - | @Callable(gn) | |
2527 | - | func expedition (iv,iw) = { | |
2528 | - | let kA = kx(gn) | |
2529 | - | if ((size(gn.payments) != 0)) | |
2530 | - | then throw("No payments required") | |
2531 | - | else { | |
2532 | - | let bJ = toString(gn.caller) | |
2533 | - | let gS = iu(bJ, iv, iw) | |
2534 | - | let z = gS._2 | |
2535 | - | let iG = y(z) | |
2536 | - | let hq = bG(z) | |
2537 | - | let hT = hp(hq) | |
2538 | - | let jv = split(hT[bh], "_") | |
2539 | - | let jx = makeString(eG(true, jv, dI), "_") | |
2540 | - | let ga = E(z) | |
2541 | - | let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2542 | - | let lv = eN(kR, gS._5) | |
2543 | - | let kT = lv._1 | |
2544 | - | let kU = lv._2 | |
2545 | - | let lw = in(gn.caller, gn.transactionId) | |
2546 | - | let it = lw._2._1 | |
2547 | - | let eM = if ((0 >= gS._1)) | |
2548 | - | then $Tuple3([IntegerEntry(iG, 0), StringEntry(ga, kT)], "", 0) | |
2549 | - | else $Tuple3((lw._1 ++ (if (kU) | |
2550 | - | then [StringEntry(K(z), "0_0_0_0_0")] | |
2551 | - | else ((((nil :+ StringEntry(bH(z), makeString([lw._2._2, "L", it], "_"))) :+ IntegerEntry(iG, gS._1)) :+ StringEntry(ga, kT)) :+ StringEntry(hq, makeString([hT[bf], hT[bg], jx, hT[bi]], ":"))))), it, gS._3) | |
2552 | - | if (jU(z)) | |
2553 | - | then throw("expedition_checkTournament") | |
2554 | - | else { | |
2555 | - | let lu = dm(invoke(cT, "burnAcres", [dK], nil)) | |
2556 | - | $Tuple2(((eM._1 ++ jE(z, X)._1) :+ kA), $Tuple3(eM._2, eM._3, lu)) | |
2557 | - | } | |
2558 | - | } | |
2559 | - | } | |
2560 | - | ||
2561 | - | ||
2562 | - | ||
2563 | - | @Callable(gn) | |
2564 | - | func buySLandForAcres () = { | |
2565 | - | let kA = kx(gn) | |
2566 | - | if ((size(gn.payments) != 1)) | |
2567 | - | then throw("exactly 1 payment must be attached") | |
2568 | - | else { | |
2569 | - | let kB = gn.payments[0] | |
2570 | - | let eT = kB.amount | |
2571 | - | if (if (!(isDefined(kB.assetId))) | |
2572 | - | then true | |
2573 | - | else (value(kB.assetId) != db)) | |
2574 | - | then throw("ACRES payments only!") | |
2575 | - | else if ((eT != dK)) | |
2576 | - | then throw(("Payment attached should be " + toString(dK))) | |
2577 | - | else { | |
2578 | - | let eM = in(gn.caller, gn.transactionId) | |
2579 | - | let lu = dm(invoke(cT, "burnAcres", [dK], [AttachedPayment(db, eT)])) | |
2580 | - | $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu)) | |
2581 | - | } | |
2582 | - | } | |
2583 | - | } | |
2584 | - | ||
2585 | - | ||
2586 | - | ||
2587 | - | @Callable(gn) | |
2588 | - | func upgradeInfra (O) = { | |
2589 | - | let kA = kx(gn) | |
2590 | - | if ((size(gn.payments) != 0)) | |
2591 | - | then throw("No payments required") | |
2592 | - | else { | |
2593 | - | let eM = jp(true, gn.caller, 0, O) | |
2594 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2595 | - | $Tuple2(((eM._1 :+ kA) ++ jE(z, fraction(Y, eM._3, cr))._1), eM._2) | |
2596 | - | } | |
2597 | - | } | |
2598 | - | ||
2599 | - | ||
2600 | - | ||
2601 | - | @Callable(gn) | |
2602 | - | func activateArtifact (lx,ly) = { | |
2603 | - | let kA = kx(gn) | |
2604 | - | if ((size(gn.payments) != 0)) | |
2605 | - | then throw("No payments required") | |
2606 | - | else { | |
2607 | - | let b = toString(gn.caller) | |
2608 | - | let eM = { | |
2609 | - | let cl = lx | |
2610 | - | if (("PRESALE" == cl)) | |
2611 | - | then jS(b, ly) | |
2612 | - | else if (("ONBOARD" == cl)) | |
2613 | - | then jL(b) | |
2614 | - | else throw("Unknown artifact") | |
2615 | - | } | |
2616 | - | (eM :+ kA) | |
2617 | - | } | |
2618 | - | } | |
2619 | - | ||
2620 | - | ||
2621 | - | ||
2622 | - | @Callable(gn) | |
2623 | - | func mergeLands (jY) = { | |
2624 | - | let kA = kx(gn) | |
2625 | - | if ((size(gn.payments) != 0)) | |
2626 | - | then throw("No payments required") | |
2627 | - | else { | |
2628 | - | let eM = kw(toString(gn.caller), jY) | |
2629 | - | $Tuple2(((eM._1 :+ kA) ++ jK(toString(gn.caller), Z)._1), eM._2) | |
2630 | - | } | |
2631 | - | } | |
2632 | - | ||
2633 | - | ||
2634 | - | ||
2635 | - | @Callable(gn) | |
2636 | - | func cargoExchange (lz,O) = { | |
2637 | - | let kA = kx(gn) | |
2638 | - | if ((size(gn.payments) != 0)) | |
2639 | - | then throw("No payments required") | |
2640 | - | else { | |
2641 | - | let hS = split_4C(lz, ":") | |
2642 | - | let b = toString(gn.originCaller) | |
2643 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2644 | - | let iY = bp(O) | |
2645 | - | if (!(isDefined(getInteger(iY)))) | |
2646 | - | then throw((iX.name + " is not staked")) | |
2647 | - | else { | |
2648 | - | let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned")) | |
2649 | - | if ((ja != b)) | |
2650 | - | then throw((aA + " is not yours")) | |
2651 | - | else { | |
2652 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
2653 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2654 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2655 | - | let iV = valueOrElse(getString(bH(z)), aI) | |
2656 | - | let cc = split(value(iV), "_") | |
2657 | - | if ((cc[bk] != "L")) | |
2658 | - | then throw((("Duck location type is " + cc[bk]) + ", but should be L")) | |
2659 | - | else if ((cc[bl] != O)) | |
2660 | - | then throw(("Duck should be on the land " + O)) | |
2661 | - | else { | |
2662 | - | let hD = bv(O) | |
2663 | - | let hu = hC(hD, hE, hF) | |
2664 | - | let hq = bG(z) | |
2665 | - | let hT = hp(hq) | |
2666 | - | let eM = hR(hS, hu, hT) | |
2667 | - | let hL = split(hu[ba], "_") | |
2668 | - | let jm = (parseIntValue(hL[bc]) + eM._7) | |
2669 | - | let jn = (parseIntValue(hL[bd]) - eM._7) | |
2670 | - | [StringEntry(hq, makeString_2C([hT[bf], eM._4, eM._5, eM._6], ":")), StringEntry(hD, makeString_2C([hu[aW], eM._1, eM._2, eM._3, makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")], ":")), kA] | |
2671 | - | } | |
2672 | - | } | |
2673 | - | } | |
2674 | - | } | |
2675 | - | } | |
2676 | - | ||
2677 | - | ||
2678 | - | ||
2679 | - | @Callable(gn) | |
2680 | - | func saveWarehouse (hH,O) = if ((gn.caller != cP)) | |
2681 | - | then throw("Access denied") | |
2682 | - | else { | |
2683 | - | let hD = bv(O) | |
2684 | - | let hI = split_4C(hH, ":") | |
2685 | - | if ((size(hI) != 5)) | |
2686 | - | then throw("warehouse string should contain 4 ':' separators") | |
2687 | - | else { | |
2688 | - | let lA = split(hI[ba], "_")[bb] | |
2689 | - | let jm = ht(hI) | |
2690 | - | let lB = hr(hI[aW]) | |
2691 | - | let jn = ((lB - parseIntValue(lA)) - jm) | |
2692 | - | let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([lA, toString(jm), toString(jn), toString(lB)], "_")], ":") | |
2693 | - | $Tuple2([StringEntry(hD, lC)], lC) | |
2694 | - | } | |
2695 | - | } | |
2696 | - | ||
2697 | - | ||
2698 | - | ||
2699 | - | @Callable(gn) | |
2700 | - | func fixWarehouseFormat (O) = if ((gn.caller != cO)) | |
2701 | - | then throw("Access denied") | |
2702 | - | else { | |
2703 | - | let hD = bv(O) | |
2704 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2705 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
2706 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2707 | - | let hI = hC(hD, hE, hF) | |
2708 | - | let lA = dm(invoke(cP, "recalcLockedVolumeREADONLY", [O, hI], nil)) | |
2709 | - | let jm = ht(hI) | |
2710 | - | let lB = hr(hI[aW]) | |
2711 | - | let jn = ((lB - lA) - jm) | |
2712 | - | let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([toString(lA), toString(jm), toString(jn), toString(lB)], "_")], ":") | |
2713 | - | $Tuple2([StringEntry(hD, lC)], lC) | |
2714 | - | } | |
2715 | - | ||
2716 | - | ||
2717 | - | ||
2718 | - | @Callable(gn) | |
2719 | - | func fixContinentProportions (jY) = if ((gn.caller != cO)) | |
2720 | - | then throw("Access denied") | |
2721 | - | else { | |
2722 | - | func lD (eu,lE) = (eu :+ valueOrElse(getString(df(lE)), "0_0_0_0_0_0")) | |
2723 | - | ||
2724 | - | let fX = { | |
2725 | - | let ew = aN | |
2726 | - | let ex = size(ew) | |
2727 | - | let ey = nil | |
2728 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2729 | - | then eA | |
2730 | - | else lD(eA, ew[eB]) | |
2731 | - | ||
2732 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2733 | - | then eA | |
2734 | - | else throw("List size exceeds 5") | |
2735 | - | ||
2736 | - | eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5) | |
2737 | - | } | |
2738 | - | func lF (eu,O) = { | |
2739 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2740 | - | let jb = split(iX.description, "_") | |
2741 | - | let hE = (dp(jb[cV]) / cs) | |
2742 | - | let lE = jb[cX] | |
2743 | - | let gj = gp(jb[cW]) | |
2744 | - | let gR = value(indexOf(aN, lE)) | |
2745 | - | let kn = split(eu[gR], "_") | |
2746 | - | let lG = makeString(gh(kn, gj, hE, 1), "_") | |
2747 | - | let cl = lE | |
2748 | - | if (("Americas" == cl)) | |
2749 | - | then [lG, eu[1], eu[2], eu[3], eu[4]] | |
2750 | - | else if (("Europe" == cl)) | |
2751 | - | then [eu[0], lG, eu[2], eu[3], eu[4]] | |
2752 | - | else if (("Asia" == cl)) | |
2753 | - | then [eu[0], eu[1], lG, eu[3], eu[4]] | |
2754 | - | else if (("Africa" == cl)) | |
2755 | - | then [eu[0], eu[1], eu[2], lG, eu[4]] | |
2756 | - | else if (("Oceania" == cl)) | |
2757 | - | then [eu[0], eu[1], eu[2], eu[3], lG] | |
2758 | - | else throw("wrong continent") | |
2759 | - | } | |
2760 | - | ||
2761 | - | let eF = { | |
2762 | - | let ew = jY | |
2763 | - | let ex = size(ew) | |
2764 | - | let ey = fX | |
2765 | - | func hk (eA,eB) = if ((eB >= ex)) | |
2766 | - | then eA | |
2767 | - | else lF(eA, ew[eB]) | |
2768 | - | ||
2769 | - | func hl (eA,eB) = if ((eB >= ex)) | |
2770 | - | then eA | |
2771 | - | else throw("List size exceeds 100") | |
2772 | - | ||
2773 | - | hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 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) | |
2774 | - | } | |
2775 | - | $Tuple2([StringEntry(df("Americas"), eF[0]), StringEntry(df("Europe"), eF[1]), StringEntry(df("Asia"), eF[2]), StringEntry(df("Africa"), eF[3]), StringEntry(df("Oceania"), eF[4])], 0) | |
2776 | - | } | |
2777 | - | ||
2778 | - | ||
2779 | - | ||
2780 | - | @Callable(gn) | |
2781 | - | func fixStakedPieces (cz) = if ((gn.caller != cO)) | |
2782 | - | then throw("Access denied") | |
2783 | - | else { | |
2784 | - | let kr = if ((cz == "")) | |
2785 | - | then 0 | |
2786 | - | else { | |
2787 | - | let kk = getString(al, dh(cz)) | |
2788 | - | let kg = if (isDefined(kk)) | |
2789 | - | then split_51C(value(kk), "_") | |
2790 | - | else nil | |
2791 | - | func lH (eu,O) = { | |
2792 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2793 | - | let dq = split(iX.description, "_")[cV] | |
2794 | - | (eu + dp(dq)) | |
2795 | - | } | |
2796 | - | ||
2797 | - | let ew = kg | |
2798 | - | let ex = size(ew) | |
2799 | - | let ey = 0 | |
2800 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2801 | - | then eA | |
2802 | - | else lH(eA, ew[eB]) | |
2803 | - | ||
2804 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2805 | - | then eA | |
2806 | - | else throw("List size exceeds 100") | |
2807 | - | ||
2808 | - | eC(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(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 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) | |
2809 | - | } | |
2810 | - | $Tuple2([IntegerEntry(di(cz), kr)], kr) | |
2811 | - | } | |
2812 | - | ||
2813 | - | ||
2814 | - | ||
2815 | - | @Callable(gn) | |
2816 | - | func setCustomName (bn,ki,br) = { | |
2817 | - | let kA = kx(gn) | |
2818 | - | if ((size(gn.payments) != 1)) | |
2819 | - | then throw("Exactly one payment required") | |
2820 | - | else { | |
2821 | - | let kB = value(gn.payments[0]) | |
2822 | - | if ((kB.assetId != ck)) | |
2823 | - | then throw("Allowed USDT payment only!") | |
2824 | - | else if ((kB.amount != dF)) | |
2825 | - | then throw(("Payment should be " + toString(dF))) | |
2826 | - | else if (contains(ki, "__")) | |
2827 | - | then throw(("Name should not contain '__': " + ki)) | |
2828 | - | else if ((size(ki) > dG)) | |
2829 | - | then throw(("Name too long, maxLength=" + toString(dG))) | |
2830 | - | else { | |
2831 | - | let b = toString(gn.originCaller) | |
2832 | - | let lI = { | |
2833 | - | let cl = br | |
2834 | - | if (("ACCOUNT" == cl)) | |
2835 | - | then { | |
2836 | - | let lJ = ea(ki) | |
2837 | - | let lK = getString(lJ) | |
2838 | - | if (isDefined(lK)) | |
2839 | - | then throw(("Name already registered: " + ki)) | |
2840 | - | else { | |
2841 | - | let lL = bz(b) | |
2842 | - | let lM = getString(lL) | |
2843 | - | let lN = if (isDefined(lM)) | |
2844 | - | then [DeleteEntry(ea(value(lM)))] | |
2845 | - | else nil | |
2846 | - | (((lN :+ StringEntry(lL, ki)) :+ StringEntry(lJ, b)) ++ jK(b, W)._1) | |
2847 | - | } | |
2848 | - | } | |
2849 | - | else if (("LAND" == cl)) | |
2850 | - | then { | |
2851 | - | let iX = value(assetInfo(fromBase58String(bn))) | |
2852 | - | let iY = bp(bn) | |
2853 | - | if (!(isDefined(getInteger(iY)))) | |
2854 | - | then throw((iX.name + " is not staked")) | |
2855 | - | else { | |
2856 | - | let ja = valueOrErrorMessage(getString(bm(bn)), (("NFT " + iX.name) + " is orphaned")) | |
2857 | - | if ((ja != b)) | |
2858 | - | then throw((aA + " is not yours")) | |
2859 | - | else { | |
2860 | - | let lJ = dT(ki) | |
2861 | - | let lK = getString(lJ) | |
2862 | - | if (isDefined(lK)) | |
2863 | - | then throw(("Name already registered: " + ki)) | |
2864 | - | else { | |
2865 | - | let lO = bo(bn) | |
2866 | - | let lM = getString(lO) | |
2867 | - | let lN = if (isDefined(lM)) | |
2868 | - | then [DeleteEntry(dT(value(lM)))] | |
2869 | - | else nil | |
2870 | - | (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jK(b, W)._1) | |
2871 | - | } | |
2872 | - | } | |
2873 | - | } | |
2874 | - | } | |
2875 | - | else if (("DUCK" == cl)) | |
2876 | - | then { | |
2877 | - | let iX = value(assetInfo(fromBase58String(bn))) | |
2878 | - | let iY = bp(bn) | |
2879 | - | if (if (!(isDefined(getInteger(iY)))) | |
2880 | - | then true | |
2881 | - | else !(isDefined(getString(bF(b))))) | |
2882 | - | then throw((iX.name + " is not staked")) | |
2883 | - | else { | |
2884 | - | let ja = valueOrErrorMessage(getString(bE(bn)), (("NFT " + iX.name) + " is orphaned")) | |
2885 | - | if ((ja != b)) | |
2886 | - | then throw((aB + " is not yours")) | |
2887 | - | else { | |
2888 | - | let lJ = dZ(ki) | |
2889 | - | let lK = getString(lJ) | |
2890 | - | if (isDefined(lK)) | |
2891 | - | then throw(("Name already registered: " + ki)) | |
2892 | - | else { | |
2893 | - | let lO = by(bn) | |
2894 | - | let lM = getString(lO) | |
2895 | - | let lN = if (isDefined(lM)) | |
2896 | - | then [DeleteEntry(dZ(value(lM)))] | |
2897 | - | else nil | |
2898 | - | (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jE(bn, W)._1) | |
2899 | - | } | |
2900 | - | } | |
2901 | - | } | |
2902 | - | } | |
2903 | - | else throw("Unknown entity type") | |
2904 | - | } | |
2905 | - | $Tuple2(((lI :+ ScriptTransfer(cP, kB.amount, ck)) :+ kA), 0) | |
2906 | - | } | |
2907 | - | } | |
2908 | - | } | |
2909 | - | ||
2910 | - | ||
2911 | - | ||
2912 | - | @Callable(gn) | |
2913 | - | func setReferrals (lP,lQ) = if ((gn.callerPublicKey != dC)) | |
2914 | - | then throw("Permission denied") | |
2915 | - | else { | |
2916 | - | let kA = kx(gn) | |
2917 | - | if ((size(gn.payments) != 0)) | |
2918 | - | then throw("No payments required") | |
2919 | - | else if (!(isDefined(addressFromString(lP)))) | |
2920 | - | then throw(("Invalid address: " + lP)) | |
2921 | - | else if (!(isDefined(addressFromString(lQ)))) | |
2922 | - | then throw(("Invalid address: " + lQ)) | |
2923 | - | else { | |
2924 | - | let lR = eb() | |
2925 | - | let lS = getString(lR) | |
2926 | - | let lT = if (isDefined(lS)) | |
2927 | - | then split_4C(value(lS), "_") | |
2928 | - | else nil | |
2929 | - | if (containsElement(lT, lQ)) | |
2930 | - | then throw((lQ + " is not newbie (already has referrals)")) | |
2931 | - | else { | |
2932 | - | let jM = bA(lQ) | |
2933 | - | let jN = getString(jM) | |
2934 | - | if (if (isDefined(jN)) | |
2935 | - | then isDefined(addressFromString(value(jN))) | |
2936 | - | else false) | |
2937 | - | then throw(((lQ + " already has refBy: ") + value(jN))) | |
2938 | - | else { | |
2939 | - | let lU = bD(lP) | |
2940 | - | let lV = getString(lU) | |
2941 | - | let lW = if (isDefined(lV)) | |
2942 | - | then split_4C(value(lV), "_") | |
2943 | - | else nil | |
2944 | - | if (containsElement(lW, lQ)) | |
2945 | - | then throw((((lP + " already contains ") + lQ) + " within referrals")) | |
2946 | - | else { | |
2947 | - | let lX = makeString_2C((lW :+ lQ), "_") | |
2948 | - | let lY = if (containsElement(lT, lP)) | |
2949 | - | then value(lS) | |
2950 | - | else makeString_2C((lT :+ lP), "_") | |
2951 | - | $Tuple2([StringEntry(jM, lP), StringEntry(lU, lX), StringEntry(lR, lY), kA], 0) | |
2952 | - | } | |
2953 | - | } | |
2954 | - | } | |
2955 | - | } | |
2956 | - | } | |
2957 | - | ||
2958 | - | ||
2959 | - | ||
2960 | - | @Callable(gn) | |
2961 | - | func distributePoints (lZ,ma,mb,mc,md) = { | |
2962 | - | let kA = kx(gn) | |
2963 | - | if ((size(gn.payments) != 0)) | |
2964 | - | then throw("No payments required") | |
2965 | - | else { | |
2966 | - | let b = toString(gn.originCaller) | |
2967 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2968 | - | let me = H(b) | |
2969 | - | let mf = valueOrElse(getInteger(al, me), 0) | |
2970 | - | let mg = D(z) | |
2971 | - | let mh = valueOrElse(getInteger(al, mg), 0) | |
2972 | - | let mi = (mf + mh) | |
2973 | - | let mj = ((((lZ + ma) + mb) + mc) + md) | |
2974 | - | if ((mj > mi)) | |
2975 | - | then throw((("There are only " + toString(mi)) + " free points to distribute")) | |
2976 | - | else { | |
2977 | - | let mk = A(z) | |
2978 | - | let ao = split(valueOrElse(getString(al, mk), "0_0_0_0_0"), "_") | |
2979 | - | let ml = (mf - mj) | |
2980 | - | $Tuple2([IntegerEntry(me, if ((0 > ml)) | |
2981 | - | then 0 | |
2982 | - | else ml), IntegerEntry(mg, if ((0 > ml)) | |
2983 | - | then (mh + ml) | |
2984 | - | else mh), StringEntry(mk, makeString([toString((parseIntValue(ao[j]) + lZ)), toString((parseIntValue(ao[k]) + ma)), toString((parseIntValue(ao[l]) + mb)), toString((parseIntValue(ao[m]) + mc)), toString((parseIntValue(ao[n]) + md))], "_")), kA], 0) | |
2985 | - | } | |
2986 | - | } | |
2987 | - | } | |
2988 | - | ||
2989 | - | ||
2990 | - | ||
2991 | - | @Callable(gn) | |
2992 | - | func splitByGlobalWeightsREADONLY (el) = $Tuple2(nil, eD(el)) | |
2993 | - | ||
2994 | - | ||
2995 | - | ||
2996 | - | @Callable(gn) | |
2997 | - | func splitByGlobalAndLocalWeightsREADONLY (mm,mn,gq) = { | |
2998 | - | let gj = gp(gq) | |
2999 | - | $Tuple2(nil, $Tuple2(eD(mm), eo(mn, gj))) | |
3000 | - | } | |
3001 | - | ||
3002 | - | ||
3003 | - | ||
3004 | - | @Callable(gn) | |
3005 | - | func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hp(bG(z)), ":")) | |
3006 | - | ||
3007 | - | ||
3008 | - | ||
3009 | - | @Callable(gn) | |
3010 | - | func getWarehouseREADONLY (O) = { | |
3011 | - | let iX = value(assetInfo(fromBase58String(O))) | |
3012 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
3013 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
3014 | - | $Tuple2(nil, makeString_2C(hC(bv(O), hE, hF), ":")) | |
3015 | - | } | |
3016 | - | ||
3017 | - | ||
3018 | - | ||
3019 | - | @Callable(gn) | |
3020 | - | func saveLastTx () = { | |
3021 | - | let io = gn.caller | |
3022 | - | if (!(containsElement([cR, cP, cS, cT], io))) | |
3023 | - | then throw("Access denied") | |
3024 | - | else $Tuple2([kx(gn)], 42) | |
3025 | - | } | |
3026 | - | ||
3027 | - | ||
3028 | - | ||
3029 | - | @Callable(gn) | |
3030 | - | func updateDuckStats (z,jF) = if ((gn.caller != cP)) | |
3031 | - | then throw("Access denied") | |
3032 | - | else jE(z, jF) | |
3033 | - | ||
3034 | - | ||
3035 | - | ||
3036 | - | @Callable(gn) | |
3037 | - | func updateAccStats (b,jF) = if ((gn.caller != cP)) | |
3038 | - | then throw("Access denied") | |
3039 | - | else jK(b, jF) | |
3040 | - | ||
3041 | - | ||
3042 | - | ||
3043 | - | @Callable(gn) | |
3044 | - | func equipDuck (mo) = { | |
3045 | - | let kA = kx(gn) | |
3046 | - | if ((size(gn.payments) != 0)) | |
3047 | - | then throw("No payments required") | |
3048 | - | else { | |
3049 | - | let b = toString(gn.originCaller) | |
3050 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
3051 | - | if (jU(z)) | |
3052 | - | then throw("equipDuck_checkTournament") | |
3053 | - | else { | |
3054 | - | let ga = E(z) | |
3055 | - | let mp = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3056 | - | let hq = bG(z) | |
3057 | - | let hT = hp(hq) | |
3058 | - | let kT = split(mo, "_") | |
3059 | - | if ((size(kT) != p)) | |
3060 | - | then throw("Wrong equipment string") | |
3061 | - | else { | |
3062 | - | let gc = fP(mp, fa(hT[bi]), true, nil) | |
3063 | - | let gd = split(kT[o], ";")[1] | |
3064 | - | let am = if ((gd == "")) | |
3065 | - | then 0 | |
3066 | - | else { | |
3067 | - | let ge = split(gd, ",")[0] | |
3068 | - | if ((ge == "")) | |
3069 | - | then 0 | |
3070 | - | else { | |
3071 | - | let fp = split(ge, ":") | |
3072 | - | let cN = fp[0] | |
3073 | - | let gf = fp[1] | |
3074 | - | if (if (if (if (if ((cN == "06")) | |
3075 | - | then true | |
3076 | - | else (cN == "07")) | |
3077 | - | then true | |
3078 | - | else (cN == "08")) | |
3079 | - | then (gf != "") | |
3080 | - | else false) | |
3081 | - | then (parseIntValue(gf) > 0) | |
3082 | - | else false) | |
3083 | - | then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS]) | |
3084 | - | else 0 | |
3085 | - | } | |
3086 | - | } | |
3087 | - | let fK = ak(this, z, am, true) | |
3088 | - | let gg = fP(kT, gc, false, fK) | |
3089 | - | let mq = ff(gg) | |
3090 | - | $Tuple2([StringEntry(ga, mo), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], mq], ":")), StringEntry(K(z), makeString([toString(fK[7]), toString(fK[8]), toString(fK[9]), toString(fK[10]), toString(fK[11])], "_")), kA], 0) | |
3091 | - | } | |
3092 | - | } | |
3093 | - | } | |
3094 | - | } | |
3095 | - | ||
3096 | - | ||
3097 | - | ||
3098 | - | @Callable(gn) | |
3099 | - | func fortificateLand (O,mr) = { | |
3100 | - | let kA = kx(gn) | |
3101 | - | if ((size(gn.payments) != 0)) | |
3102 | - | then throw("No payments required") | |
3103 | - | else { | |
3104 | - | let b = toString(gn.originCaller) | |
3105 | - | let z = valueOrElse(getString(bF(b)), "") | |
3106 | - | let fk = ak(this, z, 0, false) | |
3107 | - | let ms = bx(O) | |
3108 | - | let mt = split(valueOrElse(getString(ms), ":0_15:0_18:0"), "_") | |
3109 | - | let iX = value(assetInfo(fromBase58String(O))) | |
3110 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
3111 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
3112 | - | let hD = bv(O) | |
3113 | - | let hI = hC(hD, hE, hF) | |
3114 | - | let mu = split(hI[ba], "_") | |
3115 | - | let mv = parseIntValue(mu[bc]) | |
3116 | - | let mw = parseIntValue(mu[bd]) | |
3117 | - | let mx = split(mr, "_") | |
3118 | - | let my = fW(mt, fa(hI[aZ]), mv, mw, true, nil) | |
3119 | - | let gc = my._1 | |
3120 | - | let mz = my._2 | |
3121 | - | let mA = my._3 | |
3122 | - | let mB = fW(mx, gc, mz, mA, false, fk) | |
3123 | - | let gg = mB._1 | |
3124 | - | let mC = mB._2 | |
3125 | - | let mD = mB._3 | |
3126 | - | let mq = ff(gg) | |
3127 | - | let jD = makeString([mu[bb], toString(mC), toString(mD), mu[be]], "_") | |
3128 | - | $Tuple2([StringEntry(ms, mr), StringEntry(hD, makeString_2C([hI[aW], hI[aX], hI[aY], mq, jD], ":")), kA], 0) | |
3129 | - | } | |
3130 | - | } | |
3131 | - | ||
3132 | - | ||
3133 | - | ||
3134 | - | @Callable(gn) | |
3135 | - | func initDuckTourAttempt (z) = if ((gn.caller != cS)) | |
3136 | - | then throw("Access denied") | |
3137 | - | else { | |
3138 | - | let kA = kx(gn) | |
3139 | - | let iG = y(z) | |
3140 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
3141 | - | let kN = valueOrElse(getInteger(iG), iH) | |
3142 | - | let mE = bH(z) | |
3143 | - | let iV = valueOrElse(getString(mE), aI) | |
3144 | - | let cb = valueOrElse(getInteger(cS, bM), 0) | |
3145 | - | let mF = (toString(cb) + "_T_0") | |
3146 | - | $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mF)], mF) | |
3147 | - | } | |
3148 | - | ||
3149 | - | ||
3150 | - | ||
3151 | - | @Callable(gn) | |
3152 | - | func breakAttempt () = { | |
3153 | - | let kA = kx(gn) | |
3154 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
3155 | - | let mE = bH(z) | |
3156 | - | let iV = valueOrElse(getString(mE), aI) | |
3157 | - | if ((split(iV, "_")[bk] != "T")) | |
3158 | - | then throw("Your duck is not in the tournament") | |
3159 | - | else { | |
3160 | - | let mG = getIntegerValue(I(z)) | |
3161 | - | let mH = getStringValue(J(z)) | |
3162 | - | $Tuple2([kA, IntegerEntry(y(z), mG), StringEntry(mE, mH)], iV) | |
3163 | - | } | |
3164 | - | } | |
3165 | - | ||
3166 | - | ||
3167 | - | ||
3168 | - | @Callable(gn) | |
3169 | - | func exitTournamentInternal (z) = if ((gn.caller != this)) | |
3170 | - | then throw("Access denied") | |
3171 | - | else { | |
3172 | - | let mG = getIntegerValue(I(z)) | |
3173 | - | let mH = getStringValue(J(z)) | |
3174 | - | $Tuple2([IntegerEntry(y(z), mG), StringEntry(bH(z), mH)], false) | |
3175 | - | } | |
3176 | - | ||
3177 | - | ||
3178 | - | ||
3179 | - | @Callable(gn) | |
3180 | - | func prepareRobbery (iv,iw) = { | |
3181 | - | let kA = kx(gn) | |
3182 | - | if (!(sigVerify_8Kb(iv, iw, dC))) | |
3183 | - | then throw("signature does not match") | |
3184 | - | else if ((size(gn.payments) != 1)) | |
3185 | - | then throw("exactly 1 payment must be attached") | |
3186 | - | else { | |
3187 | - | let kB = gn.payments[0] | |
3188 | - | let mI = kB.amount | |
3189 | - | if (if (!(isDefined(kB.assetId))) | |
3190 | - | then true | |
3191 | - | else (value(kB.assetId) != cZ)) | |
3192 | - | then throw("WLGOLD payments only!") | |
3193 | - | else { | |
3194 | - | let eS = split(toUtf8String(iv), "|") | |
3195 | - | if ((size(eS) != 2)) | |
3196 | - | then throw("Wrong message format") | |
3197 | - | else { | |
3198 | - | let z = eS[0] | |
3199 | - | let aw = as(this, z)._1 | |
3200 | - | if ((aw > mI)) | |
3201 | - | then throw(((("Payment " + toString(mI)) + " < required ") + toString(aw))) | |
3202 | - | else { | |
3203 | - | let mJ = split(eS[1], "_") | |
3204 | - | let av = lastBlock.timestamp | |
3205 | - | let ax = valueOrElse(getInteger(Q(z)), 0) | |
3206 | - | let ay = valueOrElse(getString(R(z)), "") | |
3207 | - | let az = valueOrElse(getInteger(P(ay)), 0) | |
3208 | - | if (if ((ax != w)) | |
3209 | - | then (az > av) | |
3210 | - | else false) | |
3211 | - | then throw(("You already started robbing, wait till " + toString(az))) | |
3212 | - | else { | |
3213 | - | func mK (eu,O) = { | |
3214 | - | let mL = valueOrElse(getInteger(N(O)), 0) | |
3215 | - | let mM = valueOrElse(getInteger(P(O)), 0) | |
3216 | - | if ((mL > size(t))) | |
3217 | - | then throw("Invalid state") | |
3218 | - | else if ((av > mM)) | |
3219 | - | then { | |
3220 | - | let mN = valueOrElse(getInteger(bp(O)), 0) | |
3221 | - | if ((0 >= mN)) | |
3222 | - | then eu | |
3223 | - | else { | |
3224 | - | let fU = value(assetInfo(fromBase58String(O))) | |
3225 | - | let jb = split(fU.description, "_") | |
3226 | - | let iN = dp(jb[cV]) | |
3227 | - | let mO = iM(O, iN) | |
3228 | - | let gt = (av - mN) | |
3229 | - | let je = fraction(gt, (mO * iN), aG) | |
3230 | - | if ((u > je)) | |
3231 | - | then eu | |
3232 | - | else (eu :+ O) | |
3233 | - | } | |
3234 | - | } | |
3235 | - | else eu | |
3236 | - | } | |
3237 | - | ||
3238 | - | let mP = { | |
3239 | - | let ew = mJ | |
3240 | - | let ex = size(ew) | |
3241 | - | let ey = nil | |
3242 | - | func ez (eA,eB) = if ((eB >= ex)) | |
3243 | - | then eA | |
3244 | - | else mK(eA, ew[eB]) | |
3245 | - | ||
3246 | - | func eC (eA,eB) = if ((eB >= ex)) | |
3247 | - | then eA | |
3248 | - | else throw("List size exceeds 10") | |
3249 | - | ||
3250 | - | eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3251 | - | } | |
3252 | - | if ((size(mP) == 0)) | |
3253 | - | then throw("No candidates for robbery") | |
3254 | - | else { | |
3255 | - | let mQ = du(size(mP), height, (iw + gn.transactionId)) | |
3256 | - | let O = mP[mQ] | |
3257 | - | $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kA], O) | |
3258 | - | } | |
3259 | - | } | |
3260 | - | } | |
3261 | - | } | |
3262 | - | } | |
3263 | - | } | |
3264 | - | } | |
3265 | - | ||
3266 | - | ||
3267 | - | ||
3268 | - | @Callable(gn) | |
3269 | - | func robLand (iv,iw) = { | |
3270 | - | let kA = kx(gn) | |
3271 | - | if (!(sigVerify_8Kb(iv, iw, dC))) | |
3340 | + | } | |
3341 | + | ||
3342 | + | ||
3343 | + | ||
3344 | + | @Callable(gw) | |
3345 | + | func robLand (iC,iD) = { | |
3346 | + | let kK = kH(gw) | |
3347 | + | if (!(sigVerify_8Kb(iC, iD, dK))) | |
3272 | 3348 | then throw("signature does not match") | |
3273 | 3349 | else { | |
3274 | - | let | |
3275 | - | let | |
3276 | - | let | |
3277 | - | $Tuple2([ | |
3278 | - | } | |
3279 | - | } | |
3280 | - | ||
3281 | - | ||
3282 | - | ||
3283 | - | @Callable( | |
3284 | - | func acceptDelivery () = if (!( | |
3350 | + | let bK = toString(gw.caller) | |
3351 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
3352 | + | let ax = lastBlock.timestamp | |
3353 | + | $Tuple2([kK, IntegerEntry(M(A), ax)], 0) | |
3354 | + | } | |
3355 | + | } | |
3356 | + | ||
3357 | + | ||
3358 | + | ||
3359 | + | @Callable(gw) | |
3360 | + | func acceptDelivery () = if (!(ck)) | |
3285 | 3361 | then throw("Delivery feature is turned off!") | |
3286 | 3362 | else { | |
3287 | - | let kA = kx(gn) | |
3288 | - | let bJ = toString(gn.caller) | |
3289 | - | let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked") | |
3290 | - | let mR = valueOrElse(getInteger(cP, bL), 0) | |
3291 | - | if ((aL > mR)) | |
3292 | - | then throw(("Delivery is not available, fund=" + toString(mR))) | |
3363 | + | let kK = kH(gw) | |
3364 | + | let bK = toString(gw.caller) | |
3365 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
3366 | + | let ng = valueOrElse(getInteger(cR, bM), 0) | |
3367 | + | let mV = valueOrElse(getInteger(cR, bN), 0) | |
3368 | + | if ((aM > (ng - mV))) | |
3369 | + | then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6))) | |
3293 | 3370 | else { | |
3294 | - | let iG = y(z) | |
3295 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
3296 | - | let kN = valueOrElse(getInteger(iG), iH) | |
3297 | - | let mE = bH(z) | |
3298 | - | let iV = valueOrElse(getString(mE), aI) | |
3299 | - | let av = lastBlock.timestamp | |
3300 | - | let mS = (toString(av) + "_D_0") | |
3301 | - | $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mS)], mS) | |
3371 | + | let ax = lastBlock.timestamp | |
3372 | + | let nh = valueOrElse(getInteger(T(A)), 0) | |
3373 | + | if ((nh > ax)) | |
3374 | + | then throw(("Delivery is forbidden for your duck until " + toString(nh))) | |
3375 | + | else if (kb(A)) | |
3376 | + | then throw("acceptDelivery_checkTournament") | |
3377 | + | else if (kc(A)) | |
3378 | + | then throw("acceptDelivery_checkDelivery") | |
3379 | + | else { | |
3380 | + | let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil)) | |
3381 | + | let iN = z(A) | |
3382 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
3383 | + | let kX = valueOrElse(getInteger(iN), iO) | |
3384 | + | let mO = bI(A) | |
3385 | + | let jc = valueOrElse(getString(mO), aJ) | |
3386 | + | let nj = (toString(ax) + "_D_0") | |
3387 | + | $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni)) | |
3388 | + | } | |
3302 | 3389 | } | |
3303 | 3390 | } | |
3304 | 3391 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | - | ||
5 | - | ||
6 | - | ||
7 | - | ||
8 | - | ||
9 | - | let d = | |
10 | - | ||
11 | - | let e = | |
12 | - | ||
13 | - | let f = | |
14 | - | ||
15 | - | let g = | |
16 | - | ||
17 | - | let h = | |
18 | - | ||
19 | - | let i = | |
20 | - | ||
21 | - | let j = | |
22 | - | ||
23 | - | let k = | |
24 | - | ||
25 | - | let l = | |
26 | - | ||
27 | - | let m = | |
28 | - | ||
29 | - | let n = | |
30 | - | ||
31 | - | let o = | |
32 | - | ||
33 | - | let p = | |
34 | - | ||
35 | - | let q = | |
4 | + | let a = 86400000 | |
5 | + | ||
6 | + | func b (c) = ("lastArbTimeUser_" + c) | |
7 | + | ||
8 | + | ||
9 | + | let d = 100000000 | |
10 | + | ||
11 | + | let e = 3200 | |
12 | + | ||
13 | + | let f = 4000 | |
14 | + | ||
15 | + | let g = 3 | |
16 | + | ||
17 | + | let h = 100000000 | |
18 | + | ||
19 | + | let i = 400 | |
20 | + | ||
21 | + | let j = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
22 | + | ||
23 | + | let k = 0 | |
24 | + | ||
25 | + | let l = 1 | |
26 | + | ||
27 | + | let m = 2 | |
28 | + | ||
29 | + | let n = 3 | |
30 | + | ||
31 | + | let o = 4 | |
32 | + | ||
33 | + | let p = 0 | |
34 | + | ||
35 | + | let q = 6 | |
36 | 36 | ||
37 | 37 | let r = 2 | |
38 | 38 | ||
39 | - | let s = 30 | |
40 | - | ||
41 | - | let t = [0, 600000, 900000, 43200000, 21600000] | |
42 | - | ||
43 | - | let u = 20000000 | |
44 | - | ||
45 | - | let v = 1 | |
46 | - | ||
47 | - | let w = 0 | |
48 | - | ||
49 | - | let x = 1 | |
50 | - | ||
51 | - | func y (z) = ("duckHealth_" + z) | |
52 | - | ||
53 | - | ||
54 | - | func A (z) = ("duckChars_" + z) | |
55 | - | ||
56 | - | ||
57 | - | func B (z) = ("duckXP_" + z) | |
58 | - | ||
59 | - | ||
60 | - | func C (z) = ("duckLevel_" + z) | |
61 | - | ||
62 | - | ||
63 | - | func D (z) = ("duckFreePoints_" + z) | |
64 | - | ||
65 | - | ||
66 | - | func E (z) = ("duckEquipment_" + z) | |
67 | - | ||
68 | - | ||
69 | - | func F (b) = ("userXP_" + b) | |
70 | - | ||
71 | - | ||
72 | - | func G (b) = ("userLevel_" + b) | |
73 | - | ||
74 | - | ||
75 | - | func H (b) = ("userFreePoints_" + b) | |
76 | - | ||
77 | - | ||
78 | - | func I (z) = ("savedHealth_" + z) | |
79 | - | ||
80 | - | ||
81 | - | func J (z) = ("savedLocation_" + z) | |
82 | - | ||
83 | - | ||
84 | - | func K (z) = ("duckBuffs_" + z) | |
85 | - | ||
86 | - | ||
87 | - | func L (z) = ("lastRobberyTime_" + z) | |
88 | - | ||
89 | - | ||
90 | - | func M (z) = ("lastRobberyCost_" + z) | |
91 | - | ||
92 | - | ||
93 | - | func N (O) = ("landRobberyState_" + O) | |
94 | - | ||
95 | - | ||
96 | - | func P (O) = ("landCooldownETA_" + O) | |
97 | - | ||
98 | - | ||
99 | - | func Q (z) = ("duckRobberyState_" + z) | |
100 | - | ||
101 | - | ||
102 | - | func R (z) = ("lockedLandByDuck_" + z) | |
103 | - | ||
104 | - | ||
105 | - | let S = 10000 | |
106 | - | ||
107 | - | let T = 10000 | |
108 | - | ||
109 | - | let U = 2000 | |
110 | - | ||
111 | - | let V = 100000 | |
112 | - | ||
113 | - | let W = 1000000 | |
114 | - | ||
115 | - | let X = 5000000 | |
116 | - | ||
117 | - | let Y = 10000 | |
118 | - | ||
119 | - | let Z = 1000000 | |
120 | - | ||
121 | - | let aa = 1000000 | |
122 | - | ||
123 | - | let ab = 10000 | |
124 | - | ||
125 | - | func ac (ad) = fraction(d, pow(ad, 4, e, 4, 4, DOWN), c) | |
126 | - | ||
127 | - | ||
128 | - | func ae (af) = (100 + af) | |
129 | - | ||
130 | - | ||
131 | - | func ag (ah,ai) = { | |
132 | - | let aj = ac(ai) | |
133 | - | [aj, (f * (aj - ah))] | |
134 | - | } | |
135 | - | ||
136 | - | ||
137 | - | func ak (al,z,am,an) = { | |
138 | - | let ao = split(valueOrElse(getString(al, A(z)), "0_0_0_0_0"), "_") | |
139 | - | let ap = valueOrElse(getInteger(al, C(z)), 0) | |
140 | - | let aq = valueOrElse(getInteger(al, y(z)), ae(ap)) | |
141 | - | let ar = split(valueOrElse(getString(al, K(z)), "0_0_0_0_0"), "_") | |
142 | - | ([parseIntValue(ao[j]), parseIntValue(ao[k]), parseIntValue(ao[l]), parseIntValue(ao[m]), parseIntValue(ao[n]), ap, aq] ++ (if (an) | |
143 | - | then [am, am, am, am, am] | |
144 | - | else [parseIntValue(ar[j]), parseIntValue(ar[k]), parseIntValue(ar[l]), parseIntValue(ar[m]), parseIntValue(ar[n])])) | |
145 | - | } | |
146 | - | ||
147 | - | ||
148 | - | func as (al,z) = { | |
149 | - | let at = valueOrElse(getInteger(al, M(z)), 0) | |
150 | - | let au = valueOrElse(getInteger(al, L(z)), 0) | |
151 | - | let av = lastBlock.timestamp | |
152 | - | let aw = max([g, (at - (h * (av - au)))]) | |
153 | - | let ax = valueOrElse(getInteger(al, Q(z)), 0) | |
154 | - | let ay = valueOrElse(getString(al, R(z)), "") | |
155 | - | let az = valueOrElse(getInteger(al, P(ay)), 0) | |
156 | - | $Tuple5(aw, au, ax, ay, az) | |
157 | - | } | |
158 | - | ||
159 | - | ||
160 | - | let aA = "LAND" | |
161 | - | ||
162 | - | let aB = "DUCK" | |
163 | - | ||
164 | - | let aC = "PRESALE" | |
165 | - | ||
166 | - | let aD = 6 | |
167 | - | ||
168 | - | let aE = 25 | |
169 | - | ||
170 | - | let aF = 3456000 | |
171 | - | ||
172 | - | let aG = 86400000 | |
173 | - | ||
174 | - | let aH = 10000000000 | |
175 | - | ||
176 | - | let aI = "Africa_F_Africa" | |
177 | - | ||
178 | - | let aJ = 39637 | |
179 | - | ||
180 | - | let aK = 10 | |
181 | - | ||
182 | - | let aL = 50000 | |
183 | - | ||
184 | - | let aM = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
185 | - | ||
186 | - | let aN = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
187 | - | ||
188 | - | let aO = 10000000 | |
189 | - | ||
190 | - | let aP = [15, 16, 17, 18, 19, 20] | |
191 | - | ||
192 | - | let aQ = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
193 | - | ||
194 | - | let aR = 6 | |
195 | - | ||
196 | - | let aS = 8 | |
197 | - | ||
198 | - | let aT = 9 | |
199 | - | ||
200 | - | let aU = 10 | |
39 | + | let s = 2 | |
40 | + | ||
41 | + | let t = 30 | |
42 | + | ||
43 | + | let u = [0, 600000, 900000, 43200000, 21600000] | |
44 | + | ||
45 | + | let v = 20000000 | |
46 | + | ||
47 | + | let w = 1 | |
48 | + | ||
49 | + | let x = 0 | |
50 | + | ||
51 | + | let y = 1 | |
52 | + | ||
53 | + | func z (A) = ("duckHealth_" + A) | |
54 | + | ||
55 | + | ||
56 | + | func B (A) = ("duckChars_" + A) | |
57 | + | ||
58 | + | ||
59 | + | func C (A) = ("duckXP_" + A) | |
60 | + | ||
61 | + | ||
62 | + | func D (A) = ("duckLevel_" + A) | |
63 | + | ||
64 | + | ||
65 | + | func E (A) = ("duckFreePoints_" + A) | |
66 | + | ||
67 | + | ||
68 | + | func F (A) = ("duckEquipment_" + A) | |
69 | + | ||
70 | + | ||
71 | + | func G (c) = ("userXP_" + c) | |
72 | + | ||
73 | + | ||
74 | + | func H (c) = ("userLevel_" + c) | |
75 | + | ||
76 | + | ||
77 | + | func I (c) = ("userFreePoints_" + c) | |
78 | + | ||
79 | + | ||
80 | + | func J (A) = ("savedHealth_" + A) | |
81 | + | ||
82 | + | ||
83 | + | func K (A) = ("savedLocation_" + A) | |
84 | + | ||
85 | + | ||
86 | + | func L (A) = ("duckBuffs_" + A) | |
87 | + | ||
88 | + | ||
89 | + | func M (A) = ("lastRobberyTime_" + A) | |
90 | + | ||
91 | + | ||
92 | + | func N (A) = ("lastRobberyCost_" + A) | |
93 | + | ||
94 | + | ||
95 | + | func O (P) = ("landRobberyState_" + P) | |
96 | + | ||
97 | + | ||
98 | + | func Q (P) = ("landCooldownETA_" + P) | |
99 | + | ||
100 | + | ||
101 | + | func R (A) = ("duckRobberyState_" + A) | |
102 | + | ||
103 | + | ||
104 | + | func S (A) = ("lockedLandByDuck_" + A) | |
105 | + | ||
106 | + | ||
107 | + | func T (A) = ("deliveryDelayByDuck_" + A) | |
108 | + | ||
109 | + | ||
110 | + | let U = 10000 | |
111 | + | ||
112 | + | let V = 10000 | |
113 | + | ||
114 | + | let W = 2000 | |
115 | + | ||
116 | + | let X = 100000 | |
117 | + | ||
118 | + | let Y = 1000000 | |
119 | + | ||
120 | + | let Z = 5000000 | |
121 | + | ||
122 | + | let aa = 10000 | |
123 | + | ||
124 | + | let ab = 1000000 | |
125 | + | ||
126 | + | let ac = 1000000 | |
127 | + | ||
128 | + | let ad = 10000 | |
129 | + | ||
130 | + | func ae (af) = fraction(e, pow(af, 4, f, 4, 4, DOWN), d) | |
131 | + | ||
132 | + | ||
133 | + | func ag (ah) = (100 + ah) | |
134 | + | ||
135 | + | ||
136 | + | func ai (aj,ak) = { | |
137 | + | let al = ae(ak) | |
138 | + | [al, (g * (al - aj))] | |
139 | + | } | |
140 | + | ||
141 | + | ||
142 | + | func am (an,A,ao,ap) = { | |
143 | + | let aq = split(valueOrElse(getString(an, B(A)), "0_0_0_0_0"), "_") | |
144 | + | let ar = valueOrElse(getInteger(an, D(A)), 0) | |
145 | + | let as = valueOrElse(getInteger(an, z(A)), ag(ar)) | |
146 | + | let at = split(valueOrElse(getString(an, L(A)), "0_0_0_0_0"), "_") | |
147 | + | ([parseIntValue(aq[k]), parseIntValue(aq[l]), parseIntValue(aq[m]), parseIntValue(aq[n]), parseIntValue(aq[o]), ar, as] ++ (if (ap) | |
148 | + | then [ao, ao, ao, ao, ao] | |
149 | + | else [parseIntValue(at[k]), parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o])])) | |
150 | + | } | |
151 | + | ||
152 | + | ||
153 | + | func au (an,A) = { | |
154 | + | let av = valueOrElse(getInteger(an, N(A)), 0) | |
155 | + | let aw = valueOrElse(getInteger(an, M(A)), 0) | |
156 | + | let ax = lastBlock.timestamp | |
157 | + | let ay = max([h, (av - (i * (ax - aw)))]) | |
158 | + | let az = valueOrElse(getInteger(an, R(A)), 0) | |
159 | + | let aA = valueOrElse(getString(an, S(A)), "") | |
160 | + | let aB = valueOrElse(getInteger(an, Q(aA)), 0) | |
161 | + | $Tuple5(ay, aw, az, aA, aB) | |
162 | + | } | |
163 | + | ||
164 | + | ||
165 | + | let aC = "LAND" | |
166 | + | ||
167 | + | let aD = "DUCK" | |
168 | + | ||
169 | + | let aE = "PRESALE" | |
170 | + | ||
171 | + | let aF = 6 | |
172 | + | ||
173 | + | let aG = 25 | |
174 | + | ||
175 | + | let aH = 3456000 | |
176 | + | ||
177 | + | let aI = 10000000000 | |
178 | + | ||
179 | + | let aJ = "Africa_F_Africa" | |
180 | + | ||
181 | + | let aK = 39637 | |
182 | + | ||
183 | + | let aL = 10 | |
184 | + | ||
185 | + | let aM = 50000 | |
186 | + | ||
187 | + | let aN = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"] | |
188 | + | ||
189 | + | let aO = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
190 | + | ||
191 | + | let aP = 10000000 | |
192 | + | ||
193 | + | let aQ = [15, 16, 17, 18, 19, 20] | |
194 | + | ||
195 | + | let aR = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"] | |
196 | + | ||
197 | + | let aS = 6 | |
198 | + | ||
199 | + | let aT = 8 | |
200 | + | ||
201 | + | let aU = 9 | |
201 | 202 | ||
202 | 203 | let aV = 10 | |
203 | 204 | ||
204 | - | let aW = | |
205 | - | ||
206 | - | let aX = | |
207 | - | ||
208 | - | let aY = | |
209 | - | ||
210 | - | let aZ = | |
211 | - | ||
212 | - | let ba = | |
213 | - | ||
214 | - | let bb = | |
215 | - | ||
216 | - | let bc = | |
217 | - | ||
218 | - | let bd = | |
219 | - | ||
220 | - | let be = | |
221 | - | ||
222 | - | let bf = | |
223 | - | ||
224 | - | let bg = | |
225 | - | ||
226 | - | let bh = | |
227 | - | ||
228 | - | let bi = | |
229 | - | ||
230 | - | let bj = | |
231 | - | ||
232 | - | let bk = | |
233 | - | ||
234 | - | let bl = | |
235 | - | ||
236 | - | ||
237 | - | ||
238 | - | ||
239 | - | ||
240 | - | ||
241 | - | ||
242 | - | ||
243 | - | ||
244 | - | ||
245 | - | ||
246 | - | ||
247 | - | ||
248 | - | ||
249 | - | ||
250 | - | ||
251 | - | ||
252 | - | ||
253 | - | ||
254 | - | ||
255 | - | ||
256 | - | ||
257 | - | ||
258 | - | ||
259 | - | ||
260 | - | ||
261 | - | ||
262 | - | ||
263 | - | ||
264 | - | ||
265 | - | ||
266 | - | ||
267 | - | ||
268 | - | ||
269 | - | ||
270 | - | ||
271 | - | ||
272 | - | ||
273 | - | ||
274 | - | ||
275 | - | ||
276 | - | ||
277 | - | ||
278 | - | ||
279 | - | ||
280 | - | ||
281 | - | ||
282 | - | ||
283 | - | ||
284 | - | ||
285 | - | ||
286 | - | ||
287 | - | ||
288 | - | ||
289 | - | ||
290 | - | ||
291 | - | ||
292 | - | ||
293 | - | ||
294 | - | ||
295 | - | ||
296 | - | ||
297 | - | ||
298 | - | let bM = " | |
299 | - | ||
300 | - | ||
301 | - | ||
302 | - | ||
303 | - | ||
304 | - | ||
305 | - | ||
306 | - | ||
307 | - | ||
308 | - | ||
309 | - | ||
310 | - | ||
311 | - | ||
312 | - | ||
313 | - | let bT = | |
205 | + | let aW = 10 | |
206 | + | ||
207 | + | let aX = 0 | |
208 | + | ||
209 | + | let aY = 1 | |
210 | + | ||
211 | + | let aZ = 2 | |
212 | + | ||
213 | + | let ba = 3 | |
214 | + | ||
215 | + | let bb = 4 | |
216 | + | ||
217 | + | let bc = 0 | |
218 | + | ||
219 | + | let bd = 1 | |
220 | + | ||
221 | + | let be = 2 | |
222 | + | ||
223 | + | let bf = 3 | |
224 | + | ||
225 | + | let bg = 0 | |
226 | + | ||
227 | + | let bh = 1 | |
228 | + | ||
229 | + | let bi = 2 | |
230 | + | ||
231 | + | let bj = 3 | |
232 | + | ||
233 | + | let bk = 0 | |
234 | + | ||
235 | + | let bl = 1 | |
236 | + | ||
237 | + | let bm = 2 | |
238 | + | ||
239 | + | func bn (bo) = ("no_" + bo) | |
240 | + | ||
241 | + | ||
242 | + | func bp (bo) = ("lcna_" + bo) | |
243 | + | ||
244 | + | ||
245 | + | func bq (bo) = ("st_" + bo) | |
246 | + | ||
247 | + | ||
248 | + | func br (bs,bo) = makeString(["las", bs, bo], "_") | |
249 | + | ||
250 | + | ||
251 | + | func bt (bu,bo,bv) = ((((("sttao_" + bu) + "_") + bo) + "_") + bv) | |
252 | + | ||
253 | + | ||
254 | + | func bw (P) = ("wh_" + P) | |
255 | + | ||
256 | + | ||
257 | + | func bx (bo) = ("infraLevel_" + bo) | |
258 | + | ||
259 | + | ||
260 | + | func by (P) = ("fortifications_" + P) | |
261 | + | ||
262 | + | ||
263 | + | func bz (bo) = ("duckCustomNameByAssetId_" + bo) | |
264 | + | ||
265 | + | ||
266 | + | func bA (c) = ("accountCustomNameByAddr_" + c) | |
267 | + | ||
268 | + | ||
269 | + | func bB (c) = ("accRefBy_" + c) | |
270 | + | ||
271 | + | ||
272 | + | func bC (A) = ("onboardArtActivatedOnDuck_" + A) | |
273 | + | ||
274 | + | ||
275 | + | func bD (c) = ("onboardArtActivatedDuckBy_" + c) | |
276 | + | ||
277 | + | ||
278 | + | func bE (c) = ("accReferrals_" + c) | |
279 | + | ||
280 | + | ||
281 | + | func bF (bo) = ("duckOwner_" + bo) | |
282 | + | ||
283 | + | ||
284 | + | func bG (bv) = ("stakedDuckByOwner_" + bv) | |
285 | + | ||
286 | + | ||
287 | + | func bH (A) = ("backPack_" + A) | |
288 | + | ||
289 | + | ||
290 | + | func bI (A) = ("duckLocation_" + A) | |
291 | + | ||
292 | + | ||
293 | + | func bJ (bK) = ("%s%s__userGwlReleaseTime__" + bK) | |
294 | + | ||
295 | + | ||
296 | + | func bL () = "emergencyWarehouseProducts" | |
297 | + | ||
298 | + | ||
299 | + | let bM = "deliveryFund" | |
300 | + | ||
301 | + | let bN = "deliveryLocked" | |
302 | + | ||
303 | + | let bO = "%s__lastTourId" | |
304 | + | ||
305 | + | func bP (bQ) = ("%s%d__tourStaticData__" + toString(bQ)) | |
306 | + | ||
307 | + | ||
308 | + | func bR (bQ) = ("%s%d__tourDynamicData__" + toString(bQ)) | |
309 | + | ||
310 | + | ||
311 | + | func bS (bQ,A) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bQ), A], "__") | |
312 | + | ||
313 | + | ||
314 | + | let bT = 0 | |
314 | 315 | ||
315 | 316 | let bU = 1 | |
316 | 317 | ||
317 | - | func bV (bW,bO) = { | |
318 | - | let bX = split(valueOrErrorMessage(getString(bW, bN(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__") | |
319 | - | let bY = split_4C(valueOrErrorMessage(getString(bW, bP(bO)), (("Error reading tournament " + toString(bO)) + " data")), "__") | |
320 | - | [bX, bY] | |
321 | - | } | |
322 | - | ||
323 | - | ||
324 | - | func bZ (bW,ca) = { | |
325 | - | let cb = valueOrElse(getInteger(bW, bM), 0) | |
326 | - | let cc = split(ca, "_") | |
327 | - | let av = lastBlock.timestamp | |
328 | - | let cd = bV(bW, cb) | |
329 | - | let bX = cd[bR] | |
330 | - | let bY = cd[bS] | |
331 | - | if (if (if ((cc[bk] == "T")) | |
332 | - | then (parseIntValue(cc[bj]) == cb) | |
318 | + | let bV = 6 | |
319 | + | ||
320 | + | let bW = 1 | |
321 | + | ||
322 | + | func bX (bY,bQ) = { | |
323 | + | let bZ = split(valueOrErrorMessage(getString(bY, bP(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__") | |
324 | + | let ca = split_4C(valueOrErrorMessage(getString(bY, bR(bQ)), (("Error reading tournament " + toString(bQ)) + " data")), "__") | |
325 | + | [bZ, ca] | |
326 | + | } | |
327 | + | ||
328 | + | ||
329 | + | func cb (bY,cc) = { | |
330 | + | let cd = valueOrElse(getInteger(bY, bO), 0) | |
331 | + | let ce = split(cc, "_") | |
332 | + | let ax = lastBlock.timestamp | |
333 | + | let cf = bX(bY, cd) | |
334 | + | let bZ = cf[bT] | |
335 | + | let ca = cf[bU] | |
336 | + | if (if (if ((ce[bl] == "T")) | |
337 | + | then (parseIntValue(ce[bk]) == cd) | |
333 | 338 | else false) | |
334 | - | then ( | |
339 | + | then (ca[bW] == "INPROGRESS") | |
335 | 340 | else false) | |
336 | - | then (parseIntValue( | |
341 | + | then (parseIntValue(bZ[bV]) > ax) | |
337 | 342 | else false | |
338 | 343 | } | |
339 | 344 | ||
340 | 345 | ||
341 | - | func | |
342 | - | ||
343 | - | ||
344 | - | let | |
345 | - | ||
346 | - | let | |
347 | - | ||
348 | - | let | |
349 | - | ||
350 | - | let | |
351 | - | ||
352 | - | let | |
353 | - | let | |
354 | - | if ((base58'2W' == | |
346 | + | func cg (ch) = (parseIntValue(ch[aS]) * aP) | |
347 | + | ||
348 | + | ||
349 | + | let ci = false | |
350 | + | ||
351 | + | let cj = false | |
352 | + | ||
353 | + | let ck = true | |
354 | + | ||
355 | + | let cl = take(drop(this.bytes, 1), 1) | |
356 | + | ||
357 | + | let cm = { | |
358 | + | let cn = cl | |
359 | + | if ((base58'2W' == cn)) | |
355 | 360 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
356 | - | else if ((base58'2T' == | |
361 | + | else if ((base58'2T' == cn)) | |
357 | 362 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
358 | 363 | else throw("Unknown chain") | |
359 | 364 | } | |
360 | 365 | ||
361 | - | let | |
362 | - | let | |
363 | - | if ((base58'2W' == | |
366 | + | let co = { | |
367 | + | let cn = cl | |
368 | + | if ((base58'2W' == cn)) | |
364 | 369 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
365 | - | else if ((base58'2T' == | |
370 | + | else if ((base58'2T' == cn)) | |
366 | 371 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
367 | 372 | else throw("Unknown chain") | |
368 | 373 | } | |
369 | 374 | ||
370 | - | let | |
371 | - | let | |
372 | - | if ((base58'2W' == | |
375 | + | let cp = { | |
376 | + | let cn = cl | |
377 | + | if ((base58'2W' == cn)) | |
373 | 378 | then 10000000000 | |
374 | - | else if ((base58'2T' == | |
379 | + | else if ((base58'2T' == cn)) | |
375 | 380 | then 100000000 | |
376 | 381 | else throw("Unknown chain") | |
377 | 382 | } | |
378 | 383 | ||
379 | - | let | |
380 | - | let | |
381 | - | if ((base58'2W' == | |
384 | + | let cq = { | |
385 | + | let cn = cl | |
386 | + | if ((base58'2W' == cn)) | |
382 | 387 | then 86400000 | |
383 | - | else if ((base58'2T' == | |
388 | + | else if ((base58'2T' == cn)) | |
384 | 389 | then 60000 | |
385 | 390 | else throw("Unknown chain") | |
386 | 391 | } | |
387 | 392 | ||
388 | - | let | |
389 | - | ||
390 | - | let | |
391 | - | ||
392 | - | let | |
393 | - | ||
394 | - | let | |
395 | - | ||
396 | - | let | |
397 | - | ||
398 | - | let | |
399 | - | ||
400 | - | let | |
401 | - | ||
402 | - | let | |
403 | - | ||
404 | - | let | |
405 | - | ||
406 | - | func | |
407 | - | ||
408 | - | ||
409 | - | let | |
410 | - | ||
411 | - | let | |
412 | - | ||
413 | - | let | |
414 | - | ||
415 | - | let | |
416 | - | ||
417 | - | let | |
418 | - | ||
419 | - | let | |
420 | - | ||
421 | - | func | |
422 | - | ||
423 | - | ||
424 | - | func | |
425 | - | ||
426 | - | ||
427 | - | func | |
428 | - | ||
429 | - | ||
430 | - | func | |
431 | - | ||
432 | - | ||
433 | - | let | |
434 | - | ||
435 | - | let | |
436 | - | ||
437 | - | let | |
438 | - | ||
439 | - | let | |
440 | - | ||
441 | - | let | |
442 | - | ||
443 | - | let | |
444 | - | ||
445 | - | let | |
446 | - | ||
447 | - | let | |
448 | - | ||
449 | - | let | |
450 | - | ||
451 | - | let | |
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 | - | ||
472 | - | ||
473 | - | func | |
474 | - | ||
475 | - | ||
476 | - | func | |
477 | - | ||
478 | - | ||
479 | - | func | |
480 | - | ||
481 | - | ||
482 | - | func | |
483 | - | let | |
484 | - | if ($isInstanceOf( | |
393 | + | let cr = "__" | |
394 | + | ||
395 | + | let cs = 1000000 | |
396 | + | ||
397 | + | let ct = 100000000 | |
398 | + | ||
399 | + | let cu = 25 | |
400 | + | ||
401 | + | let cv = 100 | |
402 | + | ||
403 | + | let cw = 225 | |
404 | + | ||
405 | + | let cx = 400 | |
406 | + | ||
407 | + | let cy = 625 | |
408 | + | ||
409 | + | let cz = [0, 1, 2, 3, 4, 5] | |
410 | + | ||
411 | + | func cA (cB,cC) = valueOrErrorMessage(getString(cB, cC), makeString(["mandatory ", toString(cB), ".", cC, " is not defined"], "")) | |
412 | + | ||
413 | + | ||
414 | + | let cD = 1 | |
415 | + | ||
416 | + | let cE = 2 | |
417 | + | ||
418 | + | let cF = 3 | |
419 | + | ||
420 | + | let cG = 4 | |
421 | + | ||
422 | + | let cH = 7 | |
423 | + | ||
424 | + | let cI = 8 | |
425 | + | ||
426 | + | func cJ () = "%s__restConfig" | |
427 | + | ||
428 | + | ||
429 | + | func cK () = "%s__restAddr" | |
430 | + | ||
431 | + | ||
432 | + | func cL (cM) = split_4C(cA(cM, cJ()), cr) | |
433 | + | ||
434 | + | ||
435 | + | func cN (cO,cP) = valueOrErrorMessage(addressFromString(cO[cP]), ("Rest cfg doesn't contain address at index " + toString(cP))) | |
436 | + | ||
437 | + | ||
438 | + | let cQ = addressFromStringValue(valueOrElse(getString(this, cK()), co)) | |
439 | + | ||
440 | + | let cO = cL(cQ) | |
441 | + | ||
442 | + | let an = cN(cO, cD) | |
443 | + | ||
444 | + | let cR = cN(cO, cE) | |
445 | + | ||
446 | + | let cS = cN(cO, cF) | |
447 | + | ||
448 | + | let cT = cN(cO, cG) | |
449 | + | ||
450 | + | let cU = cN(cO, cH) | |
451 | + | ||
452 | + | let cV = cN(cO, cI) | |
453 | + | ||
454 | + | let cW = 0 | |
455 | + | ||
456 | + | let cX = 1 | |
457 | + | ||
458 | + | let cY = 2 | |
459 | + | ||
460 | + | let cZ = 3 | |
461 | + | ||
462 | + | let da = "wlg_assetId" | |
463 | + | ||
464 | + | let db = valueOrErrorMessage(getBinary(cT, da), "WLGOLD is not issued yet") | |
465 | + | ||
466 | + | let dc = "acresAssetId" | |
467 | + | ||
468 | + | let dd = valueOrErrorMessage(getBinary(cV, dc), "ACRES is not issued yet") | |
469 | + | ||
470 | + | let de = 2 | |
471 | + | ||
472 | + | func df (cB) = ("finishBlockForAddr_" + cB) | |
473 | + | ||
474 | + | ||
475 | + | func dg () = "resTypesProportions" | |
476 | + | ||
477 | + | ||
478 | + | func dh (di) = ("resTypesByContinent_" + di) | |
479 | + | ||
480 | + | ||
481 | + | func dj (bv) = ("stakedLandsByOwner_" + bv) | |
482 | + | ||
483 | + | ||
484 | + | func dk (bv) = ("stakedPiecesByOwner_" + bv) | |
485 | + | ||
486 | + | ||
487 | + | func dl (dm) = { | |
488 | + | let cn = dm | |
489 | + | if ($isInstanceOf(cn, "String")) | |
485 | 490 | then { | |
486 | - | let | |
487 | - | | |
491 | + | let dn = cn | |
492 | + | dn | |
488 | 493 | } | |
489 | 494 | else throw("fail to cast into String") | |
490 | 495 | } | |
491 | 496 | ||
492 | 497 | ||
493 | - | func | |
494 | - | let | |
495 | - | if ($isInstanceOf( | |
498 | + | func do (dm) = { | |
499 | + | let cn = dm | |
500 | + | if ($isInstanceOf(cn, "Int")) | |
496 | 501 | then { | |
497 | - | let dn = cl | |
502 | + | let dp = cn | |
503 | + | dp | |
504 | + | } | |
505 | + | else throw("fail to cast into Int") | |
506 | + | } | |
507 | + | ||
508 | + | ||
509 | + | func dq (dm) = { | |
510 | + | let cn = dm | |
511 | + | if ($isInstanceOf(cn, "Boolean")) | |
512 | + | then { | |
513 | + | let dn = cn | |
498 | 514 | dn | |
499 | 515 | } | |
500 | - | else throw("fail to cast into Int") | |
501 | - | } | |
502 | - | ||
503 | - | ||
504 | - | func do (dk) = { | |
505 | - | let cl = dk | |
506 | - | if ($isInstanceOf(cl, "Boolean")) | |
507 | - | then { | |
508 | - | let dl = cl | |
509 | - | dl | |
510 | - | } | |
511 | 516 | else throw("fail to cast into Boolean") | |
512 | 517 | } | |
513 | 518 | ||
514 | 519 | ||
515 | - | func | |
516 | - | let | |
517 | - | if (("S" == | |
518 | - | then | |
519 | - | else if (("M" == | |
520 | - | then | |
521 | - | else if (("L" == | |
522 | - | then | |
523 | - | else if (("XL" == | |
524 | - | then | |
525 | - | else if (("XXL" == | |
526 | - | then | |
520 | + | func dr (ds) = { | |
521 | + | let cn = ds | |
522 | + | if (("S" == cn)) | |
523 | + | then cu | |
524 | + | else if (("M" == cn)) | |
525 | + | then cv | |
526 | + | else if (("L" == cn)) | |
527 | + | then cw | |
528 | + | else if (("XL" == cn)) | |
529 | + | then cx | |
530 | + | else if (("XXL" == cn)) | |
531 | + | then cy | |
527 | 532 | else throw("Unknown land size") | |
528 | 533 | } | |
529 | 534 | ||
530 | 535 | ||
531 | - | func dr (dl) = isDefined(parseInt(dl)) | |
532 | - | ||
533 | - | ||
534 | - | func ds () = "contractsBlocked" | |
535 | - | ||
536 | - | ||
537 | - | func dt (b) = ("lastTxIdByUser_" + b) | |
538 | - | ||
539 | - | ||
540 | - | func du (dv,dw,dx) = { | |
541 | - | let dy = value(blockInfoByHeight(dw)) | |
542 | - | let dz = sha256((value(dy.vrf) + dx)) | |
543 | - | (toInt(dz) % dv) | |
544 | - | } | |
545 | - | ||
546 | - | ||
547 | - | let dA = { | |
548 | - | let cl = cj | |
549 | - | if ((base58'2W' == cl)) | |
536 | + | func dt (dn) = isDefined(parseInt(dn)) | |
537 | + | ||
538 | + | ||
539 | + | func du () = "contractsBlocked" | |
540 | + | ||
541 | + | ||
542 | + | func dv (c) = ("lastTxIdByUser_" + c) | |
543 | + | ||
544 | + | ||
545 | + | func dw (dx,dy) = { | |
546 | + | let dz = pow(10, 0, dy, 0, 0, DOWN) | |
547 | + | let dA = toString((dx % dz)) | |
548 | + | let dB = drop(toString(dz), (1 + size(dA))) | |
549 | + | (((toString((dx / dz)) + ".") + dB) + dA) | |
550 | + | } | |
551 | + | ||
552 | + | ||
553 | + | func dC (dD,dE,dF) = { | |
554 | + | let dG = value(blockInfoByHeight(dE)) | |
555 | + | let dH = sha256((value(dG.vrf) + dF)) | |
556 | + | (toInt(dH) % dD) | |
557 | + | } | |
558 | + | ||
559 | + | ||
560 | + | let dI = { | |
561 | + | let cn = cl | |
562 | + | if ((base58'2W' == cn)) | |
550 | 563 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
551 | - | else if ((base58'2T' == | |
564 | + | else if ((base58'2T' == cn)) | |
552 | 565 | then this | |
553 | 566 | else throw("Unknown chain") | |
554 | 567 | } | |
555 | 568 | ||
556 | - | let | |
557 | - | let | |
558 | - | if ((base58'2W' == | |
569 | + | let dJ = { | |
570 | + | let cn = cl | |
571 | + | if ((base58'2W' == cn)) | |
559 | 572 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
560 | - | else if ((base58'2T' == | |
573 | + | else if ((base58'2T' == cn)) | |
561 | 574 | then this | |
562 | 575 | else throw("Unknown chain") | |
563 | 576 | } | |
564 | 577 | ||
565 | - | let | |
566 | - | let | |
567 | - | if ((base58'2W' == | |
568 | - | then if ( | |
578 | + | let dK = { | |
579 | + | let cn = cl | |
580 | + | if ((base58'2W' == cn)) | |
581 | + | then if (ci) | |
569 | 582 | then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm' | |
570 | 583 | else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
571 | - | else if ((base58'2T' == | |
584 | + | else if ((base58'2T' == cn)) | |
572 | 585 | then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
573 | 586 | else throw("Unknown chain") | |
574 | 587 | } | |
575 | 588 | ||
576 | - | let dD = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
577 | - | ||
578 | - | let dE = 300000 | |
579 | - | ||
580 | - | let dF = 5000000 | |
581 | - | ||
582 | - | let dG = 50 | |
583 | - | ||
584 | - | let dH = 10000000 | |
585 | - | ||
586 | - | let dI = { | |
587 | - | let cl = cj | |
588 | - | if ((base58'2W' == cl)) | |
589 | + | let dL = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==' | |
590 | + | ||
591 | + | let dM = 300000 | |
592 | + | ||
593 | + | let dN = 600000 | |
594 | + | ||
595 | + | let dO = 5000000 | |
596 | + | ||
597 | + | let dP = 50 | |
598 | + | ||
599 | + | let dQ = 10000000 | |
600 | + | ||
601 | + | let dR = { | |
602 | + | let cn = cl | |
603 | + | if ((base58'2W' == cn)) | |
589 | 604 | then 252289527462 | |
590 | - | else if ((base58'2T' == | |
605 | + | else if ((base58'2T' == cn)) | |
591 | 606 | then 2522895274 | |
592 | 607 | else throw("Unknown chain") | |
593 | 608 | } | |
594 | 609 | ||
595 | - | let | |
596 | - | let | |
597 | - | if ((base58'2W' == | |
610 | + | let dS = { | |
611 | + | let cn = cl | |
612 | + | if ((base58'2W' == cn)) | |
598 | 613 | then 250000000 | |
599 | - | else if ((base58'2T' == | |
614 | + | else if ((base58'2T' == cn)) | |
600 | 615 | then 250000000 | |
601 | 616 | else throw("Unknown chain") | |
602 | 617 | } | |
603 | 618 | ||
604 | - | let | |
605 | - | ||
606 | - | let | |
607 | - | ||
608 | - | let | |
609 | - | ||
610 | - | let | |
611 | - | ||
612 | - | let | |
613 | - | ||
614 | - | let | |
615 | - | ||
616 | - | let | |
617 | - | ||
618 | - | let | |
619 | - | ||
620 | - | func | |
621 | - | ||
622 | - | ||
623 | - | func | |
624 | - | ||
625 | - | ||
626 | - | func | |
627 | - | ||
628 | - | ||
629 | - | func | |
630 | - | ||
631 | - | ||
632 | - | func | |
633 | - | ||
634 | - | ||
635 | - | func | |
636 | - | ||
637 | - | ||
638 | - | func | |
639 | - | ||
640 | - | ||
641 | - | func | |
642 | - | ||
643 | - | ||
644 | - | let | |
645 | - | ||
646 | - | let | |
647 | - | ||
648 | - | let | |
649 | - | ||
650 | - | let | |
651 | - | ||
652 | - | let | |
653 | - | ||
654 | - | let | |
655 | - | ||
656 | - | let | |
657 | - | ||
658 | - | func | |
659 | - | ||
660 | - | ||
661 | - | func | |
662 | - | let | |
663 | - | then ((( | |
664 | - | else -((((-( | |
665 | - | ( | |
666 | - | } | |
667 | - | ||
668 | - | ||
669 | - | func | |
670 | - | let | |
671 | - | if ((0 >= | |
619 | + | let dT = 2500000000 | |
620 | + | ||
621 | + | let dU = toBigInt(5) | |
622 | + | ||
623 | + | let dV = toBigInt(20) | |
624 | + | ||
625 | + | let dW = toBigInt((20 * 20)) | |
626 | + | ||
627 | + | let dX = toBigInt(((20 * 20) * 20)) | |
628 | + | ||
629 | + | let dY = toBigInt((((20 * 20) * 20) * 20)) | |
630 | + | ||
631 | + | let dZ = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
632 | + | ||
633 | + | let ea = 500 | |
634 | + | ||
635 | + | func eb () = "nextLandNum" | |
636 | + | ||
637 | + | ||
638 | + | func ec (ed) = ("lcn_" + ed) | |
639 | + | ||
640 | + | ||
641 | + | func ee (ef) = ("la_" + ef) | |
642 | + | ||
643 | + | ||
644 | + | func eg (bo,bv) = ((("ilao_" + bo) + "_") + bv) | |
645 | + | ||
646 | + | ||
647 | + | func eh (ef) = ("lo_" + ef) | |
648 | + | ||
649 | + | ||
650 | + | func ei (ed) = ("duckByCustomName_" + ed) | |
651 | + | ||
652 | + | ||
653 | + | func ej (ed) = ("accountByCustomName_" + ed) | |
654 | + | ||
655 | + | ||
656 | + | func ek () = "oldiesList" | |
657 | + | ||
658 | + | ||
659 | + | let el = 0 | |
660 | + | ||
661 | + | let em = 1 | |
662 | + | ||
663 | + | let en = 2 | |
664 | + | ||
665 | + | let eo = 0 | |
666 | + | ||
667 | + | let ep = 5 | |
668 | + | ||
669 | + | let eq = 6 | |
670 | + | ||
671 | + | let er = 7 | |
672 | + | ||
673 | + | func es (ef,ds) = ((aC + ef) + ds) | |
674 | + | ||
675 | + | ||
676 | + | func et (eu,ev) = { | |
677 | + | let ew = if ((eu >= 0)) | |
678 | + | then (((eu + ev) - 1) / ev) | |
679 | + | else -((((-(eu) + ev) - 1) / ev)) | |
680 | + | (ew * ct) | |
681 | + | } | |
682 | + | ||
683 | + | ||
684 | + | func ex (ey,ez) = { | |
685 | + | let eA = (((((ez[0] + ez[1]) + ez[2]) + ez[3]) + ez[4]) + ez[5]) | |
686 | + | if ((0 >= eA)) | |
672 | 687 | then throw("Zero weights sum") | |
673 | 688 | else { | |
674 | - | let | |
675 | - | func | |
676 | - | ||
677 | - | let | |
678 | - | let | |
679 | - | let | |
680 | - | func | |
681 | - | then | |
682 | - | else | |
683 | - | ||
684 | - | func | |
685 | - | then | |
689 | + | let eB = fraction(ey, cs, eA) | |
690 | + | func eC (eD,eE) = (eD :+ fraction(eE, eB, cs)) | |
691 | + | ||
692 | + | let eF = ez | |
693 | + | let eG = size(eF) | |
694 | + | let eH = nil | |
695 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
696 | + | then eJ | |
697 | + | else eC(eJ, eF[eK]) | |
698 | + | ||
699 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
700 | + | then eJ | |
686 | 701 | else throw("List size exceeds 6") | |
687 | 702 | ||
688 | - | | |
689 | - | } | |
690 | - | } | |
691 | - | ||
692 | - | ||
693 | - | func | |
694 | - | let | |
695 | - | if ((size( | |
703 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
704 | + | } | |
705 | + | } | |
706 | + | ||
707 | + | ||
708 | + | func eM (ey) = { | |
709 | + | let eN = split(value(getString(dg())), "_") | |
710 | + | if ((size(eN) != aF)) | |
696 | 711 | then throw("Wrong proportions data") | |
697 | 712 | else { | |
698 | - | let | |
699 | - | | |
700 | - | } | |
701 | - | } | |
702 | - | ||
703 | - | ||
704 | - | func | |
705 | - | let | |
706 | - | func | |
707 | - | let | |
708 | - | if ((0 > | |
709 | - | then throw(((((("Not enough material idx=" + toString( | |
710 | - | else ( | |
713 | + | let eO = [parseIntValue(eN[0]), parseIntValue(eN[1]), parseIntValue(eN[2]), parseIntValue(eN[3]), parseIntValue(eN[4]), parseIntValue(eN[5])] | |
714 | + | ex(ey, eO) | |
715 | + | } | |
716 | + | } | |
717 | + | ||
718 | + | ||
719 | + | func eP (eQ,eR,eS) = { | |
720 | + | let eT = eM(eS) | |
721 | + | func eU (eD,cP) = { | |
722 | + | let eV = (parseIntValue(eR[cP]) - eT[cP]) | |
723 | + | if ((0 > eV)) | |
724 | + | then throw(((((("Not enough material idx=" + toString(cP)) + ", you have ") + eR[cP]) + ", but need ") + toString(eT[cP]))) | |
725 | + | else (eD :+ toString(eV)) | |
711 | 726 | } | |
712 | 727 | ||
713 | - | if ( | |
728 | + | if (eQ) | |
714 | 729 | then { | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | then | |
720 | - | else | |
721 | - | ||
722 | - | func | |
723 | - | then | |
730 | + | let eF = cz | |
731 | + | let eG = size(eF) | |
732 | + | let eH = nil | |
733 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
734 | + | then eJ | |
735 | + | else eU(eJ, eF[eK]) | |
736 | + | ||
737 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
738 | + | then eJ | |
724 | 739 | else throw("List size exceeds 6") | |
725 | 740 | ||
726 | - | | |
727 | - | } | |
728 | - | else | |
729 | - | } | |
730 | - | ||
731 | - | ||
732 | - | func | |
733 | - | then $Tuple2( | |
741 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
742 | + | } | |
743 | + | else eR | |
744 | + | } | |
745 | + | ||
746 | + | ||
747 | + | func eW (eX,eY) = if ((eY == "")) | |
748 | + | then $Tuple2(eX, false) | |
734 | 749 | else { | |
735 | - | func | |
736 | - | let | |
737 | - | if ((size( | |
750 | + | func eZ (eD,fa) = { | |
751 | + | let fb = split(fa, ",") | |
752 | + | if ((size(fb) != 2)) | |
738 | 753 | then throw("Incorrect format, should be index,amount") | |
739 | 754 | else { | |
740 | - | let | |
741 | - | if (if ((0 > | |
755 | + | let cP = parseIntValue(fb[0]) | |
756 | + | if (if ((0 > cP)) | |
742 | 757 | then true | |
743 | - | else ( | |
758 | + | else (cP >= size(aR))) | |
744 | 759 | then throw("Unknown product idx") | |
745 | 760 | else { | |
746 | - | let | |
747 | - | let | |
748 | - | if ((size( | |
749 | - | then throw((("You don't have " + | |
761 | + | let fc = parseIntValue(fb[1]) | |
762 | + | let fd = split(eD._1, (fb[0] + ":")) | |
763 | + | if ((size(fd) != 2)) | |
764 | + | then throw((("You don't have " + aN[cP]) + " equipped")) | |
750 | 765 | else { | |
751 | - | let | |
752 | - | let | |
766 | + | let fe = fd[1] | |
767 | + | let ff = if (dt(take(drop(fe, 1), 1))) | |
753 | 768 | then 2 | |
754 | 769 | else 1 | |
755 | - | let | |
756 | - | let | |
757 | - | let | |
758 | - | then ( | |
759 | - | else throw(((((("You equipped " + toString( | |
760 | - | $Tuple2((((( | |
770 | + | let fg = parseIntValue(take(fe, ff)) | |
771 | + | let fh = drop(fe, ff) | |
772 | + | let fi = if ((fg >= fc)) | |
773 | + | then (fg - fc) | |
774 | + | else throw(((((("You equipped " + toString(fg)) + " of ") + aN[cP]) + ", but tried to use ") + toString(fc))) | |
775 | + | $Tuple2(((((fd[0] + fb[0]) + ":") + toString(fi)) + fh), if (eD._2) | |
761 | 776 | then true | |
762 | - | else if (if (( | |
763 | - | then (8 >= | |
777 | + | else if (if ((cP >= 6)) | |
778 | + | then (8 >= cP) | |
764 | 779 | else false) | |
765 | - | then ( | |
780 | + | then (fi == 0) | |
766 | 781 | else false) | |
767 | 782 | } | |
768 | 783 | } | |
769 | 784 | } | |
770 | 785 | } | |
771 | 786 | ||
772 | - | let | |
773 | - | let | |
774 | - | let | |
775 | - | func | |
776 | - | then | |
777 | - | else | |
778 | - | ||
779 | - | func | |
780 | - | then | |
787 | + | let eF = split(eY, "_") | |
788 | + | let eG = size(eF) | |
789 | + | let eH = $Tuple2(eX, false) | |
790 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
791 | + | then eJ | |
792 | + | else eZ(eJ, eF[eK]) | |
793 | + | ||
794 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
795 | + | then eJ | |
781 | 796 | else throw("List size exceeds 10") | |
782 | 797 | ||
783 | - | | |
798 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
784 | 799 | } | |
785 | 800 | ||
786 | 801 | ||
787 | - | func | |
788 | - | let | |
802 | + | func fj (fk) = { | |
803 | + | let fl = if ((fk == "")) | |
789 | 804 | then nil | |
790 | - | else split_4C( | |
791 | - | func | |
792 | - | let | |
793 | - | let | |
794 | - | then parseIntValue( | |
805 | + | else split_4C(fk, "_") | |
806 | + | func fm (eD,ch) = { | |
807 | + | let fn = (size(eD) / 8) | |
808 | + | let fg = if ((size(fl) > fn)) | |
809 | + | then parseIntValue(fl[fn]) | |
795 | 810 | else 0 | |
796 | - | ( | |
811 | + | (eD + toBytes(fg)) | |
797 | 812 | } | |
798 | 813 | ||
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | func | |
803 | - | then | |
804 | - | else | |
805 | - | ||
806 | - | func | |
807 | - | then | |
814 | + | let eF = aR | |
815 | + | let eG = size(eF) | |
816 | + | let eH = base58'' | |
817 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
818 | + | then eJ | |
819 | + | else fm(eJ, eF[eK]) | |
820 | + | ||
821 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
822 | + | then eJ | |
808 | 823 | else throw("List size exceeds 50") | |
809 | 824 | ||
810 | - | | |
811 | - | } | |
812 | - | ||
813 | - | ||
814 | - | func | |
815 | - | func | |
816 | - | let | |
817 | - | let | |
818 | - | ( | |
825 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
826 | + | } | |
827 | + | ||
828 | + | ||
829 | + | func fo (fp) = { | |
830 | + | func fq (eD,ch) = { | |
831 | + | let fn = size(eD) | |
832 | + | let fr = take(drop(fp, (8 * fn)), 8) | |
833 | + | (eD :+ toString(toInt(fr))) | |
819 | 834 | } | |
820 | 835 | ||
821 | 836 | makeString_2C({ | |
822 | - | let | |
823 | - | let | |
824 | - | let | |
825 | - | func | |
826 | - | then | |
827 | - | else | |
828 | - | ||
829 | - | func | |
830 | - | then | |
837 | + | let eF = aR | |
838 | + | let eG = size(eF) | |
839 | + | let eH = nil | |
840 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
841 | + | then eJ | |
842 | + | else fq(eJ, eF[eK]) | |
843 | + | ||
844 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
845 | + | then eJ | |
831 | 846 | else throw("List size exceeds 50") | |
832 | 847 | ||
833 | - | | |
848 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
834 | 849 | }, "_") | |
835 | 850 | } | |
836 | 851 | ||
837 | 852 | ||
838 | - | func | |
839 | - | func | |
840 | - | let | |
841 | - | then | |
853 | + | func fs (ft,fu) = { | |
854 | + | func fv (eD,fn) = { | |
855 | + | let fw = if ((size(ft) > (7 + fn))) | |
856 | + | then ft[(7 + fn)] | |
842 | 857 | else 0 | |
843 | - | if ((parseIntValue( | |
844 | - | then throw(("Requirement not satisfied: " + | |
858 | + | if ((parseIntValue(fu[fn]) > (ft[fn] + fw))) | |
859 | + | then throw(("Requirement not satisfied: " + j[fn])) | |
845 | 860 | else true | |
846 | 861 | } | |
847 | 862 | ||
848 | - | let | |
849 | - | let | |
850 | - | let | |
851 | - | func | |
852 | - | then | |
853 | - | else | |
854 | - | ||
855 | - | func | |
856 | - | then | |
863 | + | let eF = [0, 1, 2, 3, 4, 5, 6] | |
864 | + | let eG = size(eF) | |
865 | + | let eH = false | |
866 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
867 | + | then eJ | |
868 | + | else fv(eJ, eF[eK]) | |
869 | + | ||
870 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
871 | + | then eJ | |
857 | 872 | else throw("List size exceeds 7") | |
858 | 873 | ||
859 | - | | |
860 | - | } | |
861 | - | ||
862 | - | ||
863 | - | func | |
864 | - | let | |
865 | - | if ((size( | |
874 | + | eL(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7) | |
875 | + | } | |
876 | + | ||
877 | + | ||
878 | + | func fx (fy,fl,fz,ft,fA,fB) = { | |
879 | + | let fb = split(fy, ":") | |
880 | + | if ((size(fb) != 2)) | |
866 | 881 | then throw("Incorrect format, should be index:amount") | |
867 | - | else if (if (!( | |
868 | - | then (size( | |
882 | + | else if (if (!(fz)) | |
883 | + | then (size(fb[0]) != 2) | |
869 | 884 | else false) | |
870 | 885 | then throw("Product idx should be 2 digits, zero padded") | |
871 | 886 | else { | |
872 | - | let | |
873 | - | let | |
874 | - | if (!(containsElement( | |
875 | - | then throw((("Product '" + | |
876 | - | else if ((0 > | |
887 | + | let fC = parseIntValue(fb[0]) | |
888 | + | let fD = parseIntValue(fb[1]) | |
889 | + | if (!(containsElement(aQ, fC))) | |
890 | + | then throw((("Product '" + aN[fC]) + "' cannot be used for land defense")) | |
891 | + | else if ((0 > fD)) | |
877 | 892 | then throw("Count can't be negative") | |
878 | - | else if (( | |
879 | - | then throw(((("Can't put more than " + toString( | |
880 | - | else if (( | |
881 | - | then $Tuple3( | |
893 | + | else if ((fD > t)) | |
894 | + | then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC])) | |
895 | + | else if ((fD == 0)) | |
896 | + | then $Tuple3(fl, fA, fB) | |
882 | 897 | else { | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
886 | - | let | |
887 | - | if (if (!( | |
888 | - | then ( | |
898 | + | let fE = take(fl, (8 * fC)) | |
899 | + | let fg = toInt(take(drop(fl, (8 * fC)), 8)) | |
900 | + | let fh = drop(fl, (8 * (fC + 1))) | |
901 | + | let ch = split(aR[fC], "_") | |
902 | + | if (if (!(fz)) | |
903 | + | then (fD > fg) | |
889 | 904 | else false) | |
890 | - | then throw(((((("You have " + toString( | |
905 | + | then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD))) | |
891 | 906 | else { | |
892 | - | let | |
893 | - | then | |
907 | + | let fi = if (if (!(fz)) | |
908 | + | then fs(ft, split(ch[aU], ",")) | |
894 | 909 | else false) | |
895 | - | then ( | |
896 | - | else ( | |
897 | - | let | |
898 | - | $Tuple3((( | |
910 | + | then (fg - fD) | |
911 | + | else (fg + fD) | |
912 | + | let fF = (et(fi, aW) - et(fg, aW)) | |
913 | + | $Tuple3(((fE + toBytes(fi)) + fh), (fA + fF), (fB - fF)) | |
899 | 914 | } | |
900 | 915 | } | |
901 | 916 | } | |
902 | 917 | } | |
903 | 918 | ||
904 | 919 | ||
905 | - | func | |
906 | - | let | |
907 | - | if ((size( | |
920 | + | func fG (fy,fl,fz,fH,fI,fJ,ft) = { | |
921 | + | let fb = split(fy, ":") | |
922 | + | if ((size(fb) != 2)) | |
908 | 923 | then throw("Incorrect format, should be index:amount") | |
909 | - | else if (if (!( | |
910 | - | then (size( | |
924 | + | else if (if (!(fz)) | |
925 | + | then (size(fb[0]) != 2) | |
911 | 926 | else false) | |
912 | 927 | then throw("Product idx should be 2 digits, zero padded") | |
913 | 928 | else { | |
914 | - | let | |
915 | - | let | |
916 | - | if (if ((0 > | |
929 | + | let fC = parseIntValue(fb[0]) | |
930 | + | let fD = parseIntValue(fb[1]) | |
931 | + | if (if ((0 > fC)) | |
917 | 932 | then true | |
918 | - | else ( | |
933 | + | else (fC >= size(aR))) | |
919 | 934 | then throw("Unknown product idx") | |
920 | - | else if ((0 > | |
935 | + | else if ((0 > fD)) | |
921 | 936 | then throw("Count can't be negative") | |
922 | - | else if (( | |
923 | - | then throw(((("Can't put more than " + toString( | |
924 | - | else if (( | |
925 | - | then $Tuple2( | |
937 | + | else if ((fD > t)) | |
938 | + | then throw(((("Can't put more than " + toString(t)) + " of ") + aN[fC])) | |
939 | + | else if ((fD == 0)) | |
940 | + | then $Tuple2(fl, false) | |
926 | 941 | else { | |
927 | - | let | |
928 | - | let | |
929 | - | let | |
930 | - | let | |
931 | - | if (if (!( | |
932 | - | then ( | |
942 | + | let fE = take(fl, (8 * fC)) | |
943 | + | let fg = toInt(take(drop(fl, (8 * fC)), 8)) | |
944 | + | let fh = drop(fl, (8 * (fC + 1))) | |
945 | + | let ch = split(aR[fC], "_") | |
946 | + | if (if (!(fz)) | |
947 | + | then (fD > fg) | |
933 | 948 | else false) | |
934 | - | then throw(((((("You have " + toString( | |
949 | + | then throw(((((("You have " + toString(fg)) + " of ") + aN[fC]) + ", but tried to use ") + toString(fD))) | |
935 | 950 | else { | |
936 | - | let | |
937 | - | then | |
951 | + | let fK = if (if (!(fz)) | |
952 | + | then fs(ft, split(ch[aU], ",")) | |
938 | 953 | else false) | |
939 | 954 | then { | |
940 | - | let | |
941 | - | if (( | |
955 | + | let fL = ch[aV] | |
956 | + | if ((fL == "")) | |
942 | 957 | then throw("Item cannot be equipped") | |
943 | 958 | else { | |
944 | - | let | |
945 | - | let | |
946 | - | if (( | |
959 | + | let fM = parseIntValue(fL) | |
960 | + | let fN = (fM / 100) | |
961 | + | if ((fH != fN)) | |
947 | 962 | then throw("Segment incompatible") | |
948 | 963 | else { | |
949 | - | let | |
950 | - | if (( | |
964 | + | let fO = ((fM % 100) / 10) | |
965 | + | if ((fI != fO)) | |
951 | 966 | then throw("Slot incompatible") | |
952 | 967 | else { | |
953 | - | let | |
954 | - | if (if (( | |
955 | - | then ( | |
968 | + | let fP = (fM % 10) | |
969 | + | if (if ((fJ != 0)) | |
970 | + | then (fP > 1) | |
956 | 971 | else false) | |
957 | 972 | then throw("Big items should occupy slot 0") | |
958 | - | else ( | |
973 | + | else (fP > 1) | |
959 | 974 | } | |
960 | 975 | } | |
961 | 976 | } | |
962 | 977 | } | |
963 | 978 | else false | |
964 | - | $Tuple2((( | |
965 | - | then | |
966 | - | else -( | |
979 | + | $Tuple2(((fE + toBytes((fg + (if (fz) | |
980 | + | then fD | |
981 | + | else -(fD))))) + fh), fK) | |
967 | 982 | } | |
968 | 983 | } | |
969 | 984 | } | |
970 | 985 | } | |
971 | 986 | ||
972 | 987 | ||
973 | - | func | |
988 | + | func fQ (fR,fS,fz,fH,fI,fT) = if ((fR != "")) | |
974 | 989 | then { | |
975 | - | let | |
976 | - | if ((size( | |
990 | + | let fU = split(fR, ",") | |
991 | + | if ((size(fU) > s)) | |
977 | 992 | then throw("Wrong slots format") | |
978 | 993 | else { | |
979 | - | let | |
980 | - | let | |
981 | - | then | |
994 | + | let fV = fU[0] | |
995 | + | let fW = if ((size(fU) > 1)) | |
996 | + | then fU[1] | |
982 | 997 | else "" | |
983 | - | if (if (( | |
984 | - | then ( | |
998 | + | if (if ((fV == "")) | |
999 | + | then (fW == "") | |
985 | 1000 | else false) | |
986 | - | then | |
1001 | + | then fS | |
987 | 1002 | else { | |
988 | - | let | |
989 | - | then | |
990 | - | else $Tuple2( | |
991 | - | if (( | |
992 | - | then if ( | |
1003 | + | let fX = if ((fV != "")) | |
1004 | + | then fG(fV, fS, fz, fH, fI, 0, fT) | |
1005 | + | else $Tuple2(fS, false) | |
1006 | + | if ((fW != "")) | |
1007 | + | then if (fX._2) | |
993 | 1008 | then throw("Big item already occupies slot") | |
994 | - | else | |
995 | - | else | |
1009 | + | else fG(fW, fX._1, fz, fH, fI, 1, fT)._1 | |
1010 | + | else fX._1 | |
996 | 1011 | } | |
997 | 1012 | } | |
998 | 1013 | } | |
999 | - | else | |
1000 | - | ||
1001 | - | ||
1002 | - | func | |
1003 | - | func | |
1004 | - | let | |
1005 | - | let | |
1006 | - | if ((size( | |
1014 | + | else fS | |
1015 | + | ||
1016 | + | ||
1017 | + | func fY (fZ,ga,fz,fT) = { | |
1018 | + | func fH (eD,gb) = { | |
1019 | + | let fn = eD._1 | |
1020 | + | let fI = split(gb, ";") | |
1021 | + | if ((size(fI) != r)) | |
1007 | 1022 | then throw("Wrong segment format") | |
1008 | 1023 | else { | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (if (( | |
1012 | - | then ( | |
1024 | + | let gc = fI[0] | |
1025 | + | let gd = fI[1] | |
1026 | + | if (if ((gc == "")) | |
1027 | + | then (gd == "") | |
1013 | 1028 | else false) | |
1014 | - | then $Tuple2(( | |
1029 | + | then $Tuple2((fn + 1), eD._2) | |
1015 | 1030 | else { | |
1016 | - | let | |
1017 | - | $Tuple2(( | |
1031 | + | let ge = fQ(gc, eD._2, fz, fn, 0, fT) | |
1032 | + | $Tuple2((fn + 1), fQ(gd, ge, fz, fn, 1, fT)) | |
1018 | 1033 | } | |
1019 | 1034 | } | |
1020 | 1035 | } | |
1021 | 1036 | ||
1022 | - | ( let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | func | |
1026 | - | then | |
1027 | - | else | |
1028 | - | ||
1029 | - | func | |
1030 | - | then | |
1037 | + | ( let eF = fZ | |
1038 | + | let eG = size(eF) | |
1039 | + | let eH = $Tuple2(0, ga) | |
1040 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1041 | + | then eJ | |
1042 | + | else fH(eJ, eF[eK]) | |
1043 | + | ||
1044 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1045 | + | then eJ | |
1031 | 1046 | else throw("List size exceeds 6") | |
1032 | 1047 | ||
1033 | - | | |
1034 | - | } | |
1035 | - | ||
1036 | - | ||
1037 | - | func | |
1048 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6))._2 | |
1049 | + | } | |
1050 | + | ||
1051 | + | ||
1052 | + | func gf (fZ,ga,fA,fB,fz,ft) = if ((3 > size(fZ))) | |
1038 | 1053 | then throw("At least duck, mines and traps parts are required") | |
1039 | 1054 | else { | |
1040 | - | func | |
1041 | - | let | |
1042 | - | if (( | |
1043 | - | then $Tuple4(( | |
1055 | + | func fH (eD,gb) = { | |
1056 | + | let fn = eD._1 | |
1057 | + | if ((fn == 0)) | |
1058 | + | then $Tuple4((fn + 1), eD._2, eD._3, eD._4) | |
1044 | 1059 | else { | |
1045 | - | let | |
1046 | - | $Tuple4(( | |
1060 | + | let gg = fx(gb, eD._2, fz, ft, eD._3, eD._4) | |
1061 | + | $Tuple4((fn + 1), gg._1, gg._2, gg._3) | |
1047 | 1062 | } | |
1048 | 1063 | } | |
1049 | 1064 | ||
1050 | - | let | |
1051 | - | let | |
1052 | - | let | |
1053 | - | let | |
1054 | - | func | |
1055 | - | then | |
1056 | - | else | |
1057 | - | ||
1058 | - | func | |
1059 | - | then | |
1065 | + | let gh = { | |
1066 | + | let eF = fZ | |
1067 | + | let eG = size(eF) | |
1068 | + | let eH = $Tuple4(0, ga, fA, fB) | |
1069 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1070 | + | then eJ | |
1071 | + | else fH(eJ, eF[eK]) | |
1072 | + | ||
1073 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1074 | + | then eJ | |
1060 | 1075 | else throw("List size exceeds 10") | |
1061 | 1076 | ||
1062 | - | | |
1063 | - | } | |
1064 | - | $Tuple3( | |
1077 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
1078 | + | } | |
1079 | + | $Tuple3(gh._2, gh._3, gh._4) | |
1065 | 1080 | } | |
1066 | 1081 | ||
1067 | 1082 | ||
1068 | - | func | |
1069 | - | let | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1083 | + | func gi (A) = { | |
1084 | + | let gj = F(A) | |
1085 | + | let gk = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
1086 | + | let gl = fY(gk, dL, true, nil) | |
1087 | + | let gm = split(gk[p], ";")[1] | |
1088 | + | let ao = if ((gm == "")) | |
1074 | 1089 | then 0 | |
1075 | 1090 | else { | |
1076 | - | let | |
1077 | - | if (( | |
1091 | + | let gn = split(gm, ",")[0] | |
1092 | + | if ((gn == "")) | |
1078 | 1093 | then 0 | |
1079 | 1094 | else { | |
1080 | - | let | |
1081 | - | let | |
1082 | - | let | |
1083 | - | if (if (if (if (if (( | |
1095 | + | let fy = split(gn, ":") | |
1096 | + | let cP = fy[0] | |
1097 | + | let go = fy[1] | |
1098 | + | if (if (if (if (if ((cP == "06")) | |
1084 | 1099 | then true | |
1085 | - | else ( | |
1100 | + | else (cP == "07")) | |
1086 | 1101 | then true | |
1087 | - | else ( | |
1088 | - | then ( | |
1102 | + | else (cP == "08")) | |
1103 | + | then (go != "") | |
1089 | 1104 | else false) | |
1090 | - | then (parseIntValue( | |
1105 | + | then (parseIntValue(go) > 0) | |
1091 | 1106 | else false) | |
1092 | - | then parseIntValue(split( | |
1107 | + | then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT]) | |
1093 | 1108 | else 0 | |
1094 | 1109 | } | |
1095 | 1110 | } | |
1096 | - | let | |
1097 | - | let | |
1098 | - | ( | |
1099 | - | } | |
1100 | - | ||
1101 | - | ||
1102 | - | func | |
1111 | + | let fT = am(this, A, ao, true) | |
1112 | + | let gp = fY(gk, gl, false, fT) | |
1113 | + | (gp == gp) | |
1114 | + | } | |
1115 | + | ||
1116 | + | ||
1117 | + | func gq (gr,gs,gt,gu) = if ((size(gr) != aF)) | |
1103 | 1118 | then throw("Wrong proportions data") | |
1104 | 1119 | else { | |
1105 | - | func | |
1106 | - | let | |
1107 | - | if ((0 > | |
1108 | - | then throw(((((((("Panic! Pieces of type=" + toString( | |
1109 | - | else ( | |
1110 | - | } | |
1111 | - | ||
1112 | - | let | |
1113 | - | let | |
1114 | - | let | |
1115 | - | func | |
1116 | - | then | |
1117 | - | else | |
1118 | - | ||
1119 | - | func | |
1120 | - | then | |
1120 | + | func gv (eD,gw) = { | |
1121 | + | let eV = (parseIntValue(gr[gw]) + ((gu * gs[gw]) * gt)) | |
1122 | + | if ((0 > eV)) | |
1123 | + | then throw(((((((("Panic! Pieces of type=" + toString(gw)) + ", sign=") + toString(gu)) + ", terrainCounts[i]=") + toString(gs[gw])) + ", landSizeIndex=") + toString(gt))) | |
1124 | + | else (eD :+ toString(eV)) | |
1125 | + | } | |
1126 | + | ||
1127 | + | let eF = cz | |
1128 | + | let eG = size(eF) | |
1129 | + | let eH = nil | |
1130 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1131 | + | then eJ | |
1132 | + | else gv(eJ, eF[eK]) | |
1133 | + | ||
1134 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1135 | + | then eJ | |
1121 | 1136 | else throw("List size exceeds 6") | |
1122 | 1137 | ||
1123 | - | | |
1138 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1124 | 1139 | } | |
1125 | 1140 | ||
1126 | 1141 | ||
1127 | - | func | |
1128 | - | let | |
1129 | - | makeString( | |
1130 | - | } | |
1131 | - | ||
1132 | - | ||
1133 | - | func | |
1134 | - | ||
1135 | - | ||
1136 | - | func | |
1137 | - | func | |
1138 | - | let | |
1139 | - | ( | |
1142 | + | func gx (gs,gt,gu) = { | |
1143 | + | let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_") | |
1144 | + | makeString(gq(gr, gs, gt, gu), "_") | |
1145 | + | } | |
1146 | + | ||
1147 | + | ||
1148 | + | func gy (gz) = [(size(split(gz, "A")) - 1), (size(split(gz, "B")) - 1), (size(split(gz, "C")) - 1), (size(split(gz, "D")) - 1), (size(split(gz, "E")) - 1), (size(split(gz, "F")) - 1)] | |
1149 | + | ||
1150 | + | ||
1151 | + | func gA (gB,gs,gC,gt,gD) = { | |
1152 | + | func gE (eD,gw) = { | |
1153 | + | let gF = ((fraction(gC, gD, a) * gs[gw]) * gt) | |
1154 | + | (eD :+ toString((parseIntValue(gB[gw]) + gF))) | |
1140 | 1155 | } | |
1141 | 1156 | ||
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | func | |
1147 | - | then | |
1148 | - | else | |
1149 | - | ||
1150 | - | func | |
1151 | - | then | |
1157 | + | let eO = { | |
1158 | + | let eF = cz | |
1159 | + | let eG = size(eF) | |
1160 | + | let eH = nil | |
1161 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1162 | + | then eJ | |
1163 | + | else gE(eJ, eF[eK]) | |
1164 | + | ||
1165 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1166 | + | then eJ | |
1152 | 1167 | else throw("List size exceeds 6") | |
1153 | 1168 | ||
1154 | - | | |
1169 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1155 | 1170 | } | |
1156 | - | makeString( | |
1157 | - | } | |
1158 | - | ||
1159 | - | ||
1160 | - | func | |
1161 | - | func | |
1162 | - | let | |
1163 | - | $Tuple2(( | |
1171 | + | makeString(eO, "_") | |
1172 | + | } | |
1173 | + | ||
1174 | + | ||
1175 | + | func gG (gs,gC,gt,gD) = { | |
1176 | + | func gE (eD,gw) = { | |
1177 | + | let gF = ((fraction(gC, gD, a) * gs[gw]) * gt) | |
1178 | + | $Tuple2((eD._1 :+ gF), (eD._2 + gF)) | |
1164 | 1179 | } | |
1165 | 1180 | ||
1166 | - | let | |
1167 | - | let | |
1168 | - | let | |
1169 | - | func | |
1170 | - | then | |
1171 | - | else | |
1172 | - | ||
1173 | - | func | |
1174 | - | then | |
1181 | + | let eF = cz | |
1182 | + | let eG = size(eF) | |
1183 | + | let eH = $Tuple2(nil, 0) | |
1184 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1185 | + | then eJ | |
1186 | + | else gE(eJ, eF[eK]) | |
1187 | + | ||
1188 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1189 | + | then eJ | |
1175 | 1190 | else throw("List size exceeds 6") | |
1176 | 1191 | ||
1177 | - | | |
1178 | - | } | |
1179 | - | ||
1180 | - | ||
1181 | - | func | |
1182 | - | let | |
1183 | - | let | |
1184 | - | if (( | |
1185 | - | then $Tuple2(makeString( | |
1186 | - | else if (( | |
1192 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1193 | + | } | |
1194 | + | ||
1195 | + | ||
1196 | + | func gH (gI,gJ,gK,gL) = { | |
1197 | + | let gM = gK._1 | |
1198 | + | let gN = gK._2 | |
1199 | + | if ((gN == 0)) | |
1200 | + | then $Tuple2(makeString(gI, "_"), makeString(gJ, "_")) | |
1201 | + | else if ((gL >= gN)) | |
1187 | 1202 | then { | |
1188 | - | func | |
1189 | - | ||
1190 | - | let | |
1191 | - | let | |
1192 | - | let | |
1193 | - | let | |
1194 | - | func | |
1195 | - | then | |
1196 | - | else | |
1197 | - | ||
1198 | - | func | |
1199 | - | then | |
1203 | + | func gO (eD,gw) = (eD :+ toString((parseIntValue(gI[gw]) + gM[gw]))) | |
1204 | + | ||
1205 | + | let eO = { | |
1206 | + | let eF = cz | |
1207 | + | let eG = size(eF) | |
1208 | + | let eH = nil | |
1209 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1210 | + | then eJ | |
1211 | + | else gO(eJ, eF[eK]) | |
1212 | + | ||
1213 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1214 | + | then eJ | |
1200 | 1215 | else throw("List size exceeds 6") | |
1201 | 1216 | ||
1202 | - | | |
1217 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1203 | 1218 | } | |
1204 | - | $Tuple2(makeString( | |
1219 | + | $Tuple2(makeString(eO, "_"), makeString(gJ, "_")) | |
1205 | 1220 | } | |
1206 | 1221 | else { | |
1207 | - | func | |
1208 | - | let | |
1209 | - | $Tuple2(( | |
1222 | + | func gP (eD,gw) = { | |
1223 | + | let gQ = fraction(gM[gw], gL, gN) | |
1224 | + | $Tuple2((eD._1 :+ toString((parseIntValue(gI[gw]) + gQ))), (eD._2 :+ toString(((parseIntValue(gJ[gw]) + gM[gw]) - gQ)))) | |
1210 | 1225 | } | |
1211 | 1226 | ||
1212 | - | let | |
1213 | - | let | |
1214 | - | let | |
1215 | - | let | |
1216 | - | func | |
1217 | - | then | |
1218 | - | else | |
1219 | - | ||
1220 | - | func | |
1221 | - | then | |
1227 | + | let eO = { | |
1228 | + | let eF = cz | |
1229 | + | let eG = size(eF) | |
1230 | + | let eH = $Tuple2(nil, nil) | |
1231 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1232 | + | then eJ | |
1233 | + | else gP(eJ, eF[eK]) | |
1234 | + | ||
1235 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1236 | + | then eJ | |
1222 | 1237 | else throw("List size exceeds 6") | |
1223 | 1238 | ||
1224 | - | | |
1239 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1225 | 1240 | } | |
1226 | - | $Tuple2(makeString( | |
1241 | + | $Tuple2(makeString(eO._1, "_"), makeString(eO._2, "_")) | |
1227 | 1242 | } | |
1228 | 1243 | } | |
1229 | 1244 | ||
1230 | 1245 | ||
1231 | - | func | |
1232 | - | then | |
1233 | - | else -( | |
1234 | - | ||
1235 | - | ||
1236 | - | let | |
1237 | - | ||
1238 | - | func | |
1239 | - | let | |
1240 | - | let | |
1246 | + | func gR (gS) = if ((gS >= toBigInt(0))) | |
1247 | + | then gS | |
1248 | + | else -(gS) | |
1249 | + | ||
1250 | + | ||
1251 | + | let gT = [[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]] | |
1252 | + | ||
1253 | + | func gU (dp,gV) = { | |
1254 | + | let gW = toInt((dp % dV)) | |
1255 | + | let gX = if ((gV[0] > gW)) | |
1241 | 1256 | then "A" | |
1242 | - | else if (( | |
1257 | + | else if ((gV[1] > gW)) | |
1243 | 1258 | then "B" | |
1244 | - | else if (( | |
1259 | + | else if ((gV[2] > gW)) | |
1245 | 1260 | then "C" | |
1246 | - | else if (( | |
1261 | + | else if ((gV[3] > gW)) | |
1247 | 1262 | then "D" | |
1248 | - | else if (( | |
1263 | + | else if ((gV[4] > gW)) | |
1249 | 1264 | then "E" | |
1250 | 1265 | else "F" | |
1251 | - | | |
1252 | - | } | |
1253 | - | ||
1254 | - | ||
1255 | - | func | |
1256 | - | let | |
1257 | - | func | |
1258 | - | ||
1259 | - | let | |
1260 | - | let | |
1261 | - | let | |
1262 | - | let | |
1263 | - | func | |
1264 | - | then | |
1265 | - | else | |
1266 | - | ||
1267 | - | func | |
1268 | - | then | |
1266 | + | gX | |
1267 | + | } | |
1268 | + | ||
1269 | + | ||
1270 | + | func gY (gZ,ha) = { | |
1271 | + | let hb = gT[ha] | |
1272 | + | func hc (eD,eE) = $Tuple2((((((eD._1 + gU(eD._2, hb)) + gU((eD._2 / dV), hb)) + gU((eD._2 / dW), hb)) + gU((eD._2 / dX), hb)) + gU((eD._2 / dY), hb)), (eD._2 / dZ)) | |
1273 | + | ||
1274 | + | let gh = { | |
1275 | + | let eF = [1, 2, 3, 4, 5] | |
1276 | + | let eG = size(eF) | |
1277 | + | let eH = $Tuple2("", (gZ / dU)) | |
1278 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1279 | + | then eJ | |
1280 | + | else hc(eJ, eF[eK]) | |
1281 | + | ||
1282 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1283 | + | then eJ | |
1269 | 1284 | else throw("List size exceeds 5") | |
1270 | 1285 | ||
1271 | - | | |
1286 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
1272 | 1287 | } | |
1273 | - | | |
1274 | - | } | |
1275 | - | ||
1276 | - | ||
1277 | - | let | |
1278 | - | ||
1279 | - | let | |
1280 | - | ||
1281 | - | func | |
1282 | - | func | |
1283 | - | let | |
1284 | - | let | |
1285 | - | let | |
1288 | + | gh._1 | |
1289 | + | } | |
1290 | + | ||
1291 | + | ||
1292 | + | let hd = [7, 2, 15, 19, 8, 24, 1, 21, 16, 5, 0, 22, 20, 23, 11, 4, 18, 12, 6, 10, 3, 17, 13, 9, 14] | |
1293 | + | ||
1294 | + | let he = ["A", "B", "C", "D", "E", "F"] | |
1295 | + | ||
1296 | + | func hf (hg,gt) = { | |
1297 | + | func hh (eD,dn) = { | |
1298 | + | let fn = eD._2 | |
1299 | + | let hi = parseIntValue(dn) | |
1300 | + | let gS = if ((hi == 0)) | |
1286 | 1301 | then 0 | |
1287 | - | else if (( | |
1288 | - | then ( | |
1289 | - | else if (( | |
1302 | + | else if ((hi >= (4 * gt))) | |
1303 | + | then (hi / gt) | |
1304 | + | else if ((hi > (3 * gt))) | |
1290 | 1305 | then 3 | |
1291 | - | else ((( | |
1292 | - | $Tuple3(( | |
1306 | + | else (((hi - 1) / gt) + 1) | |
1307 | + | $Tuple3((eD._1 :+ gS), (eD._2 + 1), (eD._3 + gS)) | |
1293 | 1308 | } | |
1294 | 1309 | ||
1295 | - | let | |
1296 | - | let | |
1297 | - | let | |
1298 | - | let | |
1299 | - | func | |
1300 | - | then | |
1301 | - | else | |
1302 | - | ||
1303 | - | func | |
1304 | - | then | |
1310 | + | let gh = { | |
1311 | + | let eF = hg | |
1312 | + | let eG = size(eF) | |
1313 | + | let eH = $Tuple3(nil, 0, 0) | |
1314 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1315 | + | then eJ | |
1316 | + | else hh(eJ, eF[eK]) | |
1317 | + | ||
1318 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1319 | + | then eJ | |
1305 | 1320 | else throw("List size exceeds 6") | |
1306 | 1321 | ||
1307 | - | | |
1322 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1308 | 1323 | } | |
1309 | - | let | |
1310 | - | let | |
1311 | - | let | |
1312 | - | func | |
1313 | - | let | |
1314 | - | then ( | |
1315 | - | else | |
1316 | - | let | |
1324 | + | let hj = gh._1 | |
1325 | + | let hk = value(indexOf(hj, max(hj))) | |
1326 | + | let hl = (gh._3 - 25) | |
1327 | + | func hm (eD,cP) = { | |
1328 | + | let dx = if ((cP == hk)) | |
1329 | + | then (hj[cP] - hl) | |
1330 | + | else hj[cP] | |
1331 | + | let dB = if ((dx == 0)) | |
1317 | 1332 | then nil | |
1318 | - | else split(drop(toString(pow(10, 0, | |
1319 | - | let | |
1320 | - | func | |
1321 | - | ||
1322 | - | let | |
1323 | - | let | |
1324 | - | let | |
1325 | - | let | |
1326 | - | func | |
1327 | - | then | |
1328 | - | else | |
1329 | - | ||
1330 | - | func | |
1331 | - | then | |
1333 | + | else split(drop(toString(pow(10, 0, dx, 0, 0, DOWN)), 1), "") | |
1334 | + | let fM = he[cP] | |
1335 | + | func hn (ho,hp) = (ho :+ fM) | |
1336 | + | ||
1337 | + | let hq = { | |
1338 | + | let eF = dB | |
1339 | + | let eG = size(eF) | |
1340 | + | let eH = nil | |
1341 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1342 | + | then eJ | |
1343 | + | else hn(eJ, eF[eK]) | |
1344 | + | ||
1345 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1346 | + | then eJ | |
1332 | 1347 | else throw("List size exceeds 25") | |
1333 | 1348 | ||
1334 | - | | |
1335 | - | } | |
1336 | - | ( | |
1349 | + | hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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) | |
1350 | + | } | |
1351 | + | (eD ++ hq) | |
1337 | 1352 | } | |
1338 | 1353 | ||
1339 | - | let | |
1340 | - | let | |
1341 | - | let | |
1342 | - | let | |
1343 | - | func | |
1344 | - | then | |
1345 | - | else | |
1346 | - | ||
1347 | - | func | |
1348 | - | then | |
1354 | + | let eO = { | |
1355 | + | let eF = cz | |
1356 | + | let eG = size(eF) | |
1357 | + | let eH = nil | |
1358 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1359 | + | then eJ | |
1360 | + | else hm(eJ, eF[eK]) | |
1361 | + | ||
1362 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1363 | + | then eJ | |
1349 | 1364 | else throw("List size exceeds 6") | |
1350 | 1365 | ||
1351 | - | | |
1366 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1352 | 1367 | } | |
1353 | - | func | |
1354 | - | ||
1355 | - | let | |
1356 | - | let | |
1357 | - | let | |
1358 | - | func | |
1359 | - | then | |
1360 | - | else | |
1361 | - | ||
1362 | - | func | |
1363 | - | then | |
1368 | + | func ht (eD,fn) = (eD + eO[fn]) | |
1369 | + | ||
1370 | + | let eF = hd | |
1371 | + | let eG = size(eF) | |
1372 | + | let eH = "" | |
1373 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1374 | + | then eJ | |
1375 | + | else ht(eJ, eF[eK]) | |
1376 | + | ||
1377 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1378 | + | then eJ | |
1364 | 1379 | else throw("List size exceeds 25") | |
1365 | 1380 | ||
1366 | - | | |
1367 | - | } | |
1368 | - | ||
1369 | - | ||
1370 | - | func | |
1371 | - | let | |
1372 | - | [toString(valueOrElse(parseInt( | |
1373 | - | then | |
1374 | - | else "0_0_0_0_0_0", if ((size(split( | |
1375 | - | then | |
1376 | - | else "0_0_0_0_0_0", | |
1377 | - | } | |
1378 | - | ||
1379 | - | ||
1380 | - | func | |
1381 | - | let | |
1382 | - | (( | |
1383 | - | } | |
1384 | - | ||
1385 | - | ||
1386 | - | func | |
1387 | - | let | |
1388 | - | func | |
1389 | - | ||
1390 | - | func | |
1391 | - | let | |
1392 | - | let | |
1393 | - | $Tuple2(( | |
1381 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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) | |
1382 | + | } | |
1383 | + | ||
1384 | + | ||
1385 | + | func hw (hx) = { | |
1386 | + | let gg = split(valueOrElse(getString(hx), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1387 | + | [toString(valueOrElse(parseInt(gg[bg]), 0)), if ((size(split(gg[bh], "_")) == aF)) | |
1388 | + | then gg[bh] | |
1389 | + | else "0_0_0_0_0_0", if ((size(split(gg[bi], "_")) == aF)) | |
1390 | + | then gg[bi] | |
1391 | + | else "0_0_0_0_0_0", gg[bj]] | |
1392 | + | } | |
1393 | + | ||
1394 | + | ||
1395 | + | func hy (hz) = { | |
1396 | + | let fb = split(hz, "_") | |
1397 | + | ((aI * (parseIntValue(fb[1]) + 1)) * parseIntValue(fb[0])) | |
1398 | + | } | |
1399 | + | ||
1400 | + | ||
1401 | + | func hA (hB) = { | |
1402 | + | let hC = hB[ba] | |
1403 | + | func hD (eD,hE) = (eD + parseIntValue(hE)) | |
1404 | + | ||
1405 | + | func hF (eD,hE) = { | |
1406 | + | let cP = eD._1 | |
1407 | + | let ew = (((parseIntValue(hE) + aW) - 1) / aW) | |
1408 | + | $Tuple2((cP + 1), (eD._2 + (ew * ct))) | |
1394 | 1409 | } | |
1395 | 1410 | ||
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | func | |
1401 | - | then | |
1402 | - | else | |
1403 | - | ||
1404 | - | func | |
1405 | - | then | |
1411 | + | let hG = { | |
1412 | + | let eF = split(hB[aY], "_") | |
1413 | + | let eG = size(eF) | |
1414 | + | let eH = 0 | |
1415 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1416 | + | then eJ | |
1417 | + | else hD(eJ, eF[eK]) | |
1418 | + | ||
1419 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1420 | + | then eJ | |
1406 | 1421 | else throw("List size exceeds 6") | |
1407 | 1422 | ||
1408 | - | | |
1423 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1409 | 1424 | } | |
1410 | - | let | |
1411 | - | let | |
1412 | - | let | |
1413 | - | let | |
1414 | - | func | |
1415 | - | then | |
1416 | - | else | |
1417 | - | ||
1418 | - | func | |
1419 | - | then | |
1425 | + | let hH = { | |
1426 | + | let eF = split(hB[aZ], "_") | |
1427 | + | let eG = size(eF) | |
1428 | + | let eH = 0 | |
1429 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1430 | + | then eJ | |
1431 | + | else hD(eJ, eF[eK]) | |
1432 | + | ||
1433 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1434 | + | then eJ | |
1420 | 1435 | else throw("List size exceeds 6") | |
1421 | 1436 | ||
1422 | - | | |
1437 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1423 | 1438 | } | |
1424 | - | let | |
1439 | + | let hI = if ((hC == "")) | |
1425 | 1440 | then 0 | |
1426 | - | else ( let | |
1427 | - | let | |
1428 | - | let | |
1429 | - | func | |
1430 | - | then | |
1431 | - | else | |
1432 | - | ||
1433 | - | func | |
1434 | - | then | |
1441 | + | else ( let eF = split_4C(hC, "_") | |
1442 | + | let eG = size(eF) | |
1443 | + | let eH = $Tuple2(0, 0) | |
1444 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1445 | + | then eJ | |
1446 | + | else hF(eJ, eF[eK]) | |
1447 | + | ||
1448 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1449 | + | then eJ | |
1435 | 1450 | else throw("List size exceeds 50") | |
1436 | 1451 | ||
1437 | - | | |
1438 | - | (( | |
1439 | - | } | |
1440 | - | ||
1441 | - | ||
1442 | - | func | |
1443 | - | let | |
1444 | - | let | |
1445 | - | let | |
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | then makeString(["0", toString( | |
1452 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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 | |
1453 | + | ((hG + hH) + hI) | |
1454 | + | } | |
1455 | + | ||
1456 | + | ||
1457 | + | func hJ (hK,hL,hM) = { | |
1458 | + | let hz = ((toString(hL) + "_") + toString(hM)) | |
1459 | + | let hN = hy(hz) | |
1460 | + | let hO = valueOrElse(getString(hK), (hz + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1461 | + | let hP = split_4C(hO, ":") | |
1462 | + | let hQ = hA(hP) | |
1463 | + | let hR = if ((5 > size(hP))) | |
1464 | + | then makeString(["0", toString(hQ), toString((hN - hQ)), toString(hN)], "_") | |
1450 | 1465 | else { | |
1451 | - | let | |
1452 | - | let | |
1453 | - | let | |
1454 | - | then parseIntValue( | |
1455 | - | else | |
1456 | - | makeString([toString( | |
1457 | - | } | |
1458 | - | [ | |
1459 | - | then | |
1460 | - | else "0_0_0_0_0_0", if ((size(split( | |
1461 | - | then | |
1462 | - | else "0_0_0_0_0_0", | |
1463 | - | } | |
1464 | - | ||
1465 | - | ||
1466 | - | func | |
1467 | - | let | |
1468 | - | let | |
1469 | - | (( | |
1470 | - | } | |
1471 | - | ||
1472 | - | ||
1473 | - | func | |
1466 | + | let hS = split(hP[bb], "_") | |
1467 | + | let hT = parseIntValue(hS[bc]) | |
1468 | + | let hU = if ((size(hS) > 1)) | |
1469 | + | then parseIntValue(hS[bd]) | |
1470 | + | else hQ | |
1471 | + | makeString([toString(hT), toString(hU), toString(((hN - hT) - hU)), toString(hN)], "_") | |
1472 | + | } | |
1473 | + | [hP[aX], if ((size(split(hP[aY], "_")) == aF)) | |
1474 | + | then hP[aY] | |
1475 | + | else "0_0_0_0_0_0", if ((size(split(hP[aZ], "_")) == aF)) | |
1476 | + | then hP[aZ] | |
1477 | + | else "0_0_0_0_0_0", hP[ba], hR] | |
1478 | + | } | |
1479 | + | ||
1480 | + | ||
1481 | + | func hV (hB) = { | |
1482 | + | let hW = hA(hB) | |
1483 | + | let hX = parseIntValue(split(hB[bb], "_")[bc]) | |
1484 | + | ((hy(hB[aX]) - hW) - hX) | |
1485 | + | } | |
1486 | + | ||
1487 | + | ||
1488 | + | func hY (hZ,hB,ia) = if ((size(hZ) != 3)) | |
1474 | 1489 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1475 | 1490 | else { | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1491 | + | let ib = split(hZ[0], "_") | |
1492 | + | let ic = split(hZ[1], "_") | |
1493 | + | let id = if ((hZ[2] == "")) | |
1479 | 1494 | then nil | |
1480 | - | else split_4C( | |
1481 | - | if ((size( | |
1495 | + | else split_4C(hZ[2], "_") | |
1496 | + | if ((size(ib) != aF)) | |
1482 | 1497 | then throw("All 6 resources should be passed") | |
1483 | - | else if ((size( | |
1498 | + | else if ((size(ic) != aF)) | |
1484 | 1499 | then throw("All 6 materials should be passed") | |
1485 | 1500 | else { | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1501 | + | let gL = hV(hB) | |
1502 | + | let ie = split(hB[aY], "_") | |
1503 | + | let if = split(hB[aZ], "_") | |
1504 | + | let ig = if ((hB[ba] == "")) | |
1490 | 1505 | then nil | |
1491 | - | else split_4C( | |
1492 | - | let | |
1493 | - | let | |
1494 | - | let | |
1506 | + | else split_4C(hB[ba], "_") | |
1507 | + | let gJ = split(ia[bh], "_") | |
1508 | + | let ih = split(ia[bi], "_") | |
1509 | + | let ii = if ((ia[bj] == "")) | |
1495 | 1510 | then nil | |
1496 | - | else split_4C( | |
1497 | - | func | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | if (( | |
1503 | - | then $Tuple4(( | |
1504 | - | else if (( | |
1505 | - | then if (( | |
1506 | - | then throw((((("Attempt to take " + | |
1507 | - | else $Tuple4(( | |
1508 | - | else if ((-( | |
1509 | - | then throw((((("Attempt to take " + toString(-( | |
1510 | - | else $Tuple4(( | |
1511 | + | else split_4C(ia[bj], "_") | |
1512 | + | func ij (eD,hE) = { | |
1513 | + | let gw = eD._1 | |
1514 | + | let ik = parseIntValue(hE) | |
1515 | + | let il = parseIntValue(ie[gw]) | |
1516 | + | let im = parseIntValue(gJ[gw]) | |
1517 | + | if ((ik == 0)) | |
1518 | + | then $Tuple4((gw + 1), (eD._2 :+ ie[gw]), (eD._3 :+ gJ[gw]), eD._4) | |
1519 | + | else if ((ik > 0)) | |
1520 | + | then if ((ik > im)) | |
1521 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(im)) + " available")) | |
1522 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik)) | |
1523 | + | else if ((-(ik) > il)) | |
1524 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(il)) + " available")) | |
1525 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((il + ik))), (eD._3 :+ toString((im - ik))), (eD._4 + ik)) | |
1511 | 1526 | } | |
1512 | 1527 | ||
1513 | - | let | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | func | |
1518 | - | then | |
1519 | - | else | |
1520 | - | ||
1521 | - | func | |
1522 | - | then | |
1528 | + | let eO = { | |
1529 | + | let eF = ib | |
1530 | + | let eG = size(eF) | |
1531 | + | let eH = $Tuple4(0, nil, nil, 0) | |
1532 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
1533 | + | then eJ | |
1534 | + | else ij(eJ, eF[eK]) | |
1535 | + | ||
1536 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
1537 | + | then eJ | |
1523 | 1538 | else throw("List size exceeds 6") | |
1524 | 1539 | ||
1525 | - | | |
1540 | + | eL(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6) | |
1526 | 1541 | } | |
1527 | - | func | |
1528 | - | let | |
1529 | - | let | |
1530 | - | let | |
1531 | - | let | |
1532 | - | if (( | |
1533 | - | then $Tuple4(( | |
1534 | - | else if (( | |
1535 | - | then if (( | |
1536 | - | then throw((((("Attempt to take " + | |
1537 | - | else $Tuple4(( | |
1538 | - | else if ((-( | |
1539 | - | then throw((((("Attempt to take " + toString(-( | |
1540 | - | else $Tuple4(( | |
1542 | + | func in (eD,hE) = { | |
1543 | + | let gw = eD._1 | |
1544 | + | let ik = parseIntValue(hE) | |
1545 | + | let io = parseIntValue(if[gw]) | |
1546 | + | let ip = parseIntValue(ih[gw]) | |
1547 | + | if ((ik == 0)) | |
1548 | + | then $Tuple4((gw + 1), (eD._2 :+ if[gw]), (eD._3 :+ ih[gw]), eD._4) | |
1549 | + | else if ((ik > 0)) | |
1550 | + | then if ((ik > ip)) | |
1551 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(ip)) + " available")) | |
1552 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik)) | |
1553 | + | else if ((-(ik) > io)) | |
1554 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(io)) + " available")) | |
1555 | + | else $Tuple4((gw + 1), (eD._2 :+ toString((io + ik))), (eD._3 :+ toString((ip - ik))), (eD._4 + ik)) | |
1541 | 1556 | } | |
1542 | 1557 | ||
1543 | - | let | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let | |
1547 | - | func | |
1548 | - | then | |
1549 | - | else | |
1550 | - | ||
1551 | - | func | |
1552 | - | then | |
1558 | + | let gc = { | |
1559 | + | let eF = ic | |
1560 | + | let eG = size(eF) | |
1561 | + | let eH = $Tuple4(0, nil, nil, eO._4) | |
1562 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
1563 | + | then eJ | |
1564 | + | else in(eJ, eF[eK]) | |
1565 | + | ||
1566 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
1567 | + | then eJ | |
1553 | 1568 | else throw("List size exceeds 6") | |
1554 | 1569 | ||
1555 | - | | |
1570 | + | hs(hr(hr(hr(hr(hr(hr(eH, 0), 1), 2), 3), 4), 5), 6) | |
1556 | 1571 | } | |
1557 | - | func | |
1558 | - | let | |
1559 | - | let | |
1560 | - | let | |
1561 | - | then parseIntValue( | |
1572 | + | func iq (eD,hE) = { | |
1573 | + | let gw = eD._1 | |
1574 | + | let ik = parseIntValue(hE) | |
1575 | + | let ir = if ((size(ig) > gw)) | |
1576 | + | then parseIntValue(ig[gw]) | |
1562 | 1577 | else 0 | |
1563 | - | let | |
1564 | - | then parseIntValue( | |
1578 | + | let is = if ((size(ii) > gw)) | |
1579 | + | then parseIntValue(ii[gw]) | |
1565 | 1580 | else 0 | |
1566 | - | if (( | |
1567 | - | then $Tuple4(( | |
1568 | - | else if (( | |
1569 | - | then if (( | |
1570 | - | then throw((((("Attempt to take " + | |
1581 | + | if ((ik == 0)) | |
1582 | + | then $Tuple4((gw + 1), (eD._2 :+ toString(ir)), (eD._3 :+ toString(is)), eD._4) | |
1583 | + | else if ((ik > 0)) | |
1584 | + | then if ((ik > is)) | |
1585 | + | then throw((((("Attempt to take " + hE) + " from backpack, but only ") + toString(is)) + " available")) | |
1571 | 1586 | else { | |
1572 | - | let | |
1573 | - | $Tuple4(( | |
1587 | + | let fF = (et((ir + ik), aW) - et(ir, aW)) | |
1588 | + | $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF)) | |
1574 | 1589 | } | |
1575 | - | else if ((-( | |
1576 | - | then throw((((("Attempt to take " + toString(-( | |
1590 | + | else if ((-(ik) > ir)) | |
1591 | + | then throw((((("Attempt to take " + toString(-(ik))) + " from warehouse, but only ") + toString(ir)) + " available")) | |
1577 | 1592 | else { | |
1578 | - | let | |
1579 | - | $Tuple4(( | |
1593 | + | let fF = (et((ir + ik), aW) - et(ir, aW)) | |
1594 | + | $Tuple4((gw + 1), (eD._2 :+ toString((ir + ik))), (eD._3 :+ toString((is - ik))), (eD._4 + fF)) | |
1580 | 1595 | } | |
1581 | 1596 | } | |
1582 | 1597 | ||
1583 | - | let | |
1598 | + | let gg = if ((size(id) != 0)) | |
1584 | 1599 | then { | |
1585 | - | let | |
1586 | - | let | |
1587 | - | let | |
1588 | - | func | |
1589 | - | then | |
1590 | - | else | |
1591 | - | ||
1592 | - | func | |
1593 | - | then | |
1600 | + | let eF = id | |
1601 | + | let eG = size(eF) | |
1602 | + | let eH = $Tuple4(0, nil, nil, gc._4) | |
1603 | + | func hu (eJ,eK) = if ((eK >= eG)) | |
1604 | + | then eJ | |
1605 | + | else iq(eJ, eF[eK]) | |
1606 | + | ||
1607 | + | func hv (eJ,eK) = if ((eK >= eG)) | |
1608 | + | then eJ | |
1594 | 1609 | else throw("List size exceeds 50") | |
1595 | 1610 | ||
1596 | - | | |
1611 | + | hv(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(hu(eH, 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) | |
1597 | 1612 | } | |
1598 | - | else $Tuple4(0, | |
1599 | - | let | |
1600 | - | if (( | |
1601 | - | then throw((((("Attempt to put total " + toString( | |
1602 | - | else $Tuple7(makeString( | |
1613 | + | else $Tuple4(0, ig, ii, gc._4) | |
1614 | + | let it = gg._4 | |
1615 | + | if ((it > gL)) | |
1616 | + | then throw((((("Attempt to put total " + toString(it)) + " stuff, but only ") + toString(gL)) + " warehouse space left")) | |
1617 | + | else $Tuple7(makeString(eO._2, "_"), makeString(gc._2, "_"), makeString_2C(gg._2, "_"), makeString(eO._3, "_"), makeString(gc._3, "_"), makeString_2C(gg._3, "_"), it) | |
1603 | 1618 | } | |
1604 | 1619 | } | |
1605 | 1620 | ||
1606 | 1621 | ||
1607 | - | func | |
1608 | - | let | |
1609 | - | let | |
1610 | - | let | |
1611 | - | let | |
1612 | - | let | |
1613 | - | let | |
1614 | - | let | |
1615 | - | let | |
1616 | - | let | |
1617 | - | let | |
1618 | - | $Tuple2([IntegerEntry( | |
1619 | - | } | |
1620 | - | ||
1621 | - | ||
1622 | - | func | |
1622 | + | func iu (iv,iw) = { | |
1623 | + | let bK = toString(iv) | |
1624 | + | let ix = gR(toBigInt(iw)) | |
1625 | + | let iy = valueOrElse(getInteger(eb()), (ea + 1)) | |
1626 | + | let ef = toString(iy) | |
1627 | + | let ha = toInt((ix % dU)) | |
1628 | + | let gz = gY(ix, ha) | |
1629 | + | let di = aO[ha] | |
1630 | + | let iz = Issue(es(ef, "S"), makeString([ef, "S", gz, di], "_"), 1, 0, false) | |
1631 | + | let bo = calculateAssetId(iz) | |
1632 | + | let iA = toBase58String(bo) | |
1633 | + | $Tuple2([IntegerEntry(eb(), (iy + 1)), iz, StringEntry(ee(ef), iA), StringEntry(bn(iA), bK), StringEntry(eh(ef), bK), IntegerEntry(bx(iA), 0), IntegerEntry(eg(iA, bK), 0), ScriptTransfer(iv, 1, bo)], $Tuple2(iA, di)) | |
1634 | + | } | |
1635 | + | ||
1636 | + | ||
1637 | + | func iB (bK,iC,iD) = if (!(sigVerify_8Kb(iC, iD, dK))) | |
1623 | 1638 | then throw("signature does not match") | |
1624 | 1639 | else { | |
1625 | - | let | |
1626 | - | let | |
1627 | - | let | |
1628 | - | let | |
1629 | - | let | |
1630 | - | let | |
1631 | - | let | |
1632 | - | let | |
1633 | - | if (if (( | |
1640 | + | let fb = split_4C(toUtf8String(iC), ";") | |
1641 | + | let iE = split_4C(fb[0], "|") | |
1642 | + | let iF = split(iE[eo], "_") | |
1643 | + | let iG = parseIntValue(iF[0]) | |
1644 | + | let iH = parseIntValue(iF[1]) | |
1645 | + | let iI = split(fb[1], ":") | |
1646 | + | let iJ = iI[0] | |
1647 | + | let iK = parseIntValue(iE[ep]) | |
1648 | + | if (if ((iK > (lastBlock.timestamp + dM))) | |
1634 | 1649 | then true | |
1635 | - | else ((lastBlock.timestamp - | |
1636 | - | then throw(((("signature outdated: logTime=" + toString( | |
1650 | + | else ((lastBlock.timestamp - dM) > iK)) | |
1651 | + | then throw(((("signature outdated: logTime=" + toString(iK)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1637 | 1652 | else { | |
1638 | - | let | |
1639 | - | let | |
1640 | - | if (( | |
1641 | - | then throw(((("Tx ids don't match! In state: " + | |
1653 | + | let iL = iI[1] | |
1654 | + | let iM = valueOrElse(getString(dv(bK)), "") | |
1655 | + | if ((iM != iL)) | |
1656 | + | then throw(((("Tx ids don't match! In state: " + iM) + ", in msg: ") + iL)) | |
1642 | 1657 | else { | |
1643 | - | let | |
1644 | - | let | |
1645 | - | let | |
1646 | - | let | |
1647 | - | if (( | |
1648 | - | then throw(((("oldHealth=" + toString( | |
1649 | - | else if ((0 >= | |
1658 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
1659 | + | let iN = z(A) | |
1660 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
1661 | + | let iP = valueOrElse(getInteger(iN), iO) | |
1662 | + | if ((iP != iG)) | |
1663 | + | then throw(((("oldHealth=" + toString(iP)) + " from state does not match one from flight log=") + toString(iG))) | |
1664 | + | else if ((0 >= iG)) | |
1650 | 1665 | then throw("You can't fly with zero health") | |
1651 | - | else if (!( | |
1666 | + | else if (!(gi(A))) | |
1652 | 1667 | then throw("Equipment incompatible") | |
1653 | 1668 | else { | |
1654 | - | let | |
1655 | - | then | |
1669 | + | let iQ = if ((size(iE) > eq)) | |
1670 | + | then iE[eq] | |
1656 | 1671 | else "" | |
1657 | - | let | |
1658 | - | then | |
1672 | + | let iR = if ((size(iE) > er)) | |
1673 | + | then iE[er] | |
1659 | 1674 | else "" | |
1660 | - | let | |
1661 | - | then ( | |
1675 | + | let iS = if (if ((iH > 0)) | |
1676 | + | then (iQ == "$") | |
1662 | 1677 | else false) | |
1663 | - | then | |
1678 | + | then do(invoke(cQ, "sendUsdtPrize", [bK], nil)) | |
1664 | 1679 | else 0 | |
1665 | - | $Tuple5( | |
1680 | + | $Tuple5(iH, A, iS, iJ, iR) | |
1666 | 1681 | } | |
1667 | 1682 | } | |
1668 | 1683 | } | |
1669 | 1684 | } | |
1670 | 1685 | ||
1671 | 1686 | ||
1672 | - | func | |
1673 | - | let | |
1674 | - | let | |
1675 | - | let | |
1676 | - | let | |
1677 | - | (( | |
1678 | - | } | |
1679 | - | ||
1680 | - | ||
1681 | - | func | |
1682 | - | let | |
1683 | - | then $Tuple2( | |
1687 | + | func iT (P,iU) = { | |
1688 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
1689 | + | let iV = valueOrElse(getInteger(br(aE, P)), 0) | |
1690 | + | let iW = (hM / 6) | |
1691 | + | let iX = (hM / 7) | |
1692 | + | ((aH + fraction(aH, ((hM + iW) + (2 * iX)), 5)) + fraction(aH, iV, (iU * 5))) | |
1693 | + | } | |
1694 | + | ||
1695 | + | ||
1696 | + | func iY (c,iZ,ja) = { | |
1697 | + | let jb = if ((iZ == el)) | |
1698 | + | then $Tuple2(ja, valueOrElse(getString(bG(c)), "")) | |
1684 | 1699 | else { | |
1685 | - | let | |
1686 | - | let | |
1687 | - | let | |
1688 | - | if (( | |
1689 | - | then throw((("Duck location type is " + | |
1690 | - | else $Tuple2( | |
1691 | - | } | |
1692 | - | let | |
1693 | - | let | |
1694 | - | let | |
1695 | - | let | |
1696 | - | let | |
1697 | - | let | |
1698 | - | if (( | |
1699 | - | then throw(( | |
1700 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1701 | + | let jc = valueOrElse(getString(bI(A)), aJ) | |
1702 | + | let ce = split(value(jc), "_") | |
1703 | + | if ((ce[bl] != "L")) | |
1704 | + | then throw((("Duck location type is " + ce[bl]) + ", but should be L")) | |
1705 | + | else $Tuple2(ce[bm], A) | |
1706 | + | } | |
1707 | + | let P = jb._1 | |
1708 | + | let jd = jb._2 | |
1709 | + | let je = value(assetInfo(fromBase58String(P))) | |
1710 | + | let jf = bq(P) | |
1711 | + | let jg = valueOrErrorMessage(getInteger(jf), (("Land " + je.name) + " is not staked")) | |
1712 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
1713 | + | if ((jh != c)) | |
1714 | + | then throw((aC + " is not yours")) | |
1700 | 1715 | else { | |
1701 | - | let | |
1702 | - | $Tuple4( | |
1703 | - | } | |
1704 | - | } | |
1705 | - | ||
1706 | - | ||
1707 | - | func | |
1716 | + | let ji = split(je.description, "_") | |
1717 | + | $Tuple4(jd, P, ji, jg) | |
1718 | + | } | |
1719 | + | } | |
1720 | + | ||
1721 | + | ||
1722 | + | func jj (c,eu,iZ,ja) = if ((0 > eu)) | |
1708 | 1723 | then throw("Negative amount") | |
1709 | 1724 | else { | |
1710 | - | let | |
1711 | - | let | |
1712 | - | let | |
1713 | - | let | |
1714 | - | if ((0 > | |
1715 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1725 | + | let fM = iY(c, iZ, ja) | |
1726 | + | let ds = fM._3[cX] | |
1727 | + | let gs = gy(fM._3[cY]) | |
1728 | + | let gC = (lastBlock.timestamp - fM._4) | |
1729 | + | if ((0 > gC)) | |
1730 | + | then throw(((("Saved timestamp is in future, saved = " + toString(fM._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1716 | 1731 | else { | |
1717 | - | let | |
1718 | - | let | |
1719 | - | let | |
1720 | - | if (( | |
1721 | - | then throw(((("Not enough resources, available = " + toString( | |
1732 | + | let iU = dr(ds) | |
1733 | + | let jk = iT(fM._2, iU) | |
1734 | + | let jl = fraction(gC, (jk * iU), a) | |
1735 | + | if ((eu > jl)) | |
1736 | + | then throw(((("Not enough resources, available = " + toString(jl)) + ", requested = ") + toString(eu))) | |
1722 | 1737 | else { | |
1723 | - | let | |
1724 | - | let | |
1725 | - | let | |
1726 | - | let | |
1727 | - | let | |
1728 | - | let | |
1729 | - | let | |
1730 | - | let | |
1731 | - | let | |
1732 | - | if (if (( | |
1733 | - | then ( | |
1738 | + | let jm = fraction((jl - eu), a, (jk * iU)) | |
1739 | + | let jn = (lastBlock.timestamp - jm) | |
1740 | + | let hL = (iU / cu) | |
1741 | + | let gK = gG(gs, (gC - jm), hL, jk) | |
1742 | + | let hK = bw(fM._2) | |
1743 | + | let hM = valueOrElse(getInteger(bx(fM._2)), 0) | |
1744 | + | let hB = hJ(hK, hL, hM) | |
1745 | + | let hS = split(hB[bb], "_") | |
1746 | + | let gL = parseIntValue(hS[be]) | |
1747 | + | if (if ((iZ == el)) | |
1748 | + | then (eu > gL) | |
1734 | 1749 | else false) | |
1735 | - | then throw((("Only " + toString( | |
1750 | + | then throw((("Only " + toString(gL)) + " space left in warehouse")) | |
1736 | 1751 | else { | |
1737 | - | let | |
1738 | - | let | |
1739 | - | let | |
1740 | - | let | |
1741 | - | let | |
1742 | - | then $Tuple4( | |
1743 | - | else if (( | |
1744 | - | then $Tuple4( | |
1752 | + | let hx = bH(fM._1) | |
1753 | + | let ia = hw(hx) | |
1754 | + | let gJ = split(ia[bh], "_") | |
1755 | + | let gI = split(hB[aY], "_") | |
1756 | + | let jo = if ((iZ == el)) | |
1757 | + | then $Tuple4(gA(gI, gs, (gC - jm), hL, jk), ia[bh], (parseIntValue(hS[bd]) + gK._2), (parseIntValue(hS[be]) - gK._2)) | |
1758 | + | else if ((iZ == em)) | |
1759 | + | then $Tuple4(hB[aY], gA(gJ, gs, (gC - jm), hL, jk), parseIntValue(hS[bd]), parseIntValue(hS[be])) | |
1745 | 1760 | else { | |
1746 | - | let | |
1747 | - | let | |
1748 | - | $Tuple4( | |
1761 | + | let jp = gH(gI, gJ, gK, gL) | |
1762 | + | let jq = min([parseIntValue(hS[be]), gK._2]) | |
1763 | + | $Tuple4(jp._1, jp._2, (parseIntValue(hS[bd]) + jq), (parseIntValue(hS[be]) - jq)) | |
1749 | 1764 | } | |
1750 | - | let | |
1751 | - | let | |
1752 | - | let | |
1753 | - | let | |
1754 | - | $Tuple5([IntegerEntry( | |
1765 | + | let jr = jo._1 | |
1766 | + | let js = jo._2 | |
1767 | + | let jt = jo._3 | |
1768 | + | let ju = jo._4 | |
1769 | + | $Tuple5([IntegerEntry(bq(fM._2), jn), IntegerEntry(bt(aC, fM._2, c), jn)], hx, [ia[bg], js, ia[bi], ia[bj]], hK, [hB[aX], jr, hB[aZ], hB[ba], makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")]) | |
1755 | 1770 | } | |
1756 | 1771 | } | |
1757 | 1772 | } | |
1758 | 1773 | } | |
1759 | 1774 | ||
1760 | 1775 | ||
1761 | - | func | |
1762 | - | let | |
1763 | - | let | |
1764 | - | let | |
1765 | - | | |
1766 | - | } | |
1767 | - | ||
1768 | - | ||
1769 | - | func | |
1770 | - | let | |
1771 | - | let | |
1772 | - | let | |
1773 | - | let | |
1774 | - | let | |
1775 | - | if (if (!( | |
1776 | - | then ( | |
1776 | + | func jv (c,P,iU,iZ) = { | |
1777 | + | let jf = bq(P) | |
1778 | + | let jg = value(getInteger(jf)) | |
1779 | + | let jl = (fraction((lastBlock.timestamp - jg), iT(P, iU), a) * iU) | |
1780 | + | jj(c, jl, iZ, P) | |
1781 | + | } | |
1782 | + | ||
1783 | + | ||
1784 | + | func jw (eQ,iv,jx,P) = { | |
1785 | + | let c = toString(iv) | |
1786 | + | let fM = iY(c, en, P) | |
1787 | + | let iU = dr(fM._3[cX]) | |
1788 | + | let jy = bx(fM._2) | |
1789 | + | let jz = valueOrElse(getInteger(jy), 0) | |
1790 | + | if (if (!(cj)) | |
1791 | + | then (jz >= 3) | |
1777 | 1792 | else false) | |
1778 | 1793 | then throw("Currently max infrastructure level = 3") | |
1779 | 1794 | else { | |
1780 | - | let | |
1781 | - | let | |
1782 | - | if (if ( | |
1783 | - | then ( | |
1795 | + | let jA = ((sqrt(iU, 0, 0, DOWN) / 5) + 2) | |
1796 | + | let al = (jz + 1) | |
1797 | + | if (if (cj) | |
1798 | + | then (al > jA) | |
1784 | 1799 | else false) | |
1785 | - | then throw(("Currently max infrastructure level = " + toString( | |
1800 | + | then throw(("Currently max infrastructure level = " + toString(jA))) | |
1786 | 1801 | else { | |
1787 | - | let | |
1788 | - | if (if (!( | |
1789 | - | then ( | |
1802 | + | let jB = fraction(dQ, (iU * al), cu) | |
1803 | + | if (if (!(eQ)) | |
1804 | + | then (jx != jB) | |
1790 | 1805 | else false) | |
1791 | - | then throw(("Payment attached should be " + toString( | |
1806 | + | then throw(("Payment attached should be " + toString(jB))) | |
1792 | 1807 | else { | |
1793 | - | let | |
1794 | - | let | |
1795 | - | let | |
1796 | - | let | |
1797 | - | let | |
1798 | - | let | |
1799 | - | let | |
1800 | - | let | |
1801 | - | let | |
1802 | - | let | |
1803 | - | let | |
1804 | - | let | |
1805 | - | $Tuple3(([IntegerEntry( | |
1808 | + | let hx = bH(fM._1) | |
1809 | + | let ia = hw(hx) | |
1810 | + | let jC = split(ia[bi], "_") | |
1811 | + | let jD = fraction(cp, (iU * al), cu) | |
1812 | + | let jE = makeString(eP(eQ, jC, jD), "_") | |
1813 | + | let jF = jv(c, fM._2, iU, en) | |
1814 | + | let jG = jF._5 | |
1815 | + | let jH = hy(jG[aX]) | |
1816 | + | let jI = makeString([split(jG[aX], "_")[0], toString(al)], "_") | |
1817 | + | let jJ = hy(jI) | |
1818 | + | let hS = split(jG[bb], "_") | |
1819 | + | let jK = makeString([hS[bc], hS[bd], toString(((parseIntValue(hS[be]) + jJ) - jH)), toString(jJ)], "_") | |
1820 | + | $Tuple3(([IntegerEntry(jy, al), IntegerEntry(eg(fM._2, c), al), StringEntry(hx, makeString([ia[bg], jF._3[bh], jE, ia[bj]], ":")), StringEntry(jF._4, makeString([jI, jG[aY], jG[aZ], jG[ba], jK], ":"))] ++ jF._1), al, jD) | |
1806 | 1821 | } | |
1807 | 1822 | } | |
1808 | 1823 | } | |
1809 | 1824 | } | |
1810 | 1825 | ||
1811 | 1826 | ||
1812 | - | func | |
1813 | - | let | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | let | |
1819 | - | $Tuple2([IntegerEntry( | |
1820 | - | } | |
1821 | - | ||
1822 | - | ||
1823 | - | func | |
1824 | - | let | |
1825 | - | let | |
1826 | - | let | |
1827 | - | let | |
1828 | - | let | |
1829 | - | let | |
1830 | - | $Tuple2([IntegerEntry( | |
1831 | - | } | |
1832 | - | ||
1833 | - | ||
1834 | - | func | |
1835 | - | let | |
1836 | - | let | |
1837 | - | let | |
1838 | - | if (!(isDefined( | |
1827 | + | func jL (A,jM) = { | |
1828 | + | let jN = D(A) | |
1829 | + | let jO = C(A) | |
1830 | + | let af = valueOrElse(getInteger(an, jO), 0) | |
1831 | + | let ak = (af + jM) | |
1832 | + | let jP = ai(valueOrElse(getInteger(an, jN), 0), ak) | |
1833 | + | let jQ = E(A) | |
1834 | + | $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak) | |
1835 | + | } | |
1836 | + | ||
1837 | + | ||
1838 | + | func jR (c,jM) = { | |
1839 | + | let jN = H(c) | |
1840 | + | let jO = G(c) | |
1841 | + | let af = valueOrElse(getInteger(an, jO), 0) | |
1842 | + | let ak = (af + jM) | |
1843 | + | let jP = ai(valueOrElse(getInteger(an, jN), 0), ak) | |
1844 | + | let jQ = I(c) | |
1845 | + | $Tuple2([IntegerEntry(jN, jP[0]), IntegerEntry(jO, ak), IntegerEntry(jQ, (valueOrElse(getInteger(jQ), 0) + jP[1]))], ak) | |
1846 | + | } | |
1847 | + | ||
1848 | + | ||
1849 | + | func jS (c) = { | |
1850 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1851 | + | let jT = bB(c) | |
1852 | + | let jU = getString(jT) | |
1853 | + | if (!(isDefined(jU))) | |
1839 | 1854 | then throw("You are not eligible for ONBOARD artifact") | |
1840 | 1855 | else { | |
1841 | - | let | |
1842 | - | let | |
1843 | - | if (isDefined( | |
1844 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1856 | + | let jV = bD(c) | |
1857 | + | let jW = getString(jV) | |
1858 | + | if (isDefined(jW)) | |
1859 | + | then throw(("You already used your ONBOARD artifact on duck " + value(jW))) | |
1845 | 1860 | else { | |
1846 | - | let | |
1847 | - | let | |
1848 | - | if (isDefined( | |
1849 | - | then throw(((("The duck " + | |
1850 | - | else ([StringEntry( | |
1861 | + | let jX = bC(A) | |
1862 | + | let jY = getString(jX) | |
1863 | + | if (isDefined(jY)) | |
1864 | + | then throw(((("The duck " + A) + " already got points from ONBOARD artifact from user ") + value(jY))) | |
1865 | + | else ([StringEntry(jV, A), StringEntry(jX, c)] ++ jL(A, ac)._1) | |
1851 | 1866 | } | |
1852 | 1867 | } | |
1853 | 1868 | } | |
1854 | 1869 | ||
1855 | 1870 | ||
1856 | - | func | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1860 | - | let | |
1861 | - | if ((valueOrElse(getInteger( | |
1871 | + | func jZ (c,ja) = { | |
1872 | + | let fM = iY(c, en, ja) | |
1873 | + | let P = fM._2 | |
1874 | + | let iU = dr(fM._3[cX]) | |
1875 | + | let ka = br(aE, P) | |
1876 | + | if ((valueOrElse(getInteger(ka), 0) > 0)) | |
1862 | 1877 | then throw("Presale artifact is already activated") | |
1863 | - | else if ((parseIntValue( | |
1864 | - | then throw(((( | |
1878 | + | else if ((parseIntValue(fM._3[cW]) > ea)) | |
1879 | + | then throw((((aC + " ") + P) + " is not eligible for presale artifact")) | |
1865 | 1880 | else { | |
1866 | - | let | |
1867 | - | ((( | |
1881 | + | let jF = jv(c, P, iU, en) | |
1882 | + | (((jF._1 :+ IntegerEntry(ka, iU)) :+ StringEntry(jF._2, makeString(jF._3, ":"))) :+ StringEntry(jF._4, makeString(jF._5, ":"))) | |
1868 | 1883 | } | |
1869 | 1884 | } | |
1870 | 1885 | ||
1871 | 1886 | ||
1872 | - | func | |
1873 | - | let | |
1874 | - | let | |
1875 | - | let | |
1876 | - | let | |
1877 | - | let | |
1878 | - | let | |
1879 | - | if (( | |
1887 | + | func kb (A) = { | |
1888 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
1889 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
1890 | + | let ax = lastBlock.timestamp | |
1891 | + | let cf = bX(cU, cd) | |
1892 | + | let bZ = cf[bT] | |
1893 | + | let ca = cf[bU] | |
1894 | + | if ((jc[bl] != "T")) | |
1880 | 1895 | then false | |
1881 | - | else if (if (if ((parseIntValue( | |
1882 | - | then ( | |
1896 | + | else if (if (if ((parseIntValue(jc[bk]) == cd)) | |
1897 | + | then (ca[bW] == "INPROGRESS") | |
1883 | 1898 | else false) | |
1884 | - | then (parseIntValue( | |
1899 | + | then (parseIntValue(bZ[bV]) > ax) | |
1885 | 1900 | else false) | |
1886 | 1901 | then throw("Your duck is taking part in the tournament") | |
1887 | - | else do(invoke(this, "exitTournamentInternal", [z], nil)) | |
1888 | - | } | |
1889 | - | ||
1890 | - | ||
1891 | - | func jV (jW,aj,jX,b,jY,jZ) = { | |
1892 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
1893 | - | if (jU(z)) | |
1902 | + | else dq(invoke(this, "exitTournamentInternal", [A], nil)) | |
1903 | + | } | |
1904 | + | ||
1905 | + | ||
1906 | + | func kc (A) = { | |
1907 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
1908 | + | let ax = lastBlock.timestamp | |
1909 | + | if ((jc[bl] != "D")) | |
1910 | + | then false | |
1911 | + | else { | |
1912 | + | let kd = parseIntValue(jc[bk]) | |
1913 | + | let ke = parseIntValue(jc[bm]) | |
1914 | + | if (if ((ax > (kd + dN))) | |
1915 | + | then (3 > ke) | |
1916 | + | else false) | |
1917 | + | then throw("Your duck is on delivery mission") | |
1918 | + | else dq(invoke(this, "exitDeliveryInternal", [A], nil)) | |
1919 | + | } | |
1920 | + | } | |
1921 | + | ||
1922 | + | ||
1923 | + | func kf (kg,al,kh,c,ki,kj) = { | |
1924 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
1925 | + | if (kb(A)) | |
1894 | 1926 | then throw("mergeInternal_checkTournament") | |
1927 | + | else if (kc(A)) | |
1928 | + | then throw("mergeInternal_checkDelivery") | |
1929 | + | else { | |
1930 | + | func kk (eD,P) = { | |
1931 | + | let je = value(assetInfo(fromBase58String(P))) | |
1932 | + | let jf = bq(P) | |
1933 | + | let jg = valueOrErrorMessage(getInteger(jf), (("NFT " + je.name) + " is not staked")) | |
1934 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
1935 | + | if ((jh != c)) | |
1936 | + | then throw((aC + " is not yours")) | |
1937 | + | else { | |
1938 | + | let ji = split(je.description, "_") | |
1939 | + | let di = ji[cZ] | |
1940 | + | if (if ((eD._3 != "")) | |
1941 | + | then (eD._3 != di) | |
1942 | + | else false) | |
1943 | + | then throw("Lands should be on the same continent to merge") | |
1944 | + | else { | |
1945 | + | let ds = ji[cX] | |
1946 | + | let kl = eD._1 | |
1947 | + | let gw = valueOrErrorMessage(indexOf(kl, ds), "You haven't passed all the lands needed") | |
1948 | + | let km = (take(kl, gw) + drop(kl, (gw + 1))) | |
1949 | + | let iU = dr(ds) | |
1950 | + | let kn = (eD._2 + valueOrElse(getInteger(br(aE, P)), 0)) | |
1951 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
1952 | + | let ko = { | |
1953 | + | let cn = ds | |
1954 | + | if (("S" == cn)) | |
1955 | + | then 3 | |
1956 | + | else if (("M" == cn)) | |
1957 | + | then 4 | |
1958 | + | else if (("L" == cn)) | |
1959 | + | then 5 | |
1960 | + | else if (("XL" == cn)) | |
1961 | + | then 6 | |
1962 | + | else throw("Only S, M, L, XL can merge") | |
1963 | + | } | |
1964 | + | if ((hM != ko)) | |
1965 | + | then throw("All lands should be maxed to merge") | |
1966 | + | else { | |
1967 | + | let ef = ji[cW] | |
1968 | + | let gs = gy(ji[cY]) | |
1969 | + | let gC = (lastBlock.timestamp - jg) | |
1970 | + | if ((0 > gC)) | |
1971 | + | then throw(((("Saved timestamp is in future, saved = " + toString(jg)) + ", current = ") + toString(lastBlock.timestamp))) | |
1972 | + | else { | |
1973 | + | let jk = iT(P, iU) | |
1974 | + | let hL = (iU / cu) | |
1975 | + | let js = gA(split(eD._4, "_"), gs, gC, hL, jk) | |
1976 | + | let eN = gq(eD._6, gs, hL, -1) | |
1977 | + | let kp = gq(eD._10, gs, hL, -1) | |
1978 | + | let hg = gq(eD._9, gs, hL, 1) | |
1979 | + | let kq = eD._7 | |
1980 | + | let cP = indexOf(kq, P) | |
1981 | + | if (!(isDefined(cP))) | |
1982 | + | then throw(("Your staked lands don't contain " + P)) | |
1983 | + | else { | |
1984 | + | let kr = bp(P) | |
1985 | + | let ks = valueOrElse(getString(kr), "") | |
1986 | + | $Tuple10(km, kn, di, js, ((((((((((((eD._5 :+ DeleteEntry(bq(P))) :+ DeleteEntry(bt(aC, P, c))) :+ DeleteEntry(ee(ef))) :+ DeleteEntry(bn(P))) :+ DeleteEntry(bx(P))) :+ DeleteEntry(eg(P, c))) :+ DeleteEntry(br(aE, P))) :+ DeleteEntry(eh(ef))) :+ DeleteEntry(bw(P))) :+ DeleteEntry(kr)) :+ Burn(fromBase58String(P), 1)) ++ (if ((ks != "")) | |
1987 | + | then [DeleteEntry(ec(ks))] | |
1988 | + | else nil)), eN, removeByIndex(kq, value(cP)), (eD._8 + iU), hg, kp) | |
1989 | + | } | |
1990 | + | } | |
1991 | + | } | |
1992 | + | } | |
1993 | + | } | |
1994 | + | } | |
1995 | + | ||
1996 | + | let hx = bH(A) | |
1997 | + | let ia = hw(hx) | |
1998 | + | let gr = split(valueOrElse(getString(dg()), "0_0_0_0_0_0"), "_") | |
1999 | + | let kt = dj(c) | |
2000 | + | let ku = getString(kt) | |
2001 | + | let kv = if (isDefined(ku)) | |
2002 | + | then split_51C(value(ku), "_") | |
2003 | + | else nil | |
2004 | + | let kw = split(value(assetInfo(fromBase58String(ki[0]))).description, "_")[cZ] | |
2005 | + | let kx = split(valueOrElse(getString(dh(kw)), "0_0_0_0_0_0"), "_") | |
2006 | + | let eO = { | |
2007 | + | let eF = ki | |
2008 | + | let eG = size(eF) | |
2009 | + | let eH = $Tuple10(kh, 0, "", ia[bh], nil, gr, kv, 0, split("0_0_0_0_0_0", "_"), kx) | |
2010 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2011 | + | then eJ | |
2012 | + | else kk(eJ, eF[eK]) | |
2013 | + | ||
2014 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2015 | + | then eJ | |
2016 | + | else throw("List size exceeds 5") | |
2017 | + | ||
2018 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
2019 | + | } | |
2020 | + | let di = eO._3 | |
2021 | + | let ha = valueOrErrorMessage(indexOf(aO, di), ("Unknown continent: " + di)) | |
2022 | + | let gz = hf(eO._9, (dr(kg) / cu)) | |
2023 | + | let iy = valueOrElse(getInteger(eb()), (ea + 1)) | |
2024 | + | let ky = toString(iy) | |
2025 | + | let iz = Issue(es(ky, kg), makeString([ky, kg, gz, di], "_"), 1, 0, false) | |
2026 | + | let bo = calculateAssetId(iz) | |
2027 | + | let kz = toBase58String(bo) | |
2028 | + | let jE = makeString(eP((kj > 0), split(ia[bi], "_"), kj), "_") | |
2029 | + | let kA = dk(c) | |
2030 | + | let kB = valueOrElse(getInteger(kA), 0) | |
2031 | + | $Tuple2((((((((((((((((eO._5 :+ (if ((size(eO._7) > 0)) | |
2032 | + | then StringEntry(kt, makeString_11C(eO._7, "_")) | |
2033 | + | else DeleteEntry(kt))) :+ IntegerEntry(kA, if ((eO._8 > kB)) | |
2034 | + | then 0 | |
2035 | + | else (kB - eO._8))) :+ IntegerEntry(eb(), (iy + 1))) :+ iz) :+ StringEntry(ee(ky), kz)) :+ StringEntry(bn(kz), c)) :+ StringEntry(eh(ky), c)) :+ IntegerEntry(br(aE, kz), eO._2)) :+ IntegerEntry(bx(kz), al)) :+ IntegerEntry(eg(kz, c), al)) :+ StringEntry(hx, makeString([ia[bg], eO._4, jE, ia[bj]], ":"))) :+ StringEntry(dg(), makeString(eO._6, "_"))) :+ StringEntry(dh(di), makeString(eO._10, "_"))) :+ StringEntry(bI(A), makeString([di, "L", kz], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bo)), kz) | |
2036 | + | } | |
2037 | + | } | |
2038 | + | ||
2039 | + | ||
2040 | + | func kC (c,ki) = kf("M", 3, "SSSS", c, ki, 0) | |
2041 | + | ||
2042 | + | ||
2043 | + | func kD (c,ki) = kf("L", 4, "SMM", c, ki, (cp * 4)) | |
2044 | + | ||
2045 | + | ||
2046 | + | func kE (c,ki) = kf("XL", 5, "SSSML", c, ki, (cp * 47)) | |
2047 | + | ||
2048 | + | ||
2049 | + | func kF (c,ki) = kf("XXL", 6, "LXL", c, ki, (cp * 54)) | |
2050 | + | ||
2051 | + | ||
2052 | + | func kG (c,ki) = { | |
2053 | + | let cn = size(ki) | |
2054 | + | if ((4 == cn)) | |
2055 | + | then kC(c, ki) | |
2056 | + | else if ((3 == cn)) | |
2057 | + | then kD(c, ki) | |
2058 | + | else if ((5 == cn)) | |
2059 | + | then kE(c, ki) | |
2060 | + | else if ((2 == cn)) | |
2061 | + | then kF(c, ki) | |
2062 | + | else throw("Unknown merge") | |
2063 | + | } | |
2064 | + | ||
2065 | + | ||
2066 | + | func kH (gw) = if (if ((gw.originCaller != cQ)) | |
2067 | + | then valueOrElse(getBoolean(du()), false) | |
2068 | + | else false) | |
2069 | + | then throw("Contracts are under maintenance") | |
2070 | + | else StringEntry(dv(toString(gw.originCaller)), toBase58String(gw.transactionId)) | |
2071 | + | ||
2072 | + | ||
2073 | + | @Callable(gw) | |
2074 | + | func constructorV1 (kI) = if ((gw.caller != this)) | |
2075 | + | then throw("Permission denied") | |
2076 | + | else [StringEntry(cK(), kI)] | |
2077 | + | ||
2078 | + | ||
2079 | + | ||
2080 | + | @Callable(gw) | |
2081 | + | func setBlocked (kJ) = if ((gw.caller != this)) | |
2082 | + | then throw("permission denied") | |
2083 | + | else [BooleanEntry(du(), kJ)] | |
2084 | + | ||
2085 | + | ||
2086 | + | ||
2087 | + | @Callable(gw) | |
2088 | + | func stakeLand () = { | |
2089 | + | let kK = kH(gw) | |
2090 | + | if ((size(gw.payments) != 1)) | |
2091 | + | then throw("Exactly one payment required") | |
1895 | 2092 | else { | |
1896 | - | func ka (eu,O) = { | |
1897 | - | let iX = value(assetInfo(fromBase58String(O))) | |
1898 | - | let iY = bp(O) | |
1899 | - | let iZ = valueOrErrorMessage(getInteger(iY), (("NFT " + iX.name) + " is not staked")) | |
1900 | - | let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned")) | |
1901 | - | if ((ja != b)) | |
1902 | - | then throw((aA + " is not yours")) | |
2093 | + | let kL = value(gw.payments[0]) | |
2094 | + | let bo = value(kL.assetId) | |
2095 | + | let cB = toString(gw.caller) | |
2096 | + | if ((kL.amount != 1)) | |
2097 | + | then throw((("NFT " + aC) + " token should be attached as payment")) | |
2098 | + | else { | |
2099 | + | let je = value(assetInfo(bo)) | |
2100 | + | if ((je.issuer != this)) | |
2101 | + | then throw("Unknown issuer of token") | |
2102 | + | else if (!(contains(je.name, aC))) | |
2103 | + | then throw((("Only NFT " + aC) + " tokens are accepted")) | |
2104 | + | else { | |
2105 | + | let kM = drop(je.name, 4) | |
2106 | + | let ef = if (contains(kM, "XXL")) | |
2107 | + | then dropRight(kM, 3) | |
2108 | + | else if (contains(kM, "XL")) | |
2109 | + | then dropRight(kM, 2) | |
2110 | + | else dropRight(kM, 1) | |
2111 | + | if (!(isDefined(parseInt(ef)))) | |
2112 | + | then throw(("Cannot parse land number from " + je.name)) | |
2113 | + | else { | |
2114 | + | let P = toBase58String(bo) | |
2115 | + | let jf = bq(P) | |
2116 | + | if (isDefined(getInteger(jf))) | |
2117 | + | then throw((("NFT " + je.name) + " is already staked")) | |
2118 | + | else { | |
2119 | + | let ji = split(je.description, "_") | |
2120 | + | let gs = gy(ji[cY]) | |
2121 | + | let iU = dr(ji[cX]) | |
2122 | + | let hL = (iU / cu) | |
2123 | + | let eN = gx(gs, hL, 1) | |
2124 | + | let kN = dh(ji[cZ]) | |
2125 | + | let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_") | |
2126 | + | let kO = makeString(gq(kx, gs, hL, 1), "_") | |
2127 | + | let kt = dj(cB) | |
2128 | + | let ku = getString(kt) | |
2129 | + | let kq = if (isDefined(ku)) | |
2130 | + | then split_51C(value(ku), "_") | |
2131 | + | else nil | |
2132 | + | if (containsElement(kq, P)) | |
2133 | + | then throw(("Your staked lands already contain " + P)) | |
2134 | + | else if ((size(kq) >= aG)) | |
2135 | + | then throw((("Your already staked max (" + toString(aG)) + ") lands")) | |
2136 | + | else { | |
2137 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2138 | + | let kA = dk(cB) | |
2139 | + | let kP = valueOrElse(getInteger(kA), 0) | |
2140 | + | let kQ = invoke(cT, "onStakeUnstakeLand", [cB], nil) | |
2141 | + | $Tuple2([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aC, P, cB), lastBlock.timestamp), StringEntry(kt, makeString_11C((kq :+ P), "_")), IntegerEntry(kA, (kP + iU)), StringEntry(bn(P), cB), StringEntry(eh(ef), cB), IntegerEntry(eg(P, cB), hM), StringEntry(dg(), eN), StringEntry(kN, kO), kK], kQ) | |
2142 | + | } | |
2143 | + | } | |
2144 | + | } | |
2145 | + | } | |
2146 | + | } | |
2147 | + | } | |
2148 | + | } | |
2149 | + | ||
2150 | + | ||
2151 | + | ||
2152 | + | @Callable(gw) | |
2153 | + | func unstakeLand (ja) = { | |
2154 | + | let kK = kH(gw) | |
2155 | + | if ((size(gw.payments) != 0)) | |
2156 | + | then throw("No payments required") | |
2157 | + | else { | |
2158 | + | let c = toString(gw.caller) | |
2159 | + | let fM = iY(c, em, ja) | |
2160 | + | let P = fM._2 | |
2161 | + | let ji = fM._3 | |
2162 | + | let kt = dj(c) | |
2163 | + | let gs = gy(ji[cY]) | |
2164 | + | let iU = dr(ji[cX]) | |
2165 | + | let hL = (iU / cu) | |
2166 | + | let eN = gx(gs, hL, -1) | |
2167 | + | let kN = dh(ji[cZ]) | |
2168 | + | let kx = split(valueOrElse(getString(kN), "0_0_0_0_0_0"), "_") | |
2169 | + | let kO = makeString(gq(kx, gs, hL, -1), "_") | |
2170 | + | let jF = jv(c, P, iU, em) | |
2171 | + | let kq = split_51C(valueOrElse(getString(kt), ""), "_") | |
2172 | + | let cP = indexOf(kq, P) | |
2173 | + | if (!(isDefined(cP))) | |
2174 | + | then throw(("Your staked lands don't contain " + P)) | |
2175 | + | else { | |
2176 | + | let ax = lastBlock.timestamp | |
2177 | + | let kR = valueOrElse(getInteger(cS, bJ(c)), 0) | |
2178 | + | if ((kR >= ax)) | |
2179 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kR))) | |
2180 | + | else { | |
2181 | + | let kS = (valueOrElse(getInteger(cT, b(c)), 0) + cq) | |
2182 | + | if ((kS > ax)) | |
2183 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kS))) | |
2184 | + | else { | |
2185 | + | let kA = dk(c) | |
2186 | + | let kB = valueOrElse(getInteger(kA), 0) | |
2187 | + | let kT = if ((iU > kB)) | |
2188 | + | then 0 | |
2189 | + | else (kB - iU) | |
2190 | + | let kQ = invoke(cT, "onStakeUnstakeLand", [c], nil) | |
2191 | + | $Tuple2([ScriptTransfer(gw.caller, 1, fromBase58String(P)), DeleteEntry(bq(P)), DeleteEntry(bt(aC, P, c)), StringEntry(dg(), eN), StringEntry(kN, kO), StringEntry(jF._2, makeString(jF._3, ":")), if ((size(kq) > 1)) | |
2192 | + | then StringEntry(kt, makeString_11C(removeByIndex(kq, value(cP)), "_")) | |
2193 | + | else DeleteEntry(kt), IntegerEntry(kA, kT), kK], kQ) | |
2194 | + | } | |
2195 | + | } | |
2196 | + | } | |
2197 | + | } | |
2198 | + | } | |
2199 | + | ||
2200 | + | ||
2201 | + | ||
2202 | + | @Callable(gw) | |
2203 | + | func stakeDuck () = { | |
2204 | + | let kK = kH(gw) | |
2205 | + | if ((size(gw.payments) != 1)) | |
2206 | + | then throw("Exactly one payment required") | |
2207 | + | else { | |
2208 | + | let kL = value(gw.payments[0]) | |
2209 | + | let bo = value(kL.assetId) | |
2210 | + | let cB = toString(gw.caller) | |
2211 | + | if ((kL.amount != 1)) | |
2212 | + | then throw((("NFT " + aD) + " token should be attached as payment")) | |
2213 | + | else { | |
2214 | + | let je = value(assetInfo(bo)) | |
2215 | + | if (if ((je.issuer != dI)) | |
2216 | + | then (je.issuer != dJ) | |
2217 | + | else false) | |
2218 | + | then throw((("Unknown issuer of " + aD) + " token")) | |
2219 | + | else if (!(contains(je.name, aD))) | |
2220 | + | then throw((("Only NFT " + aD) + " tokens are accepted")) | |
2221 | + | else { | |
2222 | + | let kU = toBase58String(bo) | |
2223 | + | let jf = bq(kU) | |
2224 | + | if (isDefined(getInteger(jf))) | |
2225 | + | then throw((("NFT " + je.name) + " is already staked")) | |
2226 | + | else if (isDefined(getString(bG(cB)))) | |
2227 | + | then throw(("You already staked one duck: " + je.name)) | |
2228 | + | else { | |
2229 | + | let kV = bI(kU) | |
2230 | + | let cc = getString(kV) | |
2231 | + | let hx = bH(kU) | |
2232 | + | let kW = getString(hx) | |
2233 | + | let iN = z(kU) | |
2234 | + | let iO = ag(valueOrElse(getInteger(D(kU)), 0)) | |
2235 | + | let kX = valueOrElse(getInteger(iN), iO) | |
2236 | + | ([IntegerEntry(jf, lastBlock.timestamp), IntegerEntry(bt(aD, toBase58String(bo), cB), lastBlock.timestamp), StringEntry(bF(kU), cB), StringEntry(bG(cB), kU)] ++ (if (isDefined(cc)) | |
2237 | + | then nil | |
2238 | + | else ([StringEntry(kV, aJ)] ++ (if (isDefined(kW)) | |
2239 | + | then nil | |
2240 | + | else (([StringEntry(hx, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iN, kX)) :+ kK))))) | |
2241 | + | } | |
2242 | + | } | |
2243 | + | } | |
2244 | + | } | |
2245 | + | } | |
2246 | + | ||
2247 | + | ||
2248 | + | ||
2249 | + | @Callable(gw) | |
2250 | + | func unstakeDuck (kU) = { | |
2251 | + | let kK = kH(gw) | |
2252 | + | if ((size(gw.payments) != 0)) | |
2253 | + | then throw("No payments required") | |
2254 | + | else { | |
2255 | + | let bo = fromBase58String(kU) | |
2256 | + | let cB = toString(gw.caller) | |
2257 | + | let je = value(assetInfo(bo)) | |
2258 | + | let jf = bq(kU) | |
2259 | + | if (!(isDefined(getInteger(jf)))) | |
2260 | + | then throw((("NFT " + je.name) + " is not staked")) | |
2261 | + | else if (!(isDefined(getString(bG(cB))))) | |
2262 | + | then throw((("The duck " + je.name) + " is not staked")) | |
1903 | 2263 | else { | |
1904 | - | let jb = split(iX.description, "_") | |
1905 | - | let dg = jb[cX] | |
1906 | - | if (if ((eu._3 != "")) | |
1907 | - | then (eu._3 != dg) | |
1908 | - | else false) | |
1909 | - | then throw("Lands should be on the same continent to merge") | |
2264 | + | let jh = valueOrErrorMessage(getString(bF(kU)), (("NFT " + je.name) + " is orphaned")) | |
2265 | + | if ((jh != cB)) | |
2266 | + | then throw("Staked NFT is not yours") | |
2267 | + | else if (kb(kU)) | |
2268 | + | then throw("unstakeDuck_checkTournament") | |
2269 | + | else if (kc(kU)) | |
2270 | + | then throw("unstakeDuck_checkDelivery") | |
2271 | + | else { | |
2272 | + | let iN = z(kU) | |
2273 | + | let iO = ag(valueOrElse(getInteger(D(kU)), 0)) | |
2274 | + | let as = valueOrElse(getInteger(iN), iO) | |
2275 | + | if ((iO > as)) | |
2276 | + | then throw((("Please heal your duck to " + toString(iO)) + "hp before unstaking")) | |
2277 | + | else [ScriptTransfer(gw.caller, 1, bo), DeleteEntry(jf), DeleteEntry(iN), DeleteEntry(bI(kU)), DeleteEntry(bF(kU)), DeleteEntry(bt(aD, kU, cB)), DeleteEntry(bG(cB)), kK] | |
2278 | + | } | |
2279 | + | } | |
2280 | + | } | |
2281 | + | } | |
2282 | + | ||
2283 | + | ||
2284 | + | ||
2285 | + | @Callable(gw) | |
2286 | + | func claimRes (eu,kY) = { | |
2287 | + | let kK = kH(gw) | |
2288 | + | if ((size(gw.payments) != 0)) | |
2289 | + | then throw("No payments required") | |
2290 | + | else { | |
2291 | + | let c = toString(gw.originCaller) | |
2292 | + | let eV = jj(c, eu, em, kY) | |
2293 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
2294 | + | $Tuple2(((((eV._1 ++ jL(A, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._3[bh]) | |
2295 | + | } | |
2296 | + | } | |
2297 | + | ||
2298 | + | ||
2299 | + | ||
2300 | + | @Callable(gw) | |
2301 | + | func claimResToWH (eu,kY) = { | |
2302 | + | let kK = kH(gw) | |
2303 | + | if ((size(gw.payments) != 0)) | |
2304 | + | then throw("No payments required") | |
2305 | + | else { | |
2306 | + | let c = toString(gw.originCaller) | |
2307 | + | let eV = jj(c, eu, el, kY) | |
2308 | + | $Tuple2(((((eV._1 ++ jR(c, fraction(U, eu, ct))._1) :+ StringEntry(eV._2, makeString(eV._3, ":"))) :+ StringEntry(eV._4, makeString(eV._5, ":"))) :+ kK), eV._5[aY]) | |
2309 | + | } | |
2310 | + | } | |
2311 | + | ||
2312 | + | ||
2313 | + | ||
2314 | + | @Callable(gw) | |
2315 | + | func flight (iC,iD) = { | |
2316 | + | let kK = kH(gw) | |
2317 | + | if ((size(gw.payments) != 0)) | |
2318 | + | then throw("No payments required") | |
2319 | + | else { | |
2320 | + | let bK = toString(gw.caller) | |
2321 | + | let hb = iB(bK, iC, iD) | |
2322 | + | let iH = hb._1 | |
2323 | + | let A = hb._2 | |
2324 | + | let kV = bI(A) | |
2325 | + | let jc = valueOrElse(getString(kV), aJ) | |
2326 | + | let iJ = hb._4 | |
2327 | + | if ((iJ == jc)) | |
2328 | + | then throw("You can't fly to the same location") | |
2329 | + | else { | |
2330 | + | let kZ = split(iJ, "_") | |
2331 | + | let la = (kZ[bl] == "T") | |
2332 | + | let gj = F(A) | |
2333 | + | let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2334 | + | let lc = eW(lb, hb._5) | |
2335 | + | let ld = lc._1 | |
2336 | + | let le = lc._2 | |
2337 | + | let lf = if (!(cb(cU, jc))) | |
2338 | + | then if (la) | |
2339 | + | then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ)) | |
2340 | + | else if ((iH > 0)) | |
2341 | + | then iJ | |
2342 | + | else jc | |
2343 | + | else if (!(cb(cU, iJ))) | |
2344 | + | then throw("Your duck is taking part in the tournament") | |
1910 | 2345 | else { | |
1911 | - | let dq = jb[cV] | |
1912 | - | let kb = eu._1 | |
1913 | - | let gn = valueOrErrorMessage(indexOf(kb, dq), "You haven't passed all the lands needed") | |
1914 | - | let kc = (take(kb, gn) + drop(kb, (gn + 1))) | |
1915 | - | let iN = dp(dq) | |
1916 | - | let kd = (eu._2 + valueOrElse(getInteger(bq(aC, O)), 0)) | |
1917 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
1918 | - | let ke = { | |
1919 | - | let cl = dq | |
1920 | - | if (("S" == cl)) | |
1921 | - | then 3 | |
1922 | - | else if (("M" == cl)) | |
1923 | - | then 4 | |
1924 | - | else if (("L" == cl)) | |
1925 | - | then 5 | |
1926 | - | else if (("XL" == cl)) | |
1927 | - | then 6 | |
1928 | - | else throw("Only S, M, L, XL can merge") | |
2346 | + | let lg = parseIntValue(kZ[bm]) | |
2347 | + | let lh = split(jc, "_") | |
2348 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
2349 | + | if ((lg != (parseIntValue(lh[bm]) + 1))) | |
2350 | + | then throw(((("Cheat attempt: oldLoc=" + jc) + ", newLoc=") + iJ)) | |
2351 | + | else if ((iH > 0)) | |
2352 | + | then { | |
2353 | + | let li = valueOrElse(getInteger(cU, bS(cd, A)), 0) | |
2354 | + | let lj = if ((lg > li)) | |
2355 | + | then invoke(cU, "saveDuckResult", [A, lg], nil) | |
2356 | + | else unit | |
2357 | + | if ((lj == lj)) | |
2358 | + | then iJ | |
2359 | + | else throw("Strict value is not equal to itself.") | |
2360 | + | } | |
2361 | + | else jc | |
2362 | + | } | |
2363 | + | $Tuple2(([StringEntry(kV, lf), StringEntry(gj, ld), IntegerEntry(z(A), iH), kK] ++ (if (le) | |
2364 | + | then [StringEntry(L(A), "0_0_0_0_0")] | |
2365 | + | else (nil ++ jL(A, if ((iH > 0)) | |
2366 | + | then V | |
2367 | + | else W)._1))), hb._3) | |
2368 | + | } | |
2369 | + | } | |
2370 | + | } | |
2371 | + | ||
2372 | + | ||
2373 | + | ||
2374 | + | @Callable(gw) | |
2375 | + | func heal (lk,ll,lm) = { | |
2376 | + | let kK = kH(gw) | |
2377 | + | if (if (if ((0 > lk)) | |
2378 | + | then true | |
2379 | + | else (0 > ll)) | |
2380 | + | then true | |
2381 | + | else (0 > lm)) | |
2382 | + | then throw("Quantity cannot be negative") | |
2383 | + | else { | |
2384 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2385 | + | if (kb(A)) | |
2386 | + | then throw("heal_checkTournament") | |
2387 | + | else if (kc(A)) | |
2388 | + | then throw("heal_checkDelivery") | |
2389 | + | else { | |
2390 | + | let ln = [lk, ll, lm] | |
2391 | + | let iN = z(A) | |
2392 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
2393 | + | let lo = valueOrElse(getInteger(iN), iO) | |
2394 | + | if ((lo >= iO)) | |
2395 | + | then throw((("HP should be < " + toString(iO)) + " to heal")) | |
2396 | + | else { | |
2397 | + | let hx = bH(A) | |
2398 | + | let ia = hw(hx) | |
2399 | + | let lp = if ((ia[bj] == "")) | |
2400 | + | then nil | |
2401 | + | else split_4C(ia[bj], "_") | |
2402 | + | func lq (eD,ch) = { | |
2403 | + | let dp = eD._2 | |
2404 | + | let gS = if ((size(lp) > dp)) | |
2405 | + | then parseIntValue(lp[dp]) | |
2406 | + | else 0 | |
2407 | + | if ((3 > dp)) | |
2408 | + | then { | |
2409 | + | let lr = ln[dp] | |
2410 | + | if ((lr > gS)) | |
2411 | + | then throw(((("You have only " + toString(gS)) + " of ") + aN[dp])) | |
2412 | + | else $Tuple3((eD._1 :+ toString((gS - lr))), (dp + 1), (eD._3 + (parseIntValue(split(ch, "_")[aT]) * lr))) | |
2413 | + | } | |
2414 | + | else $Tuple3((eD._1 :+ toString(gS)), (dp + 1), eD._3) | |
1929 | 2415 | } | |
1930 | - | if ((hF != ke)) | |
1931 | - | then throw("All lands should be maxed to merge") | |
2416 | + | ||
2417 | + | let eV = { | |
2418 | + | let eF = aR | |
2419 | + | let eG = size(eF) | |
2420 | + | let eH = $Tuple3(nil, 0, 0) | |
2421 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2422 | + | then eJ | |
2423 | + | else lq(eJ, eF[eK]) | |
2424 | + | ||
2425 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2426 | + | then eJ | |
2427 | + | else throw("List size exceeds 50") | |
2428 | + | ||
2429 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
2430 | + | } | |
2431 | + | let ls = min([iO, (lo + eV._3)]) | |
2432 | + | $Tuple2(([IntegerEntry(iN, ls), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], makeString(eV._1, "_")], ":")), kK] ++ jL(A, (ad * ((lk + ll) + lm)))._1), ls) | |
2433 | + | } | |
2434 | + | } | |
2435 | + | } | |
2436 | + | } | |
2437 | + | ||
2438 | + | ||
2439 | + | ||
2440 | + | @Callable(gw) | |
2441 | + | func healES () = { | |
2442 | + | let kK = kH(gw) | |
2443 | + | if ((size(gw.payments) != 1)) | |
2444 | + | then throw("Exactly one payment required") | |
2445 | + | else { | |
2446 | + | let kL = value(gw.payments[0]) | |
2447 | + | if ((kL.assetId != cm)) | |
2448 | + | then throw("Allowed USDT payment only!") | |
2449 | + | else { | |
2450 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2451 | + | if (kb(A)) | |
2452 | + | then throw("healES_checkTournament") | |
2453 | + | else if (kc(A)) | |
2454 | + | then throw("healES_checkDelivery") | |
2455 | + | else { | |
2456 | + | let iN = z(A) | |
2457 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
2458 | + | let lo = valueOrElse(getInteger(iN), iO) | |
2459 | + | if ((lo > 0)) | |
2460 | + | then throw("HP should be 0 to call Emergency Service") | |
1932 | 2461 | else { | |
1933 | - | let dW = jb[cU] | |
1934 | - | let gj = gp(jb[cW]) | |
1935 | - | let gt = (lastBlock.timestamp - iZ) | |
1936 | - | if ((0 > gt)) | |
1937 | - | then throw(((("Saved timestamp is in future, saved = " + toString(iZ)) + ", current = ") + toString(lastBlock.timestamp))) | |
2462 | + | let hx = bH(A) | |
2463 | + | let ia = hw(hx) | |
2464 | + | let lp = if ((ia[bj] == "")) | |
2465 | + | then nil | |
2466 | + | else split_4C(ia[bj], "_") | |
2467 | + | let lt = if ((size(lp) > 0)) | |
2468 | + | then parseIntValue(lp[0]) | |
2469 | + | else 0 | |
2470 | + | let lu = if ((size(lp) > 1)) | |
2471 | + | then parseIntValue(lp[1]) | |
2472 | + | else 0 | |
2473 | + | let lv = if ((size(lp) > 2)) | |
2474 | + | then parseIntValue(lp[2]) | |
2475 | + | else 0 | |
2476 | + | if (if (if ((lt > 0)) | |
2477 | + | then true | |
2478 | + | else (lu > 0)) | |
2479 | + | then true | |
2480 | + | else (lv > 0)) | |
2481 | + | then throw("You have to use own Medical Kit") | |
1938 | 2482 | else { | |
1939 | - | let jd = iM(O, iN) | |
1940 | - | let hE = (iN / cs) | |
1941 | - | let jl = gr(split(eu._4, "_"), gj, gt, hE, jd) | |
1942 | - | let eE = gh(eu._6, gj, hE, -1) | |
1943 | - | let kf = gh(eu._10, gj, hE, -1) | |
1944 | - | let gX = gh(eu._9, gj, hE, 1) | |
1945 | - | let kg = eu._7 | |
1946 | - | let cN = indexOf(kg, O) | |
1947 | - | if (!(isDefined(cN))) | |
1948 | - | then throw(("Your staked lands don't contain " + O)) | |
2483 | + | let lw = getString(cR, bL()) | |
2484 | + | let lx = if (isDefined(lw)) | |
2485 | + | then split_4C(value(lw), "_") | |
2486 | + | else nil | |
2487 | + | let ly = if ((size(lx) > 0)) | |
2488 | + | then parseIntValue(lx[0]) | |
2489 | + | else 0 | |
2490 | + | if ((0 >= ly)) | |
2491 | + | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
1949 | 2492 | else { | |
1950 | - | let kh = bo(O) | |
1951 | - | let ki = valueOrElse(getString(kh), "") | |
1952 | - | $Tuple10(kc, kd, dg, jl, ((((((((((((eu._5 :+ DeleteEntry(bp(O))) :+ DeleteEntry(bs(aA, O, b))) :+ DeleteEntry(dV(dW))) :+ DeleteEntry(bm(O))) :+ DeleteEntry(bw(O))) :+ DeleteEntry(dX(O, b))) :+ DeleteEntry(bq(aC, O))) :+ DeleteEntry(dY(dW))) :+ DeleteEntry(bv(O))) :+ DeleteEntry(kh)) :+ Burn(fromBase58String(O), 1)) ++ (if ((ki != "")) | |
1953 | - | then [DeleteEntry(dT(ki))] | |
1954 | - | else nil)), eE, removeByIndex(kg, value(cN)), (eu._8 + iN), gX, kf) | |
2493 | + | let ls = (lo + parseIntValue(split(aR[0], "_")[aT])) | |
2494 | + | let lz = makeString([toString((ly - 1)), removeByIndex(lx, 0)], "_") | |
2495 | + | let ch = split(aR[0], "_") | |
2496 | + | let lA = cg(ch) | |
2497 | + | let lB = fraction((lA * aL), aK, (ct * aW)) | |
2498 | + | if ((kL.amount != lB)) | |
2499 | + | then throw(("Payment attached should be " + toString(lB))) | |
2500 | + | else { | |
2501 | + | let eV = dl(invoke(cR, "updateEsStorage", [lz], [AttachedPayment(cm, lB)])) | |
2502 | + | $Tuple2(([IntegerEntry(iN, ls), kK] ++ jL(A, X)._1), eV) | |
2503 | + | } | |
2504 | + | } | |
2505 | + | } | |
2506 | + | } | |
2507 | + | } | |
2508 | + | } | |
2509 | + | } | |
2510 | + | } | |
2511 | + | ||
2512 | + | ||
2513 | + | ||
2514 | + | @Callable(gw) | |
2515 | + | func updateBackpack (A,lC) = if ((gw.caller != cR)) | |
2516 | + | then throw("permission denied") | |
2517 | + | else $Tuple2([StringEntry(bH(A), lC)], lC) | |
2518 | + | ||
2519 | + | ||
2520 | + | ||
2521 | + | @Callable(gw) | |
2522 | + | func commitForRandom () = { | |
2523 | + | let kK = kH(gw) | |
2524 | + | let lD = (height + de) | |
2525 | + | let c = toString(gw.caller) | |
2526 | + | $Tuple2(([IntegerEntry(df(c), lD)] :+ kK), lD) | |
2527 | + | } | |
2528 | + | ||
2529 | + | ||
2530 | + | ||
2531 | + | @Callable(gw) | |
2532 | + | func awardSLand (cB) = if ((gw.caller != cU)) | |
2533 | + | then throw("Access denied") | |
2534 | + | else if ((size(gw.payments) != 0)) | |
2535 | + | then throw("No payments required") | |
2536 | + | else { | |
2537 | + | let eV = iu(addressFromStringValue(cB), gw.transactionId) | |
2538 | + | $Tuple2(eV._1, eV._2._1) | |
2539 | + | } | |
2540 | + | ||
2541 | + | ||
2542 | + | ||
2543 | + | @Callable(gw) | |
2544 | + | func buySLand () = { | |
2545 | + | let kK = kH(gw) | |
2546 | + | if ((size(gw.payments) != 1)) | |
2547 | + | then throw("Exactly one payment required") | |
2548 | + | else { | |
2549 | + | let kL = value(gw.payments[0]) | |
2550 | + | if ((kL.assetId != cm)) | |
2551 | + | then throw("Allowed USDT payment only!") | |
2552 | + | else if ((kL.amount != dS)) | |
2553 | + | then throw(("Payment attached should be " + toString(dS))) | |
2554 | + | else { | |
2555 | + | let eV = iu(gw.caller, gw.transactionId) | |
2556 | + | let lE = do(invoke(cV, "burnAcres", [dT], nil)) | |
2557 | + | $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE)) | |
2558 | + | } | |
2559 | + | } | |
2560 | + | } | |
2561 | + | ||
2562 | + | ||
2563 | + | ||
2564 | + | @Callable(gw) | |
2565 | + | func expedition (iC,iD) = { | |
2566 | + | let kK = kH(gw) | |
2567 | + | if ((size(gw.payments) != 0)) | |
2568 | + | then throw("No payments required") | |
2569 | + | else { | |
2570 | + | let bK = toString(gw.caller) | |
2571 | + | let hb = iB(bK, iC, iD) | |
2572 | + | let A = hb._2 | |
2573 | + | let iN = z(A) | |
2574 | + | let hx = bH(A) | |
2575 | + | let ia = hw(hx) | |
2576 | + | let jC = split(ia[bi], "_") | |
2577 | + | let jE = makeString(eP(true, jC, dR), "_") | |
2578 | + | let gj = F(A) | |
2579 | + | let lb = valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2580 | + | let lF = eW(lb, hb._5) | |
2581 | + | let ld = lF._1 | |
2582 | + | let le = lF._2 | |
2583 | + | let lG = iu(gw.caller, gw.transactionId) | |
2584 | + | let iA = lG._2._1 | |
2585 | + | let eV = if ((0 >= hb._1)) | |
2586 | + | then $Tuple3([IntegerEntry(iN, 0), StringEntry(gj, ld)], "", 0) | |
2587 | + | else $Tuple3((lG._1 ++ (if (le) | |
2588 | + | then [StringEntry(L(A), "0_0_0_0_0")] | |
2589 | + | else ((((nil :+ StringEntry(bI(A), makeString([lG._2._2, "L", iA], "_"))) :+ IntegerEntry(iN, hb._1)) :+ StringEntry(gj, ld)) :+ StringEntry(hx, makeString([ia[bg], ia[bh], jE, ia[bj]], ":"))))), iA, hb._3) | |
2590 | + | if (kb(A)) | |
2591 | + | then throw("expedition_checkTournament") | |
2592 | + | else if (kc(A)) | |
2593 | + | then throw("expedition_checkDelivery") | |
2594 | + | else { | |
2595 | + | let lE = do(invoke(cV, "burnAcres", [dT], nil)) | |
2596 | + | $Tuple2(((eV._1 ++ jL(A, Z)._1) :+ kK), $Tuple3(eV._2, eV._3, lE)) | |
2597 | + | } | |
2598 | + | } | |
2599 | + | } | |
2600 | + | ||
2601 | + | ||
2602 | + | ||
2603 | + | @Callable(gw) | |
2604 | + | func buySLandForAcres () = { | |
2605 | + | let kK = kH(gw) | |
2606 | + | if ((size(gw.payments) != 1)) | |
2607 | + | then throw("exactly 1 payment must be attached") | |
2608 | + | else { | |
2609 | + | let kL = gw.payments[0] | |
2610 | + | let fc = kL.amount | |
2611 | + | if (if (!(isDefined(kL.assetId))) | |
2612 | + | then true | |
2613 | + | else (value(kL.assetId) != dd)) | |
2614 | + | then throw("ACRES payments only!") | |
2615 | + | else if ((fc != dT)) | |
2616 | + | then throw(("Payment attached should be " + toString(dT))) | |
2617 | + | else { | |
2618 | + | let eV = iu(gw.caller, gw.transactionId) | |
2619 | + | let lE = do(invoke(cV, "burnAcres", [dT], [AttachedPayment(dd, fc)])) | |
2620 | + | $Tuple2((((eV._1 :+ ScriptTransfer(cR, kL.amount, cm)) ++ jR(toString(gw.caller), Z)._1) :+ kK), $Tuple2(eV._2._1, lE)) | |
2621 | + | } | |
2622 | + | } | |
2623 | + | } | |
2624 | + | ||
2625 | + | ||
2626 | + | ||
2627 | + | @Callable(gw) | |
2628 | + | func upgradeInfra (P) = { | |
2629 | + | let kK = kH(gw) | |
2630 | + | if ((size(gw.payments) != 0)) | |
2631 | + | then throw("No payments required") | |
2632 | + | else { | |
2633 | + | let eV = jw(true, gw.caller, 0, P) | |
2634 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
2635 | + | $Tuple2(((eV._1 :+ kK) ++ jL(A, fraction(aa, eV._3, ct))._1), eV._2) | |
2636 | + | } | |
2637 | + | } | |
2638 | + | ||
2639 | + | ||
2640 | + | ||
2641 | + | @Callable(gw) | |
2642 | + | func activateArtifact (lH,lI) = { | |
2643 | + | let kK = kH(gw) | |
2644 | + | if ((size(gw.payments) != 0)) | |
2645 | + | then throw("No payments required") | |
2646 | + | else { | |
2647 | + | let c = toString(gw.caller) | |
2648 | + | let eV = { | |
2649 | + | let cn = lH | |
2650 | + | if (("PRESALE" == cn)) | |
2651 | + | then jZ(c, lI) | |
2652 | + | else if (("ONBOARD" == cn)) | |
2653 | + | then jS(c) | |
2654 | + | else throw("Unknown artifact") | |
2655 | + | } | |
2656 | + | (eV :+ kK) | |
2657 | + | } | |
2658 | + | } | |
2659 | + | ||
2660 | + | ||
2661 | + | ||
2662 | + | @Callable(gw) | |
2663 | + | func mergeLands (ki) = { | |
2664 | + | let kK = kH(gw) | |
2665 | + | if ((size(gw.payments) != 0)) | |
2666 | + | then throw("No payments required") | |
2667 | + | else { | |
2668 | + | let eV = kG(toString(gw.caller), ki) | |
2669 | + | $Tuple2(((eV._1 :+ kK) ++ jR(toString(gw.caller), ab)._1), eV._2) | |
2670 | + | } | |
2671 | + | } | |
2672 | + | ||
2673 | + | ||
2674 | + | ||
2675 | + | @Callable(gw) | |
2676 | + | func cargoExchange (lJ,P) = { | |
2677 | + | let kK = kH(gw) | |
2678 | + | if ((size(gw.payments) != 0)) | |
2679 | + | then throw("No payments required") | |
2680 | + | else { | |
2681 | + | let hZ = split_4C(lJ, ":") | |
2682 | + | let c = toString(gw.originCaller) | |
2683 | + | let je = value(assetInfo(fromBase58String(P))) | |
2684 | + | let jf = bq(P) | |
2685 | + | if (!(isDefined(getInteger(jf)))) | |
2686 | + | then throw((je.name + " is not staked")) | |
2687 | + | else { | |
2688 | + | let jh = valueOrErrorMessage(getString(bn(P)), (("NFT " + je.name) + " is orphaned")) | |
2689 | + | if ((jh != c)) | |
2690 | + | then throw((aC + " is not yours")) | |
2691 | + | else { | |
2692 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
2693 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2694 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
2695 | + | let jc = valueOrElse(getString(bI(A)), aJ) | |
2696 | + | let ce = split(value(jc), "_") | |
2697 | + | if ((ce[bl] != "L")) | |
2698 | + | then throw((("Duck location type is " + ce[bl]) + ", but should be L")) | |
2699 | + | else if ((ce[bm] != P)) | |
2700 | + | then throw(("Duck should be on the land " + P)) | |
2701 | + | else { | |
2702 | + | let hK = bw(P) | |
2703 | + | let hB = hJ(hK, hL, hM) | |
2704 | + | let hx = bH(A) | |
2705 | + | let ia = hw(hx) | |
2706 | + | let eV = hY(hZ, hB, ia) | |
2707 | + | let hS = split(hB[bb], "_") | |
2708 | + | let jt = (parseIntValue(hS[bd]) + eV._7) | |
2709 | + | let ju = (parseIntValue(hS[be]) - eV._7) | |
2710 | + | [StringEntry(hx, makeString_2C([ia[bg], eV._4, eV._5, eV._6], ":")), StringEntry(hK, makeString_2C([hB[aX], eV._1, eV._2, eV._3, makeString([hS[bc], toString(jt), toString(ju), hS[bf]], "_")], ":")), kK] | |
2711 | + | } | |
2712 | + | } | |
2713 | + | } | |
2714 | + | } | |
2715 | + | } | |
2716 | + | ||
2717 | + | ||
2718 | + | ||
2719 | + | @Callable(gw) | |
2720 | + | func saveWarehouse (hO,P) = if ((gw.caller != cR)) | |
2721 | + | then throw("Access denied") | |
2722 | + | else { | |
2723 | + | let hK = bw(P) | |
2724 | + | let hP = split_4C(hO, ":") | |
2725 | + | if ((size(hP) != 5)) | |
2726 | + | then throw("warehouse string should contain 4 ':' separators") | |
2727 | + | else { | |
2728 | + | let lK = split(hP[bb], "_")[bc] | |
2729 | + | let jt = hA(hP) | |
2730 | + | let lL = hy(hP[aX]) | |
2731 | + | let ju = ((lL - parseIntValue(lK)) - jt) | |
2732 | + | let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([lK, toString(jt), toString(ju), toString(lL)], "_")], ":") | |
2733 | + | $Tuple2([StringEntry(hK, lM)], lM) | |
2734 | + | } | |
2735 | + | } | |
2736 | + | ||
2737 | + | ||
2738 | + | ||
2739 | + | @Callable(gw) | |
2740 | + | func fixWarehouseFormat (P) = if ((gw.caller != cQ)) | |
2741 | + | then throw("Access denied") | |
2742 | + | else { | |
2743 | + | let hK = bw(P) | |
2744 | + | let je = value(assetInfo(fromBase58String(P))) | |
2745 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
2746 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
2747 | + | let hP = hJ(hK, hL, hM) | |
2748 | + | let lK = do(invoke(cR, "recalcLockedVolumeREADONLY", [P, hP], nil)) | |
2749 | + | let jt = hA(hP) | |
2750 | + | let lL = hy(hP[aX]) | |
2751 | + | let ju = ((lL - lK) - jt) | |
2752 | + | let lM = makeString_2C([hP[aX], hP[aY], hP[aZ], hP[ba], makeString([toString(lK), toString(jt), toString(ju), toString(lL)], "_")], ":") | |
2753 | + | $Tuple2([StringEntry(hK, lM)], lM) | |
2754 | + | } | |
2755 | + | ||
2756 | + | ||
2757 | + | ||
2758 | + | @Callable(gw) | |
2759 | + | func fixContinentProportions (ki) = if ((gw.caller != cQ)) | |
2760 | + | then throw("Access denied") | |
2761 | + | else { | |
2762 | + | func lN (eD,lO) = (eD :+ valueOrElse(getString(dh(lO)), "0_0_0_0_0_0")) | |
2763 | + | ||
2764 | + | let gg = { | |
2765 | + | let eF = aO | |
2766 | + | let eG = size(eF) | |
2767 | + | let eH = nil | |
2768 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2769 | + | then eJ | |
2770 | + | else lN(eJ, eF[eK]) | |
2771 | + | ||
2772 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2773 | + | then eJ | |
2774 | + | else throw("List size exceeds 5") | |
2775 | + | ||
2776 | + | eL(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5) | |
2777 | + | } | |
2778 | + | func lP (eD,P) = { | |
2779 | + | let je = value(assetInfo(fromBase58String(P))) | |
2780 | + | let ji = split(je.description, "_") | |
2781 | + | let hL = (dr(ji[cX]) / cu) | |
2782 | + | let lO = ji[cZ] | |
2783 | + | let gs = gy(ji[cY]) | |
2784 | + | let ha = value(indexOf(aO, lO)) | |
2785 | + | let kx = split(eD[ha], "_") | |
2786 | + | let lQ = makeString(gq(kx, gs, hL, 1), "_") | |
2787 | + | let cn = lO | |
2788 | + | if (("Americas" == cn)) | |
2789 | + | then [lQ, eD[1], eD[2], eD[3], eD[4]] | |
2790 | + | else if (("Europe" == cn)) | |
2791 | + | then [eD[0], lQ, eD[2], eD[3], eD[4]] | |
2792 | + | else if (("Asia" == cn)) | |
2793 | + | then [eD[0], eD[1], lQ, eD[3], eD[4]] | |
2794 | + | else if (("Africa" == cn)) | |
2795 | + | then [eD[0], eD[1], eD[2], lQ, eD[4]] | |
2796 | + | else if (("Oceania" == cn)) | |
2797 | + | then [eD[0], eD[1], eD[2], eD[3], lQ] | |
2798 | + | else throw("wrong continent") | |
2799 | + | } | |
2800 | + | ||
2801 | + | let eO = { | |
2802 | + | let eF = ki | |
2803 | + | let eG = size(eF) | |
2804 | + | let eH = gg | |
2805 | + | func hr (eJ,eK) = if ((eK >= eG)) | |
2806 | + | then eJ | |
2807 | + | else lP(eJ, eF[eK]) | |
2808 | + | ||
2809 | + | func hs (eJ,eK) = if ((eK >= eG)) | |
2810 | + | then eJ | |
2811 | + | else throw("List size exceeds 100") | |
2812 | + | ||
2813 | + | hs(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(hr(eH, 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) | |
2814 | + | } | |
2815 | + | $Tuple2([StringEntry(dh("Americas"), eO[0]), StringEntry(dh("Europe"), eO[1]), StringEntry(dh("Asia"), eO[2]), StringEntry(dh("Africa"), eO[3]), StringEntry(dh("Oceania"), eO[4])], 0) | |
2816 | + | } | |
2817 | + | ||
2818 | + | ||
2819 | + | ||
2820 | + | @Callable(gw) | |
2821 | + | func fixStakedPieces (cB) = if ((gw.caller != cQ)) | |
2822 | + | then throw("Access denied") | |
2823 | + | else { | |
2824 | + | let kB = if ((cB == "")) | |
2825 | + | then 0 | |
2826 | + | else { | |
2827 | + | let ku = getString(an, dj(cB)) | |
2828 | + | let kq = if (isDefined(ku)) | |
2829 | + | then split_51C(value(ku), "_") | |
2830 | + | else nil | |
2831 | + | func lR (eD,P) = { | |
2832 | + | let je = value(assetInfo(fromBase58String(P))) | |
2833 | + | let ds = split(je.description, "_")[cX] | |
2834 | + | (eD + dr(ds)) | |
2835 | + | } | |
2836 | + | ||
2837 | + | let eF = kq | |
2838 | + | let eG = size(eF) | |
2839 | + | let eH = 0 | |
2840 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
2841 | + | then eJ | |
2842 | + | else lR(eJ, eF[eK]) | |
2843 | + | ||
2844 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
2845 | + | then eJ | |
2846 | + | else throw("List size exceeds 100") | |
2847 | + | ||
2848 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 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) | |
2849 | + | } | |
2850 | + | $Tuple2([IntegerEntry(dk(cB), kB)], kB) | |
2851 | + | } | |
2852 | + | ||
2853 | + | ||
2854 | + | ||
2855 | + | @Callable(gw) | |
2856 | + | func setCustomName (bo,ks,bs) = { | |
2857 | + | let kK = kH(gw) | |
2858 | + | if ((size(gw.payments) != 1)) | |
2859 | + | then throw("Exactly one payment required") | |
2860 | + | else { | |
2861 | + | let kL = value(gw.payments[0]) | |
2862 | + | if ((kL.assetId != cm)) | |
2863 | + | then throw("Allowed USDT payment only!") | |
2864 | + | else if ((kL.amount != dO)) | |
2865 | + | then throw(("Payment should be " + toString(dO))) | |
2866 | + | else if (contains(ks, "__")) | |
2867 | + | then throw(("Name should not contain '__': " + ks)) | |
2868 | + | else if ((size(ks) > dP)) | |
2869 | + | then throw(("Name too long, maxLength=" + toString(dP))) | |
2870 | + | else { | |
2871 | + | let c = toString(gw.originCaller) | |
2872 | + | let lS = { | |
2873 | + | let cn = bs | |
2874 | + | if (("ACCOUNT" == cn)) | |
2875 | + | then { | |
2876 | + | let lT = ej(ks) | |
2877 | + | let lU = getString(lT) | |
2878 | + | if (isDefined(lU)) | |
2879 | + | then throw(("Name already registered: " + ks)) | |
2880 | + | else { | |
2881 | + | let lV = bA(c) | |
2882 | + | let lW = getString(lV) | |
2883 | + | let lX = if (isDefined(lW)) | |
2884 | + | then [DeleteEntry(ej(value(lW)))] | |
2885 | + | else nil | |
2886 | + | (((lX :+ StringEntry(lV, ks)) :+ StringEntry(lT, c)) ++ jR(c, Y)._1) | |
2887 | + | } | |
2888 | + | } | |
2889 | + | else if (("LAND" == cn)) | |
2890 | + | then { | |
2891 | + | let je = value(assetInfo(fromBase58String(bo))) | |
2892 | + | let jf = bq(bo) | |
2893 | + | if (!(isDefined(getInteger(jf)))) | |
2894 | + | then throw((je.name + " is not staked")) | |
2895 | + | else { | |
2896 | + | let jh = valueOrErrorMessage(getString(bn(bo)), (("NFT " + je.name) + " is orphaned")) | |
2897 | + | if ((jh != c)) | |
2898 | + | then throw((aC + " is not yours")) | |
2899 | + | else { | |
2900 | + | let lT = ec(ks) | |
2901 | + | let lU = getString(lT) | |
2902 | + | if (isDefined(lU)) | |
2903 | + | then throw(("Name already registered: " + ks)) | |
2904 | + | else { | |
2905 | + | let lY = bp(bo) | |
2906 | + | let lW = getString(lY) | |
2907 | + | let lX = if (isDefined(lW)) | |
2908 | + | then [DeleteEntry(ec(value(lW)))] | |
2909 | + | else nil | |
2910 | + | (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jR(c, Y)._1) | |
2911 | + | } | |
2912 | + | } | |
2913 | + | } | |
2914 | + | } | |
2915 | + | else if (("DUCK" == cn)) | |
2916 | + | then { | |
2917 | + | let je = value(assetInfo(fromBase58String(bo))) | |
2918 | + | let jf = bq(bo) | |
2919 | + | if (if (!(isDefined(getInteger(jf)))) | |
2920 | + | then true | |
2921 | + | else !(isDefined(getString(bG(c))))) | |
2922 | + | then throw((je.name + " is not staked")) | |
2923 | + | else { | |
2924 | + | let jh = valueOrErrorMessage(getString(bF(bo)), (("NFT " + je.name) + " is orphaned")) | |
2925 | + | if ((jh != c)) | |
2926 | + | then throw((aD + " is not yours")) | |
2927 | + | else { | |
2928 | + | let lT = ei(ks) | |
2929 | + | let lU = getString(lT) | |
2930 | + | if (isDefined(lU)) | |
2931 | + | then throw(("Name already registered: " + ks)) | |
2932 | + | else { | |
2933 | + | let lY = bz(bo) | |
2934 | + | let lW = getString(lY) | |
2935 | + | let lX = if (isDefined(lW)) | |
2936 | + | then [DeleteEntry(ei(value(lW)))] | |
2937 | + | else nil | |
2938 | + | (((lX :+ StringEntry(lY, ks)) :+ StringEntry(lT, bo)) ++ jL(bo, Y)._1) | |
2939 | + | } | |
2940 | + | } | |
2941 | + | } | |
2942 | + | } | |
2943 | + | else throw("Unknown entity type") | |
2944 | + | } | |
2945 | + | $Tuple2(((lS :+ ScriptTransfer(cR, kL.amount, cm)) :+ kK), 0) | |
2946 | + | } | |
2947 | + | } | |
2948 | + | } | |
2949 | + | ||
2950 | + | ||
2951 | + | ||
2952 | + | @Callable(gw) | |
2953 | + | func setReferrals (lZ,ma) = if ((gw.callerPublicKey != dK)) | |
2954 | + | then throw("Permission denied") | |
2955 | + | else { | |
2956 | + | let kK = kH(gw) | |
2957 | + | if ((size(gw.payments) != 0)) | |
2958 | + | then throw("No payments required") | |
2959 | + | else if (!(isDefined(addressFromString(lZ)))) | |
2960 | + | then throw(("Invalid address: " + lZ)) | |
2961 | + | else if (!(isDefined(addressFromString(ma)))) | |
2962 | + | then throw(("Invalid address: " + ma)) | |
2963 | + | else { | |
2964 | + | let mb = ek() | |
2965 | + | let mc = getString(mb) | |
2966 | + | let md = if (isDefined(mc)) | |
2967 | + | then split_4C(value(mc), "_") | |
2968 | + | else nil | |
2969 | + | if (containsElement(md, ma)) | |
2970 | + | then throw((ma + " is not newbie (already has referrals)")) | |
2971 | + | else { | |
2972 | + | let jT = bB(ma) | |
2973 | + | let jU = getString(jT) | |
2974 | + | if (if (isDefined(jU)) | |
2975 | + | then isDefined(addressFromString(value(jU))) | |
2976 | + | else false) | |
2977 | + | then throw(((ma + " already has refBy: ") + value(jU))) | |
2978 | + | else { | |
2979 | + | let me = bE(lZ) | |
2980 | + | let mf = getString(me) | |
2981 | + | let mg = if (isDefined(mf)) | |
2982 | + | then split_4C(value(mf), "_") | |
2983 | + | else nil | |
2984 | + | if (containsElement(mg, ma)) | |
2985 | + | then throw((((lZ + " already contains ") + ma) + " within referrals")) | |
2986 | + | else { | |
2987 | + | let mh = makeString_2C((mg :+ ma), "_") | |
2988 | + | let mi = if (containsElement(md, lZ)) | |
2989 | + | then value(mc) | |
2990 | + | else makeString_2C((md :+ lZ), "_") | |
2991 | + | $Tuple2([StringEntry(jT, lZ), StringEntry(me, mh), StringEntry(mb, mi), kK], 0) | |
2992 | + | } | |
2993 | + | } | |
2994 | + | } | |
2995 | + | } | |
2996 | + | } | |
2997 | + | ||
2998 | + | ||
2999 | + | ||
3000 | + | @Callable(gw) | |
3001 | + | func distributePoints (mj,mk,ml,mm,mn) = { | |
3002 | + | let kK = kH(gw) | |
3003 | + | if ((size(gw.payments) != 0)) | |
3004 | + | then throw("No payments required") | |
3005 | + | else { | |
3006 | + | let c = toString(gw.originCaller) | |
3007 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
3008 | + | let mo = I(c) | |
3009 | + | let mp = valueOrElse(getInteger(an, mo), 0) | |
3010 | + | let mq = E(A) | |
3011 | + | let mr = valueOrElse(getInteger(an, mq), 0) | |
3012 | + | let ms = (mp + mr) | |
3013 | + | let mt = ((((mj + mk) + ml) + mm) + mn) | |
3014 | + | if ((mt > ms)) | |
3015 | + | then throw((("There are only " + toString(ms)) + " free points to distribute")) | |
3016 | + | else { | |
3017 | + | let mu = B(A) | |
3018 | + | let aq = split(valueOrElse(getString(an, mu), "0_0_0_0_0"), "_") | |
3019 | + | let mv = (mp - mt) | |
3020 | + | $Tuple2([IntegerEntry(mo, if ((0 > mv)) | |
3021 | + | then 0 | |
3022 | + | else mv), IntegerEntry(mq, if ((0 > mv)) | |
3023 | + | then (mr + mv) | |
3024 | + | else mr), StringEntry(mu, makeString([toString((parseIntValue(aq[k]) + mj)), toString((parseIntValue(aq[l]) + mk)), toString((parseIntValue(aq[m]) + ml)), toString((parseIntValue(aq[n]) + mm)), toString((parseIntValue(aq[o]) + mn))], "_")), kK], 0) | |
3025 | + | } | |
3026 | + | } | |
3027 | + | } | |
3028 | + | ||
3029 | + | ||
3030 | + | ||
3031 | + | @Callable(gw) | |
3032 | + | func splitByGlobalWeightsREADONLY (eu) = $Tuple2(nil, eM(eu)) | |
3033 | + | ||
3034 | + | ||
3035 | + | ||
3036 | + | @Callable(gw) | |
3037 | + | func splitByGlobalAndLocalWeightsREADONLY (mw,mx,gz) = { | |
3038 | + | let gs = gy(gz) | |
3039 | + | $Tuple2(nil, $Tuple2(eM(mw), ex(mx, gs))) | |
3040 | + | } | |
3041 | + | ||
3042 | + | ||
3043 | + | ||
3044 | + | @Callable(gw) | |
3045 | + | func getBackpackREADONLY (A) = $Tuple2(nil, makeString(hw(bH(A)), ":")) | |
3046 | + | ||
3047 | + | ||
3048 | + | ||
3049 | + | @Callable(gw) | |
3050 | + | func getWarehouseREADONLY (P) = { | |
3051 | + | let je = value(assetInfo(fromBase58String(P))) | |
3052 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
3053 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
3054 | + | $Tuple2(nil, makeString_2C(hJ(bw(P), hL, hM), ":")) | |
3055 | + | } | |
3056 | + | ||
3057 | + | ||
3058 | + | ||
3059 | + | @Callable(gw) | |
3060 | + | func saveLastTx () = { | |
3061 | + | let iv = gw.caller | |
3062 | + | if (!(containsElement([cT, cR, cU, cV], iv))) | |
3063 | + | then throw("Access denied") | |
3064 | + | else $Tuple2([kH(gw)], 42) | |
3065 | + | } | |
3066 | + | ||
3067 | + | ||
3068 | + | ||
3069 | + | @Callable(gw) | |
3070 | + | func updateDuckStats (A,jM) = if ((gw.caller != cR)) | |
3071 | + | then throw("Access denied") | |
3072 | + | else jL(A, jM) | |
3073 | + | ||
3074 | + | ||
3075 | + | ||
3076 | + | @Callable(gw) | |
3077 | + | func updateAccStats (c,jM) = if ((gw.caller != cR)) | |
3078 | + | then throw("Access denied") | |
3079 | + | else jR(c, jM) | |
3080 | + | ||
3081 | + | ||
3082 | + | ||
3083 | + | @Callable(gw) | |
3084 | + | func equipDuck (my) = { | |
3085 | + | let kK = kH(gw) | |
3086 | + | if ((size(gw.payments) != 0)) | |
3087 | + | then throw("No payments required") | |
3088 | + | else { | |
3089 | + | let c = toString(gw.originCaller) | |
3090 | + | let A = valueOrErrorMessage(getString(bG(c)), "You don't have a duck staked") | |
3091 | + | if (kb(A)) | |
3092 | + | then throw("equipDuck_checkTournament") | |
3093 | + | else if (kc(A)) | |
3094 | + | then throw("equipDuck_checkDelivery") | |
3095 | + | else { | |
3096 | + | let gj = F(A) | |
3097 | + | let mz = split(valueOrElse(getString(gj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3098 | + | let hx = bH(A) | |
3099 | + | let ia = hw(hx) | |
3100 | + | let ld = split(my, "_") | |
3101 | + | if ((size(ld) != q)) | |
3102 | + | then throw("Wrong equipment string") | |
3103 | + | else { | |
3104 | + | let gl = fY(mz, fj(ia[bj]), true, nil) | |
3105 | + | let gm = split(ld[p], ";")[1] | |
3106 | + | let ao = if ((gm == "")) | |
3107 | + | then 0 | |
3108 | + | else { | |
3109 | + | let gn = split(gm, ",")[0] | |
3110 | + | if ((gn == "")) | |
3111 | + | then 0 | |
3112 | + | else { | |
3113 | + | let fy = split(gn, ":") | |
3114 | + | let cP = fy[0] | |
3115 | + | let go = fy[1] | |
3116 | + | if (if (if (if (if ((cP == "06")) | |
3117 | + | then true | |
3118 | + | else (cP == "07")) | |
3119 | + | then true | |
3120 | + | else (cP == "08")) | |
3121 | + | then (go != "") | |
3122 | + | else false) | |
3123 | + | then (parseIntValue(go) > 0) | |
3124 | + | else false) | |
3125 | + | then parseIntValue(split(aR[parseIntValue(cP)], "_")[aT]) | |
3126 | + | else 0 | |
3127 | + | } | |
3128 | + | } | |
3129 | + | let fT = am(this, A, ao, true) | |
3130 | + | let gp = fY(ld, gl, false, fT) | |
3131 | + | let mA = fo(gp) | |
3132 | + | $Tuple2([StringEntry(gj, my), StringEntry(hx, makeString_2C([ia[bg], ia[bh], ia[bi], mA], ":")), StringEntry(L(A), makeString([toString(fT[7]), toString(fT[8]), toString(fT[9]), toString(fT[10]), toString(fT[11])], "_")), kK], 0) | |
3133 | + | } | |
3134 | + | } | |
3135 | + | } | |
3136 | + | } | |
3137 | + | ||
3138 | + | ||
3139 | + | ||
3140 | + | @Callable(gw) | |
3141 | + | func fortificateLand (P,mB) = { | |
3142 | + | let kK = kH(gw) | |
3143 | + | if ((size(gw.payments) != 0)) | |
3144 | + | then throw("No payments required") | |
3145 | + | else { | |
3146 | + | let c = toString(gw.originCaller) | |
3147 | + | let A = valueOrElse(getString(bG(c)), "") | |
3148 | + | let ft = am(this, A, 0, false) | |
3149 | + | let mC = by(P) | |
3150 | + | let mD = split(valueOrElse(getString(mC), ":0_15:0_18:0"), "_") | |
3151 | + | let je = value(assetInfo(fromBase58String(P))) | |
3152 | + | let hL = (dr(split(je.description, "_")[cX]) / cu) | |
3153 | + | let hM = valueOrElse(getInteger(bx(P)), 0) | |
3154 | + | let hK = bw(P) | |
3155 | + | let hP = hJ(hK, hL, hM) | |
3156 | + | let mE = split(hP[bb], "_") | |
3157 | + | let mF = parseIntValue(mE[bd]) | |
3158 | + | let mG = parseIntValue(mE[be]) | |
3159 | + | let mH = split(mB, "_") | |
3160 | + | let mI = gf(mD, fj(hP[ba]), mF, mG, true, nil) | |
3161 | + | let gl = mI._1 | |
3162 | + | let mJ = mI._2 | |
3163 | + | let mK = mI._3 | |
3164 | + | let mL = gf(mH, gl, mJ, mK, false, ft) | |
3165 | + | let gp = mL._1 | |
3166 | + | let mM = mL._2 | |
3167 | + | let mN = mL._3 | |
3168 | + | let mA = fo(gp) | |
3169 | + | let jK = makeString([mE[bc], toString(mM), toString(mN), mE[bf]], "_") | |
3170 | + | $Tuple2([StringEntry(mC, mB), StringEntry(hK, makeString_2C([hP[aX], hP[aY], hP[aZ], mA, jK], ":")), kK], 0) | |
3171 | + | } | |
3172 | + | } | |
3173 | + | ||
3174 | + | ||
3175 | + | ||
3176 | + | @Callable(gw) | |
3177 | + | func initDuckTourAttempt (A) = if ((gw.caller != cU)) | |
3178 | + | then throw("Access denied") | |
3179 | + | else { | |
3180 | + | let kK = kH(gw) | |
3181 | + | let iN = z(A) | |
3182 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
3183 | + | let kX = valueOrElse(getInteger(iN), iO) | |
3184 | + | let mO = bI(A) | |
3185 | + | let jc = valueOrElse(getString(mO), aJ) | |
3186 | + | let cd = valueOrElse(getInteger(cU, bO), 0) | |
3187 | + | let mP = (toString(cd) + "_T_0") | |
3188 | + | $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, mP)], mP) | |
3189 | + | } | |
3190 | + | ||
3191 | + | ||
3192 | + | ||
3193 | + | @Callable(gw) | |
3194 | + | func breakAttempt () = { | |
3195 | + | let kK = kH(gw) | |
3196 | + | let A = valueOrErrorMessage(getString(bG(toString(gw.caller))), "You don't have a duck staked") | |
3197 | + | let mO = bI(A) | |
3198 | + | let jc = valueOrElse(getString(mO), aJ) | |
3199 | + | if ((split(jc, "_")[bl] != "T")) | |
3200 | + | then throw("Your duck is not in the tournament") | |
3201 | + | else { | |
3202 | + | let mQ = getIntegerValue(J(A)) | |
3203 | + | let mR = getStringValue(K(A)) | |
3204 | + | $Tuple2([kK, IntegerEntry(z(A), mQ), StringEntry(mO, mR)], jc) | |
3205 | + | } | |
3206 | + | } | |
3207 | + | ||
3208 | + | ||
3209 | + | ||
3210 | + | @Callable(gw) | |
3211 | + | func exitTournamentInternal (A) = if ((gw.caller != this)) | |
3212 | + | then throw("Access denied") | |
3213 | + | else { | |
3214 | + | let mQ = getIntegerValue(J(A)) | |
3215 | + | let mR = getStringValue(K(A)) | |
3216 | + | $Tuple2([IntegerEntry(z(A), mQ), StringEntry(bI(A), mR)], false) | |
3217 | + | } | |
3218 | + | ||
3219 | + | ||
3220 | + | ||
3221 | + | @Callable(gw) | |
3222 | + | func exitDeliveryInternal (A) = if ((gw.caller != this)) | |
3223 | + | then throw("Access denied") | |
3224 | + | else { | |
3225 | + | let jc = split(valueOrElse(getString(bI(A)), aJ), "_") | |
3226 | + | let ax = lastBlock.timestamp | |
3227 | + | let kd = parseIntValue(jc[bk]) | |
3228 | + | let ke = parseIntValue(jc[bm]) | |
3229 | + | let jh = valueOrErrorMessage(getString(bF(A)), "NFT duck is orphaned") | |
3230 | + | let mS = z(A) | |
3231 | + | let kX = getIntegerValue(mS) | |
3232 | + | let mT = if ((ke >= 3)) | |
3233 | + | then { | |
3234 | + | let mU = invoke(cR, "sendDeliveryReward", [jh], nil) | |
3235 | + | if ((mU == mU)) | |
3236 | + | then nil | |
3237 | + | else throw("Strict value is not equal to itself.") | |
3238 | + | } | |
3239 | + | else { | |
3240 | + | let mV = valueOrElse(getInteger(cR, bN), 0) | |
3241 | + | let mW = invoke(cR, "updateDeliveryLocked", [(mV - aM)], nil) | |
3242 | + | if ((mW == mW)) | |
3243 | + | then if ((0 >= kX)) | |
3244 | + | then nil | |
3245 | + | else [IntegerEntry(T(A), (kd + a))] | |
3246 | + | else throw("Strict value is not equal to itself.") | |
3247 | + | } | |
3248 | + | let mQ = getIntegerValue(J(A)) | |
3249 | + | let mR = getStringValue(K(A)) | |
3250 | + | $Tuple2(((mT :+ IntegerEntry(mS, mQ)) :+ StringEntry(bI(A), mR)), false) | |
3251 | + | } | |
3252 | + | ||
3253 | + | ||
3254 | + | ||
3255 | + | @Callable(gw) | |
3256 | + | func prepareRobbery (iC,iD) = { | |
3257 | + | let kK = kH(gw) | |
3258 | + | if (!(sigVerify_8Kb(iC, iD, dK))) | |
3259 | + | then throw("signature does not match") | |
3260 | + | else if ((size(gw.payments) != 1)) | |
3261 | + | then throw("exactly 1 payment must be attached") | |
3262 | + | else { | |
3263 | + | let kL = gw.payments[0] | |
3264 | + | let mX = kL.amount | |
3265 | + | if (if (!(isDefined(kL.assetId))) | |
3266 | + | then true | |
3267 | + | else (value(kL.assetId) != db)) | |
3268 | + | then throw("WLGOLD payments only!") | |
3269 | + | else { | |
3270 | + | let fb = split(toUtf8String(iC), "|") | |
3271 | + | if ((size(fb) != 2)) | |
3272 | + | then throw("Wrong message format") | |
3273 | + | else { | |
3274 | + | let A = fb[0] | |
3275 | + | let ay = au(this, A)._1 | |
3276 | + | if ((ay > mX)) | |
3277 | + | then throw(((("Payment " + toString(mX)) + " < required ") + toString(ay))) | |
3278 | + | else { | |
3279 | + | let mY = split(fb[1], "_") | |
3280 | + | let ax = lastBlock.timestamp | |
3281 | + | let az = valueOrElse(getInteger(R(A)), 0) | |
3282 | + | let aA = valueOrElse(getString(S(A)), "") | |
3283 | + | let aB = valueOrElse(getInteger(Q(aA)), 0) | |
3284 | + | if (if ((az != x)) | |
3285 | + | then (aB > ax) | |
3286 | + | else false) | |
3287 | + | then throw(("You already started robbing, wait till " + toString(aB))) | |
3288 | + | else { | |
3289 | + | func mZ (eD,P) = { | |
3290 | + | let na = valueOrElse(getInteger(O(P)), 0) | |
3291 | + | let nb = valueOrElse(getInteger(Q(P)), 0) | |
3292 | + | if ((na > size(u))) | |
3293 | + | then throw("Invalid state") | |
3294 | + | else if ((ax > nb)) | |
3295 | + | then { | |
3296 | + | let nc = valueOrElse(getInteger(bq(P)), 0) | |
3297 | + | if ((0 >= nc)) | |
3298 | + | then eD | |
3299 | + | else { | |
3300 | + | let gd = value(assetInfo(fromBase58String(P))) | |
3301 | + | let ji = split(gd.description, "_") | |
3302 | + | let iU = dr(ji[cX]) | |
3303 | + | let nd = iT(P, iU) | |
3304 | + | let gC = (ax - nc) | |
3305 | + | let jl = fraction(gC, (nd * iU), a) | |
3306 | + | if ((v > jl)) | |
3307 | + | then eD | |
3308 | + | else (eD :+ P) | |
3309 | + | } | |
3310 | + | } | |
3311 | + | else eD | |
3312 | + | } | |
3313 | + | ||
3314 | + | let ne = { | |
3315 | + | let eF = mY | |
3316 | + | let eG = size(eF) | |
3317 | + | let eH = nil | |
3318 | + | func eI (eJ,eK) = if ((eK >= eG)) | |
3319 | + | then eJ | |
3320 | + | else mZ(eJ, eF[eK]) | |
3321 | + | ||
3322 | + | func eL (eJ,eK) = if ((eK >= eG)) | |
3323 | + | then eJ | |
3324 | + | else throw("List size exceeds 10") | |
3325 | + | ||
3326 | + | eL(eI(eI(eI(eI(eI(eI(eI(eI(eI(eI(eH, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3327 | + | } | |
3328 | + | if ((size(ne) == 0)) | |
3329 | + | then throw("No candidates for robbery") | |
3330 | + | else { | |
3331 | + | let nf = dC(size(ne), height, (iD + gw.transactionId)) | |
3332 | + | let P = ne[nf] | |
3333 | + | $Tuple2([IntegerEntry(O(P), w), IntegerEntry(Q(P), (ax + u[w])), IntegerEntry(R(A), y), StringEntry(S(A), P), kK], P) | |
1955 | 3334 | } | |
1956 | 3335 | } | |
1957 | 3336 | } | |
1958 | 3337 | } | |
1959 | 3338 | } | |
1960 | 3339 | } | |
1961 | - | ||
1962 | - | let hq = bG(z) | |
1963 | - | let hT = hp(hq) | |
1964 | - | let gi = split(valueOrElse(getString(de()), "0_0_0_0_0_0"), "_") | |
1965 | - | let kj = dh(b) | |
1966 | - | let kk = getString(kj) | |
1967 | - | let kl = if (isDefined(kk)) | |
1968 | - | then split_51C(value(kk), "_") | |
1969 | - | else nil | |
1970 | - | let km = split(value(assetInfo(fromBase58String(jY[0]))).description, "_")[cX] | |
1971 | - | let kn = split(valueOrElse(getString(df(km)), "0_0_0_0_0_0"), "_") | |
1972 | - | let eF = { | |
1973 | - | let ew = jY | |
1974 | - | let ex = size(ew) | |
1975 | - | let ey = $Tuple10(jX, 0, "", hT[bg], nil, gi, kl, 0, split("0_0_0_0_0_0", "_"), kn) | |
1976 | - | func ez (eA,eB) = if ((eB >= ex)) | |
1977 | - | then eA | |
1978 | - | else ka(eA, ew[eB]) | |
1979 | - | ||
1980 | - | func eC (eA,eB) = if ((eB >= ex)) | |
1981 | - | then eA | |
1982 | - | else throw("List size exceeds 5") | |
1983 | - | ||
1984 | - | eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5) | |
1985 | - | } | |
1986 | - | let dg = eF._3 | |
1987 | - | let gR = valueOrErrorMessage(indexOf(aN, dg), ("Unknown continent: " + dg)) | |
1988 | - | let gq = gW(eF._9, (dp(jW) / cs)) | |
1989 | - | let ir = valueOrElse(getInteger(dS()), (dR + 1)) | |
1990 | - | let ko = toString(ir) | |
1991 | - | let is = Issue(ej(ko, jW), makeString([ko, jW, gq, dg], "_"), 1, 0, false) | |
1992 | - | let bn = calculateAssetId(is) | |
1993 | - | let kp = toBase58String(bn) | |
1994 | - | let jx = makeString(eG((jZ > 0), split(hT[bh], "_"), jZ), "_") | |
1995 | - | let kq = di(b) | |
1996 | - | let kr = valueOrElse(getInteger(kq), 0) | |
1997 | - | $Tuple2((((((((((((((((eF._5 :+ (if ((size(eF._7) > 0)) | |
1998 | - | then StringEntry(kj, makeString_11C(eF._7, "_")) | |
1999 | - | else DeleteEntry(kj))) :+ IntegerEntry(kq, if ((eF._8 > kr)) | |
2000 | - | then 0 | |
2001 | - | else (kr - eF._8))) :+ IntegerEntry(dS(), (ir + 1))) :+ is) :+ StringEntry(dV(ko), kp)) :+ StringEntry(bm(kp), b)) :+ StringEntry(dY(ko), b)) :+ IntegerEntry(bq(aC, kp), eF._2)) :+ IntegerEntry(bw(kp), aj)) :+ IntegerEntry(dX(kp, b), aj)) :+ StringEntry(hq, makeString([hT[bf], eF._4, jx, hT[bi]], ":"))) :+ StringEntry(de(), makeString(eF._6, "_"))) :+ StringEntry(df(dg), makeString(eF._10, "_"))) :+ StringEntry(bH(z), makeString([dg, "L", kp], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, bn)), kp) | |
2002 | - | } | |
2003 | - | } | |
2004 | - | ||
2005 | - | ||
2006 | - | func ks (b,jY) = jV("M", 3, "SSSS", b, jY, 0) | |
2007 | - | ||
2008 | - | ||
2009 | - | func kt (b,jY) = jV("L", 4, "SMM", b, jY, (cn * 4)) | |
2010 | - | ||
2011 | - | ||
2012 | - | func ku (b,jY) = jV("XL", 5, "SSSML", b, jY, (cn * 47)) | |
2013 | - | ||
2014 | - | ||
2015 | - | func kv (b,jY) = jV("XXL", 6, "LXL", b, jY, (cn * 54)) | |
2016 | - | ||
2017 | - | ||
2018 | - | func kw (b,jY) = { | |
2019 | - | let cl = size(jY) | |
2020 | - | if ((4 == cl)) | |
2021 | - | then ks(b, jY) | |
2022 | - | else if ((3 == cl)) | |
2023 | - | then kt(b, jY) | |
2024 | - | else if ((5 == cl)) | |
2025 | - | then ku(b, jY) | |
2026 | - | else if ((2 == cl)) | |
2027 | - | then kv(b, jY) | |
2028 | - | else throw("Unknown merge") | |
2029 | - | } | |
2030 | - | ||
2031 | - | ||
2032 | - | func kx (gn) = if (if ((gn.originCaller != cO)) | |
2033 | - | then valueOrElse(getBoolean(ds()), false) | |
2034 | - | else false) | |
2035 | - | then throw("Contracts are under maintenance") | |
2036 | - | else StringEntry(dt(toString(gn.originCaller)), toBase58String(gn.transactionId)) | |
2037 | - | ||
2038 | - | ||
2039 | - | @Callable(gn) | |
2040 | - | func constructorV1 (ky) = if ((gn.caller != this)) | |
2041 | - | then throw("Permission denied") | |
2042 | - | else [StringEntry(cI(), ky)] | |
2043 | - | ||
2044 | - | ||
2045 | - | ||
2046 | - | @Callable(gn) | |
2047 | - | func setBlocked (kz) = if ((gn.caller != this)) | |
2048 | - | then throw("permission denied") | |
2049 | - | else [BooleanEntry(ds(), kz)] | |
2050 | - | ||
2051 | - | ||
2052 | - | ||
2053 | - | @Callable(gn) | |
2054 | - | func stakeLand () = { | |
2055 | - | let kA = kx(gn) | |
2056 | - | if ((size(gn.payments) != 1)) | |
2057 | - | then throw("Exactly one payment required") | |
2058 | - | else { | |
2059 | - | let kB = value(gn.payments[0]) | |
2060 | - | let bn = value(kB.assetId) | |
2061 | - | let cz = toString(gn.caller) | |
2062 | - | if ((kB.amount != 1)) | |
2063 | - | then throw((("NFT " + aA) + " token should be attached as payment")) | |
2064 | - | else { | |
2065 | - | let iX = value(assetInfo(bn)) | |
2066 | - | if ((iX.issuer != this)) | |
2067 | - | then throw("Unknown issuer of token") | |
2068 | - | else if (!(contains(iX.name, aA))) | |
2069 | - | then throw((("Only NFT " + aA) + " tokens are accepted")) | |
2070 | - | else { | |
2071 | - | let kC = drop(iX.name, 4) | |
2072 | - | let dW = if (contains(kC, "XXL")) | |
2073 | - | then dropRight(kC, 3) | |
2074 | - | else if (contains(kC, "XL")) | |
2075 | - | then dropRight(kC, 2) | |
2076 | - | else dropRight(kC, 1) | |
2077 | - | if (!(isDefined(parseInt(dW)))) | |
2078 | - | then throw(("Cannot parse land number from " + iX.name)) | |
2079 | - | else { | |
2080 | - | let O = toBase58String(bn) | |
2081 | - | let iY = bp(O) | |
2082 | - | if (isDefined(getInteger(iY))) | |
2083 | - | then throw((("NFT " + iX.name) + " is already staked")) | |
2084 | - | else { | |
2085 | - | let jb = split(iX.description, "_") | |
2086 | - | let gj = gp(jb[cW]) | |
2087 | - | let iN = dp(jb[cV]) | |
2088 | - | let hE = (iN / cs) | |
2089 | - | let eE = go(gj, hE, 1) | |
2090 | - | let kD = df(jb[cX]) | |
2091 | - | let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_") | |
2092 | - | let kE = makeString(gh(kn, gj, hE, 1), "_") | |
2093 | - | let kj = dh(cz) | |
2094 | - | let kk = getString(kj) | |
2095 | - | let kg = if (isDefined(kk)) | |
2096 | - | then split_51C(value(kk), "_") | |
2097 | - | else nil | |
2098 | - | if (containsElement(kg, O)) | |
2099 | - | then throw(("Your staked lands already contain " + O)) | |
2100 | - | else if ((size(kg) >= aE)) | |
2101 | - | then throw((("Your already staked max (" + toString(aE)) + ") lands")) | |
2102 | - | else { | |
2103 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2104 | - | let kq = di(cz) | |
2105 | - | let kF = valueOrElse(getInteger(kq), 0) | |
2106 | - | let kG = invoke(cR, "onStakeUnstakeLand", [cz], nil) | |
2107 | - | $Tuple2([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aA, O, cz), lastBlock.timestamp), StringEntry(kj, makeString_11C((kg :+ O), "_")), IntegerEntry(kq, (kF + iN)), StringEntry(bm(O), cz), StringEntry(dY(dW), cz), IntegerEntry(dX(O, cz), hF), StringEntry(de(), eE), StringEntry(kD, kE), kA], kG) | |
2108 | - | } | |
2109 | - | } | |
2110 | - | } | |
2111 | - | } | |
2112 | - | } | |
2113 | - | } | |
2114 | - | } | |
2115 | - | ||
2116 | - | ||
2117 | - | ||
2118 | - | @Callable(gn) | |
2119 | - | func unstakeLand (iT) = { | |
2120 | - | let kA = kx(gn) | |
2121 | - | if ((size(gn.payments) != 0)) | |
2122 | - | then throw("No payments required") | |
2123 | - | else { | |
2124 | - | let b = toString(gn.caller) | |
2125 | - | let fD = iR(b, ed, iT) | |
2126 | - | let O = fD._2 | |
2127 | - | let jb = fD._3 | |
2128 | - | let kj = dh(b) | |
2129 | - | let gj = gp(jb[cW]) | |
2130 | - | let iN = dp(jb[cV]) | |
2131 | - | let hE = (iN / cs) | |
2132 | - | let eE = go(gj, hE, -1) | |
2133 | - | let kD = df(jb[cX]) | |
2134 | - | let kn = split(valueOrElse(getString(kD), "0_0_0_0_0_0"), "_") | |
2135 | - | let kE = makeString(gh(kn, gj, hE, -1), "_") | |
2136 | - | let jy = jo(b, O, iN, ed) | |
2137 | - | let kg = split_51C(valueOrElse(getString(kj), ""), "_") | |
2138 | - | let cN = indexOf(kg, O) | |
2139 | - | if (!(isDefined(cN))) | |
2140 | - | then throw(("Your staked lands don't contain " + O)) | |
2141 | - | else { | |
2142 | - | let av = lastBlock.timestamp | |
2143 | - | let kH = valueOrElse(getInteger(cQ, bI(b)), 0) | |
2144 | - | if ((kH >= av)) | |
2145 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(kH))) | |
2146 | - | else { | |
2147 | - | let kI = (valueOrElse(getInteger(cR, a(b)), 0) + co) | |
2148 | - | if ((kI > av)) | |
2149 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(kI))) | |
2150 | - | else { | |
2151 | - | let kq = di(b) | |
2152 | - | let kr = valueOrElse(getInteger(kq), 0) | |
2153 | - | let kJ = if ((iN > kr)) | |
2154 | - | then 0 | |
2155 | - | else (kr - iN) | |
2156 | - | let kG = invoke(cR, "onStakeUnstakeLand", [b], nil) | |
2157 | - | $Tuple2([ScriptTransfer(gn.caller, 1, fromBase58String(O)), DeleteEntry(bp(O)), DeleteEntry(bs(aA, O, b)), StringEntry(de(), eE), StringEntry(kD, kE), StringEntry(jy._2, makeString(jy._3, ":")), if ((size(kg) > 1)) | |
2158 | - | then StringEntry(kj, makeString_11C(removeByIndex(kg, value(cN)), "_")) | |
2159 | - | else DeleteEntry(kj), IntegerEntry(kq, kJ), kA], kG) | |
2160 | - | } | |
2161 | - | } | |
2162 | - | } | |
2163 | - | } | |
2164 | - | } | |
2165 | - | ||
2166 | - | ||
2167 | - | ||
2168 | - | @Callable(gn) | |
2169 | - | func stakeDuck () = { | |
2170 | - | let kA = kx(gn) | |
2171 | - | if ((size(gn.payments) != 1)) | |
2172 | - | then throw("Exactly one payment required") | |
2173 | - | else { | |
2174 | - | let kB = value(gn.payments[0]) | |
2175 | - | let bn = value(kB.assetId) | |
2176 | - | let cz = toString(gn.caller) | |
2177 | - | if ((kB.amount != 1)) | |
2178 | - | then throw((("NFT " + aB) + " token should be attached as payment")) | |
2179 | - | else { | |
2180 | - | let iX = value(assetInfo(bn)) | |
2181 | - | if (if ((iX.issuer != dA)) | |
2182 | - | then (iX.issuer != dB) | |
2183 | - | else false) | |
2184 | - | then throw((("Unknown issuer of " + aB) + " token")) | |
2185 | - | else if (!(contains(iX.name, aB))) | |
2186 | - | then throw((("Only NFT " + aB) + " tokens are accepted")) | |
2187 | - | else { | |
2188 | - | let kK = toBase58String(bn) | |
2189 | - | let iY = bp(kK) | |
2190 | - | if (isDefined(getInteger(iY))) | |
2191 | - | then throw((("NFT " + iX.name) + " is already staked")) | |
2192 | - | else if (isDefined(getString(bF(cz)))) | |
2193 | - | then throw(("You already staked one duck: " + iX.name)) | |
2194 | - | else if (jU(kK)) | |
2195 | - | then throw("stakeDuck_checkTournament") | |
2196 | - | else { | |
2197 | - | let kL = bH(kK) | |
2198 | - | let ca = getString(kL) | |
2199 | - | let hq = bG(kK) | |
2200 | - | let kM = getString(hq) | |
2201 | - | let iG = y(kK) | |
2202 | - | let iH = ae(valueOrElse(getInteger(C(kK)), 0)) | |
2203 | - | let kN = valueOrElse(getInteger(iG), iH) | |
2204 | - | ([IntegerEntry(iY, lastBlock.timestamp), IntegerEntry(bs(aB, toBase58String(bn), cz), lastBlock.timestamp), StringEntry(bE(kK), cz), StringEntry(bF(cz), kK)] ++ (if (isDefined(ca)) | |
2205 | - | then nil | |
2206 | - | else ([StringEntry(kL, aI)] ++ (if (isDefined(kM)) | |
2207 | - | then nil | |
2208 | - | else (([StringEntry(hq, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(iG, kN)) :+ kA))))) | |
2209 | - | } | |
2210 | - | } | |
2211 | - | } | |
2212 | - | } | |
2213 | - | } | |
2214 | - | ||
2215 | - | ||
2216 | - | ||
2217 | - | @Callable(gn) | |
2218 | - | func unstakeDuck (kK) = { | |
2219 | - | let kA = kx(gn) | |
2220 | - | if ((size(gn.payments) != 0)) | |
2221 | - | then throw("No payments required") | |
2222 | - | else { | |
2223 | - | let bn = fromBase58String(kK) | |
2224 | - | let cz = toString(gn.caller) | |
2225 | - | let iX = value(assetInfo(bn)) | |
2226 | - | let iY = bp(kK) | |
2227 | - | if (!(isDefined(getInteger(iY)))) | |
2228 | - | then throw((("NFT " + iX.name) + " is not staked")) | |
2229 | - | else if (!(isDefined(getString(bF(cz))))) | |
2230 | - | then throw((("The duck " + iX.name) + " is not staked")) | |
2231 | - | else { | |
2232 | - | let ja = valueOrErrorMessage(getString(bE(kK)), (("NFT " + iX.name) + " is orphaned")) | |
2233 | - | if ((ja != cz)) | |
2234 | - | then throw("Staked NFT is not yours") | |
2235 | - | else if (jU(kK)) | |
2236 | - | then throw("unstakeDuck_checkTournament") | |
2237 | - | else { | |
2238 | - | let iG = y(kK) | |
2239 | - | let iH = ae(valueOrElse(getInteger(C(kK)), 0)) | |
2240 | - | let aq = valueOrElse(getInteger(iG), iH) | |
2241 | - | if ((iH > aq)) | |
2242 | - | then throw((("Please heal your duck to " + toString(iH)) + "hp before unstaking")) | |
2243 | - | else [ScriptTransfer(gn.caller, 1, bn), DeleteEntry(iY), DeleteEntry(iG), DeleteEntry(bH(kK)), DeleteEntry(bE(kK)), DeleteEntry(bs(aB, kK, cz)), DeleteEntry(bF(cz)), kA] | |
2244 | - | } | |
2245 | - | } | |
2246 | - | } | |
2247 | - | } | |
2248 | - | ||
2249 | - | ||
2250 | - | ||
2251 | - | @Callable(gn) | |
2252 | - | func claimRes (el,kO) = { | |
2253 | - | let kA = kx(gn) | |
2254 | - | if ((size(gn.payments) != 0)) | |
2255 | - | then throw("No payments required") | |
2256 | - | else { | |
2257 | - | let b = toString(gn.originCaller) | |
2258 | - | let eM = jc(b, el, ed, kO) | |
2259 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2260 | - | $Tuple2(((((eM._1 ++ jE(z, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._3[bg]) | |
2261 | - | } | |
2262 | - | } | |
2263 | - | ||
2264 | - | ||
2265 | - | ||
2266 | - | @Callable(gn) | |
2267 | - | func claimResToWH (el,kO) = { | |
2268 | - | let kA = kx(gn) | |
2269 | - | if ((size(gn.payments) != 0)) | |
2270 | - | then throw("No payments required") | |
2271 | - | else { | |
2272 | - | let b = toString(gn.originCaller) | |
2273 | - | let eM = jc(b, el, ec, kO) | |
2274 | - | $Tuple2(((((eM._1 ++ jK(b, fraction(S, el, cr))._1) :+ StringEntry(eM._2, makeString(eM._3, ":"))) :+ StringEntry(eM._4, makeString(eM._5, ":"))) :+ kA), eM._5[aX]) | |
2275 | - | } | |
2276 | - | } | |
2277 | - | ||
2278 | - | ||
2279 | - | ||
2280 | - | @Callable(gn) | |
2281 | - | func flight (iv,iw) = { | |
2282 | - | let kA = kx(gn) | |
2283 | - | if ((size(gn.payments) != 0)) | |
2284 | - | then throw("No payments required") | |
2285 | - | else { | |
2286 | - | let bJ = toString(gn.caller) | |
2287 | - | let gS = iu(bJ, iv, iw) | |
2288 | - | let iA = gS._1 | |
2289 | - | let z = gS._2 | |
2290 | - | let kL = bH(z) | |
2291 | - | let iV = valueOrElse(getString(kL), aI) | |
2292 | - | let iC = gS._4 | |
2293 | - | if ((iC == iV)) | |
2294 | - | then throw("You can't fly to the same location") | |
2295 | - | else { | |
2296 | - | let kP = split(iC, "_") | |
2297 | - | let kQ = (kP[bk] == "T") | |
2298 | - | let ga = E(z) | |
2299 | - | let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2300 | - | let kS = eN(kR, gS._5) | |
2301 | - | let kT = kS._1 | |
2302 | - | let kU = kS._2 | |
2303 | - | let kV = if (!(bZ(cS, iV))) | |
2304 | - | then if (kQ) | |
2305 | - | then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC)) | |
2306 | - | else if ((iA > 0)) | |
2307 | - | then iC | |
2308 | - | else iV | |
2309 | - | else if (!(bZ(cS, iC))) | |
2310 | - | then throw("Your duck is taking part in the tournament") | |
2311 | - | else { | |
2312 | - | let kW = parseIntValue(kP[bl]) | |
2313 | - | let kX = split(iV, "_") | |
2314 | - | let cb = valueOrElse(getInteger(cS, bM), 0) | |
2315 | - | if ((kW != (parseIntValue(kX[bl]) + 1))) | |
2316 | - | then throw(((("Cheat attempt: oldLoc=" + iV) + ", newLoc=") + iC)) | |
2317 | - | else if ((iA > 0)) | |
2318 | - | then { | |
2319 | - | let kY = valueOrElse(getInteger(cS, bQ(cb, z)), 0) | |
2320 | - | let kZ = if ((kW > kY)) | |
2321 | - | then invoke(cS, "saveDuckResult", [z, kW], nil) | |
2322 | - | else unit | |
2323 | - | if ((kZ == kZ)) | |
2324 | - | then iC | |
2325 | - | else throw("Strict value is not equal to itself.") | |
2326 | - | } | |
2327 | - | else iV | |
2328 | - | } | |
2329 | - | $Tuple2(([StringEntry(kL, kV), StringEntry(ga, kT), IntegerEntry(y(z), iA), kA] ++ (if (kU) | |
2330 | - | then [StringEntry(K(z), "0_0_0_0_0")] | |
2331 | - | else (nil ++ jE(z, if ((iA > 0)) | |
2332 | - | then T | |
2333 | - | else U)._1))), gS._3) | |
2334 | - | } | |
2335 | - | } | |
2336 | - | } | |
2337 | - | ||
2338 | - | ||
2339 | - | ||
2340 | - | @Callable(gn) | |
2341 | - | func heal (la,lb,lc) = { | |
2342 | - | let kA = kx(gn) | |
2343 | - | if (if (if ((0 > la)) | |
2344 | - | then true | |
2345 | - | else (0 > lb)) | |
2346 | - | then true | |
2347 | - | else (0 > lc)) | |
2348 | - | then throw("Quantity cannot be negative") | |
2349 | - | else { | |
2350 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2351 | - | if (jU(z)) | |
2352 | - | then throw("heal_checkTournament") | |
2353 | - | else { | |
2354 | - | let ld = [la, lb, lc] | |
2355 | - | let iG = y(z) | |
2356 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
2357 | - | let le = valueOrElse(getInteger(iG), iH) | |
2358 | - | if ((le >= iH)) | |
2359 | - | then throw((("HP should be < " + toString(iH)) + " to heal")) | |
2360 | - | else { | |
2361 | - | let hq = bG(z) | |
2362 | - | let hT = hp(hq) | |
2363 | - | let lf = if ((hT[bi] == "")) | |
2364 | - | then nil | |
2365 | - | else split_4C(hT[bi], "_") | |
2366 | - | func lg (eu,cf) = { | |
2367 | - | let dn = eu._2 | |
2368 | - | let gJ = if ((size(lf) > dn)) | |
2369 | - | then parseIntValue(lf[dn]) | |
2370 | - | else 0 | |
2371 | - | if ((3 > dn)) | |
2372 | - | then { | |
2373 | - | let lh = ld[dn] | |
2374 | - | if ((lh > gJ)) | |
2375 | - | then throw(((("You have only " + toString(gJ)) + " of ") + aM[dn])) | |
2376 | - | else $Tuple3((eu._1 :+ toString((gJ - lh))), (dn + 1), (eu._3 + (parseIntValue(split(cf, "_")[aS]) * lh))) | |
2377 | - | } | |
2378 | - | else $Tuple3((eu._1 :+ toString(gJ)), (dn + 1), eu._3) | |
2379 | - | } | |
2380 | - | ||
2381 | - | let eM = { | |
2382 | - | let ew = aQ | |
2383 | - | let ex = size(ew) | |
2384 | - | let ey = $Tuple3(nil, 0, 0) | |
2385 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2386 | - | then eA | |
2387 | - | else lg(eA, ew[eB]) | |
2388 | - | ||
2389 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2390 | - | then eA | |
2391 | - | else throw("List size exceeds 50") | |
2392 | - | ||
2393 | - | eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50) | |
2394 | - | } | |
2395 | - | let li = min([iH, (le + eM._3)]) | |
2396 | - | $Tuple2(([IntegerEntry(iG, li), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], makeString(eM._1, "_")], ":")), kA] ++ jE(z, (ab * ((la + lb) + lc)))._1), li) | |
2397 | - | } | |
2398 | - | } | |
2399 | - | } | |
2400 | - | } | |
2401 | - | ||
2402 | - | ||
2403 | - | ||
2404 | - | @Callable(gn) | |
2405 | - | func healES () = { | |
2406 | - | let kA = kx(gn) | |
2407 | - | if ((size(gn.payments) != 1)) | |
2408 | - | then throw("Exactly one payment required") | |
2409 | - | else { | |
2410 | - | let kB = value(gn.payments[0]) | |
2411 | - | if ((kB.assetId != ck)) | |
2412 | - | then throw("Allowed USDT payment only!") | |
2413 | - | else { | |
2414 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2415 | - | if (jU(z)) | |
2416 | - | then throw("healES_checkTournament") | |
2417 | - | else { | |
2418 | - | let iG = y(z) | |
2419 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
2420 | - | let le = valueOrElse(getInteger(iG), iH) | |
2421 | - | if ((le > 0)) | |
2422 | - | then throw("HP should be 0 to call Emergency Service") | |
2423 | - | else { | |
2424 | - | let hq = bG(z) | |
2425 | - | let hT = hp(hq) | |
2426 | - | let lf = if ((hT[bi] == "")) | |
2427 | - | then nil | |
2428 | - | else split_4C(hT[bi], "_") | |
2429 | - | let lj = if ((size(lf) > 0)) | |
2430 | - | then parseIntValue(lf[0]) | |
2431 | - | else 0 | |
2432 | - | let lk = if ((size(lf) > 1)) | |
2433 | - | then parseIntValue(lf[1]) | |
2434 | - | else 0 | |
2435 | - | let ll = if ((size(lf) > 2)) | |
2436 | - | then parseIntValue(lf[2]) | |
2437 | - | else 0 | |
2438 | - | if (if (if ((lj > 0)) | |
2439 | - | then true | |
2440 | - | else (lk > 0)) | |
2441 | - | then true | |
2442 | - | else (ll > 0)) | |
2443 | - | then throw("You have to use own Medical Kit") | |
2444 | - | else { | |
2445 | - | let lm = getString(cP, bK()) | |
2446 | - | let ln = if (isDefined(lm)) | |
2447 | - | then split_4C(value(lm), "_") | |
2448 | - | else nil | |
2449 | - | let lo = if ((size(ln) > 0)) | |
2450 | - | then parseIntValue(ln[0]) | |
2451 | - | else 0 | |
2452 | - | if ((0 >= lo)) | |
2453 | - | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2454 | - | else { | |
2455 | - | let li = (le + parseIntValue(split(aQ[0], "_")[aS])) | |
2456 | - | let lp = makeString([toString((lo - 1)), removeByIndex(ln, 0)], "_") | |
2457 | - | let cf = split(aQ[0], "_") | |
2458 | - | let lq = ce(cf) | |
2459 | - | let lr = fraction((lq * aK), aJ, (cr * aV)) | |
2460 | - | if ((kB.amount != lr)) | |
2461 | - | then throw(("Payment attached should be " + toString(lr))) | |
2462 | - | else { | |
2463 | - | let eM = dj(invoke(cP, "updateEsStorage", [lp], [AttachedPayment(ck, lr)])) | |
2464 | - | $Tuple2(([IntegerEntry(iG, li), kA] ++ jE(z, V)._1), eM) | |
2465 | - | } | |
2466 | - | } | |
2467 | - | } | |
2468 | - | } | |
2469 | - | } | |
2470 | - | } | |
2471 | - | } | |
2472 | - | } | |
2473 | - | ||
2474 | - | ||
2475 | - | ||
2476 | - | @Callable(gn) | |
2477 | - | func updateBackpack (z,ls) = if ((gn.caller != cP)) | |
2478 | - | then throw("permission denied") | |
2479 | - | else $Tuple2([StringEntry(bG(z), ls)], ls) | |
2480 | - | ||
2481 | - | ||
2482 | - | ||
2483 | - | @Callable(gn) | |
2484 | - | func commitForRandom () = { | |
2485 | - | let kA = kx(gn) | |
2486 | - | let lt = (height + dc) | |
2487 | - | let b = toString(gn.caller) | |
2488 | - | $Tuple2(([IntegerEntry(dd(b), lt)] :+ kA), lt) | |
2489 | - | } | |
2490 | - | ||
2491 | - | ||
2492 | - | ||
2493 | - | @Callable(gn) | |
2494 | - | func awardSLand (cz) = if ((gn.caller != cS)) | |
2495 | - | then throw("Access denied") | |
2496 | - | else if ((size(gn.payments) != 0)) | |
2497 | - | then throw("No payments required") | |
2498 | - | else { | |
2499 | - | let eM = in(addressFromStringValue(cz), gn.transactionId) | |
2500 | - | $Tuple2(eM._1, eM._2._1) | |
2501 | - | } | |
2502 | - | ||
2503 | - | ||
2504 | - | ||
2505 | - | @Callable(gn) | |
2506 | - | func buySLand () = { | |
2507 | - | let kA = kx(gn) | |
2508 | - | if ((size(gn.payments) != 1)) | |
2509 | - | then throw("Exactly one payment required") | |
2510 | - | else { | |
2511 | - | let kB = value(gn.payments[0]) | |
2512 | - | if ((kB.assetId != ck)) | |
2513 | - | then throw("Allowed USDT payment only!") | |
2514 | - | else if ((kB.amount != dJ)) | |
2515 | - | then throw(("Payment attached should be " + toString(dJ))) | |
2516 | - | else { | |
2517 | - | let eM = in(gn.caller, gn.transactionId) | |
2518 | - | let lu = dm(invoke(cT, "burnAcres", [dK], nil)) | |
2519 | - | $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu)) | |
2520 | - | } | |
2521 | - | } | |
2522 | - | } | |
2523 | - | ||
2524 | - | ||
2525 | - | ||
2526 | - | @Callable(gn) | |
2527 | - | func expedition (iv,iw) = { | |
2528 | - | let kA = kx(gn) | |
2529 | - | if ((size(gn.payments) != 0)) | |
2530 | - | then throw("No payments required") | |
2531 | - | else { | |
2532 | - | let bJ = toString(gn.caller) | |
2533 | - | let gS = iu(bJ, iv, iw) | |
2534 | - | let z = gS._2 | |
2535 | - | let iG = y(z) | |
2536 | - | let hq = bG(z) | |
2537 | - | let hT = hp(hq) | |
2538 | - | let jv = split(hT[bh], "_") | |
2539 | - | let jx = makeString(eG(true, jv, dI), "_") | |
2540 | - | let ga = E(z) | |
2541 | - | let kR = valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2542 | - | let lv = eN(kR, gS._5) | |
2543 | - | let kT = lv._1 | |
2544 | - | let kU = lv._2 | |
2545 | - | let lw = in(gn.caller, gn.transactionId) | |
2546 | - | let it = lw._2._1 | |
2547 | - | let eM = if ((0 >= gS._1)) | |
2548 | - | then $Tuple3([IntegerEntry(iG, 0), StringEntry(ga, kT)], "", 0) | |
2549 | - | else $Tuple3((lw._1 ++ (if (kU) | |
2550 | - | then [StringEntry(K(z), "0_0_0_0_0")] | |
2551 | - | else ((((nil :+ StringEntry(bH(z), makeString([lw._2._2, "L", it], "_"))) :+ IntegerEntry(iG, gS._1)) :+ StringEntry(ga, kT)) :+ StringEntry(hq, makeString([hT[bf], hT[bg], jx, hT[bi]], ":"))))), it, gS._3) | |
2552 | - | if (jU(z)) | |
2553 | - | then throw("expedition_checkTournament") | |
2554 | - | else { | |
2555 | - | let lu = dm(invoke(cT, "burnAcres", [dK], nil)) | |
2556 | - | $Tuple2(((eM._1 ++ jE(z, X)._1) :+ kA), $Tuple3(eM._2, eM._3, lu)) | |
2557 | - | } | |
2558 | - | } | |
2559 | - | } | |
2560 | - | ||
2561 | - | ||
2562 | - | ||
2563 | - | @Callable(gn) | |
2564 | - | func buySLandForAcres () = { | |
2565 | - | let kA = kx(gn) | |
2566 | - | if ((size(gn.payments) != 1)) | |
2567 | - | then throw("exactly 1 payment must be attached") | |
2568 | - | else { | |
2569 | - | let kB = gn.payments[0] | |
2570 | - | let eT = kB.amount | |
2571 | - | if (if (!(isDefined(kB.assetId))) | |
2572 | - | then true | |
2573 | - | else (value(kB.assetId) != db)) | |
2574 | - | then throw("ACRES payments only!") | |
2575 | - | else if ((eT != dK)) | |
2576 | - | then throw(("Payment attached should be " + toString(dK))) | |
2577 | - | else { | |
2578 | - | let eM = in(gn.caller, gn.transactionId) | |
2579 | - | let lu = dm(invoke(cT, "burnAcres", [dK], [AttachedPayment(db, eT)])) | |
2580 | - | $Tuple2((((eM._1 :+ ScriptTransfer(cP, kB.amount, ck)) ++ jK(toString(gn.caller), X)._1) :+ kA), $Tuple2(eM._2._1, lu)) | |
2581 | - | } | |
2582 | - | } | |
2583 | - | } | |
2584 | - | ||
2585 | - | ||
2586 | - | ||
2587 | - | @Callable(gn) | |
2588 | - | func upgradeInfra (O) = { | |
2589 | - | let kA = kx(gn) | |
2590 | - | if ((size(gn.payments) != 0)) | |
2591 | - | then throw("No payments required") | |
2592 | - | else { | |
2593 | - | let eM = jp(true, gn.caller, 0, O) | |
2594 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
2595 | - | $Tuple2(((eM._1 :+ kA) ++ jE(z, fraction(Y, eM._3, cr))._1), eM._2) | |
2596 | - | } | |
2597 | - | } | |
2598 | - | ||
2599 | - | ||
2600 | - | ||
2601 | - | @Callable(gn) | |
2602 | - | func activateArtifact (lx,ly) = { | |
2603 | - | let kA = kx(gn) | |
2604 | - | if ((size(gn.payments) != 0)) | |
2605 | - | then throw("No payments required") | |
2606 | - | else { | |
2607 | - | let b = toString(gn.caller) | |
2608 | - | let eM = { | |
2609 | - | let cl = lx | |
2610 | - | if (("PRESALE" == cl)) | |
2611 | - | then jS(b, ly) | |
2612 | - | else if (("ONBOARD" == cl)) | |
2613 | - | then jL(b) | |
2614 | - | else throw("Unknown artifact") | |
2615 | - | } | |
2616 | - | (eM :+ kA) | |
2617 | - | } | |
2618 | - | } | |
2619 | - | ||
2620 | - | ||
2621 | - | ||
2622 | - | @Callable(gn) | |
2623 | - | func mergeLands (jY) = { | |
2624 | - | let kA = kx(gn) | |
2625 | - | if ((size(gn.payments) != 0)) | |
2626 | - | then throw("No payments required") | |
2627 | - | else { | |
2628 | - | let eM = kw(toString(gn.caller), jY) | |
2629 | - | $Tuple2(((eM._1 :+ kA) ++ jK(toString(gn.caller), Z)._1), eM._2) | |
2630 | - | } | |
2631 | - | } | |
2632 | - | ||
2633 | - | ||
2634 | - | ||
2635 | - | @Callable(gn) | |
2636 | - | func cargoExchange (lz,O) = { | |
2637 | - | let kA = kx(gn) | |
2638 | - | if ((size(gn.payments) != 0)) | |
2639 | - | then throw("No payments required") | |
2640 | - | else { | |
2641 | - | let hS = split_4C(lz, ":") | |
2642 | - | let b = toString(gn.originCaller) | |
2643 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2644 | - | let iY = bp(O) | |
2645 | - | if (!(isDefined(getInteger(iY)))) | |
2646 | - | then throw((iX.name + " is not staked")) | |
2647 | - | else { | |
2648 | - | let ja = valueOrErrorMessage(getString(bm(O)), (("NFT " + iX.name) + " is orphaned")) | |
2649 | - | if ((ja != b)) | |
2650 | - | then throw((aA + " is not yours")) | |
2651 | - | else { | |
2652 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
2653 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2654 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2655 | - | let iV = valueOrElse(getString(bH(z)), aI) | |
2656 | - | let cc = split(value(iV), "_") | |
2657 | - | if ((cc[bk] != "L")) | |
2658 | - | then throw((("Duck location type is " + cc[bk]) + ", but should be L")) | |
2659 | - | else if ((cc[bl] != O)) | |
2660 | - | then throw(("Duck should be on the land " + O)) | |
2661 | - | else { | |
2662 | - | let hD = bv(O) | |
2663 | - | let hu = hC(hD, hE, hF) | |
2664 | - | let hq = bG(z) | |
2665 | - | let hT = hp(hq) | |
2666 | - | let eM = hR(hS, hu, hT) | |
2667 | - | let hL = split(hu[ba], "_") | |
2668 | - | let jm = (parseIntValue(hL[bc]) + eM._7) | |
2669 | - | let jn = (parseIntValue(hL[bd]) - eM._7) | |
2670 | - | [StringEntry(hq, makeString_2C([hT[bf], eM._4, eM._5, eM._6], ":")), StringEntry(hD, makeString_2C([hu[aW], eM._1, eM._2, eM._3, makeString([hL[bb], toString(jm), toString(jn), hL[be]], "_")], ":")), kA] | |
2671 | - | } | |
2672 | - | } | |
2673 | - | } | |
2674 | - | } | |
2675 | - | } | |
2676 | - | ||
2677 | - | ||
2678 | - | ||
2679 | - | @Callable(gn) | |
2680 | - | func saveWarehouse (hH,O) = if ((gn.caller != cP)) | |
2681 | - | then throw("Access denied") | |
2682 | - | else { | |
2683 | - | let hD = bv(O) | |
2684 | - | let hI = split_4C(hH, ":") | |
2685 | - | if ((size(hI) != 5)) | |
2686 | - | then throw("warehouse string should contain 4 ':' separators") | |
2687 | - | else { | |
2688 | - | let lA = split(hI[ba], "_")[bb] | |
2689 | - | let jm = ht(hI) | |
2690 | - | let lB = hr(hI[aW]) | |
2691 | - | let jn = ((lB - parseIntValue(lA)) - jm) | |
2692 | - | let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([lA, toString(jm), toString(jn), toString(lB)], "_")], ":") | |
2693 | - | $Tuple2([StringEntry(hD, lC)], lC) | |
2694 | - | } | |
2695 | - | } | |
2696 | - | ||
2697 | - | ||
2698 | - | ||
2699 | - | @Callable(gn) | |
2700 | - | func fixWarehouseFormat (O) = if ((gn.caller != cO)) | |
2701 | - | then throw("Access denied") | |
2702 | - | else { | |
2703 | - | let hD = bv(O) | |
2704 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2705 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
2706 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
2707 | - | let hI = hC(hD, hE, hF) | |
2708 | - | let lA = dm(invoke(cP, "recalcLockedVolumeREADONLY", [O, hI], nil)) | |
2709 | - | let jm = ht(hI) | |
2710 | - | let lB = hr(hI[aW]) | |
2711 | - | let jn = ((lB - lA) - jm) | |
2712 | - | let lC = makeString_2C([hI[aW], hI[aX], hI[aY], hI[aZ], makeString([toString(lA), toString(jm), toString(jn), toString(lB)], "_")], ":") | |
2713 | - | $Tuple2([StringEntry(hD, lC)], lC) | |
2714 | - | } | |
2715 | - | ||
2716 | - | ||
2717 | - | ||
2718 | - | @Callable(gn) | |
2719 | - | func fixContinentProportions (jY) = if ((gn.caller != cO)) | |
2720 | - | then throw("Access denied") | |
2721 | - | else { | |
2722 | - | func lD (eu,lE) = (eu :+ valueOrElse(getString(df(lE)), "0_0_0_0_0_0")) | |
2723 | - | ||
2724 | - | let fX = { | |
2725 | - | let ew = aN | |
2726 | - | let ex = size(ew) | |
2727 | - | let ey = nil | |
2728 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2729 | - | then eA | |
2730 | - | else lD(eA, ew[eB]) | |
2731 | - | ||
2732 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2733 | - | then eA | |
2734 | - | else throw("List size exceeds 5") | |
2735 | - | ||
2736 | - | eC(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5) | |
2737 | - | } | |
2738 | - | func lF (eu,O) = { | |
2739 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2740 | - | let jb = split(iX.description, "_") | |
2741 | - | let hE = (dp(jb[cV]) / cs) | |
2742 | - | let lE = jb[cX] | |
2743 | - | let gj = gp(jb[cW]) | |
2744 | - | let gR = value(indexOf(aN, lE)) | |
2745 | - | let kn = split(eu[gR], "_") | |
2746 | - | let lG = makeString(gh(kn, gj, hE, 1), "_") | |
2747 | - | let cl = lE | |
2748 | - | if (("Americas" == cl)) | |
2749 | - | then [lG, eu[1], eu[2], eu[3], eu[4]] | |
2750 | - | else if (("Europe" == cl)) | |
2751 | - | then [eu[0], lG, eu[2], eu[3], eu[4]] | |
2752 | - | else if (("Asia" == cl)) | |
2753 | - | then [eu[0], eu[1], lG, eu[3], eu[4]] | |
2754 | - | else if (("Africa" == cl)) | |
2755 | - | then [eu[0], eu[1], eu[2], lG, eu[4]] | |
2756 | - | else if (("Oceania" == cl)) | |
2757 | - | then [eu[0], eu[1], eu[2], eu[3], lG] | |
2758 | - | else throw("wrong continent") | |
2759 | - | } | |
2760 | - | ||
2761 | - | let eF = { | |
2762 | - | let ew = jY | |
2763 | - | let ex = size(ew) | |
2764 | - | let ey = fX | |
2765 | - | func hk (eA,eB) = if ((eB >= ex)) | |
2766 | - | then eA | |
2767 | - | else lF(eA, ew[eB]) | |
2768 | - | ||
2769 | - | func hl (eA,eB) = if ((eB >= ex)) | |
2770 | - | then eA | |
2771 | - | else throw("List size exceeds 100") | |
2772 | - | ||
2773 | - | hl(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(hk(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 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) | |
2774 | - | } | |
2775 | - | $Tuple2([StringEntry(df("Americas"), eF[0]), StringEntry(df("Europe"), eF[1]), StringEntry(df("Asia"), eF[2]), StringEntry(df("Africa"), eF[3]), StringEntry(df("Oceania"), eF[4])], 0) | |
2776 | - | } | |
2777 | - | ||
2778 | - | ||
2779 | - | ||
2780 | - | @Callable(gn) | |
2781 | - | func fixStakedPieces (cz) = if ((gn.caller != cO)) | |
2782 | - | then throw("Access denied") | |
2783 | - | else { | |
2784 | - | let kr = if ((cz == "")) | |
2785 | - | then 0 | |
2786 | - | else { | |
2787 | - | let kk = getString(al, dh(cz)) | |
2788 | - | let kg = if (isDefined(kk)) | |
2789 | - | then split_51C(value(kk), "_") | |
2790 | - | else nil | |
2791 | - | func lH (eu,O) = { | |
2792 | - | let iX = value(assetInfo(fromBase58String(O))) | |
2793 | - | let dq = split(iX.description, "_")[cV] | |
2794 | - | (eu + dp(dq)) | |
2795 | - | } | |
2796 | - | ||
2797 | - | let ew = kg | |
2798 | - | let ex = size(ew) | |
2799 | - | let ey = 0 | |
2800 | - | func ez (eA,eB) = if ((eB >= ex)) | |
2801 | - | then eA | |
2802 | - | else lH(eA, ew[eB]) | |
2803 | - | ||
2804 | - | func eC (eA,eB) = if ((eB >= ex)) | |
2805 | - | then eA | |
2806 | - | else throw("List size exceeds 100") | |
2807 | - | ||
2808 | - | eC(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(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 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) | |
2809 | - | } | |
2810 | - | $Tuple2([IntegerEntry(di(cz), kr)], kr) | |
2811 | - | } | |
2812 | - | ||
2813 | - | ||
2814 | - | ||
2815 | - | @Callable(gn) | |
2816 | - | func setCustomName (bn,ki,br) = { | |
2817 | - | let kA = kx(gn) | |
2818 | - | if ((size(gn.payments) != 1)) | |
2819 | - | then throw("Exactly one payment required") | |
2820 | - | else { | |
2821 | - | let kB = value(gn.payments[0]) | |
2822 | - | if ((kB.assetId != ck)) | |
2823 | - | then throw("Allowed USDT payment only!") | |
2824 | - | else if ((kB.amount != dF)) | |
2825 | - | then throw(("Payment should be " + toString(dF))) | |
2826 | - | else if (contains(ki, "__")) | |
2827 | - | then throw(("Name should not contain '__': " + ki)) | |
2828 | - | else if ((size(ki) > dG)) | |
2829 | - | then throw(("Name too long, maxLength=" + toString(dG))) | |
2830 | - | else { | |
2831 | - | let b = toString(gn.originCaller) | |
2832 | - | let lI = { | |
2833 | - | let cl = br | |
2834 | - | if (("ACCOUNT" == cl)) | |
2835 | - | then { | |
2836 | - | let lJ = ea(ki) | |
2837 | - | let lK = getString(lJ) | |
2838 | - | if (isDefined(lK)) | |
2839 | - | then throw(("Name already registered: " + ki)) | |
2840 | - | else { | |
2841 | - | let lL = bz(b) | |
2842 | - | let lM = getString(lL) | |
2843 | - | let lN = if (isDefined(lM)) | |
2844 | - | then [DeleteEntry(ea(value(lM)))] | |
2845 | - | else nil | |
2846 | - | (((lN :+ StringEntry(lL, ki)) :+ StringEntry(lJ, b)) ++ jK(b, W)._1) | |
2847 | - | } | |
2848 | - | } | |
2849 | - | else if (("LAND" == cl)) | |
2850 | - | then { | |
2851 | - | let iX = value(assetInfo(fromBase58String(bn))) | |
2852 | - | let iY = bp(bn) | |
2853 | - | if (!(isDefined(getInteger(iY)))) | |
2854 | - | then throw((iX.name + " is not staked")) | |
2855 | - | else { | |
2856 | - | let ja = valueOrErrorMessage(getString(bm(bn)), (("NFT " + iX.name) + " is orphaned")) | |
2857 | - | if ((ja != b)) | |
2858 | - | then throw((aA + " is not yours")) | |
2859 | - | else { | |
2860 | - | let lJ = dT(ki) | |
2861 | - | let lK = getString(lJ) | |
2862 | - | if (isDefined(lK)) | |
2863 | - | then throw(("Name already registered: " + ki)) | |
2864 | - | else { | |
2865 | - | let lO = bo(bn) | |
2866 | - | let lM = getString(lO) | |
2867 | - | let lN = if (isDefined(lM)) | |
2868 | - | then [DeleteEntry(dT(value(lM)))] | |
2869 | - | else nil | |
2870 | - | (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jK(b, W)._1) | |
2871 | - | } | |
2872 | - | } | |
2873 | - | } | |
2874 | - | } | |
2875 | - | else if (("DUCK" == cl)) | |
2876 | - | then { | |
2877 | - | let iX = value(assetInfo(fromBase58String(bn))) | |
2878 | - | let iY = bp(bn) | |
2879 | - | if (if (!(isDefined(getInteger(iY)))) | |
2880 | - | then true | |
2881 | - | else !(isDefined(getString(bF(b))))) | |
2882 | - | then throw((iX.name + " is not staked")) | |
2883 | - | else { | |
2884 | - | let ja = valueOrErrorMessage(getString(bE(bn)), (("NFT " + iX.name) + " is orphaned")) | |
2885 | - | if ((ja != b)) | |
2886 | - | then throw((aB + " is not yours")) | |
2887 | - | else { | |
2888 | - | let lJ = dZ(ki) | |
2889 | - | let lK = getString(lJ) | |
2890 | - | if (isDefined(lK)) | |
2891 | - | then throw(("Name already registered: " + ki)) | |
2892 | - | else { | |
2893 | - | let lO = by(bn) | |
2894 | - | let lM = getString(lO) | |
2895 | - | let lN = if (isDefined(lM)) | |
2896 | - | then [DeleteEntry(dZ(value(lM)))] | |
2897 | - | else nil | |
2898 | - | (((lN :+ StringEntry(lO, ki)) :+ StringEntry(lJ, bn)) ++ jE(bn, W)._1) | |
2899 | - | } | |
2900 | - | } | |
2901 | - | } | |
2902 | - | } | |
2903 | - | else throw("Unknown entity type") | |
2904 | - | } | |
2905 | - | $Tuple2(((lI :+ ScriptTransfer(cP, kB.amount, ck)) :+ kA), 0) | |
2906 | - | } | |
2907 | - | } | |
2908 | - | } | |
2909 | - | ||
2910 | - | ||
2911 | - | ||
2912 | - | @Callable(gn) | |
2913 | - | func setReferrals (lP,lQ) = if ((gn.callerPublicKey != dC)) | |
2914 | - | then throw("Permission denied") | |
2915 | - | else { | |
2916 | - | let kA = kx(gn) | |
2917 | - | if ((size(gn.payments) != 0)) | |
2918 | - | then throw("No payments required") | |
2919 | - | else if (!(isDefined(addressFromString(lP)))) | |
2920 | - | then throw(("Invalid address: " + lP)) | |
2921 | - | else if (!(isDefined(addressFromString(lQ)))) | |
2922 | - | then throw(("Invalid address: " + lQ)) | |
2923 | - | else { | |
2924 | - | let lR = eb() | |
2925 | - | let lS = getString(lR) | |
2926 | - | let lT = if (isDefined(lS)) | |
2927 | - | then split_4C(value(lS), "_") | |
2928 | - | else nil | |
2929 | - | if (containsElement(lT, lQ)) | |
2930 | - | then throw((lQ + " is not newbie (already has referrals)")) | |
2931 | - | else { | |
2932 | - | let jM = bA(lQ) | |
2933 | - | let jN = getString(jM) | |
2934 | - | if (if (isDefined(jN)) | |
2935 | - | then isDefined(addressFromString(value(jN))) | |
2936 | - | else false) | |
2937 | - | then throw(((lQ + " already has refBy: ") + value(jN))) | |
2938 | - | else { | |
2939 | - | let lU = bD(lP) | |
2940 | - | let lV = getString(lU) | |
2941 | - | let lW = if (isDefined(lV)) | |
2942 | - | then split_4C(value(lV), "_") | |
2943 | - | else nil | |
2944 | - | if (containsElement(lW, lQ)) | |
2945 | - | then throw((((lP + " already contains ") + lQ) + " within referrals")) | |
2946 | - | else { | |
2947 | - | let lX = makeString_2C((lW :+ lQ), "_") | |
2948 | - | let lY = if (containsElement(lT, lP)) | |
2949 | - | then value(lS) | |
2950 | - | else makeString_2C((lT :+ lP), "_") | |
2951 | - | $Tuple2([StringEntry(jM, lP), StringEntry(lU, lX), StringEntry(lR, lY), kA], 0) | |
2952 | - | } | |
2953 | - | } | |
2954 | - | } | |
2955 | - | } | |
2956 | - | } | |
2957 | - | ||
2958 | - | ||
2959 | - | ||
2960 | - | @Callable(gn) | |
2961 | - | func distributePoints (lZ,ma,mb,mc,md) = { | |
2962 | - | let kA = kx(gn) | |
2963 | - | if ((size(gn.payments) != 0)) | |
2964 | - | then throw("No payments required") | |
2965 | - | else { | |
2966 | - | let b = toString(gn.originCaller) | |
2967 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
2968 | - | let me = H(b) | |
2969 | - | let mf = valueOrElse(getInteger(al, me), 0) | |
2970 | - | let mg = D(z) | |
2971 | - | let mh = valueOrElse(getInteger(al, mg), 0) | |
2972 | - | let mi = (mf + mh) | |
2973 | - | let mj = ((((lZ + ma) + mb) + mc) + md) | |
2974 | - | if ((mj > mi)) | |
2975 | - | then throw((("There are only " + toString(mi)) + " free points to distribute")) | |
2976 | - | else { | |
2977 | - | let mk = A(z) | |
2978 | - | let ao = split(valueOrElse(getString(al, mk), "0_0_0_0_0"), "_") | |
2979 | - | let ml = (mf - mj) | |
2980 | - | $Tuple2([IntegerEntry(me, if ((0 > ml)) | |
2981 | - | then 0 | |
2982 | - | else ml), IntegerEntry(mg, if ((0 > ml)) | |
2983 | - | then (mh + ml) | |
2984 | - | else mh), StringEntry(mk, makeString([toString((parseIntValue(ao[j]) + lZ)), toString((parseIntValue(ao[k]) + ma)), toString((parseIntValue(ao[l]) + mb)), toString((parseIntValue(ao[m]) + mc)), toString((parseIntValue(ao[n]) + md))], "_")), kA], 0) | |
2985 | - | } | |
2986 | - | } | |
2987 | - | } | |
2988 | - | ||
2989 | - | ||
2990 | - | ||
2991 | - | @Callable(gn) | |
2992 | - | func splitByGlobalWeightsREADONLY (el) = $Tuple2(nil, eD(el)) | |
2993 | - | ||
2994 | - | ||
2995 | - | ||
2996 | - | @Callable(gn) | |
2997 | - | func splitByGlobalAndLocalWeightsREADONLY (mm,mn,gq) = { | |
2998 | - | let gj = gp(gq) | |
2999 | - | $Tuple2(nil, $Tuple2(eD(mm), eo(mn, gj))) | |
3000 | - | } | |
3001 | - | ||
3002 | - | ||
3003 | - | ||
3004 | - | @Callable(gn) | |
3005 | - | func getBackpackREADONLY (z) = $Tuple2(nil, makeString(hp(bG(z)), ":")) | |
3006 | - | ||
3007 | - | ||
3008 | - | ||
3009 | - | @Callable(gn) | |
3010 | - | func getWarehouseREADONLY (O) = { | |
3011 | - | let iX = value(assetInfo(fromBase58String(O))) | |
3012 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
3013 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
3014 | - | $Tuple2(nil, makeString_2C(hC(bv(O), hE, hF), ":")) | |
3015 | - | } | |
3016 | - | ||
3017 | - | ||
3018 | - | ||
3019 | - | @Callable(gn) | |
3020 | - | func saveLastTx () = { | |
3021 | - | let io = gn.caller | |
3022 | - | if (!(containsElement([cR, cP, cS, cT], io))) | |
3023 | - | then throw("Access denied") | |
3024 | - | else $Tuple2([kx(gn)], 42) | |
3025 | - | } | |
3026 | - | ||
3027 | - | ||
3028 | - | ||
3029 | - | @Callable(gn) | |
3030 | - | func updateDuckStats (z,jF) = if ((gn.caller != cP)) | |
3031 | - | then throw("Access denied") | |
3032 | - | else jE(z, jF) | |
3033 | - | ||
3034 | - | ||
3035 | - | ||
3036 | - | @Callable(gn) | |
3037 | - | func updateAccStats (b,jF) = if ((gn.caller != cP)) | |
3038 | - | then throw("Access denied") | |
3039 | - | else jK(b, jF) | |
3040 | - | ||
3041 | - | ||
3042 | - | ||
3043 | - | @Callable(gn) | |
3044 | - | func equipDuck (mo) = { | |
3045 | - | let kA = kx(gn) | |
3046 | - | if ((size(gn.payments) != 0)) | |
3047 | - | then throw("No payments required") | |
3048 | - | else { | |
3049 | - | let b = toString(gn.originCaller) | |
3050 | - | let z = valueOrErrorMessage(getString(bF(b)), "You don't have a duck staked") | |
3051 | - | if (jU(z)) | |
3052 | - | then throw("equipDuck_checkTournament") | |
3053 | - | else { | |
3054 | - | let ga = E(z) | |
3055 | - | let mp = split(valueOrElse(getString(ga), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
3056 | - | let hq = bG(z) | |
3057 | - | let hT = hp(hq) | |
3058 | - | let kT = split(mo, "_") | |
3059 | - | if ((size(kT) != p)) | |
3060 | - | then throw("Wrong equipment string") | |
3061 | - | else { | |
3062 | - | let gc = fP(mp, fa(hT[bi]), true, nil) | |
3063 | - | let gd = split(kT[o], ";")[1] | |
3064 | - | let am = if ((gd == "")) | |
3065 | - | then 0 | |
3066 | - | else { | |
3067 | - | let ge = split(gd, ",")[0] | |
3068 | - | if ((ge == "")) | |
3069 | - | then 0 | |
3070 | - | else { | |
3071 | - | let fp = split(ge, ":") | |
3072 | - | let cN = fp[0] | |
3073 | - | let gf = fp[1] | |
3074 | - | if (if (if (if (if ((cN == "06")) | |
3075 | - | then true | |
3076 | - | else (cN == "07")) | |
3077 | - | then true | |
3078 | - | else (cN == "08")) | |
3079 | - | then (gf != "") | |
3080 | - | else false) | |
3081 | - | then (parseIntValue(gf) > 0) | |
3082 | - | else false) | |
3083 | - | then parseIntValue(split(aQ[parseIntValue(cN)], "_")[aS]) | |
3084 | - | else 0 | |
3085 | - | } | |
3086 | - | } | |
3087 | - | let fK = ak(this, z, am, true) | |
3088 | - | let gg = fP(kT, gc, false, fK) | |
3089 | - | let mq = ff(gg) | |
3090 | - | $Tuple2([StringEntry(ga, mo), StringEntry(hq, makeString_2C([hT[bf], hT[bg], hT[bh], mq], ":")), StringEntry(K(z), makeString([toString(fK[7]), toString(fK[8]), toString(fK[9]), toString(fK[10]), toString(fK[11])], "_")), kA], 0) | |
3091 | - | } | |
3092 | - | } | |
3093 | - | } | |
3094 | - | } | |
3095 | - | ||
3096 | - | ||
3097 | - | ||
3098 | - | @Callable(gn) | |
3099 | - | func fortificateLand (O,mr) = { | |
3100 | - | let kA = kx(gn) | |
3101 | - | if ((size(gn.payments) != 0)) | |
3102 | - | then throw("No payments required") | |
3103 | - | else { | |
3104 | - | let b = toString(gn.originCaller) | |
3105 | - | let z = valueOrElse(getString(bF(b)), "") | |
3106 | - | let fk = ak(this, z, 0, false) | |
3107 | - | let ms = bx(O) | |
3108 | - | let mt = split(valueOrElse(getString(ms), ":0_15:0_18:0"), "_") | |
3109 | - | let iX = value(assetInfo(fromBase58String(O))) | |
3110 | - | let hE = (dp(split(iX.description, "_")[cV]) / cs) | |
3111 | - | let hF = valueOrElse(getInteger(bw(O)), 0) | |
3112 | - | let hD = bv(O) | |
3113 | - | let hI = hC(hD, hE, hF) | |
3114 | - | let mu = split(hI[ba], "_") | |
3115 | - | let mv = parseIntValue(mu[bc]) | |
3116 | - | let mw = parseIntValue(mu[bd]) | |
3117 | - | let mx = split(mr, "_") | |
3118 | - | let my = fW(mt, fa(hI[aZ]), mv, mw, true, nil) | |
3119 | - | let gc = my._1 | |
3120 | - | let mz = my._2 | |
3121 | - | let mA = my._3 | |
3122 | - | let mB = fW(mx, gc, mz, mA, false, fk) | |
3123 | - | let gg = mB._1 | |
3124 | - | let mC = mB._2 | |
3125 | - | let mD = mB._3 | |
3126 | - | let mq = ff(gg) | |
3127 | - | let jD = makeString([mu[bb], toString(mC), toString(mD), mu[be]], "_") | |
3128 | - | $Tuple2([StringEntry(ms, mr), StringEntry(hD, makeString_2C([hI[aW], hI[aX], hI[aY], mq, jD], ":")), kA], 0) | |
3129 | - | } | |
3130 | - | } | |
3131 | - | ||
3132 | - | ||
3133 | - | ||
3134 | - | @Callable(gn) | |
3135 | - | func initDuckTourAttempt (z) = if ((gn.caller != cS)) | |
3136 | - | then throw("Access denied") | |
3137 | - | else { | |
3138 | - | let kA = kx(gn) | |
3139 | - | let iG = y(z) | |
3140 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
3141 | - | let kN = valueOrElse(getInteger(iG), iH) | |
3142 | - | let mE = bH(z) | |
3143 | - | let iV = valueOrElse(getString(mE), aI) | |
3144 | - | let cb = valueOrElse(getInteger(cS, bM), 0) | |
3145 | - | let mF = (toString(cb) + "_T_0") | |
3146 | - | $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mF)], mF) | |
3147 | - | } | |
3148 | - | ||
3149 | - | ||
3150 | - | ||
3151 | - | @Callable(gn) | |
3152 | - | func breakAttempt () = { | |
3153 | - | let kA = kx(gn) | |
3154 | - | let z = valueOrErrorMessage(getString(bF(toString(gn.caller))), "You don't have a duck staked") | |
3155 | - | let mE = bH(z) | |
3156 | - | let iV = valueOrElse(getString(mE), aI) | |
3157 | - | if ((split(iV, "_")[bk] != "T")) | |
3158 | - | then throw("Your duck is not in the tournament") | |
3159 | - | else { | |
3160 | - | let mG = getIntegerValue(I(z)) | |
3161 | - | let mH = getStringValue(J(z)) | |
3162 | - | $Tuple2([kA, IntegerEntry(y(z), mG), StringEntry(mE, mH)], iV) | |
3163 | - | } | |
3164 | - | } | |
3165 | - | ||
3166 | - | ||
3167 | - | ||
3168 | - | @Callable(gn) | |
3169 | - | func exitTournamentInternal (z) = if ((gn.caller != this)) | |
3170 | - | then throw("Access denied") | |
3171 | - | else { | |
3172 | - | let mG = getIntegerValue(I(z)) | |
3173 | - | let mH = getStringValue(J(z)) | |
3174 | - | $Tuple2([IntegerEntry(y(z), mG), StringEntry(bH(z), mH)], false) | |
3175 | - | } | |
3176 | - | ||
3177 | - | ||
3178 | - | ||
3179 | - | @Callable(gn) | |
3180 | - | func prepareRobbery (iv,iw) = { | |
3181 | - | let kA = kx(gn) | |
3182 | - | if (!(sigVerify_8Kb(iv, iw, dC))) | |
3183 | - | then throw("signature does not match") | |
3184 | - | else if ((size(gn.payments) != 1)) | |
3185 | - | then throw("exactly 1 payment must be attached") | |
3186 | - | else { | |
3187 | - | let kB = gn.payments[0] | |
3188 | - | let mI = kB.amount | |
3189 | - | if (if (!(isDefined(kB.assetId))) | |
3190 | - | then true | |
3191 | - | else (value(kB.assetId) != cZ)) | |
3192 | - | then throw("WLGOLD payments only!") | |
3193 | - | else { | |
3194 | - | let eS = split(toUtf8String(iv), "|") | |
3195 | - | if ((size(eS) != 2)) | |
3196 | - | then throw("Wrong message format") | |
3197 | - | else { | |
3198 | - | let z = eS[0] | |
3199 | - | let aw = as(this, z)._1 | |
3200 | - | if ((aw > mI)) | |
3201 | - | then throw(((("Payment " + toString(mI)) + " < required ") + toString(aw))) | |
3202 | - | else { | |
3203 | - | let mJ = split(eS[1], "_") | |
3204 | - | let av = lastBlock.timestamp | |
3205 | - | let ax = valueOrElse(getInteger(Q(z)), 0) | |
3206 | - | let ay = valueOrElse(getString(R(z)), "") | |
3207 | - | let az = valueOrElse(getInteger(P(ay)), 0) | |
3208 | - | if (if ((ax != w)) | |
3209 | - | then (az > av) | |
3210 | - | else false) | |
3211 | - | then throw(("You already started robbing, wait till " + toString(az))) | |
3212 | - | else { | |
3213 | - | func mK (eu,O) = { | |
3214 | - | let mL = valueOrElse(getInteger(N(O)), 0) | |
3215 | - | let mM = valueOrElse(getInteger(P(O)), 0) | |
3216 | - | if ((mL > size(t))) | |
3217 | - | then throw("Invalid state") | |
3218 | - | else if ((av > mM)) | |
3219 | - | then { | |
3220 | - | let mN = valueOrElse(getInteger(bp(O)), 0) | |
3221 | - | if ((0 >= mN)) | |
3222 | - | then eu | |
3223 | - | else { | |
3224 | - | let fU = value(assetInfo(fromBase58String(O))) | |
3225 | - | let jb = split(fU.description, "_") | |
3226 | - | let iN = dp(jb[cV]) | |
3227 | - | let mO = iM(O, iN) | |
3228 | - | let gt = (av - mN) | |
3229 | - | let je = fraction(gt, (mO * iN), aG) | |
3230 | - | if ((u > je)) | |
3231 | - | then eu | |
3232 | - | else (eu :+ O) | |
3233 | - | } | |
3234 | - | } | |
3235 | - | else eu | |
3236 | - | } | |
3237 | - | ||
3238 | - | let mP = { | |
3239 | - | let ew = mJ | |
3240 | - | let ex = size(ew) | |
3241 | - | let ey = nil | |
3242 | - | func ez (eA,eB) = if ((eB >= ex)) | |
3243 | - | then eA | |
3244 | - | else mK(eA, ew[eB]) | |
3245 | - | ||
3246 | - | func eC (eA,eB) = if ((eB >= ex)) | |
3247 | - | then eA | |
3248 | - | else throw("List size exceeds 10") | |
3249 | - | ||
3250 | - | eC(ez(ez(ez(ez(ez(ez(ez(ez(ez(ez(ey, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
3251 | - | } | |
3252 | - | if ((size(mP) == 0)) | |
3253 | - | then throw("No candidates for robbery") | |
3254 | - | else { | |
3255 | - | let mQ = du(size(mP), height, (iw + gn.transactionId)) | |
3256 | - | let O = mP[mQ] | |
3257 | - | $Tuple2([IntegerEntry(N(O), v), IntegerEntry(P(O), (av + t[v])), IntegerEntry(Q(z), x), StringEntry(R(z), O), kA], O) | |
3258 | - | } | |
3259 | - | } | |
3260 | - | } | |
3261 | - | } | |
3262 | - | } | |
3263 | - | } | |
3264 | - | } | |
3265 | - | ||
3266 | - | ||
3267 | - | ||
3268 | - | @Callable(gn) | |
3269 | - | func robLand (iv,iw) = { | |
3270 | - | let kA = kx(gn) | |
3271 | - | if (!(sigVerify_8Kb(iv, iw, dC))) | |
3340 | + | } | |
3341 | + | ||
3342 | + | ||
3343 | + | ||
3344 | + | @Callable(gw) | |
3345 | + | func robLand (iC,iD) = { | |
3346 | + | let kK = kH(gw) | |
3347 | + | if (!(sigVerify_8Kb(iC, iD, dK))) | |
3272 | 3348 | then throw("signature does not match") | |
3273 | 3349 | else { | |
3274 | - | let | |
3275 | - | let | |
3276 | - | let | |
3277 | - | $Tuple2([ | |
3278 | - | } | |
3279 | - | } | |
3280 | - | ||
3281 | - | ||
3282 | - | ||
3283 | - | @Callable( | |
3284 | - | func acceptDelivery () = if (!( | |
3350 | + | let bK = toString(gw.caller) | |
3351 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
3352 | + | let ax = lastBlock.timestamp | |
3353 | + | $Tuple2([kK, IntegerEntry(M(A), ax)], 0) | |
3354 | + | } | |
3355 | + | } | |
3356 | + | ||
3357 | + | ||
3358 | + | ||
3359 | + | @Callable(gw) | |
3360 | + | func acceptDelivery () = if (!(ck)) | |
3285 | 3361 | then throw("Delivery feature is turned off!") | |
3286 | 3362 | else { | |
3287 | - | let kA = kx(gn) | |
3288 | - | let bJ = toString(gn.caller) | |
3289 | - | let z = valueOrErrorMessage(getString(bF(bJ)), "You don't have a duck staked") | |
3290 | - | let mR = valueOrElse(getInteger(cP, bL), 0) | |
3291 | - | if ((aL > mR)) | |
3292 | - | then throw(("Delivery is not available, fund=" + toString(mR))) | |
3363 | + | let kK = kH(gw) | |
3364 | + | let bK = toString(gw.caller) | |
3365 | + | let A = valueOrErrorMessage(getString(bG(bK)), "You don't have a duck staked") | |
3366 | + | let ng = valueOrElse(getInteger(cR, bM), 0) | |
3367 | + | let mV = valueOrElse(getInteger(cR, bN), 0) | |
3368 | + | if ((aM > (ng - mV))) | |
3369 | + | then throw(((("Delivery is not available, fund=" + dw(ng, 6)) + ", locked=") + dw(mV, 6))) | |
3293 | 3370 | else { | |
3294 | - | let iG = y(z) | |
3295 | - | let iH = ae(valueOrElse(getInteger(C(z)), 0)) | |
3296 | - | let kN = valueOrElse(getInteger(iG), iH) | |
3297 | - | let mE = bH(z) | |
3298 | - | let iV = valueOrElse(getString(mE), aI) | |
3299 | - | let av = lastBlock.timestamp | |
3300 | - | let mS = (toString(av) + "_D_0") | |
3301 | - | $Tuple2([kA, IntegerEntry(I(z), kN), IntegerEntry(iG, iH), StringEntry(J(z), iV), StringEntry(mE, mS)], mS) | |
3371 | + | let ax = lastBlock.timestamp | |
3372 | + | let nh = valueOrElse(getInteger(T(A)), 0) | |
3373 | + | if ((nh > ax)) | |
3374 | + | then throw(("Delivery is forbidden for your duck until " + toString(nh))) | |
3375 | + | else if (kb(A)) | |
3376 | + | then throw("acceptDelivery_checkTournament") | |
3377 | + | else if (kc(A)) | |
3378 | + | then throw("acceptDelivery_checkDelivery") | |
3379 | + | else { | |
3380 | + | let ni = do(invoke(cR, "updateDeliveryLocked", [(mV + aM)], nil)) | |
3381 | + | let iN = z(A) | |
3382 | + | let iO = ag(valueOrElse(getInteger(D(A)), 0)) | |
3383 | + | let kX = valueOrElse(getInteger(iN), iO) | |
3384 | + | let mO = bI(A) | |
3385 | + | let jc = valueOrElse(getString(mO), aJ) | |
3386 | + | let nj = (toString(ax) + "_D_0") | |
3387 | + | $Tuple2([kK, IntegerEntry(J(A), kX), IntegerEntry(iN, iO), StringEntry(K(A), jc), StringEntry(mO, nj)], $Tuple2(nj, ni)) | |
3388 | + | } | |
3302 | 3389 | } | |
3303 | 3390 | } | |
3304 | 3391 | ||
3305 | 3392 |
github/deemru/w8io/169f3d6 1086.02 ms ◑![]()