tx · 824xxgQAk3VUU8QcSWzZ1DQ9s1cDp4QyFrhxF2HaGxpr

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.09900000 Waves

2023.11.23 23:34 [2856531] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "824xxgQAk3VUU8QcSWzZ1DQ9s1cDp4QyFrhxF2HaGxpr", "fee": 9900000, "feeAssetId": null, "timestamp": 1700771696954, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "24XndcDE99edSQQ7wWBrMcWcYacaFHMZ1dwkVist2aLEjocozmLzBrYQpNmedA6YddeD53nWqpcwCEVgLF2XmqT3" ], "script": "base64:BgLUAQgCEgMKAQgSBAoCCAESAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASAwoBARIAEgQKAgICEgASAwoBCBIECgIICBIDCgEYEgQKAggIEgQKAggIEgUKAwgICBIECgIICBIHCgUBAQEBARIDCgEBEgUKAwEBCBIDCgEIEgMKAQgSABIECgIIARIECgIIARIDCgEIEgQKAggIEgMKAQgSABIAEgMKAQgSAwoBCBIECgICAhIECgICAhIAnQIACURBWU1JTExJUwCAuJkpARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyARprZXlBY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcgEEYWRkcgkArAICAhhhY3Jlc1N0YWtlZEFtb3VudEJ5VXNlcl8FBGFkZHIABlNDQUxFOACAwtcvAAx4cExldmVsU2NhbGUAgBkAD3hwTGV2ZWxSZWNpcFBvdwCgHwASbnVtUG9pbnRzT25MZXZlbFVwAAMADnJvYmJlcnlDb3N0TWluAIDC1y8AFHJvYmJlcnlDb29sZG93bkNvZWZmAJADAAxyZXF1aXJlbWVudHMJAMwIAgIIU3RyZW5ndGgJAMwIAgIIQWNjdXJhY3kJAMwIAgIJSW50ZWxsZWN0CQDMCAICCUVuZHVyYW5jZQkAzAgCAglEZXh0ZXJpdHkJAMwIAgIFTGV2ZWwJAMwIAgIGSGVhbHRoBQNuaWwADGNoYXJTdHJlbmd0aAAAAAxjaGFyQWNjdXJhY3kAAQANY2hhckludGVsbGVjdAACAA1jaGFyRW5kdXJhbmNlAAMADWNoYXJEZXh0ZXJpdHkABAALc2VnQmFja3BhY2sAAAALTlVNU0VHTUVOVFMABgAKTlVNTUFJTkFVWAACAAhNQVhTTE9UUwACAA1NQVhQUk9ESU5TTE9UAB4AEGxhbmRSb2JDb29sZG93bnMJAMwIAgAACQDMCAIAwM8kCQDMCAIAoPc2CQDMCAIAgNzMFAkAzAgCAICupgoFA25pbAAOTUlOX1JFU19UT19ST0IAgNrECQAMcm9iSWR4TG9ja2VkAAEAC2R1Y2tJZHhGcmVlAAAAEGR1Y2tJZHhQcmVwYXJpbmcAAQENa2V5RHVja0hlYWx0aAELZHVja0Fzc2V0SWQJAKwCAgILZHVja0hlYWx0aF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrQ2hhcnMBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tDaGFyc18FC2R1Y2tBc3NldElkAQlrZXlEdWNrWFABC2R1Y2tBc3NldElkCQCsAgICB2R1Y2tYUF8FC2R1Y2tBc3NldElkAQxrZXlEdWNrTGV2ZWwBC2R1Y2tBc3NldElkCQCsAgICCmR1Y2tMZXZlbF8FC2R1Y2tBc3NldElkARFrZXlEdWNrRnJlZVBvaW50cwELZHVja0Fzc2V0SWQJAKwCAgIPZHVja0ZyZWVQb2ludHNfBQtkdWNrQXNzZXRJZAEQa2V5RHVja0VxdWlwbWVudAELZHVja0Fzc2V0SWQJAKwCAgIOZHVja0VxdWlwbWVudF8FC2R1Y2tBc3NldElkAQlrZXlVc2VyWFABBGFkZHIJAKwCAgIHdXNlclhQXwUEYWRkcgEMa2V5VXNlckxldmVsAQRhZGRyCQCsAgICCnVzZXJMZXZlbF8FBGFkZHIBEWtleVVzZXJGcmVlUG9pbnRzAQRhZGRyCQCsAgICD3VzZXJGcmVlUG9pbnRzXwUEYWRkcgEOa2V5U2F2ZWRIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICDHNhdmVkSGVhbHRoXwULZHVja0Fzc2V0SWQBEGtleVNhdmVkTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDnNhdmVkTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEMa2V5RHVja0J1ZmZzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQnVmZnNfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlUaW1lQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeVRpbWVfBQtkdWNrQXNzZXRJZAEYa2V5TGFzdFJvYmJlcnlDb3N0QnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAhBsYXN0Um9iYmVyeUNvc3RfBQtkdWNrQXNzZXRJZAETa2V5TGFuZFJvYmJlcnlTdGF0ZQELbGFuZEFzc2V0SWQJAKwCAgIRbGFuZFJvYmJlcnlTdGF0ZV8FC2xhbmRBc3NldElkARJrZXlMYW5kQ29vbGRvd25FVEEBC2xhbmRBc3NldElkCQCsAgICEGxhbmRDb29sZG93bkVUQV8FC2xhbmRBc3NldElkARNrZXlEdWNrUm9iYmVyeVN0YXRlAQtkdWNrQXNzZXRJZAkArAICAhFkdWNrUm9iYmVyeVN0YXRlXwULZHVja0Fzc2V0SWQBE2tleUxvY2tlZExhbmRCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICEWxvY2tlZExhbmRCeUR1Y2tfBQtkdWNrQXNzZXRJZAEUa2V5RHVja0RlbGl2ZXJ5Q291bnQBC2R1Y2tBc3NldElkCQCsAgICGXRvdGFsRGVsaXZlcnlDb3VudEJ5RHVja18FC2R1Y2tBc3NldElkARRrZXlVc2VyRGVsaXZlcnlDb3VudAEEYWRkcgkArAICAhJ1c2VyRGVsaXZlcnlDb3VudF8FBGFkZHIBFmtleVVzZXJMYXN0RGVsaXZlcnlEYXkBBGFkZHIJAKwCAgIUdXNlckxhc3REZWxpdmVyeURheV8FBGFkZHIAB3hwQ2xhaW0AkE4AD3hwU3VjY2Vzc0ZsaWdodACQTgAMeHBGYWlsRmxpZ2h0ANAPAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAhD0ACnhwTmV3U0xhbmQAwJaxAgAOeHBVcGdyYWRlSW5mcmEAkE4AB3hwTWVyZ2UAwIQ9AAl4cE9uYm9hcmQAwIQ9AAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAEMZ2V0RHVja1N0YXRzBA9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQKYnVmZkVmZmVjdApmb3JjZUJ1ZmZzBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsBApzdGF0ZUJ1ZmZzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAIBXwkAzggCCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAMFCmZvcmNlQnVmZnMJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0CQDMCAIFCmJ1ZmZFZmZlY3QJAMwIAgUKYnVmZkVmZmVjdAkAzAgCBQpidWZmRWZmZWN0BQNuaWwJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnN0YXRlQnVmZnMFDGNoYXJTdHJlbmd0aAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKc3RhdGVCdWZmcwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFySW50ZWxsZWN0CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRW5kdXJhbmNlCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpzdGF0ZUJ1ZmZzBQ1jaGFyRGV4dGVyaXR5BQNuaWwBDmdldFJvYmJlcnlEYXRhAg9zdGFraW5nQ29udHJhY3QLZHVja0Fzc2V0SWQEC2xhc3RSb2JDb3N0CQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5Q29zdEJ5RHVjawEFC2R1Y2tBc3NldElkAAAEC2xhc3RSb2JUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkAAAEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEB3JvYkNvc3QJAJYDAQkAzAgCBQ5yb2JiZXJ5Q29zdE1pbgkAzAgCCQBlAgULbGFzdFJvYkNvc3QJAGgCBRRyb2JiZXJ5Q29vbGRvd25Db2VmZgkAZQIFA25vdwULbGFzdFJvYlRpbWUFA25pbAQJZHVja1N0YXRlCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUR1Y2tSb2JiZXJ5U3RhdGUBBQtkdWNrQXNzZXRJZAAABApsb2NrZWRMYW5kCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBEmtleUxhbmRDb29sZG93bkVUQQEFCmxvY2tlZExhbmQAAAkAlwoFBQdyb2JDb3N0BQtsYXN0Um9iVGltZQUJZHVja1N0YXRlBQpsb2NrZWRMYW5kBQdsYW5kRVRBAApMQU5EUFJFRklYAgRMQU5EAApEVUNLUFJFRklYAgREVUNLAAtST0JPX1BSRUZJWAIEUk9CTwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAGE1BWF9MQU5EU19TVEFLRURfQllfVVNFUgAZAA9EQUlMWVJFU0JZUElFQ0UAgPjSAQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAVTUlOX1VTRFRfRkVFX0RFTElWRVJZANCGAwAXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMAAQAaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQAgOHrFwAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzCQDMCAICC0Jvb20tRG9nIEwxCQDMCAICC0Jvb20tRG9nIEwyCQDMCAICC0Jvb20tRG9nIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEGZvcnRBbGxvd2VkUHJvZHMJAMwIAgAPCQDMCAIAEAkAzAgCABEJAMwIAgASCQDMCAIAEwkAzAgCABQJAMwIAgAVCQDMCAIAFgkAzAgCABcFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAiU4XzhfOF8xN18xN180Ml8xMl8wXzMwXzAsMCwwLDAsMCwwLDBfCQDMCAICJThfOF84XzE3XzE3XzQyXzI0XzBfNjBfMCwwLDUsMiwwLDAsMF8JAMwIAgInOF84XzhfMTdfMTdfNDJfMzZfMF8xMjBfMCwwLDEwLDQsMCwwLDBfCQDMCAICKThfMTlfMTlfOF8yN18xOV8yNl8xXzIwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV81Ml8xXzQwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICKThfMTlfMTlfOF8yN18xOV83OF8xXzgwXzAsMCwwLDAsMCwwLDBfMDAxCQDMCAICJThfOF84XzhfOF82MF8xM18yXzJfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzI2XzJfNF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAiU4XzhfOF84XzhfNjBfMzlfMl84XzAsMCwwLDAsMCwwLDBfMDExCQDMCAICKTMwXzMwXzNfMTdfMTdfM18zMF8zXzMwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM182MF8zXzUwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKTMwXzMwXzNfMTdfMTdfM185MF8zXzcwXzAsMCwwLDAsMCwwLDBfMTExCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzExXzRfMTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMjJfNF8yMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8zM180XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKjRfMTNfMjJfNF8zNV8yMl8yM18wXzUwLDEsMF8wLDAsMCwwLDAsMCwwXwkAzAgCAio0XzEzXzIyXzRfMzVfMjJfNDZfMF81MCwxLDFfMCwyLDUsMCwwLDAsMF8JAMwIAgIrNF8xM18yMl80XzM1XzIyXzY5XzBfNTAsMiwxXzAsNSwxMCwwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfMjBfMV8zMCwxLDFfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzQwXzFfMzAsMSwyXzIsMSwzLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV82MF8xXzMwLDEsM181LDIsOCwwLDAsMCwwXwkAzAgCAicyM18yM181XzIwXzIzXzZfMzVfMl8xMDBfMCwwLDAsMCwwLDAsMF8JAMwIAgInMjNfMjNfNV8yMF8yM182XzcwXzJfMTUwXzAsMCwwLDAsMCwwLDBfCQDMCAICKDIzXzIzXzVfMjBfMjNfNl8xMDVfMl8yMDBfMCwwLDAsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYACnJJZHhFZmZlY3QACAAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAgVsY25hXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgNzdF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAgNsYXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgZzdHRhb18FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgN3aF8FC2xhbmRBc3NldElkARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQdhc3NldElkCQCsAgICC2luZnJhTGV2ZWxfBQdhc3NldElkARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIPZm9ydGlmaWNhdGlvbnNfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAA9kZWxpdmVyeUZ1bmRLZXkCDGRlbGl2ZXJ5RnVuZAANbGFzdFRvdXJJZEtleQIOJXNfX2xhc3RUb3VySWQBFWtleVRvdXJTdGF0aWNEYXRhQnlJZAEDdElkCQCsAgICFiVzJWRfX3RvdXJTdGF0aWNEYXRhX18JAKQDAQUDdElkARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQN0SWQJAKwCAgIXJXMlZF9fdG91ckR5bmFtaWNEYXRhX18JAKQDAQUDdElkARprZXlCZXN0UmVzdWx0QnlUb3VyQW5kRHVjawIDdElkC2R1Y2tBc3NldElkCQC5CQIJAMwIAgIfJXMlZCVzX19iZXN0UmVzdWx0QnlUb3VyQW5kRHVjawkAzAgCCQCkAwEFA3RJZAkAzAgCBQtkdWNrQXNzZXRJZAUDbmlsAgJfXwAJaWR4U3RhdGljAAAACmlkeER5bmFtaWMAAQAKdFN0YXRpY0VuZAAGAA50RHluYW1pY1N0YXR1cwABAQtnZXRUb3VyRGF0YQIMdG91ckNvbnRyYWN0A3RJZAQGc3RhdGljCQC1CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARVrZXlUb3VyU3RhdGljRGF0YUJ5SWQBBQN0SWQJAKwCAgkArAICAhlFcnJvciByZWFkaW5nIHRvdXJuYW1lbnQgCQCkAwEFA3RJZAIFIGRhdGECAl9fBAdkeW5hbWljCQC8CQIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQx0b3VyQ29udHJhY3QJARZrZXlUb3VyRHluYW1pY0RhdGFCeUlkAQUDdElkCQCsAgIJAKwCAgIZRXJyb3IgcmVhZGluZyB0b3VybmFtZW50IAkApAMBBQN0SWQCBSBkYXRhAgJfXwkAzAgCBQZzdGF0aWMJAMwIAgUHZHluYW1pYwUDbmlsAQ5pc0luVG91cm5hbWVudAIMdG91ckNvbnRyYWN0CGxvY2F0aW9uBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUMdG91ckNvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEA2xvYwkAtQkCBQhsb2NhdGlvbgIBXwQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQFdERhdGEJAQtnZXRUb3VyRGF0YQIFDHRvdXJDb250cmFjdAUGbGFzdElkBAZzdGF0aWMJAJEDAgUFdERhdGEFCWlkeFN0YXRpYwQHZHluYW1pYwkAkQMCBQV0RGF0YQUKaWR4RHluYW1pYwMDAwkAAAIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFUCQAAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2xvYwUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQHCQAAAgkAkQMCBQdkeW5hbWljBQ50RHluYW1pY1N0YXR1cwIKSU5QUk9HUkVTUwcJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGc3RhdGljBQp0U3RhdGljRW5kBQNub3cHAQlvbk1pc3Npb24CDHRvdXJDb250cmFjdAhsb2NhdGlvbgQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFDHRvdXJDb250cmFjdAUNbGFzdFRvdXJJZEtleQAABANsb2MJALUJAgUIbG9jYXRpb24CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBQx0b3VyQ29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMEB2xvY1R5cGUJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAwMDCQAAAgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAVQJAAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDbG9jBQ9sb2NJZHhDb250aW5lbnQFBmxhc3RJZAcJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQBDGNoZWF0QXR0ZW1wdAMGb2xkTG9jBm5ld0xvYwljaGVhdENhc2UJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWQ2hlYXQgYXR0ZW1wdDogb2xkTG9jPQUGb2xkTG9jAgksIG5ld0xvYz0FBm5ld0xvYwIHLCBjYXNlPQkApAMBBQljaGVhdENhc2UAFktTX1NFUEFSQVRFX1BVQkxJQ19LRVkHABhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UHABNLU19BTExPV19ST0JPX0RVQ0tTBwAKREFZX01JTExJUwCAuJkpAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQADcHViBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAwUWS1NfU0VQQVJBVEVfUFVCTElDX0tFWQEgqxdXjxVn41lUQbDWcutmm8Sj02Ze1ZmGUN+YNx+yCQgBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAwkAAAIBAVQFByRtYXRjaDABIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoCQACAQINVW5rbm93biBjaGFpbgALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AEUluZnJhVXBncmFkZUNvc3RTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDIr6AlAwkAAAIBAVQFByRtYXRjaDAAgMLXLwkAAgECDVVua25vd24gY2hhaW4ADmFyYml0cmFnZURlbGF5BAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwBQpEQVlfTUlMTElTAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAAVJVEVSNgkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEABRJZHhDZmdUb3VybmFtZW50RGFwcAAHAA9JZHhDZmdBY3Jlc0RhcHAACAEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPZWNvbm9teUNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwURSWR4Q2ZnRWNvbm9teURhcHAAC2dvdkNvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnR292ZXJuYW5jZURhcHAAC3dsZ0NvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUNSWR4Q2ZnV2xnRGFwcAASdG91cm5hbWVudENvbnRyYWN0CQEYZ2V0Q29udHJhY3RBZGRyZXNzT3JGYWlsAgUHcmVzdENmZwUUSWR4Q2ZnVG91cm5hbWVudERhcHAADWFjcmVzQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ9JZHhDZmdBY3Jlc0RhcHAACnJlY0xhbmROdW0AAAALcmVjTGFuZFNpemUAAQALcmVjVGVycmFpbnMAAgAMcmVjQ29udGluZW50AAMADXdsZ0Fzc2V0SWRLZXkCC3dsZ19hc3NldElkAAp3bGdBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJwIAgULd2xnQ29udHJhY3QFDXdsZ0Fzc2V0SWRLZXkCGFdMR09MRCBpcyBub3QgaXNzdWVkIHlldAAPYWNyZXNBc3NldElkS2V5AgxhY3Jlc0Fzc2V0SWQADGFjcmVzQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCcCAIFDWFjcmVzQ29udHJhY3QFD2FjcmVzQXNzZXRJZEtleQIXQUNSRVMgaXMgbm90IGlzc3VlZCB5ZXQAC3JhbmRvbURlbGF5AAIBCWtleUNvbW1pdAEHYWRkcmVzcwkArAICAhNmaW5pc2hCbG9ja0ZvckFkZHJfBQdhZGRyZXNzARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCWNvbnRpbmVudAkArAICAhRyZXNUeXBlc0J5Q29udGluZW50XwUJY29udGluZW50ARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhNzdGFrZWRMYW5kc0J5T3duZXJfBQlvd25lckFkZHIBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBCW93bmVyQWRkcgkArAICAhRzdGFrZWRQaWVjZXNCeU93bmVyXwUJb3duZXJBZGRyAQhhc1N0cmluZwEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEAXMFByRtYXRjaDAFAXMJAAIBAhhmYWlsIHRvIGNhc3QgaW50byBTdHJpbmcBBWFzSW50AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACA0ludAQBbgUHJG1hdGNoMAUBbgkAAgECFWZhaWwgdG8gY2FzdCBpbnRvIEludAEJYXNBbnlMaXN0AQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACCUxpc3RbQW55XQQBbAUHJG1hdGNoMAUBbAkAAgECG2ZhaWwgdG8gY2FzdCBpbnRvIExpc3RbQW55XQEJYXNCb29sZWFuAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACB0Jvb2xlYW4EAXMFByRtYXRjaDAFAXMJAAIBAhlmYWlsIHRvIGNhc3QgaW50byBCb29sZWFuAQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAEPZ2V0UmFuZG9tTnVtYmVyAwhtYXhWYWx1ZQRzYWx0B2VudHJvcHkDCQBnAgAABQhtYXhWYWx1ZQkAAgECFm1heFZhbHVlIHNob3VsZCBiZSA+IDAECnJhbmRvbUhhc2gJAPcDAQkAywECBQRzYWx0BQdlbnRyb3B5CQBqAgkAsQkBBQpyYW5kb21IYXNoBQhtYXhWYWx1ZQANaW5jdWJhdG9yQWRkcgQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAkBEUBleHRyTmF0aXZlKDEwNjIpAQIjM1BFa3RWdXgyUmhjaFNONjNEc0RvNGI0bXo0UXF6S1NlRHYDCQAAAgEBVAUHJG1hdGNoMAUEdGhpcwkAAgECDVVua25vd24gY2hhaW4AC2JyZWVkZXJBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUERWdVU0NUg3RWg1ZG10TmJuUk5SU3RHd1VMQTdOWTZIYgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgAMRU1QVFlfUFJPRDUwAZADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRklWRU1JTlVURVNNSUxMSVMA4KcSAAxSRU5BTUlOR0NPU1QAwJaxAgAKTUFYTkFNRUxFTgAyABVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQAgK3iBAAMRVhQTUFURVJJQUxTBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAKbdgu2rBwMJAAACAQFUBQckbWF0Y2gwAKqngbMJCQACAQINVW5rbm93biBjaGFpbgAHRVhQVVNEVAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMACA5Zp3AwkAAAIBAVQFByRtYXRjaDAAgOWadwkAAgECDVVua25vd24gY2hhaW4ADlJPQk9fRFVDS19VU0RUAKCNBgAMU19DT1NUX0FDUkVTAIDyi6gJAAVGSVZFWAkAtgIBAAUAB1RXRU5UWVgJALYCAQAUAAhUV0VOVFkyWAkAtgIBCQBoAgAUABQACFRXRU5UWTNYCQC2AgEJAGgCCQBoAgAUABQAFAAIVFdFTlRZNFgJALYCAQkAaAIJAGgCCQBoAgAUABQAFAAUAAhUV0VOVFk1WAkAtgIBCQBoAgkAaAIJAGgCCQBoAgAUABQAFAAUABQAD1BSRVNBTEVOVU1MQU5EUwD0AwESa2V5TmV4dEZyZWVMYW5kTnVtAAILbmV4dExhbmROdW0BGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICBGxjbl8FBG5hbWUBEGtleUxhbmRUb0Fzc2V0SWQBB2xhbmROdW0JAKwCAgIDbGFfBQdsYW5kTnVtAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICAgVpbGFvXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgNsb18FB2xhbmROdW0BGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQRuYW1lCQCsAgICEWR1Y2tCeUN1c3RvbU5hbWVfBQRuYW1lARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQRuYW1lCQCsAgICFGFjY291bnRCeUN1c3RvbU5hbWVfBQRuYW1lAQlrZXlPbGRpZXMAAgpvbGRpZXNMaXN0AQ9rZXlOZXh0Um9ib0R1Y2sAAgxuZXh0Um9ib0R1Y2sAC2NsYWltTW9kZVdoAAAADWNsYWltTW9kZUR1Y2sAAQATY2xhaW1Nb2RlV2hUaGVuRHVjawACAAhmbEhlYWx0aAAAAAtmbFRpbWVzdGFtcAAFAAdmbEJvbnVzAAYAC2ZsUHJvZHNVc2VkAAcBB25mdE5hbWUCB2xhbmROdW0IbGFuZFNpemUJAKwCAgkArAICBQpMQU5EUFJFRklYBQdsYW5kTnVtBQhsYW5kU2l6ZQEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBXRvdGFsB3dlaWdodHMEA3N1bQkAZAIJAGQCCQBkAgkAZAIJAGQCCQCRAwIFB3dlaWdodHMAAAkAkQMCBQd3ZWlnaHRzAAEJAJEDAgUHd2VpZ2h0cwACCQCRAwIFB3dlaWdodHMAAwkAkQMCBQd3ZWlnaHRzAAQJAJEDAgUHd2VpZ2h0cwAFAwkAZwIAAAUDc3VtCQACAQIQWmVybyB3ZWlnaHRzIHN1bQQFbm9ybTYJAGsDBQV0b3RhbAUFTVVMVDYFA3N1bQoBCm5vcm1hbGl6ZXICA2FjYwRlbGVtCQDNCAIFA2FjYwkAawMFBGVsZW0FBW5vcm02BQVNVUxUNgoAAiRsBQd3ZWlnaHRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpub3JtYWxpemVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARJnZXROZWVkZWRNYXRlcmlhbHMBBXRvdGFsBAVwcm9wcwkAtQkCCQEFdmFsdWUBCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACAV8DCQECIT0CCQCQAwEFBXByb3BzBQZOVU1SRVMJAAIBAhZXcm9uZyBwcm9wb3J0aW9ucyBkYXRhBAFyCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAACQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwABCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwACCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwADCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAECQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwcm9wcwAFBQNuaWwJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUFdG90YWwFAXIBEXN1YnRyYWN0TWF0ZXJpYWxzAwxzaG91bGRVc2VNYXQDaGFzCXRvdGFsTmVlZAQEbmVlZAkBEmdldE5lZWRlZE1hdGVyaWFscwEFCXRvdGFsTmVlZAoBCnN1YnRyYWN0b3ICA2FjYwNpZHgEBnJlc3VsdAkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNoYXMFA2lkeAkAkQMCBQRuZWVkBQNpZHgDCQBmAgAABQZyZXN1bHQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYTm90IGVub3VnaCBtYXRlcmlhbCBpZHg9CQCkAwEFA2lkeAILLCB5b3UgaGF2ZSAJAJEDAgUDaGFzBQNpZHgCCywgYnV0IG5lZWQgCQCkAwEJAJEDAgUEbmVlZAUDaWR4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQDBQxzaG91bGRVc2VNYXQKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCnN1YnRyYWN0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYFA2hhcwERc3VidHJhY3RFcXVpcG1lbnQCBW9sZEVxBXBVc2VkAwkAAAIFBXBVc2VkAgAJAJQKAgUFb2xkRXEHCgEHc3ViVXNlZAIDYWNjBmlkeEFtdAQFcGFydHMJALUJAgUGaWR4QW10AgEsAwkBAiE9AgkAkAMBBQVwYXJ0cwACCQACAQIoSW5jb3JyZWN0IGZvcm1hdCwgc2hvdWxkIGJlIGluZGV4LGFtb3VudAQDaWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAMDCQBmAgAABQNpZHgGCQBnAgUDaWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4BANhbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABBAdlcVBhcnRzCQC1CQIIBQNhY2MCXzEJAKwCAgkAkQMCBQVwYXJ0cwAAAgE6AwkBAiE9AgkAkAMBBQdlcVBhcnRzAAIJAAIBCQCsAgIJAKwCAgIPWW91IGRvbid0IGhhdmUgCQCRAwIFCXByb2RUeXBlcwUDaWR4AgkgZXF1aXBwZWQEA3RtcAkAkQMCBQdlcVBhcnRzAAEEBm51bUxlbgMJAQdpc0RpZ2l0AQkArwICCQCwAgIFA3RtcAABAAEAAgABBARjdXJyCQENcGFyc2VJbnRWYWx1ZQEJAK8CAgUDdG1wBQZudW1MZW4EBHRhaWwJALACAgUDdG1wBQZudW1MZW4EBm5ld0FtdAMJAGcCBQRjdXJyBQNhbXQJAGUCBQRjdXJyBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINWW91IGVxdWlwcGVkIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUDaWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFA2FtdAkAlAoCCQCsAgIJAKwCAgkArAICCQCsAgIJAJEDAgUHZXFQYXJ0cwAACQCRAwIFBXBhcnRzAAACAToJAKQDAQUGbmV3QW10BQR0YWlsAwgFA2FjYwJfMgYDAwkAZwIFA2lkeAAGCQBnAgAIBQNpZHgHCQAAAgUGbmV3QW10AAAHCgACJGwJALUJAgUFcFVzZWQCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFBW9sZEVxBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3ViVXNlZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgEOcHJvZFN0clRvQnl0ZXMBB3Byb2RTdHIEBXBMaXN0AwkAAAIFB3Byb2RTdHICAAUDbmlsCQC8CQIFB3Byb2RTdHICAV8KAQR0b0JWAgNhY2MGcmVjaXBlBAFqCQBpAgkAyAEBBQNhY2MACAQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAkAywECBQNhY2MJAJoDAQUEY3VycgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAEACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQR0b0JWAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDmJ5dGVzVG9Qcm9kU3RyAQJidgoBBmZyb21CVgIDYWNjBnJlY2lwZQQBagkAkAMBBQNhY2MEAWIJAMkBAgkAygECBQJidgkAaAIACAUBagAICQDNCAIFA2FjYwkApAMBCQCxCQEFAWIJALoJAgoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZmcm9tQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgIBXwEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAglkdWNrU3RhdHMEcmVxcwoBBWNoZWNrAgNhY2MBagQEYnVmZgMJAGYCCQCQAwEFCWR1Y2tTdGF0cwkAZAIABwUBagkAkQMCBQlkdWNrU3RhdHMJAGQCAAcFAWoAAAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEcmVxcwUBagkAZAIJAJEDAgUJZHVja1N0YXRzBQFqBQRidWZmCQACAQkArAICAhtSZXF1aXJlbWVudCBub3Qgc2F0aXNmaWVkOiAJAJEDAgUMcmVxdWlyZW1lbnRzBQFqBgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAcKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWNoZWNrAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA3CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcBCnBsYWNlUHJvZEIGBmlkeENudAVwTGlzdAppc1Bvc2l0aXZlCWR1Y2tTdGF0cwhvY2N1cGllZARmcmVlBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgUQZm9ydEFsbG93ZWRQcm9kcwUKcHJvZHVjdElkeAkAAgEJAKwCAgkArAICAglQcm9kdWN0ICcJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AiEnIGNhbm5vdCBiZSB1c2VkIGZvciBsYW5kIGRlZmVuc2UDCQBmAgAABQVjb3VudAkAAgECF0NvdW50IGNhbid0IGJlIG5lZ2F0aXZlAwkAZgIFBWNvdW50BQ1NQVhQUk9ESU5TTE9UCQACAQkArAICCQCsAgIJAKwCAgIUQ2FuJ3QgcHV0IG1vcmUgdGhhbiAJAKQDAQUNTUFYUFJPRElOU0xPVAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgDCQAAAgUFY291bnQAAAkAlQoDBQVwTGlzdAUIb2NjdXBpZWQFBGZyZWUEBGhlYWQJAMkBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgEBGN1cnIJALEJAQkAyQECCQDKAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4AAgEBHRhaWwJAMoBAgUFcExpc3QJAGgCAAgJAGQCBQpwcm9kdWN0SWR4AAEEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQGbmV3QW10AwMJAQEhAQUKaXNQb3NpdGl2ZQkBFWNoZWNrU3RhdFJlcXVpcmVtZW50cwIFCWR1Y2tTdGF0cwkAtQkCCQCRAwIFBnJlY2lwZQUQcklkeFJlcXVpcmVtZW50cwIBLAcJAGUCBQRjdXJyBQVjb3VudAkAZAIFBGN1cnIFBWNvdW50BAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIFBm5ld0FtdAUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFBGN1cnIFDlBST0RVQ1RQS0dTSVpFCQCVCgMJAMsBAgkAywECBQRoZWFkCQCaAwEFBm5ld0FtdAUEdGFpbAkAZAIFCG9jY3VwaWVkBQhkZWx0YVZvbAkAZQIFBGZyZWUFCGRlbHRhVm9sAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwMJAQEhAQUKaXNQb3NpdGl2ZQkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgcJAAIBAitQcm9kdWN0IGlkeCBzaG91bGQgYmUgMiBkaWdpdHMsIHplcm8gcGFkZGVkBApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQBmAgUFY291bnQFDU1BWFBST0RJTlNMT1QJAAIBCQCsAgIJAKwCAgkArAICAhRDYW4ndCBwdXQgbW9yZSB0aGFuIAkApAMBBQ1NQVhQUk9ESU5TTE9UAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUKcHJvZHVjdElkeAMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwQEaGVhZAkAyQECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAQEY3VycgkAsQkBCQDJAQIJAMoBAgUFcExpc3QJAGgCAAgFCnByb2R1Y3RJZHgACAQEdGFpbAkAygECBQVwTGlzdAkAaAIACAkAZAIFCnByb2R1Y3RJZHgAAQQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAIBXwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAlpc0JpZ0l0ZW0DAwkBASEBBQppc1Bvc2l0aXZlCQEVY2hlY2tTdGF0UmVxdWlyZW1lbnRzAgUJZHVja1N0YXRzCQC1CQIJAJEDAgUGcmVjaXBlBRBySWR4UmVxdWlyZW1lbnRzAgEsBwQGY29tcGF0CQCRAwIFBnJlY2lwZQUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJQKAgkAywECCQDLAQIFBGhlYWQJAJoDAQkAZAIFBGN1cnIDBQppc1Bvc2l0aXZlBQVjb3VudAkBAS0BBQVjb3VudAUEdGFpbAUJaXNCaWdJdGVtAQtzbG90c0dyb3VwQgYBZwRicEluCmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BXN0YXRzAwkBAiE9AgUBZwIABAVzbG90cwkAtQkCBQFnAgEsAwkAZgIJAJADAQUFc2xvdHMFCE1BWFNMT1RTCQACAQISV3Jvbmcgc2xvdHMgZm9ybWF0BAJzMAkAkQMCBQVzbG90cwAABAJzMQMJAGYCCQCQAwEFBXNsb3RzAAEJAJEDAgUFc2xvdHMAAQIAAwMJAAACBQJzMAIACQAAAgUCczECAAcFBGJwSW4EBXRtcFMwAwkBAiE9AgUCczACAAkBCGFkZFByb2RCBwUCczAFBGJwSW4FCmlzUG9zaXRpdmUFB3NlZ21lbnQFB21haW5BdXgAAAUFc3RhdHMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQVzdGF0cwJfMQgFBXRtcFMwAl8xBQRicEluAQZkcmVzc0IEB3NlZ0xpc3QGcEJ5dGVzCmlzUG9zaXRpdmUFc3RhdHMKAQdzZWdtZW50AgNhY2MDc2VnBAFqCAUDYWNjAl8xBAdtYWluQXV4CQC1CQIFA3NlZwIBOwMJAQIhPQIJAJADAQUHbWFpbkF1eAUKTlVNTUFJTkFVWAkAAgECFFdyb25nIHNlZ21lbnQgZm9ybWF0BAFtCQCRAwIFB21haW5BdXgAAAQBYQkAkQMCBQdtYWluQXV4AAEDAwkAAAIFAW0CAAkAAAIFAWECAAcJAJQKAgkAZAIFAWoAAQgFA2FjYwJfMgQEdG1wTQkBC3Nsb3RzR3JvdXBCBgUBbQgFA2FjYwJfMgUKaXNQb3NpdGl2ZQUBagAABQVzdGF0cwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBXN0YXRzCAoAAiRsBQdzZWdMaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAFBnBCeXRlcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc2VnbWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgJfMgEFZm9ydEIGB3NlZ0xpc3QGcEJ5dGVzCG9jY3VwaWVkBGZyZWUKaXNQb3NpdGl2ZQlkdWNrU3RhdHMDCQBmAgADCQCQAwEFB3NlZ0xpc3QJAAIBAjFBdCBsZWFzdCBkdWNrLCBtaW5lcyBhbmQgdHJhcHMgcGFydHMgYXJlIHJlcXVpcmVkCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQMJAAACBQFqAAAJAJYKBAkAZAIFAWoAAQgFA2FjYwJfMggFA2FjYwJfMwgFA2FjYwJfNAQBcAkBCnBsYWNlUHJvZEIGBQNzZWcIBQNhY2MCXzIFCmlzUG9zaXRpdmUFCWR1Y2tTdGF0cwgFA2FjYwJfMwgFA2FjYwJfNAkAlgoECQBkAgUBagABCAUBcAJfMQgFAXACXzIIBQFwAl8zBAF0CgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUGcEJ5dGVzBQhvY2N1cGllZAUEZnJlZQoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc2VnbWVudAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgkAlQoDCAUBdAJfMggFAXQCXzMIBQF0Al80ARdjYW5XZWFyQ3VycmVudEVxdWlwbWVudAELZHVja0Fzc2V0SWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAZjdXJyRXEJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8ECXRlbXBQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUMRU1QVFlfUFJPRDUwBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUGY3VyckVxBQtzZWdCYWNrcGFjawIBOwABBApidWZmRWZmZWN0AwkAAAIFCHNlZ0JwQXV4AgAAAAQEYXV4MAkAkQMCCQC1CQIFCHNlZ0JwQXV4AgEsAAADCQAAAgUEYXV4MAIAAAAEBmlkeENudAkAtQkCBQRhdXgwAgE6BANpZHgJAJEDAgUGaWR4Q250AAAEA2NudAkAkQMCBQZpZHhDbnQAAQMDAwMDCQAAAgUDaWR4AgIwNgYJAAACBQNpZHgCAjA3BgkAAAIFA2lkeAICMDgJAQIhPQIFA2NudAIABwkAZgIJAQ1wYXJzZUludFZhbHVlAQUDY250AAAHCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgJAQ1wYXJzZUludFZhbHVlAQUDaWR4AgFfBQpySWR4RWZmZWN0AAAEBXN0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQFCmJ1ZmZFZmZlY3QGBAhuZXdQcm9kQgkBBmRyZXNzQgQFBmN1cnJFcQUJdGVtcFByb2RCBwUFc3RhdHMJAAACBQhuZXdQcm9kQgUIbmV3UHJvZEIBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECHByb3BMaXN0DXRlcnJhaW5Db3VudHMNbGFuZFNpemVJbmRleARzaWduAwkBAiE9AgkAkAMBBQhwcm9wTGlzdAUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQoBB3VwZGF0ZXICA2FjYwFpBAZyZXN1bHQJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvcExpc3QFAWkJAGgCCQBoAgUEc2lnbgkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhZQYW5pYyEgUGllY2VzIG9mIHR5cGU9CQCkAwEFAWkCBywgc2lnbj0JAKQDAQUEc2lnbgITLCB0ZXJyYWluQ291bnRzW2ldPQkApAMBCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkCECwgbGFuZFNpemVJbmRleD0JAKQDAQUNbGFuZFNpemVJbmRleAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0CgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARF1cGRhdGVQcm9wb3J0aW9ucwMNdGVycmFpbkNvdW50cw1sYW5kU2l6ZUluZGV4BHNpZ24ECHByb3BMaXN0CQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleVJlc1Byb3BvcnRpb25zAAILMF8wXzBfMF8wXzACAV8JALkJAgkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgIBXwENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgkAuQkCBQFyAgFfAQl2aXJ0Q2xhaW0EDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAJQKAgkAzQgCCAUDYWNjAl8xBQlyZXNPZlR5cGUJAGQCCAUDYWNjAl8yBQlyZXNPZlR5cGUKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVhZGRlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgENZGlzdHJpYnV0ZVJlcwQMY3VycmVudFdoUmVzDmN1cnJlbnRQYWNrUmVzCnJlc1RvQ2xhaW0Ld2hTcGFjZUxlZnQEDnJlc0xpc3RUb0NsYWltCAUKcmVzVG9DbGFpbQJfMQQMcmVzQW1Ub0NsYWltCAUKcmVzVG9DbGFpbQJfMgMJAAACBQxyZXNBbVRvQ2xhaW0AAAkAlAoCCQC5CQIFDGN1cnJlbnRXaFJlcwIBXwkAuQkCBQ5jdXJyZW50UGFja1JlcwIBXwMJAGcCBQt3aFNwYWNlTGVmdAUMcmVzQW1Ub0NsYWltCgEIYWRkTGlzdHMCA2FjYwFpCQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGN1cnJlbnRXaFJlcwUBaQkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQQBcgoAAiRsBQVJVEVSNgoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAUFSVRFUjYKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFA25pbAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhZGRQYXJ0TGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCCAUBcgJfMQIBXwkAuQkCCAUBcgJfMgIBXwEDYWJzAQF4AwkAwAICBQF4CQC2AgEAAAUBeAkAvgIBBQF4AARmcmVxCQDMCAIJAMwIAgAGCQDMCAIACQkAzAgCAA4JAMwIAgAPCQDMCAIAEAUDbmlsCQDMCAIJAMwIAgAFCQDMCAIACAkAzAgCAA0JAMwIAgAOCQDMCAIADwUDbmlsCQDMCAIJAMwIAgABCQDMCAIABAkAzAgCAAkJAMwIAgAKCQDMCAIADwUDbmlsCQDMCAIJAMwIAgABCQDMCAIABgkAzAgCAAcJAMwIAgAPCQDMCAIAEwUDbmlsCQDMCAIJAMwIAgAECQDMCAIABwkAzAgCAAgJAMwIAgANCQDMCAIAEgUDbmlsBQNuaWwBB2dlbkNoYXICAW4FZnJlcXMEA3JlbQkAoAMBCQC7AgIFAW4FB1RXRU5UWVgEBmxldHRlcgMJAGYCCQCRAwIFBWZyZXFzAAAFA3JlbQIBQQMJAGYCCQCRAwIFBWZyZXFzAAEFA3JlbQIBQgMJAGYCCQCRAwIFBWZyZXFzAAIFA3JlbQIBQwMJAGYCCQCRAwIFBWZyZXFzAAMFA3JlbQIBRAMJAGYCCQCRAwIFBWZyZXFzAAQFA3JlbQIBRQIBRgUGbGV0dGVyAQtnZW5UZXJyYWlucwIEc2VlZAxjb250aW5lbnRJZHgEAWYJAJEDAgUEZnJlcQUMY29udGluZW50SWR4CgEQdGVycmFpbkdlbmVyYXRvcgIDYWNjBGVsZW0JAJQKAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIIBQNhY2MCXzEJAQdnZW5DaGFyAggFA2FjYwJfMgUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFB1RXRU5UWVgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkyWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTNYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZNFgFAWYJALoCAggFA2FjYwJfMgUIVFdFTlRZNVgEAXQKAAIkbAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgICAAkAugICBQRzZWVkBQVGSVZFWAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEQdGVycmFpbkdlbmVyYXRvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUIBQF0Al8xAAZQRVJNMjUJAMwIAgAHCQDMCAIAAgkAzAgCAA8JAMwIAgATCQDMCAIACAkAzAgCABgJAMwIAgABCQDMCAIAFQkAzAgCABAJAMwIAgAFCQDMCAIAAAkAzAgCABYJAMwIAgAUCQDMCAIAFwkAzAgCAAsJAMwIAgAECQDMCAIAEgkAzAgCAAwJAMwIAgAGCQDMCAIACgkAzAgCAAMJAMwIAgARCQDMCAIADQkAzAgCAAkJAMwIAgAOBQNuaWwABlRDSEFSUwkAzAgCAgFBCQDMCAICAUIJAMwIAgIBQwkAzAgCAgFECQDMCAICAUUJAMwIAgIBRgUDbmlsARNnZW5UZXJyYWluc0Zvck1lcmdlAgtzdW1UZXJyYWlucw1sYW5kU2l6ZUluZGV4CgEFc3RlcDECA2FjYwFzBAFqCAUDYWNjAl8yBAJlbAkBDXBhcnNlSW50VmFsdWUBBQFzBAF4AwkAAAIFAmVsAAAAAAMJAGcCBQJlbAkAaAIABAUNbGFuZFNpemVJbmRleAkAaQIFAmVsBQ1sYW5kU2l6ZUluZGV4AwkAZgIFAmVsCQBoAgADBQ1sYW5kU2l6ZUluZGV4AAMJAGQCCQBpAgkAZQIFAmVsAAEFDWxhbmRTaXplSW5kZXgAAQkAlQoDCQDNCAIIBQNhY2MCXzEFAXgJAGQCCAUDYWNjAl8yAAEJAGQCCAUDYWNjAl8zBQF4BAF0CgACJGwFC3N1bVRlcnJhaW5zCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVzdGVwMQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQDYXJyCAUBdAJfMQQGbWF4SWR4CQEFdmFsdWUBCQDPCAIFA2FycgkAlgMBBQNhcnIEBWRlbHRhCQBlAggFAXQCXzMAGQoBBnN1YmJlcgIDYWNjA2lkeAQDdmFsAwkAAAIFA2lkeAUGbWF4SWR4CQBlAgkAkQMCBQNhcnIFA2lkeAUFZGVsdGEJAJEDAgUDYXJyBQNpZHgEBnplcm9lcwMJAAACBQN2YWwAAAUDbmlsCQC1CQIJALACAgkApAMBCQBsBgAKAAAFA3ZhbAAAAAAFBERPV04AAQIABAFjCQCRAwIFBlRDSEFSUwUDaWR4CgEHbGlzdEdlbgICYWMHaWdub3JlZAkAzQgCBQJhYwUBYwQBegoAAiRsBQZ6ZXJvZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB2xpc3RHZW4CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDI1CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkJAM4IAgUDYWNjBQF6BAFyCgACJGwFBUlURVI2CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQZzdWJiZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYKAQZwZXJtdXQCA2FjYwFqCQCsAgIFA2FjYwkAkQMCBQFyBQFqCgACJGwFBlBFUk0yNQoAAiRzCQCQAwEFAiRsCgAFJGFjYzACAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEGcGVybXV0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyNQkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZAQtnZXRCYWNrcGFjawEFYnBLZXkEAXAJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJdm9sUHJlZml4BAVwYXJ0cwkAtQkCBQl2b2xQcmVmaXgCAV8JAGgCCQBoAgUMV0hNVUxUSVBMSUVSCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAABF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQljdXJyZW50V2gEBWdvb2RzCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCgEJc3VtUmVzTWF0AgNhY2MEaXRlbQkAZAIFA2FjYwkBDXBhcnNlSW50VmFsdWUBBQRpdGVtCgEHc3VtUHJvZAIDYWNjBGl0ZW0EA2lkeAgFA2FjYwJfMQQEcGtncwkAaQIJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBQ5QUk9EVUNUUEtHU0laRQABBQ5QUk9EVUNUUEtHU0laRQkAlAoCCQBkAgUDaWR4AAEJAGQCCAUDYWNjAl8yCQBoAgUEcGtncwUFTVVMVDgECHdoUmVzVm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECHdoTWF0Vm9sCgACJGwJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAAACgEFJGYxXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQlzdW1SZXNNYXQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjFfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjFfMgIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIJAQUkZjFfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYECndoR29vZHNWb2wDCQAAAgUFZ29vZHMCAAAACAoAAiRsCQC8CQIFBWdvb2RzAgFfCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAAAAAAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHc3VtUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAl8yCQBkAgkAZAIFCHdoUmVzVm9sBQh3aE1hdFZvbAUKd2hHb29kc1ZvbAEMZ2V0V2FyZWhvdXNlAwV3aEtleQlsYW5kSW5kZXgKaW5mcmFMZXZlbAQJdm9sUHJlZml4CQCsAgIJAKwCAgkApAMBBQlsYW5kSW5kZXgCAV8JAKQDAQUKaW5mcmFMZXZlbAQHd2hUb3RhbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQUJdm9sUHJlZml4BAV3aFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBBQV3aEtleQkArAICBQl2b2xQcmVmaXgCGzowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDo6MAQCd2gJALwJAgUFd2hTdHICAToECndoT2NjdXBpZWQJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAZ3aExvZnQDCQBmAgAFCQCQAwEFAndoCQC5CQIJAMwIAgIBMAkAzAgCCQCkAwEFCndoT2NjdXBpZWQJAMwIAgkApAMBCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwQEbG9mdAkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8ECHdoTG9ja2VkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUJdm9sTG9ja2VkBANvY2MDCQBmAgkAkAMBBQRsb2Z0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUKd2hPY2N1cGllZAkAuQkCCQDMCAIJAKQDAQUId2hMb2NrZWQJAMwIAgkApAMBBQNvY2MJAMwIAgkApAMBCQBlAgkAZQIFB3doVG90YWwFCHdoTG9ja2VkBQNvY2MJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8JAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgUGd2hMb2Z0BQNuaWwBFWdldFdhcmVob3VzZVNwYWNlTGVmdAEJY3VycmVudFdoBAtvY2N1cGllZFZvbAkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUJY3VycmVudFdoBA9jdXJyV2hMb2NrZWRWb2wJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAkAZQIJAGUCCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMFC29jY3VwaWVkVm9sBQ9jdXJyV2hMb2NrZWRWb2wBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnByAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2hyCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docgIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docgUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnByBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFyCgACJGwFCHJlc1BhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212TQIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3dobQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCWN1cnJXaE1hdAUBaQQDYnBtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkDCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAJEDAgUJY3VycldoTWF0BQFpCQDNCAIIBQNhY2MCXzMJAJEDAgUOY3VycmVudFBhY2tNYXQFAWkIBQNhY2MCXzQDCQBmAgUCYW0AAAMJAGYCBQJhbQUDYnBtCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgBQRpdGVtAhkgZnJvbSBiYWNrcGFjaywgYnV0IG9ubHkgCQCkAwEFA2JwbQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtAwkAZgIJAQEtAQUCYW0FA3dobQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aG0CCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aG0FAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwbQUCYW0JAGQCCAUDYWNjAl80BQJhbQQBbQoAAiRsBQhtYXRQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAXICXzQKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212TQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgoBA212UAIDYWNjBGl0ZW0EAWkIBQNhY2MCXzEEAmFtCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0EA3docAMJAGYCCQCQAwEFCmN1cnJXaFByb2QFAWkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpjdXJyV2hQcm9kBQFpAAAEA2JwcAMJAGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALoJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALoJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC8CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC8CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoAwkBASEBCQEXY2FuV2VhckN1cnJlbnRFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAkAAgECFkVxdWlwbWVudCBpbmNvbXBhdGlibGUEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDMzMzQzMzM4ODIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMzMzNDMzMzg4MgJfMQQGZHVja0lkCAUNJHQwMzMzNDMzMzg4MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzNjI1NjM3MTI3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzNjI1NjM3MTI3Al8xBAVicFJlcwgFDSR0MDM2MjU2MzcxMjcCXzIEBWxvZnRPCAUNJHQwMzYyNTYzNzEyNwJfMwQFbG9mdEYIBQ0kdDAzNjI1NjM3MTI3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMDCQEBIQEFGEtTX0FMTE9XX0JJR19JTkZSQV9NRVJHRQkAZwIFCGN1ckxldmVsAAMHCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG1heEluZnJhCQBkAgkAaQIJAQRzcXJ0BAUGcGllY2VzAAAAAAUERE9XTgAFAAIECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQMDBRhLU19BTExPV19CSUdfSU5GUkFfTUVSR0UJAGYCBQhuZXdMZXZlbAUIbWF4SW5mcmEHCQACAQkArAICAiVDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gCQCkAwEFCG1heEluZnJhBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARN1cGRhdGVTdGF0c0ludGVybmFsBAZsdmxLZXkFeHBLZXkJcG9pbnRzS2V5B2RlbHRhWFAEAnhwCQELdmFsdWVPckVsc2UCCQCfCAEFBXhwS2V5AAAEBW5ld1hQCQBkAgUCeHAFB2RlbHRhWFAECWx2bFBvaW50cwkBB2xldmVsVXACCQELdmFsdWVPckVsc2UCCQCfCAEFBmx2bEtleQAABQVuZXdYUAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcG9pbnRzS2V5CQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwb2ludHNLZXkAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULZHVja0Fzc2V0SWQEBGFkZHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFC2R1Y2tBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMDAwUTS1NfQUxMT1dfUk9CT19EVUNLUwkAAAIIBQVhc3NldAZpc3N1ZXIFBHRoaXMHCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQULUk9CT19QUkVGSVgHCQETdXBkYXRlU3RhdHNJbnRlcm5hbAQJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyCQEJa2V5VXNlclhQAQUEYWRkcgkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgUHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQFB2RlbHRhWFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAkBE3VwZGF0ZVN0YXRzSW50ZXJuYWwECQEMa2V5VXNlckxldmVsAQUEYWRkcgkBCWtleVVzZXJYUAEFBGFkZHIJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIFB2RlbHRhWFABEmFjdGl2YXRlT25ib2FyZEFydAEEYWRkcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFBGFkZHIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwkBASEBCQEJaXNEZWZpbmVkAQUFcmVmQnkJAAIBAilZb3UgYXJlIG5vdCBlbGlnaWJsZSBmb3IgT05CT0FSRCBhcnRpZmFjdAQGYXJ0S2V5CQEca2V5T25ib2FyZEFydER1Y2tBY3RpdmF0ZWRCeQEFBGFkZHIEB2FydER1Y2sJAKIIAQUGYXJ0S2V5AwkBCWlzRGVmaW5lZAEFB2FydER1Y2sJAAIBCQCsAgICL1lvdSBhbHJlYWR5IHVzZWQgeW91ciBPTkJPQVJEIGFydGlmYWN0IG9uIGR1Y2sgCQEFdmFsdWUBBQdhcnREdWNrBBBkdWNrQWN0aXZhdG9yS2V5CQEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawEFC2R1Y2tBc3NldElkBA1kdWNrQWN0aXZhdG9yCQCiCAEFEGR1Y2tBY3RpdmF0b3JLZXkDCQEJaXNEZWZpbmVkAQUNZHVja0FjdGl2YXRvcgkAAgEJAKwCAgkArAICCQCsAgICCVRoZSBkdWNrIAULZHVja0Fzc2V0SWQCNCBhbHJlYWR5IGdvdCBwb2ludHMgZnJvbSBPTkJPQVJEIGFydGlmYWN0IGZyb20gdXNlciAJAQV2YWx1ZQEFDWR1Y2tBY3RpdmF0b3IJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZhcnRLZXkFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFEGR1Y2tBY3RpdmF0b3JLZXkFBGFkZHIFA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQl4cE9uYm9hcmQCXzEBEmFjdGl2YXRlUHJlc2FsZUFydAIEYWRkcg1sYW5kQXNzZXRJZEluBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA1hY3RpdmF0aW9uS2V5CQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAMJAGYCCQELdmFsdWVPckVsc2UCCQCfCAEFDWFjdGl2YXRpb25LZXkAAAAACQACAQIlUHJlc2FsZSBhcnRpZmFjdCBpcyBhbHJlYWR5IGFjdGl2YXRlZAMJAGYCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFAWMCXzMFCnJlY0xhbmROdW0FD1BSRVNBTEVOVU1MQU5EUwkAAgEJAKwCAgkArAICCQCsAgIFCkxBTkRQUkVGSVgCASAFC2xhbmRBc3NldElkAiUgaXMgbm90IGVsaWdpYmxlIGZvciBwcmVzYWxlIGFydGlmYWN0BAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ9jaGVja1RvdXJuYW1lbnQBC2R1Y2tBc3NldElkBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEBXREYXRhCQELZ2V0VG91ckRhdGECBRJ0b3VybmFtZW50Q29udHJhY3QFBmxhc3RJZAQGc3RhdGljCQCRAwIFBXREYXRhBQlpZHhTdGF0aWMEB2R5bmFtaWMJAJEDAgUFdERhdGEFCmlkeER5bmFtaWMDCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFUBwMDAwkAAAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BQZsYXN0SWQJAAACCQCRAwIFB2R5bmFtaWMFDnREeW5hbWljU3RhdHVzAgpJTlBST0dSRVNTBwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZzdGF0aWMFCnRTdGF0aWNFbmQFA25vdwcJAAIBAipZb3VyIGR1Y2sgaXMgdGFraW5nIHBhcnQgaW4gdGhlIHRvdXJuYW1lbnQJAQlhc0Jvb2xlYW4BCQD8BwQFBHRoaXMCFmV4aXRUb3VybmFtZW50SW50ZXJuYWwJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAQ1tZXJnZUludGVybmFsBgtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQ9jaGVja1RvdXJuYW1lbnQBBQtkdWNrQXNzZXRJZAkAAgECHW1lcmdlSW50ZXJuYWxfY2hlY2tUb3VybmFtZW50CgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECAUDYWNjAl82BQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQGY1Byb3BzCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQIBQNhY2MDXzEwBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQLc3VtVGVycmFpbnMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAgFA2FjYwJfOQUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEBWxhbmRzCAUDYWNjAl83BANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQECWN1c3RvbUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQULbGFuZEFzc2V0SWQECmN1c3RvbU5hbWUJAQt2YWx1ZU9yRWxzZQIJAKIIAQUJY3VzdG9tS2V5AgAJAJwKCgUIc2l6ZXNPdXQFBGFydHMFCWNvbnRpbmVudAUFYnBSZXMJAM4IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEDCQECIT0CBQpjdXN0b21OYW1lAgAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQUDbmlsBQNuaWwFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMFC3N1bVRlcnJhaW5zBQZjUHJvcHMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9wTGlzdAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wAgFfBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEBWNvbnQwCQCRAwIJALUJAggJAQV2YWx1ZQEJAOwHAQkA2QQBCQCRAwIFDGxhbmRBc3NldElkcwAAC2Rlc2NyaXB0aW9uAgFfBQxyZWNDb250aW5lbnQECWNvbnRQcm9wcwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEJARZrZXlSZXNUeXBlc0J5Q29udGluZW50AQUFY29udDACCzBfMF8wXzBfMF8wAgFfBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJwKCgUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFCHByb3BMaXN0BQdsYW5kc0luAAAJALUJAgILMF8wXzBfMF8wXzACAV8FCWNvbnRQcm9wcwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQETZ2VuVGVycmFpbnNGb3JNZXJnZQIIBQFyAl85CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEFC25ld0xhbmRTaXplBQVTU0laRQQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAkAuQkCCAUBcgJfNgIBXwkBC1N0cmluZ0VudHJ5AgkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBBQljb250aW5lbnQJALkJAggFAXIDXzEwAgFfCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQJALkJAgkAzAgCBQljb250aW5lbnQJAMwIAgIBTAkAzAgCBQ5uZXdMYW5kQXNzZXRJZAUDbmlsAgFfCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQRhZGRyAAEFB2Fzc2V0SWQFDm5ld0xhbmRBc3NldElkAQNzMm0CBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzAAABA20ybAIEYWRkcgxsYW5kQXNzZXRJZHMJAQ1tZXJnZUludGVybmFsBgIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwCBGFkZHIMbGFuZEFzc2V0SWRzCQENbWVyZ2VJbnRlcm5hbAYCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uAgRhZGRyDGxhbmRBc3NldElkcwQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAwUHJG1hdGNoMAkBA20ybAIFBGFkZHIFDGxhbmRBc3NldElkcwMJAAACAAUFByRtYXRjaDAJAQRsMnhsAgUEYWRkcgUMbGFuZEFzc2V0SWRzAwkAAAIAAgUHJG1hdGNoMAkBBnhsMnh4bAIFBGFkZHIFDGxhbmRBc3NldElkcwkAAgECDVVua25vd24gbWVyZ2UBBnByb2xvZwEBaQMDCQECIT0CCAUBaQxvcmlnaW5DYWxsZXIFDHJlc3RDb250cmFjdAkBC3ZhbHVlT3JFbHNlAgkAoAgBCQEKa2V5QmxvY2tlZAAHBwkAAgECH0NvbnRyYWN0cyBhcmUgdW5kZXIgbWFpbnRlbmFuY2UJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAUDbmlsKwFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQELc2F2ZUludGVnZXICA2tleQZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAiBzYXZlSW50ZWdlciBpcyBub3QgcHVibGljIG1ldGhvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUDa2V5BQZhbW91bnQFA25pbAFpAQpzZXRCbG9ja2VkAQlpc0Jsb2NrZWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCmtleUJsb2NrZWQABQlpc0Jsb2NrZWQFA25pbAFpAQlzdGFrZUxhbmQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAlsYW5kSW5kZXgJAGkCBQZwaWVjZXMFBVNTSVpFBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAEEDHJlc0J5Q29udEtleQkBFmtleVJlc1R5cGVzQnlDb250aW5lbnQBCQCRAwIFAWQFDHJlY0NvbnRpbmVudAQJY29udFByb3BzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUMcmVzQnlDb250S2V5AgswXzBfMF8wXzBfMAIBXwQQdXBkYXRlZENvbnRQcm9wcwkAuQkCCQEZdXBkYXRlUHJvcG9ydGlvbnNJbnRlcm5hbAQFCWNvbnRQcm9wcwUNdGVycmFpbkNvdW50cwUJbGFuZEluZGV4AAECAV8ECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAMJAGcCCQCQAwEFBWxhbmRzBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVIJAAIBCQCsAgIJAKwCAgIZWW91ciBhbHJlYWR5IHN0YWtlZCBtYXggKAkApAMBBRhNQVhfTEFORFNfU1RBS0VEX0JZX1VTRVICBykgbGFuZHMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5CQBkAgUJb2xkUGllY2VzBQZwaWVjZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCBQxyZXNCeUNvbnRLZXkFEHVwZGF0ZWRDb250UHJvcHMFA25pbAUNcHJvbG9nQWN0aW9ucwUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUNY2xhaW1Nb2RlRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAFkCAUBYwJfMwQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQMcmVzQnlDb250S2V5CQEWa2V5UmVzVHlwZXNCeUNvbnRpbmVudAEJAJEDAgUBZAUMcmVjQ29udGluZW50BAljb250UHJvcHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQxyZXNCeUNvbnRLZXkCCzBfMF8wXzBfMF8wAgFfBBB1cGRhdGVkQ29udFByb3BzCQC5CQIJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAUJY29udFByb3BzBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQIBXwQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFDWNsYWltTW9kZUR1Y2sEBWxhbmRzCQC9CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUIbGFuZHNLZXkCAAIBXwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBANub3cIBQlsYXN0QmxvY2sJdGltZXN0YW1wBA5nb3ZSZWxlYXNlVGltZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQtnb3ZDb250cmFjdAkBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEFBGFkZHIAAAMJAGcCBQ5nb3ZSZWxlYXNlVGltZQUDbm93CQACAQkArAICAjlZb3VyIGdXTCBhcmUgdGFraW5nIHBhcnQgaW4gdm90aW5nLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOZ292UmVsZWFzZVRpbWUEDmFyYlJlbGVhc2VUaW1lCQBkAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQt3bGdDb250cmFjdAkBFGtleUxhc3RBcmJUaW1lQnlVc2VyAQUEYWRkcgAABQ5hcmJpdHJhZ2VEZWxheQMJAGYCBQ5hcmJSZWxlYXNlVGltZQUDbm93CQACAQkArAICAj9Zb3VyIHN0YWtlZCBsYW5kcyB0b29rIHBhcnQgaW4gYXJiaXRyYWdlLCBjYW5ub3QgdW5zdGFrZSB1bnRpbCAJAKQDAQUOYXJiUmVsZWFzZVRpbWUECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQRhZGRyBAxzdGFrZWRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECW5ld1BpZWNlcwMJAGYCBQZwaWVjZXMFDHN0YWtlZFBpZWNlcwAACQBlAgUMc3Rha2VkUGllY2VzBQZwaWVjZXMECXdsZ1Jlc3VsdAkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFBGFkZHIFA25pbAUDbmlsCQCUCgIJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUMcmVzQnlDb250S2V5BRB1cGRhdGVkQ29udFByb3BzCQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfMgkAuQkCCAULY2xhaW1SZXN1bHQCXzMCAToJAMwIAgMJAGYCCQCQAwEFBWxhbmRzAAEJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIJANEIAgUFbGFuZHMJAQV2YWx1ZQEFA2lkeAIBXwkBC0RlbGV0ZUVudHJ5AQUIbGFuZHNLZXkJAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQUJbmV3UGllY2VzBQNuaWwFDXByb2xvZ0FjdGlvbnMFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpEVUNLUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEBmlzUm9ibwMDBRNLU19BTExPV19ST0JPX0RVQ0tTCQAAAggFBWFzc2V0Bmlzc3VlcgUEdGhpcwcJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQtST0JPX1BSRUZJWAcDAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAgYgdG9rZW4DAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKRFVDS1BSRUZJWAkBASEBBQZpc1JvYm8HCQACAQkArAICCQCsAgIJAKwCAgkArAICAglPbmx5IE5GVCAFCkRVQ0tQUkVGSVgCBCBvciAFC1JPQk9fUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDOCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQ1wcm9sb2dBY3Rpb25zAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAdhc3NldElkCQDZBAEFCmFzc2V0SWRTdHIEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzAwkBD2NoZWNrVG91cm5hbWVudAEFCmFzc2V0SWRTdHIJAAIBAht1bnN0YWtlRHVja19jaGVja1RvdXJuYW1lbnQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDOCAIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyAAEFB2Fzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQUHdGltZUtleQkAzAgCCQELRGVsZXRlRW50cnkBBQlrZXlIZWFsdGgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKRFVDS1BSRUZJWAUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQNuaWwFDXByb2xvZ0FjdGlvbnMBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFDWNsYWltTW9kZUR1Y2sFDmxhbmRBc3NldElkU3RyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDOCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUNcHJvbG9nQWN0aW9ucwkAkQMCCAUGcmVzdWx0Al81BQh3aElkeFJlcwFpAQZmbGlnaHQCB21lc3NhZ2UDc2lnBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAVuZXdIUAgFAWYCXzEEC2R1Y2tBc3NldElkCAUBZgJfMgQGbG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAtuZXdMb2NhdGlvbggFAWYCXzQDCQAAAgULbmV3TG9jYXRpb24FC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQGbmV3TG9jCQC1CQIFC25ld0xvY2F0aW9uAgFfBAZpc1RvdXIJAAACCQCRAwIFBm5ld0xvYwUKbG9jSWR4VHlwZQIBVAQHaXNEZWxpdgkAAAIJAJEDAgUGbmV3TG9jBQpsb2NJZHhUeXBlAgFEBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNjYwMzU2NjEzMgkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA2NjAzNTY2MTMyAl8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA2NjAzNTY2MTMyAl8yBA0kdDA2NjEzNTY3OTY3AwkBASEBCQEJb25NaXNzaW9uAgUSdG91cm5hbWVudENvbnRyYWN0BQtjdXJMb2NhdGlvbgMFBmlzVG91cgkBDGNoZWF0QXR0ZW1wdAMFC2N1ckxvY2F0aW9uBQtuZXdMb2NhdGlvbgAFAwkBASEBBQdpc0RlbGl2AwkAZgIFBW5ld0hQAAAJAJQKAgULbmV3TG9jYXRpb24FBW5ld0hQCQCUCgIFC2N1ckxvY2F0aW9uAAADCQBmAgUFbmV3SFAAAAQBcwkA/AcEBQR0aGlzAg9wcm9jZXNzRGVsaXZlcnkJAMwIAgULZHVja0Fzc2V0SWQFA25pbAUDbmlsAwkAAAIFAXMFAXMJAJQKAgULY3VyTG9jYXRpb24FBW5ld0hQCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFC2N1ckxvY2F0aW9uAAADCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC2N1ckxvY2F0aW9uAwkBASEBCQEOaXNJblRvdXJuYW1lbnQCBRJ0b3VybmFtZW50Q29udHJhY3QFC25ld0xvY2F0aW9uCQACAQIqWW91ciBkdWNrIGlzIHRha2luZyBwYXJ0IGluIHRoZSB0b3VybmFtZW50BAVzY29yZQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBm5ld0xvYwUIbG9jSWR4SWQEBmN1ckxvYwkAtQkCBQtjdXJMb2NhdGlvbgIBXwQGbGFzdElkCQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAUNbGFzdFRvdXJJZEtleQAAAwkBAiE9AgUFc2NvcmUJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGY3VyTG9jBQhsb2NJZHhJZAABCQEMY2hlYXRBdHRlbXB0AwULY3VyTG9jYXRpb24FC25ld0xvY2F0aW9uAAcDCQBmAgUFbmV3SFAAAAQJbG9jYWxCZXN0CQELdmFsdWVPckVsc2UCCQCaCAIFEnRvdXJuYW1lbnRDb250cmFjdAkBGmtleUJlc3RSZXN1bHRCeVRvdXJBbmREdWNrAgUGbGFzdElkBQtkdWNrQXNzZXRJZAAABAh1cGRMb2NhbAMJAGYCBQVzY29yZQUJbG9jYWxCZXN0CQD8BwQFEnRvdXJuYW1lbnRDb250cmFjdAIOc2F2ZUR1Y2tSZXN1bHQJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUFc2NvcmUFA25pbAUDbmlsBQR1bml0AwkAAAIFCHVwZExvY2FsBQh1cGRMb2NhbAkAlAoCBQtuZXdMb2NhdGlvbgUFbmV3SFAJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAJQKAgULY3VyTG9jYXRpb24AAAkAAgEJAKwCAgIUVW5rbm93biBjdXJMb2NhdGlvbjoFC2N1ckxvY2F0aW9uBAlsb2NUb1NhdmUIBQ0kdDA2NjEzNTY3OTY3Al8xBAhocFRvU2F2ZQgFDSR0MDY2MTM1Njc5NjcCXzIJAJQKAgkAzggCCQDOCAIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkFCWxvY1RvU2F2ZQkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQFCGhwVG9TYXZlBQNuaWwFDXByb2xvZ0FjdGlvbnMDBQ9zaG91bGRaZXJvQnVmZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDGtleUR1Y2tCdWZmcwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzAFA25pbAUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAgUFbmV3SFAAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIUaGVhbF9jaGVja1RvdXJuYW1lbnQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjBnJlY2lwZQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgUGcmVjaXBlAgFfBQpySWR4RWZmZWN0BQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIWaGVhbEVTX2NoZWNrVG91cm5hbWVudAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAvAkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBQpySWR4RWZmZWN0BAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDNCAIFDXByb2xvZ0FjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEPY29tbWl0Rm9yUmFuZG9tAAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEC2ZpbmlzaEJsb2NrCQBkAgUGaGVpZ2h0BQtyYW5kb21EZWxheQQEYWRkcgkApQgBCAUBaQZjYWxsZXIJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEJa2V5Q29tbWl0AQUEYWRkcgULZmluaXNoQmxvY2sFA25pbAUNcHJvbG9nQWN0aW9ucwULZmluaXNoQmxvY2sBaQEMcmV2ZWFsUmFuZG9tAQhtYXhWYWx1ZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAlmaW5pc2hLZXkJAQlrZXlDb21taXQBBQRhZGRyBAtmaW5pc2hCbG9jawkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCfCAEFCWZpbmlzaEtleQIkWW91IGhhdmUgdG8gY29tbWl0Rm9yUmFuZG9tKCkgZmlyc3QhAwkAZgIFC2ZpbmlzaEJsb2NrBQZoZWlnaHQJAAIBCQCsAgICNFJhbmRvbSBudW1iZXIgaXMgbm90IHJlYWR5IHlldCwgd2FpdCB1bnRpbCBoZWlnaHQgPSAJAKQDAQULZmluaXNoQmxvY2sEB2VudHJvcHkJAQV2YWx1ZQEICQEFdmFsdWUBCQDtBwEFC2ZpbmlzaEJsb2NrA3ZyZgQEc2FsdAkAmwMBCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlMYXN0VHhJZEJ5VXNlcgEFBGFkZHICAAQEcmFuZAkBD2dldFJhbmRvbU51bWJlcgMFCG1heFZhbHVlBQRzYWx0BQdlbnRyb3B5CQCUCgIJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBBQlmaW5pc2hLZXkFA25pbAUNcHJvbG9nQWN0aW9ucwUEcmFuZAFpAQhidXlTTGFuZAAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAQLYWNyZXNSZXN1bHQJAQVhc0ludAEJAPwHBAUNYWNyZXNDb250cmFjdAIJYnVybkFjcmVzCQDMCAIFDFNfQ09TVF9BQ1JFUwUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQ1wcm9sb2dBY3Rpb25zCQCUCgIICAUGcmVzdWx0Al8yAl8xBQthY3Jlc1Jlc3VsdAFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQJY3VycmVudEVxCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAQNJHQwNzU4ODc3NTk4NAkBEXN1YnRyYWN0RXF1aXBtZW50AgUJY3VycmVudEVxCAUBZgJfNQQFbmV3RXEIBQ0kdDA3NTg4Nzc1OTg0Al8xBA9zaG91bGRaZXJvQnVmZnMIBQ0kdDA3NTg4Nzc1OTg0Al8yBAFlCQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAJpZAgIBQFlAl8yAl8xBAZyZXN1bHQDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEFA25pbAIAAAAJAJUKAwkAzggCCAUBZQJfMQMFD3Nob3VsZFplcm9CdWZmcwkAzAgCCQELU3RyaW5nRW50cnkCCQEMa2V5RHVja0J1ZmZzAQULZHVja0Fzc2V0SWQCCTBfMF8wXzBfMAUDbmlsCQDNCAIJAM0IAgkAzQgCCQDNCAIFA25pbAkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAggIBQFlAl8yAl8yCQDMCAICAUwJAMwIAgUCaWQFA25pbAIBXwkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAgFAWYCXzEJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgUCaWQIBQFmAl8zAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIaZXhwZWRpdGlvbl9jaGVja1RvdXJuYW1lbnQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJUKAwgFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwULYWNyZXNSZXN1bHQBaQEQYnV5U0xhbmRGb3JBY3JlcwAEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQxhY3Jlc0Fzc2V0SWQJAAIBAhRBQ1JFUyBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUMU19DT1NUX0FDUkVTCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUMU19DT1NUX0FDUkVTBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEC2FjcmVzUmVzdWx0CQEFYXNJbnQBCQD8BwQFDWFjcmVzQ29udHJhY3QCCWJ1cm5BY3JlcwkAzAgCBQxTX0NPU1RfQUNSRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUMYWNyZXNBc3NldElkBQNhbXQFA25pbAkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDXByb2xvZ0FjdGlvbnMJAJQKAggIBQZyZXN1bHQCXzICXzEFC2FjcmVzUmVzdWx0AWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzggCCAUGcmVzdWx0Al8xBQ1wcm9sb2dBY3Rpb25zCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDOCAIFBnJlc3VsdAUNcHJvbG9nQWN0aW9ucwFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uAgkApQgBCAUBaQZjYWxsZXIFDGxhbmRBc3NldElkcwkAlAoCCQDOCAIJAM4IAggFBnJlc3VsdAJfMQUNcHJvbG9nQWN0aW9ucwgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToFA25pbAUNcHJvbG9nQWN0aW9ucwFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8DCQBmAgAABQVsb2Z0RgkAAgECME9wZXJhdGlvbiBsZWFkcyB0byBuZWdhdGl2ZSBmcmVlIHdhcmVob3VzZSBzcGFjZQQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQxSRU5BTUlOR0NPU1QJAAIBCQCsAgICElBheW1lbnQgc2hvdWxkIGJlIAkApAMBBQxSRU5BTUlOR0NPU1QDCQEIY29udGFpbnMCBQpjdXN0b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzggCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQ1wcm9sb2dBY3Rpb25zAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyBApuZXdiaWVBZGRyCQCmCAEFCW5ld1BsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEFCm5ld2JpZUFkZHIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIECW9sZExhc3RUeAkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBBQlvbGRMYXN0VHgJAAIBAiJvbGRQbGF5ZXIgZGlkbid0IGRvIGFueSB0eCBpbiBnYW1lAwkAZwIAAAgJAO8HAQkBBXZhbHVlAQUKbmV3YmllQWRkcglhdmFpbGFibGUJAAIBAhZuZXdQbGF5ZXIgaGFzIG5vIFdBVkVTBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAt2aXJ0V2xnRGF0YQkBCWFzQW55TGlzdAEJAPwHBAULd2xnQ29udHJhY3QCEmNoZWNrV2xnWHBSRUFET05MWQkAzAgCBQRhZGRyBQNuaWwFA25pbAQNdmlydFdsZ1BvaW50cwkBBWFzSW50AQkAkQMCBQt2aXJ0V2xnRGF0YQABBA0kdDA5MTc5NjkyMTg2AwkAZwIAAAUNdmlydFdsZ1BvaW50cwkAlAoCAAAFA25pbAQHZGVsdGFYUAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAIJdGFrZVdsZ1hwCQDMCAIFBGFkZHIFA25pbAUDbmlsAwkAAAIFB2RlbHRhWFAFB2RlbHRhWFAJAJQKAgUNdmlydFdsZ1BvaW50cwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVVzZXJMZXZlbAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBCWtleVVzZXJYUAEFBGFkZHIJAQVhc0ludAEJAJEDAgULdmlydFdsZ0RhdGEAAgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBAl3bGdQb2ludHMIBQ0kdDA5MTc5NjkyMTg2Al8xBAp3bGdBY3Rpb25zCAUNJHQwOTE3OTY5MjE4NgJfMgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQpmcmVlS2V5QWNjAAAFCXdsZ1BvaW50cwQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAnwgBBQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwUKd2xnQWN0aW9ucwAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwkBASEBCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQt3bGdDb250cmFjdAkAzAgCBQ9lY29ub215Q29udHJhY3QJAMwIAgUSdG91cm5hbWVudENvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQEGcHJvbG9nAQUBaQAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQEhAQkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgULd2xnQ29udHJhY3QJAMwIAgUPZWNvbm9teUNvbnRyYWN0CQDMCAIFDWFjcmVzQ29udHJhY3QFA25pbAgFAWkGY2FsbGVyCQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIZZXF1aXBEdWNrX2NoZWNrVG91cm5hbWVudAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAl0ZW1wUHJvZEIJAQZkcmVzc0IEBQtjdXJyZW50U2VncwkBDnByb2RTdHJUb0J5dGVzAQkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBgUDbmlsBAhzZWdCcEF1eAkAkQMCCQC1CQIJAJEDAgUFbmV3RXEFC3NlZ0JhY2twYWNrAgE7AAEECmJ1ZmZFZmZlY3QDCQAAAgUIc2VnQnBBdXgCAAAABARhdXgwCQCRAwIJALUJAgUIc2VnQnBBdXgCASwAAAMJAAACBQRhdXgwAgAAAAQGaWR4Q250CQC1CQIFBGF1eDACAToEA2lkeAkAkQMCBQZpZHhDbnQAAAQDY250CQCRAwIFBmlkeENudAABAwMDAwMJAAACBQNpZHgCAjA2BgkAAAIFA2lkeAICMDcGCQAAAgUDaWR4AgIwOAkBAiE9AgUDY250AgAHCQBmAgkBDXBhcnNlSW50VmFsdWUBBQNjbnQAAAcJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAkBDXBhcnNlSW50VmFsdWUBBQNpZHgCAV8FCnJJZHhFZmZlY3QAAAQFc3RhdHMJAQxnZXREdWNrU3RhdHMEBQR0aGlzBQtkdWNrQXNzZXRJZAUKYnVmZkVmZmVjdAYECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBXN0YXRzBApuZXdQcm9kU3RyCQEOYnl0ZXNUb1Byb2RTdHIBBQhuZXdQcm9kQgkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlEdWNrQnVmZnMBBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAHCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAICQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAJCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwAKCQDMCAIJAKQDAQkAkQMCBQVzdGF0cwALBQNuaWwCAV8FA25pbAUNcHJvbG9nQWN0aW9ucwAAAWkBD2ZvcnRpZmljYXRlTGFuZAILbGFuZEFzc2V0SWQEcGxhbgQNcHJvbG9nQWN0aW9ucwkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQJZHVja1N0YXRzCQEMZ2V0RHVja1N0YXRzBAUEdGhpcwULZHVja0Fzc2V0SWQAAAcEB2ZvcnRLZXkJARdrZXlGb3J0aWZpY2F0aW9uc0J5TGFuZAEFC2xhbmRBc3NldElkBAxjdXJyZW50Rm9ydHMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQdmb3J0S2V5Agw6MF8xNTowXzE4OjACAV8EBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEB2N1ckxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBARjdXJPCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHY3VyTG9mdAULdm9sT2NjdXBpZWQEBGN1ckYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdjdXJMb2Z0BQd2b2xGcmVlBAhuZXdGb3J0cwkAtQkCBQRwbGFuAgFfBA0kdDA5ODk0Nzk5MDYyCQEFZm9ydEIGBQxjdXJyZW50Rm9ydHMJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgUCd2gFCXdoSWR4UHJvZAUEY3VyTwUEY3VyRgYFA25pbAQJdGVtcFByb2RCCAUNJHQwOTg5NDc5OTA2MgJfMQQFdGVtcE8IBQ0kdDA5ODk0Nzk5MDYyAl8yBAV0ZW1wRggFDSR0MDk4OTQ3OTkwNjICXzMEDSR0MDk5MDY1OTkxNjEJAQVmb3J0QgYFCG5ld0ZvcnRzBQl0ZW1wUHJvZEIFBXRlbXBPBQV0ZW1wRgcFCWR1Y2tTdGF0cwQIbmV3UHJvZEIIBQ0kdDA5OTA2NTk5MTYxAl8xBARuZXdPCAUNJHQwOTkwNjU5OTE2MQJfMgQEbmV3RggFDSR0MDk5MDY1OTkxNjECXzMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCBApuZXdMb2Z0U3RyCQC5CQIJAMwIAgkAkQMCBQdjdXJMb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQRuZXdPCQDMCAIJAKQDAQUEbmV3RgkAzAgCCQCRAwIFB2N1ckxvZnQFCHZvbFRvdGFsBQNuaWwCAV8JAJQKAgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFB2ZvcnRLZXkFBHBsYW4JAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCBQpuZXdQcm9kU3RyCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsBQ1wcm9sb2dBY3Rpb25zAAABaQETaW5pdER1Y2tUb3VyQXR0ZW1wdAELZHVja0Fzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFEnRvdXJuYW1lbnRDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OBAZsYXN0SWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUSdG91cm5hbWVudENvbnRyYWN0BQ1sYXN0VG91cklkS2V5AAAEDHRvdXJMb2NhdGlvbgkArAICCQCkAwEFBmxhc3RJZAIEX1RfMAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAUJY3VySGVhbHRoCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFBW1heEhQCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlTYXZlZExvY2F0aW9uAQULZHVja0Fzc2V0SWQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUMdG91ckxvY2F0aW9uBQNuaWwFDHRvdXJMb2NhdGlvbgFpAQxicmVha0F0dGVtcHQABA1wcm9sb2dBY3Rpb25zCQEGcHJvbG9nAQUBaQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJY3VyTG9jS2V5CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1ckxvY0tleQUPREVGQVVMVExPQ0FUSU9OAwkBAiE9AgkAkQMCCQC1CQIFC2N1ckxvY2F0aW9uAgFfBQpsb2NJZHhUeXBlAgFUCQACAQIiWW91ciBkdWNrIGlzIG5vdCBpbiB0aGUgdG91cm5hbWVudAQLc2F2ZWRIZWFsdGgJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkBA1zYXZlZExvY2F0aW9uCQERQGV4dHJOYXRpdmUoMTA1OCkBCQEQa2V5U2F2ZWRMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQCUCgIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAULc2F2ZWRIZWFsdGgJAQtTdHJpbmdFbnRyeQIFCWN1ckxvY0tleQUNc2F2ZWRMb2NhdGlvbgULY3VyTG9jYXRpb24BaQEUYnJlYWtBdHRlbXB0Q2FsbGJhY2sAAwkBAiE9AggFAWkGY2FsbGVyBRJ0b3VybmFtZW50Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQJARFAZXh0ck5hdGl2ZSgxMDU1KQEJAQ5rZXlTYXZlZEhlYWx0aAEFC2R1Y2tBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUDbmlsAhRicmVha0F0dGVtcHRDYWxsYmFjawFpARZleGl0VG91cm5hbWVudEludGVybmFsAQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEC3NhdmVkSGVhbHRoCQERQGV4dHJOYXRpdmUoMTA1NSkBCQEOa2V5U2F2ZWRIZWFsdGgBBQtkdWNrQXNzZXRJZAQNc2F2ZWRMb2NhdGlvbgkBEUBleHRyTmF0aXZlKDEwNTgpAQkBEGtleVNhdmVkTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBQtzYXZlZEhlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFDXNhdmVkTG9jYXRpb24FA25pbAcBaQEPcHJvY2Vzc0RlbGl2ZXJ5AQtkdWNrQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPZWNvbm9teUNvbnRyYWN0BQ9kZWxpdmVyeUZ1bmRLZXkAAAMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFCWZ1bmRUb3RhbAkAAgEJAKwCAgIgRGVsaXZlcnkgaXMgbm90IGF2YWlsYWJsZSwgZnVuZD0JAQpmaXhlZFBvaW50AgUJZnVuZFRvdGFsAAYEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECGNvdW50S2V5CQEUa2V5VXNlckRlbGl2ZXJ5Q291bnQBBQRhZGRyBAVjb3VudAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhjb3VudEtleQAABAdsYXN0RGF5CQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlVc2VyTGFzdERlbGl2ZXJ5RGF5AQUEYWRkcgAABAV0b2RheQkAaQIFA25vdwUJREFZTUlMTElTBAVhY3JlcwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ1hY3Jlc0NvbnRyYWN0CQEaa2V5QWNyZXNTdGFrZWRBbW91bnRCeVVzZXIBBQRhZGRyAAAEEWFsbG93ZWREZWxpdmVyaWVzCQBkAgUXQUxMT1dFRF9GUkVFX0RFTElWRVJJRVMJAGkCBQVhY3JlcwUaQUNSRVNfRk9SX0RFTElWRVJZX0FUVEVNUFQDAwkAZwIFBWNvdW50BRFhbGxvd2VkRGVsaXZlcmllcwkAAAIFB2xhc3REYXkFBXRvZGF5BwkAAgEJAKwCAgkArAICAhFZb3UgYWxyZWFkeSB1c2VkIAkApAMBBRFhbGxvd2VkRGVsaXZlcmllcwIcIGRlbGl2ZXJ5IGF0dGVtcHRzIGZvciB0b2RheQQOZ2xvYmFsQ291bnRLZXkJARRrZXlEdWNrRGVsaXZlcnlDb3VudAEFC2R1Y2tBc3NldElkBAZyZXdhcmQJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhJzZW5kRGVsaXZlcnlSZXdhcmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIY291bnRLZXkJAGQCBQVjb3VudAABCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5VXNlckxhc3REZWxpdmVyeURheQEFBGFkZHIFBXRvZGF5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ5nbG9iYWxDb3VudEtleQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUOZ2xvYmFsQ291bnRLZXkAAAABBQNuaWwFBnJld2FyZAFpAQ5wcmVwYXJlUm9iYmVyeQIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEBndsZ0FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQp3bGdBc3NldElkCQACAQIVV0xHT0xEIHBheW1lbnRzIG9ubHkhBAVwYXJ0cwkAtQkCCQCwCQEFB21lc3NhZ2UCAXwDCQBmAgACCQCQAwEFBXBhcnRzCQACAQIUV3JvbmcgbWVzc2FnZSBmb3JtYXQECXR4RnJvbU1zZwMJAGcCCQCQAwEFBXBhcnRzAAIJAJEDAgUFcGFydHMAAgIABAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkAkQMCBQVwYXJ0cwAAAwkBD2NoZWNrVG91cm5hbWVudAEFC2R1Y2tBc3NldElkCQACAQIecHJlcGFyZVJvYmJlcnlfY2hlY2tUb3VybmFtZW50BAdyb2JDb3N0CAkBDmdldFJvYmJlcnlEYXRhAgUEdGhpcwULZHVja0Fzc2V0SWQCXzEDCQBmAgUHcm9iQ29zdAUGd2xnQW10CQACAQkArAICCQCsAgIJAKwCAgIIUGF5bWVudCAJAKQDAQUGd2xnQW10AgwgPCByZXF1aXJlZCAJAKQDAQUHcm9iQ29zdAQKY2FuZGlkYXRlcwkAtQkCCQCRAwIFBXBhcnRzAAECAV8EA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAECWR1Y2tTdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5RHVja1JvYmJlcnlTdGF0ZQEFC2R1Y2tBc3NldElkAAAECmxvY2tlZExhbmQJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAIABAdsYW5kRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQpsb2NrZWRMYW5kAAADAwkBAiE9AgUJZHVja1N0YXRlBQtkdWNrSWR4RnJlZQkAZgIFB2xhbmRFVEEFA25vdwcJAAIBCQCsAgICJ1lvdSBhbHJlYWR5IHN0YXJ0ZWQgcm9iYmluZywgd2FpdCB0aWxsIAkApAMBBQdsYW5kRVRBCgEHY2hlY2tlcgIDYWNjC2xhbmRBc3NldElkBAVzdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkAAAEC2Nvb2xkb3duRVRBCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAAAAwkAZgIFBXN0YXRlCQCQAwEFEGxhbmRSb2JDb29sZG93bnMJAAIBAg1JbnZhbGlkIHN0YXRlAwkAZgIFA25vdwULY29vbGRvd25FVEEECnN0YWtlZFRpbWUJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAAAwkAZwIAAAUKc3Rha2VkVGltZQUDYWNjBAFhCQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEAWQJALUJAggFAWELZGVzY3JpcHRpb24CAV8EBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgUBZAULcmVjTGFuZFNpemUEDHByb2R1Y3Rpdml0eQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWRlbHRhVGltZQkAZQIFA25vdwUKc3Rha2VkVGltZQQIYXZhaWxSZXMJAGsDBQlkZWx0YVRpbWUJAGgCBQxwcm9kdWN0aXZpdHkFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFDk1JTl9SRVNfVE9fUk9CBQhhdmFpbFJlcwUDYWNjCQDNCAIFA2FjYwULbGFuZEFzc2V0SWQFA2FjYwQIZmlsdGVyZWQKAAIkbAUKY2FuZGlkYXRlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHY2hlY2tlcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgMJAAACCQCQAwEFCGZpbHRlcmVkAAAJAAIBAhlObyBjYW5kaWRhdGVzIGZvciByb2JiZXJ5BAZybmRJZHgJAQ9nZXRSYW5kb21OdW1iZXIDCQCQAwEFCGZpbHRlcmVkBQdtZXNzYWdlBQNzaWcEC2xhbmRBc3NldElkCQCRAwIFCGZpbHRlcmVkBQZybmRJZHgJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQETa2V5TGFuZFJvYmJlcnlTdGF0ZQEFC2xhbmRBc3NldElkBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARJrZXlMYW5kQ29vbGRvd25FVEEBBQtsYW5kQXNzZXRJZAkAZAIFA25vdwkAkQMCBRBsYW5kUm9iQ29vbGRvd25zBQxyb2JJZHhMb2NrZWQJAMwIAgkBDEludGVnZXJFbnRyeQIJARNrZXlEdWNrUm9iYmVyeVN0YXRlAQULZHVja0Fzc2V0SWQFEGR1Y2tJZHhQcmVwYXJpbmcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBE2tleUxvY2tlZExhbmRCeUR1Y2sBBQtkdWNrQXNzZXRJZAULbGFuZEFzc2V0SWQFA25pbAUNcHJvbG9nQWN0aW9ucwULbGFuZEFzc2V0SWQBaQEHcm9iTGFuZAIHbWVzc2FnZQNzaWcEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBASEBCQDEEwMFB21lc3NhZ2UFA3NpZwUDcHViCQACAQIYc2lnbmF0dXJlIGRvZXMgbm90IG1hdGNoBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUIdXNlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAJQKAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBGGtleUxhc3RSb2JiZXJ5VGltZUJ5RHVjawEFC2R1Y2tBc3NldElkBQNub3cAAAFpAQtidXlSb2JvRHVjawADCQEBIQEFE0tTX0FMTE9XX1JPQk9fRFVDS1MJAAIBAhVGZWF0dXJlIGlzIHR1cm5lZCBvZmYEDXByb2xvZ0FjdGlvbnMJAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUOUk9CT19EVUNLX1VTRFQJAAIBCQCsAgIJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQEKZml4ZWRQb2ludAIFDlJPQk9fRFVDS19VU0RUAAYCBSBVU0RUBAduZXh0TnVtCQELdmFsdWVPckVsc2UCCQCfCAEJAQ9rZXlOZXh0Um9ib0R1Y2sAAAAEBWJ5dGV6CQCaAwEFB25leHROdW0EBG5hbWUJAKwCAgkArAICBQtST0JPX1BSRUZJWAIBLQkAsgICCQDcBAEFBWJ5dGV6AAgEBWNvbG9yCQCyAgIJANwEAQkA1BYBBQVieXRlegAGBAVpc3N1ZQkAwggFBQRuYW1lCQCsAgICN1JvYm8gRHVjayBORlQgZm9yIFdhdmVzTGFuZHMgZ2FtZSwgYmFja2dyb3VuZCBjb2xvciA9ICMFBWNvbG9yAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUJAJQKAgkAzQgCCQDNCAIJAM0IAgkAzQgCBQ1wcm9sb2dBY3Rpb25zCQEMSW50ZWdlckVudHJ5AgkBD2tleU5leHRSb2JvRHVjawAJAGQCBQduZXh0TnVtAAEFBWlzc3VlCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQxvcmlnaW5DYWxsZXIAAQUHYXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQJAJQKAgkA2AQBBQdhc3NldElkBQVjb2xvcgDtH6h1", "height": 2856531, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: AvcsySzhYmHuF2C9zKs3pA79hSTp6TY4GpQPiGXMvuSb Next: 84hSJSUsFz5TzRshvvc4PKzqAEdMikmAA7cXovQQBH7i Diff:
OldNewDifferences
107107 func T (B) = ("lockedLandByDuck_" + B)
108108
109109
110-func U (c) = ("userDeliveryCount_" + c)
111-
112-
113-func V (c) = ("userLastDeliveryDay_" + c)
114-
115-
116-let W = 10000
110+func U (B) = ("totalDeliveryCountByDuck_" + B)
111+
112+
113+func V (c) = ("userDeliveryCount_" + c)
114+
115+
116+func W (c) = ("userLastDeliveryDay_" + c)
117+
117118
118119 let X = 10000
119120
120-let Y = 2000
121-
122-let Z = 100000
123-
124-let aa = 1000000
125-
126-let ab = 5000000
127-
128-let ac = 10000
129-
130-let ad = 1000000
121+let Y = 10000
122+
123+let Z = 2000
124+
125+let aa = 100000
126+
127+let ab = 1000000
128+
129+let ac = 5000000
130+
131+let ad = 10000
131132
132133 let ae = 1000000
133134
134-let af = 10000
135-
136-func ag (ah) = fraction(f, pow(ah, 4, g, 4, 4, DOWN), e)
137-
138-
139-func ai (aj) = (100 + aj)
140-
141-
142-func ak (al,am) = {
143- let an = ag(am)
144-[an, (h * (an - al))]
145- }
146-
147-
148-func ao (ap,B,aq,ar) = {
149- let as = split(valueOrElse(getString(ap, C(B)), "0_0_0_0_0"), "_")
150- let at = valueOrElse(getInteger(ap, E(B)), 0)
151- let au = valueOrElse(getInteger(ap, A(B)), ai(at))
152- let av = split(valueOrElse(getString(ap, M(B)), "0_0_0_0_0"), "_")
153- ([parseIntValue(as[l]), parseIntValue(as[m]), parseIntValue(as[n]), parseIntValue(as[o]), parseIntValue(as[p]), at, au] ++ (if (ar)
154- then [aq, aq, aq, aq, aq]
155- else [parseIntValue(av[l]), parseIntValue(av[m]), parseIntValue(av[n]), parseIntValue(av[o]), parseIntValue(av[p])]))
156- }
157-
158-
159-func aw (ap,B) = {
160- let ax = valueOrElse(getInteger(ap, O(B)), 0)
161- let ay = valueOrElse(getInteger(ap, N(B)), 0)
162- let az = lastBlock.timestamp
163- let aA = max([i, (ax - (j * (az - ay)))])
164- let aB = valueOrElse(getInteger(ap, S(B)), 0)
165- let aC = valueOrElse(getString(ap, T(B)), "")
166- let aD = valueOrElse(getInteger(ap, R(aC)), 0)
167- $Tuple5(aA, ay, aB, aC, aD)
168- }
169-
170-
171-let aE = "LAND"
172-
173-let aF = "DUCK"
174-
175-let aG = "ROBO"
176-
177-let aH = "PRESALE"
178-
179-let aI = 6
180-
181-let aJ = 25
182-
183-let aK = 3456000
184-
185-let aL = 10000000000
186-
187-let aM = "Africa_F_Africa"
188-
189-let aN = 39637
190-
191-let aO = 10
192-
193-let aP = 50000
194-
195-let aQ = 1
196-
197-let aR = 50000000
198-
199-let aS = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
200-
201-let aT = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
202-
203-let aU = 10000000
204-
205-let aV = [15, 16, 17, 18, 19, 20, 21, 22, 23]
206-
207-let aW = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
208-
209-let aX = 6
210-
211-let aY = 8
212-
213-let aZ = 9
214-
215-let ba = 10
135+let af = 1000000
136+
137+let ag = 10000
138+
139+func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140+
141+
142+func aj (ak) = (100 + ak)
143+
144+
145+func al (am,an) = {
146+ let ao = ah(an)
147+[ao, (h * (ao - am))]
148+ }
149+
150+
151+func ap (aq,B,ar,as) = {
152+ let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153+ let au = valueOrElse(getInteger(aq, E(B)), 0)
154+ let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155+ let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156+ ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157+ then [ar, ar, ar, ar, ar]
158+ else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159+ }
160+
161+
162+func ax (aq,B) = {
163+ let ay = valueOrElse(getInteger(aq, O(B)), 0)
164+ let az = valueOrElse(getInteger(aq, N(B)), 0)
165+ let aA = lastBlock.timestamp
166+ let aB = max([i, (ay - (j * (aA - az)))])
167+ let aC = valueOrElse(getInteger(aq, S(B)), 0)
168+ let aD = valueOrElse(getString(aq, T(B)), "")
169+ let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170+ $Tuple5(aB, az, aC, aD, aE)
171+ }
172+
173+
174+let aF = "LAND"
175+
176+let aG = "DUCK"
177+
178+let aH = "ROBO"
179+
180+let aI = "PRESALE"
181+
182+let aJ = 6
183+
184+let aK = 25
185+
186+let aL = 3456000
187+
188+let aM = 10000000000
189+
190+let aN = "Africa_F_Africa"
191+
192+let aO = 39637
193+
194+let aP = 10
195+
196+let aQ = 50000
197+
198+let aR = 1
199+
200+let aS = 50000000
201+
202+let aT = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
203+
204+let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205+
206+let aV = 10000000
207+
208+let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23]
209+
210+let aX = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
211+
212+let aY = 6
213+
214+let aZ = 8
215+
216+let ba = 9
216217
217218 let bb = 10
218219
219-let bc = 0
220-
221-let bd = 1
222-
223-let be = 2
224-
225-let bf = 3
226-
227-let bg = 4
228-
229-let bh = 0
230-
231-let bi = 1
232-
233-let bj = 2
234-
235-let bk = 3
236-
237-let bl = 0
238-
239-let bm = 1
240-
241-let bn = 2
242-
243-let bo = 3
244-
245-let bp = 0
246-
247-let bq = 1
248-
249-let br = 2
250-
251-func bs (bt) = ("no_" + bt)
252-
253-
254-func bu (bt) = ("lcna_" + bt)
255-
256-
257-func bv (bt) = ("st_" + bt)
258-
259-
260-func bw (bx,bt) = makeString(["las", bx, bt], "_")
261-
262-
263-func by (bz,bt,bA) = ((((("sttao_" + bz) + "_") + bt) + "_") + bA)
264-
265-
266-func bB (Q) = ("wh_" + Q)
267-
268-
269-func bC (bt) = ("infraLevel_" + bt)
270-
271-
272-func bD (Q) = ("fortifications_" + Q)
273-
274-
275-func bE (bt) = ("duckCustomNameByAssetId_" + bt)
276-
277-
278-func bF (c) = ("accountCustomNameByAddr_" + c)
279-
280-
281-func bG (c) = ("accRefBy_" + c)
282-
283-
284-func bH (B) = ("onboardArtActivatedOnDuck_" + B)
285-
286-
287-func bI (c) = ("onboardArtActivatedDuckBy_" + c)
288-
289-
290-func bJ (c) = ("accReferrals_" + c)
291-
292-
293-func bK (bt) = ("duckOwner_" + bt)
294-
295-
296-func bL (bA) = ("stakedDuckByOwner_" + bA)
297-
298-
299-func bM (B) = ("backPack_" + B)
300-
301-
302-func bN (B) = ("duckLocation_" + B)
303-
304-
305-func bO (bP) = ("%s%s__userGwlReleaseTime__" + bP)
306-
307-
308-func bQ () = "emergencyWarehouseProducts"
309-
310-
311-let bR = "deliveryFund"
312-
313-let bS = "%s__lastTourId"
314-
315-func bT (bU) = ("%s%d__tourStaticData__" + toString(bU))
316-
317-
318-func bV (bU) = ("%s%d__tourDynamicData__" + toString(bU))
319-
320-
321-func bW (bU,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bU), B], "__")
322-
323-
324-let bX = 0
325-
326-let bY = 1
327-
328-let bZ = 6
329-
330-let ca = 1
331-
332-func cb (cc,bU) = {
333- let cd = split(valueOrErrorMessage(getString(cc, bT(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__")
334- let ce = split_4C(valueOrErrorMessage(getString(cc, bV(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__")
335-[cd, ce]
336- }
337-
338-
339-func cf (cc,cg) = {
340- let ch = valueOrElse(getInteger(cc, bS), 0)
341- let ci = split(cg, "_")
342- let az = lastBlock.timestamp
343- let cj = cb(cc, ch)
344- let cd = cj[bX]
345- let ce = cj[bY]
346- if (if (if ((ci[bq] == "T"))
347- then (parseIntValue(ci[bp]) == ch)
220+let bc = 10
221+
222+let bd = 0
223+
224+let be = 1
225+
226+let bf = 2
227+
228+let bg = 3
229+
230+let bh = 4
231+
232+let bi = 0
233+
234+let bj = 1
235+
236+let bk = 2
237+
238+let bl = 3
239+
240+let bm = 0
241+
242+let bn = 1
243+
244+let bo = 2
245+
246+let bp = 3
247+
248+let bq = 0
249+
250+let br = 1
251+
252+let bs = 2
253+
254+func bt (bu) = ("no_" + bu)
255+
256+
257+func bv (bu) = ("lcna_" + bu)
258+
259+
260+func bw (bu) = ("st_" + bu)
261+
262+
263+func bx (by,bu) = makeString(["las", by, bu], "_")
264+
265+
266+func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267+
268+
269+func bC (Q) = ("wh_" + Q)
270+
271+
272+func bD (bu) = ("infraLevel_" + bu)
273+
274+
275+func bE (Q) = ("fortifications_" + Q)
276+
277+
278+func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279+
280+
281+func bG (c) = ("accountCustomNameByAddr_" + c)
282+
283+
284+func bH (c) = ("accRefBy_" + c)
285+
286+
287+func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288+
289+
290+func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291+
292+
293+func bK (c) = ("accReferrals_" + c)
294+
295+
296+func bL (bu) = ("duckOwner_" + bu)
297+
298+
299+func bM (bB) = ("stakedDuckByOwner_" + bB)
300+
301+
302+func bN (B) = ("backPack_" + B)
303+
304+
305+func bO (B) = ("duckLocation_" + B)
306+
307+
308+func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309+
310+
311+func bR () = "emergencyWarehouseProducts"
312+
313+
314+let bS = "deliveryFund"
315+
316+let bT = "%s__lastTourId"
317+
318+func bU (bV) = ("%s%d__tourStaticData__" + toString(bV))
319+
320+
321+func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV))
322+
323+
324+func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__")
325+
326+
327+let bY = 0
328+
329+let bZ = 1
330+
331+let ca = 6
332+
333+let cb = 1
334+
335+func cc (cd,bV) = {
336+ let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
337+ let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
338+[ce, cf]
339+ }
340+
341+
342+func cg (cd,ch) = {
343+ let ci = valueOrElse(getInteger(cd, bT), 0)
344+ let cj = split(ch, "_")
345+ let aA = lastBlock.timestamp
346+ let ck = cc(cd, ci)
347+ let ce = ck[bY]
348+ let cf = ck[bZ]
349+ if (if (if ((cj[br] == "T"))
350+ then (parseIntValue(cj[bq]) == ci)
348351 else false)
349- then (ce[ca] == "INPROGRESS")
352+ then (cf[cb] == "INPROGRESS")
350353 else false)
351- then (parseIntValue(cd[bZ]) > az)
354+ then (parseIntValue(ce[ca]) > aA)
352355 else false
353356 }
354357
355358
356-func ck (cc,cg) = {
357- let ch = valueOrElse(getInteger(cc, bS), 0)
358- let ci = split(cg, "_")
359- let az = lastBlock.timestamp
360- let cj = cb(cc, ch)
361- let cd = cj[bX]
362- let ce = cj[bY]
363- let cl = ci[bq]
364- if (if (if ((ci[bq] == "T"))
365- then (parseIntValue(ci[bp]) == ch)
359+func cl (cd,ch) = {
360+ let ci = valueOrElse(getInteger(cd, bT), 0)
361+ let cj = split(ch, "_")
362+ let aA = lastBlock.timestamp
363+ let ck = cc(cd, ci)
364+ let ce = ck[bY]
365+ let cf = ck[bZ]
366+ let cm = cj[br]
367+ if (if (if ((cj[br] == "T"))
368+ then (parseIntValue(cj[bq]) == ci)
366369 else false)
367- then (ce[ca] == "INPROGRESS")
370+ then (cf[cb] == "INPROGRESS")
368371 else false)
369- then (parseIntValue(cd[bZ]) > az)
372+ then (parseIntValue(ce[ca]) > aA)
370373 else false
371374 }
372375
373376
374-func cm (cn) = (parseIntValue(cn[aX]) * aU)
375-
376-
377-func co (cp,cq,cr) = throw(((((("Cheat attempt: oldLoc=" + cp) + ", newLoc=") + cq) + ", case=") + toString(cr)))
378-
379-
380-let cs = false
377+func cn (co) = (parseIntValue(co[aY]) * aV)
378+
379+
380+func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs)))
381+
381382
382383 let ct = false
383384
384385 let cu = false
385386
386-let cv = 86400000
387-
388-let cw = take(drop(this.bytes, 1), 1)
389-
390-let cx = {
391- let cy = cw
392- if ((base58'2W' == cy))
393- then if (cs)
387+let cv = false
388+
389+let cw = 86400000
390+
391+let cx = take(drop(this.bytes, 1), 1)
392+
393+let cy = {
394+ let cz = cx
395+ if ((base58'2W' == cz))
396+ then if (ct)
394397 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
395398 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
396- else if ((base58'2T' == cy))
399+ else if ((base58'2T' == cz))
397400 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
398401 else throw("Unknown chain")
399402 }
400403
401-let cz = {
402- let cy = cw
403- if ((base58'2W' == cy))
404+let cA = {
405+ let cz = cx
406+ if ((base58'2W' == cz))
404407 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
405- else if ((base58'2T' == cy))
408+ else if ((base58'2T' == cz))
406409 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
407410 else throw("Unknown chain")
408411 }
409412
410-let cA = {
411- let cy = cw
412- if ((base58'2W' == cy))
413+let cB = {
414+ let cz = cx
415+ if ((base58'2W' == cz))
413416 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
414- else if ((base58'2T' == cy))
417+ else if ((base58'2T' == cz))
415418 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
416419 else throw("Unknown chain")
417420 }
418421
419-let cB = {
420- let cy = cw
421- if ((base58'2W' == cy))
422+let cC = {
423+ let cz = cx
424+ if ((base58'2W' == cz))
422425 then 10000000000
423- else if ((base58'2T' == cy))
426+ else if ((base58'2T' == cz))
424427 then 100000000
425428 else throw("Unknown chain")
426429 }
427430
428-let cC = {
429- let cy = cw
430- if ((base58'2W' == cy))
431- then cv
432- else if ((base58'2T' == cy))
431+let cD = {
432+ let cz = cx
433+ if ((base58'2W' == cz))
434+ then cw
435+ else if ((base58'2T' == cz))
433436 then 60000
434437 else throw("Unknown chain")
435438 }
436439
437-let cD = "__"
438-
439-let cE = 1000000
440-
441-let cF = 100000000
442-
443-let cG = 25
444-
445-let cH = 100
446-
447-let cI = 225
448-
449-let cJ = 400
450-
451-let cK = 625
452-
453-let cL = [0, 1, 2, 3, 4, 5]
454-
455-func cM (cN,cO) = valueOrErrorMessage(getString(cN, cO), makeString(["mandatory ", toString(cN), ".", cO, " is not defined"], ""))
456-
457-
458-let cP = 1
459-
460-let cQ = 2
461-
462-let cR = 3
463-
464-let cS = 4
465-
466-let cT = 7
467-
468-let cU = 8
469-
470-func cV () = "%s__restConfig"
471-
472-
473-func cW () = "%s__restAddr"
474-
475-
476-func cX (cY) = split_4C(cM(cY, cV()), cD)
477-
478-
479-func cZ (da,db) = valueOrErrorMessage(addressFromString(da[db]), ("Rest cfg doesn't contain address at index " + toString(db)))
480-
481-
482-let dc = addressFromStringValue(valueOrElse(getString(this, cW()), cA))
483-
484-let da = cX(dc)
485-
486-let ap = cZ(da, cP)
487-
488-let dd = cZ(da, cQ)
489-
490-let de = cZ(da, cR)
491-
492-let df = cZ(da, cS)
493-
494-let dg = cZ(da, cT)
495-
496-let dh = cZ(da, cU)
497-
498-let di = 0
499-
500-let dj = 1
501-
502-let dk = 2
503-
504-let dl = 3
505-
506-let dm = "wlg_assetId"
507-
508-let dn = valueOrErrorMessage(getBinary(df, dm), "WLGOLD is not issued yet")
509-
510-let do = "acresAssetId"
511-
512-let dp = valueOrErrorMessage(getBinary(dh, do), "ACRES is not issued yet")
513-
514-let dq = 2
515-
516-func dr (cN) = ("finishBlockForAddr_" + cN)
517-
518-
519-func ds () = "resTypesProportions"
520-
521-
522-func dt (du) = ("resTypesByContinent_" + du)
523-
524-
525-func dv (bA) = ("stakedLandsByOwner_" + bA)
526-
527-
528-func dw (bA) = ("stakedPiecesByOwner_" + bA)
529-
530-
531-func dx (dy) = {
532- let cy = dy
533- if ($isInstanceOf(cy, "String"))
440+let cE = "__"
441+
442+let cF = 1000000
443+
444+let cG = 100000000
445+
446+let cH = 25
447+
448+let cI = 100
449+
450+let cJ = 225
451+
452+let cK = 400
453+
454+let cL = 625
455+
456+let cM = [0, 1, 2, 3, 4, 5]
457+
458+func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], ""))
459+
460+
461+let cQ = 1
462+
463+let cR = 2
464+
465+let cS = 3
466+
467+let cT = 4
468+
469+let cU = 7
470+
471+let cV = 8
472+
473+func cW () = "%s__restConfig"
474+
475+
476+func cX () = "%s__restAddr"
477+
478+
479+func cY (cZ) = split_4C(cN(cZ, cW()), cE)
480+
481+
482+func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc)))
483+
484+
485+let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB))
486+
487+let db = cY(dd)
488+
489+let aq = da(db, cQ)
490+
491+let de = da(db, cR)
492+
493+let df = da(db, cS)
494+
495+let dg = da(db, cT)
496+
497+let dh = da(db, cU)
498+
499+let di = da(db, cV)
500+
501+let dj = 0
502+
503+let dk = 1
504+
505+let dl = 2
506+
507+let dm = 3
508+
509+let dn = "wlg_assetId"
510+
511+let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet")
512+
513+let dp = "acresAssetId"
514+
515+let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet")
516+
517+let dr = 2
518+
519+func ds (cO) = ("finishBlockForAddr_" + cO)
520+
521+
522+func dt () = "resTypesProportions"
523+
524+
525+func du (dv) = ("resTypesByContinent_" + dv)
526+
527+
528+func dw (bB) = ("stakedLandsByOwner_" + bB)
529+
530+
531+func dx (bB) = ("stakedPiecesByOwner_" + bB)
532+
533+
534+func dy (dz) = {
535+ let cz = dz
536+ if ($isInstanceOf(cz, "String"))
534537 then {
535- let dz = cy
536- dz
538+ let dA = cz
539+ dA
537540 }
538541 else throw("fail to cast into String")
539542 }
540543
541544
542-func dA (dy) = {
543- let cy = dy
544- if ($isInstanceOf(cy, "Int"))
545+func dB (dz) = {
546+ let cz = dz
547+ if ($isInstanceOf(cz, "Int"))
545548 then {
546- let dB = cy
547- dB
549+ let dC = cz
550+ dC
548551 }
549552 else throw("fail to cast into Int")
550553 }
551554
552555
553-func dC (dy) = {
554- let cy = dy
555- if ($isInstanceOf(cy, "List[Any]"))
556+func dD (dz) = {
557+ let cz = dz
558+ if ($isInstanceOf(cz, "List[Any]"))
556559 then {
557- let dD = cy
558- dD
560+ let dE = cz
561+ dE
559562 }
560563 else throw("fail to cast into List[Any]")
561564 }
562565
563566
564-func dE (dy) = {
565- let cy = dy
566- if ($isInstanceOf(cy, "Boolean"))
567+func dF (dz) = {
568+ let cz = dz
569+ if ($isInstanceOf(cz, "Boolean"))
567570 then {
568- let dz = cy
569- dz
571+ let dA = cz
572+ dA
570573 }
571574 else throw("fail to cast into Boolean")
572575 }
573576
574577
575-func dF (dG) = {
576- let cy = dG
577- if (("S" == cy))
578- then cG
579- else if (("M" == cy))
580- then cH
581- else if (("L" == cy))
582- then cI
583- else if (("XL" == cy))
584- then cJ
585- else if (("XXL" == cy))
586- then cK
578+func dG (dH) = {
579+ let cz = dH
580+ if (("S" == cz))
581+ then cH
582+ else if (("M" == cz))
583+ then cI
584+ else if (("L" == cz))
585+ then cJ
586+ else if (("XL" == cz))
587+ then cK
588+ else if (("XXL" == cz))
589+ then cL
587590 else throw("Unknown land size")
588591 }
589592
590593
591-func dH (dz) = isDefined(parseInt(dz))
592-
593-
594-func dI () = "contractsBlocked"
595-
596-
597-func dJ (c) = ("lastTxIdByUser_" + c)
598-
599-
600-func dK (dL,dM) = {
601- let dN = pow(10, 0, dM, 0, 0, DOWN)
602- let dO = toString((dL % dN))
603- let dP = drop(toString(dN), (1 + size(dO)))
604- (((toString((dL / dN)) + ".") + dP) + dO)
605- }
606-
607-
608-func dQ (dR,dS,dT) = if ((0 >= dR))
594+func dI (dA) = isDefined(parseInt(dA))
595+
596+
597+func dJ () = "contractsBlocked"
598+
599+
600+func dK (c) = ("lastTxIdByUser_" + c)
601+
602+
603+func dL (dM,dN) = {
604+ let dO = pow(10, 0, dN, 0, 0, DOWN)
605+ let dP = toString((dM % dO))
606+ let dQ = drop(toString(dO), (1 + size(dP)))
607+ (((toString((dM / dO)) + ".") + dQ) + dP)
608+ }
609+
610+
611+func dR (dS,dT,dU) = if ((0 >= dS))
609612 then throw("maxValue should be > 0")
610613 else {
611- let dU = sha256((dS + dT))
612- (toInt(dU) % dR)
614+ let dV = sha256((dT + dU))
615+ (toInt(dV) % dS)
613616 }
614617
615618
616-let dV = {
617- let cy = cw
618- if ((base58'2W' == cy))
619+let dW = {
620+ let cz = cx
621+ if ((base58'2W' == cz))
619622 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
620- else if ((base58'2T' == cy))
623+ else if ((base58'2T' == cz))
621624 then this
622625 else throw("Unknown chain")
623626 }
624627
625-let dW = {
626- let cy = cw
627- if ((base58'2W' == cy))
628+let dX = {
629+ let cz = cx
630+ if ((base58'2W' == cz))
628631 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
629- else if ((base58'2T' == cy))
632+ else if ((base58'2T' == cz))
630633 then this
631634 else throw("Unknown chain")
632635 }
633636
634-let dX = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
635-
636-let dY = 300000
637-
638-let dZ = 5000000
639-
640-let ea = 50
641-
642-let eb = 10000000
643-
644-let ec = {
645- let cy = cw
646- if ((base58'2W' == cy))
637+let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
638+
639+let dZ = 300000
640+
641+let ea = 5000000
642+
643+let eb = 50
644+
645+let ec = 10000000
646+
647+let ed = {
648+ let cz = cx
649+ if ((base58'2W' == cz))
647650 then 252289527462
648- else if ((base58'2T' == cy))
651+ else if ((base58'2T' == cz))
649652 then 2522895274
650653 else throw("Unknown chain")
651654 }
652655
653-let ed = {
654- let cy = cw
655- if ((base58'2W' == cy))
656+let ee = {
657+ let cz = cx
658+ if ((base58'2W' == cz))
656659 then 250000000
657- else if ((base58'2T' == cy))
660+ else if ((base58'2T' == cz))
658661 then 250000000
659662 else throw("Unknown chain")
660663 }
661664
662-let ee = 100000
663-
664-let ef = 2500000000
665-
666-let eg = toBigInt(5)
667-
668-let eh = toBigInt(20)
669-
670-let ei = toBigInt((20 * 20))
671-
672-let ej = toBigInt(((20 * 20) * 20))
673-
674-let ek = toBigInt((((20 * 20) * 20) * 20))
675-
676-let el = toBigInt(((((20 * 20) * 20) * 20) * 20))
677-
678-let em = 500
679-
680-func en () = "nextLandNum"
681-
682-
683-func eo (ep) = ("lcn_" + ep)
684-
685-
686-func eq (er) = ("la_" + er)
687-
688-
689-func es (bt,bA) = ((("ilao_" + bt) + "_") + bA)
690-
691-
692-func et (er) = ("lo_" + er)
693-
694-
695-func eu (ep) = ("duckByCustomName_" + ep)
696-
697-
698-func ev (ep) = ("accountByCustomName_" + ep)
699-
700-
701-func ew () = "oldiesList"
702-
703-
704-func ex () = "nextRoboDuck"
705-
706-
707-let ey = 0
708-
709-let ez = 1
710-
711-let eA = 2
712-
713-let eB = 0
714-
715-let eC = 5
716-
717-let eD = 6
718-
719-let eE = 7
720-
721-func eF (er,dG) = ((aE + er) + dG)
722-
723-
724-func eG (eH,eI) = {
725- let eJ = if ((eH >= 0))
726- then (((eH + eI) - 1) / eI)
727- else -((((-(eH) + eI) - 1) / eI))
728- (eJ * cF)
729- }
730-
731-
732-func eK (eL,eM) = {
733- let eN = (((((eM[0] + eM[1]) + eM[2]) + eM[3]) + eM[4]) + eM[5])
734- if ((0 >= eN))
665+let ef = 100000
666+
667+let eg = 2500000000
668+
669+let eh = toBigInt(5)
670+
671+let ei = toBigInt(20)
672+
673+let ej = toBigInt((20 * 20))
674+
675+let ek = toBigInt(((20 * 20) * 20))
676+
677+let el = toBigInt((((20 * 20) * 20) * 20))
678+
679+let em = toBigInt(((((20 * 20) * 20) * 20) * 20))
680+
681+let en = 500
682+
683+func eo () = "nextLandNum"
684+
685+
686+func ep (eq) = ("lcn_" + eq)
687+
688+
689+func er (es) = ("la_" + es)
690+
691+
692+func et (bu,bB) = ((("ilao_" + bu) + "_") + bB)
693+
694+
695+func eu (es) = ("lo_" + es)
696+
697+
698+func ev (eq) = ("duckByCustomName_" + eq)
699+
700+
701+func ew (eq) = ("accountByCustomName_" + eq)
702+
703+
704+func ex () = "oldiesList"
705+
706+
707+func ey () = "nextRoboDuck"
708+
709+
710+let ez = 0
711+
712+let eA = 1
713+
714+let eB = 2
715+
716+let eC = 0
717+
718+let eD = 5
719+
720+let eE = 6
721+
722+let eF = 7
723+
724+func eG (es,dH) = ((aF + es) + dH)
725+
726+
727+func eH (eI,eJ) = {
728+ let eK = if ((eI >= 0))
729+ then (((eI + eJ) - 1) / eJ)
730+ else -((((-(eI) + eJ) - 1) / eJ))
731+ (eK * cG)
732+ }
733+
734+
735+func eL (eM,eN) = {
736+ let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5])
737+ if ((0 >= eO))
735738 then throw("Zero weights sum")
736739 else {
737- let eO = fraction(eL, cE, eN)
738- func eP (eQ,eR) = (eQ :+ fraction(eR, eO, cE))
739-
740- let eS = eM
741- let eT = size(eS)
742- let eU = nil
743- func eV (eW,eX) = if ((eX >= eT))
744- then eW
745- else eP(eW, eS[eX])
746-
747- func eY (eW,eX) = if ((eX >= eT))
748- then eW
740+ let eP = fraction(eM, cF, eO)
741+ func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF))
742+
743+ let eT = eN
744+ let eU = size(eT)
745+ let eV = nil
746+ func eW (eX,eY) = if ((eY >= eU))
747+ then eX
748+ else eQ(eX, eT[eY])
749+
750+ func eZ (eX,eY) = if ((eY >= eU))
751+ then eX
749752 else throw("List size exceeds 6")
750753
751- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
752- }
753- }
754-
755-
756-func eZ (eL) = {
757- let fa = split(value(getString(ds())), "_")
758- if ((size(fa) != aI))
754+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
755+ }
756+ }
757+
758+
759+func fa (eM) = {
760+ let fb = split(value(getString(dt())), "_")
761+ if ((size(fb) != aJ))
759762 then throw("Wrong proportions data")
760763 else {
761- let fb = [parseIntValue(fa[0]), parseIntValue(fa[1]), parseIntValue(fa[2]), parseIntValue(fa[3]), parseIntValue(fa[4]), parseIntValue(fa[5])]
762- eK(eL, fb)
763- }
764- }
765-
766-
767-func fc (fd,fe,ff) = {
768- let fg = eZ(ff)
769- func fh (eQ,db) = {
770- let fi = (parseIntValue(fe[db]) - fg[db])
771- if ((0 > fi))
772- then throw(((((("Not enough material idx=" + toString(db)) + ", you have ") + fe[db]) + ", but need ") + toString(fg[db])))
773- else (eQ :+ toString(fi))
764+ let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])]
765+ eL(eM, fc)
766+ }
767+ }
768+
769+
770+func fd (fe,ff,fg) = {
771+ let fh = fa(fg)
772+ func fi (eR,dc) = {
773+ let fj = (parseIntValue(ff[dc]) - fh[dc])
774+ if ((0 > fj))
775+ then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc])))
776+ else (eR :+ toString(fj))
774777 }
775778
776- if (fd)
779+ if (fe)
777780 then {
778- let eS = cL
779- let eT = size(eS)
780- let eU = nil
781- func eV (eW,eX) = if ((eX >= eT))
782- then eW
783- else fh(eW, eS[eX])
784-
785- func eY (eW,eX) = if ((eX >= eT))
786- then eW
781+ let eT = cM
782+ let eU = size(eT)
783+ let eV = nil
784+ func eW (eX,eY) = if ((eY >= eU))
785+ then eX
786+ else fi(eX, eT[eY])
787+
788+ func eZ (eX,eY) = if ((eY >= eU))
789+ then eX
787790 else throw("List size exceeds 6")
788791
789- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
790- }
791- else fe
792- }
793-
794-
795-func fj (fk,fl) = if ((fl == ""))
796- then $Tuple2(fk, false)
792+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
793+ }
794+ else ff
795+ }
796+
797+
798+func fk (fl,fm) = if ((fm == ""))
799+ then $Tuple2(fl, false)
797800 else {
798- func fm (eQ,fn) = {
799- let fo = split(fn, ",")
800- if ((size(fo) != 2))
801+ func fn (eR,fo) = {
802+ let fp = split(fo, ",")
803+ if ((size(fp) != 2))
801804 then throw("Incorrect format, should be index,amount")
802805 else {
803- let db = parseIntValue(fo[0])
804- if (if ((0 > db))
806+ let dc = parseIntValue(fp[0])
807+ if (if ((0 > dc))
805808 then true
806- else (db >= size(aW)))
809+ else (dc >= size(aX)))
807810 then throw("Unknown product idx")
808811 else {
809- let fp = parseIntValue(fo[1])
810- let fq = split(eQ._1, (fo[0] + ":"))
811- if ((size(fq) != 2))
812- then throw((("You don't have " + aS[db]) + " equipped"))
812+ let fq = parseIntValue(fp[1])
813+ let fr = split(eR._1, (fp[0] + ":"))
814+ if ((size(fr) != 2))
815+ then throw((("You don't have " + aT[dc]) + " equipped"))
813816 else {
814- let fr = fq[1]
815- let fs = if (dH(take(drop(fr, 1), 1)))
817+ let fs = fr[1]
818+ let ft = if (dI(take(drop(fs, 1), 1)))
816819 then 2
817820 else 1
818- let ft = parseIntValue(take(fr, fs))
819- let fu = drop(fr, fs)
820- let fv = if ((ft >= fp))
821- then (ft - fp)
822- else throw(((((("You equipped " + toString(ft)) + " of ") + aS[db]) + ", but tried to use ") + toString(fp)))
823- $Tuple2(((((fq[0] + fo[0]) + ":") + toString(fv)) + fu), if (eQ._2)
821+ let fu = parseIntValue(take(fs, ft))
822+ let fv = drop(fs, ft)
823+ let fw = if ((fu >= fq))
824+ then (fu - fq)
825+ else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq)))
826+ $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2)
824827 then true
825- else if (if ((db >= 6))
826- then (8 >= db)
828+ else if (if ((dc >= 6))
829+ then (8 >= dc)
827830 else false)
828- then (fv == 0)
831+ then (fw == 0)
829832 else false)
830833 }
831834 }
832835 }
833836 }
834837
835- let eS = split(fl, "_")
836- let eT = size(eS)
837- let eU = $Tuple2(fk, false)
838- func eV (eW,eX) = if ((eX >= eT))
839- then eW
840- else fm(eW, eS[eX])
841-
842- func eY (eW,eX) = if ((eX >= eT))
843- then eW
838+ let eT = split(fm, "_")
839+ let eU = size(eT)
840+ let eV = $Tuple2(fl, false)
841+ func eW (eX,eY) = if ((eY >= eU))
842+ then eX
843+ else fn(eX, eT[eY])
844+
845+ func eZ (eX,eY) = if ((eY >= eU))
846+ then eX
844847 else throw("List size exceeds 10")
845848
846- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
849+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
847850 }
848851
849852
850-func fw (fx) = {
851- let fy = if ((fx == ""))
853+func fx (fy) = {
854+ let fz = if ((fy == ""))
852855 then nil
853- else split_4C(fx, "_")
854- func fz (eQ,cn) = {
855- let fA = (size(eQ) / 8)
856- let ft = if ((size(fy) > fA))
857- then parseIntValue(fy[fA])
856+ else split_4C(fy, "_")
857+ func fA (eR,co) = {
858+ let fB = (size(eR) / 8)
859+ let fu = if ((size(fz) > fB))
860+ then parseIntValue(fz[fB])
858861 else 0
859- (eQ + toBytes(ft))
862+ (eR + toBytes(fu))
860863 }
861864
862- let eS = aW
863- let eT = size(eS)
864- let eU = base58''
865- func eV (eW,eX) = if ((eX >= eT))
866- then eW
867- else fz(eW, eS[eX])
868-
869- func eY (eW,eX) = if ((eX >= eT))
870- then eW
865+ let eT = aX
866+ let eU = size(eT)
867+ let eV = base58''
868+ func eW (eX,eY) = if ((eY >= eU))
869+ then eX
870+ else fA(eX, eT[eY])
871+
872+ func eZ (eX,eY) = if ((eY >= eU))
873+ then eX
871874 else throw("List size exceeds 50")
872875
873- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
874- }
875-
876-
877-func fB (fC) = {
878- func fD (eQ,cn) = {
879- let fA = size(eQ)
880- let fE = take(drop(fC, (8 * fA)), 8)
881- (eQ :+ toString(toInt(fE)))
876+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
877+ }
878+
879+
880+func fC (fD) = {
881+ func fE (eR,co) = {
882+ let fB = size(eR)
883+ let fF = take(drop(fD, (8 * fB)), 8)
884+ (eR :+ toString(toInt(fF)))
882885 }
883886
884887 makeString_2C({
885- let eS = aW
886- let eT = size(eS)
887- let eU = nil
888- func eV (eW,eX) = if ((eX >= eT))
889- then eW
890- else fD(eW, eS[eX])
891-
892- func eY (eW,eX) = if ((eX >= eT))
893- then eW
888+ let eT = aX
889+ let eU = size(eT)
890+ let eV = nil
891+ func eW (eX,eY) = if ((eY >= eU))
892+ then eX
893+ else fE(eX, eT[eY])
894+
895+ func eZ (eX,eY) = if ((eY >= eU))
896+ then eX
894897 else throw("List size exceeds 50")
895898
896- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
899+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
897900 }, "_")
898901 }
899902
900903
901-func fF (fG,fH) = {
902- func fI (eQ,fA) = {
903- let fJ = if ((size(fG) > (7 + fA)))
904- then fG[(7 + fA)]
904+func fG (fH,fI) = {
905+ func fJ (eR,fB) = {
906+ let fK = if ((size(fH) > (7 + fB)))
907+ then fH[(7 + fB)]
905908 else 0
906- if ((parseIntValue(fH[fA]) > (fG[fA] + fJ)))
907- then throw(("Requirement not satisfied: " + k[fA]))
909+ if ((parseIntValue(fI[fB]) > (fH[fB] + fK)))
910+ then throw(("Requirement not satisfied: " + k[fB]))
908911 else true
909912 }
910913
911- let eS = [0, 1, 2, 3, 4, 5, 6]
912- let eT = size(eS)
913- let eU = false
914- func eV (eW,eX) = if ((eX >= eT))
915- then eW
916- else fI(eW, eS[eX])
917-
918- func eY (eW,eX) = if ((eX >= eT))
919- then eW
914+ let eT = [0, 1, 2, 3, 4, 5, 6]
915+ let eU = size(eT)
916+ let eV = false
917+ func eW (eX,eY) = if ((eY >= eU))
918+ then eX
919+ else fJ(eX, eT[eY])
920+
921+ func eZ (eX,eY) = if ((eY >= eU))
922+ then eX
920923 else throw("List size exceeds 7")
921924
922- eY(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7)
923- }
924-
925-
926-func fK (fL,fy,fM,fG,fN,fO) = {
927- let fo = split(fL, ":")
928- if ((size(fo) != 2))
925+ eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7)
926+ }
927+
928+
929+func fL (fM,fz,fN,fH,fO,fP) = {
930+ let fp = split(fM, ":")
931+ if ((size(fp) != 2))
929932 then throw("Incorrect format, should be index:amount")
930- else if (if (!(fM))
931- then (size(fo[0]) != 2)
933+ else if (if (!(fN))
934+ then (size(fp[0]) != 2)
932935 else false)
933936 then throw("Product idx should be 2 digits, zero padded")
934937 else {
935- let fP = parseIntValue(fo[0])
936- let fQ = parseIntValue(fo[1])
937- if (!(containsElement(aV, fP)))
938- then throw((("Product '" + aS[fP]) + "' cannot be used for land defense"))
939- else if ((0 > fQ))
938+ let fQ = parseIntValue(fp[0])
939+ let fR = parseIntValue(fp[1])
940+ if (!(containsElement(aW, fQ)))
941+ then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense"))
942+ else if ((0 > fR))
940943 then throw("Count can't be negative")
941- else if ((fQ > u))
942- then throw(((("Can't put more than " + toString(u)) + " of ") + aS[fP]))
943- else if ((fQ == 0))
944- then $Tuple3(fy, fN, fO)
944+ else if ((fR > u))
945+ then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
946+ else if ((fR == 0))
947+ then $Tuple3(fz, fO, fP)
945948 else {
946- let fR = take(fy, (8 * fP))
947- let ft = toInt(take(drop(fy, (8 * fP)), 8))
948- let fu = drop(fy, (8 * (fP + 1)))
949- let cn = split(aW[fP], "_")
950- if (if (!(fM))
951- then (fQ > ft)
949+ let fS = take(fz, (8 * fQ))
950+ let fu = toInt(take(drop(fz, (8 * fQ)), 8))
951+ let fv = drop(fz, (8 * (fQ + 1)))
952+ let co = split(aX[fQ], "_")
953+ if (if (!(fN))
954+ then (fR > fu)
952955 else false)
953- then throw(((((("You have " + toString(ft)) + " of ") + aS[fP]) + ", but tried to use ") + toString(fQ)))
956+ then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
954957 else {
955- let fv = if (if (!(fM))
956- then fF(fG, split(cn[aZ], ","))
958+ let fw = if (if (!(fN))
959+ then fG(fH, split(co[ba], ","))
957960 else false)
958- then (ft - fQ)
959- else (ft + fQ)
960- let fS = (eG(fv, bb) - eG(ft, bb))
961- $Tuple3(((fR + toBytes(fv)) + fu), (fN + fS), (fO - fS))
961+ then (fu - fR)
962+ else (fu + fR)
963+ let fT = (eH(fw, bc) - eH(fu, bc))
964+ $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT))
962965 }
963966 }
964967 }
965968 }
966969
967970
968-func fT (fL,fy,fM,fU,fV,fW,fG) = {
969- let fo = split(fL, ":")
970- if ((size(fo) != 2))
971+func fU (fM,fz,fN,fV,fW,fX,fH) = {
972+ let fp = split(fM, ":")
973+ if ((size(fp) != 2))
971974 then throw("Incorrect format, should be index:amount")
972- else if (if (!(fM))
973- then (size(fo[0]) != 2)
975+ else if (if (!(fN))
976+ then (size(fp[0]) != 2)
974977 else false)
975978 then throw("Product idx should be 2 digits, zero padded")
976979 else {
977- let fP = parseIntValue(fo[0])
978- let fQ = parseIntValue(fo[1])
979- if (if ((0 > fP))
980+ let fQ = parseIntValue(fp[0])
981+ let fR = parseIntValue(fp[1])
982+ if (if ((0 > fQ))
980983 then true
981- else (fP >= size(aW)))
984+ else (fQ >= size(aX)))
982985 then throw("Unknown product idx")
983- else if ((0 > fQ))
986+ else if ((0 > fR))
984987 then throw("Count can't be negative")
985- else if ((fQ > u))
986- then throw(((("Can't put more than " + toString(u)) + " of ") + aS[fP]))
987- else if ((fQ == 0))
988- then $Tuple2(fy, false)
988+ else if ((fR > u))
989+ then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
990+ else if ((fR == 0))
991+ then $Tuple2(fz, false)
989992 else {
990- let fR = take(fy, (8 * fP))
991- let ft = toInt(take(drop(fy, (8 * fP)), 8))
992- let fu = drop(fy, (8 * (fP + 1)))
993- let cn = split(aW[fP], "_")
994- if (if (!(fM))
995- then (fQ > ft)
993+ let fS = take(fz, (8 * fQ))
994+ let fu = toInt(take(drop(fz, (8 * fQ)), 8))
995+ let fv = drop(fz, (8 * (fQ + 1)))
996+ let co = split(aX[fQ], "_")
997+ if (if (!(fN))
998+ then (fR > fu)
996999 else false)
997- then throw(((((("You have " + toString(ft)) + " of ") + aS[fP]) + ", but tried to use ") + toString(fQ)))
1000+ then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
9981001 else {
999- let fX = if (if (!(fM))
1000- then fF(fG, split(cn[aZ], ","))
1002+ let fY = if (if (!(fN))
1003+ then fG(fH, split(co[ba], ","))
10011004 else false)
10021005 then {
1003- let fY = cn[ba]
1004- if ((fY == ""))
1006+ let fZ = co[bb]
1007+ if ((fZ == ""))
10051008 then throw("Item cannot be equipped")
10061009 else {
1007- let fZ = parseIntValue(fY)
1008- let ga = (fZ / 100)
1009- if ((fU != ga))
1010+ let ga = parseIntValue(fZ)
1011+ let gb = (ga / 100)
1012+ if ((fV != gb))
10101013 then throw("Segment incompatible")
10111014 else {
1012- let gb = ((fZ % 100) / 10)
1013- if ((fV != gb))
1015+ let gc = ((ga % 100) / 10)
1016+ if ((fW != gc))
10141017 then throw("Slot incompatible")
10151018 else {
1016- let gc = (fZ % 10)
1017- if (if ((fW != 0))
1018- then (gc > 1)
1019+ let gd = (ga % 10)
1020+ if (if ((fX != 0))
1021+ then (gd > 1)
10191022 else false)
10201023 then throw("Big items should occupy slot 0")
1021- else (gc > 1)
1024+ else (gd > 1)
10221025 }
10231026 }
10241027 }
10251028 }
10261029 else false
1027- $Tuple2(((fR + toBytes((ft + (if (fM)
1028- then fQ
1029- else -(fQ))))) + fu), fX)
1030+ $Tuple2(((fS + toBytes((fu + (if (fN)
1031+ then fR
1032+ else -(fR))))) + fv), fY)
10301033 }
10311034 }
10321035 }
10331036 }
10341037
10351038
1036-func gd (ge,gf,fM,fU,fV,gg) = if ((ge != ""))
1039+func ge (gf,gg,fN,fV,fW,gh) = if ((gf != ""))
10371040 then {
1038- let gh = split(ge, ",")
1039- if ((size(gh) > t))
1041+ let gi = split(gf, ",")
1042+ if ((size(gi) > t))
10401043 then throw("Wrong slots format")
10411044 else {
1042- let gi = gh[0]
1043- let gj = if ((size(gh) > 1))
1044- then gh[1]
1045+ let gj = gi[0]
1046+ let gk = if ((size(gi) > 1))
1047+ then gi[1]
10451048 else ""
1046- if (if ((gi == ""))
1047- then (gj == "")
1049+ if (if ((gj == ""))
1050+ then (gk == "")
10481051 else false)
1049- then gf
1052+ then gg
10501053 else {
1051- let gk = if ((gi != ""))
1052- then fT(gi, gf, fM, fU, fV, 0, gg)
1053- else $Tuple2(gf, false)
1054- if ((gj != ""))
1055- then if (gk._2)
1054+ let gl = if ((gj != ""))
1055+ then fU(gj, gg, fN, fV, fW, 0, gh)
1056+ else $Tuple2(gg, false)
1057+ if ((gk != ""))
1058+ then if (gl._2)
10561059 then throw("Big item already occupies slot")
1057- else fT(gj, gk._1, fM, fU, fV, 1, gg)._1
1058- else gk._1
1060+ else fU(gk, gl._1, fN, fV, fW, 1, gh)._1
1061+ else gl._1
10591062 }
10601063 }
10611064 }
1062- else gf
1063-
1064-
1065-func gl (gm,gn,fM,gg) = {
1066- func fU (eQ,go) = {
1067- let fA = eQ._1
1068- let fV = split(go, ";")
1069- if ((size(fV) != s))
1065+ else gg
1066+
1067+
1068+func gm (gn,go,fN,gh) = {
1069+ func fV (eR,gp) = {
1070+ let fB = eR._1
1071+ let fW = split(gp, ";")
1072+ if ((size(fW) != s))
10701073 then throw("Wrong segment format")
10711074 else {
1072- let gp = fV[0]
1073- let gq = fV[1]
1074- if (if ((gp == ""))
1075- then (gq == "")
1075+ let gq = fW[0]
1076+ let gr = fW[1]
1077+ if (if ((gq == ""))
1078+ then (gr == "")
10761079 else false)
1077- then $Tuple2((fA + 1), eQ._2)
1080+ then $Tuple2((fB + 1), eR._2)
10781081 else {
1079- let gr = gd(gp, eQ._2, fM, fA, 0, gg)
1080- $Tuple2((fA + 1), gd(gq, gr, fM, fA, 1, gg))
1082+ let gs = ge(gq, eR._2, fN, fB, 0, gh)
1083+ $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh))
10811084 }
10821085 }
10831086 }
10841087
1085-( let eS = gm
1086- let eT = size(eS)
1087- let eU = $Tuple2(0, gn)
1088- func eV (eW,eX) = if ((eX >= eT))
1089- then eW
1090- else fU(eW, eS[eX])
1091-
1092- func eY (eW,eX) = if ((eX >= eT))
1093- then eW
1088+( let eT = gn
1089+ let eU = size(eT)
1090+ let eV = $Tuple2(0, go)
1091+ func eW (eX,eY) = if ((eY >= eU))
1092+ then eX
1093+ else fV(eX, eT[eY])
1094+
1095+ func eZ (eX,eY) = if ((eY >= eU))
1096+ then eX
10941097 else throw("List size exceeds 6")
10951098
1096- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6))._2
1097- }
1098-
1099-
1100-func gs (gm,gn,fN,fO,fM,fG) = if ((3 > size(gm)))
1099+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2
1100+ }
1101+
1102+
1103+func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn)))
11011104 then throw("At least duck, mines and traps parts are required")
11021105 else {
1103- func fU (eQ,go) = {
1104- let fA = eQ._1
1105- if ((fA == 0))
1106- then $Tuple4((fA + 1), eQ._2, eQ._3, eQ._4)
1106+ func fV (eR,gp) = {
1107+ let fB = eR._1
1108+ if ((fB == 0))
1109+ then $Tuple4((fB + 1), eR._2, eR._3, eR._4)
11071110 else {
1108- let gt = fK(go, eQ._2, fM, fG, eQ._3, eQ._4)
1109- $Tuple4((fA + 1), gt._1, gt._2, gt._3)
1111+ let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4)
1112+ $Tuple4((fB + 1), gu._1, gu._2, gu._3)
11101113 }
11111114 }
11121115
1113- let gu = {
1114- let eS = gm
1115- let eT = size(eS)
1116- let eU = $Tuple4(0, gn, fN, fO)
1117- func eV (eW,eX) = if ((eX >= eT))
1118- then eW
1119- else fU(eW, eS[eX])
1120-
1121- func eY (eW,eX) = if ((eX >= eT))
1122- then eW
1116+ let gv = {
1117+ let eT = gn
1118+ let eU = size(eT)
1119+ let eV = $Tuple4(0, go, fO, fP)
1120+ func eW (eX,eY) = if ((eY >= eU))
1121+ then eX
1122+ else fV(eX, eT[eY])
1123+
1124+ func eZ (eX,eY) = if ((eY >= eU))
1125+ then eX
11231126 else throw("List size exceeds 10")
11241127
1125- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1126- }
1127- $Tuple3(gu._2, gu._3, gu._4)
1128+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1129+ }
1130+ $Tuple3(gv._2, gv._3, gv._4)
11281131 }
11291132
11301133
1131-func gv (B) = {
1132- let gw = G(B)
1133- let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1134- let gy = gl(gx, dX, true, nil)
1135- let gz = split(gx[q], ";")[1]
1136- let aq = if ((gz == ""))
1134+func gw (B) = {
1135+ let gx = G(B)
1136+ let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1137+ let gz = gm(gy, dY, true, nil)
1138+ let gA = split(gy[q], ";")[1]
1139+ let ar = if ((gA == ""))
11371140 then 0
11381141 else {
1139- let gA = split(gz, ",")[0]
1140- if ((gA == ""))
1142+ let gB = split(gA, ",")[0]
1143+ if ((gB == ""))
11411144 then 0
11421145 else {
1143- let fL = split(gA, ":")
1144- let db = fL[0]
1145- let gB = fL[1]
1146- if (if (if (if (if ((db == "06"))
1146+ let fM = split(gB, ":")
1147+ let dc = fM[0]
1148+ let gC = fM[1]
1149+ if (if (if (if (if ((dc == "06"))
11471150 then true
1148- else (db == "07"))
1151+ else (dc == "07"))
11491152 then true
1150- else (db == "08"))
1151- then (gB != "")
1153+ else (dc == "08"))
1154+ then (gC != "")
11521155 else false)
1153- then (parseIntValue(gB) > 0)
1156+ then (parseIntValue(gC) > 0)
11541157 else false)
1155- then parseIntValue(split(aW[parseIntValue(db)], "_")[aY])
1158+ then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
11561159 else 0
11571160 }
11581161 }
1159- let gg = ao(this, B, aq, true)
1160- let gC = gl(gx, gy, false, gg)
1161- (gC == gC)
1162- }
1163-
1164-
1165-func gD (gE,gF,gG,gH) = if ((size(gE) != aI))
1162+ let gh = ap(this, B, ar, true)
1163+ let gD = gm(gy, gz, false, gh)
1164+ (gD == gD)
1165+ }
1166+
1167+
1168+func gE (gF,gG,gH,gI) = if ((size(gF) != aJ))
11661169 then throw("Wrong proportions data")
11671170 else {
1168- func gI (eQ,gJ) = {
1169- let fi = (parseIntValue(gE[gJ]) + ((gH * gF[gJ]) * gG))
1170- if ((0 > fi))
1171- then throw(((((((("Panic! Pieces of type=" + toString(gJ)) + ", sign=") + toString(gH)) + ", terrainCounts[i]=") + toString(gF[gJ])) + ", landSizeIndex=") + toString(gG)))
1172- else (eQ :+ toString(fi))
1173- }
1174-
1175- let eS = cL
1176- let eT = size(eS)
1177- let eU = nil
1178- func eV (eW,eX) = if ((eX >= eT))
1179- then eW
1180- else gI(eW, eS[eX])
1181-
1182- func eY (eW,eX) = if ((eX >= eT))
1183- then eW
1171+ func gJ (eR,gK) = {
1172+ let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH))
1173+ if ((0 > fj))
1174+ then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH)))
1175+ else (eR :+ toString(fj))
1176+ }
1177+
1178+ let eT = cM
1179+ let eU = size(eT)
1180+ let eV = nil
1181+ func eW (eX,eY) = if ((eY >= eU))
1182+ then eX
1183+ else gJ(eX, eT[eY])
1184+
1185+ func eZ (eX,eY) = if ((eY >= eU))
1186+ then eX
11841187 else throw("List size exceeds 6")
11851188
1186- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1189+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
11871190 }
11881191
11891192
1190-func gK (gF,gG,gH) = {
1191- let gE = split(valueOrElse(getString(ds()), "0_0_0_0_0_0"), "_")
1192- makeString(gD(gE, gF, gG, gH), "_")
1193- }
1194-
1195-
1196-func gL (gM) = [(size(split(gM, "A")) - 1), (size(split(gM, "B")) - 1), (size(split(gM, "C")) - 1), (size(split(gM, "D")) - 1), (size(split(gM, "E")) - 1), (size(split(gM, "F")) - 1)]
1197-
1198-
1199-func gN (gO,gF,gP,gG,gQ) = {
1200- func gR (eQ,gJ) = {
1201- let gS = ((fraction(gP, gQ, a) * gF[gJ]) * gG)
1202- (eQ :+ toString((parseIntValue(gO[gJ]) + gS)))
1193+func gL (gG,gH,gI) = {
1194+ let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
1195+ makeString(gE(gF, gG, gH, gI), "_")
1196+ }
1197+
1198+
1199+func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)]
1200+
1201+
1202+func gO (gP,gG,gQ,gH,gR) = {
1203+ func gS (eR,gK) = {
1204+ let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1205+ (eR :+ toString((parseIntValue(gP[gK]) + gT)))
12031206 }
12041207
1205- let fb = {
1206- let eS = cL
1207- let eT = size(eS)
1208- let eU = nil
1209- func eV (eW,eX) = if ((eX >= eT))
1210- then eW
1211- else gR(eW, eS[eX])
1212-
1213- func eY (eW,eX) = if ((eX >= eT))
1214- then eW
1208+ let fc = {
1209+ let eT = cM
1210+ let eU = size(eT)
1211+ let eV = nil
1212+ func eW (eX,eY) = if ((eY >= eU))
1213+ then eX
1214+ else gS(eX, eT[eY])
1215+
1216+ func eZ (eX,eY) = if ((eY >= eU))
1217+ then eX
12151218 else throw("List size exceeds 6")
12161219
1217- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1220+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12181221 }
1219- makeString(fb, "_")
1220- }
1221-
1222-
1223-func gT (gF,gP,gG,gQ) = {
1224- func gR (eQ,gJ) = {
1225- let gS = ((fraction(gP, gQ, a) * gF[gJ]) * gG)
1226- $Tuple2((eQ._1 :+ gS), (eQ._2 + gS))
1222+ makeString(fc, "_")
1223+ }
1224+
1225+
1226+func gU (gG,gQ,gH,gR) = {
1227+ func gS (eR,gK) = {
1228+ let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1229+ $Tuple2((eR._1 :+ gT), (eR._2 + gT))
12271230 }
12281231
1229- let eS = cL
1230- let eT = size(eS)
1231- let eU = $Tuple2(nil, 0)
1232- func eV (eW,eX) = if ((eX >= eT))
1233- then eW
1234- else gR(eW, eS[eX])
1235-
1236- func eY (eW,eX) = if ((eX >= eT))
1237- then eW
1232+ let eT = cM
1233+ let eU = size(eT)
1234+ let eV = $Tuple2(nil, 0)
1235+ func eW (eX,eY) = if ((eY >= eU))
1236+ then eX
1237+ else gS(eX, eT[eY])
1238+
1239+ func eZ (eX,eY) = if ((eY >= eU))
1240+ then eX
12381241 else throw("List size exceeds 6")
12391242
1240- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1241- }
1242-
1243-
1244-func gU (gV,gW,gX,gY) = {
1245- let gZ = gX._1
1246- let ha = gX._2
1247- if ((ha == 0))
1248- then $Tuple2(makeString(gV, "_"), makeString(gW, "_"))
1249- else if ((gY >= ha))
1243+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1244+ }
1245+
1246+
1247+func gV (gW,gX,gY,gZ) = {
1248+ let ha = gY._1
1249+ let hb = gY._2
1250+ if ((hb == 0))
1251+ then $Tuple2(makeString(gW, "_"), makeString(gX, "_"))
1252+ else if ((gZ >= hb))
12501253 then {
1251- func hb (eQ,gJ) = (eQ :+ toString((parseIntValue(gV[gJ]) + gZ[gJ])))
1252-
1253- let fb = {
1254- let eS = cL
1255- let eT = size(eS)
1256- let eU = nil
1257- func eV (eW,eX) = if ((eX >= eT))
1258- then eW
1259- else hb(eW, eS[eX])
1260-
1261- func eY (eW,eX) = if ((eX >= eT))
1262- then eW
1254+ func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK])))
1255+
1256+ let fc = {
1257+ let eT = cM
1258+ let eU = size(eT)
1259+ let eV = nil
1260+ func eW (eX,eY) = if ((eY >= eU))
1261+ then eX
1262+ else hc(eX, eT[eY])
1263+
1264+ func eZ (eX,eY) = if ((eY >= eU))
1265+ then eX
12631266 else throw("List size exceeds 6")
12641267
1265- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1268+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12661269 }
1267- $Tuple2(makeString(fb, "_"), makeString(gW, "_"))
1270+ $Tuple2(makeString(fc, "_"), makeString(gX, "_"))
12681271 }
12691272 else {
1270- func hc (eQ,gJ) = {
1271- let hd = fraction(gZ[gJ], gY, ha)
1272- $Tuple2((eQ._1 :+ toString((parseIntValue(gV[gJ]) + hd))), (eQ._2 :+ toString(((parseIntValue(gW[gJ]) + gZ[gJ]) - hd))))
1273+ func hd (eR,gK) = {
1274+ let he = fraction(ha[gK], gZ, hb)
1275+ $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he))))
12731276 }
12741277
1275- let fb = {
1276- let eS = cL
1277- let eT = size(eS)
1278- let eU = $Tuple2(nil, nil)
1279- func eV (eW,eX) = if ((eX >= eT))
1280- then eW
1281- else hc(eW, eS[eX])
1282-
1283- func eY (eW,eX) = if ((eX >= eT))
1284- then eW
1278+ let fc = {
1279+ let eT = cM
1280+ let eU = size(eT)
1281+ let eV = $Tuple2(nil, nil)
1282+ func eW (eX,eY) = if ((eY >= eU))
1283+ then eX
1284+ else hd(eX, eT[eY])
1285+
1286+ func eZ (eX,eY) = if ((eY >= eU))
1287+ then eX
12851288 else throw("List size exceeds 6")
12861289
1287- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1290+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12881291 }
1289- $Tuple2(makeString(fb._1, "_"), makeString(fb._2, "_"))
1292+ $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_"))
12901293 }
12911294 }
12921295
12931296
1294-func he (hf) = if ((hf >= toBigInt(0)))
1295- then hf
1296- else -(hf)
1297-
1298-
1299-let hg = [[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]]
1300-
1301-func hh (dB,hi) = {
1302- let hj = toInt((dB % eh))
1303- let hk = if ((hi[0] > hj))
1297+func hf (hg) = if ((hg >= toBigInt(0)))
1298+ then hg
1299+ else -(hg)
1300+
1301+
1302+let hh = [[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]]
1303+
1304+func hi (dC,hj) = {
1305+ let hk = toInt((dC % ei))
1306+ let hl = if ((hj[0] > hk))
13041307 then "A"
1305- else if ((hi[1] > hj))
1308+ else if ((hj[1] > hk))
13061309 then "B"
1307- else if ((hi[2] > hj))
1310+ else if ((hj[2] > hk))
13081311 then "C"
1309- else if ((hi[3] > hj))
1312+ else if ((hj[3] > hk))
13101313 then "D"
1311- else if ((hi[4] > hj))
1314+ else if ((hj[4] > hk))
13121315 then "E"
13131316 else "F"
1314- hk
1315- }
1316-
1317-
1318-func hl (hm,hn) = {
1319- let ho = hg[hn]
1320- func hp (eQ,eR) = $Tuple2((((((eQ._1 + hh(eQ._2, ho)) + hh((eQ._2 / eh), ho)) + hh((eQ._2 / ei), ho)) + hh((eQ._2 / ej), ho)) + hh((eQ._2 / ek), ho)), (eQ._2 / el))
1321-
1322- let gu = {
1323- let eS = [1, 2, 3, 4, 5]
1324- let eT = size(eS)
1325- let eU = $Tuple2("", (hm / eg))
1326- func eV (eW,eX) = if ((eX >= eT))
1327- then eW
1328- else hp(eW, eS[eX])
1329-
1330- func eY (eW,eX) = if ((eX >= eT))
1331- then eW
1317+ hl
1318+ }
1319+
1320+
1321+func hm (hn,ho) = {
1322+ let hp = hh[ho]
1323+ func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em))
1324+
1325+ let gv = {
1326+ let eT = [1, 2, 3, 4, 5]
1327+ let eU = size(eT)
1328+ let eV = $Tuple2("", (hn / eh))
1329+ func eW (eX,eY) = if ((eY >= eU))
1330+ then eX
1331+ else hq(eX, eT[eY])
1332+
1333+ func eZ (eX,eY) = if ((eY >= eU))
1334+ then eX
13321335 else throw("List size exceeds 5")
13331336
1334- eY(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5)
1337+ eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
13351338 }
1336- gu._1
1337- }
1338-
1339-
1340-let hq = [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]
1341-
1342-let hr = ["A", "B", "C", "D", "E", "F"]
1343-
1344-func hs (ht,gG) = {
1345- func hu (eQ,dz) = {
1346- let fA = eQ._2
1347- let hv = parseIntValue(dz)
1348- let hf = if ((hv == 0))
1339+ gv._1
1340+ }
1341+
1342+
1343+let hr = [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]
1344+
1345+let hs = ["A", "B", "C", "D", "E", "F"]
1346+
1347+func ht (hu,gH) = {
1348+ func hv (eR,dA) = {
1349+ let fB = eR._2
1350+ let hw = parseIntValue(dA)
1351+ let hg = if ((hw == 0))
13491352 then 0
1350- else if ((hv >= (4 * gG)))
1351- then (hv / gG)
1352- else if ((hv > (3 * gG)))
1353+ else if ((hw >= (4 * gH)))
1354+ then (hw / gH)
1355+ else if ((hw > (3 * gH)))
13531356 then 3
1354- else (((hv - 1) / gG) + 1)
1355- $Tuple3((eQ._1 :+ hf), (eQ._2 + 1), (eQ._3 + hf))
1357+ else (((hw - 1) / gH) + 1)
1358+ $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg))
13561359 }
13571360
1358- let gu = {
1359- let eS = ht
1360- let eT = size(eS)
1361- let eU = $Tuple3(nil, 0, 0)
1362- func eV (eW,eX) = if ((eX >= eT))
1363- then eW
1364- else hu(eW, eS[eX])
1365-
1366- func eY (eW,eX) = if ((eX >= eT))
1367- then eW
1361+ let gv = {
1362+ let eT = hu
1363+ let eU = size(eT)
1364+ let eV = $Tuple3(nil, 0, 0)
1365+ func eW (eX,eY) = if ((eY >= eU))
1366+ then eX
1367+ else hv(eX, eT[eY])
1368+
1369+ func eZ (eX,eY) = if ((eY >= eU))
1370+ then eX
13681371 else throw("List size exceeds 6")
13691372
1370- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1373+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
13711374 }
1372- let hw = gu._1
1373- let hx = value(indexOf(hw, max(hw)))
1374- let hy = (gu._3 - 25)
1375- func hz (eQ,db) = {
1376- let dL = if ((db == hx))
1377- then (hw[db] - hy)
1378- else hw[db]
1379- let dP = if ((dL == 0))
1375+ let hx = gv._1
1376+ let hy = value(indexOf(hx, max(hx)))
1377+ let hz = (gv._3 - 25)
1378+ func hA (eR,dc) = {
1379+ let dM = if ((dc == hy))
1380+ then (hx[dc] - hz)
1381+ else hx[dc]
1382+ let dQ = if ((dM == 0))
13801383 then nil
1381- else split(drop(toString(pow(10, 0, dL, 0, 0, DOWN)), 1), "")
1382- let fZ = hr[db]
1383- func hA (hB,hC) = (hB :+ fZ)
1384-
1385- let hD = {
1386- let eS = dP
1387- let eT = size(eS)
1388- let eU = nil
1389- func hE (eW,eX) = if ((eX >= eT))
1390- then eW
1391- else hA(eW, eS[eX])
1392-
1393- func hF (eW,eX) = if ((eX >= eT))
1394- then eW
1384+ else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "")
1385+ let ga = hs[dc]
1386+ func hB (hC,hD) = (hC :+ ga)
1387+
1388+ let hE = {
1389+ let eT = dQ
1390+ let eU = size(eT)
1391+ let eV = nil
1392+ func hF (eX,eY) = if ((eY >= eU))
1393+ then eX
1394+ else hB(eX, eT[eY])
1395+
1396+ func hG (eX,eY) = if ((eY >= eU))
1397+ then eX
13951398 else throw("List size exceeds 25")
13961399
1397- hF(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(eU, 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)
1398- }
1399- (eQ ++ hD)
1400+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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)
1401+ }
1402+ (eR ++ hE)
14001403 }
14011404
1402- let fb = {
1403- let eS = cL
1404- let eT = size(eS)
1405- let eU = nil
1406- func hE (eW,eX) = if ((eX >= eT))
1407- then eW
1408- else hz(eW, eS[eX])
1409-
1410- func hF (eW,eX) = if ((eX >= eT))
1411- then eW
1405+ let fc = {
1406+ let eT = cM
1407+ let eU = size(eT)
1408+ let eV = nil
1409+ func hF (eX,eY) = if ((eY >= eU))
1410+ then eX
1411+ else hA(eX, eT[eY])
1412+
1413+ func hG (eX,eY) = if ((eY >= eU))
1414+ then eX
14121415 else throw("List size exceeds 6")
14131416
1414- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1417+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
14151418 }
1416- func hG (eQ,fA) = (eQ + fb[fA])
1417-
1418- let eS = hq
1419- let eT = size(eS)
1420- let eU = ""
1421- func hH (eW,eX) = if ((eX >= eT))
1422- then eW
1423- else hG(eW, eS[eX])
1424-
1425- func hI (eW,eX) = if ((eX >= eT))
1426- then eW
1419+ func hH (eR,fB) = (eR + fc[fB])
1420+
1421+ let eT = hr
1422+ let eU = size(eT)
1423+ let eV = ""
1424+ func hI (eX,eY) = if ((eY >= eU))
1425+ then eX
1426+ else hH(eX, eT[eY])
1427+
1428+ func hJ (eX,eY) = if ((eY >= eU))
1429+ then eX
14271430 else throw("List size exceeds 25")
14281431
1429- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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)
1430- }
1431-
1432-
1433-func hJ (hK) = {
1434- let gt = split(valueOrElse(getString(hK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1435-[toString(valueOrElse(parseInt(gt[bl]), 0)), if ((size(split(gt[bm], "_")) == aI))
1436- then gt[bm]
1437- else "0_0_0_0_0_0", if ((size(split(gt[bn], "_")) == aI))
1438- then gt[bn]
1439- else "0_0_0_0_0_0", gt[bo]]
1440- }
1441-
1442-
1443-func hL (hM) = {
1444- let fo = split(hM, "_")
1445- ((aL * (parseIntValue(fo[1]) + 1)) * parseIntValue(fo[0]))
1446- }
1447-
1448-
1449-func hN (hO) = {
1450- let hP = hO[bf]
1451- func hQ (eQ,hR) = (eQ + parseIntValue(hR))
1452-
1453- func hS (eQ,hR) = {
1454- let db = eQ._1
1455- let eJ = (((parseIntValue(hR) + bb) - 1) / bb)
1456- $Tuple2((db + 1), (eQ._2 + (eJ * cF)))
1432+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1433+ }
1434+
1435+
1436+func hK (hL) = {
1437+ let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1438+[toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ))
1439+ then gu[bn]
1440+ else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ))
1441+ then gu[bo]
1442+ else "0_0_0_0_0_0", gu[bp]]
1443+ }
1444+
1445+
1446+func hM (hN) = {
1447+ let fp = split(hN, "_")
1448+ ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0]))
1449+ }
1450+
1451+
1452+func hO (hP) = {
1453+ let hQ = hP[bg]
1454+ func hR (eR,hS) = (eR + parseIntValue(hS))
1455+
1456+ func hT (eR,hS) = {
1457+ let dc = eR._1
1458+ let eK = (((parseIntValue(hS) + bc) - 1) / bc)
1459+ $Tuple2((dc + 1), (eR._2 + (eK * cG)))
14571460 }
14581461
1459- let hT = {
1460- let eS = split(hO[bd], "_")
1461- let eT = size(eS)
1462- let eU = 0
1463- func eV (eW,eX) = if ((eX >= eT))
1464- then eW
1465- else hQ(eW, eS[eX])
1466-
1467- func eY (eW,eX) = if ((eX >= eT))
1468- then eW
1462+ let hU = {
1463+ let eT = split(hP[be], "_")
1464+ let eU = size(eT)
1465+ let eV = 0
1466+ func eW (eX,eY) = if ((eY >= eU))
1467+ then eX
1468+ else hR(eX, eT[eY])
1469+
1470+ func eZ (eX,eY) = if ((eY >= eU))
1471+ then eX
14691472 else throw("List size exceeds 6")
14701473
1471- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1474+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
14721475 }
1473- let hU = {
1474- let eS = split(hO[be], "_")
1475- let eT = size(eS)
1476- let eU = 0
1477- func hE (eW,eX) = if ((eX >= eT))
1478- then eW
1479- else hQ(eW, eS[eX])
1480-
1481- func hF (eW,eX) = if ((eX >= eT))
1482- then eW
1476+ let hV = {
1477+ let eT = split(hP[bf], "_")
1478+ let eU = size(eT)
1479+ let eV = 0
1480+ func hF (eX,eY) = if ((eY >= eU))
1481+ then eX
1482+ else hR(eX, eT[eY])
1483+
1484+ func hG (eX,eY) = if ((eY >= eU))
1485+ then eX
14831486 else throw("List size exceeds 6")
14841487
1485- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1488+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
14861489 }
1487- let hV = if ((hP == ""))
1490+ let hW = if ((hQ == ""))
14881491 then 0
1489- else ( let eS = split_4C(hP, "_")
1490- let eT = size(eS)
1491- let eU = $Tuple2(0, 0)
1492- func hH (eW,eX) = if ((eX >= eT))
1493- then eW
1494- else hS(eW, eS[eX])
1495-
1496- func hI (eW,eX) = if ((eX >= eT))
1497- then eW
1492+ else ( let eT = split_4C(hQ, "_")
1493+ let eU = size(eT)
1494+ let eV = $Tuple2(0, 0)
1495+ func hI (eX,eY) = if ((eY >= eU))
1496+ then eX
1497+ else hT(eX, eT[eY])
1498+
1499+ func hJ (eX,eY) = if ((eY >= eU))
1500+ then eX
14981501 else throw("List size exceeds 50")
14991502
1500- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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
1501- ((hT + hU) + hV)
1502- }
1503-
1504-
1505-func hW (hX,hY,hZ) = {
1506- let hM = ((toString(hY) + "_") + toString(hZ))
1507- let ia = hL(hM)
1508- let ib = valueOrElse(getString(hX), (hM + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1509- let ic = split_4C(ib, ":")
1510- let id = hN(ic)
1511- let ie = if ((5 > size(ic)))
1512- then makeString(["0", toString(id), toString((ia - id)), toString(ia)], "_")
1503+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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
1504+ ((hU + hV) + hW)
1505+ }
1506+
1507+
1508+func hX (hY,hZ,ia) = {
1509+ let hN = ((toString(hZ) + "_") + toString(ia))
1510+ let ib = hM(hN)
1511+ let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1512+ let id = split_4C(ic, ":")
1513+ let ie = hO(id)
1514+ let if = if ((5 > size(id)))
1515+ then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_")
15131516 else {
1514- let if = split(ic[bg], "_")
1515- let ig = parseIntValue(if[bh])
1516- let ih = if ((size(if) > 1))
1517- then parseIntValue(if[bi])
1518- else id
1519- makeString([toString(ig), toString(ih), toString(((ia - ig) - ih)), toString(ia)], "_")
1520- }
1521-[ic[bc], if ((size(split(ic[bd], "_")) == aI))
1522- then ic[bd]
1523- else "0_0_0_0_0_0", if ((size(split(ic[be], "_")) == aI))
1524- then ic[be]
1525- else "0_0_0_0_0_0", ic[bf], ie]
1526- }
1527-
1528-
1529-func ii (hO) = {
1530- let ij = hN(hO)
1531- let ik = parseIntValue(split(hO[bg], "_")[bh])
1532- ((hL(hO[bc]) - ij) - ik)
1533- }
1534-
1535-
1536-func il (im,hO,in) = if ((size(im) != 3))
1517+ let ig = split(id[bh], "_")
1518+ let ih = parseIntValue(ig[bi])
1519+ let ii = if ((size(ig) > 1))
1520+ then parseIntValue(ig[bj])
1521+ else ie
1522+ makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_")
1523+ }
1524+[id[bd], if ((size(split(id[be], "_")) == aJ))
1525+ then id[be]
1526+ else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ))
1527+ then id[bf]
1528+ else "0_0_0_0_0_0", id[bg], if]
1529+ }
1530+
1531+
1532+func ij (hP) = {
1533+ let ik = hO(hP)
1534+ let il = parseIntValue(split(hP[bh], "_")[bi])
1535+ ((hM(hP[bd]) - ik) - il)
1536+ }
1537+
1538+
1539+func im (in,hP,io) = if ((size(in) != 3))
15371540 then throw("cargoListStr should contain exactly 2 ':' separators")
15381541 else {
1539- let io = split(im[0], "_")
1540- let ip = split(im[1], "_")
1541- let iq = if ((im[2] == ""))
1542+ let ip = split(in[0], "_")
1543+ let iq = split(in[1], "_")
1544+ let ir = if ((in[2] == ""))
15421545 then nil
1543- else split_4C(im[2], "_")
1544- if ((size(io) != aI))
1546+ else split_4C(in[2], "_")
1547+ if ((size(ip) != aJ))
15451548 then throw("All 6 resources should be passed")
1546- else if ((size(ip) != aI))
1549+ else if ((size(iq) != aJ))
15471550 then throw("All 6 materials should be passed")
15481551 else {
1549- let gY = ii(hO)
1550- let ir = split(hO[bd], "_")
1551- let is = split(hO[be], "_")
1552- let it = if ((hO[bf] == ""))
1552+ let gZ = ij(hP)
1553+ let is = split(hP[be], "_")
1554+ let it = split(hP[bf], "_")
1555+ let iu = if ((hP[bg] == ""))
15531556 then nil
1554- else split_4C(hO[bf], "_")
1555- let gW = split(in[bm], "_")
1556- let iu = split(in[bn], "_")
1557- let iv = if ((in[bo] == ""))
1557+ else split_4C(hP[bg], "_")
1558+ let gX = split(io[bn], "_")
1559+ let iv = split(io[bo], "_")
1560+ let iw = if ((io[bp] == ""))
15581561 then nil
1559- else split_4C(in[bo], "_")
1560- func iw (eQ,hR) = {
1561- let gJ = eQ._1
1562- let ix = parseIntValue(hR)
1563- let iy = parseIntValue(ir[gJ])
1564- let iz = parseIntValue(gW[gJ])
1565- if ((ix == 0))
1566- then $Tuple4((gJ + 1), (eQ._2 :+ ir[gJ]), (eQ._3 :+ gW[gJ]), eQ._4)
1567- else if ((ix > 0))
1568- then if ((ix > iz))
1569- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iz)) + " available"))
1570- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iy + ix))), (eQ._3 :+ toString((iz - ix))), (eQ._4 + ix))
1571- else if ((-(ix) > iy))
1572- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iy)) + " available"))
1573- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iy + ix))), (eQ._3 :+ toString((iz - ix))), (eQ._4 + ix))
1562+ else split_4C(io[bp], "_")
1563+ func ix (eR,hS) = {
1564+ let gK = eR._1
1565+ let iy = parseIntValue(hS)
1566+ let iz = parseIntValue(is[gK])
1567+ let iA = parseIntValue(gX[gK])
1568+ if ((iy == 0))
1569+ then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4)
1570+ else if ((iy > 0))
1571+ then if ((iy > iA))
1572+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available"))
1573+ else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1574+ else if ((-(iy) > iz))
1575+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available"))
1576+ else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
15741577 }
15751578
1576- let fb = {
1577- let eS = io
1578- let eT = size(eS)
1579- let eU = $Tuple4(0, nil, nil, 0)
1580- func eV (eW,eX) = if ((eX >= eT))
1581- then eW
1582- else iw(eW, eS[eX])
1583-
1584- func eY (eW,eX) = if ((eX >= eT))
1585- then eW
1579+ let fc = {
1580+ let eT = ip
1581+ let eU = size(eT)
1582+ let eV = $Tuple4(0, nil, nil, 0)
1583+ func eW (eX,eY) = if ((eY >= eU))
1584+ then eX
1585+ else ix(eX, eT[eY])
1586+
1587+ func eZ (eX,eY) = if ((eY >= eU))
1588+ then eX
15861589 else throw("List size exceeds 6")
15871590
1588- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1591+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
15891592 }
1590- func iA (eQ,hR) = {
1591- let gJ = eQ._1
1592- let ix = parseIntValue(hR)
1593- let iB = parseIntValue(is[gJ])
1594- let iC = parseIntValue(iu[gJ])
1595- if ((ix == 0))
1596- then $Tuple4((gJ + 1), (eQ._2 :+ is[gJ]), (eQ._3 :+ iu[gJ]), eQ._4)
1597- else if ((ix > 0))
1598- then if ((ix > iC))
1599- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iC)) + " available"))
1600- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iB + ix))), (eQ._3 :+ toString((iC - ix))), (eQ._4 + ix))
1601- else if ((-(ix) > iB))
1602- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iB)) + " available"))
1603- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iB + ix))), (eQ._3 :+ toString((iC - ix))), (eQ._4 + ix))
1593+ func iB (eR,hS) = {
1594+ let gK = eR._1
1595+ let iy = parseIntValue(hS)
1596+ let iC = parseIntValue(it[gK])
1597+ let iD = parseIntValue(iv[gK])
1598+ if ((iy == 0))
1599+ then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4)
1600+ else if ((iy > 0))
1601+ then if ((iy > iD))
1602+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available"))
1603+ else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1604+ else if ((-(iy) > iC))
1605+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available"))
1606+ else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
16041607 }
16051608
1606- let gp = {
1607- let eS = ip
1608- let eT = size(eS)
1609- let eU = $Tuple4(0, nil, nil, fb._4)
1610- func hE (eW,eX) = if ((eX >= eT))
1611- then eW
1612- else iA(eW, eS[eX])
1613-
1614- func hF (eW,eX) = if ((eX >= eT))
1615- then eW
1609+ let gq = {
1610+ let eT = iq
1611+ let eU = size(eT)
1612+ let eV = $Tuple4(0, nil, nil, fc._4)
1613+ func hF (eX,eY) = if ((eY >= eU))
1614+ then eX
1615+ else iB(eX, eT[eY])
1616+
1617+ func hG (eX,eY) = if ((eY >= eU))
1618+ then eX
16161619 else throw("List size exceeds 6")
16171620
1618- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1621+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
16191622 }
1620- func iD (eQ,hR) = {
1621- let gJ = eQ._1
1622- let ix = parseIntValue(hR)
1623- let iE = if ((size(it) > gJ))
1624- then parseIntValue(it[gJ])
1623+ func iE (eR,hS) = {
1624+ let gK = eR._1
1625+ let iy = parseIntValue(hS)
1626+ let iF = if ((size(iu) > gK))
1627+ then parseIntValue(iu[gK])
16251628 else 0
1626- let iF = if ((size(iv) > gJ))
1627- then parseIntValue(iv[gJ])
1629+ let iG = if ((size(iw) > gK))
1630+ then parseIntValue(iw[gK])
16281631 else 0
1629- if ((ix == 0))
1630- then $Tuple4((gJ + 1), (eQ._2 :+ toString(iE)), (eQ._3 :+ toString(iF)), eQ._4)
1631- else if ((ix > 0))
1632- then if ((ix > iF))
1633- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iF)) + " available"))
1632+ if ((iy == 0))
1633+ then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4)
1634+ else if ((iy > 0))
1635+ then if ((iy > iG))
1636+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available"))
16341637 else {
1635- let fS = (eG((iE + ix), bb) - eG(iE, bb))
1636- $Tuple4((gJ + 1), (eQ._2 :+ toString((iE + ix))), (eQ._3 :+ toString((iF - ix))), (eQ._4 + fS))
1638+ let fT = (eH((iF + iy), bc) - eH(iF, bc))
1639+ $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
16371640 }
1638- else if ((-(ix) > iE))
1639- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iE)) + " available"))
1641+ else if ((-(iy) > iF))
1642+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available"))
16401643 else {
1641- let fS = (eG((iE + ix), bb) - eG(iE, bb))
1642- $Tuple4((gJ + 1), (eQ._2 :+ toString((iE + ix))), (eQ._3 :+ toString((iF - ix))), (eQ._4 + fS))
1644+ let fT = (eH((iF + iy), bc) - eH(iF, bc))
1645+ $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
16431646 }
16441647 }
16451648
1646- let gt = if ((size(iq) != 0))
1649+ let gu = if ((size(ir) != 0))
16471650 then {
1648- let eS = iq
1649- let eT = size(eS)
1650- let eU = $Tuple4(0, nil, nil, gp._4)
1651- func hH (eW,eX) = if ((eX >= eT))
1652- then eW
1653- else iD(eW, eS[eX])
1654-
1655- func hI (eW,eX) = if ((eX >= eT))
1656- then eW
1651+ let eT = ir
1652+ let eU = size(eT)
1653+ let eV = $Tuple4(0, nil, nil, gq._4)
1654+ func hI (eX,eY) = if ((eY >= eU))
1655+ then eX
1656+ else iE(eX, eT[eY])
1657+
1658+ func hJ (eX,eY) = if ((eY >= eU))
1659+ then eX
16571660 else throw("List size exceeds 50")
16581661
1659- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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)
1662+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
16601663 }
1661- else $Tuple4(0, it, iv, gp._4)
1662- let iG = gt._4
1663- if ((iG > gY))
1664- then throw((((("Attempt to put total " + toString(iG)) + " stuff, but only ") + toString(gY)) + " warehouse space left"))
1665- else $Tuple7(makeString(fb._2, "_"), makeString(gp._2, "_"), makeString_2C(gt._2, "_"), makeString(fb._3, "_"), makeString(gp._3, "_"), makeString_2C(gt._3, "_"), iG)
1664+ else $Tuple4(0, iu, iw, gq._4)
1665+ let iH = gu._4
1666+ if ((iH > gZ))
1667+ then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left"))
1668+ else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH)
16661669 }
16671670 }
16681671
16691672
1670-func iH (iI,iJ) = {
1671- let bP = toString(iI)
1672- let iK = he(toBigInt(iJ))
1673- let iL = valueOrElse(getInteger(en()), (em + 1))
1674- let er = toString(iL)
1675- let hn = toInt((iK % eg))
1676- let gM = hl(iK, hn)
1677- let du = aT[hn]
1678- let iM = Issue(eF(er, "S"), makeString([er, "S", gM, du], "_"), 1, 0, false)
1679- let bt = calculateAssetId(iM)
1680- let iN = toBase58String(bt)
1681- $Tuple2([IntegerEntry(en(), (iL + 1)), iM, StringEntry(eq(er), iN), StringEntry(bs(iN), bP), StringEntry(et(er), bP), IntegerEntry(bC(iN), 0), IntegerEntry(es(iN, bP), 0), ScriptTransfer(iI, 1, bt)], $Tuple2(iN, du))
1682- }
1683-
1684-
1685-func iO (bP,iP,iQ) = if (!(sigVerify_8Kb(iP, iQ, cx)))
1673+func iI (iJ,iK) = {
1674+ let bQ = toString(iJ)
1675+ let iL = hf(toBigInt(iK))
1676+ let iM = valueOrElse(getInteger(eo()), (en + 1))
1677+ let es = toString(iM)
1678+ let ho = toInt((iL % eh))
1679+ let gN = hm(iL, ho)
1680+ let dv = aU[ho]
1681+ let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false)
1682+ let bu = calculateAssetId(iN)
1683+ let iO = toBase58String(bu)
1684+ $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv))
1685+ }
1686+
1687+
1688+func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy)))
16861689 then throw("signature does not match")
16871690 else {
1688- let fo = split_4C(toUtf8String(iP), ";")
1689- let iR = split_4C(fo[0], "|")
1690- let iS = split(iR[eB], "_")
1691- let iT = parseIntValue(iS[0])
1692- let iU = parseIntValue(iS[1])
1693- let iV = split(fo[1], ":")
1694- let iW = iV[0]
1695- let iX = parseIntValue(iR[eC])
1696- if (if ((iX > (lastBlock.timestamp + dY)))
1691+ let fp = split_4C(toUtf8String(iQ), ";")
1692+ let iS = split_4C(fp[0], "|")
1693+ let iT = split(iS[eC], "_")
1694+ let iU = parseIntValue(iT[0])
1695+ let iV = parseIntValue(iT[1])
1696+ let iW = split(fp[1], ":")
1697+ let iX = iW[0]
1698+ let iY = parseIntValue(iS[eD])
1699+ if (if ((iY > (lastBlock.timestamp + dZ)))
16971700 then true
1698- else ((lastBlock.timestamp - dY) > iX))
1699- then throw(((("signature outdated: logTime=" + toString(iX)) + ", bcTime=") + toString(lastBlock.timestamp)))
1701+ else ((lastBlock.timestamp - dZ) > iY))
1702+ then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp)))
17001703 else {
1701- let iY = iV[1]
1702- let iZ = valueOrElse(getString(dJ(bP)), "")
1703- if ((iZ != iY))
1704- then throw(((("Tx ids don't match! In state: " + iZ) + ", in msg: ") + iY))
1704+ let iZ = iW[1]
1705+ let ja = valueOrElse(getString(dK(bQ)), "")
1706+ if ((ja != iZ))
1707+ then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
17051708 else {
1706- let B = valueOrErrorMessage(getString(bL(bP)), "You don't have a duck staked")
1707- let ja = A(B)
1708- let jb = ai(valueOrElse(getInteger(E(B)), 0))
1709- let jc = valueOrElse(getInteger(ja), jb)
1710- if ((jc != iT))
1711- then throw(((("oldHealth=" + toString(jc)) + " from state does not match one from flight log=") + toString(iT)))
1712- else if ((0 >= iT))
1709+ let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1710+ let jb = A(B)
1711+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
1712+ let jd = valueOrElse(getInteger(jb), jc)
1713+ if ((jd != iU))
1714+ then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU)))
1715+ else if ((0 >= iU))
17131716 then throw("You can't fly with zero health")
1714- else if (!(gv(B)))
1717+ else if (!(gw(B)))
17151718 then throw("Equipment incompatible")
17161719 else {
1717- let jd = if ((size(iR) > eD))
1718- then iR[eD]
1720+ let je = if ((size(iS) > eE))
1721+ then iS[eE]
17191722 else ""
1720- let je = if ((size(iR) > eE))
1721- then iR[eE]
1723+ let jf = if ((size(iS) > eF))
1724+ then iS[eF]
17221725 else ""
1723- let jf = if (if ((iU > 0))
1724- then (jd == "$")
1726+ let jg = if (if ((iV > 0))
1727+ then (je == "$")
17251728 else false)
1726- then dA(invoke(dc, "sendUsdtPrize", [bP], nil))
1729+ then dB(invoke(dd, "sendUsdtPrize", [bQ], nil))
17271730 else 0
1728- $Tuple5(iU, B, jf, iW, je)
1731+ $Tuple5(iV, B, jg, iX, jf)
17291732 }
17301733 }
17311734 }
17321735 }
17331736
17341737
1735-func jg (Q,jh) = {
1736- let hZ = valueOrElse(getInteger(bC(Q)), 0)
1737- let ji = valueOrElse(getInteger(bw(aH, Q)), 0)
1738- let jj = (hZ / 6)
1739- let jk = (hZ / 7)
1740- ((aK + fraction(aK, ((hZ + jj) + (2 * jk)), 5)) + fraction(aK, ji, (jh * 5)))
1741- }
1742-
1743-
1744-func jl (c,jm,jn) = {
1745- let jo = if ((jm == ey))
1746- then $Tuple2(jn, valueOrElse(getString(bL(c)), ""))
1738+func jh (Q,ji) = {
1739+ let ia = valueOrElse(getInteger(bD(Q)), 0)
1740+ let jj = valueOrElse(getInteger(bx(aI, Q)), 0)
1741+ let jk = (ia / 6)
1742+ let jl = (ia / 7)
1743+ ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5)))
1744+ }
1745+
1746+
1747+func jm (c,jn,jo) = {
1748+ let jp = if ((jn == ez))
1749+ then $Tuple2(jo, valueOrElse(getString(bM(c)), ""))
17471750 else {
1748- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1749- let jp = valueOrElse(getString(bN(B)), aM)
1750- let ci = split(value(jp), "_")
1751- if ((ci[bq] != "L"))
1752- then throw((("Duck location type is " + ci[bq]) + ", but should be L"))
1753- else $Tuple2(ci[br], B)
1754- }
1755- let Q = jo._1
1756- let jq = jo._2
1757- let jr = value(assetInfo(fromBase58String(Q)))
1758- let js = bv(Q)
1759- let jt = valueOrErrorMessage(getInteger(js), (("Land " + jr.name) + " is not staked"))
1760- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
1761- if ((ju != c))
1762- then throw((aE + " is not yours"))
1751+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1752+ let jq = valueOrElse(getString(bO(B)), aN)
1753+ let cj = split(value(jq), "_")
1754+ if ((cj[br] != "L"))
1755+ then throw((("Duck location type is " + cj[br]) + ", but should be L"))
1756+ else $Tuple2(cj[bs], B)
1757+ }
1758+ let Q = jp._1
1759+ let jr = jp._2
1760+ let js = value(assetInfo(fromBase58String(Q)))
1761+ let jt = bw(Q)
1762+ let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked"))
1763+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1764+ if ((jv != c))
1765+ then throw((aF + " is not yours"))
17631766 else {
1764- let jv = split(jr.description, "_")
1765- $Tuple4(jq, Q, jv, jt)
1766- }
1767- }
1768-
1769-
1770-func jw (c,eH,jm,jn) = if ((0 > eH))
1767+ let jw = split(js.description, "_")
1768+ $Tuple4(jr, Q, jw, ju)
1769+ }
1770+ }
1771+
1772+
1773+func jx (c,eI,jn,jo) = if ((0 > eI))
17711774 then throw("Negative amount")
17721775 else {
1773- let fZ = jl(c, jm, jn)
1774- let dG = fZ._3[dj]
1775- let gF = gL(fZ._3[dk])
1776- let gP = (lastBlock.timestamp - fZ._4)
1777- if ((0 > gP))
1778- then throw(((("Saved timestamp is in future, saved = " + toString(fZ._4)) + ", current = ") + toString(lastBlock.timestamp)))
1776+ let ga = jm(c, jn, jo)
1777+ let dH = ga._3[dk]
1778+ let gG = gM(ga._3[dl])
1779+ let gQ = (lastBlock.timestamp - ga._4)
1780+ if ((0 > gQ))
1781+ then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp)))
17791782 else {
1780- let jh = dF(dG)
1781- let jx = jg(fZ._2, jh)
1782- let jy = fraction(gP, (jx * jh), a)
1783- if ((eH > jy))
1784- then throw(((("Not enough resources, available = " + toString(jy)) + ", requested = ") + toString(eH)))
1783+ let ji = dG(dH)
1784+ let jy = jh(ga._2, ji)
1785+ let jz = fraction(gQ, (jy * ji), a)
1786+ if ((eI > jz))
1787+ then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI)))
17851788 else {
1786- let jz = fraction((jy - eH), a, (jx * jh))
1787- let jA = (lastBlock.timestamp - jz)
1788- let hY = (jh / cG)
1789- let gX = gT(gF, (gP - jz), hY, jx)
1790- let hX = bB(fZ._2)
1791- let hZ = valueOrElse(getInteger(bC(fZ._2)), 0)
1792- let hO = hW(hX, hY, hZ)
1793- let if = split(hO[bg], "_")
1794- let gY = parseIntValue(if[bj])
1795- if (if ((jm == ey))
1796- then (eH > gY)
1789+ let jA = fraction((jz - eI), a, (jy * ji))
1790+ let jB = (lastBlock.timestamp - jA)
1791+ let hZ = (ji / cH)
1792+ let gY = gU(gG, (gQ - jA), hZ, jy)
1793+ let hY = bC(ga._2)
1794+ let ia = valueOrElse(getInteger(bD(ga._2)), 0)
1795+ let hP = hX(hY, hZ, ia)
1796+ let ig = split(hP[bh], "_")
1797+ let gZ = parseIntValue(ig[bk])
1798+ if (if ((jn == ez))
1799+ then (eI > gZ)
17971800 else false)
1798- then throw((("Only " + toString(gY)) + " space left in warehouse"))
1801+ then throw((("Only " + toString(gZ)) + " space left in warehouse"))
17991802 else {
1800- let hK = bM(fZ._1)
1801- let in = hJ(hK)
1802- let gW = split(in[bm], "_")
1803- let gV = split(hO[bd], "_")
1804- let jB = if ((jm == ey))
1805- then $Tuple4(gN(gV, gF, (gP - jz), hY, jx), in[bm], (parseIntValue(if[bi]) + gX._2), (parseIntValue(if[bj]) - gX._2))
1806- else if ((jm == ez))
1807- then $Tuple4(hO[bd], gN(gW, gF, (gP - jz), hY, jx), parseIntValue(if[bi]), parseIntValue(if[bj]))
1803+ let hL = bN(ga._1)
1804+ let io = hK(hL)
1805+ let gX = split(io[bn], "_")
1806+ let gW = split(hP[be], "_")
1807+ let jC = if ((jn == ez))
1808+ then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2))
1809+ else if ((jn == eA))
1810+ then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk]))
18081811 else {
1809- let jC = gU(gV, gW, gX, gY)
1810- let jD = min([parseIntValue(if[bj]), gX._2])
1811- $Tuple4(jC._1, jC._2, (parseIntValue(if[bi]) + jD), (parseIntValue(if[bj]) - jD))
1812+ let jD = gV(gW, gX, gY, gZ)
1813+ let jE = min([parseIntValue(ig[bk]), gY._2])
1814+ $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE))
18121815 }
1813- let jE = jB._1
1814- let jF = jB._2
1815- let jG = jB._3
1816- let jH = jB._4
1817- $Tuple5([IntegerEntry(bv(fZ._2), jA), IntegerEntry(by(aE, fZ._2, c), jA)], hK, [in[bl], jF, in[bn], in[bo]], hX, [hO[bc], jE, hO[be], hO[bf], makeString([if[bh], toString(jG), toString(jH), if[bk]], "_")])
1816+ let jF = jC._1
1817+ let jG = jC._2
1818+ let jH = jC._3
1819+ let jI = jC._4
1820+ $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")])
18181821 }
18191822 }
18201823 }
18211824 }
18221825
18231826
1824-func jI (c,Q,jh,jm) = {
1825- let js = bv(Q)
1826- let jt = value(getInteger(js))
1827- let jy = (fraction((lastBlock.timestamp - jt), jg(Q, jh), a) * jh)
1828- jw(c, jy, jm, Q)
1829- }
1830-
1831-
1832-func jJ (fd,iI,jK,Q) = {
1833- let c = toString(iI)
1834- let fZ = jl(c, eA, Q)
1835- let jh = dF(fZ._3[dj])
1836- let jL = bC(fZ._2)
1837- let jM = valueOrElse(getInteger(jL), 0)
1838- if (if (!(ct))
1839- then (jM >= 3)
1827+func jJ (c,Q,ji,jn) = {
1828+ let jt = bw(Q)
1829+ let ju = value(getInteger(jt))
1830+ let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji)
1831+ jx(c, jz, jn, Q)
1832+ }
1833+
1834+
1835+func jK (fe,iJ,jL,Q) = {
1836+ let c = toString(iJ)
1837+ let ga = jm(c, eB, Q)
1838+ let ji = dG(ga._3[dk])
1839+ let jM = bD(ga._2)
1840+ let jN = valueOrElse(getInteger(jM), 0)
1841+ if (if (!(cu))
1842+ then (jN >= 3)
18401843 else false)
18411844 then throw("Currently max infrastructure level = 3")
18421845 else {
1843- let jN = ((sqrt(jh, 0, 0, DOWN) / 5) + 2)
1844- let an = (jM + 1)
1845- if (if (ct)
1846- then (an > jN)
1846+ let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2)
1847+ let ao = (jN + 1)
1848+ if (if (cu)
1849+ then (ao > jO)
18471850 else false)
1848- then throw(("Currently max infrastructure level = " + toString(jN)))
1851+ then throw(("Currently max infrastructure level = " + toString(jO)))
18491852 else {
1850- let jO = fraction(eb, (jh * an), cG)
1851- if (if (!(fd))
1852- then (jK != jO)
1853+ let jP = fraction(ec, (ji * ao), cH)
1854+ if (if (!(fe))
1855+ then (jL != jP)
18531856 else false)
1854- then throw(("Payment attached should be " + toString(jO)))
1857+ then throw(("Payment attached should be " + toString(jP)))
18551858 else {
1856- let hK = bM(fZ._1)
1857- let in = hJ(hK)
1858- let jP = split(in[bn], "_")
1859- let jQ = fraction(cB, (jh * an), cG)
1860- let jR = makeString(fc(fd, jP, jQ), "_")
1861- let jS = jI(c, fZ._2, jh, eA)
1862- let jT = jS._5
1863- let jU = hL(jT[bc])
1864- let jV = makeString([split(jT[bc], "_")[0], toString(an)], "_")
1865- let jW = hL(jV)
1866- let if = split(jT[bg], "_")
1867- let jX = makeString([if[bh], if[bi], toString(((parseIntValue(if[bj]) + jW) - jU)), toString(jW)], "_")
1868- $Tuple3(([IntegerEntry(jL, an), IntegerEntry(es(fZ._2, c), an), StringEntry(hK, makeString([in[bl], jS._3[bm], jR, in[bo]], ":")), StringEntry(jS._4, makeString([jV, jT[bd], jT[be], jT[bf], jX], ":"))] ++ jS._1), an, jQ)
1859+ let hL = bN(ga._1)
1860+ let io = hK(hL)
1861+ let jQ = split(io[bo], "_")
1862+ let jR = fraction(cC, (ji * ao), cH)
1863+ let jS = makeString(fd(fe, jQ, jR), "_")
1864+ let jT = jJ(c, ga._2, ji, eB)
1865+ let jU = jT._5
1866+ let jV = hM(jU[bd])
1867+ let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_")
1868+ let jX = hM(jW)
1869+ let ig = split(jU[bh], "_")
1870+ let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_")
1871+ $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR)
18691872 }
18701873 }
18711874 }
18721875 }
18731876
18741877
1875-func jY (jZ,ka,kb,kc) = {
1876- let ah = valueOrElse(getInteger(ka), 0)
1877- let am = (ah + kc)
1878- let kd = ak(valueOrElse(getInteger(jZ), 0), am)
1879- $Tuple2([IntegerEntry(jZ, kd[0]), IntegerEntry(ka, am), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + kd[1]))], am)
1880- }
1881-
1882-
1883-func ke (B,kc) = {
1884- let jr = value(assetInfo(fromBase58String(B)))
1885- let c = valueOrErrorMessage(getString(bK(B)), (("NFT " + jr.name) + " is orphaned"))
1886- if (if (if (cu)
1887- then (jr.issuer == this)
1878+func jZ (ka,kb,kc,kd) = {
1879+ let ai = valueOrElse(getInteger(kb), 0)
1880+ let an = (ai + kd)
1881+ let ke = al(valueOrElse(getInteger(ka), 0), an)
1882+ $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an)
1883+ }
1884+
1885+
1886+func kf (B,kd) = {
1887+ let js = value(assetInfo(fromBase58String(B)))
1888+ let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned"))
1889+ if (if (if (cv)
1890+ then (js.issuer == this)
18881891 else false)
1889- then contains(jr.name, aG)
1892+ then contains(js.name, aH)
18901893 else false)
1891- then jY(I(c), H(c), J(c), kc)
1892- else jY(E(B), D(B), F(B), kc)
1893- }
1894-
1895-
1896-func kf (c,kc) = jY(I(c), H(c), J(c), kc)
1897-
1898-
1899-func kg (c) = {
1900- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1901- let kh = bG(c)
1902- let ki = getString(kh)
1903- if (!(isDefined(ki)))
1894+ then jZ(I(c), H(c), J(c), kd)
1895+ else jZ(E(B), D(B), F(B), kd)
1896+ }
1897+
1898+
1899+func kg (c,kd) = jZ(I(c), H(c), J(c), kd)
1900+
1901+
1902+func kh (c) = {
1903+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1904+ let ki = bH(c)
1905+ let kj = getString(ki)
1906+ if (!(isDefined(kj)))
19041907 then throw("You are not eligible for ONBOARD artifact")
19051908 else {
1906- let kj = bI(c)
1907- let kk = getString(kj)
1908- if (isDefined(kk))
1909- then throw(("You already used your ONBOARD artifact on duck " + value(kk)))
1909+ let kk = bJ(c)
1910+ let kl = getString(kk)
1911+ if (isDefined(kl))
1912+ then throw(("You already used your ONBOARD artifact on duck " + value(kl)))
19101913 else {
1911- let kl = bH(B)
1912- let km = getString(kl)
1913- if (isDefined(km))
1914- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(km)))
1915- else ([StringEntry(kj, B), StringEntry(kl, c)] ++ ke(B, ae)._1)
1914+ let km = bI(B)
1915+ let kn = getString(km)
1916+ if (isDefined(kn))
1917+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn)))
1918+ else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1)
19161919 }
19171920 }
19181921 }
19191922
19201923
1921-func kn (c,jn) = {
1922- let fZ = jl(c, eA, jn)
1923- let Q = fZ._2
1924- let jh = dF(fZ._3[dj])
1925- let ko = bw(aH, Q)
1926- if ((valueOrElse(getInteger(ko), 0) > 0))
1924+func ko (c,jo) = {
1925+ let ga = jm(c, eB, jo)
1926+ let Q = ga._2
1927+ let ji = dG(ga._3[dk])
1928+ let kp = bx(aI, Q)
1929+ if ((valueOrElse(getInteger(kp), 0) > 0))
19271930 then throw("Presale artifact is already activated")
1928- else if ((parseIntValue(fZ._3[di]) > em))
1929- then throw((((aE + " ") + Q) + " is not eligible for presale artifact"))
1931+ else if ((parseIntValue(ga._3[dj]) > en))
1932+ then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
19301933 else {
1931- let jS = jI(c, Q, jh, eA)
1932- (((jS._1 :+ IntegerEntry(ko, jh)) :+ StringEntry(jS._2, makeString(jS._3, ":"))) :+ StringEntry(jS._4, makeString(jS._5, ":")))
1934+ let jT = jJ(c, Q, ji, eB)
1935+ (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":")))
19331936 }
19341937 }
19351938
19361939
1937-func kp (B) = {
1938- let ch = valueOrElse(getInteger(dg, bS), 0)
1939- let jp = split(valueOrElse(getString(bN(B)), aM), "_")
1940- let az = lastBlock.timestamp
1941- let cj = cb(dg, ch)
1942- let cd = cj[bX]
1943- let ce = cj[bY]
1944- if ((jp[bq] != "T"))
1940+func kq (B) = {
1941+ let ci = valueOrElse(getInteger(dh, bT), 0)
1942+ let jq = split(valueOrElse(getString(bO(B)), aN), "_")
1943+ let aA = lastBlock.timestamp
1944+ let ck = cc(dh, ci)
1945+ let ce = ck[bY]
1946+ let cf = ck[bZ]
1947+ if ((jq[br] != "T"))
19451948 then false
1946- else if (if (if ((parseIntValue(jp[bp]) == ch))
1947- then (ce[ca] == "INPROGRESS")
1949+ else if (if (if ((parseIntValue(jq[bq]) == ci))
1950+ then (cf[cb] == "INPROGRESS")
19481951 else false)
1949- then (parseIntValue(cd[bZ]) > az)
1952+ then (parseIntValue(ce[ca]) > aA)
19501953 else false)
19511954 then throw("Your duck is taking part in the tournament")
1952- else dE(invoke(this, "exitTournamentInternal", [B], nil))
1953- }
1954-
1955-
1956-func kq (kr,an,ks,c,kt,ku) = {
1957- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1958- if (kp(B))
1955+ else dF(invoke(this, "exitTournamentInternal", [B], nil))
1956+ }
1957+
1958+
1959+func kr (ks,ao,kt,c,ku,kv) = {
1960+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1961+ if (kq(B))
19591962 then throw("mergeInternal_checkTournament")
19601963 else {
1961- func kv (eQ,Q) = {
1962- let jr = value(assetInfo(fromBase58String(Q)))
1963- let js = bv(Q)
1964- let jt = valueOrErrorMessage(getInteger(js), (("NFT " + jr.name) + " is not staked"))
1965- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
1966- if ((ju != c))
1967- then throw((aE + " is not yours"))
1964+ func kw (eR,Q) = {
1965+ let js = value(assetInfo(fromBase58String(Q)))
1966+ let jt = bw(Q)
1967+ let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked"))
1968+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1969+ if ((jv != c))
1970+ then throw((aF + " is not yours"))
19681971 else {
1969- let jv = split(jr.description, "_")
1970- let du = jv[dl]
1971- if (if ((eQ._3 != ""))
1972- then (eQ._3 != du)
1972+ let jw = split(js.description, "_")
1973+ let dv = jw[dm]
1974+ if (if ((eR._3 != ""))
1975+ then (eR._3 != dv)
19731976 else false)
19741977 then throw("Lands should be on the same continent to merge")
19751978 else {
1976- let dG = jv[dj]
1977- let kw = eQ._1
1978- let gJ = valueOrErrorMessage(indexOf(kw, dG), "You haven't passed all the lands needed")
1979- let kx = (take(kw, gJ) + drop(kw, (gJ + 1)))
1980- let jh = dF(dG)
1981- let ky = (eQ._2 + valueOrElse(getInteger(bw(aH, Q)), 0))
1982- let hZ = valueOrElse(getInteger(bC(Q)), 0)
1983- let kz = {
1984- let cy = dG
1985- if (("S" == cy))
1979+ let dH = jw[dk]
1980+ let kx = eR._1
1981+ let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed")
1982+ let ky = (take(kx, gK) + drop(kx, (gK + 1)))
1983+ let ji = dG(dH)
1984+ let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0))
1985+ let ia = valueOrElse(getInteger(bD(Q)), 0)
1986+ let kA = {
1987+ let cz = dH
1988+ if (("S" == cz))
19861989 then 3
1987- else if (("M" == cy))
1990+ else if (("M" == cz))
19881991 then 4
1989- else if (("L" == cy))
1992+ else if (("L" == cz))
19901993 then 5
1991- else if (("XL" == cy))
1994+ else if (("XL" == cz))
19921995 then 6
19931996 else throw("Only S, M, L, XL can merge")
19941997 }
1995- if ((hZ != kz))
1998+ if ((ia != kA))
19961999 then throw("All lands should be maxed to merge")
19972000 else {
1998- let er = jv[di]
1999- let gF = gL(jv[dk])
2000- let gP = (lastBlock.timestamp - jt)
2001- if ((0 > gP))
2002- then throw(((("Saved timestamp is in future, saved = " + toString(jt)) + ", current = ") + toString(lastBlock.timestamp)))
2001+ let es = jw[dj]
2002+ let gG = gM(jw[dl])
2003+ let gQ = (lastBlock.timestamp - ju)
2004+ if ((0 > gQ))
2005+ then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp)))
20032006 else {
2004- let jx = jg(Q, jh)
2005- let hY = (jh / cG)
2006- let jF = gN(split(eQ._4, "_"), gF, gP, hY, jx)
2007- let fa = gD(eQ._6, gF, hY, -1)
2008- let kA = gD(eQ._10, gF, hY, -1)
2009- let ht = gD(eQ._9, gF, hY, 1)
2010- let kB = eQ._7
2011- let db = indexOf(kB, Q)
2012- if (!(isDefined(db)))
2007+ let jy = jh(Q, ji)
2008+ let hZ = (ji / cH)
2009+ let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy)
2010+ let fb = gE(eR._6, gG, hZ, -1)
2011+ let kB = gE(eR._10, gG, hZ, -1)
2012+ let hu = gE(eR._9, gG, hZ, 1)
2013+ let kC = eR._7
2014+ let dc = indexOf(kC, Q)
2015+ if (!(isDefined(dc)))
20132016 then throw(("Your staked lands don't contain " + Q))
20142017 else {
2015- let kC = bu(Q)
2016- let kD = valueOrElse(getString(kC), "")
2017- $Tuple10(kx, ky, du, jF, ((((((((((((eQ._5 :+ DeleteEntry(bv(Q))) :+ DeleteEntry(by(aE, Q, c))) :+ DeleteEntry(eq(er))) :+ DeleteEntry(bs(Q))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(es(Q, c))) :+ DeleteEntry(bw(aH, Q))) :+ DeleteEntry(et(er))) :+ DeleteEntry(bB(Q))) :+ DeleteEntry(kC)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kD != ""))
2018- then [DeleteEntry(eo(kD))]
2019- else nil)), fa, removeByIndex(kB, value(db)), (eQ._8 + jh), ht, kA)
2018+ let kD = bv(Q)
2019+ let kE = valueOrElse(getString(kD), "")
2020+ $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != ""))
2021+ then [DeleteEntry(ep(kE))]
2022+ else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB)
20202023 }
20212024 }
20222025 }
20242027 }
20252028 }
20262029
2027- let hK = bM(B)
2028- let in = hJ(hK)
2029- let gE = split(valueOrElse(getString(ds()), "0_0_0_0_0_0"), "_")
2030- let kE = dv(c)
2031- let kF = getString(kE)
2032- let kG = if (isDefined(kF))
2033- then split_51C(value(kF), "_")
2030+ let hL = bN(B)
2031+ let io = hK(hL)
2032+ let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
2033+ let kF = dw(c)
2034+ let kG = getString(kF)
2035+ let kH = if (isDefined(kG))
2036+ then split_51C(value(kG), "_")
20342037 else nil
2035- let kH = split(value(assetInfo(fromBase58String(kt[0]))).description, "_")[dl]
2036- let kI = split(valueOrElse(getString(dt(kH)), "0_0_0_0_0_0"), "_")
2037- let fb = {
2038- let eS = kt
2039- let eT = size(eS)
2040- let eU = $Tuple10(ks, 0, "", in[bm], nil, gE, kG, 0, split("0_0_0_0_0_0", "_"), kI)
2041- func eV (eW,eX) = if ((eX >= eT))
2042- then eW
2043- else kv(eW, eS[eX])
2044-
2045- func eY (eW,eX) = if ((eX >= eT))
2046- then eW
2038+ let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm]
2039+ let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_")
2040+ let fc = {
2041+ let eT = ku
2042+ let eU = size(eT)
2043+ let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ)
2044+ func eW (eX,eY) = if ((eY >= eU))
2045+ then eX
2046+ else kw(eX, eT[eY])
2047+
2048+ func eZ (eX,eY) = if ((eY >= eU))
2049+ then eX
20472050 else throw("List size exceeds 5")
20482051
2049- eY(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5)
2052+ eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
20502053 }
2051- let du = fb._3
2052- let hn = valueOrErrorMessage(indexOf(aT, du), ("Unknown continent: " + du))
2053- let gM = hs(fb._9, (dF(kr) / cG))
2054- let iL = valueOrElse(getInteger(en()), (em + 1))
2055- let kJ = toString(iL)
2056- let iM = Issue(eF(kJ, kr), makeString([kJ, kr, gM, du], "_"), 1, 0, false)
2057- let bt = calculateAssetId(iM)
2058- let kK = toBase58String(bt)
2059- let jR = makeString(fc((ku > 0), split(in[bn], "_"), ku), "_")
2060- let kL = dw(c)
2061- let kM = valueOrElse(getInteger(kL), 0)
2062- $Tuple2((((((((((((((((fb._5 :+ (if ((size(fb._7) > 0))
2063- then StringEntry(kE, makeString_11C(fb._7, "_"))
2064- else DeleteEntry(kE))) :+ IntegerEntry(kL, if ((fb._8 > kM))
2054+ let dv = fc._3
2055+ let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv))
2056+ let gN = ht(fc._9, (dG(ks) / cH))
2057+ let iM = valueOrElse(getInteger(eo()), (en + 1))
2058+ let kK = toString(iM)
2059+ let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false)
2060+ let bu = calculateAssetId(iN)
2061+ let kL = toBase58String(bu)
2062+ let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_")
2063+ let kM = dx(c)
2064+ let kN = valueOrElse(getInteger(kM), 0)
2065+ $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0))
2066+ then StringEntry(kF, makeString_11C(fc._7, "_"))
2067+ else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN))
20652068 then 0
2066- else (kM - fb._8))) :+ IntegerEntry(en(), (iL + 1))) :+ iM) :+ StringEntry(eq(kJ), kK)) :+ StringEntry(bs(kK), c)) :+ StringEntry(et(kJ), c)) :+ IntegerEntry(bw(aH, kK), fb._2)) :+ IntegerEntry(bC(kK), an)) :+ IntegerEntry(es(kK, c), an)) :+ StringEntry(hK, makeString([in[bl], fb._4, jR, in[bo]], ":"))) :+ StringEntry(ds(), makeString(fb._6, "_"))) :+ StringEntry(dt(du), makeString(fb._10, "_"))) :+ StringEntry(bN(B), makeString([du, "L", kK], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bt)), kK)
2067- }
2068- }
2069-
2070-
2071-func kN (c,kt) = kq("M", 3, "SSSS", c, kt, 0)
2072-
2073-
2074-func kO (c,kt) = kq("L", 4, "SMM", c, kt, (cB * 4))
2075-
2076-
2077-func kP (c,kt) = kq("XL", 5, "SSSML", c, kt, (cB * 47))
2078-
2079-
2080-func kQ (c,kt) = kq("XXL", 6, "LXL", c, kt, (cB * 54))
2081-
2082-
2083-func kR (c,kt) = {
2084- let cy = size(kt)
2085- if ((4 == cy))
2086- then kN(c, kt)
2087- else if ((3 == cy))
2088- then kO(c, kt)
2089- else if ((5 == cy))
2090- then kP(c, kt)
2091- else if ((2 == cy))
2092- then kQ(c, kt)
2069+ else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL)
2070+ }
2071+ }
2072+
2073+
2074+func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0)
2075+
2076+
2077+func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4))
2078+
2079+
2080+func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47))
2081+
2082+
2083+func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54))
2084+
2085+
2086+func kS (c,ku) = {
2087+ let cz = size(ku)
2088+ if ((4 == cz))
2089+ then kO(c, ku)
2090+ else if ((3 == cz))
2091+ then kP(c, ku)
2092+ else if ((5 == cz))
2093+ then kQ(c, ku)
2094+ else if ((2 == cz))
2095+ then kR(c, ku)
20932096 else throw("Unknown merge")
20942097 }
20952098
20962099
2097-func kS (gJ) = if (if ((gJ.originCaller != dc))
2098- then valueOrElse(getBoolean(dI()), false)
2100+func kT (gK) = if (if ((gK.originCaller != dd))
2101+ then valueOrElse(getBoolean(dJ()), false)
20992102 else false)
21002103 then throw("Contracts are under maintenance")
2101- else [StringEntry(dJ(toString(gJ.originCaller)), toBase58String(gJ.transactionId))]
2102-
2103-
2104-@Callable(gJ)
2105-func constructorV1 (kT) = if ((gJ.caller != this))
2104+ else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))]
2105+
2106+
2107+@Callable(gK)
2108+func constructorV1 (kU) = if ((gK.caller != this))
21062109 then throw("Permission denied")
2107- else [StringEntry(cW(), kT)]
2108-
2109-
2110-
2111-@Callable(gJ)
2112-func saveInteger (cO,eH) = if ((gJ.caller != this))
2110+ else [StringEntry(cX(), kU)]
2111+
2112+
2113+
2114+@Callable(gK)
2115+func saveInteger (cP,eI) = if ((gK.caller != this))
21132116 then throw("saveInteger is not public method")
2114- else [IntegerEntry(cO, eH)]
2115-
2116-
2117-
2118-@Callable(gJ)
2119-func setBlocked (kU) = if ((gJ.caller != this))
2117+ else [IntegerEntry(cP, eI)]
2118+
2119+
2120+
2121+@Callable(gK)
2122+func setBlocked (kV) = if ((gK.caller != this))
21202123 then throw("permission denied")
2121- else [BooleanEntry(dI(), kU)]
2122-
2123-
2124-
2125-@Callable(gJ)
2124+ else [BooleanEntry(dJ(), kV)]
2125+
2126+
2127+
2128+@Callable(gK)
21262129 func stakeLand () = {
2127- let kV = kS(gJ)
2128- if ((size(gJ.payments) != 1))
2130+ let kW = kT(gK)
2131+ if ((size(gK.payments) != 1))
21292132 then throw("Exactly one payment required")
21302133 else {
2131- let kW = value(gJ.payments[0])
2132- let bt = value(kW.assetId)
2133- let cN = toString(gJ.caller)
2134- if ((kW.amount != 1))
2135- then throw((("NFT " + aE) + " token should be attached as payment"))
2134+ let kX = value(gK.payments[0])
2135+ let bu = value(kX.assetId)
2136+ let cO = toString(gK.caller)
2137+ if ((kX.amount != 1))
2138+ then throw((("NFT " + aF) + " token should be attached as payment"))
21362139 else {
2137- let jr = value(assetInfo(bt))
2138- if ((jr.issuer != this))
2140+ let js = value(assetInfo(bu))
2141+ if ((js.issuer != this))
21392142 then throw("Unknown issuer of token")
2140- else if (!(contains(jr.name, aE)))
2141- then throw((("Only NFT " + aE) + " tokens are accepted"))
2143+ else if (!(contains(js.name, aF)))
2144+ then throw((("Only NFT " + aF) + " tokens are accepted"))
21422145 else {
2143- let kX = drop(jr.name, 4)
2144- let er = if (contains(kX, "XXL"))
2145- then dropRight(kX, 3)
2146- else if (contains(kX, "XL"))
2147- then dropRight(kX, 2)
2148- else dropRight(kX, 1)
2149- if (!(isDefined(parseInt(er))))
2150- then throw(("Cannot parse land number from " + jr.name))
2146+ let kY = drop(js.name, 4)
2147+ let es = if (contains(kY, "XXL"))
2148+ then dropRight(kY, 3)
2149+ else if (contains(kY, "XL"))
2150+ then dropRight(kY, 2)
2151+ else dropRight(kY, 1)
2152+ if (!(isDefined(parseInt(es))))
2153+ then throw(("Cannot parse land number from " + js.name))
21512154 else {
2152- let Q = toBase58String(bt)
2153- let js = bv(Q)
2154- if (isDefined(getInteger(js)))
2155- then throw((("NFT " + jr.name) + " is already staked"))
2155+ let Q = toBase58String(bu)
2156+ let jt = bw(Q)
2157+ if (isDefined(getInteger(jt)))
2158+ then throw((("NFT " + js.name) + " is already staked"))
21562159 else {
2157- let jv = split(jr.description, "_")
2158- let gF = gL(jv[dk])
2159- let jh = dF(jv[dj])
2160- let hY = (jh / cG)
2161- let fa = gK(gF, hY, 1)
2162- let kY = dt(jv[dl])
2163- let kI = split(valueOrElse(getString(kY), "0_0_0_0_0_0"), "_")
2164- let kZ = makeString(gD(kI, gF, hY, 1), "_")
2165- let kE = dv(cN)
2166- let kF = getString(kE)
2167- let kB = if (isDefined(kF))
2168- then split_51C(value(kF), "_")
2160+ let jw = split(js.description, "_")
2161+ let gG = gM(jw[dl])
2162+ let ji = dG(jw[dk])
2163+ let hZ = (ji / cH)
2164+ let fb = gL(gG, hZ, 1)
2165+ let kZ = du(jw[dm])
2166+ let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2167+ let la = makeString(gE(kJ, gG, hZ, 1), "_")
2168+ let kF = dw(cO)
2169+ let kG = getString(kF)
2170+ let kC = if (isDefined(kG))
2171+ then split_51C(value(kG), "_")
21692172 else nil
2170- if (containsElement(kB, Q))
2173+ if (containsElement(kC, Q))
21712174 then throw(("Your staked lands already contain " + Q))
2172- else if ((size(kB) >= aJ))
2173- then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
2175+ else if ((size(kC) >= aK))
2176+ then throw((("Your already staked max (" + toString(aK)) + ") lands"))
21742177 else {
2175- let hZ = valueOrElse(getInteger(bC(Q)), 0)
2176- let kL = dw(cN)
2177- let la = valueOrElse(getInteger(kL), 0)
2178- let lb = invoke(df, "onStakeUnstakeLand", [cN], nil)
2179- $Tuple2(([IntegerEntry(js, lastBlock.timestamp), IntegerEntry(by(aE, Q, cN), lastBlock.timestamp), StringEntry(kE, makeString_11C((kB :+ Q), "_")), IntegerEntry(kL, (la + jh)), StringEntry(bs(Q), cN), StringEntry(et(er), cN), IntegerEntry(es(Q, cN), hZ), StringEntry(ds(), fa), StringEntry(kY, kZ)] ++ kV), lb)
2178+ let ia = valueOrElse(getInteger(bD(Q)), 0)
2179+ let kM = dx(cO)
2180+ let lb = valueOrElse(getInteger(kM), 0)
2181+ let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil)
2182+ $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc)
21802183 }
21812184 }
21822185 }
21872190
21882191
21892192
2190-@Callable(gJ)
2191-func unstakeLand (jn) = {
2192- let kV = kS(gJ)
2193- if ((size(gJ.payments) != 0))
2193+@Callable(gK)
2194+func unstakeLand (jo) = {
2195+ let kW = kT(gK)
2196+ if ((size(gK.payments) != 0))
21942197 then throw("No payments required")
21952198 else {
2196- let c = toString(gJ.caller)
2197- let fZ = jl(c, ez, jn)
2198- let Q = fZ._2
2199- let jv = fZ._3
2200- let kE = dv(c)
2201- let gF = gL(jv[dk])
2202- let jh = dF(jv[dj])
2203- let hY = (jh / cG)
2204- let fa = gK(gF, hY, -1)
2205- let kY = dt(jv[dl])
2206- let kI = split(valueOrElse(getString(kY), "0_0_0_0_0_0"), "_")
2207- let kZ = makeString(gD(kI, gF, hY, -1), "_")
2208- let jS = jI(c, Q, jh, ez)
2209- let kB = split_51C(valueOrElse(getString(kE), ""), "_")
2210- let db = indexOf(kB, Q)
2211- if (!(isDefined(db)))
2199+ let c = toString(gK.caller)
2200+ let ga = jm(c, eA, jo)
2201+ let Q = ga._2
2202+ let jw = ga._3
2203+ let kF = dw(c)
2204+ let gG = gM(jw[dl])
2205+ let ji = dG(jw[dk])
2206+ let hZ = (ji / cH)
2207+ let fb = gL(gG, hZ, -1)
2208+ let kZ = du(jw[dm])
2209+ let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2210+ let la = makeString(gE(kJ, gG, hZ, -1), "_")
2211+ let jT = jJ(c, Q, ji, eA)
2212+ let kC = split_51C(valueOrElse(getString(kF), ""), "_")
2213+ let dc = indexOf(kC, Q)
2214+ if (!(isDefined(dc)))
22122215 then throw(("Your staked lands don't contain " + Q))
22132216 else {
2214- let az = lastBlock.timestamp
2215- let lc = valueOrElse(getInteger(de, bO(c)), 0)
2216- if ((lc >= az))
2217- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lc)))
2217+ let aA = lastBlock.timestamp
2218+ let ld = valueOrElse(getInteger(df, bP(c)), 0)
2219+ if ((ld >= aA))
2220+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld)))
22182221 else {
2219- let ld = (valueOrElse(getInteger(df, b(c)), 0) + cC)
2220- if ((ld > az))
2221- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ld)))
2222+ let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD)
2223+ if ((le > aA))
2224+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le)))
22222225 else {
2223- let kL = dw(c)
2224- let kM = valueOrElse(getInteger(kL), 0)
2225- let le = if ((jh > kM))
2226+ let kM = dx(c)
2227+ let kN = valueOrElse(getInteger(kM), 0)
2228+ let lf = if ((ji > kN))
22262229 then 0
2227- else (kM - jh)
2228- let lb = invoke(df, "onStakeUnstakeLand", [c], nil)
2229- $Tuple2(([ScriptTransfer(gJ.caller, 1, fromBase58String(Q)), DeleteEntry(bv(Q)), DeleteEntry(by(aE, Q, c)), StringEntry(ds(), fa), StringEntry(kY, kZ), StringEntry(jS._2, makeString(jS._3, ":")), if ((size(kB) > 1))
2230- then StringEntry(kE, makeString_11C(removeByIndex(kB, value(db)), "_"))
2231- else DeleteEntry(kE), IntegerEntry(kL, le)] ++ kV), lb)
2230+ else (kN - ji)
2231+ let lc = invoke(dg, "onStakeUnstakeLand", [c], nil)
2232+ $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1))
2233+ then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_"))
2234+ else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc)
22322235 }
22332236 }
22342237 }
22372240
22382241
22392242
2240-@Callable(gJ)
2243+@Callable(gK)
22412244 func stakeDuck () = {
2242- let kV = kS(gJ)
2243- if ((size(gJ.payments) != 1))
2245+ let kW = kT(gK)
2246+ if ((size(gK.payments) != 1))
22442247 then throw("Exactly one payment required")
22452248 else {
2246- let kW = value(gJ.payments[0])
2247- let bt = value(kW.assetId)
2248- let cN = toString(gJ.caller)
2249- if ((kW.amount != 1))
2250- then throw((("NFT " + aF) + " token should be attached as payment"))
2249+ let kX = value(gK.payments[0])
2250+ let bu = value(kX.assetId)
2251+ let cO = toString(gK.caller)
2252+ if ((kX.amount != 1))
2253+ then throw((("NFT " + aG) + " token should be attached as payment"))
22512254 else {
2252- let jr = value(assetInfo(bt))
2253- let lf = if (if (cu)
2254- then (jr.issuer == this)
2255+ let js = value(assetInfo(bu))
2256+ let lg = if (if (cv)
2257+ then (js.issuer == this)
22552258 else false)
2256- then contains(jr.name, aG)
2259+ then contains(js.name, aH)
22572260 else false
2258- if (if (if ((jr.issuer != dV))
2259- then (jr.issuer != dW)
2261+ if (if (if ((js.issuer != dW))
2262+ then (js.issuer != dX)
22602263 else false)
2261- then !(lf)
2264+ then !(lg)
22622265 else false)
2263- then throw((((("Unknown issuer of " + aF) + " or ") + aG) + " token"))
2264- else if (if (!(contains(jr.name, aF)))
2265- then !(lf)
2266+ then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2267+ else if (if (!(contains(js.name, aG)))
2268+ then !(lg)
22662269 else false)
2267- then throw((((("Only NFT " + aF) + " or ") + aG) + " tokens are accepted"))
2270+ then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
22682271 else {
2269- let lg = toBase58String(bt)
2270- let js = bv(lg)
2271- if (isDefined(getInteger(js)))
2272- then throw((("NFT " + jr.name) + " is already staked"))
2273- else if (isDefined(getString(bL(cN))))
2274- then throw(("You already staked one duck: " + jr.name))
2272+ let lh = toBase58String(bu)
2273+ let jt = bw(lh)
2274+ if (isDefined(getInteger(jt)))
2275+ then throw((("NFT " + js.name) + " is already staked"))
2276+ else if (isDefined(getString(bM(cO))))
2277+ then throw(("You already staked one duck: " + js.name))
22752278 else {
2276- let lh = bN(lg)
2277- let cg = getString(lh)
2278- let hK = bM(lg)
2279- let li = getString(hK)
2280- let ja = A(lg)
2281- let jb = ai(valueOrElse(getInteger(E(lg)), 0))
2282- let lj = valueOrElse(getInteger(ja), jb)
2283- ([IntegerEntry(js, lastBlock.timestamp), IntegerEntry(by(aF, toBase58String(bt), cN), lastBlock.timestamp), StringEntry(bK(lg), cN), StringEntry(bL(cN), lg)] ++ (if (isDefined(cg))
2279+ let li = bO(lh)
2280+ let ch = getString(li)
2281+ let hL = bN(lh)
2282+ let lj = getString(hL)
2283+ let jb = A(lh)
2284+ let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2285+ let lk = valueOrElse(getInteger(jb), jc)
2286+ ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch))
22842287 then nil
2285- else ([StringEntry(lh, aM)] ++ (if (isDefined(li))
2288+ else ([StringEntry(li, aN)] ++ (if (isDefined(lj))
22862289 then nil
2287- else (([StringEntry(hK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ja, lj)) ++ kV)))))
2290+ else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW)))))
22882291 }
22892292 }
22902293 }
22932296
22942297
22952298
2296-@Callable(gJ)
2297-func unstakeDuck (lg) = {
2298- let kV = kS(gJ)
2299- if ((size(gJ.payments) != 0))
2299+@Callable(gK)
2300+func unstakeDuck (lh) = {
2301+ let kW = kT(gK)
2302+ if ((size(gK.payments) != 0))
23002303 then throw("No payments required")
23012304 else {
2302- let bt = fromBase58String(lg)
2303- let cN = toString(gJ.caller)
2304- let jr = value(assetInfo(bt))
2305- let js = bv(lg)
2306- if (!(isDefined(getInteger(js))))
2307- then throw((("NFT " + jr.name) + " is not staked"))
2308- else if (!(isDefined(getString(bL(cN)))))
2309- then throw((("The duck " + jr.name) + " is not staked"))
2305+ let bu = fromBase58String(lh)
2306+ let cO = toString(gK.caller)
2307+ let js = value(assetInfo(bu))
2308+ let jt = bw(lh)
2309+ if (!(isDefined(getInteger(jt))))
2310+ then throw((("NFT " + js.name) + " is not staked"))
2311+ else if (!(isDefined(getString(bM(cO)))))
2312+ then throw((("The duck " + js.name) + " is not staked"))
23102313 else {
2311- let ju = valueOrErrorMessage(getString(bK(lg)), (("NFT " + jr.name) + " is orphaned"))
2312- if ((ju != cN))
2314+ let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned"))
2315+ if ((jv != cO))
23132316 then throw("Staked NFT is not yours")
2314- else if (kp(lg))
2317+ else if (kq(lh))
23152318 then throw("unstakeDuck_checkTournament")
23162319 else {
2317- let ja = A(lg)
2318- let jb = ai(valueOrElse(getInteger(E(lg)), 0))
2319- let au = valueOrElse(getInteger(ja), jb)
2320- if ((jb > au))
2321- then throw((("Please heal your duck to " + toString(jb)) + "hp before unstaking"))
2322- else ([ScriptTransfer(gJ.caller, 1, bt), DeleteEntry(js), DeleteEntry(ja), DeleteEntry(bN(lg)), DeleteEntry(bK(lg)), DeleteEntry(by(aF, lg, cN)), DeleteEntry(bL(cN))] ++ kV)
2320+ let jb = A(lh)
2321+ let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2322+ let av = valueOrElse(getInteger(jb), jc)
2323+ if ((jc > av))
2324+ then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking"))
2325+ else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW)
23232326 }
23242327 }
23252328 }
23272330
23282331
23292332
2330-@Callable(gJ)
2331-func claimRes (eH,lk) = {
2332- let kV = kS(gJ)
2333- if ((size(gJ.payments) != 0))
2333+@Callable(gK)
2334+func claimRes (eI,ll) = {
2335+ let kW = kT(gK)
2336+ if ((size(gK.payments) != 0))
23342337 then throw("No payments required")
23352338 else {
2336- let c = toString(gJ.originCaller)
2337- let fi = jw(c, eH, ez, lk)
2338- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2339- $Tuple2(((((fi._1 ++ ke(B, fraction(W, eH, cF))._1) :+ StringEntry(fi._2, makeString(fi._3, ":"))) :+ StringEntry(fi._4, makeString(fi._5, ":"))) ++ kV), fi._3[bm])
2340- }
2341- }
2342-
2343-
2344-
2345-@Callable(gJ)
2346-func claimResToWH (eH,lk) = {
2347- let kV = kS(gJ)
2348- if ((size(gJ.payments) != 0))
2339+ let c = toString(gK.originCaller)
2340+ let fj = jx(c, eI, eA, ll)
2341+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2342+ $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn])
2343+ }
2344+ }
2345+
2346+
2347+
2348+@Callable(gK)
2349+func claimResToWH (eI,ll) = {
2350+ let kW = kT(gK)
2351+ if ((size(gK.payments) != 0))
23492352 then throw("No payments required")
23502353 else {
2351- let c = toString(gJ.originCaller)
2352- let fi = jw(c, eH, ey, lk)
2353- $Tuple2(((((fi._1 ++ kf(c, fraction(W, eH, cF))._1) :+ StringEntry(fi._2, makeString(fi._3, ":"))) :+ StringEntry(fi._4, makeString(fi._5, ":"))) ++ kV), fi._5[bd])
2354- }
2355- }
2356-
2357-
2358-
2359-@Callable(gJ)
2360-func flight (iP,iQ) = {
2361- let kV = kS(gJ)
2362- if ((size(gJ.payments) != 0))
2354+ let c = toString(gK.originCaller)
2355+ let fj = jx(c, eI, ez, ll)
2356+ $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be])
2357+ }
2358+ }
2359+
2360+
2361+
2362+@Callable(gK)
2363+func flight (iQ,iR) = {
2364+ let kW = kT(gK)
2365+ if ((size(gK.payments) != 0))
23632366 then throw("No payments required")
23642367 else {
2365- let bP = toString(gJ.caller)
2366- let ho = iO(bP, iP, iQ)
2367- let iU = ho._1
2368- let B = ho._2
2369- let lh = bN(B)
2370- let jp = valueOrElse(getString(lh), aM)
2371- let iW = ho._4
2372- if ((iW == jp))
2368+ let bQ = toString(gK.caller)
2369+ let hp = iP(bQ, iQ, iR)
2370+ let iV = hp._1
2371+ let B = hp._2
2372+ let li = bO(B)
2373+ let jq = valueOrElse(getString(li), aN)
2374+ let iX = hp._4
2375+ if ((iX == jq))
23732376 then throw("You can't fly to the same location")
23742377 else {
2375- let cq = split(iW, "_")
2376- let ll = (cq[bq] == "T")
2377- let lm = (cq[bq] == "D")
2378- let gw = G(B)
2379- let ln = valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,")
2380- let lo = fj(ln, ho._5)
2381- let lp = lo._1
2382- let lq = lo._2
2383- let lr = if (!(ck(dg, jp)))
2384- then if (ll)
2385- then co(jp, iW, 5)
2386- else if (!(lm))
2387- then if ((iU > 0))
2388- then $Tuple2(iW, iU)
2389- else $Tuple2(jp, 0)
2390- else if ((iU > 0))
2378+ let cr = split(iX, "_")
2379+ let lm = (cr[br] == "T")
2380+ let ln = (cr[br] == "D")
2381+ let gx = G(B)
2382+ let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2383+ let lp = fk(lo, hp._5)
2384+ let lq = lp._1
2385+ let lr = lp._2
2386+ let ls = if (!(cl(dh, jq)))
2387+ then if (lm)
2388+ then cp(jq, iX, 5)
2389+ else if (!(ln))
2390+ then if ((iV > 0))
2391+ then $Tuple2(iX, iV)
2392+ else $Tuple2(jq, 0)
2393+ else if ((iV > 0))
23912394 then {
2392- let dz = invoke(this, "processDelivery", [B], nil)
2393- if ((dz == dz))
2394- then $Tuple2(jp, iU)
2395+ let dA = invoke(this, "processDelivery", [B], nil)
2396+ if ((dA == dA))
2397+ then $Tuple2(jq, iV)
23952398 else throw("Strict value is not equal to itself.")
23962399 }
2397- else $Tuple2(jp, 0)
2398- else if (cf(dg, jp))
2399- then if (!(cf(dg, iW)))
2400+ else $Tuple2(jq, 0)
2401+ else if (cg(dh, jq))
2402+ then if (!(cg(dh, iX)))
24002403 then throw("Your duck is taking part in the tournament")
24012404 else {
2402- let ls = parseIntValue(cq[br])
2403- let lt = split(jp, "_")
2404- let ch = valueOrElse(getInteger(dg, bS), 0)
2405- if ((ls != (parseIntValue(lt[br]) + 1)))
2406- then co(jp, iW, 7)
2407- else if ((iU > 0))
2405+ let lt = parseIntValue(cr[bs])
2406+ let lu = split(jq, "_")
2407+ let ci = valueOrElse(getInteger(dh, bT), 0)
2408+ if ((lt != (parseIntValue(lu[bs]) + 1)))
2409+ then cp(jq, iX, 7)
2410+ else if ((iV > 0))
24082411 then {
2409- let lu = valueOrElse(getInteger(dg, bW(ch, B)), 0)
2410- let lv = if ((ls > lu))
2411- then invoke(dg, "saveDuckResult", [B, ls], nil)
2412+ let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0)
2413+ let lw = if ((lt > lv))
2414+ then invoke(dh, "saveDuckResult", [B, lt], nil)
24122415 else unit
2413- if ((lv == lv))
2414- then $Tuple2(iW, iU)
2416+ if ((lw == lw))
2417+ then $Tuple2(iX, iV)
24152418 else throw("Strict value is not equal to itself.")
24162419 }
2417- else $Tuple2(jp, 0)
2420+ else $Tuple2(jq, 0)
24182421 }
2419- else throw(("Unknown curLocation:" + jp))
2420- let lw = lr._1
2421- let lx = lr._2
2422- $Tuple2(((([StringEntry(lh, lw), StringEntry(gw, lp), IntegerEntry(A(B), lx)] ++ kV) ++ (if (lq)
2422+ else throw(("Unknown curLocation:" + jq))
2423+ let lx = ls._1
2424+ let ly = ls._2
2425+ $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr)
24232426 then [StringEntry(M(B), "0_0_0_0_0")]
2424- else nil)) ++ ke(B, if ((iU > 0))
2425- then X
2426- else Y)._1), ho._3)
2427+ else nil)) ++ kf(B, if ((iV > 0))
2428+ then Y
2429+ else Z)._1), hp._3)
24272430 }
24282431 }
24292432 }
24302433
24312434
24322435
2433-@Callable(gJ)
2434-func heal (ly,lz,lA) = {
2435- let kV = kS(gJ)
2436- if (if (if ((0 > ly))
2437- then true
2438- else (0 > lz))
2436+@Callable(gK)
2437+func heal (lz,lA,lB) = {
2438+ let kW = kT(gK)
2439+ if (if (if ((0 > lz))
24392440 then true
24402441 else (0 > lA))
2442+ then true
2443+ else (0 > lB))
24412444 then throw("Quantity cannot be negative")
24422445 else {
2443- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2444- if (kp(B))
2446+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2447+ if (kq(B))
24452448 then throw("heal_checkTournament")
24462449 else {
2447- let lB = [ly, lz, lA]
2448- let ja = A(B)
2449- let jb = ai(valueOrElse(getInteger(E(B)), 0))
2450- let lC = valueOrElse(getInteger(ja), jb)
2451- if ((lC >= jb))
2452- then throw((("HP should be < " + toString(jb)) + " to heal"))
2450+ let lC = [lz, lA, lB]
2451+ let jb = A(B)
2452+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
2453+ let lD = valueOrElse(getInteger(jb), jc)
2454+ if ((lD >= jc))
2455+ then throw((("HP should be < " + toString(jc)) + " to heal"))
24532456 else {
2454- let hK = bM(B)
2455- let in = hJ(hK)
2456- let lD = if ((in[bo] == ""))
2457+ let hL = bN(B)
2458+ let io = hK(hL)
2459+ let lE = if ((io[bp] == ""))
24572460 then nil
2458- else split_4C(in[bo], "_")
2459- func lE (eQ,cn) = {
2460- let dB = eQ._2
2461- let hf = if ((size(lD) > dB))
2462- then parseIntValue(lD[dB])
2461+ else split_4C(io[bp], "_")
2462+ func lF (eR,co) = {
2463+ let dC = eR._2
2464+ let hg = if ((size(lE) > dC))
2465+ then parseIntValue(lE[dC])
24632466 else 0
2464- if ((3 > dB))
2467+ if ((3 > dC))
24652468 then {
2466- let lF = lB[dB]
2467- if ((lF > hf))
2468- then throw(((("You have only " + toString(hf)) + " of ") + aS[dB]))
2469- else $Tuple3((eQ._1 :+ toString((hf - lF))), (dB + 1), (eQ._3 + (parseIntValue(split(cn, "_")[aY]) * lF)))
2469+ let lG = lC[dC]
2470+ if ((lG > hg))
2471+ then throw(((("You have only " + toString(hg)) + " of ") + aT[dC]))
2472+ else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG)))
24702473 }
2471- else $Tuple3((eQ._1 :+ toString(hf)), (dB + 1), eQ._3)
2474+ else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3)
24722475 }
24732476
2474- let fi = {
2475- let eS = aW
2476- let eT = size(eS)
2477- let eU = $Tuple3(nil, 0, 0)
2478- func eV (eW,eX) = if ((eX >= eT))
2479- then eW
2480- else lE(eW, eS[eX])
2481-
2482- func eY (eW,eX) = if ((eX >= eT))
2483- then eW
2477+ let fj = {
2478+ let eT = aX
2479+ let eU = size(eT)
2480+ let eV = $Tuple3(nil, 0, 0)
2481+ func eW (eX,eY) = if ((eY >= eU))
2482+ then eX
2483+ else lF(eX, eT[eY])
2484+
2485+ func eZ (eX,eY) = if ((eY >= eU))
2486+ then eX
24842487 else throw("List size exceeds 50")
24852488
2486- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
2489+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
24872490 }
2488- let lG = min([jb, (lC + fi._3)])
2489- $Tuple2((([IntegerEntry(ja, lG), StringEntry(hK, makeString_2C([in[bl], in[bm], in[bn], makeString(fi._1, "_")], ":"))] ++ kV) ++ ke(B, (af * ((ly + lz) + lA)))._1), lG)
2491+ let lH = min([jc, (lD + fj._3)])
2492+ $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH)
24902493 }
24912494 }
24922495 }
24942497
24952498
24962499
2497-@Callable(gJ)
2500+@Callable(gK)
24982501 func healES () = {
2499- let kV = kS(gJ)
2500- if ((size(gJ.payments) != 1))
2502+ let kW = kT(gK)
2503+ if ((size(gK.payments) != 1))
25012504 then throw("Exactly one payment required")
25022505 else {
2503- let kW = value(gJ.payments[0])
2504- if ((kW.assetId != cz))
2506+ let kX = value(gK.payments[0])
2507+ if ((kX.assetId != cA))
25052508 then throw("Allowed USDT payment only!")
25062509 else {
2507- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2508- if (kp(B))
2510+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2511+ if (kq(B))
25092512 then throw("healES_checkTournament")
25102513 else {
2511- let ja = A(B)
2512- let jb = ai(valueOrElse(getInteger(E(B)), 0))
2513- let lC = valueOrElse(getInteger(ja), jb)
2514- if ((lC > 0))
2514+ let jb = A(B)
2515+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
2516+ let lD = valueOrElse(getInteger(jb), jc)
2517+ if ((lD > 0))
25152518 then throw("HP should be 0 to call Emergency Service")
25162519 else {
2517- let hK = bM(B)
2518- let in = hJ(hK)
2519- let lD = if ((in[bo] == ""))
2520+ let hL = bN(B)
2521+ let io = hK(hL)
2522+ let lE = if ((io[bp] == ""))
25202523 then nil
2521- else split_4C(in[bo], "_")
2522- let lH = if ((size(lD) > 0))
2523- then parseIntValue(lD[0])
2524+ else split_4C(io[bp], "_")
2525+ let lI = if ((size(lE) > 0))
2526+ then parseIntValue(lE[0])
25242527 else 0
2525- let lI = if ((size(lD) > 1))
2526- then parseIntValue(lD[1])
2528+ let lJ = if ((size(lE) > 1))
2529+ then parseIntValue(lE[1])
25272530 else 0
2528- let lJ = if ((size(lD) > 2))
2529- then parseIntValue(lD[2])
2531+ let lK = if ((size(lE) > 2))
2532+ then parseIntValue(lE[2])
25302533 else 0
2531- if (if (if ((lH > 0))
2532- then true
2533- else (lI > 0))
2534+ if (if (if ((lI > 0))
25342535 then true
25352536 else (lJ > 0))
2537+ then true
2538+ else (lK > 0))
25362539 then throw("You have to use own Medical Kit")
25372540 else {
2538- let lK = getString(dd, bQ())
2539- let lL = if (isDefined(lK))
2540- then split_4C(value(lK), "_")
2541+ let lL = getString(de, bR())
2542+ let lM = if (isDefined(lL))
2543+ then split_4C(value(lL), "_")
25412544 else nil
2542- let lM = if ((size(lL) > 0))
2543- then parseIntValue(lL[0])
2545+ let lN = if ((size(lM) > 0))
2546+ then parseIntValue(lM[0])
25442547 else 0
2545- if ((0 >= lM))
2548+ if ((0 >= lN))
25462549 then throw("There are no Medical Kits L1 at Emergency Service storage")
25472550 else {
2548- let lG = (lC + parseIntValue(split(aW[0], "_")[aY]))
2549- let lN = makeString([toString((lM - 1)), removeByIndex(lL, 0)], "_")
2550- let cn = split(aW[0], "_")
2551- let lO = cm(cn)
2552- let lP = fraction((lO * aO), aN, (cF * bb))
2553- if ((kW.amount != lP))
2554- then throw(("Payment attached should be " + toString(lP)))
2551+ let lH = (lD + parseIntValue(split(aX[0], "_")[aZ]))
2552+ let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_")
2553+ let co = split(aX[0], "_")
2554+ let lP = cn(co)
2555+ let lQ = fraction((lP * aP), aO, (cG * bc))
2556+ if ((kX.amount != lQ))
2557+ then throw(("Payment attached should be " + toString(lQ)))
25552558 else {
2556- let fi = dx(invoke(dd, "updateEsStorage", [lN], [AttachedPayment(cz, lP)]))
2557- $Tuple2(((kV :+ IntegerEntry(ja, lG)) ++ ke(B, Z)._1), fi)
2559+ let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)]))
2560+ $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj)
25582561 }
25592562 }
25602563 }
25662569
25672570
25682571
2569-@Callable(gJ)
2570-func updateBackpack (B,lQ) = if ((gJ.caller != dd))
2572+@Callable(gK)
2573+func updateBackpack (B,lR) = if ((gK.caller != de))
25712574 then throw("permission denied")
2572- else $Tuple2([StringEntry(bM(B), lQ)], lQ)
2573-
2574-
2575-
2576-@Callable(gJ)
2575+ else $Tuple2([StringEntry(bN(B), lR)], lR)
2576+
2577+
2578+
2579+@Callable(gK)
25772580 func commitForRandom () = {
2578- let kV = kS(gJ)
2579- let lR = (height + dq)
2580- let c = toString(gJ.caller)
2581- $Tuple2(([IntegerEntry(dr(c), lR)] ++ kV), lR)
2582- }
2583-
2584-
2585-
2586-@Callable(gJ)
2587-func revealRandom (dR) = {
2588- let kV = kS(gJ)
2589- let c = toString(gJ.caller)
2590- let lS = dr(c)
2591- let lR = valueOrErrorMessage(getInteger(lS), "You have to commitForRandom() first!")
2592- if ((lR > height))
2593- then throw(("Random number is not ready yet, wait until height = " + toString(lR)))
2581+ let kW = kT(gK)
2582+ let lS = (height + dr)
2583+ let c = toString(gK.caller)
2584+ $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS)
2585+ }
2586+
2587+
2588+
2589+@Callable(gK)
2590+func revealRandom (dS) = {
2591+ let kW = kT(gK)
2592+ let c = toString(gK.caller)
2593+ let lT = ds(c)
2594+ let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!")
2595+ if ((lS > height))
2596+ then throw(("Random number is not ready yet, wait until height = " + toString(lS)))
25942597 else {
2595- let dT = value(value(blockInfoByHeight(lR)).vrf)
2596- let dS = toBytes(valueOrElse(getString(dJ(c)), ""))
2597- let lT = dQ(dR, dS, dT)
2598- $Tuple2(([DeleteEntry(lS)] ++ kV), lT)
2599- }
2600- }
2601-
2602-
2603-
2604-@Callable(gJ)
2598+ let dU = value(value(blockInfoByHeight(lS)).vrf)
2599+ let dT = toBytes(valueOrElse(getString(dK(c)), ""))
2600+ let lU = dR(dS, dT, dU)
2601+ $Tuple2(([DeleteEntry(lT)] ++ kW), lU)
2602+ }
2603+ }
2604+
2605+
2606+
2607+@Callable(gK)
26052608 func buySLand () = {
2606- let kV = kS(gJ)
2607- if ((size(gJ.payments) != 1))
2609+ let kW = kT(gK)
2610+ if ((size(gK.payments) != 1))
26082611 then throw("Exactly one payment required")
26092612 else {
2610- let kW = value(gJ.payments[0])
2611- if ((kW.assetId != cz))
2613+ let kX = value(gK.payments[0])
2614+ if ((kX.assetId != cA))
26122615 then throw("Allowed USDT payment only!")
2613- else if ((kW.amount != ed))
2614- then throw(("Payment attached should be " + toString(ed)))
2616+ else if ((kX.amount != ee))
2617+ then throw(("Payment attached should be " + toString(ee)))
26152618 else {
2616- let fi = iH(gJ.caller, gJ.transactionId)
2617- let lU = dA(invoke(dh, "burnAcres", [ef], nil))
2618- $Tuple2((((fi._1 :+ ScriptTransfer(dd, kW.amount, cz)) ++ kf(toString(gJ.caller), ab)._1) ++ kV), $Tuple2(fi._2._1, lU))
2619+ let fj = iI(gK.caller, gK.transactionId)
2620+ let lV = dB(invoke(di, "burnAcres", [eg], nil))
2621+ $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
26192622 }
26202623 }
26212624 }
26222625
26232626
26242627
2625-@Callable(gJ)
2626-func expedition (iP,iQ) = {
2627- let kV = kS(gJ)
2628- if ((size(gJ.payments) != 0))
2628+@Callable(gK)
2629+func expedition (iQ,iR) = {
2630+ let kW = kT(gK)
2631+ if ((size(gK.payments) != 0))
26292632 then throw("No payments required")
26302633 else {
2631- let bP = toString(gJ.caller)
2632- let ho = iO(bP, iP, iQ)
2633- let B = ho._2
2634- let ja = A(B)
2635- let hK = bM(B)
2636- let in = hJ(hK)
2637- let jP = split(in[bn], "_")
2638- let jR = makeString(fc(true, jP, ec), "_")
2639- let gw = G(B)
2640- let ln = valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,")
2641- let lV = fj(ln, ho._5)
2642- let lp = lV._1
2643- let lq = lV._2
2644- let lW = iH(gJ.caller, gJ.transactionId)
2645- let iN = lW._2._1
2646- let fi = if ((0 >= ho._1))
2647- then $Tuple3([IntegerEntry(ja, 0), StringEntry(gw, lp)], "", 0)
2648- else $Tuple3((lW._1 ++ (if (lq)
2634+ let bQ = toString(gK.caller)
2635+ let hp = iP(bQ, iQ, iR)
2636+ let B = hp._2
2637+ let jb = A(B)
2638+ let hL = bN(B)
2639+ let io = hK(hL)
2640+ let jQ = split(io[bo], "_")
2641+ let jS = makeString(fd(true, jQ, ed), "_")
2642+ let gx = G(B)
2643+ let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2644+ let lW = fk(lo, hp._5)
2645+ let lq = lW._1
2646+ let lr = lW._2
2647+ let lX = iI(gK.caller, gK.transactionId)
2648+ let iO = lX._2._1
2649+ let fj = if ((0 >= hp._1))
2650+ then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0)
2651+ else $Tuple3((lX._1 ++ (if (lr)
26492652 then [StringEntry(M(B), "0_0_0_0_0")]
2650- else ((((nil :+ StringEntry(bN(B), makeString([lW._2._2, "L", iN], "_"))) :+ IntegerEntry(ja, ho._1)) :+ StringEntry(gw, lp)) :+ StringEntry(hK, makeString([in[bl], in[bm], jR, in[bo]], ":"))))), iN, ho._3)
2651- if (kp(B))
2653+ else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3)
2654+ if (kq(B))
26522655 then throw("expedition_checkTournament")
26532656 else {
2654- let lU = dA(invoke(dh, "burnAcres", [ef], nil))
2655- $Tuple2(((fi._1 ++ ke(B, ab)._1) ++ kV), $Tuple3(fi._2, fi._3, lU))
2657+ let lV = dB(invoke(di, "burnAcres", [eg], nil))
2658+ $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV))
26562659 }
26572660 }
26582661 }
26592662
26602663
26612664
2662-@Callable(gJ)
2665+@Callable(gK)
26632666 func buySLandForAcres () = {
2664- let kV = kS(gJ)
2665- if ((size(gJ.payments) != 1))
2667+ let kW = kT(gK)
2668+ if ((size(gK.payments) != 1))
26662669 then throw("exactly 1 payment must be attached")
26672670 else {
2668- let kW = gJ.payments[0]
2669- let fp = kW.amount
2670- if (if (!(isDefined(kW.assetId)))
2671+ let kX = gK.payments[0]
2672+ let fq = kX.amount
2673+ if (if (!(isDefined(kX.assetId)))
26712674 then true
2672- else (value(kW.assetId) != dp))
2675+ else (value(kX.assetId) != dq))
26732676 then throw("ACRES payments only!")
2674- else if ((fp != ef))
2675- then throw(("Payment attached should be " + toString(ef)))
2677+ else if ((fq != eg))
2678+ then throw(("Payment attached should be " + toString(eg)))
26762679 else {
2677- let fi = iH(gJ.caller, gJ.transactionId)
2678- let lU = dA(invoke(dh, "burnAcres", [ef], [AttachedPayment(dp, fp)]))
2679- $Tuple2(((fi._1 ++ kf(toString(gJ.caller), ab)._1) ++ kV), $Tuple2(fi._2._1, lU))
2680+ let fj = iI(gK.caller, gK.transactionId)
2681+ let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)]))
2682+ $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
26802683 }
26812684 }
26822685 }
26832686
26842687
26852688
2686-@Callable(gJ)
2689+@Callable(gK)
26872690 func upgradeInfra (Q) = {
2688- let kV = kS(gJ)
2689- if ((size(gJ.payments) != 0))
2691+ let kW = kT(gK)
2692+ if ((size(gK.payments) != 0))
26902693 then throw("No payments required")
26912694 else {
2692- let fi = jJ(true, gJ.caller, 0, Q)
2693- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2694- $Tuple2(((fi._1 ++ kV) ++ ke(B, fraction(ac, fi._3, cF))._1), fi._2)
2695- }
2696- }
2697-
2698-
2699-
2700-@Callable(gJ)
2701-func activateArtifact (lX,lY) = {
2702- let kV = kS(gJ)
2703- if ((size(gJ.payments) != 0))
2695+ let fj = jK(true, gK.caller, 0, Q)
2696+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2697+ $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2)
2698+ }
2699+ }
2700+
2701+
2702+
2703+@Callable(gK)
2704+func activateArtifact (lY,lZ) = {
2705+ let kW = kT(gK)
2706+ if ((size(gK.payments) != 0))
27042707 then throw("No payments required")
27052708 else {
2706- let c = toString(gJ.caller)
2707- let fi = {
2708- let cy = lX
2709- if (("PRESALE" == cy))
2710- then kn(c, lY)
2711- else if (("ONBOARD" == cy))
2712- then kg(c)
2709+ let c = toString(gK.caller)
2710+ let fj = {
2711+ let cz = lY
2712+ if (("PRESALE" == cz))
2713+ then ko(c, lZ)
2714+ else if (("ONBOARD" == cz))
2715+ then kh(c)
27132716 else throw("Unknown artifact")
27142717 }
2715- (fi ++ kV)
2716- }
2717- }
2718-
2719-
2720-
2721-@Callable(gJ)
2722-func mergeLands (kt) = {
2723- let kV = kS(gJ)
2724- if ((size(gJ.payments) != 0))
2718+ (fj ++ kW)
2719+ }
2720+ }
2721+
2722+
2723+
2724+@Callable(gK)
2725+func mergeLands (ku) = {
2726+ let kW = kT(gK)
2727+ if ((size(gK.payments) != 0))
27252728 then throw("No payments required")
27262729 else {
2727- let fi = kR(toString(gJ.caller), kt)
2728- $Tuple2(((fi._1 ++ kV) ++ kf(toString(gJ.caller), ad)._1), fi._2)
2729- }
2730- }
2731-
2732-
2733-
2734-@Callable(gJ)
2735-func cargoExchange (lZ,Q) = {
2736- let kV = kS(gJ)
2737- if ((size(gJ.payments) != 0))
2730+ let fj = kS(toString(gK.caller), ku)
2731+ $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2)
2732+ }
2733+ }
2734+
2735+
2736+
2737+@Callable(gK)
2738+func cargoExchange (ma,Q) = {
2739+ let kW = kT(gK)
2740+ if ((size(gK.payments) != 0))
27382741 then throw("No payments required")
27392742 else {
2740- let im = split_4C(lZ, ":")
2741- let c = toString(gJ.originCaller)
2742- let jr = value(assetInfo(fromBase58String(Q)))
2743- let js = bv(Q)
2744- if (!(isDefined(getInteger(js))))
2745- then throw((jr.name + " is not staked"))
2743+ let in = split_4C(ma, ":")
2744+ let c = toString(gK.originCaller)
2745+ let js = value(assetInfo(fromBase58String(Q)))
2746+ let jt = bw(Q)
2747+ if (!(isDefined(getInteger(jt))))
2748+ then throw((js.name + " is not staked"))
27462749 else {
2747- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
2748- if ((ju != c))
2749- then throw((aE + " is not yours"))
2750+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
2751+ if ((jv != c))
2752+ then throw((aF + " is not yours"))
27502753 else {
2751- let hY = (dF(split(jr.description, "_")[dj]) / cG)
2752- let hZ = valueOrElse(getInteger(bC(Q)), 0)
2753- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2754- let jp = valueOrElse(getString(bN(B)), aM)
2755- let ci = split(value(jp), "_")
2756- if ((ci[bq] != "L"))
2757- then throw((("Duck location type is " + ci[bq]) + ", but should be L"))
2758- else if ((ci[br] != Q))
2754+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
2755+ let ia = valueOrElse(getInteger(bD(Q)), 0)
2756+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2757+ let jq = valueOrElse(getString(bO(B)), aN)
2758+ let cj = split(value(jq), "_")
2759+ if ((cj[br] != "L"))
2760+ then throw((("Duck location type is " + cj[br]) + ", but should be L"))
2761+ else if ((cj[bs] != Q))
27592762 then throw(("Duck should be on the land " + Q))
27602763 else {
2761- let hX = bB(Q)
2762- let hO = hW(hX, hY, hZ)
2763- let hK = bM(B)
2764- let in = hJ(hK)
2765- let fi = il(im, hO, in)
2766- let if = split(hO[bg], "_")
2767- let jG = (parseIntValue(if[bi]) + fi._7)
2768- let jH = (parseIntValue(if[bj]) - fi._7)
2769- ([StringEntry(hK, makeString_2C([in[bl], fi._4, fi._5, fi._6], ":")), StringEntry(hX, makeString_2C([hO[bc], fi._1, fi._2, fi._3, makeString([if[bh], toString(jG), toString(jH), if[bk]], "_")], ":"))] ++ kV)
2764+ let hY = bC(Q)
2765+ let hP = hX(hY, hZ, ia)
2766+ let hL = bN(B)
2767+ let io = hK(hL)
2768+ let fj = im(in, hP, io)
2769+ let ig = split(hP[bh], "_")
2770+ let jH = (parseIntValue(ig[bj]) + fj._7)
2771+ let jI = (parseIntValue(ig[bk]) - fj._7)
2772+ ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW)
27702773 }
27712774 }
27722775 }
27752778
27762779
27772780
2778-@Callable(gJ)
2779-func saveWarehouse (ib,Q) = if ((gJ.caller != dd))
2781+@Callable(gK)
2782+func saveWarehouse (ic,Q) = if ((gK.caller != de))
27802783 then throw("Access denied")
27812784 else {
2782- let hX = bB(Q)
2783- let ic = split_4C(ib, ":")
2784- if ((size(ic) != 5))
2785+ let hY = bC(Q)
2786+ let id = split_4C(ic, ":")
2787+ if ((size(id) != 5))
27852788 then throw("warehouse string should contain 4 ':' separators")
27862789 else {
2787- let ma = split(ic[bg], "_")[bh]
2788- let jG = hN(ic)
2789- let mb = hL(ic[bc])
2790- let jH = ((mb - parseIntValue(ma)) - jG)
2791- if ((0 > jH))
2790+ let mb = split(id[bh], "_")[bi]
2791+ let jH = hO(id)
2792+ let mc = hM(id[bd])
2793+ let jI = ((mc - parseIntValue(mb)) - jH)
2794+ if ((0 > jI))
27922795 then throw("Operation leads to negative free warehouse space")
27932796 else {
2794- let mc = makeString_2C([ic[bc], ic[bd], ic[be], ic[bf], makeString([ma, toString(jG), toString(jH), toString(mb)], "_")], ":")
2795- $Tuple2([StringEntry(hX, mc)], mc)
2797+ let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":")
2798+ $Tuple2([StringEntry(hY, md)], md)
27962799 }
27972800 }
27982801 }
27992802
28002803
28012804
2802-@Callable(gJ)
2803-func setCustomName (bt,kD,bx) = {
2804- let kV = kS(gJ)
2805- if ((size(gJ.payments) != 1))
2805+@Callable(gK)
2806+func setCustomName (bu,kE,by) = {
2807+ let kW = kT(gK)
2808+ if ((size(gK.payments) != 1))
28062809 then throw("Exactly one payment required")
28072810 else {
2808- let kW = value(gJ.payments[0])
2809- if ((kW.assetId != cz))
2811+ let kX = value(gK.payments[0])
2812+ if ((kX.assetId != cA))
28102813 then throw("Allowed USDT payment only!")
2811- else if ((kW.amount != dZ))
2812- then throw(("Payment should be " + toString(dZ)))
2813- else if (contains(kD, "__"))
2814- then throw(("Name should not contain '__': " + kD))
2815- else if ((size(kD) > ea))
2816- then throw(("Name too long, maxLength=" + toString(ea)))
2814+ else if ((kX.amount != ea))
2815+ then throw(("Payment should be " + toString(ea)))
2816+ else if (contains(kE, "__"))
2817+ then throw(("Name should not contain '__': " + kE))
2818+ else if ((size(kE) > eb))
2819+ then throw(("Name too long, maxLength=" + toString(eb)))
28172820 else {
2818- let c = toString(gJ.originCaller)
2819- let md = {
2820- let cy = bx
2821- if (("ACCOUNT" == cy))
2821+ let c = toString(gK.originCaller)
2822+ let me = {
2823+ let cz = by
2824+ if (("ACCOUNT" == cz))
28222825 then {
2823- let me = ev(kD)
2824- let mf = getString(me)
2825- if (isDefined(mf))
2826- then throw(("Name already registered: " + kD))
2826+ let mf = ew(kE)
2827+ let mg = getString(mf)
2828+ if (isDefined(mg))
2829+ then throw(("Name already registered: " + kE))
28272830 else {
2828- let mg = bF(c)
2829- let mh = getString(mg)
2830- let mi = if (isDefined(mh))
2831- then [DeleteEntry(ev(value(mh)))]
2831+ let mh = bG(c)
2832+ let mi = getString(mh)
2833+ let mj = if (isDefined(mi))
2834+ then [DeleteEntry(ew(value(mi)))]
28322835 else nil
2833- (((mi :+ StringEntry(mg, kD)) :+ StringEntry(me, c)) ++ kf(c, aa)._1)
2836+ (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1)
28342837 }
28352838 }
2836- else if (("LAND" == cy))
2839+ else if (("LAND" == cz))
28372840 then {
2838- let jr = value(assetInfo(fromBase58String(bt)))
2839- let js = bv(bt)
2840- if (!(isDefined(getInteger(js))))
2841- then throw((jr.name + " is not staked"))
2841+ let js = value(assetInfo(fromBase58String(bu)))
2842+ let jt = bw(bu)
2843+ if (!(isDefined(getInteger(jt))))
2844+ then throw((js.name + " is not staked"))
28422845 else {
2843- let ju = valueOrErrorMessage(getString(bs(bt)), (("NFT " + jr.name) + " is orphaned"))
2844- if ((ju != c))
2845- then throw((aE + " is not yours"))
2846+ let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned"))
2847+ if ((jv != c))
2848+ then throw((aF + " is not yours"))
28462849 else {
2847- let me = eo(kD)
2848- let mf = getString(me)
2849- if (isDefined(mf))
2850- then throw(("Name already registered: " + kD))
2850+ let mf = ep(kE)
2851+ let mg = getString(mf)
2852+ if (isDefined(mg))
2853+ then throw(("Name already registered: " + kE))
28512854 else {
2852- let mj = bu(bt)
2853- let mh = getString(mj)
2854- let mi = if (isDefined(mh))
2855- then [DeleteEntry(eo(value(mh)))]
2855+ let mk = bv(bu)
2856+ let mi = getString(mk)
2857+ let mj = if (isDefined(mi))
2858+ then [DeleteEntry(ep(value(mi)))]
28562859 else nil
2857- (((mi :+ StringEntry(mj, kD)) :+ StringEntry(me, bt)) ++ kf(c, aa)._1)
2860+ (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1)
28582861 }
28592862 }
28602863 }
28612864 }
2862- else if (("DUCK" == cy))
2865+ else if (("DUCK" == cz))
28632866 then {
2864- let jr = value(assetInfo(fromBase58String(bt)))
2865- let js = bv(bt)
2866- if (if (!(isDefined(getInteger(js))))
2867+ let js = value(assetInfo(fromBase58String(bu)))
2868+ let jt = bw(bu)
2869+ if (if (!(isDefined(getInteger(jt))))
28672870 then true
2868- else !(isDefined(getString(bL(c)))))
2869- then throw((jr.name + " is not staked"))
2871+ else !(isDefined(getString(bM(c)))))
2872+ then throw((js.name + " is not staked"))
28702873 else {
2871- let ju = valueOrErrorMessage(getString(bK(bt)), (("NFT " + jr.name) + " is orphaned"))
2872- if ((ju != c))
2873- then throw((aF + " is not yours"))
2874+ let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned"))
2875+ if ((jv != c))
2876+ then throw((aG + " is not yours"))
28742877 else {
2875- let me = eu(kD)
2876- let mf = getString(me)
2877- if (isDefined(mf))
2878- then throw(("Name already registered: " + kD))
2878+ let mf = ev(kE)
2879+ let mg = getString(mf)
2880+ if (isDefined(mg))
2881+ then throw(("Name already registered: " + kE))
28792882 else {
2880- let mj = bE(bt)
2881- let mh = getString(mj)
2882- let mi = if (isDefined(mh))
2883- then [DeleteEntry(eu(value(mh)))]
2883+ let mk = bF(bu)
2884+ let mi = getString(mk)
2885+ let mj = if (isDefined(mi))
2886+ then [DeleteEntry(ev(value(mi)))]
28842887 else nil
2885- (((mi :+ StringEntry(mj, kD)) :+ StringEntry(me, bt)) ++ ke(bt, aa)._1)
2888+ (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1)
28862889 }
28872890 }
28882891 }
28892892 }
28902893 else throw("Unknown entity type")
28912894 }
2892- $Tuple2(((md :+ ScriptTransfer(dd, kW.amount, cz)) ++ kV), 0)
2895+ $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0)
28932896 }
28942897 }
28952898 }
28962899
28972900
28982901
2899-@Callable(gJ)
2900-func setReferrals (mk,ml) = if ((gJ.callerPublicKey != cx))
2902+@Callable(gK)
2903+func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy))
29012904 then throw("Permission denied")
29022905 else {
2903- let kV = kS(gJ)
2904- if ((size(gJ.payments) != 0))
2906+ let kW = kT(gK)
2907+ if ((size(gK.payments) != 0))
29052908 then throw("No payments required")
2906- else if (!(isDefined(addressFromString(mk))))
2907- then throw(("Invalid address: " + mk))
2909+ else if (!(isDefined(addressFromString(ml))))
2910+ then throw(("Invalid address: " + ml))
29082911 else {
2909- let mm = addressFromString(ml)
2910- if (!(isDefined(mm)))
2911- then throw(("Invalid address: " + ml))
2912+ let mn = addressFromString(mm)
2913+ if (!(isDefined(mn)))
2914+ then throw(("Invalid address: " + mm))
29122915 else {
2913- let mn = getString(dJ(mk))
2914- if (!(isDefined(mn)))
2916+ let mo = getString(dK(ml))
2917+ if (!(isDefined(mo)))
29152918 then throw("oldPlayer didn't do any tx in game")
2916- else if ((0 >= wavesBalance(value(mm)).available))
2919+ else if ((0 >= wavesBalance(value(mn)).available))
29172920 then throw("newPlayer has no WAVES")
29182921 else {
2919- let mo = ew()
2920- let mp = getString(mo)
2921- let mq = if (isDefined(mp))
2922- then split_4C(value(mp), "_")
2922+ let mp = ex()
2923+ let mq = getString(mp)
2924+ let mr = if (isDefined(mq))
2925+ then split_4C(value(mq), "_")
29232926 else nil
2924- if (containsElement(mq, ml))
2925- then throw((ml + " is not newbie (already has referrals)"))
2927+ if (containsElement(mr, mm))
2928+ then throw((mm + " is not newbie (already has referrals)"))
29262929 else {
2927- let kh = bG(ml)
2928- let ki = getString(kh)
2929- if (if (isDefined(ki))
2930- then isDefined(addressFromString(value(ki)))
2930+ let ki = bH(mm)
2931+ let kj = getString(ki)
2932+ if (if (isDefined(kj))
2933+ then isDefined(addressFromString(value(kj)))
29312934 else false)
2932- then throw(((ml + " already has refBy: ") + value(ki)))
2935+ then throw(((mm + " already has refBy: ") + value(kj)))
29332936 else {
2934- let mr = bJ(mk)
2935- let ms = getString(mr)
2936- let mt = if (isDefined(ms))
2937- then split_4C(value(ms), "_")
2937+ let ms = bK(ml)
2938+ let mt = getString(ms)
2939+ let mu = if (isDefined(mt))
2940+ then split_4C(value(mt), "_")
29382941 else nil
2939- if (containsElement(mt, ml))
2940- then throw((((mk + " already contains ") + ml) + " within referrals"))
2942+ if (containsElement(mu, mm))
2943+ then throw((((ml + " already contains ") + mm) + " within referrals"))
29412944 else {
2942- let mu = makeString_2C((mt :+ ml), "_")
2943- let mv = if (containsElement(mq, mk))
2944- then value(mp)
2945- else makeString_2C((mq :+ mk), "_")
2946- $Tuple2(([StringEntry(kh, mk), StringEntry(mr, mu), StringEntry(mo, mv)] ++ kV), 0)
2945+ let mv = makeString_2C((mu :+ mm), "_")
2946+ let mw = if (containsElement(mr, ml))
2947+ then value(mq)
2948+ else makeString_2C((mr :+ ml), "_")
2949+ $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0)
29472950 }
29482951 }
29492952 }
29542957
29552958
29562959
2957-@Callable(gJ)
2958-func distributePoints (mw,mx,my,mz,mA) = {
2959- let kV = kS(gJ)
2960- if ((size(gJ.payments) != 0))
2960+@Callable(gK)
2961+func distributePoints (mx,my,mz,mA,mB) = {
2962+ let kW = kT(gK)
2963+ if ((size(gK.payments) != 0))
29612964 then throw("No payments required")
29622965 else {
2963- let c = toString(gJ.originCaller)
2964- let mB = dC(invoke(df, "checkWlgXpREADONLY", [c], nil))
2965- let mC = dA(mB[1])
2966- let mD = if ((0 >= mC))
2966+ let c = toString(gK.originCaller)
2967+ let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil))
2968+ let mD = dB(mC[1])
2969+ let mE = if ((0 >= mD))
29672970 then $Tuple2(0, nil)
29682971 else {
2969- let kc = dA(invoke(df, "takeWlgXp", [c], nil))
2970- if ((kc == kc))
2971- then $Tuple2(mC, [IntegerEntry(I(c), dA(mB[0])), IntegerEntry(H(c), dA(mB[2]))])
2972+ let kd = dB(invoke(dg, "takeWlgXp", [c], nil))
2973+ if ((kd == kd))
2974+ then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))])
29722975 else throw("Strict value is not equal to itself.")
29732976 }
2974- let mE = mD._1
2975- let mF = mD._2
2976- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2977- let mG = J(c)
2978- let mH = (valueOrElse(getInteger(mG), 0) + mE)
2979- let mI = F(B)
2980- let mJ = valueOrElse(getInteger(mI), 0)
2981- let mK = (mH + mJ)
2982- let mL = ((((mw + mx) + my) + mz) + mA)
2983- if ((mL > mK))
2984- then throw((("There are only " + toString(mK)) + " free points to distribute"))
2977+ let mF = mE._1
2978+ let mG = mE._2
2979+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2980+ let mH = J(c)
2981+ let mI = (valueOrElse(getInteger(mH), 0) + mF)
2982+ let mJ = F(B)
2983+ let mK = valueOrElse(getInteger(mJ), 0)
2984+ let mL = (mI + mK)
2985+ let mM = ((((mx + my) + mz) + mA) + mB)
2986+ if ((mM > mL))
2987+ then throw((("There are only " + toString(mL)) + " free points to distribute"))
29852988 else {
2986- let mM = C(B)
2987- let as = split(valueOrElse(getString(mM), "0_0_0_0_0"), "_")
2988- let mN = (mH - mL)
2989- $Tuple2((([IntegerEntry(mG, if ((0 > mN))
2989+ let mN = C(B)
2990+ let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_")
2991+ let mO = (mI - mM)
2992+ $Tuple2((([IntegerEntry(mH, if ((0 > mO))
29902993 then 0
2991- else mN), IntegerEntry(mI, if ((0 > mN))
2992- then (mJ + mN)
2993- else mJ), StringEntry(mM, makeString([toString((parseIntValue(as[l]) + mw)), toString((parseIntValue(as[m]) + mx)), toString((parseIntValue(as[n]) + my)), toString((parseIntValue(as[o]) + mz)), toString((parseIntValue(as[p]) + mA))], "_"))] ++ kV) ++ mF), 0)
2994+ else mO), IntegerEntry(mJ, if ((0 > mO))
2995+ then (mK + mO)
2996+ else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0)
29942997 }
29952998 }
29962999 }
29973000
29983001
29993002
3000-@Callable(gJ)
3001-func splitByGlobalWeightsREADONLY (eH) = $Tuple2(nil, eZ(eH))
3002-
3003-
3004-
3005-@Callable(gJ)
3006-func splitByGlobalAndLocalWeightsREADONLY (mO,mP,gM) = {
3007- let gF = gL(gM)
3008- $Tuple2(nil, $Tuple2(eZ(mO), eK(mP, gF)))
3009- }
3010-
3011-
3012-
3013-@Callable(gJ)
3014-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hJ(bM(B)), ":"))
3015-
3016-
3017-
3018-@Callable(gJ)
3003+@Callable(gK)
3004+func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI))
3005+
3006+
3007+
3008+@Callable(gK)
3009+func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = {
3010+ let gG = gM(gN)
3011+ $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG)))
3012+ }
3013+
3014+
3015+
3016+@Callable(gK)
3017+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":"))
3018+
3019+
3020+
3021+@Callable(gK)
30193022 func getWarehouseREADONLY (Q) = {
3020- let jr = value(assetInfo(fromBase58String(Q)))
3021- let hY = (dF(split(jr.description, "_")[dj]) / cG)
3022- let hZ = valueOrElse(getInteger(bC(Q)), 0)
3023- $Tuple2(nil, makeString_2C(hW(bB(Q), hY, hZ), ":"))
3024- }
3025-
3026-
3027-
3028-@Callable(gJ)
3029-func saveLastTx () = if (!(containsElement([df, dd, dg, dh], gJ.caller)))
3023+ let js = value(assetInfo(fromBase58String(Q)))
3024+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
3025+ let ia = valueOrElse(getInteger(bD(Q)), 0)
3026+ $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":"))
3027+ }
3028+
3029+
3030+
3031+@Callable(gK)
3032+func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller)))
30303033 then throw("Access denied")
3031- else $Tuple2(kS(gJ), 42)
3032-
3033-
3034-
3035-@Callable(gJ)
3036-func updateDuckStats (B,kc) = if ((gJ.caller != dd))
3034+ else $Tuple2(kT(gK), 42)
3035+
3036+
3037+
3038+@Callable(gK)
3039+func updateDuckStats (B,kd) = if ((gK.caller != de))
30373040 then throw("Access denied")
3038- else ke(B, kc)
3039-
3040-
3041-
3042-@Callable(gJ)
3043-func updateAccStats (c,kc) = if (!(containsElement([df, dd, dh], gJ.caller)))
3041+ else kf(B, kd)
3042+
3043+
3044+
3045+@Callable(gK)
3046+func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller)))
30443047 then throw("Access denied")
3045- else kf(c, kc)
3046-
3047-
3048-
3049-@Callable(gJ)
3050-func equipDuck (mQ) = {
3051- let kV = kS(gJ)
3052- if ((size(gJ.payments) != 0))
3048+ else kg(c, kd)
3049+
3050+
3051+
3052+@Callable(gK)
3053+func equipDuck (mR) = {
3054+ let kW = kT(gK)
3055+ if ((size(gK.payments) != 0))
30533056 then throw("No payments required")
30543057 else {
3055- let c = toString(gJ.originCaller)
3056- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
3057- if (kp(B))
3058+ let c = toString(gK.originCaller)
3059+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3060+ if (kq(B))
30583061 then throw("equipDuck_checkTournament")
30593062 else {
3060- let gw = G(B)
3061- let mR = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3062- let hK = bM(B)
3063- let in = hJ(hK)
3064- let lp = split(mQ, "_")
3065- if ((size(lp) != r))
3063+ let gx = G(B)
3064+ let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3065+ let hL = bN(B)
3066+ let io = hK(hL)
3067+ let lq = split(mR, "_")
3068+ if ((size(lq) != r))
30663069 then throw("Wrong equipment string")
30673070 else {
3068- let gy = gl(mR, fw(in[bo]), true, nil)
3069- let gz = split(lp[q], ";")[1]
3070- let aq = if ((gz == ""))
3071+ let gz = gm(mS, fx(io[bp]), true, nil)
3072+ let gA = split(lq[q], ";")[1]
3073+ let ar = if ((gA == ""))
30713074 then 0
30723075 else {
3073- let gA = split(gz, ",")[0]
3074- if ((gA == ""))
3076+ let gB = split(gA, ",")[0]
3077+ if ((gB == ""))
30753078 then 0
30763079 else {
3077- let fL = split(gA, ":")
3078- let db = fL[0]
3079- let gB = fL[1]
3080- if (if (if (if (if ((db == "06"))
3080+ let fM = split(gB, ":")
3081+ let dc = fM[0]
3082+ let gC = fM[1]
3083+ if (if (if (if (if ((dc == "06"))
30813084 then true
3082- else (db == "07"))
3085+ else (dc == "07"))
30833086 then true
3084- else (db == "08"))
3085- then (gB != "")
3087+ else (dc == "08"))
3088+ then (gC != "")
30863089 else false)
3087- then (parseIntValue(gB) > 0)
3090+ then (parseIntValue(gC) > 0)
30883091 else false)
3089- then parseIntValue(split(aW[parseIntValue(db)], "_")[aY])
3092+ then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
30903093 else 0
30913094 }
30923095 }
3093- let gg = ao(this, B, aq, true)
3094- let gC = gl(lp, gy, false, gg)
3095- let mS = fB(gC)
3096- $Tuple2(([StringEntry(gw, mQ), StringEntry(hK, makeString_2C([in[bl], in[bm], in[bn], mS], ":")), StringEntry(M(B), makeString([toString(gg[7]), toString(gg[8]), toString(gg[9]), toString(gg[10]), toString(gg[11])], "_"))] ++ kV), 0)
3096+ let gh = ap(this, B, ar, true)
3097+ let gD = gm(lq, gz, false, gh)
3098+ let mT = fC(gD)
3099+ $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0)
30973100 }
30983101 }
30993102 }
31013104
31023105
31033106
3104-@Callable(gJ)
3105-func fortificateLand (Q,mT) = {
3106- let kV = kS(gJ)
3107- if ((size(gJ.payments) != 0))
3107+@Callable(gK)
3108+func fortificateLand (Q,mU) = {
3109+ let kW = kT(gK)
3110+ if ((size(gK.payments) != 0))
31083111 then throw("No payments required")
31093112 else {
3110- let c = toString(gJ.originCaller)
3111- let B = valueOrElse(getString(bL(c)), "")
3112- let fG = ao(this, B, 0, false)
3113- let mU = bD(Q)
3114- let mV = split(valueOrElse(getString(mU), ":0_15:0_18:0"), "_")
3115- let jr = value(assetInfo(fromBase58String(Q)))
3116- let hY = (dF(split(jr.description, "_")[dj]) / cG)
3117- let hZ = valueOrElse(getInteger(bC(Q)), 0)
3118- let hX = bB(Q)
3119- let ic = hW(hX, hY, hZ)
3120- let mW = split(ic[bg], "_")
3121- let mX = parseIntValue(mW[bi])
3122- let mY = parseIntValue(mW[bj])
3123- let mZ = split(mT, "_")
3124- let na = gs(mV, fw(ic[bf]), mX, mY, true, nil)
3125- let gy = na._1
3126- let nb = na._2
3127- let nc = na._3
3128- let nd = gs(mZ, gy, nb, nc, false, fG)
3129- let gC = nd._1
3130- let ne = nd._2
3131- let nf = nd._3
3132- let mS = fB(gC)
3133- let jX = makeString([mW[bh], toString(ne), toString(nf), mW[bk]], "_")
3134- $Tuple2(([StringEntry(mU, mT), StringEntry(hX, makeString_2C([ic[bc], ic[bd], ic[be], mS, jX], ":"))] ++ kV), 0)
3135- }
3136- }
3137-
3138-
3139-
3140-@Callable(gJ)
3141-func initDuckTourAttempt (B) = if ((gJ.caller != dg))
3113+ let c = toString(gK.originCaller)
3114+ let B = valueOrElse(getString(bM(c)), "")
3115+ let fH = ap(this, B, 0, false)
3116+ let mV = bE(Q)
3117+ let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_")
3118+ let js = value(assetInfo(fromBase58String(Q)))
3119+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
3120+ let ia = valueOrElse(getInteger(bD(Q)), 0)
3121+ let hY = bC(Q)
3122+ let id = hX(hY, hZ, ia)
3123+ let mX = split(id[bh], "_")
3124+ let mY = parseIntValue(mX[bj])
3125+ let mZ = parseIntValue(mX[bk])
3126+ let na = split(mU, "_")
3127+ let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil)
3128+ let gz = nb._1
3129+ let nc = nb._2
3130+ let nd = nb._3
3131+ let ne = gt(na, gz, nc, nd, false, fH)
3132+ let gD = ne._1
3133+ let nf = ne._2
3134+ let ng = ne._3
3135+ let mT = fC(gD)
3136+ let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_")
3137+ $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0)
3138+ }
3139+ }
3140+
3141+
3142+
3143+@Callable(gK)
3144+func initDuckTourAttempt (B) = if ((gK.caller != dh))
31423145 then throw("Access denied")
31433146 else {
3144- let ja = A(B)
3145- let jb = ai(valueOrElse(getInteger(E(B)), 0))
3146- let lj = valueOrElse(getInteger(ja), jb)
3147- let ng = bN(B)
3148- let jp = valueOrElse(getString(ng), aM)
3149- let ch = valueOrElse(getInteger(dg, bS), 0)
3150- let nh = (toString(ch) + "_T_0")
3151- $Tuple2([IntegerEntry(K(B), lj), IntegerEntry(ja, jb), StringEntry(L(B), jp), StringEntry(ng, nh)], nh)
3147+ let jb = A(B)
3148+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
3149+ let lk = valueOrElse(getInteger(jb), jc)
3150+ let nh = bO(B)
3151+ let jq = valueOrElse(getString(nh), aN)
3152+ let ci = valueOrElse(getInteger(dh, bT), 0)
3153+ let ni = (toString(ci) + "_T_0")
3154+ $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni)
31523155 }
31533156
31543157
31553158
3156-@Callable(gJ)
3159+@Callable(gK)
31573160 func breakAttempt () = {
3158- let kV = kS(gJ)
3159- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
3160- let ng = bN(B)
3161- let jp = valueOrElse(getString(ng), aM)
3162- if ((split(jp, "_")[bq] != "T"))
3161+ let kW = kT(gK)
3162+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
3163+ let nh = bO(B)
3164+ let jq = valueOrElse(getString(nh), aN)
3165+ if ((split(jq, "_")[br] != "T"))
31633166 then throw("Your duck is not in the tournament")
31643167 else {
3165- let ni = getIntegerValue(K(B))
3166- let nj = getStringValue(L(B))
3167- $Tuple2(((kV :+ IntegerEntry(A(B), ni)) :+ StringEntry(ng, nj)), jp)
3168- }
3169- }
3170-
3171-
3172-
3173-@Callable(gJ)
3174-func breakAttemptCallback () = if ((gJ.caller != dg))
3168+ let nj = getIntegerValue(K(B))
3169+ let nk = getStringValue(L(B))
3170+ $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq)
3171+ }
3172+ }
3173+
3174+
3175+
3176+@Callable(gK)
3177+func breakAttemptCallback () = if ((gK.caller != dh))
31753178 then throw("Access denied")
31763179 else {
3177- let B = valueOrErrorMessage(getString(bL(toString(gJ.originCaller))), "You don't have a duck staked")
3178- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bN(B), getStringValue(L(B)))], "breakAttemptCallback")
3180+ let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked")
3181+ $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
31793182 }
31803183
31813184
31823185
3183-@Callable(gJ)
3184-func exitTournamentInternal (B) = if ((gJ.caller != this))
3186+@Callable(gK)
3187+func exitTournamentInternal (B) = if ((gK.caller != this))
31853188 then throw("Access denied")
31863189 else {
3187- let ni = getIntegerValue(K(B))
3188- let nj = getStringValue(L(B))
3189- $Tuple2([IntegerEntry(A(B), ni), StringEntry(bN(B), nj)], false)
3190+ let nj = getIntegerValue(K(B))
3191+ let nk = getStringValue(L(B))
3192+ $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false)
31903193 }
31913194
31923195
31933196
3194-@Callable(gJ)
3195-func processDelivery (B) = if ((gJ.caller != this))
3197+@Callable(gK)
3198+func processDelivery (B) = if ((gK.caller != this))
31963199 then throw("Access denied")
31973200 else {
3198- let c = toString(gJ.originCaller)
3199- let nk = valueOrElse(getInteger(dd, bR), 0)
3200- if ((aP > nk))
3201- then throw(("Delivery is not available, fund=" + dK(nk, 6)))
3201+ let c = toString(gK.originCaller)
3202+ let nl = valueOrElse(getInteger(de, bS), 0)
3203+ if ((aQ > nl))
3204+ then throw(("Delivery is not available, fund=" + dL(nl, 6)))
32023205 else {
3203- let az = lastBlock.timestamp
3204- let nl = U(c)
3205- let fQ = valueOrElse(getInteger(nl), 0)
3206- let nm = valueOrElse(getInteger(V(c)), 0)
3207- let nn = (az / a)
3208- let no = valueOrElse(getInteger(dh, d(c)), 0)
3209- let np = (aQ + (no / aR))
3210- if (if ((fQ >= np))
3211- then (nm == nn)
3206+ let aA = lastBlock.timestamp
3207+ let nm = V(c)
3208+ let fR = valueOrElse(getInteger(nm), 0)
3209+ let nn = valueOrElse(getInteger(W(c)), 0)
3210+ let no = (aA / a)
3211+ let np = valueOrElse(getInteger(di, d(c)), 0)
3212+ let nq = (aR + (np / aS))
3213+ if (if ((fR >= nq))
3214+ then (nn == no)
32123215 else false)
3213- then throw((("You already used " + toString(np)) + " delivery attempts for today"))
3216+ then throw((("You already used " + toString(nq)) + " delivery attempts for today"))
32143217 else {
3215- let nq = invoke(dd, "sendDeliveryReward", [c], nil)
3216- $Tuple2([IntegerEntry(nl, (fQ + 1)), IntegerEntry(V(c), nn)], nq)
3218+ let nr = U(B)
3219+ let ns = invoke(de, "sendDeliveryReward", [c], nil)
3220+ $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns)
32173221 }
32183222 }
32193223 }
32203224
32213225
32223226
3223-@Callable(gJ)
3224-func prepareRobbery (iP,iQ) = {
3225- let kV = kS(gJ)
3226- if (!(sigVerify_8Kb(iP, iQ, cx)))
3227+@Callable(gK)
3228+func prepareRobbery (iQ,iR) = {
3229+ let kW = kT(gK)
3230+ if (!(sigVerify_8Kb(iQ, iR, cy)))
32273231 then throw("signature does not match")
3228- else if ((size(gJ.payments) != 1))
3232+ else if ((size(gK.payments) != 1))
32293233 then throw("exactly 1 payment must be attached")
32303234 else {
3231- let kW = gJ.payments[0]
3232- let nr = kW.amount
3233- if (if (!(isDefined(kW.assetId)))
3235+ let kX = gK.payments[0]
3236+ let nt = kX.amount
3237+ if (if (!(isDefined(kX.assetId)))
32343238 then true
3235- else (value(kW.assetId) != dn))
3239+ else (value(kX.assetId) != do))
32363240 then throw("WLGOLD payments only!")
32373241 else {
3238- let fo = split(toUtf8String(iP), "|")
3239- if ((2 > size(fo)))
3242+ let fp = split(toUtf8String(iQ), "|")
3243+ if ((2 > size(fp)))
32403244 then throw("Wrong message format")
32413245 else {
3242- let iY = if ((size(fo) >= 2))
3243- then fo[2]
3246+ let iZ = if ((size(fp) >= 2))
3247+ then fp[2]
32443248 else ""
3245- let bP = toString(gJ.caller)
3246- let iZ = valueOrElse(getString(dJ(bP)), "")
3247- if ((iZ != iY))
3248- then throw(((("Tx ids don't match! In state: " + iZ) + ", in msg: ") + iY))
3249+ let bQ = toString(gK.caller)
3250+ let ja = valueOrElse(getString(dK(bQ)), "")
3251+ if ((ja != iZ))
3252+ then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
32493253 else {
3250- let B = fo[0]
3251- if (kp(B))
3254+ let B = fp[0]
3255+ if (kq(B))
32523256 then throw("prepareRobbery_checkTournament")
32533257 else {
3254- let aA = aw(this, B)._1
3255- if ((aA > nr))
3256- then throw(((("Payment " + toString(nr)) + " < required ") + toString(aA)))
3258+ let aB = ax(this, B)._1
3259+ if ((aB > nt))
3260+ then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB)))
32573261 else {
3258- let ns = split(fo[1], "_")
3259- let az = lastBlock.timestamp
3260- let aB = valueOrElse(getInteger(S(B)), 0)
3261- let aC = valueOrElse(getString(T(B)), "")
3262- let aD = valueOrElse(getInteger(R(aC)), 0)
3263- if (if ((aB != y))
3264- then (aD > az)
3262+ let nu = split(fp[1], "_")
3263+ let aA = lastBlock.timestamp
3264+ let aC = valueOrElse(getInteger(S(B)), 0)
3265+ let aD = valueOrElse(getString(T(B)), "")
3266+ let aE = valueOrElse(getInteger(R(aD)), 0)
3267+ if (if ((aC != y))
3268+ then (aE > aA)
32653269 else false)
3266- then throw(("You already started robbing, wait till " + toString(aD)))
3270+ then throw(("You already started robbing, wait till " + toString(aE)))
32673271 else {
3268- func nt (eQ,Q) = {
3269- let nu = valueOrElse(getInteger(P(Q)), 0)
3270- let nv = valueOrElse(getInteger(R(Q)), 0)
3271- if ((nu > size(v)))
3272+ func nv (eR,Q) = {
3273+ let nw = valueOrElse(getInteger(P(Q)), 0)
3274+ let nx = valueOrElse(getInteger(R(Q)), 0)
3275+ if ((nw > size(v)))
32723276 then throw("Invalid state")
3273- else if ((az > nv))
3277+ else if ((aA > nx))
32743278 then {
3275- let nw = valueOrElse(getInteger(bv(Q)), 0)
3276- if ((0 >= nw))
3277- then eQ
3279+ let ny = valueOrElse(getInteger(bw(Q)), 0)
3280+ if ((0 >= ny))
3281+ then eR
32783282 else {
3279- let gq = value(assetInfo(fromBase58String(Q)))
3280- let jv = split(gq.description, "_")
3281- let jh = dF(jv[dj])
3282- let nx = jg(Q, jh)
3283- let gP = (az - nw)
3284- let jy = fraction(gP, (nx * jh), a)
3285- if ((w > jy))
3286- then eQ
3287- else (eQ :+ Q)
3283+ let gr = value(assetInfo(fromBase58String(Q)))
3284+ let jw = split(gr.description, "_")
3285+ let ji = dG(jw[dk])
3286+ let nz = jh(Q, ji)
3287+ let gQ = (aA - ny)
3288+ let jz = fraction(gQ, (nz * ji), a)
3289+ if ((w > jz))
3290+ then eR
3291+ else (eR :+ Q)
32883292 }
32893293 }
3290- else eQ
3294+ else eR
32913295 }
32923296
3293- let ny = {
3294- let eS = ns
3295- let eT = size(eS)
3296- let eU = nil
3297- func eV (eW,eX) = if ((eX >= eT))
3298- then eW
3299- else nt(eW, eS[eX])
3300-
3301- func eY (eW,eX) = if ((eX >= eT))
3302- then eW
3297+ let nA = {
3298+ let eT = nu
3299+ let eU = size(eT)
3300+ let eV = nil
3301+ func eW (eX,eY) = if ((eY >= eU))
3302+ then eX
3303+ else nv(eX, eT[eY])
3304+
3305+ func eZ (eX,eY) = if ((eY >= eU))
3306+ then eX
33033307 else throw("List size exceeds 10")
33043308
3305- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3309+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
33063310 }
3307- if ((size(ny) == 0))
3311+ if ((size(nA) == 0))
33083312 then throw("No candidates for robbery")
33093313 else {
3310- let nz = dQ(size(ny), iP, iQ)
3311- let Q = ny[nz]
3312- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (az + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kV), Q)
3314+ let nB = dR(size(nA), iQ, iR)
3315+ let Q = nA[nB]
3316+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q)
33133317 }
33143318 }
33153319 }
33223326
33233327
33243328
3325-@Callable(gJ)
3326-func robLand (iP,iQ) = {
3327- let kV = kS(gJ)
3328- if (!(sigVerify_8Kb(iP, iQ, cx)))
3329+@Callable(gK)
3330+func robLand (iQ,iR) = {
3331+ let kW = kT(gK)
3332+ if (!(sigVerify_8Kb(iQ, iR, cy)))
33293333 then throw("signature does not match")
33303334 else {
3331- let bP = toString(gJ.caller)
3332- let B = valueOrErrorMessage(getString(bL(bP)), "You don't have a duck staked")
3333- let az = lastBlock.timestamp
3334- $Tuple2((kV :+ IntegerEntry(N(B), az)), 0)
3335- }
3336- }
3337-
3338-
3339-
3340-@Callable(gJ)
3341-func buyRoboDuck () = if (!(cu))
3335+ let bQ = toString(gK.caller)
3336+ let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3337+ let aA = lastBlock.timestamp
3338+ $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0)
3339+ }
3340+ }
3341+
3342+
3343+
3344+@Callable(gK)
3345+func buyRoboDuck () = if (!(cv))
33423346 then throw("Feature is turned off")
33433347 else {
3344- let kV = kS(gJ)
3345- if ((size(gJ.payments) != 1))
3348+ let kW = kT(gK)
3349+ if ((size(gK.payments) != 1))
33463350 then throw("Exactly one payment required")
33473351 else {
3348- let kW = value(gJ.payments[0])
3349- if ((kW.assetId != cz))
3352+ let kX = value(gK.payments[0])
3353+ if ((kX.assetId != cA))
33503354 then throw("Allowed USDT payment only!")
3351- else if ((kW.amount != ee))
3352- then throw((("Payment attached should be " + dK(ee, 6)) + " USDT"))
3355+ else if ((kX.amount != ef))
3356+ then throw((("Payment attached should be " + dL(ef, 6)) + " USDT"))
33533357 else {
3354- let nA = valueOrElse(getInteger(ex()), 0)
3355- let nB = toBytes(nA)
3356- let ep = ((aG + "-") + takeRight(toBase16String(nB), 8))
3357- let nC = takeRight(toBase16String(sha256_16Kb(nB)), 6)
3358- let iM = Issue(ep, ("Robo Duck NFT for WavesLands game, background color = #" + nC), 1, 0, false)
3359- let bt = calculateAssetId(iM)
3360- $Tuple2(((((kV :+ IntegerEntry(ex(), (nA + 1))) :+ iM) :+ ScriptTransfer(gJ.originCaller, 1, bt)) :+ ScriptTransfer(dd, kW.amount, cz)), $Tuple2(toBase58String(bt), nC))
3358+ let nC = valueOrElse(getInteger(ey()), 0)
3359+ let nD = toBytes(nC)
3360+ let eq = ((aH + "-") + takeRight(toBase16String(nD), 8))
3361+ let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6)
3362+ let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false)
3363+ let bu = calculateAssetId(iN)
3364+ $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE))
33613365 }
33623366 }
33633367 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 86400000
55
66 func b (c) = ("lastArbTimeUser_" + c)
77
88
99 func d (c) = ("acresStakedAmountByUser_" + c)
1010
1111
1212 let e = 100000000
1313
1414 let f = 3200
1515
1616 let g = 4000
1717
1818 let h = 3
1919
2020 let i = 100000000
2121
2222 let j = 400
2323
2424 let k = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
2525
2626 let l = 0
2727
2828 let m = 1
2929
3030 let n = 2
3131
3232 let o = 3
3333
3434 let p = 4
3535
3636 let q = 0
3737
3838 let r = 6
3939
4040 let s = 2
4141
4242 let t = 2
4343
4444 let u = 30
4545
4646 let v = [0, 600000, 900000, 43200000, 21600000]
4747
4848 let w = 20000000
4949
5050 let x = 1
5151
5252 let y = 0
5353
5454 let z = 1
5555
5656 func A (B) = ("duckHealth_" + B)
5757
5858
5959 func C (B) = ("duckChars_" + B)
6060
6161
6262 func D (B) = ("duckXP_" + B)
6363
6464
6565 func E (B) = ("duckLevel_" + B)
6666
6767
6868 func F (B) = ("duckFreePoints_" + B)
6969
7070
7171 func G (B) = ("duckEquipment_" + B)
7272
7373
7474 func H (c) = ("userXP_" + c)
7575
7676
7777 func I (c) = ("userLevel_" + c)
7878
7979
8080 func J (c) = ("userFreePoints_" + c)
8181
8282
8383 func K (B) = ("savedHealth_" + B)
8484
8585
8686 func L (B) = ("savedLocation_" + B)
8787
8888
8989 func M (B) = ("duckBuffs_" + B)
9090
9191
9292 func N (B) = ("lastRobberyTime_" + B)
9393
9494
9595 func O (B) = ("lastRobberyCost_" + B)
9696
9797
9898 func P (Q) = ("landRobberyState_" + Q)
9999
100100
101101 func R (Q) = ("landCooldownETA_" + Q)
102102
103103
104104 func S (B) = ("duckRobberyState_" + B)
105105
106106
107107 func T (B) = ("lockedLandByDuck_" + B)
108108
109109
110-func U (c) = ("userDeliveryCount_" + c)
111-
112-
113-func V (c) = ("userLastDeliveryDay_" + c)
114-
115-
116-let W = 10000
110+func U (B) = ("totalDeliveryCountByDuck_" + B)
111+
112+
113+func V (c) = ("userDeliveryCount_" + c)
114+
115+
116+func W (c) = ("userLastDeliveryDay_" + c)
117+
117118
118119 let X = 10000
119120
120-let Y = 2000
121-
122-let Z = 100000
123-
124-let aa = 1000000
125-
126-let ab = 5000000
127-
128-let ac = 10000
129-
130-let ad = 1000000
121+let Y = 10000
122+
123+let Z = 2000
124+
125+let aa = 100000
126+
127+let ab = 1000000
128+
129+let ac = 5000000
130+
131+let ad = 10000
131132
132133 let ae = 1000000
133134
134-let af = 10000
135-
136-func ag (ah) = fraction(f, pow(ah, 4, g, 4, 4, DOWN), e)
137-
138-
139-func ai (aj) = (100 + aj)
140-
141-
142-func ak (al,am) = {
143- let an = ag(am)
144-[an, (h * (an - al))]
145- }
146-
147-
148-func ao (ap,B,aq,ar) = {
149- let as = split(valueOrElse(getString(ap, C(B)), "0_0_0_0_0"), "_")
150- let at = valueOrElse(getInteger(ap, E(B)), 0)
151- let au = valueOrElse(getInteger(ap, A(B)), ai(at))
152- let av = split(valueOrElse(getString(ap, M(B)), "0_0_0_0_0"), "_")
153- ([parseIntValue(as[l]), parseIntValue(as[m]), parseIntValue(as[n]), parseIntValue(as[o]), parseIntValue(as[p]), at, au] ++ (if (ar)
154- then [aq, aq, aq, aq, aq]
155- else [parseIntValue(av[l]), parseIntValue(av[m]), parseIntValue(av[n]), parseIntValue(av[o]), parseIntValue(av[p])]))
156- }
157-
158-
159-func aw (ap,B) = {
160- let ax = valueOrElse(getInteger(ap, O(B)), 0)
161- let ay = valueOrElse(getInteger(ap, N(B)), 0)
162- let az = lastBlock.timestamp
163- let aA = max([i, (ax - (j * (az - ay)))])
164- let aB = valueOrElse(getInteger(ap, S(B)), 0)
165- let aC = valueOrElse(getString(ap, T(B)), "")
166- let aD = valueOrElse(getInteger(ap, R(aC)), 0)
167- $Tuple5(aA, ay, aB, aC, aD)
168- }
169-
170-
171-let aE = "LAND"
172-
173-let aF = "DUCK"
174-
175-let aG = "ROBO"
176-
177-let aH = "PRESALE"
178-
179-let aI = 6
180-
181-let aJ = 25
182-
183-let aK = 3456000
184-
185-let aL = 10000000000
186-
187-let aM = "Africa_F_Africa"
188-
189-let aN = 39637
190-
191-let aO = 10
192-
193-let aP = 50000
194-
195-let aQ = 1
196-
197-let aR = 50000000
198-
199-let aS = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
200-
201-let aT = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
202-
203-let aU = 10000000
204-
205-let aV = [15, 16, 17, 18, 19, 20, 21, 22, 23]
206-
207-let aW = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
208-
209-let aX = 6
210-
211-let aY = 8
212-
213-let aZ = 9
214-
215-let ba = 10
135+let af = 1000000
136+
137+let ag = 10000
138+
139+func ah (ai) = fraction(f, pow(ai, 4, g, 4, 4, DOWN), e)
140+
141+
142+func aj (ak) = (100 + ak)
143+
144+
145+func al (am,an) = {
146+ let ao = ah(an)
147+[ao, (h * (ao - am))]
148+ }
149+
150+
151+func ap (aq,B,ar,as) = {
152+ let at = split(valueOrElse(getString(aq, C(B)), "0_0_0_0_0"), "_")
153+ let au = valueOrElse(getInteger(aq, E(B)), 0)
154+ let av = valueOrElse(getInteger(aq, A(B)), aj(au))
155+ let aw = split(valueOrElse(getString(aq, M(B)), "0_0_0_0_0"), "_")
156+ ([parseIntValue(at[l]), parseIntValue(at[m]), parseIntValue(at[n]), parseIntValue(at[o]), parseIntValue(at[p]), au, av] ++ (if (as)
157+ then [ar, ar, ar, ar, ar]
158+ else [parseIntValue(aw[l]), parseIntValue(aw[m]), parseIntValue(aw[n]), parseIntValue(aw[o]), parseIntValue(aw[p])]))
159+ }
160+
161+
162+func ax (aq,B) = {
163+ let ay = valueOrElse(getInteger(aq, O(B)), 0)
164+ let az = valueOrElse(getInteger(aq, N(B)), 0)
165+ let aA = lastBlock.timestamp
166+ let aB = max([i, (ay - (j * (aA - az)))])
167+ let aC = valueOrElse(getInteger(aq, S(B)), 0)
168+ let aD = valueOrElse(getString(aq, T(B)), "")
169+ let aE = valueOrElse(getInteger(aq, R(aD)), 0)
170+ $Tuple5(aB, az, aC, aD, aE)
171+ }
172+
173+
174+let aF = "LAND"
175+
176+let aG = "DUCK"
177+
178+let aH = "ROBO"
179+
180+let aI = "PRESALE"
181+
182+let aJ = 6
183+
184+let aK = 25
185+
186+let aL = 3456000
187+
188+let aM = 10000000000
189+
190+let aN = "Africa_F_Africa"
191+
192+let aO = 39637
193+
194+let aP = 10
195+
196+let aQ = 50000
197+
198+let aR = 1
199+
200+let aS = 50000000
201+
202+let aT = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3", "Boom-Dog L1", "Boom-Dog L2", "Boom-Dog L3"]
203+
204+let aU = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
205+
206+let aV = 10000000
207+
208+let aW = [15, 16, 17, 18, 19, 20, 21, 22, 23]
209+
210+let aX = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_", "23_23_5_20_23_6_35_2_100_0,0,0,0,0,0,0_", "23_23_5_20_23_6_70_2_150_0,0,0,0,0,0,0_", "23_23_5_20_23_6_105_2_200_0,0,0,0,0,0,0_"]
211+
212+let aY = 6
213+
214+let aZ = 8
215+
216+let ba = 9
216217
217218 let bb = 10
218219
219-let bc = 0
220-
221-let bd = 1
222-
223-let be = 2
224-
225-let bf = 3
226-
227-let bg = 4
228-
229-let bh = 0
230-
231-let bi = 1
232-
233-let bj = 2
234-
235-let bk = 3
236-
237-let bl = 0
238-
239-let bm = 1
240-
241-let bn = 2
242-
243-let bo = 3
244-
245-let bp = 0
246-
247-let bq = 1
248-
249-let br = 2
250-
251-func bs (bt) = ("no_" + bt)
252-
253-
254-func bu (bt) = ("lcna_" + bt)
255-
256-
257-func bv (bt) = ("st_" + bt)
258-
259-
260-func bw (bx,bt) = makeString(["las", bx, bt], "_")
261-
262-
263-func by (bz,bt,bA) = ((((("sttao_" + bz) + "_") + bt) + "_") + bA)
264-
265-
266-func bB (Q) = ("wh_" + Q)
267-
268-
269-func bC (bt) = ("infraLevel_" + bt)
270-
271-
272-func bD (Q) = ("fortifications_" + Q)
273-
274-
275-func bE (bt) = ("duckCustomNameByAssetId_" + bt)
276-
277-
278-func bF (c) = ("accountCustomNameByAddr_" + c)
279-
280-
281-func bG (c) = ("accRefBy_" + c)
282-
283-
284-func bH (B) = ("onboardArtActivatedOnDuck_" + B)
285-
286-
287-func bI (c) = ("onboardArtActivatedDuckBy_" + c)
288-
289-
290-func bJ (c) = ("accReferrals_" + c)
291-
292-
293-func bK (bt) = ("duckOwner_" + bt)
294-
295-
296-func bL (bA) = ("stakedDuckByOwner_" + bA)
297-
298-
299-func bM (B) = ("backPack_" + B)
300-
301-
302-func bN (B) = ("duckLocation_" + B)
303-
304-
305-func bO (bP) = ("%s%s__userGwlReleaseTime__" + bP)
306-
307-
308-func bQ () = "emergencyWarehouseProducts"
309-
310-
311-let bR = "deliveryFund"
312-
313-let bS = "%s__lastTourId"
314-
315-func bT (bU) = ("%s%d__tourStaticData__" + toString(bU))
316-
317-
318-func bV (bU) = ("%s%d__tourDynamicData__" + toString(bU))
319-
320-
321-func bW (bU,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bU), B], "__")
322-
323-
324-let bX = 0
325-
326-let bY = 1
327-
328-let bZ = 6
329-
330-let ca = 1
331-
332-func cb (cc,bU) = {
333- let cd = split(valueOrErrorMessage(getString(cc, bT(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__")
334- let ce = split_4C(valueOrErrorMessage(getString(cc, bV(bU)), (("Error reading tournament " + toString(bU)) + " data")), "__")
335-[cd, ce]
336- }
337-
338-
339-func cf (cc,cg) = {
340- let ch = valueOrElse(getInteger(cc, bS), 0)
341- let ci = split(cg, "_")
342- let az = lastBlock.timestamp
343- let cj = cb(cc, ch)
344- let cd = cj[bX]
345- let ce = cj[bY]
346- if (if (if ((ci[bq] == "T"))
347- then (parseIntValue(ci[bp]) == ch)
220+let bc = 10
221+
222+let bd = 0
223+
224+let be = 1
225+
226+let bf = 2
227+
228+let bg = 3
229+
230+let bh = 4
231+
232+let bi = 0
233+
234+let bj = 1
235+
236+let bk = 2
237+
238+let bl = 3
239+
240+let bm = 0
241+
242+let bn = 1
243+
244+let bo = 2
245+
246+let bp = 3
247+
248+let bq = 0
249+
250+let br = 1
251+
252+let bs = 2
253+
254+func bt (bu) = ("no_" + bu)
255+
256+
257+func bv (bu) = ("lcna_" + bu)
258+
259+
260+func bw (bu) = ("st_" + bu)
261+
262+
263+func bx (by,bu) = makeString(["las", by, bu], "_")
264+
265+
266+func bz (bA,bu,bB) = ((((("sttao_" + bA) + "_") + bu) + "_") + bB)
267+
268+
269+func bC (Q) = ("wh_" + Q)
270+
271+
272+func bD (bu) = ("infraLevel_" + bu)
273+
274+
275+func bE (Q) = ("fortifications_" + Q)
276+
277+
278+func bF (bu) = ("duckCustomNameByAssetId_" + bu)
279+
280+
281+func bG (c) = ("accountCustomNameByAddr_" + c)
282+
283+
284+func bH (c) = ("accRefBy_" + c)
285+
286+
287+func bI (B) = ("onboardArtActivatedOnDuck_" + B)
288+
289+
290+func bJ (c) = ("onboardArtActivatedDuckBy_" + c)
291+
292+
293+func bK (c) = ("accReferrals_" + c)
294+
295+
296+func bL (bu) = ("duckOwner_" + bu)
297+
298+
299+func bM (bB) = ("stakedDuckByOwner_" + bB)
300+
301+
302+func bN (B) = ("backPack_" + B)
303+
304+
305+func bO (B) = ("duckLocation_" + B)
306+
307+
308+func bP (bQ) = ("%s%s__userGwlReleaseTime__" + bQ)
309+
310+
311+func bR () = "emergencyWarehouseProducts"
312+
313+
314+let bS = "deliveryFund"
315+
316+let bT = "%s__lastTourId"
317+
318+func bU (bV) = ("%s%d__tourStaticData__" + toString(bV))
319+
320+
321+func bW (bV) = ("%s%d__tourDynamicData__" + toString(bV))
322+
323+
324+func bX (bV,B) = makeString(["%s%d%s__bestResultByTourAndDuck", toString(bV), B], "__")
325+
326+
327+let bY = 0
328+
329+let bZ = 1
330+
331+let ca = 6
332+
333+let cb = 1
334+
335+func cc (cd,bV) = {
336+ let ce = split(valueOrErrorMessage(getString(cd, bU(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
337+ let cf = split_4C(valueOrErrorMessage(getString(cd, bW(bV)), (("Error reading tournament " + toString(bV)) + " data")), "__")
338+[ce, cf]
339+ }
340+
341+
342+func cg (cd,ch) = {
343+ let ci = valueOrElse(getInteger(cd, bT), 0)
344+ let cj = split(ch, "_")
345+ let aA = lastBlock.timestamp
346+ let ck = cc(cd, ci)
347+ let ce = ck[bY]
348+ let cf = ck[bZ]
349+ if (if (if ((cj[br] == "T"))
350+ then (parseIntValue(cj[bq]) == ci)
348351 else false)
349- then (ce[ca] == "INPROGRESS")
352+ then (cf[cb] == "INPROGRESS")
350353 else false)
351- then (parseIntValue(cd[bZ]) > az)
354+ then (parseIntValue(ce[ca]) > aA)
352355 else false
353356 }
354357
355358
356-func ck (cc,cg) = {
357- let ch = valueOrElse(getInteger(cc, bS), 0)
358- let ci = split(cg, "_")
359- let az = lastBlock.timestamp
360- let cj = cb(cc, ch)
361- let cd = cj[bX]
362- let ce = cj[bY]
363- let cl = ci[bq]
364- if (if (if ((ci[bq] == "T"))
365- then (parseIntValue(ci[bp]) == ch)
359+func cl (cd,ch) = {
360+ let ci = valueOrElse(getInteger(cd, bT), 0)
361+ let cj = split(ch, "_")
362+ let aA = lastBlock.timestamp
363+ let ck = cc(cd, ci)
364+ let ce = ck[bY]
365+ let cf = ck[bZ]
366+ let cm = cj[br]
367+ if (if (if ((cj[br] == "T"))
368+ then (parseIntValue(cj[bq]) == ci)
366369 else false)
367- then (ce[ca] == "INPROGRESS")
370+ then (cf[cb] == "INPROGRESS")
368371 else false)
369- then (parseIntValue(cd[bZ]) > az)
372+ then (parseIntValue(ce[ca]) > aA)
370373 else false
371374 }
372375
373376
374-func cm (cn) = (parseIntValue(cn[aX]) * aU)
375-
376-
377-func co (cp,cq,cr) = throw(((((("Cheat attempt: oldLoc=" + cp) + ", newLoc=") + cq) + ", case=") + toString(cr)))
378-
379-
380-let cs = false
377+func cn (co) = (parseIntValue(co[aY]) * aV)
378+
379+
380+func cp (cq,cr,cs) = throw(((((("Cheat attempt: oldLoc=" + cq) + ", newLoc=") + cr) + ", case=") + toString(cs)))
381+
381382
382383 let ct = false
383384
384385 let cu = false
385386
386-let cv = 86400000
387-
388-let cw = take(drop(this.bytes, 1), 1)
389-
390-let cx = {
391- let cy = cw
392- if ((base58'2W' == cy))
393- then if (cs)
387+let cv = false
388+
389+let cw = 86400000
390+
391+let cx = take(drop(this.bytes, 1), 1)
392+
393+let cy = {
394+ let cz = cx
395+ if ((base58'2W' == cz))
396+ then if (ct)
394397 then base58'CWsMtTZC5BjjoL4Q1ayW4Wwb1ehGACQB6DrKyPgotKfm'
395398 else base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
396- else if ((base58'2T' == cy))
399+ else if ((base58'2T' == cz))
397400 then base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
398401 else throw("Unknown chain")
399402 }
400403
401-let cz = {
402- let cy = cw
403- if ((base58'2W' == cy))
404+let cA = {
405+ let cz = cx
406+ if ((base58'2W' == cz))
404407 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
405- else if ((base58'2T' == cy))
408+ else if ((base58'2T' == cz))
406409 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
407410 else throw("Unknown chain")
408411 }
409412
410-let cA = {
411- let cy = cw
412- if ((base58'2W' == cy))
413+let cB = {
414+ let cz = cx
415+ if ((base58'2W' == cz))
413416 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
414- else if ((base58'2T' == cy))
417+ else if ((base58'2T' == cz))
415418 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
416419 else throw("Unknown chain")
417420 }
418421
419-let cB = {
420- let cy = cw
421- if ((base58'2W' == cy))
422+let cC = {
423+ let cz = cx
424+ if ((base58'2W' == cz))
422425 then 10000000000
423- else if ((base58'2T' == cy))
426+ else if ((base58'2T' == cz))
424427 then 100000000
425428 else throw("Unknown chain")
426429 }
427430
428-let cC = {
429- let cy = cw
430- if ((base58'2W' == cy))
431- then cv
432- else if ((base58'2T' == cy))
431+let cD = {
432+ let cz = cx
433+ if ((base58'2W' == cz))
434+ then cw
435+ else if ((base58'2T' == cz))
433436 then 60000
434437 else throw("Unknown chain")
435438 }
436439
437-let cD = "__"
438-
439-let cE = 1000000
440-
441-let cF = 100000000
442-
443-let cG = 25
444-
445-let cH = 100
446-
447-let cI = 225
448-
449-let cJ = 400
450-
451-let cK = 625
452-
453-let cL = [0, 1, 2, 3, 4, 5]
454-
455-func cM (cN,cO) = valueOrErrorMessage(getString(cN, cO), makeString(["mandatory ", toString(cN), ".", cO, " is not defined"], ""))
456-
457-
458-let cP = 1
459-
460-let cQ = 2
461-
462-let cR = 3
463-
464-let cS = 4
465-
466-let cT = 7
467-
468-let cU = 8
469-
470-func cV () = "%s__restConfig"
471-
472-
473-func cW () = "%s__restAddr"
474-
475-
476-func cX (cY) = split_4C(cM(cY, cV()), cD)
477-
478-
479-func cZ (da,db) = valueOrErrorMessage(addressFromString(da[db]), ("Rest cfg doesn't contain address at index " + toString(db)))
480-
481-
482-let dc = addressFromStringValue(valueOrElse(getString(this, cW()), cA))
483-
484-let da = cX(dc)
485-
486-let ap = cZ(da, cP)
487-
488-let dd = cZ(da, cQ)
489-
490-let de = cZ(da, cR)
491-
492-let df = cZ(da, cS)
493-
494-let dg = cZ(da, cT)
495-
496-let dh = cZ(da, cU)
497-
498-let di = 0
499-
500-let dj = 1
501-
502-let dk = 2
503-
504-let dl = 3
505-
506-let dm = "wlg_assetId"
507-
508-let dn = valueOrErrorMessage(getBinary(df, dm), "WLGOLD is not issued yet")
509-
510-let do = "acresAssetId"
511-
512-let dp = valueOrErrorMessage(getBinary(dh, do), "ACRES is not issued yet")
513-
514-let dq = 2
515-
516-func dr (cN) = ("finishBlockForAddr_" + cN)
517-
518-
519-func ds () = "resTypesProportions"
520-
521-
522-func dt (du) = ("resTypesByContinent_" + du)
523-
524-
525-func dv (bA) = ("stakedLandsByOwner_" + bA)
526-
527-
528-func dw (bA) = ("stakedPiecesByOwner_" + bA)
529-
530-
531-func dx (dy) = {
532- let cy = dy
533- if ($isInstanceOf(cy, "String"))
440+let cE = "__"
441+
442+let cF = 1000000
443+
444+let cG = 100000000
445+
446+let cH = 25
447+
448+let cI = 100
449+
450+let cJ = 225
451+
452+let cK = 400
453+
454+let cL = 625
455+
456+let cM = [0, 1, 2, 3, 4, 5]
457+
458+func cN (cO,cP) = valueOrErrorMessage(getString(cO, cP), makeString(["mandatory ", toString(cO), ".", cP, " is not defined"], ""))
459+
460+
461+let cQ = 1
462+
463+let cR = 2
464+
465+let cS = 3
466+
467+let cT = 4
468+
469+let cU = 7
470+
471+let cV = 8
472+
473+func cW () = "%s__restConfig"
474+
475+
476+func cX () = "%s__restAddr"
477+
478+
479+func cY (cZ) = split_4C(cN(cZ, cW()), cE)
480+
481+
482+func da (db,dc) = valueOrErrorMessage(addressFromString(db[dc]), ("Rest cfg doesn't contain address at index " + toString(dc)))
483+
484+
485+let dd = addressFromStringValue(valueOrElse(getString(this, cX()), cB))
486+
487+let db = cY(dd)
488+
489+let aq = da(db, cQ)
490+
491+let de = da(db, cR)
492+
493+let df = da(db, cS)
494+
495+let dg = da(db, cT)
496+
497+let dh = da(db, cU)
498+
499+let di = da(db, cV)
500+
501+let dj = 0
502+
503+let dk = 1
504+
505+let dl = 2
506+
507+let dm = 3
508+
509+let dn = "wlg_assetId"
510+
511+let do = valueOrErrorMessage(getBinary(dg, dn), "WLGOLD is not issued yet")
512+
513+let dp = "acresAssetId"
514+
515+let dq = valueOrErrorMessage(getBinary(di, dp), "ACRES is not issued yet")
516+
517+let dr = 2
518+
519+func ds (cO) = ("finishBlockForAddr_" + cO)
520+
521+
522+func dt () = "resTypesProportions"
523+
524+
525+func du (dv) = ("resTypesByContinent_" + dv)
526+
527+
528+func dw (bB) = ("stakedLandsByOwner_" + bB)
529+
530+
531+func dx (bB) = ("stakedPiecesByOwner_" + bB)
532+
533+
534+func dy (dz) = {
535+ let cz = dz
536+ if ($isInstanceOf(cz, "String"))
534537 then {
535- let dz = cy
536- dz
538+ let dA = cz
539+ dA
537540 }
538541 else throw("fail to cast into String")
539542 }
540543
541544
542-func dA (dy) = {
543- let cy = dy
544- if ($isInstanceOf(cy, "Int"))
545+func dB (dz) = {
546+ let cz = dz
547+ if ($isInstanceOf(cz, "Int"))
545548 then {
546- let dB = cy
547- dB
549+ let dC = cz
550+ dC
548551 }
549552 else throw("fail to cast into Int")
550553 }
551554
552555
553-func dC (dy) = {
554- let cy = dy
555- if ($isInstanceOf(cy, "List[Any]"))
556+func dD (dz) = {
557+ let cz = dz
558+ if ($isInstanceOf(cz, "List[Any]"))
556559 then {
557- let dD = cy
558- dD
560+ let dE = cz
561+ dE
559562 }
560563 else throw("fail to cast into List[Any]")
561564 }
562565
563566
564-func dE (dy) = {
565- let cy = dy
566- if ($isInstanceOf(cy, "Boolean"))
567+func dF (dz) = {
568+ let cz = dz
569+ if ($isInstanceOf(cz, "Boolean"))
567570 then {
568- let dz = cy
569- dz
571+ let dA = cz
572+ dA
570573 }
571574 else throw("fail to cast into Boolean")
572575 }
573576
574577
575-func dF (dG) = {
576- let cy = dG
577- if (("S" == cy))
578- then cG
579- else if (("M" == cy))
580- then cH
581- else if (("L" == cy))
582- then cI
583- else if (("XL" == cy))
584- then cJ
585- else if (("XXL" == cy))
586- then cK
578+func dG (dH) = {
579+ let cz = dH
580+ if (("S" == cz))
581+ then cH
582+ else if (("M" == cz))
583+ then cI
584+ else if (("L" == cz))
585+ then cJ
586+ else if (("XL" == cz))
587+ then cK
588+ else if (("XXL" == cz))
589+ then cL
587590 else throw("Unknown land size")
588591 }
589592
590593
591-func dH (dz) = isDefined(parseInt(dz))
592-
593-
594-func dI () = "contractsBlocked"
595-
596-
597-func dJ (c) = ("lastTxIdByUser_" + c)
598-
599-
600-func dK (dL,dM) = {
601- let dN = pow(10, 0, dM, 0, 0, DOWN)
602- let dO = toString((dL % dN))
603- let dP = drop(toString(dN), (1 + size(dO)))
604- (((toString((dL / dN)) + ".") + dP) + dO)
605- }
606-
607-
608-func dQ (dR,dS,dT) = if ((0 >= dR))
594+func dI (dA) = isDefined(parseInt(dA))
595+
596+
597+func dJ () = "contractsBlocked"
598+
599+
600+func dK (c) = ("lastTxIdByUser_" + c)
601+
602+
603+func dL (dM,dN) = {
604+ let dO = pow(10, 0, dN, 0, 0, DOWN)
605+ let dP = toString((dM % dO))
606+ let dQ = drop(toString(dO), (1 + size(dP)))
607+ (((toString((dM / dO)) + ".") + dQ) + dP)
608+ }
609+
610+
611+func dR (dS,dT,dU) = if ((0 >= dS))
609612 then throw("maxValue should be > 0")
610613 else {
611- let dU = sha256((dS + dT))
612- (toInt(dU) % dR)
614+ let dV = sha256((dT + dU))
615+ (toInt(dV) % dS)
613616 }
614617
615618
616-let dV = {
617- let cy = cw
618- if ((base58'2W' == cy))
619+let dW = {
620+ let cz = cx
621+ if ((base58'2W' == cz))
619622 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
620- else if ((base58'2T' == cy))
623+ else if ((base58'2T' == cz))
621624 then this
622625 else throw("Unknown chain")
623626 }
624627
625-let dW = {
626- let cy = cw
627- if ((base58'2W' == cy))
628+let dX = {
629+ let cz = cx
630+ if ((base58'2W' == cz))
628631 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
629- else if ((base58'2T' == cy))
632+ else if ((base58'2T' == cz))
630633 then this
631634 else throw("Unknown chain")
632635 }
633636
634-let dX = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
635-
636-let dY = 300000
637-
638-let dZ = 5000000
639-
640-let ea = 50
641-
642-let eb = 10000000
643-
644-let ec = {
645- let cy = cw
646- if ((base58'2W' == cy))
637+let dY = base64'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=='
638+
639+let dZ = 300000
640+
641+let ea = 5000000
642+
643+let eb = 50
644+
645+let ec = 10000000
646+
647+let ed = {
648+ let cz = cx
649+ if ((base58'2W' == cz))
647650 then 252289527462
648- else if ((base58'2T' == cy))
651+ else if ((base58'2T' == cz))
649652 then 2522895274
650653 else throw("Unknown chain")
651654 }
652655
653-let ed = {
654- let cy = cw
655- if ((base58'2W' == cy))
656+let ee = {
657+ let cz = cx
658+ if ((base58'2W' == cz))
656659 then 250000000
657- else if ((base58'2T' == cy))
660+ else if ((base58'2T' == cz))
658661 then 250000000
659662 else throw("Unknown chain")
660663 }
661664
662-let ee = 100000
663-
664-let ef = 2500000000
665-
666-let eg = toBigInt(5)
667-
668-let eh = toBigInt(20)
669-
670-let ei = toBigInt((20 * 20))
671-
672-let ej = toBigInt(((20 * 20) * 20))
673-
674-let ek = toBigInt((((20 * 20) * 20) * 20))
675-
676-let el = toBigInt(((((20 * 20) * 20) * 20) * 20))
677-
678-let em = 500
679-
680-func en () = "nextLandNum"
681-
682-
683-func eo (ep) = ("lcn_" + ep)
684-
685-
686-func eq (er) = ("la_" + er)
687-
688-
689-func es (bt,bA) = ((("ilao_" + bt) + "_") + bA)
690-
691-
692-func et (er) = ("lo_" + er)
693-
694-
695-func eu (ep) = ("duckByCustomName_" + ep)
696-
697-
698-func ev (ep) = ("accountByCustomName_" + ep)
699-
700-
701-func ew () = "oldiesList"
702-
703-
704-func ex () = "nextRoboDuck"
705-
706-
707-let ey = 0
708-
709-let ez = 1
710-
711-let eA = 2
712-
713-let eB = 0
714-
715-let eC = 5
716-
717-let eD = 6
718-
719-let eE = 7
720-
721-func eF (er,dG) = ((aE + er) + dG)
722-
723-
724-func eG (eH,eI) = {
725- let eJ = if ((eH >= 0))
726- then (((eH + eI) - 1) / eI)
727- else -((((-(eH) + eI) - 1) / eI))
728- (eJ * cF)
729- }
730-
731-
732-func eK (eL,eM) = {
733- let eN = (((((eM[0] + eM[1]) + eM[2]) + eM[3]) + eM[4]) + eM[5])
734- if ((0 >= eN))
665+let ef = 100000
666+
667+let eg = 2500000000
668+
669+let eh = toBigInt(5)
670+
671+let ei = toBigInt(20)
672+
673+let ej = toBigInt((20 * 20))
674+
675+let ek = toBigInt(((20 * 20) * 20))
676+
677+let el = toBigInt((((20 * 20) * 20) * 20))
678+
679+let em = toBigInt(((((20 * 20) * 20) * 20) * 20))
680+
681+let en = 500
682+
683+func eo () = "nextLandNum"
684+
685+
686+func ep (eq) = ("lcn_" + eq)
687+
688+
689+func er (es) = ("la_" + es)
690+
691+
692+func et (bu,bB) = ((("ilao_" + bu) + "_") + bB)
693+
694+
695+func eu (es) = ("lo_" + es)
696+
697+
698+func ev (eq) = ("duckByCustomName_" + eq)
699+
700+
701+func ew (eq) = ("accountByCustomName_" + eq)
702+
703+
704+func ex () = "oldiesList"
705+
706+
707+func ey () = "nextRoboDuck"
708+
709+
710+let ez = 0
711+
712+let eA = 1
713+
714+let eB = 2
715+
716+let eC = 0
717+
718+let eD = 5
719+
720+let eE = 6
721+
722+let eF = 7
723+
724+func eG (es,dH) = ((aF + es) + dH)
725+
726+
727+func eH (eI,eJ) = {
728+ let eK = if ((eI >= 0))
729+ then (((eI + eJ) - 1) / eJ)
730+ else -((((-(eI) + eJ) - 1) / eJ))
731+ (eK * cG)
732+ }
733+
734+
735+func eL (eM,eN) = {
736+ let eO = (((((eN[0] + eN[1]) + eN[2]) + eN[3]) + eN[4]) + eN[5])
737+ if ((0 >= eO))
735738 then throw("Zero weights sum")
736739 else {
737- let eO = fraction(eL, cE, eN)
738- func eP (eQ,eR) = (eQ :+ fraction(eR, eO, cE))
739-
740- let eS = eM
741- let eT = size(eS)
742- let eU = nil
743- func eV (eW,eX) = if ((eX >= eT))
744- then eW
745- else eP(eW, eS[eX])
746-
747- func eY (eW,eX) = if ((eX >= eT))
748- then eW
740+ let eP = fraction(eM, cF, eO)
741+ func eQ (eR,eS) = (eR :+ fraction(eS, eP, cF))
742+
743+ let eT = eN
744+ let eU = size(eT)
745+ let eV = nil
746+ func eW (eX,eY) = if ((eY >= eU))
747+ then eX
748+ else eQ(eX, eT[eY])
749+
750+ func eZ (eX,eY) = if ((eY >= eU))
751+ then eX
749752 else throw("List size exceeds 6")
750753
751- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
752- }
753- }
754-
755-
756-func eZ (eL) = {
757- let fa = split(value(getString(ds())), "_")
758- if ((size(fa) != aI))
754+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
755+ }
756+ }
757+
758+
759+func fa (eM) = {
760+ let fb = split(value(getString(dt())), "_")
761+ if ((size(fb) != aJ))
759762 then throw("Wrong proportions data")
760763 else {
761- let fb = [parseIntValue(fa[0]), parseIntValue(fa[1]), parseIntValue(fa[2]), parseIntValue(fa[3]), parseIntValue(fa[4]), parseIntValue(fa[5])]
762- eK(eL, fb)
763- }
764- }
765-
766-
767-func fc (fd,fe,ff) = {
768- let fg = eZ(ff)
769- func fh (eQ,db) = {
770- let fi = (parseIntValue(fe[db]) - fg[db])
771- if ((0 > fi))
772- then throw(((((("Not enough material idx=" + toString(db)) + ", you have ") + fe[db]) + ", but need ") + toString(fg[db])))
773- else (eQ :+ toString(fi))
764+ let fc = [parseIntValue(fb[0]), parseIntValue(fb[1]), parseIntValue(fb[2]), parseIntValue(fb[3]), parseIntValue(fb[4]), parseIntValue(fb[5])]
765+ eL(eM, fc)
766+ }
767+ }
768+
769+
770+func fd (fe,ff,fg) = {
771+ let fh = fa(fg)
772+ func fi (eR,dc) = {
773+ let fj = (parseIntValue(ff[dc]) - fh[dc])
774+ if ((0 > fj))
775+ then throw(((((("Not enough material idx=" + toString(dc)) + ", you have ") + ff[dc]) + ", but need ") + toString(fh[dc])))
776+ else (eR :+ toString(fj))
774777 }
775778
776- if (fd)
779+ if (fe)
777780 then {
778- let eS = cL
779- let eT = size(eS)
780- let eU = nil
781- func eV (eW,eX) = if ((eX >= eT))
782- then eW
783- else fh(eW, eS[eX])
784-
785- func eY (eW,eX) = if ((eX >= eT))
786- then eW
781+ let eT = cM
782+ let eU = size(eT)
783+ let eV = nil
784+ func eW (eX,eY) = if ((eY >= eU))
785+ then eX
786+ else fi(eX, eT[eY])
787+
788+ func eZ (eX,eY) = if ((eY >= eU))
789+ then eX
787790 else throw("List size exceeds 6")
788791
789- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
790- }
791- else fe
792- }
793-
794-
795-func fj (fk,fl) = if ((fl == ""))
796- then $Tuple2(fk, false)
792+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
793+ }
794+ else ff
795+ }
796+
797+
798+func fk (fl,fm) = if ((fm == ""))
799+ then $Tuple2(fl, false)
797800 else {
798- func fm (eQ,fn) = {
799- let fo = split(fn, ",")
800- if ((size(fo) != 2))
801+ func fn (eR,fo) = {
802+ let fp = split(fo, ",")
803+ if ((size(fp) != 2))
801804 then throw("Incorrect format, should be index,amount")
802805 else {
803- let db = parseIntValue(fo[0])
804- if (if ((0 > db))
806+ let dc = parseIntValue(fp[0])
807+ if (if ((0 > dc))
805808 then true
806- else (db >= size(aW)))
809+ else (dc >= size(aX)))
807810 then throw("Unknown product idx")
808811 else {
809- let fp = parseIntValue(fo[1])
810- let fq = split(eQ._1, (fo[0] + ":"))
811- if ((size(fq) != 2))
812- then throw((("You don't have " + aS[db]) + " equipped"))
812+ let fq = parseIntValue(fp[1])
813+ let fr = split(eR._1, (fp[0] + ":"))
814+ if ((size(fr) != 2))
815+ then throw((("You don't have " + aT[dc]) + " equipped"))
813816 else {
814- let fr = fq[1]
815- let fs = if (dH(take(drop(fr, 1), 1)))
817+ let fs = fr[1]
818+ let ft = if (dI(take(drop(fs, 1), 1)))
816819 then 2
817820 else 1
818- let ft = parseIntValue(take(fr, fs))
819- let fu = drop(fr, fs)
820- let fv = if ((ft >= fp))
821- then (ft - fp)
822- else throw(((((("You equipped " + toString(ft)) + " of ") + aS[db]) + ", but tried to use ") + toString(fp)))
823- $Tuple2(((((fq[0] + fo[0]) + ":") + toString(fv)) + fu), if (eQ._2)
821+ let fu = parseIntValue(take(fs, ft))
822+ let fv = drop(fs, ft)
823+ let fw = if ((fu >= fq))
824+ then (fu - fq)
825+ else throw(((((("You equipped " + toString(fu)) + " of ") + aT[dc]) + ", but tried to use ") + toString(fq)))
826+ $Tuple2(((((fr[0] + fp[0]) + ":") + toString(fw)) + fv), if (eR._2)
824827 then true
825- else if (if ((db >= 6))
826- then (8 >= db)
828+ else if (if ((dc >= 6))
829+ then (8 >= dc)
827830 else false)
828- then (fv == 0)
831+ then (fw == 0)
829832 else false)
830833 }
831834 }
832835 }
833836 }
834837
835- let eS = split(fl, "_")
836- let eT = size(eS)
837- let eU = $Tuple2(fk, false)
838- func eV (eW,eX) = if ((eX >= eT))
839- then eW
840- else fm(eW, eS[eX])
841-
842- func eY (eW,eX) = if ((eX >= eT))
843- then eW
838+ let eT = split(fm, "_")
839+ let eU = size(eT)
840+ let eV = $Tuple2(fl, false)
841+ func eW (eX,eY) = if ((eY >= eU))
842+ then eX
843+ else fn(eX, eT[eY])
844+
845+ func eZ (eX,eY) = if ((eY >= eU))
846+ then eX
844847 else throw("List size exceeds 10")
845848
846- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
849+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
847850 }
848851
849852
850-func fw (fx) = {
851- let fy = if ((fx == ""))
853+func fx (fy) = {
854+ let fz = if ((fy == ""))
852855 then nil
853- else split_4C(fx, "_")
854- func fz (eQ,cn) = {
855- let fA = (size(eQ) / 8)
856- let ft = if ((size(fy) > fA))
857- then parseIntValue(fy[fA])
856+ else split_4C(fy, "_")
857+ func fA (eR,co) = {
858+ let fB = (size(eR) / 8)
859+ let fu = if ((size(fz) > fB))
860+ then parseIntValue(fz[fB])
858861 else 0
859- (eQ + toBytes(ft))
862+ (eR + toBytes(fu))
860863 }
861864
862- let eS = aW
863- let eT = size(eS)
864- let eU = base58''
865- func eV (eW,eX) = if ((eX >= eT))
866- then eW
867- else fz(eW, eS[eX])
868-
869- func eY (eW,eX) = if ((eX >= eT))
870- then eW
865+ let eT = aX
866+ let eU = size(eT)
867+ let eV = base58''
868+ func eW (eX,eY) = if ((eY >= eU))
869+ then eX
870+ else fA(eX, eT[eY])
871+
872+ func eZ (eX,eY) = if ((eY >= eU))
873+ then eX
871874 else throw("List size exceeds 50")
872875
873- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
874- }
875-
876-
877-func fB (fC) = {
878- func fD (eQ,cn) = {
879- let fA = size(eQ)
880- let fE = take(drop(fC, (8 * fA)), 8)
881- (eQ :+ toString(toInt(fE)))
876+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
877+ }
878+
879+
880+func fC (fD) = {
881+ func fE (eR,co) = {
882+ let fB = size(eR)
883+ let fF = take(drop(fD, (8 * fB)), 8)
884+ (eR :+ toString(toInt(fF)))
882885 }
883886
884887 makeString_2C({
885- let eS = aW
886- let eT = size(eS)
887- let eU = nil
888- func eV (eW,eX) = if ((eX >= eT))
889- then eW
890- else fD(eW, eS[eX])
891-
892- func eY (eW,eX) = if ((eX >= eT))
893- then eW
888+ let eT = aX
889+ let eU = size(eT)
890+ let eV = nil
891+ func eW (eX,eY) = if ((eY >= eU))
892+ then eX
893+ else fE(eX, eT[eY])
894+
895+ func eZ (eX,eY) = if ((eY >= eU))
896+ then eX
894897 else throw("List size exceeds 50")
895898
896- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
899+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
897900 }, "_")
898901 }
899902
900903
901-func fF (fG,fH) = {
902- func fI (eQ,fA) = {
903- let fJ = if ((size(fG) > (7 + fA)))
904- then fG[(7 + fA)]
904+func fG (fH,fI) = {
905+ func fJ (eR,fB) = {
906+ let fK = if ((size(fH) > (7 + fB)))
907+ then fH[(7 + fB)]
905908 else 0
906- if ((parseIntValue(fH[fA]) > (fG[fA] + fJ)))
907- then throw(("Requirement not satisfied: " + k[fA]))
909+ if ((parseIntValue(fI[fB]) > (fH[fB] + fK)))
910+ then throw(("Requirement not satisfied: " + k[fB]))
908911 else true
909912 }
910913
911- let eS = [0, 1, 2, 3, 4, 5, 6]
912- let eT = size(eS)
913- let eU = false
914- func eV (eW,eX) = if ((eX >= eT))
915- then eW
916- else fI(eW, eS[eX])
917-
918- func eY (eW,eX) = if ((eX >= eT))
919- then eW
914+ let eT = [0, 1, 2, 3, 4, 5, 6]
915+ let eU = size(eT)
916+ let eV = false
917+ func eW (eX,eY) = if ((eY >= eU))
918+ then eX
919+ else fJ(eX, eT[eY])
920+
921+ func eZ (eX,eY) = if ((eY >= eU))
922+ then eX
920923 else throw("List size exceeds 7")
921924
922- eY(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7)
923- }
924-
925-
926-func fK (fL,fy,fM,fG,fN,fO) = {
927- let fo = split(fL, ":")
928- if ((size(fo) != 2))
925+ eZ(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7)
926+ }
927+
928+
929+func fL (fM,fz,fN,fH,fO,fP) = {
930+ let fp = split(fM, ":")
931+ if ((size(fp) != 2))
929932 then throw("Incorrect format, should be index:amount")
930- else if (if (!(fM))
931- then (size(fo[0]) != 2)
933+ else if (if (!(fN))
934+ then (size(fp[0]) != 2)
932935 else false)
933936 then throw("Product idx should be 2 digits, zero padded")
934937 else {
935- let fP = parseIntValue(fo[0])
936- let fQ = parseIntValue(fo[1])
937- if (!(containsElement(aV, fP)))
938- then throw((("Product '" + aS[fP]) + "' cannot be used for land defense"))
939- else if ((0 > fQ))
938+ let fQ = parseIntValue(fp[0])
939+ let fR = parseIntValue(fp[1])
940+ if (!(containsElement(aW, fQ)))
941+ then throw((("Product '" + aT[fQ]) + "' cannot be used for land defense"))
942+ else if ((0 > fR))
940943 then throw("Count can't be negative")
941- else if ((fQ > u))
942- then throw(((("Can't put more than " + toString(u)) + " of ") + aS[fP]))
943- else if ((fQ == 0))
944- then $Tuple3(fy, fN, fO)
944+ else if ((fR > u))
945+ then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
946+ else if ((fR == 0))
947+ then $Tuple3(fz, fO, fP)
945948 else {
946- let fR = take(fy, (8 * fP))
947- let ft = toInt(take(drop(fy, (8 * fP)), 8))
948- let fu = drop(fy, (8 * (fP + 1)))
949- let cn = split(aW[fP], "_")
950- if (if (!(fM))
951- then (fQ > ft)
949+ let fS = take(fz, (8 * fQ))
950+ let fu = toInt(take(drop(fz, (8 * fQ)), 8))
951+ let fv = drop(fz, (8 * (fQ + 1)))
952+ let co = split(aX[fQ], "_")
953+ if (if (!(fN))
954+ then (fR > fu)
952955 else false)
953- then throw(((((("You have " + toString(ft)) + " of ") + aS[fP]) + ", but tried to use ") + toString(fQ)))
956+ then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
954957 else {
955- let fv = if (if (!(fM))
956- then fF(fG, split(cn[aZ], ","))
958+ let fw = if (if (!(fN))
959+ then fG(fH, split(co[ba], ","))
957960 else false)
958- then (ft - fQ)
959- else (ft + fQ)
960- let fS = (eG(fv, bb) - eG(ft, bb))
961- $Tuple3(((fR + toBytes(fv)) + fu), (fN + fS), (fO - fS))
961+ then (fu - fR)
962+ else (fu + fR)
963+ let fT = (eH(fw, bc) - eH(fu, bc))
964+ $Tuple3(((fS + toBytes(fw)) + fv), (fO + fT), (fP - fT))
962965 }
963966 }
964967 }
965968 }
966969
967970
968-func fT (fL,fy,fM,fU,fV,fW,fG) = {
969- let fo = split(fL, ":")
970- if ((size(fo) != 2))
971+func fU (fM,fz,fN,fV,fW,fX,fH) = {
972+ let fp = split(fM, ":")
973+ if ((size(fp) != 2))
971974 then throw("Incorrect format, should be index:amount")
972- else if (if (!(fM))
973- then (size(fo[0]) != 2)
975+ else if (if (!(fN))
976+ then (size(fp[0]) != 2)
974977 else false)
975978 then throw("Product idx should be 2 digits, zero padded")
976979 else {
977- let fP = parseIntValue(fo[0])
978- let fQ = parseIntValue(fo[1])
979- if (if ((0 > fP))
980+ let fQ = parseIntValue(fp[0])
981+ let fR = parseIntValue(fp[1])
982+ if (if ((0 > fQ))
980983 then true
981- else (fP >= size(aW)))
984+ else (fQ >= size(aX)))
982985 then throw("Unknown product idx")
983- else if ((0 > fQ))
986+ else if ((0 > fR))
984987 then throw("Count can't be negative")
985- else if ((fQ > u))
986- then throw(((("Can't put more than " + toString(u)) + " of ") + aS[fP]))
987- else if ((fQ == 0))
988- then $Tuple2(fy, false)
988+ else if ((fR > u))
989+ then throw(((("Can't put more than " + toString(u)) + " of ") + aT[fQ]))
990+ else if ((fR == 0))
991+ then $Tuple2(fz, false)
989992 else {
990- let fR = take(fy, (8 * fP))
991- let ft = toInt(take(drop(fy, (8 * fP)), 8))
992- let fu = drop(fy, (8 * (fP + 1)))
993- let cn = split(aW[fP], "_")
994- if (if (!(fM))
995- then (fQ > ft)
993+ let fS = take(fz, (8 * fQ))
994+ let fu = toInt(take(drop(fz, (8 * fQ)), 8))
995+ let fv = drop(fz, (8 * (fQ + 1)))
996+ let co = split(aX[fQ], "_")
997+ if (if (!(fN))
998+ then (fR > fu)
996999 else false)
997- then throw(((((("You have " + toString(ft)) + " of ") + aS[fP]) + ", but tried to use ") + toString(fQ)))
1000+ then throw(((((("You have " + toString(fu)) + " of ") + aT[fQ]) + ", but tried to use ") + toString(fR)))
9981001 else {
999- let fX = if (if (!(fM))
1000- then fF(fG, split(cn[aZ], ","))
1002+ let fY = if (if (!(fN))
1003+ then fG(fH, split(co[ba], ","))
10011004 else false)
10021005 then {
1003- let fY = cn[ba]
1004- if ((fY == ""))
1006+ let fZ = co[bb]
1007+ if ((fZ == ""))
10051008 then throw("Item cannot be equipped")
10061009 else {
1007- let fZ = parseIntValue(fY)
1008- let ga = (fZ / 100)
1009- if ((fU != ga))
1010+ let ga = parseIntValue(fZ)
1011+ let gb = (ga / 100)
1012+ if ((fV != gb))
10101013 then throw("Segment incompatible")
10111014 else {
1012- let gb = ((fZ % 100) / 10)
1013- if ((fV != gb))
1015+ let gc = ((ga % 100) / 10)
1016+ if ((fW != gc))
10141017 then throw("Slot incompatible")
10151018 else {
1016- let gc = (fZ % 10)
1017- if (if ((fW != 0))
1018- then (gc > 1)
1019+ let gd = (ga % 10)
1020+ if (if ((fX != 0))
1021+ then (gd > 1)
10191022 else false)
10201023 then throw("Big items should occupy slot 0")
1021- else (gc > 1)
1024+ else (gd > 1)
10221025 }
10231026 }
10241027 }
10251028 }
10261029 else false
1027- $Tuple2(((fR + toBytes((ft + (if (fM)
1028- then fQ
1029- else -(fQ))))) + fu), fX)
1030+ $Tuple2(((fS + toBytes((fu + (if (fN)
1031+ then fR
1032+ else -(fR))))) + fv), fY)
10301033 }
10311034 }
10321035 }
10331036 }
10341037
10351038
1036-func gd (ge,gf,fM,fU,fV,gg) = if ((ge != ""))
1039+func ge (gf,gg,fN,fV,fW,gh) = if ((gf != ""))
10371040 then {
1038- let gh = split(ge, ",")
1039- if ((size(gh) > t))
1041+ let gi = split(gf, ",")
1042+ if ((size(gi) > t))
10401043 then throw("Wrong slots format")
10411044 else {
1042- let gi = gh[0]
1043- let gj = if ((size(gh) > 1))
1044- then gh[1]
1045+ let gj = gi[0]
1046+ let gk = if ((size(gi) > 1))
1047+ then gi[1]
10451048 else ""
1046- if (if ((gi == ""))
1047- then (gj == "")
1049+ if (if ((gj == ""))
1050+ then (gk == "")
10481051 else false)
1049- then gf
1052+ then gg
10501053 else {
1051- let gk = if ((gi != ""))
1052- then fT(gi, gf, fM, fU, fV, 0, gg)
1053- else $Tuple2(gf, false)
1054- if ((gj != ""))
1055- then if (gk._2)
1054+ let gl = if ((gj != ""))
1055+ then fU(gj, gg, fN, fV, fW, 0, gh)
1056+ else $Tuple2(gg, false)
1057+ if ((gk != ""))
1058+ then if (gl._2)
10561059 then throw("Big item already occupies slot")
1057- else fT(gj, gk._1, fM, fU, fV, 1, gg)._1
1058- else gk._1
1060+ else fU(gk, gl._1, fN, fV, fW, 1, gh)._1
1061+ else gl._1
10591062 }
10601063 }
10611064 }
1062- else gf
1063-
1064-
1065-func gl (gm,gn,fM,gg) = {
1066- func fU (eQ,go) = {
1067- let fA = eQ._1
1068- let fV = split(go, ";")
1069- if ((size(fV) != s))
1065+ else gg
1066+
1067+
1068+func gm (gn,go,fN,gh) = {
1069+ func fV (eR,gp) = {
1070+ let fB = eR._1
1071+ let fW = split(gp, ";")
1072+ if ((size(fW) != s))
10701073 then throw("Wrong segment format")
10711074 else {
1072- let gp = fV[0]
1073- let gq = fV[1]
1074- if (if ((gp == ""))
1075- then (gq == "")
1075+ let gq = fW[0]
1076+ let gr = fW[1]
1077+ if (if ((gq == ""))
1078+ then (gr == "")
10761079 else false)
1077- then $Tuple2((fA + 1), eQ._2)
1080+ then $Tuple2((fB + 1), eR._2)
10781081 else {
1079- let gr = gd(gp, eQ._2, fM, fA, 0, gg)
1080- $Tuple2((fA + 1), gd(gq, gr, fM, fA, 1, gg))
1082+ let gs = ge(gq, eR._2, fN, fB, 0, gh)
1083+ $Tuple2((fB + 1), ge(gr, gs, fN, fB, 1, gh))
10811084 }
10821085 }
10831086 }
10841087
1085-( let eS = gm
1086- let eT = size(eS)
1087- let eU = $Tuple2(0, gn)
1088- func eV (eW,eX) = if ((eX >= eT))
1089- then eW
1090- else fU(eW, eS[eX])
1091-
1092- func eY (eW,eX) = if ((eX >= eT))
1093- then eW
1088+( let eT = gn
1089+ let eU = size(eT)
1090+ let eV = $Tuple2(0, go)
1091+ func eW (eX,eY) = if ((eY >= eU))
1092+ then eX
1093+ else fV(eX, eT[eY])
1094+
1095+ func eZ (eX,eY) = if ((eY >= eU))
1096+ then eX
10941097 else throw("List size exceeds 6")
10951098
1096- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6))._2
1097- }
1098-
1099-
1100-func gs (gm,gn,fN,fO,fM,fG) = if ((3 > size(gm)))
1099+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6))._2
1100+ }
1101+
1102+
1103+func gt (gn,go,fO,fP,fN,fH) = if ((3 > size(gn)))
11011104 then throw("At least duck, mines and traps parts are required")
11021105 else {
1103- func fU (eQ,go) = {
1104- let fA = eQ._1
1105- if ((fA == 0))
1106- then $Tuple4((fA + 1), eQ._2, eQ._3, eQ._4)
1106+ func fV (eR,gp) = {
1107+ let fB = eR._1
1108+ if ((fB == 0))
1109+ then $Tuple4((fB + 1), eR._2, eR._3, eR._4)
11071110 else {
1108- let gt = fK(go, eQ._2, fM, fG, eQ._3, eQ._4)
1109- $Tuple4((fA + 1), gt._1, gt._2, gt._3)
1111+ let gu = fL(gp, eR._2, fN, fH, eR._3, eR._4)
1112+ $Tuple4((fB + 1), gu._1, gu._2, gu._3)
11101113 }
11111114 }
11121115
1113- let gu = {
1114- let eS = gm
1115- let eT = size(eS)
1116- let eU = $Tuple4(0, gn, fN, fO)
1117- func eV (eW,eX) = if ((eX >= eT))
1118- then eW
1119- else fU(eW, eS[eX])
1120-
1121- func eY (eW,eX) = if ((eX >= eT))
1122- then eW
1116+ let gv = {
1117+ let eT = gn
1118+ let eU = size(eT)
1119+ let eV = $Tuple4(0, go, fO, fP)
1120+ func eW (eX,eY) = if ((eY >= eU))
1121+ then eX
1122+ else fV(eX, eT[eY])
1123+
1124+ func eZ (eX,eY) = if ((eY >= eU))
1125+ then eX
11231126 else throw("List size exceeds 10")
11241127
1125- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1126- }
1127- $Tuple3(gu._2, gu._3, gu._4)
1128+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
1129+ }
1130+ $Tuple3(gv._2, gv._3, gv._4)
11281131 }
11291132
11301133
1131-func gv (B) = {
1132- let gw = G(B)
1133- let gx = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1134- let gy = gl(gx, dX, true, nil)
1135- let gz = split(gx[q], ";")[1]
1136- let aq = if ((gz == ""))
1134+func gw (B) = {
1135+ let gx = G(B)
1136+ let gy = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
1137+ let gz = gm(gy, dY, true, nil)
1138+ let gA = split(gy[q], ";")[1]
1139+ let ar = if ((gA == ""))
11371140 then 0
11381141 else {
1139- let gA = split(gz, ",")[0]
1140- if ((gA == ""))
1142+ let gB = split(gA, ",")[0]
1143+ if ((gB == ""))
11411144 then 0
11421145 else {
1143- let fL = split(gA, ":")
1144- let db = fL[0]
1145- let gB = fL[1]
1146- if (if (if (if (if ((db == "06"))
1146+ let fM = split(gB, ":")
1147+ let dc = fM[0]
1148+ let gC = fM[1]
1149+ if (if (if (if (if ((dc == "06"))
11471150 then true
1148- else (db == "07"))
1151+ else (dc == "07"))
11491152 then true
1150- else (db == "08"))
1151- then (gB != "")
1153+ else (dc == "08"))
1154+ then (gC != "")
11521155 else false)
1153- then (parseIntValue(gB) > 0)
1156+ then (parseIntValue(gC) > 0)
11541157 else false)
1155- then parseIntValue(split(aW[parseIntValue(db)], "_")[aY])
1158+ then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
11561159 else 0
11571160 }
11581161 }
1159- let gg = ao(this, B, aq, true)
1160- let gC = gl(gx, gy, false, gg)
1161- (gC == gC)
1162- }
1163-
1164-
1165-func gD (gE,gF,gG,gH) = if ((size(gE) != aI))
1162+ let gh = ap(this, B, ar, true)
1163+ let gD = gm(gy, gz, false, gh)
1164+ (gD == gD)
1165+ }
1166+
1167+
1168+func gE (gF,gG,gH,gI) = if ((size(gF) != aJ))
11661169 then throw("Wrong proportions data")
11671170 else {
1168- func gI (eQ,gJ) = {
1169- let fi = (parseIntValue(gE[gJ]) + ((gH * gF[gJ]) * gG))
1170- if ((0 > fi))
1171- then throw(((((((("Panic! Pieces of type=" + toString(gJ)) + ", sign=") + toString(gH)) + ", terrainCounts[i]=") + toString(gF[gJ])) + ", landSizeIndex=") + toString(gG)))
1172- else (eQ :+ toString(fi))
1173- }
1174-
1175- let eS = cL
1176- let eT = size(eS)
1177- let eU = nil
1178- func eV (eW,eX) = if ((eX >= eT))
1179- then eW
1180- else gI(eW, eS[eX])
1181-
1182- func eY (eW,eX) = if ((eX >= eT))
1183- then eW
1171+ func gJ (eR,gK) = {
1172+ let fj = (parseIntValue(gF[gK]) + ((gI * gG[gK]) * gH))
1173+ if ((0 > fj))
1174+ then throw(((((((("Panic! Pieces of type=" + toString(gK)) + ", sign=") + toString(gI)) + ", terrainCounts[i]=") + toString(gG[gK])) + ", landSizeIndex=") + toString(gH)))
1175+ else (eR :+ toString(fj))
1176+ }
1177+
1178+ let eT = cM
1179+ let eU = size(eT)
1180+ let eV = nil
1181+ func eW (eX,eY) = if ((eY >= eU))
1182+ then eX
1183+ else gJ(eX, eT[eY])
1184+
1185+ func eZ (eX,eY) = if ((eY >= eU))
1186+ then eX
11841187 else throw("List size exceeds 6")
11851188
1186- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1189+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
11871190 }
11881191
11891192
1190-func gK (gF,gG,gH) = {
1191- let gE = split(valueOrElse(getString(ds()), "0_0_0_0_0_0"), "_")
1192- makeString(gD(gE, gF, gG, gH), "_")
1193- }
1194-
1195-
1196-func gL (gM) = [(size(split(gM, "A")) - 1), (size(split(gM, "B")) - 1), (size(split(gM, "C")) - 1), (size(split(gM, "D")) - 1), (size(split(gM, "E")) - 1), (size(split(gM, "F")) - 1)]
1197-
1198-
1199-func gN (gO,gF,gP,gG,gQ) = {
1200- func gR (eQ,gJ) = {
1201- let gS = ((fraction(gP, gQ, a) * gF[gJ]) * gG)
1202- (eQ :+ toString((parseIntValue(gO[gJ]) + gS)))
1193+func gL (gG,gH,gI) = {
1194+ let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
1195+ makeString(gE(gF, gG, gH, gI), "_")
1196+ }
1197+
1198+
1199+func gM (gN) = [(size(split(gN, "A")) - 1), (size(split(gN, "B")) - 1), (size(split(gN, "C")) - 1), (size(split(gN, "D")) - 1), (size(split(gN, "E")) - 1), (size(split(gN, "F")) - 1)]
1200+
1201+
1202+func gO (gP,gG,gQ,gH,gR) = {
1203+ func gS (eR,gK) = {
1204+ let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1205+ (eR :+ toString((parseIntValue(gP[gK]) + gT)))
12031206 }
12041207
1205- let fb = {
1206- let eS = cL
1207- let eT = size(eS)
1208- let eU = nil
1209- func eV (eW,eX) = if ((eX >= eT))
1210- then eW
1211- else gR(eW, eS[eX])
1212-
1213- func eY (eW,eX) = if ((eX >= eT))
1214- then eW
1208+ let fc = {
1209+ let eT = cM
1210+ let eU = size(eT)
1211+ let eV = nil
1212+ func eW (eX,eY) = if ((eY >= eU))
1213+ then eX
1214+ else gS(eX, eT[eY])
1215+
1216+ func eZ (eX,eY) = if ((eY >= eU))
1217+ then eX
12151218 else throw("List size exceeds 6")
12161219
1217- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1220+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12181221 }
1219- makeString(fb, "_")
1220- }
1221-
1222-
1223-func gT (gF,gP,gG,gQ) = {
1224- func gR (eQ,gJ) = {
1225- let gS = ((fraction(gP, gQ, a) * gF[gJ]) * gG)
1226- $Tuple2((eQ._1 :+ gS), (eQ._2 + gS))
1222+ makeString(fc, "_")
1223+ }
1224+
1225+
1226+func gU (gG,gQ,gH,gR) = {
1227+ func gS (eR,gK) = {
1228+ let gT = ((fraction(gQ, gR, a) * gG[gK]) * gH)
1229+ $Tuple2((eR._1 :+ gT), (eR._2 + gT))
12271230 }
12281231
1229- let eS = cL
1230- let eT = size(eS)
1231- let eU = $Tuple2(nil, 0)
1232- func eV (eW,eX) = if ((eX >= eT))
1233- then eW
1234- else gR(eW, eS[eX])
1235-
1236- func eY (eW,eX) = if ((eX >= eT))
1237- then eW
1232+ let eT = cM
1233+ let eU = size(eT)
1234+ let eV = $Tuple2(nil, 0)
1235+ func eW (eX,eY) = if ((eY >= eU))
1236+ then eX
1237+ else gS(eX, eT[eY])
1238+
1239+ func eZ (eX,eY) = if ((eY >= eU))
1240+ then eX
12381241 else throw("List size exceeds 6")
12391242
1240- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1241- }
1242-
1243-
1244-func gU (gV,gW,gX,gY) = {
1245- let gZ = gX._1
1246- let ha = gX._2
1247- if ((ha == 0))
1248- then $Tuple2(makeString(gV, "_"), makeString(gW, "_"))
1249- else if ((gY >= ha))
1243+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
1244+ }
1245+
1246+
1247+func gV (gW,gX,gY,gZ) = {
1248+ let ha = gY._1
1249+ let hb = gY._2
1250+ if ((hb == 0))
1251+ then $Tuple2(makeString(gW, "_"), makeString(gX, "_"))
1252+ else if ((gZ >= hb))
12501253 then {
1251- func hb (eQ,gJ) = (eQ :+ toString((parseIntValue(gV[gJ]) + gZ[gJ])))
1252-
1253- let fb = {
1254- let eS = cL
1255- let eT = size(eS)
1256- let eU = nil
1257- func eV (eW,eX) = if ((eX >= eT))
1258- then eW
1259- else hb(eW, eS[eX])
1260-
1261- func eY (eW,eX) = if ((eX >= eT))
1262- then eW
1254+ func hc (eR,gK) = (eR :+ toString((parseIntValue(gW[gK]) + ha[gK])))
1255+
1256+ let fc = {
1257+ let eT = cM
1258+ let eU = size(eT)
1259+ let eV = nil
1260+ func eW (eX,eY) = if ((eY >= eU))
1261+ then eX
1262+ else hc(eX, eT[eY])
1263+
1264+ func eZ (eX,eY) = if ((eY >= eU))
1265+ then eX
12631266 else throw("List size exceeds 6")
12641267
1265- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1268+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12661269 }
1267- $Tuple2(makeString(fb, "_"), makeString(gW, "_"))
1270+ $Tuple2(makeString(fc, "_"), makeString(gX, "_"))
12681271 }
12691272 else {
1270- func hc (eQ,gJ) = {
1271- let hd = fraction(gZ[gJ], gY, ha)
1272- $Tuple2((eQ._1 :+ toString((parseIntValue(gV[gJ]) + hd))), (eQ._2 :+ toString(((parseIntValue(gW[gJ]) + gZ[gJ]) - hd))))
1273+ func hd (eR,gK) = {
1274+ let he = fraction(ha[gK], gZ, hb)
1275+ $Tuple2((eR._1 :+ toString((parseIntValue(gW[gK]) + he))), (eR._2 :+ toString(((parseIntValue(gX[gK]) + ha[gK]) - he))))
12731276 }
12741277
1275- let fb = {
1276- let eS = cL
1277- let eT = size(eS)
1278- let eU = $Tuple2(nil, nil)
1279- func eV (eW,eX) = if ((eX >= eT))
1280- then eW
1281- else hc(eW, eS[eX])
1282-
1283- func eY (eW,eX) = if ((eX >= eT))
1284- then eW
1278+ let fc = {
1279+ let eT = cM
1280+ let eU = size(eT)
1281+ let eV = $Tuple2(nil, nil)
1282+ func eW (eX,eY) = if ((eY >= eU))
1283+ then eX
1284+ else hd(eX, eT[eY])
1285+
1286+ func eZ (eX,eY) = if ((eY >= eU))
1287+ then eX
12851288 else throw("List size exceeds 6")
12861289
1287- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1290+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
12881291 }
1289- $Tuple2(makeString(fb._1, "_"), makeString(fb._2, "_"))
1292+ $Tuple2(makeString(fc._1, "_"), makeString(fc._2, "_"))
12901293 }
12911294 }
12921295
12931296
1294-func he (hf) = if ((hf >= toBigInt(0)))
1295- then hf
1296- else -(hf)
1297-
1298-
1299-let hg = [[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]]
1300-
1301-func hh (dB,hi) = {
1302- let hj = toInt((dB % eh))
1303- let hk = if ((hi[0] > hj))
1297+func hf (hg) = if ((hg >= toBigInt(0)))
1298+ then hg
1299+ else -(hg)
1300+
1301+
1302+let hh = [[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]]
1303+
1304+func hi (dC,hj) = {
1305+ let hk = toInt((dC % ei))
1306+ let hl = if ((hj[0] > hk))
13041307 then "A"
1305- else if ((hi[1] > hj))
1308+ else if ((hj[1] > hk))
13061309 then "B"
1307- else if ((hi[2] > hj))
1310+ else if ((hj[2] > hk))
13081311 then "C"
1309- else if ((hi[3] > hj))
1312+ else if ((hj[3] > hk))
13101313 then "D"
1311- else if ((hi[4] > hj))
1314+ else if ((hj[4] > hk))
13121315 then "E"
13131316 else "F"
1314- hk
1315- }
1316-
1317-
1318-func hl (hm,hn) = {
1319- let ho = hg[hn]
1320- func hp (eQ,eR) = $Tuple2((((((eQ._1 + hh(eQ._2, ho)) + hh((eQ._2 / eh), ho)) + hh((eQ._2 / ei), ho)) + hh((eQ._2 / ej), ho)) + hh((eQ._2 / ek), ho)), (eQ._2 / el))
1321-
1322- let gu = {
1323- let eS = [1, 2, 3, 4, 5]
1324- let eT = size(eS)
1325- let eU = $Tuple2("", (hm / eg))
1326- func eV (eW,eX) = if ((eX >= eT))
1327- then eW
1328- else hp(eW, eS[eX])
1329-
1330- func eY (eW,eX) = if ((eX >= eT))
1331- then eW
1317+ hl
1318+ }
1319+
1320+
1321+func hm (hn,ho) = {
1322+ let hp = hh[ho]
1323+ func hq (eR,eS) = $Tuple2((((((eR._1 + hi(eR._2, hp)) + hi((eR._2 / ei), hp)) + hi((eR._2 / ej), hp)) + hi((eR._2 / ek), hp)) + hi((eR._2 / el), hp)), (eR._2 / em))
1324+
1325+ let gv = {
1326+ let eT = [1, 2, 3, 4, 5]
1327+ let eU = size(eT)
1328+ let eV = $Tuple2("", (hn / eh))
1329+ func eW (eX,eY) = if ((eY >= eU))
1330+ then eX
1331+ else hq(eX, eT[eY])
1332+
1333+ func eZ (eX,eY) = if ((eY >= eU))
1334+ then eX
13321335 else throw("List size exceeds 5")
13331336
1334- eY(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5)
1337+ eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
13351338 }
1336- gu._1
1337- }
1338-
1339-
1340-let hq = [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]
1341-
1342-let hr = ["A", "B", "C", "D", "E", "F"]
1343-
1344-func hs (ht,gG) = {
1345- func hu (eQ,dz) = {
1346- let fA = eQ._2
1347- let hv = parseIntValue(dz)
1348- let hf = if ((hv == 0))
1339+ gv._1
1340+ }
1341+
1342+
1343+let hr = [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]
1344+
1345+let hs = ["A", "B", "C", "D", "E", "F"]
1346+
1347+func ht (hu,gH) = {
1348+ func hv (eR,dA) = {
1349+ let fB = eR._2
1350+ let hw = parseIntValue(dA)
1351+ let hg = if ((hw == 0))
13491352 then 0
1350- else if ((hv >= (4 * gG)))
1351- then (hv / gG)
1352- else if ((hv > (3 * gG)))
1353+ else if ((hw >= (4 * gH)))
1354+ then (hw / gH)
1355+ else if ((hw > (3 * gH)))
13531356 then 3
1354- else (((hv - 1) / gG) + 1)
1355- $Tuple3((eQ._1 :+ hf), (eQ._2 + 1), (eQ._3 + hf))
1357+ else (((hw - 1) / gH) + 1)
1358+ $Tuple3((eR._1 :+ hg), (eR._2 + 1), (eR._3 + hg))
13561359 }
13571360
1358- let gu = {
1359- let eS = ht
1360- let eT = size(eS)
1361- let eU = $Tuple3(nil, 0, 0)
1362- func eV (eW,eX) = if ((eX >= eT))
1363- then eW
1364- else hu(eW, eS[eX])
1365-
1366- func eY (eW,eX) = if ((eX >= eT))
1367- then eW
1361+ let gv = {
1362+ let eT = hu
1363+ let eU = size(eT)
1364+ let eV = $Tuple3(nil, 0, 0)
1365+ func eW (eX,eY) = if ((eY >= eU))
1366+ then eX
1367+ else hv(eX, eT[eY])
1368+
1369+ func eZ (eX,eY) = if ((eY >= eU))
1370+ then eX
13681371 else throw("List size exceeds 6")
13691372
1370- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1373+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
13711374 }
1372- let hw = gu._1
1373- let hx = value(indexOf(hw, max(hw)))
1374- let hy = (gu._3 - 25)
1375- func hz (eQ,db) = {
1376- let dL = if ((db == hx))
1377- then (hw[db] - hy)
1378- else hw[db]
1379- let dP = if ((dL == 0))
1375+ let hx = gv._1
1376+ let hy = value(indexOf(hx, max(hx)))
1377+ let hz = (gv._3 - 25)
1378+ func hA (eR,dc) = {
1379+ let dM = if ((dc == hy))
1380+ then (hx[dc] - hz)
1381+ else hx[dc]
1382+ let dQ = if ((dM == 0))
13801383 then nil
1381- else split(drop(toString(pow(10, 0, dL, 0, 0, DOWN)), 1), "")
1382- let fZ = hr[db]
1383- func hA (hB,hC) = (hB :+ fZ)
1384-
1385- let hD = {
1386- let eS = dP
1387- let eT = size(eS)
1388- let eU = nil
1389- func hE (eW,eX) = if ((eX >= eT))
1390- then eW
1391- else hA(eW, eS[eX])
1392-
1393- func hF (eW,eX) = if ((eX >= eT))
1394- then eW
1384+ else split(drop(toString(pow(10, 0, dM, 0, 0, DOWN)), 1), "")
1385+ let ga = hs[dc]
1386+ func hB (hC,hD) = (hC :+ ga)
1387+
1388+ let hE = {
1389+ let eT = dQ
1390+ let eU = size(eT)
1391+ let eV = nil
1392+ func hF (eX,eY) = if ((eY >= eU))
1393+ then eX
1394+ else hB(eX, eT[eY])
1395+
1396+ func hG (eX,eY) = if ((eY >= eU))
1397+ then eX
13951398 else throw("List size exceeds 25")
13961399
1397- hF(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(hE(eU, 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)
1398- }
1399- (eQ ++ hD)
1400+ hG(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(hF(eV, 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)
1401+ }
1402+ (eR ++ hE)
14001403 }
14011404
1402- let fb = {
1403- let eS = cL
1404- let eT = size(eS)
1405- let eU = nil
1406- func hE (eW,eX) = if ((eX >= eT))
1407- then eW
1408- else hz(eW, eS[eX])
1409-
1410- func hF (eW,eX) = if ((eX >= eT))
1411- then eW
1405+ let fc = {
1406+ let eT = cM
1407+ let eU = size(eT)
1408+ let eV = nil
1409+ func hF (eX,eY) = if ((eY >= eU))
1410+ then eX
1411+ else hA(eX, eT[eY])
1412+
1413+ func hG (eX,eY) = if ((eY >= eU))
1414+ then eX
14121415 else throw("List size exceeds 6")
14131416
1414- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1417+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
14151418 }
1416- func hG (eQ,fA) = (eQ + fb[fA])
1417-
1418- let eS = hq
1419- let eT = size(eS)
1420- let eU = ""
1421- func hH (eW,eX) = if ((eX >= eT))
1422- then eW
1423- else hG(eW, eS[eX])
1424-
1425- func hI (eW,eX) = if ((eX >= eT))
1426- then eW
1419+ func hH (eR,fB) = (eR + fc[fB])
1420+
1421+ let eT = hr
1422+ let eU = size(eT)
1423+ let eV = ""
1424+ func hI (eX,eY) = if ((eY >= eU))
1425+ then eX
1426+ else hH(eX, eT[eY])
1427+
1428+ func hJ (eX,eY) = if ((eY >= eU))
1429+ then eX
14271430 else throw("List size exceeds 25")
14281431
1429- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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)
1430- }
1431-
1432-
1433-func hJ (hK) = {
1434- let gt = split(valueOrElse(getString(hK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1435-[toString(valueOrElse(parseInt(gt[bl]), 0)), if ((size(split(gt[bm], "_")) == aI))
1436- then gt[bm]
1437- else "0_0_0_0_0_0", if ((size(split(gt[bn], "_")) == aI))
1438- then gt[bn]
1439- else "0_0_0_0_0_0", gt[bo]]
1440- }
1441-
1442-
1443-func hL (hM) = {
1444- let fo = split(hM, "_")
1445- ((aL * (parseIntValue(fo[1]) + 1)) * parseIntValue(fo[0]))
1446- }
1447-
1448-
1449-func hN (hO) = {
1450- let hP = hO[bf]
1451- func hQ (eQ,hR) = (eQ + parseIntValue(hR))
1452-
1453- func hS (eQ,hR) = {
1454- let db = eQ._1
1455- let eJ = (((parseIntValue(hR) + bb) - 1) / bb)
1456- $Tuple2((db + 1), (eQ._2 + (eJ * cF)))
1432+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
1433+ }
1434+
1435+
1436+func hK (hL) = {
1437+ let gu = split(valueOrElse(getString(hL), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
1438+[toString(valueOrElse(parseInt(gu[bm]), 0)), if ((size(split(gu[bn], "_")) == aJ))
1439+ then gu[bn]
1440+ else "0_0_0_0_0_0", if ((size(split(gu[bo], "_")) == aJ))
1441+ then gu[bo]
1442+ else "0_0_0_0_0_0", gu[bp]]
1443+ }
1444+
1445+
1446+func hM (hN) = {
1447+ let fp = split(hN, "_")
1448+ ((aM * (parseIntValue(fp[1]) + 1)) * parseIntValue(fp[0]))
1449+ }
1450+
1451+
1452+func hO (hP) = {
1453+ let hQ = hP[bg]
1454+ func hR (eR,hS) = (eR + parseIntValue(hS))
1455+
1456+ func hT (eR,hS) = {
1457+ let dc = eR._1
1458+ let eK = (((parseIntValue(hS) + bc) - 1) / bc)
1459+ $Tuple2((dc + 1), (eR._2 + (eK * cG)))
14571460 }
14581461
1459- let hT = {
1460- let eS = split(hO[bd], "_")
1461- let eT = size(eS)
1462- let eU = 0
1463- func eV (eW,eX) = if ((eX >= eT))
1464- then eW
1465- else hQ(eW, eS[eX])
1466-
1467- func eY (eW,eX) = if ((eX >= eT))
1468- then eW
1462+ let hU = {
1463+ let eT = split(hP[be], "_")
1464+ let eU = size(eT)
1465+ let eV = 0
1466+ func eW (eX,eY) = if ((eY >= eU))
1467+ then eX
1468+ else hR(eX, eT[eY])
1469+
1470+ func eZ (eX,eY) = if ((eY >= eU))
1471+ then eX
14691472 else throw("List size exceeds 6")
14701473
1471- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1474+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
14721475 }
1473- let hU = {
1474- let eS = split(hO[be], "_")
1475- let eT = size(eS)
1476- let eU = 0
1477- func hE (eW,eX) = if ((eX >= eT))
1478- then eW
1479- else hQ(eW, eS[eX])
1480-
1481- func hF (eW,eX) = if ((eX >= eT))
1482- then eW
1476+ let hV = {
1477+ let eT = split(hP[bf], "_")
1478+ let eU = size(eT)
1479+ let eV = 0
1480+ func hF (eX,eY) = if ((eY >= eU))
1481+ then eX
1482+ else hR(eX, eT[eY])
1483+
1484+ func hG (eX,eY) = if ((eY >= eU))
1485+ then eX
14831486 else throw("List size exceeds 6")
14841487
1485- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1488+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
14861489 }
1487- let hV = if ((hP == ""))
1490+ let hW = if ((hQ == ""))
14881491 then 0
1489- else ( let eS = split_4C(hP, "_")
1490- let eT = size(eS)
1491- let eU = $Tuple2(0, 0)
1492- func hH (eW,eX) = if ((eX >= eT))
1493- then eW
1494- else hS(eW, eS[eX])
1495-
1496- func hI (eW,eX) = if ((eX >= eT))
1497- then eW
1492+ else ( let eT = split_4C(hQ, "_")
1493+ let eU = size(eT)
1494+ let eV = $Tuple2(0, 0)
1495+ func hI (eX,eY) = if ((eY >= eU))
1496+ then eX
1497+ else hT(eX, eT[eY])
1498+
1499+ func hJ (eX,eY) = if ((eY >= eU))
1500+ then eX
14981501 else throw("List size exceeds 50")
14991502
1500- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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
1501- ((hT + hU) + hV)
1502- }
1503-
1504-
1505-func hW (hX,hY,hZ) = {
1506- let hM = ((toString(hY) + "_") + toString(hZ))
1507- let ia = hL(hM)
1508- let ib = valueOrElse(getString(hX), (hM + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1509- let ic = split_4C(ib, ":")
1510- let id = hN(ic)
1511- let ie = if ((5 > size(ic)))
1512- then makeString(["0", toString(id), toString((ia - id)), toString(ia)], "_")
1503+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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
1504+ ((hU + hV) + hW)
1505+ }
1506+
1507+
1508+func hX (hY,hZ,ia) = {
1509+ let hN = ((toString(hZ) + "_") + toString(ia))
1510+ let ib = hM(hN)
1511+ let ic = valueOrElse(getString(hY), (hN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1512+ let id = split_4C(ic, ":")
1513+ let ie = hO(id)
1514+ let if = if ((5 > size(id)))
1515+ then makeString(["0", toString(ie), toString((ib - ie)), toString(ib)], "_")
15131516 else {
1514- let if = split(ic[bg], "_")
1515- let ig = parseIntValue(if[bh])
1516- let ih = if ((size(if) > 1))
1517- then parseIntValue(if[bi])
1518- else id
1519- makeString([toString(ig), toString(ih), toString(((ia - ig) - ih)), toString(ia)], "_")
1520- }
1521-[ic[bc], if ((size(split(ic[bd], "_")) == aI))
1522- then ic[bd]
1523- else "0_0_0_0_0_0", if ((size(split(ic[be], "_")) == aI))
1524- then ic[be]
1525- else "0_0_0_0_0_0", ic[bf], ie]
1526- }
1527-
1528-
1529-func ii (hO) = {
1530- let ij = hN(hO)
1531- let ik = parseIntValue(split(hO[bg], "_")[bh])
1532- ((hL(hO[bc]) - ij) - ik)
1533- }
1534-
1535-
1536-func il (im,hO,in) = if ((size(im) != 3))
1517+ let ig = split(id[bh], "_")
1518+ let ih = parseIntValue(ig[bi])
1519+ let ii = if ((size(ig) > 1))
1520+ then parseIntValue(ig[bj])
1521+ else ie
1522+ makeString([toString(ih), toString(ii), toString(((ib - ih) - ii)), toString(ib)], "_")
1523+ }
1524+[id[bd], if ((size(split(id[be], "_")) == aJ))
1525+ then id[be]
1526+ else "0_0_0_0_0_0", if ((size(split(id[bf], "_")) == aJ))
1527+ then id[bf]
1528+ else "0_0_0_0_0_0", id[bg], if]
1529+ }
1530+
1531+
1532+func ij (hP) = {
1533+ let ik = hO(hP)
1534+ let il = parseIntValue(split(hP[bh], "_")[bi])
1535+ ((hM(hP[bd]) - ik) - il)
1536+ }
1537+
1538+
1539+func im (in,hP,io) = if ((size(in) != 3))
15371540 then throw("cargoListStr should contain exactly 2 ':' separators")
15381541 else {
1539- let io = split(im[0], "_")
1540- let ip = split(im[1], "_")
1541- let iq = if ((im[2] == ""))
1542+ let ip = split(in[0], "_")
1543+ let iq = split(in[1], "_")
1544+ let ir = if ((in[2] == ""))
15421545 then nil
1543- else split_4C(im[2], "_")
1544- if ((size(io) != aI))
1546+ else split_4C(in[2], "_")
1547+ if ((size(ip) != aJ))
15451548 then throw("All 6 resources should be passed")
1546- else if ((size(ip) != aI))
1549+ else if ((size(iq) != aJ))
15471550 then throw("All 6 materials should be passed")
15481551 else {
1549- let gY = ii(hO)
1550- let ir = split(hO[bd], "_")
1551- let is = split(hO[be], "_")
1552- let it = if ((hO[bf] == ""))
1552+ let gZ = ij(hP)
1553+ let is = split(hP[be], "_")
1554+ let it = split(hP[bf], "_")
1555+ let iu = if ((hP[bg] == ""))
15531556 then nil
1554- else split_4C(hO[bf], "_")
1555- let gW = split(in[bm], "_")
1556- let iu = split(in[bn], "_")
1557- let iv = if ((in[bo] == ""))
1557+ else split_4C(hP[bg], "_")
1558+ let gX = split(io[bn], "_")
1559+ let iv = split(io[bo], "_")
1560+ let iw = if ((io[bp] == ""))
15581561 then nil
1559- else split_4C(in[bo], "_")
1560- func iw (eQ,hR) = {
1561- let gJ = eQ._1
1562- let ix = parseIntValue(hR)
1563- let iy = parseIntValue(ir[gJ])
1564- let iz = parseIntValue(gW[gJ])
1565- if ((ix == 0))
1566- then $Tuple4((gJ + 1), (eQ._2 :+ ir[gJ]), (eQ._3 :+ gW[gJ]), eQ._4)
1567- else if ((ix > 0))
1568- then if ((ix > iz))
1569- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iz)) + " available"))
1570- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iy + ix))), (eQ._3 :+ toString((iz - ix))), (eQ._4 + ix))
1571- else if ((-(ix) > iy))
1572- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iy)) + " available"))
1573- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iy + ix))), (eQ._3 :+ toString((iz - ix))), (eQ._4 + ix))
1562+ else split_4C(io[bp], "_")
1563+ func ix (eR,hS) = {
1564+ let gK = eR._1
1565+ let iy = parseIntValue(hS)
1566+ let iz = parseIntValue(is[gK])
1567+ let iA = parseIntValue(gX[gK])
1568+ if ((iy == 0))
1569+ then $Tuple4((gK + 1), (eR._2 :+ is[gK]), (eR._3 :+ gX[gK]), eR._4)
1570+ else if ((iy > 0))
1571+ then if ((iy > iA))
1572+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iA)) + " available"))
1573+ else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
1574+ else if ((-(iy) > iz))
1575+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iz)) + " available"))
1576+ else $Tuple4((gK + 1), (eR._2 :+ toString((iz + iy))), (eR._3 :+ toString((iA - iy))), (eR._4 + iy))
15741577 }
15751578
1576- let fb = {
1577- let eS = io
1578- let eT = size(eS)
1579- let eU = $Tuple4(0, nil, nil, 0)
1580- func eV (eW,eX) = if ((eX >= eT))
1581- then eW
1582- else iw(eW, eS[eX])
1583-
1584- func eY (eW,eX) = if ((eX >= eT))
1585- then eW
1579+ let fc = {
1580+ let eT = ip
1581+ let eU = size(eT)
1582+ let eV = $Tuple4(0, nil, nil, 0)
1583+ func eW (eX,eY) = if ((eY >= eU))
1584+ then eX
1585+ else ix(eX, eT[eY])
1586+
1587+ func eZ (eX,eY) = if ((eY >= eU))
1588+ then eX
15861589 else throw("List size exceeds 6")
15871590
1588- eY(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6)
1591+ eZ(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6)
15891592 }
1590- func iA (eQ,hR) = {
1591- let gJ = eQ._1
1592- let ix = parseIntValue(hR)
1593- let iB = parseIntValue(is[gJ])
1594- let iC = parseIntValue(iu[gJ])
1595- if ((ix == 0))
1596- then $Tuple4((gJ + 1), (eQ._2 :+ is[gJ]), (eQ._3 :+ iu[gJ]), eQ._4)
1597- else if ((ix > 0))
1598- then if ((ix > iC))
1599- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iC)) + " available"))
1600- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iB + ix))), (eQ._3 :+ toString((iC - ix))), (eQ._4 + ix))
1601- else if ((-(ix) > iB))
1602- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iB)) + " available"))
1603- else $Tuple4((gJ + 1), (eQ._2 :+ toString((iB + ix))), (eQ._3 :+ toString((iC - ix))), (eQ._4 + ix))
1593+ func iB (eR,hS) = {
1594+ let gK = eR._1
1595+ let iy = parseIntValue(hS)
1596+ let iC = parseIntValue(it[gK])
1597+ let iD = parseIntValue(iv[gK])
1598+ if ((iy == 0))
1599+ then $Tuple4((gK + 1), (eR._2 :+ it[gK]), (eR._3 :+ iv[gK]), eR._4)
1600+ else if ((iy > 0))
1601+ then if ((iy > iD))
1602+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iD)) + " available"))
1603+ else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
1604+ else if ((-(iy) > iC))
1605+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iC)) + " available"))
1606+ else $Tuple4((gK + 1), (eR._2 :+ toString((iC + iy))), (eR._3 :+ toString((iD - iy))), (eR._4 + iy))
16041607 }
16051608
1606- let gp = {
1607- let eS = ip
1608- let eT = size(eS)
1609- let eU = $Tuple4(0, nil, nil, fb._4)
1610- func hE (eW,eX) = if ((eX >= eT))
1611- then eW
1612- else iA(eW, eS[eX])
1613-
1614- func hF (eW,eX) = if ((eX >= eT))
1615- then eW
1609+ let gq = {
1610+ let eT = iq
1611+ let eU = size(eT)
1612+ let eV = $Tuple4(0, nil, nil, fc._4)
1613+ func hF (eX,eY) = if ((eY >= eU))
1614+ then eX
1615+ else iB(eX, eT[eY])
1616+
1617+ func hG (eX,eY) = if ((eY >= eU))
1618+ then eX
16161619 else throw("List size exceeds 6")
16171620
1618- hF(hE(hE(hE(hE(hE(hE(eU, 0), 1), 2), 3), 4), 5), 6)
1621+ hG(hF(hF(hF(hF(hF(hF(eV, 0), 1), 2), 3), 4), 5), 6)
16191622 }
1620- func iD (eQ,hR) = {
1621- let gJ = eQ._1
1622- let ix = parseIntValue(hR)
1623- let iE = if ((size(it) > gJ))
1624- then parseIntValue(it[gJ])
1623+ func iE (eR,hS) = {
1624+ let gK = eR._1
1625+ let iy = parseIntValue(hS)
1626+ let iF = if ((size(iu) > gK))
1627+ then parseIntValue(iu[gK])
16251628 else 0
1626- let iF = if ((size(iv) > gJ))
1627- then parseIntValue(iv[gJ])
1629+ let iG = if ((size(iw) > gK))
1630+ then parseIntValue(iw[gK])
16281631 else 0
1629- if ((ix == 0))
1630- then $Tuple4((gJ + 1), (eQ._2 :+ toString(iE)), (eQ._3 :+ toString(iF)), eQ._4)
1631- else if ((ix > 0))
1632- then if ((ix > iF))
1633- then throw((((("Attempt to take " + hR) + " from backpack, but only ") + toString(iF)) + " available"))
1632+ if ((iy == 0))
1633+ then $Tuple4((gK + 1), (eR._2 :+ toString(iF)), (eR._3 :+ toString(iG)), eR._4)
1634+ else if ((iy > 0))
1635+ then if ((iy > iG))
1636+ then throw((((("Attempt to take " + hS) + " from backpack, but only ") + toString(iG)) + " available"))
16341637 else {
1635- let fS = (eG((iE + ix), bb) - eG(iE, bb))
1636- $Tuple4((gJ + 1), (eQ._2 :+ toString((iE + ix))), (eQ._3 :+ toString((iF - ix))), (eQ._4 + fS))
1638+ let fT = (eH((iF + iy), bc) - eH(iF, bc))
1639+ $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
16371640 }
1638- else if ((-(ix) > iE))
1639- then throw((((("Attempt to take " + toString(-(ix))) + " from warehouse, but only ") + toString(iE)) + " available"))
1641+ else if ((-(iy) > iF))
1642+ then throw((((("Attempt to take " + toString(-(iy))) + " from warehouse, but only ") + toString(iF)) + " available"))
16401643 else {
1641- let fS = (eG((iE + ix), bb) - eG(iE, bb))
1642- $Tuple4((gJ + 1), (eQ._2 :+ toString((iE + ix))), (eQ._3 :+ toString((iF - ix))), (eQ._4 + fS))
1644+ let fT = (eH((iF + iy), bc) - eH(iF, bc))
1645+ $Tuple4((gK + 1), (eR._2 :+ toString((iF + iy))), (eR._3 :+ toString((iG - iy))), (eR._4 + fT))
16431646 }
16441647 }
16451648
1646- let gt = if ((size(iq) != 0))
1649+ let gu = if ((size(ir) != 0))
16471650 then {
1648- let eS = iq
1649- let eT = size(eS)
1650- let eU = $Tuple4(0, nil, nil, gp._4)
1651- func hH (eW,eX) = if ((eX >= eT))
1652- then eW
1653- else iD(eW, eS[eX])
1654-
1655- func hI (eW,eX) = if ((eX >= eT))
1656- then eW
1651+ let eT = ir
1652+ let eU = size(eT)
1653+ let eV = $Tuple4(0, nil, nil, gq._4)
1654+ func hI (eX,eY) = if ((eY >= eU))
1655+ then eX
1656+ else iE(eX, eT[eY])
1657+
1658+ func hJ (eX,eY) = if ((eY >= eU))
1659+ then eX
16571660 else throw("List size exceeds 50")
16581661
1659- hI(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(hH(eU, 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)
1662+ hJ(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(hI(eV, 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)
16601663 }
1661- else $Tuple4(0, it, iv, gp._4)
1662- let iG = gt._4
1663- if ((iG > gY))
1664- then throw((((("Attempt to put total " + toString(iG)) + " stuff, but only ") + toString(gY)) + " warehouse space left"))
1665- else $Tuple7(makeString(fb._2, "_"), makeString(gp._2, "_"), makeString_2C(gt._2, "_"), makeString(fb._3, "_"), makeString(gp._3, "_"), makeString_2C(gt._3, "_"), iG)
1664+ else $Tuple4(0, iu, iw, gq._4)
1665+ let iH = gu._4
1666+ if ((iH > gZ))
1667+ then throw((((("Attempt to put total " + toString(iH)) + " stuff, but only ") + toString(gZ)) + " warehouse space left"))
1668+ else $Tuple7(makeString(fc._2, "_"), makeString(gq._2, "_"), makeString_2C(gu._2, "_"), makeString(fc._3, "_"), makeString(gq._3, "_"), makeString_2C(gu._3, "_"), iH)
16661669 }
16671670 }
16681671
16691672
1670-func iH (iI,iJ) = {
1671- let bP = toString(iI)
1672- let iK = he(toBigInt(iJ))
1673- let iL = valueOrElse(getInteger(en()), (em + 1))
1674- let er = toString(iL)
1675- let hn = toInt((iK % eg))
1676- let gM = hl(iK, hn)
1677- let du = aT[hn]
1678- let iM = Issue(eF(er, "S"), makeString([er, "S", gM, du], "_"), 1, 0, false)
1679- let bt = calculateAssetId(iM)
1680- let iN = toBase58String(bt)
1681- $Tuple2([IntegerEntry(en(), (iL + 1)), iM, StringEntry(eq(er), iN), StringEntry(bs(iN), bP), StringEntry(et(er), bP), IntegerEntry(bC(iN), 0), IntegerEntry(es(iN, bP), 0), ScriptTransfer(iI, 1, bt)], $Tuple2(iN, du))
1682- }
1683-
1684-
1685-func iO (bP,iP,iQ) = if (!(sigVerify_8Kb(iP, iQ, cx)))
1673+func iI (iJ,iK) = {
1674+ let bQ = toString(iJ)
1675+ let iL = hf(toBigInt(iK))
1676+ let iM = valueOrElse(getInteger(eo()), (en + 1))
1677+ let es = toString(iM)
1678+ let ho = toInt((iL % eh))
1679+ let gN = hm(iL, ho)
1680+ let dv = aU[ho]
1681+ let iN = Issue(eG(es, "S"), makeString([es, "S", gN, dv], "_"), 1, 0, false)
1682+ let bu = calculateAssetId(iN)
1683+ let iO = toBase58String(bu)
1684+ $Tuple2([IntegerEntry(eo(), (iM + 1)), iN, StringEntry(er(es), iO), StringEntry(bt(iO), bQ), StringEntry(eu(es), bQ), IntegerEntry(bD(iO), 0), IntegerEntry(et(iO, bQ), 0), ScriptTransfer(iJ, 1, bu)], $Tuple2(iO, dv))
1685+ }
1686+
1687+
1688+func iP (bQ,iQ,iR) = if (!(sigVerify_8Kb(iQ, iR, cy)))
16861689 then throw("signature does not match")
16871690 else {
1688- let fo = split_4C(toUtf8String(iP), ";")
1689- let iR = split_4C(fo[0], "|")
1690- let iS = split(iR[eB], "_")
1691- let iT = parseIntValue(iS[0])
1692- let iU = parseIntValue(iS[1])
1693- let iV = split(fo[1], ":")
1694- let iW = iV[0]
1695- let iX = parseIntValue(iR[eC])
1696- if (if ((iX > (lastBlock.timestamp + dY)))
1691+ let fp = split_4C(toUtf8String(iQ), ";")
1692+ let iS = split_4C(fp[0], "|")
1693+ let iT = split(iS[eC], "_")
1694+ let iU = parseIntValue(iT[0])
1695+ let iV = parseIntValue(iT[1])
1696+ let iW = split(fp[1], ":")
1697+ let iX = iW[0]
1698+ let iY = parseIntValue(iS[eD])
1699+ if (if ((iY > (lastBlock.timestamp + dZ)))
16971700 then true
1698- else ((lastBlock.timestamp - dY) > iX))
1699- then throw(((("signature outdated: logTime=" + toString(iX)) + ", bcTime=") + toString(lastBlock.timestamp)))
1701+ else ((lastBlock.timestamp - dZ) > iY))
1702+ then throw(((("signature outdated: logTime=" + toString(iY)) + ", bcTime=") + toString(lastBlock.timestamp)))
17001703 else {
1701- let iY = iV[1]
1702- let iZ = valueOrElse(getString(dJ(bP)), "")
1703- if ((iZ != iY))
1704- then throw(((("Tx ids don't match! In state: " + iZ) + ", in msg: ") + iY))
1704+ let iZ = iW[1]
1705+ let ja = valueOrElse(getString(dK(bQ)), "")
1706+ if ((ja != iZ))
1707+ then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
17051708 else {
1706- let B = valueOrErrorMessage(getString(bL(bP)), "You don't have a duck staked")
1707- let ja = A(B)
1708- let jb = ai(valueOrElse(getInteger(E(B)), 0))
1709- let jc = valueOrElse(getInteger(ja), jb)
1710- if ((jc != iT))
1711- then throw(((("oldHealth=" + toString(jc)) + " from state does not match one from flight log=") + toString(iT)))
1712- else if ((0 >= iT))
1709+ let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
1710+ let jb = A(B)
1711+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
1712+ let jd = valueOrElse(getInteger(jb), jc)
1713+ if ((jd != iU))
1714+ then throw(((("oldHealth=" + toString(jd)) + " from state does not match one from flight log=") + toString(iU)))
1715+ else if ((0 >= iU))
17131716 then throw("You can't fly with zero health")
1714- else if (!(gv(B)))
1717+ else if (!(gw(B)))
17151718 then throw("Equipment incompatible")
17161719 else {
1717- let jd = if ((size(iR) > eD))
1718- then iR[eD]
1720+ let je = if ((size(iS) > eE))
1721+ then iS[eE]
17191722 else ""
1720- let je = if ((size(iR) > eE))
1721- then iR[eE]
1723+ let jf = if ((size(iS) > eF))
1724+ then iS[eF]
17221725 else ""
1723- let jf = if (if ((iU > 0))
1724- then (jd == "$")
1726+ let jg = if (if ((iV > 0))
1727+ then (je == "$")
17251728 else false)
1726- then dA(invoke(dc, "sendUsdtPrize", [bP], nil))
1729+ then dB(invoke(dd, "sendUsdtPrize", [bQ], nil))
17271730 else 0
1728- $Tuple5(iU, B, jf, iW, je)
1731+ $Tuple5(iV, B, jg, iX, jf)
17291732 }
17301733 }
17311734 }
17321735 }
17331736
17341737
1735-func jg (Q,jh) = {
1736- let hZ = valueOrElse(getInteger(bC(Q)), 0)
1737- let ji = valueOrElse(getInteger(bw(aH, Q)), 0)
1738- let jj = (hZ / 6)
1739- let jk = (hZ / 7)
1740- ((aK + fraction(aK, ((hZ + jj) + (2 * jk)), 5)) + fraction(aK, ji, (jh * 5)))
1741- }
1742-
1743-
1744-func jl (c,jm,jn) = {
1745- let jo = if ((jm == ey))
1746- then $Tuple2(jn, valueOrElse(getString(bL(c)), ""))
1738+func jh (Q,ji) = {
1739+ let ia = valueOrElse(getInteger(bD(Q)), 0)
1740+ let jj = valueOrElse(getInteger(bx(aI, Q)), 0)
1741+ let jk = (ia / 6)
1742+ let jl = (ia / 7)
1743+ ((aL + fraction(aL, ((ia + jk) + (2 * jl)), 5)) + fraction(aL, jj, (ji * 5)))
1744+ }
1745+
1746+
1747+func jm (c,jn,jo) = {
1748+ let jp = if ((jn == ez))
1749+ then $Tuple2(jo, valueOrElse(getString(bM(c)), ""))
17471750 else {
1748- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1749- let jp = valueOrElse(getString(bN(B)), aM)
1750- let ci = split(value(jp), "_")
1751- if ((ci[bq] != "L"))
1752- then throw((("Duck location type is " + ci[bq]) + ", but should be L"))
1753- else $Tuple2(ci[br], B)
1754- }
1755- let Q = jo._1
1756- let jq = jo._2
1757- let jr = value(assetInfo(fromBase58String(Q)))
1758- let js = bv(Q)
1759- let jt = valueOrErrorMessage(getInteger(js), (("Land " + jr.name) + " is not staked"))
1760- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
1761- if ((ju != c))
1762- then throw((aE + " is not yours"))
1751+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1752+ let jq = valueOrElse(getString(bO(B)), aN)
1753+ let cj = split(value(jq), "_")
1754+ if ((cj[br] != "L"))
1755+ then throw((("Duck location type is " + cj[br]) + ", but should be L"))
1756+ else $Tuple2(cj[bs], B)
1757+ }
1758+ let Q = jp._1
1759+ let jr = jp._2
1760+ let js = value(assetInfo(fromBase58String(Q)))
1761+ let jt = bw(Q)
1762+ let ju = valueOrErrorMessage(getInteger(jt), (("Land " + js.name) + " is not staked"))
1763+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1764+ if ((jv != c))
1765+ then throw((aF + " is not yours"))
17631766 else {
1764- let jv = split(jr.description, "_")
1765- $Tuple4(jq, Q, jv, jt)
1766- }
1767- }
1768-
1769-
1770-func jw (c,eH,jm,jn) = if ((0 > eH))
1767+ let jw = split(js.description, "_")
1768+ $Tuple4(jr, Q, jw, ju)
1769+ }
1770+ }
1771+
1772+
1773+func jx (c,eI,jn,jo) = if ((0 > eI))
17711774 then throw("Negative amount")
17721775 else {
1773- let fZ = jl(c, jm, jn)
1774- let dG = fZ._3[dj]
1775- let gF = gL(fZ._3[dk])
1776- let gP = (lastBlock.timestamp - fZ._4)
1777- if ((0 > gP))
1778- then throw(((("Saved timestamp is in future, saved = " + toString(fZ._4)) + ", current = ") + toString(lastBlock.timestamp)))
1776+ let ga = jm(c, jn, jo)
1777+ let dH = ga._3[dk]
1778+ let gG = gM(ga._3[dl])
1779+ let gQ = (lastBlock.timestamp - ga._4)
1780+ if ((0 > gQ))
1781+ then throw(((("Saved timestamp is in future, saved = " + toString(ga._4)) + ", current = ") + toString(lastBlock.timestamp)))
17791782 else {
1780- let jh = dF(dG)
1781- let jx = jg(fZ._2, jh)
1782- let jy = fraction(gP, (jx * jh), a)
1783- if ((eH > jy))
1784- then throw(((("Not enough resources, available = " + toString(jy)) + ", requested = ") + toString(eH)))
1783+ let ji = dG(dH)
1784+ let jy = jh(ga._2, ji)
1785+ let jz = fraction(gQ, (jy * ji), a)
1786+ if ((eI > jz))
1787+ then throw(((("Not enough resources, available = " + toString(jz)) + ", requested = ") + toString(eI)))
17851788 else {
1786- let jz = fraction((jy - eH), a, (jx * jh))
1787- let jA = (lastBlock.timestamp - jz)
1788- let hY = (jh / cG)
1789- let gX = gT(gF, (gP - jz), hY, jx)
1790- let hX = bB(fZ._2)
1791- let hZ = valueOrElse(getInteger(bC(fZ._2)), 0)
1792- let hO = hW(hX, hY, hZ)
1793- let if = split(hO[bg], "_")
1794- let gY = parseIntValue(if[bj])
1795- if (if ((jm == ey))
1796- then (eH > gY)
1789+ let jA = fraction((jz - eI), a, (jy * ji))
1790+ let jB = (lastBlock.timestamp - jA)
1791+ let hZ = (ji / cH)
1792+ let gY = gU(gG, (gQ - jA), hZ, jy)
1793+ let hY = bC(ga._2)
1794+ let ia = valueOrElse(getInteger(bD(ga._2)), 0)
1795+ let hP = hX(hY, hZ, ia)
1796+ let ig = split(hP[bh], "_")
1797+ let gZ = parseIntValue(ig[bk])
1798+ if (if ((jn == ez))
1799+ then (eI > gZ)
17971800 else false)
1798- then throw((("Only " + toString(gY)) + " space left in warehouse"))
1801+ then throw((("Only " + toString(gZ)) + " space left in warehouse"))
17991802 else {
1800- let hK = bM(fZ._1)
1801- let in = hJ(hK)
1802- let gW = split(in[bm], "_")
1803- let gV = split(hO[bd], "_")
1804- let jB = if ((jm == ey))
1805- then $Tuple4(gN(gV, gF, (gP - jz), hY, jx), in[bm], (parseIntValue(if[bi]) + gX._2), (parseIntValue(if[bj]) - gX._2))
1806- else if ((jm == ez))
1807- then $Tuple4(hO[bd], gN(gW, gF, (gP - jz), hY, jx), parseIntValue(if[bi]), parseIntValue(if[bj]))
1803+ let hL = bN(ga._1)
1804+ let io = hK(hL)
1805+ let gX = split(io[bn], "_")
1806+ let gW = split(hP[be], "_")
1807+ let jC = if ((jn == ez))
1808+ then $Tuple4(gO(gW, gG, (gQ - jA), hZ, jy), io[bn], (parseIntValue(ig[bj]) + gY._2), (parseIntValue(ig[bk]) - gY._2))
1809+ else if ((jn == eA))
1810+ then $Tuple4(hP[be], gO(gX, gG, (gQ - jA), hZ, jy), parseIntValue(ig[bj]), parseIntValue(ig[bk]))
18081811 else {
1809- let jC = gU(gV, gW, gX, gY)
1810- let jD = min([parseIntValue(if[bj]), gX._2])
1811- $Tuple4(jC._1, jC._2, (parseIntValue(if[bi]) + jD), (parseIntValue(if[bj]) - jD))
1812+ let jD = gV(gW, gX, gY, gZ)
1813+ let jE = min([parseIntValue(ig[bk]), gY._2])
1814+ $Tuple4(jD._1, jD._2, (parseIntValue(ig[bj]) + jE), (parseIntValue(ig[bk]) - jE))
18121815 }
1813- let jE = jB._1
1814- let jF = jB._2
1815- let jG = jB._3
1816- let jH = jB._4
1817- $Tuple5([IntegerEntry(bv(fZ._2), jA), IntegerEntry(by(aE, fZ._2, c), jA)], hK, [in[bl], jF, in[bn], in[bo]], hX, [hO[bc], jE, hO[be], hO[bf], makeString([if[bh], toString(jG), toString(jH), if[bk]], "_")])
1816+ let jF = jC._1
1817+ let jG = jC._2
1818+ let jH = jC._3
1819+ let jI = jC._4
1820+ $Tuple5([IntegerEntry(bw(ga._2), jB), IntegerEntry(bz(aF, ga._2, c), jB)], hL, [io[bm], jG, io[bo], io[bp]], hY, [hP[bd], jF, hP[bf], hP[bg], makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")])
18181821 }
18191822 }
18201823 }
18211824 }
18221825
18231826
1824-func jI (c,Q,jh,jm) = {
1825- let js = bv(Q)
1826- let jt = value(getInteger(js))
1827- let jy = (fraction((lastBlock.timestamp - jt), jg(Q, jh), a) * jh)
1828- jw(c, jy, jm, Q)
1829- }
1830-
1831-
1832-func jJ (fd,iI,jK,Q) = {
1833- let c = toString(iI)
1834- let fZ = jl(c, eA, Q)
1835- let jh = dF(fZ._3[dj])
1836- let jL = bC(fZ._2)
1837- let jM = valueOrElse(getInteger(jL), 0)
1838- if (if (!(ct))
1839- then (jM >= 3)
1827+func jJ (c,Q,ji,jn) = {
1828+ let jt = bw(Q)
1829+ let ju = value(getInteger(jt))
1830+ let jz = (fraction((lastBlock.timestamp - ju), jh(Q, ji), a) * ji)
1831+ jx(c, jz, jn, Q)
1832+ }
1833+
1834+
1835+func jK (fe,iJ,jL,Q) = {
1836+ let c = toString(iJ)
1837+ let ga = jm(c, eB, Q)
1838+ let ji = dG(ga._3[dk])
1839+ let jM = bD(ga._2)
1840+ let jN = valueOrElse(getInteger(jM), 0)
1841+ if (if (!(cu))
1842+ then (jN >= 3)
18401843 else false)
18411844 then throw("Currently max infrastructure level = 3")
18421845 else {
1843- let jN = ((sqrt(jh, 0, 0, DOWN) / 5) + 2)
1844- let an = (jM + 1)
1845- if (if (ct)
1846- then (an > jN)
1846+ let jO = ((sqrt(ji, 0, 0, DOWN) / 5) + 2)
1847+ let ao = (jN + 1)
1848+ if (if (cu)
1849+ then (ao > jO)
18471850 else false)
1848- then throw(("Currently max infrastructure level = " + toString(jN)))
1851+ then throw(("Currently max infrastructure level = " + toString(jO)))
18491852 else {
1850- let jO = fraction(eb, (jh * an), cG)
1851- if (if (!(fd))
1852- then (jK != jO)
1853+ let jP = fraction(ec, (ji * ao), cH)
1854+ if (if (!(fe))
1855+ then (jL != jP)
18531856 else false)
1854- then throw(("Payment attached should be " + toString(jO)))
1857+ then throw(("Payment attached should be " + toString(jP)))
18551858 else {
1856- let hK = bM(fZ._1)
1857- let in = hJ(hK)
1858- let jP = split(in[bn], "_")
1859- let jQ = fraction(cB, (jh * an), cG)
1860- let jR = makeString(fc(fd, jP, jQ), "_")
1861- let jS = jI(c, fZ._2, jh, eA)
1862- let jT = jS._5
1863- let jU = hL(jT[bc])
1864- let jV = makeString([split(jT[bc], "_")[0], toString(an)], "_")
1865- let jW = hL(jV)
1866- let if = split(jT[bg], "_")
1867- let jX = makeString([if[bh], if[bi], toString(((parseIntValue(if[bj]) + jW) - jU)), toString(jW)], "_")
1868- $Tuple3(([IntegerEntry(jL, an), IntegerEntry(es(fZ._2, c), an), StringEntry(hK, makeString([in[bl], jS._3[bm], jR, in[bo]], ":")), StringEntry(jS._4, makeString([jV, jT[bd], jT[be], jT[bf], jX], ":"))] ++ jS._1), an, jQ)
1859+ let hL = bN(ga._1)
1860+ let io = hK(hL)
1861+ let jQ = split(io[bo], "_")
1862+ let jR = fraction(cC, (ji * ao), cH)
1863+ let jS = makeString(fd(fe, jQ, jR), "_")
1864+ let jT = jJ(c, ga._2, ji, eB)
1865+ let jU = jT._5
1866+ let jV = hM(jU[bd])
1867+ let jW = makeString([split(jU[bd], "_")[0], toString(ao)], "_")
1868+ let jX = hM(jW)
1869+ let ig = split(jU[bh], "_")
1870+ let jY = makeString([ig[bi], ig[bj], toString(((parseIntValue(ig[bk]) + jX) - jV)), toString(jX)], "_")
1871+ $Tuple3(([IntegerEntry(jM, ao), IntegerEntry(et(ga._2, c), ao), StringEntry(hL, makeString([io[bm], jT._3[bn], jS, io[bp]], ":")), StringEntry(jT._4, makeString([jW, jU[be], jU[bf], jU[bg], jY], ":"))] ++ jT._1), ao, jR)
18691872 }
18701873 }
18711874 }
18721875 }
18731876
18741877
1875-func jY (jZ,ka,kb,kc) = {
1876- let ah = valueOrElse(getInteger(ka), 0)
1877- let am = (ah + kc)
1878- let kd = ak(valueOrElse(getInteger(jZ), 0), am)
1879- $Tuple2([IntegerEntry(jZ, kd[0]), IntegerEntry(ka, am), IntegerEntry(kb, (valueOrElse(getInteger(kb), 0) + kd[1]))], am)
1880- }
1881-
1882-
1883-func ke (B,kc) = {
1884- let jr = value(assetInfo(fromBase58String(B)))
1885- let c = valueOrErrorMessage(getString(bK(B)), (("NFT " + jr.name) + " is orphaned"))
1886- if (if (if (cu)
1887- then (jr.issuer == this)
1878+func jZ (ka,kb,kc,kd) = {
1879+ let ai = valueOrElse(getInteger(kb), 0)
1880+ let an = (ai + kd)
1881+ let ke = al(valueOrElse(getInteger(ka), 0), an)
1882+ $Tuple2([IntegerEntry(ka, ke[0]), IntegerEntry(kb, an), IntegerEntry(kc, (valueOrElse(getInteger(kc), 0) + ke[1]))], an)
1883+ }
1884+
1885+
1886+func kf (B,kd) = {
1887+ let js = value(assetInfo(fromBase58String(B)))
1888+ let c = valueOrErrorMessage(getString(bL(B)), (("NFT " + js.name) + " is orphaned"))
1889+ if (if (if (cv)
1890+ then (js.issuer == this)
18881891 else false)
1889- then contains(jr.name, aG)
1892+ then contains(js.name, aH)
18901893 else false)
1891- then jY(I(c), H(c), J(c), kc)
1892- else jY(E(B), D(B), F(B), kc)
1893- }
1894-
1895-
1896-func kf (c,kc) = jY(I(c), H(c), J(c), kc)
1897-
1898-
1899-func kg (c) = {
1900- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1901- let kh = bG(c)
1902- let ki = getString(kh)
1903- if (!(isDefined(ki)))
1894+ then jZ(I(c), H(c), J(c), kd)
1895+ else jZ(E(B), D(B), F(B), kd)
1896+ }
1897+
1898+
1899+func kg (c,kd) = jZ(I(c), H(c), J(c), kd)
1900+
1901+
1902+func kh (c) = {
1903+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1904+ let ki = bH(c)
1905+ let kj = getString(ki)
1906+ if (!(isDefined(kj)))
19041907 then throw("You are not eligible for ONBOARD artifact")
19051908 else {
1906- let kj = bI(c)
1907- let kk = getString(kj)
1908- if (isDefined(kk))
1909- then throw(("You already used your ONBOARD artifact on duck " + value(kk)))
1909+ let kk = bJ(c)
1910+ let kl = getString(kk)
1911+ if (isDefined(kl))
1912+ then throw(("You already used your ONBOARD artifact on duck " + value(kl)))
19101913 else {
1911- let kl = bH(B)
1912- let km = getString(kl)
1913- if (isDefined(km))
1914- then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(km)))
1915- else ([StringEntry(kj, B), StringEntry(kl, c)] ++ ke(B, ae)._1)
1914+ let km = bI(B)
1915+ let kn = getString(km)
1916+ if (isDefined(kn))
1917+ then throw(((("The duck " + B) + " already got points from ONBOARD artifact from user ") + value(kn)))
1918+ else ([StringEntry(kk, B), StringEntry(km, c)] ++ kf(B, af)._1)
19161919 }
19171920 }
19181921 }
19191922
19201923
1921-func kn (c,jn) = {
1922- let fZ = jl(c, eA, jn)
1923- let Q = fZ._2
1924- let jh = dF(fZ._3[dj])
1925- let ko = bw(aH, Q)
1926- if ((valueOrElse(getInteger(ko), 0) > 0))
1924+func ko (c,jo) = {
1925+ let ga = jm(c, eB, jo)
1926+ let Q = ga._2
1927+ let ji = dG(ga._3[dk])
1928+ let kp = bx(aI, Q)
1929+ if ((valueOrElse(getInteger(kp), 0) > 0))
19271930 then throw("Presale artifact is already activated")
1928- else if ((parseIntValue(fZ._3[di]) > em))
1929- then throw((((aE + " ") + Q) + " is not eligible for presale artifact"))
1931+ else if ((parseIntValue(ga._3[dj]) > en))
1932+ then throw((((aF + " ") + Q) + " is not eligible for presale artifact"))
19301933 else {
1931- let jS = jI(c, Q, jh, eA)
1932- (((jS._1 :+ IntegerEntry(ko, jh)) :+ StringEntry(jS._2, makeString(jS._3, ":"))) :+ StringEntry(jS._4, makeString(jS._5, ":")))
1934+ let jT = jJ(c, Q, ji, eB)
1935+ (((jT._1 :+ IntegerEntry(kp, ji)) :+ StringEntry(jT._2, makeString(jT._3, ":"))) :+ StringEntry(jT._4, makeString(jT._5, ":")))
19331936 }
19341937 }
19351938
19361939
1937-func kp (B) = {
1938- let ch = valueOrElse(getInteger(dg, bS), 0)
1939- let jp = split(valueOrElse(getString(bN(B)), aM), "_")
1940- let az = lastBlock.timestamp
1941- let cj = cb(dg, ch)
1942- let cd = cj[bX]
1943- let ce = cj[bY]
1944- if ((jp[bq] != "T"))
1940+func kq (B) = {
1941+ let ci = valueOrElse(getInteger(dh, bT), 0)
1942+ let jq = split(valueOrElse(getString(bO(B)), aN), "_")
1943+ let aA = lastBlock.timestamp
1944+ let ck = cc(dh, ci)
1945+ let ce = ck[bY]
1946+ let cf = ck[bZ]
1947+ if ((jq[br] != "T"))
19451948 then false
1946- else if (if (if ((parseIntValue(jp[bp]) == ch))
1947- then (ce[ca] == "INPROGRESS")
1949+ else if (if (if ((parseIntValue(jq[bq]) == ci))
1950+ then (cf[cb] == "INPROGRESS")
19481951 else false)
1949- then (parseIntValue(cd[bZ]) > az)
1952+ then (parseIntValue(ce[ca]) > aA)
19501953 else false)
19511954 then throw("Your duck is taking part in the tournament")
1952- else dE(invoke(this, "exitTournamentInternal", [B], nil))
1953- }
1954-
1955-
1956-func kq (kr,an,ks,c,kt,ku) = {
1957- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
1958- if (kp(B))
1955+ else dF(invoke(this, "exitTournamentInternal", [B], nil))
1956+ }
1957+
1958+
1959+func kr (ks,ao,kt,c,ku,kv) = {
1960+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
1961+ if (kq(B))
19591962 then throw("mergeInternal_checkTournament")
19601963 else {
1961- func kv (eQ,Q) = {
1962- let jr = value(assetInfo(fromBase58String(Q)))
1963- let js = bv(Q)
1964- let jt = valueOrErrorMessage(getInteger(js), (("NFT " + jr.name) + " is not staked"))
1965- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
1966- if ((ju != c))
1967- then throw((aE + " is not yours"))
1964+ func kw (eR,Q) = {
1965+ let js = value(assetInfo(fromBase58String(Q)))
1966+ let jt = bw(Q)
1967+ let ju = valueOrErrorMessage(getInteger(jt), (("NFT " + js.name) + " is not staked"))
1968+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
1969+ if ((jv != c))
1970+ then throw((aF + " is not yours"))
19681971 else {
1969- let jv = split(jr.description, "_")
1970- let du = jv[dl]
1971- if (if ((eQ._3 != ""))
1972- then (eQ._3 != du)
1972+ let jw = split(js.description, "_")
1973+ let dv = jw[dm]
1974+ if (if ((eR._3 != ""))
1975+ then (eR._3 != dv)
19731976 else false)
19741977 then throw("Lands should be on the same continent to merge")
19751978 else {
1976- let dG = jv[dj]
1977- let kw = eQ._1
1978- let gJ = valueOrErrorMessage(indexOf(kw, dG), "You haven't passed all the lands needed")
1979- let kx = (take(kw, gJ) + drop(kw, (gJ + 1)))
1980- let jh = dF(dG)
1981- let ky = (eQ._2 + valueOrElse(getInteger(bw(aH, Q)), 0))
1982- let hZ = valueOrElse(getInteger(bC(Q)), 0)
1983- let kz = {
1984- let cy = dG
1985- if (("S" == cy))
1979+ let dH = jw[dk]
1980+ let kx = eR._1
1981+ let gK = valueOrErrorMessage(indexOf(kx, dH), "You haven't passed all the lands needed")
1982+ let ky = (take(kx, gK) + drop(kx, (gK + 1)))
1983+ let ji = dG(dH)
1984+ let kz = (eR._2 + valueOrElse(getInteger(bx(aI, Q)), 0))
1985+ let ia = valueOrElse(getInteger(bD(Q)), 0)
1986+ let kA = {
1987+ let cz = dH
1988+ if (("S" == cz))
19861989 then 3
1987- else if (("M" == cy))
1990+ else if (("M" == cz))
19881991 then 4
1989- else if (("L" == cy))
1992+ else if (("L" == cz))
19901993 then 5
1991- else if (("XL" == cy))
1994+ else if (("XL" == cz))
19921995 then 6
19931996 else throw("Only S, M, L, XL can merge")
19941997 }
1995- if ((hZ != kz))
1998+ if ((ia != kA))
19961999 then throw("All lands should be maxed to merge")
19972000 else {
1998- let er = jv[di]
1999- let gF = gL(jv[dk])
2000- let gP = (lastBlock.timestamp - jt)
2001- if ((0 > gP))
2002- then throw(((("Saved timestamp is in future, saved = " + toString(jt)) + ", current = ") + toString(lastBlock.timestamp)))
2001+ let es = jw[dj]
2002+ let gG = gM(jw[dl])
2003+ let gQ = (lastBlock.timestamp - ju)
2004+ if ((0 > gQ))
2005+ then throw(((("Saved timestamp is in future, saved = " + toString(ju)) + ", current = ") + toString(lastBlock.timestamp)))
20032006 else {
2004- let jx = jg(Q, jh)
2005- let hY = (jh / cG)
2006- let jF = gN(split(eQ._4, "_"), gF, gP, hY, jx)
2007- let fa = gD(eQ._6, gF, hY, -1)
2008- let kA = gD(eQ._10, gF, hY, -1)
2009- let ht = gD(eQ._9, gF, hY, 1)
2010- let kB = eQ._7
2011- let db = indexOf(kB, Q)
2012- if (!(isDefined(db)))
2007+ let jy = jh(Q, ji)
2008+ let hZ = (ji / cH)
2009+ let jG = gO(split(eR._4, "_"), gG, gQ, hZ, jy)
2010+ let fb = gE(eR._6, gG, hZ, -1)
2011+ let kB = gE(eR._10, gG, hZ, -1)
2012+ let hu = gE(eR._9, gG, hZ, 1)
2013+ let kC = eR._7
2014+ let dc = indexOf(kC, Q)
2015+ if (!(isDefined(dc)))
20132016 then throw(("Your staked lands don't contain " + Q))
20142017 else {
2015- let kC = bu(Q)
2016- let kD = valueOrElse(getString(kC), "")
2017- $Tuple10(kx, ky, du, jF, ((((((((((((eQ._5 :+ DeleteEntry(bv(Q))) :+ DeleteEntry(by(aE, Q, c))) :+ DeleteEntry(eq(er))) :+ DeleteEntry(bs(Q))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(es(Q, c))) :+ DeleteEntry(bw(aH, Q))) :+ DeleteEntry(et(er))) :+ DeleteEntry(bB(Q))) :+ DeleteEntry(kC)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kD != ""))
2018- then [DeleteEntry(eo(kD))]
2019- else nil)), fa, removeByIndex(kB, value(db)), (eQ._8 + jh), ht, kA)
2018+ let kD = bv(Q)
2019+ let kE = valueOrElse(getString(kD), "")
2020+ $Tuple10(ky, kz, dv, jG, ((((((((((((eR._5 :+ DeleteEntry(bw(Q))) :+ DeleteEntry(bz(aF, Q, c))) :+ DeleteEntry(er(es))) :+ DeleteEntry(bt(Q))) :+ DeleteEntry(bD(Q))) :+ DeleteEntry(et(Q, c))) :+ DeleteEntry(bx(aI, Q))) :+ DeleteEntry(eu(es))) :+ DeleteEntry(bC(Q))) :+ DeleteEntry(kD)) :+ Burn(fromBase58String(Q), 1)) ++ (if ((kE != ""))
2021+ then [DeleteEntry(ep(kE))]
2022+ else nil)), fb, removeByIndex(kC, value(dc)), (eR._8 + ji), hu, kB)
20202023 }
20212024 }
20222025 }
20232026 }
20242027 }
20252028 }
20262029
2027- let hK = bM(B)
2028- let in = hJ(hK)
2029- let gE = split(valueOrElse(getString(ds()), "0_0_0_0_0_0"), "_")
2030- let kE = dv(c)
2031- let kF = getString(kE)
2032- let kG = if (isDefined(kF))
2033- then split_51C(value(kF), "_")
2030+ let hL = bN(B)
2031+ let io = hK(hL)
2032+ let gF = split(valueOrElse(getString(dt()), "0_0_0_0_0_0"), "_")
2033+ let kF = dw(c)
2034+ let kG = getString(kF)
2035+ let kH = if (isDefined(kG))
2036+ then split_51C(value(kG), "_")
20342037 else nil
2035- let kH = split(value(assetInfo(fromBase58String(kt[0]))).description, "_")[dl]
2036- let kI = split(valueOrElse(getString(dt(kH)), "0_0_0_0_0_0"), "_")
2037- let fb = {
2038- let eS = kt
2039- let eT = size(eS)
2040- let eU = $Tuple10(ks, 0, "", in[bm], nil, gE, kG, 0, split("0_0_0_0_0_0", "_"), kI)
2041- func eV (eW,eX) = if ((eX >= eT))
2042- then eW
2043- else kv(eW, eS[eX])
2044-
2045- func eY (eW,eX) = if ((eX >= eT))
2046- then eW
2038+ let kI = split(value(assetInfo(fromBase58String(ku[0]))).description, "_")[dm]
2039+ let kJ = split(valueOrElse(getString(du(kI)), "0_0_0_0_0_0"), "_")
2040+ let fc = {
2041+ let eT = ku
2042+ let eU = size(eT)
2043+ let eV = $Tuple10(kt, 0, "", io[bn], nil, gF, kH, 0, split("0_0_0_0_0_0", "_"), kJ)
2044+ func eW (eX,eY) = if ((eY >= eU))
2045+ then eX
2046+ else kw(eX, eT[eY])
2047+
2048+ func eZ (eX,eY) = if ((eY >= eU))
2049+ then eX
20472050 else throw("List size exceeds 5")
20482051
2049- eY(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5)
2052+ eZ(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5)
20502053 }
2051- let du = fb._3
2052- let hn = valueOrErrorMessage(indexOf(aT, du), ("Unknown continent: " + du))
2053- let gM = hs(fb._9, (dF(kr) / cG))
2054- let iL = valueOrElse(getInteger(en()), (em + 1))
2055- let kJ = toString(iL)
2056- let iM = Issue(eF(kJ, kr), makeString([kJ, kr, gM, du], "_"), 1, 0, false)
2057- let bt = calculateAssetId(iM)
2058- let kK = toBase58String(bt)
2059- let jR = makeString(fc((ku > 0), split(in[bn], "_"), ku), "_")
2060- let kL = dw(c)
2061- let kM = valueOrElse(getInteger(kL), 0)
2062- $Tuple2((((((((((((((((fb._5 :+ (if ((size(fb._7) > 0))
2063- then StringEntry(kE, makeString_11C(fb._7, "_"))
2064- else DeleteEntry(kE))) :+ IntegerEntry(kL, if ((fb._8 > kM))
2054+ let dv = fc._3
2055+ let ho = valueOrErrorMessage(indexOf(aU, dv), ("Unknown continent: " + dv))
2056+ let gN = ht(fc._9, (dG(ks) / cH))
2057+ let iM = valueOrElse(getInteger(eo()), (en + 1))
2058+ let kK = toString(iM)
2059+ let iN = Issue(eG(kK, ks), makeString([kK, ks, gN, dv], "_"), 1, 0, false)
2060+ let bu = calculateAssetId(iN)
2061+ let kL = toBase58String(bu)
2062+ let jS = makeString(fd((kv > 0), split(io[bo], "_"), kv), "_")
2063+ let kM = dx(c)
2064+ let kN = valueOrElse(getInteger(kM), 0)
2065+ $Tuple2((((((((((((((((fc._5 :+ (if ((size(fc._7) > 0))
2066+ then StringEntry(kF, makeString_11C(fc._7, "_"))
2067+ else DeleteEntry(kF))) :+ IntegerEntry(kM, if ((fc._8 > kN))
20652068 then 0
2066- else (kM - fb._8))) :+ IntegerEntry(en(), (iL + 1))) :+ iM) :+ StringEntry(eq(kJ), kK)) :+ StringEntry(bs(kK), c)) :+ StringEntry(et(kJ), c)) :+ IntegerEntry(bw(aH, kK), fb._2)) :+ IntegerEntry(bC(kK), an)) :+ IntegerEntry(es(kK, c), an)) :+ StringEntry(hK, makeString([in[bl], fb._4, jR, in[bo]], ":"))) :+ StringEntry(ds(), makeString(fb._6, "_"))) :+ StringEntry(dt(du), makeString(fb._10, "_"))) :+ StringEntry(bN(B), makeString([du, "L", kK], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bt)), kK)
2067- }
2068- }
2069-
2070-
2071-func kN (c,kt) = kq("M", 3, "SSSS", c, kt, 0)
2072-
2073-
2074-func kO (c,kt) = kq("L", 4, "SMM", c, kt, (cB * 4))
2075-
2076-
2077-func kP (c,kt) = kq("XL", 5, "SSSML", c, kt, (cB * 47))
2078-
2079-
2080-func kQ (c,kt) = kq("XXL", 6, "LXL", c, kt, (cB * 54))
2081-
2082-
2083-func kR (c,kt) = {
2084- let cy = size(kt)
2085- if ((4 == cy))
2086- then kN(c, kt)
2087- else if ((3 == cy))
2088- then kO(c, kt)
2089- else if ((5 == cy))
2090- then kP(c, kt)
2091- else if ((2 == cy))
2092- then kQ(c, kt)
2069+ else (kN - fc._8))) :+ IntegerEntry(eo(), (iM + 1))) :+ iN) :+ StringEntry(er(kK), kL)) :+ StringEntry(bt(kL), c)) :+ StringEntry(eu(kK), c)) :+ IntegerEntry(bx(aI, kL), fc._2)) :+ IntegerEntry(bD(kL), ao)) :+ IntegerEntry(et(kL, c), ao)) :+ StringEntry(hL, makeString([io[bm], fc._4, jS, io[bp]], ":"))) :+ StringEntry(dt(), makeString(fc._6, "_"))) :+ StringEntry(du(dv), makeString(fc._10, "_"))) :+ StringEntry(bO(B), makeString([dv, "L", kL], "_"))) :+ ScriptTransfer(addressFromStringValue(c), 1, bu)), kL)
2070+ }
2071+ }
2072+
2073+
2074+func kO (c,ku) = kr("M", 3, "SSSS", c, ku, 0)
2075+
2076+
2077+func kP (c,ku) = kr("L", 4, "SMM", c, ku, (cC * 4))
2078+
2079+
2080+func kQ (c,ku) = kr("XL", 5, "SSSML", c, ku, (cC * 47))
2081+
2082+
2083+func kR (c,ku) = kr("XXL", 6, "LXL", c, ku, (cC * 54))
2084+
2085+
2086+func kS (c,ku) = {
2087+ let cz = size(ku)
2088+ if ((4 == cz))
2089+ then kO(c, ku)
2090+ else if ((3 == cz))
2091+ then kP(c, ku)
2092+ else if ((5 == cz))
2093+ then kQ(c, ku)
2094+ else if ((2 == cz))
2095+ then kR(c, ku)
20932096 else throw("Unknown merge")
20942097 }
20952098
20962099
2097-func kS (gJ) = if (if ((gJ.originCaller != dc))
2098- then valueOrElse(getBoolean(dI()), false)
2100+func kT (gK) = if (if ((gK.originCaller != dd))
2101+ then valueOrElse(getBoolean(dJ()), false)
20992102 else false)
21002103 then throw("Contracts are under maintenance")
2101- else [StringEntry(dJ(toString(gJ.originCaller)), toBase58String(gJ.transactionId))]
2102-
2103-
2104-@Callable(gJ)
2105-func constructorV1 (kT) = if ((gJ.caller != this))
2104+ else [StringEntry(dK(toString(gK.originCaller)), toBase58String(gK.transactionId))]
2105+
2106+
2107+@Callable(gK)
2108+func constructorV1 (kU) = if ((gK.caller != this))
21062109 then throw("Permission denied")
2107- else [StringEntry(cW(), kT)]
2108-
2109-
2110-
2111-@Callable(gJ)
2112-func saveInteger (cO,eH) = if ((gJ.caller != this))
2110+ else [StringEntry(cX(), kU)]
2111+
2112+
2113+
2114+@Callable(gK)
2115+func saveInteger (cP,eI) = if ((gK.caller != this))
21132116 then throw("saveInteger is not public method")
2114- else [IntegerEntry(cO, eH)]
2115-
2116-
2117-
2118-@Callable(gJ)
2119-func setBlocked (kU) = if ((gJ.caller != this))
2117+ else [IntegerEntry(cP, eI)]
2118+
2119+
2120+
2121+@Callable(gK)
2122+func setBlocked (kV) = if ((gK.caller != this))
21202123 then throw("permission denied")
2121- else [BooleanEntry(dI(), kU)]
2122-
2123-
2124-
2125-@Callable(gJ)
2124+ else [BooleanEntry(dJ(), kV)]
2125+
2126+
2127+
2128+@Callable(gK)
21262129 func stakeLand () = {
2127- let kV = kS(gJ)
2128- if ((size(gJ.payments) != 1))
2130+ let kW = kT(gK)
2131+ if ((size(gK.payments) != 1))
21292132 then throw("Exactly one payment required")
21302133 else {
2131- let kW = value(gJ.payments[0])
2132- let bt = value(kW.assetId)
2133- let cN = toString(gJ.caller)
2134- if ((kW.amount != 1))
2135- then throw((("NFT " + aE) + " token should be attached as payment"))
2134+ let kX = value(gK.payments[0])
2135+ let bu = value(kX.assetId)
2136+ let cO = toString(gK.caller)
2137+ if ((kX.amount != 1))
2138+ then throw((("NFT " + aF) + " token should be attached as payment"))
21362139 else {
2137- let jr = value(assetInfo(bt))
2138- if ((jr.issuer != this))
2140+ let js = value(assetInfo(bu))
2141+ if ((js.issuer != this))
21392142 then throw("Unknown issuer of token")
2140- else if (!(contains(jr.name, aE)))
2141- then throw((("Only NFT " + aE) + " tokens are accepted"))
2143+ else if (!(contains(js.name, aF)))
2144+ then throw((("Only NFT " + aF) + " tokens are accepted"))
21422145 else {
2143- let kX = drop(jr.name, 4)
2144- let er = if (contains(kX, "XXL"))
2145- then dropRight(kX, 3)
2146- else if (contains(kX, "XL"))
2147- then dropRight(kX, 2)
2148- else dropRight(kX, 1)
2149- if (!(isDefined(parseInt(er))))
2150- then throw(("Cannot parse land number from " + jr.name))
2146+ let kY = drop(js.name, 4)
2147+ let es = if (contains(kY, "XXL"))
2148+ then dropRight(kY, 3)
2149+ else if (contains(kY, "XL"))
2150+ then dropRight(kY, 2)
2151+ else dropRight(kY, 1)
2152+ if (!(isDefined(parseInt(es))))
2153+ then throw(("Cannot parse land number from " + js.name))
21512154 else {
2152- let Q = toBase58String(bt)
2153- let js = bv(Q)
2154- if (isDefined(getInteger(js)))
2155- then throw((("NFT " + jr.name) + " is already staked"))
2155+ let Q = toBase58String(bu)
2156+ let jt = bw(Q)
2157+ if (isDefined(getInteger(jt)))
2158+ then throw((("NFT " + js.name) + " is already staked"))
21562159 else {
2157- let jv = split(jr.description, "_")
2158- let gF = gL(jv[dk])
2159- let jh = dF(jv[dj])
2160- let hY = (jh / cG)
2161- let fa = gK(gF, hY, 1)
2162- let kY = dt(jv[dl])
2163- let kI = split(valueOrElse(getString(kY), "0_0_0_0_0_0"), "_")
2164- let kZ = makeString(gD(kI, gF, hY, 1), "_")
2165- let kE = dv(cN)
2166- let kF = getString(kE)
2167- let kB = if (isDefined(kF))
2168- then split_51C(value(kF), "_")
2160+ let jw = split(js.description, "_")
2161+ let gG = gM(jw[dl])
2162+ let ji = dG(jw[dk])
2163+ let hZ = (ji / cH)
2164+ let fb = gL(gG, hZ, 1)
2165+ let kZ = du(jw[dm])
2166+ let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2167+ let la = makeString(gE(kJ, gG, hZ, 1), "_")
2168+ let kF = dw(cO)
2169+ let kG = getString(kF)
2170+ let kC = if (isDefined(kG))
2171+ then split_51C(value(kG), "_")
21692172 else nil
2170- if (containsElement(kB, Q))
2173+ if (containsElement(kC, Q))
21712174 then throw(("Your staked lands already contain " + Q))
2172- else if ((size(kB) >= aJ))
2173- then throw((("Your already staked max (" + toString(aJ)) + ") lands"))
2175+ else if ((size(kC) >= aK))
2176+ then throw((("Your already staked max (" + toString(aK)) + ") lands"))
21742177 else {
2175- let hZ = valueOrElse(getInteger(bC(Q)), 0)
2176- let kL = dw(cN)
2177- let la = valueOrElse(getInteger(kL), 0)
2178- let lb = invoke(df, "onStakeUnstakeLand", [cN], nil)
2179- $Tuple2(([IntegerEntry(js, lastBlock.timestamp), IntegerEntry(by(aE, Q, cN), lastBlock.timestamp), StringEntry(kE, makeString_11C((kB :+ Q), "_")), IntegerEntry(kL, (la + jh)), StringEntry(bs(Q), cN), StringEntry(et(er), cN), IntegerEntry(es(Q, cN), hZ), StringEntry(ds(), fa), StringEntry(kY, kZ)] ++ kV), lb)
2178+ let ia = valueOrElse(getInteger(bD(Q)), 0)
2179+ let kM = dx(cO)
2180+ let lb = valueOrElse(getInteger(kM), 0)
2181+ let lc = invoke(dg, "onStakeUnstakeLand", [cO], nil)
2182+ $Tuple2(([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aF, Q, cO), lastBlock.timestamp), StringEntry(kF, makeString_11C((kC :+ Q), "_")), IntegerEntry(kM, (lb + ji)), StringEntry(bt(Q), cO), StringEntry(eu(es), cO), IntegerEntry(et(Q, cO), ia), StringEntry(dt(), fb), StringEntry(kZ, la)] ++ kW), lc)
21802183 }
21812184 }
21822185 }
21832186 }
21842187 }
21852188 }
21862189 }
21872190
21882191
21892192
2190-@Callable(gJ)
2191-func unstakeLand (jn) = {
2192- let kV = kS(gJ)
2193- if ((size(gJ.payments) != 0))
2193+@Callable(gK)
2194+func unstakeLand (jo) = {
2195+ let kW = kT(gK)
2196+ if ((size(gK.payments) != 0))
21942197 then throw("No payments required")
21952198 else {
2196- let c = toString(gJ.caller)
2197- let fZ = jl(c, ez, jn)
2198- let Q = fZ._2
2199- let jv = fZ._3
2200- let kE = dv(c)
2201- let gF = gL(jv[dk])
2202- let jh = dF(jv[dj])
2203- let hY = (jh / cG)
2204- let fa = gK(gF, hY, -1)
2205- let kY = dt(jv[dl])
2206- let kI = split(valueOrElse(getString(kY), "0_0_0_0_0_0"), "_")
2207- let kZ = makeString(gD(kI, gF, hY, -1), "_")
2208- let jS = jI(c, Q, jh, ez)
2209- let kB = split_51C(valueOrElse(getString(kE), ""), "_")
2210- let db = indexOf(kB, Q)
2211- if (!(isDefined(db)))
2199+ let c = toString(gK.caller)
2200+ let ga = jm(c, eA, jo)
2201+ let Q = ga._2
2202+ let jw = ga._3
2203+ let kF = dw(c)
2204+ let gG = gM(jw[dl])
2205+ let ji = dG(jw[dk])
2206+ let hZ = (ji / cH)
2207+ let fb = gL(gG, hZ, -1)
2208+ let kZ = du(jw[dm])
2209+ let kJ = split(valueOrElse(getString(kZ), "0_0_0_0_0_0"), "_")
2210+ let la = makeString(gE(kJ, gG, hZ, -1), "_")
2211+ let jT = jJ(c, Q, ji, eA)
2212+ let kC = split_51C(valueOrElse(getString(kF), ""), "_")
2213+ let dc = indexOf(kC, Q)
2214+ if (!(isDefined(dc)))
22122215 then throw(("Your staked lands don't contain " + Q))
22132216 else {
2214- let az = lastBlock.timestamp
2215- let lc = valueOrElse(getInteger(de, bO(c)), 0)
2216- if ((lc >= az))
2217- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(lc)))
2217+ let aA = lastBlock.timestamp
2218+ let ld = valueOrElse(getInteger(df, bP(c)), 0)
2219+ if ((ld >= aA))
2220+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ld)))
22182221 else {
2219- let ld = (valueOrElse(getInteger(df, b(c)), 0) + cC)
2220- if ((ld > az))
2221- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(ld)))
2222+ let le = (valueOrElse(getInteger(dg, b(c)), 0) + cD)
2223+ if ((le > aA))
2224+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(le)))
22222225 else {
2223- let kL = dw(c)
2224- let kM = valueOrElse(getInteger(kL), 0)
2225- let le = if ((jh > kM))
2226+ let kM = dx(c)
2227+ let kN = valueOrElse(getInteger(kM), 0)
2228+ let lf = if ((ji > kN))
22262229 then 0
2227- else (kM - jh)
2228- let lb = invoke(df, "onStakeUnstakeLand", [c], nil)
2229- $Tuple2(([ScriptTransfer(gJ.caller, 1, fromBase58String(Q)), DeleteEntry(bv(Q)), DeleteEntry(by(aE, Q, c)), StringEntry(ds(), fa), StringEntry(kY, kZ), StringEntry(jS._2, makeString(jS._3, ":")), if ((size(kB) > 1))
2230- then StringEntry(kE, makeString_11C(removeByIndex(kB, value(db)), "_"))
2231- else DeleteEntry(kE), IntegerEntry(kL, le)] ++ kV), lb)
2230+ else (kN - ji)
2231+ let lc = invoke(dg, "onStakeUnstakeLand", [c], nil)
2232+ $Tuple2(([ScriptTransfer(gK.caller, 1, fromBase58String(Q)), DeleteEntry(bw(Q)), DeleteEntry(bz(aF, Q, c)), StringEntry(dt(), fb), StringEntry(kZ, la), StringEntry(jT._2, makeString(jT._3, ":")), if ((size(kC) > 1))
2233+ then StringEntry(kF, makeString_11C(removeByIndex(kC, value(dc)), "_"))
2234+ else DeleteEntry(kF), IntegerEntry(kM, lf)] ++ kW), lc)
22322235 }
22332236 }
22342237 }
22352238 }
22362239 }
22372240
22382241
22392242
2240-@Callable(gJ)
2243+@Callable(gK)
22412244 func stakeDuck () = {
2242- let kV = kS(gJ)
2243- if ((size(gJ.payments) != 1))
2245+ let kW = kT(gK)
2246+ if ((size(gK.payments) != 1))
22442247 then throw("Exactly one payment required")
22452248 else {
2246- let kW = value(gJ.payments[0])
2247- let bt = value(kW.assetId)
2248- let cN = toString(gJ.caller)
2249- if ((kW.amount != 1))
2250- then throw((("NFT " + aF) + " token should be attached as payment"))
2249+ let kX = value(gK.payments[0])
2250+ let bu = value(kX.assetId)
2251+ let cO = toString(gK.caller)
2252+ if ((kX.amount != 1))
2253+ then throw((("NFT " + aG) + " token should be attached as payment"))
22512254 else {
2252- let jr = value(assetInfo(bt))
2253- let lf = if (if (cu)
2254- then (jr.issuer == this)
2255+ let js = value(assetInfo(bu))
2256+ let lg = if (if (cv)
2257+ then (js.issuer == this)
22552258 else false)
2256- then contains(jr.name, aG)
2259+ then contains(js.name, aH)
22572260 else false
2258- if (if (if ((jr.issuer != dV))
2259- then (jr.issuer != dW)
2261+ if (if (if ((js.issuer != dW))
2262+ then (js.issuer != dX)
22602263 else false)
2261- then !(lf)
2264+ then !(lg)
22622265 else false)
2263- then throw((((("Unknown issuer of " + aF) + " or ") + aG) + " token"))
2264- else if (if (!(contains(jr.name, aF)))
2265- then !(lf)
2266+ then throw((((("Unknown issuer of " + aG) + " or ") + aH) + " token"))
2267+ else if (if (!(contains(js.name, aG)))
2268+ then !(lg)
22662269 else false)
2267- then throw((((("Only NFT " + aF) + " or ") + aG) + " tokens are accepted"))
2270+ then throw((((("Only NFT " + aG) + " or ") + aH) + " tokens are accepted"))
22682271 else {
2269- let lg = toBase58String(bt)
2270- let js = bv(lg)
2271- if (isDefined(getInteger(js)))
2272- then throw((("NFT " + jr.name) + " is already staked"))
2273- else if (isDefined(getString(bL(cN))))
2274- then throw(("You already staked one duck: " + jr.name))
2272+ let lh = toBase58String(bu)
2273+ let jt = bw(lh)
2274+ if (isDefined(getInteger(jt)))
2275+ then throw((("NFT " + js.name) + " is already staked"))
2276+ else if (isDefined(getString(bM(cO))))
2277+ then throw(("You already staked one duck: " + js.name))
22752278 else {
2276- let lh = bN(lg)
2277- let cg = getString(lh)
2278- let hK = bM(lg)
2279- let li = getString(hK)
2280- let ja = A(lg)
2281- let jb = ai(valueOrElse(getInteger(E(lg)), 0))
2282- let lj = valueOrElse(getInteger(ja), jb)
2283- ([IntegerEntry(js, lastBlock.timestamp), IntegerEntry(by(aF, toBase58String(bt), cN), lastBlock.timestamp), StringEntry(bK(lg), cN), StringEntry(bL(cN), lg)] ++ (if (isDefined(cg))
2279+ let li = bO(lh)
2280+ let ch = getString(li)
2281+ let hL = bN(lh)
2282+ let lj = getString(hL)
2283+ let jb = A(lh)
2284+ let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2285+ let lk = valueOrElse(getInteger(jb), jc)
2286+ ([IntegerEntry(jt, lastBlock.timestamp), IntegerEntry(bz(aG, toBase58String(bu), cO), lastBlock.timestamp), StringEntry(bL(lh), cO), StringEntry(bM(cO), lh)] ++ (if (isDefined(ch))
22842287 then nil
2285- else ([StringEntry(lh, aM)] ++ (if (isDefined(li))
2288+ else ([StringEntry(li, aN)] ++ (if (isDefined(lj))
22862289 then nil
2287- else (([StringEntry(hK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(ja, lj)) ++ kV)))))
2290+ else (([StringEntry(hL, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(jb, lk)) ++ kW)))))
22882291 }
22892292 }
22902293 }
22912294 }
22922295 }
22932296
22942297
22952298
2296-@Callable(gJ)
2297-func unstakeDuck (lg) = {
2298- let kV = kS(gJ)
2299- if ((size(gJ.payments) != 0))
2299+@Callable(gK)
2300+func unstakeDuck (lh) = {
2301+ let kW = kT(gK)
2302+ if ((size(gK.payments) != 0))
23002303 then throw("No payments required")
23012304 else {
2302- let bt = fromBase58String(lg)
2303- let cN = toString(gJ.caller)
2304- let jr = value(assetInfo(bt))
2305- let js = bv(lg)
2306- if (!(isDefined(getInteger(js))))
2307- then throw((("NFT " + jr.name) + " is not staked"))
2308- else if (!(isDefined(getString(bL(cN)))))
2309- then throw((("The duck " + jr.name) + " is not staked"))
2305+ let bu = fromBase58String(lh)
2306+ let cO = toString(gK.caller)
2307+ let js = value(assetInfo(bu))
2308+ let jt = bw(lh)
2309+ if (!(isDefined(getInteger(jt))))
2310+ then throw((("NFT " + js.name) + " is not staked"))
2311+ else if (!(isDefined(getString(bM(cO)))))
2312+ then throw((("The duck " + js.name) + " is not staked"))
23102313 else {
2311- let ju = valueOrErrorMessage(getString(bK(lg)), (("NFT " + jr.name) + " is orphaned"))
2312- if ((ju != cN))
2314+ let jv = valueOrErrorMessage(getString(bL(lh)), (("NFT " + js.name) + " is orphaned"))
2315+ if ((jv != cO))
23132316 then throw("Staked NFT is not yours")
2314- else if (kp(lg))
2317+ else if (kq(lh))
23152318 then throw("unstakeDuck_checkTournament")
23162319 else {
2317- let ja = A(lg)
2318- let jb = ai(valueOrElse(getInteger(E(lg)), 0))
2319- let au = valueOrElse(getInteger(ja), jb)
2320- if ((jb > au))
2321- then throw((("Please heal your duck to " + toString(jb)) + "hp before unstaking"))
2322- else ([ScriptTransfer(gJ.caller, 1, bt), DeleteEntry(js), DeleteEntry(ja), DeleteEntry(bN(lg)), DeleteEntry(bK(lg)), DeleteEntry(by(aF, lg, cN)), DeleteEntry(bL(cN))] ++ kV)
2320+ let jb = A(lh)
2321+ let jc = aj(valueOrElse(getInteger(E(lh)), 0))
2322+ let av = valueOrElse(getInteger(jb), jc)
2323+ if ((jc > av))
2324+ then throw((("Please heal your duck to " + toString(jc)) + "hp before unstaking"))
2325+ else ([ScriptTransfer(gK.caller, 1, bu), DeleteEntry(jt), DeleteEntry(jb), DeleteEntry(bO(lh)), DeleteEntry(bL(lh)), DeleteEntry(bz(aG, lh, cO)), DeleteEntry(bM(cO))] ++ kW)
23232326 }
23242327 }
23252328 }
23262329 }
23272330
23282331
23292332
2330-@Callable(gJ)
2331-func claimRes (eH,lk) = {
2332- let kV = kS(gJ)
2333- if ((size(gJ.payments) != 0))
2333+@Callable(gK)
2334+func claimRes (eI,ll) = {
2335+ let kW = kT(gK)
2336+ if ((size(gK.payments) != 0))
23342337 then throw("No payments required")
23352338 else {
2336- let c = toString(gJ.originCaller)
2337- let fi = jw(c, eH, ez, lk)
2338- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2339- $Tuple2(((((fi._1 ++ ke(B, fraction(W, eH, cF))._1) :+ StringEntry(fi._2, makeString(fi._3, ":"))) :+ StringEntry(fi._4, makeString(fi._5, ":"))) ++ kV), fi._3[bm])
2340- }
2341- }
2342-
2343-
2344-
2345-@Callable(gJ)
2346-func claimResToWH (eH,lk) = {
2347- let kV = kS(gJ)
2348- if ((size(gJ.payments) != 0))
2339+ let c = toString(gK.originCaller)
2340+ let fj = jx(c, eI, eA, ll)
2341+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2342+ $Tuple2(((((fj._1 ++ kf(B, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._3[bn])
2343+ }
2344+ }
2345+
2346+
2347+
2348+@Callable(gK)
2349+func claimResToWH (eI,ll) = {
2350+ let kW = kT(gK)
2351+ if ((size(gK.payments) != 0))
23492352 then throw("No payments required")
23502353 else {
2351- let c = toString(gJ.originCaller)
2352- let fi = jw(c, eH, ey, lk)
2353- $Tuple2(((((fi._1 ++ kf(c, fraction(W, eH, cF))._1) :+ StringEntry(fi._2, makeString(fi._3, ":"))) :+ StringEntry(fi._4, makeString(fi._5, ":"))) ++ kV), fi._5[bd])
2354- }
2355- }
2356-
2357-
2358-
2359-@Callable(gJ)
2360-func flight (iP,iQ) = {
2361- let kV = kS(gJ)
2362- if ((size(gJ.payments) != 0))
2354+ let c = toString(gK.originCaller)
2355+ let fj = jx(c, eI, ez, ll)
2356+ $Tuple2(((((fj._1 ++ kg(c, fraction(X, eI, cG))._1) :+ StringEntry(fj._2, makeString(fj._3, ":"))) :+ StringEntry(fj._4, makeString(fj._5, ":"))) ++ kW), fj._5[be])
2357+ }
2358+ }
2359+
2360+
2361+
2362+@Callable(gK)
2363+func flight (iQ,iR) = {
2364+ let kW = kT(gK)
2365+ if ((size(gK.payments) != 0))
23632366 then throw("No payments required")
23642367 else {
2365- let bP = toString(gJ.caller)
2366- let ho = iO(bP, iP, iQ)
2367- let iU = ho._1
2368- let B = ho._2
2369- let lh = bN(B)
2370- let jp = valueOrElse(getString(lh), aM)
2371- let iW = ho._4
2372- if ((iW == jp))
2368+ let bQ = toString(gK.caller)
2369+ let hp = iP(bQ, iQ, iR)
2370+ let iV = hp._1
2371+ let B = hp._2
2372+ let li = bO(B)
2373+ let jq = valueOrElse(getString(li), aN)
2374+ let iX = hp._4
2375+ if ((iX == jq))
23732376 then throw("You can't fly to the same location")
23742377 else {
2375- let cq = split(iW, "_")
2376- let ll = (cq[bq] == "T")
2377- let lm = (cq[bq] == "D")
2378- let gw = G(B)
2379- let ln = valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,")
2380- let lo = fj(ln, ho._5)
2381- let lp = lo._1
2382- let lq = lo._2
2383- let lr = if (!(ck(dg, jp)))
2384- then if (ll)
2385- then co(jp, iW, 5)
2386- else if (!(lm))
2387- then if ((iU > 0))
2388- then $Tuple2(iW, iU)
2389- else $Tuple2(jp, 0)
2390- else if ((iU > 0))
2378+ let cr = split(iX, "_")
2379+ let lm = (cr[br] == "T")
2380+ let ln = (cr[br] == "D")
2381+ let gx = G(B)
2382+ let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2383+ let lp = fk(lo, hp._5)
2384+ let lq = lp._1
2385+ let lr = lp._2
2386+ let ls = if (!(cl(dh, jq)))
2387+ then if (lm)
2388+ then cp(jq, iX, 5)
2389+ else if (!(ln))
2390+ then if ((iV > 0))
2391+ then $Tuple2(iX, iV)
2392+ else $Tuple2(jq, 0)
2393+ else if ((iV > 0))
23912394 then {
2392- let dz = invoke(this, "processDelivery", [B], nil)
2393- if ((dz == dz))
2394- then $Tuple2(jp, iU)
2395+ let dA = invoke(this, "processDelivery", [B], nil)
2396+ if ((dA == dA))
2397+ then $Tuple2(jq, iV)
23952398 else throw("Strict value is not equal to itself.")
23962399 }
2397- else $Tuple2(jp, 0)
2398- else if (cf(dg, jp))
2399- then if (!(cf(dg, iW)))
2400+ else $Tuple2(jq, 0)
2401+ else if (cg(dh, jq))
2402+ then if (!(cg(dh, iX)))
24002403 then throw("Your duck is taking part in the tournament")
24012404 else {
2402- let ls = parseIntValue(cq[br])
2403- let lt = split(jp, "_")
2404- let ch = valueOrElse(getInteger(dg, bS), 0)
2405- if ((ls != (parseIntValue(lt[br]) + 1)))
2406- then co(jp, iW, 7)
2407- else if ((iU > 0))
2405+ let lt = parseIntValue(cr[bs])
2406+ let lu = split(jq, "_")
2407+ let ci = valueOrElse(getInteger(dh, bT), 0)
2408+ if ((lt != (parseIntValue(lu[bs]) + 1)))
2409+ then cp(jq, iX, 7)
2410+ else if ((iV > 0))
24082411 then {
2409- let lu = valueOrElse(getInteger(dg, bW(ch, B)), 0)
2410- let lv = if ((ls > lu))
2411- then invoke(dg, "saveDuckResult", [B, ls], nil)
2412+ let lv = valueOrElse(getInteger(dh, bX(ci, B)), 0)
2413+ let lw = if ((lt > lv))
2414+ then invoke(dh, "saveDuckResult", [B, lt], nil)
24122415 else unit
2413- if ((lv == lv))
2414- then $Tuple2(iW, iU)
2416+ if ((lw == lw))
2417+ then $Tuple2(iX, iV)
24152418 else throw("Strict value is not equal to itself.")
24162419 }
2417- else $Tuple2(jp, 0)
2420+ else $Tuple2(jq, 0)
24182421 }
2419- else throw(("Unknown curLocation:" + jp))
2420- let lw = lr._1
2421- let lx = lr._2
2422- $Tuple2(((([StringEntry(lh, lw), StringEntry(gw, lp), IntegerEntry(A(B), lx)] ++ kV) ++ (if (lq)
2422+ else throw(("Unknown curLocation:" + jq))
2423+ let lx = ls._1
2424+ let ly = ls._2
2425+ $Tuple2(((([StringEntry(li, lx), StringEntry(gx, lq), IntegerEntry(A(B), ly)] ++ kW) ++ (if (lr)
24232426 then [StringEntry(M(B), "0_0_0_0_0")]
2424- else nil)) ++ ke(B, if ((iU > 0))
2425- then X
2426- else Y)._1), ho._3)
2427+ else nil)) ++ kf(B, if ((iV > 0))
2428+ then Y
2429+ else Z)._1), hp._3)
24272430 }
24282431 }
24292432 }
24302433
24312434
24322435
2433-@Callable(gJ)
2434-func heal (ly,lz,lA) = {
2435- let kV = kS(gJ)
2436- if (if (if ((0 > ly))
2437- then true
2438- else (0 > lz))
2436+@Callable(gK)
2437+func heal (lz,lA,lB) = {
2438+ let kW = kT(gK)
2439+ if (if (if ((0 > lz))
24392440 then true
24402441 else (0 > lA))
2442+ then true
2443+ else (0 > lB))
24412444 then throw("Quantity cannot be negative")
24422445 else {
2443- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2444- if (kp(B))
2446+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2447+ if (kq(B))
24452448 then throw("heal_checkTournament")
24462449 else {
2447- let lB = [ly, lz, lA]
2448- let ja = A(B)
2449- let jb = ai(valueOrElse(getInteger(E(B)), 0))
2450- let lC = valueOrElse(getInteger(ja), jb)
2451- if ((lC >= jb))
2452- then throw((("HP should be < " + toString(jb)) + " to heal"))
2450+ let lC = [lz, lA, lB]
2451+ let jb = A(B)
2452+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
2453+ let lD = valueOrElse(getInteger(jb), jc)
2454+ if ((lD >= jc))
2455+ then throw((("HP should be < " + toString(jc)) + " to heal"))
24532456 else {
2454- let hK = bM(B)
2455- let in = hJ(hK)
2456- let lD = if ((in[bo] == ""))
2457+ let hL = bN(B)
2458+ let io = hK(hL)
2459+ let lE = if ((io[bp] == ""))
24572460 then nil
2458- else split_4C(in[bo], "_")
2459- func lE (eQ,cn) = {
2460- let dB = eQ._2
2461- let hf = if ((size(lD) > dB))
2462- then parseIntValue(lD[dB])
2461+ else split_4C(io[bp], "_")
2462+ func lF (eR,co) = {
2463+ let dC = eR._2
2464+ let hg = if ((size(lE) > dC))
2465+ then parseIntValue(lE[dC])
24632466 else 0
2464- if ((3 > dB))
2467+ if ((3 > dC))
24652468 then {
2466- let lF = lB[dB]
2467- if ((lF > hf))
2468- then throw(((("You have only " + toString(hf)) + " of ") + aS[dB]))
2469- else $Tuple3((eQ._1 :+ toString((hf - lF))), (dB + 1), (eQ._3 + (parseIntValue(split(cn, "_")[aY]) * lF)))
2469+ let lG = lC[dC]
2470+ if ((lG > hg))
2471+ then throw(((("You have only " + toString(hg)) + " of ") + aT[dC]))
2472+ else $Tuple3((eR._1 :+ toString((hg - lG))), (dC + 1), (eR._3 + (parseIntValue(split(co, "_")[aZ]) * lG)))
24702473 }
2471- else $Tuple3((eQ._1 :+ toString(hf)), (dB + 1), eQ._3)
2474+ else $Tuple3((eR._1 :+ toString(hg)), (dC + 1), eR._3)
24722475 }
24732476
2474- let fi = {
2475- let eS = aW
2476- let eT = size(eS)
2477- let eU = $Tuple3(nil, 0, 0)
2478- func eV (eW,eX) = if ((eX >= eT))
2479- then eW
2480- else lE(eW, eS[eX])
2481-
2482- func eY (eW,eX) = if ((eX >= eT))
2483- then eW
2477+ let fj = {
2478+ let eT = aX
2479+ let eU = size(eT)
2480+ let eV = $Tuple3(nil, 0, 0)
2481+ func eW (eX,eY) = if ((eY >= eU))
2482+ then eX
2483+ else lF(eX, eT[eY])
2484+
2485+ func eZ (eX,eY) = if ((eY >= eU))
2486+ then eX
24842487 else throw("List size exceeds 50")
24852488
2486- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 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)
2489+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 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)
24872490 }
2488- let lG = min([jb, (lC + fi._3)])
2489- $Tuple2((([IntegerEntry(ja, lG), StringEntry(hK, makeString_2C([in[bl], in[bm], in[bn], makeString(fi._1, "_")], ":"))] ++ kV) ++ ke(B, (af * ((ly + lz) + lA)))._1), lG)
2491+ let lH = min([jc, (lD + fj._3)])
2492+ $Tuple2((([IntegerEntry(jb, lH), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], makeString(fj._1, "_")], ":"))] ++ kW) ++ kf(B, (ag * ((lz + lA) + lB)))._1), lH)
24902493 }
24912494 }
24922495 }
24932496 }
24942497
24952498
24962499
2497-@Callable(gJ)
2500+@Callable(gK)
24982501 func healES () = {
2499- let kV = kS(gJ)
2500- if ((size(gJ.payments) != 1))
2502+ let kW = kT(gK)
2503+ if ((size(gK.payments) != 1))
25012504 then throw("Exactly one payment required")
25022505 else {
2503- let kW = value(gJ.payments[0])
2504- if ((kW.assetId != cz))
2506+ let kX = value(gK.payments[0])
2507+ if ((kX.assetId != cA))
25052508 then throw("Allowed USDT payment only!")
25062509 else {
2507- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2508- if (kp(B))
2510+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2511+ if (kq(B))
25092512 then throw("healES_checkTournament")
25102513 else {
2511- let ja = A(B)
2512- let jb = ai(valueOrElse(getInteger(E(B)), 0))
2513- let lC = valueOrElse(getInteger(ja), jb)
2514- if ((lC > 0))
2514+ let jb = A(B)
2515+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
2516+ let lD = valueOrElse(getInteger(jb), jc)
2517+ if ((lD > 0))
25152518 then throw("HP should be 0 to call Emergency Service")
25162519 else {
2517- let hK = bM(B)
2518- let in = hJ(hK)
2519- let lD = if ((in[bo] == ""))
2520+ let hL = bN(B)
2521+ let io = hK(hL)
2522+ let lE = if ((io[bp] == ""))
25202523 then nil
2521- else split_4C(in[bo], "_")
2522- let lH = if ((size(lD) > 0))
2523- then parseIntValue(lD[0])
2524+ else split_4C(io[bp], "_")
2525+ let lI = if ((size(lE) > 0))
2526+ then parseIntValue(lE[0])
25242527 else 0
2525- let lI = if ((size(lD) > 1))
2526- then parseIntValue(lD[1])
2528+ let lJ = if ((size(lE) > 1))
2529+ then parseIntValue(lE[1])
25272530 else 0
2528- let lJ = if ((size(lD) > 2))
2529- then parseIntValue(lD[2])
2531+ let lK = if ((size(lE) > 2))
2532+ then parseIntValue(lE[2])
25302533 else 0
2531- if (if (if ((lH > 0))
2532- then true
2533- else (lI > 0))
2534+ if (if (if ((lI > 0))
25342535 then true
25352536 else (lJ > 0))
2537+ then true
2538+ else (lK > 0))
25362539 then throw("You have to use own Medical Kit")
25372540 else {
2538- let lK = getString(dd, bQ())
2539- let lL = if (isDefined(lK))
2540- then split_4C(value(lK), "_")
2541+ let lL = getString(de, bR())
2542+ let lM = if (isDefined(lL))
2543+ then split_4C(value(lL), "_")
25412544 else nil
2542- let lM = if ((size(lL) > 0))
2543- then parseIntValue(lL[0])
2545+ let lN = if ((size(lM) > 0))
2546+ then parseIntValue(lM[0])
25442547 else 0
2545- if ((0 >= lM))
2548+ if ((0 >= lN))
25462549 then throw("There are no Medical Kits L1 at Emergency Service storage")
25472550 else {
2548- let lG = (lC + parseIntValue(split(aW[0], "_")[aY]))
2549- let lN = makeString([toString((lM - 1)), removeByIndex(lL, 0)], "_")
2550- let cn = split(aW[0], "_")
2551- let lO = cm(cn)
2552- let lP = fraction((lO * aO), aN, (cF * bb))
2553- if ((kW.amount != lP))
2554- then throw(("Payment attached should be " + toString(lP)))
2551+ let lH = (lD + parseIntValue(split(aX[0], "_")[aZ]))
2552+ let lO = makeString([toString((lN - 1)), removeByIndex(lM, 0)], "_")
2553+ let co = split(aX[0], "_")
2554+ let lP = cn(co)
2555+ let lQ = fraction((lP * aP), aO, (cG * bc))
2556+ if ((kX.amount != lQ))
2557+ then throw(("Payment attached should be " + toString(lQ)))
25552558 else {
2556- let fi = dx(invoke(dd, "updateEsStorage", [lN], [AttachedPayment(cz, lP)]))
2557- $Tuple2(((kV :+ IntegerEntry(ja, lG)) ++ ke(B, Z)._1), fi)
2559+ let fj = dy(invoke(de, "updateEsStorage", [lO], [AttachedPayment(cA, lQ)]))
2560+ $Tuple2(((kW :+ IntegerEntry(jb, lH)) ++ kf(B, aa)._1), fj)
25582561 }
25592562 }
25602563 }
25612564 }
25622565 }
25632566 }
25642567 }
25652568 }
25662569
25672570
25682571
2569-@Callable(gJ)
2570-func updateBackpack (B,lQ) = if ((gJ.caller != dd))
2572+@Callable(gK)
2573+func updateBackpack (B,lR) = if ((gK.caller != de))
25712574 then throw("permission denied")
2572- else $Tuple2([StringEntry(bM(B), lQ)], lQ)
2573-
2574-
2575-
2576-@Callable(gJ)
2575+ else $Tuple2([StringEntry(bN(B), lR)], lR)
2576+
2577+
2578+
2579+@Callable(gK)
25772580 func commitForRandom () = {
2578- let kV = kS(gJ)
2579- let lR = (height + dq)
2580- let c = toString(gJ.caller)
2581- $Tuple2(([IntegerEntry(dr(c), lR)] ++ kV), lR)
2582- }
2583-
2584-
2585-
2586-@Callable(gJ)
2587-func revealRandom (dR) = {
2588- let kV = kS(gJ)
2589- let c = toString(gJ.caller)
2590- let lS = dr(c)
2591- let lR = valueOrErrorMessage(getInteger(lS), "You have to commitForRandom() first!")
2592- if ((lR > height))
2593- then throw(("Random number is not ready yet, wait until height = " + toString(lR)))
2581+ let kW = kT(gK)
2582+ let lS = (height + dr)
2583+ let c = toString(gK.caller)
2584+ $Tuple2(([IntegerEntry(ds(c), lS)] ++ kW), lS)
2585+ }
2586+
2587+
2588+
2589+@Callable(gK)
2590+func revealRandom (dS) = {
2591+ let kW = kT(gK)
2592+ let c = toString(gK.caller)
2593+ let lT = ds(c)
2594+ let lS = valueOrErrorMessage(getInteger(lT), "You have to commitForRandom() first!")
2595+ if ((lS > height))
2596+ then throw(("Random number is not ready yet, wait until height = " + toString(lS)))
25942597 else {
2595- let dT = value(value(blockInfoByHeight(lR)).vrf)
2596- let dS = toBytes(valueOrElse(getString(dJ(c)), ""))
2597- let lT = dQ(dR, dS, dT)
2598- $Tuple2(([DeleteEntry(lS)] ++ kV), lT)
2599- }
2600- }
2601-
2602-
2603-
2604-@Callable(gJ)
2598+ let dU = value(value(blockInfoByHeight(lS)).vrf)
2599+ let dT = toBytes(valueOrElse(getString(dK(c)), ""))
2600+ let lU = dR(dS, dT, dU)
2601+ $Tuple2(([DeleteEntry(lT)] ++ kW), lU)
2602+ }
2603+ }
2604+
2605+
2606+
2607+@Callable(gK)
26052608 func buySLand () = {
2606- let kV = kS(gJ)
2607- if ((size(gJ.payments) != 1))
2609+ let kW = kT(gK)
2610+ if ((size(gK.payments) != 1))
26082611 then throw("Exactly one payment required")
26092612 else {
2610- let kW = value(gJ.payments[0])
2611- if ((kW.assetId != cz))
2613+ let kX = value(gK.payments[0])
2614+ if ((kX.assetId != cA))
26122615 then throw("Allowed USDT payment only!")
2613- else if ((kW.amount != ed))
2614- then throw(("Payment attached should be " + toString(ed)))
2616+ else if ((kX.amount != ee))
2617+ then throw(("Payment attached should be " + toString(ee)))
26152618 else {
2616- let fi = iH(gJ.caller, gJ.transactionId)
2617- let lU = dA(invoke(dh, "burnAcres", [ef], nil))
2618- $Tuple2((((fi._1 :+ ScriptTransfer(dd, kW.amount, cz)) ++ kf(toString(gJ.caller), ab)._1) ++ kV), $Tuple2(fi._2._1, lU))
2619+ let fj = iI(gK.caller, gK.transactionId)
2620+ let lV = dB(invoke(di, "burnAcres", [eg], nil))
2621+ $Tuple2((((fj._1 :+ ScriptTransfer(de, kX.amount, cA)) ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
26192622 }
26202623 }
26212624 }
26222625
26232626
26242627
2625-@Callable(gJ)
2626-func expedition (iP,iQ) = {
2627- let kV = kS(gJ)
2628- if ((size(gJ.payments) != 0))
2628+@Callable(gK)
2629+func expedition (iQ,iR) = {
2630+ let kW = kT(gK)
2631+ if ((size(gK.payments) != 0))
26292632 then throw("No payments required")
26302633 else {
2631- let bP = toString(gJ.caller)
2632- let ho = iO(bP, iP, iQ)
2633- let B = ho._2
2634- let ja = A(B)
2635- let hK = bM(B)
2636- let in = hJ(hK)
2637- let jP = split(in[bn], "_")
2638- let jR = makeString(fc(true, jP, ec), "_")
2639- let gw = G(B)
2640- let ln = valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,")
2641- let lV = fj(ln, ho._5)
2642- let lp = lV._1
2643- let lq = lV._2
2644- let lW = iH(gJ.caller, gJ.transactionId)
2645- let iN = lW._2._1
2646- let fi = if ((0 >= ho._1))
2647- then $Tuple3([IntegerEntry(ja, 0), StringEntry(gw, lp)], "", 0)
2648- else $Tuple3((lW._1 ++ (if (lq)
2634+ let bQ = toString(gK.caller)
2635+ let hp = iP(bQ, iQ, iR)
2636+ let B = hp._2
2637+ let jb = A(B)
2638+ let hL = bN(B)
2639+ let io = hK(hL)
2640+ let jQ = split(io[bo], "_")
2641+ let jS = makeString(fd(true, jQ, ed), "_")
2642+ let gx = G(B)
2643+ let lo = valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,")
2644+ let lW = fk(lo, hp._5)
2645+ let lq = lW._1
2646+ let lr = lW._2
2647+ let lX = iI(gK.caller, gK.transactionId)
2648+ let iO = lX._2._1
2649+ let fj = if ((0 >= hp._1))
2650+ then $Tuple3([IntegerEntry(jb, 0), StringEntry(gx, lq)], "", 0)
2651+ else $Tuple3((lX._1 ++ (if (lr)
26492652 then [StringEntry(M(B), "0_0_0_0_0")]
2650- else ((((nil :+ StringEntry(bN(B), makeString([lW._2._2, "L", iN], "_"))) :+ IntegerEntry(ja, ho._1)) :+ StringEntry(gw, lp)) :+ StringEntry(hK, makeString([in[bl], in[bm], jR, in[bo]], ":"))))), iN, ho._3)
2651- if (kp(B))
2653+ else ((((nil :+ StringEntry(bO(B), makeString([lX._2._2, "L", iO], "_"))) :+ IntegerEntry(jb, hp._1)) :+ StringEntry(gx, lq)) :+ StringEntry(hL, makeString([io[bm], io[bn], jS, io[bp]], ":"))))), iO, hp._3)
2654+ if (kq(B))
26522655 then throw("expedition_checkTournament")
26532656 else {
2654- let lU = dA(invoke(dh, "burnAcres", [ef], nil))
2655- $Tuple2(((fi._1 ++ ke(B, ab)._1) ++ kV), $Tuple3(fi._2, fi._3, lU))
2657+ let lV = dB(invoke(di, "burnAcres", [eg], nil))
2658+ $Tuple2(((fj._1 ++ kf(B, ac)._1) ++ kW), $Tuple3(fj._2, fj._3, lV))
26562659 }
26572660 }
26582661 }
26592662
26602663
26612664
2662-@Callable(gJ)
2665+@Callable(gK)
26632666 func buySLandForAcres () = {
2664- let kV = kS(gJ)
2665- if ((size(gJ.payments) != 1))
2667+ let kW = kT(gK)
2668+ if ((size(gK.payments) != 1))
26662669 then throw("exactly 1 payment must be attached")
26672670 else {
2668- let kW = gJ.payments[0]
2669- let fp = kW.amount
2670- if (if (!(isDefined(kW.assetId)))
2671+ let kX = gK.payments[0]
2672+ let fq = kX.amount
2673+ if (if (!(isDefined(kX.assetId)))
26712674 then true
2672- else (value(kW.assetId) != dp))
2675+ else (value(kX.assetId) != dq))
26732676 then throw("ACRES payments only!")
2674- else if ((fp != ef))
2675- then throw(("Payment attached should be " + toString(ef)))
2677+ else if ((fq != eg))
2678+ then throw(("Payment attached should be " + toString(eg)))
26762679 else {
2677- let fi = iH(gJ.caller, gJ.transactionId)
2678- let lU = dA(invoke(dh, "burnAcres", [ef], [AttachedPayment(dp, fp)]))
2679- $Tuple2(((fi._1 ++ kf(toString(gJ.caller), ab)._1) ++ kV), $Tuple2(fi._2._1, lU))
2680+ let fj = iI(gK.caller, gK.transactionId)
2681+ let lV = dB(invoke(di, "burnAcres", [eg], [AttachedPayment(dq, fq)]))
2682+ $Tuple2(((fj._1 ++ kg(toString(gK.caller), ac)._1) ++ kW), $Tuple2(fj._2._1, lV))
26802683 }
26812684 }
26822685 }
26832686
26842687
26852688
2686-@Callable(gJ)
2689+@Callable(gK)
26872690 func upgradeInfra (Q) = {
2688- let kV = kS(gJ)
2689- if ((size(gJ.payments) != 0))
2691+ let kW = kT(gK)
2692+ if ((size(gK.payments) != 0))
26902693 then throw("No payments required")
26912694 else {
2692- let fi = jJ(true, gJ.caller, 0, Q)
2693- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
2694- $Tuple2(((fi._1 ++ kV) ++ ke(B, fraction(ac, fi._3, cF))._1), fi._2)
2695- }
2696- }
2697-
2698-
2699-
2700-@Callable(gJ)
2701-func activateArtifact (lX,lY) = {
2702- let kV = kS(gJ)
2703- if ((size(gJ.payments) != 0))
2695+ let fj = jK(true, gK.caller, 0, Q)
2696+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
2697+ $Tuple2(((fj._1 ++ kW) ++ kf(B, fraction(ad, fj._3, cG))._1), fj._2)
2698+ }
2699+ }
2700+
2701+
2702+
2703+@Callable(gK)
2704+func activateArtifact (lY,lZ) = {
2705+ let kW = kT(gK)
2706+ if ((size(gK.payments) != 0))
27042707 then throw("No payments required")
27052708 else {
2706- let c = toString(gJ.caller)
2707- let fi = {
2708- let cy = lX
2709- if (("PRESALE" == cy))
2710- then kn(c, lY)
2711- else if (("ONBOARD" == cy))
2712- then kg(c)
2709+ let c = toString(gK.caller)
2710+ let fj = {
2711+ let cz = lY
2712+ if (("PRESALE" == cz))
2713+ then ko(c, lZ)
2714+ else if (("ONBOARD" == cz))
2715+ then kh(c)
27132716 else throw("Unknown artifact")
27142717 }
2715- (fi ++ kV)
2716- }
2717- }
2718-
2719-
2720-
2721-@Callable(gJ)
2722-func mergeLands (kt) = {
2723- let kV = kS(gJ)
2724- if ((size(gJ.payments) != 0))
2718+ (fj ++ kW)
2719+ }
2720+ }
2721+
2722+
2723+
2724+@Callable(gK)
2725+func mergeLands (ku) = {
2726+ let kW = kT(gK)
2727+ if ((size(gK.payments) != 0))
27252728 then throw("No payments required")
27262729 else {
2727- let fi = kR(toString(gJ.caller), kt)
2728- $Tuple2(((fi._1 ++ kV) ++ kf(toString(gJ.caller), ad)._1), fi._2)
2729- }
2730- }
2731-
2732-
2733-
2734-@Callable(gJ)
2735-func cargoExchange (lZ,Q) = {
2736- let kV = kS(gJ)
2737- if ((size(gJ.payments) != 0))
2730+ let fj = kS(toString(gK.caller), ku)
2731+ $Tuple2(((fj._1 ++ kW) ++ kg(toString(gK.caller), ae)._1), fj._2)
2732+ }
2733+ }
2734+
2735+
2736+
2737+@Callable(gK)
2738+func cargoExchange (ma,Q) = {
2739+ let kW = kT(gK)
2740+ if ((size(gK.payments) != 0))
27382741 then throw("No payments required")
27392742 else {
2740- let im = split_4C(lZ, ":")
2741- let c = toString(gJ.originCaller)
2742- let jr = value(assetInfo(fromBase58String(Q)))
2743- let js = bv(Q)
2744- if (!(isDefined(getInteger(js))))
2745- then throw((jr.name + " is not staked"))
2743+ let in = split_4C(ma, ":")
2744+ let c = toString(gK.originCaller)
2745+ let js = value(assetInfo(fromBase58String(Q)))
2746+ let jt = bw(Q)
2747+ if (!(isDefined(getInteger(jt))))
2748+ then throw((js.name + " is not staked"))
27462749 else {
2747- let ju = valueOrErrorMessage(getString(bs(Q)), (("NFT " + jr.name) + " is orphaned"))
2748- if ((ju != c))
2749- then throw((aE + " is not yours"))
2750+ let jv = valueOrErrorMessage(getString(bt(Q)), (("NFT " + js.name) + " is orphaned"))
2751+ if ((jv != c))
2752+ then throw((aF + " is not yours"))
27502753 else {
2751- let hY = (dF(split(jr.description, "_")[dj]) / cG)
2752- let hZ = valueOrElse(getInteger(bC(Q)), 0)
2753- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2754- let jp = valueOrElse(getString(bN(B)), aM)
2755- let ci = split(value(jp), "_")
2756- if ((ci[bq] != "L"))
2757- then throw((("Duck location type is " + ci[bq]) + ", but should be L"))
2758- else if ((ci[br] != Q))
2754+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
2755+ let ia = valueOrElse(getInteger(bD(Q)), 0)
2756+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2757+ let jq = valueOrElse(getString(bO(B)), aN)
2758+ let cj = split(value(jq), "_")
2759+ if ((cj[br] != "L"))
2760+ then throw((("Duck location type is " + cj[br]) + ", but should be L"))
2761+ else if ((cj[bs] != Q))
27592762 then throw(("Duck should be on the land " + Q))
27602763 else {
2761- let hX = bB(Q)
2762- let hO = hW(hX, hY, hZ)
2763- let hK = bM(B)
2764- let in = hJ(hK)
2765- let fi = il(im, hO, in)
2766- let if = split(hO[bg], "_")
2767- let jG = (parseIntValue(if[bi]) + fi._7)
2768- let jH = (parseIntValue(if[bj]) - fi._7)
2769- ([StringEntry(hK, makeString_2C([in[bl], fi._4, fi._5, fi._6], ":")), StringEntry(hX, makeString_2C([hO[bc], fi._1, fi._2, fi._3, makeString([if[bh], toString(jG), toString(jH), if[bk]], "_")], ":"))] ++ kV)
2764+ let hY = bC(Q)
2765+ let hP = hX(hY, hZ, ia)
2766+ let hL = bN(B)
2767+ let io = hK(hL)
2768+ let fj = im(in, hP, io)
2769+ let ig = split(hP[bh], "_")
2770+ let jH = (parseIntValue(ig[bj]) + fj._7)
2771+ let jI = (parseIntValue(ig[bk]) - fj._7)
2772+ ([StringEntry(hL, makeString_2C([io[bm], fj._4, fj._5, fj._6], ":")), StringEntry(hY, makeString_2C([hP[bd], fj._1, fj._2, fj._3, makeString([ig[bi], toString(jH), toString(jI), ig[bl]], "_")], ":"))] ++ kW)
27702773 }
27712774 }
27722775 }
27732776 }
27742777 }
27752778
27762779
27772780
2778-@Callable(gJ)
2779-func saveWarehouse (ib,Q) = if ((gJ.caller != dd))
2781+@Callable(gK)
2782+func saveWarehouse (ic,Q) = if ((gK.caller != de))
27802783 then throw("Access denied")
27812784 else {
2782- let hX = bB(Q)
2783- let ic = split_4C(ib, ":")
2784- if ((size(ic) != 5))
2785+ let hY = bC(Q)
2786+ let id = split_4C(ic, ":")
2787+ if ((size(id) != 5))
27852788 then throw("warehouse string should contain 4 ':' separators")
27862789 else {
2787- let ma = split(ic[bg], "_")[bh]
2788- let jG = hN(ic)
2789- let mb = hL(ic[bc])
2790- let jH = ((mb - parseIntValue(ma)) - jG)
2791- if ((0 > jH))
2790+ let mb = split(id[bh], "_")[bi]
2791+ let jH = hO(id)
2792+ let mc = hM(id[bd])
2793+ let jI = ((mc - parseIntValue(mb)) - jH)
2794+ if ((0 > jI))
27922795 then throw("Operation leads to negative free warehouse space")
27932796 else {
2794- let mc = makeString_2C([ic[bc], ic[bd], ic[be], ic[bf], makeString([ma, toString(jG), toString(jH), toString(mb)], "_")], ":")
2795- $Tuple2([StringEntry(hX, mc)], mc)
2797+ let md = makeString_2C([id[bd], id[be], id[bf], id[bg], makeString([mb, toString(jH), toString(jI), toString(mc)], "_")], ":")
2798+ $Tuple2([StringEntry(hY, md)], md)
27962799 }
27972800 }
27982801 }
27992802
28002803
28012804
2802-@Callable(gJ)
2803-func setCustomName (bt,kD,bx) = {
2804- let kV = kS(gJ)
2805- if ((size(gJ.payments) != 1))
2805+@Callable(gK)
2806+func setCustomName (bu,kE,by) = {
2807+ let kW = kT(gK)
2808+ if ((size(gK.payments) != 1))
28062809 then throw("Exactly one payment required")
28072810 else {
2808- let kW = value(gJ.payments[0])
2809- if ((kW.assetId != cz))
2811+ let kX = value(gK.payments[0])
2812+ if ((kX.assetId != cA))
28102813 then throw("Allowed USDT payment only!")
2811- else if ((kW.amount != dZ))
2812- then throw(("Payment should be " + toString(dZ)))
2813- else if (contains(kD, "__"))
2814- then throw(("Name should not contain '__': " + kD))
2815- else if ((size(kD) > ea))
2816- then throw(("Name too long, maxLength=" + toString(ea)))
2814+ else if ((kX.amount != ea))
2815+ then throw(("Payment should be " + toString(ea)))
2816+ else if (contains(kE, "__"))
2817+ then throw(("Name should not contain '__': " + kE))
2818+ else if ((size(kE) > eb))
2819+ then throw(("Name too long, maxLength=" + toString(eb)))
28172820 else {
2818- let c = toString(gJ.originCaller)
2819- let md = {
2820- let cy = bx
2821- if (("ACCOUNT" == cy))
2821+ let c = toString(gK.originCaller)
2822+ let me = {
2823+ let cz = by
2824+ if (("ACCOUNT" == cz))
28222825 then {
2823- let me = ev(kD)
2824- let mf = getString(me)
2825- if (isDefined(mf))
2826- then throw(("Name already registered: " + kD))
2826+ let mf = ew(kE)
2827+ let mg = getString(mf)
2828+ if (isDefined(mg))
2829+ then throw(("Name already registered: " + kE))
28272830 else {
2828- let mg = bF(c)
2829- let mh = getString(mg)
2830- let mi = if (isDefined(mh))
2831- then [DeleteEntry(ev(value(mh)))]
2831+ let mh = bG(c)
2832+ let mi = getString(mh)
2833+ let mj = if (isDefined(mi))
2834+ then [DeleteEntry(ew(value(mi)))]
28322835 else nil
2833- (((mi :+ StringEntry(mg, kD)) :+ StringEntry(me, c)) ++ kf(c, aa)._1)
2836+ (((mj :+ StringEntry(mh, kE)) :+ StringEntry(mf, c)) ++ kg(c, ab)._1)
28342837 }
28352838 }
2836- else if (("LAND" == cy))
2839+ else if (("LAND" == cz))
28372840 then {
2838- let jr = value(assetInfo(fromBase58String(bt)))
2839- let js = bv(bt)
2840- if (!(isDefined(getInteger(js))))
2841- then throw((jr.name + " is not staked"))
2841+ let js = value(assetInfo(fromBase58String(bu)))
2842+ let jt = bw(bu)
2843+ if (!(isDefined(getInteger(jt))))
2844+ then throw((js.name + " is not staked"))
28422845 else {
2843- let ju = valueOrErrorMessage(getString(bs(bt)), (("NFT " + jr.name) + " is orphaned"))
2844- if ((ju != c))
2845- then throw((aE + " is not yours"))
2846+ let jv = valueOrErrorMessage(getString(bt(bu)), (("NFT " + js.name) + " is orphaned"))
2847+ if ((jv != c))
2848+ then throw((aF + " is not yours"))
28462849 else {
2847- let me = eo(kD)
2848- let mf = getString(me)
2849- if (isDefined(mf))
2850- then throw(("Name already registered: " + kD))
2850+ let mf = ep(kE)
2851+ let mg = getString(mf)
2852+ if (isDefined(mg))
2853+ then throw(("Name already registered: " + kE))
28512854 else {
2852- let mj = bu(bt)
2853- let mh = getString(mj)
2854- let mi = if (isDefined(mh))
2855- then [DeleteEntry(eo(value(mh)))]
2855+ let mk = bv(bu)
2856+ let mi = getString(mk)
2857+ let mj = if (isDefined(mi))
2858+ then [DeleteEntry(ep(value(mi)))]
28562859 else nil
2857- (((mi :+ StringEntry(mj, kD)) :+ StringEntry(me, bt)) ++ kf(c, aa)._1)
2860+ (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kg(c, ab)._1)
28582861 }
28592862 }
28602863 }
28612864 }
2862- else if (("DUCK" == cy))
2865+ else if (("DUCK" == cz))
28632866 then {
2864- let jr = value(assetInfo(fromBase58String(bt)))
2865- let js = bv(bt)
2866- if (if (!(isDefined(getInteger(js))))
2867+ let js = value(assetInfo(fromBase58String(bu)))
2868+ let jt = bw(bu)
2869+ if (if (!(isDefined(getInteger(jt))))
28672870 then true
2868- else !(isDefined(getString(bL(c)))))
2869- then throw((jr.name + " is not staked"))
2871+ else !(isDefined(getString(bM(c)))))
2872+ then throw((js.name + " is not staked"))
28702873 else {
2871- let ju = valueOrErrorMessage(getString(bK(bt)), (("NFT " + jr.name) + " is orphaned"))
2872- if ((ju != c))
2873- then throw((aF + " is not yours"))
2874+ let jv = valueOrErrorMessage(getString(bL(bu)), (("NFT " + js.name) + " is orphaned"))
2875+ if ((jv != c))
2876+ then throw((aG + " is not yours"))
28742877 else {
2875- let me = eu(kD)
2876- let mf = getString(me)
2877- if (isDefined(mf))
2878- then throw(("Name already registered: " + kD))
2878+ let mf = ev(kE)
2879+ let mg = getString(mf)
2880+ if (isDefined(mg))
2881+ then throw(("Name already registered: " + kE))
28792882 else {
2880- let mj = bE(bt)
2881- let mh = getString(mj)
2882- let mi = if (isDefined(mh))
2883- then [DeleteEntry(eu(value(mh)))]
2883+ let mk = bF(bu)
2884+ let mi = getString(mk)
2885+ let mj = if (isDefined(mi))
2886+ then [DeleteEntry(ev(value(mi)))]
28842887 else nil
2885- (((mi :+ StringEntry(mj, kD)) :+ StringEntry(me, bt)) ++ ke(bt, aa)._1)
2888+ (((mj :+ StringEntry(mk, kE)) :+ StringEntry(mf, bu)) ++ kf(bu, ab)._1)
28862889 }
28872890 }
28882891 }
28892892 }
28902893 else throw("Unknown entity type")
28912894 }
2892- $Tuple2(((md :+ ScriptTransfer(dd, kW.amount, cz)) ++ kV), 0)
2895+ $Tuple2(((me :+ ScriptTransfer(de, kX.amount, cA)) ++ kW), 0)
28932896 }
28942897 }
28952898 }
28962899
28972900
28982901
2899-@Callable(gJ)
2900-func setReferrals (mk,ml) = if ((gJ.callerPublicKey != cx))
2902+@Callable(gK)
2903+func setReferrals (ml,mm) = if ((gK.callerPublicKey != cy))
29012904 then throw("Permission denied")
29022905 else {
2903- let kV = kS(gJ)
2904- if ((size(gJ.payments) != 0))
2906+ let kW = kT(gK)
2907+ if ((size(gK.payments) != 0))
29052908 then throw("No payments required")
2906- else if (!(isDefined(addressFromString(mk))))
2907- then throw(("Invalid address: " + mk))
2909+ else if (!(isDefined(addressFromString(ml))))
2910+ then throw(("Invalid address: " + ml))
29082911 else {
2909- let mm = addressFromString(ml)
2910- if (!(isDefined(mm)))
2911- then throw(("Invalid address: " + ml))
2912+ let mn = addressFromString(mm)
2913+ if (!(isDefined(mn)))
2914+ then throw(("Invalid address: " + mm))
29122915 else {
2913- let mn = getString(dJ(mk))
2914- if (!(isDefined(mn)))
2916+ let mo = getString(dK(ml))
2917+ if (!(isDefined(mo)))
29152918 then throw("oldPlayer didn't do any tx in game")
2916- else if ((0 >= wavesBalance(value(mm)).available))
2919+ else if ((0 >= wavesBalance(value(mn)).available))
29172920 then throw("newPlayer has no WAVES")
29182921 else {
2919- let mo = ew()
2920- let mp = getString(mo)
2921- let mq = if (isDefined(mp))
2922- then split_4C(value(mp), "_")
2922+ let mp = ex()
2923+ let mq = getString(mp)
2924+ let mr = if (isDefined(mq))
2925+ then split_4C(value(mq), "_")
29232926 else nil
2924- if (containsElement(mq, ml))
2925- then throw((ml + " is not newbie (already has referrals)"))
2927+ if (containsElement(mr, mm))
2928+ then throw((mm + " is not newbie (already has referrals)"))
29262929 else {
2927- let kh = bG(ml)
2928- let ki = getString(kh)
2929- if (if (isDefined(ki))
2930- then isDefined(addressFromString(value(ki)))
2930+ let ki = bH(mm)
2931+ let kj = getString(ki)
2932+ if (if (isDefined(kj))
2933+ then isDefined(addressFromString(value(kj)))
29312934 else false)
2932- then throw(((ml + " already has refBy: ") + value(ki)))
2935+ then throw(((mm + " already has refBy: ") + value(kj)))
29332936 else {
2934- let mr = bJ(mk)
2935- let ms = getString(mr)
2936- let mt = if (isDefined(ms))
2937- then split_4C(value(ms), "_")
2937+ let ms = bK(ml)
2938+ let mt = getString(ms)
2939+ let mu = if (isDefined(mt))
2940+ then split_4C(value(mt), "_")
29382941 else nil
2939- if (containsElement(mt, ml))
2940- then throw((((mk + " already contains ") + ml) + " within referrals"))
2942+ if (containsElement(mu, mm))
2943+ then throw((((ml + " already contains ") + mm) + " within referrals"))
29412944 else {
2942- let mu = makeString_2C((mt :+ ml), "_")
2943- let mv = if (containsElement(mq, mk))
2944- then value(mp)
2945- else makeString_2C((mq :+ mk), "_")
2946- $Tuple2(([StringEntry(kh, mk), StringEntry(mr, mu), StringEntry(mo, mv)] ++ kV), 0)
2945+ let mv = makeString_2C((mu :+ mm), "_")
2946+ let mw = if (containsElement(mr, ml))
2947+ then value(mq)
2948+ else makeString_2C((mr :+ ml), "_")
2949+ $Tuple2(([StringEntry(ki, ml), StringEntry(ms, mv), StringEntry(mp, mw)] ++ kW), 0)
29472950 }
29482951 }
29492952 }
29502953 }
29512954 }
29522955 }
29532956 }
29542957
29552958
29562959
2957-@Callable(gJ)
2958-func distributePoints (mw,mx,my,mz,mA) = {
2959- let kV = kS(gJ)
2960- if ((size(gJ.payments) != 0))
2960+@Callable(gK)
2961+func distributePoints (mx,my,mz,mA,mB) = {
2962+ let kW = kT(gK)
2963+ if ((size(gK.payments) != 0))
29612964 then throw("No payments required")
29622965 else {
2963- let c = toString(gJ.originCaller)
2964- let mB = dC(invoke(df, "checkWlgXpREADONLY", [c], nil))
2965- let mC = dA(mB[1])
2966- let mD = if ((0 >= mC))
2966+ let c = toString(gK.originCaller)
2967+ let mC = dD(invoke(dg, "checkWlgXpREADONLY", [c], nil))
2968+ let mD = dB(mC[1])
2969+ let mE = if ((0 >= mD))
29672970 then $Tuple2(0, nil)
29682971 else {
2969- let kc = dA(invoke(df, "takeWlgXp", [c], nil))
2970- if ((kc == kc))
2971- then $Tuple2(mC, [IntegerEntry(I(c), dA(mB[0])), IntegerEntry(H(c), dA(mB[2]))])
2972+ let kd = dB(invoke(dg, "takeWlgXp", [c], nil))
2973+ if ((kd == kd))
2974+ then $Tuple2(mD, [IntegerEntry(I(c), dB(mC[0])), IntegerEntry(H(c), dB(mC[2]))])
29722975 else throw("Strict value is not equal to itself.")
29732976 }
2974- let mE = mD._1
2975- let mF = mD._2
2976- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
2977- let mG = J(c)
2978- let mH = (valueOrElse(getInteger(mG), 0) + mE)
2979- let mI = F(B)
2980- let mJ = valueOrElse(getInteger(mI), 0)
2981- let mK = (mH + mJ)
2982- let mL = ((((mw + mx) + my) + mz) + mA)
2983- if ((mL > mK))
2984- then throw((("There are only " + toString(mK)) + " free points to distribute"))
2977+ let mF = mE._1
2978+ let mG = mE._2
2979+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
2980+ let mH = J(c)
2981+ let mI = (valueOrElse(getInteger(mH), 0) + mF)
2982+ let mJ = F(B)
2983+ let mK = valueOrElse(getInteger(mJ), 0)
2984+ let mL = (mI + mK)
2985+ let mM = ((((mx + my) + mz) + mA) + mB)
2986+ if ((mM > mL))
2987+ then throw((("There are only " + toString(mL)) + " free points to distribute"))
29852988 else {
2986- let mM = C(B)
2987- let as = split(valueOrElse(getString(mM), "0_0_0_0_0"), "_")
2988- let mN = (mH - mL)
2989- $Tuple2((([IntegerEntry(mG, if ((0 > mN))
2989+ let mN = C(B)
2990+ let at = split(valueOrElse(getString(mN), "0_0_0_0_0"), "_")
2991+ let mO = (mI - mM)
2992+ $Tuple2((([IntegerEntry(mH, if ((0 > mO))
29902993 then 0
2991- else mN), IntegerEntry(mI, if ((0 > mN))
2992- then (mJ + mN)
2993- else mJ), StringEntry(mM, makeString([toString((parseIntValue(as[l]) + mw)), toString((parseIntValue(as[m]) + mx)), toString((parseIntValue(as[n]) + my)), toString((parseIntValue(as[o]) + mz)), toString((parseIntValue(as[p]) + mA))], "_"))] ++ kV) ++ mF), 0)
2994+ else mO), IntegerEntry(mJ, if ((0 > mO))
2995+ then (mK + mO)
2996+ else mK), StringEntry(mN, makeString([toString((parseIntValue(at[l]) + mx)), toString((parseIntValue(at[m]) + my)), toString((parseIntValue(at[n]) + mz)), toString((parseIntValue(at[o]) + mA)), toString((parseIntValue(at[p]) + mB))], "_"))] ++ kW) ++ mG), 0)
29942997 }
29952998 }
29962999 }
29973000
29983001
29993002
3000-@Callable(gJ)
3001-func splitByGlobalWeightsREADONLY (eH) = $Tuple2(nil, eZ(eH))
3002-
3003-
3004-
3005-@Callable(gJ)
3006-func splitByGlobalAndLocalWeightsREADONLY (mO,mP,gM) = {
3007- let gF = gL(gM)
3008- $Tuple2(nil, $Tuple2(eZ(mO), eK(mP, gF)))
3009- }
3010-
3011-
3012-
3013-@Callable(gJ)
3014-func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hJ(bM(B)), ":"))
3015-
3016-
3017-
3018-@Callable(gJ)
3003+@Callable(gK)
3004+func splitByGlobalWeightsREADONLY (eI) = $Tuple2(nil, fa(eI))
3005+
3006+
3007+
3008+@Callable(gK)
3009+func splitByGlobalAndLocalWeightsREADONLY (mP,mQ,gN) = {
3010+ let gG = gM(gN)
3011+ $Tuple2(nil, $Tuple2(fa(mP), eL(mQ, gG)))
3012+ }
3013+
3014+
3015+
3016+@Callable(gK)
3017+func getBackpackREADONLY (B) = $Tuple2(nil, makeString(hK(bN(B)), ":"))
3018+
3019+
3020+
3021+@Callable(gK)
30193022 func getWarehouseREADONLY (Q) = {
3020- let jr = value(assetInfo(fromBase58String(Q)))
3021- let hY = (dF(split(jr.description, "_")[dj]) / cG)
3022- let hZ = valueOrElse(getInteger(bC(Q)), 0)
3023- $Tuple2(nil, makeString_2C(hW(bB(Q), hY, hZ), ":"))
3024- }
3025-
3026-
3027-
3028-@Callable(gJ)
3029-func saveLastTx () = if (!(containsElement([df, dd, dg, dh], gJ.caller)))
3023+ let js = value(assetInfo(fromBase58String(Q)))
3024+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
3025+ let ia = valueOrElse(getInteger(bD(Q)), 0)
3026+ $Tuple2(nil, makeString_2C(hX(bC(Q), hZ, ia), ":"))
3027+ }
3028+
3029+
3030+
3031+@Callable(gK)
3032+func saveLastTx () = if (!(containsElement([dg, de, dh, di], gK.caller)))
30303033 then throw("Access denied")
3031- else $Tuple2(kS(gJ), 42)
3032-
3033-
3034-
3035-@Callable(gJ)
3036-func updateDuckStats (B,kc) = if ((gJ.caller != dd))
3034+ else $Tuple2(kT(gK), 42)
3035+
3036+
3037+
3038+@Callable(gK)
3039+func updateDuckStats (B,kd) = if ((gK.caller != de))
30373040 then throw("Access denied")
3038- else ke(B, kc)
3039-
3040-
3041-
3042-@Callable(gJ)
3043-func updateAccStats (c,kc) = if (!(containsElement([df, dd, dh], gJ.caller)))
3041+ else kf(B, kd)
3042+
3043+
3044+
3045+@Callable(gK)
3046+func updateAccStats (c,kd) = if (!(containsElement([dg, de, di], gK.caller)))
30443047 then throw("Access denied")
3045- else kf(c, kc)
3046-
3047-
3048-
3049-@Callable(gJ)
3050-func equipDuck (mQ) = {
3051- let kV = kS(gJ)
3052- if ((size(gJ.payments) != 0))
3048+ else kg(c, kd)
3049+
3050+
3051+
3052+@Callable(gK)
3053+func equipDuck (mR) = {
3054+ let kW = kT(gK)
3055+ if ((size(gK.payments) != 0))
30533056 then throw("No payments required")
30543057 else {
3055- let c = toString(gJ.originCaller)
3056- let B = valueOrErrorMessage(getString(bL(c)), "You don't have a duck staked")
3057- if (kp(B))
3058+ let c = toString(gK.originCaller)
3059+ let B = valueOrErrorMessage(getString(bM(c)), "You don't have a duck staked")
3060+ if (kq(B))
30583061 then throw("equipDuck_checkTournament")
30593062 else {
3060- let gw = G(B)
3061- let mR = split(valueOrElse(getString(gw), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3062- let hK = bM(B)
3063- let in = hJ(hK)
3064- let lp = split(mQ, "_")
3065- if ((size(lp) != r))
3063+ let gx = G(B)
3064+ let mS = split(valueOrElse(getString(gx), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
3065+ let hL = bN(B)
3066+ let io = hK(hL)
3067+ let lq = split(mR, "_")
3068+ if ((size(lq) != r))
30663069 then throw("Wrong equipment string")
30673070 else {
3068- let gy = gl(mR, fw(in[bo]), true, nil)
3069- let gz = split(lp[q], ";")[1]
3070- let aq = if ((gz == ""))
3071+ let gz = gm(mS, fx(io[bp]), true, nil)
3072+ let gA = split(lq[q], ";")[1]
3073+ let ar = if ((gA == ""))
30713074 then 0
30723075 else {
3073- let gA = split(gz, ",")[0]
3074- if ((gA == ""))
3076+ let gB = split(gA, ",")[0]
3077+ if ((gB == ""))
30753078 then 0
30763079 else {
3077- let fL = split(gA, ":")
3078- let db = fL[0]
3079- let gB = fL[1]
3080- if (if (if (if (if ((db == "06"))
3080+ let fM = split(gB, ":")
3081+ let dc = fM[0]
3082+ let gC = fM[1]
3083+ if (if (if (if (if ((dc == "06"))
30813084 then true
3082- else (db == "07"))
3085+ else (dc == "07"))
30833086 then true
3084- else (db == "08"))
3085- then (gB != "")
3087+ else (dc == "08"))
3088+ then (gC != "")
30863089 else false)
3087- then (parseIntValue(gB) > 0)
3090+ then (parseIntValue(gC) > 0)
30883091 else false)
3089- then parseIntValue(split(aW[parseIntValue(db)], "_")[aY])
3092+ then parseIntValue(split(aX[parseIntValue(dc)], "_")[aZ])
30903093 else 0
30913094 }
30923095 }
3093- let gg = ao(this, B, aq, true)
3094- let gC = gl(lp, gy, false, gg)
3095- let mS = fB(gC)
3096- $Tuple2(([StringEntry(gw, mQ), StringEntry(hK, makeString_2C([in[bl], in[bm], in[bn], mS], ":")), StringEntry(M(B), makeString([toString(gg[7]), toString(gg[8]), toString(gg[9]), toString(gg[10]), toString(gg[11])], "_"))] ++ kV), 0)
3096+ let gh = ap(this, B, ar, true)
3097+ let gD = gm(lq, gz, false, gh)
3098+ let mT = fC(gD)
3099+ $Tuple2(([StringEntry(gx, mR), StringEntry(hL, makeString_2C([io[bm], io[bn], io[bo], mT], ":")), StringEntry(M(B), makeString([toString(gh[7]), toString(gh[8]), toString(gh[9]), toString(gh[10]), toString(gh[11])], "_"))] ++ kW), 0)
30973100 }
30983101 }
30993102 }
31003103 }
31013104
31023105
31033106
3104-@Callable(gJ)
3105-func fortificateLand (Q,mT) = {
3106- let kV = kS(gJ)
3107- if ((size(gJ.payments) != 0))
3107+@Callable(gK)
3108+func fortificateLand (Q,mU) = {
3109+ let kW = kT(gK)
3110+ if ((size(gK.payments) != 0))
31083111 then throw("No payments required")
31093112 else {
3110- let c = toString(gJ.originCaller)
3111- let B = valueOrElse(getString(bL(c)), "")
3112- let fG = ao(this, B, 0, false)
3113- let mU = bD(Q)
3114- let mV = split(valueOrElse(getString(mU), ":0_15:0_18:0"), "_")
3115- let jr = value(assetInfo(fromBase58String(Q)))
3116- let hY = (dF(split(jr.description, "_")[dj]) / cG)
3117- let hZ = valueOrElse(getInteger(bC(Q)), 0)
3118- let hX = bB(Q)
3119- let ic = hW(hX, hY, hZ)
3120- let mW = split(ic[bg], "_")
3121- let mX = parseIntValue(mW[bi])
3122- let mY = parseIntValue(mW[bj])
3123- let mZ = split(mT, "_")
3124- let na = gs(mV, fw(ic[bf]), mX, mY, true, nil)
3125- let gy = na._1
3126- let nb = na._2
3127- let nc = na._3
3128- let nd = gs(mZ, gy, nb, nc, false, fG)
3129- let gC = nd._1
3130- let ne = nd._2
3131- let nf = nd._3
3132- let mS = fB(gC)
3133- let jX = makeString([mW[bh], toString(ne), toString(nf), mW[bk]], "_")
3134- $Tuple2(([StringEntry(mU, mT), StringEntry(hX, makeString_2C([ic[bc], ic[bd], ic[be], mS, jX], ":"))] ++ kV), 0)
3135- }
3136- }
3137-
3138-
3139-
3140-@Callable(gJ)
3141-func initDuckTourAttempt (B) = if ((gJ.caller != dg))
3113+ let c = toString(gK.originCaller)
3114+ let B = valueOrElse(getString(bM(c)), "")
3115+ let fH = ap(this, B, 0, false)
3116+ let mV = bE(Q)
3117+ let mW = split(valueOrElse(getString(mV), ":0_15:0_18:0"), "_")
3118+ let js = value(assetInfo(fromBase58String(Q)))
3119+ let hZ = (dG(split(js.description, "_")[dk]) / cH)
3120+ let ia = valueOrElse(getInteger(bD(Q)), 0)
3121+ let hY = bC(Q)
3122+ let id = hX(hY, hZ, ia)
3123+ let mX = split(id[bh], "_")
3124+ let mY = parseIntValue(mX[bj])
3125+ let mZ = parseIntValue(mX[bk])
3126+ let na = split(mU, "_")
3127+ let nb = gt(mW, fx(id[bg]), mY, mZ, true, nil)
3128+ let gz = nb._1
3129+ let nc = nb._2
3130+ let nd = nb._3
3131+ let ne = gt(na, gz, nc, nd, false, fH)
3132+ let gD = ne._1
3133+ let nf = ne._2
3134+ let ng = ne._3
3135+ let mT = fC(gD)
3136+ let jY = makeString([mX[bi], toString(nf), toString(ng), mX[bl]], "_")
3137+ $Tuple2(([StringEntry(mV, mU), StringEntry(hY, makeString_2C([id[bd], id[be], id[bf], mT, jY], ":"))] ++ kW), 0)
3138+ }
3139+ }
3140+
3141+
3142+
3143+@Callable(gK)
3144+func initDuckTourAttempt (B) = if ((gK.caller != dh))
31423145 then throw("Access denied")
31433146 else {
3144- let ja = A(B)
3145- let jb = ai(valueOrElse(getInteger(E(B)), 0))
3146- let lj = valueOrElse(getInteger(ja), jb)
3147- let ng = bN(B)
3148- let jp = valueOrElse(getString(ng), aM)
3149- let ch = valueOrElse(getInteger(dg, bS), 0)
3150- let nh = (toString(ch) + "_T_0")
3151- $Tuple2([IntegerEntry(K(B), lj), IntegerEntry(ja, jb), StringEntry(L(B), jp), StringEntry(ng, nh)], nh)
3147+ let jb = A(B)
3148+ let jc = aj(valueOrElse(getInteger(E(B)), 0))
3149+ let lk = valueOrElse(getInteger(jb), jc)
3150+ let nh = bO(B)
3151+ let jq = valueOrElse(getString(nh), aN)
3152+ let ci = valueOrElse(getInteger(dh, bT), 0)
3153+ let ni = (toString(ci) + "_T_0")
3154+ $Tuple2([IntegerEntry(K(B), lk), IntegerEntry(jb, jc), StringEntry(L(B), jq), StringEntry(nh, ni)], ni)
31523155 }
31533156
31543157
31553158
3156-@Callable(gJ)
3159+@Callable(gK)
31573160 func breakAttempt () = {
3158- let kV = kS(gJ)
3159- let B = valueOrErrorMessage(getString(bL(toString(gJ.caller))), "You don't have a duck staked")
3160- let ng = bN(B)
3161- let jp = valueOrElse(getString(ng), aM)
3162- if ((split(jp, "_")[bq] != "T"))
3161+ let kW = kT(gK)
3162+ let B = valueOrErrorMessage(getString(bM(toString(gK.caller))), "You don't have a duck staked")
3163+ let nh = bO(B)
3164+ let jq = valueOrElse(getString(nh), aN)
3165+ if ((split(jq, "_")[br] != "T"))
31633166 then throw("Your duck is not in the tournament")
31643167 else {
3165- let ni = getIntegerValue(K(B))
3166- let nj = getStringValue(L(B))
3167- $Tuple2(((kV :+ IntegerEntry(A(B), ni)) :+ StringEntry(ng, nj)), jp)
3168- }
3169- }
3170-
3171-
3172-
3173-@Callable(gJ)
3174-func breakAttemptCallback () = if ((gJ.caller != dg))
3168+ let nj = getIntegerValue(K(B))
3169+ let nk = getStringValue(L(B))
3170+ $Tuple2(((kW :+ IntegerEntry(A(B), nj)) :+ StringEntry(nh, nk)), jq)
3171+ }
3172+ }
3173+
3174+
3175+
3176+@Callable(gK)
3177+func breakAttemptCallback () = if ((gK.caller != dh))
31753178 then throw("Access denied")
31763179 else {
3177- let B = valueOrErrorMessage(getString(bL(toString(gJ.originCaller))), "You don't have a duck staked")
3178- $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bN(B), getStringValue(L(B)))], "breakAttemptCallback")
3180+ let B = valueOrErrorMessage(getString(bM(toString(gK.originCaller))), "You don't have a duck staked")
3181+ $Tuple2([IntegerEntry(A(B), getIntegerValue(K(B))), StringEntry(bO(B), getStringValue(L(B)))], "breakAttemptCallback")
31793182 }
31803183
31813184
31823185
3183-@Callable(gJ)
3184-func exitTournamentInternal (B) = if ((gJ.caller != this))
3186+@Callable(gK)
3187+func exitTournamentInternal (B) = if ((gK.caller != this))
31853188 then throw("Access denied")
31863189 else {
3187- let ni = getIntegerValue(K(B))
3188- let nj = getStringValue(L(B))
3189- $Tuple2([IntegerEntry(A(B), ni), StringEntry(bN(B), nj)], false)
3190+ let nj = getIntegerValue(K(B))
3191+ let nk = getStringValue(L(B))
3192+ $Tuple2([IntegerEntry(A(B), nj), StringEntry(bO(B), nk)], false)
31903193 }
31913194
31923195
31933196
3194-@Callable(gJ)
3195-func processDelivery (B) = if ((gJ.caller != this))
3197+@Callable(gK)
3198+func processDelivery (B) = if ((gK.caller != this))
31963199 then throw("Access denied")
31973200 else {
3198- let c = toString(gJ.originCaller)
3199- let nk = valueOrElse(getInteger(dd, bR), 0)
3200- if ((aP > nk))
3201- then throw(("Delivery is not available, fund=" + dK(nk, 6)))
3201+ let c = toString(gK.originCaller)
3202+ let nl = valueOrElse(getInteger(de, bS), 0)
3203+ if ((aQ > nl))
3204+ then throw(("Delivery is not available, fund=" + dL(nl, 6)))
32023205 else {
3203- let az = lastBlock.timestamp
3204- let nl = U(c)
3205- let fQ = valueOrElse(getInteger(nl), 0)
3206- let nm = valueOrElse(getInteger(V(c)), 0)
3207- let nn = (az / a)
3208- let no = valueOrElse(getInteger(dh, d(c)), 0)
3209- let np = (aQ + (no / aR))
3210- if (if ((fQ >= np))
3211- then (nm == nn)
3206+ let aA = lastBlock.timestamp
3207+ let nm = V(c)
3208+ let fR = valueOrElse(getInteger(nm), 0)
3209+ let nn = valueOrElse(getInteger(W(c)), 0)
3210+ let no = (aA / a)
3211+ let np = valueOrElse(getInteger(di, d(c)), 0)
3212+ let nq = (aR + (np / aS))
3213+ if (if ((fR >= nq))
3214+ then (nn == no)
32123215 else false)
3213- then throw((("You already used " + toString(np)) + " delivery attempts for today"))
3216+ then throw((("You already used " + toString(nq)) + " delivery attempts for today"))
32143217 else {
3215- let nq = invoke(dd, "sendDeliveryReward", [c], nil)
3216- $Tuple2([IntegerEntry(nl, (fQ + 1)), IntegerEntry(V(c), nn)], nq)
3218+ let nr = U(B)
3219+ let ns = invoke(de, "sendDeliveryReward", [c], nil)
3220+ $Tuple2([IntegerEntry(nm, (fR + 1)), IntegerEntry(W(c), no), IntegerEntry(nr, (valueOrElse(getInteger(nr), 0) + 1))], ns)
32173221 }
32183222 }
32193223 }
32203224
32213225
32223226
3223-@Callable(gJ)
3224-func prepareRobbery (iP,iQ) = {
3225- let kV = kS(gJ)
3226- if (!(sigVerify_8Kb(iP, iQ, cx)))
3227+@Callable(gK)
3228+func prepareRobbery (iQ,iR) = {
3229+ let kW = kT(gK)
3230+ if (!(sigVerify_8Kb(iQ, iR, cy)))
32273231 then throw("signature does not match")
3228- else if ((size(gJ.payments) != 1))
3232+ else if ((size(gK.payments) != 1))
32293233 then throw("exactly 1 payment must be attached")
32303234 else {
3231- let kW = gJ.payments[0]
3232- let nr = kW.amount
3233- if (if (!(isDefined(kW.assetId)))
3235+ let kX = gK.payments[0]
3236+ let nt = kX.amount
3237+ if (if (!(isDefined(kX.assetId)))
32343238 then true
3235- else (value(kW.assetId) != dn))
3239+ else (value(kX.assetId) != do))
32363240 then throw("WLGOLD payments only!")
32373241 else {
3238- let fo = split(toUtf8String(iP), "|")
3239- if ((2 > size(fo)))
3242+ let fp = split(toUtf8String(iQ), "|")
3243+ if ((2 > size(fp)))
32403244 then throw("Wrong message format")
32413245 else {
3242- let iY = if ((size(fo) >= 2))
3243- then fo[2]
3246+ let iZ = if ((size(fp) >= 2))
3247+ then fp[2]
32443248 else ""
3245- let bP = toString(gJ.caller)
3246- let iZ = valueOrElse(getString(dJ(bP)), "")
3247- if ((iZ != iY))
3248- then throw(((("Tx ids don't match! In state: " + iZ) + ", in msg: ") + iY))
3249+ let bQ = toString(gK.caller)
3250+ let ja = valueOrElse(getString(dK(bQ)), "")
3251+ if ((ja != iZ))
3252+ then throw(((("Tx ids don't match! In state: " + ja) + ", in msg: ") + iZ))
32493253 else {
3250- let B = fo[0]
3251- if (kp(B))
3254+ let B = fp[0]
3255+ if (kq(B))
32523256 then throw("prepareRobbery_checkTournament")
32533257 else {
3254- let aA = aw(this, B)._1
3255- if ((aA > nr))
3256- then throw(((("Payment " + toString(nr)) + " < required ") + toString(aA)))
3258+ let aB = ax(this, B)._1
3259+ if ((aB > nt))
3260+ then throw(((("Payment " + toString(nt)) + " < required ") + toString(aB)))
32573261 else {
3258- let ns = split(fo[1], "_")
3259- let az = lastBlock.timestamp
3260- let aB = valueOrElse(getInteger(S(B)), 0)
3261- let aC = valueOrElse(getString(T(B)), "")
3262- let aD = valueOrElse(getInteger(R(aC)), 0)
3263- if (if ((aB != y))
3264- then (aD > az)
3262+ let nu = split(fp[1], "_")
3263+ let aA = lastBlock.timestamp
3264+ let aC = valueOrElse(getInteger(S(B)), 0)
3265+ let aD = valueOrElse(getString(T(B)), "")
3266+ let aE = valueOrElse(getInteger(R(aD)), 0)
3267+ if (if ((aC != y))
3268+ then (aE > aA)
32653269 else false)
3266- then throw(("You already started robbing, wait till " + toString(aD)))
3270+ then throw(("You already started robbing, wait till " + toString(aE)))
32673271 else {
3268- func nt (eQ,Q) = {
3269- let nu = valueOrElse(getInteger(P(Q)), 0)
3270- let nv = valueOrElse(getInteger(R(Q)), 0)
3271- if ((nu > size(v)))
3272+ func nv (eR,Q) = {
3273+ let nw = valueOrElse(getInteger(P(Q)), 0)
3274+ let nx = valueOrElse(getInteger(R(Q)), 0)
3275+ if ((nw > size(v)))
32723276 then throw("Invalid state")
3273- else if ((az > nv))
3277+ else if ((aA > nx))
32743278 then {
3275- let nw = valueOrElse(getInteger(bv(Q)), 0)
3276- if ((0 >= nw))
3277- then eQ
3279+ let ny = valueOrElse(getInteger(bw(Q)), 0)
3280+ if ((0 >= ny))
3281+ then eR
32783282 else {
3279- let gq = value(assetInfo(fromBase58String(Q)))
3280- let jv = split(gq.description, "_")
3281- let jh = dF(jv[dj])
3282- let nx = jg(Q, jh)
3283- let gP = (az - nw)
3284- let jy = fraction(gP, (nx * jh), a)
3285- if ((w > jy))
3286- then eQ
3287- else (eQ :+ Q)
3283+ let gr = value(assetInfo(fromBase58String(Q)))
3284+ let jw = split(gr.description, "_")
3285+ let ji = dG(jw[dk])
3286+ let nz = jh(Q, ji)
3287+ let gQ = (aA - ny)
3288+ let jz = fraction(gQ, (nz * ji), a)
3289+ if ((w > jz))
3290+ then eR
3291+ else (eR :+ Q)
32883292 }
32893293 }
3290- else eQ
3294+ else eR
32913295 }
32923296
3293- let ny = {
3294- let eS = ns
3295- let eT = size(eS)
3296- let eU = nil
3297- func eV (eW,eX) = if ((eX >= eT))
3298- then eW
3299- else nt(eW, eS[eX])
3300-
3301- func eY (eW,eX) = if ((eX >= eT))
3302- then eW
3297+ let nA = {
3298+ let eT = nu
3299+ let eU = size(eT)
3300+ let eV = nil
3301+ func eW (eX,eY) = if ((eY >= eU))
3302+ then eX
3303+ else nv(eX, eT[eY])
3304+
3305+ func eZ (eX,eY) = if ((eY >= eU))
3306+ then eX
33033307 else throw("List size exceeds 10")
33043308
3305- eY(eV(eV(eV(eV(eV(eV(eV(eV(eV(eV(eU, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
3309+ eZ(eW(eW(eW(eW(eW(eW(eW(eW(eW(eW(eV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
33063310 }
3307- if ((size(ny) == 0))
3311+ if ((size(nA) == 0))
33083312 then throw("No candidates for robbery")
33093313 else {
3310- let nz = dQ(size(ny), iP, iQ)
3311- let Q = ny[nz]
3312- $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (az + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kV), Q)
3314+ let nB = dR(size(nA), iQ, iR)
3315+ let Q = nA[nB]
3316+ $Tuple2(([IntegerEntry(P(Q), x), IntegerEntry(R(Q), (aA + v[x])), IntegerEntry(S(B), z), StringEntry(T(B), Q)] ++ kW), Q)
33133317 }
33143318 }
33153319 }
33163320 }
33173321 }
33183322 }
33193323 }
33203324 }
33213325 }
33223326
33233327
33243328
3325-@Callable(gJ)
3326-func robLand (iP,iQ) = {
3327- let kV = kS(gJ)
3328- if (!(sigVerify_8Kb(iP, iQ, cx)))
3329+@Callable(gK)
3330+func robLand (iQ,iR) = {
3331+ let kW = kT(gK)
3332+ if (!(sigVerify_8Kb(iQ, iR, cy)))
33293333 then throw("signature does not match")
33303334 else {
3331- let bP = toString(gJ.caller)
3332- let B = valueOrErrorMessage(getString(bL(bP)), "You don't have a duck staked")
3333- let az = lastBlock.timestamp
3334- $Tuple2((kV :+ IntegerEntry(N(B), az)), 0)
3335- }
3336- }
3337-
3338-
3339-
3340-@Callable(gJ)
3341-func buyRoboDuck () = if (!(cu))
3335+ let bQ = toString(gK.caller)
3336+ let B = valueOrErrorMessage(getString(bM(bQ)), "You don't have a duck staked")
3337+ let aA = lastBlock.timestamp
3338+ $Tuple2((kW :+ IntegerEntry(N(B), aA)), 0)
3339+ }
3340+ }
3341+
3342+
3343+
3344+@Callable(gK)
3345+func buyRoboDuck () = if (!(cv))
33423346 then throw("Feature is turned off")
33433347 else {
3344- let kV = kS(gJ)
3345- if ((size(gJ.payments) != 1))
3348+ let kW = kT(gK)
3349+ if ((size(gK.payments) != 1))
33463350 then throw("Exactly one payment required")
33473351 else {
3348- let kW = value(gJ.payments[0])
3349- if ((kW.assetId != cz))
3352+ let kX = value(gK.payments[0])
3353+ if ((kX.assetId != cA))
33503354 then throw("Allowed USDT payment only!")
3351- else if ((kW.amount != ee))
3352- then throw((("Payment attached should be " + dK(ee, 6)) + " USDT"))
3355+ else if ((kX.amount != ef))
3356+ then throw((("Payment attached should be " + dL(ef, 6)) + " USDT"))
33533357 else {
3354- let nA = valueOrElse(getInteger(ex()), 0)
3355- let nB = toBytes(nA)
3356- let ep = ((aG + "-") + takeRight(toBase16String(nB), 8))
3357- let nC = takeRight(toBase16String(sha256_16Kb(nB)), 6)
3358- let iM = Issue(ep, ("Robo Duck NFT for WavesLands game, background color = #" + nC), 1, 0, false)
3359- let bt = calculateAssetId(iM)
3360- $Tuple2(((((kV :+ IntegerEntry(ex(), (nA + 1))) :+ iM) :+ ScriptTransfer(gJ.originCaller, 1, bt)) :+ ScriptTransfer(dd, kW.amount, cz)), $Tuple2(toBase58String(bt), nC))
3358+ let nC = valueOrElse(getInteger(ey()), 0)
3359+ let nD = toBytes(nC)
3360+ let eq = ((aH + "-") + takeRight(toBase16String(nD), 8))
3361+ let nE = takeRight(toBase16String(sha256_16Kb(nD)), 6)
3362+ let iN = Issue(eq, ("Robo Duck NFT for WavesLands game, background color = #" + nE), 1, 0, false)
3363+ let bu = calculateAssetId(iN)
3364+ $Tuple2(((((kW :+ IntegerEntry(ey(), (nC + 1))) :+ iN) :+ ScriptTransfer(gK.originCaller, 1, bu)) :+ ScriptTransfer(de, kX.amount, cA)), $Tuple2(toBase58String(bu), nE))
33613365 }
33623366 }
33633367 }
33643368
33653369

github/deemru/w8io/026f985 
1413.61 ms