tx · 782QZyhfPAaagZJAXE7bpu9NQB3bvY7fhm8bBhPWjUg5 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm: -0.07900000 Waves 2023.08.02 01:48 [2692134] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves
{ "type": 13, "id": "782QZyhfPAaagZJAXE7bpu9NQB3bvY7fhm8bBhPWjUg5", "fee": 7900000, "feeAssetId": null, "timestamp": 1690930218432, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "2Fz5Gq8CobZDwF36afYRa8LerVzgXqbjSUEY4fniRL1DpfVMHaiCRa48qu11id5dhXBEmiyTZoS1ufVGzxLvVZHL" ], "script": "base64:BgK3AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgMKAQESABIECgICAhIDCgEIEgMKAQgSBAoCCAgSAwoBGBIDCgEYEgQKAggIEgQKAggIEgMKAQgSAwoBCBIFCgMICAgSBAoCCAgSBwoFAQEBAQESAwoBARIFCgMBAQgSAwoBCBIDCgEIEgASBAoCCAESBAoCCAESAwoBCNwBARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4BDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwQDbHZsCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJAQltYXhIZWFsdGgBBQNsdmwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkJAMwIAgUDbHZsCQDMCAIFBmhlYWx0aAUDbmlsAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAApBUlRQUkVTQUxFAgdQUkVTQUxFAAZOVU1SRVMABgAPREFJTFlSRVNCWVBJRUNFAID40gEACURBWU1JTExJUwCAuJkpAAxXSE1VTFRJUExJRVIAgMivoCUAD0RFRkFVTFRMT0NBVElPTgIPQWZyaWNhX0ZfQWZyaWNhABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKRVNTRUxMQ09FRgAKAAlwcm9kVHlwZXMJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMQkAzAgCAhBGaXJzdCBBaWQgS2l0IEwyCQDMCAICEEZpcnN0IEFpZCBLaXQgTDMJAMwIAgILQmFja3BhY2sgTDEJAMwIAgILQmFja3BhY2sgTDIJAMwIAgILQmFja3BhY2sgTDMJAMwIAgIORm9vZCBSYXRpb24gTDEJAMwIAgIORm9vZCBSYXRpb24gTDIJAMwIAgIORm9vZCBSYXRpb24gTDMJAMwIAgILSmV0IFBhY2sgTDEJAMwIAgILSmV0IFBhY2sgTDIJAMwIAgILSmV0IFBhY2sgTDMJAMwIAgIJU2hpZWxkIEwxCQDMCAICCVNoaWVsZCBMMgkAzAgCAglTaGllbGQgTDMFA25pbAAKY29udGluZW50cwkAzAgCAghBbWVyaWNhcwkAzAgCAgZFdXJvcGUJAMwIAgIEQXNpYQkAzAgCAgZBZnJpY2EJAMwIAgIHT2NlYW5pYQUDbmlsAAlDT0VGRjJNQVQAgK3iBAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICIjhfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXwkAzAgCAiI4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMzBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF81MF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzcwXzAsMCwwLDAsMCwwLDBfMjAxBQNuaWwACXJJZHhDb2VmZgAGABBySWR4UmVxdWlyZW1lbnRzAAkACXJJZHhTbG90cwAKAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAt2b2xPY2N1cGllZAABAAd2b2xGcmVlAAIACHZvbFRvdGFsAAMACmJwSWR4TGV2ZWwAAAAIYnBJZHhSZXMAAQAIYnBJZHhNYXQAAgAJYnBJZHhQcm9kAAMBEWtleUxhc3RUeElkQnlVc2VyAQRhZGRyCQCsAgICD2xhc3RUeElkQnlVc2VyXwUEYWRkcgEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYbGFuZEN1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICC3N0YWtlZFRpbWVfBQdhc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIEdHlwZQdhc3NldElkCQC5CQIJAMwIAgINbGFuZEFydFN0YXR1cwkAzAgCBQR0eXBlCQDMCAIFB2Fzc2V0SWQFA25pbAIBXwEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMHbmZ0VHlwZQdhc3NldElkCW93bmVyQWRkcgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICIHN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXJfBQduZnRUeXBlAgFfBQdhc3NldElkAgFfBQlvd25lckFkZHIBEmtleVdhcmVob3VzZUJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKd2FyZUhvdXNlXwULbGFuZEFzc2V0SWQBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGR1Y2tDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEEYWRkcgkArAICAhhhY2NvdW50Q3VzdG9tTmFtZUJ5QWRkcl8FBGFkZHIBD2tleUFkZHJlc3NSZWZCeQEEYWRkcgkArAICAglhY2NSZWZCeV8FBGFkZHIBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBC2R1Y2tBc3NldElkCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2tfBQtkdWNrQXNzZXRJZAEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEEYWRkcgkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkRHVja0J5XwUEYWRkcgETa2V5QWRkcmVzc1JlZmVycmFscwEEYWRkcgkArAICAg1hY2NSZWZlcnJhbHNfBQRhZGRyARBrZXlEdWNrSWRUb093bmVyAQdhc3NldElkCQCsAgICCmR1Y2tPd25lcl8FB2Fzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQh1c2VyQWRkcgkArAICAholcyVzX191c2VyR3dsUmVsZWFzZVRpbWVfXwUIdXNlckFkZHIBDmtleUVzV2FyZWhvdXNlAAIaZW1lcmdlbmN5V2FyZWhvdXNlUHJvZHVjdHMACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAAPS1NBTExPV1hQTEVWRUxTBwAFY2hhaW4JAMkBAgkAygECCAUEdGhpcwVieXRlcwABAAEAC3VzZHRBc3NldElkBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwASCE2nqyCAM/TtG7yo7ui5O8yYLdC136B5ao1CP5qA//uQMJAAACAQFUBQckbWF0Y2gwASBVsdifcoeC7+XjW42sBatl3ppDoS8WuwXzGreHpfHFGAkAAgECDVVua25vd24gY2hhaW4AFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAIjM1BRQ3V2RmJ2aDRMa1BVbnJuVTF6M2puYkExcDltM1dOaHYDCQAAAgEBVAUHJG1hdGNoMAIjM011bWtHR3p0Q0tBWHBXRHF4a2Rkb2ZxWFNVYnFRa3ZTSnkJAAIBAg1Vbmtub3duIGNoYWluABFJbmZyYVVwZ3JhZGVDb3N0UwQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACAyK+gJQMJAAACAQFUBQckbWF0Y2gwAIDC1y8JAAIBAg1Vbmtub3duIGNoYWluAA5hcmJpdHJhZ2VEZWxheQQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMADAzyQDCQAAAgEBVAUHJG1hdGNoMADg1AMJAAIBAg1Vbmtub3duIGNoYWluAANTRVACAl9fAAVNVUxUNgDAhD0ABU1VTFQ4AIDC1y8ABVNTSVpFABkABU1TSVpFAGQABUxTSVpFAOEBAAZYTFNJWkUAkAMAB1hYTFNJWkUA8QQABUlURVI2CQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwBD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAABFJZHhDZmdTdGFraW5nRGFwcAABABFJZHhDZmdFY29ub215RGFwcAACABRJZHhDZmdHb3Zlcm5hbmNlRGFwcAADAA1JZHhDZmdXbGdEYXBwAAQBCmtleVJlc3RDZmcAAg4lc19fcmVzdENvbmZpZwEOa2V5UmVzdEFkZHJlc3MAAgwlc19fcmVzdEFkZHIBEXJlYWRSZXN0Q2ZnT3JGYWlsAQRyZXN0CQC8CQIJAQ9nZXRTdHJpbmdPckZhaWwCBQRyZXN0CQEKa2V5UmVzdENmZwAFA1NFUAEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgdyZXN0Q2ZnA2lkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUHcmVzdENmZwUDaWR4CQCsAgICKlJlc3QgY2ZnIGRvZXNuJ3QgY29udGFpbiBhZGRyZXNzIGF0IGluZGV4IAkApAMBBQNpZHgADHJlc3RDb250cmFjdAkBEUBleHRyTmF0aXZlKDEwNjIpAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzCQEOa2V5UmVzdEFkZHJlc3MABRVkZWZhdWx0UmVzdEFkZHJlc3NTdHIAB3Jlc3RDZmcJARFyZWFkUmVzdENmZ09yRmFpbAEFDHJlc3RDb250cmFjdAAPc3Rha2luZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnU3Rha2luZ0RhcHAAD2Vjb25vbXlDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ0Vjb25vbXlEYXBwAAtnb3ZDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFFElkeENmZ0dvdmVybmFuY2VEYXBwAAt3bGdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFDUlkeENmZ1dsZ0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMAC3JhbmRvbURlbGF5AAIBC2tleUNvbW1pdE9wAQdhZGRyZXNzCQCsAgICEGNvbW1pdE9wZXJhdGlvbl8FB2FkZHJlc3MBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAhNmaW5pc2hCbG9ja0ZvckFkZHJfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpzdWJ0cmFjdG9yAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBQNoYXMBEXN1YnRyYWN0RXF1aXBtZW50AgVvbGRFcQVwVXNlZAMJAAACBQVwVXNlZAIABQVvbGRFcQoBB3N1YlVzZWQCA2FjYwZpZHhBbXQEBXBhcnRzCQC1CQIFBmlkeEFtdAIBLAMJAQIhPQIJAJADAQUFcGFydHMAAgkAAgECKEluY29ycmVjdCBmb3JtYXQsIHNob3VsZCBiZSBpbmRleCxhbW91bnQEA2lkeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAADAwkAZgIAAAUDaWR4BgkAZwIFA2lkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAQDYW10CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQQHZXFQYXJ0cwkAtQkCBQNhY2MJAKwCAgkAkQMCBQVwYXJ0cwAAAgE6AwkBAiE9AgkAkAMBBQdlcVBhcnRzAAIJAAIBCQCsAgIJAKwCAgIPWW91IGRvbid0IGhhdmUgCQCRAwIFCXByb2RUeXBlcwUDaWR4AgkgZXF1aXBwZWQEA3RtcAkAkQMCBQdlcVBhcnRzAAEEBm51bUxlbgMJAQdpc0RpZ2l0AQkArwICCQCwAgIFA3RtcAABAAEAAgABBARjdXJyCQENcGFyc2VJbnRWYWx1ZQEJAK8CAgUDdG1wBQZudW1MZW4EBHRhaWwJALACAgUDdG1wBQZudW1MZW4EBm5ld0FtdAMJAGcCBQRjdXJyBQNhbXQJAGUCBQRjdXJyBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINWW91IGVxdWlwcGVkIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUDaWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFA2FtdAkArAICCQCsAgIJAKwCAgkArAICCQCRAwIFB2VxUGFydHMAAAkAkQMCBQVwYXJ0cwAAAgE6CQCkAwEFBm5ld0FtdAUEdGFpbAoAAiRsCQC1CQIFBXBVc2VkAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAUFb2xkRXEKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1YlVzZWQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDEwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYw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b3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEcmVxcwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBHJlcXMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQRyZXFzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQRyZXFzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUEcmVxcwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBHJlcXMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VwZGF0ZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYBEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCHByb3BMaXN0BQ10ZXJyYWluQ291bnRzBQ1sYW5kU2l6ZUluZGV4BQRzaWduAgFfAQ1jb3VudFRlcnJhaW5zAQh0ZXJyYWlucwkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFBAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQgABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUMAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFEAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUYAAQUDbmlsAQZhZGRSZXMFCmN1cnJlbnRSZXMNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyZW50UmVzBQFpBQlyZXNPZlR5cGUEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNu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MF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAlAoCCQC5CQIIBQFyAl8xAgFfCQC5CQIIBQFyAl8yAgFfAQNhYnMBAXgDCQDAAgIFAXgJALYCAQAABQF4CQC+AgEFAXgABGZyZXEJAMwIAgkAzAgCAAYJAMwIAgAJCQDMCAIADgkAzAgCAA8JAMwIAgAQBQNuaWwJAMwIAgkAzAgCAAUJAMwIAgAICQDMCAIADQkAzAgCAA4JAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAECQDMCAIACQkAzAgCAAoJAMwIAgAPBQNuaWwJAMwIAgkAzAgCAAEJAMwIAgAGCQDMCAIABwkAzAgCAA8JAMwIAgATBQNuaWwJAMwIAgkAzAgCAAQJAMwIAgAHCQDMCAIACAkAzAgCAA0JAMwIAgASBQNuaWwFA25pbAEHZ2VuQ2hhcgIBbgVmcmVxcwQDcmVtCQCgAwEJALsCAgUBbgUHVFdFTlRZWAQGbGV0dGVyAwkAZgIJAJEDAgUFZnJlcXMAAAUDcmVtAgFBAwkAZgIJAJEDAgUFZnJlcXMAAQUDcmVtAgFCAwkAZgIJAJEDAgUFZnJlcXMAAgUDcmVtAgFDAwkAZgIJAJEDAgUFZnJlcXMAAwUDcmVtAgFEAwkAZgIJAJEDAgUFZnJlcXMABAUDcmVtAgFFAgFGBQZsZXR0ZXIBC2dlblRlcnJhaW5zAgRzZWVkDGNvbnRpbmVudElkeAQBZgkAkQMCBQRmcmVxBQxjb250aW5lbnRJZHgKARB0ZXJyYWluR2VuZXJhdG9yAgNhY2MEZWxlbQkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAggFA2FjYwJfMQkBB2dlbkNoYXICCAUDYWNjAl8yBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUHVFdFTlRZWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTJYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZM1gFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFk0WAUBZgkAugICCAUDYWNjAl8yBQhUV0VOVFk1WAQBdAoAAiRsCQDMCAIAAQkAzAgCAAIJAMwI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TlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0I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AgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAljdXJyZW50RXEJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssBAVuZXdFcQkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQUDbmlsAgAAAAQBZQkBEmV4cGVkaXRpb25JbnRlcm5hbAIFBmNhbGxlcgUEdHhJZAQCaWQICAUBZQJfMgJfMQkAlQoDCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BQJpZAgFAWYCXzMBDGFwcGx5Qm9udXNlcwILbGFuZEFzc2V0SWQGcGllY2VzBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAEBGFkZDYJAGkCBQppbmZyYUxldmVsAAYEBGFkZDcJAGkCBQppbmZyYUxldmVsAAcJAGQCCQBkAgUPREFJTFlSRVNCWVBJRUNFCQBrAwUPREFJTFlSRVNCWVBJRUNFCQBkAgkAZAIFCmluZnJhTGV2ZWwFBGFkZDYJAGgCAAIFBGFkZDcABQkAawMFD0RBSUxZUkVTQllQSUVDRQUJYXJ0UGllY2VzCQBoAgUGcGllY2VzAAUBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwRhZGRyCWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluBA0kdDAzMTAwODMxNTQ3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJQKAgUNbGFuZEFzc2V0SWRJbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAgAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAkAlAoCCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2R1Y2tBc3NldElkBAtsYW5kQXNzZXRJZAgFDSR0MDMxMDA4MzE1NDcCXzEEBmR1Y2tJZAgFDSR0MDMxMDA4MzE1NDcCXzIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgVMYW5kIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8JAJYKBAUGZHVja0lkBQtsYW5kQXNzZXRJZAUBZAUJc2F2ZWRUaW1lARBjbGFpbVJlc0ludGVybmFsBARhZGRyBmFtb3VudAljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgMJAGYCAAAFBmFtb3VudAkAAgECD05lZ2F0aXZlIGFtb3VudAQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUJY2xhaW1Nb2RlBQ1sYW5kQXNzZXRJZEluBAhsYW5kU2l6ZQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCCAUBYwJfMwULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wCAUBYwJfNAMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEIBQFjAl80AgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAggFAWMCXzIFBnBpZWNlcwQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMFCURBWU1JTExJUwMJAGYCBQZhbW91bnQFCGF2YWlsUmVzCQACAQkArAICCQCsAgIJAKwCAgIiTm90IGVub3VnaCByZXNvdXJjZXMsIGF2YWlsYWJsZSA9IAkApAMBBQhhdmFpbFJlcwIOLCByZXF1ZXN0ZWQgPSAJAKQDAQUGYW1vdW50BAxuZXdEZWx0YVRpbWUJAGsDCQBlAgUIYXZhaWxSZXMFBmFtb3VudAUJREFZTUlMTElTCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBAxuZXdUaW1lc3RhbXAJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUMbmV3RGVsdGFUaW1lBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBApyZXNUb0NsYWltCQEJdmlydENsYWltBAUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQgFAWMCXzIECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgAABAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EC3doU3BhY2VMZWZ0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQMDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAZgIFBmFtb3VudAULd2hTcGFjZUxlZnQHCQACAQkArAICCQCsAgICBU9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0Ahggc3BhY2UgbGVmdCBpbiB3YXJlaG91c2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BA5jdXJyZW50UGFja1JlcwkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQMY3VycmVudFdoUmVzCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwQNJHQwMzM5MjEzNDc5MgMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCWCgQJAQZhZGRSZXMFBQxjdXJyZW50V2hSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFCnJlc1RvQ2xhaW0CXzIJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFCnJlc1RvQ2xhaW0CXzIDCQAAAgUJY2xhaW1Nb2RlBQ1jbGFpbU1vZGVEdWNrCQCWCgQJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwkBBmFkZFJlcwUFDmN1cnJlbnRQYWNrUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQQFZGlzdHIJAQ1kaXN0cmlidXRlUmVzBAUMY3VycmVudFdoUmVzBQ5jdXJyZW50UGFja1JlcwUKcmVzVG9DbGFpbQULd2hTcGFjZUxlZnQEBHdoQW0JAJcDAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQkAzAgCCAUKcmVzVG9DbGFpbQJfMgUDbmlsCQCWCgQIBQVkaXN0cgJfMQgFBWRpc3RyAl8yCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkBQR3aEFtCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBHdoQW0EBXdoUmVzCAUNJHQwMzM5MjEzNDc5MgJfMQQFYnBSZXMIBQ0kdDAzMzkyMTM0NzkyAl8yBAVsb2Z0TwgFDSR0MDMzOTIxMzQ3OTICXzMEBWxvZnRGCAUNJHQwMzM5MjEzNDc5MgJfNAkAlwoFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEIBQFjAl8yBQxuZXdUaW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAgFAWMCXzIFBGFkZHIFDG5ld1RpbWVzdGFtcAUDbmlsBQVicEtleQkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIFBWJwUmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsBQV3aEtleQkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgUFd2hSZXMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAEIY2xhaW1BbGwEBGFkZHILbGFuZEFzc2V0SWQGcGllY2VzCWNsYWltTW9kZQQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQEFdmFsdWUBCQCfCAEFB3RpbWVLZXkECGF2YWlsUmVzCQBoAgkAawMJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwUJREFZTUlMTElTBQZwaWVjZXMJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUIYXZhaWxSZXMFCWNsYWltTW9kZQULbGFuZEFzc2V0SWQBDXVwSW5mcmFDb21tb24EDHNob3VsZFVzZU1hdAZjYWxsZXINcGF5bWVudEFtb3VudAtsYW5kQXNzZXRJZAQEYWRkcgkApQgBBQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFC2xhbmRBc3NldElkBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQIaW5mcmFLZXkJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIECGN1ckxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEFCGluZnJhS2V5AAADCQBnAgUIY3VyTGV2ZWwAAwkAAgECJkN1cnJlbnRseSBtYXggaW5mcmFzdHJ1Y3R1cmUgbGV2ZWwgPSAzBAhuZXdMZXZlbAkAZAIFCGN1ckxldmVsAAEEBGNvc3QJAGsDBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0BAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EB21hdFVzZWQJAGsDBRFJbmZyYVVwZ3JhZGVDb3N0UwkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwUMc2hvdWxkVXNlTWF0BQVtTGlzdAUHbWF0VXNlZAIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIIBQFjAl8yBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sEBndoRGF0YQgFC2NsYWltUmVzdWx0Al81BAZvbGRWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwQKbmV3Vm9sRGF0YQkAuQkCCQDMCAIJAJEDAgkAtQkCCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMCAV8AAAkAzAgCCQCkAwEFCG5ld0xldmVsBQNuaWwCAV8EBm5ld1ZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUKbmV3Vm9sRGF0YQQEbG9mdAkAtQkCCQCRAwIFBndoRGF0YQUJd2hJZHhMT0ZUAgFfBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkAzAgCCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUFBm5ld1ZvbAUGb2xkVm9sCQDMCAIJAKQDAQUGbmV3Vm9sBQNuaWwCAV8JAJUKAwkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQhpbmZyYUtleQUIbmV3TGV2ZWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICCAUBYwJfMgUEYWRkcgUIbmV3TGV2ZWwJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAggFC2NsYWltUmVzdWx0Al8zBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIJAMwIAgUKbmV3Vm9sRGF0YQkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhSZXMJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4TWF0CQDMCAIJAJEDAgUGd2hEYXRhBQl3aElkeFByb2QJAMwIAgUKbmV3TG9mdFN0cgUDbmlsAgE6BQNuaWwIBQtjbGFpbVJlc3VsdAJfMQUIbmV3TGV2ZWwFB21hdFVzZWQBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBASEBBQ9LU0FMTE9XWFBMRVZFTFMJAJQKAgUDbmlsAAAEBmx2bEtleQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkBAV4cEtleQkBCWtleUR1Y2tYUAEFC2R1Y2tBc3NldElkBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgRhZGRyB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5VXNlckxldmVsAQUEYWRkcgQFeHBLZXkJAQlrZXlVc2VyWFABBQRhZGRyBAJ4cAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUGbHZsS2V5AAAFBW5ld1hQBAlrZXlQb2ludHMJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAgkAzQgCCAULY2xhaW1SZXN1bHQCXzEJAQxJbnRlZ2VyRW50cnkCBQ1hY3RpdmF0aW9uS2V5BQZwaWVjZXMJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyBQZwaWVjZXMJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCAULY2xhaW1SZXN1bHQCXzUCAToBDW1lcmdlSW50ZXJuYWwHC25ld0xhbmRTaXplCG5ld0xldmVsB2Zvcm11bGEEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAduZWVkTWF0BAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQKAQpjaGVja01lcmdlAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFB3RpbWVLZXkJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQJY29udGluZW50CQCRAwIFAWQFDHJlY0NvbnRpbmVudAMDCQECIT0CCAUDYWNjAl8zAgAJAQIhPQIIBQNhY2MCXzMFCWNvbnRpbmVudAcJAAIBAi5MYW5kcyBzaG91bGQgYmUgb24gdGhlIHNhbWUgY29udGluZW50IHRvIG1lcmdlBAhsYW5kU2l6ZQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQHc2l6ZXNJbggFA2FjYwJfMQQBaQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCzCQIFB3NpemVzSW4FCGxhbmRTaXplAidZb3UgaGF2ZW4ndCBwYXNzZWQgYWxsIHRoZSBsYW5kcyBuZWVkZWQECHNpemVzT3V0CQCsAgIJAK8CAgUHc2l6ZXNJbgUBaQkAsAICBQdzaXplc0luCQBkAgUBaQABBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQEYXJ0cwkAZAIIBQNhY2MCXzIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECHJlcUxldmVsBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwAAMDCQAAAgIBTQUHJG1hdGNoMAAEAwkAAAICAUwFByRtYXRjaDAABQMJAAACAgJYTAUHJG1hdGNoMAAGCQACAQIaT25seSBTLCBNLCBMLCBYTCBjYW4gbWVyZ2UDCQECIT0CBQppbmZyYUxldmVsBQhyZXFMZXZlbAkAAgECIkFsbCBsYW5kcyBzaG91bGQgYmUgbWF4ZWQgdG8gbWVyZ2UEB2xhbmROdW0JAJEDAgUBZAUKcmVjTGFuZE51bQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUJc2F2ZWRUaW1lAwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQUJc2F2ZWRUaW1lAgwsIGN1cnJlbnQgPSAJAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVicFJlcwkBBmFkZFJlcwUJALUJAggFA2FjYwJfNAIBXwUNdGVycmFpbkNvdW50cwUJZGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UEBXByb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MCXzYFDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAtzdW1UZXJyYWlucwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl85BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgAAQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmwoJBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBQtzdW1UZXJyYWlucwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEB2xhbmRzSW4DCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAQBcgoAAiRsBQxsYW5kQXNzZXRJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCbCgkFB2Zvcm11bGEAAAIACQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwUDbmlsBQhwcm9wTGlzdAUHbGFuZHNJbgAACQC1CQICCzBfMF8wXzBfMF8wAgFfCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJARNnZW5UZXJyYWluc0Zvck1lcmdlAggFAXICXzkJAGkCCQEPbnVtUGllY2VzQnlTaXplAQULbmV3TGFuZFNpemUFBVNTSVpFBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEECm5ld0xhbmROdW0JAKQDAQUHZnJlZU51bQQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQpuZXdMYW5kTnVtBQtuZXdMYW5kU2l6ZQkAuQkCCQDMCAIFCm5ld0xhbmROdW0JAMwIAgULbmV3TGFuZFNpemUJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQObmV3TGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMJAGYCBQduZWVkTWF0AAAJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8FB25lZWRNYXQCAV8ECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAggFAXICXzUDCQBmAgkAkAMBCAUBcgJfNwAACQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCAUBcgJfNwIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkDCQBmAggFAXICXzgFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzCAUBcgJfOAkBDEludGVnZXJFbnRyeQIJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUHZnJlZU51bQABBQVpc3N1ZQkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQpuZXdMYW5kTnVtBQ5uZXdMYW5kQXNzZXRJZAkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDm5ld0xhbmRBc3NldElkBQRhZGRyCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQpuZXdMYW5kTnVtBQRhZGRyCQEMSW50ZWdlckVudHJ5AgkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcggFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFDm5ld0xhbmRBc3NldElkBQhuZXdMZXZlbAkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgUIbmV3TGV2ZWwJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUBcgJfNAkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAJALkJAggFAXICXzYCAV8JAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCMBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAgFAWYCXzEJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCCAUBZgJfMQAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAJEDAgUIbWVkS2l0SHAFAW4FAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAaAIFBnhwSGVhbAkAZAIJAGQCBQpxdWFudGl0eUwxBQpxdWFudGl0eUwyBQpxdWFudGl0eUwzAl8xBQluZXdIZWFsdGgBaQEGaGVhbEVTAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEJY29tbWl0Rm9yAQJvcAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQQLZmluaXNoQmxvY2sJAGQCBQZoZWlnaHQFC3JhbmRvbURlbGF5BARhZGRyCQClCAEIBQFpBmNhbGxlcgkAlAoCCQDNCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlDb21taXQBBQRhZGRyBQtmaW5pc2hCbG9jawkAzAgCCQEMSW50ZWdlckVudHJ5AgkBC2tleUNvbW1pdE9wAQUEYWRkcgUCb3AFA25pbAUMcHJvbG9nQWN0aW9uBQtmaW5pc2hCbG9jawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQdXBncmFkZUluZnJhVXNkdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAcIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFC2xhbmRBc3NldElkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUGCQClCAEIBQFpBmNhbGxlcgAABQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQEObWVyZ2VMYW5kc1VzZHQBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUHCQClCAEIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEPZml4U3Rha2VkUGllY2VzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVu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IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24AAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUKZnJlZUtleUFjYwAABAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwMJAQIhPQIIBQFpBmNhbGxlcgULd2xnQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0BwkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBARyZXFzCQEMZ2V0RHVja1N0YXRzAgUEdGhpcwULZHVja0Fzc2V0SWQECXRlbXBQcm9kQgkBBmRyZXNzQgQFC2N1cnJlbnRTZWdzCQEOcHJvZFN0clRvQnl0ZXMBCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QGBQRyZXFzBAhuZXdQcm9kQgkBBmRyZXNzQgQFBW5ld0VxBQl0ZW1wUHJvZEIHBQRyZXFzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIFCm5ld1Byb2RTdHIFA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAABvIPJA=", "height": 2692134, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 61rX2aXwZSWwHyZEfcsDU7BKk3wQP2Jk8WLFsZZZxhE Next: DbNW1Gwqexvme51AHzkXkxfQtXjUgkjwJMx7Lu21Mphd Diff:
Old | New | Differences | |
---|---|---|---|
986 | 986 | } | |
987 | 987 | ||
988 | 988 | ||
989 | - | let fh = ["A", "B", "C", "D", "E", "F"] | |
990 | - | ||
991 | - | func fi (fj,ew) = { | |
992 | - | func fk (cX,cb) = { | |
989 | + | let fh = [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] | |
990 | + | ||
991 | + | let fi = ["A", "B", "C", "D", "E", "F"] | |
992 | + | ||
993 | + | func fj (fk,ew) = { | |
994 | + | func fl (cX,cb) = { | |
993 | 995 | let dH = cX._2 | |
994 | - | let | |
995 | - | let eV = if (( | |
996 | + | let fm = parseIntValue(cb) | |
997 | + | let eV = if ((fm == 0)) | |
996 | 998 | then 0 | |
997 | - | else if (( | |
998 | - | then ( | |
999 | - | else if (( | |
999 | + | else if ((fm >= (4 * ew))) | |
1000 | + | then (fm / ew) | |
1001 | + | else if ((fm > (3 * ew))) | |
1000 | 1002 | then 3 | |
1001 | - | else ((( | |
1003 | + | else (((fm - 1) / ew) + 1) | |
1002 | 1004 | $Tuple3((cX._1 :+ eV), (cX._2 + 1), (cX._3 + eV)) | |
1003 | 1005 | } | |
1004 | 1006 | ||
1005 | 1007 | let fg = { | |
1006 | - | let cZ = | |
1008 | + | let cZ = fk | |
1007 | 1009 | let da = size(cZ) | |
1008 | 1010 | let db = $Tuple3(nil, 0, 0) | |
1009 | 1011 | func dc (dd,de) = if ((de >= da)) | |
1010 | 1012 | then dd | |
1011 | - | else | |
1013 | + | else fl(dd, cZ[de]) | |
1012 | 1014 | ||
1013 | 1015 | func df (dd,de) = if ((de >= da)) | |
1014 | 1016 | then dd | |
1016 | 1018 | ||
1017 | 1019 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1018 | 1020 | } | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | func | |
1023 | - | let | |
1024 | - | then ( | |
1025 | - | else | |
1026 | - | let | |
1021 | + | let fn = fg._1 | |
1022 | + | let fo = value(indexOf(fn, max(fn))) | |
1023 | + | let fp = (fg._3 - 25) | |
1024 | + | func fq (cX,bK) = { | |
1025 | + | let fr = if ((bK == fo)) | |
1026 | + | then (fn[bK] - fp) | |
1027 | + | else fn[bK] | |
1028 | + | let fs = if ((fr == 0)) | |
1027 | 1029 | then nil | |
1028 | - | else split(drop(toString(pow(10, 0, | |
1029 | - | let eb = | |
1030 | - | func | |
1031 | - | ||
1032 | - | let | |
1033 | - | let cZ = | |
1030 | + | else split(drop(toString(pow(10, 0, fr, 0, 0, DOWN)), 1), "") | |
1031 | + | let eb = fi[bK] | |
1032 | + | func ft (fu,fv) = (fu :+ eb) | |
1033 | + | ||
1034 | + | let fw = { | |
1035 | + | let cZ = fs | |
1034 | 1036 | let da = size(cZ) | |
1035 | 1037 | let db = nil | |
1036 | - | func fw (dd,de) = if ((de >= da)) | |
1037 | - | then dd | |
1038 | - | else fs(dd, cZ[de]) | |
1039 | - | ||
1040 | 1038 | func fx (dd,de) = if ((de >= da)) | |
1041 | 1039 | then dd | |
1040 | + | else ft(dd, cZ[de]) | |
1041 | + | ||
1042 | + | func fy (dd,de) = if ((de >= da)) | |
1043 | + | then dd | |
1042 | 1044 | else throw("List size exceeds 25") | |
1043 | 1045 | ||
1044 | - | fx( | |
1045 | - | } | |
1046 | - | (cX ++ | |
1046 | + | fy(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(db, 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) | |
1047 | + | } | |
1048 | + | (cX ++ fw) | |
1047 | 1049 | } | |
1048 | 1050 | ||
1049 | 1051 | let di = { | |
1050 | 1052 | let cZ = bw | |
1051 | 1053 | let da = size(cZ) | |
1052 | 1054 | let db = nil | |
1053 | - | func fw (dd,de) = if ((de >= da)) | |
1054 | - | then dd | |
1055 | - | else fp(dd, cZ[de]) | |
1056 | - | ||
1057 | 1055 | func fx (dd,de) = if ((de >= da)) | |
1058 | 1056 | then dd | |
1057 | + | else fq(dd, cZ[de]) | |
1058 | + | ||
1059 | + | func fy (dd,de) = if ((de >= da)) | |
1060 | + | then dd | |
1059 | 1061 | else throw("List size exceeds 6") | |
1060 | 1062 | ||
1061 | - | fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6) | |
1062 | - | } | |
1063 | - | makeString(di, "") | |
1064 | - | } | |
1065 | - | ||
1066 | - | ||
1067 | - | func fy (fz) = { | |
1068 | - | let fA = split(valueOrElse(getString(fz), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1069 | - | [toString(valueOrElse(parseInt(fA[ay]), 0)), if ((size(split(fA[az], "_")) == aa)) | |
1070 | - | then fA[az] | |
1071 | - | else "0_0_0_0_0_0", if ((size(split(fA[aA], "_")) == aa)) | |
1072 | - | then fA[aA] | |
1073 | - | else "0_0_0_0_0_0", fA[aB]] | |
1074 | - | } | |
1075 | - | ||
1076 | - | ||
1077 | - | func fB (fC) = { | |
1078 | - | let dv = split(fC, "_") | |
1063 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1064 | + | } | |
1065 | + | func fz (cX,dH) = (cX + di[dH]) | |
1066 | + | ||
1067 | + | let cZ = fh | |
1068 | + | let da = size(cZ) | |
1069 | + | let db = "" | |
1070 | + | func fA (dd,de) = if ((de >= da)) | |
1071 | + | then dd | |
1072 | + | else fz(dd, cZ[de]) | |
1073 | + | ||
1074 | + | func fB (dd,de) = if ((de >= da)) | |
1075 | + | then dd | |
1076 | + | else throw("List size exceeds 25") | |
1077 | + | ||
1078 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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) | |
1079 | + | } | |
1080 | + | ||
1081 | + | ||
1082 | + | func fC (fD) = { | |
1083 | + | let fE = split(valueOrElse(getString(fD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1084 | + | [toString(valueOrElse(parseInt(fE[ay]), 0)), if ((size(split(fE[az], "_")) == aa)) | |
1085 | + | then fE[az] | |
1086 | + | else "0_0_0_0_0_0", if ((size(split(fE[aA], "_")) == aa)) | |
1087 | + | then fE[aA] | |
1088 | + | else "0_0_0_0_0_0", fE[aB]] | |
1089 | + | } | |
1090 | + | ||
1091 | + | ||
1092 | + | func fF (fG) = { | |
1093 | + | let dv = split(fG, "_") | |
1079 | 1094 | ((ad * (parseIntValue(dv[1]) + 1)) * parseIntValue(dv[0])) | |
1080 | 1095 | } | |
1081 | 1096 | ||
1082 | 1097 | ||
1083 | - | func | |
1084 | - | let | |
1085 | - | func | |
1086 | - | ||
1087 | - | func | |
1098 | + | func fH (fI) = { | |
1099 | + | let fJ = fI[as] | |
1100 | + | func fK (cX,fL) = (cX + parseIntValue(fL)) | |
1101 | + | ||
1102 | + | func fM (cX,fL) = { | |
1088 | 1103 | let bK = cX._1 | |
1089 | - | let | |
1090 | - | $Tuple2((bK + 1), (cX._2 + ( | |
1091 | - | } | |
1092 | - | ||
1093 | - | let | |
1094 | - | let cZ = split( | |
1104 | + | let fN = (((parseIntValue(fL) + ao) - 1) / ao) | |
1105 | + | $Tuple2((bK + 1), (cX._2 + (fN * bq))) | |
1106 | + | } | |
1107 | + | ||
1108 | + | let fO = { | |
1109 | + | let cZ = split(fI[aq], "_") | |
1095 | 1110 | let da = size(cZ) | |
1096 | 1111 | let db = 0 | |
1097 | 1112 | func dc (dd,de) = if ((de >= da)) | |
1098 | 1113 | then dd | |
1099 | - | else | |
1114 | + | else fK(dd, cZ[de]) | |
1100 | 1115 | ||
1101 | 1116 | func df (dd,de) = if ((de >= da)) | |
1102 | 1117 | then dd | |
1104 | 1119 | ||
1105 | 1120 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1106 | 1121 | } | |
1107 | - | let | |
1108 | - | let cZ = split( | |
1122 | + | let fP = { | |
1123 | + | let cZ = split(fI[ar], "_") | |
1109 | 1124 | let da = size(cZ) | |
1110 | 1125 | let db = 0 | |
1111 | - | func fw (dd,de) = if ((de >= da)) | |
1112 | - | then dd | |
1113 | - | else fG(dd, cZ[de]) | |
1114 | - | ||
1115 | 1126 | func fx (dd,de) = if ((de >= da)) | |
1116 | 1127 | then dd | |
1128 | + | else fK(dd, cZ[de]) | |
1129 | + | ||
1130 | + | func fy (dd,de) = if ((de >= da)) | |
1131 | + | then dd | |
1117 | 1132 | else throw("List size exceeds 6") | |
1118 | 1133 | ||
1119 | - | fx( | |
1120 | - | } | |
1121 | - | let | |
1134 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1135 | + | } | |
1136 | + | let fQ = if ((fJ == "")) | |
1122 | 1137 | then 0 | |
1123 | - | else ( let cZ = split_4C( | |
1138 | + | else ( let cZ = split_4C(fJ, "_") | |
1124 | 1139 | let da = size(cZ) | |
1125 | 1140 | let db = $Tuple2(0, 0) | |
1126 | - | func | |
1141 | + | func fA (dd,de) = if ((de >= da)) | |
1127 | 1142 | then dd | |
1128 | - | else | |
1129 | - | ||
1130 | - | func | |
1143 | + | else fM(dd, cZ[de]) | |
1144 | + | ||
1145 | + | func fB (dd,de) = if ((de >= da)) | |
1131 | 1146 | then dd | |
1132 | 1147 | else throw("List size exceeds 50") | |
1133 | 1148 | ||
1134 | - | | |
1135 | - | (( | |
1136 | - | } | |
1137 | - | ||
1138 | - | ||
1139 | - | func | |
1140 | - | let | |
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | then makeString(["0", toString( | |
1149 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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 | |
1150 | + | ((fO + fP) + fQ) | |
1151 | + | } | |
1152 | + | ||
1153 | + | ||
1154 | + | func fR (fS,fT,fU) = { | |
1155 | + | let fG = ((toString(fT) + "_") + toString(fU)) | |
1156 | + | let fV = fF(fG) | |
1157 | + | let fW = valueOrElse(getString(fS), (fG + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1158 | + | let fX = split_4C(fW, ":") | |
1159 | + | let fY = fH(fX) | |
1160 | + | let fZ = if ((5 > size(fX))) | |
1161 | + | then makeString(["0", toString(fY), toString((fV - fY)), toString(fV)], "_") | |
1147 | 1162 | else { | |
1148 | - | let | |
1149 | - | let | |
1150 | - | let | |
1151 | - | then parseIntValue( | |
1152 | - | else | |
1153 | - | makeString([toString( | |
1154 | - | } | |
1155 | - | [ | |
1156 | - | then | |
1157 | - | else "0_0_0_0_0_0", if ((size(split( | |
1158 | - | then | |
1159 | - | else "0_0_0_0_0_0", | |
1160 | - | } | |
1161 | - | ||
1162 | - | ||
1163 | - | func | |
1164 | - | let | |
1165 | - | let | |
1166 | - | (( | |
1167 | - | } | |
1168 | - | ||
1169 | - | ||
1170 | - | func | |
1171 | - | let | |
1172 | - | then ((( | |
1173 | - | else -((((-( | |
1174 | - | ( | |
1175 | - | } | |
1176 | - | ||
1177 | - | ||
1178 | - | func | |
1163 | + | let ga = split(fX[at], "_") | |
1164 | + | let gb = parseIntValue(ga[au]) | |
1165 | + | let gc = if ((size(ga) > 1)) | |
1166 | + | then parseIntValue(ga[av]) | |
1167 | + | else fY | |
1168 | + | makeString([toString(gb), toString(gc), toString(((fV - gb) - gc)), toString(fV)], "_") | |
1169 | + | } | |
1170 | + | [fX[ap], if ((size(split(fX[aq], "_")) == aa)) | |
1171 | + | then fX[aq] | |
1172 | + | else "0_0_0_0_0_0", if ((size(split(fX[ar], "_")) == aa)) | |
1173 | + | then fX[ar] | |
1174 | + | else "0_0_0_0_0_0", fX[as], fZ] | |
1175 | + | } | |
1176 | + | ||
1177 | + | ||
1178 | + | func gd (fI) = { | |
1179 | + | let ge = fH(fI) | |
1180 | + | let gf = parseIntValue(split(fI[at], "_")[au]) | |
1181 | + | ((fF(fI[ap]) - ge) - gf) | |
1182 | + | } | |
1183 | + | ||
1184 | + | ||
1185 | + | func gg (gh,gi) = { | |
1186 | + | let fN = if ((gh >= 0)) | |
1187 | + | then (((gh + gi) - 1) / gi) | |
1188 | + | else -((((-(gh) + gi) - 1) / gi)) | |
1189 | + | (fN * bq) | |
1190 | + | } | |
1191 | + | ||
1192 | + | ||
1193 | + | func gj (gk,fI,gl) = if ((size(gk) != 3)) | |
1179 | 1194 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1180 | 1195 | else { | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let | |
1196 | + | let gm = split(gk[0], "_") | |
1197 | + | let gn = split(gk[1], "_") | |
1198 | + | let go = if ((gk[2] == "")) | |
1184 | 1199 | then nil | |
1185 | - | else split( | |
1186 | - | if ((size( | |
1200 | + | else split(gk[2], "_") | |
1201 | + | if ((size(gm) != aa)) | |
1187 | 1202 | then throw("All 6 resources should be passed") | |
1188 | - | else if ((size( | |
1203 | + | else if ((size(gn) != aa)) | |
1189 | 1204 | then throw("All 6 materials should be passed") | |
1190 | 1205 | else { | |
1191 | - | let eO = | |
1192 | - | let | |
1193 | - | let | |
1194 | - | let | |
1206 | + | let eO = gd(fI) | |
1207 | + | let gp = split(fI[aq], "_") | |
1208 | + | let gq = split(fI[ar], "_") | |
1209 | + | let gr = if ((fI[as] == "")) | |
1195 | 1210 | then nil | |
1196 | - | else split( | |
1197 | - | let eM = split( | |
1198 | - | let | |
1199 | - | let | |
1211 | + | else split(fI[as], "_") | |
1212 | + | let eM = split(gl[az], "_") | |
1213 | + | let gs = split(gl[aA], "_") | |
1214 | + | let gt = if ((gl[aB] == "")) | |
1200 | 1215 | then nil | |
1201 | - | else split( | |
1202 | - | func | |
1216 | + | else split(gl[aB], "_") | |
1217 | + | func gu (cX,fL) = { | |
1203 | 1218 | let ez = cX._1 | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | if (( | |
1208 | - | then $Tuple4((ez + 1), (cX._2 :+ | |
1209 | - | else if (( | |
1210 | - | then if (( | |
1211 | - | then throw((((("Attempt to take " + | |
1212 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1213 | - | else if ((-( | |
1214 | - | then throw((((("Attempt to take " + toString(-( | |
1215 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1219 | + | let gv = parseIntValue(fL) | |
1220 | + | let gw = parseIntValue(gp[ez]) | |
1221 | + | let gx = parseIntValue(eM[ez]) | |
1222 | + | if ((gv == 0)) | |
1223 | + | then $Tuple4((ez + 1), (cX._2 :+ gp[ez]), (cX._3 :+ eM[ez]), cX._4) | |
1224 | + | else if ((gv > 0)) | |
1225 | + | then if ((gv > gx)) | |
1226 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gx)) + " available")) | |
1227 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv)) | |
1228 | + | else if ((-(gv) > gw)) | |
1229 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gw)) + " available")) | |
1230 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv)) | |
1216 | 1231 | } | |
1217 | 1232 | ||
1218 | 1233 | let di = { | |
1219 | - | let cZ = | |
1234 | + | let cZ = gm | |
1220 | 1235 | let da = size(cZ) | |
1221 | 1236 | let db = $Tuple4(0, nil, nil, 0) | |
1222 | 1237 | func dc (dd,de) = if ((de >= da)) | |
1223 | 1238 | then dd | |
1224 | - | else | |
1239 | + | else gu(dd, cZ[de]) | |
1225 | 1240 | ||
1226 | 1241 | func df (dd,de) = if ((de >= da)) | |
1227 | 1242 | then dd | |
1229 | 1244 | ||
1230 | 1245 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1231 | 1246 | } | |
1232 | - | func | |
1247 | + | func gy (cX,fL) = { | |
1233 | 1248 | let ez = cX._1 | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | if (( | |
1238 | - | then $Tuple4((ez + 1), (cX._2 :+ | |
1239 | - | else if (( | |
1240 | - | then if (( | |
1241 | - | then throw((((("Attempt to take " + | |
1242 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1243 | - | else if ((-( | |
1244 | - | then throw((((("Attempt to take " + toString(-( | |
1245 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1249 | + | let gv = parseIntValue(fL) | |
1250 | + | let gz = parseIntValue(gq[ez]) | |
1251 | + | let gA = parseIntValue(gs[ez]) | |
1252 | + | if ((gv == 0)) | |
1253 | + | then $Tuple4((ez + 1), (cX._2 :+ gq[ez]), (cX._3 :+ gs[ez]), cX._4) | |
1254 | + | else if ((gv > 0)) | |
1255 | + | then if ((gv > gA)) | |
1256 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gA)) + " available")) | |
1257 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv)) | |
1258 | + | else if ((-(gv) > gz)) | |
1259 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gz)) + " available")) | |
1260 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv)) | |
1246 | 1261 | } | |
1247 | 1262 | ||
1248 | 1263 | let eq = { | |
1249 | - | let cZ = | |
1264 | + | let cZ = gn | |
1250 | 1265 | let da = size(cZ) | |
1251 | 1266 | let db = $Tuple4(0, nil, nil, di._4) | |
1252 | - | func fw (dd,de) = if ((de >= da)) | |
1253 | - | then dd | |
1254 | - | else gw(dd, cZ[de]) | |
1255 | - | ||
1256 | 1267 | func fx (dd,de) = if ((de >= da)) | |
1257 | 1268 | then dd | |
1269 | + | else gy(dd, cZ[de]) | |
1270 | + | ||
1271 | + | func fy (dd,de) = if ((de >= da)) | |
1272 | + | then dd | |
1258 | 1273 | else throw("List size exceeds 6") | |
1259 | 1274 | ||
1260 | - | fx( | |
1275 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1261 | 1276 | } | |
1262 | - | func | |
1277 | + | func gB (cX,fL) = { | |
1263 | 1278 | let ez = cX._1 | |
1264 | - | let gt = parseIntValue(fH) | |
1265 | - | let gA = if ((size(gp) > ez)) | |
1266 | - | then parseIntValue(gp[ez]) | |
1267 | - | else 0 | |
1268 | - | let gB = if ((size(gr) > ez)) | |
1279 | + | let gv = parseIntValue(fL) | |
1280 | + | let gC = if ((size(gr) > ez)) | |
1269 | 1281 | then parseIntValue(gr[ez]) | |
1270 | 1282 | else 0 | |
1271 | - | if ((gt == 0)) | |
1272 | - | then $Tuple4((ez + 1), (cX._2 :+ toString(gA)), (cX._3 :+ toString(gB)), cX._4) | |
1273 | - | else if ((gt > 0)) | |
1274 | - | then if ((gt > gB)) | |
1275 | - | then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gB)) + " available")) | |
1283 | + | let gD = if ((size(gt) > ez)) | |
1284 | + | then parseIntValue(gt[ez]) | |
1285 | + | else 0 | |
1286 | + | if ((gv == 0)) | |
1287 | + | then $Tuple4((ez + 1), (cX._2 :+ toString(gC)), (cX._3 :+ toString(gD)), cX._4) | |
1288 | + | else if ((gv > 0)) | |
1289 | + | then if ((gv > gD)) | |
1290 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gD)) + " available")) | |
1276 | 1291 | else { | |
1277 | - | let | |
1278 | - | $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1292 | + | let gE = (gg((gC + gv), ao) - gg(gC, ao)) | |
1293 | + | $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE)) | |
1279 | 1294 | } | |
1280 | - | else if ((-( | |
1281 | - | then throw((((("Attempt to take " + toString(-( | |
1295 | + | else if ((-(gv) > gC)) | |
1296 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gC)) + " available")) | |
1282 | 1297 | else { | |
1283 | - | let | |
1284 | - | $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1298 | + | let gE = (gg((gC + gv), ao) - gg(gC, ao)) | |
1299 | + | $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE)) | |
1285 | 1300 | } | |
1286 | 1301 | } | |
1287 | 1302 | ||
1288 | - | let | |
1303 | + | let fE = if ((size(go) != 0)) | |
1289 | 1304 | then { | |
1290 | - | let cZ = | |
1305 | + | let cZ = go | |
1291 | 1306 | let da = size(cZ) | |
1292 | 1307 | let db = $Tuple4(0, nil, nil, eq._4) | |
1293 | - | func | |
1308 | + | func fA (dd,de) = if ((de >= da)) | |
1294 | 1309 | then dd | |
1295 | - | else | |
1296 | - | ||
1297 | - | func | |
1310 | + | else gB(dd, cZ[de]) | |
1311 | + | ||
1312 | + | func fB (dd,de) = if ((de >= da)) | |
1298 | 1313 | then dd | |
1299 | 1314 | else throw("List size exceeds 50") | |
1300 | 1315 | ||
1301 | - | | |
1316 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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) | |
1302 | 1317 | } | |
1303 | - | else $Tuple4(0, | |
1304 | - | let | |
1305 | - | if (( | |
1306 | - | then throw((((("Attempt to put total " + toString( | |
1307 | - | else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString( | |
1318 | + | else $Tuple4(0, gr, gt, eq._4) | |
1319 | + | let gF = fE._4 | |
1320 | + | if ((gF > eO)) | |
1321 | + | then throw((((("Attempt to put total " + toString(gF)) + " stuff, but only ") + toString(eO)) + " warehouse space left")) | |
1322 | + | else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fE._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fE._3, "_"), gF) | |
1308 | 1323 | } | |
1309 | 1324 | } | |
1310 | 1325 | ||
1311 | 1326 | ||
1312 | - | func | |
1313 | - | let bb = toString( | |
1314 | - | let | |
1315 | - | let | |
1316 | - | let cA = toString( | |
1317 | - | let fd = toInt(( | |
1318 | - | let eC = fb( | |
1319 | - | let | |
1320 | - | let | |
1321 | - | let aE = calculateAssetId( | |
1322 | - | let | |
1323 | - | $Tuple2([IntegerEntry(cy(), ( | |
1324 | - | } | |
1325 | - | ||
1326 | - | ||
1327 | - | func | |
1327 | + | func gG (gH,gI) = { | |
1328 | + | let bb = toString(gH) | |
1329 | + | let gJ = eU(toBigInt(gI)) | |
1330 | + | let gK = valueOrElse(getInteger(cy()), (cx + 1)) | |
1331 | + | let cA = toString(gK) | |
1332 | + | let fd = toInt((gJ % cr)) | |
1333 | + | let eC = fb(gJ, fd) | |
1334 | + | let gL = ai[fd] | |
1335 | + | let gM = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gL], "_"), 1, 0, false) | |
1336 | + | let aE = calculateAssetId(gM) | |
1337 | + | let gN = toBase58String(aE) | |
1338 | + | $Tuple2([IntegerEntry(cy(), (gK + 1)), gM, StringEntry(cz(cA), gN), StringEntry(aD(gN), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gN), 0), IntegerEntry(cD(gN, bb), 0), ScriptTransfer(gH, 1, aE)], $Tuple2(gN, gL)) | |
1339 | + | } | |
1340 | + | ||
1341 | + | ||
1342 | + | func gO (bb,gP,gQ) = if (!(sigVerify_8Kb(gP, gQ, cj))) | |
1328 | 1343 | then throw("signature does not match") | |
1329 | 1344 | else { | |
1330 | - | let dv = split(toUtf8String( | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | if (if (( | |
1345 | + | let dv = split(toUtf8String(gP), ";") | |
1346 | + | let gR = split(dv[0], "|") | |
1347 | + | let gS = split(gR[cM], "_") | |
1348 | + | let gT = parseIntValue(gS[0]) | |
1349 | + | let gU = parseIntValue(gS[1]) | |
1350 | + | let gV = split(dv[1], ":") | |
1351 | + | let gW = gV[0] | |
1352 | + | let gX = parseIntValue(gR[cN]) | |
1353 | + | if (if ((gX > (lastBlock.timestamp + cl))) | |
1339 | 1354 | then true | |
1340 | - | else ((lastBlock.timestamp - cl) > | |
1341 | - | then throw(((("signature outdated: logTime=" + toString( | |
1355 | + | else ((lastBlock.timestamp - cl) > gX)) | |
1356 | + | then throw(((("signature outdated: logTime=" + toString(gX)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1342 | 1357 | else { | |
1343 | - | let | |
1344 | - | let | |
1345 | - | if (( | |
1346 | - | then throw(((("Tx ids don't match! In state: " + | |
1358 | + | let gY = gV[1] | |
1359 | + | let gZ = valueOrElse(getString(aC(bb)), "") | |
1360 | + | if ((gZ != gY)) | |
1361 | + | then throw(((("Tx ids don't match! In state: " + gZ) + ", in msg: ") + gY)) | |
1347 | 1362 | else { | |
1348 | 1363 | let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked") | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | if (( | |
1353 | - | then throw(((("oldHealth=" + toString( | |
1354 | - | else if ((0 >= | |
1364 | + | let ha = q(r) | |
1365 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
1366 | + | let hc = valueOrElse(getInteger(ha), hb) | |
1367 | + | if ((hc != gT)) | |
1368 | + | then throw(((("oldHealth=" + toString(hc)) + " from state does not match one from flight log=") + toString(gT))) | |
1369 | + | else if ((0 >= gT)) | |
1355 | 1370 | then throw("You can't fly with zero health") | |
1356 | 1371 | else { | |
1357 | - | let | |
1358 | - | then | |
1372 | + | let hd = if ((size(gR) > cO)) | |
1373 | + | then gR[cO] | |
1359 | 1374 | else "" | |
1360 | - | let | |
1361 | - | then | |
1375 | + | let he = if ((size(gR) > cP)) | |
1376 | + | then gR[cP] | |
1362 | 1377 | else "" | |
1363 | - | let | |
1364 | - | then ( | |
1378 | + | let hf = if (if ((gU > 0)) | |
1379 | + | then (hd == "$") | |
1365 | 1380 | else false) | |
1366 | 1381 | then cc(invoke(bL, "sendUsdtPrize", [bb], nil)) | |
1367 | 1382 | else 0 | |
1368 | - | $Tuple5( | |
1383 | + | $Tuple5(gU, r, hf, gW, he) | |
1369 | 1384 | } | |
1370 | 1385 | } | |
1371 | 1386 | } | |
1372 | 1387 | } | |
1373 | 1388 | ||
1374 | 1389 | ||
1375 | - | func | |
1376 | - | let bb = toString( | |
1377 | - | let fe = | |
1390 | + | func hg (gH,gI,gP,gQ) = { | |
1391 | + | let bb = toString(gH) | |
1392 | + | let fe = gO(bb, gP, gQ) | |
1378 | 1393 | let r = fe._2 | |
1379 | - | let | |
1380 | - | let | |
1381 | - | let | |
1382 | - | let | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1394 | + | let ha = q(r) | |
1395 | + | let fD = aX(r) | |
1396 | + | let gl = fC(fD) | |
1397 | + | let hh = split(gl[aA], "_") | |
1398 | + | let hi = makeString(dj(true, hh, cp), "_") | |
1399 | + | let hj = w(r) | |
1400 | + | let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1401 | + | let hl = dq(hk, fe._5) | |
1387 | 1402 | if ((0 >= fe._1)) | |
1388 | - | then $Tuple3([IntegerEntry( | |
1403 | + | then $Tuple3([IntegerEntry(ha, 0), StringEntry(hj, hl)], "", 0) | |
1389 | 1404 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | $Tuple3((((( | |
1393 | - | } | |
1394 | - | } | |
1395 | - | ||
1396 | - | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | ((ab + fraction(ab, (( | |
1403 | - | } | |
1404 | - | ||
1405 | - | ||
1406 | - | func | |
1407 | - | let | |
1408 | - | then $Tuple2( | |
1405 | + | let hm = gG(gH, gI) | |
1406 | + | let gN = hm._2._1 | |
1407 | + | $Tuple3(((((hm._1 :+ StringEntry(aY(r), makeString([hm._2._2, "L", gN], "_"))) :+ IntegerEntry(ha, fe._1)) :+ StringEntry(hj, hl)) :+ StringEntry(fD, makeString([gl[ay], gl[az], hi, gl[aB]], ":"))), gN, fe._3) | |
1408 | + | } | |
1409 | + | } | |
1410 | + | ||
1411 | + | ||
1412 | + | func hn (aO,ho) = { | |
1413 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1414 | + | let hp = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1415 | + | let hq = (fU / 6) | |
1416 | + | let hr = (fU / 7) | |
1417 | + | ((ab + fraction(ab, ((fU + hq) + (2 * hr)), 5)) + fraction(ab, hp, (ho * 5))) | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | func hs (b,ht,hu) = { | |
1422 | + | let hv = if ((ht == cJ)) | |
1423 | + | then $Tuple2(hu, valueOrElse(getString(aW(b)), "")) | |
1409 | 1424 | else { | |
1410 | 1425 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1411 | - | let | |
1412 | - | let | |
1413 | - | if (( | |
1414 | - | then throw((("Duck location type is " + | |
1415 | - | else $Tuple2( | |
1416 | - | } | |
1417 | - | let aO = | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | if (( | |
1426 | + | let hw = valueOrElse(getString(aY(r)), ae) | |
1427 | + | let hx = split(value(hw), "_") | |
1428 | + | if ((hx[bd] != "L")) | |
1429 | + | then throw((("Duck location type is " + hx[bd]) + ", but should be L")) | |
1430 | + | else $Tuple2(hx[be], r) | |
1431 | + | } | |
1432 | + | let aO = hv._1 | |
1433 | + | let hy = hv._2 | |
1434 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
1435 | + | let hA = aG(aO) | |
1436 | + | let hB = valueOrErrorMessage(getInteger(hA), (("Land " + hz.name) + " is not staked")) | |
1437 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
1438 | + | if ((hC != b)) | |
1424 | 1439 | then throw((X + " is not yours")) | |
1425 | 1440 | else { | |
1426 | - | let | |
1427 | - | $Tuple4( | |
1428 | - | } | |
1429 | - | } | |
1430 | - | ||
1431 | - | ||
1432 | - | func | |
1441 | + | let hD = split(hz.description, "_") | |
1442 | + | $Tuple4(hy, aO, hD, hB) | |
1443 | + | } | |
1444 | + | } | |
1445 | + | ||
1446 | + | ||
1447 | + | func hE (b,gh,ht,hu) = if ((0 > gh)) | |
1433 | 1448 | then throw("Negative amount") | |
1434 | 1449 | else { | |
1435 | - | let eb = | |
1450 | + | let eb = hs(b, ht, hu) | |
1436 | 1451 | let cf = eb._3[bQ] | |
1437 | 1452 | let ev = eB(eb._3[bR]) | |
1438 | 1453 | let eF = (lastBlock.timestamp - eb._4) | |
1439 | 1454 | if ((0 > eF)) | |
1440 | 1455 | then throw(((("Saved timestamp is in future, saved = " + toString(eb._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1441 | 1456 | else { | |
1442 | - | let | |
1443 | - | let | |
1444 | - | let | |
1445 | - | if (( | |
1446 | - | then throw(((("Not enough resources, available = " + toString( | |
1457 | + | let ho = ce(cf) | |
1458 | + | let hF = hn(eb._2, ho) | |
1459 | + | let hG = fraction(eF, (hF * ho), ac) | |
1460 | + | if ((gh > hG)) | |
1461 | + | then throw(((("Not enough resources, available = " + toString(hG)) + ", requested = ") + toString(gh))) | |
1447 | 1462 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | let | |
1451 | - | let eN = eJ(ev, (eF - | |
1452 | - | let | |
1453 | - | let | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let eO = parseIntValue( | |
1457 | - | if (if (( | |
1458 | - | then ( | |
1463 | + | let hH = fraction((hG - gh), ac, (hF * ho)) | |
1464 | + | let hI = (lastBlock.timestamp - hH) | |
1465 | + | let fT = (ho / br) | |
1466 | + | let eN = eJ(ev, (eF - hH), fT, hF) | |
1467 | + | let fS = aN(eb._2) | |
1468 | + | let fU = valueOrElse(getInteger(aH(eb._2)), 0) | |
1469 | + | let fI = fR(fS, fT, fU) | |
1470 | + | let ga = split(fI[at], "_") | |
1471 | + | let eO = parseIntValue(ga[aw]) | |
1472 | + | if (if ((ht == cJ)) | |
1473 | + | then (gh > eO) | |
1459 | 1474 | else false) | |
1460 | 1475 | then throw((("Only " + toString(eO)) + " space left in warehouse")) | |
1461 | 1476 | else { | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let eM = split( | |
1465 | - | let eL = split( | |
1466 | - | let | |
1467 | - | then $Tuple4(eD(eL, ev, (eF - | |
1468 | - | else if (( | |
1469 | - | then $Tuple4( | |
1477 | + | let fD = aX(eb._1) | |
1478 | + | let gl = fC(fD) | |
1479 | + | let eM = split(gl[az], "_") | |
1480 | + | let eL = split(fI[aq], "_") | |
1481 | + | let hJ = if ((ht == cJ)) | |
1482 | + | then $Tuple4(eD(eL, ev, (eF - hH), fT, hF), gl[az], (parseIntValue(ga[av]) + eN._2), (parseIntValue(ga[aw]) - eN._2)) | |
1483 | + | else if ((ht == cK)) | |
1484 | + | then $Tuple4(fI[aq], eD(eM, ev, (eF - hH), fT, hF), parseIntValue(ga[av]), parseIntValue(ga[aw])) | |
1470 | 1485 | else { | |
1471 | - | let | |
1472 | - | let | |
1473 | - | $Tuple4( | |
1486 | + | let hK = eK(eL, eM, eN, eO) | |
1487 | + | let hL = min([parseIntValue(ga[aw]), eN._2]) | |
1488 | + | $Tuple4(hK._1, hK._2, (parseIntValue(ga[av]) + hL), (parseIntValue(ga[aw]) - hL)) | |
1474 | 1489 | } | |
1475 | - | let | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1479 | - | $Tuple5([IntegerEntry(aG(eb._2), | |
1490 | + | let hM = hJ._1 | |
1491 | + | let hN = hJ._2 | |
1492 | + | let hO = hJ._3 | |
1493 | + | let hP = hJ._4 | |
1494 | + | $Tuple5([IntegerEntry(aG(eb._2), hI), IntegerEntry(aK(X, eb._2, b), hI)], fD, [gl[ay], hN, gl[aA], gl[aB]], fS, [fI[ap], hM, fI[ar], fI[as], makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")]) | |
1480 | 1495 | } | |
1481 | 1496 | } | |
1482 | 1497 | } | |
1483 | 1498 | } | |
1484 | 1499 | ||
1485 | 1500 | ||
1486 | - | func | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | | |
1491 | - | } | |
1492 | - | ||
1493 | - | ||
1494 | - | func | |
1495 | - | let b = toString( | |
1496 | - | let eb = | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | if (( | |
1501 | + | func hQ (b,aO,ho,ht) = { | |
1502 | + | let hA = aG(aO) | |
1503 | + | let hB = value(getInteger(hA)) | |
1504 | + | let hG = (fraction((lastBlock.timestamp - hB), hn(aO, ho), ac) * ho) | |
1505 | + | hE(b, hG, ht, aO) | |
1506 | + | } | |
1507 | + | ||
1508 | + | ||
1509 | + | func hR (dk,gH,hS,aO) = { | |
1510 | + | let b = toString(gH) | |
1511 | + | let eb = hs(b, cL, aO) | |
1512 | + | let ho = ce(eb._3[bQ]) | |
1513 | + | let hT = aH(eb._2) | |
1514 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1515 | + | if ((hU >= 3)) | |
1501 | 1516 | then throw("Currently max infrastructure level = 3") | |
1502 | 1517 | else { | |
1503 | - | let R = ( | |
1504 | - | let | |
1518 | + | let R = (hU + 1) | |
1519 | + | let hV = fraction(co, (ho * R), br) | |
1505 | 1520 | if (if (!(dk)) | |
1506 | - | then ( | |
1521 | + | then (hS != hV) | |
1507 | 1522 | else false) | |
1508 | - | then throw(("Payment attached should be " + toString( | |
1523 | + | then throw(("Payment attached should be " + toString(hV))) | |
1509 | 1524 | else { | |
1510 | - | let | |
1511 | - | let | |
1512 | - | let | |
1513 | - | let | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | let | |
1522 | - | $Tuple3(([IntegerEntry( | |
1525 | + | let fD = aX(eb._1) | |
1526 | + | let gl = fC(fD) | |
1527 | + | let hh = split(gl[aA], "_") | |
1528 | + | let hW = fraction(bm, (ho * R), br) | |
1529 | + | let hi = makeString(dj(dk, hh, hW), "_") | |
1530 | + | let hX = hQ(b, eb._2, ho, cL) | |
1531 | + | let hY = hX._5 | |
1532 | + | let hZ = fF(hY[ap]) | |
1533 | + | let ia = makeString([split(hY[ap], "_")[0], toString(R)], "_") | |
1534 | + | let ib = fF(ia) | |
1535 | + | let ga = split(hY[at], "_") | |
1536 | + | let ic = makeString([ga[au], ga[av], toString(((parseIntValue(ga[aw]) + ib) - hZ)), toString(ib)], "_") | |
1537 | + | $Tuple3(([IntegerEntry(hT, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fD, makeString([gl[ay], hX._3[az], hi, gl[aB]], ":")), StringEntry(hX._4, makeString([ia, hY[aq], hY[ar], hY[as], ic], ":"))] ++ hX._1), R, hW) | |
1523 | 1538 | } | |
1524 | 1539 | } | |
1525 | 1540 | } | |
1526 | 1541 | ||
1527 | 1542 | ||
1528 | - | func | |
1543 | + | func id (r,ie) = if (!(bh)) | |
1529 | 1544 | then $Tuple2(nil, 0) | |
1530 | 1545 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let L = valueOrElse(getInteger(T, | |
1534 | - | let Q = (L + | |
1535 | - | let | |
1536 | - | let | |
1537 | - | $Tuple2([IntegerEntry( | |
1538 | - | } | |
1539 | - | ||
1540 | - | ||
1541 | - | func | |
1546 | + | let if = u(r) | |
1547 | + | let ig = t(r) | |
1548 | + | let L = valueOrElse(getInteger(T, ig), 0) | |
1549 | + | let Q = (L + ie) | |
1550 | + | let ih = O(valueOrElse(getInteger(T, if), 0), Q) | |
1551 | + | let ii = v(r) | |
1552 | + | $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q) | |
1553 | + | } | |
1554 | + | ||
1555 | + | ||
1556 | + | func ij (b,ie) = if (!(bh)) | |
1542 | 1557 | then $Tuple2(nil, 0) | |
1543 | 1558 | else { | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let L = valueOrElse(getInteger(T, | |
1547 | - | let Q = (L + | |
1548 | - | let | |
1549 | - | let | |
1550 | - | $Tuple2([IntegerEntry( | |
1551 | - | } | |
1552 | - | ||
1553 | - | ||
1554 | - | func | |
1559 | + | let if = y(b) | |
1560 | + | let ig = x(b) | |
1561 | + | let L = valueOrElse(getInteger(T, ig), 0) | |
1562 | + | let Q = (L + ie) | |
1563 | + | let ih = O(valueOrElse(getInteger(T, if), 0), Q) | |
1564 | + | let ii = z(b) | |
1565 | + | $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q) | |
1566 | + | } | |
1567 | + | ||
1568 | + | ||
1569 | + | func ik (b) = { | |
1555 | 1570 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1556 | - | let | |
1557 | - | let | |
1558 | - | if (!(isDefined( | |
1571 | + | let il = aR(b) | |
1572 | + | let im = getString(il) | |
1573 | + | if (!(isDefined(im))) | |
1559 | 1574 | then throw("You are not eligible for ONBOARD artifact") | |
1560 | 1575 | else { | |
1561 | - | let | |
1562 | - | let | |
1563 | - | if (isDefined( | |
1564 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1576 | + | let in = aT(b) | |
1577 | + | let io = getString(in) | |
1578 | + | if (isDefined(io)) | |
1579 | + | then throw(("You already used your ONBOARD artifact on duck " + value(io))) | |
1565 | 1580 | else { | |
1566 | - | let | |
1567 | - | let | |
1568 | - | if (isDefined( | |
1569 | - | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value( | |
1570 | - | else ([StringEntry( | |
1581 | + | let ip = aS(r) | |
1582 | + | let iq = getString(ip) | |
1583 | + | if (isDefined(iq)) | |
1584 | + | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(iq))) | |
1585 | + | else ([StringEntry(in, r), StringEntry(ip, b)] ++ id(r, I)._1) | |
1571 | 1586 | } | |
1572 | 1587 | } | |
1573 | 1588 | } | |
1574 | 1589 | ||
1575 | 1590 | ||
1576 | - | func | |
1577 | - | let eb = | |
1591 | + | func ir (b,hu) = { | |
1592 | + | let eb = hs(b, cL, hu) | |
1578 | 1593 | let aO = eb._2 | |
1579 | - | let | |
1580 | - | let | |
1581 | - | if ((valueOrElse(getInteger( | |
1594 | + | let ho = ce(eb._3[bQ]) | |
1595 | + | let is = aI(Z, aO) | |
1596 | + | if ((valueOrElse(getInteger(is), 0) > 0)) | |
1582 | 1597 | then throw("Presale artifact is already activated") | |
1583 | 1598 | else if ((parseIntValue(eb._3[bP]) > cx)) | |
1584 | 1599 | then throw((((X + " ") + aO) + " is not eligible for presale artifact")) | |
1585 | 1600 | else { | |
1586 | - | let | |
1587 | - | (((( | |
1601 | + | let hX = hQ(b, aO, ho, cL) | |
1602 | + | ((((hX._1 :+ IntegerEntry(is, ho)) :+ IntegerEntry(cE(Z, aO, b), ho)) :+ StringEntry(hX._2, makeString(hX._3, ":"))) :+ StringEntry(hX._4, makeString(hX._5, ":"))) | |
1588 | 1603 | } | |
1589 | 1604 | } | |
1590 | 1605 | ||
1591 | 1606 | ||
1592 | - | func | |
1607 | + | func it (iu,R,iv,b,iw,gI,ix) = { | |
1593 | 1608 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1594 | - | func | |
1595 | - | let | |
1596 | - | let | |
1597 | - | let | |
1598 | - | let | |
1599 | - | if (( | |
1609 | + | func iy (cX,aO) = { | |
1610 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
1611 | + | let hA = aG(aO) | |
1612 | + | let hB = valueOrErrorMessage(getInteger(hA), (("NFT " + hz.name) + " is not staked")) | |
1613 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
1614 | + | if ((hC != b)) | |
1600 | 1615 | then throw((X + " is not yours")) | |
1601 | 1616 | else { | |
1602 | - | let | |
1603 | - | let | |
1617 | + | let hD = split(hz.description, "_") | |
1618 | + | let gL = hD[bS] | |
1604 | 1619 | if (if ((cX._3 != "")) | |
1605 | - | then (cX._3 != | |
1620 | + | then (cX._3 != gL) | |
1606 | 1621 | else false) | |
1607 | 1622 | then throw("Lands should be on the same continent to merge") | |
1608 | 1623 | else { | |
1609 | - | let cf = | |
1610 | - | let | |
1611 | - | let ez = valueOrErrorMessage(indexOf( | |
1612 | - | let | |
1613 | - | let | |
1614 | - | let | |
1615 | - | let | |
1616 | - | let | |
1624 | + | let cf = hD[bQ] | |
1625 | + | let iz = cX._1 | |
1626 | + | let ez = valueOrErrorMessage(indexOf(iz, cf), "You haven't passed all the lands needed") | |
1627 | + | let iA = (take(iz, ez) + drop(iz, (ez + 1))) | |
1628 | + | let ho = ce(cf) | |
1629 | + | let iB = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0)) | |
1630 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1631 | + | let iC = { | |
1617 | 1632 | let bk = cf | |
1618 | 1633 | if (("S" == bk)) | |
1619 | 1634 | then 3 | |
1625 | 1640 | then 6 | |
1626 | 1641 | else throw("Only S, M, L, XL can merge") | |
1627 | 1642 | } | |
1628 | - | if (( | |
1643 | + | if ((fU != iC)) | |
1629 | 1644 | then throw("All lands should be maxed to merge") | |
1630 | 1645 | else { | |
1631 | - | let cA = | |
1632 | - | let ev = eB( | |
1633 | - | let eF = (lastBlock.timestamp - | |
1646 | + | let cA = hD[bP] | |
1647 | + | let ev = eB(hD[bR]) | |
1648 | + | let eF = (lastBlock.timestamp - hB) | |
1634 | 1649 | if ((0 > eF)) | |
1635 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1650 | + | then throw(((("Saved timestamp is in future, saved = " + toString(hB)) + ", current = ") + toString(lastBlock.timestamp))) | |
1636 | 1651 | else { | |
1637 | - | let | |
1638 | - | let | |
1639 | - | let | |
1640 | - | let dh = et(cX._6, ev, | |
1641 | - | let | |
1642 | - | let | |
1643 | - | let bK = indexOf( | |
1652 | + | let hF = hn(aO, ho) | |
1653 | + | let fT = (ho / br) | |
1654 | + | let hN = eD(split(cX._4, "_"), ev, eF, fT, hF) | |
1655 | + | let dh = et(cX._6, ev, fT, -1) | |
1656 | + | let fk = et(cX._9, ev, fT, 1) | |
1657 | + | let iD = cX._7 | |
1658 | + | let bK = indexOf(iD, aO) | |
1644 | 1659 | if (!(isDefined(bK))) | |
1645 | 1660 | then throw(("Your staked lands don't contain " + aO)) | |
1646 | 1661 | else { | |
1647 | - | let | |
1648 | - | let | |
1649 | - | $Tuple9( | |
1662 | + | let iE = aF(aO) | |
1663 | + | let iF = valueOrElse(getString(iE), "") | |
1664 | + | $Tuple9(iA, iB, gL, hN, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iE)) :+ DeleteEntry(cB(iF))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iD, value(bK)), (cX._8 + ho), fk) | |
1650 | 1665 | } | |
1651 | 1666 | } | |
1652 | 1667 | } | |
1654 | 1669 | } | |
1655 | 1670 | } | |
1656 | 1671 | ||
1657 | - | let | |
1658 | - | let | |
1672 | + | let fD = aX(r) | |
1673 | + | let gl = fC(fD) | |
1659 | 1674 | let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_") | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | then split_51C(value( | |
1675 | + | let iG = bX(b) | |
1676 | + | let iH = getString(iG) | |
1677 | + | let iI = if (isDefined(iH)) | |
1678 | + | then split_51C(value(iH), "_") | |
1664 | 1679 | else nil | |
1665 | 1680 | let di = { | |
1666 | - | let cZ = | |
1681 | + | let cZ = iw | |
1667 | 1682 | let da = size(cZ) | |
1668 | - | let db = $Tuple9( | |
1683 | + | let db = $Tuple9(iv, 0, "", gl[az], nil, eu, iI, 0, split("0_0_0_0_0_0", "_")) | |
1669 | 1684 | func dc (dd,de) = if ((de >= da)) | |
1670 | 1685 | then dd | |
1671 | - | else | |
1686 | + | else iy(dd, cZ[de]) | |
1672 | 1687 | ||
1673 | 1688 | func df (dd,de) = if ((de >= da)) | |
1674 | 1689 | then dd | |
1676 | 1691 | ||
1677 | 1692 | df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5) | |
1678 | 1693 | } | |
1679 | - | let | |
1680 | - | let fd = valueOrErrorMessage(indexOf(ai, | |
1681 | - | let eC = | |
1682 | - | let | |
1683 | - | let | |
1684 | - | let | |
1685 | - | let aE = calculateAssetId( | |
1686 | - | let | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let | |
1694 | + | let gL = di._3 | |
1695 | + | let fd = valueOrErrorMessage(indexOf(ai, gL), ("Unknown continent: " + gL)) | |
1696 | + | let eC = fj(di._9, (ce(iu) / br)) | |
1697 | + | let gK = valueOrElse(getInteger(cy()), (cx + 1)) | |
1698 | + | let iJ = toString(gK) | |
1699 | + | let gM = Issue(cQ(iJ, iu), makeString([iJ, iu, eC, gL], "_"), 1, 0, false) | |
1700 | + | let aE = calculateAssetId(gM) | |
1701 | + | let iK = toBase58String(aE) | |
1702 | + | let hi = makeString(dj((ix > 0), split(gl[aA], "_"), ix), "_") | |
1703 | + | let iL = bY(b) | |
1704 | + | let iM = valueOrElse(getInteger(iL), 0) | |
1690 | 1705 | $Tuple2((((((((((((((((di._5 :+ (if ((size(di._7) > 0)) | |
1691 | - | then StringEntry( | |
1692 | - | else DeleteEntry( | |
1706 | + | then StringEntry(iG, makeString_11C(di._7, "_")) | |
1707 | + | else DeleteEntry(iG))) :+ IntegerEntry(iL, if ((di._8 > iM)) | |
1693 | 1708 | then 0 | |
1694 | - | else ( | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | func | |
1699 | - | ||
1700 | - | ||
1701 | - | func | |
1702 | - | let | |
1709 | + | else (iM - di._8))) :+ IntegerEntry(cy(), (gK + 1))) :+ gM) :+ StringEntry(cz(iJ), iK)) :+ StringEntry(aD(iK), b)) :+ StringEntry(cF(iJ), b)) :+ IntegerEntry(aI(Z, iK), di._2)) :+ IntegerEntry(cE(Z, iK, b), di._2)) :+ IntegerEntry(aH(iK), R)) :+ IntegerEntry(cD(iK, b), R)) :+ StringEntry(fD, makeString([gl[ay], di._4, hi, gl[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gL, "L", iK], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iK) | |
1710 | + | } | |
1711 | + | ||
1712 | + | ||
1713 | + | func iN (b,iw,gI) = it("M", 3, "SSSS", b, iw, gI, 0) | |
1714 | + | ||
1715 | + | ||
1716 | + | func iO (b,iw,gI,dk,hS) = { | |
1717 | + | let hV = (co * 4) | |
1703 | 1718 | if (if (!(dk)) | |
1704 | - | then ( | |
1719 | + | then (hS != hV) | |
1705 | 1720 | else false) | |
1706 | - | then throw(("Payment attached should be " + toString( | |
1707 | - | else | |
1708 | - | } | |
1709 | - | ||
1710 | - | ||
1711 | - | func | |
1712 | - | let | |
1721 | + | then throw(("Payment attached should be " + toString(hV))) | |
1722 | + | else it("L", 4, "SMM", b, iw, gI, (bm * 4)) | |
1723 | + | } | |
1724 | + | ||
1725 | + | ||
1726 | + | func iP (b,iw,gI,dk,hS) = { | |
1727 | + | let hV = (co * 47) | |
1713 | 1728 | if (if (!(dk)) | |
1714 | - | then ( | |
1729 | + | then (hS != hV) | |
1715 | 1730 | else false) | |
1716 | - | then throw(("Payment attached should be " + toString( | |
1717 | - | else | |
1718 | - | } | |
1719 | - | ||
1720 | - | ||
1721 | - | func | |
1722 | - | let | |
1731 | + | then throw(("Payment attached should be " + toString(hV))) | |
1732 | + | else it("XL", 5, "SSSML", b, iw, gI, (bm * 47)) | |
1733 | + | } | |
1734 | + | ||
1735 | + | ||
1736 | + | func iQ (b,iw,gI,dk,hS) = { | |
1737 | + | let hV = (co * 54) | |
1723 | 1738 | if (if (!(dk)) | |
1724 | - | then ( | |
1739 | + | then (hS != hV) | |
1725 | 1740 | else false) | |
1726 | - | then throw(("Payment attached should be " + toString( | |
1727 | - | else | |
1728 | - | } | |
1729 | - | ||
1730 | - | ||
1731 | - | func | |
1732 | - | let | |
1733 | - | let bk = size( | |
1741 | + | then throw(("Payment attached should be " + toString(hV))) | |
1742 | + | else it("XXL", 6, "LXL", b, iw, gI, (bm * 54)) | |
1743 | + | } | |
1744 | + | ||
1745 | + | ||
1746 | + | func iR (dk,b,hS,iw,gI) = { | |
1747 | + | let iS = { | |
1748 | + | let bk = size(iw) | |
1734 | 1749 | if ((4 == bk)) | |
1735 | - | then | |
1750 | + | then iN(b, iw, gI) | |
1736 | 1751 | else if ((3 == bk)) | |
1737 | - | then | |
1752 | + | then iO(b, iw, gI, dk, hS) | |
1738 | 1753 | else if ((5 == bk)) | |
1739 | - | then | |
1754 | + | then iP(b, iw, gI, dk, hS) | |
1740 | 1755 | else if ((2 == bk)) | |
1741 | - | then | |
1756 | + | then iQ(b, iw, gI, dk, hS) | |
1742 | 1757 | else throw("Unknown merge") | |
1743 | 1758 | } | |
1744 | - | | |
1745 | - | } | |
1746 | - | ||
1747 | - | ||
1748 | - | func | |
1759 | + | iS | |
1760 | + | } | |
1761 | + | ||
1762 | + | ||
1763 | + | func iT (ez) = if (if ((ez.originCaller != bL)) | |
1749 | 1764 | then valueOrElse(getBoolean(aZ()), false) | |
1750 | 1765 | else false) | |
1751 | 1766 | then throw("Contracts are under maintenance") | |
1753 | 1768 | ||
1754 | 1769 | ||
1755 | 1770 | @Callable(ez) | |
1756 | - | func constructorV1 ( | |
1771 | + | func constructorV1 (iU) = if ((ez.caller != this)) | |
1757 | 1772 | then throw("Permission denied") | |
1758 | - | else [StringEntry(bF(), | |
1759 | - | ||
1760 | - | ||
1761 | - | ||
1762 | - | @Callable(ez) | |
1763 | - | func setBlocked ( | |
1773 | + | else [StringEntry(bF(), iU)] | |
1774 | + | ||
1775 | + | ||
1776 | + | ||
1777 | + | @Callable(ez) | |
1778 | + | func setBlocked (iV) = if ((ez.caller != this)) | |
1764 | 1779 | then throw("permission denied") | |
1765 | - | else [BooleanEntry(aZ(), | |
1780 | + | else [BooleanEntry(aZ(), iV)] | |
1766 | 1781 | ||
1767 | 1782 | ||
1768 | 1783 | ||
1769 | 1784 | @Callable(ez) | |
1770 | 1785 | func stakeLand () = { | |
1771 | - | let | |
1786 | + | let iW = iT(ez) | |
1772 | 1787 | if ((size(ez.payments) != 1)) | |
1773 | 1788 | then throw("Exactly one payment required") | |
1774 | 1789 | else { | |
1775 | - | let | |
1776 | - | let aE = value( | |
1790 | + | let iX = value(ez.payments[0]) | |
1791 | + | let aE = value(iX.assetId) | |
1777 | 1792 | let by = toString(ez.caller) | |
1778 | - | if (( | |
1793 | + | if ((iX.amount != 1)) | |
1779 | 1794 | then throw((("NFT " + X) + " token should be attached as payment")) | |
1780 | 1795 | else { | |
1781 | - | let | |
1782 | - | if (( | |
1796 | + | let hz = value(assetInfo(aE)) | |
1797 | + | if ((hz.issuer != this)) | |
1783 | 1798 | then throw("Unknown issuer of token") | |
1784 | - | else if (!(contains( | |
1799 | + | else if (!(contains(hz.name, X))) | |
1785 | 1800 | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1786 | 1801 | else { | |
1787 | - | let | |
1788 | - | let cA = if (contains( | |
1789 | - | then dropRight( | |
1790 | - | else if (contains( | |
1791 | - | then dropRight( | |
1792 | - | else dropRight( | |
1802 | + | let iY = drop(hz.name, 4) | |
1803 | + | let cA = if (contains(iY, "XXL")) | |
1804 | + | then dropRight(iY, 3) | |
1805 | + | else if (contains(iY, "XL")) | |
1806 | + | then dropRight(iY, 2) | |
1807 | + | else dropRight(iY, 1) | |
1793 | 1808 | if (!(isDefined(parseInt(cA)))) | |
1794 | - | then throw(("Cannot parse land number from " + | |
1809 | + | then throw(("Cannot parse land number from " + hz.name)) | |
1795 | 1810 | else { | |
1796 | 1811 | let aO = toBase58String(aE) | |
1797 | - | let | |
1798 | - | if (isDefined(getInteger( | |
1799 | - | then throw((("NFT " + | |
1812 | + | let hA = aG(aO) | |
1813 | + | if (isDefined(getInteger(hA))) | |
1814 | + | then throw((("NFT " + hz.name) + " is already staked")) | |
1800 | 1815 | else { | |
1801 | - | let | |
1802 | - | let ev = eB( | |
1803 | - | let | |
1804 | - | let dh = eA(ev, ( | |
1805 | - | let | |
1806 | - | let | |
1807 | - | let | |
1808 | - | let | |
1809 | - | then split_51C(value( | |
1816 | + | let hD = split(hz.description, "_") | |
1817 | + | let ev = eB(hD[bR]) | |
1818 | + | let ho = ce(hD[bQ]) | |
1819 | + | let dh = eA(ev, (ho / br), 1) | |
1820 | + | let hp = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1821 | + | let iG = bX(by) | |
1822 | + | let iH = getString(iG) | |
1823 | + | let iD = if (isDefined(iH)) | |
1824 | + | then split_51C(value(iH), "_") | |
1810 | 1825 | else nil | |
1811 | - | if (containsElement( | |
1826 | + | if (containsElement(iD, aO)) | |
1812 | 1827 | then throw(("Your staked lands already contain " + aO)) | |
1813 | 1828 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | $Tuple2([IntegerEntry( | |
1829 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1830 | + | let iL = bY(by) | |
1831 | + | let iZ = valueOrElse(getInteger(iL), 0) | |
1832 | + | let ja = cc(invoke(bO, "onStakeUnstakeLand", [by], nil)) | |
1833 | + | $Tuple2([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iG, makeString_11C((iD :+ aO), "_")), IntegerEntry(iL, (iZ + ho)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hp), IntegerEntry(cD(aO, by), fU), StringEntry(bW(), dh), iW], ja) | |
1819 | 1834 | } | |
1820 | 1835 | } | |
1821 | 1836 | } | |
1827 | 1842 | ||
1828 | 1843 | ||
1829 | 1844 | @Callable(ez) | |
1830 | - | func unstakeLand ( | |
1831 | - | let | |
1845 | + | func unstakeLand (hu) = { | |
1846 | + | let iW = iT(ez) | |
1832 | 1847 | if ((size(ez.payments) != 0)) | |
1833 | 1848 | then throw("No payments required") | |
1834 | 1849 | else { | |
1835 | 1850 | let b = toString(ez.caller) | |
1836 | - | let eb = | |
1851 | + | let eb = hs(b, cK, hu) | |
1837 | 1852 | let aO = eb._2 | |
1838 | - | let | |
1853 | + | let iG = bX(b) | |
1839 | 1854 | let ev = eB(eb._3[bR]) | |
1840 | - | let | |
1841 | - | let dh = eA(ev, ( | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let bK = indexOf( | |
1855 | + | let ho = ce(eb._3[bQ]) | |
1856 | + | let dh = eA(ev, (ho / br), -1) | |
1857 | + | let hX = hQ(b, aO, ho, cK) | |
1858 | + | let iD = split_51C(valueOrElse(getString(iG), ""), "_") | |
1859 | + | let bK = indexOf(iD, aO) | |
1845 | 1860 | if (!(isDefined(bK))) | |
1846 | 1861 | then throw(("Your staked lands don't contain " + aO)) | |
1847 | 1862 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | if (( | |
1851 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1863 | + | let jb = lastBlock.timestamp | |
1864 | + | let jc = valueOrElse(getInteger(bN, ba(b)), 0) | |
1865 | + | if ((jc >= jb)) | |
1866 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(jc))) | |
1852 | 1867 | else { | |
1853 | - | let | |
1854 | - | if (( | |
1855 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1868 | + | let jd = (valueOrElse(getInteger(bO, a(b)), 0) + bn) | |
1869 | + | if ((jd > jb)) | |
1870 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(jd))) | |
1856 | 1871 | else { | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1872 | + | let iL = bY(b) | |
1873 | + | let iM = valueOrElse(getInteger(iL), 0) | |
1874 | + | let je = if ((ho > iM)) | |
1860 | 1875 | then 0 | |
1861 | - | else ( | |
1862 | - | let | |
1863 | - | $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry( | |
1864 | - | then StringEntry( | |
1865 | - | else DeleteEntry( | |
1876 | + | else (iM - ho) | |
1877 | + | let ja = cc(invoke(bO, "onStakeUnstakeLand", [b], nil)) | |
1878 | + | $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hX._2, makeString(hX._3, ":")), if ((size(iD) > 1)) | |
1879 | + | then StringEntry(iG, makeString_11C(removeByIndex(iD, value(bK)), "_")) | |
1880 | + | else DeleteEntry(iG), IntegerEntry(iL, je), iW], ja) | |
1866 | 1881 | } | |
1867 | 1882 | } | |
1868 | 1883 | } | |
1873 | 1888 | ||
1874 | 1889 | @Callable(ez) | |
1875 | 1890 | func stakeDuck () = { | |
1876 | - | let | |
1891 | + | let iW = iT(ez) | |
1877 | 1892 | if ((size(ez.payments) != 1)) | |
1878 | 1893 | then throw("Exactly one payment required") | |
1879 | 1894 | else { | |
1880 | - | let | |
1881 | - | let aE = value( | |
1895 | + | let iX = value(ez.payments[0]) | |
1896 | + | let aE = value(iX.assetId) | |
1882 | 1897 | let by = toString(ez.caller) | |
1883 | - | if (( | |
1898 | + | if ((iX.amount != 1)) | |
1884 | 1899 | then throw((("NFT " + Y) + " token should be attached as payment")) | |
1885 | 1900 | else { | |
1886 | - | let | |
1887 | - | if (if (( | |
1888 | - | then ( | |
1901 | + | let hz = value(assetInfo(aE)) | |
1902 | + | if (if ((hz.issuer != ch)) | |
1903 | + | then (hz.issuer != ci) | |
1889 | 1904 | else false) | |
1890 | 1905 | then throw((("Unknown issuer of " + Y) + " token")) | |
1891 | - | else if (!(contains( | |
1906 | + | else if (!(contains(hz.name, Y))) | |
1892 | 1907 | then throw((("Only NFT " + Y) + " tokens are accepted")) | |
1893 | 1908 | else { | |
1894 | - | let | |
1895 | - | let | |
1896 | - | if (isDefined(getInteger( | |
1897 | - | then throw((("NFT " + | |
1909 | + | let jf = toBase58String(aE) | |
1910 | + | let hA = aG(jf) | |
1911 | + | if (isDefined(getInteger(hA))) | |
1912 | + | then throw((("NFT " + hz.name) + " is already staked")) | |
1898 | 1913 | else if (isDefined(getString(aW(by)))) | |
1899 | - | then throw(("You already staked one duck: " + | |
1914 | + | then throw(("You already staked one duck: " + hz.name)) | |
1900 | 1915 | else { | |
1901 | - | let | |
1902 | - | let | |
1903 | - | let | |
1904 | - | let | |
1905 | - | let | |
1906 | - | let | |
1907 | - | let | |
1908 | - | ([IntegerEntry( | |
1916 | + | let jg = aY(jf) | |
1917 | + | let jh = getString(jg) | |
1918 | + | let fD = aX(jf) | |
1919 | + | let ji = getString(fD) | |
1920 | + | let ha = q(jf) | |
1921 | + | let hb = M(valueOrElse(getInteger(u(jf)), 0)) | |
1922 | + | let jj = valueOrElse(getInteger(ha), hb) | |
1923 | + | ([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jf), by), StringEntry(aW(by), jf)] ++ (if (isDefined(jh)) | |
1909 | 1924 | then nil | |
1910 | - | else ([StringEntry( | |
1925 | + | else ([StringEntry(jg, ae)] ++ (if (isDefined(ji)) | |
1911 | 1926 | then nil | |
1912 | - | else (([StringEntry( | |
1927 | + | else (([StringEntry(fD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ha, jj)) :+ iW))))) | |
1913 | 1928 | } | |
1914 | 1929 | } | |
1915 | 1930 | } | |
1919 | 1934 | ||
1920 | 1935 | ||
1921 | 1936 | @Callable(ez) | |
1922 | - | func unstakeDuck ( | |
1923 | - | let | |
1937 | + | func unstakeDuck (jf) = { | |
1938 | + | let iW = iT(ez) | |
1924 | 1939 | if ((size(ez.payments) != 0)) | |
1925 | 1940 | then throw("No payments required") | |
1926 | 1941 | else { | |
1927 | - | let aE = fromBase58String( | |
1942 | + | let aE = fromBase58String(jf) | |
1928 | 1943 | let by = toString(ez.caller) | |
1929 | - | let | |
1930 | - | let | |
1931 | - | if (!(isDefined(getInteger( | |
1932 | - | then throw((("NFT " + | |
1944 | + | let hz = value(assetInfo(aE)) | |
1945 | + | let hA = aG(toBase58String(aE)) | |
1946 | + | if (!(isDefined(getInteger(hA)))) | |
1947 | + | then throw((("NFT " + hz.name) + " is not staked")) | |
1933 | 1948 | else if (!(isDefined(getString(aW(by))))) | |
1934 | - | then throw((("The duck " + | |
1949 | + | then throw((("The duck " + hz.name) + " is not staked")) | |
1935 | 1950 | else { | |
1936 | - | let | |
1937 | - | if (( | |
1951 | + | let hC = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hz.name) + " is orphaned")) | |
1952 | + | if ((hC != by)) | |
1938 | 1953 | then throw("Staked NFT is not yours") | |
1939 | 1954 | else { | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let W = valueOrElse(getInteger( | |
1943 | - | if (( | |
1944 | - | then throw((("Please heal your duck to " + toString( | |
1945 | - | else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry( | |
1955 | + | let ha = q(jf) | |
1956 | + | let hb = M(valueOrElse(getInteger(u(jf)), 0)) | |
1957 | + | let W = valueOrElse(getInteger(ha), hb) | |
1958 | + | if ((hb > W)) | |
1959 | + | then throw((("Please heal your duck to " + toString(hb)) + "hp before unstaking")) | |
1960 | + | else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hA), DeleteEntry(ha), DeleteEntry(aY(jf)), DeleteEntry(aV(jf)), DeleteEntry(aK(Y, jf, by)), DeleteEntry(aW(by)), iW] | |
1946 | 1961 | } | |
1947 | 1962 | } | |
1948 | 1963 | } | |
1951 | 1966 | ||
1952 | 1967 | ||
1953 | 1968 | @Callable(ez) | |
1954 | - | func claimRes ( | |
1955 | - | let | |
1969 | + | func claimRes (gh,jk) = { | |
1970 | + | let iW = iT(ez) | |
1956 | 1971 | if ((size(ez.payments) != 0)) | |
1957 | 1972 | then throw("No payments required") | |
1958 | 1973 | else { | |
1959 | 1974 | let b = toString(ez.originCaller) | |
1960 | - | let dp = | |
1975 | + | let dp = hE(b, gh, cK, jk) | |
1961 | 1976 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1962 | - | $Tuple2(((((dp._1 ++ | |
1963 | - | } | |
1964 | - | } | |
1965 | - | ||
1966 | - | ||
1967 | - | ||
1968 | - | @Callable(ez) | |
1969 | - | func claimResToWH ( | |
1970 | - | let | |
1977 | + | $Tuple2(((((dp._1 ++ id(r, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._3[az]) | |
1978 | + | } | |
1979 | + | } | |
1980 | + | ||
1981 | + | ||
1982 | + | ||
1983 | + | @Callable(ez) | |
1984 | + | func claimResToWH (gh,jk) = { | |
1985 | + | let iW = iT(ez) | |
1971 | 1986 | if ((size(ez.payments) != 0)) | |
1972 | 1987 | then throw("No payments required") | |
1973 | 1988 | else { | |
1974 | 1989 | let b = toString(ez.originCaller) | |
1975 | - | let dp = | |
1976 | - | $Tuple2(((((dp._1 ++ | |
1977 | - | } | |
1978 | - | } | |
1979 | - | ||
1980 | - | ||
1981 | - | ||
1982 | - | @Callable(ez) | |
1983 | - | func flight ( | |
1984 | - | let | |
1990 | + | let dp = hE(b, gh, cJ, jk) | |
1991 | + | $Tuple2(((((dp._1 ++ ij(b, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._5[aq]) | |
1992 | + | } | |
1993 | + | } | |
1994 | + | ||
1995 | + | ||
1996 | + | ||
1997 | + | @Callable(ez) | |
1998 | + | func flight (gP,gQ) = { | |
1999 | + | let iW = iT(ez) | |
1985 | 2000 | if ((size(ez.payments) != 0)) | |
1986 | 2001 | then throw("No payments required") | |
1987 | 2002 | else { | |
1988 | 2003 | let bb = toString(ez.caller) | |
1989 | - | let fe = | |
2004 | + | let fe = gO(bb, gP, gQ) | |
1990 | 2005 | let r = fe._2 | |
1991 | - | let | |
1992 | - | let | |
1993 | - | if ((fe._4 == | |
2006 | + | let jg = aY(r) | |
2007 | + | let hw = valueOrElse(getString(jg), ae) | |
2008 | + | if ((fe._4 == hw)) | |
1994 | 2009 | then throw("You can't fly to the same location") | |
1995 | 2010 | else { | |
1996 | - | let | |
1997 | - | let | |
1998 | - | let | |
1999 | - | $Tuple2(([StringEntry( | |
2011 | + | let hj = w(r) | |
2012 | + | let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2013 | + | let hl = dq(hk, fe._5) | |
2014 | + | $Tuple2(([StringEntry(jg, if ((fe._1 > 0)) | |
2000 | 2015 | then fe._4 | |
2001 | - | else | |
2016 | + | else hw), StringEntry(hj, hl), IntegerEntry(q(r), fe._1), iW] ++ id(r, if ((fe._1 > 0)) | |
2002 | 2017 | then B | |
2003 | 2018 | else C)._1), fe._3) | |
2004 | 2019 | } | |
2008 | 2023 | ||
2009 | 2024 | ||
2010 | 2025 | @Callable(ez) | |
2011 | - | func heal ( | |
2012 | - | let | |
2013 | - | if (if (if ((0 > | |
2026 | + | func heal (jl,jm,jn) = { | |
2027 | + | let iW = iT(ez) | |
2028 | + | if (if (if ((0 > jl)) | |
2014 | 2029 | then true | |
2015 | - | else (0 > | |
2030 | + | else (0 > jm)) | |
2016 | 2031 | then true | |
2017 | - | else (0 > | |
2032 | + | else (0 > jn)) | |
2018 | 2033 | then throw("Quantity cannot be negative") | |
2019 | 2034 | else { | |
2020 | 2035 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2021 | - | let | |
2022 | - | let | |
2023 | - | let | |
2024 | - | let | |
2025 | - | if (( | |
2026 | - | then throw((("HP should be < " + toString( | |
2036 | + | let jo = [jl, jm, jn] | |
2037 | + | let ha = q(r) | |
2038 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
2039 | + | let jp = valueOrElse(getInteger(ha), hb) | |
2040 | + | if ((jp >= hb)) | |
2041 | + | then throw((("HP should be < " + toString(hb)) + " to heal")) | |
2027 | 2042 | else { | |
2028 | - | let | |
2029 | - | let | |
2030 | - | let | |
2043 | + | let fD = aX(r) | |
2044 | + | let gl = fC(fD) | |
2045 | + | let jq = if ((gl[aB] == "")) | |
2031 | 2046 | then nil | |
2032 | - | else split( | |
2033 | - | func | |
2047 | + | else split(gl[aB], "_") | |
2048 | + | func jr (cX,js) = { | |
2034 | 2049 | let cd = cX._2 | |
2035 | - | let eV = if ((size( | |
2036 | - | then parseIntValue( | |
2050 | + | let eV = if ((size(jq) > cd)) | |
2051 | + | then parseIntValue(jq[cd]) | |
2037 | 2052 | else 0 | |
2038 | 2053 | if ((3 > cd)) | |
2039 | 2054 | then { | |
2040 | - | let | |
2041 | - | if (( | |
2055 | + | let jt = jo[cd] | |
2056 | + | if ((jt > eV)) | |
2042 | 2057 | then throw(((("You have only " + toString(eV)) + " of ") + ah[cd])) | |
2043 | - | else $Tuple3((cX._1 :+ toString((eV - | |
2058 | + | else $Tuple3((cX._1 :+ toString((eV - jt))), (cd + 1), (cX._3 + (ck[cd] * jt))) | |
2044 | 2059 | } | |
2045 | 2060 | else $Tuple3((cX._1 :+ toString(eV)), (cd + 1), cX._3) | |
2046 | 2061 | } | |
2051 | 2066 | let db = $Tuple3(nil, 0, 0) | |
2052 | 2067 | func dc (dd,de) = if ((de >= da)) | |
2053 | 2068 | then dd | |
2054 | - | else | |
2069 | + | else jr(dd, cZ[de]) | |
2055 | 2070 | ||
2056 | 2071 | func df (dd,de) = if ((de >= da)) | |
2057 | 2072 | then dd | |
2059 | 2074 | ||
2060 | 2075 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
2061 | 2076 | } | |
2062 | - | let | |
2063 | - | $Tuple2(([IntegerEntry( | |
2077 | + | let ju = min([hb, (jp + dp._3)]) | |
2078 | + | $Tuple2(([IntegerEntry(ha, ju), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], makeString(dp._1, "_")], ":")), iW] ++ id(r, (J * ((jl + jm) + jn)))._1), ju) | |
2064 | 2079 | } | |
2065 | 2080 | } | |
2066 | 2081 | } | |
2069 | 2084 | ||
2070 | 2085 | @Callable(ez) | |
2071 | 2086 | func healES () = { | |
2072 | - | let | |
2087 | + | let iW = iT(ez) | |
2073 | 2088 | if ((size(ez.payments) != 1)) | |
2074 | 2089 | then throw("Exactly one payment required") | |
2075 | 2090 | else { | |
2076 | - | let | |
2077 | - | if (( | |
2091 | + | let iX = value(ez.payments[0]) | |
2092 | + | if ((iX.assetId != bj)) | |
2078 | 2093 | then throw("Allowed USDT payment only!") | |
2079 | 2094 | else { | |
2080 | 2095 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2081 | - | let | |
2082 | - | let | |
2083 | - | let | |
2084 | - | if (( | |
2096 | + | let ha = q(r) | |
2097 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
2098 | + | let jp = valueOrElse(getInteger(ha), hb) | |
2099 | + | if ((jp > 0)) | |
2085 | 2100 | then throw("HP should be 0 to call Emergency Service") | |
2086 | 2101 | else { | |
2087 | - | let | |
2088 | - | let | |
2089 | - | let | |
2102 | + | let fD = aX(r) | |
2103 | + | let gl = fC(fD) | |
2104 | + | let jq = if ((gl[aB] == "")) | |
2090 | 2105 | then nil | |
2091 | - | else split( | |
2092 | - | let | |
2093 | - | then parseIntValue( | |
2106 | + | else split(gl[aB], "_") | |
2107 | + | let jv = if ((size(jq) > 0)) | |
2108 | + | then parseIntValue(jq[0]) | |
2094 | 2109 | else 0 | |
2095 | - | let | |
2096 | - | then parseIntValue( | |
2110 | + | let jw = if ((size(jq) > 1)) | |
2111 | + | then parseIntValue(jq[1]) | |
2097 | 2112 | else 0 | |
2098 | - | let | |
2099 | - | then parseIntValue( | |
2113 | + | let jx = if ((size(jq) > 2)) | |
2114 | + | then parseIntValue(jq[2]) | |
2100 | 2115 | else 0 | |
2101 | - | if (if (if (( | |
2116 | + | if (if (if ((jv > 0)) | |
2102 | 2117 | then true | |
2103 | - | else ( | |
2118 | + | else (jw > 0)) | |
2104 | 2119 | then true | |
2105 | - | else ( | |
2120 | + | else (jx > 0)) | |
2106 | 2121 | then throw("You have to use own Medical Kit") | |
2107 | 2122 | else { | |
2108 | - | let | |
2109 | - | let | |
2110 | - | then split(value( | |
2123 | + | let jy = getString(bM, bc()) | |
2124 | + | let jz = if (isDefined(jy)) | |
2125 | + | then split(value(jy), "_") | |
2111 | 2126 | else nil | |
2112 | - | let | |
2113 | - | then parseIntValue( | |
2127 | + | let jA = if ((size(jz) > 0)) | |
2128 | + | then parseIntValue(jz[0]) | |
2114 | 2129 | else 0 | |
2115 | - | if ((0 >= | |
2130 | + | if ((0 >= jA)) | |
2116 | 2131 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2117 | 2132 | else { | |
2118 | - | let | |
2119 | - | let | |
2133 | + | let ju = (jp + ck[0]) | |
2134 | + | let jB = makeString([toString((jA - 1)), removeByIndex(jz, 0)], "_") | |
2120 | 2135 | let bg = split(ak[0], "_") | |
2121 | - | let | |
2122 | - | let | |
2123 | - | if (( | |
2124 | - | then throw(("Payment attached should be " + toString( | |
2136 | + | let jC = bf(bg) | |
2137 | + | let jD = fraction((jC * ag), af, (bq * ao)) | |
2138 | + | if ((iX.amount != jD)) | |
2139 | + | then throw(("Payment attached should be " + toString(jD))) | |
2125 | 2140 | else { | |
2126 | - | let dp = bZ(invoke(bM, "updateEsStorage", [ | |
2127 | - | $Tuple2(([IntegerEntry( | |
2141 | + | let dp = bZ(invoke(bM, "updateEsStorage", [jB], [AttachedPayment(bj, jD)])) | |
2142 | + | $Tuple2(([IntegerEntry(ha, ju), iW] ++ id(r, D)._1), dp) | |
2128 | 2143 | } | |
2129 | 2144 | } | |
2130 | 2145 | } | |
2136 | 2151 | ||
2137 | 2152 | ||
2138 | 2153 | @Callable(ez) | |
2139 | - | func updateBackpack (r, | |
2154 | + | func updateBackpack (r,jE) = if ((ez.caller != bM)) | |
2140 | 2155 | then throw("permission denied") | |
2141 | - | else $Tuple2([StringEntry(aX(r), | |
2142 | - | ||
2143 | - | ||
2144 | - | ||
2145 | - | @Callable(ez) | |
2146 | - | func commitFor ( | |
2147 | - | let | |
2148 | - | let | |
2156 | + | else $Tuple2([StringEntry(aX(r), jE)], jE) | |
2157 | + | ||
2158 | + | ||
2159 | + | ||
2160 | + | @Callable(ez) | |
2161 | + | func commitFor (jF) = { | |
2162 | + | let iW = iT(ez) | |
2163 | + | let jG = (height + bT) | |
2149 | 2164 | let b = toString(ez.caller) | |
2150 | - | $Tuple2(([IntegerEntry(bV(b), | |
2165 | + | $Tuple2(([IntegerEntry(bV(b), jG), IntegerEntry(bU(b), jF)] :+ iW), jG) | |
2151 | 2166 | } | |
2152 | 2167 | ||
2153 | 2168 | ||
2154 | 2169 | ||
2155 | 2170 | @Callable(ez) | |
2156 | 2171 | func buySLand () = { | |
2157 | - | let | |
2172 | + | let iW = iT(ez) | |
2158 | 2173 | if ((size(ez.payments) != 1)) | |
2159 | 2174 | then throw("Exactly one payment required") | |
2160 | 2175 | else { | |
2161 | - | let | |
2162 | - | if (( | |
2176 | + | let iX = value(ez.payments[0]) | |
2177 | + | if ((iX.assetId != bj)) | |
2163 | 2178 | then throw("Allowed USDT payment only!") | |
2164 | - | else if (( | |
2179 | + | else if ((iX.amount != cq)) | |
2165 | 2180 | then throw(("Payment attached should be " + toString(cq))) | |
2166 | 2181 | else { | |
2167 | - | let dp = | |
2168 | - | $Tuple2((((dp._1 :+ ScriptTransfer(bM, | |
2182 | + | let dp = gG(ez.caller, ez.transactionId) | |
2183 | + | $Tuple2((((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) ++ ij(toString(ez.caller), F)._1) :+ iW), dp._2._1) | |
2169 | 2184 | } | |
2170 | 2185 | } | |
2171 | 2186 | } | |
2173 | 2188 | ||
2174 | 2189 | ||
2175 | 2190 | @Callable(ez) | |
2176 | - | func expedition ( | |
2177 | - | let | |
2191 | + | func expedition (gP,gQ) = { | |
2192 | + | let iW = iT(ez) | |
2178 | 2193 | if ((size(ez.payments) != 0)) | |
2179 | 2194 | then throw("No payments required") | |
2180 | 2195 | else { | |
2181 | - | let dp = | |
2196 | + | let dp = hg(ez.caller, ez.transactionId, gP, gQ) | |
2182 | 2197 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2183 | - | $Tuple2(((dp._1 ++ | |
2198 | + | $Tuple2(((dp._1 ++ id(r, F)._1) :+ iW), $Tuple2(dp._2, dp._3)) | |
2184 | 2199 | } | |
2185 | 2200 | } | |
2186 | 2201 | ||
2188 | 2203 | ||
2189 | 2204 | @Callable(ez) | |
2190 | 2205 | func upgradeInfra (aO) = { | |
2191 | - | let | |
2206 | + | let iW = iT(ez) | |
2192 | 2207 | if ((size(ez.payments) != 0)) | |
2193 | 2208 | then throw("No payments required") | |
2194 | 2209 | else { | |
2195 | - | let dp = | |
2210 | + | let dp = hR(true, ez.caller, 0, aO) | |
2196 | 2211 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2197 | - | $Tuple2(((dp._1 :+ | |
2212 | + | $Tuple2(((dp._1 :+ iW) ++ id(r, fraction(G, dp._3, bq))._1), dp._2) | |
2198 | 2213 | } | |
2199 | 2214 | } | |
2200 | 2215 | ||
2204 | 2219 | func upgradeInfraUsdt (aO) = if ((ez.caller != this)) | |
2205 | 2220 | then throw("Permission denied") | |
2206 | 2221 | else { | |
2207 | - | let | |
2222 | + | let iW = iT(ez) | |
2208 | 2223 | if ((size(ez.payments) != 1)) | |
2209 | 2224 | then throw("Exactly one payment required") | |
2210 | 2225 | else { | |
2211 | - | let | |
2212 | - | if (( | |
2226 | + | let iX = value(ez.payments[0]) | |
2227 | + | if ((iX.assetId != bj)) | |
2213 | 2228 | then throw("Allowed USDT payment only!") | |
2214 | 2229 | else { | |
2215 | - | let dp = | |
2216 | - | $Tuple2(((dp._1 :+ ScriptTransfer(bM, | |
2230 | + | let dp = hR(false, ez.caller, iX.amount, aO) | |
2231 | + | $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2) | |
2217 | 2232 | } | |
2218 | 2233 | } | |
2219 | 2234 | } | |
2221 | 2236 | ||
2222 | 2237 | ||
2223 | 2238 | @Callable(ez) | |
2224 | - | func activateArtifact ( | |
2225 | - | let | |
2239 | + | func activateArtifact (jH,jI) = { | |
2240 | + | let iW = iT(ez) | |
2226 | 2241 | if ((size(ez.payments) != 0)) | |
2227 | 2242 | then throw("No payments required") | |
2228 | 2243 | else { | |
2229 | 2244 | let b = toString(ez.caller) | |
2230 | 2245 | let dp = { | |
2231 | - | let bk = | |
2246 | + | let bk = jH | |
2232 | 2247 | if (("PRESALE" == bk)) | |
2233 | - | then | |
2248 | + | then ir(b, jI) | |
2234 | 2249 | else if (("ONBOARD" == bk)) | |
2235 | - | then | |
2250 | + | then ik(b) | |
2236 | 2251 | else throw("Unknown artifact") | |
2237 | 2252 | } | |
2238 | - | (dp :+ | |
2239 | - | } | |
2240 | - | } | |
2241 | - | ||
2242 | - | ||
2243 | - | ||
2244 | - | @Callable(ez) | |
2245 | - | func mergeLands ( | |
2246 | - | let | |
2253 | + | (dp :+ iW) | |
2254 | + | } | |
2255 | + | } | |
2256 | + | ||
2257 | + | ||
2258 | + | ||
2259 | + | @Callable(ez) | |
2260 | + | func mergeLands (iw) = { | |
2261 | + | let iW = iT(ez) | |
2247 | 2262 | if ((size(ez.payments) != 0)) | |
2248 | 2263 | then throw("No payments required") | |
2249 | 2264 | else { | |
2250 | - | let dp = | |
2251 | - | $Tuple2(((dp._1 :+ | |
2252 | - | } | |
2253 | - | } | |
2254 | - | ||
2255 | - | ||
2256 | - | ||
2257 | - | @Callable(ez) | |
2258 | - | func mergeLandsUsdt ( | |
2259 | - | let | |
2265 | + | let dp = iR(true, toString(ez.caller), 0, iw, ez.transactionId) | |
2266 | + | $Tuple2(((dp._1 :+ iW) ++ ij(toString(ez.caller), H)._1), dp._2) | |
2267 | + | } | |
2268 | + | } | |
2269 | + | ||
2270 | + | ||
2271 | + | ||
2272 | + | @Callable(ez) | |
2273 | + | func mergeLandsUsdt (iw) = { | |
2274 | + | let iW = iT(ez) | |
2260 | 2275 | if ((size(ez.payments) != 1)) | |
2261 | 2276 | then throw("Exactly one payment required") | |
2262 | 2277 | else { | |
2263 | - | let | |
2264 | - | if (( | |
2278 | + | let iX = value(ez.payments[0]) | |
2279 | + | if ((iX.assetId != bj)) | |
2265 | 2280 | then throw("Allowed USDT payment only!") | |
2266 | 2281 | else { | |
2267 | - | let dp = | |
2268 | - | $Tuple2(((dp._1 :+ ScriptTransfer(bM, | |
2282 | + | let dp = iR(false, toString(ez.caller), iX.amount, iw, ez.transactionId) | |
2283 | + | $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2) | |
2269 | 2284 | } | |
2270 | 2285 | } | |
2271 | 2286 | } | |
2273 | 2288 | ||
2274 | 2289 | ||
2275 | 2290 | @Callable(ez) | |
2276 | - | func cargoExchange ( | |
2277 | - | let | |
2291 | + | func cargoExchange (jJ,aO) = { | |
2292 | + | let iW = iT(ez) | |
2278 | 2293 | if ((size(ez.payments) != 0)) | |
2279 | 2294 | then throw("No payments required") | |
2280 | 2295 | else { | |
2281 | - | let | |
2296 | + | let gk = split_4C(jJ, ":") | |
2282 | 2297 | let b = toString(ez.originCaller) | |
2283 | - | let | |
2284 | - | let | |
2285 | - | if (!(isDefined(getInteger( | |
2286 | - | then throw(( | |
2298 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2299 | + | let hA = aG(aO) | |
2300 | + | if (!(isDefined(getInteger(hA)))) | |
2301 | + | then throw((hz.name + " is not staked")) | |
2287 | 2302 | else { | |
2288 | - | let | |
2289 | - | if (( | |
2303 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
2304 | + | if ((hC != b)) | |
2290 | 2305 | then throw((X + " is not yours")) | |
2291 | 2306 | else { | |
2292 | - | let | |
2293 | - | let | |
2307 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2308 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2294 | 2309 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2295 | - | let | |
2296 | - | let | |
2297 | - | if (( | |
2298 | - | then throw((("Duck location type is " + | |
2299 | - | else if (( | |
2310 | + | let hw = valueOrElse(getString(aY(r)), ae) | |
2311 | + | let hx = split(value(hw), "_") | |
2312 | + | if ((hx[bd] != "L")) | |
2313 | + | then throw((("Duck location type is " + hx[bd]) + ", but should be L")) | |
2314 | + | else if ((hx[be] != aO)) | |
2300 | 2315 | then throw(("Duck should be on the land " + aO)) | |
2301 | 2316 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | let | |
2305 | - | let | |
2306 | - | let dp = | |
2307 | - | let | |
2308 | - | let | |
2309 | - | let | |
2310 | - | [StringEntry( | |
2317 | + | let fS = aN(aO) | |
2318 | + | let fI = fR(fS, fT, fU) | |
2319 | + | let fD = aX(r) | |
2320 | + | let gl = fC(fD) | |
2321 | + | let dp = gj(gk, fI, gl) | |
2322 | + | let ga = split(fI[at], "_") | |
2323 | + | let hO = (parseIntValue(ga[av]) + dp._7) | |
2324 | + | let hP = (parseIntValue(ga[aw]) - dp._7) | |
2325 | + | [StringEntry(fD, makeString_2C([gl[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fS, makeString_2C([fI[ap], dp._1, dp._2, dp._3, makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")], ":")), iW] | |
2311 | 2326 | } | |
2312 | 2327 | } | |
2313 | 2328 | } | |
2317 | 2332 | ||
2318 | 2333 | ||
2319 | 2334 | @Callable(ez) | |
2320 | - | func saveWarehouse ( | |
2335 | + | func saveWarehouse (fW,aO) = if ((ez.caller != bM)) | |
2321 | 2336 | then throw("Access denied") | |
2322 | 2337 | else { | |
2323 | - | let | |
2324 | - | let | |
2325 | - | if ((size( | |
2338 | + | let fS = aN(aO) | |
2339 | + | let fX = split_4C(fW, ":") | |
2340 | + | if ((size(fX) != 5)) | |
2326 | 2341 | then throw("warehouse string should contain 4 ':' separators") | |
2327 | 2342 | else { | |
2328 | - | let | |
2329 | - | let | |
2330 | - | let | |
2331 | - | let | |
2332 | - | let | |
2333 | - | $Tuple2([StringEntry( | |
2343 | + | let jK = split(fX[at], "_")[au] | |
2344 | + | let hO = fH(fX) | |
2345 | + | let jL = fF(fX[ap]) | |
2346 | + | let hP = ((jL - parseIntValue(jK)) - hO) | |
2347 | + | let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([jK, toString(hO), toString(hP), toString(jL)], "_")], ":") | |
2348 | + | $Tuple2([StringEntry(fS, jM)], jM) | |
2334 | 2349 | } | |
2335 | 2350 | } | |
2336 | 2351 | ||
2340 | 2355 | func fixWarehouseFormat (aO) = if ((ez.caller != bL)) | |
2341 | 2356 | then throw("Access denied") | |
2342 | 2357 | else { | |
2343 | - | let | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | let | |
2348 | - | let | |
2349 | - | let | |
2350 | - | let | |
2351 | - | let | |
2352 | - | let | |
2353 | - | $Tuple2([StringEntry( | |
2358 | + | let fS = aN(aO) | |
2359 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2360 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2361 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2362 | + | let fX = fR(fS, fT, fU) | |
2363 | + | let jK = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fX], nil)) | |
2364 | + | let hO = fH(fX) | |
2365 | + | let jL = fF(fX[ap]) | |
2366 | + | let hP = ((jL - jK) - hO) | |
2367 | + | let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([toString(jK), toString(hO), toString(hP), toString(jL)], "_")], ":") | |
2368 | + | $Tuple2([StringEntry(fS, jM)], jM) | |
2354 | 2369 | } | |
2355 | 2370 | ||
2356 | 2371 | ||
2359 | 2374 | func fixStakedPieces (by) = if ((ez.caller != bL)) | |
2360 | 2375 | then throw("Access denied") | |
2361 | 2376 | else { | |
2362 | - | let | |
2377 | + | let iM = if ((by == "")) | |
2363 | 2378 | then 0 | |
2364 | 2379 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | then split_51C(value( | |
2380 | + | let iH = getString(T, bX(by)) | |
2381 | + | let iD = if (isDefined(iH)) | |
2382 | + | then split_51C(value(iH), "_") | |
2368 | 2383 | else nil | |
2369 | - | func | |
2370 | - | let | |
2371 | - | let cf = split( | |
2384 | + | func jN (cX,aO) = { | |
2385 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2386 | + | let cf = split(hz.description, "_")[bQ] | |
2372 | 2387 | (cX + ce(cf)) | |
2373 | 2388 | } | |
2374 | 2389 | ||
2375 | - | let cZ = | |
2390 | + | let cZ = iD | |
2376 | 2391 | let da = size(cZ) | |
2377 | 2392 | let db = 0 | |
2378 | 2393 | func dc (dd,de) = if ((de >= da)) | |
2379 | 2394 | then dd | |
2380 | - | else | |
2395 | + | else jN(dd, cZ[de]) | |
2381 | 2396 | ||
2382 | 2397 | func df (dd,de) = if ((de >= da)) | |
2383 | 2398 | then dd | |
2385 | 2400 | ||
2386 | 2401 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
2387 | 2402 | } | |
2388 | - | $Tuple2([IntegerEntry(bY(by), | |
2389 | - | } | |
2390 | - | ||
2391 | - | ||
2392 | - | ||
2393 | - | @Callable(ez) | |
2394 | - | func setCustomName (aE, | |
2395 | - | let | |
2403 | + | $Tuple2([IntegerEntry(bY(by), iM)], iM) | |
2404 | + | } | |
2405 | + | ||
2406 | + | ||
2407 | + | ||
2408 | + | @Callable(ez) | |
2409 | + | func setCustomName (aE,iF,aJ) = { | |
2410 | + | let iW = iT(ez) | |
2396 | 2411 | if ((size(ez.payments) != 1)) | |
2397 | 2412 | then throw("Exactly one payment required") | |
2398 | 2413 | else { | |
2399 | - | let | |
2400 | - | if (( | |
2414 | + | let iX = value(ez.payments[0]) | |
2415 | + | if ((iX.assetId != bj)) | |
2401 | 2416 | then throw("Allowed USDT payment only!") | |
2402 | - | else if (( | |
2417 | + | else if ((iX.amount != cm)) | |
2403 | 2418 | then throw(("Payment should be " + toString(cm))) | |
2404 | - | else if (contains( | |
2405 | - | then throw(("Name should not contain '__': " + | |
2406 | - | else if ((size( | |
2419 | + | else if (contains(iF, "__")) | |
2420 | + | then throw(("Name should not contain '__': " + iF)) | |
2421 | + | else if ((size(iF) > cn)) | |
2407 | 2422 | then throw(("Name too long, maxLength=" + toString(cn))) | |
2408 | 2423 | else { | |
2409 | 2424 | let b = toString(ez.originCaller) | |
2410 | - | let | |
2425 | + | let jO = { | |
2411 | 2426 | let bk = aJ | |
2412 | 2427 | if (("ACCOUNT" == bk)) | |
2413 | 2428 | then { | |
2414 | - | let | |
2415 | - | let | |
2416 | - | if (isDefined( | |
2417 | - | then throw(("Name already registered: " + | |
2429 | + | let jP = cH(iF) | |
2430 | + | let jQ = getString(jP) | |
2431 | + | if (isDefined(jQ)) | |
2432 | + | then throw(("Name already registered: " + iF)) | |
2418 | 2433 | else { | |
2419 | - | let | |
2420 | - | let | |
2421 | - | let | |
2422 | - | then [DeleteEntry(cH(value( | |
2434 | + | let jR = aQ(b) | |
2435 | + | let jS = getString(jR) | |
2436 | + | let jT = if (isDefined(jS)) | |
2437 | + | then [DeleteEntry(cH(value(jS)))] | |
2423 | 2438 | else nil | |
2424 | - | ((( | |
2439 | + | (((jT :+ StringEntry(jR, iF)) :+ StringEntry(jP, b)) ++ ij(b, E)._1) | |
2425 | 2440 | } | |
2426 | 2441 | } | |
2427 | 2442 | else if (("LAND" == bk)) | |
2428 | 2443 | then { | |
2429 | - | let | |
2430 | - | let | |
2431 | - | if (!(isDefined(getInteger( | |
2432 | - | then throw(( | |
2444 | + | let hz = value(assetInfo(fromBase58String(aE))) | |
2445 | + | let hA = aG(aE) | |
2446 | + | if (!(isDefined(getInteger(hA)))) | |
2447 | + | then throw((hz.name + " is not staked")) | |
2433 | 2448 | else { | |
2434 | - | let | |
2435 | - | if (( | |
2449 | + | let hC = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hz.name) + " is orphaned")) | |
2450 | + | if ((hC != b)) | |
2436 | 2451 | then throw((X + " is not yours")) | |
2437 | 2452 | else { | |
2438 | - | let | |
2439 | - | let | |
2440 | - | if (isDefined( | |
2441 | - | then throw(("Name already registered: " + | |
2453 | + | let jP = cB(iF) | |
2454 | + | let jQ = getString(jP) | |
2455 | + | if (isDefined(jQ)) | |
2456 | + | then throw(("Name already registered: " + iF)) | |
2442 | 2457 | else { | |
2443 | - | let | |
2444 | - | let | |
2445 | - | let | |
2446 | - | then [DeleteEntry(cB(value( | |
2458 | + | let jU = aF(aE) | |
2459 | + | let jS = getString(jU) | |
2460 | + | let jT = if (isDefined(jS)) | |
2461 | + | then [DeleteEntry(cB(value(jS)))] | |
2447 | 2462 | else nil | |
2448 | - | ((( | |
2463 | + | (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ ij(b, E)._1) | |
2449 | 2464 | } | |
2450 | 2465 | } | |
2451 | 2466 | } | |
2452 | 2467 | } | |
2453 | 2468 | else if (("DUCK" == bk)) | |
2454 | 2469 | then { | |
2455 | - | let | |
2456 | - | let | |
2457 | - | if (if (!(isDefined(getInteger( | |
2470 | + | let hz = value(assetInfo(fromBase58String(aE))) | |
2471 | + | let hA = aG(aE) | |
2472 | + | if (if (!(isDefined(getInteger(hA)))) | |
2458 | 2473 | then true | |
2459 | 2474 | else !(isDefined(getString(aW(b))))) | |
2460 | - | then throw(( | |
2475 | + | then throw((hz.name + " is not staked")) | |
2461 | 2476 | else { | |
2462 | - | let | |
2463 | - | if (( | |
2477 | + | let hC = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hz.name) + " is orphaned")) | |
2478 | + | if ((hC != b)) | |
2464 | 2479 | then throw((Y + " is not yours")) | |
2465 | 2480 | else { | |
2466 | - | let | |
2467 | - | let | |
2468 | - | if (isDefined( | |
2469 | - | then throw(("Name already registered: " + | |
2481 | + | let jP = cG(iF) | |
2482 | + | let jQ = getString(jP) | |
2483 | + | if (isDefined(jQ)) | |
2484 | + | then throw(("Name already registered: " + iF)) | |
2470 | 2485 | else { | |
2471 | - | let | |
2472 | - | let | |
2473 | - | let | |
2474 | - | then [DeleteEntry(cG(value( | |
2486 | + | let jU = aP(aE) | |
2487 | + | let jS = getString(jU) | |
2488 | + | let jT = if (isDefined(jS)) | |
2489 | + | then [DeleteEntry(cG(value(jS)))] | |
2475 | 2490 | else nil | |
2476 | - | ((( | |
2491 | + | (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ id(aE, E)._1) | |
2477 | 2492 | } | |
2478 | 2493 | } | |
2479 | 2494 | } | |
2480 | 2495 | } | |
2481 | 2496 | else throw("Unknown entity type") | |
2482 | 2497 | } | |
2483 | - | $Tuple2((( | |
2498 | + | $Tuple2(((jO :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), 0) | |
2484 | 2499 | } | |
2485 | 2500 | } | |
2486 | 2501 | } | |
2488 | 2503 | ||
2489 | 2504 | ||
2490 | 2505 | @Callable(ez) | |
2491 | - | func setReferrals ( | |
2506 | + | func setReferrals (jV,jW) = if ((ez.callerPublicKey != cj)) | |
2492 | 2507 | then throw("Permission denied") | |
2493 | 2508 | else { | |
2494 | - | let | |
2509 | + | let iW = iT(ez) | |
2495 | 2510 | if ((size(ez.payments) != 0)) | |
2496 | 2511 | then throw("No payments required") | |
2497 | - | else if (!(isDefined(addressFromString( | |
2498 | - | then throw(("Invalid address: " + | |
2499 | - | else if (!(isDefined(addressFromString( | |
2500 | - | then throw(("Invalid address: " + | |
2512 | + | else if (!(isDefined(addressFromString(jV)))) | |
2513 | + | then throw(("Invalid address: " + jV)) | |
2514 | + | else if (!(isDefined(addressFromString(jW)))) | |
2515 | + | then throw(("Invalid address: " + jW)) | |
2501 | 2516 | else { | |
2502 | - | let | |
2503 | - | let | |
2504 | - | let | |
2505 | - | then split_4C(value( | |
2517 | + | let jX = cI() | |
2518 | + | let jY = getString(jX) | |
2519 | + | let jZ = if (isDefined(jY)) | |
2520 | + | then split_4C(value(jY), "_") | |
2506 | 2521 | else nil | |
2507 | - | if (containsElement( | |
2508 | - | then throw(( | |
2522 | + | if (containsElement(jZ, jW)) | |
2523 | + | then throw((jW + " is not newbie (already has referrals)")) | |
2509 | 2524 | else { | |
2510 | - | let | |
2511 | - | let | |
2512 | - | if (if (isDefined( | |
2513 | - | then isDefined(addressFromString(value( | |
2525 | + | let il = aR(jW) | |
2526 | + | let im = getString(il) | |
2527 | + | if (if (isDefined(im)) | |
2528 | + | then isDefined(addressFromString(value(im))) | |
2514 | 2529 | else false) | |
2515 | - | then throw((( | |
2530 | + | then throw(((jW + " already has refBy: ") + value(im))) | |
2516 | 2531 | else { | |
2517 | - | let | |
2518 | - | let | |
2519 | - | let | |
2520 | - | then split_4C(value( | |
2532 | + | let ka = aU(jV) | |
2533 | + | let kb = getString(ka) | |
2534 | + | let kc = if (isDefined(kb)) | |
2535 | + | then split_4C(value(kb), "_") | |
2521 | 2536 | else nil | |
2522 | - | if (containsElement( | |
2523 | - | then throw(((( | |
2537 | + | if (containsElement(kc, jW)) | |
2538 | + | then throw((((jV + " already contains ") + jW) + " within referrals")) | |
2524 | 2539 | else { | |
2525 | - | let | |
2526 | - | let | |
2527 | - | then value( | |
2528 | - | else makeString_2C(( | |
2529 | - | $Tuple2([StringEntry( | |
2540 | + | let kd = makeString_2C((kc :+ jW), "_") | |
2541 | + | let ke = if (containsElement(jZ, jV)) | |
2542 | + | then value(jY) | |
2543 | + | else makeString_2C((jZ :+ jV), "_") | |
2544 | + | $Tuple2([StringEntry(il, jV), StringEntry(ka, kd), StringEntry(jX, ke), iW], 0) | |
2530 | 2545 | } | |
2531 | 2546 | } | |
2532 | 2547 | } | |
2536 | 2551 | ||
2537 | 2552 | ||
2538 | 2553 | @Callable(ez) | |
2539 | - | func distributePoints ( | |
2540 | - | let | |
2554 | + | func distributePoints (kf,kg,kh,ki,kj) = { | |
2555 | + | let iW = iT(ez) | |
2541 | 2556 | if ((size(ez.payments) != 0)) | |
2542 | 2557 | then throw("No payments required") | |
2543 | 2558 | else { | |
2544 | 2559 | let b = toString(ez.originCaller) | |
2545 | 2560 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2546 | - | let | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | if (( | |
2553 | - | then throw((("There are only " + toString( | |
2561 | + | let kk = z(b) | |
2562 | + | let kl = valueOrElse(getInteger(T, kk), 0) | |
2563 | + | let km = v(r) | |
2564 | + | let kn = valueOrElse(getInteger(T, km), 0) | |
2565 | + | let ko = (kl + kn) | |
2566 | + | let kp = ((((kf + kg) + kh) + ki) + kj) | |
2567 | + | if ((kp > ko)) | |
2568 | + | then throw((("There are only " + toString(ko)) + " free points to distribute")) | |
2554 | 2569 | else { | |
2555 | - | let | |
2556 | - | let U = split(valueOrElse(getString(T, | |
2557 | - | let | |
2558 | - | $Tuple2([IntegerEntry( | |
2570 | + | let kq = s(r) | |
2571 | + | let U = split(valueOrElse(getString(T, kq), "0_0_0_0_0"), "_") | |
2572 | + | let kr = (kl - kp) | |
2573 | + | $Tuple2([IntegerEntry(kk, if ((0 > kr)) | |
2559 | 2574 | then 0 | |
2560 | - | else | |
2561 | - | then ( | |
2562 | - | else | |
2575 | + | else kr), IntegerEntry(km, if ((0 > kr)) | |
2576 | + | then (kn + kr) | |
2577 | + | else kn), StringEntry(kq, makeString([toString((parseIntValue(U[h]) + kf)), toString((parseIntValue(U[i]) + kg)), toString((parseIntValue(U[j]) + kh)), toString((parseIntValue(U[k]) + ki)), toString((parseIntValue(U[l]) + kj))], "_")), iW], 0) | |
2563 | 2578 | } | |
2564 | 2579 | } | |
2565 | 2580 | } | |
2567 | 2582 | ||
2568 | 2583 | ||
2569 | 2584 | @Callable(ez) | |
2570 | - | func splitByGlobalWeightsREADONLY ( | |
2571 | - | ||
2572 | - | ||
2573 | - | ||
2574 | - | @Callable(ez) | |
2575 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2585 | + | func splitByGlobalWeightsREADONLY (gh) = $Tuple2(nil, dg(gh)) | |
2586 | + | ||
2587 | + | ||
2588 | + | ||
2589 | + | @Callable(ez) | |
2590 | + | func splitByGlobalAndLocalWeightsREADONLY (ks,kt,eC) = { | |
2576 | 2591 | let ev = eB(eC) | |
2577 | - | $Tuple2(nil, $Tuple2(dg( | |
2578 | - | } | |
2579 | - | ||
2580 | - | ||
2581 | - | ||
2582 | - | @Callable(ez) | |
2583 | - | func getBackpackREADONLY (r) = $Tuple2(nil, makeString( | |
2592 | + | $Tuple2(nil, $Tuple2(dg(ks), cR(kt, ev))) | |
2593 | + | } | |
2594 | + | ||
2595 | + | ||
2596 | + | ||
2597 | + | @Callable(ez) | |
2598 | + | func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fC(aX(r)), ":")) | |
2584 | 2599 | ||
2585 | 2600 | ||
2586 | 2601 | ||
2587 | 2602 | @Callable(ez) | |
2588 | 2603 | func getWarehouseREADONLY (aO) = { | |
2589 | - | let | |
2590 | - | let | |
2591 | - | let | |
2592 | - | $Tuple2(nil, makeString_2C( | |
2604 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2605 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2606 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2607 | + | $Tuple2(nil, makeString_2C(fR(aN(aO), fT, fU), ":")) | |
2593 | 2608 | } | |
2594 | 2609 | ||
2595 | 2610 | ||
2599 | 2614 | then (ez.caller != bM) | |
2600 | 2615 | else false) | |
2601 | 2616 | then throw("Access denied") | |
2602 | - | else $Tuple2([ | |
2603 | - | ||
2604 | - | ||
2605 | - | ||
2606 | - | @Callable(ez) | |
2607 | - | func updateDuckStats (r, | |
2617 | + | else $Tuple2([iT(ez)], 42) | |
2618 | + | ||
2619 | + | ||
2620 | + | ||
2621 | + | @Callable(ez) | |
2622 | + | func updateDuckStats (r,ie) = if ((ez.caller != bM)) | |
2608 | 2623 | then throw("Access denied") | |
2609 | - | else | |
2610 | - | ||
2611 | - | ||
2612 | - | ||
2613 | - | @Callable(ez) | |
2614 | - | func updateAccStats (b, | |
2624 | + | else id(r, ie) | |
2625 | + | ||
2626 | + | ||
2627 | + | ||
2628 | + | @Callable(ez) | |
2629 | + | func updateAccStats (b,ie) = if ((ez.caller != bM)) | |
2615 | 2630 | then throw("Access denied") | |
2616 | - | else | |
2617 | - | ||
2618 | - | ||
2619 | - | ||
2620 | - | @Callable(ez) | |
2621 | - | func equipDuck ( | |
2622 | - | let | |
2631 | + | else ij(b, ie) | |
2632 | + | ||
2633 | + | ||
2634 | + | ||
2635 | + | @Callable(ez) | |
2636 | + | func equipDuck (ku) = { | |
2637 | + | let iW = iT(ez) | |
2623 | 2638 | if ((size(ez.payments) != 0)) | |
2624 | 2639 | then throw("No payments required") | |
2625 | 2640 | else { | |
2626 | 2641 | let b = toString(ez.originCaller) | |
2627 | 2642 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | let | |
2633 | - | if ((size( | |
2643 | + | let hj = w(r) | |
2644 | + | let kv = split(valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2645 | + | let fD = aX(r) | |
2646 | + | let gl = fC(fD) | |
2647 | + | let hl = split(ku, "_") | |
2648 | + | if ((size(hl) != m)) | |
2634 | 2649 | then throw("Wrong equipment string") | |
2635 | 2650 | else { | |
2636 | 2651 | let dO = S(this, r) | |
2637 | - | let | |
2638 | - | let | |
2639 | - | let | |
2640 | - | $Tuple2([StringEntry( | |
2652 | + | let kw = em(kv, dD(gl[aB]), true, dO) | |
2653 | + | let kx = em(hl, kw, false, dO) | |
2654 | + | let ky = dI(kx) | |
2655 | + | $Tuple2([StringEntry(hj, ku), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], ky], ":")), iW], 0) | |
2641 | 2656 | } | |
2642 | 2657 | } | |
2643 | 2658 | } | |
2644 | - | ||
2645 | - | ||
2646 | - | ||
2647 | - | @Callable(ez) | |
2648 | - | func test () = $Tuple2(nil, fi(nil, 1)) | |
2649 | 2659 | ||
2650 | 2660 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | func a (b) = ("lastArbTimeUser_" + b) | |
5 | 5 | ||
6 | 6 | ||
7 | 7 | let c = 100000000 | |
8 | 8 | ||
9 | 9 | let d = 3200 | |
10 | 10 | ||
11 | 11 | let e = 4000 | |
12 | 12 | ||
13 | 13 | let f = 3 | |
14 | 14 | ||
15 | 15 | let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"] | |
16 | 16 | ||
17 | 17 | let h = 0 | |
18 | 18 | ||
19 | 19 | let i = 1 | |
20 | 20 | ||
21 | 21 | let j = 2 | |
22 | 22 | ||
23 | 23 | let k = 3 | |
24 | 24 | ||
25 | 25 | let l = 4 | |
26 | 26 | ||
27 | 27 | let m = 6 | |
28 | 28 | ||
29 | 29 | let n = 2 | |
30 | 30 | ||
31 | 31 | let o = 2 | |
32 | 32 | ||
33 | 33 | let p = 30 | |
34 | 34 | ||
35 | 35 | func q (r) = ("duckHealth_" + r) | |
36 | 36 | ||
37 | 37 | ||
38 | 38 | func s (r) = ("duckChars_" + r) | |
39 | 39 | ||
40 | 40 | ||
41 | 41 | func t (r) = ("duckXP_" + r) | |
42 | 42 | ||
43 | 43 | ||
44 | 44 | func u (r) = ("duckLevel_" + r) | |
45 | 45 | ||
46 | 46 | ||
47 | 47 | func v (r) = ("duckFreePoints_" + r) | |
48 | 48 | ||
49 | 49 | ||
50 | 50 | func w (r) = ("duckEquipment_" + r) | |
51 | 51 | ||
52 | 52 | ||
53 | 53 | func x (b) = ("userXP_" + b) | |
54 | 54 | ||
55 | 55 | ||
56 | 56 | func y (b) = ("userLevel_" + b) | |
57 | 57 | ||
58 | 58 | ||
59 | 59 | func z (b) = ("userFreePoints_" + b) | |
60 | 60 | ||
61 | 61 | ||
62 | 62 | let A = 10000 | |
63 | 63 | ||
64 | 64 | let B = 10000 | |
65 | 65 | ||
66 | 66 | let C = 2000 | |
67 | 67 | ||
68 | 68 | let D = 100000 | |
69 | 69 | ||
70 | 70 | let E = 1000000 | |
71 | 71 | ||
72 | 72 | let F = 5000000 | |
73 | 73 | ||
74 | 74 | let G = 10000 | |
75 | 75 | ||
76 | 76 | let H = 1000000 | |
77 | 77 | ||
78 | 78 | let I = 1000000 | |
79 | 79 | ||
80 | 80 | let J = 10000 | |
81 | 81 | ||
82 | 82 | func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c) | |
83 | 83 | ||
84 | 84 | ||
85 | 85 | func M (N) = (100 + N) | |
86 | 86 | ||
87 | 87 | ||
88 | 88 | func O (P,Q) = { | |
89 | 89 | let R = K(Q) | |
90 | 90 | [R, (f * (R - P))] | |
91 | 91 | } | |
92 | 92 | ||
93 | 93 | ||
94 | 94 | func S (T,r) = { | |
95 | 95 | let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_") | |
96 | 96 | let V = valueOrElse(getInteger(T, u(r)), 0) | |
97 | 97 | let W = valueOrElse(getInteger(T, q(r)), M(V)) | |
98 | 98 | [parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W] | |
99 | 99 | } | |
100 | 100 | ||
101 | 101 | ||
102 | 102 | let X = "LAND" | |
103 | 103 | ||
104 | 104 | let Y = "DUCK" | |
105 | 105 | ||
106 | 106 | let Z = "PRESALE" | |
107 | 107 | ||
108 | 108 | let aa = 6 | |
109 | 109 | ||
110 | 110 | let ab = 3456000 | |
111 | 111 | ||
112 | 112 | let ac = 86400000 | |
113 | 113 | ||
114 | 114 | let ad = 10000000000 | |
115 | 115 | ||
116 | 116 | let ae = "Africa_F_Africa" | |
117 | 117 | ||
118 | 118 | let af = 39637 | |
119 | 119 | ||
120 | 120 | let ag = 10 | |
121 | 121 | ||
122 | 122 | let ah = ["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"] | |
123 | 123 | ||
124 | 124 | let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
125 | 125 | ||
126 | 126 | let aj = 10000000 | |
127 | 127 | ||
128 | 128 | let ak = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"] | |
129 | 129 | ||
130 | 130 | let al = 6 | |
131 | 131 | ||
132 | 132 | let am = 9 | |
133 | 133 | ||
134 | 134 | let an = 10 | |
135 | 135 | ||
136 | 136 | let ao = 10 | |
137 | 137 | ||
138 | 138 | let ap = 0 | |
139 | 139 | ||
140 | 140 | let aq = 1 | |
141 | 141 | ||
142 | 142 | let ar = 2 | |
143 | 143 | ||
144 | 144 | let as = 3 | |
145 | 145 | ||
146 | 146 | let at = 4 | |
147 | 147 | ||
148 | 148 | let au = 0 | |
149 | 149 | ||
150 | 150 | let av = 1 | |
151 | 151 | ||
152 | 152 | let aw = 2 | |
153 | 153 | ||
154 | 154 | let ax = 3 | |
155 | 155 | ||
156 | 156 | let ay = 0 | |
157 | 157 | ||
158 | 158 | let az = 1 | |
159 | 159 | ||
160 | 160 | let aA = 2 | |
161 | 161 | ||
162 | 162 | let aB = 3 | |
163 | 163 | ||
164 | 164 | func aC (b) = ("lastTxIdByUser_" + b) | |
165 | 165 | ||
166 | 166 | ||
167 | 167 | func aD (aE) = ("nftOwner_" + aE) | |
168 | 168 | ||
169 | 169 | ||
170 | 170 | func aF (aE) = ("landCustomNameByAssetId_" + aE) | |
171 | 171 | ||
172 | 172 | ||
173 | 173 | func aG (aE) = ("stakedTime_" + aE) | |
174 | 174 | ||
175 | 175 | ||
176 | 176 | func aH (aE) = ("infraLevel_" + aE) | |
177 | 177 | ||
178 | 178 | ||
179 | 179 | func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_") | |
180 | 180 | ||
181 | 181 | ||
182 | 182 | func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM) | |
183 | 183 | ||
184 | 184 | ||
185 | 185 | func aN (aO) = ("wareHouse_" + aO) | |
186 | 186 | ||
187 | 187 | ||
188 | 188 | func aP (aE) = ("duckCustomNameByAssetId_" + aE) | |
189 | 189 | ||
190 | 190 | ||
191 | 191 | func aQ (b) = ("accountCustomNameByAddr_" + b) | |
192 | 192 | ||
193 | 193 | ||
194 | 194 | func aR (b) = ("accRefBy_" + b) | |
195 | 195 | ||
196 | 196 | ||
197 | 197 | func aS (r) = ("onboardArtActivatedOnDuck_" + r) | |
198 | 198 | ||
199 | 199 | ||
200 | 200 | func aT (b) = ("onboardArtActivatedDuckBy_" + b) | |
201 | 201 | ||
202 | 202 | ||
203 | 203 | func aU (b) = ("accReferrals_" + b) | |
204 | 204 | ||
205 | 205 | ||
206 | 206 | func aV (aE) = ("duckOwner_" + aE) | |
207 | 207 | ||
208 | 208 | ||
209 | 209 | func aW (aM) = ("stakedDuckByOwner_" + aM) | |
210 | 210 | ||
211 | 211 | ||
212 | 212 | func aX (r) = ("backPack_" + r) | |
213 | 213 | ||
214 | 214 | ||
215 | 215 | func aY (r) = ("duckLocation_" + r) | |
216 | 216 | ||
217 | 217 | ||
218 | 218 | func aZ () = "contractsBlocked" | |
219 | 219 | ||
220 | 220 | ||
221 | 221 | func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb) | |
222 | 222 | ||
223 | 223 | ||
224 | 224 | func bc () = "emergencyWarehouseProducts" | |
225 | 225 | ||
226 | 226 | ||
227 | 227 | let bd = 1 | |
228 | 228 | ||
229 | 229 | let be = 2 | |
230 | 230 | ||
231 | 231 | func bf (bg) = (parseIntValue(bg[al]) * aj) | |
232 | 232 | ||
233 | 233 | ||
234 | 234 | let bh = false | |
235 | 235 | ||
236 | 236 | let bi = take(drop(this.bytes, 1), 1) | |
237 | 237 | ||
238 | 238 | let bj = { | |
239 | 239 | let bk = bi | |
240 | 240 | if ((base58'2W' == bk)) | |
241 | 241 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
242 | 242 | else if ((base58'2T' == bk)) | |
243 | 243 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
244 | 244 | else throw("Unknown chain") | |
245 | 245 | } | |
246 | 246 | ||
247 | 247 | let bl = { | |
248 | 248 | let bk = bi | |
249 | 249 | if ((base58'2W' == bk)) | |
250 | 250 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
251 | 251 | else if ((base58'2T' == bk)) | |
252 | 252 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
253 | 253 | else throw("Unknown chain") | |
254 | 254 | } | |
255 | 255 | ||
256 | 256 | let bm = { | |
257 | 257 | let bk = bi | |
258 | 258 | if ((base58'2W' == bk)) | |
259 | 259 | then 10000000000 | |
260 | 260 | else if ((base58'2T' == bk)) | |
261 | 261 | then 100000000 | |
262 | 262 | else throw("Unknown chain") | |
263 | 263 | } | |
264 | 264 | ||
265 | 265 | let bn = { | |
266 | 266 | let bk = bi | |
267 | 267 | if ((base58'2W' == bk)) | |
268 | 268 | then 600000 | |
269 | 269 | else if ((base58'2T' == bk)) | |
270 | 270 | then 60000 | |
271 | 271 | else throw("Unknown chain") | |
272 | 272 | } | |
273 | 273 | ||
274 | 274 | let bo = "__" | |
275 | 275 | ||
276 | 276 | let bp = 1000000 | |
277 | 277 | ||
278 | 278 | let bq = 100000000 | |
279 | 279 | ||
280 | 280 | let br = 25 | |
281 | 281 | ||
282 | 282 | let bs = 100 | |
283 | 283 | ||
284 | 284 | let bt = 225 | |
285 | 285 | ||
286 | 286 | let bu = 400 | |
287 | 287 | ||
288 | 288 | let bv = 625 | |
289 | 289 | ||
290 | 290 | let bw = [0, 1, 2, 3, 4, 5] | |
291 | 291 | ||
292 | 292 | func bx (by,bz) = valueOrErrorMessage(getString(by, bz), makeString(["mandatory ", toString(by), ".", bz, " is not defined"], "")) | |
293 | 293 | ||
294 | 294 | ||
295 | 295 | let bA = 1 | |
296 | 296 | ||
297 | 297 | let bB = 2 | |
298 | 298 | ||
299 | 299 | let bC = 3 | |
300 | 300 | ||
301 | 301 | let bD = 4 | |
302 | 302 | ||
303 | 303 | func bE () = "%s__restConfig" | |
304 | 304 | ||
305 | 305 | ||
306 | 306 | func bF () = "%s__restAddr" | |
307 | 307 | ||
308 | 308 | ||
309 | 309 | func bG (bH) = split_4C(bx(bH, bE()), bo) | |
310 | 310 | ||
311 | 311 | ||
312 | 312 | func bI (bJ,bK) = valueOrErrorMessage(addressFromString(bJ[bK]), ("Rest cfg doesn't contain address at index " + toString(bK))) | |
313 | 313 | ||
314 | 314 | ||
315 | 315 | let bL = addressFromStringValue(valueOrElse(getString(this, bF()), bl)) | |
316 | 316 | ||
317 | 317 | let bJ = bG(bL) | |
318 | 318 | ||
319 | 319 | let T = bI(bJ, bA) | |
320 | 320 | ||
321 | 321 | let bM = bI(bJ, bB) | |
322 | 322 | ||
323 | 323 | let bN = bI(bJ, bC) | |
324 | 324 | ||
325 | 325 | let bO = bI(bJ, bD) | |
326 | 326 | ||
327 | 327 | let bP = 0 | |
328 | 328 | ||
329 | 329 | let bQ = 1 | |
330 | 330 | ||
331 | 331 | let bR = 2 | |
332 | 332 | ||
333 | 333 | let bS = 3 | |
334 | 334 | ||
335 | 335 | let bT = 2 | |
336 | 336 | ||
337 | 337 | func bU (by) = ("commitOperation_" + by) | |
338 | 338 | ||
339 | 339 | ||
340 | 340 | func bV (by) = ("finishBlockForAddr_" + by) | |
341 | 341 | ||
342 | 342 | ||
343 | 343 | func bW () = "resTypesProportions" | |
344 | 344 | ||
345 | 345 | ||
346 | 346 | func bX (aM) = ("stakedLandsByOwner_" + aM) | |
347 | 347 | ||
348 | 348 | ||
349 | 349 | func bY (aM) = ("stakedPiecesByOwner_" + aM) | |
350 | 350 | ||
351 | 351 | ||
352 | 352 | func bZ (ca) = { | |
353 | 353 | let bk = ca | |
354 | 354 | if ($isInstanceOf(bk, "String")) | |
355 | 355 | then { | |
356 | 356 | let cb = bk | |
357 | 357 | cb | |
358 | 358 | } | |
359 | 359 | else throw("fail to cast into String") | |
360 | 360 | } | |
361 | 361 | ||
362 | 362 | ||
363 | 363 | func cc (ca) = { | |
364 | 364 | let bk = ca | |
365 | 365 | if ($isInstanceOf(bk, "Int")) | |
366 | 366 | then { | |
367 | 367 | let cd = bk | |
368 | 368 | cd | |
369 | 369 | } | |
370 | 370 | else throw("fail to cast into Int") | |
371 | 371 | } | |
372 | 372 | ||
373 | 373 | ||
374 | 374 | func ce (cf) = { | |
375 | 375 | let bk = cf | |
376 | 376 | if (("S" == bk)) | |
377 | 377 | then br | |
378 | 378 | else if (("M" == bk)) | |
379 | 379 | then bs | |
380 | 380 | else if (("L" == bk)) | |
381 | 381 | then bt | |
382 | 382 | else if (("XL" == bk)) | |
383 | 383 | then bu | |
384 | 384 | else if (("XXL" == bk)) | |
385 | 385 | then bv | |
386 | 386 | else throw("Unknown land size") | |
387 | 387 | } | |
388 | 388 | ||
389 | 389 | ||
390 | 390 | func cg (cb) = isDefined(parseInt(cb)) | |
391 | 391 | ||
392 | 392 | ||
393 | 393 | let ch = { | |
394 | 394 | let bk = bi | |
395 | 395 | if ((base58'2W' == bk)) | |
396 | 396 | then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv") | |
397 | 397 | else if ((base58'2T' == bk)) | |
398 | 398 | then this | |
399 | 399 | else throw("Unknown chain") | |
400 | 400 | } | |
401 | 401 | ||
402 | 402 | let ci = { | |
403 | 403 | let bk = bi | |
404 | 404 | if ((base58'2W' == bk)) | |
405 | 405 | then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb") | |
406 | 406 | else if ((base58'2T' == bk)) | |
407 | 407 | then this | |
408 | 408 | else throw("Unknown chain") | |
409 | 409 | } | |
410 | 410 | ||
411 | 411 | let cj = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD' | |
412 | 412 | ||
413 | 413 | let ck = [30, 60, 120] | |
414 | 414 | ||
415 | 415 | let cl = 300000 | |
416 | 416 | ||
417 | 417 | let cm = 5000000 | |
418 | 418 | ||
419 | 419 | let cn = 50 | |
420 | 420 | ||
421 | 421 | let co = 10000000 | |
422 | 422 | ||
423 | 423 | let cp = { | |
424 | 424 | let bk = bi | |
425 | 425 | if ((base58'2W' == bk)) | |
426 | 426 | then 252289527462 | |
427 | 427 | else if ((base58'2T' == bk)) | |
428 | 428 | then 2522895274 | |
429 | 429 | else throw("Unknown chain") | |
430 | 430 | } | |
431 | 431 | ||
432 | 432 | let cq = { | |
433 | 433 | let bk = bi | |
434 | 434 | if ((base58'2W' == bk)) | |
435 | 435 | then 250000000 | |
436 | 436 | else if ((base58'2T' == bk)) | |
437 | 437 | then 250000000 | |
438 | 438 | else throw("Unknown chain") | |
439 | 439 | } | |
440 | 440 | ||
441 | 441 | let cr = toBigInt(5) | |
442 | 442 | ||
443 | 443 | let cs = toBigInt(20) | |
444 | 444 | ||
445 | 445 | let ct = toBigInt((20 * 20)) | |
446 | 446 | ||
447 | 447 | let cu = toBigInt(((20 * 20) * 20)) | |
448 | 448 | ||
449 | 449 | let cv = toBigInt((((20 * 20) * 20) * 20)) | |
450 | 450 | ||
451 | 451 | let cw = toBigInt(((((20 * 20) * 20) * 20) * 20)) | |
452 | 452 | ||
453 | 453 | let cx = 500 | |
454 | 454 | ||
455 | 455 | func cy () = "nextLandNum" | |
456 | 456 | ||
457 | 457 | ||
458 | 458 | func cz (cA) = ("landToAsset_" + cA) | |
459 | 459 | ||
460 | 460 | ||
461 | 461 | func cB (cC) = ("landByCustomName_" + cC) | |
462 | 462 | ||
463 | 463 | ||
464 | 464 | func cD (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM) | |
465 | 465 | ||
466 | 466 | ||
467 | 467 | func cE (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_") | |
468 | 468 | ||
469 | 469 | ||
470 | 470 | func cF (cA) = ("landOwner_" + cA) | |
471 | 471 | ||
472 | 472 | ||
473 | 473 | func cG (cC) = ("duckByCustomName_" + cC) | |
474 | 474 | ||
475 | 475 | ||
476 | 476 | func cH (cC) = ("accountByCustomName_" + cC) | |
477 | 477 | ||
478 | 478 | ||
479 | 479 | func cI () = "oldiesList" | |
480 | 480 | ||
481 | 481 | ||
482 | 482 | let cJ = 0 | |
483 | 483 | ||
484 | 484 | let cK = 1 | |
485 | 485 | ||
486 | 486 | let cL = 2 | |
487 | 487 | ||
488 | 488 | let cM = 0 | |
489 | 489 | ||
490 | 490 | let cN = 5 | |
491 | 491 | ||
492 | 492 | let cO = 6 | |
493 | 493 | ||
494 | 494 | let cP = 7 | |
495 | 495 | ||
496 | 496 | func cQ (cA,cf) = ((X + cA) + cf) | |
497 | 497 | ||
498 | 498 | ||
499 | 499 | func cR (cS,cT) = { | |
500 | 500 | let cU = (((((cT[0] + cT[1]) + cT[2]) + cT[3]) + cT[4]) + cT[5]) | |
501 | 501 | if ((0 >= cU)) | |
502 | 502 | then throw("Zero weights sum") | |
503 | 503 | else { | |
504 | 504 | let cV = fraction(cS, bp, cU) | |
505 | 505 | func cW (cX,cY) = (cX :+ fraction(cY, cV, bp)) | |
506 | 506 | ||
507 | 507 | let cZ = cT | |
508 | 508 | let da = size(cZ) | |
509 | 509 | let db = nil | |
510 | 510 | func dc (dd,de) = if ((de >= da)) | |
511 | 511 | then dd | |
512 | 512 | else cW(dd, cZ[de]) | |
513 | 513 | ||
514 | 514 | func df (dd,de) = if ((de >= da)) | |
515 | 515 | then dd | |
516 | 516 | else throw("List size exceeds 6") | |
517 | 517 | ||
518 | 518 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
519 | 519 | } | |
520 | 520 | } | |
521 | 521 | ||
522 | 522 | ||
523 | 523 | func dg (cS) = { | |
524 | 524 | let dh = split(value(getString(bW())), "_") | |
525 | 525 | if ((size(dh) != aa)) | |
526 | 526 | then throw("Wrong proportions data") | |
527 | 527 | else { | |
528 | 528 | let di = [parseIntValue(dh[0]), parseIntValue(dh[1]), parseIntValue(dh[2]), parseIntValue(dh[3]), parseIntValue(dh[4]), parseIntValue(dh[5])] | |
529 | 529 | cR(cS, di) | |
530 | 530 | } | |
531 | 531 | } | |
532 | 532 | ||
533 | 533 | ||
534 | 534 | func dj (dk,dl,dm) = { | |
535 | 535 | let dn = dg(dm) | |
536 | 536 | func do (cX,bK) = { | |
537 | 537 | let dp = (parseIntValue(dl[bK]) - dn[bK]) | |
538 | 538 | if ((0 > dp)) | |
539 | 539 | then throw(((((("Not enough material idx=" + toString(bK)) + ", you have ") + dl[bK]) + ", but need ") + toString(dn[bK]))) | |
540 | 540 | else (cX :+ toString(dp)) | |
541 | 541 | } | |
542 | 542 | ||
543 | 543 | if (dk) | |
544 | 544 | then { | |
545 | 545 | let cZ = bw | |
546 | 546 | let da = size(cZ) | |
547 | 547 | let db = nil | |
548 | 548 | func dc (dd,de) = if ((de >= da)) | |
549 | 549 | then dd | |
550 | 550 | else do(dd, cZ[de]) | |
551 | 551 | ||
552 | 552 | func df (dd,de) = if ((de >= da)) | |
553 | 553 | then dd | |
554 | 554 | else throw("List size exceeds 6") | |
555 | 555 | ||
556 | 556 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
557 | 557 | } | |
558 | 558 | else dl | |
559 | 559 | } | |
560 | 560 | ||
561 | 561 | ||
562 | 562 | func dq (dr,ds) = if ((ds == "")) | |
563 | 563 | then dr | |
564 | 564 | else { | |
565 | 565 | func dt (cX,du) = { | |
566 | 566 | let dv = split(du, ",") | |
567 | 567 | if ((size(dv) != 2)) | |
568 | 568 | then throw("Incorrect format, should be index,amount") | |
569 | 569 | else { | |
570 | 570 | let bK = parseIntValue(dv[0]) | |
571 | 571 | if (if ((0 > bK)) | |
572 | 572 | then true | |
573 | 573 | else (bK >= size(ak))) | |
574 | 574 | then throw("Unknown product idx") | |
575 | 575 | else { | |
576 | 576 | let dw = parseIntValue(dv[1]) | |
577 | 577 | let dx = split(cX, (dv[0] + ":")) | |
578 | 578 | if ((size(dx) != 2)) | |
579 | 579 | then throw((("You don't have " + ah[bK]) + " equipped")) | |
580 | 580 | else { | |
581 | 581 | let dy = dx[1] | |
582 | 582 | let dz = if (cg(take(drop(dy, 1), 1))) | |
583 | 583 | then 2 | |
584 | 584 | else 1 | |
585 | 585 | let dA = parseIntValue(take(dy, dz)) | |
586 | 586 | let dB = drop(dy, dz) | |
587 | 587 | let dC = if ((dA >= dw)) | |
588 | 588 | then (dA - dw) | |
589 | 589 | else throw(((((("You equipped " + toString(dA)) + " of ") + ah[bK]) + ", but tried to use ") + toString(dw))) | |
590 | 590 | ((((dx[0] + dv[0]) + ":") + toString(dC)) + dB) | |
591 | 591 | } | |
592 | 592 | } | |
593 | 593 | } | |
594 | 594 | } | |
595 | 595 | ||
596 | 596 | let cZ = split(ds, "_") | |
597 | 597 | let da = size(cZ) | |
598 | 598 | let db = dr | |
599 | 599 | func dc (dd,de) = if ((de >= da)) | |
600 | 600 | then dd | |
601 | 601 | else dt(dd, cZ[de]) | |
602 | 602 | ||
603 | 603 | func df (dd,de) = if ((de >= da)) | |
604 | 604 | then dd | |
605 | 605 | else throw("List size exceeds 10") | |
606 | 606 | ||
607 | 607 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10) | |
608 | 608 | } | |
609 | 609 | ||
610 | 610 | ||
611 | 611 | func dD (dE) = { | |
612 | 612 | let dF = if ((dE == "")) | |
613 | 613 | then nil | |
614 | 614 | else split(dE, "_") | |
615 | 615 | func dG (cX,bg) = { | |
616 | 616 | let dH = (size(cX) / 8) | |
617 | 617 | let dA = if ((size(dF) > dH)) | |
618 | 618 | then parseIntValue(dF[dH]) | |
619 | 619 | else 0 | |
620 | 620 | (cX + toBytes(dA)) | |
621 | 621 | } | |
622 | 622 | ||
623 | 623 | let cZ = ak | |
624 | 624 | let da = size(cZ) | |
625 | 625 | let db = base58'' | |
626 | 626 | func dc (dd,de) = if ((de >= da)) | |
627 | 627 | then dd | |
628 | 628 | else dG(dd, cZ[de]) | |
629 | 629 | ||
630 | 630 | func df (dd,de) = if ((de >= da)) | |
631 | 631 | then dd | |
632 | 632 | else throw("List size exceeds 50") | |
633 | 633 | ||
634 | 634 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
635 | 635 | } | |
636 | 636 | ||
637 | 637 | ||
638 | 638 | func dI (dJ) = { | |
639 | 639 | func dK (cX,bg) = { | |
640 | 640 | let dH = size(cX) | |
641 | 641 | let dL = take(drop(dJ, (8 * dH)), 8) | |
642 | 642 | (cX :+ toString(toInt(dL))) | |
643 | 643 | } | |
644 | 644 | ||
645 | 645 | makeString({ | |
646 | 646 | let cZ = ak | |
647 | 647 | let da = size(cZ) | |
648 | 648 | let db = nil | |
649 | 649 | func dc (dd,de) = if ((de >= da)) | |
650 | 650 | then dd | |
651 | 651 | else dK(dd, cZ[de]) | |
652 | 652 | ||
653 | 653 | func df (dd,de) = if ((de >= da)) | |
654 | 654 | then dd | |
655 | 655 | else throw("List size exceeds 50") | |
656 | 656 | ||
657 | 657 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
658 | 658 | }, "_") | |
659 | 659 | } | |
660 | 660 | ||
661 | 661 | ||
662 | 662 | func dM (dN,dO) = { | |
663 | 663 | func dP (cX,dH) = if ((parseIntValue(dO[dH]) > dN[dH])) | |
664 | 664 | then throw(("Requirement not satisfied: " + g[dH])) | |
665 | 665 | else true | |
666 | 666 | ||
667 | 667 | let cZ = [0, 1, 2, 3, 4, 5, 6] | |
668 | 668 | let da = size(cZ) | |
669 | 669 | let db = false | |
670 | 670 | func dc (dd,de) = if ((de >= da)) | |
671 | 671 | then dd | |
672 | 672 | else dP(dd, cZ[de]) | |
673 | 673 | ||
674 | 674 | func df (dd,de) = if ((de >= da)) | |
675 | 675 | then dd | |
676 | 676 | else throw("List size exceeds 7") | |
677 | 677 | ||
678 | 678 | df(dc(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6), 7) | |
679 | 679 | } | |
680 | 680 | ||
681 | 681 | ||
682 | 682 | func dQ (dR,dF,dS,dT,dU,dV,dN) = { | |
683 | 683 | let dv = split(dR, ":") | |
684 | 684 | if ((size(dv) != 2)) | |
685 | 685 | then throw("Incorrect format, should be index:amount") | |
686 | 686 | else if (if (!(dS)) | |
687 | 687 | then (size(dv[0]) != 2) | |
688 | 688 | else false) | |
689 | 689 | then throw("Product idx should be 2 digits, zero padded") | |
690 | 690 | else { | |
691 | 691 | let dW = parseIntValue(dv[0]) | |
692 | 692 | let dX = parseIntValue(dv[1]) | |
693 | 693 | if (if ((0 > dW)) | |
694 | 694 | then true | |
695 | 695 | else (dW >= size(ak))) | |
696 | 696 | then throw("Unknown product idx") | |
697 | 697 | else if ((0 > dX)) | |
698 | 698 | then throw("Count can't be negative") | |
699 | 699 | else if ((dX > p)) | |
700 | 700 | then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dW])) | |
701 | 701 | else if ((dX == 0)) | |
702 | 702 | then $Tuple2(dF, false) | |
703 | 703 | else { | |
704 | 704 | let dY = take(dF, (8 * dW)) | |
705 | 705 | let dA = toInt(take(drop(dF, (8 * dW)), 8)) | |
706 | 706 | let dB = drop(dF, (8 * (dW + 1))) | |
707 | 707 | let bg = split(ak[dW], "_") | |
708 | 708 | if (if (!(dS)) | |
709 | 709 | then (dX > dA) | |
710 | 710 | else false) | |
711 | 711 | then throw(((((("You have " + toString(dA)) + " of ") + ah[dW]) + ", but tried to use ") + toString(dX))) | |
712 | 712 | else { | |
713 | 713 | let dZ = if (if (!(dS)) | |
714 | 714 | then dM(dN, split(bg[am], ",")) | |
715 | 715 | else false) | |
716 | 716 | then { | |
717 | 717 | let ea = bg[an] | |
718 | 718 | if ((ea == "")) | |
719 | 719 | then throw("Item cannot be equipped") | |
720 | 720 | else { | |
721 | 721 | let eb = parseIntValue(ea) | |
722 | 722 | let ec = (eb / 100) | |
723 | 723 | if ((dT != ec)) | |
724 | 724 | then throw("Segment incompatible") | |
725 | 725 | else { | |
726 | 726 | let ed = ((eb % 100) / 10) | |
727 | 727 | if ((dU != ed)) | |
728 | 728 | then throw("Slot incompatible") | |
729 | 729 | else { | |
730 | 730 | let ee = (eb % 10) | |
731 | 731 | if (if ((dV != 0)) | |
732 | 732 | then (ee > 1) | |
733 | 733 | else false) | |
734 | 734 | then throw("Big items should occupy slot 0") | |
735 | 735 | else (ee > 1) | |
736 | 736 | } | |
737 | 737 | } | |
738 | 738 | } | |
739 | 739 | } | |
740 | 740 | else false | |
741 | 741 | $Tuple2(((dY + toBytes((dA + (if (dS) | |
742 | 742 | then dX | |
743 | 743 | else -(dX))))) + dB), dZ) | |
744 | 744 | } | |
745 | 745 | } | |
746 | 746 | } | |
747 | 747 | } | |
748 | 748 | ||
749 | 749 | ||
750 | 750 | func ef (eg,eh,dS,dT,dU,dO) = if ((eg != "")) | |
751 | 751 | then { | |
752 | 752 | let ei = split(eg, ",") | |
753 | 753 | if ((size(ei) > o)) | |
754 | 754 | then throw("Wrong slots format") | |
755 | 755 | else { | |
756 | 756 | let ej = ei[0] | |
757 | 757 | let ek = if ((size(ei) > 1)) | |
758 | 758 | then ei[1] | |
759 | 759 | else "" | |
760 | 760 | if (if ((ej == "")) | |
761 | 761 | then (ek == "") | |
762 | 762 | else false) | |
763 | 763 | then eh | |
764 | 764 | else { | |
765 | 765 | let el = if ((ej != "")) | |
766 | 766 | then dQ(ej, eh, dS, dT, dU, 0, dO) | |
767 | 767 | else $Tuple2(eh, false) | |
768 | 768 | if ((ek != "")) | |
769 | 769 | then if (el._2) | |
770 | 770 | then throw("Big item already occupies slot") | |
771 | 771 | else dQ(ek, el._1, dS, dT, dU, 1, dO)._1 | |
772 | 772 | else el._1 | |
773 | 773 | } | |
774 | 774 | } | |
775 | 775 | } | |
776 | 776 | else eh | |
777 | 777 | ||
778 | 778 | ||
779 | 779 | func em (en,eo,dS,dO) = { | |
780 | 780 | func dT (cX,ep) = { | |
781 | 781 | let dH = cX._1 | |
782 | 782 | let dU = split(ep, ";") | |
783 | 783 | if ((size(dU) != n)) | |
784 | 784 | then throw("Wrong segment format") | |
785 | 785 | else { | |
786 | 786 | let eq = dU[0] | |
787 | 787 | let er = dU[1] | |
788 | 788 | if (if ((eq == "")) | |
789 | 789 | then (er == "") | |
790 | 790 | else false) | |
791 | 791 | then $Tuple2((dH + 1), cX._2) | |
792 | 792 | else { | |
793 | 793 | let es = ef(eq, cX._2, dS, dH, 0, dO) | |
794 | 794 | $Tuple2((dH + 1), ef(er, es, dS, dH, 1, dO)) | |
795 | 795 | } | |
796 | 796 | } | |
797 | 797 | } | |
798 | 798 | ||
799 | 799 | ( let cZ = en | |
800 | 800 | let da = size(cZ) | |
801 | 801 | let db = $Tuple2(0, eo) | |
802 | 802 | func dc (dd,de) = if ((de >= da)) | |
803 | 803 | then dd | |
804 | 804 | else dT(dd, cZ[de]) | |
805 | 805 | ||
806 | 806 | func df (dd,de) = if ((de >= da)) | |
807 | 807 | then dd | |
808 | 808 | else throw("List size exceeds 6") | |
809 | 809 | ||
810 | 810 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6))._2 | |
811 | 811 | } | |
812 | 812 | ||
813 | 813 | ||
814 | 814 | func et (eu,ev,ew,ex) = if ((size(eu) != aa)) | |
815 | 815 | then throw("Wrong proportions data") | |
816 | 816 | else { | |
817 | 817 | func ey (cX,ez) = { | |
818 | 818 | let dp = (parseIntValue(eu[ez]) + ((ex * ev[ez]) * ew)) | |
819 | 819 | if ((0 > dp)) | |
820 | 820 | then throw(((((((("Panic! Pieces of type=" + toString(ez)) + ", sign=") + toString(ex)) + ", terrainCounts[i]=") + toString(ev[ez])) + ", landSizeIndex=") + toString(ew))) | |
821 | 821 | else (cX :+ toString(dp)) | |
822 | 822 | } | |
823 | 823 | ||
824 | 824 | let cZ = bw | |
825 | 825 | let da = size(cZ) | |
826 | 826 | let db = nil | |
827 | 827 | func dc (dd,de) = if ((de >= da)) | |
828 | 828 | then dd | |
829 | 829 | else ey(dd, cZ[de]) | |
830 | 830 | ||
831 | 831 | func df (dd,de) = if ((de >= da)) | |
832 | 832 | then dd | |
833 | 833 | else throw("List size exceeds 6") | |
834 | 834 | ||
835 | 835 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
836 | 836 | } | |
837 | 837 | ||
838 | 838 | ||
839 | 839 | func eA (ev,ew,ex) = { | |
840 | 840 | let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_") | |
841 | 841 | makeString(et(eu, ev, ew, ex), "_") | |
842 | 842 | } | |
843 | 843 | ||
844 | 844 | ||
845 | 845 | func eB (eC) = [(size(split(eC, "A")) - 1), (size(split(eC, "B")) - 1), (size(split(eC, "C")) - 1), (size(split(eC, "D")) - 1), (size(split(eC, "E")) - 1), (size(split(eC, "F")) - 1)] | |
846 | 846 | ||
847 | 847 | ||
848 | 848 | func eD (eE,ev,eF,ew,eG) = { | |
849 | 849 | func eH (cX,ez) = { | |
850 | 850 | let eI = ((fraction(eF, eG, ac) * ev[ez]) * ew) | |
851 | 851 | (cX :+ toString((parseIntValue(eE[ez]) + eI))) | |
852 | 852 | } | |
853 | 853 | ||
854 | 854 | let di = { | |
855 | 855 | let cZ = bw | |
856 | 856 | let da = size(cZ) | |
857 | 857 | let db = nil | |
858 | 858 | func dc (dd,de) = if ((de >= da)) | |
859 | 859 | then dd | |
860 | 860 | else eH(dd, cZ[de]) | |
861 | 861 | ||
862 | 862 | func df (dd,de) = if ((de >= da)) | |
863 | 863 | then dd | |
864 | 864 | else throw("List size exceeds 6") | |
865 | 865 | ||
866 | 866 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
867 | 867 | } | |
868 | 868 | makeString(di, "_") | |
869 | 869 | } | |
870 | 870 | ||
871 | 871 | ||
872 | 872 | func eJ (ev,eF,ew,eG) = { | |
873 | 873 | func eH (cX,ez) = { | |
874 | 874 | let eI = ((fraction(eF, eG, ac) * ev[ez]) * ew) | |
875 | 875 | $Tuple2((cX._1 :+ eI), (cX._2 + eI)) | |
876 | 876 | } | |
877 | 877 | ||
878 | 878 | let cZ = bw | |
879 | 879 | let da = size(cZ) | |
880 | 880 | let db = $Tuple2(nil, 0) | |
881 | 881 | func dc (dd,de) = if ((de >= da)) | |
882 | 882 | then dd | |
883 | 883 | else eH(dd, cZ[de]) | |
884 | 884 | ||
885 | 885 | func df (dd,de) = if ((de >= da)) | |
886 | 886 | then dd | |
887 | 887 | else throw("List size exceeds 6") | |
888 | 888 | ||
889 | 889 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
890 | 890 | } | |
891 | 891 | ||
892 | 892 | ||
893 | 893 | func eK (eL,eM,eN,eO) = { | |
894 | 894 | let eP = eN._1 | |
895 | 895 | let eQ = eN._2 | |
896 | 896 | if ((eQ == 0)) | |
897 | 897 | then $Tuple2(makeString(eL, "_"), makeString(eM, "_")) | |
898 | 898 | else if ((eO >= eQ)) | |
899 | 899 | then { | |
900 | 900 | func eR (cX,ez) = (cX :+ toString((parseIntValue(eL[ez]) + eP[ez]))) | |
901 | 901 | ||
902 | 902 | let di = { | |
903 | 903 | let cZ = bw | |
904 | 904 | let da = size(cZ) | |
905 | 905 | let db = nil | |
906 | 906 | func dc (dd,de) = if ((de >= da)) | |
907 | 907 | then dd | |
908 | 908 | else eR(dd, cZ[de]) | |
909 | 909 | ||
910 | 910 | func df (dd,de) = if ((de >= da)) | |
911 | 911 | then dd | |
912 | 912 | else throw("List size exceeds 6") | |
913 | 913 | ||
914 | 914 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
915 | 915 | } | |
916 | 916 | $Tuple2(makeString(di, "_"), makeString(eM, "_")) | |
917 | 917 | } | |
918 | 918 | else { | |
919 | 919 | func eS (cX,ez) = { | |
920 | 920 | let eT = fraction(eP[ez], eO, eQ) | |
921 | 921 | $Tuple2((cX._1 :+ toString((parseIntValue(eL[ez]) + eT))), (cX._2 :+ toString(((parseIntValue(eM[ez]) + eP[ez]) - eT)))) | |
922 | 922 | } | |
923 | 923 | ||
924 | 924 | let di = { | |
925 | 925 | let cZ = bw | |
926 | 926 | let da = size(cZ) | |
927 | 927 | let db = $Tuple2(nil, nil) | |
928 | 928 | func dc (dd,de) = if ((de >= da)) | |
929 | 929 | then dd | |
930 | 930 | else eS(dd, cZ[de]) | |
931 | 931 | ||
932 | 932 | func df (dd,de) = if ((de >= da)) | |
933 | 933 | then dd | |
934 | 934 | else throw("List size exceeds 6") | |
935 | 935 | ||
936 | 936 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
937 | 937 | } | |
938 | 938 | $Tuple2(makeString(di._1, "_"), makeString(di._2, "_")) | |
939 | 939 | } | |
940 | 940 | } | |
941 | 941 | ||
942 | 942 | ||
943 | 943 | func eU (eV) = if ((eV >= toBigInt(0))) | |
944 | 944 | then eV | |
945 | 945 | else -(eV) | |
946 | 946 | ||
947 | 947 | ||
948 | 948 | let eW = [[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]] | |
949 | 949 | ||
950 | 950 | func eX (cd,eY) = { | |
951 | 951 | let eZ = toInt((cd % cs)) | |
952 | 952 | let fa = if ((eY[0] > eZ)) | |
953 | 953 | then "A" | |
954 | 954 | else if ((eY[1] > eZ)) | |
955 | 955 | then "B" | |
956 | 956 | else if ((eY[2] > eZ)) | |
957 | 957 | then "C" | |
958 | 958 | else if ((eY[3] > eZ)) | |
959 | 959 | then "D" | |
960 | 960 | else if ((eY[4] > eZ)) | |
961 | 961 | then "E" | |
962 | 962 | else "F" | |
963 | 963 | fa | |
964 | 964 | } | |
965 | 965 | ||
966 | 966 | ||
967 | 967 | func fb (fc,fd) = { | |
968 | 968 | let fe = eW[fd] | |
969 | 969 | func ff (cX,cY) = $Tuple2((((((cX._1 + eX(cX._2, fe)) + eX((cX._2 / cs), fe)) + eX((cX._2 / ct), fe)) + eX((cX._2 / cu), fe)) + eX((cX._2 / cv), fe)), (cX._2 / cw)) | |
970 | 970 | ||
971 | 971 | let fg = { | |
972 | 972 | let cZ = [1, 2, 3, 4, 5] | |
973 | 973 | let da = size(cZ) | |
974 | 974 | let db = $Tuple2("", (fc / cr)) | |
975 | 975 | func dc (dd,de) = if ((de >= da)) | |
976 | 976 | then dd | |
977 | 977 | else ff(dd, cZ[de]) | |
978 | 978 | ||
979 | 979 | func df (dd,de) = if ((de >= da)) | |
980 | 980 | then dd | |
981 | 981 | else throw("List size exceeds 5") | |
982 | 982 | ||
983 | 983 | df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5) | |
984 | 984 | } | |
985 | 985 | fg._1 | |
986 | 986 | } | |
987 | 987 | ||
988 | 988 | ||
989 | - | let fh = ["A", "B", "C", "D", "E", "F"] | |
990 | - | ||
991 | - | func fi (fj,ew) = { | |
992 | - | func fk (cX,cb) = { | |
989 | + | let fh = [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] | |
990 | + | ||
991 | + | let fi = ["A", "B", "C", "D", "E", "F"] | |
992 | + | ||
993 | + | func fj (fk,ew) = { | |
994 | + | func fl (cX,cb) = { | |
993 | 995 | let dH = cX._2 | |
994 | - | let | |
995 | - | let eV = if (( | |
996 | + | let fm = parseIntValue(cb) | |
997 | + | let eV = if ((fm == 0)) | |
996 | 998 | then 0 | |
997 | - | else if (( | |
998 | - | then ( | |
999 | - | else if (( | |
999 | + | else if ((fm >= (4 * ew))) | |
1000 | + | then (fm / ew) | |
1001 | + | else if ((fm > (3 * ew))) | |
1000 | 1002 | then 3 | |
1001 | - | else ((( | |
1003 | + | else (((fm - 1) / ew) + 1) | |
1002 | 1004 | $Tuple3((cX._1 :+ eV), (cX._2 + 1), (cX._3 + eV)) | |
1003 | 1005 | } | |
1004 | 1006 | ||
1005 | 1007 | let fg = { | |
1006 | - | let cZ = | |
1008 | + | let cZ = fk | |
1007 | 1009 | let da = size(cZ) | |
1008 | 1010 | let db = $Tuple3(nil, 0, 0) | |
1009 | 1011 | func dc (dd,de) = if ((de >= da)) | |
1010 | 1012 | then dd | |
1011 | - | else | |
1013 | + | else fl(dd, cZ[de]) | |
1012 | 1014 | ||
1013 | 1015 | func df (dd,de) = if ((de >= da)) | |
1014 | 1016 | then dd | |
1015 | 1017 | else throw("List size exceeds 6") | |
1016 | 1018 | ||
1017 | 1019 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1018 | 1020 | } | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | func | |
1023 | - | let | |
1024 | - | then ( | |
1025 | - | else | |
1026 | - | let | |
1021 | + | let fn = fg._1 | |
1022 | + | let fo = value(indexOf(fn, max(fn))) | |
1023 | + | let fp = (fg._3 - 25) | |
1024 | + | func fq (cX,bK) = { | |
1025 | + | let fr = if ((bK == fo)) | |
1026 | + | then (fn[bK] - fp) | |
1027 | + | else fn[bK] | |
1028 | + | let fs = if ((fr == 0)) | |
1027 | 1029 | then nil | |
1028 | - | else split(drop(toString(pow(10, 0, | |
1029 | - | let eb = | |
1030 | - | func | |
1031 | - | ||
1032 | - | let | |
1033 | - | let cZ = | |
1030 | + | else split(drop(toString(pow(10, 0, fr, 0, 0, DOWN)), 1), "") | |
1031 | + | let eb = fi[bK] | |
1032 | + | func ft (fu,fv) = (fu :+ eb) | |
1033 | + | ||
1034 | + | let fw = { | |
1035 | + | let cZ = fs | |
1034 | 1036 | let da = size(cZ) | |
1035 | 1037 | let db = nil | |
1036 | - | func fw (dd,de) = if ((de >= da)) | |
1037 | - | then dd | |
1038 | - | else fs(dd, cZ[de]) | |
1039 | - | ||
1040 | 1038 | func fx (dd,de) = if ((de >= da)) | |
1041 | 1039 | then dd | |
1040 | + | else ft(dd, cZ[de]) | |
1041 | + | ||
1042 | + | func fy (dd,de) = if ((de >= da)) | |
1043 | + | then dd | |
1042 | 1044 | else throw("List size exceeds 25") | |
1043 | 1045 | ||
1044 | - | fx( | |
1045 | - | } | |
1046 | - | (cX ++ | |
1046 | + | fy(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(fx(db, 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) | |
1047 | + | } | |
1048 | + | (cX ++ fw) | |
1047 | 1049 | } | |
1048 | 1050 | ||
1049 | 1051 | let di = { | |
1050 | 1052 | let cZ = bw | |
1051 | 1053 | let da = size(cZ) | |
1052 | 1054 | let db = nil | |
1053 | - | func fw (dd,de) = if ((de >= da)) | |
1054 | - | then dd | |
1055 | - | else fp(dd, cZ[de]) | |
1056 | - | ||
1057 | 1055 | func fx (dd,de) = if ((de >= da)) | |
1058 | 1056 | then dd | |
1057 | + | else fq(dd, cZ[de]) | |
1058 | + | ||
1059 | + | func fy (dd,de) = if ((de >= da)) | |
1060 | + | then dd | |
1059 | 1061 | else throw("List size exceeds 6") | |
1060 | 1062 | ||
1061 | - | fx(fw(fw(fw(fw(fw(fw(db, 0), 1), 2), 3), 4), 5), 6) | |
1062 | - | } | |
1063 | - | makeString(di, "") | |
1064 | - | } | |
1065 | - | ||
1066 | - | ||
1067 | - | func fy (fz) = { | |
1068 | - | let fA = split(valueOrElse(getString(fz), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1069 | - | [toString(valueOrElse(parseInt(fA[ay]), 0)), if ((size(split(fA[az], "_")) == aa)) | |
1070 | - | then fA[az] | |
1071 | - | else "0_0_0_0_0_0", if ((size(split(fA[aA], "_")) == aa)) | |
1072 | - | then fA[aA] | |
1073 | - | else "0_0_0_0_0_0", fA[aB]] | |
1074 | - | } | |
1075 | - | ||
1076 | - | ||
1077 | - | func fB (fC) = { | |
1078 | - | let dv = split(fC, "_") | |
1063 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1064 | + | } | |
1065 | + | func fz (cX,dH) = (cX + di[dH]) | |
1066 | + | ||
1067 | + | let cZ = fh | |
1068 | + | let da = size(cZ) | |
1069 | + | let db = "" | |
1070 | + | func fA (dd,de) = if ((de >= da)) | |
1071 | + | then dd | |
1072 | + | else fz(dd, cZ[de]) | |
1073 | + | ||
1074 | + | func fB (dd,de) = if ((de >= da)) | |
1075 | + | then dd | |
1076 | + | else throw("List size exceeds 25") | |
1077 | + | ||
1078 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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) | |
1079 | + | } | |
1080 | + | ||
1081 | + | ||
1082 | + | func fC (fD) = { | |
1083 | + | let fE = split(valueOrElse(getString(fD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
1084 | + | [toString(valueOrElse(parseInt(fE[ay]), 0)), if ((size(split(fE[az], "_")) == aa)) | |
1085 | + | then fE[az] | |
1086 | + | else "0_0_0_0_0_0", if ((size(split(fE[aA], "_")) == aa)) | |
1087 | + | then fE[aA] | |
1088 | + | else "0_0_0_0_0_0", fE[aB]] | |
1089 | + | } | |
1090 | + | ||
1091 | + | ||
1092 | + | func fF (fG) = { | |
1093 | + | let dv = split(fG, "_") | |
1079 | 1094 | ((ad * (parseIntValue(dv[1]) + 1)) * parseIntValue(dv[0])) | |
1080 | 1095 | } | |
1081 | 1096 | ||
1082 | 1097 | ||
1083 | - | func | |
1084 | - | let | |
1085 | - | func | |
1086 | - | ||
1087 | - | func | |
1098 | + | func fH (fI) = { | |
1099 | + | let fJ = fI[as] | |
1100 | + | func fK (cX,fL) = (cX + parseIntValue(fL)) | |
1101 | + | ||
1102 | + | func fM (cX,fL) = { | |
1088 | 1103 | let bK = cX._1 | |
1089 | - | let | |
1090 | - | $Tuple2((bK + 1), (cX._2 + ( | |
1091 | - | } | |
1092 | - | ||
1093 | - | let | |
1094 | - | let cZ = split( | |
1104 | + | let fN = (((parseIntValue(fL) + ao) - 1) / ao) | |
1105 | + | $Tuple2((bK + 1), (cX._2 + (fN * bq))) | |
1106 | + | } | |
1107 | + | ||
1108 | + | let fO = { | |
1109 | + | let cZ = split(fI[aq], "_") | |
1095 | 1110 | let da = size(cZ) | |
1096 | 1111 | let db = 0 | |
1097 | 1112 | func dc (dd,de) = if ((de >= da)) | |
1098 | 1113 | then dd | |
1099 | - | else | |
1114 | + | else fK(dd, cZ[de]) | |
1100 | 1115 | ||
1101 | 1116 | func df (dd,de) = if ((de >= da)) | |
1102 | 1117 | then dd | |
1103 | 1118 | else throw("List size exceeds 6") | |
1104 | 1119 | ||
1105 | 1120 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1106 | 1121 | } | |
1107 | - | let | |
1108 | - | let cZ = split( | |
1122 | + | let fP = { | |
1123 | + | let cZ = split(fI[ar], "_") | |
1109 | 1124 | let da = size(cZ) | |
1110 | 1125 | let db = 0 | |
1111 | - | func fw (dd,de) = if ((de >= da)) | |
1112 | - | then dd | |
1113 | - | else fG(dd, cZ[de]) | |
1114 | - | ||
1115 | 1126 | func fx (dd,de) = if ((de >= da)) | |
1116 | 1127 | then dd | |
1128 | + | else fK(dd, cZ[de]) | |
1129 | + | ||
1130 | + | func fy (dd,de) = if ((de >= da)) | |
1131 | + | then dd | |
1117 | 1132 | else throw("List size exceeds 6") | |
1118 | 1133 | ||
1119 | - | fx( | |
1120 | - | } | |
1121 | - | let | |
1134 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1135 | + | } | |
1136 | + | let fQ = if ((fJ == "")) | |
1122 | 1137 | then 0 | |
1123 | - | else ( let cZ = split_4C( | |
1138 | + | else ( let cZ = split_4C(fJ, "_") | |
1124 | 1139 | let da = size(cZ) | |
1125 | 1140 | let db = $Tuple2(0, 0) | |
1126 | - | func | |
1141 | + | func fA (dd,de) = if ((de >= da)) | |
1127 | 1142 | then dd | |
1128 | - | else | |
1129 | - | ||
1130 | - | func | |
1143 | + | else fM(dd, cZ[de]) | |
1144 | + | ||
1145 | + | func fB (dd,de) = if ((de >= da)) | |
1131 | 1146 | then dd | |
1132 | 1147 | else throw("List size exceeds 50") | |
1133 | 1148 | ||
1134 | - | | |
1135 | - | (( | |
1136 | - | } | |
1137 | - | ||
1138 | - | ||
1139 | - | func | |
1140 | - | let | |
1141 | - | let | |
1142 | - | let | |
1143 | - | let | |
1144 | - | let | |
1145 | - | let | |
1146 | - | then makeString(["0", toString( | |
1149 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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 | |
1150 | + | ((fO + fP) + fQ) | |
1151 | + | } | |
1152 | + | ||
1153 | + | ||
1154 | + | func fR (fS,fT,fU) = { | |
1155 | + | let fG = ((toString(fT) + "_") + toString(fU)) | |
1156 | + | let fV = fF(fG) | |
1157 | + | let fW = valueOrElse(getString(fS), (fG + ":0_0_0_0_0_0:0_0_0_0_0_0::0")) | |
1158 | + | let fX = split_4C(fW, ":") | |
1159 | + | let fY = fH(fX) | |
1160 | + | let fZ = if ((5 > size(fX))) | |
1161 | + | then makeString(["0", toString(fY), toString((fV - fY)), toString(fV)], "_") | |
1147 | 1162 | else { | |
1148 | - | let | |
1149 | - | let | |
1150 | - | let | |
1151 | - | then parseIntValue( | |
1152 | - | else | |
1153 | - | makeString([toString( | |
1154 | - | } | |
1155 | - | [ | |
1156 | - | then | |
1157 | - | else "0_0_0_0_0_0", if ((size(split( | |
1158 | - | then | |
1159 | - | else "0_0_0_0_0_0", | |
1160 | - | } | |
1161 | - | ||
1162 | - | ||
1163 | - | func | |
1164 | - | let | |
1165 | - | let | |
1166 | - | (( | |
1167 | - | } | |
1168 | - | ||
1169 | - | ||
1170 | - | func | |
1171 | - | let | |
1172 | - | then ((( | |
1173 | - | else -((((-( | |
1174 | - | ( | |
1175 | - | } | |
1176 | - | ||
1177 | - | ||
1178 | - | func | |
1163 | + | let ga = split(fX[at], "_") | |
1164 | + | let gb = parseIntValue(ga[au]) | |
1165 | + | let gc = if ((size(ga) > 1)) | |
1166 | + | then parseIntValue(ga[av]) | |
1167 | + | else fY | |
1168 | + | makeString([toString(gb), toString(gc), toString(((fV - gb) - gc)), toString(fV)], "_") | |
1169 | + | } | |
1170 | + | [fX[ap], if ((size(split(fX[aq], "_")) == aa)) | |
1171 | + | then fX[aq] | |
1172 | + | else "0_0_0_0_0_0", if ((size(split(fX[ar], "_")) == aa)) | |
1173 | + | then fX[ar] | |
1174 | + | else "0_0_0_0_0_0", fX[as], fZ] | |
1175 | + | } | |
1176 | + | ||
1177 | + | ||
1178 | + | func gd (fI) = { | |
1179 | + | let ge = fH(fI) | |
1180 | + | let gf = parseIntValue(split(fI[at], "_")[au]) | |
1181 | + | ((fF(fI[ap]) - ge) - gf) | |
1182 | + | } | |
1183 | + | ||
1184 | + | ||
1185 | + | func gg (gh,gi) = { | |
1186 | + | let fN = if ((gh >= 0)) | |
1187 | + | then (((gh + gi) - 1) / gi) | |
1188 | + | else -((((-(gh) + gi) - 1) / gi)) | |
1189 | + | (fN * bq) | |
1190 | + | } | |
1191 | + | ||
1192 | + | ||
1193 | + | func gj (gk,fI,gl) = if ((size(gk) != 3)) | |
1179 | 1194 | then throw("cargoListStr should contain exactly 2 ':' separators") | |
1180 | 1195 | else { | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let | |
1196 | + | let gm = split(gk[0], "_") | |
1197 | + | let gn = split(gk[1], "_") | |
1198 | + | let go = if ((gk[2] == "")) | |
1184 | 1199 | then nil | |
1185 | - | else split( | |
1186 | - | if ((size( | |
1200 | + | else split(gk[2], "_") | |
1201 | + | if ((size(gm) != aa)) | |
1187 | 1202 | then throw("All 6 resources should be passed") | |
1188 | - | else if ((size( | |
1203 | + | else if ((size(gn) != aa)) | |
1189 | 1204 | then throw("All 6 materials should be passed") | |
1190 | 1205 | else { | |
1191 | - | let eO = | |
1192 | - | let | |
1193 | - | let | |
1194 | - | let | |
1206 | + | let eO = gd(fI) | |
1207 | + | let gp = split(fI[aq], "_") | |
1208 | + | let gq = split(fI[ar], "_") | |
1209 | + | let gr = if ((fI[as] == "")) | |
1195 | 1210 | then nil | |
1196 | - | else split( | |
1197 | - | let eM = split( | |
1198 | - | let | |
1199 | - | let | |
1211 | + | else split(fI[as], "_") | |
1212 | + | let eM = split(gl[az], "_") | |
1213 | + | let gs = split(gl[aA], "_") | |
1214 | + | let gt = if ((gl[aB] == "")) | |
1200 | 1215 | then nil | |
1201 | - | else split( | |
1202 | - | func | |
1216 | + | else split(gl[aB], "_") | |
1217 | + | func gu (cX,fL) = { | |
1203 | 1218 | let ez = cX._1 | |
1204 | - | let | |
1205 | - | let | |
1206 | - | let | |
1207 | - | if (( | |
1208 | - | then $Tuple4((ez + 1), (cX._2 :+ | |
1209 | - | else if (( | |
1210 | - | then if (( | |
1211 | - | then throw((((("Attempt to take " + | |
1212 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1213 | - | else if ((-( | |
1214 | - | then throw((((("Attempt to take " + toString(-( | |
1215 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1219 | + | let gv = parseIntValue(fL) | |
1220 | + | let gw = parseIntValue(gp[ez]) | |
1221 | + | let gx = parseIntValue(eM[ez]) | |
1222 | + | if ((gv == 0)) | |
1223 | + | then $Tuple4((ez + 1), (cX._2 :+ gp[ez]), (cX._3 :+ eM[ez]), cX._4) | |
1224 | + | else if ((gv > 0)) | |
1225 | + | then if ((gv > gx)) | |
1226 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gx)) + " available")) | |
1227 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv)) | |
1228 | + | else if ((-(gv) > gw)) | |
1229 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gw)) + " available")) | |
1230 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gw + gv))), (cX._3 :+ toString((gx - gv))), (cX._4 + gv)) | |
1216 | 1231 | } | |
1217 | 1232 | ||
1218 | 1233 | let di = { | |
1219 | - | let cZ = | |
1234 | + | let cZ = gm | |
1220 | 1235 | let da = size(cZ) | |
1221 | 1236 | let db = $Tuple4(0, nil, nil, 0) | |
1222 | 1237 | func dc (dd,de) = if ((de >= da)) | |
1223 | 1238 | then dd | |
1224 | - | else | |
1239 | + | else gu(dd, cZ[de]) | |
1225 | 1240 | ||
1226 | 1241 | func df (dd,de) = if ((de >= da)) | |
1227 | 1242 | then dd | |
1228 | 1243 | else throw("List size exceeds 6") | |
1229 | 1244 | ||
1230 | 1245 | df(dc(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5), 6) | |
1231 | 1246 | } | |
1232 | - | func | |
1247 | + | func gy (cX,fL) = { | |
1233 | 1248 | let ez = cX._1 | |
1234 | - | let | |
1235 | - | let | |
1236 | - | let | |
1237 | - | if (( | |
1238 | - | then $Tuple4((ez + 1), (cX._2 :+ | |
1239 | - | else if (( | |
1240 | - | then if (( | |
1241 | - | then throw((((("Attempt to take " + | |
1242 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1243 | - | else if ((-( | |
1244 | - | then throw((((("Attempt to take " + toString(-( | |
1245 | - | else $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1249 | + | let gv = parseIntValue(fL) | |
1250 | + | let gz = parseIntValue(gq[ez]) | |
1251 | + | let gA = parseIntValue(gs[ez]) | |
1252 | + | if ((gv == 0)) | |
1253 | + | then $Tuple4((ez + 1), (cX._2 :+ gq[ez]), (cX._3 :+ gs[ez]), cX._4) | |
1254 | + | else if ((gv > 0)) | |
1255 | + | then if ((gv > gA)) | |
1256 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gA)) + " available")) | |
1257 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv)) | |
1258 | + | else if ((-(gv) > gz)) | |
1259 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gz)) + " available")) | |
1260 | + | else $Tuple4((ez + 1), (cX._2 :+ toString((gz + gv))), (cX._3 :+ toString((gA - gv))), (cX._4 + gv)) | |
1246 | 1261 | } | |
1247 | 1262 | ||
1248 | 1263 | let eq = { | |
1249 | - | let cZ = | |
1264 | + | let cZ = gn | |
1250 | 1265 | let da = size(cZ) | |
1251 | 1266 | let db = $Tuple4(0, nil, nil, di._4) | |
1252 | - | func fw (dd,de) = if ((de >= da)) | |
1253 | - | then dd | |
1254 | - | else gw(dd, cZ[de]) | |
1255 | - | ||
1256 | 1267 | func fx (dd,de) = if ((de >= da)) | |
1257 | 1268 | then dd | |
1269 | + | else gy(dd, cZ[de]) | |
1270 | + | ||
1271 | + | func fy (dd,de) = if ((de >= da)) | |
1272 | + | then dd | |
1258 | 1273 | else throw("List size exceeds 6") | |
1259 | 1274 | ||
1260 | - | fx( | |
1275 | + | fy(fx(fx(fx(fx(fx(fx(db, 0), 1), 2), 3), 4), 5), 6) | |
1261 | 1276 | } | |
1262 | - | func | |
1277 | + | func gB (cX,fL) = { | |
1263 | 1278 | let ez = cX._1 | |
1264 | - | let gt = parseIntValue(fH) | |
1265 | - | let gA = if ((size(gp) > ez)) | |
1266 | - | then parseIntValue(gp[ez]) | |
1267 | - | else 0 | |
1268 | - | let gB = if ((size(gr) > ez)) | |
1279 | + | let gv = parseIntValue(fL) | |
1280 | + | let gC = if ((size(gr) > ez)) | |
1269 | 1281 | then parseIntValue(gr[ez]) | |
1270 | 1282 | else 0 | |
1271 | - | if ((gt == 0)) | |
1272 | - | then $Tuple4((ez + 1), (cX._2 :+ toString(gA)), (cX._3 :+ toString(gB)), cX._4) | |
1273 | - | else if ((gt > 0)) | |
1274 | - | then if ((gt > gB)) | |
1275 | - | then throw((((("Attempt to take " + fH) + " from backpack, but only ") + toString(gB)) + " available")) | |
1283 | + | let gD = if ((size(gt) > ez)) | |
1284 | + | then parseIntValue(gt[ez]) | |
1285 | + | else 0 | |
1286 | + | if ((gv == 0)) | |
1287 | + | then $Tuple4((ez + 1), (cX._2 :+ toString(gC)), (cX._3 :+ toString(gD)), cX._4) | |
1288 | + | else if ((gv > 0)) | |
1289 | + | then if ((gv > gD)) | |
1290 | + | then throw((((("Attempt to take " + fL) + " from backpack, but only ") + toString(gD)) + " available")) | |
1276 | 1291 | else { | |
1277 | - | let | |
1278 | - | $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1292 | + | let gE = (gg((gC + gv), ao) - gg(gC, ao)) | |
1293 | + | $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE)) | |
1279 | 1294 | } | |
1280 | - | else if ((-( | |
1281 | - | then throw((((("Attempt to take " + toString(-( | |
1295 | + | else if ((-(gv) > gC)) | |
1296 | + | then throw((((("Attempt to take " + toString(-(gv))) + " from warehouse, but only ") + toString(gC)) + " available")) | |
1282 | 1297 | else { | |
1283 | - | let | |
1284 | - | $Tuple4((ez + 1), (cX._2 :+ toString(( | |
1298 | + | let gE = (gg((gC + gv), ao) - gg(gC, ao)) | |
1299 | + | $Tuple4((ez + 1), (cX._2 :+ toString((gC + gv))), (cX._3 :+ toString((gD - gv))), (cX._4 + gE)) | |
1285 | 1300 | } | |
1286 | 1301 | } | |
1287 | 1302 | ||
1288 | - | let | |
1303 | + | let fE = if ((size(go) != 0)) | |
1289 | 1304 | then { | |
1290 | - | let cZ = | |
1305 | + | let cZ = go | |
1291 | 1306 | let da = size(cZ) | |
1292 | 1307 | let db = $Tuple4(0, nil, nil, eq._4) | |
1293 | - | func | |
1308 | + | func fA (dd,de) = if ((de >= da)) | |
1294 | 1309 | then dd | |
1295 | - | else | |
1296 | - | ||
1297 | - | func | |
1310 | + | else gB(dd, cZ[de]) | |
1311 | + | ||
1312 | + | func fB (dd,de) = if ((de >= da)) | |
1298 | 1313 | then dd | |
1299 | 1314 | else throw("List size exceeds 50") | |
1300 | 1315 | ||
1301 | - | | |
1316 | + | fB(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(fA(db, 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) | |
1302 | 1317 | } | |
1303 | - | else $Tuple4(0, | |
1304 | - | let | |
1305 | - | if (( | |
1306 | - | then throw((((("Attempt to put total " + toString( | |
1307 | - | else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString( | |
1318 | + | else $Tuple4(0, gr, gt, eq._4) | |
1319 | + | let gF = fE._4 | |
1320 | + | if ((gF > eO)) | |
1321 | + | then throw((((("Attempt to put total " + toString(gF)) + " stuff, but only ") + toString(eO)) + " warehouse space left")) | |
1322 | + | else $Tuple7(makeString(di._2, "_"), makeString(eq._2, "_"), makeString(fE._2, "_"), makeString(di._3, "_"), makeString(eq._3, "_"), makeString(fE._3, "_"), gF) | |
1308 | 1323 | } | |
1309 | 1324 | } | |
1310 | 1325 | ||
1311 | 1326 | ||
1312 | - | func | |
1313 | - | let bb = toString( | |
1314 | - | let | |
1315 | - | let | |
1316 | - | let cA = toString( | |
1317 | - | let fd = toInt(( | |
1318 | - | let eC = fb( | |
1319 | - | let | |
1320 | - | let | |
1321 | - | let aE = calculateAssetId( | |
1322 | - | let | |
1323 | - | $Tuple2([IntegerEntry(cy(), ( | |
1324 | - | } | |
1325 | - | ||
1326 | - | ||
1327 | - | func | |
1327 | + | func gG (gH,gI) = { | |
1328 | + | let bb = toString(gH) | |
1329 | + | let gJ = eU(toBigInt(gI)) | |
1330 | + | let gK = valueOrElse(getInteger(cy()), (cx + 1)) | |
1331 | + | let cA = toString(gK) | |
1332 | + | let fd = toInt((gJ % cr)) | |
1333 | + | let eC = fb(gJ, fd) | |
1334 | + | let gL = ai[fd] | |
1335 | + | let gM = Issue(cQ(cA, "S"), makeString([cA, "S", eC, gL], "_"), 1, 0, false) | |
1336 | + | let aE = calculateAssetId(gM) | |
1337 | + | let gN = toBase58String(aE) | |
1338 | + | $Tuple2([IntegerEntry(cy(), (gK + 1)), gM, StringEntry(cz(cA), gN), StringEntry(aD(gN), bb), StringEntry(cF(cA), bb), IntegerEntry(aH(gN), 0), IntegerEntry(cD(gN, bb), 0), ScriptTransfer(gH, 1, aE)], $Tuple2(gN, gL)) | |
1339 | + | } | |
1340 | + | ||
1341 | + | ||
1342 | + | func gO (bb,gP,gQ) = if (!(sigVerify_8Kb(gP, gQ, cj))) | |
1328 | 1343 | then throw("signature does not match") | |
1329 | 1344 | else { | |
1330 | - | let dv = split(toUtf8String( | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | if (if (( | |
1345 | + | let dv = split(toUtf8String(gP), ";") | |
1346 | + | let gR = split(dv[0], "|") | |
1347 | + | let gS = split(gR[cM], "_") | |
1348 | + | let gT = parseIntValue(gS[0]) | |
1349 | + | let gU = parseIntValue(gS[1]) | |
1350 | + | let gV = split(dv[1], ":") | |
1351 | + | let gW = gV[0] | |
1352 | + | let gX = parseIntValue(gR[cN]) | |
1353 | + | if (if ((gX > (lastBlock.timestamp + cl))) | |
1339 | 1354 | then true | |
1340 | - | else ((lastBlock.timestamp - cl) > | |
1341 | - | then throw(((("signature outdated: logTime=" + toString( | |
1355 | + | else ((lastBlock.timestamp - cl) > gX)) | |
1356 | + | then throw(((("signature outdated: logTime=" + toString(gX)) + ", bcTime=") + toString(lastBlock.timestamp))) | |
1342 | 1357 | else { | |
1343 | - | let | |
1344 | - | let | |
1345 | - | if (( | |
1346 | - | then throw(((("Tx ids don't match! In state: " + | |
1358 | + | let gY = gV[1] | |
1359 | + | let gZ = valueOrElse(getString(aC(bb)), "") | |
1360 | + | if ((gZ != gY)) | |
1361 | + | then throw(((("Tx ids don't match! In state: " + gZ) + ", in msg: ") + gY)) | |
1347 | 1362 | else { | |
1348 | 1363 | let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked") | |
1349 | - | let | |
1350 | - | let | |
1351 | - | let | |
1352 | - | if (( | |
1353 | - | then throw(((("oldHealth=" + toString( | |
1354 | - | else if ((0 >= | |
1364 | + | let ha = q(r) | |
1365 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
1366 | + | let hc = valueOrElse(getInteger(ha), hb) | |
1367 | + | if ((hc != gT)) | |
1368 | + | then throw(((("oldHealth=" + toString(hc)) + " from state does not match one from flight log=") + toString(gT))) | |
1369 | + | else if ((0 >= gT)) | |
1355 | 1370 | then throw("You can't fly with zero health") | |
1356 | 1371 | else { | |
1357 | - | let | |
1358 | - | then | |
1372 | + | let hd = if ((size(gR) > cO)) | |
1373 | + | then gR[cO] | |
1359 | 1374 | else "" | |
1360 | - | let | |
1361 | - | then | |
1375 | + | let he = if ((size(gR) > cP)) | |
1376 | + | then gR[cP] | |
1362 | 1377 | else "" | |
1363 | - | let | |
1364 | - | then ( | |
1378 | + | let hf = if (if ((gU > 0)) | |
1379 | + | then (hd == "$") | |
1365 | 1380 | else false) | |
1366 | 1381 | then cc(invoke(bL, "sendUsdtPrize", [bb], nil)) | |
1367 | 1382 | else 0 | |
1368 | - | $Tuple5( | |
1383 | + | $Tuple5(gU, r, hf, gW, he) | |
1369 | 1384 | } | |
1370 | 1385 | } | |
1371 | 1386 | } | |
1372 | 1387 | } | |
1373 | 1388 | ||
1374 | 1389 | ||
1375 | - | func | |
1376 | - | let bb = toString( | |
1377 | - | let fe = | |
1390 | + | func hg (gH,gI,gP,gQ) = { | |
1391 | + | let bb = toString(gH) | |
1392 | + | let fe = gO(bb, gP, gQ) | |
1378 | 1393 | let r = fe._2 | |
1379 | - | let | |
1380 | - | let | |
1381 | - | let | |
1382 | - | let | |
1383 | - | let | |
1384 | - | let | |
1385 | - | let | |
1386 | - | let | |
1394 | + | let ha = q(r) | |
1395 | + | let fD = aX(r) | |
1396 | + | let gl = fC(fD) | |
1397 | + | let hh = split(gl[aA], "_") | |
1398 | + | let hi = makeString(dj(true, hh, cp), "_") | |
1399 | + | let hj = w(r) | |
1400 | + | let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
1401 | + | let hl = dq(hk, fe._5) | |
1387 | 1402 | if ((0 >= fe._1)) | |
1388 | - | then $Tuple3([IntegerEntry( | |
1403 | + | then $Tuple3([IntegerEntry(ha, 0), StringEntry(hj, hl)], "", 0) | |
1389 | 1404 | else { | |
1390 | - | let | |
1391 | - | let | |
1392 | - | $Tuple3((((( | |
1393 | - | } | |
1394 | - | } | |
1395 | - | ||
1396 | - | ||
1397 | - | func | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | ((ab + fraction(ab, (( | |
1403 | - | } | |
1404 | - | ||
1405 | - | ||
1406 | - | func | |
1407 | - | let | |
1408 | - | then $Tuple2( | |
1405 | + | let hm = gG(gH, gI) | |
1406 | + | let gN = hm._2._1 | |
1407 | + | $Tuple3(((((hm._1 :+ StringEntry(aY(r), makeString([hm._2._2, "L", gN], "_"))) :+ IntegerEntry(ha, fe._1)) :+ StringEntry(hj, hl)) :+ StringEntry(fD, makeString([gl[ay], gl[az], hi, gl[aB]], ":"))), gN, fe._3) | |
1408 | + | } | |
1409 | + | } | |
1410 | + | ||
1411 | + | ||
1412 | + | func hn (aO,ho) = { | |
1413 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1414 | + | let hp = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1415 | + | let hq = (fU / 6) | |
1416 | + | let hr = (fU / 7) | |
1417 | + | ((ab + fraction(ab, ((fU + hq) + (2 * hr)), 5)) + fraction(ab, hp, (ho * 5))) | |
1418 | + | } | |
1419 | + | ||
1420 | + | ||
1421 | + | func hs (b,ht,hu) = { | |
1422 | + | let hv = if ((ht == cJ)) | |
1423 | + | then $Tuple2(hu, valueOrElse(getString(aW(b)), "")) | |
1409 | 1424 | else { | |
1410 | 1425 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1411 | - | let | |
1412 | - | let | |
1413 | - | if (( | |
1414 | - | then throw((("Duck location type is " + | |
1415 | - | else $Tuple2( | |
1416 | - | } | |
1417 | - | let aO = | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | if (( | |
1426 | + | let hw = valueOrElse(getString(aY(r)), ae) | |
1427 | + | let hx = split(value(hw), "_") | |
1428 | + | if ((hx[bd] != "L")) | |
1429 | + | then throw((("Duck location type is " + hx[bd]) + ", but should be L")) | |
1430 | + | else $Tuple2(hx[be], r) | |
1431 | + | } | |
1432 | + | let aO = hv._1 | |
1433 | + | let hy = hv._2 | |
1434 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
1435 | + | let hA = aG(aO) | |
1436 | + | let hB = valueOrErrorMessage(getInteger(hA), (("Land " + hz.name) + " is not staked")) | |
1437 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
1438 | + | if ((hC != b)) | |
1424 | 1439 | then throw((X + " is not yours")) | |
1425 | 1440 | else { | |
1426 | - | let | |
1427 | - | $Tuple4( | |
1428 | - | } | |
1429 | - | } | |
1430 | - | ||
1431 | - | ||
1432 | - | func | |
1441 | + | let hD = split(hz.description, "_") | |
1442 | + | $Tuple4(hy, aO, hD, hB) | |
1443 | + | } | |
1444 | + | } | |
1445 | + | ||
1446 | + | ||
1447 | + | func hE (b,gh,ht,hu) = if ((0 > gh)) | |
1433 | 1448 | then throw("Negative amount") | |
1434 | 1449 | else { | |
1435 | - | let eb = | |
1450 | + | let eb = hs(b, ht, hu) | |
1436 | 1451 | let cf = eb._3[bQ] | |
1437 | 1452 | let ev = eB(eb._3[bR]) | |
1438 | 1453 | let eF = (lastBlock.timestamp - eb._4) | |
1439 | 1454 | if ((0 > eF)) | |
1440 | 1455 | then throw(((("Saved timestamp is in future, saved = " + toString(eb._4)) + ", current = ") + toString(lastBlock.timestamp))) | |
1441 | 1456 | else { | |
1442 | - | let | |
1443 | - | let | |
1444 | - | let | |
1445 | - | if (( | |
1446 | - | then throw(((("Not enough resources, available = " + toString( | |
1457 | + | let ho = ce(cf) | |
1458 | + | let hF = hn(eb._2, ho) | |
1459 | + | let hG = fraction(eF, (hF * ho), ac) | |
1460 | + | if ((gh > hG)) | |
1461 | + | then throw(((("Not enough resources, available = " + toString(hG)) + ", requested = ") + toString(gh))) | |
1447 | 1462 | else { | |
1448 | - | let | |
1449 | - | let | |
1450 | - | let | |
1451 | - | let eN = eJ(ev, (eF - | |
1452 | - | let | |
1453 | - | let | |
1454 | - | let | |
1455 | - | let | |
1456 | - | let eO = parseIntValue( | |
1457 | - | if (if (( | |
1458 | - | then ( | |
1463 | + | let hH = fraction((hG - gh), ac, (hF * ho)) | |
1464 | + | let hI = (lastBlock.timestamp - hH) | |
1465 | + | let fT = (ho / br) | |
1466 | + | let eN = eJ(ev, (eF - hH), fT, hF) | |
1467 | + | let fS = aN(eb._2) | |
1468 | + | let fU = valueOrElse(getInteger(aH(eb._2)), 0) | |
1469 | + | let fI = fR(fS, fT, fU) | |
1470 | + | let ga = split(fI[at], "_") | |
1471 | + | let eO = parseIntValue(ga[aw]) | |
1472 | + | if (if ((ht == cJ)) | |
1473 | + | then (gh > eO) | |
1459 | 1474 | else false) | |
1460 | 1475 | then throw((("Only " + toString(eO)) + " space left in warehouse")) | |
1461 | 1476 | else { | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let eM = split( | |
1465 | - | let eL = split( | |
1466 | - | let | |
1467 | - | then $Tuple4(eD(eL, ev, (eF - | |
1468 | - | else if (( | |
1469 | - | then $Tuple4( | |
1477 | + | let fD = aX(eb._1) | |
1478 | + | let gl = fC(fD) | |
1479 | + | let eM = split(gl[az], "_") | |
1480 | + | let eL = split(fI[aq], "_") | |
1481 | + | let hJ = if ((ht == cJ)) | |
1482 | + | then $Tuple4(eD(eL, ev, (eF - hH), fT, hF), gl[az], (parseIntValue(ga[av]) + eN._2), (parseIntValue(ga[aw]) - eN._2)) | |
1483 | + | else if ((ht == cK)) | |
1484 | + | then $Tuple4(fI[aq], eD(eM, ev, (eF - hH), fT, hF), parseIntValue(ga[av]), parseIntValue(ga[aw])) | |
1470 | 1485 | else { | |
1471 | - | let | |
1472 | - | let | |
1473 | - | $Tuple4( | |
1486 | + | let hK = eK(eL, eM, eN, eO) | |
1487 | + | let hL = min([parseIntValue(ga[aw]), eN._2]) | |
1488 | + | $Tuple4(hK._1, hK._2, (parseIntValue(ga[av]) + hL), (parseIntValue(ga[aw]) - hL)) | |
1474 | 1489 | } | |
1475 | - | let | |
1476 | - | let | |
1477 | - | let | |
1478 | - | let | |
1479 | - | $Tuple5([IntegerEntry(aG(eb._2), | |
1490 | + | let hM = hJ._1 | |
1491 | + | let hN = hJ._2 | |
1492 | + | let hO = hJ._3 | |
1493 | + | let hP = hJ._4 | |
1494 | + | $Tuple5([IntegerEntry(aG(eb._2), hI), IntegerEntry(aK(X, eb._2, b), hI)], fD, [gl[ay], hN, gl[aA], gl[aB]], fS, [fI[ap], hM, fI[ar], fI[as], makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")]) | |
1480 | 1495 | } | |
1481 | 1496 | } | |
1482 | 1497 | } | |
1483 | 1498 | } | |
1484 | 1499 | ||
1485 | 1500 | ||
1486 | - | func | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | | |
1491 | - | } | |
1492 | - | ||
1493 | - | ||
1494 | - | func | |
1495 | - | let b = toString( | |
1496 | - | let eb = | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | if (( | |
1501 | + | func hQ (b,aO,ho,ht) = { | |
1502 | + | let hA = aG(aO) | |
1503 | + | let hB = value(getInteger(hA)) | |
1504 | + | let hG = (fraction((lastBlock.timestamp - hB), hn(aO, ho), ac) * ho) | |
1505 | + | hE(b, hG, ht, aO) | |
1506 | + | } | |
1507 | + | ||
1508 | + | ||
1509 | + | func hR (dk,gH,hS,aO) = { | |
1510 | + | let b = toString(gH) | |
1511 | + | let eb = hs(b, cL, aO) | |
1512 | + | let ho = ce(eb._3[bQ]) | |
1513 | + | let hT = aH(eb._2) | |
1514 | + | let hU = valueOrElse(getInteger(hT), 0) | |
1515 | + | if ((hU >= 3)) | |
1501 | 1516 | then throw("Currently max infrastructure level = 3") | |
1502 | 1517 | else { | |
1503 | - | let R = ( | |
1504 | - | let | |
1518 | + | let R = (hU + 1) | |
1519 | + | let hV = fraction(co, (ho * R), br) | |
1505 | 1520 | if (if (!(dk)) | |
1506 | - | then ( | |
1521 | + | then (hS != hV) | |
1507 | 1522 | else false) | |
1508 | - | then throw(("Payment attached should be " + toString( | |
1523 | + | then throw(("Payment attached should be " + toString(hV))) | |
1509 | 1524 | else { | |
1510 | - | let | |
1511 | - | let | |
1512 | - | let | |
1513 | - | let | |
1514 | - | let | |
1515 | - | let | |
1516 | - | let | |
1517 | - | let | |
1518 | - | let | |
1519 | - | let | |
1520 | - | let | |
1521 | - | let | |
1522 | - | $Tuple3(([IntegerEntry( | |
1525 | + | let fD = aX(eb._1) | |
1526 | + | let gl = fC(fD) | |
1527 | + | let hh = split(gl[aA], "_") | |
1528 | + | let hW = fraction(bm, (ho * R), br) | |
1529 | + | let hi = makeString(dj(dk, hh, hW), "_") | |
1530 | + | let hX = hQ(b, eb._2, ho, cL) | |
1531 | + | let hY = hX._5 | |
1532 | + | let hZ = fF(hY[ap]) | |
1533 | + | let ia = makeString([split(hY[ap], "_")[0], toString(R)], "_") | |
1534 | + | let ib = fF(ia) | |
1535 | + | let ga = split(hY[at], "_") | |
1536 | + | let ic = makeString([ga[au], ga[av], toString(((parseIntValue(ga[aw]) + ib) - hZ)), toString(ib)], "_") | |
1537 | + | $Tuple3(([IntegerEntry(hT, R), IntegerEntry(cD(eb._2, b), R), StringEntry(fD, makeString([gl[ay], hX._3[az], hi, gl[aB]], ":")), StringEntry(hX._4, makeString([ia, hY[aq], hY[ar], hY[as], ic], ":"))] ++ hX._1), R, hW) | |
1523 | 1538 | } | |
1524 | 1539 | } | |
1525 | 1540 | } | |
1526 | 1541 | ||
1527 | 1542 | ||
1528 | - | func | |
1543 | + | func id (r,ie) = if (!(bh)) | |
1529 | 1544 | then $Tuple2(nil, 0) | |
1530 | 1545 | else { | |
1531 | - | let | |
1532 | - | let | |
1533 | - | let L = valueOrElse(getInteger(T, | |
1534 | - | let Q = (L + | |
1535 | - | let | |
1536 | - | let | |
1537 | - | $Tuple2([IntegerEntry( | |
1538 | - | } | |
1539 | - | ||
1540 | - | ||
1541 | - | func | |
1546 | + | let if = u(r) | |
1547 | + | let ig = t(r) | |
1548 | + | let L = valueOrElse(getInteger(T, ig), 0) | |
1549 | + | let Q = (L + ie) | |
1550 | + | let ih = O(valueOrElse(getInteger(T, if), 0), Q) | |
1551 | + | let ii = v(r) | |
1552 | + | $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q) | |
1553 | + | } | |
1554 | + | ||
1555 | + | ||
1556 | + | func ij (b,ie) = if (!(bh)) | |
1542 | 1557 | then $Tuple2(nil, 0) | |
1543 | 1558 | else { | |
1544 | - | let | |
1545 | - | let | |
1546 | - | let L = valueOrElse(getInteger(T, | |
1547 | - | let Q = (L + | |
1548 | - | let | |
1549 | - | let | |
1550 | - | $Tuple2([IntegerEntry( | |
1551 | - | } | |
1552 | - | ||
1553 | - | ||
1554 | - | func | |
1559 | + | let if = y(b) | |
1560 | + | let ig = x(b) | |
1561 | + | let L = valueOrElse(getInteger(T, ig), 0) | |
1562 | + | let Q = (L + ie) | |
1563 | + | let ih = O(valueOrElse(getInteger(T, if), 0), Q) | |
1564 | + | let ii = z(b) | |
1565 | + | $Tuple2([IntegerEntry(if, ih[0]), IntegerEntry(ig, Q), IntegerEntry(ii, (valueOrElse(getInteger(ii), 0) + ih[1]))], Q) | |
1566 | + | } | |
1567 | + | ||
1568 | + | ||
1569 | + | func ik (b) = { | |
1555 | 1570 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1556 | - | let | |
1557 | - | let | |
1558 | - | if (!(isDefined( | |
1571 | + | let il = aR(b) | |
1572 | + | let im = getString(il) | |
1573 | + | if (!(isDefined(im))) | |
1559 | 1574 | then throw("You are not eligible for ONBOARD artifact") | |
1560 | 1575 | else { | |
1561 | - | let | |
1562 | - | let | |
1563 | - | if (isDefined( | |
1564 | - | then throw(("You already used your ONBOARD artifact on duck " + value( | |
1576 | + | let in = aT(b) | |
1577 | + | let io = getString(in) | |
1578 | + | if (isDefined(io)) | |
1579 | + | then throw(("You already used your ONBOARD artifact on duck " + value(io))) | |
1565 | 1580 | else { | |
1566 | - | let | |
1567 | - | let | |
1568 | - | if (isDefined( | |
1569 | - | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value( | |
1570 | - | else ([StringEntry( | |
1581 | + | let ip = aS(r) | |
1582 | + | let iq = getString(ip) | |
1583 | + | if (isDefined(iq)) | |
1584 | + | then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(iq))) | |
1585 | + | else ([StringEntry(in, r), StringEntry(ip, b)] ++ id(r, I)._1) | |
1571 | 1586 | } | |
1572 | 1587 | } | |
1573 | 1588 | } | |
1574 | 1589 | ||
1575 | 1590 | ||
1576 | - | func | |
1577 | - | let eb = | |
1591 | + | func ir (b,hu) = { | |
1592 | + | let eb = hs(b, cL, hu) | |
1578 | 1593 | let aO = eb._2 | |
1579 | - | let | |
1580 | - | let | |
1581 | - | if ((valueOrElse(getInteger( | |
1594 | + | let ho = ce(eb._3[bQ]) | |
1595 | + | let is = aI(Z, aO) | |
1596 | + | if ((valueOrElse(getInteger(is), 0) > 0)) | |
1582 | 1597 | then throw("Presale artifact is already activated") | |
1583 | 1598 | else if ((parseIntValue(eb._3[bP]) > cx)) | |
1584 | 1599 | then throw((((X + " ") + aO) + " is not eligible for presale artifact")) | |
1585 | 1600 | else { | |
1586 | - | let | |
1587 | - | (((( | |
1601 | + | let hX = hQ(b, aO, ho, cL) | |
1602 | + | ((((hX._1 :+ IntegerEntry(is, ho)) :+ IntegerEntry(cE(Z, aO, b), ho)) :+ StringEntry(hX._2, makeString(hX._3, ":"))) :+ StringEntry(hX._4, makeString(hX._5, ":"))) | |
1588 | 1603 | } | |
1589 | 1604 | } | |
1590 | 1605 | ||
1591 | 1606 | ||
1592 | - | func | |
1607 | + | func it (iu,R,iv,b,iw,gI,ix) = { | |
1593 | 1608 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1594 | - | func | |
1595 | - | let | |
1596 | - | let | |
1597 | - | let | |
1598 | - | let | |
1599 | - | if (( | |
1609 | + | func iy (cX,aO) = { | |
1610 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
1611 | + | let hA = aG(aO) | |
1612 | + | let hB = valueOrErrorMessage(getInteger(hA), (("NFT " + hz.name) + " is not staked")) | |
1613 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
1614 | + | if ((hC != b)) | |
1600 | 1615 | then throw((X + " is not yours")) | |
1601 | 1616 | else { | |
1602 | - | let | |
1603 | - | let | |
1617 | + | let hD = split(hz.description, "_") | |
1618 | + | let gL = hD[bS] | |
1604 | 1619 | if (if ((cX._3 != "")) | |
1605 | - | then (cX._3 != | |
1620 | + | then (cX._3 != gL) | |
1606 | 1621 | else false) | |
1607 | 1622 | then throw("Lands should be on the same continent to merge") | |
1608 | 1623 | else { | |
1609 | - | let cf = | |
1610 | - | let | |
1611 | - | let ez = valueOrErrorMessage(indexOf( | |
1612 | - | let | |
1613 | - | let | |
1614 | - | let | |
1615 | - | let | |
1616 | - | let | |
1624 | + | let cf = hD[bQ] | |
1625 | + | let iz = cX._1 | |
1626 | + | let ez = valueOrErrorMessage(indexOf(iz, cf), "You haven't passed all the lands needed") | |
1627 | + | let iA = (take(iz, ez) + drop(iz, (ez + 1))) | |
1628 | + | let ho = ce(cf) | |
1629 | + | let iB = (cX._2 + valueOrElse(getInteger(aI(Z, aO)), 0)) | |
1630 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1631 | + | let iC = { | |
1617 | 1632 | let bk = cf | |
1618 | 1633 | if (("S" == bk)) | |
1619 | 1634 | then 3 | |
1620 | 1635 | else if (("M" == bk)) | |
1621 | 1636 | then 4 | |
1622 | 1637 | else if (("L" == bk)) | |
1623 | 1638 | then 5 | |
1624 | 1639 | else if (("XL" == bk)) | |
1625 | 1640 | then 6 | |
1626 | 1641 | else throw("Only S, M, L, XL can merge") | |
1627 | 1642 | } | |
1628 | - | if (( | |
1643 | + | if ((fU != iC)) | |
1629 | 1644 | then throw("All lands should be maxed to merge") | |
1630 | 1645 | else { | |
1631 | - | let cA = | |
1632 | - | let ev = eB( | |
1633 | - | let eF = (lastBlock.timestamp - | |
1646 | + | let cA = hD[bP] | |
1647 | + | let ev = eB(hD[bR]) | |
1648 | + | let eF = (lastBlock.timestamp - hB) | |
1634 | 1649 | if ((0 > eF)) | |
1635 | - | then throw(((("Saved timestamp is in future, saved = " + toString( | |
1650 | + | then throw(((("Saved timestamp is in future, saved = " + toString(hB)) + ", current = ") + toString(lastBlock.timestamp))) | |
1636 | 1651 | else { | |
1637 | - | let | |
1638 | - | let | |
1639 | - | let | |
1640 | - | let dh = et(cX._6, ev, | |
1641 | - | let | |
1642 | - | let | |
1643 | - | let bK = indexOf( | |
1652 | + | let hF = hn(aO, ho) | |
1653 | + | let fT = (ho / br) | |
1654 | + | let hN = eD(split(cX._4, "_"), ev, eF, fT, hF) | |
1655 | + | let dh = et(cX._6, ev, fT, -1) | |
1656 | + | let fk = et(cX._9, ev, fT, 1) | |
1657 | + | let iD = cX._7 | |
1658 | + | let bK = indexOf(iD, aO) | |
1644 | 1659 | if (!(isDefined(bK))) | |
1645 | 1660 | then throw(("Your staked lands don't contain " + aO)) | |
1646 | 1661 | else { | |
1647 | - | let | |
1648 | - | let | |
1649 | - | $Tuple9( | |
1662 | + | let iE = aF(aO) | |
1663 | + | let iF = valueOrElse(getString(iE), "") | |
1664 | + | $Tuple9(iA, iB, gL, hN, (((((((((((((cX._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cz(cA))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cD(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cE(Z, aO, b))) :+ DeleteEntry(cF(cA))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(iE)) :+ DeleteEntry(cB(iF))) :+ Burn(fromBase58String(aO), 1)), dh, removeByIndex(iD, value(bK)), (cX._8 + ho), fk) | |
1650 | 1665 | } | |
1651 | 1666 | } | |
1652 | 1667 | } | |
1653 | 1668 | } | |
1654 | 1669 | } | |
1655 | 1670 | } | |
1656 | 1671 | ||
1657 | - | let | |
1658 | - | let | |
1672 | + | let fD = aX(r) | |
1673 | + | let gl = fC(fD) | |
1659 | 1674 | let eu = split(valueOrElse(getString(bW()), "0_0_0_0_0_0"), "_") | |
1660 | - | let | |
1661 | - | let | |
1662 | - | let | |
1663 | - | then split_51C(value( | |
1675 | + | let iG = bX(b) | |
1676 | + | let iH = getString(iG) | |
1677 | + | let iI = if (isDefined(iH)) | |
1678 | + | then split_51C(value(iH), "_") | |
1664 | 1679 | else nil | |
1665 | 1680 | let di = { | |
1666 | - | let cZ = | |
1681 | + | let cZ = iw | |
1667 | 1682 | let da = size(cZ) | |
1668 | - | let db = $Tuple9( | |
1683 | + | let db = $Tuple9(iv, 0, "", gl[az], nil, eu, iI, 0, split("0_0_0_0_0_0", "_")) | |
1669 | 1684 | func dc (dd,de) = if ((de >= da)) | |
1670 | 1685 | then dd | |
1671 | - | else | |
1686 | + | else iy(dd, cZ[de]) | |
1672 | 1687 | ||
1673 | 1688 | func df (dd,de) = if ((de >= da)) | |
1674 | 1689 | then dd | |
1675 | 1690 | else throw("List size exceeds 5") | |
1676 | 1691 | ||
1677 | 1692 | df(dc(dc(dc(dc(dc(db, 0), 1), 2), 3), 4), 5) | |
1678 | 1693 | } | |
1679 | - | let | |
1680 | - | let fd = valueOrErrorMessage(indexOf(ai, | |
1681 | - | let eC = | |
1682 | - | let | |
1683 | - | let | |
1684 | - | let | |
1685 | - | let aE = calculateAssetId( | |
1686 | - | let | |
1687 | - | let | |
1688 | - | let | |
1689 | - | let | |
1694 | + | let gL = di._3 | |
1695 | + | let fd = valueOrErrorMessage(indexOf(ai, gL), ("Unknown continent: " + gL)) | |
1696 | + | let eC = fj(di._9, (ce(iu) / br)) | |
1697 | + | let gK = valueOrElse(getInteger(cy()), (cx + 1)) | |
1698 | + | let iJ = toString(gK) | |
1699 | + | let gM = Issue(cQ(iJ, iu), makeString([iJ, iu, eC, gL], "_"), 1, 0, false) | |
1700 | + | let aE = calculateAssetId(gM) | |
1701 | + | let iK = toBase58String(aE) | |
1702 | + | let hi = makeString(dj((ix > 0), split(gl[aA], "_"), ix), "_") | |
1703 | + | let iL = bY(b) | |
1704 | + | let iM = valueOrElse(getInteger(iL), 0) | |
1690 | 1705 | $Tuple2((((((((((((((((di._5 :+ (if ((size(di._7) > 0)) | |
1691 | - | then StringEntry( | |
1692 | - | else DeleteEntry( | |
1706 | + | then StringEntry(iG, makeString_11C(di._7, "_")) | |
1707 | + | else DeleteEntry(iG))) :+ IntegerEntry(iL, if ((di._8 > iM)) | |
1693 | 1708 | then 0 | |
1694 | - | else ( | |
1695 | - | } | |
1696 | - | ||
1697 | - | ||
1698 | - | func | |
1699 | - | ||
1700 | - | ||
1701 | - | func | |
1702 | - | let | |
1709 | + | else (iM - di._8))) :+ IntegerEntry(cy(), (gK + 1))) :+ gM) :+ StringEntry(cz(iJ), iK)) :+ StringEntry(aD(iK), b)) :+ StringEntry(cF(iJ), b)) :+ IntegerEntry(aI(Z, iK), di._2)) :+ IntegerEntry(cE(Z, iK, b), di._2)) :+ IntegerEntry(aH(iK), R)) :+ IntegerEntry(cD(iK, b), R)) :+ StringEntry(fD, makeString([gl[ay], di._4, hi, gl[aB]], ":"))) :+ StringEntry(bW(), makeString(di._6, "_"))) :+ StringEntry(aY(r), makeString([gL, "L", iK], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iK) | |
1710 | + | } | |
1711 | + | ||
1712 | + | ||
1713 | + | func iN (b,iw,gI) = it("M", 3, "SSSS", b, iw, gI, 0) | |
1714 | + | ||
1715 | + | ||
1716 | + | func iO (b,iw,gI,dk,hS) = { | |
1717 | + | let hV = (co * 4) | |
1703 | 1718 | if (if (!(dk)) | |
1704 | - | then ( | |
1719 | + | then (hS != hV) | |
1705 | 1720 | else false) | |
1706 | - | then throw(("Payment attached should be " + toString( | |
1707 | - | else | |
1708 | - | } | |
1709 | - | ||
1710 | - | ||
1711 | - | func | |
1712 | - | let | |
1721 | + | then throw(("Payment attached should be " + toString(hV))) | |
1722 | + | else it("L", 4, "SMM", b, iw, gI, (bm * 4)) | |
1723 | + | } | |
1724 | + | ||
1725 | + | ||
1726 | + | func iP (b,iw,gI,dk,hS) = { | |
1727 | + | let hV = (co * 47) | |
1713 | 1728 | if (if (!(dk)) | |
1714 | - | then ( | |
1729 | + | then (hS != hV) | |
1715 | 1730 | else false) | |
1716 | - | then throw(("Payment attached should be " + toString( | |
1717 | - | else | |
1718 | - | } | |
1719 | - | ||
1720 | - | ||
1721 | - | func | |
1722 | - | let | |
1731 | + | then throw(("Payment attached should be " + toString(hV))) | |
1732 | + | else it("XL", 5, "SSSML", b, iw, gI, (bm * 47)) | |
1733 | + | } | |
1734 | + | ||
1735 | + | ||
1736 | + | func iQ (b,iw,gI,dk,hS) = { | |
1737 | + | let hV = (co * 54) | |
1723 | 1738 | if (if (!(dk)) | |
1724 | - | then ( | |
1739 | + | then (hS != hV) | |
1725 | 1740 | else false) | |
1726 | - | then throw(("Payment attached should be " + toString( | |
1727 | - | else | |
1728 | - | } | |
1729 | - | ||
1730 | - | ||
1731 | - | func | |
1732 | - | let | |
1733 | - | let bk = size( | |
1741 | + | then throw(("Payment attached should be " + toString(hV))) | |
1742 | + | else it("XXL", 6, "LXL", b, iw, gI, (bm * 54)) | |
1743 | + | } | |
1744 | + | ||
1745 | + | ||
1746 | + | func iR (dk,b,hS,iw,gI) = { | |
1747 | + | let iS = { | |
1748 | + | let bk = size(iw) | |
1734 | 1749 | if ((4 == bk)) | |
1735 | - | then | |
1750 | + | then iN(b, iw, gI) | |
1736 | 1751 | else if ((3 == bk)) | |
1737 | - | then | |
1752 | + | then iO(b, iw, gI, dk, hS) | |
1738 | 1753 | else if ((5 == bk)) | |
1739 | - | then | |
1754 | + | then iP(b, iw, gI, dk, hS) | |
1740 | 1755 | else if ((2 == bk)) | |
1741 | - | then | |
1756 | + | then iQ(b, iw, gI, dk, hS) | |
1742 | 1757 | else throw("Unknown merge") | |
1743 | 1758 | } | |
1744 | - | | |
1745 | - | } | |
1746 | - | ||
1747 | - | ||
1748 | - | func | |
1759 | + | iS | |
1760 | + | } | |
1761 | + | ||
1762 | + | ||
1763 | + | func iT (ez) = if (if ((ez.originCaller != bL)) | |
1749 | 1764 | then valueOrElse(getBoolean(aZ()), false) | |
1750 | 1765 | else false) | |
1751 | 1766 | then throw("Contracts are under maintenance") | |
1752 | 1767 | else StringEntry(aC(toString(ez.originCaller)), toBase58String(ez.transactionId)) | |
1753 | 1768 | ||
1754 | 1769 | ||
1755 | 1770 | @Callable(ez) | |
1756 | - | func constructorV1 ( | |
1771 | + | func constructorV1 (iU) = if ((ez.caller != this)) | |
1757 | 1772 | then throw("Permission denied") | |
1758 | - | else [StringEntry(bF(), | |
1759 | - | ||
1760 | - | ||
1761 | - | ||
1762 | - | @Callable(ez) | |
1763 | - | func setBlocked ( | |
1773 | + | else [StringEntry(bF(), iU)] | |
1774 | + | ||
1775 | + | ||
1776 | + | ||
1777 | + | @Callable(ez) | |
1778 | + | func setBlocked (iV) = if ((ez.caller != this)) | |
1764 | 1779 | then throw("permission denied") | |
1765 | - | else [BooleanEntry(aZ(), | |
1780 | + | else [BooleanEntry(aZ(), iV)] | |
1766 | 1781 | ||
1767 | 1782 | ||
1768 | 1783 | ||
1769 | 1784 | @Callable(ez) | |
1770 | 1785 | func stakeLand () = { | |
1771 | - | let | |
1786 | + | let iW = iT(ez) | |
1772 | 1787 | if ((size(ez.payments) != 1)) | |
1773 | 1788 | then throw("Exactly one payment required") | |
1774 | 1789 | else { | |
1775 | - | let | |
1776 | - | let aE = value( | |
1790 | + | let iX = value(ez.payments[0]) | |
1791 | + | let aE = value(iX.assetId) | |
1777 | 1792 | let by = toString(ez.caller) | |
1778 | - | if (( | |
1793 | + | if ((iX.amount != 1)) | |
1779 | 1794 | then throw((("NFT " + X) + " token should be attached as payment")) | |
1780 | 1795 | else { | |
1781 | - | let | |
1782 | - | if (( | |
1796 | + | let hz = value(assetInfo(aE)) | |
1797 | + | if ((hz.issuer != this)) | |
1783 | 1798 | then throw("Unknown issuer of token") | |
1784 | - | else if (!(contains( | |
1799 | + | else if (!(contains(hz.name, X))) | |
1785 | 1800 | then throw((("Only NFT " + X) + " tokens are accepted")) | |
1786 | 1801 | else { | |
1787 | - | let | |
1788 | - | let cA = if (contains( | |
1789 | - | then dropRight( | |
1790 | - | else if (contains( | |
1791 | - | then dropRight( | |
1792 | - | else dropRight( | |
1802 | + | let iY = drop(hz.name, 4) | |
1803 | + | let cA = if (contains(iY, "XXL")) | |
1804 | + | then dropRight(iY, 3) | |
1805 | + | else if (contains(iY, "XL")) | |
1806 | + | then dropRight(iY, 2) | |
1807 | + | else dropRight(iY, 1) | |
1793 | 1808 | if (!(isDefined(parseInt(cA)))) | |
1794 | - | then throw(("Cannot parse land number from " + | |
1809 | + | then throw(("Cannot parse land number from " + hz.name)) | |
1795 | 1810 | else { | |
1796 | 1811 | let aO = toBase58String(aE) | |
1797 | - | let | |
1798 | - | if (isDefined(getInteger( | |
1799 | - | then throw((("NFT " + | |
1812 | + | let hA = aG(aO) | |
1813 | + | if (isDefined(getInteger(hA))) | |
1814 | + | then throw((("NFT " + hz.name) + " is already staked")) | |
1800 | 1815 | else { | |
1801 | - | let | |
1802 | - | let ev = eB( | |
1803 | - | let | |
1804 | - | let dh = eA(ev, ( | |
1805 | - | let | |
1806 | - | let | |
1807 | - | let | |
1808 | - | let | |
1809 | - | then split_51C(value( | |
1816 | + | let hD = split(hz.description, "_") | |
1817 | + | let ev = eB(hD[bR]) | |
1818 | + | let ho = ce(hD[bQ]) | |
1819 | + | let dh = eA(ev, (ho / br), 1) | |
1820 | + | let hp = valueOrElse(getInteger(aI(Z, aO)), 0) | |
1821 | + | let iG = bX(by) | |
1822 | + | let iH = getString(iG) | |
1823 | + | let iD = if (isDefined(iH)) | |
1824 | + | then split_51C(value(iH), "_") | |
1810 | 1825 | else nil | |
1811 | - | if (containsElement( | |
1826 | + | if (containsElement(iD, aO)) | |
1812 | 1827 | then throw(("Your staked lands already contain " + aO)) | |
1813 | 1828 | else { | |
1814 | - | let | |
1815 | - | let | |
1816 | - | let | |
1817 | - | let | |
1818 | - | $Tuple2([IntegerEntry( | |
1829 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
1830 | + | let iL = bY(by) | |
1831 | + | let iZ = valueOrElse(getInteger(iL), 0) | |
1832 | + | let ja = cc(invoke(bO, "onStakeUnstakeLand", [by], nil)) | |
1833 | + | $Tuple2([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(X, aO, by), lastBlock.timestamp), StringEntry(iG, makeString_11C((iD :+ aO), "_")), IntegerEntry(iL, (iZ + ho)), StringEntry(aD(aO), by), StringEntry(cF(cA), by), IntegerEntry(cE(Z, aO, by), hp), IntegerEntry(cD(aO, by), fU), StringEntry(bW(), dh), iW], ja) | |
1819 | 1834 | } | |
1820 | 1835 | } | |
1821 | 1836 | } | |
1822 | 1837 | } | |
1823 | 1838 | } | |
1824 | 1839 | } | |
1825 | 1840 | } | |
1826 | 1841 | ||
1827 | 1842 | ||
1828 | 1843 | ||
1829 | 1844 | @Callable(ez) | |
1830 | - | func unstakeLand ( | |
1831 | - | let | |
1845 | + | func unstakeLand (hu) = { | |
1846 | + | let iW = iT(ez) | |
1832 | 1847 | if ((size(ez.payments) != 0)) | |
1833 | 1848 | then throw("No payments required") | |
1834 | 1849 | else { | |
1835 | 1850 | let b = toString(ez.caller) | |
1836 | - | let eb = | |
1851 | + | let eb = hs(b, cK, hu) | |
1837 | 1852 | let aO = eb._2 | |
1838 | - | let | |
1853 | + | let iG = bX(b) | |
1839 | 1854 | let ev = eB(eb._3[bR]) | |
1840 | - | let | |
1841 | - | let dh = eA(ev, ( | |
1842 | - | let | |
1843 | - | let | |
1844 | - | let bK = indexOf( | |
1855 | + | let ho = ce(eb._3[bQ]) | |
1856 | + | let dh = eA(ev, (ho / br), -1) | |
1857 | + | let hX = hQ(b, aO, ho, cK) | |
1858 | + | let iD = split_51C(valueOrElse(getString(iG), ""), "_") | |
1859 | + | let bK = indexOf(iD, aO) | |
1845 | 1860 | if (!(isDefined(bK))) | |
1846 | 1861 | then throw(("Your staked lands don't contain " + aO)) | |
1847 | 1862 | else { | |
1848 | - | let | |
1849 | - | let | |
1850 | - | if (( | |
1851 | - | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString( | |
1863 | + | let jb = lastBlock.timestamp | |
1864 | + | let jc = valueOrElse(getInteger(bN, ba(b)), 0) | |
1865 | + | if ((jc >= jb)) | |
1866 | + | then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(jc))) | |
1852 | 1867 | else { | |
1853 | - | let | |
1854 | - | if (( | |
1855 | - | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString( | |
1868 | + | let jd = (valueOrElse(getInteger(bO, a(b)), 0) + bn) | |
1869 | + | if ((jd > jb)) | |
1870 | + | then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(jd))) | |
1856 | 1871 | else { | |
1857 | - | let | |
1858 | - | let | |
1859 | - | let | |
1872 | + | let iL = bY(b) | |
1873 | + | let iM = valueOrElse(getInteger(iL), 0) | |
1874 | + | let je = if ((ho > iM)) | |
1860 | 1875 | then 0 | |
1861 | - | else ( | |
1862 | - | let | |
1863 | - | $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry( | |
1864 | - | then StringEntry( | |
1865 | - | else DeleteEntry( | |
1876 | + | else (iM - ho) | |
1877 | + | let ja = cc(invoke(bO, "onStakeUnstakeLand", [b], nil)) | |
1878 | + | $Tuple2([ScriptTransfer(ez.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bW(), dh), StringEntry(hX._2, makeString(hX._3, ":")), if ((size(iD) > 1)) | |
1879 | + | then StringEntry(iG, makeString_11C(removeByIndex(iD, value(bK)), "_")) | |
1880 | + | else DeleteEntry(iG), IntegerEntry(iL, je), iW], ja) | |
1866 | 1881 | } | |
1867 | 1882 | } | |
1868 | 1883 | } | |
1869 | 1884 | } | |
1870 | 1885 | } | |
1871 | 1886 | ||
1872 | 1887 | ||
1873 | 1888 | ||
1874 | 1889 | @Callable(ez) | |
1875 | 1890 | func stakeDuck () = { | |
1876 | - | let | |
1891 | + | let iW = iT(ez) | |
1877 | 1892 | if ((size(ez.payments) != 1)) | |
1878 | 1893 | then throw("Exactly one payment required") | |
1879 | 1894 | else { | |
1880 | - | let | |
1881 | - | let aE = value( | |
1895 | + | let iX = value(ez.payments[0]) | |
1896 | + | let aE = value(iX.assetId) | |
1882 | 1897 | let by = toString(ez.caller) | |
1883 | - | if (( | |
1898 | + | if ((iX.amount != 1)) | |
1884 | 1899 | then throw((("NFT " + Y) + " token should be attached as payment")) | |
1885 | 1900 | else { | |
1886 | - | let | |
1887 | - | if (if (( | |
1888 | - | then ( | |
1901 | + | let hz = value(assetInfo(aE)) | |
1902 | + | if (if ((hz.issuer != ch)) | |
1903 | + | then (hz.issuer != ci) | |
1889 | 1904 | else false) | |
1890 | 1905 | then throw((("Unknown issuer of " + Y) + " token")) | |
1891 | - | else if (!(contains( | |
1906 | + | else if (!(contains(hz.name, Y))) | |
1892 | 1907 | then throw((("Only NFT " + Y) + " tokens are accepted")) | |
1893 | 1908 | else { | |
1894 | - | let | |
1895 | - | let | |
1896 | - | if (isDefined(getInteger( | |
1897 | - | then throw((("NFT " + | |
1909 | + | let jf = toBase58String(aE) | |
1910 | + | let hA = aG(jf) | |
1911 | + | if (isDefined(getInteger(hA))) | |
1912 | + | then throw((("NFT " + hz.name) + " is already staked")) | |
1898 | 1913 | else if (isDefined(getString(aW(by)))) | |
1899 | - | then throw(("You already staked one duck: " + | |
1914 | + | then throw(("You already staked one duck: " + hz.name)) | |
1900 | 1915 | else { | |
1901 | - | let | |
1902 | - | let | |
1903 | - | let | |
1904 | - | let | |
1905 | - | let | |
1906 | - | let | |
1907 | - | let | |
1908 | - | ([IntegerEntry( | |
1916 | + | let jg = aY(jf) | |
1917 | + | let jh = getString(jg) | |
1918 | + | let fD = aX(jf) | |
1919 | + | let ji = getString(fD) | |
1920 | + | let ha = q(jf) | |
1921 | + | let hb = M(valueOrElse(getInteger(u(jf)), 0)) | |
1922 | + | let jj = valueOrElse(getInteger(ha), hb) | |
1923 | + | ([IntegerEntry(hA, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), by), lastBlock.timestamp), StringEntry(aV(jf), by), StringEntry(aW(by), jf)] ++ (if (isDefined(jh)) | |
1909 | 1924 | then nil | |
1910 | - | else ([StringEntry( | |
1925 | + | else ([StringEntry(jg, ae)] ++ (if (isDefined(ji)) | |
1911 | 1926 | then nil | |
1912 | - | else (([StringEntry( | |
1927 | + | else (([StringEntry(fD, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ha, jj)) :+ iW))))) | |
1913 | 1928 | } | |
1914 | 1929 | } | |
1915 | 1930 | } | |
1916 | 1931 | } | |
1917 | 1932 | } | |
1918 | 1933 | ||
1919 | 1934 | ||
1920 | 1935 | ||
1921 | 1936 | @Callable(ez) | |
1922 | - | func unstakeDuck ( | |
1923 | - | let | |
1937 | + | func unstakeDuck (jf) = { | |
1938 | + | let iW = iT(ez) | |
1924 | 1939 | if ((size(ez.payments) != 0)) | |
1925 | 1940 | then throw("No payments required") | |
1926 | 1941 | else { | |
1927 | - | let aE = fromBase58String( | |
1942 | + | let aE = fromBase58String(jf) | |
1928 | 1943 | let by = toString(ez.caller) | |
1929 | - | let | |
1930 | - | let | |
1931 | - | if (!(isDefined(getInteger( | |
1932 | - | then throw((("NFT " + | |
1944 | + | let hz = value(assetInfo(aE)) | |
1945 | + | let hA = aG(toBase58String(aE)) | |
1946 | + | if (!(isDefined(getInteger(hA)))) | |
1947 | + | then throw((("NFT " + hz.name) + " is not staked")) | |
1933 | 1948 | else if (!(isDefined(getString(aW(by))))) | |
1934 | - | then throw((("The duck " + | |
1949 | + | then throw((("The duck " + hz.name) + " is not staked")) | |
1935 | 1950 | else { | |
1936 | - | let | |
1937 | - | if (( | |
1951 | + | let hC = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + hz.name) + " is orphaned")) | |
1952 | + | if ((hC != by)) | |
1938 | 1953 | then throw("Staked NFT is not yours") | |
1939 | 1954 | else { | |
1940 | - | let | |
1941 | - | let | |
1942 | - | let W = valueOrElse(getInteger( | |
1943 | - | if (( | |
1944 | - | then throw((("Please heal your duck to " + toString( | |
1945 | - | else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry( | |
1955 | + | let ha = q(jf) | |
1956 | + | let hb = M(valueOrElse(getInteger(u(jf)), 0)) | |
1957 | + | let W = valueOrElse(getInteger(ha), hb) | |
1958 | + | if ((hb > W)) | |
1959 | + | then throw((("Please heal your duck to " + toString(hb)) + "hp before unstaking")) | |
1960 | + | else [ScriptTransfer(ez.caller, 1, aE), DeleteEntry(hA), DeleteEntry(ha), DeleteEntry(aY(jf)), DeleteEntry(aV(jf)), DeleteEntry(aK(Y, jf, by)), DeleteEntry(aW(by)), iW] | |
1946 | 1961 | } | |
1947 | 1962 | } | |
1948 | 1963 | } | |
1949 | 1964 | } | |
1950 | 1965 | ||
1951 | 1966 | ||
1952 | 1967 | ||
1953 | 1968 | @Callable(ez) | |
1954 | - | func claimRes ( | |
1955 | - | let | |
1969 | + | func claimRes (gh,jk) = { | |
1970 | + | let iW = iT(ez) | |
1956 | 1971 | if ((size(ez.payments) != 0)) | |
1957 | 1972 | then throw("No payments required") | |
1958 | 1973 | else { | |
1959 | 1974 | let b = toString(ez.originCaller) | |
1960 | - | let dp = | |
1975 | + | let dp = hE(b, gh, cK, jk) | |
1961 | 1976 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
1962 | - | $Tuple2(((((dp._1 ++ | |
1963 | - | } | |
1964 | - | } | |
1965 | - | ||
1966 | - | ||
1967 | - | ||
1968 | - | @Callable(ez) | |
1969 | - | func claimResToWH ( | |
1970 | - | let | |
1977 | + | $Tuple2(((((dp._1 ++ id(r, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._3[az]) | |
1978 | + | } | |
1979 | + | } | |
1980 | + | ||
1981 | + | ||
1982 | + | ||
1983 | + | @Callable(ez) | |
1984 | + | func claimResToWH (gh,jk) = { | |
1985 | + | let iW = iT(ez) | |
1971 | 1986 | if ((size(ez.payments) != 0)) | |
1972 | 1987 | then throw("No payments required") | |
1973 | 1988 | else { | |
1974 | 1989 | let b = toString(ez.originCaller) | |
1975 | - | let dp = | |
1976 | - | $Tuple2(((((dp._1 ++ | |
1977 | - | } | |
1978 | - | } | |
1979 | - | ||
1980 | - | ||
1981 | - | ||
1982 | - | @Callable(ez) | |
1983 | - | func flight ( | |
1984 | - | let | |
1990 | + | let dp = hE(b, gh, cJ, jk) | |
1991 | + | $Tuple2(((((dp._1 ++ ij(b, fraction(A, gh, bq))._1) :+ StringEntry(dp._2, makeString(dp._3, ":"))) :+ StringEntry(dp._4, makeString(dp._5, ":"))) :+ iW), dp._5[aq]) | |
1992 | + | } | |
1993 | + | } | |
1994 | + | ||
1995 | + | ||
1996 | + | ||
1997 | + | @Callable(ez) | |
1998 | + | func flight (gP,gQ) = { | |
1999 | + | let iW = iT(ez) | |
1985 | 2000 | if ((size(ez.payments) != 0)) | |
1986 | 2001 | then throw("No payments required") | |
1987 | 2002 | else { | |
1988 | 2003 | let bb = toString(ez.caller) | |
1989 | - | let fe = | |
2004 | + | let fe = gO(bb, gP, gQ) | |
1990 | 2005 | let r = fe._2 | |
1991 | - | let | |
1992 | - | let | |
1993 | - | if ((fe._4 == | |
2006 | + | let jg = aY(r) | |
2007 | + | let hw = valueOrElse(getString(jg), ae) | |
2008 | + | if ((fe._4 == hw)) | |
1994 | 2009 | then throw("You can't fly to the same location") | |
1995 | 2010 | else { | |
1996 | - | let | |
1997 | - | let | |
1998 | - | let | |
1999 | - | $Tuple2(([StringEntry( | |
2011 | + | let hj = w(r) | |
2012 | + | let hk = valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,") | |
2013 | + | let hl = dq(hk, fe._5) | |
2014 | + | $Tuple2(([StringEntry(jg, if ((fe._1 > 0)) | |
2000 | 2015 | then fe._4 | |
2001 | - | else | |
2016 | + | else hw), StringEntry(hj, hl), IntegerEntry(q(r), fe._1), iW] ++ id(r, if ((fe._1 > 0)) | |
2002 | 2017 | then B | |
2003 | 2018 | else C)._1), fe._3) | |
2004 | 2019 | } | |
2005 | 2020 | } | |
2006 | 2021 | } | |
2007 | 2022 | ||
2008 | 2023 | ||
2009 | 2024 | ||
2010 | 2025 | @Callable(ez) | |
2011 | - | func heal ( | |
2012 | - | let | |
2013 | - | if (if (if ((0 > | |
2026 | + | func heal (jl,jm,jn) = { | |
2027 | + | let iW = iT(ez) | |
2028 | + | if (if (if ((0 > jl)) | |
2014 | 2029 | then true | |
2015 | - | else (0 > | |
2030 | + | else (0 > jm)) | |
2016 | 2031 | then true | |
2017 | - | else (0 > | |
2032 | + | else (0 > jn)) | |
2018 | 2033 | then throw("Quantity cannot be negative") | |
2019 | 2034 | else { | |
2020 | 2035 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2021 | - | let | |
2022 | - | let | |
2023 | - | let | |
2024 | - | let | |
2025 | - | if (( | |
2026 | - | then throw((("HP should be < " + toString( | |
2036 | + | let jo = [jl, jm, jn] | |
2037 | + | let ha = q(r) | |
2038 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
2039 | + | let jp = valueOrElse(getInteger(ha), hb) | |
2040 | + | if ((jp >= hb)) | |
2041 | + | then throw((("HP should be < " + toString(hb)) + " to heal")) | |
2027 | 2042 | else { | |
2028 | - | let | |
2029 | - | let | |
2030 | - | let | |
2043 | + | let fD = aX(r) | |
2044 | + | let gl = fC(fD) | |
2045 | + | let jq = if ((gl[aB] == "")) | |
2031 | 2046 | then nil | |
2032 | - | else split( | |
2033 | - | func | |
2047 | + | else split(gl[aB], "_") | |
2048 | + | func jr (cX,js) = { | |
2034 | 2049 | let cd = cX._2 | |
2035 | - | let eV = if ((size( | |
2036 | - | then parseIntValue( | |
2050 | + | let eV = if ((size(jq) > cd)) | |
2051 | + | then parseIntValue(jq[cd]) | |
2037 | 2052 | else 0 | |
2038 | 2053 | if ((3 > cd)) | |
2039 | 2054 | then { | |
2040 | - | let | |
2041 | - | if (( | |
2055 | + | let jt = jo[cd] | |
2056 | + | if ((jt > eV)) | |
2042 | 2057 | then throw(((("You have only " + toString(eV)) + " of ") + ah[cd])) | |
2043 | - | else $Tuple3((cX._1 :+ toString((eV - | |
2058 | + | else $Tuple3((cX._1 :+ toString((eV - jt))), (cd + 1), (cX._3 + (ck[cd] * jt))) | |
2044 | 2059 | } | |
2045 | 2060 | else $Tuple3((cX._1 :+ toString(eV)), (cd + 1), cX._3) | |
2046 | 2061 | } | |
2047 | 2062 | ||
2048 | 2063 | let dp = { | |
2049 | 2064 | let cZ = ak | |
2050 | 2065 | let da = size(cZ) | |
2051 | 2066 | let db = $Tuple3(nil, 0, 0) | |
2052 | 2067 | func dc (dd,de) = if ((de >= da)) | |
2053 | 2068 | then dd | |
2054 | - | else | |
2069 | + | else jr(dd, cZ[de]) | |
2055 | 2070 | ||
2056 | 2071 | func df (dd,de) = if ((de >= da)) | |
2057 | 2072 | then dd | |
2058 | 2073 | else throw("List size exceeds 50") | |
2059 | 2074 | ||
2060 | 2075 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
2061 | 2076 | } | |
2062 | - | let | |
2063 | - | $Tuple2(([IntegerEntry( | |
2077 | + | let ju = min([hb, (jp + dp._3)]) | |
2078 | + | $Tuple2(([IntegerEntry(ha, ju), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], makeString(dp._1, "_")], ":")), iW] ++ id(r, (J * ((jl + jm) + jn)))._1), ju) | |
2064 | 2079 | } | |
2065 | 2080 | } | |
2066 | 2081 | } | |
2067 | 2082 | ||
2068 | 2083 | ||
2069 | 2084 | ||
2070 | 2085 | @Callable(ez) | |
2071 | 2086 | func healES () = { | |
2072 | - | let | |
2087 | + | let iW = iT(ez) | |
2073 | 2088 | if ((size(ez.payments) != 1)) | |
2074 | 2089 | then throw("Exactly one payment required") | |
2075 | 2090 | else { | |
2076 | - | let | |
2077 | - | if (( | |
2091 | + | let iX = value(ez.payments[0]) | |
2092 | + | if ((iX.assetId != bj)) | |
2078 | 2093 | then throw("Allowed USDT payment only!") | |
2079 | 2094 | else { | |
2080 | 2095 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2081 | - | let | |
2082 | - | let | |
2083 | - | let | |
2084 | - | if (( | |
2096 | + | let ha = q(r) | |
2097 | + | let hb = M(valueOrElse(getInteger(u(r)), 0)) | |
2098 | + | let jp = valueOrElse(getInteger(ha), hb) | |
2099 | + | if ((jp > 0)) | |
2085 | 2100 | then throw("HP should be 0 to call Emergency Service") | |
2086 | 2101 | else { | |
2087 | - | let | |
2088 | - | let | |
2089 | - | let | |
2102 | + | let fD = aX(r) | |
2103 | + | let gl = fC(fD) | |
2104 | + | let jq = if ((gl[aB] == "")) | |
2090 | 2105 | then nil | |
2091 | - | else split( | |
2092 | - | let | |
2093 | - | then parseIntValue( | |
2106 | + | else split(gl[aB], "_") | |
2107 | + | let jv = if ((size(jq) > 0)) | |
2108 | + | then parseIntValue(jq[0]) | |
2094 | 2109 | else 0 | |
2095 | - | let | |
2096 | - | then parseIntValue( | |
2110 | + | let jw = if ((size(jq) > 1)) | |
2111 | + | then parseIntValue(jq[1]) | |
2097 | 2112 | else 0 | |
2098 | - | let | |
2099 | - | then parseIntValue( | |
2113 | + | let jx = if ((size(jq) > 2)) | |
2114 | + | then parseIntValue(jq[2]) | |
2100 | 2115 | else 0 | |
2101 | - | if (if (if (( | |
2116 | + | if (if (if ((jv > 0)) | |
2102 | 2117 | then true | |
2103 | - | else ( | |
2118 | + | else (jw > 0)) | |
2104 | 2119 | then true | |
2105 | - | else ( | |
2120 | + | else (jx > 0)) | |
2106 | 2121 | then throw("You have to use own Medical Kit") | |
2107 | 2122 | else { | |
2108 | - | let | |
2109 | - | let | |
2110 | - | then split(value( | |
2123 | + | let jy = getString(bM, bc()) | |
2124 | + | let jz = if (isDefined(jy)) | |
2125 | + | then split(value(jy), "_") | |
2111 | 2126 | else nil | |
2112 | - | let | |
2113 | - | then parseIntValue( | |
2127 | + | let jA = if ((size(jz) > 0)) | |
2128 | + | then parseIntValue(jz[0]) | |
2114 | 2129 | else 0 | |
2115 | - | if ((0 >= | |
2130 | + | if ((0 >= jA)) | |
2116 | 2131 | then throw("There are no Medical Kits L1 at Emergency Service storage") | |
2117 | 2132 | else { | |
2118 | - | let | |
2119 | - | let | |
2133 | + | let ju = (jp + ck[0]) | |
2134 | + | let jB = makeString([toString((jA - 1)), removeByIndex(jz, 0)], "_") | |
2120 | 2135 | let bg = split(ak[0], "_") | |
2121 | - | let | |
2122 | - | let | |
2123 | - | if (( | |
2124 | - | then throw(("Payment attached should be " + toString( | |
2136 | + | let jC = bf(bg) | |
2137 | + | let jD = fraction((jC * ag), af, (bq * ao)) | |
2138 | + | if ((iX.amount != jD)) | |
2139 | + | then throw(("Payment attached should be " + toString(jD))) | |
2125 | 2140 | else { | |
2126 | - | let dp = bZ(invoke(bM, "updateEsStorage", [ | |
2127 | - | $Tuple2(([IntegerEntry( | |
2141 | + | let dp = bZ(invoke(bM, "updateEsStorage", [jB], [AttachedPayment(bj, jD)])) | |
2142 | + | $Tuple2(([IntegerEntry(ha, ju), iW] ++ id(r, D)._1), dp) | |
2128 | 2143 | } | |
2129 | 2144 | } | |
2130 | 2145 | } | |
2131 | 2146 | } | |
2132 | 2147 | } | |
2133 | 2148 | } | |
2134 | 2149 | } | |
2135 | 2150 | ||
2136 | 2151 | ||
2137 | 2152 | ||
2138 | 2153 | @Callable(ez) | |
2139 | - | func updateBackpack (r, | |
2154 | + | func updateBackpack (r,jE) = if ((ez.caller != bM)) | |
2140 | 2155 | then throw("permission denied") | |
2141 | - | else $Tuple2([StringEntry(aX(r), | |
2142 | - | ||
2143 | - | ||
2144 | - | ||
2145 | - | @Callable(ez) | |
2146 | - | func commitFor ( | |
2147 | - | let | |
2148 | - | let | |
2156 | + | else $Tuple2([StringEntry(aX(r), jE)], jE) | |
2157 | + | ||
2158 | + | ||
2159 | + | ||
2160 | + | @Callable(ez) | |
2161 | + | func commitFor (jF) = { | |
2162 | + | let iW = iT(ez) | |
2163 | + | let jG = (height + bT) | |
2149 | 2164 | let b = toString(ez.caller) | |
2150 | - | $Tuple2(([IntegerEntry(bV(b), | |
2165 | + | $Tuple2(([IntegerEntry(bV(b), jG), IntegerEntry(bU(b), jF)] :+ iW), jG) | |
2151 | 2166 | } | |
2152 | 2167 | ||
2153 | 2168 | ||
2154 | 2169 | ||
2155 | 2170 | @Callable(ez) | |
2156 | 2171 | func buySLand () = { | |
2157 | - | let | |
2172 | + | let iW = iT(ez) | |
2158 | 2173 | if ((size(ez.payments) != 1)) | |
2159 | 2174 | then throw("Exactly one payment required") | |
2160 | 2175 | else { | |
2161 | - | let | |
2162 | - | if (( | |
2176 | + | let iX = value(ez.payments[0]) | |
2177 | + | if ((iX.assetId != bj)) | |
2163 | 2178 | then throw("Allowed USDT payment only!") | |
2164 | - | else if (( | |
2179 | + | else if ((iX.amount != cq)) | |
2165 | 2180 | then throw(("Payment attached should be " + toString(cq))) | |
2166 | 2181 | else { | |
2167 | - | let dp = | |
2168 | - | $Tuple2((((dp._1 :+ ScriptTransfer(bM, | |
2182 | + | let dp = gG(ez.caller, ez.transactionId) | |
2183 | + | $Tuple2((((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) ++ ij(toString(ez.caller), F)._1) :+ iW), dp._2._1) | |
2169 | 2184 | } | |
2170 | 2185 | } | |
2171 | 2186 | } | |
2172 | 2187 | ||
2173 | 2188 | ||
2174 | 2189 | ||
2175 | 2190 | @Callable(ez) | |
2176 | - | func expedition ( | |
2177 | - | let | |
2191 | + | func expedition (gP,gQ) = { | |
2192 | + | let iW = iT(ez) | |
2178 | 2193 | if ((size(ez.payments) != 0)) | |
2179 | 2194 | then throw("No payments required") | |
2180 | 2195 | else { | |
2181 | - | let dp = | |
2196 | + | let dp = hg(ez.caller, ez.transactionId, gP, gQ) | |
2182 | 2197 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2183 | - | $Tuple2(((dp._1 ++ | |
2198 | + | $Tuple2(((dp._1 ++ id(r, F)._1) :+ iW), $Tuple2(dp._2, dp._3)) | |
2184 | 2199 | } | |
2185 | 2200 | } | |
2186 | 2201 | ||
2187 | 2202 | ||
2188 | 2203 | ||
2189 | 2204 | @Callable(ez) | |
2190 | 2205 | func upgradeInfra (aO) = { | |
2191 | - | let | |
2206 | + | let iW = iT(ez) | |
2192 | 2207 | if ((size(ez.payments) != 0)) | |
2193 | 2208 | then throw("No payments required") | |
2194 | 2209 | else { | |
2195 | - | let dp = | |
2210 | + | let dp = hR(true, ez.caller, 0, aO) | |
2196 | 2211 | let r = valueOrErrorMessage(getString(aW(toString(ez.caller))), "You don't have a duck staked") | |
2197 | - | $Tuple2(((dp._1 :+ | |
2212 | + | $Tuple2(((dp._1 :+ iW) ++ id(r, fraction(G, dp._3, bq))._1), dp._2) | |
2198 | 2213 | } | |
2199 | 2214 | } | |
2200 | 2215 | ||
2201 | 2216 | ||
2202 | 2217 | ||
2203 | 2218 | @Callable(ez) | |
2204 | 2219 | func upgradeInfraUsdt (aO) = if ((ez.caller != this)) | |
2205 | 2220 | then throw("Permission denied") | |
2206 | 2221 | else { | |
2207 | - | let | |
2222 | + | let iW = iT(ez) | |
2208 | 2223 | if ((size(ez.payments) != 1)) | |
2209 | 2224 | then throw("Exactly one payment required") | |
2210 | 2225 | else { | |
2211 | - | let | |
2212 | - | if (( | |
2226 | + | let iX = value(ez.payments[0]) | |
2227 | + | if ((iX.assetId != bj)) | |
2213 | 2228 | then throw("Allowed USDT payment only!") | |
2214 | 2229 | else { | |
2215 | - | let dp = | |
2216 | - | $Tuple2(((dp._1 :+ ScriptTransfer(bM, | |
2230 | + | let dp = hR(false, ez.caller, iX.amount, aO) | |
2231 | + | $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2) | |
2217 | 2232 | } | |
2218 | 2233 | } | |
2219 | 2234 | } | |
2220 | 2235 | ||
2221 | 2236 | ||
2222 | 2237 | ||
2223 | 2238 | @Callable(ez) | |
2224 | - | func activateArtifact ( | |
2225 | - | let | |
2239 | + | func activateArtifact (jH,jI) = { | |
2240 | + | let iW = iT(ez) | |
2226 | 2241 | if ((size(ez.payments) != 0)) | |
2227 | 2242 | then throw("No payments required") | |
2228 | 2243 | else { | |
2229 | 2244 | let b = toString(ez.caller) | |
2230 | 2245 | let dp = { | |
2231 | - | let bk = | |
2246 | + | let bk = jH | |
2232 | 2247 | if (("PRESALE" == bk)) | |
2233 | - | then | |
2248 | + | then ir(b, jI) | |
2234 | 2249 | else if (("ONBOARD" == bk)) | |
2235 | - | then | |
2250 | + | then ik(b) | |
2236 | 2251 | else throw("Unknown artifact") | |
2237 | 2252 | } | |
2238 | - | (dp :+ | |
2239 | - | } | |
2240 | - | } | |
2241 | - | ||
2242 | - | ||
2243 | - | ||
2244 | - | @Callable(ez) | |
2245 | - | func mergeLands ( | |
2246 | - | let | |
2253 | + | (dp :+ iW) | |
2254 | + | } | |
2255 | + | } | |
2256 | + | ||
2257 | + | ||
2258 | + | ||
2259 | + | @Callable(ez) | |
2260 | + | func mergeLands (iw) = { | |
2261 | + | let iW = iT(ez) | |
2247 | 2262 | if ((size(ez.payments) != 0)) | |
2248 | 2263 | then throw("No payments required") | |
2249 | 2264 | else { | |
2250 | - | let dp = | |
2251 | - | $Tuple2(((dp._1 :+ | |
2252 | - | } | |
2253 | - | } | |
2254 | - | ||
2255 | - | ||
2256 | - | ||
2257 | - | @Callable(ez) | |
2258 | - | func mergeLandsUsdt ( | |
2259 | - | let | |
2265 | + | let dp = iR(true, toString(ez.caller), 0, iw, ez.transactionId) | |
2266 | + | $Tuple2(((dp._1 :+ iW) ++ ij(toString(ez.caller), H)._1), dp._2) | |
2267 | + | } | |
2268 | + | } | |
2269 | + | ||
2270 | + | ||
2271 | + | ||
2272 | + | @Callable(ez) | |
2273 | + | func mergeLandsUsdt (iw) = { | |
2274 | + | let iW = iT(ez) | |
2260 | 2275 | if ((size(ez.payments) != 1)) | |
2261 | 2276 | then throw("Exactly one payment required") | |
2262 | 2277 | else { | |
2263 | - | let | |
2264 | - | if (( | |
2278 | + | let iX = value(ez.payments[0]) | |
2279 | + | if ((iX.assetId != bj)) | |
2265 | 2280 | then throw("Allowed USDT payment only!") | |
2266 | 2281 | else { | |
2267 | - | let dp = | |
2268 | - | $Tuple2(((dp._1 :+ ScriptTransfer(bM, | |
2282 | + | let dp = iR(false, toString(ez.caller), iX.amount, iw, ez.transactionId) | |
2283 | + | $Tuple2(((dp._1 :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), dp._2) | |
2269 | 2284 | } | |
2270 | 2285 | } | |
2271 | 2286 | } | |
2272 | 2287 | ||
2273 | 2288 | ||
2274 | 2289 | ||
2275 | 2290 | @Callable(ez) | |
2276 | - | func cargoExchange ( | |
2277 | - | let | |
2291 | + | func cargoExchange (jJ,aO) = { | |
2292 | + | let iW = iT(ez) | |
2278 | 2293 | if ((size(ez.payments) != 0)) | |
2279 | 2294 | then throw("No payments required") | |
2280 | 2295 | else { | |
2281 | - | let | |
2296 | + | let gk = split_4C(jJ, ":") | |
2282 | 2297 | let b = toString(ez.originCaller) | |
2283 | - | let | |
2284 | - | let | |
2285 | - | if (!(isDefined(getInteger( | |
2286 | - | then throw(( | |
2298 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2299 | + | let hA = aG(aO) | |
2300 | + | if (!(isDefined(getInteger(hA)))) | |
2301 | + | then throw((hz.name + " is not staked")) | |
2287 | 2302 | else { | |
2288 | - | let | |
2289 | - | if (( | |
2303 | + | let hC = valueOrErrorMessage(getString(aD(aO)), (("NFT " + hz.name) + " is orphaned")) | |
2304 | + | if ((hC != b)) | |
2290 | 2305 | then throw((X + " is not yours")) | |
2291 | 2306 | else { | |
2292 | - | let | |
2293 | - | let | |
2307 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2308 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2294 | 2309 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2295 | - | let | |
2296 | - | let | |
2297 | - | if (( | |
2298 | - | then throw((("Duck location type is " + | |
2299 | - | else if (( | |
2310 | + | let hw = valueOrElse(getString(aY(r)), ae) | |
2311 | + | let hx = split(value(hw), "_") | |
2312 | + | if ((hx[bd] != "L")) | |
2313 | + | then throw((("Duck location type is " + hx[bd]) + ", but should be L")) | |
2314 | + | else if ((hx[be] != aO)) | |
2300 | 2315 | then throw(("Duck should be on the land " + aO)) | |
2301 | 2316 | else { | |
2302 | - | let | |
2303 | - | let | |
2304 | - | let | |
2305 | - | let | |
2306 | - | let dp = | |
2307 | - | let | |
2308 | - | let | |
2309 | - | let | |
2310 | - | [StringEntry( | |
2317 | + | let fS = aN(aO) | |
2318 | + | let fI = fR(fS, fT, fU) | |
2319 | + | let fD = aX(r) | |
2320 | + | let gl = fC(fD) | |
2321 | + | let dp = gj(gk, fI, gl) | |
2322 | + | let ga = split(fI[at], "_") | |
2323 | + | let hO = (parseIntValue(ga[av]) + dp._7) | |
2324 | + | let hP = (parseIntValue(ga[aw]) - dp._7) | |
2325 | + | [StringEntry(fD, makeString_2C([gl[ay], dp._4, dp._5, dp._6], ":")), StringEntry(fS, makeString_2C([fI[ap], dp._1, dp._2, dp._3, makeString([ga[au], toString(hO), toString(hP), ga[ax]], "_")], ":")), iW] | |
2311 | 2326 | } | |
2312 | 2327 | } | |
2313 | 2328 | } | |
2314 | 2329 | } | |
2315 | 2330 | } | |
2316 | 2331 | ||
2317 | 2332 | ||
2318 | 2333 | ||
2319 | 2334 | @Callable(ez) | |
2320 | - | func saveWarehouse ( | |
2335 | + | func saveWarehouse (fW,aO) = if ((ez.caller != bM)) | |
2321 | 2336 | then throw("Access denied") | |
2322 | 2337 | else { | |
2323 | - | let | |
2324 | - | let | |
2325 | - | if ((size( | |
2338 | + | let fS = aN(aO) | |
2339 | + | let fX = split_4C(fW, ":") | |
2340 | + | if ((size(fX) != 5)) | |
2326 | 2341 | then throw("warehouse string should contain 4 ':' separators") | |
2327 | 2342 | else { | |
2328 | - | let | |
2329 | - | let | |
2330 | - | let | |
2331 | - | let | |
2332 | - | let | |
2333 | - | $Tuple2([StringEntry( | |
2343 | + | let jK = split(fX[at], "_")[au] | |
2344 | + | let hO = fH(fX) | |
2345 | + | let jL = fF(fX[ap]) | |
2346 | + | let hP = ((jL - parseIntValue(jK)) - hO) | |
2347 | + | let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([jK, toString(hO), toString(hP), toString(jL)], "_")], ":") | |
2348 | + | $Tuple2([StringEntry(fS, jM)], jM) | |
2334 | 2349 | } | |
2335 | 2350 | } | |
2336 | 2351 | ||
2337 | 2352 | ||
2338 | 2353 | ||
2339 | 2354 | @Callable(ez) | |
2340 | 2355 | func fixWarehouseFormat (aO) = if ((ez.caller != bL)) | |
2341 | 2356 | then throw("Access denied") | |
2342 | 2357 | else { | |
2343 | - | let | |
2344 | - | let | |
2345 | - | let | |
2346 | - | let | |
2347 | - | let | |
2348 | - | let | |
2349 | - | let | |
2350 | - | let | |
2351 | - | let | |
2352 | - | let | |
2353 | - | $Tuple2([StringEntry( | |
2358 | + | let fS = aN(aO) | |
2359 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2360 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2361 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2362 | + | let fX = fR(fS, fT, fU) | |
2363 | + | let jK = cc(invoke(bM, "recalcLockedVolumeREADONLY", [aO, fX], nil)) | |
2364 | + | let hO = fH(fX) | |
2365 | + | let jL = fF(fX[ap]) | |
2366 | + | let hP = ((jL - jK) - hO) | |
2367 | + | let jM = makeString_2C([fX[ap], fX[aq], fX[ar], fX[as], makeString([toString(jK), toString(hO), toString(hP), toString(jL)], "_")], ":") | |
2368 | + | $Tuple2([StringEntry(fS, jM)], jM) | |
2354 | 2369 | } | |
2355 | 2370 | ||
2356 | 2371 | ||
2357 | 2372 | ||
2358 | 2373 | @Callable(ez) | |
2359 | 2374 | func fixStakedPieces (by) = if ((ez.caller != bL)) | |
2360 | 2375 | then throw("Access denied") | |
2361 | 2376 | else { | |
2362 | - | let | |
2377 | + | let iM = if ((by == "")) | |
2363 | 2378 | then 0 | |
2364 | 2379 | else { | |
2365 | - | let | |
2366 | - | let | |
2367 | - | then split_51C(value( | |
2380 | + | let iH = getString(T, bX(by)) | |
2381 | + | let iD = if (isDefined(iH)) | |
2382 | + | then split_51C(value(iH), "_") | |
2368 | 2383 | else nil | |
2369 | - | func | |
2370 | - | let | |
2371 | - | let cf = split( | |
2384 | + | func jN (cX,aO) = { | |
2385 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2386 | + | let cf = split(hz.description, "_")[bQ] | |
2372 | 2387 | (cX + ce(cf)) | |
2373 | 2388 | } | |
2374 | 2389 | ||
2375 | - | let cZ = | |
2390 | + | let cZ = iD | |
2376 | 2391 | let da = size(cZ) | |
2377 | 2392 | let db = 0 | |
2378 | 2393 | func dc (dd,de) = if ((de >= da)) | |
2379 | 2394 | then dd | |
2380 | - | else | |
2395 | + | else jN(dd, cZ[de]) | |
2381 | 2396 | ||
2382 | 2397 | func df (dd,de) = if ((de >= da)) | |
2383 | 2398 | then dd | |
2384 | 2399 | else throw("List size exceeds 100") | |
2385 | 2400 | ||
2386 | 2401 | df(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(dc(db, 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) | |
2387 | 2402 | } | |
2388 | - | $Tuple2([IntegerEntry(bY(by), | |
2389 | - | } | |
2390 | - | ||
2391 | - | ||
2392 | - | ||
2393 | - | @Callable(ez) | |
2394 | - | func setCustomName (aE, | |
2395 | - | let | |
2403 | + | $Tuple2([IntegerEntry(bY(by), iM)], iM) | |
2404 | + | } | |
2405 | + | ||
2406 | + | ||
2407 | + | ||
2408 | + | @Callable(ez) | |
2409 | + | func setCustomName (aE,iF,aJ) = { | |
2410 | + | let iW = iT(ez) | |
2396 | 2411 | if ((size(ez.payments) != 1)) | |
2397 | 2412 | then throw("Exactly one payment required") | |
2398 | 2413 | else { | |
2399 | - | let | |
2400 | - | if (( | |
2414 | + | let iX = value(ez.payments[0]) | |
2415 | + | if ((iX.assetId != bj)) | |
2401 | 2416 | then throw("Allowed USDT payment only!") | |
2402 | - | else if (( | |
2417 | + | else if ((iX.amount != cm)) | |
2403 | 2418 | then throw(("Payment should be " + toString(cm))) | |
2404 | - | else if (contains( | |
2405 | - | then throw(("Name should not contain '__': " + | |
2406 | - | else if ((size( | |
2419 | + | else if (contains(iF, "__")) | |
2420 | + | then throw(("Name should not contain '__': " + iF)) | |
2421 | + | else if ((size(iF) > cn)) | |
2407 | 2422 | then throw(("Name too long, maxLength=" + toString(cn))) | |
2408 | 2423 | else { | |
2409 | 2424 | let b = toString(ez.originCaller) | |
2410 | - | let | |
2425 | + | let jO = { | |
2411 | 2426 | let bk = aJ | |
2412 | 2427 | if (("ACCOUNT" == bk)) | |
2413 | 2428 | then { | |
2414 | - | let | |
2415 | - | let | |
2416 | - | if (isDefined( | |
2417 | - | then throw(("Name already registered: " + | |
2429 | + | let jP = cH(iF) | |
2430 | + | let jQ = getString(jP) | |
2431 | + | if (isDefined(jQ)) | |
2432 | + | then throw(("Name already registered: " + iF)) | |
2418 | 2433 | else { | |
2419 | - | let | |
2420 | - | let | |
2421 | - | let | |
2422 | - | then [DeleteEntry(cH(value( | |
2434 | + | let jR = aQ(b) | |
2435 | + | let jS = getString(jR) | |
2436 | + | let jT = if (isDefined(jS)) | |
2437 | + | then [DeleteEntry(cH(value(jS)))] | |
2423 | 2438 | else nil | |
2424 | - | ((( | |
2439 | + | (((jT :+ StringEntry(jR, iF)) :+ StringEntry(jP, b)) ++ ij(b, E)._1) | |
2425 | 2440 | } | |
2426 | 2441 | } | |
2427 | 2442 | else if (("LAND" == bk)) | |
2428 | 2443 | then { | |
2429 | - | let | |
2430 | - | let | |
2431 | - | if (!(isDefined(getInteger( | |
2432 | - | then throw(( | |
2444 | + | let hz = value(assetInfo(fromBase58String(aE))) | |
2445 | + | let hA = aG(aE) | |
2446 | + | if (!(isDefined(getInteger(hA)))) | |
2447 | + | then throw((hz.name + " is not staked")) | |
2433 | 2448 | else { | |
2434 | - | let | |
2435 | - | if (( | |
2449 | + | let hC = valueOrErrorMessage(getString(aD(aE)), (("NFT " + hz.name) + " is orphaned")) | |
2450 | + | if ((hC != b)) | |
2436 | 2451 | then throw((X + " is not yours")) | |
2437 | 2452 | else { | |
2438 | - | let | |
2439 | - | let | |
2440 | - | if (isDefined( | |
2441 | - | then throw(("Name already registered: " + | |
2453 | + | let jP = cB(iF) | |
2454 | + | let jQ = getString(jP) | |
2455 | + | if (isDefined(jQ)) | |
2456 | + | then throw(("Name already registered: " + iF)) | |
2442 | 2457 | else { | |
2443 | - | let | |
2444 | - | let | |
2445 | - | let | |
2446 | - | then [DeleteEntry(cB(value( | |
2458 | + | let jU = aF(aE) | |
2459 | + | let jS = getString(jU) | |
2460 | + | let jT = if (isDefined(jS)) | |
2461 | + | then [DeleteEntry(cB(value(jS)))] | |
2447 | 2462 | else nil | |
2448 | - | ((( | |
2463 | + | (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ ij(b, E)._1) | |
2449 | 2464 | } | |
2450 | 2465 | } | |
2451 | 2466 | } | |
2452 | 2467 | } | |
2453 | 2468 | else if (("DUCK" == bk)) | |
2454 | 2469 | then { | |
2455 | - | let | |
2456 | - | let | |
2457 | - | if (if (!(isDefined(getInteger( | |
2470 | + | let hz = value(assetInfo(fromBase58String(aE))) | |
2471 | + | let hA = aG(aE) | |
2472 | + | if (if (!(isDefined(getInteger(hA)))) | |
2458 | 2473 | then true | |
2459 | 2474 | else !(isDefined(getString(aW(b))))) | |
2460 | - | then throw(( | |
2475 | + | then throw((hz.name + " is not staked")) | |
2461 | 2476 | else { | |
2462 | - | let | |
2463 | - | if (( | |
2477 | + | let hC = valueOrErrorMessage(getString(aV(aE)), (("NFT " + hz.name) + " is orphaned")) | |
2478 | + | if ((hC != b)) | |
2464 | 2479 | then throw((Y + " is not yours")) | |
2465 | 2480 | else { | |
2466 | - | let | |
2467 | - | let | |
2468 | - | if (isDefined( | |
2469 | - | then throw(("Name already registered: " + | |
2481 | + | let jP = cG(iF) | |
2482 | + | let jQ = getString(jP) | |
2483 | + | if (isDefined(jQ)) | |
2484 | + | then throw(("Name already registered: " + iF)) | |
2470 | 2485 | else { | |
2471 | - | let | |
2472 | - | let | |
2473 | - | let | |
2474 | - | then [DeleteEntry(cG(value( | |
2486 | + | let jU = aP(aE) | |
2487 | + | let jS = getString(jU) | |
2488 | + | let jT = if (isDefined(jS)) | |
2489 | + | then [DeleteEntry(cG(value(jS)))] | |
2475 | 2490 | else nil | |
2476 | - | ((( | |
2491 | + | (((jT :+ StringEntry(jU, iF)) :+ StringEntry(jP, aE)) ++ id(aE, E)._1) | |
2477 | 2492 | } | |
2478 | 2493 | } | |
2479 | 2494 | } | |
2480 | 2495 | } | |
2481 | 2496 | else throw("Unknown entity type") | |
2482 | 2497 | } | |
2483 | - | $Tuple2((( | |
2498 | + | $Tuple2(((jO :+ ScriptTransfer(bM, iX.amount, bj)) :+ iW), 0) | |
2484 | 2499 | } | |
2485 | 2500 | } | |
2486 | 2501 | } | |
2487 | 2502 | ||
2488 | 2503 | ||
2489 | 2504 | ||
2490 | 2505 | @Callable(ez) | |
2491 | - | func setReferrals ( | |
2506 | + | func setReferrals (jV,jW) = if ((ez.callerPublicKey != cj)) | |
2492 | 2507 | then throw("Permission denied") | |
2493 | 2508 | else { | |
2494 | - | let | |
2509 | + | let iW = iT(ez) | |
2495 | 2510 | if ((size(ez.payments) != 0)) | |
2496 | 2511 | then throw("No payments required") | |
2497 | - | else if (!(isDefined(addressFromString( | |
2498 | - | then throw(("Invalid address: " + | |
2499 | - | else if (!(isDefined(addressFromString( | |
2500 | - | then throw(("Invalid address: " + | |
2512 | + | else if (!(isDefined(addressFromString(jV)))) | |
2513 | + | then throw(("Invalid address: " + jV)) | |
2514 | + | else if (!(isDefined(addressFromString(jW)))) | |
2515 | + | then throw(("Invalid address: " + jW)) | |
2501 | 2516 | else { | |
2502 | - | let | |
2503 | - | let | |
2504 | - | let | |
2505 | - | then split_4C(value( | |
2517 | + | let jX = cI() | |
2518 | + | let jY = getString(jX) | |
2519 | + | let jZ = if (isDefined(jY)) | |
2520 | + | then split_4C(value(jY), "_") | |
2506 | 2521 | else nil | |
2507 | - | if (containsElement( | |
2508 | - | then throw(( | |
2522 | + | if (containsElement(jZ, jW)) | |
2523 | + | then throw((jW + " is not newbie (already has referrals)")) | |
2509 | 2524 | else { | |
2510 | - | let | |
2511 | - | let | |
2512 | - | if (if (isDefined( | |
2513 | - | then isDefined(addressFromString(value( | |
2525 | + | let il = aR(jW) | |
2526 | + | let im = getString(il) | |
2527 | + | if (if (isDefined(im)) | |
2528 | + | then isDefined(addressFromString(value(im))) | |
2514 | 2529 | else false) | |
2515 | - | then throw((( | |
2530 | + | then throw(((jW + " already has refBy: ") + value(im))) | |
2516 | 2531 | else { | |
2517 | - | let | |
2518 | - | let | |
2519 | - | let | |
2520 | - | then split_4C(value( | |
2532 | + | let ka = aU(jV) | |
2533 | + | let kb = getString(ka) | |
2534 | + | let kc = if (isDefined(kb)) | |
2535 | + | then split_4C(value(kb), "_") | |
2521 | 2536 | else nil | |
2522 | - | if (containsElement( | |
2523 | - | then throw(((( | |
2537 | + | if (containsElement(kc, jW)) | |
2538 | + | then throw((((jV + " already contains ") + jW) + " within referrals")) | |
2524 | 2539 | else { | |
2525 | - | let | |
2526 | - | let | |
2527 | - | then value( | |
2528 | - | else makeString_2C(( | |
2529 | - | $Tuple2([StringEntry( | |
2540 | + | let kd = makeString_2C((kc :+ jW), "_") | |
2541 | + | let ke = if (containsElement(jZ, jV)) | |
2542 | + | then value(jY) | |
2543 | + | else makeString_2C((jZ :+ jV), "_") | |
2544 | + | $Tuple2([StringEntry(il, jV), StringEntry(ka, kd), StringEntry(jX, ke), iW], 0) | |
2530 | 2545 | } | |
2531 | 2546 | } | |
2532 | 2547 | } | |
2533 | 2548 | } | |
2534 | 2549 | } | |
2535 | 2550 | ||
2536 | 2551 | ||
2537 | 2552 | ||
2538 | 2553 | @Callable(ez) | |
2539 | - | func distributePoints ( | |
2540 | - | let | |
2554 | + | func distributePoints (kf,kg,kh,ki,kj) = { | |
2555 | + | let iW = iT(ez) | |
2541 | 2556 | if ((size(ez.payments) != 0)) | |
2542 | 2557 | then throw("No payments required") | |
2543 | 2558 | else { | |
2544 | 2559 | let b = toString(ez.originCaller) | |
2545 | 2560 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2546 | - | let | |
2547 | - | let | |
2548 | - | let | |
2549 | - | let | |
2550 | - | let | |
2551 | - | let | |
2552 | - | if (( | |
2553 | - | then throw((("There are only " + toString( | |
2561 | + | let kk = z(b) | |
2562 | + | let kl = valueOrElse(getInteger(T, kk), 0) | |
2563 | + | let km = v(r) | |
2564 | + | let kn = valueOrElse(getInteger(T, km), 0) | |
2565 | + | let ko = (kl + kn) | |
2566 | + | let kp = ((((kf + kg) + kh) + ki) + kj) | |
2567 | + | if ((kp > ko)) | |
2568 | + | then throw((("There are only " + toString(ko)) + " free points to distribute")) | |
2554 | 2569 | else { | |
2555 | - | let | |
2556 | - | let U = split(valueOrElse(getString(T, | |
2557 | - | let | |
2558 | - | $Tuple2([IntegerEntry( | |
2570 | + | let kq = s(r) | |
2571 | + | let U = split(valueOrElse(getString(T, kq), "0_0_0_0_0"), "_") | |
2572 | + | let kr = (kl - kp) | |
2573 | + | $Tuple2([IntegerEntry(kk, if ((0 > kr)) | |
2559 | 2574 | then 0 | |
2560 | - | else | |
2561 | - | then ( | |
2562 | - | else | |
2575 | + | else kr), IntegerEntry(km, if ((0 > kr)) | |
2576 | + | then (kn + kr) | |
2577 | + | else kn), StringEntry(kq, makeString([toString((parseIntValue(U[h]) + kf)), toString((parseIntValue(U[i]) + kg)), toString((parseIntValue(U[j]) + kh)), toString((parseIntValue(U[k]) + ki)), toString((parseIntValue(U[l]) + kj))], "_")), iW], 0) | |
2563 | 2578 | } | |
2564 | 2579 | } | |
2565 | 2580 | } | |
2566 | 2581 | ||
2567 | 2582 | ||
2568 | 2583 | ||
2569 | 2584 | @Callable(ez) | |
2570 | - | func splitByGlobalWeightsREADONLY ( | |
2571 | - | ||
2572 | - | ||
2573 | - | ||
2574 | - | @Callable(ez) | |
2575 | - | func splitByGlobalAndLocalWeightsREADONLY ( | |
2585 | + | func splitByGlobalWeightsREADONLY (gh) = $Tuple2(nil, dg(gh)) | |
2586 | + | ||
2587 | + | ||
2588 | + | ||
2589 | + | @Callable(ez) | |
2590 | + | func splitByGlobalAndLocalWeightsREADONLY (ks,kt,eC) = { | |
2576 | 2591 | let ev = eB(eC) | |
2577 | - | $Tuple2(nil, $Tuple2(dg( | |
2578 | - | } | |
2579 | - | ||
2580 | - | ||
2581 | - | ||
2582 | - | @Callable(ez) | |
2583 | - | func getBackpackREADONLY (r) = $Tuple2(nil, makeString( | |
2592 | + | $Tuple2(nil, $Tuple2(dg(ks), cR(kt, ev))) | |
2593 | + | } | |
2594 | + | ||
2595 | + | ||
2596 | + | ||
2597 | + | @Callable(ez) | |
2598 | + | func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fC(aX(r)), ":")) | |
2584 | 2599 | ||
2585 | 2600 | ||
2586 | 2601 | ||
2587 | 2602 | @Callable(ez) | |
2588 | 2603 | func getWarehouseREADONLY (aO) = { | |
2589 | - | let | |
2590 | - | let | |
2591 | - | let | |
2592 | - | $Tuple2(nil, makeString_2C( | |
2604 | + | let hz = value(assetInfo(fromBase58String(aO))) | |
2605 | + | let fT = (ce(split(hz.description, "_")[bQ]) / br) | |
2606 | + | let fU = valueOrElse(getInteger(aH(aO)), 0) | |
2607 | + | $Tuple2(nil, makeString_2C(fR(aN(aO), fT, fU), ":")) | |
2593 | 2608 | } | |
2594 | 2609 | ||
2595 | 2610 | ||
2596 | 2611 | ||
2597 | 2612 | @Callable(ez) | |
2598 | 2613 | func saveLastTx () = if (if ((ez.caller != bO)) | |
2599 | 2614 | then (ez.caller != bM) | |
2600 | 2615 | else false) | |
2601 | 2616 | then throw("Access denied") | |
2602 | - | else $Tuple2([ | |
2603 | - | ||
2604 | - | ||
2605 | - | ||
2606 | - | @Callable(ez) | |
2607 | - | func updateDuckStats (r, | |
2617 | + | else $Tuple2([iT(ez)], 42) | |
2618 | + | ||
2619 | + | ||
2620 | + | ||
2621 | + | @Callable(ez) | |
2622 | + | func updateDuckStats (r,ie) = if ((ez.caller != bM)) | |
2608 | 2623 | then throw("Access denied") | |
2609 | - | else | |
2610 | - | ||
2611 | - | ||
2612 | - | ||
2613 | - | @Callable(ez) | |
2614 | - | func updateAccStats (b, | |
2624 | + | else id(r, ie) | |
2625 | + | ||
2626 | + | ||
2627 | + | ||
2628 | + | @Callable(ez) | |
2629 | + | func updateAccStats (b,ie) = if ((ez.caller != bM)) | |
2615 | 2630 | then throw("Access denied") | |
2616 | - | else | |
2617 | - | ||
2618 | - | ||
2619 | - | ||
2620 | - | @Callable(ez) | |
2621 | - | func equipDuck ( | |
2622 | - | let | |
2631 | + | else ij(b, ie) | |
2632 | + | ||
2633 | + | ||
2634 | + | ||
2635 | + | @Callable(ez) | |
2636 | + | func equipDuck (ku) = { | |
2637 | + | let iW = iT(ez) | |
2623 | 2638 | if ((size(ez.payments) != 0)) | |
2624 | 2639 | then throw("No payments required") | |
2625 | 2640 | else { | |
2626 | 2641 | let b = toString(ez.originCaller) | |
2627 | 2642 | let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked") | |
2628 | - | let | |
2629 | - | let | |
2630 | - | let | |
2631 | - | let | |
2632 | - | let | |
2633 | - | if ((size( | |
2643 | + | let hj = w(r) | |
2644 | + | let kv = split(valueOrElse(getString(hj), ",;,_,;,_,;,_,;,_,;,_,;,"), "_") | |
2645 | + | let fD = aX(r) | |
2646 | + | let gl = fC(fD) | |
2647 | + | let hl = split(ku, "_") | |
2648 | + | if ((size(hl) != m)) | |
2634 | 2649 | then throw("Wrong equipment string") | |
2635 | 2650 | else { | |
2636 | 2651 | let dO = S(this, r) | |
2637 | - | let | |
2638 | - | let | |
2639 | - | let | |
2640 | - | $Tuple2([StringEntry( | |
2652 | + | let kw = em(kv, dD(gl[aB]), true, dO) | |
2653 | + | let kx = em(hl, kw, false, dO) | |
2654 | + | let ky = dI(kx) | |
2655 | + | $Tuple2([StringEntry(hj, ku), StringEntry(fD, makeString_2C([gl[ay], gl[az], gl[aA], ky], ":")), iW], 0) | |
2641 | 2656 | } | |
2642 | 2657 | } | |
2643 | 2658 | } | |
2644 | - | ||
2645 | - | ||
2646 | - | ||
2647 | - | @Callable(ez) | |
2648 | - | func test () = $Tuple2(nil, fi(nil, 1)) | |
2649 | 2659 | ||
2650 | 2660 |
github/deemru/w8io/169f3d6 910.01 ms ◑