tx · BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07600000 Waves

2023.07.23 16:47 [2678579] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "BvMzugfkeWcn5ckPb4ECCsXaxgKn14f4nq5jyM2NmtQd", "fee": 7600000, "feeAssetId": null, "timestamp": 1690120033383, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "4WHw8C5FpLBkJHKsj5Mv847wFx9BLe6EkrSQrQqFwCn4S7hCWfgsXWJwE4U6M9AZZgEpKPa3RzHngC2MEnEj5WSd" ], "script": "base64:BgKyAQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQjVAQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBGFkZHIJAKwCAgIQbGFzdEFyYlRpbWVVc2VyXwUEYWRkcgAGU0NBTEU4AIDC1y8ADHhwTGV2ZWxTY2FsZQCAGQAPeHBMZXZlbFJlY2lwUG93AKAfABJudW1Qb2ludHNPbkxldmVsVXAAAwAMcmVxdWlyZW1lbnRzCQDMCAICCFN0cmVuZ3RoCQDMCAICCEFjY3VyYWN5CQDMCAICCUludGVsbGVjdAkAzAgCAglFbmR1cmFuY2UJAMwIAgIJRGV4dGVyaXR5CQDMCAICBUxldmVsCQDMCAICBkhlYWx0aAUDbmlsAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgANTUFYUFJPRElOU0xPVAAeAQ1rZXlEdWNrSGVhbHRoAQtkdWNrQXNzZXRJZAkArAICAgtkdWNrSGVhbHRoXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tDaGFycwELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0NoYXJzXwULZHVja0Fzc2V0SWQBCWtleUR1Y2tYUAELZHVja0Fzc2V0SWQJAKwCAgIHZHVja1hQXwULZHVja0Fzc2V0SWQBDGtleUR1Y2tMZXZlbAELZHVja0Fzc2V0SWQJAKwCAgIKZHVja0xldmVsXwULZHVja0Fzc2V0SWQBEWtleUR1Y2tGcmVlUG9pbnRzAQtkdWNrQXNzZXRJZAkArAICAg9kdWNrRnJlZVBvaW50c18FC2R1Y2tBc3NldElkARBrZXlEdWNrRXF1aXBtZW50AQtkdWNrQXNzZXRJZAkArAICAg5kdWNrRXF1aXBtZW50XwULZHVja0Fzc2V0SWQBCWtleVVzZXJYUAEEYWRkcgkArAICAgd1c2VyWFBfBQRhZGRyAQxrZXlVc2VyTGV2ZWwBBGFkZHIJAKwCAgIKdXNlckxldmVsXwUEYWRkcgERa2V5VXNlckZyZWVQb2ludHMBBGFkZHIJAKwCAgIPdXNlckZyZWVQb2ludHNfBQRhZGRyAAd4cENsYWltAKCNBgAPeHBTdWNjZXNzRmxpZ2h0ANCGAwAMeHBGYWlsRmxpZ2h0AJBOAAh4cENhbGxFUwCgjQYADHhwQ3VzdG9tTmFtZQDAlrECAAp4cE5ld1NMYW5kAIDh6xcADnhwVXBncmFkZUluZnJhAKCNBgAHeHBNZXJnZQCAreIEAAl4cE9uYm9hcmQAgK3iBAAGeHBIZWFsAJBOAQlsZXZlbEJ5WFABAnhwCQBrAwUMeHBMZXZlbFNjYWxlCQBsBgUCeHAABAUPeHBMZXZlbFJlY2lwUG93AAQABAUERE9XTgUGU0NBTEU4AQltYXhIZWFsdGgBBWxldmVsCQBkAgBkBQVsZXZlbAEHbGV2ZWxVcAIJY3VyckxldmVsBW5ld1hQBAhuZXdMZXZlbAkBCWxldmVsQnlYUAEFBW5ld1hQCQDMCAIFCG5ld0xldmVsCQDMCAIJAGgCBRJudW1Qb2ludHNPbkxldmVsVXAJAGUCBQhuZXdMZXZlbAUJY3VyckxldmVsBQNuaWwBDGdldER1Y2tTdGF0cwIPc3Rha2luZ0NvbnRyYWN0C2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkAgkwXzBfMF8wXzACAV8EA2x2bAkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAZoZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCQEJbWF4SGVhbHRoAQUDbHZsCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5CQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5CQDMCAIFA2x2bAkAzAgCBQZoZWFsdGgFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAQcklkeFJlcXVpcmVtZW50cwAJAAlySWR4U2xvdHMACgAOUFJPRFVDVFBLR1NJWkUACgALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADARFrZXlMYXN0VHhJZEJ5VXNlcgEEYWRkcgkArAICAg9sYXN0VHhJZEJ5VXNlcl8FBGFkZHIBFWtleUxhbmRBc3NldElkVG9Pd25lcgEHYXNzZXRJZAkArAICAgluZnRPd25lcl8FB2Fzc2V0SWQBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQdhc3NldElkCQCsAgICGGxhbmRDdXN0b21OYW1lQnlBc3NldElkXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtpbmZyYUxldmVsXwUHYXNzZXRJZAEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBHR5cGUHYXNzZXRJZAkAuQkCCQDMCAICDWxhbmRBcnRTdGF0dXMJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkBQNuaWwCAV8BImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDB25mdFR5cGUHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiBzdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyXwUHbmZ0VHlwZQIBXwUHYXNzZXRJZAIBXwUJb3duZXJBZGRyARJrZXlXYXJlaG91c2VCeUxhbmQBC2xhbmRBc3NldElkCQCsAgICCndhcmVIb3VzZV8FC2xhbmRBc3NldElkARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhkdWNrQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBGFkZHIJAKwCAgIYYWNjb3VudEN1c3RvbU5hbWVCeUFkZHJfBQRhZGRyAQ9rZXlBZGRyZXNzUmVmQnkBBGFkZHIJAKwCAgIJYWNjUmVmQnlfBQRhZGRyARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQtkdWNrQXNzZXRJZAkArAICAhpvbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrXwULZHVja0Fzc2V0SWQBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBGFkZHIJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZER1Y2tCeV8FBGFkZHIBE2tleUFkZHJlc3NSZWZlcnJhbHMBBGFkZHIJAKwCAgINYWNjUmVmZXJyYWxzXwUEYWRkcgEQa2V5RHVja0lkVG9Pd25lcgEHYXNzZXRJZAkArAICAgpkdWNrT3duZXJfBQdhc3NldElkARRrZXlTdGFrZWREdWNrQnlPd25lcgEJb3duZXJBZGRyCQCsAgICEnN0YWtlZER1Y2tCeU93bmVyXwUJb3duZXJBZGRyARFrZXlCYWNrcGFja0J5RHVjawELZHVja0Fzc2V0SWQJAKwCAgIJYmFja1BhY2tfBQtkdWNrQXNzZXRJZAEPa2V5RHVja0xvY2F0aW9uAQtkdWNrQXNzZXRJZAkArAICAg1kdWNrTG9jYXRpb25fBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAQdpc0RpZ2l0AQFzCQEJaXNEZWZpbmVkAQkAtgkBBQFzAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARFzdWJ0cmFjdEVxdWlwbWVudAIFb2xkRXEFcFVzZWQKAQdzdWJVc2VkAgNhY2MGaWR4QW10BAVwYXJ0cwkAtQkCBQZpZHhBbXQCASwDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXgsYW1vdW50BANpZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAAwMJAGYCAAAFA2lkeAYJAGcCBQNpZHgJAJADAQUQcHJvZHVjdGlvbk1hdHJpeAkAAgECE1Vua25vd24gcHJvZHVjdCBpZHgEA2FtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEEB2VxUGFydHMJALUJAgUDYWNjCQCsAgIJAJEDAgUFcGFydHMAAAIBOgMJAQIhPQIJAJADAQUHZXFQYXJ0cwACCQACAQkArAICCQCsAgICD1lvdSBkb24ndCBoYXZlIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAIJIGVxdWlwcGVkBAN0bXAJAJEDAgUHZXFQYXJ0cwABBAZudW1MZW4DCQEHaXNEaWdpdAEJAK8CAgkAsAICBQN0bXAAAQABAAIAAQQEY3VycgkBDXBhcnNlSW50VmFsdWUBCQCvAgIFA3RtcAUGbnVtTGVuBAR0YWlsCQCwAgIFA3RtcAUGbnVtTGVuBAZuZXdBbXQDCQBnAgUEY3VycgUDYW10CQBlAgUEY3VycgUDYW10CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVlvdSBlcXVpcHBlZCAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFA2lkeAITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQNhbXQJAKwCAgkArAICCQCsAgIJAKwCAgkAkQMCBQdlcVBhcnRzAAAJAJEDAgUFcGFydHMAAAIBOgkApAMBBQZuZXdBbXQFBHRhaWwKAAIkbAkAtQkCBQVwVXNlZAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFBW9sZEVxCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzdWJVc2VkAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAQ5wcm9kU3RyVG9CeXRlcwEHcHJvZFN0cgQFcExpc3QDCQAAAgUHcHJvZFN0cgIABQNuaWwJALUJAgUHcHJvZFN0cgIBXwoBBHRvQlYCA2FjYwZyZWNpcGUEAWoJAGkCCQDIAQEFA2FjYwAIBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAACQDLAQIFA2FjYwkAmgMBBQRjdXJyCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwAQAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBHRvQlYCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgEOYnl0ZXNUb1Byb2RTdHIBAmJ2CgEGZnJvbUJWAgNhY2MGcmVjaXBlBAFqCQCQAwEFA2FjYwQBYgkAyQECCQDKAQIFAmJ2CQBoAgAIBQFqAAgJAM0IAgUDYWNjCQCkAwEJALEJAQUBYgkAuQkCCgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBmZyb21CVgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyAgFfARVjaGVja1N0YXRSZXF1aXJlbWVudHMCCWR1Y2tTdGF0cwRyZXFzCgEFY2hlY2sCA2FjYwFqAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRyZXFzBQFqCQCRAwIFCWR1Y2tTdGF0cwUBagkAAgEJAKwCAgIbUmVxdWlyZW1lbnQgbm90IHNhdGlzZmllZDogCQCRAwIFDHJlcXVpcmVtZW50cwUBagYKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAHCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQVjaGVjawIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNwkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAQhhZGRQcm9kQgcGaWR4Q250BXBMaXN0CmlzUG9zaXRpdmUHc2VnbWVudAdtYWluQXV4BHNsb3QJZHVja1N0YXRzBAVwYXJ0cwkAtQkCBQZpZHhDbnQCAToDCQECIT0CCQCQAwEFBXBhcnRzAAIJAAIBAihJbmNvcnJlY3QgZm9ybWF0LCBzaG91bGQgYmUgaW5kZXg6YW1vdW50AwkBAiE9AgkAsQIBCQCRAwIFBXBhcnRzAAAAAgkAAgECK1Byb2R1Y3QgaWR4IHNob3VsZCBiZSAyIGRpZ2l0cywgemVybyBwYWRkZWQECnByb2R1Y3RJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAABAVjb3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAGYCBQVjb3VudAUNTUFYUFJPRElOU0xPVAkAAgEJAKwCAgkArAICCQCsAgICFENhbid0IHB1dCBtb3JlIHRoYW4gCQCkAwEFDU1BWFBST0RJTlNMT1QCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQpwcm9kdWN0SWR4AwkAAAIFBWNvdW50AAAJAJQKAgUFcExpc3QHBARoZWFkCQDJAQIFBXBMaXN0CQBoAgAIBQpwcm9kdWN0SWR4BARjdXJyCQCxCQEJAMkBAgkAygECBQVwTGlzdAkAaAIACAUKcHJvZHVjdElkeAAIBAR0YWlsCQDKAQIFBXBMaXN0CQBoAgAICQBkAgUKcHJvZHVjdElkeAABBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpwcm9kdWN0SWR4AgFfAwMJAQEhAQUKaXNQb3NpdGl2ZQkAZgIFBWNvdW50BQRjdXJyBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAKQDAQUEY3VycgIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFCnByb2R1Y3RJZHgCEywgYnV0IHRyaWVkIHRvIHVzZSAJAKQDAQUFY291bnQECWlzQmlnSXRlbQMDCQEBIQEFCmlzUG9zaXRpdmUJARVjaGVja1N0YXRSZXF1aXJlbWVudHMCBQlkdWNrU3RhdHMJALUJAgkAkQMCBQZyZWNpcGUFEHJJZHhSZXF1aXJlbWVudHMCASwHBAZjb21wYXQJAJEDAgUGcmVjaXBlBQlySWR4U2xvdHMDCQAAAgUGY29tcGF0AgAJAAIBAhdJdGVtIGNhbm5vdCBiZSBlcXVpcHBlZAQBYwkBDXBhcnNlSW50VmFsdWUBBQZjb21wYXQEBGNTZWcJAGkCBQFjAGQDCQECIT0CBQdzZWdtZW50BQRjU2VnCQACAQIUU2VnbWVudCBpbmNvbXBhdGlibGUECGNNYWluQXV4CQBpAgkAagIFAWMAZAAKAwkBAiE9AgUHbWFpbkF1eAUIY01haW5BdXgJAAIBAhFTbG90IGluY29tcGF0aWJsZQQJY051bVNsb3RzCQBqAgUBYwAKAwMJAQIhPQIFBHNsb3QAAAkAZgIFCWNOdW1TbG90cwABBwkAAgECHkJpZyBpdGVtcyBzaG91bGQgb2NjdXB5IHNsb3QgMAkAZgIFCWNOdW1TbG90cwABBwkAlAoCCQDLAQIJAMsBAgUEaGVhZAkAmgMBCQBkAgUEY3VycgMFCmlzUG9zaXRpdmUFBWNvdW50CQEBLQEFBWNvdW50BQR0YWlsBQlpc0JpZ0l0ZW0BC3Nsb3RzR3JvdXBCBgFnBGJwSW4KaXNQb3NpdGl2ZQdzZWdtZW50B21haW5BdXgEcmVxcwMJAQIhPQIFAWcCAAQFc2xvdHMJALUJAgUBZwIBLAMJAGYCCQCQAwEFBXNsb3RzBQhNQVhTTE9UUwkAAgECEldyb25nIHNsb3RzIGZvcm1hdAQCczAJAJEDAgUFc2xvdHMAAAQCczEDCQBmAgkAkAMBBQVzbG90cwABCQCRAwIFBXNsb3RzAAECAAMDCQAAAgUCczACAAkAAAIFAnMxAgAHBQRicEluBAV0bXBTMAMJAQIhPQIFAnMwAgAJAQhhZGRQcm9kQgcFAnMwBQRicEluBQppc1Bvc2l0aXZlBQdzZWdtZW50BQdtYWluQXV4AAAFBHJlcXMJAJQKAgUEYnBJbgcDCQECIT0CBQJzMQIAAwgFBXRtcFMwAl8yCQACAQIeQmlnIGl0ZW0gYWxyZWFkeSBvY2N1cGllcyBzbG90CAkBCGFkZFByb2RCBwUCczEIBQV0bXBTMAJfMQUKaXNQb3NpdGl2ZQUHc2VnbWVudAUHbWFpbkF1eAABBQRyZXFzAl8xCAUFdG1wUzACXzEFBGJwSW4BBmRyZXNzQgQHc2VnTGlzdAZwQnl0ZXMKaXNQb3NpdGl2ZQRyZXFzCgEHc2VnbWVudAIDYWNjA3NlZwQBaggFA2FjYwJfMQQHbWFpbkF1eAkAtQkCBQNzZWcCATsDCQECIT0CCQCQAwEFB21haW5BdXgFCk5VTU1BSU5BVVgJAAIBAhRXcm9uZyBzZWdtZW50IGZvcm1hdAQBbQkAkQMCBQdtYWluQXV4AAAEAWEJAJEDAgUHbWFpbkF1eAABAwMJAAACBQFtAgAJAAACBQFhAgAHCQCUCgIJAGQCBQFqAAEIBQNhY2MCXzIEBHRtcE0JAQtzbG90c0dyb3VwQgYFAW0IBQNhY2MCXzIFCmlzUG9zaXRpdmUFAWoAAAUEcmVxcwkAlAoCCQBkAgUBagABCQELc2xvdHNHcm91cEIGBQFhBQR0bXBNBQppc1Bvc2l0aXZlBQFqAAEFBHJlcXMICgACJGwFB3NlZ0xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIAAAUGcEJ5dGVzCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQdzZWdtZW50AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAl8yARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAhwcm9wTGlzdA10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgMJAQIhPQIJAJADAQUIcHJvcExpc3QFBk5VTVJFUwkAAgECFldyb25nIHByb3BvcnRpb25zIGRhdGEKAQd1cGRhdGVyAgNhY2MBaQQGcmVzdWx0CQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb3BMaXN0BQFpCQBoAgkAaAIFBHNpZ24JAJEDAgUNdGVycmFpbkNvdW50cwUBaQUNbGFuZFNpemVJbmRleAMJAGYCAAAFBnJlc3VsdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIWUGFuaWMhIFBpZWNlcyBvZiB0eXBlPQkApAMBBQFpAgcsIHNpZ249CQCkAwEFBHNpZ24CFCwgIHRlcnJhaW5Db3VudHNbaV09CQCkAwEJAJEDAgUNdGVycmFpbkNvdW50cwUBaQIQLCBsYW5kU2l6ZUluZGV4PQkApAMBBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBBQZyZXN1bHQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQd1cGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BEXVwZGF0ZVByb3BvcnRpb25zAw10ZXJyYWluQ291bnRzDWxhbmRTaXplSW5kZXgEc2lnbgQIcHJvcExpc3QJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAIBXwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwEBQhwcm9wTGlzdAUNdGVycmFpbkNvdW50cwUNbGFuZFNpemVJbmRleAUEc2lnbgENY291bnRUZXJyYWlucwEIdGVycmFpbnMJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQQABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUIAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFDAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBkAggFA2FjYwJfMgUJcmVzT2ZUeXBlCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAQ1kaXN0cmlidXRlUmVzBAxjdXJyZW50V2hSZXMOY3VycmVudFBhY2tSZXMKcmVzVG9DbGFpbQt3aFNwYWNlTGVmdAQOcmVzTGlzdFRvQ2xhaW0IBQpyZXNUb0NsYWltAl8xBAxyZXNBbVRvQ2xhaW0IBQpyZXNUb0NsYWltAl8yAwkAAAIFDHJlc0FtVG9DbGFpbQAACQCUCgIJALkJAgUMY3VycmVudFdoUmVzAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfAwkAZwIFC3doU3BhY2VMZWZ0BQxyZXNBbVRvQ2xhaW0KAQhhZGRMaXN0cwIDYWNjAWkJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMY3VycmVudFdoUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIYWRkTGlzdHMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJAJQKAgkAuQkCBQFyAgFfCQC5CQIFDmN1cnJlbnRQYWNrUmVzAgFfCgEMYWRkUGFydExpc3RzAgNhY2MBaQQGd2hQYXJ0CQBrAwkAkQMCBQ5yZXNMaXN0VG9DbGFpbQUBaQULd2hTcGFjZUxlZnQFDHJlc0FtVG9DbGFpbQkAlAoCCQDNCAIIBQNhY2MCXzEJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxjdXJyZW50V2hSZXMFAWkFBndoUGFydAkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCQCRAwIFDnJlc0xpc3RUb0NsYWltBQFpBQZ3aFBhcnQEAXIKAAIkbAkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQNuaWwFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWRkUGFydExpc3RzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQCUCgIJALkJAggFAXICXzECAV8JALkJAggFAXICXzICAV8BA2FicwEBeAMJAMACAgUBeAkAtgIBAAAFAXgJAL4CAQUBeAAEZnJlcQkAzAgCCQDMCAIABgkAzAgCAAkJAMwIAgAOCQDMCAIADwkAzAgCABAFA25pbAkAzAgCCQDMCAIABQkAzAgCAAgJAMwIAgANCQDMCAIADgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAQJAMwIAgAJCQDMCAIACgkAzAgCAA8FA25pbAkAzAgCCQDMCAIAAQkAzAgCAAYJAMwIAgAHCQDMCAIADwkAzAgCABMFA25pbAkAzAgCCQDMCAIABAkAzAgCAAcJAMwIAgAICQDMCAIADQkAzAgCABIFA25pbAUDbmlsAQdnZW5DaGFyAgFuBWZyZXFzBANyZW0JAKADAQkAuwICBQFuBQdUV0VOVFlYBAZsZXR0ZXIDCQBmAgkAkQMCBQVmcmVxcwAABQNyZW0CAUEDCQBmAgkAkQMCBQVmcmVxcwABBQNyZW0CAUIDCQBmAgkAkQMCBQVmcmVxcwACBQNyZW0CAUMDCQBmAgkAkQMCBQVmcmVxcwADBQNyZW0CAUQDCQBmAgkAkQMCBQVmcmVxcwAEBQNyZW0CAUUCAUYFBmxldHRlcgELZ2VuVGVycmFpbnMCBHNlZWQMY29udGluZW50SWR4BAFmCQCRAwIFBGZyZXEFDGNvbnRpbmVudElkeAoBEHRlcnJhaW5HZW5lcmF0b3ICA2FjYwRlbGVtCQCUCgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCAUDYWNjAl8xCQEHZ2VuQ2hhcgIIBQNhY2MCXzIFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQdUV0VOVFlYBQFmCQEHZ2VuQ2hhcgIJALoCAggFA2FjYwJfMgUIVFdFTlRZMlgFAWYJAQdnZW5DaGFyAgkAugICCAUDYWNjAl8yBQhUV0VOVFkzWAUBZgkBB2dlbkNoYXICCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTRYBQFmCQC6AgIIBQNhY2MCXzIFCFRXRU5UWTVYBAF0CgACJGwJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQUDbmlsCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCAgAJALoCAgUEc2VlZAUFRklWRVgKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBEHRlcnJhaW5HZW5lcmF0b3ICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFCAUBdAJfMQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUOUFJPRFVDVFBLR1NJWkUAAQUOUFJPRFVDVFBLR1NJWkUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkAaAIFBHBrZ3MFBU1VTFQ4BAh3aFJlc1ZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAh3aE1hdFZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAp3aEdvb2RzVm9sAwkAAAIFBWdvb2RzAgAAAAgKAAIkbAkAvAkCBQVnb29kcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJQKAgAAAAAKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3N1bVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgJfMgkAZAIJAGQCBQh3aFJlc1ZvbAUId2hNYXRWb2wFCndoR29vZHNWb2wBDGdldFdhcmVob3VzZQMFd2hLZXkJbGFuZEluZGV4CmluZnJhTGV2ZWwECXZvbFByZWZpeAkArAICCQCsAgIJAKQDAQUJbGFuZEluZGV4AgFfCQCkAwEFCmluZnJhTGV2ZWwEB3doVG90YWwJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCXZvbFByZWZpeAQFd2hTdHIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFd2hLZXkJAKwCAgUJdm9sUHJlZml4Ahs6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6OjAEAndoCQC8CQIFBXdoU3RyAgE6BAp3aE9jY3VwaWVkCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQGd2hMb2Z0AwkAZgIABQkAkAMBBQJ3aAkAuQkCCQDMCAICATAJAMwIAgkApAMBBQp3aE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIFB3doVG90YWwFCndoT2NjdXBpZWQJAMwIAgkApAMBBQd3aFRvdGFsBQNuaWwCAV8EBGxvZnQJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBAh3aExvY2tlZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFCXZvbExvY2tlZAQDb2NjAwkAZgIJAJADAQUEbG9mdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFCndoT2NjdXBpZWQJALkJAgkAzAgCCQCkAwEFCHdoTG9ja2VkCQDMCAIJAKQDAQUDb2NjCQDMCAIJAKQDAQkAZQIJAGUCBQd3aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcgkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHICCiBhdmFpbGFibGUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHIFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcgUCYW0JAGQCCAUDYWNjAl80BQJhbQMJAGYCCQEBLQEFAmFtBQN3aHIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQJhbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUDd2hyAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hyBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHIFAmFtCQBkAggFA2FjYwJfNAUCYW0EAXIKAAIkbAUIcmVzUGFydHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZSAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZNAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2htCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoTWF0BQFpBANicG0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hNYXQFAWkJAM0IAggFA2FjYwJfMwkAkQMCBQ5jdXJyZW50UGFja01hdAUBaQgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicG0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBtAgogYXZhaWxhYmxlCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2htBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicG0FAmFtCQBkAggFA2FjYwJfNAUCYW0DCQBmAgkBAS0BBQJhbQUDd2htCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3dobQIKIGF2YWlsYWJsZQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3dobQUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBtBQJhbQkAZAIIBQNhY2MCXzQFAmFtBAFtCgACJGwFCG1hdFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBcgJfNAoBBSRmMV8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZNAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCgEDbXZQAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hwAwkAZgIJAJADAQUKY3VycldoUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJXaFByb2QFAWkAAAQDYnBwAwkAZgIJAJADAQUPY3VycmVudFBhY2tQcm9kBQFpCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUPY3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCAUBZgJfMgQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbUxpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBgUFbUxpc3QFDEVYUE1BVEVSSUFMUwIBXwQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81AwkAZwIAAAgFAWYCXzEJAJUKAwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFBW5ld0VxBQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVlcUtleQUFbmV3RXEJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCBQZuZXdNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI5MjAzMjk3NDIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjkyMDMyOTc0MgJfMQQGZHVja0lkCAUNJHQwMjkyMDMyOTc0MgJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMjExNjMyOTg3AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMjExNjMyOTg3Al8xBAVicFJlcwgFDSR0MDMyMTE2MzI5ODcCXzIEBWxvZnRPCAUNJHQwMzIxMTYzMjk4NwJfMwQFbG9mdEYIBQ0kdDAzMjExNjMyOTg3Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCIBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQECWN1cnJlbnRFcQkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywEBW5ld0VxCQERc3VidHJhY3RFcXVpcG1lbnQCBQljdXJyZW50RXEIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQVuZXdFcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAgFAWYCXzEJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAMJAGYCCAUBZgJfMQAABQ94cFN1Y2Nlc3NGbGlnaHQFDHhwRmFpbEZsaWdodAJfMQgFAWYCXzMBaQEEaGVhbAMKcXVhbnRpdHlMMQpxdWFudGl0eUwyCnF1YW50aXR5TDMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDAwMJAGYCAAAFCnF1YW50aXR5TDEGCQBmAgAABQpxdWFudGl0eUwyBgkAZgIAAAUKcXVhbnRpdHlMMwkAAgECG1F1YW50aXR5IGNhbm5vdCBiZSBuZWdhdGl2ZQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQDcXRzCQDMCAIFCnF1YW50aXR5TDEJAMwIAgUKcXVhbnRpdHlMMgkAzAgCBQpxdWFudGl0eUwzBQNuaWwECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGcCBQlvbGRIZWFsdGgFBW1heEhQCQACAQkArAICCQCsAgICD0hQIHNob3VsZCBiZSA8IAkApAMBBQVtYXhIUAIIIHRvIGhlYWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwoBC2l0ZXJhdGVQcm9kAgNhY2MLaWdub3JlZEl0ZW0EAW4IBQNhY2MCXzIEAXgDCQBmAgkAkAMBBQhwcm9kTGlzdAUBbgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0BQFuAAADCQBmAgADBQFuBAFxCQCRAwIFA3F0cwUBbgMJAGYCBQFxBQF4CQACAQkArAICCQCsAgIJAKwCAgIOWW91IGhhdmUgb25seSAJAKQDAQUBeAIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAW4JAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQF4BQFxCQBkAgUBbgABCQBkAggFA2FjYwJfMwkAaAIJAJEDAgUIbWVkS2l0SHAFAW4FAXEJAJUKAwkAzQgCCAUDYWNjAl8xCQCkAwEFAXgJAGQCBQFuAAEIBQNhY2MCXzMEBnJlc3VsdAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlQoDBQNuaWwAAAAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQtpdGVyYXRlUHJvZAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyBAluZXdIZWFsdGgJAJcDAQkAzAgCBQVtYXhIUAkAzAgCCQBkAgUJb2xkSGVhbHRoCAUGcmVzdWx0Al8zBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCCAUGcmVzdWx0Al8xAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAaAIFBnhwSGVhbAkAZAIJAGQCBQpxdWFudGl0eUwxBQpxdWFudGl0eUwyBQpxdWFudGl0eUwzAl8xBQluZXdIZWFsdGgBaQEGaGVhbEVTAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUJb2xkSGVhbHRoAAAJAAIBAihIUCBzaG91bGQgYmUgMCB0byBjYWxsIEVtZXJnZW5jeSBTZXJ2aWNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDW1lZEtpdEFtb3VudDEDCQBmAgkAkAMBBQhwcm9kTGlzdAAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAAAABA1tZWRLaXRBbW91bnQyAwkAZgIJAJADAQUIcHJvZExpc3QAAQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAEAAAQNbWVkS2l0QW1vdW50MwMJAGYCCQCQAwEFCHByb2RMaXN0AAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAACAAADAwMJAGYCBQ1tZWRLaXRBbW91bnQxAAAGCQBmAgUNbWVkS2l0QW1vdW50MgAABgkAZgIFDW1lZEtpdEFtb3VudDMAAAkAAgECH1lvdSBoYXZlIHRvIHVzZSBvd24gTWVkaWNhbCBLaXQECGV4aXN0U3RyCQCdCAIFD2Vjb25vbXlDb250cmFjdAkBDmtleUVzV2FyZWhvdXNlAAQMZXhpc3RBbW91bnRzAwkBCWlzRGVmaW5lZAEFCGV4aXN0U3RyCQC1CQIJAQV2YWx1ZQEFCGV4aXN0U3RyAgFfBQNuaWwEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzAAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQxleGlzdEFtb3VudHMAAAAAAwkAZwIAAAULZXhpc3RBbW91bnQJAAIBAjlUaGVyZSBhcmUgbm8gTWVkaWNhbCBLaXRzIEwxIGF0IEVtZXJnZW5jeSBTZXJ2aWNlIHN0b3JhZ2UECW5ld0hlYWx0aAkAZAIFCW9sZEhlYWx0aAkAkQMCBQhtZWRLaXRIcAAABAVuZXdFUwkAuQkCCQDMCAIJAKQDAQkAZQIFC2V4aXN0QW1vdW50AAEJANEIAgUMZXhpc3RBbW91bnRzAAACAV8EBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgAAAIBXwQIdG90YWxNYXQJARJnZXRSZWNpcGVNYXRlcmlhbHMBBQZyZWNpcGUECXNlbGxQcmljZQkAawMJAGgCBQh0b3RhbE1hdAUKRVNTRUxMQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIACgUOUFJPRFVDVFBLR1NJWkUDCQECIT0CCAUDcG10BmFtb3VudAUJc2VsbFByaWNlCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUJc2VsbFByaWNlBAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPZWNvbm9teUNvbnRyYWN0Ag91cGRhdGVFc1N0b3JhZ2UJAMwIAgUFbmV3RVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgULdXNkdEFzc2V0SWQFCXNlbGxQcmljZQUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUIeHBDYWxsRVMCXzEFBnJlc3VsdAFpAQ51cGRhdGVCYWNrcGFjawILZHVja0Fzc2V0SWQHbmV3UGFjawMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAUHbmV3UGFjawUDbmlsBQduZXdQYWNrAWkBCGJ1eVNMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFB0VYUFVTRFQJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQdFWFBVU0RUBAZyZXN1bHQJARJleHBlZGl0aW9uSW50ZXJuYWwCCAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24ICAUGcmVzdWx0Al8yAl8xAWkBCmV4cGVkaXRpb24CB21lc3NhZ2UDc2lnBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBEGV4cGVkaXRpb25Db21tb24ECAUBaQZjYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQp4cE5ld1NMYW5kAl8xBQxwcm9sb2dBY3Rpb24JAJQKAggFBnJlc3VsdAJfMggFBnJlc3VsdAJfMwFpAQx1cGdyYWRlSW5mcmEBC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBggFAWkGY2FsbGVyAAAFC2xhbmRBc3NldElkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFDnhwVXBncmFkZUluZnJhCAUGcmVzdWx0Al8zBQVNVUxUOAJfMQgFBnJlc3VsdAJfMgFpARB1cGdyYWRlSW5mcmFVc2R0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBDXVwSW5mcmFDb21tb24EBwgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAULbGFuZEFzc2V0SWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQEQYWN0aXZhdGVBcnRpZmFjdAIHYXJ0TmFtZQ5sYW5kQXNzZXRJZE9wdAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpBmNhbGxlcgQGcmVzdWx0BAckbWF0Y2gwBQdhcnROYW1lAwkAAAICB1BSRVNBTEUFByRtYXRjaDAJARJhY3RpdmF0ZVByZXNhbGVBcnQCBQRhZGRyBQ5sYW5kQXNzZXRJZE9wdAMJAAACAgdPTkJPQVJEBQckbWF0Y2gwCQESYWN0aXZhdGVPbmJvYXJkQXJ0AQUEYWRkcgkAAgECEFVua25vd24gYXJ0aWZhY3QJAM0IAgUGcmVzdWx0BQxwcm9sb2dBY3Rpb24BaQEKbWVyZ2VMYW5kcwEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQYJAKUIAQgFAWkGY2FsbGVyAAAFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUHeHBNZXJnZQJfMQgFBnJlc3VsdAJfMgFpAQ5tZXJnZUxhbmRzVXNkdAEMbGFuZEFzc2V0SWRzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEBnJlc3VsdAkBC21lcmdlQ29tbW9uBQcJAKUIAQgFAWkGY2FsbGVyCAUDcG10BmFtb3VudAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBDWNhcmdvRXhjaGFuZ2UCDGNhcmdvTGlzdFN0cgtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CCQCRAwIFA2xvYwUIbG9jSWR4SWQFC2xhbmRBc3NldElkCQACAQkArAICAhtEdWNrIHNob3VsZCBiZSBvbiB0aGUgbGFuZCAFC2xhbmRBc3NldElkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAljdXJyZW50V2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQGcmVzdWx0CQEJbW92ZVN0dWZmAwUKY2FyZ29QYXJ0cwUJY3VycmVudFdoBQtjdXJyZW50UGFjawQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAVsb2Z0TwkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAgFBnJlc3VsdAJfNwQFbG9mdEYJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQgFBnJlc3VsdAJfNwkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFBnJlc3VsdAJfNAkAzAgCCAUGcmVzdWx0Al81CQDMCAIIBQZyZXN1bHQCXzYFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQkAugkCCQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCCAUGcmVzdWx0Al8xCQDMCAIIBQZyZXN1bHQCXzIJAMwIAggFBnJlc3VsdAJfMwkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAWkBDXNhdmVXYXJlaG91c2UCBXdoU3RyC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAJ3aAkAvAkCBQV3aFN0cgIBOgMJAQIhPQIJAJADAQUCd2gABQkAAgECMHdhcmVob3VzZSBzdHJpbmcgc2hvdWxkIGNvbnRhaW4gNCAnOicgc2VwYXJhdG9ycwQFbG9mdEwJAJEDAgkAtQkCCQCRAwIFAndoBQl3aElkeExPRlQCAV8FCXZvbExvY2tlZAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUCQENcGFyc2VJbnRWYWx1ZQEFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpARJmaXhXYXJlaG91c2VGb3JtYXQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQCd2gJAQxnZXRXYXJlaG91c2UDBQV3aEtleQUJbGFuZEluZGV4BQppbmZyYUxldmVsBAVsb2Z0TAkBBWFzSW50AQkA/AcEBQ9lY29ub215Q29udHJhY3QCGnJlY2FsY0xvY2tlZFZvbHVtZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkCQDMCAIFAndoBQNuaWwFA25pbAQFbG9mdE8JARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFAndoBAVsb2Z0VAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQJ3aAULd2hJZHhMZXZlbHMEBWxvZnRGCQBlAgkAZQIFBWxvZnRUBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCkAwEFBWxvZnRMCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCkAwEFBWxvZnRUBQNuaWwCAV8FA25pbAIBOgkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5BQhuZXdXaFN0cgUDbmlsBQhuZXdXaFN0cgFpAQ9maXhTdGFrZWRQaWVjZXMBB2FkZHJlc3MDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEDHN0YWtlZFBpZWNlcwMJAAACBQdhZGRyZXNzAgAAAAQIbGFuZHNTdHIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQFbGFuZHMDCQEJaXNEZWZpbmVkAQUIbGFuZHNTdHIJAL0JAgkBBXZhbHVlAQUIbGFuZHNTdHICAV8FA25pbAoBB29uZUxhbmQCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQIbGFuZFNpemUJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplCQBkAgUDYWNjCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUKAAIkbAUFbGFuZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB29uZUxhbmQCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFUxpc3Qgc2l6ZSBleGNlZWRzIDEwMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AD4APwBAAEEAQgBDAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQBeAF8AYABhAGIAYwBkCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwUMc3Rha2VkUGllY2VzBQNuaWwFDHN0YWtlZFBpZWNlcwFpAQ1zZXRDdXN0b21OYW1lAwdhc3NldElkCmN1c3RvbU5hbWUEdHlwZQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhAwkBAiE9AggFA3BtdAZhbW91bnQFDFJFTkFNSU5HQ09TVAkAAgEJAKwCAgISUGF5bWVudCBzaG91bGQgYmUgCQCkAwEFDFJFTkFNSU5HQ09TVAMJAQhjb250YWlucwIFCmN1c3RvbU5hbWUCAl9fCQACAQkArAICAh5OYW1lIHNob3VsZCBub3QgY29udGFpbiAnX18nOiAFCmN1c3RvbU5hbWUDCQBmAgkAsQIBBQpjdXN0b21OYW1lBQpNQVhOQU1FTEVOCQACAQkArAICAhlOYW1lIHRvbyBsb25nLCBtYXhMZW5ndGg9CQCkAwEFCk1BWE5BTUVMRU4EBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAdhY3Rpb25zBAckbWF0Y2gwBQR0eXBlAwkAAAICB0FDQ09VTlQFByRtYXRjaDAECnJldmVyc2VLZXkJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA1hZGRyVG9OYW1lS2V5CQEWa2V5QWRkcmVzc1RvQ3VzdG9tTmFtZQEFBGFkZHIEB29sZE5hbWUJAKIIAQUNYWRkclRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlDdXN0b21OYW1lVG9BZGRyZXNzAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDWFkZHJUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFBGFkZHIICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgRMQU5EBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIERFVDSwUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5BgkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyCQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBEGtleUR1Y2tJZFRvT3duZXIBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpEVUNLUFJFRklYAg0gaXMgbm90IHlvdXJzBApyZXZlcnNlS2V5CQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDmFzc2V0VG9OYW1lS2V5CQEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBBQdhc3NldElkBAdvbGROYW1lCQCiCAEFDmFzc2V0VG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQkBBXZhbHVlAQUHb2xkTmFtZQUDbmlsBQNuaWwJAM4IAgkAzQgCCQDNCAIFB2ZyZWVPbGQJAQtTdHJpbmdFbnRyeQIFDmFzc2V0VG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQdhc3NldElkCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgUHYXNzZXRJZAUMeHBDdXN0b21OYW1lAl8xCQACAQITVW5rbm93biBlbnRpdHkgdHlwZQkAlAoCCQDNCAIJAM0IAgUHYWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbgAAAWkBDHNldFJlZmVycmFscwIJb2xkUGxheWVyCW5ld1BsYXllcgMJAQIhPQIIBQFpD2NhbGxlclB1YmxpY0tleQUDcHViCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJb2xkUGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJb2xkUGxheWVyAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQluZXdQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQluZXdQbGF5ZXIEB29sZHNLZXkJAQlrZXlPbGRpZXMABARvbGRzCQCiCAEFB29sZHNLZXkEBm9sZGllcwMJAQlpc0RlZmluZWQBBQRvbGRzCQC8CQIJAQV2YWx1ZQEFBG9sZHMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW5ld1BsYXllcgkAAgEJAKwCAgUJbmV3UGxheWVyAiYgaXMgbm90IG5ld2JpZSAoYWxyZWFkeSBoYXMgcmVmZXJyYWxzKQQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQluZXdQbGF5ZXIEBXJlZkJ5CQCiCAEFCHJlZkJ5S2V5AwMJAQlpc0RlZmluZWQBBQVyZWZCeQkBCWlzRGVmaW5lZAEJAKYIAQkBBXZhbHVlAQUFcmVmQnkHCQACAQkArAICCQCsAgIFCW5ld1BsYXllcgIUIGFscmVhZHkgaGFzIHJlZkJ5OiAJAQV2YWx1ZQEFBXJlZkJ5BAdyZWZzS2V5CQETa2V5QWRkcmVzc1JlZmVycmFscwEFCW9sZFBsYXllcgQEcmVmcwkAoggBBQdyZWZzS2V5BAlyZWZzQXJyYXkDCQEJaXNEZWZpbmVkAQUEcmVmcwkAvAkCCQEFdmFsdWUBBQRyZWZzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUJcmVmc0FycmF5BQluZXdQbGF5ZXIJAAIBCQCsAgIJAKwCAgkArAICBQlvbGRQbGF5ZXICEiBhbHJlYWR5IGNvbnRhaW5zIAUJbmV3UGxheWVyAhEgd2l0aGluIHJlZmVycmFscwQHbmV3UmVmcwkAugkCCQDNCAIFCXJlZnNBcnJheQUJbmV3UGxheWVyAgFfBAduZXdPbGRzAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJb2xkUGxheWVyCQEFdmFsdWUBBQRvbGRzCQC6CQIJAM0IAgUGb2xkaWVzBQlvbGRQbGF5ZXICAV8JAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQhyZWZCeUtleQUJb2xkUGxheWVyCQDMCAIJAQtTdHJpbmdFbnRyeQIFB3JlZnNLZXkFB25ld1JlZnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUHb2xkc0tleQUHbmV3T2xkcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBEGRpc3RyaWJ1dGVQb2ludHMFCHN0cmVuZ3RoCGFjY3VyYWN5CWludGVsbGVjdAllbmR1cmFuY2UJZGV4dGVyaXR5BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECmZyZWVLZXlBY2MJARFrZXlVc2VyRnJlZVBvaW50cwEFBGFkZHIEDWZyZWVQb2ludHNBY2MJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQpmcmVlS2V5QWNjAAAEC2ZyZWVLZXlEdWNrCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAQOZnJlZVBvaW50c0R1Y2sJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQtmcmVlS2V5RHVjawAABAdzdW1GcmVlCQBkAgUNZnJlZVBvaW50c0FjYwUOZnJlZVBvaW50c0R1Y2sED3N1bVRvRGlzdHJpYnV0ZQkAZAIJAGQCCQBkAgkAZAIFCHN0cmVuZ3RoBQhhY2N1cmFjeQUJaW50ZWxsZWN0BQllbmR1cmFuY2UFCWRleHRlcml0eQMJAGYCBQ9zdW1Ub0Rpc3RyaWJ1dGUFB3N1bUZyZWUJAAIBCQCsAgIJAKwCAgIPVGhlcmUgYXJlIG9ubHkgCQCkAwEFB3N1bUZyZWUCGiBmcmVlIHBvaW50cyB0byBkaXN0cmlidXRlBAhjaGFyc0tleQkBDGtleUR1Y2tDaGFycwEFC2R1Y2tBc3NldElkBAVjaGFycwkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUIY2hhcnNLZXkCCTBfMF8wXzBfMAIBXwQGbmV3QWNjCQBlAgUNZnJlZVBvaW50c0FjYwUPc3VtVG9EaXN0cmlidXRlCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFCmZyZWVLZXlBY2MDCQBmAgAABQZuZXdBY2MAAAUGbmV3QWNjCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQtmcmVlS2V5RHVjawMJAGYCAAAFBm5ld0FjYwkAZAIFDmZyZWVQb2ludHNEdWNrBQZuZXdBY2MFDmZyZWVQb2ludHNEdWNrCQDMCAIJAQtTdHJpbmdFbnRyeQIFCGNoYXJzS2V5CQC5CQIJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyU3RyZW5ndGgFCHN0cmVuZ3RoCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhckFjY3VyYWN5BQhhY2N1cmFjeQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJJbnRlbGxlY3QFCWludGVsbGVjdAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJFbmR1cmFuY2UFCWVuZHVyYW5jZQkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDWNoYXJEZXh0ZXJpdHkFCWRleHRlcml0eQUDbmlsAgFfCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEcc3BsaXRCeUdsb2JhbFdlaWdodHNSRUFET05MWQEGYW1vdW50CQCUCgIFA25pbAkBEmdldE5lZWRlZE1hdGVyaWFscwEFBmFtb3VudAFpASRzcGxpdEJ5R2xvYmFsQW5kTG9jYWxXZWlnaHRzUkVBRE9OTFkDCW1hdEFtb3VudAlyZXNBbW91bnQIdGVycmFpbnMEDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQUIdGVycmFpbnMJAJQKAgUDbmlsCQCUCgIJARJnZXROZWVkZWRNYXRlcmlhbHMBBQltYXRBbW91bnQJARNkaXN0cmlidXRlQnlXZWlnaHRzAgUJcmVzQW1vdW50BQ10ZXJyYWluQ291bnRzAWkBE2dldEJhY2twYWNrUkVBRE9OTFkBC2R1Y2tBc3NldElkCQCUCgIFA25pbAkAuQkCCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAIBOgFpARRnZXRXYXJlaG91c2VSRUFET05MWQELbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAACQCUCgIFA25pbAkAugkCCQEMZ2V0V2FyZWhvdXNlAwkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkBQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwCAToBaQEKc2F2ZUxhc3RUeAADAwkBAiE9AggFAWkGY2FsbGVyBQt3bGdDb250cmFjdAkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QHCQACAQINQWNjZXNzIGRlbmllZAkAlAoCCQDMCAIJAQZwcm9sb2cBBQFpBQNuaWwAKgFpAQ91cGRhdGVEdWNrU3RhdHMCC2R1Y2tBc3NldElkB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQdkZWx0YVhQAWkBDnVwZGF0ZUFjY1N0YXRzAgRhZGRyB2RlbHRhWFADCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUHZGVsdGFYUAFpAQllcXVpcER1Y2sBCWVxdWlwbWVudAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVlcUtleQkBEGtleUR1Y2tFcXVpcG1lbnQBBQtkdWNrQXNzZXRJZAQLY3VycmVudFNlZ3MJALUJAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQVlcUtleQIXLDssXyw7LF8sOyxfLDssXyw7LF8sOywCAV8EBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVuZXdFcQkAtQkCBQllcXVpcG1lbnQCAV8DCQECIT0CCQCQAwEFBW5ld0VxBQtOVU1TRUdNRU5UUwkAAgECFldyb25nIGVxdWlwbWVudCBzdHJpbmcEBHJlcXMJAQxnZXREdWNrU3RhdHMCBQR0aGlzBQtkdWNrQXNzZXRJZAQJdGVtcFByb2RCCQEGZHJlc3NCBAULY3VycmVudFNlZ3MJAQ5wcm9kU3RyVG9CeXRlcwEJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAYFBHJlcXMECG5ld1Byb2RCCQEGZHJlc3NCBAUFbmV3RXEFCXRlbXBQcm9kQgcFBHJlcXMECm5ld1Byb2RTdHIJAQ5ieXRlc1RvUHJvZFN0cgEFCG5ld1Byb2RCCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUKbmV3UHJvZFN0cgUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAAAxU1jkg==", "height": 2678579, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7WCNFt8rezTWy1WF1PHrrtFLfSxLU2uzi7M5mhHG4QAa Next: DxM4Fr3uH12fuWgKBRcMMZ9oQHfLShDoArG6kHvir8Na Diff:
OldNewDifferences
3030
3131 let o = 2
3232
33-func p (q) = ("duckHealth_" + q)
34-
35-
36-func r (q) = ("duckChars_" + q)
37-
38-
39-func s (q) = ("duckXP_" + q)
40-
41-
42-func t (q) = ("duckLevel_" + q)
43-
44-
45-func u (q) = ("duckFreePoints_" + q)
46-
47-
48-func v (q) = ("duckEquipment_" + q)
49-
50-
51-func w (b) = ("userXP_" + b)
52-
53-
54-func x (b) = ("userLevel_" + b)
55-
56-
57-func y (b) = ("userFreePoints_" + b)
58-
59-
60-let z = 100000
61-
62-let A = 50000
63-
64-let B = 10000
65-
66-let C = 100000
67-
68-let D = 5000000
69-
70-let E = 50000000
71-
72-let F = 100000
73-
74-let G = 10000000
33+let p = 30
34+
35+func q (r) = ("duckHealth_" + r)
36+
37+
38+func s (r) = ("duckChars_" + r)
39+
40+
41+func t (r) = ("duckXP_" + r)
42+
43+
44+func u (r) = ("duckLevel_" + r)
45+
46+
47+func v (r) = ("duckFreePoints_" + r)
48+
49+
50+func w (r) = ("duckEquipment_" + r)
51+
52+
53+func x (b) = ("userXP_" + b)
54+
55+
56+func y (b) = ("userLevel_" + b)
57+
58+
59+func z (b) = ("userFreePoints_" + b)
60+
61+
62+let A = 100000
63+
64+let B = 50000
65+
66+let C = 10000
67+
68+let D = 100000
69+
70+let E = 5000000
71+
72+let F = 50000000
73+
74+let G = 100000
7575
7676 let H = 10000000
7777
78-let I = 10000
79-
80-func J (K) = fraction(d, pow(K, 4, e, 4, 4, DOWN), c)
81-
82-
83-func L (M) = (100 + M)
84-
85-
86-func N (O,P) = {
87- let Q = J(P)
88-[Q, (f * (Q - O))]
89- }
90-
91-
92-func R (S,q) = {
93- let T = split(valueOrElse(getString(S, r(q)), "0_0_0_0_0"), "_")
94- let U = valueOrElse(getInteger(S, t(q)), 0)
95- let V = valueOrElse(getInteger(S, p(q)), L(U))
96-[parseIntValue(T[h]), parseIntValue(T[i]), parseIntValue(T[j]), parseIntValue(T[k]), parseIntValue(T[l]), U, V]
97- }
98-
99-
100-let W = "LAND"
101-
102-let X = "DUCK"
103-
104-let Y = "PRESALE"
105-
106-let Z = 6
107-
108-let aa = 3456000
109-
110-let ab = 86400000
111-
112-let ac = 10000000000
113-
114-let ad = "Africa_F_Africa"
115-
116-let ae = 39637
117-
118-let af = 10
119-
120-let ag = ["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"]
121-
122-let ah = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
123-
124-let ai = 10000000
125-
126-let aj = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
127-
128-let ak = 6
129-
130-let al = 9
131-
132-let am = 10
78+let I = 10000000
79+
80+let J = 10000
81+
82+func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c)
83+
84+
85+func M (N) = (100 + N)
86+
87+
88+func O (P,Q) = {
89+ let R = K(Q)
90+[R, (f * (R - P))]
91+ }
92+
93+
94+func S (T,r) = {
95+ let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_")
96+ let V = valueOrElse(getInteger(T, u(r)), 0)
97+ let W = valueOrElse(getInteger(T, q(r)), M(V))
98+[parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W]
99+ }
100+
101+
102+let X = "LAND"
103+
104+let Y = "DUCK"
105+
106+let Z = "PRESALE"
107+
108+let aa = 6
109+
110+let ab = 3456000
111+
112+let ac = 86400000
113+
114+let ad = 10000000000
115+
116+let ae = "Africa_F_Africa"
117+
118+let af = 39637
119+
120+let ag = 10
121+
122+let ah = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
123+
124+let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
125+
126+let aj = 10000000
127+
128+let ak = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
129+
130+let al = 6
131+
132+let am = 9
133133
134134 let an = 10
135135
136-let ao = 0
137-
138-let ap = 1
139-
140-let aq = 2
141-
142-let ar = 3
143-
144-let as = 4
145-
146-let at = 0
147-
148-let au = 1
149-
150-let av = 2
151-
152-let aw = 3
153-
154-let ax = 0
155-
156-let ay = 1
157-
158-let az = 2
159-
160-let aA = 3
161-
162-func aB (b) = ("lastTxIdByUser_" + b)
163-
164-
165-func aC (aD) = ("nftOwner_" + aD)
166-
167-
168-func aE (aD) = ("landCustomNameByAssetId_" + aD)
169-
170-
171-func aF (aD) = ("stakedTime_" + aD)
172-
173-
174-func aG (aD) = ("infraLevel_" + aD)
175-
176-
177-func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_")
178-
179-
180-func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL)
181-
182-
183-func aM (aN) = ("wareHouse_" + aN)
184-
185-
186-func aO (aD) = ("duckCustomNameByAssetId_" + aD)
187-
188-
189-func aP (b) = ("accountCustomNameByAddr_" + b)
190-
191-
192-func aQ (b) = ("accRefBy_" + b)
193-
194-
195-func aR (q) = ("onboardArtActivatedOnDuck_" + q)
196-
197-
198-func aS (b) = ("onboardArtActivatedDuckBy_" + b)
199-
200-
201-func aT (b) = ("accReferrals_" + b)
202-
203-
204-func aU (aD) = ("duckOwner_" + aD)
205-
206-
207-func aV (aL) = ("stakedDuckByOwner_" + aL)
208-
209-
210-func aW (q) = ("backPack_" + q)
211-
212-
213-func aX (q) = ("duckLocation_" + q)
214-
215-
216-func aY () = "contractsBlocked"
217-
218-
219-func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba)
220-
221-
222-func bb () = "emergencyWarehouseProducts"
223-
224-
225-let bc = 1
226-
227-let bd = 2
228-
229-func be (bf) = (parseIntValue(bf[ak]) * ai)
230-
231-
232-let bg = true
233-
234-let bh = take(drop(this.bytes, 1), 1)
235-
236-let bi = {
237- let bj = bh
238- if ((base58'2W' == bj))
136+let ao = 10
137+
138+let ap = 0
139+
140+let aq = 1
141+
142+let ar = 2
143+
144+let as = 3
145+
146+let at = 4
147+
148+let au = 0
149+
150+let av = 1
151+
152+let aw = 2
153+
154+let ax = 3
155+
156+let ay = 0
157+
158+let az = 1
159+
160+let aA = 2
161+
162+let aB = 3
163+
164+func aC (b) = ("lastTxIdByUser_" + b)
165+
166+
167+func aD (aE) = ("nftOwner_" + aE)
168+
169+
170+func aF (aE) = ("landCustomNameByAssetId_" + aE)
171+
172+
173+func aG (aE) = ("stakedTime_" + aE)
174+
175+
176+func aH (aE) = ("infraLevel_" + aE)
177+
178+
179+func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_")
180+
181+
182+func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM)
183+
184+
185+func aN (aO) = ("wareHouse_" + aO)
186+
187+
188+func aP (aE) = ("duckCustomNameByAssetId_" + aE)
189+
190+
191+func aQ (b) = ("accountCustomNameByAddr_" + b)
192+
193+
194+func aR (b) = ("accRefBy_" + b)
195+
196+
197+func aS (r) = ("onboardArtActivatedOnDuck_" + r)
198+
199+
200+func aT (b) = ("onboardArtActivatedDuckBy_" + b)
201+
202+
203+func aU (b) = ("accReferrals_" + b)
204+
205+
206+func aV (aE) = ("duckOwner_" + aE)
207+
208+
209+func aW (aM) = ("stakedDuckByOwner_" + aM)
210+
211+
212+func aX (r) = ("backPack_" + r)
213+
214+
215+func aY (r) = ("duckLocation_" + r)
216+
217+
218+func aZ () = "contractsBlocked"
219+
220+
221+func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb)
222+
223+
224+func bc () = "emergencyWarehouseProducts"
225+
226+
227+let bd = 1
228+
229+let be = 2
230+
231+func bf (bg) = (parseIntValue(bg[al]) * aj)
232+
233+
234+let bh = true
235+
236+let bi = take(drop(this.bytes, 1), 1)
237+
238+let bj = {
239+ let bk = bi
240+ if ((base58'2W' == bk))
239241 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
240- else if ((base58'2T' == bj))
242+ else if ((base58'2T' == bk))
241243 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
242244 else throw("Unknown chain")
243245 }
244246
245-let bk = {
246- let bj = bh
247- if ((base58'2W' == bj))
247+let bl = {
248+ let bk = bi
249+ if ((base58'2W' == bk))
248250 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
249- else if ((base58'2T' == bj))
251+ else if ((base58'2T' == bk))
250252 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
251253 else throw("Unknown chain")
252254 }
253255
254-let bl = {
255- let bj = bh
256- if ((base58'2W' == bj))
256+let bm = {
257+ let bk = bi
258+ if ((base58'2W' == bk))
257259 then 10000000000
258- else if ((base58'2T' == bj))
260+ else if ((base58'2T' == bk))
259261 then 100000000
260262 else throw("Unknown chain")
261263 }
262264
263-let bm = {
264- let bj = bh
265- if ((base58'2W' == bj))
265+let bn = {
266+ let bk = bi
267+ if ((base58'2W' == bk))
266268 then 600000
267- else if ((base58'2T' == bj))
269+ else if ((base58'2T' == bk))
268270 then 60000
269271 else throw("Unknown chain")
270272 }
271273
272-let bn = "__"
273-
274-let bo = 1000000
275-
276-let bp = 100000000
277-
278-let bq = 25
279-
280-let br = 100
281-
282-let bs = 225
283-
284-let bt = 400
285-
286-let bu = 625
287-
288-func bv (bw,bx) = valueOrErrorMessage(getString(bw, bx), makeString(["mandatory ", toString(bw), ".", bx, " is not defined"], ""))
289-
290-
291-let by = 1
292-
293-let bz = 2
294-
295-let bA = 3
296-
297-let bB = 4
298-
299-func bC () = "%s__restConfig"
300-
301-
302-func bD () = "%s__restAddr"
303-
304-
305-func bE (bF) = split_4C(bv(bF, bC()), bn)
306-
307-
308-func bG (bH,bI) = valueOrErrorMessage(addressFromString(bH[bI]), ("Rest cfg doesn't contain address at index " + toString(bI)))
309-
310-
311-let bJ = addressFromStringValue(valueOrElse(getString(this, bD()), bk))
312-
313-let bH = bE(bJ)
314-
315-let S = bG(bH, by)
316-
317-let bK = bG(bH, bz)
318-
319-let bL = bG(bH, bA)
320-
321-let bM = bG(bH, bB)
322-
323-let bN = 0
324-
325-let bO = 1
326-
327-let bP = 2
328-
329-let bQ = 3
330-
331-func bR () = "resTypesProportions"
332-
333-
334-func bS (aL) = ("stakedLandsByOwner_" + aL)
335-
336-
337-func bT (aL) = ("stakedPiecesByOwner_" + aL)
338-
339-
340-func bU (bV) = {
341- let bj = bV
342- if ($isInstanceOf(bj, "String"))
274+let bo = "__"
275+
276+let bp = 1000000
277+
278+let bq = 100000000
279+
280+let br = 25
281+
282+let bs = 100
283+
284+let bt = 225
285+
286+let bu = 400
287+
288+let bv = 625
289+
290+func bw (bx,by) = valueOrErrorMessage(getString(bx, by), makeString(["mandatory ", toString(bx), ".", by, " is not defined"], ""))
291+
292+
293+let bz = 1
294+
295+let bA = 2
296+
297+let bB = 3
298+
299+let bC = 4
300+
301+func bD () = "%s__restConfig"
302+
303+
304+func bE () = "%s__restAddr"
305+
306+
307+func bF (bG) = split_4C(bw(bG, bD()), bo)
308+
309+
310+func bH (bI,bJ) = valueOrErrorMessage(addressFromString(bI[bJ]), ("Rest cfg doesn't contain address at index " + toString(bJ)))
311+
312+
313+let bK = addressFromStringValue(valueOrElse(getString(this, bE()), bl))
314+
315+let bI = bF(bK)
316+
317+let T = bH(bI, bz)
318+
319+let bL = bH(bI, bA)
320+
321+let bM = bH(bI, bB)
322+
323+let bN = bH(bI, bC)
324+
325+let bO = 0
326+
327+let bP = 1
328+
329+let bQ = 2
330+
331+let bR = 3
332+
333+func bS () = "resTypesProportions"
334+
335+
336+func bT (aM) = ("stakedLandsByOwner_" + aM)
337+
338+
339+func bU (aM) = ("stakedPiecesByOwner_" + aM)
340+
341+
342+func bV (bW) = {
343+ let bk = bW
344+ if ($isInstanceOf(bk, "String"))
343345 then {
344- let bW = bj
345- bW
346+ let bX = bk
347+ bX
346348 }
347349 else throw("fail to cast into String")
348350 }
349351
350352
351-func bX (bV) = {
352- let bj = bV
353- if ($isInstanceOf(bj, "Int"))
353+func bY (bW) = {
354+ let bk = bW
355+ if ($isInstanceOf(bk, "Int"))
354356 then {
355- let bY = bj
356- bY
357+ let bZ = bk
358+ bZ
357359 }
358360 else throw("fail to cast into Int")
359361 }
360362
361363
362-func bZ (ca) = {
363- let bj = ca
364- if (("S" == bj))
365- then bq
366- else if (("M" == bj))
367- then br
368- else if (("L" == bj))
369- then bs
370- else if (("XL" == bj))
371- then bt
372- else if (("XXL" == bj))
373- then bu
364+func ca (cb) = {
365+ let bk = cb
366+ if (("S" == bk))
367+ then br
368+ else if (("M" == bk))
369+ then bs
370+ else if (("L" == bk))
371+ then bt
372+ else if (("XL" == bk))
373+ then bu
374+ else if (("XXL" == bk))
375+ then bv
374376 else throw("Unknown land size")
375377 }
376378
377379
378-let cb = {
379- let bj = bh
380- if ((base58'2W' == bj))
380+func cc (bX) = isDefined(parseInt(bX))
381+
382+
383+let cd = {
384+ let bk = bi
385+ if ((base58'2W' == bk))
381386 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
382- else if ((base58'2T' == bj))
387+ else if ((base58'2T' == bk))
383388 then this
384389 else throw("Unknown chain")
385390 }
386391
387-let cc = {
388- let bj = bh
389- if ((base58'2W' == bj))
392+let ce = {
393+ let bk = bi
394+ if ((base58'2W' == bk))
390395 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
391- else if ((base58'2T' == bj))
396+ else if ((base58'2T' == bk))
392397 then this
393398 else throw("Unknown chain")
394399 }
395400
396-let cd = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
397-
398-let ce = [30, 60, 120]
399-
400-let cf = 300000
401-
402-let cg = 5000000
403-
404-let ch = 50
405-
406-let ci = 10000000
407-
408-let cj = {
409- let bj = bh
410- if ((base58'2W' == bj))
401+let cf = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
402+
403+let cg = [30, 60, 120]
404+
405+let ch = 300000
406+
407+let ci = 5000000
408+
409+let cj = 50
410+
411+let ck = 10000000
412+
413+let cl = {
414+ let bk = bi
415+ if ((base58'2W' == bk))
411416 then 252289527462
412- else if ((base58'2T' == bj))
417+ else if ((base58'2T' == bk))
413418 then 2522895274
414419 else throw("Unknown chain")
415420 }
416421
417-let ck = {
418- let bj = bh
419- if ((base58'2W' == bj))
422+let cm = {
423+ let bk = bi
424+ if ((base58'2W' == bk))
420425 then 250000000
421- else if ((base58'2T' == bj))
426+ else if ((base58'2T' == bk))
422427 then 250000000
423428 else throw("Unknown chain")
424429 }
425430
426-let cl = toBigInt(5)
427-
428-let cm = toBigInt(20)
429-
430-let cn = toBigInt((20 * 20))
431-
432-let co = toBigInt(((20 * 20) * 20))
433-
434-let cp = toBigInt((((20 * 20) * 20) * 20))
435-
436-let cq = toBigInt(((((20 * 20) * 20) * 20) * 20))
437-
438-let cr = 500
439-
440-func cs () = "nextLandNum"
441-
442-
443-func ct (cu) = ("landToAsset_" + cu)
444-
445-
446-func cv (cw) = ("landByCustomName_" + cw)
447-
448-
449-func cx (aD,aL) = ((("infraLevelByAssetIdAndOwner_" + aD) + "_") + aL)
450-
451-
452-func cy (aI,aD,aL) = makeString(["landArtStatusByTypeAssetIdAndOwner", aI, aD, aL], "_")
453-
454-
455-func cz (cu) = ("landOwner_" + cu)
456-
457-
458-func cA (cw) = ("duckByCustomName_" + cw)
459-
460-
461-func cB (cw) = ("accountByCustomName_" + cw)
462-
463-
464-func cC () = "oldiesList"
465-
466-
467-let cD = 0
468-
469-let cE = 1
470-
471-let cF = 2
472-
473-let cG = 0
474-
475-let cH = 5
476-
477-let cI = 6
478-
479-let cJ = 7
480-
481-func cK (cu,ca) = ((W + cu) + ca)
482-
483-
484-func cL (cM,cN) = {
485- let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
486- if ((0 >= cO))
431+let cn = toBigInt(5)
432+
433+let co = toBigInt(20)
434+
435+let cp = toBigInt((20 * 20))
436+
437+let cq = toBigInt(((20 * 20) * 20))
438+
439+let cr = toBigInt((((20 * 20) * 20) * 20))
440+
441+let cs = toBigInt(((((20 * 20) * 20) * 20) * 20))
442+
443+let ct = 500
444+
445+func cu () = "nextLandNum"
446+
447+
448+func cv (cw) = ("landToAsset_" + cw)
449+
450+
451+func cx (cy) = ("landByCustomName_" + cy)
452+
453+
454+func cz (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM)
455+
456+
457+func cA (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_")
458+
459+
460+func cB (cw) = ("landOwner_" + cw)
461+
462+
463+func cC (cy) = ("duckByCustomName_" + cy)
464+
465+
466+func cD (cy) = ("accountByCustomName_" + cy)
467+
468+
469+func cE () = "oldiesList"
470+
471+
472+let cF = 0
473+
474+let cG = 1
475+
476+let cH = 2
477+
478+let cI = 0
479+
480+let cJ = 5
481+
482+let cK = 6
483+
484+let cL = 7
485+
486+func cM (cw,cb) = ((X + cw) + cb)
487+
488+
489+func cN (cO,cP) = {
490+ let cQ = (((((cP[0] + cP[1]) + cP[2]) + cP[3]) + cP[4]) + cP[5])
491+ if ((0 >= cQ))
487492 then throw("Zero weights sum")
488493 else {
489- let cP = fraction(cM, bo, cO)
490- func cQ (cR,cS) = (cR :+ fraction(cS, cP, bo))
491-
492- let cT = cN
493- let cU = size(cT)
494- let cV = nil
495- func cW (cX,cY) = if ((cY >= cU))
496- then cX
497- else cQ(cX, cT[cY])
498-
499- func cZ (cX,cY) = if ((cY >= cU))
500- then cX
494+ let cR = fraction(cO, bp, cQ)
495+ func cS (cT,cU) = (cT :+ fraction(cU, cR, bp))
496+
497+ let cV = cP
498+ let cW = size(cV)
499+ let cX = nil
500+ func cY (cZ,da) = if ((da >= cW))
501+ then cZ
502+ else cS(cZ, cV[da])
503+
504+ func db (cZ,da) = if ((da >= cW))
505+ then cZ
501506 else throw("List size exceeds 6")
502507
503- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
504- }
505- }
506-
507-
508-func da (cM) = {
509- let db = split(value(getString(bR())), "_")
510- if ((size(db) != Z))
508+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
509+ }
510+ }
511+
512+
513+func dc (cO) = {
514+ let dd = split(value(getString(bS())), "_")
515+ if ((size(dd) != aa))
511516 then throw("Wrong proportions data")
512517 else {
513- let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
514- cL(cM, dc)
515- }
516- }
517-
518-
519-func dd (de,df,dg) = {
520- let dh = da(dg)
521- func di (cR,bI) = {
522- let dj = (parseIntValue(df[bI]) - dh[bI])
523- if ((0 > dj))
524- then throw(((((("Not enough material idx=" + toString(bI)) + ", you have ") + df[bI]) + ", but need ") + toString(dh[bI])))
525- else (cR :+ toString(dj))
526- }
527-
528- if (de)
518+ let de = [parseIntValue(dd[0]), parseIntValue(dd[1]), parseIntValue(dd[2]), parseIntValue(dd[3]), parseIntValue(dd[4]), parseIntValue(dd[5])]
519+ cN(cO, de)
520+ }
521+ }
522+
523+
524+func df (dg,dh,di) = {
525+ let dj = dc(di)
526+ func dk (cT,bJ) = {
527+ let dl = (parseIntValue(dh[bJ]) - dj[bJ])
528+ if ((0 > dl))
529+ then throw(((((("Not enough material idx=" + toString(bJ)) + ", you have ") + dh[bJ]) + ", but need ") + toString(dj[bJ])))
530+ else (cT :+ toString(dl))
531+ }
532+
533+ if (dg)
529534 then {
530- let cT = [0, 1, 2, 3, 4, 5]
531- let cU = size(cT)
532- let cV = nil
533- func cW (cX,cY) = if ((cY >= cU))
534- then cX
535- else di(cX, cT[cY])
536-
537- func cZ (cX,cY) = if ((cY >= cU))
538- then cX
535+ let cV = [0, 1, 2, 3, 4, 5]
536+ let cW = size(cV)
537+ let cX = nil
538+ func cY (cZ,da) = if ((da >= cW))
539+ then cZ
540+ else dk(cZ, cV[da])
541+
542+ func db (cZ,da) = if ((da >= cW))
543+ then cZ
539544 else throw("List size exceeds 6")
540545
541- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
542- }
543- else df
544- }
545-
546-
547-func dk (dl,dm) = if ((dm == ""))
548- then dl
549- else {
550- let dn = if ((dl == ""))
551- then nil
552- else split(dl, "_")
553- func do (cR,dp) = {
554- let dq = cR._1
555- func dr (ds,dt) = {
556- let du = split(dt, ",")
557- if ((size(du) != 2))
558- then throw("Incorrect format, should be index,amount")
546+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
547+ }
548+ else dh
549+ }
550+
551+
552+func dm (dn,do) = {
553+ func dp (cT,dq) = {
554+ let dr = split(dq, ",")
555+ if ((size(dr) != 2))
556+ then throw("Incorrect format, should be index,amount")
557+ else {
558+ let bJ = parseIntValue(dr[0])
559+ if (if ((0 > bJ))
560+ then true
561+ else (bJ >= size(ak)))
562+ then throw("Unknown product idx")
559563 else {
560- let bI = parseIntValue(du[0])
561- if (if ((0 > bI))
562- then true
563- else (bI >= size(aj)))
564- then throw("Unknown product idx")
565- else if ((bI != dq))
566- then ds
567- else {
568- let dv = parseIntValue(du[1])
569- if ((0 >= dv))
570- then throw("Pass only positive amounts")
571- else (ds + dv)
572- }
564+ let ds = parseIntValue(dr[1])
565+ let dt = split(cT, (dr[0] + ":"))
566+ if ((size(dt) != 2))
567+ then throw((("You don't have " + ah[bJ]) + " equipped"))
568+ else {
569+ let du = dt[1]
570+ let dv = if (cc(take(drop(du, 1), 1)))
571+ then 2
572+ else 1
573+ let dw = parseIntValue(take(du, dv))
574+ let dx = drop(du, dv)
575+ let dy = if ((dw >= ds))
576+ then (dw - ds)
577+ else throw(((((("You equipped " + toString(dw)) + " of ") + ah[bJ]) + ", but tried to use ") + toString(ds)))
578+ ((((dt[0] + dr[0]) + ":") + toString(dy)) + dx)
579+ }
573580 }
574581 }
575-
576- let dw = {
577- let cT = split(dm, "_")
578- let cU = size(cT)
579- let cV = 0
580- func cW (cX,cY) = if ((cY >= cU))
581- then cX
582- else dr(cX, cT[cY])
583-
584- func cZ (cX,cY) = if ((cY >= cU))
585- then cX
586- else throw("List size exceeds 10")
587-
588- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
589- }
590- let dx = if ((size(dn) > dq))
591- then parseIntValue(dn[dq])
592- else 0
593- let dy = if ((dx >= dw))
594- then (dx - dw)
595- else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw)))
596- $Tuple2((dq + 1), (cR._2 :+ toString(dy)))
597- }
598-
599- let dz = {
600- let cT = aj
601- let cU = size(cT)
602- let cV = $Tuple2(0, nil)
603- func cW (cX,cY) = if ((cY >= cU))
604- then cX
605- else do(cX, cT[cY])
606-
607- func cZ (cX,cY) = if ((cY >= cU))
608- then cX
609- else throw("List size exceeds 50")
610-
611- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
612- }
613- makeString(dz._2, "_")
614- }
615-
616-
617-func dA (dB) = {
618- let dn = if ((dB == ""))
582+ }
583+
584+ let cV = split(do, "_")
585+ let cW = size(cV)
586+ let cX = dn
587+ func cY (cZ,da) = if ((da >= cW))
588+ then cZ
589+ else dp(cZ, cV[da])
590+
591+ func db (cZ,da) = if ((da >= cW))
592+ then cZ
593+ else throw("List size exceeds 10")
594+
595+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
596+ }
597+
598+
599+func dz (dA) = {
600+ let dB = if ((dA == ""))
619601 then nil
620- else split(dB, "_")
621- func dC (cR,bf) = {
622- let dq = (size(cR) / 8)
623- let dx = if ((size(dn) > dq))
624- then parseIntValue(dn[dq])
602+ else split(dA, "_")
603+ func dC (cT,bg) = {
604+ let dD = (size(cT) / 8)
605+ let dw = if ((size(dB) > dD))
606+ then parseIntValue(dB[dD])
625607 else 0
626- (cR + toBytes(dx))
627- }
628-
629- let cT = aj
630- let cU = size(cT)
631- let cV = base58''
632- func cW (cX,cY) = if ((cY >= cU))
633- then cX
634- else dC(cX, cT[cY])
635-
636- func cZ (cX,cY) = if ((cY >= cU))
637- then cX
608+ (cT + toBytes(dw))
609+ }
610+
611+ let cV = ak
612+ let cW = size(cV)
613+ let cX = base58''
614+ func cY (cZ,da) = if ((da >= cW))
615+ then cZ
616+ else dC(cZ, cV[da])
617+
618+ func db (cZ,da) = if ((da >= cW))
619+ then cZ
638620 else throw("List size exceeds 50")
639621
640- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
641- }
642-
643-
644-func dD (dE) = {
645- func dF (cR,bf) = {
646- let dq = size(cR)
647- let dG = take(drop(dE, (8 * dq)), 8)
648- (cR :+ toString(toInt(dG)))
622+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
623+ }
624+
625+
626+func dE (dF) = {
627+ func dG (cT,bg) = {
628+ let dD = size(cT)
629+ let dH = take(drop(dF, (8 * dD)), 8)
630+ (cT :+ toString(toInt(dH)))
649631 }
650632
651633 makeString({
652- let cT = aj
653- let cU = size(cT)
654- let cV = nil
655- func cW (cX,cY) = if ((cY >= cU))
656- then cX
657- else dF(cX, cT[cY])
658-
659- func cZ (cX,cY) = if ((cY >= cU))
660- then cX
634+ let cV = ak
635+ let cW = size(cV)
636+ let cX = nil
637+ func cY (cZ,da) = if ((da >= cW))
638+ then cZ
639+ else dG(cZ, cV[da])
640+
641+ func db (cZ,da) = if ((da >= cW))
642+ then cZ
661643 else throw("List size exceeds 50")
662644
663- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
645+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
664646 }, "_")
665647 }
666648
667649
668-func dH (dI,dJ) = {
669- func dK (cR,dq) = if ((parseIntValue(dJ[dq]) > dI[dq]))
670- then throw(("Requirement not satisfied: " + g[dq]))
650+func dI (dJ,dK) = {
651+ func dL (cT,dD) = if ((parseIntValue(dK[dD]) > dJ[dD]))
652+ then throw(("Requirement not satisfied: " + g[dD]))
671653 else true
672654
673- let cT = [0, 1, 2, 3, 4, 5, 6]
674- let cU = size(cT)
675- let cV = false
676- func cW (cX,cY) = if ((cY >= cU))
677- then cX
678- else dK(cX, cT[cY])
679-
680- func cZ (cX,cY) = if ((cY >= cU))
681- then cX
655+ let cV = [0, 1, 2, 3, 4, 5, 6]
656+ let cW = size(cV)
657+ let cX = false
658+ func cY (cZ,da) = if ((da >= cW))
659+ then cZ
660+ else dL(cZ, cV[da])
661+
662+ func db (cZ,da) = if ((da >= cW))
663+ then cZ
682664 else throw("List size exceeds 7")
683665
684- cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
685- }
686-
687-
688-func dL (dM,dn,dN,dO,dP,dQ,dI) = {
689- let du = split(dM, ":")
690- if ((size(du) != 2))
666+ db(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7)
667+ }
668+
669+
670+func dM (dN,dB,dO,dP,dQ,dR,dJ) = {
671+ let dr = split(dN, ":")
672+ if ((size(dr) != 2))
691673 then throw("Incorrect format, should be index:amount")
692- else {
693- let dR = parseIntValue(du[0])
694- let dS = parseIntValue(du[1])
695- if (if ((0 > dR))
696- then true
697- else (dR >= size(aj)))
698- then throw("Unknown product idx")
699- else if ((0 > dS))
700- then throw("Count can't be negative")
701- else if ((dS == 0))
702- then $Tuple2(dn, false)
703- else {
704- let dT = take(dn, (8 * dR))
705- let dx = toInt(take(drop(dn, (8 * dR)), 8))
706- let dU = drop(dn, (8 * (dR + 1)))
707- let bf = split(aj[dR], "_")
708- if (if (!(dN))
709- then (dS > dx)
710- else false)
711- then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS)))
674+ else if ((size(dr[0]) != 2))
675+ then throw("Product idx should be 2 digits, zero padded")
676+ else {
677+ let dS = parseIntValue(dr[0])
678+ let dT = parseIntValue(dr[1])
679+ if (if ((0 > dS))
680+ then true
681+ else (dS >= size(ak)))
682+ then throw("Unknown product idx")
683+ else if ((0 > dT))
684+ then throw("Count can't be negative")
685+ else if ((dT > p))
686+ then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dS]))
687+ else if ((dT == 0))
688+ then $Tuple2(dB, false)
712689 else {
713- let dV = if (if (!(dN))
714- then dH(dI, split(bf[al], ","))
690+ let dU = take(dB, (8 * dS))
691+ let dw = toInt(take(drop(dB, (8 * dS)), 8))
692+ let dx = drop(dB, (8 * (dS + 1)))
693+ let bg = split(ak[dS], "_")
694+ if (if (!(dO))
695+ then (dT > dw)
715696 else false)
716- then {
717- let dW = bf[am]
718- if ((dW == ""))
719- then throw("Item cannot be equipped")
720- else {
721- let dX = parseIntValue(dW)
722- let dY = (dX / 100)
723- if ((dO != dY))
724- then throw("Segment incompatible")
697+ then throw(((((("You have " + toString(dw)) + " of ") + ah[dS]) + ", but tried to use ") + toString(dT)))
698+ else {
699+ let dV = if (if (!(dO))
700+ then dI(dJ, split(bg[am], ","))
701+ else false)
702+ then {
703+ let dW = bg[an]
704+ if ((dW == ""))
705+ then throw("Item cannot be equipped")
725706 else {
726- let dZ = ((dX % 100) / 10)
727- if ((dP != dZ))
728- then throw("Slot incompatible")
707+ let dX = parseIntValue(dW)
708+ let dY = (dX / 100)
709+ if ((dP != dY))
710+ then throw("Segment incompatible")
729711 else {
730- let ea = (dX % 10)
731- if (if ((dQ != 0))
732- then (ea > 1)
733- else false)
734- then throw("Big items should occupy slot 0")
735- else (ea > 1)
712+ let dZ = ((dX % 100) / 10)
713+ if ((dQ != dZ))
714+ then throw("Slot incompatible")
715+ else {
716+ let ea = (dX % 10)
717+ if (if ((dR != 0))
718+ then (ea > 1)
719+ else false)
720+ then throw("Big items should occupy slot 0")
721+ else (ea > 1)
722+ }
736723 }
737724 }
738725 }
726+ else false
727+ $Tuple2(((dU + toBytes((dw + (if (dO)
728+ then dT
729+ else -(dT))))) + dx), dV)
739730 }
740- else false
741- $Tuple2(((dT + toBytes((dx + (if (dN)
742- then dS
743- else -(dS))))) + dU), dV)
744731 }
745- }
746- }
747- }
748-
749-
750-func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != ""))
732+ }
733+ }
734+
735+
736+func eb (ec,ed,dO,dP,dQ,dK) = if ((ec != ""))
751737 then {
752738 let ee = split(ec, ",")
753739 if ((size(ee) > o))
763749 then ed
764750 else {
765751 let eh = if ((ef != ""))
766- then dL(ef, ed, dN, dO, dP, 0, dJ)
752+ then dM(ef, ed, dO, dP, dQ, 0, dK)
767753 else $Tuple2(ed, false)
768754 if ((eg != ""))
769755 then if (eh._2)
770756 then throw("Big item already occupies slot")
771- else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1
757+ else dM(eg, eh._1, dO, dP, dQ, 1, dK)._1
772758 else eh._1
773759 }
774760 }
776762 else ed
777763
778764
779-func ei (ej,ek,dN,dJ) = {
780- func dO (cR,el) = {
781- let dq = cR._1
782- let dP = split(el, ";")
783- if ((size(dP) != n))
765+func ei (ej,ek,dO,dK) = {
766+ func dP (cT,el) = {
767+ let dD = cT._1
768+ let dQ = split(el, ";")
769+ if ((size(dQ) != n))
784770 then throw("Wrong segment format")
785771 else {
786- let em = dP[0]
787- let dw = dP[1]
772+ let em = dQ[0]
773+ let en = dQ[1]
788774 if (if ((em == ""))
789- then (dw == "")
775+ then (en == "")
790776 else false)
791- then $Tuple2((dq + 1), cR._2)
777+ then $Tuple2((dD + 1), cT._2)
792778 else {
793- let en = eb(em, cR._2, dN, dq, 0, dJ)
794- $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ))
779+ let eo = eb(em, cT._2, dO, dD, 0, dK)
780+ $Tuple2((dD + 1), eb(en, eo, dO, dD, 1, dK))
795781 }
796782 }
797783 }
798784
799-( let cT = ej
800- let cU = size(cT)
801- let cV = $Tuple2(0, ek)
802- func cW (cX,cY) = if ((cY >= cU))
803- then cX
804- else dO(cX, cT[cY])
805-
806- func cZ (cX,cY) = if ((cY >= cU))
807- then cX
785+( let cV = ej
786+ let cW = size(cV)
787+ let cX = $Tuple2(0, ek)
788+ func cY (cZ,da) = if ((da >= cW))
789+ then cZ
790+ else dP(cZ, cV[da])
791+
792+ func db (cZ,da) = if ((da >= cW))
793+ then cZ
808794 else throw("List size exceeds 6")
809795
810- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
811- }
812-
813-
814-func eo (ep,eq,er,es) = if ((size(ep) != Z))
796+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6))._2
797+ }
798+
799+
800+func ep (eq,er,es,et) = if ((size(eq) != aa))
815801 then throw("Wrong proportions data")
816802 else {
817- func et (cR,eu) = {
818- let dj = (parseIntValue(ep[eu]) + ((es * eq[eu]) * er))
819- if ((0 > dj))
820- then throw(((((((("Panic! Pieces of type=" + toString(eu)) + ", sign=") + toString(es)) + ", terrainCounts[i]=") + toString(eq[eu])) + ", landSizeIndex=") + toString(er)))
821- else (cR :+ toString(dj))
822- }
823-
824- let dc = {
825- let cT = [0, 1, 2, 3, 4, 5]
826- let cU = size(cT)
827- let cV = nil
828- func cW (cX,cY) = if ((cY >= cU))
829- then cX
830- else et(cX, cT[cY])
831-
832- func cZ (cX,cY) = if ((cY >= cU))
833- then cX
803+ func eu (cT,ev) = {
804+ let dl = (parseIntValue(eq[ev]) + ((et * er[ev]) * es))
805+ if ((0 > dl))
806+ then throw(((((((("Panic! Pieces of type=" + toString(ev)) + ", sign=") + toString(et)) + ", terrainCounts[i]=") + toString(er[ev])) + ", landSizeIndex=") + toString(es)))
807+ else (cT :+ toString(dl))
808+ }
809+
810+ let de = {
811+ let cV = [0, 1, 2, 3, 4, 5]
812+ let cW = size(cV)
813+ let cX = nil
814+ func cY (cZ,da) = if ((da >= cW))
815+ then cZ
816+ else eu(cZ, cV[da])
817+
818+ func db (cZ,da) = if ((da >= cW))
819+ then cZ
834820 else throw("List size exceeds 6")
835821
836- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
837- }
838- makeString(dc, "_")
839- }
840-
841-
842-func ev (eq,er,es) = {
843- let ep = split(valueOrElse(getString(bR()), "0_0_0_0_0_0"), "_")
844- eo(ep, eq, er, es)
845- }
846-
847-
848-func ew (ex) = [(size(split(ex, "A")) - 1), (size(split(ex, "B")) - 1), (size(split(ex, "C")) - 1), (size(split(ex, "D")) - 1), (size(split(ex, "E")) - 1), (size(split(ex, "F")) - 1)]
849-
850-
851-func ey (ez,eq,eA,er,eB) = {
852- func eC (cR,eu) = {
853- let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
854- (cR :+ toString((parseIntValue(ez[eu]) + eD)))
855- }
856-
857- let dc = {
858- let cT = [0, 1, 2, 3, 4, 5]
859- let cU = size(cT)
860- let cV = nil
861- func cW (cX,cY) = if ((cY >= cU))
862- then cX
863- else eC(cX, cT[cY])
864-
865- func cZ (cX,cY) = if ((cY >= cU))
866- then cX
822+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
823+ }
824+ makeString(de, "_")
825+ }
826+
827+
828+func ew (er,es,et) = {
829+ let eq = split(valueOrElse(getString(bS()), "0_0_0_0_0_0"), "_")
830+ ep(eq, er, es, et)
831+ }
832+
833+
834+func ex (ey) = [(size(split(ey, "A")) - 1), (size(split(ey, "B")) - 1), (size(split(ey, "C")) - 1), (size(split(ey, "D")) - 1), (size(split(ey, "E")) - 1), (size(split(ey, "F")) - 1)]
835+
836+
837+func ez (eA,er,eB,es,eC) = {
838+ func eD (cT,ev) = {
839+ let eE = ((fraction(eB, eC, ac) * er[ev]) * es)
840+ (cT :+ toString((parseIntValue(eA[ev]) + eE)))
841+ }
842+
843+ let de = {
844+ let cV = [0, 1, 2, 3, 4, 5]
845+ let cW = size(cV)
846+ let cX = nil
847+ func cY (cZ,da) = if ((da >= cW))
848+ then cZ
849+ else eD(cZ, cV[da])
850+
851+ func db (cZ,da) = if ((da >= cW))
852+ then cZ
867853 else throw("List size exceeds 6")
868854
869- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
870- }
871- makeString(dc, "_")
872- }
873-
874-
875-func eE (eq,eA,er,eB) = {
876- func eC (cR,eu) = {
877- let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
878- $Tuple2((cR._1 :+ eD), (cR._2 + eD))
879- }
880-
881- let cT = [0, 1, 2, 3, 4, 5]
882- let cU = size(cT)
883- let cV = $Tuple2(nil, 0)
884- func cW (cX,cY) = if ((cY >= cU))
885- then cX
886- else eC(cX, cT[cY])
887-
888- func cZ (cX,cY) = if ((cY >= cU))
889- then cX
855+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
856+ }
857+ makeString(de, "_")
858+ }
859+
860+
861+func eF (er,eB,es,eC) = {
862+ func eD (cT,ev) = {
863+ let eE = ((fraction(eB, eC, ac) * er[ev]) * es)
864+ $Tuple2((cT._1 :+ eE), (cT._2 + eE))
865+ }
866+
867+ let cV = [0, 1, 2, 3, 4, 5]
868+ let cW = size(cV)
869+ let cX = $Tuple2(nil, 0)
870+ func cY (cZ,da) = if ((da >= cW))
871+ then cZ
872+ else eD(cZ, cV[da])
873+
874+ func db (cZ,da) = if ((da >= cW))
875+ then cZ
890876 else throw("List size exceeds 6")
891877
892- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
893- }
894-
895-
896-func eF (eG,eH,eI,eJ) = {
897- let eK = eI._1
898- let eL = eI._2
899- if ((eL == 0))
900- then $Tuple2(makeString(eG, "_"), makeString(eH, "_"))
901- else if ((eJ >= eL))
878+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
879+ }
880+
881+
882+func eG (eH,eI,eJ,eK) = {
883+ let eL = eJ._1
884+ let eM = eJ._2
885+ if ((eM == 0))
886+ then $Tuple2(makeString(eH, "_"), makeString(eI, "_"))
887+ else if ((eK >= eM))
902888 then {
903- func eM (cR,eu) = (cR :+ toString((parseIntValue(eG[eu]) + eK[eu])))
904-
905- let dc = {
906- let cT = [0, 1, 2, 3, 4, 5]
907- let cU = size(cT)
908- let cV = nil
909- func cW (cX,cY) = if ((cY >= cU))
910- then cX
911- else eM(cX, cT[cY])
912-
913- func cZ (cX,cY) = if ((cY >= cU))
914- then cX
889+ func eN (cT,ev) = (cT :+ toString((parseIntValue(eH[ev]) + eL[ev])))
890+
891+ let de = {
892+ let cV = [0, 1, 2, 3, 4, 5]
893+ let cW = size(cV)
894+ let cX = nil
895+ func cY (cZ,da) = if ((da >= cW))
896+ then cZ
897+ else eN(cZ, cV[da])
898+
899+ func db (cZ,da) = if ((da >= cW))
900+ then cZ
915901 else throw("List size exceeds 6")
916902
917- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
903+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
918904 }
919- $Tuple2(makeString(dc, "_"), makeString(eH, "_"))
905+ $Tuple2(makeString(de, "_"), makeString(eI, "_"))
920906 }
921907 else {
922- func eN (cR,eu) = {
923- let eO = fraction(eK[eu], eJ, eL)
924- $Tuple2((cR._1 :+ toString((parseIntValue(eG[eu]) + eO))), (cR._2 :+ toString(((parseIntValue(eH[eu]) + eK[eu]) - eO))))
908+ func eO (cT,ev) = {
909+ let eP = fraction(eL[ev], eK, eM)
910+ $Tuple2((cT._1 :+ toString((parseIntValue(eH[ev]) + eP))), (cT._2 :+ toString(((parseIntValue(eI[ev]) + eL[ev]) - eP))))
925911 }
926912
927- let dc = {
928- let cT = [0, 1, 2, 3, 4, 5]
929- let cU = size(cT)
930- let cV = $Tuple2(nil, nil)
931- func cW (cX,cY) = if ((cY >= cU))
932- then cX
933- else eN(cX, cT[cY])
934-
935- func cZ (cX,cY) = if ((cY >= cU))
936- then cX
913+ let de = {
914+ let cV = [0, 1, 2, 3, 4, 5]
915+ let cW = size(cV)
916+ let cX = $Tuple2(nil, nil)
917+ func cY (cZ,da) = if ((da >= cW))
918+ then cZ
919+ else eO(cZ, cV[da])
920+
921+ func db (cZ,da) = if ((da >= cW))
922+ then cZ
937923 else throw("List size exceeds 6")
938924
939- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
925+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
940926 }
941- $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
927+ $Tuple2(makeString(de._1, "_"), makeString(de._2, "_"))
942928 }
943929 }
944930
945931
946-func eP (eQ) = if ((eQ >= toBigInt(0)))
947- then eQ
948- else -(eQ)
949-
950-
951-let eR = [[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]]
952-
953-func eS (bY,eT) = {
954- let eU = toInt((bY % cm))
955- let eV = if ((eT[0] > eU))
932+func eQ (eR) = if ((eR >= toBigInt(0)))
933+ then eR
934+ else -(eR)
935+
936+
937+let eS = [[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]]
938+
939+func eT (bZ,eU) = {
940+ let eV = toInt((bZ % co))
941+ let eW = if ((eU[0] > eV))
956942 then "A"
957- else if ((eT[1] > eU))
943+ else if ((eU[1] > eV))
958944 then "B"
959- else if ((eT[2] > eU))
945+ else if ((eU[2] > eV))
960946 then "C"
961- else if ((eT[3] > eU))
947+ else if ((eU[3] > eV))
962948 then "D"
963- else if ((eT[4] > eU))
949+ else if ((eU[4] > eV))
964950 then "E"
965951 else "F"
966- eV
967- }
968-
969-
970-func eW (eX,eY) = {
971- let eZ = eR[eY]
972- func fa (cR,cS) = $Tuple2((((((cR._1 + eS(cR._2, eZ)) + eS((cR._2 / cm), eZ)) + eS((cR._2 / cn), eZ)) + eS((cR._2 / co), eZ)) + eS((cR._2 / cp), eZ)), (cR._2 / cq))
973-
974- let fb = {
975- let cT = [1, 2, 3, 4, 5]
976- let cU = size(cT)
977- let cV = $Tuple2("", (eX / cl))
978- func cW (cX,cY) = if ((cY >= cU))
979- then cX
980- else fa(cX, cT[cY])
981-
982- func cZ (cX,cY) = if ((cY >= cU))
983- then cX
952+ eW
953+ }
954+
955+
956+func eX (eY,eZ) = {
957+ let fa = eS[eZ]
958+ func fb (cT,cU) = $Tuple2((((((cT._1 + eT(cT._2, fa)) + eT((cT._2 / co), fa)) + eT((cT._2 / cp), fa)) + eT((cT._2 / cq), fa)) + eT((cT._2 / cr), fa)), (cT._2 / cs))
959+
960+ let fc = {
961+ let cV = [1, 2, 3, 4, 5]
962+ let cW = size(cV)
963+ let cX = $Tuple2("", (eY / cn))
964+ func cY (cZ,da) = if ((da >= cW))
965+ then cZ
966+ else fb(cZ, cV[da])
967+
968+ func db (cZ,da) = if ((da >= cW))
969+ then cZ
984970 else throw("List size exceeds 5")
985971
986- cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
987- }
988- fb._1
989- }
990-
991-
992-func fc (fd) = {
993- let fe = split(valueOrElse(getString(fd), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
994-[toString(valueOrElse(parseInt(fe[ax]), 0)), if ((size(split(fe[ay], "_")) == Z))
995- then fe[ay]
996- else "0_0_0_0_0_0", if ((size(split(fe[az], "_")) == Z))
997- then fe[az]
998- else "0_0_0_0_0_0", fe[aA]]
999- }
1000-
1001-
1002-func ff (fg) = {
1003- let du = split(fg, "_")
1004- ((ac * (parseIntValue(du[1]) + 1)) * parseIntValue(du[0]))
1005- }
1006-
1007-
1008-func fh (fi) = {
1009- let fj = fi[ar]
1010- func fk (cR,dp) = (cR + parseIntValue(dp))
1011-
1012- func fl (cR,dp) = {
1013- let bI = cR._1
1014- let fm = (((parseIntValue(dp) + an) - 1) / an)
1015- $Tuple2((bI + 1), (cR._2 + (fm * bp)))
1016- }
1017-
1018- let fn = {
1019- let cT = split(fi[ap], "_")
1020- let cU = size(cT)
1021- let cV = 0
1022- func cW (cX,cY) = if ((cY >= cU))
1023- then cX
1024- else fk(cX, cT[cY])
1025-
1026- func cZ (cX,cY) = if ((cY >= cU))
1027- then cX
972+ db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5)
973+ }
974+ fc._1
975+ }
976+
977+
978+func fd (fe) = {
979+ let ff = split(valueOrElse(getString(fe), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
980+[toString(valueOrElse(parseInt(ff[ay]), 0)), if ((size(split(ff[az], "_")) == aa))
981+ then ff[az]
982+ else "0_0_0_0_0_0", if ((size(split(ff[aA], "_")) == aa))
983+ then ff[aA]
984+ else "0_0_0_0_0_0", ff[aB]]
985+ }
986+
987+
988+func fg (fh) = {
989+ let dr = split(fh, "_")
990+ ((ad * (parseIntValue(dr[1]) + 1)) * parseIntValue(dr[0]))
991+ }
992+
993+
994+func fi (fj) = {
995+ let fk = fj[as]
996+ func fl (cT,fm) = (cT + parseIntValue(fm))
997+
998+ func fn (cT,fm) = {
999+ let bJ = cT._1
1000+ let fo = (((parseIntValue(fm) + ao) - 1) / ao)
1001+ $Tuple2((bJ + 1), (cT._2 + (fo * bq)))
1002+ }
1003+
1004+ let fp = {
1005+ let cV = split(fj[aq], "_")
1006+ let cW = size(cV)
1007+ let cX = 0
1008+ func cY (cZ,da) = if ((da >= cW))
1009+ then cZ
1010+ else fl(cZ, cV[da])
1011+
1012+ func db (cZ,da) = if ((da >= cW))
1013+ then cZ
10281014 else throw("List size exceeds 6")
10291015
1030- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1031- }
1032- let fo = {
1033- let cT = split(fi[aq], "_")
1034- let cU = size(cT)
1035- let cV = 0
1036- func fp (cX,cY) = if ((cY >= cU))
1037- then cX
1038- else fk(cX, cT[cY])
1039-
1040- func fq (cX,cY) = if ((cY >= cU))
1041- then cX
1016+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
1017+ }
1018+ let fq = {
1019+ let cV = split(fj[ar], "_")
1020+ let cW = size(cV)
1021+ let cX = 0
1022+ func fr (cZ,da) = if ((da >= cW))
1023+ then cZ
1024+ else fl(cZ, cV[da])
1025+
1026+ func fs (cZ,da) = if ((da >= cW))
1027+ then cZ
10421028 else throw("List size exceeds 6")
10431029
1044- fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1045- }
1046- let fr = if ((fj == ""))
1030+ fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6)
1031+ }
1032+ let ft = if ((fk == ""))
10471033 then 0
1048- else ( let cT = split_4C(fj, "_")
1049- let cU = size(cT)
1050- let cV = $Tuple2(0, 0)
1051- func fs (cX,cY) = if ((cY >= cU))
1052- then cX
1053- else fl(cX, cT[cY])
1054-
1055- func ft (cX,cY) = if ((cY >= cU))
1056- then cX
1034+ else ( let cV = split_4C(fk, "_")
1035+ let cW = size(cV)
1036+ let cX = $Tuple2(0, 0)
1037+ func fu (cZ,da) = if ((da >= cW))
1038+ then cZ
1039+ else fn(cZ, cV[da])
1040+
1041+ func fv (cZ,da) = if ((da >= cW))
1042+ then cZ
10571043 else throw("List size exceeds 50")
10581044
1059- ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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
1060- ((fn + fo) + fr)
1061- }
1062-
1063-
1064-func fu (fv,fw,fx) = {
1065- let fg = ((toString(fw) + "_") + toString(fx))
1066- let fy = ff(fg)
1067- let fz = valueOrElse(getString(fv), (fg + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1068- let fA = split_4C(fz, ":")
1069- let fB = fh(fA)
1070- let fC = if ((5 > size(fA)))
1071- then makeString(["0", toString(fB), toString((fy - fB)), toString(fy)], "_")
1072- else {
1073- let fD = split(fA[as], "_")
1074- let fE = parseIntValue(fD[at])
1075- let fF = if ((size(fD) > 1))
1076- then parseIntValue(fD[au])
1077- else fB
1078- makeString([toString(fE), toString(fF), toString(((fy - fE) - fF)), toString(fy)], "_")
1079- }
1080-[fA[ao], if ((size(split(fA[ap], "_")) == Z))
1081- then fA[ap]
1082- else "0_0_0_0_0_0", if ((size(split(fA[aq], "_")) == Z))
1083- then fA[aq]
1084- else "0_0_0_0_0_0", fA[ar], fC]
1085- }
1086-
1087-
1088-func fG (fi) = {
1089- let fH = fh(fi)
1090- let fI = parseIntValue(split(fi[as], "_")[at])
1091- ((ff(fi[ao]) - fH) - fI)
1092- }
1093-
1094-
1095-func fJ (fK,fL) = {
1096- let fm = if ((fK >= 0))
1097- then (((fK + fL) - 1) / fL)
1098- else -((((-(fK) + fL) - 1) / fL))
1099- (fm * bp)
1100- }
1101-
1102-
1103-func fM (fN,fi,fO) = if ((size(fN) != 3))
1045+ fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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
1046+ ((fp + fq) + ft)
1047+ }
1048+
1049+
1050+func fw (fx,fy,fz) = {
1051+ let fh = ((toString(fy) + "_") + toString(fz))
1052+ let fA = fg(fh)
1053+ let fB = valueOrElse(getString(fx), (fh + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1054+ let fC = split_4C(fB, ":")
1055+ let fD = fi(fC)
1056+ let fE = if ((5 > size(fC)))
1057+ then makeString(["0", toString(fD), toString((fA - fD)), toString(fA)], "_")
1058+ else {
1059+ let fF = split(fC[at], "_")
1060+ let fG = parseIntValue(fF[au])
1061+ let fH = if ((size(fF) > 1))
1062+ then parseIntValue(fF[av])
1063+ else fD
1064+ makeString([toString(fG), toString(fH), toString(((fA - fG) - fH)), toString(fA)], "_")
1065+ }
1066+[fC[ap], if ((size(split(fC[aq], "_")) == aa))
1067+ then fC[aq]
1068+ else "0_0_0_0_0_0", if ((size(split(fC[ar], "_")) == aa))
1069+ then fC[ar]
1070+ else "0_0_0_0_0_0", fC[as], fE]
1071+ }
1072+
1073+
1074+func fI (fj) = {
1075+ let fJ = fi(fj)
1076+ let fK = parseIntValue(split(fj[at], "_")[au])
1077+ ((fg(fj[ap]) - fJ) - fK)
1078+ }
1079+
1080+
1081+func fL (fM,fN) = {
1082+ let fo = if ((fM >= 0))
1083+ then (((fM + fN) - 1) / fN)
1084+ else -((((-(fM) + fN) - 1) / fN))
1085+ (fo * bq)
1086+ }
1087+
1088+
1089+func fO (fP,fj,fQ) = if ((size(fP) != 3))
11041090 then throw("cargoListStr should contain exactly 2 ':' separators")
11051091 else {
1106- let fP = split(fN[0], "_")
1107- let fQ = split(fN[1], "_")
1108- let fR = if ((fN[2] == ""))
1092+ let fR = split(fP[0], "_")
1093+ let fS = split(fP[1], "_")
1094+ let fT = if ((fP[2] == ""))
11091095 then nil
1110- else split(fN[2], "_")
1111- if ((size(fP) != Z))
1096+ else split(fP[2], "_")
1097+ if ((size(fR) != aa))
11121098 then throw("All 6 resources should be passed")
1113- else if ((size(fQ) != Z))
1099+ else if ((size(fS) != aa))
11141100 then throw("All 6 materials should be passed")
11151101 else {
1116- let eJ = fG(fi)
1117- let fS = split(fi[ap], "_")
1118- let fT = split(fi[aq], "_")
1119- let fU = if ((fi[ar] == ""))
1102+ let eK = fI(fj)
1103+ let fU = split(fj[aq], "_")
1104+ let fV = split(fj[ar], "_")
1105+ let fW = if ((fj[as] == ""))
11201106 then nil
1121- else split(fi[ar], "_")
1122- let eH = split(fO[ay], "_")
1123- let fV = split(fO[az], "_")
1124- let fW = if ((fO[aA] == ""))
1107+ else split(fj[as], "_")
1108+ let eI = split(fQ[az], "_")
1109+ let fX = split(fQ[aA], "_")
1110+ let fY = if ((fQ[aB] == ""))
11251111 then nil
1126- else split(fO[aA], "_")
1127- func fX (cR,dp) = {
1128- let eu = cR._1
1129- let fY = parseIntValue(dp)
1130- let fZ = parseIntValue(fS[eu])
1131- let ga = parseIntValue(eH[eu])
1132- if ((fY == 0))
1133- then $Tuple4((eu + 1), (cR._2 :+ fS[eu]), (cR._3 :+ eH[eu]), cR._4)
1134- else if ((fY > 0))
1135- then if ((fY > ga))
1136- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(ga)) + " available"))
1137- else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1138- else if ((-(fY) > fZ))
1139- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(fZ)) + " available"))
1140- else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1112+ else split(fQ[aB], "_")
1113+ func fZ (cT,fm) = {
1114+ let ev = cT._1
1115+ let ga = parseIntValue(fm)
1116+ let gb = parseIntValue(fU[ev])
1117+ let gc = parseIntValue(eI[ev])
1118+ if ((ga == 0))
1119+ then $Tuple4((ev + 1), (cT._2 :+ fU[ev]), (cT._3 :+ eI[ev]), cT._4)
1120+ else if ((ga > 0))
1121+ then if ((ga > gc))
1122+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gc)) + " available"))
1123+ else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga))
1124+ else if ((-(ga) > gb))
1125+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gb)) + " available"))
1126+ else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga))
11411127 }
11421128
1143- let dc = {
1144- let cT = fP
1145- let cU = size(cT)
1146- let cV = $Tuple4(0, nil, nil, 0)
1147- func cW (cX,cY) = if ((cY >= cU))
1148- then cX
1149- else fX(cX, cT[cY])
1150-
1151- func cZ (cX,cY) = if ((cY >= cU))
1152- then cX
1129+ let de = {
1130+ let cV = fR
1131+ let cW = size(cV)
1132+ let cX = $Tuple4(0, nil, nil, 0)
1133+ func cY (cZ,da) = if ((da >= cW))
1134+ then cZ
1135+ else fZ(cZ, cV[da])
1136+
1137+ func db (cZ,da) = if ((da >= cW))
1138+ then cZ
11531139 else throw("List size exceeds 6")
11541140
1155- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1141+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
11561142 }
1157- func gb (cR,dp) = {
1158- let eu = cR._1
1159- let fY = parseIntValue(dp)
1160- let gc = parseIntValue(fT[eu])
1161- let gd = parseIntValue(fV[eu])
1162- if ((fY == 0))
1163- then $Tuple4((eu + 1), (cR._2 :+ fT[eu]), (cR._3 :+ fV[eu]), cR._4)
1164- else if ((fY > 0))
1165- then if ((fY > gd))
1166- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gd)) + " available"))
1167- else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1168- else if ((-(fY) > gc))
1169- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gc)) + " available"))
1170- else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1143+ func gd (cT,fm) = {
1144+ let ev = cT._1
1145+ let ga = parseIntValue(fm)
1146+ let ge = parseIntValue(fV[ev])
1147+ let gf = parseIntValue(fX[ev])
1148+ if ((ga == 0))
1149+ then $Tuple4((ev + 1), (cT._2 :+ fV[ev]), (cT._3 :+ fX[ev]), cT._4)
1150+ else if ((ga > 0))
1151+ then if ((ga > gf))
1152+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gf)) + " available"))
1153+ else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga))
1154+ else if ((-(ga) > ge))
1155+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(ge)) + " available"))
1156+ else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga))
11711157 }
11721158
11731159 let em = {
1174- let cT = fQ
1175- let cU = size(cT)
1176- let cV = $Tuple4(0, nil, nil, dc._4)
1177- func fp (cX,cY) = if ((cY >= cU))
1178- then cX
1179- else gb(cX, cT[cY])
1180-
1181- func fq (cX,cY) = if ((cY >= cU))
1182- then cX
1160+ let cV = fS
1161+ let cW = size(cV)
1162+ let cX = $Tuple4(0, nil, nil, de._4)
1163+ func fr (cZ,da) = if ((da >= cW))
1164+ then cZ
1165+ else gd(cZ, cV[da])
1166+
1167+ func fs (cZ,da) = if ((da >= cW))
1168+ then cZ
11831169 else throw("List size exceeds 6")
11841170
1185- fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1171+ fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6)
11861172 }
1187- func ge (cR,dp) = {
1188- let eu = cR._1
1189- let fY = parseIntValue(dp)
1190- let gf = if ((size(fU) > eu))
1191- then parseIntValue(fU[eu])
1173+ func gg (cT,fm) = {
1174+ let ev = cT._1
1175+ let ga = parseIntValue(fm)
1176+ let gh = if ((size(fW) > ev))
1177+ then parseIntValue(fW[ev])
11921178 else 0
1193- let gg = if ((size(fW) > eu))
1194- then parseIntValue(fW[eu])
1179+ let gi = if ((size(fY) > ev))
1180+ then parseIntValue(fY[ev])
11951181 else 0
1196- if ((fY == 0))
1197- then $Tuple4((eu + 1), (cR._2 :+ toString(gf)), (cR._3 :+ toString(gg)), cR._4)
1198- else if ((fY > 0))
1199- then if ((fY > gg))
1200- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gg)) + " available"))
1182+ if ((ga == 0))
1183+ then $Tuple4((ev + 1), (cT._2 :+ toString(gh)), (cT._3 :+ toString(gi)), cT._4)
1184+ else if ((ga > 0))
1185+ then if ((ga > gi))
1186+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gi)) + " available"))
12011187 else {
1202- let gh = (fJ((gf + fY), an) - fJ(gf, an))
1203- $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
1188+ let gj = (fL((gh + ga), ao) - fL(gh, ao))
1189+ $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj))
12041190 }
1205- else if ((-(fY) > gf))
1206- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available"))
1191+ else if ((-(ga) > gh))
1192+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gh)) + " available"))
12071193 else {
1208- let gh = (fJ((gf + fY), an) - fJ(gf, an))
1209- $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
1194+ let gj = (fL((gh + ga), ao) - fL(gh, ao))
1195+ $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj))
12101196 }
12111197 }
12121198
1213- let fe = if ((size(fR) != 0))
1199+ let ff = if ((size(fT) != 0))
12141200 then {
1215- let cT = fR
1216- let cU = size(cT)
1217- let cV = $Tuple4(0, nil, nil, em._4)
1218- func fs (cX,cY) = if ((cY >= cU))
1219- then cX
1220- else ge(cX, cT[cY])
1221-
1222- func ft (cX,cY) = if ((cY >= cU))
1223- then cX
1201+ let cV = fT
1202+ let cW = size(cV)
1203+ let cX = $Tuple4(0, nil, nil, em._4)
1204+ func fu (cZ,da) = if ((da >= cW))
1205+ then cZ
1206+ else gg(cZ, cV[da])
1207+
1208+ func fv (cZ,da) = if ((da >= cW))
1209+ then cZ
12241210 else throw("List size exceeds 50")
12251211
1226- ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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)
1212+ fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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)
12271213 }
1228- else $Tuple4(0, fU, fW, em._4)
1229- let gi = fe._4
1230- if ((gi > eJ))
1231- then throw((((("Attempt to put total " + toString(gi)) + " stuff, but only ") + toString(eJ)) + " warehouse space left"))
1232- else $Tuple7(makeString(dc._2, "_"), makeString(em._2, "_"), makeString(fe._2, "_"), makeString(dc._3, "_"), makeString(em._3, "_"), makeString(fe._3, "_"), gi)
1214+ else $Tuple4(0, fW, fY, em._4)
1215+ let gk = ff._4
1216+ if ((gk > eK))
1217+ then throw((((("Attempt to put total " + toString(gk)) + " stuff, but only ") + toString(eK)) + " warehouse space left"))
1218+ else $Tuple7(makeString(de._2, "_"), makeString(em._2, "_"), makeString(ff._2, "_"), makeString(de._3, "_"), makeString(em._3, "_"), makeString(ff._3, "_"), gk)
12331219 }
12341220 }
12351221
12361222
1237-func gj (gk,gl) = {
1238- let ba = toString(gk)
1239- let gm = eP(toBigInt(gl))
1240- let gn = valueOrElse(getInteger(cs()), (cr + 1))
1241- let cu = toString(gn)
1242- let eY = toInt((gm % cl))
1243- let ex = eW(gm, eY)
1244- let go = ah[eY]
1245- let gp = Issue(cK(cu, "S"), makeString([cu, "S", ex, go], "_"), 1, 0, false)
1246- let aD = calculateAssetId(gp)
1247- let gq = toBase58String(aD)
1248- $Tuple2([IntegerEntry(cs(), (gn + 1)), gp, StringEntry(ct(cu), gq), StringEntry(aC(gq), ba), StringEntry(cz(cu), ba), IntegerEntry(aG(gq), 0), IntegerEntry(cx(gq, ba), 0), ScriptTransfer(gk, 1, aD)], $Tuple2(gq, go))
1249- }
1250-
1251-
1252-func gr (ba,gs,gt) = if (!(sigVerify_8Kb(gs, gt, cd)))
1223+func gl (gm,gn) = {
1224+ let bb = toString(gm)
1225+ let go = eQ(toBigInt(gn))
1226+ let gp = valueOrElse(getInteger(cu()), (ct + 1))
1227+ let cw = toString(gp)
1228+ let eZ = toInt((go % cn))
1229+ let ey = eX(go, eZ)
1230+ let gq = ai[eZ]
1231+ let gr = Issue(cM(cw, "S"), makeString([cw, "S", ey, gq], "_"), 1, 0, false)
1232+ let aE = calculateAssetId(gr)
1233+ let gs = toBase58String(aE)
1234+ $Tuple2([IntegerEntry(cu(), (gp + 1)), gr, StringEntry(cv(cw), gs), StringEntry(aD(gs), bb), StringEntry(cB(cw), bb), IntegerEntry(aH(gs), 0), IntegerEntry(cz(gs, bb), 0), ScriptTransfer(gm, 1, aE)], $Tuple2(gs, gq))
1235+ }
1236+
1237+
1238+func gt (bb,gu,gv) = if (!(sigVerify_8Kb(gu, gv, cf)))
12531239 then throw("signature does not match")
12541240 else {
1255- let du = split(toUtf8String(gs), ";")
1256- let gu = split(du[0], "|")
1257- let gv = split(gu[cG], "_")
1258- let gw = parseIntValue(gv[0])
1259- let gx = parseIntValue(gv[1])
1260- let gy = split(du[1], ":")
1261- let gz = gy[0]
1262- let gA = parseIntValue(gu[cH])
1263- if (if ((gA > (lastBlock.timestamp + cf)))
1241+ let dr = split(toUtf8String(gu), ";")
1242+ let gw = split(dr[0], "|")
1243+ let gx = split(gw[cI], "_")
1244+ let gy = parseIntValue(gx[0])
1245+ let gz = parseIntValue(gx[1])
1246+ let gA = split(dr[1], ":")
1247+ let gB = gA[0]
1248+ let gC = parseIntValue(gw[cJ])
1249+ if (if ((gC > (lastBlock.timestamp + ch)))
12641250 then true
1265- else ((lastBlock.timestamp - cf) > gA))
1266- then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp)))
1251+ else ((lastBlock.timestamp - ch) > gC))
1252+ then throw(((("signature outdated: logTime=" + toString(gC)) + ", bcTime=") + toString(lastBlock.timestamp)))
12671253 else {
1268- let gB = gy[1]
1269- let gC = valueOrElse(getString(aB(ba)), "")
1270- if ((gC != gB))
1271- then throw(((("Tx ids don't match! In state: " + gC) + ", in msg: ") + gB))
1254+ let gD = gA[1]
1255+ let gE = valueOrElse(getString(aC(bb)), "")
1256+ if ((gE != gD))
1257+ then throw(((("Tx ids don't match! In state: " + gE) + ", in msg: ") + gD))
12721258 else {
1273- let q = valueOrErrorMessage(getString(aV(ba)), "You don't have a duck staked")
1274- let gD = p(q)
1275- let gE = L(valueOrElse(getInteger(t(q)), 0))
1276- let gF = valueOrElse(getInteger(gD), gE)
1277- if ((gF != gw))
1278- then throw(((("oldHealth=" + toString(gF)) + " from state does not match one from flight log=") + toString(gw)))
1279- else if ((0 >= gw))
1259+ let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked")
1260+ let gF = q(r)
1261+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1262+ let gH = valueOrElse(getInteger(gF), gG)
1263+ if ((gH != gy))
1264+ then throw(((("oldHealth=" + toString(gH)) + " from state does not match one from flight log=") + toString(gy)))
1265+ else if ((0 >= gy))
12801266 then throw("You can't fly with zero health")
12811267 else {
1282- let gG = if ((size(gu) > cI))
1283- then gu[cI]
1268+ let gI = if ((size(gw) > cK))
1269+ then gw[cK]
12841270 else ""
1285- let gH = if ((size(gu) > cJ))
1286- then gu[cJ]
1271+ let gJ = if ((size(gw) > cL))
1272+ then gw[cL]
12871273 else ""
1288- let gI = if (if ((gx > 0))
1289- then (gG == "$")
1274+ let gK = if (if ((gz > 0))
1275+ then (gI == "$")
12901276 else false)
1291- then bX(invoke(bJ, "sendUsdtPrize", [ba], nil))
1277+ then bY(invoke(bK, "sendUsdtPrize", [bb], nil))
12921278 else 0
1293- $Tuple5(gx, q, gI, gz, gH)
1279+ $Tuple5(gz, r, gK, gB, gJ)
12941280 }
12951281 }
12961282 }
12971283 }
12981284
12991285
1300-func gJ (gk,gl,gs,gt) = {
1301- let ba = toString(gk)
1302- let eZ = gr(ba, gs, gt)
1303- let gD = p(eZ._2)
1304- let fd = aW(eZ._2)
1305- let fO = fc(fd)
1306- let gK = split(fO[az], "_")
1307- let gL = makeString(dd(true, gK, cj), "_")
1308- let dz = dk(fO[aA], eZ._5)
1309- if ((0 >= eZ._1))
1310- then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0)
1311- else {
1312- let gM = gj(gk, gl)
1313- let gq = gM._2._1
1314- $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3)
1315- }
1316- }
1317-
1318-
1319-func gN (aN,gO) = {
1320- let fx = valueOrElse(getInteger(aG(aN)), 0)
1321- let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1322- let gQ = (fx / 6)
1323- let gR = (fx / 7)
1324- ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5)))
1325- }
1326-
1327-
1328-func gS (b,gT,gU) = {
1329- let gV = if ((gT == cD))
1330- then $Tuple2(gU, valueOrElse(getString(aV(b)), ""))
1331- else {
1332- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1333- let gW = valueOrElse(getString(aX(q)), ad)
1334- let gX = split(value(gW), "_")
1335- if ((gX[bc] != "L"))
1336- then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
1337- else $Tuple2(gX[bd], q)
1338- }
1339- let aN = gV._1
1340- let gY = gV._2
1341- let gZ = value(assetInfo(fromBase58String(aN)))
1342- let ha = aF(aN)
1343- let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked"))
1344- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1345- if ((hc != b))
1346- then throw((W + " is not yours"))
1347- else {
1348- let hd = split(gZ.description, "_")
1349- $Tuple4(gY, aN, hd, hb)
1350- }
1351- }
1352-
1353-
1354-func he (b,fK,gT,gU) = if ((0 > fK))
1286+func gL (gm,gn,gu,gv) = {
1287+ let bb = toString(gm)
1288+ let fa = gt(bb, gu, gv)
1289+ let r = fa._2
1290+ let gF = q(r)
1291+ let fe = aX(r)
1292+ let fQ = fd(fe)
1293+ let gM = split(fQ[aA], "_")
1294+ let gN = makeString(df(true, gM, cl), "_")
1295+ let gO = w(r)
1296+ let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,")
1297+ let gQ = dm(gP, fa._5)
1298+ if ((0 >= fa._1))
1299+ then $Tuple3([IntegerEntry(gF, 0), StringEntry(gO, gQ)], "", 0)
1300+ else {
1301+ let gR = gl(gm, gn)
1302+ let gs = gR._2._1
1303+ $Tuple3(((((gR._1 :+ StringEntry(aY(r), makeString([gR._2._2, "L", gs], "_"))) :+ IntegerEntry(gF, fa._1)) :+ StringEntry(gO, gQ)) :+ StringEntry(fe, makeString([fQ[ay], fQ[az], gN, fQ[aB]], ":"))), gs, fa._3)
1304+ }
1305+ }
1306+
1307+
1308+func gS (aO,gT) = {
1309+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1310+ let gU = valueOrElse(getInteger(aI(Z, aO)), 0)
1311+ let gV = (fz / 6)
1312+ let gW = (fz / 7)
1313+ ((ab + fraction(ab, ((fz + gV) + (2 * gW)), 5)) + fraction(ab, gU, (gT * 5)))
1314+ }
1315+
1316+
1317+func gX (b,gY,gZ) = {
1318+ let ha = if ((gY == cF))
1319+ then $Tuple2(gZ, valueOrElse(getString(aW(b)), ""))
1320+ else {
1321+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1322+ let hb = valueOrElse(getString(aY(r)), ae)
1323+ let hc = split(value(hb), "_")
1324+ if ((hc[bd] != "L"))
1325+ then throw((("Duck location type is " + hc[bd]) + ", but should be L"))
1326+ else $Tuple2(hc[be], r)
1327+ }
1328+ let aO = ha._1
1329+ let hd = ha._2
1330+ let he = value(assetInfo(fromBase58String(aO)))
1331+ let hf = aG(aO)
1332+ let hg = valueOrErrorMessage(getInteger(hf), (("Land " + he.name) + " is not staked"))
1333+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
1334+ if ((hh != b))
1335+ then throw((X + " is not yours"))
1336+ else {
1337+ let hi = split(he.description, "_")
1338+ $Tuple4(hd, aO, hi, hg)
1339+ }
1340+ }
1341+
1342+
1343+func hj (b,fM,gY,gZ) = if ((0 > fM))
13551344 then throw("Negative amount")
13561345 else {
1357- let dX = gS(b, gT, gU)
1358- let ca = dX._3[bO]
1359- let eq = ew(dX._3[bP])
1360- let eA = (lastBlock.timestamp - dX._4)
1361- if ((0 > eA))
1346+ let dX = gX(b, gY, gZ)
1347+ let cb = dX._3[bP]
1348+ let er = ex(dX._3[bQ])
1349+ let eB = (lastBlock.timestamp - dX._4)
1350+ if ((0 > eB))
13621351 then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp)))
13631352 else {
1364- let gO = bZ(ca)
1365- let hf = gN(dX._2, gO)
1366- let hg = fraction(eA, (hf * gO), ab)
1367- if ((fK > hg))
1368- then throw(((("Not enough resources, available = " + toString(hg)) + ", requested = ") + toString(fK)))
1353+ let gT = ca(cb)
1354+ let hk = gS(dX._2, gT)
1355+ let hl = fraction(eB, (hk * gT), ac)
1356+ if ((fM > hl))
1357+ then throw(((("Not enough resources, available = " + toString(hl)) + ", requested = ") + toString(fM)))
13691358 else {
1370- let hh = fraction((hg - fK), ab, (hf * gO))
1371- let hi = (lastBlock.timestamp - hh)
1372- let fw = (gO / bq)
1373- let eI = eE(eq, (eA - hh), fw, hf)
1374- let fv = aM(dX._2)
1375- let fx = valueOrElse(getInteger(aG(dX._2)), 0)
1376- let fi = fu(fv, fw, fx)
1377- let fD = split(fi[as], "_")
1378- let eJ = parseIntValue(fD[av])
1379- if (if ((gT == cD))
1380- then (fK > eJ)
1359+ let hm = fraction((hl - fM), ac, (hk * gT))
1360+ let hn = (lastBlock.timestamp - hm)
1361+ let fy = (gT / br)
1362+ let eJ = eF(er, (eB - hm), fy, hk)
1363+ let fx = aN(dX._2)
1364+ let fz = valueOrElse(getInteger(aH(dX._2)), 0)
1365+ let fj = fw(fx, fy, fz)
1366+ let fF = split(fj[at], "_")
1367+ let eK = parseIntValue(fF[aw])
1368+ if (if ((gY == cF))
1369+ then (fM > eK)
13811370 else false)
1382- then throw((("Only " + toString(eJ)) + " space left in warehouse"))
1371+ then throw((("Only " + toString(eK)) + " space left in warehouse"))
13831372 else {
1384- let fd = aW(dX._1)
1385- let fO = fc(fd)
1386- let eH = split(fO[ay], "_")
1387- let eG = split(fi[ap], "_")
1388- let hj = if ((gT == cD))
1389- then $Tuple4(ey(eG, eq, (eA - hh), fw, hf), fO[ay], (parseIntValue(fD[au]) + eI._2), (parseIntValue(fD[av]) - eI._2))
1390- else if ((gT == cE))
1391- then $Tuple4(fi[ap], ey(eH, eq, (eA - hh), fw, hf), parseIntValue(fD[au]), parseIntValue(fD[av]))
1373+ let fe = aX(dX._1)
1374+ let fQ = fd(fe)
1375+ let eI = split(fQ[az], "_")
1376+ let eH = split(fj[aq], "_")
1377+ let ho = if ((gY == cF))
1378+ then $Tuple4(ez(eH, er, (eB - hm), fy, hk), fQ[az], (parseIntValue(fF[av]) + eJ._2), (parseIntValue(fF[aw]) - eJ._2))
1379+ else if ((gY == cG))
1380+ then $Tuple4(fj[aq], ez(eI, er, (eB - hm), fy, hk), parseIntValue(fF[av]), parseIntValue(fF[aw]))
13921381 else {
1393- let hk = eF(eG, eH, eI, eJ)
1394- let hl = min([parseIntValue(fD[av]), eI._2])
1395- $Tuple4(hk._1, hk._2, (parseIntValue(fD[au]) + hl), (parseIntValue(fD[av]) - hl))
1382+ let hp = eG(eH, eI, eJ, eK)
1383+ let hq = min([parseIntValue(fF[aw]), eJ._2])
1384+ $Tuple4(hp._1, hp._2, (parseIntValue(fF[av]) + hq), (parseIntValue(fF[aw]) - hq))
13961385 }
1397- let hm = hj._1
1398- let hn = hj._2
1399- let ho = hj._3
1400- let hp = hj._4
1401- $Tuple5([IntegerEntry(aF(dX._2), hi), IntegerEntry(aJ(W, dX._2, b), hi)], fd, [fO[ax], hn, fO[az], fO[aA]], fv, [fi[ao], hm, fi[aq], fi[ar], makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")])
1386+ let hr = ho._1
1387+ let hs = ho._2
1388+ let ht = ho._3
1389+ let hu = ho._4
1390+ $Tuple5([IntegerEntry(aG(dX._2), hn), IntegerEntry(aK(X, dX._2, b), hn)], fe, [fQ[ay], hs, fQ[aA], fQ[aB]], fx, [fj[ap], hr, fj[ar], fj[as], makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")])
14021391 }
14031392 }
14041393 }
14051394 }
14061395
14071396
1408-func hq (b,aN,gO,gT) = {
1409- let ha = aF(aN)
1410- let hb = value(getInteger(ha))
1411- let hg = (fraction((lastBlock.timestamp - hb), gN(aN, gO), ab) * gO)
1412- he(b, hg, gT, aN)
1413- }
1414-
1415-
1416-func hr (de,gk,hs,aN) = {
1417- let b = toString(gk)
1418- let dX = gS(b, cF, aN)
1419- let gO = bZ(dX._3[bO])
1420- let ht = aG(dX._2)
1421- let hu = valueOrElse(getInteger(ht), 0)
1422- if ((hu >= 3))
1397+func hv (b,aO,gT,gY) = {
1398+ let hf = aG(aO)
1399+ let hg = value(getInteger(hf))
1400+ let hl = (fraction((lastBlock.timestamp - hg), gS(aO, gT), ac) * gT)
1401+ hj(b, hl, gY, aO)
1402+ }
1403+
1404+
1405+func hw (dg,gm,hx,aO) = {
1406+ let b = toString(gm)
1407+ let dX = gX(b, cH, aO)
1408+ let gT = ca(dX._3[bP])
1409+ let hy = aH(dX._2)
1410+ let hz = valueOrElse(getInteger(hy), 0)
1411+ if ((hz >= 3))
14231412 then throw("Currently max infrastructure level = 3")
14241413 else {
1425- let Q = (hu + 1)
1426- let hv = fraction(ci, (gO * Q), bq)
1427- if (if (!(de))
1428- then (hs != hv)
1414+ let R = (hz + 1)
1415+ let hA = fraction(ck, (gT * R), br)
1416+ if (if (!(dg))
1417+ then (hx != hA)
14291418 else false)
1430- then throw(("Payment attached should be " + toString(hv)))
1419+ then throw(("Payment attached should be " + toString(hA)))
14311420 else {
1432- let fd = aW(dX._1)
1433- let fO = fc(fd)
1434- let gK = split(fO[az], "_")
1435- let hw = fraction(bl, (gO * Q), bq)
1436- let gL = makeString(dd(de, gK, hw), "_")
1437- let hx = hq(b, dX._2, gO, cF)
1438- let hy = hx._5
1439- let hz = ff(hy[ao])
1440- let hA = makeString([split(hy[ao], "_")[0], toString(Q)], "_")
1441- let hB = ff(hA)
1442- let fD = split(hy[as], "_")
1443- let hC = makeString([fD[at], fD[au], toString(((parseIntValue(fD[av]) + hB) - hz)), toString(hB)], "_")
1444- $Tuple3(([IntegerEntry(ht, Q), IntegerEntry(cx(dX._2, b), Q), StringEntry(fd, makeString([fO[ax], hx._3[ay], gL, fO[aA]], ":")), StringEntry(hx._4, makeString([hA, hy[ap], hy[aq], hy[ar], hC], ":"))] ++ hx._1), Q, hw)
1421+ let fe = aX(dX._1)
1422+ let fQ = fd(fe)
1423+ let gM = split(fQ[aA], "_")
1424+ let hB = fraction(bm, (gT * R), br)
1425+ let gN = makeString(df(dg, gM, hB), "_")
1426+ let hC = hv(b, dX._2, gT, cH)
1427+ let hD = hC._5
1428+ let hE = fg(hD[ap])
1429+ let hF = makeString([split(hD[ap], "_")[0], toString(R)], "_")
1430+ let hG = fg(hF)
1431+ let fF = split(hD[at], "_")
1432+ let hH = makeString([fF[au], fF[av], toString(((parseIntValue(fF[aw]) + hG) - hE)), toString(hG)], "_")
1433+ $Tuple3(([IntegerEntry(hy, R), IntegerEntry(cz(dX._2, b), R), StringEntry(fe, makeString([fQ[ay], hC._3[az], gN, fQ[aB]], ":")), StringEntry(hC._4, makeString([hF, hD[aq], hD[ar], hD[as], hH], ":"))] ++ hC._1), R, hB)
14451434 }
14461435 }
14471436 }
14481437
14491438
1450-func hD (q,hE) = if (!(bg))
1439+func hI (r,hJ) = if (!(bh))
14511440 then $Tuple2(nil, 0)
14521441 else {
1453- let hF = t(q)
1454- let hG = s(q)
1455- let K = valueOrElse(getInteger(S, hG), 0)
1456- let P = (K + hE)
1457- let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1458- let hI = u(q)
1459- $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1460- }
1461-
1462-
1463-func hJ (b,hE) = if (!(bg))
1442+ let hK = u(r)
1443+ let hL = t(r)
1444+ let L = valueOrElse(getInteger(T, hL), 0)
1445+ let Q = (L + hJ)
1446+ let hM = O(valueOrElse(getInteger(T, hK), 0), Q)
1447+ let hN = v(r)
1448+ $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q)
1449+ }
1450+
1451+
1452+func hO (b,hJ) = if (!(bh))
14641453 then $Tuple2(nil, 0)
14651454 else {
1466- let hF = x(b)
1467- let hG = w(b)
1468- let K = valueOrElse(getInteger(S, hG), 0)
1469- let P = (K + hE)
1470- let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1471- let hI = y(b)
1472- $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1473- }
1474-
1475-
1476-func hK (b) = {
1477- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1478- let hL = aQ(b)
1479- let hM = getString(hL)
1480- if (!(isDefined(hM)))
1455+ let hK = y(b)
1456+ let hL = x(b)
1457+ let L = valueOrElse(getInteger(T, hL), 0)
1458+ let Q = (L + hJ)
1459+ let hM = O(valueOrElse(getInteger(T, hK), 0), Q)
1460+ let hN = z(b)
1461+ $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q)
1462+ }
1463+
1464+
1465+func hP (b) = {
1466+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1467+ let hQ = aR(b)
1468+ let hR = getString(hQ)
1469+ if (!(isDefined(hR)))
14811470 then throw("You are not eligible for ONBOARD artifact")
14821471 else {
1483- let hN = aS(b)
1484- let hO = getString(hN)
1485- if (isDefined(hO))
1486- then throw(("You already used your ONBOARD artifact on duck " + value(hO)))
1472+ let hS = aT(b)
1473+ let hT = getString(hS)
1474+ if (isDefined(hT))
1475+ then throw(("You already used your ONBOARD artifact on duck " + value(hT)))
14871476 else {
1488- let hP = aR(q)
1489- let hQ = getString(hP)
1490- if (isDefined(hQ))
1491- then throw(((("The duck " + q) + " already got points from ONBOARD artifact from user ") + value(hQ)))
1492- else ([StringEntry(hN, q), StringEntry(hP, b)] ++ hD(q, H)._1)
1477+ let hU = aS(r)
1478+ let hV = getString(hU)
1479+ if (isDefined(hV))
1480+ then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(hV)))
1481+ else ([StringEntry(hS, r), StringEntry(hU, b)] ++ hI(r, I)._1)
14931482 }
14941483 }
14951484 }
14961485
14971486
1498-func hR (b,gU) = {
1499- let dX = gS(b, cF, gU)
1500- let aN = dX._2
1501- let gO = bZ(dX._3[bO])
1502- let hS = aH(Y, aN)
1503- if ((valueOrElse(getInteger(hS), 0) > 0))
1487+func hW (b,gZ) = {
1488+ let dX = gX(b, cH, gZ)
1489+ let aO = dX._2
1490+ let gT = ca(dX._3[bP])
1491+ let hX = aI(Z, aO)
1492+ if ((valueOrElse(getInteger(hX), 0) > 0))
15041493 then throw("Presale artifact is already activated")
1505- else if ((parseIntValue(dX._3[bN]) > cr))
1506- then throw((((W + " ") + aN) + " is not eligible for presale artifact"))
1494+ else if ((parseIntValue(dX._3[bO]) > ct))
1495+ then throw((((X + " ") + aO) + " is not eligible for presale artifact"))
15071496 else {
1508- let hx = hq(b, aN, gO, cF)
1509- ((((hx._1 :+ IntegerEntry(hS, gO)) :+ IntegerEntry(cy(Y, aN, b), gO)) :+ StringEntry(hx._2, makeString(hx._3, ":"))) :+ StringEntry(hx._4, makeString(hx._5, ":")))
1497+ let hC = hv(b, aO, gT, cH)
1498+ ((((hC._1 :+ IntegerEntry(hX, gT)) :+ IntegerEntry(cA(Z, aO, b), gT)) :+ StringEntry(hC._2, makeString(hC._3, ":"))) :+ StringEntry(hC._4, makeString(hC._5, ":")))
15101499 }
15111500 }
15121501
15131502
1514-func hT (hU,Q,hV,b,hW,gl,hX) = {
1515- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1516- func hY (cR,aN) = {
1517- let gZ = value(assetInfo(fromBase58String(aN)))
1518- let ha = aF(aN)
1519- let hb = valueOrErrorMessage(getInteger(ha), (("NFT " + gZ.name) + " is not staked"))
1520- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1521- if ((hc != b))
1522- then throw((W + " is not yours"))
1503+func hY (hZ,R,ia,b,ib,gn,ic) = {
1504+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1505+ func id (cT,aO) = {
1506+ let he = value(assetInfo(fromBase58String(aO)))
1507+ let hf = aG(aO)
1508+ let hg = valueOrErrorMessage(getInteger(hf), (("NFT " + he.name) + " is not staked"))
1509+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
1510+ if ((hh != b))
1511+ then throw((X + " is not yours"))
15231512 else {
1524- let hd = split(gZ.description, "_")
1525- let go = hd[bQ]
1526- if (if ((cR._3 != ""))
1527- then (cR._3 != go)
1513+ let hi = split(he.description, "_")
1514+ let gq = hi[bR]
1515+ if (if ((cT._3 != ""))
1516+ then (cT._3 != gq)
15281517 else false)
15291518 then throw("Lands should be on the same continent to merge")
15301519 else {
1531- let ca = hd[bO]
1532- let hZ = cR._1
1533- let eu = valueOrErrorMessage(indexOf(hZ, ca), "You haven't passed all the lands needed")
1534- let ia = (take(hZ, eu) + drop(hZ, (eu + 1)))
1535- let gO = bZ(ca)
1536- let ib = (cR._2 + valueOrElse(getInteger(aH(Y, aN)), 0))
1537- let fx = valueOrElse(getInteger(aG(aN)), 0)
1538- let ic = {
1539- let bj = ca
1540- if (("S" == bj))
1520+ let cb = hi[bP]
1521+ let ie = cT._1
1522+ let ev = valueOrErrorMessage(indexOf(ie, cb), "You haven't passed all the lands needed")
1523+ let if = (take(ie, ev) + drop(ie, (ev + 1)))
1524+ let gT = ca(cb)
1525+ let ig = (cT._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1526+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1527+ let ih = {
1528+ let bk = cb
1529+ if (("S" == bk))
15411530 then 3
1542- else if (("M" == bj))
1531+ else if (("M" == bk))
15431532 then 4
1544- else if (("L" == bj))
1533+ else if (("L" == bk))
15451534 then 5
1546- else if (("XL" == bj))
1535+ else if (("XL" == bk))
15471536 then 6
15481537 else throw("Only S, M, L, XL can merge")
15491538 }
1550- if ((fx != ic))
1539+ if ((fz != ih))
15511540 then throw("All lands should be maxed to merge")
15521541 else {
1553- let cu = hd[bN]
1554- let eq = ew(hd[bP])
1555- let eA = (lastBlock.timestamp - hb)
1556- if ((0 > eA))
1557- then throw(((("Saved timestamp is in future, saved = " + toString(hb)) + ", current = ") + toString(lastBlock.timestamp)))
1542+ let cw = hi[bO]
1543+ let er = ex(hi[bQ])
1544+ let eB = (lastBlock.timestamp - hg)
1545+ if ((0 > eB))
1546+ then throw(((("Saved timestamp is in future, saved = " + toString(hg)) + ", current = ") + toString(lastBlock.timestamp)))
15581547 else {
1559- let hf = gN(aN, gO)
1560- let fw = (gO / bq)
1561- let hn = ey(split(cR._4, "_"), eq, eA, fw, hf)
1562- let db = eo(split(cR._6, "_"), eq, fw, -1)
1563- let id = cR._7
1564- let bI = indexOf(id, aN)
1565- if (!(isDefined(bI)))
1566- then throw(("Your staked lands don't contain " + aN))
1548+ let hk = gS(aO, gT)
1549+ let fy = (gT / br)
1550+ let hs = ez(split(cT._4, "_"), er, eB, fy, hk)
1551+ let dd = ep(split(cT._6, "_"), er, fy, -1)
1552+ let ii = cT._7
1553+ let bJ = indexOf(ii, aO)
1554+ if (!(isDefined(bJ)))
1555+ then throw(("Your staked lands don't contain " + aO))
15671556 else {
1568- let ie = aE(aN)
1569- let if = valueOrElse(getString(ie), "")
1570- $Tuple8(ia, ib, go, hn, (((((((((((((cR._5 :+ DeleteEntry(aF(aN))) :+ DeleteEntry(aJ(W, aN, b))) :+ DeleteEntry(ct(cu))) :+ DeleteEntry(aC(aN))) :+ DeleteEntry(aG(aN))) :+ DeleteEntry(cx(aN, b))) :+ DeleteEntry(aH(Y, aN))) :+ DeleteEntry(cy(Y, aN, b))) :+ DeleteEntry(cz(cu))) :+ DeleteEntry(aM(aN))) :+ DeleteEntry(ie)) :+ DeleteEntry(cv(if))) :+ Burn(fromBase58String(aN), 1)), db, removeByIndex(id, value(bI)), (cR._8 + gO))
1557+ let ij = aF(aO)
1558+ let ik = valueOrElse(getString(ij), "")
1559+ $Tuple8(if, ig, gq, hs, (((((((((((((cT._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cv(cw))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cz(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cA(Z, aO, b))) :+ DeleteEntry(cB(cw))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(ij)) :+ DeleteEntry(cx(ik))) :+ Burn(fromBase58String(aO), 1)), dd, removeByIndex(ii, value(bJ)), (cT._8 + gT))
15711560 }
15721561 }
15731562 }
15751564 }
15761565 }
15771566
1578- let fd = aW(q)
1579- let fO = fc(fd)
1580- let ig = valueOrElse(getString(bR()), "0_0_0_0_0_0")
1581- let ih = bS(b)
1582- let ii = getString(ih)
1583- let ij = if (isDefined(ii))
1584- then split_51C(value(ii), "_")
1567+ let fe = aX(r)
1568+ let fQ = fd(fe)
1569+ let il = valueOrElse(getString(bS()), "0_0_0_0_0_0")
1570+ let im = bT(b)
1571+ let in = getString(im)
1572+ let io = if (isDefined(in))
1573+ then split_51C(value(in), "_")
15851574 else nil
1586- let dc = {
1587- let cT = hW
1588- let cU = size(cT)
1589- let cV = $Tuple8(hV, 0, "", fO[ay], nil, ig, ij, 0)
1590- func cW (cX,cY) = if ((cY >= cU))
1591- then cX
1592- else hY(cX, cT[cY])
1593-
1594- func cZ (cX,cY) = if ((cY >= cU))
1595- then cX
1575+ let de = {
1576+ let cV = ib
1577+ let cW = size(cV)
1578+ let cX = $Tuple8(ia, 0, "", fQ[az], nil, il, io, 0)
1579+ func cY (cZ,da) = if ((da >= cW))
1580+ then cZ
1581+ else id(cZ, cV[da])
1582+
1583+ func db (cZ,da) = if ((da >= cW))
1584+ then cZ
15961585 else throw("List size exceeds 5")
15971586
1598- cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
1599- }
1600- let go = dc._3
1601- let eY = valueOrErrorMessage(indexOf(ah, go), ("Unknown continent: " + go))
1602- let ex = eW(eP(toBigInt(gl)), eY)
1603- let gn = valueOrElse(getInteger(cs()), (cr + 1))
1604- let ik = toString(gn)
1605- let gp = Issue(cK(ik, hU), makeString([ik, hU, ex, go], "_"), 1, 0, false)
1606- let aD = calculateAssetId(gp)
1607- let il = toBase58String(aD)
1608- let gL = makeString(dd((hX > 0), split(fO[az], "_"), hX), "_")
1609- let im = bT(b)
1610- let in = valueOrElse(getInteger(im), 0)
1611- $Tuple2((((((((((((((((dc._5 :+ (if ((size(dc._7) > 0))
1612- then StringEntry(ih, makeString_11C(dc._7, "_"))
1613- else DeleteEntry(ih))) :+ IntegerEntry(im, if ((dc._8 > in))
1587+ db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5)
1588+ }
1589+ let gq = de._3
1590+ let eZ = valueOrErrorMessage(indexOf(ai, gq), ("Unknown continent: " + gq))
1591+ let ey = eX(eQ(toBigInt(gn)), eZ)
1592+ let gp = valueOrElse(getInteger(cu()), (ct + 1))
1593+ let ip = toString(gp)
1594+ let gr = Issue(cM(ip, hZ), makeString([ip, hZ, ey, gq], "_"), 1, 0, false)
1595+ let aE = calculateAssetId(gr)
1596+ let iq = toBase58String(aE)
1597+ let gN = makeString(df((ic > 0), split(fQ[aA], "_"), ic), "_")
1598+ let ir = bU(b)
1599+ let is = valueOrElse(getInteger(ir), 0)
1600+ $Tuple2((((((((((((((((de._5 :+ (if ((size(de._7) > 0))
1601+ then StringEntry(im, makeString_11C(de._7, "_"))
1602+ else DeleteEntry(im))) :+ IntegerEntry(ir, if ((de._8 > is))
16141603 then 0
1615- else (in - dc._8))) :+ IntegerEntry(cs(), (gn + 1))) :+ gp) :+ StringEntry(ct(ik), il)) :+ StringEntry(aC(il), b)) :+ StringEntry(cz(ik), b)) :+ IntegerEntry(aH(Y, il), dc._2)) :+ IntegerEntry(cy(Y, il, b), dc._2)) :+ IntegerEntry(aG(il), Q)) :+ IntegerEntry(cx(il, b), Q)) :+ StringEntry(fd, makeString([fO[ax], dc._4, gL, fO[aA]], ":"))) :+ StringEntry(bR(), dc._6)) :+ StringEntry(aX(q), makeString([go, "L", il], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aD)), il)
1616- }
1617-
1618-
1619-func io (b,hW,gl) = hT("M", 3, "SSSS", b, hW, gl, 0)
1620-
1621-
1622-func ip (b,hW,gl,de,hs) = {
1623- let hv = (ci * 4)
1624- if (if (!(de))
1625- then (hs != hv)
1604+ else (is - de._8))) :+ IntegerEntry(cu(), (gp + 1))) :+ gr) :+ StringEntry(cv(ip), iq)) :+ StringEntry(aD(iq), b)) :+ StringEntry(cB(ip), b)) :+ IntegerEntry(aI(Z, iq), de._2)) :+ IntegerEntry(cA(Z, iq, b), de._2)) :+ IntegerEntry(aH(iq), R)) :+ IntegerEntry(cz(iq, b), R)) :+ StringEntry(fe, makeString([fQ[ay], de._4, gN, fQ[aB]], ":"))) :+ StringEntry(bS(), de._6)) :+ StringEntry(aY(r), makeString([gq, "L", iq], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iq)
1605+ }
1606+
1607+
1608+func it (b,ib,gn) = hY("M", 3, "SSSS", b, ib, gn, 0)
1609+
1610+
1611+func iu (b,ib,gn,dg,hx) = {
1612+ let hA = (ck * 4)
1613+ if (if (!(dg))
1614+ then (hx != hA)
16261615 else false)
1627- then throw(("Payment attached should be " + toString(hv)))
1628- else hT("L", 4, "SMM", b, hW, gl, (bl * 4))
1629- }
1630-
1631-
1632-func iq (b,hW,gl,de,hs) = {
1633- let hv = (ci * 47)
1634- if (if (!(de))
1635- then (hs != hv)
1616+ then throw(("Payment attached should be " + toString(hA)))
1617+ else hY("L", 4, "SMM", b, ib, gn, (bm * 4))
1618+ }
1619+
1620+
1621+func iv (b,ib,gn,dg,hx) = {
1622+ let hA = (ck * 47)
1623+ if (if (!(dg))
1624+ then (hx != hA)
16361625 else false)
1637- then throw(("Payment attached should be " + toString(hv)))
1638- else hT("XL", 5, "SSSML", b, hW, gl, (bl * 47))
1639- }
1640-
1641-
1642-func ir (b,hW,gl,de,hs) = {
1643- let hv = (ci * 54)
1644- if (if (!(de))
1645- then (hs != hv)
1626+ then throw(("Payment attached should be " + toString(hA)))
1627+ else hY("XL", 5, "SSSML", b, ib, gn, (bm * 47))
1628+ }
1629+
1630+
1631+func iw (b,ib,gn,dg,hx) = {
1632+ let hA = (ck * 54)
1633+ if (if (!(dg))
1634+ then (hx != hA)
16461635 else false)
1647- then throw(("Payment attached should be " + toString(hv)))
1648- else hT("XXL", 6, "LXL", b, hW, gl, (bl * 54))
1649- }
1650-
1651-
1652-func is (de,b,hs,hW,gl) = {
1653- let it = {
1654- let bj = size(hW)
1655- if ((4 == bj))
1656- then io(b, hW, gl)
1657- else if ((3 == bj))
1658- then ip(b, hW, gl, de, hs)
1659- else if ((5 == bj))
1660- then iq(b, hW, gl, de, hs)
1661- else if ((2 == bj))
1662- then ir(b, hW, gl, de, hs)
1636+ then throw(("Payment attached should be " + toString(hA)))
1637+ else hY("XXL", 6, "LXL", b, ib, gn, (bm * 54))
1638+ }
1639+
1640+
1641+func ix (dg,b,hx,ib,gn) = {
1642+ let iy = {
1643+ let bk = size(ib)
1644+ if ((4 == bk))
1645+ then it(b, ib, gn)
1646+ else if ((3 == bk))
1647+ then iu(b, ib, gn, dg, hx)
1648+ else if ((5 == bk))
1649+ then iv(b, ib, gn, dg, hx)
1650+ else if ((2 == bk))
1651+ then iw(b, ib, gn, dg, hx)
16631652 else throw("Unknown merge")
16641653 }
1665- it
1666- }
1667-
1668-
1669-func iu (eu) = if (if ((eu.originCaller != bJ))
1670- then valueOrElse(getBoolean(aY()), false)
1654+ iy
1655+ }
1656+
1657+
1658+func iz (ev) = if (if ((ev.originCaller != bK))
1659+ then valueOrElse(getBoolean(aZ()), false)
16711660 else false)
16721661 then throw("Contracts are under maintenance")
1673- else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId))
1674-
1675-
1676-@Callable(eu)
1677-func constructorV1 (iv) = if ((eu.caller != this))
1662+ else StringEntry(aC(toString(ev.originCaller)), toBase58String(ev.transactionId))
1663+
1664+
1665+@Callable(ev)
1666+func constructorV1 (iA) = if ((ev.caller != this))
16781667 then throw("Permission denied")
1679- else [StringEntry(bD(), iv)]
1680-
1681-
1682-
1683-@Callable(eu)
1684-func setBlocked (iw) = if ((eu.caller != this))
1668+ else [StringEntry(bE(), iA)]
1669+
1670+
1671+
1672+@Callable(ev)
1673+func setBlocked (iB) = if ((ev.caller != this))
16851674 then throw("permission denied")
1686- else [BooleanEntry(aY(), iw)]
1687-
1688-
1689-
1690-@Callable(eu)
1675+ else [BooleanEntry(aZ(), iB)]
1676+
1677+
1678+
1679+@Callable(ev)
16911680 func stakeLand () = {
1692- let ix = iu(eu)
1693- if ((size(eu.payments) != 1))
1681+ let iC = iz(ev)
1682+ if ((size(ev.payments) != 1))
16941683 then throw("Exactly one payment required")
16951684 else {
1696- let iy = value(eu.payments[0])
1697- let aD = value(iy.assetId)
1698- let bw = toString(eu.caller)
1699- if ((iy.amount != 1))
1700- then throw((("NFT " + W) + " token should be attached as payment"))
1685+ let iD = value(ev.payments[0])
1686+ let aE = value(iD.assetId)
1687+ let bx = toString(ev.caller)
1688+ if ((iD.amount != 1))
1689+ then throw((("NFT " + X) + " token should be attached as payment"))
17011690 else {
1702- let gZ = value(assetInfo(aD))
1703- if ((gZ.issuer != this))
1691+ let he = value(assetInfo(aE))
1692+ if ((he.issuer != this))
17041693 then throw("Unknown issuer of token")
1705- else if (!(contains(gZ.name, W)))
1706- then throw((("Only NFT " + W) + " tokens are accepted"))
1694+ else if (!(contains(he.name, X)))
1695+ then throw((("Only NFT " + X) + " tokens are accepted"))
17071696 else {
1708- let iz = drop(gZ.name, 4)
1709- let cu = if (contains(iz, "XXL"))
1710- then dropRight(iz, 3)
1711- else if (contains(iz, "XL"))
1712- then dropRight(iz, 2)
1713- else dropRight(iz, 1)
1714- if (!(isDefined(parseInt(cu))))
1715- then throw(("Cannot parse land number from " + gZ.name))
1697+ let iE = drop(he.name, 4)
1698+ let cw = if (contains(iE, "XXL"))
1699+ then dropRight(iE, 3)
1700+ else if (contains(iE, "XL"))
1701+ then dropRight(iE, 2)
1702+ else dropRight(iE, 1)
1703+ if (!(isDefined(parseInt(cw))))
1704+ then throw(("Cannot parse land number from " + he.name))
17161705 else {
1717- let aN = toBase58String(aD)
1718- let ha = aF(aN)
1719- if (isDefined(getInteger(ha)))
1720- then throw((("NFT " + gZ.name) + " is already staked"))
1706+ let aO = toBase58String(aE)
1707+ let hf = aG(aO)
1708+ if (isDefined(getInteger(hf)))
1709+ then throw((("NFT " + he.name) + " is already staked"))
17211710 else {
1722- let hd = split(gZ.description, "_")
1723- let eq = ew(hd[bP])
1724- let gO = bZ(hd[bO])
1725- let db = ev(eq, (gO / bq), 1)
1726- let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1727- let ih = bS(bw)
1728- let ii = getString(ih)
1729- let id = if (isDefined(ii))
1730- then split_51C(value(ii), "_")
1711+ let hi = split(he.description, "_")
1712+ let er = ex(hi[bQ])
1713+ let gT = ca(hi[bP])
1714+ let dd = ew(er, (gT / br), 1)
1715+ let gU = valueOrElse(getInteger(aI(Z, aO)), 0)
1716+ let im = bT(bx)
1717+ let in = getString(im)
1718+ let ii = if (isDefined(in))
1719+ then split_51C(value(in), "_")
17311720 else nil
1732- if (containsElement(id, aN))
1733- then throw(("Your staked lands already contain " + aN))
1721+ if (containsElement(ii, aO))
1722+ then throw(("Your staked lands already contain " + aO))
17341723 else {
1735- let fx = valueOrElse(getInteger(aG(aN)), 0)
1736- let im = bT(bw)
1737- let iA = valueOrElse(getInteger(im), 0)
1738- let iB = bX(invoke(bM, "onStakeUnstakeLand", [bw], nil))
1739- $Tuple2([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(W, aN, bw), lastBlock.timestamp), StringEntry(ih, makeString_11C((id :+ aN), "_")), IntegerEntry(im, (iA + gO)), StringEntry(aC(aN), bw), StringEntry(cz(cu), bw), IntegerEntry(cy(Y, aN, bw), gP), IntegerEntry(cx(aN, bw), fx), StringEntry(bR(), db), ix], iB)
1724+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1725+ let ir = bU(bx)
1726+ let iF = valueOrElse(getInteger(ir), 0)
1727+ let iG = bY(invoke(bN, "onStakeUnstakeLand", [bx], nil))
1728+ $Tuple2([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(X, aO, bx), lastBlock.timestamp), StringEntry(im, makeString_11C((ii :+ aO), "_")), IntegerEntry(ir, (iF + gT)), StringEntry(aD(aO), bx), StringEntry(cB(cw), bx), IntegerEntry(cA(Z, aO, bx), gU), IntegerEntry(cz(aO, bx), fz), StringEntry(bS(), dd), iC], iG)
17401729 }
17411730 }
17421731 }
17471736
17481737
17491738
1750-@Callable(eu)
1751-func unstakeLand (gU) = {
1752- let ix = iu(eu)
1753- if ((size(eu.payments) != 0))
1739+@Callable(ev)
1740+func unstakeLand (gZ) = {
1741+ let iC = iz(ev)
1742+ if ((size(ev.payments) != 0))
17541743 then throw("No payments required")
17551744 else {
1756- let b = toString(eu.caller)
1757- let dX = gS(b, cE, gU)
1758- let aN = dX._2
1759- let ih = bS(b)
1760- let eq = ew(dX._3[bP])
1761- let gO = bZ(dX._3[bO])
1762- let db = ev(eq, (gO / bq), -1)
1763- let hx = hq(b, aN, gO, cE)
1764- let id = split_51C(valueOrElse(getString(ih), ""), "_")
1765- let bI = indexOf(id, aN)
1766- if (!(isDefined(bI)))
1767- then throw(("Your staked lands don't contain " + aN))
1745+ let b = toString(ev.caller)
1746+ let dX = gX(b, cG, gZ)
1747+ let aO = dX._2
1748+ let im = bT(b)
1749+ let er = ex(dX._3[bQ])
1750+ let gT = ca(dX._3[bP])
1751+ let dd = ew(er, (gT / br), -1)
1752+ let hC = hv(b, aO, gT, cG)
1753+ let ii = split_51C(valueOrElse(getString(im), ""), "_")
1754+ let bJ = indexOf(ii, aO)
1755+ if (!(isDefined(bJ)))
1756+ then throw(("Your staked lands don't contain " + aO))
17681757 else {
1769- let iC = lastBlock.timestamp
1770- let iD = valueOrElse(getInteger(bL, aZ(b)), 0)
1771- if ((iD >= iC))
1772- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iD)))
1758+ let iH = lastBlock.timestamp
1759+ let iI = valueOrElse(getInteger(bM, ba(b)), 0)
1760+ if ((iI >= iH))
1761+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iI)))
17731762 else {
1774- let iE = (valueOrElse(getInteger(bM, a(b)), 0) + bm)
1775- if ((iE > iC))
1776- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iE)))
1763+ let iJ = (valueOrElse(getInteger(bN, a(b)), 0) + bn)
1764+ if ((iJ > iH))
1765+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iJ)))
17771766 else {
1778- let im = bT(b)
1779- let in = valueOrElse(getInteger(im), 0)
1780- let iF = if ((gO > in))
1767+ let ir = bU(b)
1768+ let is = valueOrElse(getInteger(ir), 0)
1769+ let iK = if ((gT > is))
17811770 then 0
1782- else (in - gO)
1783- let iB = bX(invoke(bM, "onStakeUnstakeLand", [b], nil))
1784- $Tuple2([ScriptTransfer(eu.caller, 1, fromBase58String(aN)), DeleteEntry(aF(aN)), DeleteEntry(aJ(W, aN, b)), StringEntry(bR(), db), StringEntry(hx._2, makeString(hx._3, ":")), if ((size(id) > 1))
1785- then StringEntry(ih, makeString_11C(removeByIndex(id, value(bI)), "_"))
1786- else DeleteEntry(ih), IntegerEntry(im, iF), ix], iB)
1771+ else (is - gT)
1772+ let iG = bY(invoke(bN, "onStakeUnstakeLand", [b], nil))
1773+ $Tuple2([ScriptTransfer(ev.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bS(), dd), StringEntry(hC._2, makeString(hC._3, ":")), if ((size(ii) > 1))
1774+ then StringEntry(im, makeString_11C(removeByIndex(ii, value(bJ)), "_"))
1775+ else DeleteEntry(im), IntegerEntry(ir, iK), iC], iG)
17871776 }
17881777 }
17891778 }
17921781
17931782
17941783
1795-@Callable(eu)
1784+@Callable(ev)
17961785 func stakeDuck () = {
1797- let ix = iu(eu)
1798- if ((size(eu.payments) != 1))
1786+ let iC = iz(ev)
1787+ if ((size(ev.payments) != 1))
17991788 then throw("Exactly one payment required")
18001789 else {
1801- let iy = value(eu.payments[0])
1802- let aD = value(iy.assetId)
1803- let bw = toString(eu.caller)
1804- if ((iy.amount != 1))
1805- then throw((("NFT " + X) + " token should be attached as payment"))
1790+ let iD = value(ev.payments[0])
1791+ let aE = value(iD.assetId)
1792+ let bx = toString(ev.caller)
1793+ if ((iD.amount != 1))
1794+ then throw((("NFT " + Y) + " token should be attached as payment"))
18061795 else {
1807- let gZ = value(assetInfo(aD))
1808- if (if ((gZ.issuer != cb))
1809- then (gZ.issuer != cc)
1796+ let he = value(assetInfo(aE))
1797+ if (if ((he.issuer != cd))
1798+ then (he.issuer != ce)
18101799 else false)
1811- then throw((("Unknown issuer of " + X) + " token"))
1812- else if (!(contains(gZ.name, X)))
1813- then throw((("Only NFT " + X) + " tokens are accepted"))
1800+ then throw((("Unknown issuer of " + Y) + " token"))
1801+ else if (!(contains(he.name, Y)))
1802+ then throw((("Only NFT " + Y) + " tokens are accepted"))
18141803 else {
1815- let iG = toBase58String(aD)
1816- let ha = aF(iG)
1817- if (isDefined(getInteger(ha)))
1818- then throw((("NFT " + gZ.name) + " is already staked"))
1819- else if (isDefined(getString(aV(bw))))
1820- then throw(("You already staked one duck: " + gZ.name))
1804+ let iL = toBase58String(aE)
1805+ let hf = aG(iL)
1806+ if (isDefined(getInteger(hf)))
1807+ then throw((("NFT " + he.name) + " is already staked"))
1808+ else if (isDefined(getString(aW(bx))))
1809+ then throw(("You already staked one duck: " + he.name))
18211810 else {
1822- let iH = aX(iG)
1823- let iI = getString(iH)
1824- let fd = aW(iG)
1825- let iJ = getString(fd)
1826- let gD = p(iG)
1827- let gE = L(valueOrElse(getInteger(t(iG)), 0))
1828- let iK = valueOrElse(getInteger(gD), gE)
1829- ([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(X, toBase58String(aD), bw), lastBlock.timestamp), StringEntry(aU(iG), bw), StringEntry(aV(bw), iG)] ++ (if (isDefined(iI))
1811+ let iM = aY(iL)
1812+ let iN = getString(iM)
1813+ let fe = aX(iL)
1814+ let iO = getString(fe)
1815+ let gF = q(iL)
1816+ let gG = M(valueOrElse(getInteger(u(iL)), 0))
1817+ let iP = valueOrElse(getInteger(gF), gG)
1818+ ([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), bx), lastBlock.timestamp), StringEntry(aV(iL), bx), StringEntry(aW(bx), iL)] ++ (if (isDefined(iN))
18301819 then nil
1831- else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ))
1820+ else ([StringEntry(iM, ae)] ++ (if (isDefined(iO))
18321821 then nil
1833- else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix)))))
1822+ else (([StringEntry(fe, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gF, iP)) :+ iC)))))
18341823 }
18351824 }
18361825 }
18391828
18401829
18411830
1842-@Callable(eu)
1843-func unstakeDuck (iG) = {
1844- let ix = iu(eu)
1845- if ((size(eu.payments) != 0))
1831+@Callable(ev)
1832+func unstakeDuck (iL) = {
1833+ let iC = iz(ev)
1834+ if ((size(ev.payments) != 0))
18461835 then throw("No payments required")
18471836 else {
1848- let aD = fromBase58String(iG)
1849- let bw = toString(eu.caller)
1850- let gZ = value(assetInfo(aD))
1851- let ha = aF(toBase58String(aD))
1852- if (!(isDefined(getInteger(ha))))
1853- then throw((("NFT " + gZ.name) + " is not staked"))
1854- else if (!(isDefined(getString(aV(bw)))))
1855- then throw((("The duck " + gZ.name) + " is not staked"))
1837+ let aE = fromBase58String(iL)
1838+ let bx = toString(ev.caller)
1839+ let he = value(assetInfo(aE))
1840+ let hf = aG(toBase58String(aE))
1841+ if (!(isDefined(getInteger(hf))))
1842+ then throw((("NFT " + he.name) + " is not staked"))
1843+ else if (!(isDefined(getString(aW(bx)))))
1844+ then throw((("The duck " + he.name) + " is not staked"))
18561845 else {
1857- let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned"))
1858- if ((hc != bw))
1846+ let hh = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + he.name) + " is orphaned"))
1847+ if ((hh != bx))
18591848 then throw("Staked NFT is not yours")
18601849 else {
1861- let gD = p(iG)
1862- let gE = L(valueOrElse(getInteger(t(iG)), 0))
1863- let V = valueOrElse(getInteger(gD), gE)
1864- if ((gE > V))
1865- then throw((("Please heal your duck to " + toString(gE)) + "hp before unstaking"))
1866- else [ScriptTransfer(eu.caller, 1, aD), DeleteEntry(ha), DeleteEntry(gD), DeleteEntry(aX(iG)), DeleteEntry(aU(iG)), DeleteEntry(aJ(X, iG, bw)), DeleteEntry(aV(bw)), ix]
1850+ let gF = q(iL)
1851+ let gG = M(valueOrElse(getInteger(u(iL)), 0))
1852+ let W = valueOrElse(getInteger(gF), gG)
1853+ if ((gG > W))
1854+ then throw((("Please heal your duck to " + toString(gG)) + "hp before unstaking"))
1855+ else [ScriptTransfer(ev.caller, 1, aE), DeleteEntry(hf), DeleteEntry(gF), DeleteEntry(aY(iL)), DeleteEntry(aV(iL)), DeleteEntry(aK(Y, iL, bx)), DeleteEntry(aW(bx)), iC]
18671856 }
18681857 }
18691858 }
18711860
18721861
18731862
1874-@Callable(eu)
1875-func claimRes (fK,iL) = {
1876- let ix = iu(eu)
1877- if ((size(eu.payments) != 0))
1863+@Callable(ev)
1864+func claimRes (fM,iQ) = {
1865+ let iC = iz(ev)
1866+ if ((size(ev.payments) != 0))
18781867 then throw("No payments required")
18791868 else {
1880- let b = toString(eu.originCaller)
1881- let dj = he(b, fK, cE, iL)
1882- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1883- $Tuple2(((((dj._1 ++ hD(q, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._3[ay])
1884- }
1885- }
1886-
1887-
1888-
1889-@Callable(eu)
1890-func claimResToWH (fK,iL) = {
1891- let ix = iu(eu)
1892- if ((size(eu.payments) != 0))
1869+ let b = toString(ev.originCaller)
1870+ let dl = hj(b, fM, cG, iQ)
1871+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1872+ $Tuple2(((((dl._1 ++ hI(r, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._3[az])
1873+ }
1874+ }
1875+
1876+
1877+
1878+@Callable(ev)
1879+func claimResToWH (fM,iQ) = {
1880+ let iC = iz(ev)
1881+ if ((size(ev.payments) != 0))
18931882 then throw("No payments required")
18941883 else {
1895- let b = toString(eu.originCaller)
1896- let dj = he(b, fK, cD, iL)
1897- $Tuple2(((((dj._1 ++ hJ(b, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._5[ap])
1898- }
1899- }
1900-
1901-
1902-
1903-@Callable(eu)
1904-func flight (gs,gt) = {
1905- let ix = iu(eu)
1906- if ((size(eu.payments) != 0))
1884+ let b = toString(ev.originCaller)
1885+ let dl = hj(b, fM, cF, iQ)
1886+ $Tuple2(((((dl._1 ++ hO(b, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._5[aq])
1887+ }
1888+ }
1889+
1890+
1891+
1892+@Callable(ev)
1893+func flight (gu,gv) = {
1894+ let iC = iz(ev)
1895+ if ((size(ev.payments) != 0))
19071896 then throw("No payments required")
19081897 else {
1909- let ba = toString(eu.caller)
1910- let eZ = gr(ba, gs, gt)
1911- let q = eZ._2
1912- let iH = aX(q)
1913- let gW = valueOrElse(getString(iH), ad)
1914- if ((eZ._4 == gW))
1898+ let bb = toString(ev.caller)
1899+ let fa = gt(bb, gu, gv)
1900+ let r = fa._2
1901+ let iM = aY(r)
1902+ let hb = valueOrElse(getString(iM), ae)
1903+ if ((fa._4 == hb))
19151904 then throw("You can't fly to the same location")
19161905 else {
1917- let fd = aW(q)
1918- let fO = fc(fd)
1919- let dz = dk(fO[aA], eZ._5)
1920- $Tuple2(([StringEntry(iH, if ((eZ._1 > 0))
1921- then eZ._4
1922- else gW), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":")), IntegerEntry(p(q), eZ._1), ix] ++ hD(q, if ((eZ._1 > 0))
1923- then A
1924- else B)._1), eZ._3)
1906+ let gO = w(r)
1907+ let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,")
1908+ let gQ = dm(gP, fa._5)
1909+ $Tuple2(([StringEntry(iM, if ((fa._1 > 0))
1910+ then fa._4
1911+ else hb), StringEntry(gO, gQ), IntegerEntry(q(r), fa._1), iC] ++ hI(r, if ((fa._1 > 0))
1912+ then B
1913+ else C)._1), fa._3)
19251914 }
19261915 }
19271916 }
19281917
19291918
19301919
1931-@Callable(eu)
1932-func heal (iM,iN,iO) = {
1933- let ix = iu(eu)
1934- if (if (if ((0 > iM))
1920+@Callable(ev)
1921+func heal (iR,iS,iT) = {
1922+ let iC = iz(ev)
1923+ if (if (if ((0 > iR))
19351924 then true
1936- else (0 > iN))
1925+ else (0 > iS))
19371926 then true
1938- else (0 > iO))
1927+ else (0 > iT))
19391928 then throw("Quantity cannot be negative")
19401929 else {
1941- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
1942- let iP = [iM, iN, iO]
1943- let gD = p(q)
1944- let gE = L(valueOrElse(getInteger(t(q)), 0))
1945- let iQ = valueOrElse(getInteger(gD), gE)
1946- if ((iQ >= gE))
1947- then throw((("HP should be < " + toString(gE)) + " to heal"))
1930+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
1931+ let iU = [iR, iS, iT]
1932+ let gF = q(r)
1933+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1934+ let iV = valueOrElse(getInteger(gF), gG)
1935+ if ((iV >= gG))
1936+ then throw((("HP should be < " + toString(gG)) + " to heal"))
19481937 else {
1949- let fd = aW(q)
1950- let fO = fc(fd)
1951- let iR = if ((fO[aA] == ""))
1938+ let fe = aX(r)
1939+ let fQ = fd(fe)
1940+ let iW = if ((fQ[aB] == ""))
19521941 then nil
1953- else split(fO[aA], "_")
1954- func iS (cR,iT) = {
1955- let bY = cR._2
1956- let eQ = if ((size(iR) > bY))
1957- then parseIntValue(iR[bY])
1942+ else split(fQ[aB], "_")
1943+ func iX (cT,iY) = {
1944+ let bZ = cT._2
1945+ let eR = if ((size(iW) > bZ))
1946+ then parseIntValue(iW[bZ])
19581947 else 0
1959- if ((3 > bY))
1948+ if ((3 > bZ))
19601949 then {
1961- let iU = iP[bY]
1962- if ((iU > eQ))
1963- then throw(((("You have only " + toString(eQ)) + " of ") + ag[bY]))
1964- else $Tuple3((cR._1 :+ toString((eQ - iU))), (bY + 1), (cR._3 + (ce[bY] * iU)))
1950+ let iZ = iU[bZ]
1951+ if ((iZ > eR))
1952+ then throw(((("You have only " + toString(eR)) + " of ") + ah[bZ]))
1953+ else $Tuple3((cT._1 :+ toString((eR - iZ))), (bZ + 1), (cT._3 + (cg[bZ] * iZ)))
19651954 }
1966- else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3)
1955+ else $Tuple3((cT._1 :+ toString(eR)), (bZ + 1), cT._3)
19671956 }
19681957
1969- let dj = {
1970- let cT = aj
1971- let cU = size(cT)
1972- let cV = $Tuple3(nil, 0, 0)
1973- func cW (cX,cY) = if ((cY >= cU))
1974- then cX
1975- else iS(cX, cT[cY])
1976-
1977- func cZ (cX,cY) = if ((cY >= cU))
1978- then cX
1958+ let dl = {
1959+ let cV = ak
1960+ let cW = size(cV)
1961+ let cX = $Tuple3(nil, 0, 0)
1962+ func cY (cZ,da) = if ((da >= cW))
1963+ then cZ
1964+ else iX(cZ, cV[da])
1965+
1966+ func db (cZ,da) = if ((da >= cW))
1967+ then cZ
19791968 else throw("List size exceeds 50")
19801969
1981- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
1970+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
19821971 }
1983- let iV = min([gE, (iQ + dj._3)])
1984- $Tuple2(([IntegerEntry(gD, iV), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], makeString(dj._1, "_")], ":")), ix] ++ hD(q, (I * ((iM + iN) + iO)))._1), iV)
1972+ let ja = min([gG, (iV + dl._3)])
1973+ $Tuple2(([IntegerEntry(gF, ja), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], makeString(dl._1, "_")], ":")), iC] ++ hI(r, (J * ((iR + iS) + iT)))._1), ja)
19851974 }
19861975 }
19871976 }
19881977
19891978
19901979
1991-@Callable(eu)
1980+@Callable(ev)
19921981 func healES () = {
1993- let ix = iu(eu)
1994- if ((size(eu.payments) != 1))
1982+ let iC = iz(ev)
1983+ if ((size(ev.payments) != 1))
19951984 then throw("Exactly one payment required")
19961985 else {
1997- let iy = value(eu.payments[0])
1998- if ((iy.assetId != bi))
1986+ let iD = value(ev.payments[0])
1987+ if ((iD.assetId != bj))
19991988 then throw("Allowed USDT payment only!")
20001989 else {
2001- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2002- let gD = p(q)
2003- let gE = L(valueOrElse(getInteger(t(q)), 0))
2004- let iQ = valueOrElse(getInteger(gD), gE)
2005- if ((iQ > 0))
1990+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
1991+ let gF = q(r)
1992+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1993+ let iV = valueOrElse(getInteger(gF), gG)
1994+ if ((iV > 0))
20061995 then throw("HP should be 0 to call Emergency Service")
20071996 else {
2008- let fd = aW(q)
2009- let fO = fc(fd)
2010- let iR = if ((fO[aA] == ""))
1997+ let fe = aX(r)
1998+ let fQ = fd(fe)
1999+ let iW = if ((fQ[aB] == ""))
20112000 then nil
2012- else split(fO[aA], "_")
2013- let iW = if ((size(iR) > 0))
2014- then parseIntValue(iR[0])
2001+ else split(fQ[aB], "_")
2002+ let jb = if ((size(iW) > 0))
2003+ then parseIntValue(iW[0])
20152004 else 0
2016- let iX = if ((size(iR) > 1))
2017- then parseIntValue(iR[1])
2005+ let jc = if ((size(iW) > 1))
2006+ then parseIntValue(iW[1])
20182007 else 0
2019- let iY = if ((size(iR) > 2))
2020- then parseIntValue(iR[2])
2008+ let jd = if ((size(iW) > 2))
2009+ then parseIntValue(iW[2])
20212010 else 0
2022- if (if (if ((iW > 0))
2011+ if (if (if ((jb > 0))
20232012 then true
2024- else (iX > 0))
2013+ else (jc > 0))
20252014 then true
2026- else (iY > 0))
2015+ else (jd > 0))
20272016 then throw("You have to use own Medical Kit")
20282017 else {
2029- let iZ = getString(bK, bb())
2030- let ja = if (isDefined(iZ))
2031- then split(value(iZ), "_")
2018+ let je = getString(bL, bc())
2019+ let jf = if (isDefined(je))
2020+ then split(value(je), "_")
20322021 else nil
2033- let jb = if ((size(ja) > 0))
2034- then parseIntValue(ja[0])
2022+ let jg = if ((size(jf) > 0))
2023+ then parseIntValue(jf[0])
20352024 else 0
2036- if ((0 >= jb))
2025+ if ((0 >= jg))
20372026 then throw("There are no Medical Kits L1 at Emergency Service storage")
20382027 else {
2039- let iV = (iQ + ce[0])
2040- let jc = makeString([toString((jb - 1)), removeByIndex(ja, 0)], "_")
2041- let bf = split(aj[0], "_")
2042- let jd = be(bf)
2043- let je = fraction((jd * af), ae, (10 * an))
2044- if ((iy.amount != je))
2045- then throw(("Payment attached should be " + toString(je)))
2028+ let ja = (iV + cg[0])
2029+ let jh = makeString([toString((jg - 1)), removeByIndex(jf, 0)], "_")
2030+ let bg = split(ak[0], "_")
2031+ let ji = bf(bg)
2032+ let jj = fraction((ji * ag), af, (10 * ao))
2033+ if ((iD.amount != jj))
2034+ then throw(("Payment attached should be " + toString(jj)))
20462035 else {
2047- let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)]))
2048- $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj)
2036+ let dl = bV(invoke(bL, "updateEsStorage", [jh], [AttachedPayment(bj, jj)]))
2037+ $Tuple2(([IntegerEntry(gF, ja), iC] ++ hI(r, D)._1), dl)
20492038 }
20502039 }
20512040 }
20562045
20572046
20582047
2059-@Callable(eu)
2060-func updateBackpack (q,jf) = if ((eu.caller != bK))
2048+@Callable(ev)
2049+func updateBackpack (r,jk) = if ((ev.caller != bL))
20612050 then throw("permission denied")
2062- else $Tuple2([StringEntry(aW(q), jf)], jf)
2063-
2064-
2065-
2066-@Callable(eu)
2051+ else $Tuple2([StringEntry(aX(r), jk)], jk)
2052+
2053+
2054+
2055+@Callable(ev)
20672056 func buySLand () = {
2068- let ix = iu(eu)
2069- if ((size(eu.payments) != 1))
2057+ let iC = iz(ev)
2058+ if ((size(ev.payments) != 1))
20702059 then throw("Exactly one payment required")
20712060 else {
2072- let iy = value(eu.payments[0])
2073- if ((iy.assetId != bi))
2061+ let iD = value(ev.payments[0])
2062+ if ((iD.assetId != bj))
20742063 then throw("Allowed USDT payment only!")
2075- else if ((iy.amount != ck))
2076- then throw(("Payment attached should be " + toString(ck)))
2064+ else if ((iD.amount != cm))
2065+ then throw(("Payment attached should be " + toString(cm)))
20772066 else {
2078- let dj = gj(eu.caller, eu.transactionId)
2079- $Tuple2((((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) ++ hJ(toString(eu.caller), E)._1) :+ ix), dj._2._1)
2067+ let dl = gl(ev.caller, ev.transactionId)
2068+ $Tuple2((((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) ++ hO(toString(ev.caller), F)._1) :+ iC), dl._2._1)
20802069 }
20812070 }
20822071 }
20832072
20842073
20852074
2086-@Callable(eu)
2087-func expedition (gs,gt) = {
2088- let ix = iu(eu)
2089- if ((size(eu.payments) != 0))
2075+@Callable(ev)
2076+func expedition (gu,gv) = {
2077+ let iC = iz(ev)
2078+ if ((size(ev.payments) != 0))
20902079 then throw("No payments required")
20912080 else {
2092- let dj = gJ(eu.caller, eu.transactionId, gs, gt)
2093- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2094- $Tuple2(((dj._1 ++ hD(q, E)._1) :+ ix), $Tuple2(dj._2, dj._3))
2095- }
2096- }
2097-
2098-
2099-
2100-@Callable(eu)
2101-func upgradeInfra (aN) = {
2102- let ix = iu(eu)
2103- if ((size(eu.payments) != 0))
2081+ let dl = gL(ev.caller, ev.transactionId, gu, gv)
2082+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
2083+ $Tuple2(((dl._1 ++ hI(r, F)._1) :+ iC), $Tuple2(dl._2, dl._3))
2084+ }
2085+ }
2086+
2087+
2088+
2089+@Callable(ev)
2090+func upgradeInfra (aO) = {
2091+ let iC = iz(ev)
2092+ if ((size(ev.payments) != 0))
21042093 then throw("No payments required")
21052094 else {
2106- let dj = hr(true, eu.caller, 0, aN)
2107- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2108- $Tuple2(((dj._1 :+ ix) ++ hD(q, fraction(F, dj._3, bp))._1), dj._2)
2109- }
2110- }
2111-
2112-
2113-
2114-@Callable(eu)
2115-func upgradeInfraUsdt (aN) = if ((eu.caller != this))
2095+ let dl = hw(true, ev.caller, 0, aO)
2096+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
2097+ $Tuple2(((dl._1 :+ iC) ++ hI(r, fraction(G, dl._3, bq))._1), dl._2)
2098+ }
2099+ }
2100+
2101+
2102+
2103+@Callable(ev)
2104+func upgradeInfraUsdt (aO) = if ((ev.caller != this))
21162105 then throw("Permission denied")
21172106 else {
2118- let ix = iu(eu)
2119- if ((size(eu.payments) != 1))
2107+ let iC = iz(ev)
2108+ if ((size(ev.payments) != 1))
21202109 then throw("Exactly one payment required")
21212110 else {
2122- let iy = value(eu.payments[0])
2123- if ((iy.assetId != bi))
2111+ let iD = value(ev.payments[0])
2112+ if ((iD.assetId != bj))
21242113 then throw("Allowed USDT payment only!")
21252114 else {
2126- let dj = hr(false, eu.caller, iy.amount, aN)
2127- $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
2115+ let dl = hw(false, ev.caller, iD.amount, aO)
2116+ $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2)
21282117 }
21292118 }
21302119 }
21312120
21322121
21332122
2134-@Callable(eu)
2135-func activateArtifact (jg,jh) = {
2136- let ix = iu(eu)
2137- if ((size(eu.payments) != 0))
2123+@Callable(ev)
2124+func activateArtifact (jl,jm) = {
2125+ let iC = iz(ev)
2126+ if ((size(ev.payments) != 0))
21382127 then throw("No payments required")
21392128 else {
2140- let b = toString(eu.caller)
2141- let dj = {
2142- let bj = jg
2143- if (("PRESALE" == bj))
2144- then hR(b, jh)
2145- else if (("ONBOARD" == bj))
2146- then hK(b)
2129+ let b = toString(ev.caller)
2130+ let dl = {
2131+ let bk = jl
2132+ if (("PRESALE" == bk))
2133+ then hW(b, jm)
2134+ else if (("ONBOARD" == bk))
2135+ then hP(b)
21472136 else throw("Unknown artifact")
21482137 }
2149- (dj :+ ix)
2150- }
2151- }
2152-
2153-
2154-
2155-@Callable(eu)
2156-func mergeLands (hW) = {
2157- let ix = iu(eu)
2158- if ((size(eu.payments) != 0))
2138+ (dl :+ iC)
2139+ }
2140+ }
2141+
2142+
2143+
2144+@Callable(ev)
2145+func mergeLands (ib) = {
2146+ let iC = iz(ev)
2147+ if ((size(ev.payments) != 0))
21592148 then throw("No payments required")
21602149 else {
2161- let dj = is(true, toString(eu.caller), 0, hW, eu.transactionId)
2162- $Tuple2(((dj._1 :+ ix) ++ hJ(toString(eu.caller), G)._1), dj._2)
2163- }
2164- }
2165-
2166-
2167-
2168-@Callable(eu)
2169-func mergeLandsUsdt (hW) = {
2170- let ix = iu(eu)
2171- if ((size(eu.payments) != 1))
2150+ let dl = ix(true, toString(ev.caller), 0, ib, ev.transactionId)
2151+ $Tuple2(((dl._1 :+ iC) ++ hO(toString(ev.caller), H)._1), dl._2)
2152+ }
2153+ }
2154+
2155+
2156+
2157+@Callable(ev)
2158+func mergeLandsUsdt (ib) = {
2159+ let iC = iz(ev)
2160+ if ((size(ev.payments) != 1))
21722161 then throw("Exactly one payment required")
21732162 else {
2174- let iy = value(eu.payments[0])
2175- if ((iy.assetId != bi))
2163+ let iD = value(ev.payments[0])
2164+ if ((iD.assetId != bj))
21762165 then throw("Allowed USDT payment only!")
21772166 else {
2178- let dj = is(false, toString(eu.caller), iy.amount, hW, eu.transactionId)
2179- $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
2167+ let dl = ix(false, toString(ev.caller), iD.amount, ib, ev.transactionId)
2168+ $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2)
21802169 }
21812170 }
21822171 }
21832172
21842173
21852174
2186-@Callable(eu)
2187-func cargoExchange (ji,aN) = {
2188- let ix = iu(eu)
2189- if ((size(eu.payments) != 0))
2175+@Callable(ev)
2176+func cargoExchange (jn,aO) = {
2177+ let iC = iz(ev)
2178+ if ((size(ev.payments) != 0))
21902179 then throw("No payments required")
21912180 else {
2192- let fN = split_4C(ji, ":")
2193- let b = toString(eu.originCaller)
2194- let gZ = value(assetInfo(fromBase58String(aN)))
2195- let ha = aF(aN)
2196- if (!(isDefined(getInteger(ha))))
2197- then throw((gZ.name + " is not staked"))
2181+ let fP = split_4C(jn, ":")
2182+ let b = toString(ev.originCaller)
2183+ let he = value(assetInfo(fromBase58String(aO)))
2184+ let hf = aG(aO)
2185+ if (!(isDefined(getInteger(hf))))
2186+ then throw((he.name + " is not staked"))
21982187 else {
2199- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
2200- if ((hc != b))
2201- then throw((W + " is not yours"))
2188+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
2189+ if ((hh != b))
2190+ then throw((X + " is not yours"))
22022191 else {
2203- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2204- let fx = valueOrElse(getInteger(aG(aN)), 0)
2205- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2206- let gW = valueOrElse(getString(aX(q)), ad)
2207- let gX = split(value(gW), "_")
2208- if ((gX[bc] != "L"))
2209- then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
2210- else if ((gX[bd] != aN))
2211- then throw(("Duck should be on the land " + aN))
2192+ let fy = (ca(split(he.description, "_")[bP]) / br)
2193+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2194+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2195+ let hb = valueOrElse(getString(aY(r)), ae)
2196+ let hc = split(value(hb), "_")
2197+ if ((hc[bd] != "L"))
2198+ then throw((("Duck location type is " + hc[bd]) + ", but should be L"))
2199+ else if ((hc[be] != aO))
2200+ then throw(("Duck should be on the land " + aO))
22122201 else {
2213- let fv = aM(aN)
2214- let fi = fu(fv, fw, fx)
2215- let fd = aW(q)
2216- let fO = fc(fd)
2217- let dj = fM(fN, fi, fO)
2218- let fD = split(fi[as], "_")
2219- let ho = (parseIntValue(fD[au]) + dj._7)
2220- let hp = (parseIntValue(fD[av]) - dj._7)
2221-[StringEntry(fd, makeString_2C([fO[ax], dj._4, dj._5, dj._6], ":")), StringEntry(fv, makeString_2C([fi[ao], dj._1, dj._2, dj._3, makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")], ":")), ix]
2202+ let fx = aN(aO)
2203+ let fj = fw(fx, fy, fz)
2204+ let fe = aX(r)
2205+ let fQ = fd(fe)
2206+ let dl = fO(fP, fj, fQ)
2207+ let fF = split(fj[at], "_")
2208+ let ht = (parseIntValue(fF[av]) + dl._7)
2209+ let hu = (parseIntValue(fF[aw]) - dl._7)
2210+[StringEntry(fe, makeString_2C([fQ[ay], dl._4, dl._5, dl._6], ":")), StringEntry(fx, makeString_2C([fj[ap], dl._1, dl._2, dl._3, makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")], ":")), iC]
22222211 }
22232212 }
22242213 }
22272216
22282217
22292218
2230-@Callable(eu)
2231-func saveWarehouse (fz,aN) = if ((eu.caller != bK))
2219+@Callable(ev)
2220+func saveWarehouse (fB,aO) = if ((ev.caller != bL))
22322221 then throw("Access denied")
22332222 else {
2234- let fv = aM(aN)
2235- let fA = split_4C(fz, ":")
2236- if ((size(fA) != 5))
2223+ let fx = aN(aO)
2224+ let fC = split_4C(fB, ":")
2225+ if ((size(fC) != 5))
22372226 then throw("warehouse string should contain 4 ':' separators")
22382227 else {
2239- let jj = split(fA[as], "_")[at]
2240- let ho = fh(fA)
2241- let jk = ff(fA[ao])
2242- let hp = ((jk - parseIntValue(jj)) - ho)
2243- let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([jj, toString(ho), toString(hp), toString(jk)], "_")], ":")
2244- $Tuple2([StringEntry(fv, jl)], jl)
2228+ let jo = split(fC[at], "_")[au]
2229+ let ht = fi(fC)
2230+ let jp = fg(fC[ap])
2231+ let hu = ((jp - parseIntValue(jo)) - ht)
2232+ let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([jo, toString(ht), toString(hu), toString(jp)], "_")], ":")
2233+ $Tuple2([StringEntry(fx, jq)], jq)
22452234 }
22462235 }
22472236
22482237
22492238
2250-@Callable(eu)
2251-func fixWarehouseFormat (aN) = if ((eu.caller != bJ))
2239+@Callable(ev)
2240+func fixWarehouseFormat (aO) = if ((ev.caller != bK))
22522241 then throw("Access denied")
22532242 else {
2254- let fv = aM(aN)
2255- let gZ = value(assetInfo(fromBase58String(aN)))
2256- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2257- let fx = valueOrElse(getInteger(aG(aN)), 0)
2258- let fA = fu(fv, fw, fx)
2259- let jj = bX(invoke(bK, "recalcLockedVolumeREADONLY", [aN, fA], nil))
2260- let ho = fh(fA)
2261- let jk = ff(fA[ao])
2262- let hp = ((jk - jj) - ho)
2263- let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([toString(jj), toString(ho), toString(hp), toString(jk)], "_")], ":")
2264- $Tuple2([StringEntry(fv, jl)], jl)
2265- }
2266-
2267-
2268-
2269-@Callable(eu)
2270-func fixStakedPieces (bw) = if ((eu.caller != bJ))
2243+ let fx = aN(aO)
2244+ let he = value(assetInfo(fromBase58String(aO)))
2245+ let fy = (ca(split(he.description, "_")[bP]) / br)
2246+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2247+ let fC = fw(fx, fy, fz)
2248+ let jo = bY(invoke(bL, "recalcLockedVolumeREADONLY", [aO, fC], nil))
2249+ let ht = fi(fC)
2250+ let jp = fg(fC[ap])
2251+ let hu = ((jp - jo) - ht)
2252+ let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([toString(jo), toString(ht), toString(hu), toString(jp)], "_")], ":")
2253+ $Tuple2([StringEntry(fx, jq)], jq)
2254+ }
2255+
2256+
2257+
2258+@Callable(ev)
2259+func fixStakedPieces (bx) = if ((ev.caller != bK))
22712260 then throw("Access denied")
22722261 else {
2273- let in = if ((bw == ""))
2262+ let is = if ((bx == ""))
22742263 then 0
22752264 else {
2276- let ii = getString(S, bS(bw))
2277- let id = if (isDefined(ii))
2278- then split_51C(value(ii), "_")
2265+ let in = getString(T, bT(bx))
2266+ let ii = if (isDefined(in))
2267+ then split_51C(value(in), "_")
22792268 else nil
2280- func jm (cR,aN) = {
2281- let gZ = value(assetInfo(fromBase58String(aN)))
2282- let ca = split(gZ.description, "_")[bO]
2283- (cR + bZ(ca))
2269+ func jr (cT,aO) = {
2270+ let he = value(assetInfo(fromBase58String(aO)))
2271+ let cb = split(he.description, "_")[bP]
2272+ (cT + ca(cb))
22842273 }
22852274
2286- let cT = id
2287- let cU = size(cT)
2288- let cV = 0
2289- func cW (cX,cY) = if ((cY >= cU))
2290- then cX
2291- else jm(cX, cT[cY])
2292-
2293- func cZ (cX,cY) = if ((cY >= cU))
2294- then cX
2275+ let cV = ii
2276+ let cW = size(cV)
2277+ let cX = 0
2278+ func cY (cZ,da) = if ((da >= cW))
2279+ then cZ
2280+ else jr(cZ, cV[da])
2281+
2282+ func db (cZ,da) = if ((da >= cW))
2283+ then cZ
22952284 else throw("List size exceeds 100")
22962285
2297- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2286+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
22982287 }
2299- $Tuple2([IntegerEntry(bT(bw), in)], in)
2300- }
2301-
2302-
2303-
2304-@Callable(eu)
2305-func setCustomName (aD,if,aI) = {
2306- let ix = iu(eu)
2307- if ((size(eu.payments) != 1))
2288+ $Tuple2([IntegerEntry(bU(bx), is)], is)
2289+ }
2290+
2291+
2292+
2293+@Callable(ev)
2294+func setCustomName (aE,ik,aJ) = {
2295+ let iC = iz(ev)
2296+ if ((size(ev.payments) != 1))
23082297 then throw("Exactly one payment required")
23092298 else {
2310- let iy = value(eu.payments[0])
2311- if ((iy.assetId != bi))
2299+ let iD = value(ev.payments[0])
2300+ if ((iD.assetId != bj))
23122301 then throw("Allowed USDT payment only!")
2313- else if ((iy.amount != cg))
2314- then throw(("Payment should be " + toString(cg)))
2315- else if (contains(if, "__"))
2316- then throw(("Name should not contain '__': " + if))
2317- else if ((size(if) > ch))
2318- then throw(("Name too long, maxLength=" + toString(ch)))
2302+ else if ((iD.amount != ci))
2303+ then throw(("Payment should be " + toString(ci)))
2304+ else if (contains(ik, "__"))
2305+ then throw(("Name should not contain '__': " + ik))
2306+ else if ((size(ik) > cj))
2307+ then throw(("Name too long, maxLength=" + toString(cj)))
23192308 else {
2320- let b = toString(eu.originCaller)
2321- let jn = {
2322- let bj = aI
2323- if (("ACCOUNT" == bj))
2309+ let b = toString(ev.originCaller)
2310+ let js = {
2311+ let bk = aJ
2312+ if (("ACCOUNT" == bk))
23242313 then {
2325- let jo = cB(if)
2326- let jp = getString(jo)
2327- if (isDefined(jp))
2328- then throw(("Name already registered: " + if))
2314+ let jt = cD(ik)
2315+ let ju = getString(jt)
2316+ if (isDefined(ju))
2317+ then throw(("Name already registered: " + ik))
23292318 else {
2330- let jq = aP(b)
2331- let jr = getString(jq)
2332- let js = if (isDefined(jr))
2333- then [DeleteEntry(cB(value(jr)))]
2319+ let jv = aQ(b)
2320+ let jw = getString(jv)
2321+ let jx = if (isDefined(jw))
2322+ then [DeleteEntry(cD(value(jw)))]
23342323 else nil
2335- (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1)
2324+ (((jx :+ StringEntry(jv, ik)) :+ StringEntry(jt, b)) ++ hO(b, E)._1)
23362325 }
23372326 }
2338- else if (("LAND" == bj))
2327+ else if (("LAND" == bk))
23392328 then {
2340- let gZ = value(assetInfo(fromBase58String(aD)))
2341- let ha = aF(aD)
2342- if (!(isDefined(getInteger(ha))))
2343- then throw((gZ.name + " is not staked"))
2329+ let he = value(assetInfo(fromBase58String(aE)))
2330+ let hf = aG(aE)
2331+ if (!(isDefined(getInteger(hf))))
2332+ then throw((he.name + " is not staked"))
23442333 else {
2345- let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned"))
2346- if ((hc != b))
2347- then throw((W + " is not yours"))
2334+ let hh = valueOrErrorMessage(getString(aD(aE)), (("NFT " + he.name) + " is orphaned"))
2335+ if ((hh != b))
2336+ then throw((X + " is not yours"))
23482337 else {
2349- let jo = cv(if)
2350- let jp = getString(jo)
2351- if (isDefined(jp))
2352- then throw(("Name already registered: " + if))
2338+ let jt = cx(ik)
2339+ let ju = getString(jt)
2340+ if (isDefined(ju))
2341+ then throw(("Name already registered: " + ik))
23532342 else {
2354- let jt = aE(aD)
2355- let jr = getString(jt)
2356- let js = if (isDefined(jr))
2357- then [DeleteEntry(cv(value(jr)))]
2343+ let jy = aF(aE)
2344+ let jw = getString(jy)
2345+ let jx = if (isDefined(jw))
2346+ then [DeleteEntry(cx(value(jw)))]
23582347 else nil
2359- (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1)
2348+ (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hO(b, E)._1)
23602349 }
23612350 }
23622351 }
23632352 }
2364- else if (("DUCK" == bj))
2353+ else if (("DUCK" == bk))
23652354 then {
2366- let gZ = value(assetInfo(fromBase58String(aD)))
2367- let ha = aF(aD)
2368- if (if (!(isDefined(getInteger(ha))))
2355+ let he = value(assetInfo(fromBase58String(aE)))
2356+ let hf = aG(aE)
2357+ if (if (!(isDefined(getInteger(hf))))
23692358 then true
2370- else !(isDefined(getString(aV(b)))))
2371- then throw((gZ.name + " is not staked"))
2359+ else !(isDefined(getString(aW(b)))))
2360+ then throw((he.name + " is not staked"))
23722361 else {
2373- let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned"))
2374- if ((hc != b))
2375- then throw((X + " is not yours"))
2362+ let hh = valueOrErrorMessage(getString(aV(aE)), (("NFT " + he.name) + " is orphaned"))
2363+ if ((hh != b))
2364+ then throw((Y + " is not yours"))
23762365 else {
2377- let jo = cA(if)
2378- let jp = getString(jo)
2379- if (isDefined(jp))
2380- then throw(("Name already registered: " + if))
2366+ let jt = cC(ik)
2367+ let ju = getString(jt)
2368+ if (isDefined(ju))
2369+ then throw(("Name already registered: " + ik))
23812370 else {
2382- let jt = aO(aD)
2383- let jr = getString(jt)
2384- let js = if (isDefined(jr))
2385- then [DeleteEntry(cA(value(jr)))]
2371+ let jy = aP(aE)
2372+ let jw = getString(jy)
2373+ let jx = if (isDefined(jw))
2374+ then [DeleteEntry(cC(value(jw)))]
23862375 else nil
2387- (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1)
2376+ (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hI(aE, E)._1)
23882377 }
23892378 }
23902379 }
23912380 }
23922381 else throw("Unknown entity type")
23932382 }
2394- $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0)
2383+ $Tuple2(((js :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), 0)
23952384 }
23962385 }
23972386 }
23982387
23992388
24002389
2401-@Callable(eu)
2402-func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd))
2390+@Callable(ev)
2391+func setReferrals (jz,jA) = if ((ev.callerPublicKey != cf))
24032392 then throw("Permission denied")
24042393 else {
2405- let ix = iu(eu)
2406- if ((size(eu.payments) != 0))
2394+ let iC = iz(ev)
2395+ if ((size(ev.payments) != 0))
24072396 then throw("No payments required")
2408- else if (!(isDefined(addressFromString(ju))))
2409- then throw(("Invalid address: " + ju))
2410- else if (!(isDefined(addressFromString(jv))))
2411- then throw(("Invalid address: " + jv))
2397+ else if (!(isDefined(addressFromString(jz))))
2398+ then throw(("Invalid address: " + jz))
2399+ else if (!(isDefined(addressFromString(jA))))
2400+ then throw(("Invalid address: " + jA))
24122401 else {
2413- let jw = cC()
2414- let jx = getString(jw)
2415- let jy = if (isDefined(jx))
2416- then split_4C(value(jx), "_")
2402+ let jB = cE()
2403+ let jC = getString(jB)
2404+ let jD = if (isDefined(jC))
2405+ then split_4C(value(jC), "_")
24172406 else nil
2418- if (containsElement(jy, jv))
2419- then throw((jv + " is not newbie (already has referrals)"))
2407+ if (containsElement(jD, jA))
2408+ then throw((jA + " is not newbie (already has referrals)"))
24202409 else {
2421- let hL = aQ(jv)
2422- let hM = getString(hL)
2423- if (if (isDefined(hM))
2424- then isDefined(addressFromString(value(hM)))
2410+ let hQ = aR(jA)
2411+ let hR = getString(hQ)
2412+ if (if (isDefined(hR))
2413+ then isDefined(addressFromString(value(hR)))
24252414 else false)
2426- then throw(((jv + " already has refBy: ") + value(hM)))
2415+ then throw(((jA + " already has refBy: ") + value(hR)))
24272416 else {
2428- let jz = aT(ju)
2429- let jA = getString(jz)
2430- let jB = if (isDefined(jA))
2431- then split_4C(value(jA), "_")
2417+ let jE = aU(jz)
2418+ let jF = getString(jE)
2419+ let jG = if (isDefined(jF))
2420+ then split_4C(value(jF), "_")
24322421 else nil
2433- if (containsElement(jB, jv))
2434- then throw((((ju + " already contains ") + jv) + " within referrals"))
2422+ if (containsElement(jG, jA))
2423+ then throw((((jz + " already contains ") + jA) + " within referrals"))
24352424 else {
2436- let jC = makeString_2C((jB :+ jv), "_")
2437- let jD = if (containsElement(jy, ju))
2438- then value(jx)
2439- else makeString_2C((jy :+ ju), "_")
2440- $Tuple2([StringEntry(hL, ju), StringEntry(jz, jC), StringEntry(jw, jD), ix], 0)
2425+ let jH = makeString_2C((jG :+ jA), "_")
2426+ let jI = if (containsElement(jD, jz))
2427+ then value(jC)
2428+ else makeString_2C((jD :+ jz), "_")
2429+ $Tuple2([StringEntry(hQ, jz), StringEntry(jE, jH), StringEntry(jB, jI), iC], 0)
24412430 }
24422431 }
24432432 }
24462435
24472436
24482437
2449-@Callable(eu)
2450-func distributePoints (jE,jF,jG,jH,jI) = {
2451- let ix = iu(eu)
2452- if ((size(eu.payments) != 0))
2438+@Callable(ev)
2439+func distributePoints (jJ,jK,jL,jM,jN) = {
2440+ let iC = iz(ev)
2441+ if ((size(ev.payments) != 0))
24532442 then throw("No payments required")
24542443 else {
2455- let b = toString(eu.originCaller)
2456- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2457- let jJ = y(b)
2458- let jK = valueOrElse(getInteger(S, jJ), 0)
2459- let jL = u(q)
2460- let jM = valueOrElse(getInteger(S, jL), 0)
2461- let jN = (jK + jM)
2462- let jO = ((((jE + jF) + jG) + jH) + jI)
2463- if ((jO > jN))
2464- then throw((("There are only " + toString(jN)) + " free points to distribute"))
2444+ let b = toString(ev.originCaller)
2445+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2446+ let jO = z(b)
2447+ let jP = valueOrElse(getInteger(T, jO), 0)
2448+ let jQ = v(r)
2449+ let jR = valueOrElse(getInteger(T, jQ), 0)
2450+ let jS = (jP + jR)
2451+ let jT = ((((jJ + jK) + jL) + jM) + jN)
2452+ if ((jT > jS))
2453+ then throw((("There are only " + toString(jS)) + " free points to distribute"))
24652454 else {
2466- let jP = r(q)
2467- let T = split(valueOrElse(getString(S, jP), "0_0_0_0_0"), "_")
2468- let jQ = (jK - jO)
2469- $Tuple2([IntegerEntry(jJ, if ((0 > jQ))
2455+ let jU = s(r)
2456+ let U = split(valueOrElse(getString(T, jU), "0_0_0_0_0"), "_")
2457+ let jV = (jP - jT)
2458+ $Tuple2([IntegerEntry(jO, if ((0 > jV))
24702459 then 0
2471- else jQ), IntegerEntry(jL, if ((0 > jQ))
2472- then (jM + jQ)
2473- else jM), StringEntry(jP, makeString([toString((parseIntValue(T[h]) + jE)), toString((parseIntValue(T[i]) + jF)), toString((parseIntValue(T[j]) + jG)), toString((parseIntValue(T[k]) + jH)), toString((parseIntValue(T[l]) + jI))], "_")), ix], 0)
2460+ else jV), IntegerEntry(jQ, if ((0 > jV))
2461+ then (jR + jV)
2462+ else jR), StringEntry(jU, makeString([toString((parseIntValue(U[h]) + jJ)), toString((parseIntValue(U[i]) + jK)), toString((parseIntValue(U[j]) + jL)), toString((parseIntValue(U[k]) + jM)), toString((parseIntValue(U[l]) + jN))], "_")), iC], 0)
24742463 }
24752464 }
24762465 }
24772466
24782467
24792468
2480-@Callable(eu)
2481-func splitByGlobalWeightsREADONLY (fK) = $Tuple2(nil, da(fK))
2482-
2483-
2484-
2485-@Callable(eu)
2486-func splitByGlobalAndLocalWeightsREADONLY (jR,jS,ex) = {
2487- let eq = ew(ex)
2488- $Tuple2(nil, $Tuple2(da(jR), cL(jS, eq)))
2489- }
2490-
2491-
2492-
2493-@Callable(eu)
2494-func getBackpackREADONLY (q) = $Tuple2(nil, makeString(fc(aW(q)), ":"))
2495-
2496-
2497-
2498-@Callable(eu)
2499-func getWarehouseREADONLY (aN) = {
2500- let gZ = value(assetInfo(fromBase58String(aN)))
2501- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2502- let fx = valueOrElse(getInteger(aG(aN)), 0)
2503- $Tuple2(nil, makeString_2C(fu(aM(aN), fw, fx), ":"))
2504- }
2505-
2506-
2507-
2508-@Callable(eu)
2509-func saveLastTx () = if (if ((eu.caller != bM))
2510- then (eu.caller != bK)
2469+@Callable(ev)
2470+func splitByGlobalWeightsREADONLY (fM) = $Tuple2(nil, dc(fM))
2471+
2472+
2473+
2474+@Callable(ev)
2475+func splitByGlobalAndLocalWeightsREADONLY (jW,jX,ey) = {
2476+ let er = ex(ey)
2477+ $Tuple2(nil, $Tuple2(dc(jW), cN(jX, er)))
2478+ }
2479+
2480+
2481+
2482+@Callable(ev)
2483+func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fd(aX(r)), ":"))
2484+
2485+
2486+
2487+@Callable(ev)
2488+func getWarehouseREADONLY (aO) = {
2489+ let he = value(assetInfo(fromBase58String(aO)))
2490+ let fy = (ca(split(he.description, "_")[bP]) / br)
2491+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2492+ $Tuple2(nil, makeString_2C(fw(aN(aO), fy, fz), ":"))
2493+ }
2494+
2495+
2496+
2497+@Callable(ev)
2498+func saveLastTx () = if (if ((ev.caller != bN))
2499+ then (ev.caller != bL)
25112500 else false)
25122501 then throw("Access denied")
2513- else $Tuple2([iu(eu)], 42)
2514-
2515-
2516-
2517-@Callable(eu)
2518-func updateDuckStats (q,hE) = if ((eu.caller != bK))
2502+ else $Tuple2([iz(ev)], 42)
2503+
2504+
2505+
2506+@Callable(ev)
2507+func updateDuckStats (r,hJ) = if ((ev.caller != bL))
25192508 then throw("Access denied")
2520- else hD(q, hE)
2521-
2522-
2523-
2524-@Callable(eu)
2525-func updateAccStats (b,hE) = if ((eu.caller != bK))
2509+ else hI(r, hJ)
2510+
2511+
2512+
2513+@Callable(ev)
2514+func updateAccStats (b,hJ) = if ((ev.caller != bL))
25262515 then throw("Access denied")
2527- else hJ(b, hE)
2528-
2529-
2530-
2531-@Callable(eu)
2532-func equipDuck (jT) = {
2533- let ix = iu(eu)
2534- if ((size(eu.payments) != 0))
2516+ else hO(b, hJ)
2517+
2518+
2519+
2520+@Callable(ev)
2521+func equipDuck (jY) = {
2522+ let iC = iz(ev)
2523+ if ((size(ev.payments) != 0))
25352524 then throw("No payments required")
25362525 else {
2537- let b = toString(eu.originCaller)
2538- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2539- let jU = v(q)
2540- let jV = split(valueOrElse(getString(jU), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2541- let fd = aW(q)
2542- let fO = fc(fd)
2543- let jW = split(jT, "_")
2544- if ((size(jW) != m))
2526+ let b = toString(ev.originCaller)
2527+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2528+ let gO = w(r)
2529+ let jZ = split(valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2530+ let fe = aX(r)
2531+ let fQ = fd(fe)
2532+ let gQ = split(jY, "_")
2533+ if ((size(gQ) != m))
25452534 then throw("Wrong equipment string")
25462535 else {
2547- let dJ = R(this, q)
2548- let jX = ei(jV, dA(fO[aA]), true, dJ)
2549- let jY = ei(jW, jX, false, dJ)
2550- let jZ = dD(jY)
2551- $Tuple2([StringEntry(jU, jT), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], jZ], ":")), ix], 0)
2536+ let dK = S(this, r)
2537+ let ka = ei(jZ, dz(fQ[aB]), true, dK)
2538+ let kb = ei(gQ, ka, false, dK)
2539+ let kc = dE(kb)
2540+ $Tuple2([StringEntry(gO, jY), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], kc], ":")), iC], 0)
25522541 }
25532542 }
25542543 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func a (b) = ("lastArbTimeUser_" + b)
55
66
77 let c = 100000000
88
99 let d = 3200
1010
1111 let e = 4000
1212
1313 let f = 3
1414
1515 let g = ["Strength", "Accuracy", "Intellect", "Endurance", "Dexterity", "Level", "Health"]
1616
1717 let h = 0
1818
1919 let i = 1
2020
2121 let j = 2
2222
2323 let k = 3
2424
2525 let l = 4
2626
2727 let m = 6
2828
2929 let n = 2
3030
3131 let o = 2
3232
33-func p (q) = ("duckHealth_" + q)
34-
35-
36-func r (q) = ("duckChars_" + q)
37-
38-
39-func s (q) = ("duckXP_" + q)
40-
41-
42-func t (q) = ("duckLevel_" + q)
43-
44-
45-func u (q) = ("duckFreePoints_" + q)
46-
47-
48-func v (q) = ("duckEquipment_" + q)
49-
50-
51-func w (b) = ("userXP_" + b)
52-
53-
54-func x (b) = ("userLevel_" + b)
55-
56-
57-func y (b) = ("userFreePoints_" + b)
58-
59-
60-let z = 100000
61-
62-let A = 50000
63-
64-let B = 10000
65-
66-let C = 100000
67-
68-let D = 5000000
69-
70-let E = 50000000
71-
72-let F = 100000
73-
74-let G = 10000000
33+let p = 30
34+
35+func q (r) = ("duckHealth_" + r)
36+
37+
38+func s (r) = ("duckChars_" + r)
39+
40+
41+func t (r) = ("duckXP_" + r)
42+
43+
44+func u (r) = ("duckLevel_" + r)
45+
46+
47+func v (r) = ("duckFreePoints_" + r)
48+
49+
50+func w (r) = ("duckEquipment_" + r)
51+
52+
53+func x (b) = ("userXP_" + b)
54+
55+
56+func y (b) = ("userLevel_" + b)
57+
58+
59+func z (b) = ("userFreePoints_" + b)
60+
61+
62+let A = 100000
63+
64+let B = 50000
65+
66+let C = 10000
67+
68+let D = 100000
69+
70+let E = 5000000
71+
72+let F = 50000000
73+
74+let G = 100000
7575
7676 let H = 10000000
7777
78-let I = 10000
79-
80-func J (K) = fraction(d, pow(K, 4, e, 4, 4, DOWN), c)
81-
82-
83-func L (M) = (100 + M)
84-
85-
86-func N (O,P) = {
87- let Q = J(P)
88-[Q, (f * (Q - O))]
89- }
90-
91-
92-func R (S,q) = {
93- let T = split(valueOrElse(getString(S, r(q)), "0_0_0_0_0"), "_")
94- let U = valueOrElse(getInteger(S, t(q)), 0)
95- let V = valueOrElse(getInteger(S, p(q)), L(U))
96-[parseIntValue(T[h]), parseIntValue(T[i]), parseIntValue(T[j]), parseIntValue(T[k]), parseIntValue(T[l]), U, V]
97- }
98-
99-
100-let W = "LAND"
101-
102-let X = "DUCK"
103-
104-let Y = "PRESALE"
105-
106-let Z = 6
107-
108-let aa = 3456000
109-
110-let ab = 86400000
111-
112-let ac = 10000000000
113-
114-let ad = "Africa_F_Africa"
115-
116-let ae = 39637
117-
118-let af = 10
119-
120-let ag = ["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"]
121-
122-let ah = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
123-
124-let ai = 10000000
125-
126-let aj = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
127-
128-let ak = 6
129-
130-let al = 9
131-
132-let am = 10
78+let I = 10000000
79+
80+let J = 10000
81+
82+func K (L) = fraction(d, pow(L, 4, e, 4, 4, DOWN), c)
83+
84+
85+func M (N) = (100 + N)
86+
87+
88+func O (P,Q) = {
89+ let R = K(Q)
90+[R, (f * (R - P))]
91+ }
92+
93+
94+func S (T,r) = {
95+ let U = split(valueOrElse(getString(T, s(r)), "0_0_0_0_0"), "_")
96+ let V = valueOrElse(getInteger(T, u(r)), 0)
97+ let W = valueOrElse(getInteger(T, q(r)), M(V))
98+[parseIntValue(U[h]), parseIntValue(U[i]), parseIntValue(U[j]), parseIntValue(U[k]), parseIntValue(U[l]), V, W]
99+ }
100+
101+
102+let X = "LAND"
103+
104+let Y = "DUCK"
105+
106+let Z = "PRESALE"
107+
108+let aa = 6
109+
110+let ab = 3456000
111+
112+let ac = 86400000
113+
114+let ad = 10000000000
115+
116+let ae = "Africa_F_Africa"
117+
118+let af = 39637
119+
120+let ag = 10
121+
122+let ah = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
123+
124+let ai = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
125+
126+let aj = 10000000
127+
128+let ak = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
129+
130+let al = 6
131+
132+let am = 9
133133
134134 let an = 10
135135
136-let ao = 0
137-
138-let ap = 1
139-
140-let aq = 2
141-
142-let ar = 3
143-
144-let as = 4
145-
146-let at = 0
147-
148-let au = 1
149-
150-let av = 2
151-
152-let aw = 3
153-
154-let ax = 0
155-
156-let ay = 1
157-
158-let az = 2
159-
160-let aA = 3
161-
162-func aB (b) = ("lastTxIdByUser_" + b)
163-
164-
165-func aC (aD) = ("nftOwner_" + aD)
166-
167-
168-func aE (aD) = ("landCustomNameByAssetId_" + aD)
169-
170-
171-func aF (aD) = ("stakedTime_" + aD)
172-
173-
174-func aG (aD) = ("infraLevel_" + aD)
175-
176-
177-func aH (aI,aD) = makeString(["landArtStatus", aI, aD], "_")
178-
179-
180-func aJ (aK,aD,aL) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aK) + "_") + aD) + "_") + aL)
181-
182-
183-func aM (aN) = ("wareHouse_" + aN)
184-
185-
186-func aO (aD) = ("duckCustomNameByAssetId_" + aD)
187-
188-
189-func aP (b) = ("accountCustomNameByAddr_" + b)
190-
191-
192-func aQ (b) = ("accRefBy_" + b)
193-
194-
195-func aR (q) = ("onboardArtActivatedOnDuck_" + q)
196-
197-
198-func aS (b) = ("onboardArtActivatedDuckBy_" + b)
199-
200-
201-func aT (b) = ("accReferrals_" + b)
202-
203-
204-func aU (aD) = ("duckOwner_" + aD)
205-
206-
207-func aV (aL) = ("stakedDuckByOwner_" + aL)
208-
209-
210-func aW (q) = ("backPack_" + q)
211-
212-
213-func aX (q) = ("duckLocation_" + q)
214-
215-
216-func aY () = "contractsBlocked"
217-
218-
219-func aZ (ba) = ("%s%s__userGwlReleaseTime__" + ba)
220-
221-
222-func bb () = "emergencyWarehouseProducts"
223-
224-
225-let bc = 1
226-
227-let bd = 2
228-
229-func be (bf) = (parseIntValue(bf[ak]) * ai)
230-
231-
232-let bg = true
233-
234-let bh = take(drop(this.bytes, 1), 1)
235-
236-let bi = {
237- let bj = bh
238- if ((base58'2W' == bj))
136+let ao = 10
137+
138+let ap = 0
139+
140+let aq = 1
141+
142+let ar = 2
143+
144+let as = 3
145+
146+let at = 4
147+
148+let au = 0
149+
150+let av = 1
151+
152+let aw = 2
153+
154+let ax = 3
155+
156+let ay = 0
157+
158+let az = 1
159+
160+let aA = 2
161+
162+let aB = 3
163+
164+func aC (b) = ("lastTxIdByUser_" + b)
165+
166+
167+func aD (aE) = ("nftOwner_" + aE)
168+
169+
170+func aF (aE) = ("landCustomNameByAssetId_" + aE)
171+
172+
173+func aG (aE) = ("stakedTime_" + aE)
174+
175+
176+func aH (aE) = ("infraLevel_" + aE)
177+
178+
179+func aI (aJ,aE) = makeString(["landArtStatus", aJ, aE], "_")
180+
181+
182+func aK (aL,aE,aM) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aL) + "_") + aE) + "_") + aM)
183+
184+
185+func aN (aO) = ("wareHouse_" + aO)
186+
187+
188+func aP (aE) = ("duckCustomNameByAssetId_" + aE)
189+
190+
191+func aQ (b) = ("accountCustomNameByAddr_" + b)
192+
193+
194+func aR (b) = ("accRefBy_" + b)
195+
196+
197+func aS (r) = ("onboardArtActivatedOnDuck_" + r)
198+
199+
200+func aT (b) = ("onboardArtActivatedDuckBy_" + b)
201+
202+
203+func aU (b) = ("accReferrals_" + b)
204+
205+
206+func aV (aE) = ("duckOwner_" + aE)
207+
208+
209+func aW (aM) = ("stakedDuckByOwner_" + aM)
210+
211+
212+func aX (r) = ("backPack_" + r)
213+
214+
215+func aY (r) = ("duckLocation_" + r)
216+
217+
218+func aZ () = "contractsBlocked"
219+
220+
221+func ba (bb) = ("%s%s__userGwlReleaseTime__" + bb)
222+
223+
224+func bc () = "emergencyWarehouseProducts"
225+
226+
227+let bd = 1
228+
229+let be = 2
230+
231+func bf (bg) = (parseIntValue(bg[al]) * aj)
232+
233+
234+let bh = true
235+
236+let bi = take(drop(this.bytes, 1), 1)
237+
238+let bj = {
239+ let bk = bi
240+ if ((base58'2W' == bk))
239241 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
240- else if ((base58'2T' == bj))
242+ else if ((base58'2T' == bk))
241243 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
242244 else throw("Unknown chain")
243245 }
244246
245-let bk = {
246- let bj = bh
247- if ((base58'2W' == bj))
247+let bl = {
248+ let bk = bi
249+ if ((base58'2W' == bk))
248250 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
249- else if ((base58'2T' == bj))
251+ else if ((base58'2T' == bk))
250252 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
251253 else throw("Unknown chain")
252254 }
253255
254-let bl = {
255- let bj = bh
256- if ((base58'2W' == bj))
256+let bm = {
257+ let bk = bi
258+ if ((base58'2W' == bk))
257259 then 10000000000
258- else if ((base58'2T' == bj))
260+ else if ((base58'2T' == bk))
259261 then 100000000
260262 else throw("Unknown chain")
261263 }
262264
263-let bm = {
264- let bj = bh
265- if ((base58'2W' == bj))
265+let bn = {
266+ let bk = bi
267+ if ((base58'2W' == bk))
266268 then 600000
267- else if ((base58'2T' == bj))
269+ else if ((base58'2T' == bk))
268270 then 60000
269271 else throw("Unknown chain")
270272 }
271273
272-let bn = "__"
273-
274-let bo = 1000000
275-
276-let bp = 100000000
277-
278-let bq = 25
279-
280-let br = 100
281-
282-let bs = 225
283-
284-let bt = 400
285-
286-let bu = 625
287-
288-func bv (bw,bx) = valueOrErrorMessage(getString(bw, bx), makeString(["mandatory ", toString(bw), ".", bx, " is not defined"], ""))
289-
290-
291-let by = 1
292-
293-let bz = 2
294-
295-let bA = 3
296-
297-let bB = 4
298-
299-func bC () = "%s__restConfig"
300-
301-
302-func bD () = "%s__restAddr"
303-
304-
305-func bE (bF) = split_4C(bv(bF, bC()), bn)
306-
307-
308-func bG (bH,bI) = valueOrErrorMessage(addressFromString(bH[bI]), ("Rest cfg doesn't contain address at index " + toString(bI)))
309-
310-
311-let bJ = addressFromStringValue(valueOrElse(getString(this, bD()), bk))
312-
313-let bH = bE(bJ)
314-
315-let S = bG(bH, by)
316-
317-let bK = bG(bH, bz)
318-
319-let bL = bG(bH, bA)
320-
321-let bM = bG(bH, bB)
322-
323-let bN = 0
324-
325-let bO = 1
326-
327-let bP = 2
328-
329-let bQ = 3
330-
331-func bR () = "resTypesProportions"
332-
333-
334-func bS (aL) = ("stakedLandsByOwner_" + aL)
335-
336-
337-func bT (aL) = ("stakedPiecesByOwner_" + aL)
338-
339-
340-func bU (bV) = {
341- let bj = bV
342- if ($isInstanceOf(bj, "String"))
274+let bo = "__"
275+
276+let bp = 1000000
277+
278+let bq = 100000000
279+
280+let br = 25
281+
282+let bs = 100
283+
284+let bt = 225
285+
286+let bu = 400
287+
288+let bv = 625
289+
290+func bw (bx,by) = valueOrErrorMessage(getString(bx, by), makeString(["mandatory ", toString(bx), ".", by, " is not defined"], ""))
291+
292+
293+let bz = 1
294+
295+let bA = 2
296+
297+let bB = 3
298+
299+let bC = 4
300+
301+func bD () = "%s__restConfig"
302+
303+
304+func bE () = "%s__restAddr"
305+
306+
307+func bF (bG) = split_4C(bw(bG, bD()), bo)
308+
309+
310+func bH (bI,bJ) = valueOrErrorMessage(addressFromString(bI[bJ]), ("Rest cfg doesn't contain address at index " + toString(bJ)))
311+
312+
313+let bK = addressFromStringValue(valueOrElse(getString(this, bE()), bl))
314+
315+let bI = bF(bK)
316+
317+let T = bH(bI, bz)
318+
319+let bL = bH(bI, bA)
320+
321+let bM = bH(bI, bB)
322+
323+let bN = bH(bI, bC)
324+
325+let bO = 0
326+
327+let bP = 1
328+
329+let bQ = 2
330+
331+let bR = 3
332+
333+func bS () = "resTypesProportions"
334+
335+
336+func bT (aM) = ("stakedLandsByOwner_" + aM)
337+
338+
339+func bU (aM) = ("stakedPiecesByOwner_" + aM)
340+
341+
342+func bV (bW) = {
343+ let bk = bW
344+ if ($isInstanceOf(bk, "String"))
343345 then {
344- let bW = bj
345- bW
346+ let bX = bk
347+ bX
346348 }
347349 else throw("fail to cast into String")
348350 }
349351
350352
351-func bX (bV) = {
352- let bj = bV
353- if ($isInstanceOf(bj, "Int"))
353+func bY (bW) = {
354+ let bk = bW
355+ if ($isInstanceOf(bk, "Int"))
354356 then {
355- let bY = bj
356- bY
357+ let bZ = bk
358+ bZ
357359 }
358360 else throw("fail to cast into Int")
359361 }
360362
361363
362-func bZ (ca) = {
363- let bj = ca
364- if (("S" == bj))
365- then bq
366- else if (("M" == bj))
367- then br
368- else if (("L" == bj))
369- then bs
370- else if (("XL" == bj))
371- then bt
372- else if (("XXL" == bj))
373- then bu
364+func ca (cb) = {
365+ let bk = cb
366+ if (("S" == bk))
367+ then br
368+ else if (("M" == bk))
369+ then bs
370+ else if (("L" == bk))
371+ then bt
372+ else if (("XL" == bk))
373+ then bu
374+ else if (("XXL" == bk))
375+ then bv
374376 else throw("Unknown land size")
375377 }
376378
377379
378-let cb = {
379- let bj = bh
380- if ((base58'2W' == bj))
380+func cc (bX) = isDefined(parseInt(bX))
381+
382+
383+let cd = {
384+ let bk = bi
385+ if ((base58'2W' == bk))
381386 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
382- else if ((base58'2T' == bj))
387+ else if ((base58'2T' == bk))
383388 then this
384389 else throw("Unknown chain")
385390 }
386391
387-let cc = {
388- let bj = bh
389- if ((base58'2W' == bj))
392+let ce = {
393+ let bk = bi
394+ if ((base58'2W' == bk))
390395 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
391- else if ((base58'2T' == bj))
396+ else if ((base58'2T' == bk))
392397 then this
393398 else throw("Unknown chain")
394399 }
395400
396-let cd = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
397-
398-let ce = [30, 60, 120]
399-
400-let cf = 300000
401-
402-let cg = 5000000
403-
404-let ch = 50
405-
406-let ci = 10000000
407-
408-let cj = {
409- let bj = bh
410- if ((base58'2W' == bj))
401+let cf = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
402+
403+let cg = [30, 60, 120]
404+
405+let ch = 300000
406+
407+let ci = 5000000
408+
409+let cj = 50
410+
411+let ck = 10000000
412+
413+let cl = {
414+ let bk = bi
415+ if ((base58'2W' == bk))
411416 then 252289527462
412- else if ((base58'2T' == bj))
417+ else if ((base58'2T' == bk))
413418 then 2522895274
414419 else throw("Unknown chain")
415420 }
416421
417-let ck = {
418- let bj = bh
419- if ((base58'2W' == bj))
422+let cm = {
423+ let bk = bi
424+ if ((base58'2W' == bk))
420425 then 250000000
421- else if ((base58'2T' == bj))
426+ else if ((base58'2T' == bk))
422427 then 250000000
423428 else throw("Unknown chain")
424429 }
425430
426-let cl = toBigInt(5)
427-
428-let cm = toBigInt(20)
429-
430-let cn = toBigInt((20 * 20))
431-
432-let co = toBigInt(((20 * 20) * 20))
433-
434-let cp = toBigInt((((20 * 20) * 20) * 20))
435-
436-let cq = toBigInt(((((20 * 20) * 20) * 20) * 20))
437-
438-let cr = 500
439-
440-func cs () = "nextLandNum"
441-
442-
443-func ct (cu) = ("landToAsset_" + cu)
444-
445-
446-func cv (cw) = ("landByCustomName_" + cw)
447-
448-
449-func cx (aD,aL) = ((("infraLevelByAssetIdAndOwner_" + aD) + "_") + aL)
450-
451-
452-func cy (aI,aD,aL) = makeString(["landArtStatusByTypeAssetIdAndOwner", aI, aD, aL], "_")
453-
454-
455-func cz (cu) = ("landOwner_" + cu)
456-
457-
458-func cA (cw) = ("duckByCustomName_" + cw)
459-
460-
461-func cB (cw) = ("accountByCustomName_" + cw)
462-
463-
464-func cC () = "oldiesList"
465-
466-
467-let cD = 0
468-
469-let cE = 1
470-
471-let cF = 2
472-
473-let cG = 0
474-
475-let cH = 5
476-
477-let cI = 6
478-
479-let cJ = 7
480-
481-func cK (cu,ca) = ((W + cu) + ca)
482-
483-
484-func cL (cM,cN) = {
485- let cO = (((((cN[0] + cN[1]) + cN[2]) + cN[3]) + cN[4]) + cN[5])
486- if ((0 >= cO))
431+let cn = toBigInt(5)
432+
433+let co = toBigInt(20)
434+
435+let cp = toBigInt((20 * 20))
436+
437+let cq = toBigInt(((20 * 20) * 20))
438+
439+let cr = toBigInt((((20 * 20) * 20) * 20))
440+
441+let cs = toBigInt(((((20 * 20) * 20) * 20) * 20))
442+
443+let ct = 500
444+
445+func cu () = "nextLandNum"
446+
447+
448+func cv (cw) = ("landToAsset_" + cw)
449+
450+
451+func cx (cy) = ("landByCustomName_" + cy)
452+
453+
454+func cz (aE,aM) = ((("infraLevelByAssetIdAndOwner_" + aE) + "_") + aM)
455+
456+
457+func cA (aJ,aE,aM) = makeString(["landArtStatusByTypeAssetIdAndOwner", aJ, aE, aM], "_")
458+
459+
460+func cB (cw) = ("landOwner_" + cw)
461+
462+
463+func cC (cy) = ("duckByCustomName_" + cy)
464+
465+
466+func cD (cy) = ("accountByCustomName_" + cy)
467+
468+
469+func cE () = "oldiesList"
470+
471+
472+let cF = 0
473+
474+let cG = 1
475+
476+let cH = 2
477+
478+let cI = 0
479+
480+let cJ = 5
481+
482+let cK = 6
483+
484+let cL = 7
485+
486+func cM (cw,cb) = ((X + cw) + cb)
487+
488+
489+func cN (cO,cP) = {
490+ let cQ = (((((cP[0] + cP[1]) + cP[2]) + cP[3]) + cP[4]) + cP[5])
491+ if ((0 >= cQ))
487492 then throw("Zero weights sum")
488493 else {
489- let cP = fraction(cM, bo, cO)
490- func cQ (cR,cS) = (cR :+ fraction(cS, cP, bo))
491-
492- let cT = cN
493- let cU = size(cT)
494- let cV = nil
495- func cW (cX,cY) = if ((cY >= cU))
496- then cX
497- else cQ(cX, cT[cY])
498-
499- func cZ (cX,cY) = if ((cY >= cU))
500- then cX
494+ let cR = fraction(cO, bp, cQ)
495+ func cS (cT,cU) = (cT :+ fraction(cU, cR, bp))
496+
497+ let cV = cP
498+ let cW = size(cV)
499+ let cX = nil
500+ func cY (cZ,da) = if ((da >= cW))
501+ then cZ
502+ else cS(cZ, cV[da])
503+
504+ func db (cZ,da) = if ((da >= cW))
505+ then cZ
501506 else throw("List size exceeds 6")
502507
503- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
504- }
505- }
506-
507-
508-func da (cM) = {
509- let db = split(value(getString(bR())), "_")
510- if ((size(db) != Z))
508+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
509+ }
510+ }
511+
512+
513+func dc (cO) = {
514+ let dd = split(value(getString(bS())), "_")
515+ if ((size(dd) != aa))
511516 then throw("Wrong proportions data")
512517 else {
513- let dc = [parseIntValue(db[0]), parseIntValue(db[1]), parseIntValue(db[2]), parseIntValue(db[3]), parseIntValue(db[4]), parseIntValue(db[5])]
514- cL(cM, dc)
515- }
516- }
517-
518-
519-func dd (de,df,dg) = {
520- let dh = da(dg)
521- func di (cR,bI) = {
522- let dj = (parseIntValue(df[bI]) - dh[bI])
523- if ((0 > dj))
524- then throw(((((("Not enough material idx=" + toString(bI)) + ", you have ") + df[bI]) + ", but need ") + toString(dh[bI])))
525- else (cR :+ toString(dj))
526- }
527-
528- if (de)
518+ let de = [parseIntValue(dd[0]), parseIntValue(dd[1]), parseIntValue(dd[2]), parseIntValue(dd[3]), parseIntValue(dd[4]), parseIntValue(dd[5])]
519+ cN(cO, de)
520+ }
521+ }
522+
523+
524+func df (dg,dh,di) = {
525+ let dj = dc(di)
526+ func dk (cT,bJ) = {
527+ let dl = (parseIntValue(dh[bJ]) - dj[bJ])
528+ if ((0 > dl))
529+ then throw(((((("Not enough material idx=" + toString(bJ)) + ", you have ") + dh[bJ]) + ", but need ") + toString(dj[bJ])))
530+ else (cT :+ toString(dl))
531+ }
532+
533+ if (dg)
529534 then {
530- let cT = [0, 1, 2, 3, 4, 5]
531- let cU = size(cT)
532- let cV = nil
533- func cW (cX,cY) = if ((cY >= cU))
534- then cX
535- else di(cX, cT[cY])
536-
537- func cZ (cX,cY) = if ((cY >= cU))
538- then cX
535+ let cV = [0, 1, 2, 3, 4, 5]
536+ let cW = size(cV)
537+ let cX = nil
538+ func cY (cZ,da) = if ((da >= cW))
539+ then cZ
540+ else dk(cZ, cV[da])
541+
542+ func db (cZ,da) = if ((da >= cW))
543+ then cZ
539544 else throw("List size exceeds 6")
540545
541- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
542- }
543- else df
544- }
545-
546-
547-func dk (dl,dm) = if ((dm == ""))
548- then dl
549- else {
550- let dn = if ((dl == ""))
551- then nil
552- else split(dl, "_")
553- func do (cR,dp) = {
554- let dq = cR._1
555- func dr (ds,dt) = {
556- let du = split(dt, ",")
557- if ((size(du) != 2))
558- then throw("Incorrect format, should be index,amount")
546+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
547+ }
548+ else dh
549+ }
550+
551+
552+func dm (dn,do) = {
553+ func dp (cT,dq) = {
554+ let dr = split(dq, ",")
555+ if ((size(dr) != 2))
556+ then throw("Incorrect format, should be index,amount")
557+ else {
558+ let bJ = parseIntValue(dr[0])
559+ if (if ((0 > bJ))
560+ then true
561+ else (bJ >= size(ak)))
562+ then throw("Unknown product idx")
559563 else {
560- let bI = parseIntValue(du[0])
561- if (if ((0 > bI))
562- then true
563- else (bI >= size(aj)))
564- then throw("Unknown product idx")
565- else if ((bI != dq))
566- then ds
567- else {
568- let dv = parseIntValue(du[1])
569- if ((0 >= dv))
570- then throw("Pass only positive amounts")
571- else (ds + dv)
572- }
564+ let ds = parseIntValue(dr[1])
565+ let dt = split(cT, (dr[0] + ":"))
566+ if ((size(dt) != 2))
567+ then throw((("You don't have " + ah[bJ]) + " equipped"))
568+ else {
569+ let du = dt[1]
570+ let dv = if (cc(take(drop(du, 1), 1)))
571+ then 2
572+ else 1
573+ let dw = parseIntValue(take(du, dv))
574+ let dx = drop(du, dv)
575+ let dy = if ((dw >= ds))
576+ then (dw - ds)
577+ else throw(((((("You equipped " + toString(dw)) + " of ") + ah[bJ]) + ", but tried to use ") + toString(ds)))
578+ ((((dt[0] + dr[0]) + ":") + toString(dy)) + dx)
579+ }
573580 }
574581 }
575-
576- let dw = {
577- let cT = split(dm, "_")
578- let cU = size(cT)
579- let cV = 0
580- func cW (cX,cY) = if ((cY >= cU))
581- then cX
582- else dr(cX, cT[cY])
583-
584- func cZ (cX,cY) = if ((cY >= cU))
585- then cX
586- else throw("List size exceeds 10")
587-
588- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
589- }
590- let dx = if ((size(dn) > dq))
591- then parseIntValue(dn[dq])
592- else 0
593- let dy = if ((dx >= dw))
594- then (dx - dw)
595- else throw(((((("You have " + toString(dx)) + " of ") + ag[dq]) + ", but tried to use ") + toString(dw)))
596- $Tuple2((dq + 1), (cR._2 :+ toString(dy)))
597- }
598-
599- let dz = {
600- let cT = aj
601- let cU = size(cT)
602- let cV = $Tuple2(0, nil)
603- func cW (cX,cY) = if ((cY >= cU))
604- then cX
605- else do(cX, cT[cY])
606-
607- func cZ (cX,cY) = if ((cY >= cU))
608- then cX
609- else throw("List size exceeds 50")
610-
611- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
612- }
613- makeString(dz._2, "_")
614- }
615-
616-
617-func dA (dB) = {
618- let dn = if ((dB == ""))
582+ }
583+
584+ let cV = split(do, "_")
585+ let cW = size(cV)
586+ let cX = dn
587+ func cY (cZ,da) = if ((da >= cW))
588+ then cZ
589+ else dp(cZ, cV[da])
590+
591+ func db (cZ,da) = if ((da >= cW))
592+ then cZ
593+ else throw("List size exceeds 10")
594+
595+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
596+ }
597+
598+
599+func dz (dA) = {
600+ let dB = if ((dA == ""))
619601 then nil
620- else split(dB, "_")
621- func dC (cR,bf) = {
622- let dq = (size(cR) / 8)
623- let dx = if ((size(dn) > dq))
624- then parseIntValue(dn[dq])
602+ else split(dA, "_")
603+ func dC (cT,bg) = {
604+ let dD = (size(cT) / 8)
605+ let dw = if ((size(dB) > dD))
606+ then parseIntValue(dB[dD])
625607 else 0
626- (cR + toBytes(dx))
627- }
628-
629- let cT = aj
630- let cU = size(cT)
631- let cV = base58''
632- func cW (cX,cY) = if ((cY >= cU))
633- then cX
634- else dC(cX, cT[cY])
635-
636- func cZ (cX,cY) = if ((cY >= cU))
637- then cX
608+ (cT + toBytes(dw))
609+ }
610+
611+ let cV = ak
612+ let cW = size(cV)
613+ let cX = base58''
614+ func cY (cZ,da) = if ((da >= cW))
615+ then cZ
616+ else dC(cZ, cV[da])
617+
618+ func db (cZ,da) = if ((da >= cW))
619+ then cZ
638620 else throw("List size exceeds 50")
639621
640- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
641- }
642-
643-
644-func dD (dE) = {
645- func dF (cR,bf) = {
646- let dq = size(cR)
647- let dG = take(drop(dE, (8 * dq)), 8)
648- (cR :+ toString(toInt(dG)))
622+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
623+ }
624+
625+
626+func dE (dF) = {
627+ func dG (cT,bg) = {
628+ let dD = size(cT)
629+ let dH = take(drop(dF, (8 * dD)), 8)
630+ (cT :+ toString(toInt(dH)))
649631 }
650632
651633 makeString({
652- let cT = aj
653- let cU = size(cT)
654- let cV = nil
655- func cW (cX,cY) = if ((cY >= cU))
656- then cX
657- else dF(cX, cT[cY])
658-
659- func cZ (cX,cY) = if ((cY >= cU))
660- then cX
634+ let cV = ak
635+ let cW = size(cV)
636+ let cX = nil
637+ func cY (cZ,da) = if ((da >= cW))
638+ then cZ
639+ else dG(cZ, cV[da])
640+
641+ func db (cZ,da) = if ((da >= cW))
642+ then cZ
661643 else throw("List size exceeds 50")
662644
663- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
645+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
664646 }, "_")
665647 }
666648
667649
668-func dH (dI,dJ) = {
669- func dK (cR,dq) = if ((parseIntValue(dJ[dq]) > dI[dq]))
670- then throw(("Requirement not satisfied: " + g[dq]))
650+func dI (dJ,dK) = {
651+ func dL (cT,dD) = if ((parseIntValue(dK[dD]) > dJ[dD]))
652+ then throw(("Requirement not satisfied: " + g[dD]))
671653 else true
672654
673- let cT = [0, 1, 2, 3, 4, 5, 6]
674- let cU = size(cT)
675- let cV = false
676- func cW (cX,cY) = if ((cY >= cU))
677- then cX
678- else dK(cX, cT[cY])
679-
680- func cZ (cX,cY) = if ((cY >= cU))
681- then cX
655+ let cV = [0, 1, 2, 3, 4, 5, 6]
656+ let cW = size(cV)
657+ let cX = false
658+ func cY (cZ,da) = if ((da >= cW))
659+ then cZ
660+ else dL(cZ, cV[da])
661+
662+ func db (cZ,da) = if ((da >= cW))
663+ then cZ
682664 else throw("List size exceeds 7")
683665
684- cZ(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7)
685- }
686-
687-
688-func dL (dM,dn,dN,dO,dP,dQ,dI) = {
689- let du = split(dM, ":")
690- if ((size(du) != 2))
666+ db(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7)
667+ }
668+
669+
670+func dM (dN,dB,dO,dP,dQ,dR,dJ) = {
671+ let dr = split(dN, ":")
672+ if ((size(dr) != 2))
691673 then throw("Incorrect format, should be index:amount")
692- else {
693- let dR = parseIntValue(du[0])
694- let dS = parseIntValue(du[1])
695- if (if ((0 > dR))
696- then true
697- else (dR >= size(aj)))
698- then throw("Unknown product idx")
699- else if ((0 > dS))
700- then throw("Count can't be negative")
701- else if ((dS == 0))
702- then $Tuple2(dn, false)
703- else {
704- let dT = take(dn, (8 * dR))
705- let dx = toInt(take(drop(dn, (8 * dR)), 8))
706- let dU = drop(dn, (8 * (dR + 1)))
707- let bf = split(aj[dR], "_")
708- if (if (!(dN))
709- then (dS > dx)
710- else false)
711- then throw(((((("You have " + toString(dx)) + " of ") + ag[dR]) + ", but tried to use ") + toString(dS)))
674+ else if ((size(dr[0]) != 2))
675+ then throw("Product idx should be 2 digits, zero padded")
676+ else {
677+ let dS = parseIntValue(dr[0])
678+ let dT = parseIntValue(dr[1])
679+ if (if ((0 > dS))
680+ then true
681+ else (dS >= size(ak)))
682+ then throw("Unknown product idx")
683+ else if ((0 > dT))
684+ then throw("Count can't be negative")
685+ else if ((dT > p))
686+ then throw(((("Can't put more than " + toString(p)) + " of ") + ah[dS]))
687+ else if ((dT == 0))
688+ then $Tuple2(dB, false)
712689 else {
713- let dV = if (if (!(dN))
714- then dH(dI, split(bf[al], ","))
690+ let dU = take(dB, (8 * dS))
691+ let dw = toInt(take(drop(dB, (8 * dS)), 8))
692+ let dx = drop(dB, (8 * (dS + 1)))
693+ let bg = split(ak[dS], "_")
694+ if (if (!(dO))
695+ then (dT > dw)
715696 else false)
716- then {
717- let dW = bf[am]
718- if ((dW == ""))
719- then throw("Item cannot be equipped")
720- else {
721- let dX = parseIntValue(dW)
722- let dY = (dX / 100)
723- if ((dO != dY))
724- then throw("Segment incompatible")
697+ then throw(((((("You have " + toString(dw)) + " of ") + ah[dS]) + ", but tried to use ") + toString(dT)))
698+ else {
699+ let dV = if (if (!(dO))
700+ then dI(dJ, split(bg[am], ","))
701+ else false)
702+ then {
703+ let dW = bg[an]
704+ if ((dW == ""))
705+ then throw("Item cannot be equipped")
725706 else {
726- let dZ = ((dX % 100) / 10)
727- if ((dP != dZ))
728- then throw("Slot incompatible")
707+ let dX = parseIntValue(dW)
708+ let dY = (dX / 100)
709+ if ((dP != dY))
710+ then throw("Segment incompatible")
729711 else {
730- let ea = (dX % 10)
731- if (if ((dQ != 0))
732- then (ea > 1)
733- else false)
734- then throw("Big items should occupy slot 0")
735- else (ea > 1)
712+ let dZ = ((dX % 100) / 10)
713+ if ((dQ != dZ))
714+ then throw("Slot incompatible")
715+ else {
716+ let ea = (dX % 10)
717+ if (if ((dR != 0))
718+ then (ea > 1)
719+ else false)
720+ then throw("Big items should occupy slot 0")
721+ else (ea > 1)
722+ }
736723 }
737724 }
738725 }
726+ else false
727+ $Tuple2(((dU + toBytes((dw + (if (dO)
728+ then dT
729+ else -(dT))))) + dx), dV)
739730 }
740- else false
741- $Tuple2(((dT + toBytes((dx + (if (dN)
742- then dS
743- else -(dS))))) + dU), dV)
744731 }
745- }
746- }
747- }
748-
749-
750-func eb (ec,ed,dN,dO,dP,dJ) = if ((ec != ""))
732+ }
733+ }
734+
735+
736+func eb (ec,ed,dO,dP,dQ,dK) = if ((ec != ""))
751737 then {
752738 let ee = split(ec, ",")
753739 if ((size(ee) > o))
754740 then throw("Wrong slots format")
755741 else {
756742 let ef = ee[0]
757743 let eg = if ((size(ee) > 1))
758744 then ee[1]
759745 else ""
760746 if (if ((ef == ""))
761747 then (eg == "")
762748 else false)
763749 then ed
764750 else {
765751 let eh = if ((ef != ""))
766- then dL(ef, ed, dN, dO, dP, 0, dJ)
752+ then dM(ef, ed, dO, dP, dQ, 0, dK)
767753 else $Tuple2(ed, false)
768754 if ((eg != ""))
769755 then if (eh._2)
770756 then throw("Big item already occupies slot")
771- else dL(eg, eh._1, dN, dO, dP, 1, dJ)._1
757+ else dM(eg, eh._1, dO, dP, dQ, 1, dK)._1
772758 else eh._1
773759 }
774760 }
775761 }
776762 else ed
777763
778764
779-func ei (ej,ek,dN,dJ) = {
780- func dO (cR,el) = {
781- let dq = cR._1
782- let dP = split(el, ";")
783- if ((size(dP) != n))
765+func ei (ej,ek,dO,dK) = {
766+ func dP (cT,el) = {
767+ let dD = cT._1
768+ let dQ = split(el, ";")
769+ if ((size(dQ) != n))
784770 then throw("Wrong segment format")
785771 else {
786- let em = dP[0]
787- let dw = dP[1]
772+ let em = dQ[0]
773+ let en = dQ[1]
788774 if (if ((em == ""))
789- then (dw == "")
775+ then (en == "")
790776 else false)
791- then $Tuple2((dq + 1), cR._2)
777+ then $Tuple2((dD + 1), cT._2)
792778 else {
793- let en = eb(em, cR._2, dN, dq, 0, dJ)
794- $Tuple2((dq + 1), eb(dw, en, dN, dq, 1, dJ))
779+ let eo = eb(em, cT._2, dO, dD, 0, dK)
780+ $Tuple2((dD + 1), eb(en, eo, dO, dD, 1, dK))
795781 }
796782 }
797783 }
798784
799-( let cT = ej
800- let cU = size(cT)
801- let cV = $Tuple2(0, ek)
802- func cW (cX,cY) = if ((cY >= cU))
803- then cX
804- else dO(cX, cT[cY])
805-
806- func cZ (cX,cY) = if ((cY >= cU))
807- then cX
785+( let cV = ej
786+ let cW = size(cV)
787+ let cX = $Tuple2(0, ek)
788+ func cY (cZ,da) = if ((da >= cW))
789+ then cZ
790+ else dP(cZ, cV[da])
791+
792+ func db (cZ,da) = if ((da >= cW))
793+ then cZ
808794 else throw("List size exceeds 6")
809795
810- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6))._2
811- }
812-
813-
814-func eo (ep,eq,er,es) = if ((size(ep) != Z))
796+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6))._2
797+ }
798+
799+
800+func ep (eq,er,es,et) = if ((size(eq) != aa))
815801 then throw("Wrong proportions data")
816802 else {
817- func et (cR,eu) = {
818- let dj = (parseIntValue(ep[eu]) + ((es * eq[eu]) * er))
819- if ((0 > dj))
820- then throw(((((((("Panic! Pieces of type=" + toString(eu)) + ", sign=") + toString(es)) + ", terrainCounts[i]=") + toString(eq[eu])) + ", landSizeIndex=") + toString(er)))
821- else (cR :+ toString(dj))
822- }
823-
824- let dc = {
825- let cT = [0, 1, 2, 3, 4, 5]
826- let cU = size(cT)
827- let cV = nil
828- func cW (cX,cY) = if ((cY >= cU))
829- then cX
830- else et(cX, cT[cY])
831-
832- func cZ (cX,cY) = if ((cY >= cU))
833- then cX
803+ func eu (cT,ev) = {
804+ let dl = (parseIntValue(eq[ev]) + ((et * er[ev]) * es))
805+ if ((0 > dl))
806+ then throw(((((((("Panic! Pieces of type=" + toString(ev)) + ", sign=") + toString(et)) + ", terrainCounts[i]=") + toString(er[ev])) + ", landSizeIndex=") + toString(es)))
807+ else (cT :+ toString(dl))
808+ }
809+
810+ let de = {
811+ let cV = [0, 1, 2, 3, 4, 5]
812+ let cW = size(cV)
813+ let cX = nil
814+ func cY (cZ,da) = if ((da >= cW))
815+ then cZ
816+ else eu(cZ, cV[da])
817+
818+ func db (cZ,da) = if ((da >= cW))
819+ then cZ
834820 else throw("List size exceeds 6")
835821
836- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
837- }
838- makeString(dc, "_")
839- }
840-
841-
842-func ev (eq,er,es) = {
843- let ep = split(valueOrElse(getString(bR()), "0_0_0_0_0_0"), "_")
844- eo(ep, eq, er, es)
845- }
846-
847-
848-func ew (ex) = [(size(split(ex, "A")) - 1), (size(split(ex, "B")) - 1), (size(split(ex, "C")) - 1), (size(split(ex, "D")) - 1), (size(split(ex, "E")) - 1), (size(split(ex, "F")) - 1)]
849-
850-
851-func ey (ez,eq,eA,er,eB) = {
852- func eC (cR,eu) = {
853- let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
854- (cR :+ toString((parseIntValue(ez[eu]) + eD)))
855- }
856-
857- let dc = {
858- let cT = [0, 1, 2, 3, 4, 5]
859- let cU = size(cT)
860- let cV = nil
861- func cW (cX,cY) = if ((cY >= cU))
862- then cX
863- else eC(cX, cT[cY])
864-
865- func cZ (cX,cY) = if ((cY >= cU))
866- then cX
822+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
823+ }
824+ makeString(de, "_")
825+ }
826+
827+
828+func ew (er,es,et) = {
829+ let eq = split(valueOrElse(getString(bS()), "0_0_0_0_0_0"), "_")
830+ ep(eq, er, es, et)
831+ }
832+
833+
834+func ex (ey) = [(size(split(ey, "A")) - 1), (size(split(ey, "B")) - 1), (size(split(ey, "C")) - 1), (size(split(ey, "D")) - 1), (size(split(ey, "E")) - 1), (size(split(ey, "F")) - 1)]
835+
836+
837+func ez (eA,er,eB,es,eC) = {
838+ func eD (cT,ev) = {
839+ let eE = ((fraction(eB, eC, ac) * er[ev]) * es)
840+ (cT :+ toString((parseIntValue(eA[ev]) + eE)))
841+ }
842+
843+ let de = {
844+ let cV = [0, 1, 2, 3, 4, 5]
845+ let cW = size(cV)
846+ let cX = nil
847+ func cY (cZ,da) = if ((da >= cW))
848+ then cZ
849+ else eD(cZ, cV[da])
850+
851+ func db (cZ,da) = if ((da >= cW))
852+ then cZ
867853 else throw("List size exceeds 6")
868854
869- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
870- }
871- makeString(dc, "_")
872- }
873-
874-
875-func eE (eq,eA,er,eB) = {
876- func eC (cR,eu) = {
877- let eD = ((fraction(eA, eB, ab) * eq[eu]) * er)
878- $Tuple2((cR._1 :+ eD), (cR._2 + eD))
879- }
880-
881- let cT = [0, 1, 2, 3, 4, 5]
882- let cU = size(cT)
883- let cV = $Tuple2(nil, 0)
884- func cW (cX,cY) = if ((cY >= cU))
885- then cX
886- else eC(cX, cT[cY])
887-
888- func cZ (cX,cY) = if ((cY >= cU))
889- then cX
855+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
856+ }
857+ makeString(de, "_")
858+ }
859+
860+
861+func eF (er,eB,es,eC) = {
862+ func eD (cT,ev) = {
863+ let eE = ((fraction(eB, eC, ac) * er[ev]) * es)
864+ $Tuple2((cT._1 :+ eE), (cT._2 + eE))
865+ }
866+
867+ let cV = [0, 1, 2, 3, 4, 5]
868+ let cW = size(cV)
869+ let cX = $Tuple2(nil, 0)
870+ func cY (cZ,da) = if ((da >= cW))
871+ then cZ
872+ else eD(cZ, cV[da])
873+
874+ func db (cZ,da) = if ((da >= cW))
875+ then cZ
890876 else throw("List size exceeds 6")
891877
892- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
893- }
894-
895-
896-func eF (eG,eH,eI,eJ) = {
897- let eK = eI._1
898- let eL = eI._2
899- if ((eL == 0))
900- then $Tuple2(makeString(eG, "_"), makeString(eH, "_"))
901- else if ((eJ >= eL))
878+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
879+ }
880+
881+
882+func eG (eH,eI,eJ,eK) = {
883+ let eL = eJ._1
884+ let eM = eJ._2
885+ if ((eM == 0))
886+ then $Tuple2(makeString(eH, "_"), makeString(eI, "_"))
887+ else if ((eK >= eM))
902888 then {
903- func eM (cR,eu) = (cR :+ toString((parseIntValue(eG[eu]) + eK[eu])))
904-
905- let dc = {
906- let cT = [0, 1, 2, 3, 4, 5]
907- let cU = size(cT)
908- let cV = nil
909- func cW (cX,cY) = if ((cY >= cU))
910- then cX
911- else eM(cX, cT[cY])
912-
913- func cZ (cX,cY) = if ((cY >= cU))
914- then cX
889+ func eN (cT,ev) = (cT :+ toString((parseIntValue(eH[ev]) + eL[ev])))
890+
891+ let de = {
892+ let cV = [0, 1, 2, 3, 4, 5]
893+ let cW = size(cV)
894+ let cX = nil
895+ func cY (cZ,da) = if ((da >= cW))
896+ then cZ
897+ else eN(cZ, cV[da])
898+
899+ func db (cZ,da) = if ((da >= cW))
900+ then cZ
915901 else throw("List size exceeds 6")
916902
917- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
903+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
918904 }
919- $Tuple2(makeString(dc, "_"), makeString(eH, "_"))
905+ $Tuple2(makeString(de, "_"), makeString(eI, "_"))
920906 }
921907 else {
922- func eN (cR,eu) = {
923- let eO = fraction(eK[eu], eJ, eL)
924- $Tuple2((cR._1 :+ toString((parseIntValue(eG[eu]) + eO))), (cR._2 :+ toString(((parseIntValue(eH[eu]) + eK[eu]) - eO))))
908+ func eO (cT,ev) = {
909+ let eP = fraction(eL[ev], eK, eM)
910+ $Tuple2((cT._1 :+ toString((parseIntValue(eH[ev]) + eP))), (cT._2 :+ toString(((parseIntValue(eI[ev]) + eL[ev]) - eP))))
925911 }
926912
927- let dc = {
928- let cT = [0, 1, 2, 3, 4, 5]
929- let cU = size(cT)
930- let cV = $Tuple2(nil, nil)
931- func cW (cX,cY) = if ((cY >= cU))
932- then cX
933- else eN(cX, cT[cY])
934-
935- func cZ (cX,cY) = if ((cY >= cU))
936- then cX
913+ let de = {
914+ let cV = [0, 1, 2, 3, 4, 5]
915+ let cW = size(cV)
916+ let cX = $Tuple2(nil, nil)
917+ func cY (cZ,da) = if ((da >= cW))
918+ then cZ
919+ else eO(cZ, cV[da])
920+
921+ func db (cZ,da) = if ((da >= cW))
922+ then cZ
937923 else throw("List size exceeds 6")
938924
939- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
925+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
940926 }
941- $Tuple2(makeString(dc._1, "_"), makeString(dc._2, "_"))
927+ $Tuple2(makeString(de._1, "_"), makeString(de._2, "_"))
942928 }
943929 }
944930
945931
946-func eP (eQ) = if ((eQ >= toBigInt(0)))
947- then eQ
948- else -(eQ)
949-
950-
951-let eR = [[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]]
952-
953-func eS (bY,eT) = {
954- let eU = toInt((bY % cm))
955- let eV = if ((eT[0] > eU))
932+func eQ (eR) = if ((eR >= toBigInt(0)))
933+ then eR
934+ else -(eR)
935+
936+
937+let eS = [[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]]
938+
939+func eT (bZ,eU) = {
940+ let eV = toInt((bZ % co))
941+ let eW = if ((eU[0] > eV))
956942 then "A"
957- else if ((eT[1] > eU))
943+ else if ((eU[1] > eV))
958944 then "B"
959- else if ((eT[2] > eU))
945+ else if ((eU[2] > eV))
960946 then "C"
961- else if ((eT[3] > eU))
947+ else if ((eU[3] > eV))
962948 then "D"
963- else if ((eT[4] > eU))
949+ else if ((eU[4] > eV))
964950 then "E"
965951 else "F"
966- eV
967- }
968-
969-
970-func eW (eX,eY) = {
971- let eZ = eR[eY]
972- func fa (cR,cS) = $Tuple2((((((cR._1 + eS(cR._2, eZ)) + eS((cR._2 / cm), eZ)) + eS((cR._2 / cn), eZ)) + eS((cR._2 / co), eZ)) + eS((cR._2 / cp), eZ)), (cR._2 / cq))
973-
974- let fb = {
975- let cT = [1, 2, 3, 4, 5]
976- let cU = size(cT)
977- let cV = $Tuple2("", (eX / cl))
978- func cW (cX,cY) = if ((cY >= cU))
979- then cX
980- else fa(cX, cT[cY])
981-
982- func cZ (cX,cY) = if ((cY >= cU))
983- then cX
952+ eW
953+ }
954+
955+
956+func eX (eY,eZ) = {
957+ let fa = eS[eZ]
958+ func fb (cT,cU) = $Tuple2((((((cT._1 + eT(cT._2, fa)) + eT((cT._2 / co), fa)) + eT((cT._2 / cp), fa)) + eT((cT._2 / cq), fa)) + eT((cT._2 / cr), fa)), (cT._2 / cs))
959+
960+ let fc = {
961+ let cV = [1, 2, 3, 4, 5]
962+ let cW = size(cV)
963+ let cX = $Tuple2("", (eY / cn))
964+ func cY (cZ,da) = if ((da >= cW))
965+ then cZ
966+ else fb(cZ, cV[da])
967+
968+ func db (cZ,da) = if ((da >= cW))
969+ then cZ
984970 else throw("List size exceeds 5")
985971
986- cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
987- }
988- fb._1
989- }
990-
991-
992-func fc (fd) = {
993- let fe = split(valueOrElse(getString(fd), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
994-[toString(valueOrElse(parseInt(fe[ax]), 0)), if ((size(split(fe[ay], "_")) == Z))
995- then fe[ay]
996- else "0_0_0_0_0_0", if ((size(split(fe[az], "_")) == Z))
997- then fe[az]
998- else "0_0_0_0_0_0", fe[aA]]
999- }
1000-
1001-
1002-func ff (fg) = {
1003- let du = split(fg, "_")
1004- ((ac * (parseIntValue(du[1]) + 1)) * parseIntValue(du[0]))
1005- }
1006-
1007-
1008-func fh (fi) = {
1009- let fj = fi[ar]
1010- func fk (cR,dp) = (cR + parseIntValue(dp))
1011-
1012- func fl (cR,dp) = {
1013- let bI = cR._1
1014- let fm = (((parseIntValue(dp) + an) - 1) / an)
1015- $Tuple2((bI + 1), (cR._2 + (fm * bp)))
1016- }
1017-
1018- let fn = {
1019- let cT = split(fi[ap], "_")
1020- let cU = size(cT)
1021- let cV = 0
1022- func cW (cX,cY) = if ((cY >= cU))
1023- then cX
1024- else fk(cX, cT[cY])
1025-
1026- func cZ (cX,cY) = if ((cY >= cU))
1027- then cX
972+ db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5)
973+ }
974+ fc._1
975+ }
976+
977+
978+func fd (fe) = {
979+ let ff = split(valueOrElse(getString(fe), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
980+[toString(valueOrElse(parseInt(ff[ay]), 0)), if ((size(split(ff[az], "_")) == aa))
981+ then ff[az]
982+ else "0_0_0_0_0_0", if ((size(split(ff[aA], "_")) == aa))
983+ then ff[aA]
984+ else "0_0_0_0_0_0", ff[aB]]
985+ }
986+
987+
988+func fg (fh) = {
989+ let dr = split(fh, "_")
990+ ((ad * (parseIntValue(dr[1]) + 1)) * parseIntValue(dr[0]))
991+ }
992+
993+
994+func fi (fj) = {
995+ let fk = fj[as]
996+ func fl (cT,fm) = (cT + parseIntValue(fm))
997+
998+ func fn (cT,fm) = {
999+ let bJ = cT._1
1000+ let fo = (((parseIntValue(fm) + ao) - 1) / ao)
1001+ $Tuple2((bJ + 1), (cT._2 + (fo * bq)))
1002+ }
1003+
1004+ let fp = {
1005+ let cV = split(fj[aq], "_")
1006+ let cW = size(cV)
1007+ let cX = 0
1008+ func cY (cZ,da) = if ((da >= cW))
1009+ then cZ
1010+ else fl(cZ, cV[da])
1011+
1012+ func db (cZ,da) = if ((da >= cW))
1013+ then cZ
10281014 else throw("List size exceeds 6")
10291015
1030- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1031- }
1032- let fo = {
1033- let cT = split(fi[aq], "_")
1034- let cU = size(cT)
1035- let cV = 0
1036- func fp (cX,cY) = if ((cY >= cU))
1037- then cX
1038- else fk(cX, cT[cY])
1039-
1040- func fq (cX,cY) = if ((cY >= cU))
1041- then cX
1016+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
1017+ }
1018+ let fq = {
1019+ let cV = split(fj[ar], "_")
1020+ let cW = size(cV)
1021+ let cX = 0
1022+ func fr (cZ,da) = if ((da >= cW))
1023+ then cZ
1024+ else fl(cZ, cV[da])
1025+
1026+ func fs (cZ,da) = if ((da >= cW))
1027+ then cZ
10421028 else throw("List size exceeds 6")
10431029
1044- fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1045- }
1046- let fr = if ((fj == ""))
1030+ fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6)
1031+ }
1032+ let ft = if ((fk == ""))
10471033 then 0
1048- else ( let cT = split_4C(fj, "_")
1049- let cU = size(cT)
1050- let cV = $Tuple2(0, 0)
1051- func fs (cX,cY) = if ((cY >= cU))
1052- then cX
1053- else fl(cX, cT[cY])
1054-
1055- func ft (cX,cY) = if ((cY >= cU))
1056- then cX
1034+ else ( let cV = split_4C(fk, "_")
1035+ let cW = size(cV)
1036+ let cX = $Tuple2(0, 0)
1037+ func fu (cZ,da) = if ((da >= cW))
1038+ then cZ
1039+ else fn(cZ, cV[da])
1040+
1041+ func fv (cZ,da) = if ((da >= cW))
1042+ then cZ
10571043 else throw("List size exceeds 50")
10581044
1059- ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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
1060- ((fn + fo) + fr)
1061- }
1062-
1063-
1064-func fu (fv,fw,fx) = {
1065- let fg = ((toString(fw) + "_") + toString(fx))
1066- let fy = ff(fg)
1067- let fz = valueOrElse(getString(fv), (fg + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1068- let fA = split_4C(fz, ":")
1069- let fB = fh(fA)
1070- let fC = if ((5 > size(fA)))
1071- then makeString(["0", toString(fB), toString((fy - fB)), toString(fy)], "_")
1072- else {
1073- let fD = split(fA[as], "_")
1074- let fE = parseIntValue(fD[at])
1075- let fF = if ((size(fD) > 1))
1076- then parseIntValue(fD[au])
1077- else fB
1078- makeString([toString(fE), toString(fF), toString(((fy - fE) - fF)), toString(fy)], "_")
1079- }
1080-[fA[ao], if ((size(split(fA[ap], "_")) == Z))
1081- then fA[ap]
1082- else "0_0_0_0_0_0", if ((size(split(fA[aq], "_")) == Z))
1083- then fA[aq]
1084- else "0_0_0_0_0_0", fA[ar], fC]
1085- }
1086-
1087-
1088-func fG (fi) = {
1089- let fH = fh(fi)
1090- let fI = parseIntValue(split(fi[as], "_")[at])
1091- ((ff(fi[ao]) - fH) - fI)
1092- }
1093-
1094-
1095-func fJ (fK,fL) = {
1096- let fm = if ((fK >= 0))
1097- then (((fK + fL) - 1) / fL)
1098- else -((((-(fK) + fL) - 1) / fL))
1099- (fm * bp)
1100- }
1101-
1102-
1103-func fM (fN,fi,fO) = if ((size(fN) != 3))
1045+ fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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
1046+ ((fp + fq) + ft)
1047+ }
1048+
1049+
1050+func fw (fx,fy,fz) = {
1051+ let fh = ((toString(fy) + "_") + toString(fz))
1052+ let fA = fg(fh)
1053+ let fB = valueOrElse(getString(fx), (fh + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1054+ let fC = split_4C(fB, ":")
1055+ let fD = fi(fC)
1056+ let fE = if ((5 > size(fC)))
1057+ then makeString(["0", toString(fD), toString((fA - fD)), toString(fA)], "_")
1058+ else {
1059+ let fF = split(fC[at], "_")
1060+ let fG = parseIntValue(fF[au])
1061+ let fH = if ((size(fF) > 1))
1062+ then parseIntValue(fF[av])
1063+ else fD
1064+ makeString([toString(fG), toString(fH), toString(((fA - fG) - fH)), toString(fA)], "_")
1065+ }
1066+[fC[ap], if ((size(split(fC[aq], "_")) == aa))
1067+ then fC[aq]
1068+ else "0_0_0_0_0_0", if ((size(split(fC[ar], "_")) == aa))
1069+ then fC[ar]
1070+ else "0_0_0_0_0_0", fC[as], fE]
1071+ }
1072+
1073+
1074+func fI (fj) = {
1075+ let fJ = fi(fj)
1076+ let fK = parseIntValue(split(fj[at], "_")[au])
1077+ ((fg(fj[ap]) - fJ) - fK)
1078+ }
1079+
1080+
1081+func fL (fM,fN) = {
1082+ let fo = if ((fM >= 0))
1083+ then (((fM + fN) - 1) / fN)
1084+ else -((((-(fM) + fN) - 1) / fN))
1085+ (fo * bq)
1086+ }
1087+
1088+
1089+func fO (fP,fj,fQ) = if ((size(fP) != 3))
11041090 then throw("cargoListStr should contain exactly 2 ':' separators")
11051091 else {
1106- let fP = split(fN[0], "_")
1107- let fQ = split(fN[1], "_")
1108- let fR = if ((fN[2] == ""))
1092+ let fR = split(fP[0], "_")
1093+ let fS = split(fP[1], "_")
1094+ let fT = if ((fP[2] == ""))
11091095 then nil
1110- else split(fN[2], "_")
1111- if ((size(fP) != Z))
1096+ else split(fP[2], "_")
1097+ if ((size(fR) != aa))
11121098 then throw("All 6 resources should be passed")
1113- else if ((size(fQ) != Z))
1099+ else if ((size(fS) != aa))
11141100 then throw("All 6 materials should be passed")
11151101 else {
1116- let eJ = fG(fi)
1117- let fS = split(fi[ap], "_")
1118- let fT = split(fi[aq], "_")
1119- let fU = if ((fi[ar] == ""))
1102+ let eK = fI(fj)
1103+ let fU = split(fj[aq], "_")
1104+ let fV = split(fj[ar], "_")
1105+ let fW = if ((fj[as] == ""))
11201106 then nil
1121- else split(fi[ar], "_")
1122- let eH = split(fO[ay], "_")
1123- let fV = split(fO[az], "_")
1124- let fW = if ((fO[aA] == ""))
1107+ else split(fj[as], "_")
1108+ let eI = split(fQ[az], "_")
1109+ let fX = split(fQ[aA], "_")
1110+ let fY = if ((fQ[aB] == ""))
11251111 then nil
1126- else split(fO[aA], "_")
1127- func fX (cR,dp) = {
1128- let eu = cR._1
1129- let fY = parseIntValue(dp)
1130- let fZ = parseIntValue(fS[eu])
1131- let ga = parseIntValue(eH[eu])
1132- if ((fY == 0))
1133- then $Tuple4((eu + 1), (cR._2 :+ fS[eu]), (cR._3 :+ eH[eu]), cR._4)
1134- else if ((fY > 0))
1135- then if ((fY > ga))
1136- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(ga)) + " available"))
1137- else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1138- else if ((-(fY) > fZ))
1139- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(fZ)) + " available"))
1140- else $Tuple4((eu + 1), (cR._2 :+ toString((fZ + fY))), (cR._3 :+ toString((ga - fY))), (cR._4 + fY))
1112+ else split(fQ[aB], "_")
1113+ func fZ (cT,fm) = {
1114+ let ev = cT._1
1115+ let ga = parseIntValue(fm)
1116+ let gb = parseIntValue(fU[ev])
1117+ let gc = parseIntValue(eI[ev])
1118+ if ((ga == 0))
1119+ then $Tuple4((ev + 1), (cT._2 :+ fU[ev]), (cT._3 :+ eI[ev]), cT._4)
1120+ else if ((ga > 0))
1121+ then if ((ga > gc))
1122+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gc)) + " available"))
1123+ else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga))
1124+ else if ((-(ga) > gb))
1125+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gb)) + " available"))
1126+ else $Tuple4((ev + 1), (cT._2 :+ toString((gb + ga))), (cT._3 :+ toString((gc - ga))), (cT._4 + ga))
11411127 }
11421128
1143- let dc = {
1144- let cT = fP
1145- let cU = size(cT)
1146- let cV = $Tuple4(0, nil, nil, 0)
1147- func cW (cX,cY) = if ((cY >= cU))
1148- then cX
1149- else fX(cX, cT[cY])
1150-
1151- func cZ (cX,cY) = if ((cY >= cU))
1152- then cX
1129+ let de = {
1130+ let cV = fR
1131+ let cW = size(cV)
1132+ let cX = $Tuple4(0, nil, nil, 0)
1133+ func cY (cZ,da) = if ((da >= cW))
1134+ then cZ
1135+ else fZ(cZ, cV[da])
1136+
1137+ func db (cZ,da) = if ((da >= cW))
1138+ then cZ
11531139 else throw("List size exceeds 6")
11541140
1155- cZ(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6)
1141+ db(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6)
11561142 }
1157- func gb (cR,dp) = {
1158- let eu = cR._1
1159- let fY = parseIntValue(dp)
1160- let gc = parseIntValue(fT[eu])
1161- let gd = parseIntValue(fV[eu])
1162- if ((fY == 0))
1163- then $Tuple4((eu + 1), (cR._2 :+ fT[eu]), (cR._3 :+ fV[eu]), cR._4)
1164- else if ((fY > 0))
1165- then if ((fY > gd))
1166- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gd)) + " available"))
1167- else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1168- else if ((-(fY) > gc))
1169- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gc)) + " available"))
1170- else $Tuple4((eu + 1), (cR._2 :+ toString((gc + fY))), (cR._3 :+ toString((gd - fY))), (cR._4 + fY))
1143+ func gd (cT,fm) = {
1144+ let ev = cT._1
1145+ let ga = parseIntValue(fm)
1146+ let ge = parseIntValue(fV[ev])
1147+ let gf = parseIntValue(fX[ev])
1148+ if ((ga == 0))
1149+ then $Tuple4((ev + 1), (cT._2 :+ fV[ev]), (cT._3 :+ fX[ev]), cT._4)
1150+ else if ((ga > 0))
1151+ then if ((ga > gf))
1152+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gf)) + " available"))
1153+ else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga))
1154+ else if ((-(ga) > ge))
1155+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(ge)) + " available"))
1156+ else $Tuple4((ev + 1), (cT._2 :+ toString((ge + ga))), (cT._3 :+ toString((gf - ga))), (cT._4 + ga))
11711157 }
11721158
11731159 let em = {
1174- let cT = fQ
1175- let cU = size(cT)
1176- let cV = $Tuple4(0, nil, nil, dc._4)
1177- func fp (cX,cY) = if ((cY >= cU))
1178- then cX
1179- else gb(cX, cT[cY])
1180-
1181- func fq (cX,cY) = if ((cY >= cU))
1182- then cX
1160+ let cV = fS
1161+ let cW = size(cV)
1162+ let cX = $Tuple4(0, nil, nil, de._4)
1163+ func fr (cZ,da) = if ((da >= cW))
1164+ then cZ
1165+ else gd(cZ, cV[da])
1166+
1167+ func fs (cZ,da) = if ((da >= cW))
1168+ then cZ
11831169 else throw("List size exceeds 6")
11841170
1185- fq(fp(fp(fp(fp(fp(fp(cV, 0), 1), 2), 3), 4), 5), 6)
1171+ fs(fr(fr(fr(fr(fr(fr(cX, 0), 1), 2), 3), 4), 5), 6)
11861172 }
1187- func ge (cR,dp) = {
1188- let eu = cR._1
1189- let fY = parseIntValue(dp)
1190- let gf = if ((size(fU) > eu))
1191- then parseIntValue(fU[eu])
1173+ func gg (cT,fm) = {
1174+ let ev = cT._1
1175+ let ga = parseIntValue(fm)
1176+ let gh = if ((size(fW) > ev))
1177+ then parseIntValue(fW[ev])
11921178 else 0
1193- let gg = if ((size(fW) > eu))
1194- then parseIntValue(fW[eu])
1179+ let gi = if ((size(fY) > ev))
1180+ then parseIntValue(fY[ev])
11951181 else 0
1196- if ((fY == 0))
1197- then $Tuple4((eu + 1), (cR._2 :+ toString(gf)), (cR._3 :+ toString(gg)), cR._4)
1198- else if ((fY > 0))
1199- then if ((fY > gg))
1200- then throw((((("Attempt to take " + dp) + " from backpack, but only ") + toString(gg)) + " available"))
1182+ if ((ga == 0))
1183+ then $Tuple4((ev + 1), (cT._2 :+ toString(gh)), (cT._3 :+ toString(gi)), cT._4)
1184+ else if ((ga > 0))
1185+ then if ((ga > gi))
1186+ then throw((((("Attempt to take " + fm) + " from backpack, but only ") + toString(gi)) + " available"))
12011187 else {
1202- let gh = (fJ((gf + fY), an) - fJ(gf, an))
1203- $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
1188+ let gj = (fL((gh + ga), ao) - fL(gh, ao))
1189+ $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj))
12041190 }
1205- else if ((-(fY) > gf))
1206- then throw((((("Attempt to take " + toString(-(fY))) + " from warehouse, but only ") + toString(gf)) + " available"))
1191+ else if ((-(ga) > gh))
1192+ then throw((((("Attempt to take " + toString(-(ga))) + " from warehouse, but only ") + toString(gh)) + " available"))
12071193 else {
1208- let gh = (fJ((gf + fY), an) - fJ(gf, an))
1209- $Tuple4((eu + 1), (cR._2 :+ toString((gf + fY))), (cR._3 :+ toString((gg - fY))), (cR._4 + gh))
1194+ let gj = (fL((gh + ga), ao) - fL(gh, ao))
1195+ $Tuple4((ev + 1), (cT._2 :+ toString((gh + ga))), (cT._3 :+ toString((gi - ga))), (cT._4 + gj))
12101196 }
12111197 }
12121198
1213- let fe = if ((size(fR) != 0))
1199+ let ff = if ((size(fT) != 0))
12141200 then {
1215- let cT = fR
1216- let cU = size(cT)
1217- let cV = $Tuple4(0, nil, nil, em._4)
1218- func fs (cX,cY) = if ((cY >= cU))
1219- then cX
1220- else ge(cX, cT[cY])
1221-
1222- func ft (cX,cY) = if ((cY >= cU))
1223- then cX
1201+ let cV = fT
1202+ let cW = size(cV)
1203+ let cX = $Tuple4(0, nil, nil, em._4)
1204+ func fu (cZ,da) = if ((da >= cW))
1205+ then cZ
1206+ else gg(cZ, cV[da])
1207+
1208+ func fv (cZ,da) = if ((da >= cW))
1209+ then cZ
12241210 else throw("List size exceeds 50")
12251211
1226- ft(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(fs(cV, 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)
1212+ fv(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(fu(cX, 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)
12271213 }
1228- else $Tuple4(0, fU, fW, em._4)
1229- let gi = fe._4
1230- if ((gi > eJ))
1231- then throw((((("Attempt to put total " + toString(gi)) + " stuff, but only ") + toString(eJ)) + " warehouse space left"))
1232- else $Tuple7(makeString(dc._2, "_"), makeString(em._2, "_"), makeString(fe._2, "_"), makeString(dc._3, "_"), makeString(em._3, "_"), makeString(fe._3, "_"), gi)
1214+ else $Tuple4(0, fW, fY, em._4)
1215+ let gk = ff._4
1216+ if ((gk > eK))
1217+ then throw((((("Attempt to put total " + toString(gk)) + " stuff, but only ") + toString(eK)) + " warehouse space left"))
1218+ else $Tuple7(makeString(de._2, "_"), makeString(em._2, "_"), makeString(ff._2, "_"), makeString(de._3, "_"), makeString(em._3, "_"), makeString(ff._3, "_"), gk)
12331219 }
12341220 }
12351221
12361222
1237-func gj (gk,gl) = {
1238- let ba = toString(gk)
1239- let gm = eP(toBigInt(gl))
1240- let gn = valueOrElse(getInteger(cs()), (cr + 1))
1241- let cu = toString(gn)
1242- let eY = toInt((gm % cl))
1243- let ex = eW(gm, eY)
1244- let go = ah[eY]
1245- let gp = Issue(cK(cu, "S"), makeString([cu, "S", ex, go], "_"), 1, 0, false)
1246- let aD = calculateAssetId(gp)
1247- let gq = toBase58String(aD)
1248- $Tuple2([IntegerEntry(cs(), (gn + 1)), gp, StringEntry(ct(cu), gq), StringEntry(aC(gq), ba), StringEntry(cz(cu), ba), IntegerEntry(aG(gq), 0), IntegerEntry(cx(gq, ba), 0), ScriptTransfer(gk, 1, aD)], $Tuple2(gq, go))
1249- }
1250-
1251-
1252-func gr (ba,gs,gt) = if (!(sigVerify_8Kb(gs, gt, cd)))
1223+func gl (gm,gn) = {
1224+ let bb = toString(gm)
1225+ let go = eQ(toBigInt(gn))
1226+ let gp = valueOrElse(getInteger(cu()), (ct + 1))
1227+ let cw = toString(gp)
1228+ let eZ = toInt((go % cn))
1229+ let ey = eX(go, eZ)
1230+ let gq = ai[eZ]
1231+ let gr = Issue(cM(cw, "S"), makeString([cw, "S", ey, gq], "_"), 1, 0, false)
1232+ let aE = calculateAssetId(gr)
1233+ let gs = toBase58String(aE)
1234+ $Tuple2([IntegerEntry(cu(), (gp + 1)), gr, StringEntry(cv(cw), gs), StringEntry(aD(gs), bb), StringEntry(cB(cw), bb), IntegerEntry(aH(gs), 0), IntegerEntry(cz(gs, bb), 0), ScriptTransfer(gm, 1, aE)], $Tuple2(gs, gq))
1235+ }
1236+
1237+
1238+func gt (bb,gu,gv) = if (!(sigVerify_8Kb(gu, gv, cf)))
12531239 then throw("signature does not match")
12541240 else {
1255- let du = split(toUtf8String(gs), ";")
1256- let gu = split(du[0], "|")
1257- let gv = split(gu[cG], "_")
1258- let gw = parseIntValue(gv[0])
1259- let gx = parseIntValue(gv[1])
1260- let gy = split(du[1], ":")
1261- let gz = gy[0]
1262- let gA = parseIntValue(gu[cH])
1263- if (if ((gA > (lastBlock.timestamp + cf)))
1241+ let dr = split(toUtf8String(gu), ";")
1242+ let gw = split(dr[0], "|")
1243+ let gx = split(gw[cI], "_")
1244+ let gy = parseIntValue(gx[0])
1245+ let gz = parseIntValue(gx[1])
1246+ let gA = split(dr[1], ":")
1247+ let gB = gA[0]
1248+ let gC = parseIntValue(gw[cJ])
1249+ if (if ((gC > (lastBlock.timestamp + ch)))
12641250 then true
1265- else ((lastBlock.timestamp - cf) > gA))
1266- then throw(((("signature outdated: logTime=" + toString(gA)) + ", bcTime=") + toString(lastBlock.timestamp)))
1251+ else ((lastBlock.timestamp - ch) > gC))
1252+ then throw(((("signature outdated: logTime=" + toString(gC)) + ", bcTime=") + toString(lastBlock.timestamp)))
12671253 else {
1268- let gB = gy[1]
1269- let gC = valueOrElse(getString(aB(ba)), "")
1270- if ((gC != gB))
1271- then throw(((("Tx ids don't match! In state: " + gC) + ", in msg: ") + gB))
1254+ let gD = gA[1]
1255+ let gE = valueOrElse(getString(aC(bb)), "")
1256+ if ((gE != gD))
1257+ then throw(((("Tx ids don't match! In state: " + gE) + ", in msg: ") + gD))
12721258 else {
1273- let q = valueOrErrorMessage(getString(aV(ba)), "You don't have a duck staked")
1274- let gD = p(q)
1275- let gE = L(valueOrElse(getInteger(t(q)), 0))
1276- let gF = valueOrElse(getInteger(gD), gE)
1277- if ((gF != gw))
1278- then throw(((("oldHealth=" + toString(gF)) + " from state does not match one from flight log=") + toString(gw)))
1279- else if ((0 >= gw))
1259+ let r = valueOrErrorMessage(getString(aW(bb)), "You don't have a duck staked")
1260+ let gF = q(r)
1261+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1262+ let gH = valueOrElse(getInteger(gF), gG)
1263+ if ((gH != gy))
1264+ then throw(((("oldHealth=" + toString(gH)) + " from state does not match one from flight log=") + toString(gy)))
1265+ else if ((0 >= gy))
12801266 then throw("You can't fly with zero health")
12811267 else {
1282- let gG = if ((size(gu) > cI))
1283- then gu[cI]
1268+ let gI = if ((size(gw) > cK))
1269+ then gw[cK]
12841270 else ""
1285- let gH = if ((size(gu) > cJ))
1286- then gu[cJ]
1271+ let gJ = if ((size(gw) > cL))
1272+ then gw[cL]
12871273 else ""
1288- let gI = if (if ((gx > 0))
1289- then (gG == "$")
1274+ let gK = if (if ((gz > 0))
1275+ then (gI == "$")
12901276 else false)
1291- then bX(invoke(bJ, "sendUsdtPrize", [ba], nil))
1277+ then bY(invoke(bK, "sendUsdtPrize", [bb], nil))
12921278 else 0
1293- $Tuple5(gx, q, gI, gz, gH)
1279+ $Tuple5(gz, r, gK, gB, gJ)
12941280 }
12951281 }
12961282 }
12971283 }
12981284
12991285
1300-func gJ (gk,gl,gs,gt) = {
1301- let ba = toString(gk)
1302- let eZ = gr(ba, gs, gt)
1303- let gD = p(eZ._2)
1304- let fd = aW(eZ._2)
1305- let fO = fc(fd)
1306- let gK = split(fO[az], "_")
1307- let gL = makeString(dd(true, gK, cj), "_")
1308- let dz = dk(fO[aA], eZ._5)
1309- if ((0 >= eZ._1))
1310- then $Tuple3([IntegerEntry(gD, 0), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":"))], "", 0)
1311- else {
1312- let gM = gj(gk, gl)
1313- let gq = gM._2._1
1314- $Tuple3((((gM._1 :+ StringEntry(aX(eZ._2), makeString([gM._2._2, "L", gq], "_"))) :+ IntegerEntry(gD, eZ._1)) :+ StringEntry(fd, makeString([fO[ax], fO[ay], gL, dz], ":"))), gq, eZ._3)
1315- }
1316- }
1317-
1318-
1319-func gN (aN,gO) = {
1320- let fx = valueOrElse(getInteger(aG(aN)), 0)
1321- let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1322- let gQ = (fx / 6)
1323- let gR = (fx / 7)
1324- ((aa + fraction(aa, ((fx + gQ) + (2 * gR)), 5)) + fraction(aa, gP, (gO * 5)))
1325- }
1326-
1327-
1328-func gS (b,gT,gU) = {
1329- let gV = if ((gT == cD))
1330- then $Tuple2(gU, valueOrElse(getString(aV(b)), ""))
1331- else {
1332- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1333- let gW = valueOrElse(getString(aX(q)), ad)
1334- let gX = split(value(gW), "_")
1335- if ((gX[bc] != "L"))
1336- then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
1337- else $Tuple2(gX[bd], q)
1338- }
1339- let aN = gV._1
1340- let gY = gV._2
1341- let gZ = value(assetInfo(fromBase58String(aN)))
1342- let ha = aF(aN)
1343- let hb = valueOrErrorMessage(getInteger(ha), (("Land " + gZ.name) + " is not staked"))
1344- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1345- if ((hc != b))
1346- then throw((W + " is not yours"))
1347- else {
1348- let hd = split(gZ.description, "_")
1349- $Tuple4(gY, aN, hd, hb)
1350- }
1351- }
1352-
1353-
1354-func he (b,fK,gT,gU) = if ((0 > fK))
1286+func gL (gm,gn,gu,gv) = {
1287+ let bb = toString(gm)
1288+ let fa = gt(bb, gu, gv)
1289+ let r = fa._2
1290+ let gF = q(r)
1291+ let fe = aX(r)
1292+ let fQ = fd(fe)
1293+ let gM = split(fQ[aA], "_")
1294+ let gN = makeString(df(true, gM, cl), "_")
1295+ let gO = w(r)
1296+ let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,")
1297+ let gQ = dm(gP, fa._5)
1298+ if ((0 >= fa._1))
1299+ then $Tuple3([IntegerEntry(gF, 0), StringEntry(gO, gQ)], "", 0)
1300+ else {
1301+ let gR = gl(gm, gn)
1302+ let gs = gR._2._1
1303+ $Tuple3(((((gR._1 :+ StringEntry(aY(r), makeString([gR._2._2, "L", gs], "_"))) :+ IntegerEntry(gF, fa._1)) :+ StringEntry(gO, gQ)) :+ StringEntry(fe, makeString([fQ[ay], fQ[az], gN, fQ[aB]], ":"))), gs, fa._3)
1304+ }
1305+ }
1306+
1307+
1308+func gS (aO,gT) = {
1309+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1310+ let gU = valueOrElse(getInteger(aI(Z, aO)), 0)
1311+ let gV = (fz / 6)
1312+ let gW = (fz / 7)
1313+ ((ab + fraction(ab, ((fz + gV) + (2 * gW)), 5)) + fraction(ab, gU, (gT * 5)))
1314+ }
1315+
1316+
1317+func gX (b,gY,gZ) = {
1318+ let ha = if ((gY == cF))
1319+ then $Tuple2(gZ, valueOrElse(getString(aW(b)), ""))
1320+ else {
1321+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1322+ let hb = valueOrElse(getString(aY(r)), ae)
1323+ let hc = split(value(hb), "_")
1324+ if ((hc[bd] != "L"))
1325+ then throw((("Duck location type is " + hc[bd]) + ", but should be L"))
1326+ else $Tuple2(hc[be], r)
1327+ }
1328+ let aO = ha._1
1329+ let hd = ha._2
1330+ let he = value(assetInfo(fromBase58String(aO)))
1331+ let hf = aG(aO)
1332+ let hg = valueOrErrorMessage(getInteger(hf), (("Land " + he.name) + " is not staked"))
1333+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
1334+ if ((hh != b))
1335+ then throw((X + " is not yours"))
1336+ else {
1337+ let hi = split(he.description, "_")
1338+ $Tuple4(hd, aO, hi, hg)
1339+ }
1340+ }
1341+
1342+
1343+func hj (b,fM,gY,gZ) = if ((0 > fM))
13551344 then throw("Negative amount")
13561345 else {
1357- let dX = gS(b, gT, gU)
1358- let ca = dX._3[bO]
1359- let eq = ew(dX._3[bP])
1360- let eA = (lastBlock.timestamp - dX._4)
1361- if ((0 > eA))
1346+ let dX = gX(b, gY, gZ)
1347+ let cb = dX._3[bP]
1348+ let er = ex(dX._3[bQ])
1349+ let eB = (lastBlock.timestamp - dX._4)
1350+ if ((0 > eB))
13621351 then throw(((("Saved timestamp is in future, saved = " + toString(dX._4)) + ", current = ") + toString(lastBlock.timestamp)))
13631352 else {
1364- let gO = bZ(ca)
1365- let hf = gN(dX._2, gO)
1366- let hg = fraction(eA, (hf * gO), ab)
1367- if ((fK > hg))
1368- then throw(((("Not enough resources, available = " + toString(hg)) + ", requested = ") + toString(fK)))
1353+ let gT = ca(cb)
1354+ let hk = gS(dX._2, gT)
1355+ let hl = fraction(eB, (hk * gT), ac)
1356+ if ((fM > hl))
1357+ then throw(((("Not enough resources, available = " + toString(hl)) + ", requested = ") + toString(fM)))
13691358 else {
1370- let hh = fraction((hg - fK), ab, (hf * gO))
1371- let hi = (lastBlock.timestamp - hh)
1372- let fw = (gO / bq)
1373- let eI = eE(eq, (eA - hh), fw, hf)
1374- let fv = aM(dX._2)
1375- let fx = valueOrElse(getInteger(aG(dX._2)), 0)
1376- let fi = fu(fv, fw, fx)
1377- let fD = split(fi[as], "_")
1378- let eJ = parseIntValue(fD[av])
1379- if (if ((gT == cD))
1380- then (fK > eJ)
1359+ let hm = fraction((hl - fM), ac, (hk * gT))
1360+ let hn = (lastBlock.timestamp - hm)
1361+ let fy = (gT / br)
1362+ let eJ = eF(er, (eB - hm), fy, hk)
1363+ let fx = aN(dX._2)
1364+ let fz = valueOrElse(getInteger(aH(dX._2)), 0)
1365+ let fj = fw(fx, fy, fz)
1366+ let fF = split(fj[at], "_")
1367+ let eK = parseIntValue(fF[aw])
1368+ if (if ((gY == cF))
1369+ then (fM > eK)
13811370 else false)
1382- then throw((("Only " + toString(eJ)) + " space left in warehouse"))
1371+ then throw((("Only " + toString(eK)) + " space left in warehouse"))
13831372 else {
1384- let fd = aW(dX._1)
1385- let fO = fc(fd)
1386- let eH = split(fO[ay], "_")
1387- let eG = split(fi[ap], "_")
1388- let hj = if ((gT == cD))
1389- then $Tuple4(ey(eG, eq, (eA - hh), fw, hf), fO[ay], (parseIntValue(fD[au]) + eI._2), (parseIntValue(fD[av]) - eI._2))
1390- else if ((gT == cE))
1391- then $Tuple4(fi[ap], ey(eH, eq, (eA - hh), fw, hf), parseIntValue(fD[au]), parseIntValue(fD[av]))
1373+ let fe = aX(dX._1)
1374+ let fQ = fd(fe)
1375+ let eI = split(fQ[az], "_")
1376+ let eH = split(fj[aq], "_")
1377+ let ho = if ((gY == cF))
1378+ then $Tuple4(ez(eH, er, (eB - hm), fy, hk), fQ[az], (parseIntValue(fF[av]) + eJ._2), (parseIntValue(fF[aw]) - eJ._2))
1379+ else if ((gY == cG))
1380+ then $Tuple4(fj[aq], ez(eI, er, (eB - hm), fy, hk), parseIntValue(fF[av]), parseIntValue(fF[aw]))
13921381 else {
1393- let hk = eF(eG, eH, eI, eJ)
1394- let hl = min([parseIntValue(fD[av]), eI._2])
1395- $Tuple4(hk._1, hk._2, (parseIntValue(fD[au]) + hl), (parseIntValue(fD[av]) - hl))
1382+ let hp = eG(eH, eI, eJ, eK)
1383+ let hq = min([parseIntValue(fF[aw]), eJ._2])
1384+ $Tuple4(hp._1, hp._2, (parseIntValue(fF[av]) + hq), (parseIntValue(fF[aw]) - hq))
13961385 }
1397- let hm = hj._1
1398- let hn = hj._2
1399- let ho = hj._3
1400- let hp = hj._4
1401- $Tuple5([IntegerEntry(aF(dX._2), hi), IntegerEntry(aJ(W, dX._2, b), hi)], fd, [fO[ax], hn, fO[az], fO[aA]], fv, [fi[ao], hm, fi[aq], fi[ar], makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")])
1386+ let hr = ho._1
1387+ let hs = ho._2
1388+ let ht = ho._3
1389+ let hu = ho._4
1390+ $Tuple5([IntegerEntry(aG(dX._2), hn), IntegerEntry(aK(X, dX._2, b), hn)], fe, [fQ[ay], hs, fQ[aA], fQ[aB]], fx, [fj[ap], hr, fj[ar], fj[as], makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")])
14021391 }
14031392 }
14041393 }
14051394 }
14061395
14071396
1408-func hq (b,aN,gO,gT) = {
1409- let ha = aF(aN)
1410- let hb = value(getInteger(ha))
1411- let hg = (fraction((lastBlock.timestamp - hb), gN(aN, gO), ab) * gO)
1412- he(b, hg, gT, aN)
1413- }
1414-
1415-
1416-func hr (de,gk,hs,aN) = {
1417- let b = toString(gk)
1418- let dX = gS(b, cF, aN)
1419- let gO = bZ(dX._3[bO])
1420- let ht = aG(dX._2)
1421- let hu = valueOrElse(getInteger(ht), 0)
1422- if ((hu >= 3))
1397+func hv (b,aO,gT,gY) = {
1398+ let hf = aG(aO)
1399+ let hg = value(getInteger(hf))
1400+ let hl = (fraction((lastBlock.timestamp - hg), gS(aO, gT), ac) * gT)
1401+ hj(b, hl, gY, aO)
1402+ }
1403+
1404+
1405+func hw (dg,gm,hx,aO) = {
1406+ let b = toString(gm)
1407+ let dX = gX(b, cH, aO)
1408+ let gT = ca(dX._3[bP])
1409+ let hy = aH(dX._2)
1410+ let hz = valueOrElse(getInteger(hy), 0)
1411+ if ((hz >= 3))
14231412 then throw("Currently max infrastructure level = 3")
14241413 else {
1425- let Q = (hu + 1)
1426- let hv = fraction(ci, (gO * Q), bq)
1427- if (if (!(de))
1428- then (hs != hv)
1414+ let R = (hz + 1)
1415+ let hA = fraction(ck, (gT * R), br)
1416+ if (if (!(dg))
1417+ then (hx != hA)
14291418 else false)
1430- then throw(("Payment attached should be " + toString(hv)))
1419+ then throw(("Payment attached should be " + toString(hA)))
14311420 else {
1432- let fd = aW(dX._1)
1433- let fO = fc(fd)
1434- let gK = split(fO[az], "_")
1435- let hw = fraction(bl, (gO * Q), bq)
1436- let gL = makeString(dd(de, gK, hw), "_")
1437- let hx = hq(b, dX._2, gO, cF)
1438- let hy = hx._5
1439- let hz = ff(hy[ao])
1440- let hA = makeString([split(hy[ao], "_")[0], toString(Q)], "_")
1441- let hB = ff(hA)
1442- let fD = split(hy[as], "_")
1443- let hC = makeString([fD[at], fD[au], toString(((parseIntValue(fD[av]) + hB) - hz)), toString(hB)], "_")
1444- $Tuple3(([IntegerEntry(ht, Q), IntegerEntry(cx(dX._2, b), Q), StringEntry(fd, makeString([fO[ax], hx._3[ay], gL, fO[aA]], ":")), StringEntry(hx._4, makeString([hA, hy[ap], hy[aq], hy[ar], hC], ":"))] ++ hx._1), Q, hw)
1421+ let fe = aX(dX._1)
1422+ let fQ = fd(fe)
1423+ let gM = split(fQ[aA], "_")
1424+ let hB = fraction(bm, (gT * R), br)
1425+ let gN = makeString(df(dg, gM, hB), "_")
1426+ let hC = hv(b, dX._2, gT, cH)
1427+ let hD = hC._5
1428+ let hE = fg(hD[ap])
1429+ let hF = makeString([split(hD[ap], "_")[0], toString(R)], "_")
1430+ let hG = fg(hF)
1431+ let fF = split(hD[at], "_")
1432+ let hH = makeString([fF[au], fF[av], toString(((parseIntValue(fF[aw]) + hG) - hE)), toString(hG)], "_")
1433+ $Tuple3(([IntegerEntry(hy, R), IntegerEntry(cz(dX._2, b), R), StringEntry(fe, makeString([fQ[ay], hC._3[az], gN, fQ[aB]], ":")), StringEntry(hC._4, makeString([hF, hD[aq], hD[ar], hD[as], hH], ":"))] ++ hC._1), R, hB)
14451434 }
14461435 }
14471436 }
14481437
14491438
1450-func hD (q,hE) = if (!(bg))
1439+func hI (r,hJ) = if (!(bh))
14511440 then $Tuple2(nil, 0)
14521441 else {
1453- let hF = t(q)
1454- let hG = s(q)
1455- let K = valueOrElse(getInteger(S, hG), 0)
1456- let P = (K + hE)
1457- let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1458- let hI = u(q)
1459- $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1460- }
1461-
1462-
1463-func hJ (b,hE) = if (!(bg))
1442+ let hK = u(r)
1443+ let hL = t(r)
1444+ let L = valueOrElse(getInteger(T, hL), 0)
1445+ let Q = (L + hJ)
1446+ let hM = O(valueOrElse(getInteger(T, hK), 0), Q)
1447+ let hN = v(r)
1448+ $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q)
1449+ }
1450+
1451+
1452+func hO (b,hJ) = if (!(bh))
14641453 then $Tuple2(nil, 0)
14651454 else {
1466- let hF = x(b)
1467- let hG = w(b)
1468- let K = valueOrElse(getInteger(S, hG), 0)
1469- let P = (K + hE)
1470- let hH = N(valueOrElse(getInteger(S, hF), 0), P)
1471- let hI = y(b)
1472- $Tuple2([IntegerEntry(hF, hH[0]), IntegerEntry(hG, P), IntegerEntry(hI, (valueOrElse(getInteger(hI), 0) + hH[1]))], P)
1473- }
1474-
1475-
1476-func hK (b) = {
1477- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1478- let hL = aQ(b)
1479- let hM = getString(hL)
1480- if (!(isDefined(hM)))
1455+ let hK = y(b)
1456+ let hL = x(b)
1457+ let L = valueOrElse(getInteger(T, hL), 0)
1458+ let Q = (L + hJ)
1459+ let hM = O(valueOrElse(getInteger(T, hK), 0), Q)
1460+ let hN = z(b)
1461+ $Tuple2([IntegerEntry(hK, hM[0]), IntegerEntry(hL, Q), IntegerEntry(hN, (valueOrElse(getInteger(hN), 0) + hM[1]))], Q)
1462+ }
1463+
1464+
1465+func hP (b) = {
1466+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1467+ let hQ = aR(b)
1468+ let hR = getString(hQ)
1469+ if (!(isDefined(hR)))
14811470 then throw("You are not eligible for ONBOARD artifact")
14821471 else {
1483- let hN = aS(b)
1484- let hO = getString(hN)
1485- if (isDefined(hO))
1486- then throw(("You already used your ONBOARD artifact on duck " + value(hO)))
1472+ let hS = aT(b)
1473+ let hT = getString(hS)
1474+ if (isDefined(hT))
1475+ then throw(("You already used your ONBOARD artifact on duck " + value(hT)))
14871476 else {
1488- let hP = aR(q)
1489- let hQ = getString(hP)
1490- if (isDefined(hQ))
1491- then throw(((("The duck " + q) + " already got points from ONBOARD artifact from user ") + value(hQ)))
1492- else ([StringEntry(hN, q), StringEntry(hP, b)] ++ hD(q, H)._1)
1477+ let hU = aS(r)
1478+ let hV = getString(hU)
1479+ if (isDefined(hV))
1480+ then throw(((("The duck " + r) + " already got points from ONBOARD artifact from user ") + value(hV)))
1481+ else ([StringEntry(hS, r), StringEntry(hU, b)] ++ hI(r, I)._1)
14931482 }
14941483 }
14951484 }
14961485
14971486
1498-func hR (b,gU) = {
1499- let dX = gS(b, cF, gU)
1500- let aN = dX._2
1501- let gO = bZ(dX._3[bO])
1502- let hS = aH(Y, aN)
1503- if ((valueOrElse(getInteger(hS), 0) > 0))
1487+func hW (b,gZ) = {
1488+ let dX = gX(b, cH, gZ)
1489+ let aO = dX._2
1490+ let gT = ca(dX._3[bP])
1491+ let hX = aI(Z, aO)
1492+ if ((valueOrElse(getInteger(hX), 0) > 0))
15041493 then throw("Presale artifact is already activated")
1505- else if ((parseIntValue(dX._3[bN]) > cr))
1506- then throw((((W + " ") + aN) + " is not eligible for presale artifact"))
1494+ else if ((parseIntValue(dX._3[bO]) > ct))
1495+ then throw((((X + " ") + aO) + " is not eligible for presale artifact"))
15071496 else {
1508- let hx = hq(b, aN, gO, cF)
1509- ((((hx._1 :+ IntegerEntry(hS, gO)) :+ IntegerEntry(cy(Y, aN, b), gO)) :+ StringEntry(hx._2, makeString(hx._3, ":"))) :+ StringEntry(hx._4, makeString(hx._5, ":")))
1497+ let hC = hv(b, aO, gT, cH)
1498+ ((((hC._1 :+ IntegerEntry(hX, gT)) :+ IntegerEntry(cA(Z, aO, b), gT)) :+ StringEntry(hC._2, makeString(hC._3, ":"))) :+ StringEntry(hC._4, makeString(hC._5, ":")))
15101499 }
15111500 }
15121501
15131502
1514-func hT (hU,Q,hV,b,hW,gl,hX) = {
1515- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1516- func hY (cR,aN) = {
1517- let gZ = value(assetInfo(fromBase58String(aN)))
1518- let ha = aF(aN)
1519- let hb = valueOrErrorMessage(getInteger(ha), (("NFT " + gZ.name) + " is not staked"))
1520- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
1521- if ((hc != b))
1522- then throw((W + " is not yours"))
1503+func hY (hZ,R,ia,b,ib,gn,ic) = {
1504+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1505+ func id (cT,aO) = {
1506+ let he = value(assetInfo(fromBase58String(aO)))
1507+ let hf = aG(aO)
1508+ let hg = valueOrErrorMessage(getInteger(hf), (("NFT " + he.name) + " is not staked"))
1509+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
1510+ if ((hh != b))
1511+ then throw((X + " is not yours"))
15231512 else {
1524- let hd = split(gZ.description, "_")
1525- let go = hd[bQ]
1526- if (if ((cR._3 != ""))
1527- then (cR._3 != go)
1513+ let hi = split(he.description, "_")
1514+ let gq = hi[bR]
1515+ if (if ((cT._3 != ""))
1516+ then (cT._3 != gq)
15281517 else false)
15291518 then throw("Lands should be on the same continent to merge")
15301519 else {
1531- let ca = hd[bO]
1532- let hZ = cR._1
1533- let eu = valueOrErrorMessage(indexOf(hZ, ca), "You haven't passed all the lands needed")
1534- let ia = (take(hZ, eu) + drop(hZ, (eu + 1)))
1535- let gO = bZ(ca)
1536- let ib = (cR._2 + valueOrElse(getInteger(aH(Y, aN)), 0))
1537- let fx = valueOrElse(getInteger(aG(aN)), 0)
1538- let ic = {
1539- let bj = ca
1540- if (("S" == bj))
1520+ let cb = hi[bP]
1521+ let ie = cT._1
1522+ let ev = valueOrErrorMessage(indexOf(ie, cb), "You haven't passed all the lands needed")
1523+ let if = (take(ie, ev) + drop(ie, (ev + 1)))
1524+ let gT = ca(cb)
1525+ let ig = (cT._2 + valueOrElse(getInteger(aI(Z, aO)), 0))
1526+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1527+ let ih = {
1528+ let bk = cb
1529+ if (("S" == bk))
15411530 then 3
1542- else if (("M" == bj))
1531+ else if (("M" == bk))
15431532 then 4
1544- else if (("L" == bj))
1533+ else if (("L" == bk))
15451534 then 5
1546- else if (("XL" == bj))
1535+ else if (("XL" == bk))
15471536 then 6
15481537 else throw("Only S, M, L, XL can merge")
15491538 }
1550- if ((fx != ic))
1539+ if ((fz != ih))
15511540 then throw("All lands should be maxed to merge")
15521541 else {
1553- let cu = hd[bN]
1554- let eq = ew(hd[bP])
1555- let eA = (lastBlock.timestamp - hb)
1556- if ((0 > eA))
1557- then throw(((("Saved timestamp is in future, saved = " + toString(hb)) + ", current = ") + toString(lastBlock.timestamp)))
1542+ let cw = hi[bO]
1543+ let er = ex(hi[bQ])
1544+ let eB = (lastBlock.timestamp - hg)
1545+ if ((0 > eB))
1546+ then throw(((("Saved timestamp is in future, saved = " + toString(hg)) + ", current = ") + toString(lastBlock.timestamp)))
15581547 else {
1559- let hf = gN(aN, gO)
1560- let fw = (gO / bq)
1561- let hn = ey(split(cR._4, "_"), eq, eA, fw, hf)
1562- let db = eo(split(cR._6, "_"), eq, fw, -1)
1563- let id = cR._7
1564- let bI = indexOf(id, aN)
1565- if (!(isDefined(bI)))
1566- then throw(("Your staked lands don't contain " + aN))
1548+ let hk = gS(aO, gT)
1549+ let fy = (gT / br)
1550+ let hs = ez(split(cT._4, "_"), er, eB, fy, hk)
1551+ let dd = ep(split(cT._6, "_"), er, fy, -1)
1552+ let ii = cT._7
1553+ let bJ = indexOf(ii, aO)
1554+ if (!(isDefined(bJ)))
1555+ then throw(("Your staked lands don't contain " + aO))
15671556 else {
1568- let ie = aE(aN)
1569- let if = valueOrElse(getString(ie), "")
1570- $Tuple8(ia, ib, go, hn, (((((((((((((cR._5 :+ DeleteEntry(aF(aN))) :+ DeleteEntry(aJ(W, aN, b))) :+ DeleteEntry(ct(cu))) :+ DeleteEntry(aC(aN))) :+ DeleteEntry(aG(aN))) :+ DeleteEntry(cx(aN, b))) :+ DeleteEntry(aH(Y, aN))) :+ DeleteEntry(cy(Y, aN, b))) :+ DeleteEntry(cz(cu))) :+ DeleteEntry(aM(aN))) :+ DeleteEntry(ie)) :+ DeleteEntry(cv(if))) :+ Burn(fromBase58String(aN), 1)), db, removeByIndex(id, value(bI)), (cR._8 + gO))
1557+ let ij = aF(aO)
1558+ let ik = valueOrElse(getString(ij), "")
1559+ $Tuple8(if, ig, gq, hs, (((((((((((((cT._5 :+ DeleteEntry(aG(aO))) :+ DeleteEntry(aK(X, aO, b))) :+ DeleteEntry(cv(cw))) :+ DeleteEntry(aD(aO))) :+ DeleteEntry(aH(aO))) :+ DeleteEntry(cz(aO, b))) :+ DeleteEntry(aI(Z, aO))) :+ DeleteEntry(cA(Z, aO, b))) :+ DeleteEntry(cB(cw))) :+ DeleteEntry(aN(aO))) :+ DeleteEntry(ij)) :+ DeleteEntry(cx(ik))) :+ Burn(fromBase58String(aO), 1)), dd, removeByIndex(ii, value(bJ)), (cT._8 + gT))
15711560 }
15721561 }
15731562 }
15741563 }
15751564 }
15761565 }
15771566
1578- let fd = aW(q)
1579- let fO = fc(fd)
1580- let ig = valueOrElse(getString(bR()), "0_0_0_0_0_0")
1581- let ih = bS(b)
1582- let ii = getString(ih)
1583- let ij = if (isDefined(ii))
1584- then split_51C(value(ii), "_")
1567+ let fe = aX(r)
1568+ let fQ = fd(fe)
1569+ let il = valueOrElse(getString(bS()), "0_0_0_0_0_0")
1570+ let im = bT(b)
1571+ let in = getString(im)
1572+ let io = if (isDefined(in))
1573+ then split_51C(value(in), "_")
15851574 else nil
1586- let dc = {
1587- let cT = hW
1588- let cU = size(cT)
1589- let cV = $Tuple8(hV, 0, "", fO[ay], nil, ig, ij, 0)
1590- func cW (cX,cY) = if ((cY >= cU))
1591- then cX
1592- else hY(cX, cT[cY])
1593-
1594- func cZ (cX,cY) = if ((cY >= cU))
1595- then cX
1575+ let de = {
1576+ let cV = ib
1577+ let cW = size(cV)
1578+ let cX = $Tuple8(ia, 0, "", fQ[az], nil, il, io, 0)
1579+ func cY (cZ,da) = if ((da >= cW))
1580+ then cZ
1581+ else id(cZ, cV[da])
1582+
1583+ func db (cZ,da) = if ((da >= cW))
1584+ then cZ
15961585 else throw("List size exceeds 5")
15971586
1598- cZ(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5)
1599- }
1600- let go = dc._3
1601- let eY = valueOrErrorMessage(indexOf(ah, go), ("Unknown continent: " + go))
1602- let ex = eW(eP(toBigInt(gl)), eY)
1603- let gn = valueOrElse(getInteger(cs()), (cr + 1))
1604- let ik = toString(gn)
1605- let gp = Issue(cK(ik, hU), makeString([ik, hU, ex, go], "_"), 1, 0, false)
1606- let aD = calculateAssetId(gp)
1607- let il = toBase58String(aD)
1608- let gL = makeString(dd((hX > 0), split(fO[az], "_"), hX), "_")
1609- let im = bT(b)
1610- let in = valueOrElse(getInteger(im), 0)
1611- $Tuple2((((((((((((((((dc._5 :+ (if ((size(dc._7) > 0))
1612- then StringEntry(ih, makeString_11C(dc._7, "_"))
1613- else DeleteEntry(ih))) :+ IntegerEntry(im, if ((dc._8 > in))
1587+ db(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5)
1588+ }
1589+ let gq = de._3
1590+ let eZ = valueOrErrorMessage(indexOf(ai, gq), ("Unknown continent: " + gq))
1591+ let ey = eX(eQ(toBigInt(gn)), eZ)
1592+ let gp = valueOrElse(getInteger(cu()), (ct + 1))
1593+ let ip = toString(gp)
1594+ let gr = Issue(cM(ip, hZ), makeString([ip, hZ, ey, gq], "_"), 1, 0, false)
1595+ let aE = calculateAssetId(gr)
1596+ let iq = toBase58String(aE)
1597+ let gN = makeString(df((ic > 0), split(fQ[aA], "_"), ic), "_")
1598+ let ir = bU(b)
1599+ let is = valueOrElse(getInteger(ir), 0)
1600+ $Tuple2((((((((((((((((de._5 :+ (if ((size(de._7) > 0))
1601+ then StringEntry(im, makeString_11C(de._7, "_"))
1602+ else DeleteEntry(im))) :+ IntegerEntry(ir, if ((de._8 > is))
16141603 then 0
1615- else (in - dc._8))) :+ IntegerEntry(cs(), (gn + 1))) :+ gp) :+ StringEntry(ct(ik), il)) :+ StringEntry(aC(il), b)) :+ StringEntry(cz(ik), b)) :+ IntegerEntry(aH(Y, il), dc._2)) :+ IntegerEntry(cy(Y, il, b), dc._2)) :+ IntegerEntry(aG(il), Q)) :+ IntegerEntry(cx(il, b), Q)) :+ StringEntry(fd, makeString([fO[ax], dc._4, gL, fO[aA]], ":"))) :+ StringEntry(bR(), dc._6)) :+ StringEntry(aX(q), makeString([go, "L", il], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aD)), il)
1616- }
1617-
1618-
1619-func io (b,hW,gl) = hT("M", 3, "SSSS", b, hW, gl, 0)
1620-
1621-
1622-func ip (b,hW,gl,de,hs) = {
1623- let hv = (ci * 4)
1624- if (if (!(de))
1625- then (hs != hv)
1604+ else (is - de._8))) :+ IntegerEntry(cu(), (gp + 1))) :+ gr) :+ StringEntry(cv(ip), iq)) :+ StringEntry(aD(iq), b)) :+ StringEntry(cB(ip), b)) :+ IntegerEntry(aI(Z, iq), de._2)) :+ IntegerEntry(cA(Z, iq, b), de._2)) :+ IntegerEntry(aH(iq), R)) :+ IntegerEntry(cz(iq, b), R)) :+ StringEntry(fe, makeString([fQ[ay], de._4, gN, fQ[aB]], ":"))) :+ StringEntry(bS(), de._6)) :+ StringEntry(aY(r), makeString([gq, "L", iq], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, aE)), iq)
1605+ }
1606+
1607+
1608+func it (b,ib,gn) = hY("M", 3, "SSSS", b, ib, gn, 0)
1609+
1610+
1611+func iu (b,ib,gn,dg,hx) = {
1612+ let hA = (ck * 4)
1613+ if (if (!(dg))
1614+ then (hx != hA)
16261615 else false)
1627- then throw(("Payment attached should be " + toString(hv)))
1628- else hT("L", 4, "SMM", b, hW, gl, (bl * 4))
1629- }
1630-
1631-
1632-func iq (b,hW,gl,de,hs) = {
1633- let hv = (ci * 47)
1634- if (if (!(de))
1635- then (hs != hv)
1616+ then throw(("Payment attached should be " + toString(hA)))
1617+ else hY("L", 4, "SMM", b, ib, gn, (bm * 4))
1618+ }
1619+
1620+
1621+func iv (b,ib,gn,dg,hx) = {
1622+ let hA = (ck * 47)
1623+ if (if (!(dg))
1624+ then (hx != hA)
16361625 else false)
1637- then throw(("Payment attached should be " + toString(hv)))
1638- else hT("XL", 5, "SSSML", b, hW, gl, (bl * 47))
1639- }
1640-
1641-
1642-func ir (b,hW,gl,de,hs) = {
1643- let hv = (ci * 54)
1644- if (if (!(de))
1645- then (hs != hv)
1626+ then throw(("Payment attached should be " + toString(hA)))
1627+ else hY("XL", 5, "SSSML", b, ib, gn, (bm * 47))
1628+ }
1629+
1630+
1631+func iw (b,ib,gn,dg,hx) = {
1632+ let hA = (ck * 54)
1633+ if (if (!(dg))
1634+ then (hx != hA)
16461635 else false)
1647- then throw(("Payment attached should be " + toString(hv)))
1648- else hT("XXL", 6, "LXL", b, hW, gl, (bl * 54))
1649- }
1650-
1651-
1652-func is (de,b,hs,hW,gl) = {
1653- let it = {
1654- let bj = size(hW)
1655- if ((4 == bj))
1656- then io(b, hW, gl)
1657- else if ((3 == bj))
1658- then ip(b, hW, gl, de, hs)
1659- else if ((5 == bj))
1660- then iq(b, hW, gl, de, hs)
1661- else if ((2 == bj))
1662- then ir(b, hW, gl, de, hs)
1636+ then throw(("Payment attached should be " + toString(hA)))
1637+ else hY("XXL", 6, "LXL", b, ib, gn, (bm * 54))
1638+ }
1639+
1640+
1641+func ix (dg,b,hx,ib,gn) = {
1642+ let iy = {
1643+ let bk = size(ib)
1644+ if ((4 == bk))
1645+ then it(b, ib, gn)
1646+ else if ((3 == bk))
1647+ then iu(b, ib, gn, dg, hx)
1648+ else if ((5 == bk))
1649+ then iv(b, ib, gn, dg, hx)
1650+ else if ((2 == bk))
1651+ then iw(b, ib, gn, dg, hx)
16631652 else throw("Unknown merge")
16641653 }
1665- it
1666- }
1667-
1668-
1669-func iu (eu) = if (if ((eu.originCaller != bJ))
1670- then valueOrElse(getBoolean(aY()), false)
1654+ iy
1655+ }
1656+
1657+
1658+func iz (ev) = if (if ((ev.originCaller != bK))
1659+ then valueOrElse(getBoolean(aZ()), false)
16711660 else false)
16721661 then throw("Contracts are under maintenance")
1673- else StringEntry(aB(toString(eu.originCaller)), toBase58String(eu.transactionId))
1674-
1675-
1676-@Callable(eu)
1677-func constructorV1 (iv) = if ((eu.caller != this))
1662+ else StringEntry(aC(toString(ev.originCaller)), toBase58String(ev.transactionId))
1663+
1664+
1665+@Callable(ev)
1666+func constructorV1 (iA) = if ((ev.caller != this))
16781667 then throw("Permission denied")
1679- else [StringEntry(bD(), iv)]
1680-
1681-
1682-
1683-@Callable(eu)
1684-func setBlocked (iw) = if ((eu.caller != this))
1668+ else [StringEntry(bE(), iA)]
1669+
1670+
1671+
1672+@Callable(ev)
1673+func setBlocked (iB) = if ((ev.caller != this))
16851674 then throw("permission denied")
1686- else [BooleanEntry(aY(), iw)]
1687-
1688-
1689-
1690-@Callable(eu)
1675+ else [BooleanEntry(aZ(), iB)]
1676+
1677+
1678+
1679+@Callable(ev)
16911680 func stakeLand () = {
1692- let ix = iu(eu)
1693- if ((size(eu.payments) != 1))
1681+ let iC = iz(ev)
1682+ if ((size(ev.payments) != 1))
16941683 then throw("Exactly one payment required")
16951684 else {
1696- let iy = value(eu.payments[0])
1697- let aD = value(iy.assetId)
1698- let bw = toString(eu.caller)
1699- if ((iy.amount != 1))
1700- then throw((("NFT " + W) + " token should be attached as payment"))
1685+ let iD = value(ev.payments[0])
1686+ let aE = value(iD.assetId)
1687+ let bx = toString(ev.caller)
1688+ if ((iD.amount != 1))
1689+ then throw((("NFT " + X) + " token should be attached as payment"))
17011690 else {
1702- let gZ = value(assetInfo(aD))
1703- if ((gZ.issuer != this))
1691+ let he = value(assetInfo(aE))
1692+ if ((he.issuer != this))
17041693 then throw("Unknown issuer of token")
1705- else if (!(contains(gZ.name, W)))
1706- then throw((("Only NFT " + W) + " tokens are accepted"))
1694+ else if (!(contains(he.name, X)))
1695+ then throw((("Only NFT " + X) + " tokens are accepted"))
17071696 else {
1708- let iz = drop(gZ.name, 4)
1709- let cu = if (contains(iz, "XXL"))
1710- then dropRight(iz, 3)
1711- else if (contains(iz, "XL"))
1712- then dropRight(iz, 2)
1713- else dropRight(iz, 1)
1714- if (!(isDefined(parseInt(cu))))
1715- then throw(("Cannot parse land number from " + gZ.name))
1697+ let iE = drop(he.name, 4)
1698+ let cw = if (contains(iE, "XXL"))
1699+ then dropRight(iE, 3)
1700+ else if (contains(iE, "XL"))
1701+ then dropRight(iE, 2)
1702+ else dropRight(iE, 1)
1703+ if (!(isDefined(parseInt(cw))))
1704+ then throw(("Cannot parse land number from " + he.name))
17161705 else {
1717- let aN = toBase58String(aD)
1718- let ha = aF(aN)
1719- if (isDefined(getInteger(ha)))
1720- then throw((("NFT " + gZ.name) + " is already staked"))
1706+ let aO = toBase58String(aE)
1707+ let hf = aG(aO)
1708+ if (isDefined(getInteger(hf)))
1709+ then throw((("NFT " + he.name) + " is already staked"))
17211710 else {
1722- let hd = split(gZ.description, "_")
1723- let eq = ew(hd[bP])
1724- let gO = bZ(hd[bO])
1725- let db = ev(eq, (gO / bq), 1)
1726- let gP = valueOrElse(getInteger(aH(Y, aN)), 0)
1727- let ih = bS(bw)
1728- let ii = getString(ih)
1729- let id = if (isDefined(ii))
1730- then split_51C(value(ii), "_")
1711+ let hi = split(he.description, "_")
1712+ let er = ex(hi[bQ])
1713+ let gT = ca(hi[bP])
1714+ let dd = ew(er, (gT / br), 1)
1715+ let gU = valueOrElse(getInteger(aI(Z, aO)), 0)
1716+ let im = bT(bx)
1717+ let in = getString(im)
1718+ let ii = if (isDefined(in))
1719+ then split_51C(value(in), "_")
17311720 else nil
1732- if (containsElement(id, aN))
1733- then throw(("Your staked lands already contain " + aN))
1721+ if (containsElement(ii, aO))
1722+ then throw(("Your staked lands already contain " + aO))
17341723 else {
1735- let fx = valueOrElse(getInteger(aG(aN)), 0)
1736- let im = bT(bw)
1737- let iA = valueOrElse(getInteger(im), 0)
1738- let iB = bX(invoke(bM, "onStakeUnstakeLand", [bw], nil))
1739- $Tuple2([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(W, aN, bw), lastBlock.timestamp), StringEntry(ih, makeString_11C((id :+ aN), "_")), IntegerEntry(im, (iA + gO)), StringEntry(aC(aN), bw), StringEntry(cz(cu), bw), IntegerEntry(cy(Y, aN, bw), gP), IntegerEntry(cx(aN, bw), fx), StringEntry(bR(), db), ix], iB)
1724+ let fz = valueOrElse(getInteger(aH(aO)), 0)
1725+ let ir = bU(bx)
1726+ let iF = valueOrElse(getInteger(ir), 0)
1727+ let iG = bY(invoke(bN, "onStakeUnstakeLand", [bx], nil))
1728+ $Tuple2([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(X, aO, bx), lastBlock.timestamp), StringEntry(im, makeString_11C((ii :+ aO), "_")), IntegerEntry(ir, (iF + gT)), StringEntry(aD(aO), bx), StringEntry(cB(cw), bx), IntegerEntry(cA(Z, aO, bx), gU), IntegerEntry(cz(aO, bx), fz), StringEntry(bS(), dd), iC], iG)
17401729 }
17411730 }
17421731 }
17431732 }
17441733 }
17451734 }
17461735 }
17471736
17481737
17491738
1750-@Callable(eu)
1751-func unstakeLand (gU) = {
1752- let ix = iu(eu)
1753- if ((size(eu.payments) != 0))
1739+@Callable(ev)
1740+func unstakeLand (gZ) = {
1741+ let iC = iz(ev)
1742+ if ((size(ev.payments) != 0))
17541743 then throw("No payments required")
17551744 else {
1756- let b = toString(eu.caller)
1757- let dX = gS(b, cE, gU)
1758- let aN = dX._2
1759- let ih = bS(b)
1760- let eq = ew(dX._3[bP])
1761- let gO = bZ(dX._3[bO])
1762- let db = ev(eq, (gO / bq), -1)
1763- let hx = hq(b, aN, gO, cE)
1764- let id = split_51C(valueOrElse(getString(ih), ""), "_")
1765- let bI = indexOf(id, aN)
1766- if (!(isDefined(bI)))
1767- then throw(("Your staked lands don't contain " + aN))
1745+ let b = toString(ev.caller)
1746+ let dX = gX(b, cG, gZ)
1747+ let aO = dX._2
1748+ let im = bT(b)
1749+ let er = ex(dX._3[bQ])
1750+ let gT = ca(dX._3[bP])
1751+ let dd = ew(er, (gT / br), -1)
1752+ let hC = hv(b, aO, gT, cG)
1753+ let ii = split_51C(valueOrElse(getString(im), ""), "_")
1754+ let bJ = indexOf(ii, aO)
1755+ if (!(isDefined(bJ)))
1756+ then throw(("Your staked lands don't contain " + aO))
17681757 else {
1769- let iC = lastBlock.timestamp
1770- let iD = valueOrElse(getInteger(bL, aZ(b)), 0)
1771- if ((iD >= iC))
1772- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iD)))
1758+ let iH = lastBlock.timestamp
1759+ let iI = valueOrElse(getInteger(bM, ba(b)), 0)
1760+ if ((iI >= iH))
1761+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(iI)))
17731762 else {
1774- let iE = (valueOrElse(getInteger(bM, a(b)), 0) + bm)
1775- if ((iE > iC))
1776- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iE)))
1763+ let iJ = (valueOrElse(getInteger(bN, a(b)), 0) + bn)
1764+ if ((iJ > iH))
1765+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(iJ)))
17771766 else {
1778- let im = bT(b)
1779- let in = valueOrElse(getInteger(im), 0)
1780- let iF = if ((gO > in))
1767+ let ir = bU(b)
1768+ let is = valueOrElse(getInteger(ir), 0)
1769+ let iK = if ((gT > is))
17811770 then 0
1782- else (in - gO)
1783- let iB = bX(invoke(bM, "onStakeUnstakeLand", [b], nil))
1784- $Tuple2([ScriptTransfer(eu.caller, 1, fromBase58String(aN)), DeleteEntry(aF(aN)), DeleteEntry(aJ(W, aN, b)), StringEntry(bR(), db), StringEntry(hx._2, makeString(hx._3, ":")), if ((size(id) > 1))
1785- then StringEntry(ih, makeString_11C(removeByIndex(id, value(bI)), "_"))
1786- else DeleteEntry(ih), IntegerEntry(im, iF), ix], iB)
1771+ else (is - gT)
1772+ let iG = bY(invoke(bN, "onStakeUnstakeLand", [b], nil))
1773+ $Tuple2([ScriptTransfer(ev.caller, 1, fromBase58String(aO)), DeleteEntry(aG(aO)), DeleteEntry(aK(X, aO, b)), StringEntry(bS(), dd), StringEntry(hC._2, makeString(hC._3, ":")), if ((size(ii) > 1))
1774+ then StringEntry(im, makeString_11C(removeByIndex(ii, value(bJ)), "_"))
1775+ else DeleteEntry(im), IntegerEntry(ir, iK), iC], iG)
17871776 }
17881777 }
17891778 }
17901779 }
17911780 }
17921781
17931782
17941783
1795-@Callable(eu)
1784+@Callable(ev)
17961785 func stakeDuck () = {
1797- let ix = iu(eu)
1798- if ((size(eu.payments) != 1))
1786+ let iC = iz(ev)
1787+ if ((size(ev.payments) != 1))
17991788 then throw("Exactly one payment required")
18001789 else {
1801- let iy = value(eu.payments[0])
1802- let aD = value(iy.assetId)
1803- let bw = toString(eu.caller)
1804- if ((iy.amount != 1))
1805- then throw((("NFT " + X) + " token should be attached as payment"))
1790+ let iD = value(ev.payments[0])
1791+ let aE = value(iD.assetId)
1792+ let bx = toString(ev.caller)
1793+ if ((iD.amount != 1))
1794+ then throw((("NFT " + Y) + " token should be attached as payment"))
18061795 else {
1807- let gZ = value(assetInfo(aD))
1808- if (if ((gZ.issuer != cb))
1809- then (gZ.issuer != cc)
1796+ let he = value(assetInfo(aE))
1797+ if (if ((he.issuer != cd))
1798+ then (he.issuer != ce)
18101799 else false)
1811- then throw((("Unknown issuer of " + X) + " token"))
1812- else if (!(contains(gZ.name, X)))
1813- then throw((("Only NFT " + X) + " tokens are accepted"))
1800+ then throw((("Unknown issuer of " + Y) + " token"))
1801+ else if (!(contains(he.name, Y)))
1802+ then throw((("Only NFT " + Y) + " tokens are accepted"))
18141803 else {
1815- let iG = toBase58String(aD)
1816- let ha = aF(iG)
1817- if (isDefined(getInteger(ha)))
1818- then throw((("NFT " + gZ.name) + " is already staked"))
1819- else if (isDefined(getString(aV(bw))))
1820- then throw(("You already staked one duck: " + gZ.name))
1804+ let iL = toBase58String(aE)
1805+ let hf = aG(iL)
1806+ if (isDefined(getInteger(hf)))
1807+ then throw((("NFT " + he.name) + " is already staked"))
1808+ else if (isDefined(getString(aW(bx))))
1809+ then throw(("You already staked one duck: " + he.name))
18211810 else {
1822- let iH = aX(iG)
1823- let iI = getString(iH)
1824- let fd = aW(iG)
1825- let iJ = getString(fd)
1826- let gD = p(iG)
1827- let gE = L(valueOrElse(getInteger(t(iG)), 0))
1828- let iK = valueOrElse(getInteger(gD), gE)
1829- ([IntegerEntry(ha, lastBlock.timestamp), IntegerEntry(aJ(X, toBase58String(aD), bw), lastBlock.timestamp), StringEntry(aU(iG), bw), StringEntry(aV(bw), iG)] ++ (if (isDefined(iI))
1811+ let iM = aY(iL)
1812+ let iN = getString(iM)
1813+ let fe = aX(iL)
1814+ let iO = getString(fe)
1815+ let gF = q(iL)
1816+ let gG = M(valueOrElse(getInteger(u(iL)), 0))
1817+ let iP = valueOrElse(getInteger(gF), gG)
1818+ ([IntegerEntry(hf, lastBlock.timestamp), IntegerEntry(aK(Y, toBase58String(aE), bx), lastBlock.timestamp), StringEntry(aV(iL), bx), StringEntry(aW(bx), iL)] ++ (if (isDefined(iN))
18301819 then nil
1831- else ([StringEntry(iH, ad)] ++ (if (isDefined(iJ))
1820+ else ([StringEntry(iM, ae)] ++ (if (isDefined(iO))
18321821 then nil
1833- else (([StringEntry(fd, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gD, iK)) :+ ix)))))
1822+ else (([StringEntry(fe, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gF, iP)) :+ iC)))))
18341823 }
18351824 }
18361825 }
18371826 }
18381827 }
18391828
18401829
18411830
1842-@Callable(eu)
1843-func unstakeDuck (iG) = {
1844- let ix = iu(eu)
1845- if ((size(eu.payments) != 0))
1831+@Callable(ev)
1832+func unstakeDuck (iL) = {
1833+ let iC = iz(ev)
1834+ if ((size(ev.payments) != 0))
18461835 then throw("No payments required")
18471836 else {
1848- let aD = fromBase58String(iG)
1849- let bw = toString(eu.caller)
1850- let gZ = value(assetInfo(aD))
1851- let ha = aF(toBase58String(aD))
1852- if (!(isDefined(getInteger(ha))))
1853- then throw((("NFT " + gZ.name) + " is not staked"))
1854- else if (!(isDefined(getString(aV(bw)))))
1855- then throw((("The duck " + gZ.name) + " is not staked"))
1837+ let aE = fromBase58String(iL)
1838+ let bx = toString(ev.caller)
1839+ let he = value(assetInfo(aE))
1840+ let hf = aG(toBase58String(aE))
1841+ if (!(isDefined(getInteger(hf))))
1842+ then throw((("NFT " + he.name) + " is not staked"))
1843+ else if (!(isDefined(getString(aW(bx)))))
1844+ then throw((("The duck " + he.name) + " is not staked"))
18561845 else {
1857- let hc = valueOrErrorMessage(getString(aU(toBase58String(aD))), (("NFT " + gZ.name) + " is orphaned"))
1858- if ((hc != bw))
1846+ let hh = valueOrErrorMessage(getString(aV(toBase58String(aE))), (("NFT " + he.name) + " is orphaned"))
1847+ if ((hh != bx))
18591848 then throw("Staked NFT is not yours")
18601849 else {
1861- let gD = p(iG)
1862- let gE = L(valueOrElse(getInteger(t(iG)), 0))
1863- let V = valueOrElse(getInteger(gD), gE)
1864- if ((gE > V))
1865- then throw((("Please heal your duck to " + toString(gE)) + "hp before unstaking"))
1866- else [ScriptTransfer(eu.caller, 1, aD), DeleteEntry(ha), DeleteEntry(gD), DeleteEntry(aX(iG)), DeleteEntry(aU(iG)), DeleteEntry(aJ(X, iG, bw)), DeleteEntry(aV(bw)), ix]
1850+ let gF = q(iL)
1851+ let gG = M(valueOrElse(getInteger(u(iL)), 0))
1852+ let W = valueOrElse(getInteger(gF), gG)
1853+ if ((gG > W))
1854+ then throw((("Please heal your duck to " + toString(gG)) + "hp before unstaking"))
1855+ else [ScriptTransfer(ev.caller, 1, aE), DeleteEntry(hf), DeleteEntry(gF), DeleteEntry(aY(iL)), DeleteEntry(aV(iL)), DeleteEntry(aK(Y, iL, bx)), DeleteEntry(aW(bx)), iC]
18671856 }
18681857 }
18691858 }
18701859 }
18711860
18721861
18731862
1874-@Callable(eu)
1875-func claimRes (fK,iL) = {
1876- let ix = iu(eu)
1877- if ((size(eu.payments) != 0))
1863+@Callable(ev)
1864+func claimRes (fM,iQ) = {
1865+ let iC = iz(ev)
1866+ if ((size(ev.payments) != 0))
18781867 then throw("No payments required")
18791868 else {
1880- let b = toString(eu.originCaller)
1881- let dj = he(b, fK, cE, iL)
1882- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
1883- $Tuple2(((((dj._1 ++ hD(q, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._3[ay])
1884- }
1885- }
1886-
1887-
1888-
1889-@Callable(eu)
1890-func claimResToWH (fK,iL) = {
1891- let ix = iu(eu)
1892- if ((size(eu.payments) != 0))
1869+ let b = toString(ev.originCaller)
1870+ let dl = hj(b, fM, cG, iQ)
1871+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
1872+ $Tuple2(((((dl._1 ++ hI(r, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._3[az])
1873+ }
1874+ }
1875+
1876+
1877+
1878+@Callable(ev)
1879+func claimResToWH (fM,iQ) = {
1880+ let iC = iz(ev)
1881+ if ((size(ev.payments) != 0))
18931882 then throw("No payments required")
18941883 else {
1895- let b = toString(eu.originCaller)
1896- let dj = he(b, fK, cD, iL)
1897- $Tuple2(((((dj._1 ++ hJ(b, fraction(z, fK, bp))._1) :+ StringEntry(dj._2, makeString(dj._3, ":"))) :+ StringEntry(dj._4, makeString(dj._5, ":"))) :+ ix), dj._5[ap])
1898- }
1899- }
1900-
1901-
1902-
1903-@Callable(eu)
1904-func flight (gs,gt) = {
1905- let ix = iu(eu)
1906- if ((size(eu.payments) != 0))
1884+ let b = toString(ev.originCaller)
1885+ let dl = hj(b, fM, cF, iQ)
1886+ $Tuple2(((((dl._1 ++ hO(b, fraction(A, fM, bq))._1) :+ StringEntry(dl._2, makeString(dl._3, ":"))) :+ StringEntry(dl._4, makeString(dl._5, ":"))) :+ iC), dl._5[aq])
1887+ }
1888+ }
1889+
1890+
1891+
1892+@Callable(ev)
1893+func flight (gu,gv) = {
1894+ let iC = iz(ev)
1895+ if ((size(ev.payments) != 0))
19071896 then throw("No payments required")
19081897 else {
1909- let ba = toString(eu.caller)
1910- let eZ = gr(ba, gs, gt)
1911- let q = eZ._2
1912- let iH = aX(q)
1913- let gW = valueOrElse(getString(iH), ad)
1914- if ((eZ._4 == gW))
1898+ let bb = toString(ev.caller)
1899+ let fa = gt(bb, gu, gv)
1900+ let r = fa._2
1901+ let iM = aY(r)
1902+ let hb = valueOrElse(getString(iM), ae)
1903+ if ((fa._4 == hb))
19151904 then throw("You can't fly to the same location")
19161905 else {
1917- let fd = aW(q)
1918- let fO = fc(fd)
1919- let dz = dk(fO[aA], eZ._5)
1920- $Tuple2(([StringEntry(iH, if ((eZ._1 > 0))
1921- then eZ._4
1922- else gW), StringEntry(fd, makeString([fO[ax], fO[ay], fO[az], dz], ":")), IntegerEntry(p(q), eZ._1), ix] ++ hD(q, if ((eZ._1 > 0))
1923- then A
1924- else B)._1), eZ._3)
1906+ let gO = w(r)
1907+ let gP = valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,")
1908+ let gQ = dm(gP, fa._5)
1909+ $Tuple2(([StringEntry(iM, if ((fa._1 > 0))
1910+ then fa._4
1911+ else hb), StringEntry(gO, gQ), IntegerEntry(q(r), fa._1), iC] ++ hI(r, if ((fa._1 > 0))
1912+ then B
1913+ else C)._1), fa._3)
19251914 }
19261915 }
19271916 }
19281917
19291918
19301919
1931-@Callable(eu)
1932-func heal (iM,iN,iO) = {
1933- let ix = iu(eu)
1934- if (if (if ((0 > iM))
1920+@Callable(ev)
1921+func heal (iR,iS,iT) = {
1922+ let iC = iz(ev)
1923+ if (if (if ((0 > iR))
19351924 then true
1936- else (0 > iN))
1925+ else (0 > iS))
19371926 then true
1938- else (0 > iO))
1927+ else (0 > iT))
19391928 then throw("Quantity cannot be negative")
19401929 else {
1941- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
1942- let iP = [iM, iN, iO]
1943- let gD = p(q)
1944- let gE = L(valueOrElse(getInteger(t(q)), 0))
1945- let iQ = valueOrElse(getInteger(gD), gE)
1946- if ((iQ >= gE))
1947- then throw((("HP should be < " + toString(gE)) + " to heal"))
1930+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
1931+ let iU = [iR, iS, iT]
1932+ let gF = q(r)
1933+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1934+ let iV = valueOrElse(getInteger(gF), gG)
1935+ if ((iV >= gG))
1936+ then throw((("HP should be < " + toString(gG)) + " to heal"))
19481937 else {
1949- let fd = aW(q)
1950- let fO = fc(fd)
1951- let iR = if ((fO[aA] == ""))
1938+ let fe = aX(r)
1939+ let fQ = fd(fe)
1940+ let iW = if ((fQ[aB] == ""))
19521941 then nil
1953- else split(fO[aA], "_")
1954- func iS (cR,iT) = {
1955- let bY = cR._2
1956- let eQ = if ((size(iR) > bY))
1957- then parseIntValue(iR[bY])
1942+ else split(fQ[aB], "_")
1943+ func iX (cT,iY) = {
1944+ let bZ = cT._2
1945+ let eR = if ((size(iW) > bZ))
1946+ then parseIntValue(iW[bZ])
19581947 else 0
1959- if ((3 > bY))
1948+ if ((3 > bZ))
19601949 then {
1961- let iU = iP[bY]
1962- if ((iU > eQ))
1963- then throw(((("You have only " + toString(eQ)) + " of ") + ag[bY]))
1964- else $Tuple3((cR._1 :+ toString((eQ - iU))), (bY + 1), (cR._3 + (ce[bY] * iU)))
1950+ let iZ = iU[bZ]
1951+ if ((iZ > eR))
1952+ then throw(((("You have only " + toString(eR)) + " of ") + ah[bZ]))
1953+ else $Tuple3((cT._1 :+ toString((eR - iZ))), (bZ + 1), (cT._3 + (cg[bZ] * iZ)))
19651954 }
1966- else $Tuple3((cR._1 :+ toString(eQ)), (bY + 1), cR._3)
1955+ else $Tuple3((cT._1 :+ toString(eR)), (bZ + 1), cT._3)
19671956 }
19681957
1969- let dj = {
1970- let cT = aj
1971- let cU = size(cT)
1972- let cV = $Tuple3(nil, 0, 0)
1973- func cW (cX,cY) = if ((cY >= cU))
1974- then cX
1975- else iS(cX, cT[cY])
1976-
1977- func cZ (cX,cY) = if ((cY >= cU))
1978- then cX
1958+ let dl = {
1959+ let cV = ak
1960+ let cW = size(cV)
1961+ let cX = $Tuple3(nil, 0, 0)
1962+ func cY (cZ,da) = if ((da >= cW))
1963+ then cZ
1964+ else iX(cZ, cV[da])
1965+
1966+ func db (cZ,da) = if ((da >= cW))
1967+ then cZ
19791968 else throw("List size exceeds 50")
19801969
1981- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 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)
1970+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 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)
19821971 }
1983- let iV = min([gE, (iQ + dj._3)])
1984- $Tuple2(([IntegerEntry(gD, iV), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], makeString(dj._1, "_")], ":")), ix] ++ hD(q, (I * ((iM + iN) + iO)))._1), iV)
1972+ let ja = min([gG, (iV + dl._3)])
1973+ $Tuple2(([IntegerEntry(gF, ja), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], makeString(dl._1, "_")], ":")), iC] ++ hI(r, (J * ((iR + iS) + iT)))._1), ja)
19851974 }
19861975 }
19871976 }
19881977
19891978
19901979
1991-@Callable(eu)
1980+@Callable(ev)
19921981 func healES () = {
1993- let ix = iu(eu)
1994- if ((size(eu.payments) != 1))
1982+ let iC = iz(ev)
1983+ if ((size(ev.payments) != 1))
19951984 then throw("Exactly one payment required")
19961985 else {
1997- let iy = value(eu.payments[0])
1998- if ((iy.assetId != bi))
1986+ let iD = value(ev.payments[0])
1987+ if ((iD.assetId != bj))
19991988 then throw("Allowed USDT payment only!")
20001989 else {
2001- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2002- let gD = p(q)
2003- let gE = L(valueOrElse(getInteger(t(q)), 0))
2004- let iQ = valueOrElse(getInteger(gD), gE)
2005- if ((iQ > 0))
1990+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
1991+ let gF = q(r)
1992+ let gG = M(valueOrElse(getInteger(u(r)), 0))
1993+ let iV = valueOrElse(getInteger(gF), gG)
1994+ if ((iV > 0))
20061995 then throw("HP should be 0 to call Emergency Service")
20071996 else {
2008- let fd = aW(q)
2009- let fO = fc(fd)
2010- let iR = if ((fO[aA] == ""))
1997+ let fe = aX(r)
1998+ let fQ = fd(fe)
1999+ let iW = if ((fQ[aB] == ""))
20112000 then nil
2012- else split(fO[aA], "_")
2013- let iW = if ((size(iR) > 0))
2014- then parseIntValue(iR[0])
2001+ else split(fQ[aB], "_")
2002+ let jb = if ((size(iW) > 0))
2003+ then parseIntValue(iW[0])
20152004 else 0
2016- let iX = if ((size(iR) > 1))
2017- then parseIntValue(iR[1])
2005+ let jc = if ((size(iW) > 1))
2006+ then parseIntValue(iW[1])
20182007 else 0
2019- let iY = if ((size(iR) > 2))
2020- then parseIntValue(iR[2])
2008+ let jd = if ((size(iW) > 2))
2009+ then parseIntValue(iW[2])
20212010 else 0
2022- if (if (if ((iW > 0))
2011+ if (if (if ((jb > 0))
20232012 then true
2024- else (iX > 0))
2013+ else (jc > 0))
20252014 then true
2026- else (iY > 0))
2015+ else (jd > 0))
20272016 then throw("You have to use own Medical Kit")
20282017 else {
2029- let iZ = getString(bK, bb())
2030- let ja = if (isDefined(iZ))
2031- then split(value(iZ), "_")
2018+ let je = getString(bL, bc())
2019+ let jf = if (isDefined(je))
2020+ then split(value(je), "_")
20322021 else nil
2033- let jb = if ((size(ja) > 0))
2034- then parseIntValue(ja[0])
2022+ let jg = if ((size(jf) > 0))
2023+ then parseIntValue(jf[0])
20352024 else 0
2036- if ((0 >= jb))
2025+ if ((0 >= jg))
20372026 then throw("There are no Medical Kits L1 at Emergency Service storage")
20382027 else {
2039- let iV = (iQ + ce[0])
2040- let jc = makeString([toString((jb - 1)), removeByIndex(ja, 0)], "_")
2041- let bf = split(aj[0], "_")
2042- let jd = be(bf)
2043- let je = fraction((jd * af), ae, (10 * an))
2044- if ((iy.amount != je))
2045- then throw(("Payment attached should be " + toString(je)))
2028+ let ja = (iV + cg[0])
2029+ let jh = makeString([toString((jg - 1)), removeByIndex(jf, 0)], "_")
2030+ let bg = split(ak[0], "_")
2031+ let ji = bf(bg)
2032+ let jj = fraction((ji * ag), af, (10 * ao))
2033+ if ((iD.amount != jj))
2034+ then throw(("Payment attached should be " + toString(jj)))
20462035 else {
2047- let dj = bU(invoke(bK, "updateEsStorage", [jc], [AttachedPayment(bi, je)]))
2048- $Tuple2(([IntegerEntry(gD, iV), ix] ++ hD(q, C)._1), dj)
2036+ let dl = bV(invoke(bL, "updateEsStorage", [jh], [AttachedPayment(bj, jj)]))
2037+ $Tuple2(([IntegerEntry(gF, ja), iC] ++ hI(r, D)._1), dl)
20492038 }
20502039 }
20512040 }
20522041 }
20532042 }
20542043 }
20552044 }
20562045
20572046
20582047
2059-@Callable(eu)
2060-func updateBackpack (q,jf) = if ((eu.caller != bK))
2048+@Callable(ev)
2049+func updateBackpack (r,jk) = if ((ev.caller != bL))
20612050 then throw("permission denied")
2062- else $Tuple2([StringEntry(aW(q), jf)], jf)
2063-
2064-
2065-
2066-@Callable(eu)
2051+ else $Tuple2([StringEntry(aX(r), jk)], jk)
2052+
2053+
2054+
2055+@Callable(ev)
20672056 func buySLand () = {
2068- let ix = iu(eu)
2069- if ((size(eu.payments) != 1))
2057+ let iC = iz(ev)
2058+ if ((size(ev.payments) != 1))
20702059 then throw("Exactly one payment required")
20712060 else {
2072- let iy = value(eu.payments[0])
2073- if ((iy.assetId != bi))
2061+ let iD = value(ev.payments[0])
2062+ if ((iD.assetId != bj))
20742063 then throw("Allowed USDT payment only!")
2075- else if ((iy.amount != ck))
2076- then throw(("Payment attached should be " + toString(ck)))
2064+ else if ((iD.amount != cm))
2065+ then throw(("Payment attached should be " + toString(cm)))
20772066 else {
2078- let dj = gj(eu.caller, eu.transactionId)
2079- $Tuple2((((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) ++ hJ(toString(eu.caller), E)._1) :+ ix), dj._2._1)
2067+ let dl = gl(ev.caller, ev.transactionId)
2068+ $Tuple2((((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) ++ hO(toString(ev.caller), F)._1) :+ iC), dl._2._1)
20802069 }
20812070 }
20822071 }
20832072
20842073
20852074
2086-@Callable(eu)
2087-func expedition (gs,gt) = {
2088- let ix = iu(eu)
2089- if ((size(eu.payments) != 0))
2075+@Callable(ev)
2076+func expedition (gu,gv) = {
2077+ let iC = iz(ev)
2078+ if ((size(ev.payments) != 0))
20902079 then throw("No payments required")
20912080 else {
2092- let dj = gJ(eu.caller, eu.transactionId, gs, gt)
2093- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2094- $Tuple2(((dj._1 ++ hD(q, E)._1) :+ ix), $Tuple2(dj._2, dj._3))
2095- }
2096- }
2097-
2098-
2099-
2100-@Callable(eu)
2101-func upgradeInfra (aN) = {
2102- let ix = iu(eu)
2103- if ((size(eu.payments) != 0))
2081+ let dl = gL(ev.caller, ev.transactionId, gu, gv)
2082+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
2083+ $Tuple2(((dl._1 ++ hI(r, F)._1) :+ iC), $Tuple2(dl._2, dl._3))
2084+ }
2085+ }
2086+
2087+
2088+
2089+@Callable(ev)
2090+func upgradeInfra (aO) = {
2091+ let iC = iz(ev)
2092+ if ((size(ev.payments) != 0))
21042093 then throw("No payments required")
21052094 else {
2106- let dj = hr(true, eu.caller, 0, aN)
2107- let q = valueOrErrorMessage(getString(aV(toString(eu.caller))), "You don't have a duck staked")
2108- $Tuple2(((dj._1 :+ ix) ++ hD(q, fraction(F, dj._3, bp))._1), dj._2)
2109- }
2110- }
2111-
2112-
2113-
2114-@Callable(eu)
2115-func upgradeInfraUsdt (aN) = if ((eu.caller != this))
2095+ let dl = hw(true, ev.caller, 0, aO)
2096+ let r = valueOrErrorMessage(getString(aW(toString(ev.caller))), "You don't have a duck staked")
2097+ $Tuple2(((dl._1 :+ iC) ++ hI(r, fraction(G, dl._3, bq))._1), dl._2)
2098+ }
2099+ }
2100+
2101+
2102+
2103+@Callable(ev)
2104+func upgradeInfraUsdt (aO) = if ((ev.caller != this))
21162105 then throw("Permission denied")
21172106 else {
2118- let ix = iu(eu)
2119- if ((size(eu.payments) != 1))
2107+ let iC = iz(ev)
2108+ if ((size(ev.payments) != 1))
21202109 then throw("Exactly one payment required")
21212110 else {
2122- let iy = value(eu.payments[0])
2123- if ((iy.assetId != bi))
2111+ let iD = value(ev.payments[0])
2112+ if ((iD.assetId != bj))
21242113 then throw("Allowed USDT payment only!")
21252114 else {
2126- let dj = hr(false, eu.caller, iy.amount, aN)
2127- $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
2115+ let dl = hw(false, ev.caller, iD.amount, aO)
2116+ $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2)
21282117 }
21292118 }
21302119 }
21312120
21322121
21332122
2134-@Callable(eu)
2135-func activateArtifact (jg,jh) = {
2136- let ix = iu(eu)
2137- if ((size(eu.payments) != 0))
2123+@Callable(ev)
2124+func activateArtifact (jl,jm) = {
2125+ let iC = iz(ev)
2126+ if ((size(ev.payments) != 0))
21382127 then throw("No payments required")
21392128 else {
2140- let b = toString(eu.caller)
2141- let dj = {
2142- let bj = jg
2143- if (("PRESALE" == bj))
2144- then hR(b, jh)
2145- else if (("ONBOARD" == bj))
2146- then hK(b)
2129+ let b = toString(ev.caller)
2130+ let dl = {
2131+ let bk = jl
2132+ if (("PRESALE" == bk))
2133+ then hW(b, jm)
2134+ else if (("ONBOARD" == bk))
2135+ then hP(b)
21472136 else throw("Unknown artifact")
21482137 }
2149- (dj :+ ix)
2150- }
2151- }
2152-
2153-
2154-
2155-@Callable(eu)
2156-func mergeLands (hW) = {
2157- let ix = iu(eu)
2158- if ((size(eu.payments) != 0))
2138+ (dl :+ iC)
2139+ }
2140+ }
2141+
2142+
2143+
2144+@Callable(ev)
2145+func mergeLands (ib) = {
2146+ let iC = iz(ev)
2147+ if ((size(ev.payments) != 0))
21592148 then throw("No payments required")
21602149 else {
2161- let dj = is(true, toString(eu.caller), 0, hW, eu.transactionId)
2162- $Tuple2(((dj._1 :+ ix) ++ hJ(toString(eu.caller), G)._1), dj._2)
2163- }
2164- }
2165-
2166-
2167-
2168-@Callable(eu)
2169-func mergeLandsUsdt (hW) = {
2170- let ix = iu(eu)
2171- if ((size(eu.payments) != 1))
2150+ let dl = ix(true, toString(ev.caller), 0, ib, ev.transactionId)
2151+ $Tuple2(((dl._1 :+ iC) ++ hO(toString(ev.caller), H)._1), dl._2)
2152+ }
2153+ }
2154+
2155+
2156+
2157+@Callable(ev)
2158+func mergeLandsUsdt (ib) = {
2159+ let iC = iz(ev)
2160+ if ((size(ev.payments) != 1))
21722161 then throw("Exactly one payment required")
21732162 else {
2174- let iy = value(eu.payments[0])
2175- if ((iy.assetId != bi))
2163+ let iD = value(ev.payments[0])
2164+ if ((iD.assetId != bj))
21762165 then throw("Allowed USDT payment only!")
21772166 else {
2178- let dj = is(false, toString(eu.caller), iy.amount, hW, eu.transactionId)
2179- $Tuple2(((dj._1 :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), dj._2)
2167+ let dl = ix(false, toString(ev.caller), iD.amount, ib, ev.transactionId)
2168+ $Tuple2(((dl._1 :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), dl._2)
21802169 }
21812170 }
21822171 }
21832172
21842173
21852174
2186-@Callable(eu)
2187-func cargoExchange (ji,aN) = {
2188- let ix = iu(eu)
2189- if ((size(eu.payments) != 0))
2175+@Callable(ev)
2176+func cargoExchange (jn,aO) = {
2177+ let iC = iz(ev)
2178+ if ((size(ev.payments) != 0))
21902179 then throw("No payments required")
21912180 else {
2192- let fN = split_4C(ji, ":")
2193- let b = toString(eu.originCaller)
2194- let gZ = value(assetInfo(fromBase58String(aN)))
2195- let ha = aF(aN)
2196- if (!(isDefined(getInteger(ha))))
2197- then throw((gZ.name + " is not staked"))
2181+ let fP = split_4C(jn, ":")
2182+ let b = toString(ev.originCaller)
2183+ let he = value(assetInfo(fromBase58String(aO)))
2184+ let hf = aG(aO)
2185+ if (!(isDefined(getInteger(hf))))
2186+ then throw((he.name + " is not staked"))
21982187 else {
2199- let hc = valueOrErrorMessage(getString(aC(aN)), (("NFT " + gZ.name) + " is orphaned"))
2200- if ((hc != b))
2201- then throw((W + " is not yours"))
2188+ let hh = valueOrErrorMessage(getString(aD(aO)), (("NFT " + he.name) + " is orphaned"))
2189+ if ((hh != b))
2190+ then throw((X + " is not yours"))
22022191 else {
2203- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2204- let fx = valueOrElse(getInteger(aG(aN)), 0)
2205- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2206- let gW = valueOrElse(getString(aX(q)), ad)
2207- let gX = split(value(gW), "_")
2208- if ((gX[bc] != "L"))
2209- then throw((("Duck location type is " + gX[bc]) + ", but should be L"))
2210- else if ((gX[bd] != aN))
2211- then throw(("Duck should be on the land " + aN))
2192+ let fy = (ca(split(he.description, "_")[bP]) / br)
2193+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2194+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2195+ let hb = valueOrElse(getString(aY(r)), ae)
2196+ let hc = split(value(hb), "_")
2197+ if ((hc[bd] != "L"))
2198+ then throw((("Duck location type is " + hc[bd]) + ", but should be L"))
2199+ else if ((hc[be] != aO))
2200+ then throw(("Duck should be on the land " + aO))
22122201 else {
2213- let fv = aM(aN)
2214- let fi = fu(fv, fw, fx)
2215- let fd = aW(q)
2216- let fO = fc(fd)
2217- let dj = fM(fN, fi, fO)
2218- let fD = split(fi[as], "_")
2219- let ho = (parseIntValue(fD[au]) + dj._7)
2220- let hp = (parseIntValue(fD[av]) - dj._7)
2221-[StringEntry(fd, makeString_2C([fO[ax], dj._4, dj._5, dj._6], ":")), StringEntry(fv, makeString_2C([fi[ao], dj._1, dj._2, dj._3, makeString([fD[at], toString(ho), toString(hp), fD[aw]], "_")], ":")), ix]
2202+ let fx = aN(aO)
2203+ let fj = fw(fx, fy, fz)
2204+ let fe = aX(r)
2205+ let fQ = fd(fe)
2206+ let dl = fO(fP, fj, fQ)
2207+ let fF = split(fj[at], "_")
2208+ let ht = (parseIntValue(fF[av]) + dl._7)
2209+ let hu = (parseIntValue(fF[aw]) - dl._7)
2210+[StringEntry(fe, makeString_2C([fQ[ay], dl._4, dl._5, dl._6], ":")), StringEntry(fx, makeString_2C([fj[ap], dl._1, dl._2, dl._3, makeString([fF[au], toString(ht), toString(hu), fF[ax]], "_")], ":")), iC]
22222211 }
22232212 }
22242213 }
22252214 }
22262215 }
22272216
22282217
22292218
2230-@Callable(eu)
2231-func saveWarehouse (fz,aN) = if ((eu.caller != bK))
2219+@Callable(ev)
2220+func saveWarehouse (fB,aO) = if ((ev.caller != bL))
22322221 then throw("Access denied")
22332222 else {
2234- let fv = aM(aN)
2235- let fA = split_4C(fz, ":")
2236- if ((size(fA) != 5))
2223+ let fx = aN(aO)
2224+ let fC = split_4C(fB, ":")
2225+ if ((size(fC) != 5))
22372226 then throw("warehouse string should contain 4 ':' separators")
22382227 else {
2239- let jj = split(fA[as], "_")[at]
2240- let ho = fh(fA)
2241- let jk = ff(fA[ao])
2242- let hp = ((jk - parseIntValue(jj)) - ho)
2243- let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([jj, toString(ho), toString(hp), toString(jk)], "_")], ":")
2244- $Tuple2([StringEntry(fv, jl)], jl)
2228+ let jo = split(fC[at], "_")[au]
2229+ let ht = fi(fC)
2230+ let jp = fg(fC[ap])
2231+ let hu = ((jp - parseIntValue(jo)) - ht)
2232+ let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([jo, toString(ht), toString(hu), toString(jp)], "_")], ":")
2233+ $Tuple2([StringEntry(fx, jq)], jq)
22452234 }
22462235 }
22472236
22482237
22492238
2250-@Callable(eu)
2251-func fixWarehouseFormat (aN) = if ((eu.caller != bJ))
2239+@Callable(ev)
2240+func fixWarehouseFormat (aO) = if ((ev.caller != bK))
22522241 then throw("Access denied")
22532242 else {
2254- let fv = aM(aN)
2255- let gZ = value(assetInfo(fromBase58String(aN)))
2256- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2257- let fx = valueOrElse(getInteger(aG(aN)), 0)
2258- let fA = fu(fv, fw, fx)
2259- let jj = bX(invoke(bK, "recalcLockedVolumeREADONLY", [aN, fA], nil))
2260- let ho = fh(fA)
2261- let jk = ff(fA[ao])
2262- let hp = ((jk - jj) - ho)
2263- let jl = makeString_2C([fA[ao], fA[ap], fA[aq], fA[ar], makeString([toString(jj), toString(ho), toString(hp), toString(jk)], "_")], ":")
2264- $Tuple2([StringEntry(fv, jl)], jl)
2265- }
2266-
2267-
2268-
2269-@Callable(eu)
2270-func fixStakedPieces (bw) = if ((eu.caller != bJ))
2243+ let fx = aN(aO)
2244+ let he = value(assetInfo(fromBase58String(aO)))
2245+ let fy = (ca(split(he.description, "_")[bP]) / br)
2246+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2247+ let fC = fw(fx, fy, fz)
2248+ let jo = bY(invoke(bL, "recalcLockedVolumeREADONLY", [aO, fC], nil))
2249+ let ht = fi(fC)
2250+ let jp = fg(fC[ap])
2251+ let hu = ((jp - jo) - ht)
2252+ let jq = makeString_2C([fC[ap], fC[aq], fC[ar], fC[as], makeString([toString(jo), toString(ht), toString(hu), toString(jp)], "_")], ":")
2253+ $Tuple2([StringEntry(fx, jq)], jq)
2254+ }
2255+
2256+
2257+
2258+@Callable(ev)
2259+func fixStakedPieces (bx) = if ((ev.caller != bK))
22712260 then throw("Access denied")
22722261 else {
2273- let in = if ((bw == ""))
2262+ let is = if ((bx == ""))
22742263 then 0
22752264 else {
2276- let ii = getString(S, bS(bw))
2277- let id = if (isDefined(ii))
2278- then split_51C(value(ii), "_")
2265+ let in = getString(T, bT(bx))
2266+ let ii = if (isDefined(in))
2267+ then split_51C(value(in), "_")
22792268 else nil
2280- func jm (cR,aN) = {
2281- let gZ = value(assetInfo(fromBase58String(aN)))
2282- let ca = split(gZ.description, "_")[bO]
2283- (cR + bZ(ca))
2269+ func jr (cT,aO) = {
2270+ let he = value(assetInfo(fromBase58String(aO)))
2271+ let cb = split(he.description, "_")[bP]
2272+ (cT + ca(cb))
22842273 }
22852274
2286- let cT = id
2287- let cU = size(cT)
2288- let cV = 0
2289- func cW (cX,cY) = if ((cY >= cU))
2290- then cX
2291- else jm(cX, cT[cY])
2292-
2293- func cZ (cX,cY) = if ((cY >= cU))
2294- then cX
2275+ let cV = ii
2276+ let cW = size(cV)
2277+ let cX = 0
2278+ func cY (cZ,da) = if ((da >= cW))
2279+ then cZ
2280+ else jr(cZ, cV[da])
2281+
2282+ func db (cZ,da) = if ((da >= cW))
2283+ then cZ
22952284 else throw("List size exceeds 100")
22962285
2297- cZ(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cW(cV, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
2286+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
22982287 }
2299- $Tuple2([IntegerEntry(bT(bw), in)], in)
2300- }
2301-
2302-
2303-
2304-@Callable(eu)
2305-func setCustomName (aD,if,aI) = {
2306- let ix = iu(eu)
2307- if ((size(eu.payments) != 1))
2288+ $Tuple2([IntegerEntry(bU(bx), is)], is)
2289+ }
2290+
2291+
2292+
2293+@Callable(ev)
2294+func setCustomName (aE,ik,aJ) = {
2295+ let iC = iz(ev)
2296+ if ((size(ev.payments) != 1))
23082297 then throw("Exactly one payment required")
23092298 else {
2310- let iy = value(eu.payments[0])
2311- if ((iy.assetId != bi))
2299+ let iD = value(ev.payments[0])
2300+ if ((iD.assetId != bj))
23122301 then throw("Allowed USDT payment only!")
2313- else if ((iy.amount != cg))
2314- then throw(("Payment should be " + toString(cg)))
2315- else if (contains(if, "__"))
2316- then throw(("Name should not contain '__': " + if))
2317- else if ((size(if) > ch))
2318- then throw(("Name too long, maxLength=" + toString(ch)))
2302+ else if ((iD.amount != ci))
2303+ then throw(("Payment should be " + toString(ci)))
2304+ else if (contains(ik, "__"))
2305+ then throw(("Name should not contain '__': " + ik))
2306+ else if ((size(ik) > cj))
2307+ then throw(("Name too long, maxLength=" + toString(cj)))
23192308 else {
2320- let b = toString(eu.originCaller)
2321- let jn = {
2322- let bj = aI
2323- if (("ACCOUNT" == bj))
2309+ let b = toString(ev.originCaller)
2310+ let js = {
2311+ let bk = aJ
2312+ if (("ACCOUNT" == bk))
23242313 then {
2325- let jo = cB(if)
2326- let jp = getString(jo)
2327- if (isDefined(jp))
2328- then throw(("Name already registered: " + if))
2314+ let jt = cD(ik)
2315+ let ju = getString(jt)
2316+ if (isDefined(ju))
2317+ then throw(("Name already registered: " + ik))
23292318 else {
2330- let jq = aP(b)
2331- let jr = getString(jq)
2332- let js = if (isDefined(jr))
2333- then [DeleteEntry(cB(value(jr)))]
2319+ let jv = aQ(b)
2320+ let jw = getString(jv)
2321+ let jx = if (isDefined(jw))
2322+ then [DeleteEntry(cD(value(jw)))]
23342323 else nil
2335- (((js :+ StringEntry(jq, if)) :+ StringEntry(jo, b)) ++ hJ(b, D)._1)
2324+ (((jx :+ StringEntry(jv, ik)) :+ StringEntry(jt, b)) ++ hO(b, E)._1)
23362325 }
23372326 }
2338- else if (("LAND" == bj))
2327+ else if (("LAND" == bk))
23392328 then {
2340- let gZ = value(assetInfo(fromBase58String(aD)))
2341- let ha = aF(aD)
2342- if (!(isDefined(getInteger(ha))))
2343- then throw((gZ.name + " is not staked"))
2329+ let he = value(assetInfo(fromBase58String(aE)))
2330+ let hf = aG(aE)
2331+ if (!(isDefined(getInteger(hf))))
2332+ then throw((he.name + " is not staked"))
23442333 else {
2345- let hc = valueOrErrorMessage(getString(aC(aD)), (("NFT " + gZ.name) + " is orphaned"))
2346- if ((hc != b))
2347- then throw((W + " is not yours"))
2334+ let hh = valueOrErrorMessage(getString(aD(aE)), (("NFT " + he.name) + " is orphaned"))
2335+ if ((hh != b))
2336+ then throw((X + " is not yours"))
23482337 else {
2349- let jo = cv(if)
2350- let jp = getString(jo)
2351- if (isDefined(jp))
2352- then throw(("Name already registered: " + if))
2338+ let jt = cx(ik)
2339+ let ju = getString(jt)
2340+ if (isDefined(ju))
2341+ then throw(("Name already registered: " + ik))
23532342 else {
2354- let jt = aE(aD)
2355- let jr = getString(jt)
2356- let js = if (isDefined(jr))
2357- then [DeleteEntry(cv(value(jr)))]
2343+ let jy = aF(aE)
2344+ let jw = getString(jy)
2345+ let jx = if (isDefined(jw))
2346+ then [DeleteEntry(cx(value(jw)))]
23582347 else nil
2359- (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hJ(b, D)._1)
2348+ (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hO(b, E)._1)
23602349 }
23612350 }
23622351 }
23632352 }
2364- else if (("DUCK" == bj))
2353+ else if (("DUCK" == bk))
23652354 then {
2366- let gZ = value(assetInfo(fromBase58String(aD)))
2367- let ha = aF(aD)
2368- if (if (!(isDefined(getInteger(ha))))
2355+ let he = value(assetInfo(fromBase58String(aE)))
2356+ let hf = aG(aE)
2357+ if (if (!(isDefined(getInteger(hf))))
23692358 then true
2370- else !(isDefined(getString(aV(b)))))
2371- then throw((gZ.name + " is not staked"))
2359+ else !(isDefined(getString(aW(b)))))
2360+ then throw((he.name + " is not staked"))
23722361 else {
2373- let hc = valueOrErrorMessage(getString(aU(aD)), (("NFT " + gZ.name) + " is orphaned"))
2374- if ((hc != b))
2375- then throw((X + " is not yours"))
2362+ let hh = valueOrErrorMessage(getString(aV(aE)), (("NFT " + he.name) + " is orphaned"))
2363+ if ((hh != b))
2364+ then throw((Y + " is not yours"))
23762365 else {
2377- let jo = cA(if)
2378- let jp = getString(jo)
2379- if (isDefined(jp))
2380- then throw(("Name already registered: " + if))
2366+ let jt = cC(ik)
2367+ let ju = getString(jt)
2368+ if (isDefined(ju))
2369+ then throw(("Name already registered: " + ik))
23812370 else {
2382- let jt = aO(aD)
2383- let jr = getString(jt)
2384- let js = if (isDefined(jr))
2385- then [DeleteEntry(cA(value(jr)))]
2371+ let jy = aP(aE)
2372+ let jw = getString(jy)
2373+ let jx = if (isDefined(jw))
2374+ then [DeleteEntry(cC(value(jw)))]
23862375 else nil
2387- (((js :+ StringEntry(jt, if)) :+ StringEntry(jo, aD)) ++ hD(aD, D)._1)
2376+ (((jx :+ StringEntry(jy, ik)) :+ StringEntry(jt, aE)) ++ hI(aE, E)._1)
23882377 }
23892378 }
23902379 }
23912380 }
23922381 else throw("Unknown entity type")
23932382 }
2394- $Tuple2(((jn :+ ScriptTransfer(bK, iy.amount, bi)) :+ ix), 0)
2383+ $Tuple2(((js :+ ScriptTransfer(bL, iD.amount, bj)) :+ iC), 0)
23952384 }
23962385 }
23972386 }
23982387
23992388
24002389
2401-@Callable(eu)
2402-func setReferrals (ju,jv) = if ((eu.callerPublicKey != cd))
2390+@Callable(ev)
2391+func setReferrals (jz,jA) = if ((ev.callerPublicKey != cf))
24032392 then throw("Permission denied")
24042393 else {
2405- let ix = iu(eu)
2406- if ((size(eu.payments) != 0))
2394+ let iC = iz(ev)
2395+ if ((size(ev.payments) != 0))
24072396 then throw("No payments required")
2408- else if (!(isDefined(addressFromString(ju))))
2409- then throw(("Invalid address: " + ju))
2410- else if (!(isDefined(addressFromString(jv))))
2411- then throw(("Invalid address: " + jv))
2397+ else if (!(isDefined(addressFromString(jz))))
2398+ then throw(("Invalid address: " + jz))
2399+ else if (!(isDefined(addressFromString(jA))))
2400+ then throw(("Invalid address: " + jA))
24122401 else {
2413- let jw = cC()
2414- let jx = getString(jw)
2415- let jy = if (isDefined(jx))
2416- then split_4C(value(jx), "_")
2402+ let jB = cE()
2403+ let jC = getString(jB)
2404+ let jD = if (isDefined(jC))
2405+ then split_4C(value(jC), "_")
24172406 else nil
2418- if (containsElement(jy, jv))
2419- then throw((jv + " is not newbie (already has referrals)"))
2407+ if (containsElement(jD, jA))
2408+ then throw((jA + " is not newbie (already has referrals)"))
24202409 else {
2421- let hL = aQ(jv)
2422- let hM = getString(hL)
2423- if (if (isDefined(hM))
2424- then isDefined(addressFromString(value(hM)))
2410+ let hQ = aR(jA)
2411+ let hR = getString(hQ)
2412+ if (if (isDefined(hR))
2413+ then isDefined(addressFromString(value(hR)))
24252414 else false)
2426- then throw(((jv + " already has refBy: ") + value(hM)))
2415+ then throw(((jA + " already has refBy: ") + value(hR)))
24272416 else {
2428- let jz = aT(ju)
2429- let jA = getString(jz)
2430- let jB = if (isDefined(jA))
2431- then split_4C(value(jA), "_")
2417+ let jE = aU(jz)
2418+ let jF = getString(jE)
2419+ let jG = if (isDefined(jF))
2420+ then split_4C(value(jF), "_")
24322421 else nil
2433- if (containsElement(jB, jv))
2434- then throw((((ju + " already contains ") + jv) + " within referrals"))
2422+ if (containsElement(jG, jA))
2423+ then throw((((jz + " already contains ") + jA) + " within referrals"))
24352424 else {
2436- let jC = makeString_2C((jB :+ jv), "_")
2437- let jD = if (containsElement(jy, ju))
2438- then value(jx)
2439- else makeString_2C((jy :+ ju), "_")
2440- $Tuple2([StringEntry(hL, ju), StringEntry(jz, jC), StringEntry(jw, jD), ix], 0)
2425+ let jH = makeString_2C((jG :+ jA), "_")
2426+ let jI = if (containsElement(jD, jz))
2427+ then value(jC)
2428+ else makeString_2C((jD :+ jz), "_")
2429+ $Tuple2([StringEntry(hQ, jz), StringEntry(jE, jH), StringEntry(jB, jI), iC], 0)
24412430 }
24422431 }
24432432 }
24442433 }
24452434 }
24462435
24472436
24482437
2449-@Callable(eu)
2450-func distributePoints (jE,jF,jG,jH,jI) = {
2451- let ix = iu(eu)
2452- if ((size(eu.payments) != 0))
2438+@Callable(ev)
2439+func distributePoints (jJ,jK,jL,jM,jN) = {
2440+ let iC = iz(ev)
2441+ if ((size(ev.payments) != 0))
24532442 then throw("No payments required")
24542443 else {
2455- let b = toString(eu.originCaller)
2456- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2457- let jJ = y(b)
2458- let jK = valueOrElse(getInteger(S, jJ), 0)
2459- let jL = u(q)
2460- let jM = valueOrElse(getInteger(S, jL), 0)
2461- let jN = (jK + jM)
2462- let jO = ((((jE + jF) + jG) + jH) + jI)
2463- if ((jO > jN))
2464- then throw((("There are only " + toString(jN)) + " free points to distribute"))
2444+ let b = toString(ev.originCaller)
2445+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2446+ let jO = z(b)
2447+ let jP = valueOrElse(getInteger(T, jO), 0)
2448+ let jQ = v(r)
2449+ let jR = valueOrElse(getInteger(T, jQ), 0)
2450+ let jS = (jP + jR)
2451+ let jT = ((((jJ + jK) + jL) + jM) + jN)
2452+ if ((jT > jS))
2453+ then throw((("There are only " + toString(jS)) + " free points to distribute"))
24652454 else {
2466- let jP = r(q)
2467- let T = split(valueOrElse(getString(S, jP), "0_0_0_0_0"), "_")
2468- let jQ = (jK - jO)
2469- $Tuple2([IntegerEntry(jJ, if ((0 > jQ))
2455+ let jU = s(r)
2456+ let U = split(valueOrElse(getString(T, jU), "0_0_0_0_0"), "_")
2457+ let jV = (jP - jT)
2458+ $Tuple2([IntegerEntry(jO, if ((0 > jV))
24702459 then 0
2471- else jQ), IntegerEntry(jL, if ((0 > jQ))
2472- then (jM + jQ)
2473- else jM), StringEntry(jP, makeString([toString((parseIntValue(T[h]) + jE)), toString((parseIntValue(T[i]) + jF)), toString((parseIntValue(T[j]) + jG)), toString((parseIntValue(T[k]) + jH)), toString((parseIntValue(T[l]) + jI))], "_")), ix], 0)
2460+ else jV), IntegerEntry(jQ, if ((0 > jV))
2461+ then (jR + jV)
2462+ else jR), StringEntry(jU, makeString([toString((parseIntValue(U[h]) + jJ)), toString((parseIntValue(U[i]) + jK)), toString((parseIntValue(U[j]) + jL)), toString((parseIntValue(U[k]) + jM)), toString((parseIntValue(U[l]) + jN))], "_")), iC], 0)
24742463 }
24752464 }
24762465 }
24772466
24782467
24792468
2480-@Callable(eu)
2481-func splitByGlobalWeightsREADONLY (fK) = $Tuple2(nil, da(fK))
2482-
2483-
2484-
2485-@Callable(eu)
2486-func splitByGlobalAndLocalWeightsREADONLY (jR,jS,ex) = {
2487- let eq = ew(ex)
2488- $Tuple2(nil, $Tuple2(da(jR), cL(jS, eq)))
2489- }
2490-
2491-
2492-
2493-@Callable(eu)
2494-func getBackpackREADONLY (q) = $Tuple2(nil, makeString(fc(aW(q)), ":"))
2495-
2496-
2497-
2498-@Callable(eu)
2499-func getWarehouseREADONLY (aN) = {
2500- let gZ = value(assetInfo(fromBase58String(aN)))
2501- let fw = (bZ(split(gZ.description, "_")[bO]) / bq)
2502- let fx = valueOrElse(getInteger(aG(aN)), 0)
2503- $Tuple2(nil, makeString_2C(fu(aM(aN), fw, fx), ":"))
2504- }
2505-
2506-
2507-
2508-@Callable(eu)
2509-func saveLastTx () = if (if ((eu.caller != bM))
2510- then (eu.caller != bK)
2469+@Callable(ev)
2470+func splitByGlobalWeightsREADONLY (fM) = $Tuple2(nil, dc(fM))
2471+
2472+
2473+
2474+@Callable(ev)
2475+func splitByGlobalAndLocalWeightsREADONLY (jW,jX,ey) = {
2476+ let er = ex(ey)
2477+ $Tuple2(nil, $Tuple2(dc(jW), cN(jX, er)))
2478+ }
2479+
2480+
2481+
2482+@Callable(ev)
2483+func getBackpackREADONLY (r) = $Tuple2(nil, makeString(fd(aX(r)), ":"))
2484+
2485+
2486+
2487+@Callable(ev)
2488+func getWarehouseREADONLY (aO) = {
2489+ let he = value(assetInfo(fromBase58String(aO)))
2490+ let fy = (ca(split(he.description, "_")[bP]) / br)
2491+ let fz = valueOrElse(getInteger(aH(aO)), 0)
2492+ $Tuple2(nil, makeString_2C(fw(aN(aO), fy, fz), ":"))
2493+ }
2494+
2495+
2496+
2497+@Callable(ev)
2498+func saveLastTx () = if (if ((ev.caller != bN))
2499+ then (ev.caller != bL)
25112500 else false)
25122501 then throw("Access denied")
2513- else $Tuple2([iu(eu)], 42)
2514-
2515-
2516-
2517-@Callable(eu)
2518-func updateDuckStats (q,hE) = if ((eu.caller != bK))
2502+ else $Tuple2([iz(ev)], 42)
2503+
2504+
2505+
2506+@Callable(ev)
2507+func updateDuckStats (r,hJ) = if ((ev.caller != bL))
25192508 then throw("Access denied")
2520- else hD(q, hE)
2521-
2522-
2523-
2524-@Callable(eu)
2525-func updateAccStats (b,hE) = if ((eu.caller != bK))
2509+ else hI(r, hJ)
2510+
2511+
2512+
2513+@Callable(ev)
2514+func updateAccStats (b,hJ) = if ((ev.caller != bL))
25262515 then throw("Access denied")
2527- else hJ(b, hE)
2528-
2529-
2530-
2531-@Callable(eu)
2532-func equipDuck (jT) = {
2533- let ix = iu(eu)
2534- if ((size(eu.payments) != 0))
2516+ else hO(b, hJ)
2517+
2518+
2519+
2520+@Callable(ev)
2521+func equipDuck (jY) = {
2522+ let iC = iz(ev)
2523+ if ((size(ev.payments) != 0))
25352524 then throw("No payments required")
25362525 else {
2537- let b = toString(eu.originCaller)
2538- let q = valueOrErrorMessage(getString(aV(b)), "You don't have a duck staked")
2539- let jU = v(q)
2540- let jV = split(valueOrElse(getString(jU), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2541- let fd = aW(q)
2542- let fO = fc(fd)
2543- let jW = split(jT, "_")
2544- if ((size(jW) != m))
2526+ let b = toString(ev.originCaller)
2527+ let r = valueOrErrorMessage(getString(aW(b)), "You don't have a duck staked")
2528+ let gO = w(r)
2529+ let jZ = split(valueOrElse(getString(gO), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2530+ let fe = aX(r)
2531+ let fQ = fd(fe)
2532+ let gQ = split(jY, "_")
2533+ if ((size(gQ) != m))
25452534 then throw("Wrong equipment string")
25462535 else {
2547- let dJ = R(this, q)
2548- let jX = ei(jV, dA(fO[aA]), true, dJ)
2549- let jY = ei(jW, jX, false, dJ)
2550- let jZ = dD(jY)
2551- $Tuple2([StringEntry(jU, jT), StringEntry(fd, makeString_2C([fO[ax], fO[ay], fO[az], jZ], ":")), ix], 0)
2536+ let dK = S(this, r)
2537+ let ka = ei(jZ, dz(fQ[aB]), true, dK)
2538+ let kb = ei(gQ, ka, false, dK)
2539+ let kc = dE(kb)
2540+ $Tuple2([StringEntry(gO, jY), StringEntry(fe, makeString_2C([fQ[ay], fQ[az], fQ[aA], kc], ":")), iC], 0)
25522541 }
25532542 }
25542543 }
25552544
25562545

github/deemru/w8io/169f3d6 
1637.36 ms