tx · 4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07500000 Waves

2023.07.19 23:52 [2673246] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu", "fee": 7500000, "feeAssetId": null, "timestamp": 1689800024931, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "7ZWzbyn7k6Gda7JWBAsaFrbmUCgu7wfEnuWsvH2SWU42EvKzMCceM443C8BrffEPLHbDYiZQ3mx8gbT6toNA6MD" ], "script": "base64:BgK0AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSAM4BARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AoI0GAA94cFN1Y2Nlc3NGbGlnaHQA0IYDAAx4cEZhaWxGbGlnaHQAkE4ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCWsQIACnhwTmV3U0xhbmQAgOHrFwAOeHBVcGdyYWRlSW5mcmEAoI0GAAd4cE1lcmdlAICt4gQACXhwT25ib2FyZACAreIEAAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARBzdWJ0cmFjdFByb2R1Y3RzAgRwSGFzBXBVc2VkAwkAAAIFBXBVc2VkAgAFBHBIYXMEBXBMaXN0AwkAAAIFBHBIYXMCAAUDbmlsCQC1CQIFBHBIYXMCAV8KAQRzdWJQAgNhY2MEaXRlbQQBaggFA2Fj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YW1vdW50BApwcm9kdWN0SWR4CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAQFY291bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAwMJAGYCAAAFCnByb2R1Y3RJZHgGCQBnAgUKcHJvZHVjdElkeAkAkAMBBRBwcm9kdWN0aW9uTWF0cml4CQACAQITVW5rbm93biBwcm9kdWN0IGlkeAMJAGYCAAAFBWNvdW50CQACAQIXQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUDCQAAAgUFY291bnQAAAkAlAoCBQVwTGlzdAcKAQRhZGRQAgNhY2MEaXRlbQQBaggFA2FjYwJfMQQEY3VycgMJAGYCCQCQAwEFBXBMaXN0BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcExpc3QFAWoAAAMJAQIhPQIFCnByb2R1Y3RJZHgFAWoJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEFBGN1cnIIBQNhY2MCXzMDAwkBASEBBQppc1Bvc2l0aXZlCQBmAgUFY291bnQFBGN1cnIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICCVlvdSBoYXZlIAkApAMBBQRjdXJyAgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBagITLCBidXQgdHJpZWQgdG8gdXNlIAkApAMBBQVjb3VudAQFaXNCaWcDCQEBIQEFCmlzUG9zaXRpdmUEBmNvbXBhdAkAkQMCCQC1CQIFBGl0ZW0CAV8FCXJJZHhTbG90cwMJAAACBQZjb21wYXQCAAkAAgECF0l0ZW0gY2Fubm90IGJlIGVxdWlwcGVkBAFjCQENcGFyc2VJbnRWYWx1ZQEFBmNvbXBhdAQEY1NlZwkAaQIFAWMAZAMJAQIhPQIFB3NlZ21lbnQFBGNTZWcJAAIBAhRTZWdtZW50IGluY29tcGF0aWJsZQQIY01haW5BdXgJAGkCCQBqAgUBYwBkAAoDCQECIT0CBQdtYWluQXV4BQhjTWFpbkF1eAkAAgECEVNsb3QgaW5jb21wYXRpYmxlBAljTnVtU2xvdHMJAGoCBQFjAAoDAwkBAiE9AgUEc2xvdAAACQBmAgUJY051bVNsb3RzAAEHCQACAQIeQmlnIGl0ZW1zIHNob3VsZCBvY2N1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CQIFCHRlcnJhaW5zAgFCAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBQwABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUQAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFFAAEJAMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRgABBQNuaWwBBmFkZFJlcwUKY3VycmVudFJlcw10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQDNCAIFA2FjYwkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmN1cnJlbnRSZXMFAWkFCXJlc09mVHlwZQQBcgoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGCQC5CQIFAXICAV8BCXZpcnRDbGFpbQQNdGVycmFpbkNvdW50cwlkZWx0YVRpbWUNbGFuZFNpemVJbmRleBdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwoBBWFkZGVyAgNhY2MBaQQJcmVzT2ZUeXBlCQBoAgkAaAIJAGsDBQlkZWx0YVRpbWUFF2RhaWx5QnlQaWVjZVdpdGhCb251c2VzBQlEQVlNSUxMSVMJAJEDAgUNdGVycmFpbkNvdW50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AXQCXzEBC2dldEJhY2twYWNrAQVicEtleQQBcAkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWJwS2V5AhowOjBfMF8wXzBfMF8wOjBfMF8wXzBfMF8wOgIBOgkAzAgCCQCkAwEJAQt2YWx1ZU9yRWxzZQIJALYJAQkAkQMCBQFwBQpicElkeExldmVsAAAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUBcAUJYnBJZHhQcm9kBQNuaWwBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQl2b2xQcmVmaXgEBXBhcnRzCQC1CQIFCXZvbFByZWZpeAIBXwkAaAIJAGgCBQxXSE1VTFRJUExJRVIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAQABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcGFydHMAAAEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBCWN1cnJlbnRXaAQFZ29vZHMJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QKAQlzdW1SZXNNYXQCA2FjYwRpdGVtCQBkAgUDYWNjCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0KAQdzdW1Qcm9kAgNhY2MEaXRlbQQDaWR4CAUDYWNjAl8xBARwa2dzCQBpAgkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEFBGl0ZW0FDlBST0RVQ1RQS0dTSVpFAAEFDlBST0RVQ1RQS0dTSVpFCQCUCgIJAGQCBQNpZHgAAQkAZAIIBQNhY2MCXzIJAGgCBQRwa2dzBQVNVUxUOAQId2hSZXNWb2wKAAIkbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8KAAIkcwkAkAMBBQIkbAoABSRhY2MwAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCXN1bVJlc01hdAIFAiRhCQCRAwIFAiRsBQIkaQoB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AgkApAMBBQh3aExvY2tlZAkAzAgCCQCkAwEFA29jYwkAzAgCCQCkAwEJAGUCCQBlAgUHd2hUb3RhbAUId2hMb2NrZWQFA29jYwkAzAgCCQCkAwEFB3doVG90YWwFA25pbAIBXwkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeFJlcwIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQJ3aAUId2hJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQJ3aAUId2hJZHhNYXQCCzBfMF8wXzBfMF8wCQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCBQZ3aExvZnQFA25pbAEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQljdXJyZW50V2gEC29jY3VwaWVkVm9sCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQljdXJyZW50V2gED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkCQBlAgkAZQIJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwULb2NjdXBpZWRWb2wFD2N1cnJXaExvY2tlZFZvbAEIdG9Wb2x1bWUCBmFtb3VudAdwa2dTaXplBARwa2dzAwkAZwIFBmFtb3VudAAACQBpAgkAZQIJAGQCBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkBAS0BCQBpAgkAZQIJAGQCCQEBLQEFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQBoAgUEcGtncwUFTVVMVDgBCW1vdmVTdHVmZgMKY2FyZ29QYXJ0cwljdXJyZW50V2gLY3VycmVudFBhY2sDCQECIT0CCQCQAwEFCmNhcmdvUGFydHMAAwkAAgECNGNhcmdvTGlzdFN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECHJlc1BhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAQIBXwQJcHJvZFBhcnRzAwkAAAIJAJEDAgUKY2FyZ29QYXJ0cwACAgAFA25pbAkAtQkCCQCRAwIFCmNhcmdvUGFydHMAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEC3doU3BhY2VMZWZ0CQEVZ2V0V2FyZWhvdXNlU3BhY2VMZWZ0AQUJY3VycmVudFdoBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8EDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBA5jdXJyZW50UGFja01hdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQPY3VycmVudFBhY2tQcm9kAwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgEDbXZSAgNhY2MEaXRlbQQBaQgFA2FjYwJfMQQCYW0JAQ1wYXJzZUludFZhbHVlAQUEaXRlbQQDd2hyCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJY3VycldoUmVzBQFpBANicHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQ5jdXJyZW50UGFja1JlcwUBaQMJAAACBQJhbQAACQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkAkQMCBQljdXJyV2hSZXMFAWkJAM0IAggFA2FjYwJfMwkA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AGYCCQCQAwEFD2N1cnJlbnRQYWNrUHJvZAUBaQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFD2N1cnJlbnRQYWNrUHJvZAUBaQAAAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEFA3docAkAzQgCCAUDYWNjAl8zCQCkAwEFA2JwcAgFA2FjYwJfNAMJAGYCBQJhbQAAAwkAZgIFAmFtBQNicHAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAFBGl0ZW0CGSBmcm9tIGJhY2twYWNrLCBidXQgb25seSAJAKQDAQUDYnBwAgogYXZhaWxhYmxlBAhkZWx0YVZvbAkAZQIJAQh0b1ZvbHVtZQIJAGQCBQN3aHAFAmFtBQ5QUk9EVUNUUEtHU0laRQkBCHRvVm9sdW1lAgUDd2hwBQ5QUk9EVUNUUEtHU0laRQkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZAIFA3docAUCYW0JAM0IAggFA2FjYwJfMwkApAMBCQBlAgUDYnBwBQJhbQkAZAIIBQNhY2MCXzQFCGRlbHRhVm9sAwkAZgIJAQEtAQUCYW0FA3docAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAkApAMBCQEBLQEFAmFtAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQN3aHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wEAXADCQECIT0CCQCQAwEFCXByb2RQYXJ0cwAACgACJGwFCXByb2RQYXJ0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJYKBAAABQNuaWwFA25pbAgFAW0CXzQKAQUkZjJfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBA212UAIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMl8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgNTAJAQUkZjJfMgIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIJAQUkZjJfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUABUAFgAXABgAGQAaABsAHAAdAB4AHwAgACEAIgAjACQAJQAmACcAKAApACoAKwAsAC0ALgAvADAAMQAyCQCWCgQAAAUKY3VycldoUHJvZAUPY3VycmVudFBhY2tQcm9kCAUBbQJfNAQIdm9sU2FsZG8IBQFwAl80AwkAZgIFCHZvbFNhbGRvBQt3aFNwYWNlTGVmdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIVQXR0ZW1wdCB0byBwdXQgdG90YWwgCQCkAwEFCHZvbFNhbGRvAhEgc3R1ZmYsIGJ1dCBvbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIVIHdhcmVob3VzZSBzcGFjZSBsZWZ0CQCZCgcJALkJAggFAXICXzICAV8JALkJAggFAW0CXzICAV8JALkJAggFAXACXzICAV8JALkJAggFAXICXzMCAV8JALkJAggFAW0CXzMCAV8JALkJAggFAXACXzMCAV8FCHZvbFNhbGRvARJleHBlZGl0aW9uSW50ZXJuYWwCBmNhbGxlcgR0eElkBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEBmJpZ051bQkBA2FicwEJAJ4DAQUEdHhJZAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBAdsYW5kTnVtCQCkAwEFB2ZyZWVOdW0EDGNvbnRpbmVudElkeAkAoAMBCQC7AgIFBmJpZ051bQUFRklWRVgECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCBQZiaWdOdW0FDGNvbnRpbmVudElkeAQJY29udGluZW50CQCRAwIFCmNvbnRpbmVudHMFDGNvbnRpbmVudElkeAQFaXNzdWUJAMIIBQkBB25mdE5hbWUCBQdsYW5kTnVtAgFTCQC5CQIJAMwIAgUHbGFuZE51bQkAzAgCAgFTCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEAmlkCQDYBAEFB2Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEJAMwIAgUFaXNzdWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUxhbmRUb0Fzc2V0SWQBBQdsYW5kTnVtBQJpZAkAzAgCCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUCaWQFCHVzZXJBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FCHVzZXJBZGRyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFAmlkAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQJpZAUIdXNlckFkZHIAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIAAQUHYXNzZXRJZAUDbmlsCQCUCgIFAmlkBQljb250aW5lbnQBDGZsaWdodENvbW1vbgMIdXNlckFkZHIHbWVzc2FnZQNzaWcDCQEBIQEJAMQTAwUHbWVzc2FnZQUDc2lnBQNwdWIJAAIBAhhzaWduYXR1cmUgZG9lcyBub3QgbWF0Y2gEBXBhcnRzCQC1CQIJALAJAQUHbWVzc2FnZQIBOwQJZmxpZ2h0TG9nCQC1CQIJAJEDAgUFcGFydHMAAAIBfAQCaHAJALUJAgkAkQMCBQlmbGlnaHRMb2cFCGZsSGVhbHRoAgFfBAVjdXJIUAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmhwAAAEBW5ld0hQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAQQLbmV3TG9jVHhWZXIJALUJAgkAkQMCBQVwYXJ0cwABAgE6BAtuZXdMb2NhdGlvbgkAkQMCBQtuZXdMb2NUeFZlcgAABAR0aW1lCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJZmxpZ2h0TG9nBQtmbFRpbWVzdGFtcAMDCQBmAgUEdGltZQkAZAIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBRFGSVZFTUlOVVRFU01JTExJUwYJAGYCCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBQR0aW1lCQACAQkArAICCQCsAgIJAKwCAgIcc2lnbmF0dXJlIG91dGRhdGVkOiBsb2dUaW1lPQkApAMBBQR0aW1lAgksIGJjVGltZT0JAKQDAQgFCWxhc3RCbG9jawl0aW1lc3RhbXAECXR4RnJvbU1zZwkAkQMCBQtuZXdMb2NUeFZlcgABBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAKIIAQkBEWtleUxhc3RUeElkQnlVc2VyAQUIdXNlckFkZHICAAMJAQIhPQIFBmxhc3RUeAUJdHhGcm9tTXNnCQACAQkArAICCQCsAgIJAKwCAgIeVHggaWRzIGRvbid0IG1hdGNoISBJbiBzdGF0ZTogBQZsYXN0VHgCCiwgaW4gbXNnOiAFCXR4RnJvbU1zZwQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQh1c2VyQWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAEDG9sZEZyb21TdGF0ZQkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkBAiE9AgUMb2xkRnJvbVN0YXRlBQVjdXJIUAkAAgEJAKwCAgkArAICCQCsAgICCm9sZEhlYWx0aD0JAKQDAQUMb2xkRnJvbVN0YXRlAi8gZnJvbSBzdGF0ZSBkb2VzIG5vdCBtYXRjaCBvbmUgZnJvbSBmbGlnaHQgbG9nPQkApAMBBQVjdXJIUAMJAGcCAAAFBWN1ckhQCQACAQIeWW91IGNhbid0IGZseSB3aXRoIHplcm8gaGVhbHRoBAVib251cwMJAGYCCQCQAwEFCWZsaWdodExvZwUHZmxCb251cwkAkQMCBQlmbGlnaHRMb2cFB2ZsQm9udXMCAAQIcHJvZFVzZWQDCQBmAgkAkAMBBQlmbGlnaHRMb2cFC2ZsUHJvZHNVc2VkCQCRAwIFCWZsaWdodExvZwULZmxQcm9kc1VzZWQCAAQKc2VudEFtb3VudAMDCQBmAgUFbmV3SFAAAAkAAAIFBWJvbnVzAgEkBwkBBWFzSW50AQkA/AcEBQxyZXN0Q29udHJhY3QCDXNlbmRVc2R0UHJpemUJAMwIAgUIdXNlckFkZHIFA25pbAUDbmlsAAAJAJcKBQUFbmV3SFAFC2R1Y2tBc3NldElkBQpzZW50QW1vdW50BQtuZXdMb2NhdGlvbgUIcHJvZFVzZWQBEGV4cGVkaXRpb25Db21tb24EBmNhbGxlcgR0eElkB21lc3NhZ2UDc2lnBAh1c2VyQWRkcgkApQgBBQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQgFAWYCXzIEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBZgJfMgQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMGBQVtTGlzdAUMRVhQTUFURVJJQUxTAgFfBAduZXdQcm9kCQEQc3VidHJhY3RQcm9kdWN0cwIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAgFAWYCXzUDCQBnAgAACAUBZgJfMQkAlQoDCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgAAAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6BQNuaWwCAAAABAFlCQESZXhwZWRpdGlvbkludGVybmFsAgUGY2FsbGVyBQR0eElkBAJpZAgIBQFlAl8yAl8xCQCVCgMJAM0IAgkAzQgCCQDNCAIIBQFlAl8xCQELU3RyaW5nRW50cnkCCQEPa2V5RHVja0xvY2F0aW9uAQgFAWYCXzIJALkJAgkAzAgCCAgFAWUCXzICXzIJAMwIAgIBTAkAzAgCBQJpZAUDbmlsAgFfCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoCAUBZgJfMQkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFAmlkCAUBZgJfMwEMYXBwbHlCb251c2VzAgtsYW5kQXNzZXRJZAZwaWVjZXMECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlhcnRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQAAAQEYWRkNgkAaQIFCmluZnJhTGV2ZWwABgQEYWRkNwkAaQIFCmluZnJhTGV2ZWwABwkAZAIJAGQCBQ9EQUlMWVJFU0JZUElFQ0UJAGsDBQ9EQUlMWVJFU0JZUElFQ0UJAGQCCQBkAgUKaW5mcmFMZXZlbAUEYWRkNgkAaAIAAgUEYWRkNwAFCQBrAwUPREFJTFlSRVNCWVBJRUNFBQlhcnRQaWVjZXMJAGgCBQZwaWVjZXMABQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBGFkZHIJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4EDSR0MDI4NTYwMjkwOTkDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlAoCBQ1sYW5kQXNzZXRJZEluCQELdmFsdWVPckVsc2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMCQCUCgIJAJEDAgUDbG9jBQhsb2NJZHhJZAULZHVja0Fzc2V0SWQEC2xhbmRBc3NldElkCAUNJHQwMjg1NjAyOTA5OQJfMQQGZHVja0lkCAUNJHQwMjg1NjAyOTA5OQJfMgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBUxhbmQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwkAlgoEBQZkdWNrSWQFC2xhbmRBc3NldElkBQFkBQlzYXZlZFRpbWUBEGNsYWltUmVzSW50ZXJuYWwEBGFkZHIGYW1vdW50CWNsYWltTW9kZQ1sYW5kQXNzZXRJZEluAwkAZgIAAAUGYW1vdW50CQACAQIPTmVnYXRpdmUgYW1vdW50BAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQljbGFpbU1vZGUFDWxhbmRBc3NldElkSW4ECGxhbmRTaXplCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAIBQFjAl80AwkAZgIAAAUJZGVsdGFUaW1lCQACAQkArAICCQCsAgIJAKwCAgImU2F2ZWQgdGltZXN0YW1wIGlzIGluIGZ1dHVyZSwgc2F2ZWQgPSAJAKQDAQgFAWMCXzQCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQxhcHBseUJvbnVzZXMCCAUBYwJfMgUGcGllY2VzBAhhdmFpbFJlcwkAawMFCWRlbHRhVGltZQkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwUJREFZTUlMTElTAwkAZgIFBmFtb3VudAUIYXZhaWxSZXMJAAIBCQCsAgIJAKwCAgkArAICAiJOb3QgZW5vdWdoIHJlc291cmNlcywgYXZhaWxhYmxlID0gCQCkAwEFCGF2YWlsUmVzAg4sIHJlcXVlc3RlZCA9IAkApAMBBQZhbW91bnQEDG5ld0RlbHRhVGltZQkAawMJAGUCBQhhdmFpbFJlcwUGYW1vdW50BQlEQVlNSUxMSVMJAGgCBRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBQZwaWVjZXMEDG5ld1RpbWVzdGFtcAkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQxuZXdEZWx0YVRpbWUECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUECnJlc1RvQ2xhaW0JAQl2aXJ0Q2xhaW0EBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBCAUBYwJfMgQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yAAAECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQLd2hTcGFjZUxlZnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlAwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQBmAgUGYW1vdW50BQt3aFNwYWNlTGVmdAcJAAIBCQCsAgIJAKwCAgIFT25seSAJAKQDAQULd2hTcGFjZUxlZnQCGCBzcGFjZSBsZWZ0IGluIHdhcmVob3VzZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEDmN1cnJlbnRQYWNrUmVzCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAxjdXJyZW50V2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTQ3MzMyMzQ0AwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAJYKBAkBBmFkZFJlcwUFDGN1cnJlbnRXaFJlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUKcmVzVG9DbGFpbQJfMgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUKcmVzVG9DbGFpbQJfMgMJAAACBQljbGFpbU1vZGUFDWNsYWltTW9kZUR1Y2sJAJYKBAkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQEGYWRkUmVzBQUOY3VycmVudFBhY2tSZXMFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBAVkaXN0cgkBDWRpc3RyaWJ1dGVSZXMEBQxjdXJyZW50V2hSZXMFDmN1cnJlbnRQYWNrUmVzBQpyZXNUb0NsYWltBQt3aFNwYWNlTGVmdAQEd2hBbQkAlwMBCQDMCAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCQDMCAIIBQpyZXNUb0NsYWltAl8yBQNuaWwJAJYKBAgFBWRpc3RyAl8xCAUFZGlzdHICXzIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQFBHdoQW0JAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUEd2hBbQQFd2hSZXMIBQ0kdDAzMTQ3MzMyMzQ0Al8xBAVicFJlcwgFDSR0MDMxNDczMzIzNDQCXzIEBWxvZnRPCAUNJHQwMzE0NzMzMjM0NAJfMwQFbG9mdEYIBQ0kdDAzMTQ3MzMyMzQ0Al80CQCXCgUJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQgFAWMCXzIFDG5ld1RpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYCAUBYwJfMgUEYWRkcgUMbmV3VGltZXN0YW1wBQNuaWwFBWJwS2V5CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgUFYnBSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwFBXdoS2V5CQDMCAIJAJEDAgUJY3VycmVudFdoBQt3aElkeExldmVscwkAzAgCBQV3aFJlcwkAzAgCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkAkQMCBQRsb2Z0BQl2b2xMb2NrZWQJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAJEDAgUEbG9mdAUIdm9sVG90YWwFA25pbAIBXwUDbmlsAQhjbGFpbUFsbAQEYWRkcgtsYW5kQXNzZXRJZAZwaWVjZXMJY2xhaW1Nb2RlBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJAQV2YWx1ZQEJAJ8IAQUHdGltZUtleQQIYXZhaWxSZXMJAGgCCQBrAwkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUJAQxhcHBseUJvbnVzZXMCBQtsYW5kQXNzZXRJZAUGcGllY2VzBQlEQVlNSUxMSVMFBnBpZWNlcwkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQhhdmFpbFJlcwUJY2xhaW1Nb2RlBQtsYW5kQXNzZXRJZAENdXBJbmZyYUNvbW1vbgQMc2hvdWxkVXNlTWF0BmNhbGxlcg1wYXltZW50QW1vdW50C2xhbmRBc3NldElkBARhZGRyCQClCAEFBmNhbGxlcgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawULbGFuZEFzc2V0SWQEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBAhpbmZyYUtleQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBCAUBYwJfMgQIY3VyTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUIaW5mcmFLZXkAAAMJAGcCBQhjdXJMZXZlbAADCQACAQImQ3VycmVudGx5IG1heCBpbmZyYXN0cnVjdHVyZSBsZXZlbCA9IDMECG5ld0xldmVsCQBkAgUIY3VyTGV2ZWwAAQQEY29zdAkAawMFFUluZnJhVXBncmFkZUNvc3RTVXNkdAkAaAIFBnBpZWNlcwUIbmV3TGV2ZWwFBVNTSVpFAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBCAUBYwJfMQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAVtTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQHbWF0VXNlZAkAawMFEUluZnJhVXBncmFkZUNvc3RTCQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDBQxzaG91bGRVc2VNYXQFBW1MaXN0BQdtYXRVc2VkAgFfBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcggFAWMCXzIFBnBpZWNlcwUTY2xhaW1Nb2RlV2hUaGVuRHVjawQGd2hEYXRhCAULY2xhaW1SZXN1bHQCXzUEBm9sZFZvbAkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzBApuZXdWb2xEYXRhCQC5CQIJAMwIAgkAkQMCCQC1CQIJAJEDAgUGd2hEYXRhBQt3aElkeExldmVscwIBXwAACQDMCAIJAKQDAQUIbmV3TGV2ZWwFA25pbAIBXwQGbmV3Vm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBBQpuZXdWb2xEYXRhBARsb2Z0CQC1CQIJAJEDAgUGd2hEYXRhBQl3aElkeExPRlQCAV8ECm5ld0xvZnRTdHIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCQDMCAIJAKQDAQkAZQIJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUHdm9sRnJlZQUGbmV3Vm9sBQZvbGRWb2wJAMwIAgkApAMBBQZuZXdWb2wFA25pbAIBXwkAlQoDCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCGluZnJhS2V5BQhuZXdMZXZlbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIIBQFjAl8yBQRhZGRyBQhuZXdMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCCAULY2xhaW1SZXN1bHQCXzMFCGJwSWR4UmVzCQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAgkAzAgCBQpuZXdWb2xEYXRhCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeFJlcwkAzAgCCQCRAwIFBndoRGF0YQUId2hJZHhNYXQJAMwIAgkAkQMCBQZ3aERhdGEFCXdoSWR4UHJvZAkAzAgCBQpuZXdMb2Z0U3RyBQNuaWwCAToFA25pbAgFC2NsYWltUmVzdWx0Al8xBQhuZXdMZXZlbAUHbWF0VXNlZAEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCC2R1Y2tBc3NldElkB2RlbHRhWFADCQEBIQEFD0tTQUxMT1dYUExFVkVMUwkAlAoCBQNuaWwAAAQGbHZsS2V5CQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQEBXhwS2V5CQEJa2V5RHVja1hQAQULZHVja0Fzc2V0SWQEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUGbHZsS2V5CQCRAwIFCWx2bFBvaW50cwAACQDMCAIJAQxJbnRlZ2VyRW50cnkCBQV4cEtleQUFbmV3WFAJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleVBvaW50cwkAZAIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5UG9pbnRzAAAJAJEDAgUJbHZsUG9pbnRzAAEFA25pbAUFbmV3WFABFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBGFkZHIHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlVc2VyTGV2ZWwBBQRhZGRyBAV4cEtleQkBCWtleVVzZXJYUAEFBGFkZHIEAnhwCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUFeHBLZXkAAAQFbmV3WFAJAGQCBQJ4cAUHZGVsdGFYUAQJbHZsUG9pbnRzCQEHbGV2ZWxVcAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQZsdmxLZXkAAAUFbmV3WFAECWtleVBvaW50cwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAESYWN0aXZhdGVPbmJvYXJkQXJ0AQRhZGRyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUEYWRkcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDCQEBIQEJAQlpc0RlZmluZWQBBQVyZWZCeQkAAgECKVlvdSBhcmUgbm90IGVsaWdpYmxlIGZvciBPTkJPQVJEIGFydGlmYWN0BAZhcnRLZXkJARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQUEYWRkcgQHYXJ0RHVjawkAoggBBQZhcnRLZXkDCQEJaXNEZWZpbmVkAQUHYXJ0RHVjawkAAgEJAKwCAgIvWW91IGFscmVhZHkgdXNlZCB5b3VyIE9OQk9BUkQgYXJ0aWZhY3Qgb24gZHVjayAJAQV2YWx1ZQEFB2FydER1Y2sEEGR1Y2tBY3RpdmF0b3JLZXkJARxrZXlPbmJvYXJkQXJ0QWN0aXZhdGVkT25EdWNrAQULZHVja0Fzc2V0SWQEDWR1Y2tBY3RpdmF0b3IJAKIIAQUQZHVja0FjdGl2YXRvcktleQMJAQlpc0RlZmluZWQBBQ1kdWNrQWN0aXZhdG9yCQACAQkArAICCQCsAgIJAKwCAgIJVGhlIGR1Y2sgBQtkdWNrQXNzZXRJZAI0IGFscmVhZHkgZ290IHBvaW50cyBmcm9tIE9OQk9BUkQgYXJ0aWZhY3QgZnJvbSB1c2VyIAkBBXZhbHVlAQUNZHVja0FjdGl2YXRvcgkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmFydEtleQULZHVja0Fzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUQZHVja0FjdGl2YXRvcktleQUEYWRkcgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCXhwT25ib2FyZAJfMQESYWN0aXZhdGVQcmVzYWxlQXJ0AgRhZGRyDWxhbmRBc3NldElkSW4EAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFE2NsYWltTW9kZVdoVGhlbkR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEDWFjdGl2YXRpb25LZXkJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAwkAZgIJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUNYWN0aXZhdGlvbktleQAAAAAJAAIBAiVQcmVzYWxlIGFydGlmYWN0IGlzIGFscmVhZHkgYWN0aXZhdGVkAwkAZgIJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUBYwJfMwUKcmVjTGFuZE51bQUPUFJFU0FMRU5VTUxBTkRTCQACAQkArAICCQCsAgIJAKwCAgUKTEFORFBSRUZJWAIBIAULbGFuZEFzc2V0SWQCJSBpcyBub3QgZWxpZ2libGUgZm9yIHByZXNhbGUgYXJ0aWZhY3QEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQtjbGFpbVJlc3VsdAJfMQkBDEludGVnZXJFbnRyeQIFDWFjdGl2YXRpb25LZXkFBnBpZWNlcwkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFBGFkZHIFBnBpZWNlcwkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al80CQC5CQIIBQtjbGFpbVJlc3VsdAJfNQIBOgENbWVyZ2VJbnRlcm5hbAcLbmV3TGFuZFNpemUIbmV3TGV2ZWwHZm9ybXVsYQRhZGRyDGxhbmRBc3NldElkcwR0eElkB25lZWRNYXQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAoBCmNoZWNrTWVyZ2UCA2FjYwtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAQJc2F2ZWRUaW1lCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ8IAQUHdGltZUtleQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBAljb250aW5lbnQJAJEDAgUBZAUMcmVjQ29udGluZW50AwMJAQIhPQIIBQNhY2MCXzMCAAkBAiE9AggFA2FjYwJfMwUJY29udGluZW50BwkAAgECLkxhbmRzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBjb250aW5lbnQgdG8gbWVyZ2UECGxhbmRTaXplCQCRAwIFAWQFC3JlY0xhbmRTaXplBAdzaXplc0luCAUDYWNjAl8xBAFpCQETdmFsdWVPckVycm9yTWVzc2FnZQIJALMJAgUHc2l6ZXNJbgUIbGFuZFNpemUCJ1lvdSBoYXZlbid0IHBhc3NlZCBhbGwgdGhlIGxhbmRzIG5lZWRlZAQIc2l6ZXNPdXQJAKwCAgkArwICBQdzaXplc0luBQFpCQCwAgIFB3NpemVzSW4JAGQCBQFpAAEEBnBpZWNlcwkBD251bVBpZWNlc0J5U2l6ZQEFCGxhbmRTaXplBARhcnRzCQBkAggFA2FjYwJfMgkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQIcmVxTGV2ZWwEByRtYXRjaDAFCGxhbmRTaXplAwkAAAICAVMFByRtYXRjaDAAAwMJAAACAgFNBQckbWF0Y2gwAAQDCQAAAgIBTAUHJG1hdGNoMAAFAwkAAAICAlhMBQckbWF0Y2gwAAYJAAIBAhpPbmx5IFMsIE0sIEwsIFhMIGNhbiBtZXJnZQMJAQIhPQIFCmluZnJhTGV2ZWwFCHJlcUxldmVsCQACAQIiQWxsIGxhbmRzIHNob3VsZCBiZSBtYXhlZCB0byBtZXJnZQQHbGFuZE51bQkAkQMCBQFkBQpyZWNMYW5kTnVtBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAgUBZAULcmVjVGVycmFpbnMECWRlbHRhVGltZQkAZQIIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQlzYXZlZFRpbWUDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBBQlzYXZlZFRpbWUCDCwgY3VycmVudCA9IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMECWxhbmRJbmRleAkAaQIFBnBpZWNlcwUFU1NJWkUEBWJwUmVzCQEGYWRkUmVzBQkAtQkCCAUDYWNjAl80AgFfBQ10ZXJyYWluQ291bnRzBQlkZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQQFcHJvcHMJARl1cGRhdGVQcm9wb3J0aW9uc0ludGVybmFsBAkAtQkCCAUDYWNjAl82AgFfBQ10ZXJyYWluQ291bnRzBQlsYW5kSW5kZXgA////////////AQQFbGFuZHMIBQNhY2MCXzcEA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQJY3VzdG9tS2V5CQEaa2V5TGFuZEFzc2V0SWRUb0N1c3RvbU5hbWUBBQtsYW5kQXNzZXRJZAQKY3VzdG9tTmFtZQkBC3ZhbHVlT3JFbHNlAgkAoggBBQljdXN0b21LZXkCAAkAmgoIBQhzaXplc091dAUEYXJ0cwUJY29udGluZW50BQVicFJlcwkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUDYWNjAl81CQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0JAQtEZWxldGVFbnRyeQEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAkBC0RlbGV0ZUVudHJ5AQkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgkBC0RlbGV0ZUVudHJ5AQkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBEmtleVdhcmVob3VzZUJ5TGFuZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBBQljdXN0b21LZXkJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUJAQRCdXJuAgkA2QQBBQtsYW5kQXNzZXRJZAABBQVwcm9wcwkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4CQBkAggFA2FjYwJfOAUGcGllY2VzBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHcHJvcFN0cgkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgswXzBfMF8wXzBfMAQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBAhsYW5kc1N0cgkAoggBBQhsYW5kc0tleQQHbGFuZHNJbgMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsBAFyCgACJGwFDGxhbmRBc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJoKCAUHZm9ybXVsYQAAAgAJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzBQNuaWwFB3Byb3BTdHIFB2xhbmRzSW4AAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKY2hlY2tNZXJnZQIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUECWNvbnRpbmVudAgFAXICXzMEDGNvbnRpbmVudElkeAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDPCAIFCmNvbnRpbmVudHMFCWNvbnRpbmVudAkArAICAhNVbmtub3duIGNvbnRpbmVudDogBQljb250aW5lbnQECHRlcnJhaW5zCQELZ2VuVGVycmFpbnMCCQEDYWJzAQkAngMBBQR0eElkBQxjb250aW5lbnRJZHgEB2ZyZWVOdW0JAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQ9QUkVTQUxFTlVNTEFORFMAAQQKbmV3TGFuZE51bQkApAMBBQdmcmVlTnVtBAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFCm5ld0xhbmROdW0FC25ld0xhbmRTaXplCQC5CQIJAMwIAgUKbmV3TGFuZE51bQkAzAgCBQtuZXdMYW5kU2l6ZQkAzAgCBQh0ZXJyYWlucwkAzAgCBQljb250aW5lbnQFA25pbAIBXwABAAAHBAdhc3NldElkCQC4CAEFBWlzc3VlBA5uZXdMYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwkAZgIFB25lZWRNYXQAAAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwUHbmVlZE1hdAIBXwQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCAUBcgJfNQMJAGYCCQCQAwEIBQFyAl83AAAJAQtTdHJpbmdFbnRyeQIFCGxhbmRzS2V5CQC7CQIIBQFyAl83AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQMJAGYCCAUBcgJfOAUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMIBQFyAl84CQEMSW50ZWdlckVudHJ5AgkBEmtleU5leHRGcmVlTGFuZE51bQAJAGQCBQdmcmVlTnVtAAEFBWlzc3VlCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFCm5ld0xhbmROdW0FDm5ld0xhbmRBc3NldElkCQELU3RyaW5nRW50cnkCCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUObmV3TGFuZEFzc2V0SWQFBGFkZHIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFCm5ld0xhbmROdW0FBGFkZHIJAQxJbnRlZ2VyRW50cnkCCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQ5uZXdMYW5kQXNzZXRJZAgFAXICXzIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkBQRhZGRyCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUObmV3TGFuZEFzc2V0SWQFCG5ld0xldmVsCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFDm5ld0xhbmRBc3NldElkBQRhZGRyBQhuZXdMZXZlbAkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQFyAl80CQDMCAIFBm5ld01hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAgFAXICXzYJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAkAuQkCCQDMCAIFCWNvbnRpbmVudAkAzAgCAgFMCQDMCAIFDm5ld0xhbmRBc3NldElkBQNuaWwCAV8JAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBGFkZHIAAQUHYXNzZXRJZAUObmV3TGFuZEFzc2V0SWQBA3MybQMEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAkBDW1lcmdlSW50ZXJuYWwHAgFNAAMCBFNTU1MFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAAAAQNtMmwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQABAMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAUwABAIDU01NBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAEAQRsMnhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0AC8DAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgJYTAAFAgVTU1NNTAUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkCQBoAgURSW5mcmFVcGdyYWRlQ29zdFMALwEGeGwyeHhsBQRhZGRyDGxhbmRBc3NldElkcwR0eElkDHNob3VsZFVzZU1hdA1wYXltZW50QW1vdW50BARjb3N0CQBoAgUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0ADYDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAkBDW1lcmdlSW50ZXJuYWwHAgNYWEwABgIDTFhMBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwA2AQttZXJnZUNvbW1vbgUMc2hvdWxkVXNlTWF0BGFkZHINcGF5bWVudEFtb3VudAxsYW5kQXNzZXRJZHMEdHhJZAQLbWVyZ2VSZXN1bHQEByRtYXRjaDAJAJADAQUMbGFuZEFzc2V0SWRzAwkAAAIABAUHJG1hdGNoMAkBA3MybQMFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAMJAAACAAMFByRtYXRjaDAJAQNtMmwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAUFByRtYXRjaDAJAQRsMnhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQDCQAAAgACBQckbWF0Y2gwCQEGeGwyeHhsBQUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkBQxzaG91bGRVc2VNYXQFDXBheW1lbnRBbW91bnQJAAIBAg1Vbmtub3duIG1lcmdlBQttZXJnZVJlc3VsdAEGcHJvbG9nAQFpAwMJAQIhPQIIBQFpDG9yaWdpbkNhbGxlcgUMcmVzdENvbnRyYWN0CQELdmFsdWVPckVsc2UCCQCgCAEJAQprZXlCbG9ja2VkAAcHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQkBC1N0cmluZ0VudHJ5AgkBEWtleUxhc3RUeElkQnlVc2VyAQkApQgBCAUBaQxvcmlnaW5DYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZCMBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBCnNldEJsb2NrZWQBCWlzQmxvY2tlZAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQxCb29sZWFuRW50cnkCCQEKa2V5QmxvY2tlZAAFCWlzQmxvY2tlZAUDbmlsAWkBCXN0YWtlTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKTEFORFBSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwkBAiE9AggFBWFzc2V0Bmlzc3VlcgUEdGhpcwkAAgECF1Vua25vd24gaXNzdWVyIG9mIHRva2VuAwkBASEBCQEIY29udGFpbnMCCAUFYXNzZXQEbmFtZQUKTEFORFBSRUZJWAkAAgEJAKwCAgkArAICAglPbmx5IE5GVCAFCkxBTkRQUkVGSVgCFCB0b2tlbnMgYXJlIGFjY2VwdGVkBAtsYW5kTnVtU2l6ZQkAsAICCAUFYXNzZXQEbmFtZQAEBAdsYW5kTnVtAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCA1hYTAkAswICBQtsYW5kTnVtU2l6ZQADAwkBCGNvbnRhaW5zAgULbGFuZE51bVNpemUCAlhMCQCzAgIFC2xhbmROdW1TaXplAAIJALMCAgULbGFuZE51bVNpemUAAQMJAQEhAQkBCWlzRGVmaW5lZAEJALYJAQUHbGFuZE51bQkAAgEJAKwCAgIeQ2Fubm90IHBhcnNlIGxhbmQgbnVtYmVyIGZyb20gCAUFYXNzZXQEbmFtZQQLbGFuZEFzc2V0SWQJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCEiBpcyBhbHJlYWR5IHN0YWtlZAQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCBQFkBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAAEECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBWxhbmRzBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIiWW91ciBzdGFrZWQgbGFuZHMgYWxyZWFkeSBjb250YWluIAULbGFuZEFzc2V0SWQECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUHYWRkcmVzcwQJb2xkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQdhZGRyZXNzBQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkAzQgCBQVsYW5kcwULbGFuZEFzc2V0SWQCAV8JAMwIAgkBDEludGVnZXJFbnRyeQIFCXBpZWNlc0tleQkAZAIFCW9sZFBpZWNlcwUGcGllY2VzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtBQdhZGRyZXNzCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQdhZGRyZXNzBQlhcnRQaWVjZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAR5rZXlJbmZyYUxldmVsQnlBc3NldElkQW5kT3duZXICBQtsYW5kQXNzZXRJZAUHYWRkcmVzcwUKaW5mcmFMZXZlbAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBC3Vuc3Rha2VMYW5kAQ1sYW5kQXNzZXRJZEluBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBQ1jbGFpbU1vZGVEdWNrBQ1sYW5kQXNzZXRJZEluBAtsYW5kQXNzZXRJZAgFAWMCXzIECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUEYWRkcgQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIIBQFjAl8zBQtyZWNUZXJyYWlucwQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUEBXByb3BzCQERdXBkYXRlUHJvcG9ydGlvbnMDBQ10ZXJyYWluQ291bnRzCQBpAgUGcGllY2VzBQVTU0laRQD///////////8BBAtjbGFpbVJlc3VsdAkBCGNsYWltQWxsBAUEYWRkcgULbGFuZEFzc2V0SWQFBnBpZWNlcwUNY2xhaW1Nb2RlRHVjawQFbGFuZHMJAL0JAgkBC3ZhbHVlT3JFbHNlAgkAoggBBQhsYW5kc0tleQIAAgFfBANpZHgJAM8IAgUFbGFuZHMFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQUDaWR4CQACAQkArAICAiBZb3VyIHN0YWtlZCBsYW5kcyBkb24ndCBjb250YWluIAULbGFuZEFzc2V0SWQEA25vdwgFCWxhc3RCbG9jawl0aW1lc3RhbXAEDmdvdlJlbGVhc2VUaW1lCQELdmFsdWVPckVsc2UCCQCaCAIFC2dvdkNvbnRyYWN0CQEVa2V5VXNlckd3bFJlbGVhc2VUaW1lAQUEYWRkcgAAAwkAZwIFDmdvdlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICOVlvdXIgZ1dMIGFyZSB0YWtpbmcgcGFydCBpbiB2b3RpbmcsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5nb3ZSZWxlYXNlVGltZQQOYXJiUmVsZWFzZVRpbWUJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFC3dsZ0NvbnRyYWN0CQEUa2V5TGFzdEFyYlRpbWVCeVVzZXIBBQRhZGRyAAAFDmFyYml0cmFnZURlbGF5AwkAZgIFDmFyYlJlbGVhc2VUaW1lBQNub3cJAAIBCQCsAgICP1lvdXIgc3Rha2VkIGxhbmRzIHRvb2sgcGFydCBpbiBhcmJpdHJhZ2UsIGNhbm5vdCB1bnN0YWtlIHVudGlsIAkApAMBBQ5hcmJSZWxlYXNlVGltZQQJcGllY2VzS2V5CQEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEFBGFkZHIEDHN0YWtlZFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlwaWVjZXNLZXkAAAQJbmV3UGllY2VzAwkAZgIFBnBpZWNlcwUMc3Rha2VkUGllY2VzAAAJAGUCBQxzdGFrZWRQaWVjZXMFBnBpZWNlcwQJd2xnUmVzdWx0CQEFYXNJbnQBCQD8BwQFC3dsZ0NvbnRyYWN0AhJvblN0YWtlVW5zdGFrZUxhbmQJAMwIAgUEYWRkcgUDbmlsBQNuaWwJAJQKAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQkA2QQBBQtsYW5kQXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleVJlc1Byb3BvcnRpb25zAAUFcHJvcHMJAMwIAgkBC1N0cmluZ0VudHJ5AggFC2NsYWltUmVzdWx0Al8yCQC5CQIIBQtjbGFpbVJlc3VsdAJfMwIBOgkAzAgCAwkAZgIJAJADAQUFbGFuZHMAAQkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAgkA0QgCBQVsYW5kcwkBBXZhbHVlAQUDaWR4AgFfCQELRGVsZXRlRW50cnkBBQhsYW5kc0tleQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5BQluZXdQaWVjZXMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwFCXdsZ1Jlc3VsdAFpAQlzdGFrZUR1Y2sABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAEB2Fzc2V0SWQJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIDCQECIT0CCAUDcG10BmFtb3VudAABCQACAQkArAICCQCsAgICBE5GVCAFCkRVQ0tQUkVGSVgCJCB0b2tlbiBzaG91bGQgYmUgYXR0YWNoZWQgYXMgcGF5bWVudAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAMDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQ1pbmN1YmF0b3JBZGRyCQECIT0CCAUFYXNzZXQGaXNzdWVyBQticmVlZGVyQWRkcgcJAAIBCQCsAgIJAKwCAgISVW5rbm93biBpc3N1ZXIgb2YgBQpEVUNLUFJFRklYAgYgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpEVUNLUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKRFVDS1BSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQECmFzc2V0SWRTdHIJANgEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQphc3NldElkU3RyAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkAwkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgIdWW91IGFscmVhZHkgc3Rha2VkIG9uZSBkdWNrOiAIBQVhc3NldARuYW1lBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyBAhsb2NhdGlvbgkAoggBBQZsb2NLZXkEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQphc3NldElkU3RyBAhiYWNrcGFjawkAoggBBQVicEtleQQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFCmFzc2V0SWRTdHIEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQUKYXNzZXRJZFN0cgAABAljdXJIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQd0aW1lS2V5CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYCQDYBAEFB2Fzc2V0SWQFB2FkZHJlc3MIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQtTdHJpbmdFbnRyeQIJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgUHYWRkcmVzcwkAzAgCCQELU3RyaW5nRW50cnkCCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzBQphc3NldElkU3RyBQNuaWwDCQEJaXNEZWZpbmVkAQUIbG9jYXRpb24FA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBmxvY0tleQUPREVGQVVMVExPQ0FUSU9OBQNuaWwDCQEJaXNEZWZpbmVkAQUIYmFja3BhY2sFA25pbAkAzQgCCQDNCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6BQNuaWwJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCWN1ckhlYWx0aAUMcHJvbG9nQWN0aW9uAWkBC3Vuc3Rha2VEdWNrAQphc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEB2Fzc2V0SWQJANkEAQUKYXNzZXRJZFN0cgQHYWRkcmVzcwkApQgBCAUBaQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQkA2AQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAMJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAAgEJAKwCAgkArAICAglUaGUgZHVjayAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEJANgEAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUHYWRkcmVzcwkAAgECF1N0YWtlZCBORlQgaXMgbm90IHlvdXJzBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAEBmhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFBW1heEhQBQZoZWFsdGgJAAIBCQCsAgIJAKwCAgIZUGxlYXNlIGhlYWwgeW91ciBkdWNrIHRvIAkApAMBBQVtYXhIUAITaHAgYmVmb3JlIHVuc3Rha2luZwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIAAQUHYXNzZXRJZAkAzAgCCQELRGVsZXRlRW50cnkBBQd0aW1lS2V5CQDMCAIJAQtEZWxldGVFbnRyeQEFCWtleUhlYWx0aAkAzAgCCQELRGVsZXRlRW50cnkBCQEPa2V5RHVja0xvY2F0aW9uAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEQa2V5RHVja0lkVG9Pd25lcgEFCmFzc2V0SWRTdHIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpEVUNLUFJFRklYBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQEIY2xhaW1SZXMCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAUNY2xhaW1Nb2RlRHVjawUObGFuZEFzc2V0SWRTdHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfMwUIYnBJZHhSZXMBaQEMY2xhaW1SZXNUb1dIAgZhbW91bnQObGFuZEFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEBnJlc3VsdAkBEGNsYWltUmVzSW50ZXJuYWwEBQRhZGRyBQZhbW91bnQFC2NsYWltTW9kZVdoBQ5sYW5kQXNzZXRJZFN0cgkAlAoCCQDNCAIJAM0IAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIJAGsDBQd4cENsYWltBQZhbW91bnQFBU1VTFQ4Al8xCQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al8yCQC5CQIIBQZyZXN1bHQCXzMCAToJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzQJALkJAggFBnJlc3VsdAJfNQIBOgUMcHJvbG9nQWN0aW9uCQCRAwIIBQZyZXN1bHQCXzUFCHdoSWR4UmVzAWkBBmZsaWdodAIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQIdXNlckFkZHIJAKUIAQgFAWkGY2FsbGVyBAFmCQEMZmxpZ2h0Q29tbW9uAwUIdXNlckFkZHIFB21lc3NhZ2UFA3NpZwQLZHVja0Fzc2V0SWQIBQFmAl8yBAZsb2NLZXkJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04DCQAAAggFAWYCXzQFC2N1ckxvY2F0aW9uCQACAQIiWW91IGNhbid0IGZseSB0byB0aGUgc2FtZSBsb2NhdGlvbgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQkAlAoCCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5AwkAZgIIBQFmAl8xAAAIBQFmAl80BQtjdXJMb2NhdGlvbgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgUHbmV3UHJvZAUDbmlsAgE6CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkCAUBZgJfMQkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkAwkAZgIIBQFmAl8xAAAFD3hwU3VjY2Vzc0ZsaWdodAUMeHBGYWlsRmxpZ2h0Al8xCAUBZgJfMwFpAQRoZWFsAwpxdWFudGl0eUwxCnF1YW50aXR5TDIKcXVhbnRpdHlMMwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMDAwkAZgIAAAUKcXVhbnRpdHlMMQYJAGYCAAAFCnF1YW50aXR5TDIGCQBmAgAABQpxdWFudGl0eUwzCQACAQIbUXVhbnRpdHkgY2Fubm90IGJlIG5lZ2F0aXZlBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBANxdHMJAMwIAgUKcXVhbnRpdHlMMQkAzAgCBQpxdWFudGl0eUwyCQDMCAIFCnF1YW50aXR5TDMFA25pbAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZwIFCW9sZEhlYWx0aAUFbWF4SFAJAAIBCQCsAgIJAKwCAgIPSFAgc2hvdWxkIGJlIDwgCQCkAwEFBW1heEhQAgggdG8gaGVhbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfCgELaXRlcmF0ZVByb2QCA2FjYwtpZ25vcmVkSXRlbQQBbggFA2FjYwJfMgQBeAMJAGYCCQCQAwEFCHByb2RMaXN0BQFuCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QFAW4AAAMJAGYCAAMFAW4EAXEJAJEDAgUDcXRzBQFuAwkAZgIFAXEFAXgJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQF4AgQgb2YgCQCRAwIFCXByb2RUeXBlcwUBbgkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQkAZQIFAXgFAXEJAGQCBQFuAAEJAGQCCAUDYWNjAl8zCQBoAgkAkQMCBQhtZWRLaXRIcAUBbgUBcQkAlQoDCQDNCAIIBQNhY2MCXzEJAKQDAQUBeAkAZAIFAW4AAQgFA2FjYwJfMwQGcmVzdWx0CgACJGwFEHByb2R1Y3Rpb25NYXRyaXgKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBC2l0ZXJhdGVQcm9kAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIECW5ld0hlYWx0aAkAlwMBCQDMCAIFBW1heEhQCQDMCAIJAGQCBQlvbGRIZWFsdGgIBQZyZXN1bHQCXzMFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQC5CQIIBQZyZXN1bHQCXzECAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBoAgUGeHBIZWFsCQBkAgkAZAIFCnF1YW50aXR5TDEFCnF1YW50aXR5TDIFCnF1YW50aXR5TDMCXzEFCW5ld0hlYWx0aAFpAQZoZWFsRVMABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQtkdWNrQXNzZXRJZAQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAAABAlvbGRIZWFsdGgJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJa2V5SGVhbHRoBQVtYXhIUAMJAGYCBQlvbGRIZWFsdGgAAAkAAgECKEhQIHNob3VsZCBiZSAwIHRvIGNhbGwgRW1lcmdlbmN5IFNlcnZpY2UEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNbWVkS2l0QW1vdW50MQMJAGYCCQCQAwEFCHByb2RMaXN0AAAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAAAAAAEDW1lZEtpdEFtb3VudDIDCQBmAgkAkAMBBQhwcm9kTGlzdAABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAQAABA1tZWRLaXRBbW91bnQzAwkAZgIJAJADAQUIcHJvZExpc3QAAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAIAAAMDAwkAZgIFDW1lZEtpdEFtb3VudDEAAAYJAGYCBQ1tZWRLaXRBbW91bnQyAAAGCQBmAgUNbWVkS2l0QW1vdW50MwAACQACAQIfWW91IGhhdmUgdG8gdXNlIG93biBNZWRpY2FsIEtpdAQIZXhpc3RTdHIJAJ0IAgUPZWNvbm9teUNvbnRyYWN0CQEOa2V5RXNXYXJlaG91c2UABAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALUJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAQLZXhpc3RBbW91bnQDCQBmAgkAkAMBBQxleGlzdEFtb3VudHMAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDGV4aXN0QW1vdW50cwAAAAADCQBnAgAABQtleGlzdEFtb3VudAkAAgECOVRoZXJlIGFyZSBubyBNZWRpY2FsIEtpdHMgTDEgYXQgRW1lcmdlbmN5IFNlcnZpY2Ugc3RvcmFnZQQJbmV3SGVhbHRoCQBkAgUJb2xkSGVhbHRoCQCRAwIFCG1lZEtpdEhwAAAEBW5ld0VTCQC5CQIJAMwIAgkApAMBCQBlAgULZXhpc3RBbW91bnQAAQkA0QgCBQxleGlzdEFtb3VudHMAAAIBXwQGcmVjaXBlCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAAAAgFfBAh0b3RhbE1hdAkBEmdldFJlY2lwZU1hdGVyaWFscwEFBnJlY2lwZQQJc2VsbFByaWNlCQBrAwkAaAIFCHRvdGFsTWF0BQpFU1NFTExDT0VGBRBSRVNPVVJDRVBSSUNFTUlOCQBoAgAKBQ5QUk9EVUNUUEtHU0laRQMJAQIhPQIIBQNwbXQGYW1vdW50BQlzZWxsUHJpY2UJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQlzZWxsUHJpY2UEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9lY29ub215Q29udHJhY3QCD3VwZGF0ZUVzU3RvcmFnZQkAzAgCBQVuZXdFUwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQt1c2R0QXNzZXRJZAUJc2VsbFByaWNlBQNuaWwJAJQKAgkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgFCW5ld0hlYWx0aAkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkBQh4cENhbGxFUwJfMQUGcmVzdWx0AWkBDnVwZGF0ZUJhY2twYWNrAgtkdWNrQXNzZXRJZAduZXdQYWNrAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAhFwZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBQduZXdQYWNrBQNuaWwFB25ld1BhY2sBaQEIYnV5U0xhbmQABAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIcRXhhY3RseSBvbmUgcGF5bWVudCByZXF1aXJlZAQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAADCQECIT0CCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQIaQWxsb3dlZCBVU0RUIHBheW1lbnQgb25seSEDCQECIT0CCAUDcG10BmFtb3VudAUHRVhQVVNEVAkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFB0VYUFVTRFQEBnJlc3VsdAkBEmV4cGVkaXRpb25JbnRlcm5hbAIIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbggIBQZyZXN1bHQCXzICXzEBaQEKZXhwZWRpdGlvbgIHbWVzc2FnZQNzaWcEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQEQZXhwZWRpdGlvbkNvbW1vbgQIBQFpBmNhbGxlcggFAWkNdHJhbnNhY3Rpb25JZAUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzggCCAUGcmVzdWx0Al8xCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCnhwTmV3U0xhbmQCXzEFDHByb2xvZ0FjdGlvbgkAlAoCCAUGcmVzdWx0Al8yCAUGcmVzdWx0Al8zAWkBDHVwZ3JhZGVJbmZyYQELbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQGCAUBaQZjYWxsZXIAAAULbGFuZEFzc2V0SWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUOeHBVcGdyYWRlSW5mcmEIBQZyZXN1bHQCXzMFBU1VTFQ4Al8xCAUGcmVzdWx0Al8yAWkBEHVwZ3JhZGVJbmZyYVVzZHQBC2xhbmRBc3NldElkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQENdXBJbmZyYUNvbW1vbgQHCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQtsYW5kQXNzZXRJZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpARBhY3RpdmF0ZUFydGlmYWN0AgdhcnROYW1lDmxhbmRBc3NldElkT3B0BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkGY2FsbGVyBAZyZXN1bHQEByRtYXRjaDAFB2FydE5hbWUDCQAAAgIHUFJFU0FMRQUHJG1hdGNoMAkBEmFjdGl2YXRlUHJlc2FsZUFydAIFBGFkZHIFDmxhbmRBc3NldElkT3B0AwkAAAICB09OQk9BUkQFByRtYXRjaDAJARJhY3RpdmF0ZU9uYm9hcmRBcnQBBQRhZGRyCQACAQIQVW5rbm93biBhcnRpZmFjdAkAzQgCBQZyZXN1bHQFDHByb2xvZ0FjdGlvbgFpAQptZXJnZUxhbmRzAQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQGcmVzdWx0CQELbWVyZ2VDb21tb24FBgkApQgBCAUBaQZjYWxsZXIAAAUMbGFuZEFzc2V0SWRzCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM4IAgkAzQgCCAUGcmVzdWx0Al8xBQxwcm9sb2dBY3Rpb24ICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIJAKUIAQgFAWkGY2FsbGVyBQd4cE1lcmdlAl8xCAUGcmVzdWx0Al8yAWkBDm1lcmdlTGFuZHNVc2R0AQxsYW5kQXNzZXRJZHMEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQGcmVzdWx0CQELbWVyZ2VDb21tb24FBwkApQgBCAUBaQZjYWxsZXIIBQNwbXQGYW1vdW50BQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzQgCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24IBQZyZXN1bHQCXzIBaQENY2FyZ29FeGNoYW5nZQIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQECmNhcmdvUGFydHMJALwJAgUMY2FyZ29MaXN0U3RyAgE6BARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIJAJEDAgUDbG9jBQhsb2NJZHhJZAULbGFuZEFzc2V0SWQJAAIBCQCsAgICG0R1Y2sgc2hvdWxkIGJlIG9uIHRoZSBsYW5kIAULbGFuZEFzc2V0SWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQECWN1cnJlbnRXaAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAZyZXN1bHQJAQltb3ZlU3R1ZmYDBQpjYXJnb1BhcnRzBQljdXJyZW50V2gFC2N1cnJlbnRQYWNrBARsb2Z0CQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQCAV8EBWxvZnRPCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFC3ZvbE9jY3VwaWVkCAUGcmVzdWx0Al83BAVsb2Z0RgkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlCAUGcmVzdWx0Al83CQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCAUGcmVzdWx0Al80CQDMCAIIBQZyZXN1bHQCXzUJAMwIAggFBnJlc3VsdAJfNgUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIFBXdoS2V5CQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIIBQZyZXN1bHQCXzEJAMwIAggFBnJlc3VsdAJfMgkAzAgCCAUGcmVzdWx0Al8zCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwBaQENc2F2ZVdhcmVob3VzZQIFd2hTdHILbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEAndoCQC8CQIFBXdoU3RyAgE6AwkBAiE9AgkAkAMBBQJ3aAAFCQACAQIwd2FyZWhvdXNlIHN0cmluZyBzaG91bGQgY29udGFpbiA0ICc6JyBzZXBhcmF0b3JzBAVsb2Z0TAkAkQMCCQC1CQIJAJEDAgUCd2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQJAQ1wYXJzZUludFZhbHVlAQUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBEmZpeFdhcmVob3VzZUZvcm1hdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFDHJlc3RDb250cmFjdAkAAgECDUFjY2VzcyBkZW5pZWQEBXdoS2V5CQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQECWxhbmRJbmRleAkAaQIJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfBQtyZWNMYW5kU2l6ZQUFU1NJWkUECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAJ3aAkBDGdldFdhcmVob3VzZQMFBXdoS2V5BQlsYW5kSW5kZXgFCmluZnJhTGV2ZWwEBWxvZnRMCQEFYXNJbnQBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQJAMwIAgUCd2gFA25pbAUDbmlsBAVsb2Z0TwkBF2dldFdhcmVob3VzZU9jY3VwaWVkVm9sAQUCd2gEBWxvZnRUCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFAndoBQt3aElkeExldmVscwQFbG9mdEYJAGUCCQBlAgUFbG9mdFQFBWxvZnRMBQVsb2Z0TwQIbmV3V2hTdHIJALoJAgkAzAgCCQCRAwIFAndoBQt3aElkeExldmVscwkAzAgCCQCRAwIFAndoBQh3aElkeFJlcwkAzAgCCQCRAwIFAndoBQh3aElkeE1hdAkAzAgCCQCRAwIFAndoBQl3aElkeFByb2QJAMwIAgkAuQkCCQDMCAIJAKQDAQUFbG9mdEwJAMwIAgkApAMBBQVsb2Z0TwkAzAgCCQCkAwEFBWxvZnRGCQDMCAIJAKQDAQUFbG9mdFQFA25pbAIBXwUDbmlsAgE6CQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkFCG5ld1doU3RyBQNuaWwFCG5ld1doU3RyAWkBD2ZpeFN0YWtlZFBpZWNlcwEHYWRkcmVzcwMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQMc3Rha2VkUGllY2VzAwkAAAIFB2FkZHJlc3MCAAAABAhsYW5kc1N0cgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQdhZGRyZXNzBAVsYW5kcwMJAQlpc0RlZmluZWQBBQhsYW5kc1N0cgkAvQkCCQEFdmFsdWUBBQhsYW5kc1N0cgIBXwUDbmlsCgEHb25l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ZW50IHNob3VsZCBiZSAJAKQDAQUMUkVOQU1JTkdDT1NUAwkBCGNvbnRhaW5zAgUKY3VzdG9tTmFtZQICX18JAAIBCQCsAgICHk5hbWUgc2hvdWxkIG5vdCBjb250YWluICdfXyc6IAUKY3VzdG9tTmFtZQMJAGYCCQCxAgEFCmN1c3RvbU5hbWUFCk1BWE5BTUVMRU4JAAIBCQCsAgICGU5hbWUgdG9vIGxvbmcsIG1heExlbmd0aD0JAKQDAQUKTUFYTkFNRUxFTgQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEB2FjdGlvbnMEByRtYXRjaDAFBHR5cGUDCQAAAgIHQUNDT1VOVAUHJG1hdGNoMAQKcmV2ZXJzZUtleQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBBQpjdXN0b21OYW1lBAluYW1lT3duZXIJAKIIAQUKcmV2ZXJzZUtleQMJAQlpc0RlZmluZWQBBQluYW1lT3duZXIJAAIBCQCsAgICGU5hbWUgYWxyZWFkeSByZWdpc3RlcmVkOiAFCmN1c3RvbU5hbWUEDWFkZHJUb05hbWVLZXkJARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQUEYWRkcgQHb2xkTmFtZQkAoggBBQ1hZGRyVG9OYW1lS2V5BAdmcmVlT2xkAwkBCWlzRGVmaW5lZAEFB29sZE5hbWUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFmtleUN1c3RvbU5hbWVUb0FkZHJlc3MBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUNYWRkclRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUEYWRkcggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBExBTkQFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFDHhwQ3VzdG9tTmFtZQJfMQMJAAACAgREVUNLBQckbWF0Y2gwBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFB2Fzc2V0SWQEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQUHYXNzZXRJZAMDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkGCQEBIQEJAQlpc0RlZmluZWQBCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHIJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEQa2V5RHVja0lkVG9Pd25lcgEFB2Fzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkRVQ0tQUkVGSVgCDSBpcyBub3QgeW91cnMECnJldmVyc2VLZXkJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQOYXNzZXRUb05hbWVLZXkJARprZXlEdWNrQXNzZXRJZFRvQ3VzdG9tTmFtZQEFB2Fzc2V0SWQEB29sZE5hbWUJAKIIAQUOYXNzZXRUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEaa2V5RHVja0N1c3RvbU5hbWVUb0Fzc2V0SWQBCQEFdmFsdWUBBQdvbGROYW1lBQNuaWwFA25pbAkAzggCCQDNCAIJAM0IAgUHZnJlZU9sZAkBC1N0cmluZ0VudHJ5AgUOYXNzZXRUb05hbWVLZXkFCmN1c3RvbU5hbWUJAQtTdHJpbmdFbnRyeQIFCnJldmVyc2VLZXkFB2Fzc2V0SWQICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQdhc3NldElkBQx4cEN1c3RvbU5hbWUCXzEJAAIBAhNVbmtub3duIGVudGl0eSB0eXBlCQCUCgIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uAAABaQEMc2V0UmVmZXJyYWxzAglvbGRQbGF5ZXIJbmV3UGxheWVyAwkBAiE9AggFAWkPY2FsbGVyUHVibGljS2V5BQNwdWIJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkAwkBASEBCQEJaXNEZWZpbmVkAQkApggBBQlvbGRQbGF5ZXIJAAIBCQCsAgICEUludmFsaWQgYWRkcmVzczogBQlvbGRQbGF5ZXIDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW5ld1BsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW5ld1BsYXllcgQHb2xkc0tleQkBCWtleU9sZGllcwAEBG9sZHMJAKIIAQUHb2xkc0tleQQGb2xkaWVzAwkBCWlzRGVmaW5lZAEFBG9sZHMJALwJAgkBBXZhbHVlAQUEb2xkcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFBm9sZGllcwUJbmV3UGxheWVyCQACAQkArAICBQluZXdQbGF5ZXICJiBpcyBub3QgbmV3YmllIChhbHJlYWR5IGhhcyByZWZlcnJhbHMpBAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFCW5ld1BsYXllcgQFcmVmQnkJAKIIAQUIcmVmQnlLZXkDAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQEJaXNEZWZpbmVkAQkApggBCQEFdmFsdWUBBQVyZWZCeQcJAAIBCQCsAgIJAKwCAgUJbmV3UGxheWVyAhQgYWxyZWFkeSBoYXMgcmVmQnk6IAkBBXZhbHVlAQUFcmVmQnkEB3JlZnNLZXkJARNrZXlBZGRyZXNzUmVmZXJyYWxzAQUJb2xkUGxheWVyBARyZWZzCQCiCAEFB3JlZnNLZXkECXJlZnNBcnJheQMJAQlpc0RlZmluZWQBBQRyZWZzCQC8CQIJAQV2YWx1ZQEFBHJlZnMCAV8FA25pbAMJAQ9jb250YWluc0VsZW1lbnQCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgkAAgEJAKwCAgkArAICCQCsAgIFCW9sZFBsYXllcgISIGFscmVhZHkgY29udGFpbnMgBQluZXdQbGF5ZXICESB3aXRoaW4gcmVmZXJyYWxzBAduZXdSZWZzCQC6CQIJAM0IAgUJcmVmc0FycmF5BQluZXdQbGF5ZXICAV8EB25ld09sZHMDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQlvbGRQbGF5ZXIJAQV2YWx1ZQEFBG9sZHMJALoJAgkAzQgCBQZvbGRpZXMFCW9sZFBsYXllcgIBXwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFCHJlZkJ5S2V5BQlvbGRQbGF5ZXIJAMwIAgkBC1N0cmluZ0VudHJ5AgUHcmVmc0tleQUHbmV3UmVmcwkAzAgCCQELU3RyaW5nRW50cnkCBQdvbGRzS2V5BQduZXdPbGRzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEQZGlzdHJpYnV0ZVBvaW50cwUIc3RyZW5ndGgIYWNjdXJhY3kJaW50ZWxsZWN0CWVuZHVyYW5jZQlkZXh0ZXJpdHkEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQKZnJlZUtleUFjYwkBEWtleVVzZXJGcmVlUG9pbnRzAQUEYWRkcgQNZnJlZVBvaW50c0FjYwkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFCmZyZWVLZXlBY2MAAAQLZnJlZUtleUR1Y2sJARFrZXlEdWNrRnJlZVBvaW50cwEFC2R1Y2tBc3NldElkBA5mcmVlUG9pbnRzRHVjawkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFC2ZyZWVLZXlEdWNrAAAEB3N1bUZyZWUJAGQCBQ1mcmVlUG9pbnRzQWNjBQ5mcmVlUG9pbnRzRHVjawQPc3VtVG9EaXN0cmlidXRlCQBkAgkAZAIJAGQCCQBkAgUIc3RyZW5ndGgFCGFjY3VyYWN5BQlpbnRlbGxlY3QFCWVuZHVyYW5jZQUJZGV4dGVyaXR5AwkAZgIFD3N1bVRvRGlzdHJpYnV0ZQUHc3VtRnJlZQkAAgEJAKwCAgkArAICAg9UaGVyZSBhcmUgb25seSAJAKQDAQUHc3VtRnJlZQIaIGZyZWUgcG9pbnRzIHRvIGRpc3RyaWJ1dGUECGNoYXJzS2V5CQEMa2V5RHVja0NoYXJzAQULZHVja0Fzc2V0SWQEBWNoYXJzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQhjaGFyc0tleQIJMF8wXzBfMF8wAgFfBAZuZXdBY2MJAGUCBQ1mcmVlUG9pbnRzQWNjBQ9zdW1Ub0Rpc3RyaWJ1dGUJAJQKAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUKZnJlZUtleUFjYwMJAGYCAAAFBm5ld0FjYwAABQZuZXdBY2MJAMwIAgkBDEludGVnZXJFbnRyeQIFC2ZyZWVLZXlEdWNrAwkAZgIAAAUGbmV3QWNjCQBkAgUOZnJlZVBvaW50c0R1Y2sFBm5ld0FjYwUOZnJlZVBvaW50c0R1Y2sJAMwIAgkBC1N0cmluZ0VudHJ5AgUIY2hhcnNLZXkJALkJAgkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJTdHJlbmd0aAUIc3RyZW5ndGgJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQxjaGFyQWNjdXJhY3kFCGFjY3VyYWN5CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckludGVsbGVjdAUJaW50ZWxsZWN0CQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckVuZHVyYW5jZQUJZW5kdXJhbmNlCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUNY2hhckRleHRlcml0eQUJZGV4dGVyaXR5BQNuaWwCAV8JAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARxzcGxpdEJ5R2xvYmFsV2VpZ2h0c1JFQURPTkxZAQZhbW91bnQJAJQKAgUDbmlsCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUGYW1vdW50AWkBJHNwbGl0QnlHbG9iYWxBbmRMb2NhbFdlaWdodHNSRUFET05MWQMJbWF0QW1vdW50CXJlc0Ftb3VudAh0ZXJyYWlucwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBBQh0ZXJyYWlucwkAlAoCBQNuaWwJAJQKAgkBEmdldE5lZWRlZE1hdGVyaWFscwEFCW1hdEFtb3VudAkBE2Rpc3RyaWJ1dGVCeVdlaWdodHMCBQlyZXNBbW91bnQFDXRlcnJhaW5Db3VudHMBaQETZ2V0QmFja3BhY2tSRUFET05MWQELZHVja0Fzc2V0SWQJAJQKAgUDbmlsCQC5CQIJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkAgE6AWkBFGdldFdhcmVob3VzZVJFQURPTkxZAQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAJAJQKAgUDbmlsCQC6CQIJAQxnZXRXYXJlaG91c2UDCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAIBOgFpAQpzYXZlTGFzdFR4AAMDCQECIT0CCAUBaQZjYWxsZXIFC3dsZ0NvbnRyYWN0CQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAcJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIJAMwIAgkBBnByb2xvZwEFAWkFA25pbAAqAWkBD3VwZGF0ZUR1Y2tTdGF0cwILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFB2RlbHRhWFABaQEOdXBkYXRlQWNjU3RhdHMCBGFkZHIHZGVsdGFYUAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQdkZWx0YVhQAWkBCWVxdWlwRHVjawEJZXF1aXBtZW50BAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEBWVxS2V5CQEQa2V5RHVja0VxdWlwbWVudAEFC2R1Y2tBc3NldElkBAtjdXJyZW50U2VncwkAtQkCCQELdmFsdWVPckVsc2UCCQCiCAEFBWVxS2V5AhcsOyxfLDssXyw7LF8sOyxfLDssXyw7LAIBXwQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW5ld0VxCQC1CQIFCWVxdWlwbWVudAIBXwMJAQIhPQIJAJADAQUFbmV3RXEFC05VTVNFR01FTlRTCQACAQIWV3JvbmcgZXF1aXBtZW50IHN0cmluZwQGYnBQcm9kCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QEBXBMaXN0AwkAAAIFBmJwUHJvZAIABQNuaWwJALUJAgUGYnBQcm9kAgFfBAh0ZW1wUHJvZAkBBWRyZXNzAwULY3VycmVudFNlZ3MFBXBMaXN0BgQHbmV3UHJvZAkBBWRyZXNzAwUFbmV3RXEFCHRlbXBQcm9kBwkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWVxS2V5BQllcXVpcG1lbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAgUHbmV3UHJvZAIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsAAABaQEEdGVzdAADCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAg1BY2Nlc3MgZGVuaWVkCQCUCgIFA25pbAkBDnByb2RTdHJUb0J5dGVzAQIAACnfiIM=", "height": 2673246, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: E9w2WP9s2HdvRQ2j5JGWRysKWfVfj82kg2rgmt4qt6Te Next: EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J Diff:
OldNewDifferences
602602 }
603603
604604
605-func du (dv,dh,dw,dx,dy,dz) = {
606- let do = split(dv, ":")
605+func du (dv) = {
606+ let dh = if ((dv == ""))
607+ then nil
608+ else split(dv, "_")
609+ func dw (cL,aY) = {
610+ let dk = (size(cL) / 8)
611+ let dr = if ((size(dh) > dk))
612+ then parseIntValue(dh[dk])
613+ else 0
614+ (cL + toBytes(dr))
615+ }
616+
617+ let cN = ac
618+ let cO = size(cN)
619+ let cP = base58''
620+ func cQ (cR,cS) = if ((cS >= cO))
621+ then cR
622+ else dw(cR, cN[cS])
623+
624+ func cT (cR,cS) = if ((cS >= cO))
625+ then cR
626+ else throw("List size exceeds 50")
627+
628+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
629+ }
630+
631+
632+func dx (dy,dh,dz,dA,dB,dC) = {
633+ let do = split(dy, ":")
607634 if ((size(do) != 2))
608635 then throw("Incorrect format, should be index:amount")
609636 else {
610- let dA = parseIntValue(do[0])
611- let dB = parseIntValue(do[1])
612- if (if ((0 > dA))
637+ let dD = parseIntValue(do[0])
638+ let dE = parseIntValue(do[1])
639+ if (if ((0 > dD))
613640 then true
614- else (dA >= size(ac)))
641+ else (dD >= size(ac)))
615642 then throw("Unknown product idx")
616- else if ((0 > dB))
643+ else if ((0 > dE))
617644 then throw("Count can't be negative")
618- else if ((dB == 0))
645+ else if ((dE == 0))
619646 then $Tuple2(dh, false)
620647 else {
621- func dC (cL,dj) = {
648+ func dF (cL,dj) = {
622649 let dk = cL._1
623650 let dr = if ((size(dh) > dk))
624651 then parseIntValue(dh[dk])
625652 else 0
626- if ((dA != dk))
653+ if ((dD != dk))
627654 then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3)
628- else if (if (!(dw))
629- then (dB > dr)
655+ else if (if (!(dz))
656+ then (dE > dr)
630657 else false)
631- then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB)))
658+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE)))
632659 else {
633- let dD = if (!(dw))
660+ let dG = if (!(dz))
634661 then {
635- let dE = split(dj, "_")[ae]
636- if ((dE == ""))
662+ let dH = split(dj, "_")[ae]
663+ if ((dH == ""))
637664 then throw("Item cannot be equipped")
638665 else {
639- let dF = parseIntValue(dE)
640- let dG = (dF / 100)
641- if ((dx != dG))
666+ let dI = parseIntValue(dH)
667+ let dJ = (dI / 100)
668+ if ((dA != dJ))
642669 then throw("Segment incompatible")
643670 else {
644- let dH = ((dF % 100) / 10)
645- if ((dy != dH))
671+ let dK = ((dI % 100) / 10)
672+ if ((dB != dK))
646673 then throw("Slot incompatible")
647674 else {
648- let dI = (dF % 10)
649- if (if ((dz != 0))
650- then (dI > 1)
675+ let dL = (dI % 10)
676+ if (if ((dC != 0))
677+ then (dL > 1)
651678 else false)
652679 then throw("Big items should occupy slot 0")
653- else (dI > 1)
680+ else (dL > 1)
654681 }
655682 }
656683 }
657684 }
658685 else false
659- $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dw)
660- then dB
661- else -(dB))))), if (cL._3)
686+ $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz)
687+ then dE
688+ else -(dE))))), if (cL._3)
662689 then true
663- else dD)
690+ else dG)
664691 }
665692 }
666693
670697 let cP = $Tuple3(0, nil, false)
671698 func cQ (cR,cS) = if ((cS >= cO))
672699 then cR
673- else dC(cR, cN[cS])
700+ else dF(cR, cN[cS])
674701
675702 func cT (cR,cS) = if ((cS >= cO))
676703 then cR
684711 }
685712
686713
687-func dJ (dK,dL,dw,dx,dy) = if ((dK != ""))
714+func dM (dN,dO,dz,dA,dB) = if ((dN != ""))
688715 then {
689- let dM = split(dK, ",")
690- if ((size(dM) > n))
716+ let dP = split(dN, ",")
717+ if ((size(dP) > n))
691718 then throw("Wrong slots format")
692719 else {
693- let dN = dM[0]
694- let dO = if ((size(dM) > 1))
695- then dM[1]
720+ let dQ = dP[0]
721+ let dR = if ((size(dP) > 1))
722+ then dP[1]
696723 else ""
697- if (if ((dN == ""))
698- then (dO == "")
724+ if (if ((dQ == ""))
725+ then (dR == "")
699726 else false)
700- then dL
727+ then dO
701728 else {
702- let dP = if ((dN != ""))
703- then du(dN, dL, dw, dx, dy, 0)
704- else $Tuple2(dL, false)
705- if ((dO != ""))
706- then if (dP._2)
729+ let dS = if ((dQ != ""))
730+ then dx(dQ, dO, dz, dA, dB, 0)
731+ else $Tuple2(dO, false)
732+ if ((dR != ""))
733+ then if (dS._2)
707734 then throw("Big item already occupies slot")
708- else du(dO, dP._1, dw, dx, dy, 1)._1
709- else dP._1
735+ else dx(dR, dS._1, dz, dA, dB, 1)._1
736+ else dS._1
710737 }
711738 }
712739 }
713- else dL
714-
715-
716-func dQ (dR,dh,dw) = {
717- func dx (cL,dS) = {
740+ else dO
741+
742+
743+func dT (dU,dh,dz) = {
744+ func dA (cL,dV) = {
718745 let dk = cL._1
719- let dy = split(dS, ";")
720- if ((size(dy) != m))
746+ let dB = split(dV, ";")
747+ if ((size(dB) != m))
721748 then throw("Wrong segment format")
722749 else {
723- let dT = dy[0]
724- let dq = dy[1]
725- if (if ((dT == ""))
750+ let dW = dB[0]
751+ let dq = dB[1]
752+ if (if ((dW == ""))
726753 then (dq == "")
727754 else false)
728755 then $Tuple2((dk + 1), cL._2)
729756 else {
730- let dU = dJ(dT, cL._2, dw, dk, 0)
731- $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1))
757+ let dX = dM(dW, cL._2, dz, dk, 0)
758+ $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1))
732759 }
733760 }
734761 }
735762
736-( let cN = dR
763+( let cN = dU
737764 let cO = size(cN)
738765 let cP = $Tuple2(0, dh)
739766 func cQ (cR,cS) = if ((cS >= cO))
740767 then cR
741- else dx(cR, cN[cS])
768+ else dA(cR, cN[cS])
742769
743770 func cT (cR,cS) = if ((cS >= cO))
744771 then cR
748775 }
749776
750777
751-func dV (dW,dX,dY,dZ) = if ((size(dW) != S))
778+func dY (dZ,ea,eb,ec) = if ((size(dZ) != S))
752779 then throw("Wrong proportions data")
753780 else {
754- func ea (cL,eb) = {
755- let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY))
781+ func ed (cL,ee) = {
782+ let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb))
756783 if ((0 > dd))
757- then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY)))
784+ then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb)))
758785 else (cL :+ toString(dd))
759786 }
760787
764791 let cP = nil
765792 func cQ (cR,cS) = if ((cS >= cO))
766793 then cR
767- else ea(cR, cN[cS])
794+ else ed(cR, cN[cS])
768795
769796 func cT (cR,cS) = if ((cS >= cO))
770797 then cR
776803 }
777804
778805
779-func ec (dX,dY,dZ) = {
780- let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
781- dV(dW, dX, dY, dZ)
782- }
783-
784-
785-func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)]
786-
787-
788-func ef (eg,dX,eh,dY,ei) = {
789- func ej (cL,eb) = {
790- let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
791- (cL :+ toString((parseIntValue(eg[eb]) + ek)))
806+func ef (ea,eb,ec) = {
807+ let dZ = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
808+ dY(dZ, ea, eb, ec)
809+ }
810+
811+
812+func eg (eh) = [(size(split(eh, "A")) - 1), (size(split(eh, "B")) - 1), (size(split(eh, "C")) - 1), (size(split(eh, "D")) - 1), (size(split(eh, "E")) - 1), (size(split(eh, "F")) - 1)]
813+
814+
815+func ei (ej,ea,ek,eb,el) = {
816+ func em (cL,ee) = {
817+ let en = ((fraction(ek, el, U) * ea[ee]) * eb)
818+ (cL :+ toString((parseIntValue(ej[ee]) + en)))
792819 }
793820
794821 let cW = {
797824 let cP = nil
798825 func cQ (cR,cS) = if ((cS >= cO))
799826 then cR
800- else ej(cR, cN[cS])
827+ else em(cR, cN[cS])
801828
802829 func cT (cR,cS) = if ((cS >= cO))
803830 then cR
809836 }
810837
811838
812-func el (dX,eh,dY,ei) = {
813- func ej (cL,eb) = {
814- let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
815- $Tuple2((cL._1 :+ ek), (cL._2 + ek))
839+func eo (ea,ek,eb,el) = {
840+ func em (cL,ee) = {
841+ let en = ((fraction(ek, el, U) * ea[ee]) * eb)
842+ $Tuple2((cL._1 :+ en), (cL._2 + en))
816843 }
817844
818845 let cN = [0, 1, 2, 3, 4, 5]
820847 let cP = $Tuple2(nil, 0)
821848 func cQ (cR,cS) = if ((cS >= cO))
822849 then cR
823- else ej(cR, cN[cS])
850+ else em(cR, cN[cS])
824851
825852 func cT (cR,cS) = if ((cS >= cO))
826853 then cR
830857 }
831858
832859
833-func em (en,eo,ep,eq) = {
834- let er = ep._1
835- let es = ep._2
836- if ((es == 0))
837- then $Tuple2(makeString(en, "_"), makeString(eo, "_"))
838- else if ((eq >= es))
860+func ep (eq,er,es,et) = {
861+ let eu = es._1
862+ let ev = es._2
863+ if ((ev == 0))
864+ then $Tuple2(makeString(eq, "_"), makeString(er, "_"))
865+ else if ((et >= ev))
839866 then {
840- func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb])))
867+ func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee])))
841868
842869 let cW = {
843870 let cN = [0, 1, 2, 3, 4, 5]
845872 let cP = nil
846873 func cQ (cR,cS) = if ((cS >= cO))
847874 then cR
848- else et(cR, cN[cS])
875+ else ew(cR, cN[cS])
849876
850877 func cT (cR,cS) = if ((cS >= cO))
851878 then cR
853880
854881 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
855882 }
856- $Tuple2(makeString(cW, "_"), makeString(eo, "_"))
883+ $Tuple2(makeString(cW, "_"), makeString(er, "_"))
857884 }
858885 else {
859- func eu (cL,eb) = {
860- let ev = fraction(er[eb], eq, es)
861- $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev))))
886+ func ex (cL,ee) = {
887+ let ey = fraction(eu[ee], et, ev)
888+ $Tuple2((cL._1 :+ toString((parseIntValue(eq[ee]) + ey))), (cL._2 :+ toString(((parseIntValue(er[ee]) + eu[ee]) - ey))))
862889 }
863890
864891 let cW = {
867894 let cP = $Tuple2(nil, nil)
868895 func cQ (cR,cS) = if ((cS >= cO))
869896 then cR
870- else eu(cR, cN[cS])
897+ else ex(cR, cN[cS])
871898
872899 func cT (cR,cS) = if ((cS >= cO))
873900 then cR
880907 }
881908
882909
883-func ew (ex) = if ((ex >= toBigInt(0)))
884- then ex
885- else -(ex)
886-
887-
888-let ey = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
889-
890-func ez (bS,eA) = {
891- let eB = toInt((bS % cg))
892- let eC = if ((eA[0] > eB))
910+func ez (eA) = if ((eA >= toBigInt(0)))
911+ then eA
912+ else -(eA)
913+
914+
915+let eB = [[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]]
916+
917+func eC (bS,eD) = {
918+ let eE = toInt((bS % cg))
919+ let eF = if ((eD[0] > eE))
893920 then "A"
894- else if ((eA[1] > eB))
921+ else if ((eD[1] > eE))
895922 then "B"
896- else if ((eA[2] > eB))
923+ else if ((eD[2] > eE))
897924 then "C"
898- else if ((eA[3] > eB))
925+ else if ((eD[3] > eE))
899926 then "D"
900- else if ((eA[4] > eB))
927+ else if ((eD[4] > eE))
901928 then "E"
902929 else "F"
903- eC
904- }
905-
906-
907-func eD (eE,eF) = {
908- let eG = ey[eF]
909- func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck))
910-
911- let eI = {
930+ eF
931+ }
932+
933+
934+func eG (eH,eI) = {
935+ let eJ = eB[eI]
936+ func eK (cL,cM) = $Tuple2((((((cL._1 + eC(cL._2, eJ)) + eC((cL._2 / cg), eJ)) + eC((cL._2 / ch), eJ)) + eC((cL._2 / ci), eJ)) + eC((cL._2 / cj), eJ)), (cL._2 / ck))
937+
938+ let eL = {
912939 let cN = [1, 2, 3, 4, 5]
913940 let cO = size(cN)
914- let cP = $Tuple2("", (eE / cf))
941+ let cP = $Tuple2("", (eH / cf))
915942 func cQ (cR,cS) = if ((cS >= cO))
916943 then cR
917- else eH(cR, cN[cS])
944+ else eK(cR, cN[cS])
918945
919946 func cT (cR,cS) = if ((cS >= cO))
920947 then cR
922949
923950 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
924951 }
925- eI._1
926- }
927-
928-
929-func eJ (eK) = {
930- let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
931-[toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S))
932- then eL[aq]
933- else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S))
934- then eL[ar]
935- else "0_0_0_0_0_0", eL[as]]
952+ eL._1
936953 }
937954
938955
939956 func eM (eN) = {
940- let do = split(eN, "_")
957+ let eO = split(valueOrElse(getString(eN), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
958+[toString(valueOrElse(parseInt(eO[ap]), 0)), if ((size(split(eO[aq], "_")) == S))
959+ then eO[aq]
960+ else "0_0_0_0_0_0", if ((size(split(eO[ar], "_")) == S))
961+ then eO[ar]
962+ else "0_0_0_0_0_0", eO[as]]
963+ }
964+
965+
966+func eP (eQ) = {
967+ let do = split(eQ, "_")
941968 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
942969 }
943970
944971
945-func eO (eP) = {
946- let eQ = eP[aj]
947- func eR (cL,dj) = (cL + parseIntValue(dj))
948-
949- func eS (cL,dj) = {
972+func eR (eS) = {
973+ let eT = eS[aj]
974+ func eU (cL,dj) = (cL + parseIntValue(dj))
975+
976+ func eV (cL,dj) = {
950977 let bB = cL._1
951- let eT = (((parseIntValue(dj) + af) - 1) / af)
952- $Tuple2((bB + 1), (cL._2 + (eT * bi)))
978+ let eW = (((parseIntValue(dj) + af) - 1) / af)
979+ $Tuple2((bB + 1), (cL._2 + (eW * bi)))
953980 }
954981
955- let eU = {
956- let cN = split(eP[ah], "_")
982+ let eX = {
983+ let cN = split(eS[ah], "_")
957984 let cO = size(cN)
958985 let cP = 0
959986 func cQ (cR,cS) = if ((cS >= cO))
960987 then cR
961- else eR(cR, cN[cS])
988+ else eU(cR, cN[cS])
962989
963990 func cT (cR,cS) = if ((cS >= cO))
964991 then cR
966993
967994 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
968995 }
969- let eV = {
970- let cN = split(eP[ai], "_")
996+ let eY = {
997+ let cN = split(eS[ai], "_")
971998 let cO = size(cN)
972999 let cP = 0
973- func eW (cR,cS) = if ((cS >= cO))
1000+ func eZ (cR,cS) = if ((cS >= cO))
9741001 then cR
975- else eR(cR, cN[cS])
976-
977- func eX (cR,cS) = if ((cS >= cO))
1002+ else eU(cR, cN[cS])
1003+
1004+ func fa (cR,cS) = if ((cS >= cO))
9781005 then cR
9791006 else throw("List size exceeds 6")
9801007
981- eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
1008+ fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
9821009 }
983- let eY = if ((eQ == ""))
1010+ let fb = if ((eT == ""))
9841011 then 0
985- else ( let cN = split_4C(eQ, "_")
1012+ else ( let cN = split_4C(eT, "_")
9861013 let cO = size(cN)
9871014 let cP = $Tuple2(0, 0)
988- func eZ (cR,cS) = if ((cS >= cO))
1015+ func fc (cR,cS) = if ((cS >= cO))
9891016 then cR
990- else eS(cR, cN[cS])
991-
992- func fa (cR,cS) = if ((cS >= cO))
1017+ else eV(cR, cN[cS])
1018+
1019+ func fd (cR,cS) = if ((cS >= cO))
9931020 then cR
9941021 else throw("List size exceeds 50")
9951022
996- fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
997- ((eU + eV) + eY)
998- }
999-
1000-
1001-func fb (fc,fd,fe) = {
1002- let eN = ((toString(fd) + "_") + toString(fe))
1003- let ff = eM(eN)
1004- let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1005- let fh = split_4C(fg, ":")
1006- let fi = eO(fh)
1007- let fj = if ((5 > size(fh)))
1008- then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_")
1009- else {
1010- let fk = split(fh[ak], "_")
1011- let fl = parseIntValue(fk[al])
1012- let fm = if ((size(fk) > 1))
1013- then parseIntValue(fk[am])
1014- else fi
1015- makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_")
1016- }
1017-[fh[ag], if ((size(split(fh[ah], "_")) == S))
1018- then fh[ah]
1019- else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S))
1020- then fh[ai]
1021- else "0_0_0_0_0_0", fh[aj], fj]
1022- }
1023-
1024-
1025-func fn (eP) = {
1026- let fo = eO(eP)
1027- let fp = parseIntValue(split(eP[ak], "_")[al])
1028- ((eM(eP[ag]) - fo) - fp)
1029- }
1030-
1031-
1032-func fq (fr,fs) = {
1033- let eT = if ((fr >= 0))
1034- then (((fr + fs) - 1) / fs)
1035- else -((((-(fr) + fs) - 1) / fs))
1036- (eT * bi)
1037- }
1038-
1039-
1040-func ft (fu,eP,fv) = if ((size(fu) != 3))
1023+ fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1024+ ((eX + eY) + fb)
1025+ }
1026+
1027+
1028+func fe (ff,fg,fh) = {
1029+ let eQ = ((toString(fg) + "_") + toString(fh))
1030+ let fi = eP(eQ)
1031+ let fj = valueOrElse(getString(ff), (eQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1032+ let fk = split_4C(fj, ":")
1033+ let fl = eR(fk)
1034+ let fm = if ((5 > size(fk)))
1035+ then makeString(["0", toString(fl), toString((fi - fl)), toString(fi)], "_")
1036+ else {
1037+ let fn = split(fk[ak], "_")
1038+ let fo = parseIntValue(fn[al])
1039+ let fp = if ((size(fn) > 1))
1040+ then parseIntValue(fn[am])
1041+ else fl
1042+ makeString([toString(fo), toString(fp), toString(((fi - fo) - fp)), toString(fi)], "_")
1043+ }
1044+[fk[ag], if ((size(split(fk[ah], "_")) == S))
1045+ then fk[ah]
1046+ else "0_0_0_0_0_0", if ((size(split(fk[ai], "_")) == S))
1047+ then fk[ai]
1048+ else "0_0_0_0_0_0", fk[aj], fm]
1049+ }
1050+
1051+
1052+func fq (eS) = {
1053+ let fr = eR(eS)
1054+ let fs = parseIntValue(split(eS[ak], "_")[al])
1055+ ((eP(eS[ag]) - fr) - fs)
1056+ }
1057+
1058+
1059+func ft (fu,fv) = {
1060+ let eW = if ((fu >= 0))
1061+ then (((fu + fv) - 1) / fv)
1062+ else -((((-(fu) + fv) - 1) / fv))
1063+ (eW * bi)
1064+ }
1065+
1066+
1067+func fw (fx,eS,fy) = if ((size(fx) != 3))
10411068 then throw("cargoListStr should contain exactly 2 ':' separators")
10421069 else {
1043- let fw = split(fu[0], "_")
1044- let fx = split(fu[1], "_")
1045- let fy = if ((fu[2] == ""))
1070+ let fz = split(fx[0], "_")
1071+ let fA = split(fx[1], "_")
1072+ let fB = if ((fx[2] == ""))
10461073 then nil
1047- else split(fu[2], "_")
1048- if ((size(fw) != S))
1074+ else split(fx[2], "_")
1075+ if ((size(fz) != S))
10491076 then throw("All 6 resources should be passed")
1050- else if ((size(fx) != S))
1077+ else if ((size(fA) != S))
10511078 then throw("All 6 materials should be passed")
10521079 else {
1053- let eq = fn(eP)
1054- let fz = split(eP[ah], "_")
1055- let fA = split(eP[ai], "_")
1056- let fB = if ((eP[aj] == ""))
1080+ let et = fq(eS)
1081+ let fC = split(eS[ah], "_")
1082+ let fD = split(eS[ai], "_")
1083+ let fE = if ((eS[aj] == ""))
10571084 then nil
1058- else split(eP[aj], "_")
1059- let eo = split(fv[aq], "_")
1060- let fC = split(fv[ar], "_")
1061- let fD = if ((fv[as] == ""))
1085+ else split(eS[aj], "_")
1086+ let er = split(fy[aq], "_")
1087+ let fF = split(fy[ar], "_")
1088+ let fG = if ((fy[as] == ""))
10621089 then nil
1063- else split(fv[as], "_")
1064- func fE (cL,dj) = {
1065- let eb = cL._1
1066- let fF = parseIntValue(dj)
1067- let fG = parseIntValue(fz[eb])
1068- let fH = parseIntValue(eo[eb])
1069- if ((fF == 0))
1070- then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4)
1071- else if ((fF > 0))
1072- then if ((fF > fH))
1073- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available"))
1074- else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1075- else if ((-(fF) > fG))
1076- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available"))
1077- else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1090+ else split(fy[as], "_")
1091+ func fH (cL,dj) = {
1092+ let ee = cL._1
1093+ let fI = parseIntValue(dj)
1094+ let fJ = parseIntValue(fC[ee])
1095+ let fK = parseIntValue(er[ee])
1096+ if ((fI == 0))
1097+ then $Tuple4((ee + 1), (cL._2 :+ fC[ee]), (cL._3 :+ er[ee]), cL._4)
1098+ else if ((fI > 0))
1099+ then if ((fI > fK))
1100+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1101+ else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI))
1102+ else if ((-(fI) > fJ))
1103+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1104+ else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI))
10781105 }
10791106
10801107 let cW = {
1081- let cN = fw
1108+ let cN = fz
10821109 let cO = size(cN)
10831110 let cP = $Tuple4(0, nil, nil, 0)
10841111 func cQ (cR,cS) = if ((cS >= cO))
10851112 then cR
1086- else fE(cR, cN[cS])
1113+ else fH(cR, cN[cS])
10871114
10881115 func cT (cR,cS) = if ((cS >= cO))
10891116 then cR
10911118
10921119 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
10931120 }
1094- func fI (cL,dj) = {
1095- let eb = cL._1
1096- let fF = parseIntValue(dj)
1097- let fJ = parseIntValue(fA[eb])
1098- let fK = parseIntValue(fC[eb])
1099- if ((fF == 0))
1100- then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4)
1101- else if ((fF > 0))
1102- then if ((fF > fK))
1103- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1104- else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1105- else if ((-(fF) > fJ))
1106- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1107- else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1121+ func fL (cL,dj) = {
1122+ let ee = cL._1
1123+ let fI = parseIntValue(dj)
1124+ let fM = parseIntValue(fD[ee])
1125+ let fN = parseIntValue(fF[ee])
1126+ if ((fI == 0))
1127+ then $Tuple4((ee + 1), (cL._2 :+ fD[ee]), (cL._3 :+ fF[ee]), cL._4)
1128+ else if ((fI > 0))
1129+ then if ((fI > fN))
1130+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
1131+ else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI))
1132+ else if ((-(fI) > fM))
1133+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fM)) + " available"))
1134+ else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI))
11081135 }
11091136
1110- let dT = {
1111- let cN = fx
1137+ let dW = {
1138+ let cN = fA
11121139 let cO = size(cN)
11131140 let cP = $Tuple4(0, nil, nil, cW._4)
1114- func eW (cR,cS) = if ((cS >= cO))
1141+ func eZ (cR,cS) = if ((cS >= cO))
11151142 then cR
1116- else fI(cR, cN[cS])
1117-
1118- func eX (cR,cS) = if ((cS >= cO))
1143+ else fL(cR, cN[cS])
1144+
1145+ func fa (cR,cS) = if ((cS >= cO))
11191146 then cR
11201147 else throw("List size exceeds 6")
11211148
1122- eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
1149+ fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
11231150 }
1124- func fL (cL,dj) = {
1125- let eb = cL._1
1126- let fF = parseIntValue(dj)
1127- let fM = if ((size(fB) > eb))
1128- then parseIntValue(fB[eb])
1151+ func fO (cL,dj) = {
1152+ let ee = cL._1
1153+ let fI = parseIntValue(dj)
1154+ let fP = if ((size(fE) > ee))
1155+ then parseIntValue(fE[ee])
11291156 else 0
1130- let fN = if ((size(fD) > eb))
1131- then parseIntValue(fD[eb])
1157+ let fQ = if ((size(fG) > ee))
1158+ then parseIntValue(fG[ee])
11321159 else 0
1133- if ((fF == 0))
1134- then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4)
1135- else if ((fF > 0))
1136- then if ((fF > fN))
1137- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
1160+ if ((fI == 0))
1161+ then $Tuple4((ee + 1), (cL._2 :+ toString(fP)), (cL._3 :+ toString(fQ)), cL._4)
1162+ else if ((fI > 0))
1163+ then if ((fI > fQ))
1164+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available"))
11381165 else {
1139- let fO = (fq((fM + fF), af) - fq(fM, af))
1140- $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
1166+ let fR = (ft((fP + fI), af) - ft(fP, af))
1167+ $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR))
11411168 }
1142- else if ((-(fF) > fM))
1143- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available"))
1169+ else if ((-(fI) > fP))
1170+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available"))
11441171 else {
1145- let fO = (fq((fM + fF), af) - fq(fM, af))
1146- $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
1172+ let fR = (ft((fP + fI), af) - ft(fP, af))
1173+ $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR))
11471174 }
11481175 }
11491176
1150- let eL = if ((size(fy) != 0))
1177+ let eO = if ((size(fB) != 0))
11511178 then {
1152- let cN = fy
1179+ let cN = fB
11531180 let cO = size(cN)
1154- let cP = $Tuple4(0, nil, nil, dT._4)
1155- func eZ (cR,cS) = if ((cS >= cO))
1181+ let cP = $Tuple4(0, nil, nil, dW._4)
1182+ func fc (cR,cS) = if ((cS >= cO))
11561183 then cR
1157- else fL(cR, cN[cS])
1158-
1159- func fa (cR,cS) = if ((cS >= cO))
1184+ else fO(cR, cN[cS])
1185+
1186+ func fd (cR,cS) = if ((cS >= cO))
11601187 then cR
11611188 else throw("List size exceeds 50")
11621189
1163- fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1190+ fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
11641191 }
1165- else $Tuple4(0, fB, fD, dT._4)
1166- let fP = eL._4
1167- if ((fP > eq))
1168- then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left"))
1169- else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP)
1192+ else $Tuple4(0, fE, fG, dW._4)
1193+ let fS = eO._4
1194+ if ((fS > et))
1195+ then throw((((("Attempt to put total " + toString(fS)) + " stuff, but only ") + toString(et)) + " warehouse space left"))
1196+ else $Tuple7(makeString(cW._2, "_"), makeString(dW._2, "_"), makeString(eO._2, "_"), makeString(cW._3, "_"), makeString(dW._3, "_"), makeString(eO._3, "_"), fS)
11701197 }
11711198 }
11721199
11731200
1174-func fQ (fR,fS) = {
1175- let aT = toString(fR)
1176- let fT = ew(toBigInt(fS))
1177- let fU = valueOrElse(getInteger(cm()), (cl + 1))
1178- let co = toString(fU)
1179- let eF = toInt((fT % cf))
1180- let ee = eD(fT, eF)
1181- let fV = aa[eF]
1182- let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false)
1183- let av = calculateAssetId(fW)
1184- let fX = toBase58String(av)
1185- $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV))
1186- }
1187-
1188-
1189-func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX)))
1201+func fT (fU,fV) = {
1202+ let aT = toString(fU)
1203+ let fW = ez(toBigInt(fV))
1204+ let fX = valueOrElse(getInteger(cm()), (cl + 1))
1205+ let co = toString(fX)
1206+ let eI = toInt((fW % cf))
1207+ let eh = eG(fW, eI)
1208+ let fY = aa[eI]
1209+ let fZ = Issue(cE(co, "S"), makeString([co, "S", eh, fY], "_"), 1, 0, false)
1210+ let av = calculateAssetId(fZ)
1211+ let ga = toBase58String(av)
1212+ $Tuple2([IntegerEntry(cm(), (fX + 1)), fZ, StringEntry(cn(co), ga), StringEntry(au(ga), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ga), 0), IntegerEntry(cr(ga, aT), 0), ScriptTransfer(fU, 1, av)], $Tuple2(ga, fY))
1213+ }
1214+
1215+
1216+func gb (aT,gc,gd) = if (!(sigVerify_8Kb(gc, gd, bX)))
11901217 then throw("signature does not match")
11911218 else {
1192- let do = split(toUtf8String(fZ), ";")
1193- let gb = split(do[0], "|")
1194- let gc = split(gb[cA], "_")
1195- let gd = parseIntValue(gc[0])
1196- let ge = parseIntValue(gc[1])
1197- let gf = split(do[1], ":")
1198- let gg = gf[0]
1199- let gh = parseIntValue(gb[cB])
1200- if (if ((gh > (lastBlock.timestamp + bZ)))
1219+ let do = split(toUtf8String(gc), ";")
1220+ let ge = split(do[0], "|")
1221+ let gf = split(ge[cA], "_")
1222+ let gg = parseIntValue(gf[0])
1223+ let gh = parseIntValue(gf[1])
1224+ let gi = split(do[1], ":")
1225+ let gj = gi[0]
1226+ let gk = parseIntValue(ge[cB])
1227+ if (if ((gk > (lastBlock.timestamp + bZ)))
12011228 then true
1202- else ((lastBlock.timestamp - bZ) > gh))
1203- then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp)))
1229+ else ((lastBlock.timestamp - bZ) > gk))
1230+ then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp)))
12041231 else {
1205- let gi = gf[1]
1206- let gj = valueOrElse(getString(at(aT)), "")
1207- if ((gj != gi))
1208- then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi))
1232+ let gl = gi[1]
1233+ let gm = valueOrElse(getString(at(aT)), "")
1234+ if ((gm != gl))
1235+ then throw(((("Tx ids don't match! In state: " + gm) + ", in msg: ") + gl))
12091236 else {
12101237 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1211- let gk = aQ(p)
1212- let gl = J(valueOrElse(getInteger(r(p)), 0))
1213- let gm = valueOrElse(getInteger(gk), gl)
1214- if ((gm != gd))
1215- then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd)))
1216- else if ((0 >= gd))
1238+ let gn = aQ(p)
1239+ let go = J(valueOrElse(getInteger(r(p)), 0))
1240+ let gp = valueOrElse(getInteger(gn), go)
1241+ if ((gp != gg))
1242+ then throw(((("oldHealth=" + toString(gp)) + " from state does not match one from flight log=") + toString(gg)))
1243+ else if ((0 >= gg))
12171244 then throw("You can't fly with zero health")
12181245 else {
1219- let gn = if ((size(gb) > cC))
1220- then gb[cC]
1246+ let gq = if ((size(ge) > cC))
1247+ then ge[cC]
12211248 else ""
1222- let go = if ((size(gb) > cD))
1223- then gb[cD]
1249+ let gr = if ((size(ge) > cD))
1250+ then ge[cD]
12241251 else ""
1225- let gp = if (if ((ge > 0))
1226- then (gn == "$")
1252+ let gs = if (if ((gh > 0))
1253+ then (gq == "$")
12271254 else false)
12281255 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12291256 else 0
1230- $Tuple5(ge, p, gp, gg, go)
1257+ $Tuple5(gh, p, gs, gj, gr)
12311258 }
12321259 }
12331260 }
12341261 }
12351262
12361263
1237-func gq (fR,fS,fZ,ga) = {
1238- let aT = toString(fR)
1239- let eG = fY(aT, fZ, ga)
1240- let gk = aQ(eG._2)
1241- let eK = aO(eG._2)
1242- let fv = eJ(eK)
1243- let gr = split(fv[ar], "_")
1244- let gs = makeString(cX(true, gr, cd), "_")
1245- let dt = de(fv[as], eG._5)
1246- if ((0 >= eG._1))
1247- then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0)
1248- else {
1249- let gt = fQ(fR, fS)
1250- let fX = gt._2._1
1251- $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3)
1252- }
1253- }
1254-
1255-
1256-func gu (aF,gv) = {
1257- let fe = valueOrElse(getInteger(ay(aF)), 0)
1258- let gw = valueOrElse(getInteger(az(R, aF)), 0)
1259- let gx = (fe / 6)
1260- let gy = (fe / 7)
1261- ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5)))
1262- }
1263-
1264-
1265-func gz (b,gA,gB) = {
1266- let gC = if ((gA == cx))
1267- then $Tuple2(gB, valueOrElse(getString(aN(b)), ""))
1264+func gt (fU,fV,gc,gd) = {
1265+ let aT = toString(fU)
1266+ let eJ = gb(aT, gc, gd)
1267+ let gn = aQ(eJ._2)
1268+ let eN = aO(eJ._2)
1269+ let fy = eM(eN)
1270+ let gu = split(fy[ar], "_")
1271+ let gv = makeString(cX(true, gu, cd), "_")
1272+ let dt = de(fy[as], eJ._5)
1273+ if ((0 >= eJ._1))
1274+ then $Tuple3([IntegerEntry(gn, 0), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":"))], "", 0)
1275+ else {
1276+ let gw = fT(fU, fV)
1277+ let ga = gw._2._1
1278+ $Tuple3((((gw._1 :+ StringEntry(aP(eJ._2), makeString([gw._2._2, "L", ga], "_"))) :+ IntegerEntry(gn, eJ._1)) :+ StringEntry(eN, makeString([fy[ap], fy[aq], gv, dt], ":"))), ga, eJ._3)
1279+ }
1280+ }
1281+
1282+
1283+func gx (aF,gy) = {
1284+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1285+ let gz = valueOrElse(getInteger(az(R, aF)), 0)
1286+ let gA = (fh / 6)
1287+ let gB = (fh / 7)
1288+ ((T + fraction(T, ((fh + gA) + (2 * gB)), 5)) + fraction(T, gz, (gy * 5)))
1289+ }
1290+
1291+
1292+func gC (b,gD,gE) = {
1293+ let gF = if ((gD == cx))
1294+ then $Tuple2(gE, valueOrElse(getString(aN(b)), ""))
12681295 else {
12691296 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1270- let gD = valueOrElse(getString(aP(p)), W)
1271- let gE = split(value(gD), "_")
1272- if ((gE[aV] != "L"))
1273- then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
1274- else $Tuple2(gE[aW], p)
1275- }
1276- let aF = gC._1
1277- let gF = gC._2
1278- let gG = value(assetInfo(fromBase58String(aF)))
1279- let gH = ax(aF)
1280- let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked"))
1281- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1282- if ((gJ != b))
1297+ let gG = valueOrElse(getString(aP(p)), W)
1298+ let gH = split(value(gG), "_")
1299+ if ((gH[aV] != "L"))
1300+ then throw((("Duck location type is " + gH[aV]) + ", but should be L"))
1301+ else $Tuple2(gH[aW], p)
1302+ }
1303+ let aF = gF._1
1304+ let gI = gF._2
1305+ let gJ = value(assetInfo(fromBase58String(aF)))
1306+ let gK = ax(aF)
1307+ let gL = valueOrErrorMessage(getInteger(gK), (("Land " + gJ.name) + " is not staked"))
1308+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
1309+ if ((gM != b))
12831310 then throw((P + " is not yours"))
12841311 else {
1285- let gK = split(gG.description, "_")
1286- $Tuple4(gF, aF, gK, gI)
1287- }
1288- }
1289-
1290-
1291-func gL (b,fr,gA,gB) = if ((0 > fr))
1312+ let gN = split(gJ.description, "_")
1313+ $Tuple4(gI, aF, gN, gL)
1314+ }
1315+ }
1316+
1317+
1318+func gO (b,fu,gD,gE) = if ((0 > fu))
12921319 then throw("Negative amount")
12931320 else {
1294- let dF = gz(b, gA, gB)
1295- let bU = dF._3[bI]
1296- let dX = ed(dF._3[bJ])
1297- let eh = (lastBlock.timestamp - dF._4)
1298- if ((0 > eh))
1299- then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp)))
1321+ let dI = gC(b, gD, gE)
1322+ let bU = dI._3[bI]
1323+ let ea = eg(dI._3[bJ])
1324+ let ek = (lastBlock.timestamp - dI._4)
1325+ if ((0 > ek))
1326+ then throw(((("Saved timestamp is in future, saved = " + toString(dI._4)) + ", current = ") + toString(lastBlock.timestamp)))
13001327 else {
1301- let gv = bT(bU)
1302- let gM = gu(dF._2, gv)
1303- let gN = fraction(eh, (gM * gv), U)
1304- if ((fr > gN))
1305- then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr)))
1328+ let gy = bT(bU)
1329+ let gP = gx(dI._2, gy)
1330+ let gQ = fraction(ek, (gP * gy), U)
1331+ if ((fu > gQ))
1332+ then throw(((("Not enough resources, available = " + toString(gQ)) + ", requested = ") + toString(fu)))
13061333 else {
1307- let gO = fraction((gN - fr), U, (gM * gv))
1308- let gP = (lastBlock.timestamp - gO)
1309- let fd = (gv / bj)
1310- let ep = el(dX, (eh - gO), fd, gM)
1311- let fc = aE(dF._2)
1312- let fe = valueOrElse(getInteger(ay(dF._2)), 0)
1313- let eP = fb(fc, fd, fe)
1314- let fk = split(eP[ak], "_")
1315- let eq = parseIntValue(fk[an])
1316- if (if ((gA == cx))
1317- then (fr > eq)
1334+ let gR = fraction((gQ - fu), U, (gP * gy))
1335+ let gS = (lastBlock.timestamp - gR)
1336+ let fg = (gy / bj)
1337+ let es = eo(ea, (ek - gR), fg, gP)
1338+ let ff = aE(dI._2)
1339+ let fh = valueOrElse(getInteger(ay(dI._2)), 0)
1340+ let eS = fe(ff, fg, fh)
1341+ let fn = split(eS[ak], "_")
1342+ let et = parseIntValue(fn[an])
1343+ if (if ((gD == cx))
1344+ then (fu > et)
13181345 else false)
1319- then throw((("Only " + toString(eq)) + " space left in warehouse"))
1346+ then throw((("Only " + toString(et)) + " space left in warehouse"))
13201347 else {
1321- let eK = aO(dF._1)
1322- let fv = eJ(eK)
1323- let eo = split(fv[aq], "_")
1324- let en = split(eP[ah], "_")
1325- let gQ = if ((gA == cx))
1326- then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2))
1327- else if ((gA == cy))
1328- then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an]))
1348+ let eN = aO(dI._1)
1349+ let fy = eM(eN)
1350+ let er = split(fy[aq], "_")
1351+ let eq = split(eS[ah], "_")
1352+ let gT = if ((gD == cx))
1353+ then $Tuple4(ei(eq, ea, (ek - gR), fg, gP), fy[aq], (parseIntValue(fn[am]) + es._2), (parseIntValue(fn[an]) - es._2))
1354+ else if ((gD == cy))
1355+ then $Tuple4(eS[ah], ei(er, ea, (ek - gR), fg, gP), parseIntValue(fn[am]), parseIntValue(fn[an]))
13291356 else {
1330- let gR = em(en, eo, ep, eq)
1331- let gS = min([parseIntValue(fk[an]), ep._2])
1332- $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS))
1357+ let gU = ep(eq, er, es, et)
1358+ let gV = min([parseIntValue(fn[an]), es._2])
1359+ $Tuple4(gU._1, gU._2, (parseIntValue(fn[am]) + gV), (parseIntValue(fn[an]) - gV))
13331360 }
1334- let gT = gQ._1
1335- let gU = gQ._2
1336- let gV = gQ._3
1337- let gW = gQ._4
1338- $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")])
1361+ let gW = gT._1
1362+ let gX = gT._2
1363+ let gY = gT._3
1364+ let gZ = gT._4
1365+ $Tuple5([IntegerEntry(ax(dI._2), gS), IntegerEntry(aB(P, dI._2, b), gS)], eN, [fy[ap], gX, fy[ar], fy[as]], ff, [eS[ag], gW, eS[ai], eS[aj], makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")])
13391366 }
13401367 }
13411368 }
13421369 }
13431370
13441371
1345-func gX (b,aF,gv,gA) = {
1346- let gH = ax(aF)
1347- let gI = value(getInteger(gH))
1348- let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv)
1349- gL(b, gN, gA, aF)
1350- }
1351-
1352-
1353-func gY (cY,fR,gZ,aF) = {
1354- let b = toString(fR)
1355- let dF = gz(b, cz, aF)
1356- let gv = bT(dF._3[bI])
1357- let ha = ay(dF._2)
1358- let hb = valueOrElse(getInteger(ha), 0)
1359- if ((hb >= 3))
1372+func ha (b,aF,gy,gD) = {
1373+ let gK = ax(aF)
1374+ let gL = value(getInteger(gK))
1375+ let gQ = (fraction((lastBlock.timestamp - gL), gx(aF, gy), U) * gy)
1376+ gO(b, gQ, gD, aF)
1377+ }
1378+
1379+
1380+func hb (cY,fU,hc,aF) = {
1381+ let b = toString(fU)
1382+ let dI = gC(b, cz, aF)
1383+ let gy = bT(dI._3[bI])
1384+ let hd = ay(dI._2)
1385+ let he = valueOrElse(getInteger(hd), 0)
1386+ if ((he >= 3))
13601387 then throw("Currently max infrastructure level = 3")
13611388 else {
1362- let O = (hb + 1)
1363- let hc = fraction(cc, (gv * O), bj)
1389+ let O = (he + 1)
1390+ let hf = fraction(cc, (gy * O), bj)
13641391 if (if (!(cY))
1365- then (gZ != hc)
1392+ then (hc != hf)
13661393 else false)
1367- then throw(("Payment attached should be " + toString(hc)))
1394+ then throw(("Payment attached should be " + toString(hf)))
13681395 else {
1369- let eK = aO(dF._1)
1370- let fv = eJ(eK)
1371- let gr = split(fv[ar], "_")
1372- let hd = fraction(be, (gv * O), bj)
1373- let gs = makeString(cX(cY, gr, hd), "_")
1374- let he = gX(b, dF._2, gv, cz)
1375- let hf = he._5
1376- let hg = eM(hf[ag])
1377- let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_")
1378- let hi = eM(hh)
1379- let fk = split(hf[ak], "_")
1380- let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_")
1381- $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd)
1396+ let eN = aO(dI._1)
1397+ let fy = eM(eN)
1398+ let gu = split(fy[ar], "_")
1399+ let hg = fraction(be, (gy * O), bj)
1400+ let gv = makeString(cX(cY, gu, hg), "_")
1401+ let hh = ha(b, dI._2, gy, cz)
1402+ let hi = hh._5
1403+ let hj = eP(hi[ag])
1404+ let hk = makeString([split(hi[ag], "_")[0], toString(O)], "_")
1405+ let hl = eP(hk)
1406+ let fn = split(hi[ak], "_")
1407+ let hm = makeString([fn[al], fn[am], toString(((parseIntValue(fn[an]) + hl) - hj)), toString(hl)], "_")
1408+ $Tuple3(([IntegerEntry(hd, O), IntegerEntry(cr(dI._2, b), O), StringEntry(eN, makeString([fy[ap], hh._3[aq], gv, fy[as]], ":")), StringEntry(hh._4, makeString([hk, hi[ah], hi[ai], hi[aj], hm], ":"))] ++ hh._1), O, hg)
13821409 }
13831410 }
13841411 }
13851412
13861413
1387-func hk (p,hl) = if (!(aZ))
1414+func hn (p,ho) = if (!(aZ))
13881415 then $Tuple2(nil, 0)
13891416 else {
1390- let hm = r(p)
1391- let hn = q(p)
1392- let I = valueOrElse(getInteger(bD, hn), 0)
1393- let N = (I + hl)
1394- let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1395- let hp = s(p)
1396- $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
1417+ let hp = r(p)
1418+ let hq = q(p)
1419+ let I = valueOrElse(getInteger(bD, hq), 0)
1420+ let N = (I + ho)
1421+ let hr = L(valueOrElse(getInteger(bD, hp), 0), N)
1422+ let hs = s(p)
1423+ $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N)
13971424 }
13981425
13991426
1400-func hq (b,hl) = if (!(aZ))
1427+func ht (b,ho) = if (!(aZ))
14011428 then $Tuple2(nil, 0)
14021429 else {
1403- let hm = v(b)
1404- let hn = u(b)
1405- let I = valueOrElse(getInteger(bD, hn), 0)
1406- let N = (I + hl)
1407- let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1408- let hp = w(b)
1409- $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
1430+ let hp = v(b)
1431+ let hq = u(b)
1432+ let I = valueOrElse(getInteger(bD, hq), 0)
1433+ let N = (I + ho)
1434+ let hr = L(valueOrElse(getInteger(bD, hp), 0), N)
1435+ let hs = w(b)
1436+ $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N)
14101437 }
14111438
14121439
1413-func hr (b) = {
1440+func hu (b) = {
14141441 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1415- let hs = aI(b)
1416- let ht = getString(hs)
1417- if (!(isDefined(ht)))
1442+ let hv = aI(b)
1443+ let hw = getString(hv)
1444+ if (!(isDefined(hw)))
14181445 then throw("You are not eligible for ONBOARD artifact")
14191446 else {
1420- let hu = aK(b)
1421- let hv = getString(hu)
1422- if (isDefined(hv))
1423- then throw(("You already used your ONBOARD artifact on duck " + value(hv)))
1447+ let hx = aK(b)
1448+ let hy = getString(hx)
1449+ if (isDefined(hy))
1450+ then throw(("You already used your ONBOARD artifact on duck " + value(hy)))
14241451 else {
1425- let hw = aJ(p)
1426- let hx = getString(hw)
1427- if (isDefined(hx))
1428- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx)))
1429- else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1)
1452+ let hz = aJ(p)
1453+ let hA = getString(hz)
1454+ if (isDefined(hA))
1455+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hA)))
1456+ else ([StringEntry(hx, p), StringEntry(hz, b)] ++ hn(p, F)._1)
14301457 }
14311458 }
14321459 }
14331460
14341461
1435-func hy (b,gB) = {
1436- let dF = gz(b, cz, gB)
1437- let aF = dF._2
1438- let gv = bT(dF._3[bI])
1439- let hz = az(R, aF)
1440- if ((valueOrElse(getInteger(hz), 0) > 0))
1462+func hB (b,gE) = {
1463+ let dI = gC(b, cz, gE)
1464+ let aF = dI._2
1465+ let gy = bT(dI._3[bI])
1466+ let hC = az(R, aF)
1467+ if ((valueOrElse(getInteger(hC), 0) > 0))
14411468 then throw("Presale artifact is already activated")
1442- else if ((parseIntValue(dF._3[bH]) > cl))
1469+ else if ((parseIntValue(dI._3[bH]) > cl))
14431470 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14441471 else {
1445- let he = gX(b, aF, gv, cz)
1446- ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":")))
1472+ let hh = ha(b, aF, gy, cz)
1473+ ((((hh._1 :+ IntegerEntry(hC, gy)) :+ IntegerEntry(cs(R, aF, b), gy)) :+ StringEntry(hh._2, makeString(hh._3, ":"))) :+ StringEntry(hh._4, makeString(hh._5, ":")))
14471474 }
14481475 }
14491476
14501477
1451-func hA (hB,O,hC,b,hD,fS,hE) = {
1478+func hD (hE,O,hF,b,hG,fV,hH) = {
14521479 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1453- func hF (cL,aF) = {
1454- let gG = value(assetInfo(fromBase58String(aF)))
1455- let gH = ax(aF)
1456- let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked"))
1457- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1458- if ((gJ != b))
1480+ func hI (cL,aF) = {
1481+ let gJ = value(assetInfo(fromBase58String(aF)))
1482+ let gK = ax(aF)
1483+ let gL = valueOrErrorMessage(getInteger(gK), (("NFT " + gJ.name) + " is not staked"))
1484+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
1485+ if ((gM != b))
14591486 then throw((P + " is not yours"))
14601487 else {
1461- let gK = split(gG.description, "_")
1462- let fV = gK[bK]
1488+ let gN = split(gJ.description, "_")
1489+ let fY = gN[bK]
14631490 if (if ((cL._3 != ""))
1464- then (cL._3 != fV)
1491+ then (cL._3 != fY)
14651492 else false)
14661493 then throw("Lands should be on the same continent to merge")
14671494 else {
1468- let bU = gK[bI]
1469- let hG = cL._1
1470- let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed")
1471- let hH = (take(hG, eb) + drop(hG, (eb + 1)))
1472- let gv = bT(bU)
1473- let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1474- let fe = valueOrElse(getInteger(ay(aF)), 0)
1475- let hJ = {
1495+ let bU = gN[bI]
1496+ let hJ = cL._1
1497+ let ee = valueOrErrorMessage(indexOf(hJ, bU), "You haven't passed all the lands needed")
1498+ let hK = (take(hJ, ee) + drop(hJ, (ee + 1)))
1499+ let gy = bT(bU)
1500+ let hL = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1501+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1502+ let hM = {
14761503 let bc = bU
14771504 if (("S" == bc))
14781505 then 3
14841511 then 6
14851512 else throw("Only S, M, L, XL can merge")
14861513 }
1487- if ((fe != hJ))
1514+ if ((fh != hM))
14881515 then throw("All lands should be maxed to merge")
14891516 else {
1490- let co = gK[bH]
1491- let dX = ed(gK[bJ])
1492- let eh = (lastBlock.timestamp - gI)
1493- if ((0 > eh))
1494- then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp)))
1517+ let co = gN[bH]
1518+ let ea = eg(gN[bJ])
1519+ let ek = (lastBlock.timestamp - gL)
1520+ if ((0 > ek))
1521+ then throw(((("Saved timestamp is in future, saved = " + toString(gL)) + ", current = ") + toString(lastBlock.timestamp)))
14951522 else {
1496- let gM = gu(aF, gv)
1497- let fd = (gv / bj)
1498- let gU = ef(split(cL._4, "_"), dX, eh, fd, gM)
1499- let cV = dV(split(cL._6, "_"), dX, fd, -1)
1500- let hK = cL._7
1501- let bB = indexOf(hK, aF)
1523+ let gP = gx(aF, gy)
1524+ let fg = (gy / bj)
1525+ let gX = ei(split(cL._4, "_"), ea, ek, fg, gP)
1526+ let cV = dY(split(cL._6, "_"), ea, fg, -1)
1527+ let hN = cL._7
1528+ let bB = indexOf(hN, aF)
15021529 if (!(isDefined(bB)))
15031530 then throw(("Your staked lands don't contain " + aF))
15041531 else {
1505- let hL = aw(aF)
1506- let hM = valueOrElse(getString(hL), "")
1507- $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv))
1532+ let hO = aw(aF)
1533+ let hP = valueOrElse(getString(hO), "")
1534+ $Tuple8(hK, hL, fY, gX, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hO)) :+ DeleteEntry(cp(hP))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hN, value(bB)), (cL._8 + gy))
15081535 }
15091536 }
15101537 }
15121539 }
15131540 }
15141541
1515- let eK = aO(p)
1516- let fv = eJ(eK)
1517- let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1518- let hO = bM(b)
1519- let hP = getString(hO)
1520- let hQ = if (isDefined(hP))
1521- then split_51C(value(hP), "_")
1542+ let eN = aO(p)
1543+ let fy = eM(eN)
1544+ let hQ = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1545+ let hR = bM(b)
1546+ let hS = getString(hR)
1547+ let hT = if (isDefined(hS))
1548+ then split_51C(value(hS), "_")
15221549 else nil
15231550 let cW = {
1524- let cN = hD
1551+ let cN = hG
15251552 let cO = size(cN)
1526- let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0)
1553+ let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0)
15271554 func cQ (cR,cS) = if ((cS >= cO))
15281555 then cR
1529- else hF(cR, cN[cS])
1556+ else hI(cR, cN[cS])
15301557
15311558 func cT (cR,cS) = if ((cS >= cO))
15321559 then cR
15341561
15351562 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15361563 }
1537- let fV = cW._3
1538- let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV))
1539- let ee = eD(ew(toBigInt(fS)), eF)
1540- let fU = valueOrElse(getInteger(cm()), (cl + 1))
1541- let hR = toString(fU)
1542- let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false)
1543- let av = calculateAssetId(fW)
1544- let hS = toBase58String(av)
1545- let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_")
1546- let hT = bN(b)
1547- let hU = valueOrElse(getInteger(hT), 0)
1564+ let fY = cW._3
1565+ let eI = valueOrErrorMessage(indexOf(aa, fY), ("Unknown continent: " + fY))
1566+ let eh = eG(ez(toBigInt(fV)), eI)
1567+ let fX = valueOrElse(getInteger(cm()), (cl + 1))
1568+ let hU = toString(fX)
1569+ let fZ = Issue(cE(hU, hE), makeString([hU, hE, eh, fY], "_"), 1, 0, false)
1570+ let av = calculateAssetId(fZ)
1571+ let hV = toBase58String(av)
1572+ let gv = makeString(cX((hH > 0), split(fy[ar], "_"), hH), "_")
1573+ let hW = bN(b)
1574+ let hX = valueOrElse(getInteger(hW), 0)
15481575 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1549- then StringEntry(hO, makeString_11C(cW._7, "_"))
1550- else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU))
1576+ then StringEntry(hR, makeString_11C(cW._7, "_"))
1577+ else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX))
15511578 then 0
1552- else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS)
1553- }
1554-
1555-
1556-func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0)
1557-
1558-
1559-func hW (b,hD,fS,cY,gZ) = {
1560- let hc = (cc * 4)
1579+ else (hX - cW._8))) :+ IntegerEntry(cm(), (fX + 1))) :+ fZ) :+ StringEntry(cn(hU), hV)) :+ StringEntry(au(hV), b)) :+ StringEntry(ct(hU), b)) :+ IntegerEntry(az(R, hV), cW._2)) :+ IntegerEntry(cs(R, hV, b), cW._2)) :+ IntegerEntry(ay(hV), O)) :+ IntegerEntry(cr(hV, b), O)) :+ StringEntry(eN, makeString([fy[ap], cW._4, gv, fy[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fY, "L", hV], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hV)
1580+ }
1581+
1582+
1583+func hY (b,hG,fV) = hD("M", 3, "SSSS", b, hG, fV, 0)
1584+
1585+
1586+func hZ (b,hG,fV,cY,hc) = {
1587+ let hf = (cc * 4)
15611588 if (if (!(cY))
1562- then (gZ != hc)
1589+ then (hc != hf)
15631590 else false)
1564- then throw(("Payment attached should be " + toString(hc)))
1565- else hA("L", 4, "SMM", b, hD, fS, (be * 4))
1566- }
1567-
1568-
1569-func hX (b,hD,fS,cY,gZ) = {
1570- let hc = (cc * 47)
1591+ then throw(("Payment attached should be " + toString(hf)))
1592+ else hD("L", 4, "SMM", b, hG, fV, (be * 4))
1593+ }
1594+
1595+
1596+func ia (b,hG,fV,cY,hc) = {
1597+ let hf = (cc * 47)
15711598 if (if (!(cY))
1572- then (gZ != hc)
1599+ then (hc != hf)
15731600 else false)
1574- then throw(("Payment attached should be " + toString(hc)))
1575- else hA("XL", 5, "SSSML", b, hD, fS, (be * 47))
1576- }
1577-
1578-
1579-func hY (b,hD,fS,cY,gZ) = {
1580- let hc = (cc * 54)
1601+ then throw(("Payment attached should be " + toString(hf)))
1602+ else hD("XL", 5, "SSSML", b, hG, fV, (be * 47))
1603+ }
1604+
1605+
1606+func ib (b,hG,fV,cY,hc) = {
1607+ let hf = (cc * 54)
15811608 if (if (!(cY))
1582- then (gZ != hc)
1609+ then (hc != hf)
15831610 else false)
1584- then throw(("Payment attached should be " + toString(hc)))
1585- else hA("XXL", 6, "LXL", b, hD, fS, (be * 54))
1586- }
1587-
1588-
1589-func hZ (cY,b,gZ,hD,fS) = {
1590- let ia = {
1591- let bc = size(hD)
1611+ then throw(("Payment attached should be " + toString(hf)))
1612+ else hD("XXL", 6, "LXL", b, hG, fV, (be * 54))
1613+ }
1614+
1615+
1616+func ic (cY,b,hc,hG,fV) = {
1617+ let id = {
1618+ let bc = size(hG)
15921619 if ((4 == bc))
1593- then hV(b, hD, fS)
1620+ then hY(b, hG, fV)
15941621 else if ((3 == bc))
1595- then hW(b, hD, fS, cY, gZ)
1622+ then hZ(b, hG, fV, cY, hc)
15961623 else if ((5 == bc))
1597- then hX(b, hD, fS, cY, gZ)
1624+ then ia(b, hG, fV, cY, hc)
15981625 else if ((2 == bc))
1599- then hY(b, hD, fS, cY, gZ)
1626+ then ib(b, hG, fV, cY, hc)
16001627 else throw("Unknown merge")
16011628 }
1602- ia
1603- }
1604-
1605-
1606-func ib (eb) = if (if ((eb.originCaller != bC))
1629+ id
1630+ }
1631+
1632+
1633+func ie (ee) = if (if ((ee.originCaller != bC))
16071634 then valueOrElse(getBoolean(aR()), false)
16081635 else false)
16091636 then throw("Contracts are under maintenance")
1610- else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId))
1611-
1612-
1613-@Callable(eb)
1614-func constructorV1 (ic) = if ((eb.caller != this))
1637+ else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId))
1638+
1639+
1640+@Callable(ee)
1641+func constructorV1 (if) = if ((ee.caller != this))
16151642 then throw("Permission denied")
1616- else [StringEntry(bw(), ic)]
1617-
1618-
1619-
1620-@Callable(eb)
1621-func setBlocked (id) = if ((eb.caller != this))
1643+ else [StringEntry(bw(), if)]
1644+
1645+
1646+
1647+@Callable(ee)
1648+func setBlocked (ig) = if ((ee.caller != this))
16221649 then throw("permission denied")
1623- else [BooleanEntry(aR(), id)]
1624-
1625-
1626-
1627-@Callable(eb)
1650+ else [BooleanEntry(aR(), ig)]
1651+
1652+
1653+
1654+@Callable(ee)
16281655 func stakeLand () = {
1629- let ie = ib(eb)
1630- if ((size(eb.payments) != 1))
1656+ let ih = ie(ee)
1657+ if ((size(ee.payments) != 1))
16311658 then throw("Exactly one payment required")
16321659 else {
1633- let if = value(eb.payments[0])
1634- let av = value(if.assetId)
1635- let bp = toString(eb.caller)
1636- if ((if.amount != 1))
1660+ let ii = value(ee.payments[0])
1661+ let av = value(ii.assetId)
1662+ let bp = toString(ee.caller)
1663+ if ((ii.amount != 1))
16371664 then throw((("NFT " + P) + " token should be attached as payment"))
16381665 else {
1639- let gG = value(assetInfo(av))
1640- if ((gG.issuer != this))
1666+ let gJ = value(assetInfo(av))
1667+ if ((gJ.issuer != this))
16411668 then throw("Unknown issuer of token")
1642- else if (!(contains(gG.name, P)))
1669+ else if (!(contains(gJ.name, P)))
16431670 then throw((("Only NFT " + P) + " tokens are accepted"))
16441671 else {
1645- let ig = drop(gG.name, 4)
1646- let co = if (contains(ig, "XXL"))
1647- then dropRight(ig, 3)
1648- else if (contains(ig, "XL"))
1649- then dropRight(ig, 2)
1650- else dropRight(ig, 1)
1672+ let ij = drop(gJ.name, 4)
1673+ let co = if (contains(ij, "XXL"))
1674+ then dropRight(ij, 3)
1675+ else if (contains(ij, "XL"))
1676+ then dropRight(ij, 2)
1677+ else dropRight(ij, 1)
16511678 if (!(isDefined(parseInt(co))))
1652- then throw(("Cannot parse land number from " + gG.name))
1679+ then throw(("Cannot parse land number from " + gJ.name))
16531680 else {
16541681 let aF = toBase58String(av)
1655- let gH = ax(aF)
1656- if (isDefined(getInteger(gH)))
1657- then throw((("NFT " + gG.name) + " is already staked"))
1682+ let gK = ax(aF)
1683+ if (isDefined(getInteger(gK)))
1684+ then throw((("NFT " + gJ.name) + " is already staked"))
16581685 else {
1659- let gK = split(gG.description, "_")
1660- let dX = ed(gK[bJ])
1661- let gv = bT(gK[bI])
1662- let cV = ec(dX, (gv / bj), 1)
1663- let gw = valueOrElse(getInteger(az(R, aF)), 0)
1664- let hO = bM(bp)
1665- let hP = getString(hO)
1666- let hK = if (isDefined(hP))
1667- then split_51C(value(hP), "_")
1686+ let gN = split(gJ.description, "_")
1687+ let ea = eg(gN[bJ])
1688+ let gy = bT(gN[bI])
1689+ let cV = ef(ea, (gy / bj), 1)
1690+ let gz = valueOrElse(getInteger(az(R, aF)), 0)
1691+ let hR = bM(bp)
1692+ let hS = getString(hR)
1693+ let hN = if (isDefined(hS))
1694+ then split_51C(value(hS), "_")
16681695 else nil
1669- if (containsElement(hK, aF))
1696+ if (containsElement(hN, aF))
16701697 then throw(("Your staked lands already contain " + aF))
16711698 else {
1672- let fe = valueOrElse(getInteger(ay(aF)), 0)
1673- let hT = bN(bp)
1674- let ih = valueOrElse(getInteger(hT), 0)
1675- let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1676- $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii)
1699+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1700+ let hW = bN(bp)
1701+ let ik = valueOrElse(getInteger(hW), 0)
1702+ let il = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1703+ $Tuple2([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hR, makeString_11C((hN :+ aF), "_")), IntegerEntry(hW, (ik + gy)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gz), IntegerEntry(cr(aF, bp), fh), StringEntry(bL(), cV), ih], il)
16771704 }
16781705 }
16791706 }
16841711
16851712
16861713
1687-@Callable(eb)
1688-func unstakeLand (gB) = {
1689- let ie = ib(eb)
1690- if ((size(eb.payments) != 0))
1714+@Callable(ee)
1715+func unstakeLand (gE) = {
1716+ let ih = ie(ee)
1717+ if ((size(ee.payments) != 0))
16911718 then throw("No payments required")
16921719 else {
1693- let b = toString(eb.caller)
1694- let dF = gz(b, cy, gB)
1695- let aF = dF._2
1696- let hO = bM(b)
1697- let dX = ed(dF._3[bJ])
1698- let gv = bT(dF._3[bI])
1699- let cV = ec(dX, (gv / bj), -1)
1700- let he = gX(b, aF, gv, cy)
1701- let hK = split_51C(valueOrElse(getString(hO), ""), "_")
1702- let bB = indexOf(hK, aF)
1720+ let b = toString(ee.caller)
1721+ let dI = gC(b, cy, gE)
1722+ let aF = dI._2
1723+ let hR = bM(b)
1724+ let ea = eg(dI._3[bJ])
1725+ let gy = bT(dI._3[bI])
1726+ let cV = ef(ea, (gy / bj), -1)
1727+ let hh = ha(b, aF, gy, cy)
1728+ let hN = split_51C(valueOrElse(getString(hR), ""), "_")
1729+ let bB = indexOf(hN, aF)
17031730 if (!(isDefined(bB)))
17041731 then throw(("Your staked lands don't contain " + aF))
17051732 else {
1706- let ij = lastBlock.timestamp
1707- let ik = valueOrElse(getInteger(bF, aS(b)), 0)
1708- if ((ik >= ij))
1709- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik)))
1733+ let im = lastBlock.timestamp
1734+ let in = valueOrElse(getInteger(bF, aS(b)), 0)
1735+ if ((in >= im))
1736+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(in)))
17101737 else {
1711- let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1712- if ((il > ij))
1713- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il)))
1738+ let io = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1739+ if ((io > im))
1740+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(io)))
17141741 else {
1715- let hT = bN(b)
1716- let hU = valueOrElse(getInteger(hT), 0)
1717- let im = if ((gv > hU))
1742+ let hW = bN(b)
1743+ let hX = valueOrElse(getInteger(hW), 0)
1744+ let ip = if ((gy > hX))
17181745 then 0
1719- else (hU - gv)
1720- let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1721- $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1))
1722- then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_"))
1723- else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii)
1746+ else (hX - gy)
1747+ let il = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1748+ $Tuple2([ScriptTransfer(ee.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hh._2, makeString(hh._3, ":")), if ((size(hN) > 1))
1749+ then StringEntry(hR, makeString_11C(removeByIndex(hN, value(bB)), "_"))
1750+ else DeleteEntry(hR), IntegerEntry(hW, ip), ih], il)
17241751 }
17251752 }
17261753 }
17291756
17301757
17311758
1732-@Callable(eb)
1759+@Callable(ee)
17331760 func stakeDuck () = {
1734- let ie = ib(eb)
1735- if ((size(eb.payments) != 1))
1761+ let ih = ie(ee)
1762+ if ((size(ee.payments) != 1))
17361763 then throw("Exactly one payment required")
17371764 else {
1738- let if = value(eb.payments[0])
1739- let av = value(if.assetId)
1740- let bp = toString(eb.caller)
1741- if ((if.amount != 1))
1765+ let ii = value(ee.payments[0])
1766+ let av = value(ii.assetId)
1767+ let bp = toString(ee.caller)
1768+ if ((ii.amount != 1))
17421769 then throw((("NFT " + Q) + " token should be attached as payment"))
17431770 else {
1744- let gG = value(assetInfo(av))
1745- if (if ((gG.issuer != bV))
1746- then (gG.issuer != bW)
1771+ let gJ = value(assetInfo(av))
1772+ if (if ((gJ.issuer != bV))
1773+ then (gJ.issuer != bW)
17471774 else false)
17481775 then throw((("Unknown issuer of " + Q) + " token"))
1749- else if (!(contains(gG.name, Q)))
1776+ else if (!(contains(gJ.name, Q)))
17501777 then throw((("Only NFT " + Q) + " tokens are accepted"))
17511778 else {
1752- let in = toBase58String(av)
1753- let gH = ax(in)
1754- if (isDefined(getInteger(gH)))
1755- then throw((("NFT " + gG.name) + " is already staked"))
1779+ let iq = toBase58String(av)
1780+ let gK = ax(iq)
1781+ if (isDefined(getInteger(gK)))
1782+ then throw((("NFT " + gJ.name) + " is already staked"))
17561783 else if (isDefined(getString(aN(bp))))
1757- then throw(("You already staked one duck: " + gG.name))
1784+ then throw(("You already staked one duck: " + gJ.name))
17581785 else {
1759- let io = aP(in)
1760- let ip = getString(io)
1761- let eK = aO(in)
1762- let iq = getString(eK)
1763- let gk = aQ(in)
1764- let gl = J(valueOrElse(getInteger(r(in)), 0))
1765- let ir = valueOrElse(getInteger(gk), gl)
1766- ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip))
1786+ let ir = aP(iq)
1787+ let is = getString(ir)
1788+ let eN = aO(iq)
1789+ let it = getString(eN)
1790+ let gn = aQ(iq)
1791+ let go = J(valueOrElse(getInteger(r(iq)), 0))
1792+ let iu = valueOrElse(getInteger(gn), go)
1793+ ([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iq), bp), StringEntry(aN(bp), iq)] ++ (if (isDefined(is))
17671794 then nil
1768- else ([StringEntry(io, W)] ++ (if (isDefined(iq))
1795+ else ([StringEntry(ir, W)] ++ (if (isDefined(it))
17691796 then nil
1770- else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie)))))
1797+ else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih)))))
17711798 }
17721799 }
17731800 }
17761803
17771804
17781805
1779-@Callable(eb)
1780-func unstakeDuck (in) = {
1781- let ie = ib(eb)
1782- if ((size(eb.payments) != 0))
1806+@Callable(ee)
1807+func unstakeDuck (iq) = {
1808+ let ih = ie(ee)
1809+ if ((size(ee.payments) != 0))
17831810 then throw("No payments required")
17841811 else {
1785- let av = fromBase58String(in)
1786- let bp = toString(eb.caller)
1787- let gG = value(assetInfo(av))
1788- let gH = ax(toBase58String(av))
1789- if (!(isDefined(getInteger(gH))))
1790- then throw((("NFT " + gG.name) + " is not staked"))
1812+ let av = fromBase58String(iq)
1813+ let bp = toString(ee.caller)
1814+ let gJ = value(assetInfo(av))
1815+ let gK = ax(toBase58String(av))
1816+ if (!(isDefined(getInteger(gK))))
1817+ then throw((("NFT " + gJ.name) + " is not staked"))
17911818 else if (!(isDefined(getString(aN(bp)))))
1792- then throw((("The duck " + gG.name) + " is not staked"))
1819+ then throw((("The duck " + gJ.name) + " is not staked"))
17931820 else {
1794- let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned"))
1795- if ((gJ != bp))
1821+ let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned"))
1822+ if ((gM != bp))
17961823 then throw("Staked NFT is not yours")
17971824 else {
1798- let gk = aQ(in)
1799- let gl = J(valueOrElse(getInteger(r(in)), 0))
1800- let is = valueOrElse(getInteger(gk), gl)
1801- if ((gl > is))
1802- then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking"))
1803- else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie]
1825+ let gn = aQ(iq)
1826+ let go = J(valueOrElse(getInteger(r(iq)), 0))
1827+ let iv = valueOrElse(getInteger(gn), go)
1828+ if ((go > iv))
1829+ then throw((("Please heal your duck to " + toString(go)) + "hp before unstaking"))
1830+ else [ScriptTransfer(ee.caller, 1, av), DeleteEntry(gK), DeleteEntry(gn), DeleteEntry(aP(iq)), DeleteEntry(aM(iq)), DeleteEntry(aB(Q, iq, bp)), DeleteEntry(aN(bp)), ih]
18041831 }
18051832 }
18061833 }
18081835
18091836
18101837
1811-@Callable(eb)
1812-func claimRes (fr,it) = {
1813- let ie = ib(eb)
1814- if ((size(eb.payments) != 0))
1838+@Callable(ee)
1839+func claimRes (fu,iw) = {
1840+ let ih = ie(ee)
1841+ if ((size(ee.payments) != 0))
18151842 then throw("No payments required")
18161843 else {
1817- let b = toString(eb.originCaller)
1818- let dd = gL(b, fr, cy, it)
1844+ let b = toString(ee.originCaller)
1845+ let dd = gO(b, fu, cy, iw)
18191846 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1820- $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq])
1821- }
1822- }
1823-
1824-
1825-
1826-@Callable(eb)
1827-func claimResToWH (fr,it) = {
1828- let ie = ib(eb)
1829- if ((size(eb.payments) != 0))
1847+ $Tuple2(((((dd._1 ++ hn(p, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._3[aq])
1848+ }
1849+ }
1850+
1851+
1852+
1853+@Callable(ee)
1854+func claimResToWH (fu,iw) = {
1855+ let ih = ie(ee)
1856+ if ((size(ee.payments) != 0))
18301857 then throw("No payments required")
18311858 else {
1832- let b = toString(eb.originCaller)
1833- let dd = gL(b, fr, cx, it)
1834- $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah])
1835- }
1836- }
1837-
1838-
1839-
1840-@Callable(eb)
1841-func flight (fZ,ga) = {
1842- let ie = ib(eb)
1843- if ((size(eb.payments) != 0))
1859+ let b = toString(ee.originCaller)
1860+ let dd = gO(b, fu, cx, iw)
1861+ $Tuple2(((((dd._1 ++ ht(b, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._5[ah])
1862+ }
1863+ }
1864+
1865+
1866+
1867+@Callable(ee)
1868+func flight (gc,gd) = {
1869+ let ih = ie(ee)
1870+ if ((size(ee.payments) != 0))
18441871 then throw("No payments required")
18451872 else {
1846- let aT = toString(eb.caller)
1847- let eG = fY(aT, fZ, ga)
1848- let p = eG._2
1849- let io = aP(p)
1850- let gD = valueOrElse(getString(io), W)
1851- if ((eG._4 == gD))
1873+ let aT = toString(ee.caller)
1874+ let eJ = gb(aT, gc, gd)
1875+ let p = eJ._2
1876+ let ir = aP(p)
1877+ let gG = valueOrElse(getString(ir), W)
1878+ if ((eJ._4 == gG))
18521879 then throw("You can't fly to the same location")
18531880 else {
1854- let eK = aO(p)
1855- let fv = eJ(eK)
1856- let dt = de(fv[as], eG._5)
1857- $Tuple2(([StringEntry(io, if ((eG._1 > 0))
1858- then eG._4
1859- else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0))
1881+ let eN = aO(p)
1882+ let fy = eM(eN)
1883+ let dt = de(fy[as], eJ._5)
1884+ $Tuple2(([StringEntry(ir, if ((eJ._1 > 0))
1885+ then eJ._4
1886+ else gG), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":")), IntegerEntry(aQ(p), eJ._1), ih] ++ hn(p, if ((eJ._1 > 0))
18601887 then y
1861- else z)._1), eG._3)
1888+ else z)._1), eJ._3)
18621889 }
18631890 }
18641891 }
18651892
18661893
18671894
1868-@Callable(eb)
1869-func heal (iu,iv,iw) = {
1870- let ie = ib(eb)
1871- if (if (if ((0 > iu))
1895+@Callable(ee)
1896+func heal (ix,iy,iz) = {
1897+ let ih = ie(ee)
1898+ if (if (if ((0 > ix))
18721899 then true
1873- else (0 > iv))
1900+ else (0 > iy))
18741901 then true
1875- else (0 > iw))
1902+ else (0 > iz))
18761903 then throw("Quantity cannot be negative")
18771904 else {
1878- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1879- let ix = [iu, iv, iw]
1880- let gk = aQ(p)
1881- let gl = J(valueOrElse(getInteger(r(p)), 0))
1882- let iy = valueOrElse(getInteger(gk), gl)
1883- if ((iy >= gl))
1884- then throw((("HP should be < " + toString(gl)) + " to heal"))
1905+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
1906+ let iA = [ix, iy, iz]
1907+ let gn = aQ(p)
1908+ let go = J(valueOrElse(getInteger(r(p)), 0))
1909+ let iB = valueOrElse(getInteger(gn), go)
1910+ if ((iB >= go))
1911+ then throw((("HP should be < " + toString(go)) + " to heal"))
18851912 else {
1886- let eK = aO(p)
1887- let fv = eJ(eK)
1888- let iz = if ((fv[as] == ""))
1913+ let eN = aO(p)
1914+ let fy = eM(eN)
1915+ let iC = if ((fy[as] == ""))
18891916 then nil
1890- else split(fv[as], "_")
1891- func iA (cL,iB) = {
1917+ else split(fy[as], "_")
1918+ func iD (cL,iE) = {
18921919 let bS = cL._2
1893- let ex = if ((size(iz) > bS))
1894- then parseIntValue(iz[bS])
1920+ let eA = if ((size(iC) > bS))
1921+ then parseIntValue(iC[bS])
18951922 else 0
18961923 if ((3 > bS))
18971924 then {
1898- let iC = ix[bS]
1899- if ((iC > ex))
1900- then throw(((("You have only " + toString(ex)) + " of ") + Z[bS]))
1901- else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC)))
1925+ let iF = iA[bS]
1926+ if ((iF > eA))
1927+ then throw(((("You have only " + toString(eA)) + " of ") + Z[bS]))
1928+ else $Tuple3((cL._1 :+ toString((eA - iF))), (bS + 1), (cL._3 + (bY[bS] * iF)))
19021929 }
1903- else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3)
1930+ else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3)
19041931 }
19051932
19061933 let dd = {
19091936 let cP = $Tuple3(nil, 0, 0)
19101937 func cQ (cR,cS) = if ((cS >= cO))
19111938 then cR
1912- else iA(cR, cN[cS])
1939+ else iD(cR, cN[cS])
19131940
19141941 func cT (cR,cS) = if ((cS >= cO))
19151942 then cR
19171944
19181945 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
19191946 }
1920- let iD = min([gl, (iy + dd._3)])
1921- $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD)
1947+ let iG = min([go, (iB + dd._3)])
1948+ $Tuple2(([IntegerEntry(gn, iG), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dd._1, "_")], ":")), ih] ++ hn(p, (G * ((ix + iy) + iz)))._1), iG)
19221949 }
19231950 }
19241951 }
19251952
19261953
19271954
1928-@Callable(eb)
1955+@Callable(ee)
19291956 func healES () = {
1930- let ie = ib(eb)
1931- if ((size(eb.payments) != 1))
1957+ let ih = ie(ee)
1958+ if ((size(ee.payments) != 1))
19321959 then throw("Exactly one payment required")
19331960 else {
1934- let if = value(eb.payments[0])
1935- if ((if.assetId != bb))
1961+ let ii = value(ee.payments[0])
1962+ if ((ii.assetId != bb))
19361963 then throw("Allowed USDT payment only!")
19371964 else {
1938- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1939- let gk = aQ(p)
1940- let gl = J(valueOrElse(getInteger(r(p)), 0))
1941- let iy = valueOrElse(getInteger(gk), gl)
1942- if ((iy > 0))
1965+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
1966+ let gn = aQ(p)
1967+ let go = J(valueOrElse(getInteger(r(p)), 0))
1968+ let iB = valueOrElse(getInteger(gn), go)
1969+ if ((iB > 0))
19431970 then throw("HP should be 0 to call Emergency Service")
19441971 else {
1945- let eK = aO(p)
1946- let fv = eJ(eK)
1947- let iz = if ((fv[as] == ""))
1972+ let eN = aO(p)
1973+ let fy = eM(eN)
1974+ let iC = if ((fy[as] == ""))
19481975 then nil
1949- else split(fv[as], "_")
1950- let iE = if ((size(iz) > 0))
1951- then parseIntValue(iz[0])
1976+ else split(fy[as], "_")
1977+ let iH = if ((size(iC) > 0))
1978+ then parseIntValue(iC[0])
19521979 else 0
1953- let iF = if ((size(iz) > 1))
1954- then parseIntValue(iz[1])
1980+ let iI = if ((size(iC) > 1))
1981+ then parseIntValue(iC[1])
19551982 else 0
1956- let iG = if ((size(iz) > 2))
1957- then parseIntValue(iz[2])
1983+ let iJ = if ((size(iC) > 2))
1984+ then parseIntValue(iC[2])
19581985 else 0
1959- if (if (if ((iE > 0))
1986+ if (if (if ((iH > 0))
19601987 then true
1961- else (iF > 0))
1988+ else (iI > 0))
19621989 then true
1963- else (iG > 0))
1990+ else (iJ > 0))
19641991 then throw("You have to use own Medical Kit")
19651992 else {
1966- let iH = getString(bE, aU())
1967- let iI = if (isDefined(iH))
1968- then split(value(iH), "_")
1993+ let iK = getString(bE, aU())
1994+ let iL = if (isDefined(iK))
1995+ then split(value(iK), "_")
19691996 else nil
1970- let iJ = if ((size(iI) > 0))
1971- then parseIntValue(iI[0])
1997+ let iM = if ((size(iL) > 0))
1998+ then parseIntValue(iL[0])
19721999 else 0
1973- if ((0 >= iJ))
2000+ if ((0 >= iM))
19742001 then throw("There are no Medical Kits L1 at Emergency Service storage")
19752002 else {
1976- let iD = (iy + bY[0])
1977- let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_")
2003+ let iG = (iB + bY[0])
2004+ let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_")
19782005 let aY = split(ac[0], "_")
1979- let iL = aX(aY)
1980- let iM = fraction((iL * Y), X, (10 * af))
1981- if ((if.amount != iM))
1982- then throw(("Payment attached should be " + toString(iM)))
2006+ let iO = aX(aY)
2007+ let iP = fraction((iO * Y), X, (10 * af))
2008+ if ((ii.amount != iP))
2009+ then throw(("Payment attached should be " + toString(iP)))
19832010 else {
1984- let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)]))
1985- $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd)
2011+ let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)]))
2012+ $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd)
19862013 }
19872014 }
19882015 }
19932020
19942021
19952022
1996-@Callable(eb)
1997-func updateBackpack (p,iN) = if ((eb.caller != bE))
2023+@Callable(ee)
2024+func updateBackpack (p,iQ) = if ((ee.caller != bE))
19982025 then throw("permission denied")
1999- else $Tuple2([StringEntry(aO(p), iN)], iN)
2000-
2001-
2002-
2003-@Callable(eb)
2026+ else $Tuple2([StringEntry(aO(p), iQ)], iQ)
2027+
2028+
2029+
2030+@Callable(ee)
20042031 func buySLand () = {
2005- let ie = ib(eb)
2006- if ((size(eb.payments) != 1))
2032+ let ih = ie(ee)
2033+ if ((size(ee.payments) != 1))
20072034 then throw("Exactly one payment required")
20082035 else {
2009- let if = value(eb.payments[0])
2010- if ((if.assetId != bb))
2036+ let ii = value(ee.payments[0])
2037+ if ((ii.assetId != bb))
20112038 then throw("Allowed USDT payment only!")
2012- else if ((if.amount != ce))
2039+ else if ((ii.amount != ce))
20132040 then throw(("Payment attached should be " + toString(ce)))
20142041 else {
2015- let dd = fQ(eb.caller, eb.transactionId)
2016- $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1)
2042+ let dd = fT(ee.caller, ee.transactionId)
2043+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) ++ ht(toString(ee.caller), C)._1) :+ ih), dd._2._1)
20172044 }
20182045 }
20192046 }
20202047
20212048
20222049
2023-@Callable(eb)
2024-func expedition (fZ,ga) = {
2025- let ie = ib(eb)
2026- if ((size(eb.payments) != 0))
2050+@Callable(ee)
2051+func expedition (gc,gd) = {
2052+ let ih = ie(ee)
2053+ if ((size(ee.payments) != 0))
20272054 then throw("No payments required")
20282055 else {
2029- let dd = gq(eb.caller, eb.transactionId, fZ, ga)
2030- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2031- $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3))
2032- }
2033- }
2034-
2035-
2036-
2037-@Callable(eb)
2056+ let dd = gt(ee.caller, ee.transactionId, gc, gd)
2057+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
2058+ $Tuple2(((dd._1 ++ hn(p, C)._1) :+ ih), $Tuple2(dd._2, dd._3))
2059+ }
2060+ }
2061+
2062+
2063+
2064+@Callable(ee)
20382065 func upgradeInfra (aF) = {
2039- let ie = ib(eb)
2040- if ((size(eb.payments) != 0))
2066+ let ih = ie(ee)
2067+ if ((size(ee.payments) != 0))
20412068 then throw("No payments required")
20422069 else {
2043- let dd = gY(true, eb.caller, 0, aF)
2044- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2045- $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2)
2046- }
2047- }
2048-
2049-
2050-
2051-@Callable(eb)
2052-func upgradeInfraUsdt (aF) = if ((eb.caller != this))
2070+ let dd = hb(true, ee.caller, 0, aF)
2071+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
2072+ $Tuple2(((dd._1 :+ ih) ++ hn(p, fraction(D, dd._3, bi))._1), dd._2)
2073+ }
2074+ }
2075+
2076+
2077+
2078+@Callable(ee)
2079+func upgradeInfraUsdt (aF) = if ((ee.caller != this))
20532080 then throw("Permission denied")
20542081 else {
2055- let ie = ib(eb)
2056- if ((size(eb.payments) != 1))
2082+ let ih = ie(ee)
2083+ if ((size(ee.payments) != 1))
20572084 then throw("Exactly one payment required")
20582085 else {
2059- let if = value(eb.payments[0])
2060- if ((if.assetId != bb))
2086+ let ii = value(ee.payments[0])
2087+ if ((ii.assetId != bb))
20612088 then throw("Allowed USDT payment only!")
20622089 else {
2063- let dd = gY(false, eb.caller, if.amount, aF)
2064- $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
2090+ let dd = hb(false, ee.caller, ii.amount, aF)
2091+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
20652092 }
20662093 }
20672094 }
20682095
20692096
20702097
2071-@Callable(eb)
2072-func activateArtifact (iO,iP) = {
2073- let ie = ib(eb)
2074- if ((size(eb.payments) != 0))
2098+@Callable(ee)
2099+func activateArtifact (iR,iS) = {
2100+ let ih = ie(ee)
2101+ if ((size(ee.payments) != 0))
20752102 then throw("No payments required")
20762103 else {
2077- let b = toString(eb.caller)
2104+ let b = toString(ee.caller)
20782105 let dd = {
2079- let bc = iO
2106+ let bc = iR
20802107 if (("PRESALE" == bc))
2081- then hy(b, iP)
2108+ then hB(b, iS)
20822109 else if (("ONBOARD" == bc))
2083- then hr(b)
2110+ then hu(b)
20842111 else throw("Unknown artifact")
20852112 }
2086- (dd :+ ie)
2087- }
2088- }
2089-
2090-
2091-
2092-@Callable(eb)
2093-func mergeLands (hD) = {
2094- let ie = ib(eb)
2095- if ((size(eb.payments) != 0))
2113+ (dd :+ ih)
2114+ }
2115+ }
2116+
2117+
2118+
2119+@Callable(ee)
2120+func mergeLands (hG) = {
2121+ let ih = ie(ee)
2122+ if ((size(ee.payments) != 0))
20962123 then throw("No payments required")
20972124 else {
2098- let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId)
2099- $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2)
2100- }
2101- }
2102-
2103-
2104-
2105-@Callable(eb)
2106-func mergeLandsUsdt (hD) = {
2107- let ie = ib(eb)
2108- if ((size(eb.payments) != 1))
2125+ let dd = ic(true, toString(ee.caller), 0, hG, ee.transactionId)
2126+ $Tuple2(((dd._1 :+ ih) ++ ht(toString(ee.caller), E)._1), dd._2)
2127+ }
2128+ }
2129+
2130+
2131+
2132+@Callable(ee)
2133+func mergeLandsUsdt (hG) = {
2134+ let ih = ie(ee)
2135+ if ((size(ee.payments) != 1))
21092136 then throw("Exactly one payment required")
21102137 else {
2111- let if = value(eb.payments[0])
2112- if ((if.assetId != bb))
2138+ let ii = value(ee.payments[0])
2139+ if ((ii.assetId != bb))
21132140 then throw("Allowed USDT payment only!")
21142141 else {
2115- let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId)
2116- $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
2142+ let dd = ic(false, toString(ee.caller), ii.amount, hG, ee.transactionId)
2143+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
21172144 }
21182145 }
21192146 }
21202147
21212148
21222149
2123-@Callable(eb)
2124-func cargoExchange (iQ,aF) = {
2125- let ie = ib(eb)
2126- if ((size(eb.payments) != 0))
2150+@Callable(ee)
2151+func cargoExchange (iT,aF) = {
2152+ let ih = ie(ee)
2153+ if ((size(ee.payments) != 0))
21272154 then throw("No payments required")
21282155 else {
2129- let fu = split_4C(iQ, ":")
2130- let b = toString(eb.originCaller)
2131- let gG = value(assetInfo(fromBase58String(aF)))
2132- let gH = ax(aF)
2133- if (!(isDefined(getInteger(gH))))
2134- then throw((gG.name + " is not staked"))
2156+ let fx = split_4C(iT, ":")
2157+ let b = toString(ee.originCaller)
2158+ let gJ = value(assetInfo(fromBase58String(aF)))
2159+ let gK = ax(aF)
2160+ if (!(isDefined(getInteger(gK))))
2161+ then throw((gJ.name + " is not staked"))
21352162 else {
2136- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
2137- if ((gJ != b))
2163+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
2164+ if ((gM != b))
21382165 then throw((P + " is not yours"))
21392166 else {
2140- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2141- let fe = valueOrElse(getInteger(ay(aF)), 0)
2167+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2168+ let fh = valueOrElse(getInteger(ay(aF)), 0)
21422169 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2143- let gD = valueOrElse(getString(aP(p)), W)
2144- let gE = split(value(gD), "_")
2145- if ((gE[aV] != "L"))
2146- then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
2147- else if ((gE[aW] != aF))
2170+ let gG = valueOrElse(getString(aP(p)), W)
2171+ let gH = split(value(gG), "_")
2172+ if ((gH[aV] != "L"))
2173+ then throw((("Duck location type is " + gH[aV]) + ", but should be L"))
2174+ else if ((gH[aW] != aF))
21482175 then throw(("Duck should be on the land " + aF))
21492176 else {
2150- let fc = aE(aF)
2151- let eP = fb(fc, fd, fe)
2152- let eK = aO(p)
2153- let fv = eJ(eK)
2154- let dd = ft(fu, eP, fv)
2155- let fk = split(eP[ak], "_")
2156- let gV = (parseIntValue(fk[am]) + dd._7)
2157- let gW = (parseIntValue(fk[an]) - dd._7)
2158-[StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie]
2177+ let ff = aE(aF)
2178+ let eS = fe(ff, fg, fh)
2179+ let eN = aO(p)
2180+ let fy = eM(eN)
2181+ let dd = fw(fx, eS, fy)
2182+ let fn = split(eS[ak], "_")
2183+ let gY = (parseIntValue(fn[am]) + dd._7)
2184+ let gZ = (parseIntValue(fn[an]) - dd._7)
2185+[StringEntry(eN, makeString_2C([fy[ap], dd._4, dd._5, dd._6], ":")), StringEntry(ff, makeString_2C([eS[ag], dd._1, dd._2, dd._3, makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")], ":")), ih]
21592186 }
21602187 }
21612188 }
21642191
21652192
21662193
2167-@Callable(eb)
2168-func saveWarehouse (fg,aF) = if ((eb.caller != bE))
2194+@Callable(ee)
2195+func saveWarehouse (fj,aF) = if ((ee.caller != bE))
21692196 then throw("Access denied")
21702197 else {
2171- let fc = aE(aF)
2172- let fh = split_4C(fg, ":")
2173- if ((size(fh) != 5))
2198+ let ff = aE(aF)
2199+ let fk = split_4C(fj, ":")
2200+ if ((size(fk) != 5))
21742201 then throw("warehouse string should contain 4 ':' separators")
21752202 else {
2176- let iR = split(fh[ak], "_")[al]
2177- let gV = eO(fh)
2178- let iS = eM(fh[ag])
2179- let gW = ((iS - parseIntValue(iR)) - gV)
2180- let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":")
2181- $Tuple2([StringEntry(fc, iT)], iT)
2203+ let iU = split(fk[ak], "_")[al]
2204+ let gY = eR(fk)
2205+ let iV = eP(fk[ag])
2206+ let gZ = ((iV - parseIntValue(iU)) - gY)
2207+ let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([iU, toString(gY), toString(gZ), toString(iV)], "_")], ":")
2208+ $Tuple2([StringEntry(ff, iW)], iW)
21822209 }
21832210 }
21842211
21852212
21862213
2187-@Callable(eb)
2188-func fixWarehouseFormat (aF) = if ((eb.caller != bC))
2214+@Callable(ee)
2215+func fixWarehouseFormat (aF) = if ((ee.caller != bC))
21892216 then throw("Access denied")
21902217 else {
2191- let fc = aE(aF)
2192- let gG = value(assetInfo(fromBase58String(aF)))
2193- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2194- let fe = valueOrElse(getInteger(ay(aF)), 0)
2195- let fh = fb(fc, fd, fe)
2196- let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil))
2197- let gV = eO(fh)
2198- let iS = eM(fh[ag])
2199- let gW = ((iS - iR) - gV)
2200- let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":")
2201- $Tuple2([StringEntry(fc, iT)], iT)
2218+ let ff = aE(aF)
2219+ let gJ = value(assetInfo(fromBase58String(aF)))
2220+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2221+ let fh = valueOrElse(getInteger(ay(aF)), 0)
2222+ let fk = fe(ff, fg, fh)
2223+ let iU = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fk], nil))
2224+ let gY = eR(fk)
2225+ let iV = eP(fk[ag])
2226+ let gZ = ((iV - iU) - gY)
2227+ let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([toString(iU), toString(gY), toString(gZ), toString(iV)], "_")], ":")
2228+ $Tuple2([StringEntry(ff, iW)], iW)
22022229 }
22032230
22042231
22052232
2206-@Callable(eb)
2207-func fixStakedPieces (bp) = if ((eb.caller != bC))
2233+@Callable(ee)
2234+func fixStakedPieces (bp) = if ((ee.caller != bC))
22082235 then throw("Access denied")
22092236 else {
2210- let hU = if ((bp == ""))
2237+ let hX = if ((bp == ""))
22112238 then 0
22122239 else {
2213- let hP = getString(bD, bM(bp))
2214- let hK = if (isDefined(hP))
2215- then split_51C(value(hP), "_")
2240+ let hS = getString(bD, bM(bp))
2241+ let hN = if (isDefined(hS))
2242+ then split_51C(value(hS), "_")
22162243 else nil
2217- func iU (cL,aF) = {
2218- let gG = value(assetInfo(fromBase58String(aF)))
2219- let bU = split(gG.description, "_")[bI]
2244+ func iX (cL,aF) = {
2245+ let gJ = value(assetInfo(fromBase58String(aF)))
2246+ let bU = split(gJ.description, "_")[bI]
22202247 (cL + bT(bU))
22212248 }
22222249
2223- let cN = hK
2250+ let cN = hN
22242251 let cO = size(cN)
22252252 let cP = 0
22262253 func cQ (cR,cS) = if ((cS >= cO))
22272254 then cR
2228- else iU(cR, cN[cS])
2255+ else iX(cR, cN[cS])
22292256
22302257 func cT (cR,cS) = if ((cS >= cO))
22312258 then cR
22332260
22342261 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
22352262 }
2236- $Tuple2([IntegerEntry(bN(bp), hU)], hU)
2263+ $Tuple2([IntegerEntry(bN(bp), hX)], hX)
22372264 }
22382265
22392266
22402267
2241-@Callable(eb)
2242-func setCustomName (av,hM,aA) = {
2243- let ie = ib(eb)
2244- if ((size(eb.payments) != 1))
2268+@Callable(ee)
2269+func setCustomName (av,hP,aA) = {
2270+ let ih = ie(ee)
2271+ if ((size(ee.payments) != 1))
22452272 then throw("Exactly one payment required")
22462273 else {
2247- let if = value(eb.payments[0])
2248- if ((if.assetId != bb))
2274+ let ii = value(ee.payments[0])
2275+ if ((ii.assetId != bb))
22492276 then throw("Allowed USDT payment only!")
2250- else if ((if.amount != ca))
2277+ else if ((ii.amount != ca))
22512278 then throw(("Payment should be " + toString(ca)))
2252- else if (contains(hM, "__"))
2253- then throw(("Name should not contain '__': " + hM))
2254- else if ((size(hM) > cb))
2279+ else if (contains(hP, "__"))
2280+ then throw(("Name should not contain '__': " + hP))
2281+ else if ((size(hP) > cb))
22552282 then throw(("Name too long, maxLength=" + toString(cb)))
22562283 else {
2257- let b = toString(eb.originCaller)
2258- let iV = {
2284+ let b = toString(ee.originCaller)
2285+ let iY = {
22592286 let bc = aA
22602287 if (("ACCOUNT" == bc))
22612288 then {
2262- let iW = cv(hM)
2263- let iX = getString(iW)
2264- if (isDefined(iX))
2265- then throw(("Name already registered: " + hM))
2289+ let iZ = cv(hP)
2290+ let ja = getString(iZ)
2291+ if (isDefined(ja))
2292+ then throw(("Name already registered: " + hP))
22662293 else {
2267- let iY = aH(b)
2268- let iZ = getString(iY)
2269- let ja = if (isDefined(iZ))
2270- then [DeleteEntry(cv(value(iZ)))]
2294+ let jb = aH(b)
2295+ let jc = getString(jb)
2296+ let jd = if (isDefined(jc))
2297+ then [DeleteEntry(cv(value(jc)))]
22712298 else nil
2272- (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1)
2299+ (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1)
22732300 }
22742301 }
22752302 else if (("LAND" == bc))
22762303 then {
2277- let gG = value(assetInfo(fromBase58String(av)))
2278- let gH = ax(av)
2279- if (!(isDefined(getInteger(gH))))
2280- then throw((gG.name + " is not staked"))
2304+ let gJ = value(assetInfo(fromBase58String(av)))
2305+ let gK = ax(av)
2306+ if (!(isDefined(getInteger(gK))))
2307+ then throw((gJ.name + " is not staked"))
22812308 else {
2282- let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned"))
2283- if ((gJ != b))
2309+ let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned"))
2310+ if ((gM != b))
22842311 then throw((P + " is not yours"))
22852312 else {
2286- let iW = cp(hM)
2287- let iX = getString(iW)
2288- if (isDefined(iX))
2289- then throw(("Name already registered: " + hM))
2313+ let iZ = cp(hP)
2314+ let ja = getString(iZ)
2315+ if (isDefined(ja))
2316+ then throw(("Name already registered: " + hP))
22902317 else {
2291- let jb = aw(av)
2292- let iZ = getString(jb)
2293- let ja = if (isDefined(iZ))
2294- then [DeleteEntry(cp(value(iZ)))]
2318+ let je = aw(av)
2319+ let jc = getString(je)
2320+ let jd = if (isDefined(jc))
2321+ then [DeleteEntry(cp(value(jc)))]
22952322 else nil
2296- (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1)
2323+ (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1)
22972324 }
22982325 }
22992326 }
23002327 }
23012328 else if (("DUCK" == bc))
23022329 then {
2303- let gG = value(assetInfo(fromBase58String(av)))
2304- let gH = ax(av)
2305- if (if (!(isDefined(getInteger(gH))))
2330+ let gJ = value(assetInfo(fromBase58String(av)))
2331+ let gK = ax(av)
2332+ if (if (!(isDefined(getInteger(gK))))
23062333 then true
23072334 else !(isDefined(getString(aN(b)))))
2308- then throw((gG.name + " is not staked"))
2335+ then throw((gJ.name + " is not staked"))
23092336 else {
2310- let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned"))
2311- if ((gJ != b))
2337+ let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned"))
2338+ if ((gM != b))
23122339 then throw((Q + " is not yours"))
23132340 else {
2314- let iW = cu(hM)
2315- let iX = getString(iW)
2316- if (isDefined(iX))
2317- then throw(("Name already registered: " + hM))
2341+ let iZ = cu(hP)
2342+ let ja = getString(iZ)
2343+ if (isDefined(ja))
2344+ then throw(("Name already registered: " + hP))
23182345 else {
2319- let jb = aG(av)
2320- let iZ = getString(jb)
2321- let ja = if (isDefined(iZ))
2322- then [DeleteEntry(cu(value(iZ)))]
2346+ let je = aG(av)
2347+ let jc = getString(je)
2348+ let jd = if (isDefined(jc))
2349+ then [DeleteEntry(cu(value(jc)))]
23232350 else nil
2324- (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1)
2351+ (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1)
23252352 }
23262353 }
23272354 }
23282355 }
23292356 else throw("Unknown entity type")
23302357 }
2331- $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0)
2358+ $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0)
23322359 }
23332360 }
23342361 }
23352362
23362363
23372364
2338-@Callable(eb)
2339-func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX))
2365+@Callable(ee)
2366+func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX))
23402367 then throw("Permission denied")
23412368 else {
2342- let ie = ib(eb)
2343- if ((size(eb.payments) != 0))
2369+ let ih = ie(ee)
2370+ if ((size(ee.payments) != 0))
23442371 then throw("No payments required")
2345- else if (!(isDefined(addressFromString(jc))))
2346- then throw(("Invalid address: " + jc))
2347- else if (!(isDefined(addressFromString(jd))))
2348- then throw(("Invalid address: " + jd))
2372+ else if (!(isDefined(addressFromString(jf))))
2373+ then throw(("Invalid address: " + jf))
2374+ else if (!(isDefined(addressFromString(jg))))
2375+ then throw(("Invalid address: " + jg))
23492376 else {
2350- let je = cw()
2351- let jf = getString(je)
2352- let jg = if (isDefined(jf))
2353- then split_4C(value(jf), "_")
2377+ let jh = cw()
2378+ let ji = getString(jh)
2379+ let jj = if (isDefined(ji))
2380+ then split_4C(value(ji), "_")
23542381 else nil
2355- if (containsElement(jg, jd))
2356- then throw((jd + " is not newbie (already has referrals)"))
2382+ if (containsElement(jj, jg))
2383+ then throw((jg + " is not newbie (already has referrals)"))
23572384 else {
2358- let hs = aI(jd)
2359- let ht = getString(hs)
2360- if (if (isDefined(ht))
2361- then isDefined(addressFromString(value(ht)))
2385+ let hv = aI(jg)
2386+ let hw = getString(hv)
2387+ if (if (isDefined(hw))
2388+ then isDefined(addressFromString(value(hw)))
23622389 else false)
2363- then throw(((jd + " already has refBy: ") + value(ht)))
2390+ then throw(((jg + " already has refBy: ") + value(hw)))
23642391 else {
2365- let jh = aL(jc)
2366- let ji = getString(jh)
2367- let jj = if (isDefined(ji))
2368- then split_4C(value(ji), "_")
2392+ let jk = aL(jf)
2393+ let jl = getString(jk)
2394+ let jm = if (isDefined(jl))
2395+ then split_4C(value(jl), "_")
23692396 else nil
2370- if (containsElement(jj, jd))
2371- then throw((((jc + " already contains ") + jd) + " within referrals"))
2397+ if (containsElement(jm, jg))
2398+ then throw((((jf + " already contains ") + jg) + " within referrals"))
23722399 else {
2373- let jk = makeString_2C((jj :+ jd), "_")
2374- let jl = if (containsElement(jg, jc))
2375- then value(jf)
2376- else makeString_2C((jg :+ jc), "_")
2377- $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0)
2400+ let jn = makeString_2C((jm :+ jg), "_")
2401+ let jo = if (containsElement(jj, jf))
2402+ then value(ji)
2403+ else makeString_2C((jj :+ jf), "_")
2404+ $Tuple2([StringEntry(hv, jf), StringEntry(jk, jn), StringEntry(jh, jo), ih], 0)
23782405 }
23792406 }
23802407 }
23832410
23842411
23852412
2386-@Callable(eb)
2387-func distributePoints (jm,jn,jo,jp,jq) = {
2388- let ie = ib(eb)
2389- if ((size(eb.payments) != 0))
2413+@Callable(ee)
2414+func distributePoints (jp,jq,jr,js,jt) = {
2415+ let ih = ie(ee)
2416+ if ((size(ee.payments) != 0))
23902417 then throw("No payments required")
23912418 else {
2392- let b = toString(eb.originCaller)
2419+ let b = toString(ee.originCaller)
23932420 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2394- let jr = w(b)
2395- let js = valueOrElse(getInteger(bD, jr), 0)
2396- let jt = s(p)
2397- let ju = valueOrElse(getInteger(bD, jt), 0)
2398- let jv = (js + ju)
2399- let jw = ((((jm + jn) + jo) + jp) + jq)
2400- if ((jw > jv))
2401- then throw((("There are only " + toString(jv)) + " free points to distribute"))
2421+ let ju = w(b)
2422+ let jv = valueOrElse(getInteger(bD, ju), 0)
2423+ let jw = s(p)
2424+ let jx = valueOrElse(getInteger(bD, jw), 0)
2425+ let jy = (jv + jx)
2426+ let jz = ((((jp + jq) + jr) + js) + jt)
2427+ if ((jz > jy))
2428+ then throw((("There are only " + toString(jy)) + " free points to distribute"))
24022429 else {
2403- let jx = o(p)
2404- let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_")
2405- let jz = (js - jw)
2406- $Tuple2([IntegerEntry(jr, if ((0 > jz))
2430+ let jA = o(p)
2431+ let jB = split(valueOrElse(getString(bD, jA), "0_0_0_0_0"), "_")
2432+ let jC = (jv - jz)
2433+ $Tuple2([IntegerEntry(ju, if ((0 > jC))
24072434 then 0
2408- else jz), IntegerEntry(jt, if ((0 > jz))
2409- then (ju + jz)
2410- else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0)
2435+ else jC), IntegerEntry(jw, if ((0 > jC))
2436+ then (jx + jC)
2437+ else jx), StringEntry(jA, makeString([toString((parseIntValue(jB[g]) + jp)), toString((parseIntValue(jB[h]) + jq)), toString((parseIntValue(jB[i]) + jr)), toString((parseIntValue(jB[j]) + js)), toString((parseIntValue(jB[k]) + jt))], "_")), ih], 0)
24112438 }
24122439 }
24132440 }
24142441
24152442
24162443
2417-@Callable(eb)
2418-func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr))
2419-
2420-
2421-
2422-@Callable(eb)
2423-func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = {
2424- let dX = ed(ee)
2425- $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX)))
2426- }
2427-
2428-
2429-
2430-@Callable(eb)
2431-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":"))
2432-
2433-
2434-
2435-@Callable(eb)
2444+@Callable(ee)
2445+func splitByGlobalWeightsREADONLY (fu) = $Tuple2(nil, cU(fu))
2446+
2447+
2448+
2449+@Callable(ee)
2450+func splitByGlobalAndLocalWeightsREADONLY (jD,jE,eh) = {
2451+ let ea = eg(eh)
2452+ $Tuple2(nil, $Tuple2(cU(jD), cF(jE, ea)))
2453+ }
2454+
2455+
2456+
2457+@Callable(ee)
2458+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eM(aO(p)), ":"))
2459+
2460+
2461+
2462+@Callable(ee)
24362463 func getWarehouseREADONLY (aF) = {
2437- let gG = value(assetInfo(fromBase58String(aF)))
2438- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2439- let fe = valueOrElse(getInteger(ay(aF)), 0)
2440- $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":"))
2441- }
2442-
2443-
2444-
2445-@Callable(eb)
2446-func saveLastTx () = if (if ((eb.caller != bG))
2447- then (eb.caller != bE)
2464+ let gJ = value(assetInfo(fromBase58String(aF)))
2465+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2466+ let fh = valueOrElse(getInteger(ay(aF)), 0)
2467+ $Tuple2(nil, makeString_2C(fe(aE(aF), fg, fh), ":"))
2468+ }
2469+
2470+
2471+
2472+@Callable(ee)
2473+func saveLastTx () = if (if ((ee.caller != bG))
2474+ then (ee.caller != bE)
24482475 else false)
24492476 then throw("Access denied")
2450- else $Tuple2([ib(eb)], 42)
2451-
2452-
2453-
2454-@Callable(eb)
2455-func updateDuckStats (p,hl) = if ((eb.caller != bE))
2477+ else $Tuple2([ie(ee)], 42)
2478+
2479+
2480+
2481+@Callable(ee)
2482+func updateDuckStats (p,ho) = if ((ee.caller != bE))
24562483 then throw("Access denied")
2457- else hk(p, hl)
2458-
2459-
2460-
2461-@Callable(eb)
2462-func updateAccStats (b,hl) = if ((eb.caller != bE))
2484+ else hn(p, ho)
2485+
2486+
2487+
2488+@Callable(ee)
2489+func updateAccStats (b,ho) = if ((ee.caller != bE))
24632490 then throw("Access denied")
2464- else hq(b, hl)
2465-
2466-
2467-
2468-@Callable(eb)
2469-func equipDuck (jC) = {
2470- let ie = ib(eb)
2471- if ((size(eb.payments) != 0))
2491+ else ht(b, ho)
2492+
2493+
2494+
2495+@Callable(ee)
2496+func equipDuck (jF) = {
2497+ let ih = ie(ee)
2498+ if ((size(ee.payments) != 0))
24722499 then throw("No payments required")
24732500 else {
2474- let b = toString(eb.originCaller)
2501+ let b = toString(ee.originCaller)
24752502 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2476- let jD = t(p)
2477- let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2478- let eK = aO(p)
2479- let fv = eJ(eK)
2480- let jF = split(jC, "_")
2481- if ((size(jF) != l))
2503+ let jG = t(p)
2504+ let jH = split(valueOrElse(getString(jG), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2505+ let eN = aO(p)
2506+ let fy = eM(eN)
2507+ let jI = split(jF, "_")
2508+ if ((size(jI) != l))
24822509 then throw("Wrong equipment string")
24832510 else {
2484- let jG = fv[as]
2485- let dh = if ((jG == ""))
2511+ let jJ = fy[as]
2512+ let dh = if ((jJ == ""))
24862513 then nil
2487- else split(jG, "_")
2488- let jH = dQ(jE, dh, true)
2489- let dt = dQ(jF, jH, false)
2490- $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0)
2514+ else split(jJ, "_")
2515+ let jK = dT(jH, dh, true)
2516+ let dt = dT(jI, jK, false)
2517+ $Tuple2([StringEntry(jG, jF), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dt, "_")], ":")), ih], 0)
24912518 }
24922519 }
24932520 }
2521+
2522+
2523+
2524+@Callable(ee)
2525+func test () = if ((ee.caller != this))
2526+ then throw("Access denied")
2527+ else $Tuple2(nil, du(""))
24942528
24952529
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 = 0
1616
1717 let h = 1
1818
1919 let i = 2
2020
2121 let j = 3
2222
2323 let k = 4
2424
2525 let l = 6
2626
2727 let m = 2
2828
2929 let n = 2
3030
3131 func o (p) = ("duckChars_" + p)
3232
3333
3434 func q (p) = ("duckXP_" + p)
3535
3636
3737 func r (p) = ("duckLevel_" + p)
3838
3939
4040 func s (p) = ("duckFreePoints_" + p)
4141
4242
4343 func t (p) = ("duckEquipment_" + p)
4444
4545
4646 func u (b) = ("userXP_" + b)
4747
4848
4949 func v (b) = ("userLevel_" + b)
5050
5151
5252 func w (b) = ("userFreePoints_" + b)
5353
5454
5555 let x = 100000
5656
5757 let y = 50000
5858
5959 let z = 10000
6060
6161 let A = 100000
6262
6363 let B = 5000000
6464
6565 let C = 50000000
6666
6767 let D = 100000
6868
6969 let E = 10000000
7070
7171 let F = 10000000
7272
7373 let G = 10000
7474
7575 func H (I) = fraction(d, pow(I, 4, e, 4, 4, DOWN), c)
7676
7777
7878 func J (K) = (100 + K)
7979
8080
8181 func L (M,N) = {
8282 let O = H(N)
8383 [O, (f * (O - M))]
8484 }
8585
8686
8787 let P = "LAND"
8888
8989 let Q = "DUCK"
9090
9191 let R = "PRESALE"
9292
9393 let S = 6
9494
9595 let T = 3456000
9696
9797 let U = 86400000
9898
9999 let V = 10000000000
100100
101101 let W = "Africa_F_Africa"
102102
103103 let X = 39637
104104
105105 let Y = 10
106106
107107 let Z = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3"]
108108
109109 let aa = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
110110
111111 let ab = 10000000
112112
113113 let ac = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_30_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_50_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_70_0,0,0,0,0,0,0_201"]
114114
115115 let ad = 6
116116
117117 let ae = 10
118118
119119 let af = 10
120120
121121 let ag = 0
122122
123123 let ah = 1
124124
125125 let ai = 2
126126
127127 let aj = 3
128128
129129 let ak = 4
130130
131131 let al = 0
132132
133133 let am = 1
134134
135135 let an = 2
136136
137137 let ao = 3
138138
139139 let ap = 0
140140
141141 let aq = 1
142142
143143 let ar = 2
144144
145145 let as = 3
146146
147147 func at (b) = ("lastTxIdByUser_" + b)
148148
149149
150150 func au (av) = ("nftOwner_" + av)
151151
152152
153153 func aw (av) = ("landCustomNameByAssetId_" + av)
154154
155155
156156 func ax (av) = ("stakedTime_" + av)
157157
158158
159159 func ay (av) = ("infraLevel_" + av)
160160
161161
162162 func az (aA,av) = makeString(["landArtStatus", aA, av], "_")
163163
164164
165165 func aB (aC,av,aD) = ((((("stakedTimeByTypeAssetIdAndOwner_" + aC) + "_") + av) + "_") + aD)
166166
167167
168168 func aE (aF) = ("wareHouse_" + aF)
169169
170170
171171 func aG (av) = ("duckCustomNameByAssetId_" + av)
172172
173173
174174 func aH (b) = ("accountCustomNameByAddr_" + b)
175175
176176
177177 func aI (b) = ("accRefBy_" + b)
178178
179179
180180 func aJ (p) = ("onboardArtActivatedOnDuck_" + p)
181181
182182
183183 func aK (b) = ("onboardArtActivatedDuckBy_" + b)
184184
185185
186186 func aL (b) = ("accReferrals_" + b)
187187
188188
189189 func aM (av) = ("duckOwner_" + av)
190190
191191
192192 func aN (aD) = ("stakedDuckByOwner_" + aD)
193193
194194
195195 func aO (p) = ("backPack_" + p)
196196
197197
198198 func aP (p) = ("duckLocation_" + p)
199199
200200
201201 func aQ (p) = ("duckHealth_" + p)
202202
203203
204204 func aR () = "contractsBlocked"
205205
206206
207207 func aS (aT) = ("%s%s__userGwlReleaseTime__" + aT)
208208
209209
210210 func aU () = "emergencyWarehouseProducts"
211211
212212
213213 let aV = 1
214214
215215 let aW = 2
216216
217217 func aX (aY) = (parseIntValue(aY[ad]) * ab)
218218
219219
220220 let aZ = true
221221
222222 let ba = take(drop(this.bytes, 1), 1)
223223
224224 let bb = {
225225 let bc = ba
226226 if ((base58'2W' == bc))
227227 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
228228 else if ((base58'2T' == bc))
229229 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
230230 else throw("Unknown chain")
231231 }
232232
233233 let bd = {
234234 let bc = ba
235235 if ((base58'2W' == bc))
236236 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
237237 else if ((base58'2T' == bc))
238238 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
239239 else throw("Unknown chain")
240240 }
241241
242242 let be = {
243243 let bc = ba
244244 if ((base58'2W' == bc))
245245 then 10000000000
246246 else if ((base58'2T' == bc))
247247 then 100000000
248248 else throw("Unknown chain")
249249 }
250250
251251 let bf = {
252252 let bc = ba
253253 if ((base58'2W' == bc))
254254 then 600000
255255 else if ((base58'2T' == bc))
256256 then 60000
257257 else throw("Unknown chain")
258258 }
259259
260260 let bg = "__"
261261
262262 let bh = 1000000
263263
264264 let bi = 100000000
265265
266266 let bj = 25
267267
268268 let bk = 100
269269
270270 let bl = 225
271271
272272 let bm = 400
273273
274274 let bn = 625
275275
276276 func bo (bp,bq) = valueOrErrorMessage(getString(bp, bq), makeString(["mandatory ", toString(bp), ".", bq, " is not defined"], ""))
277277
278278
279279 let br = 1
280280
281281 let bs = 2
282282
283283 let bt = 3
284284
285285 let bu = 4
286286
287287 func bv () = "%s__restConfig"
288288
289289
290290 func bw () = "%s__restAddr"
291291
292292
293293 func bx (by) = split_4C(bo(by, bv()), bg)
294294
295295
296296 func bz (bA,bB) = valueOrErrorMessage(addressFromString(bA[bB]), ("Rest cfg doesn't contain address at index " + toString(bB)))
297297
298298
299299 let bC = addressFromStringValue(valueOrElse(getString(this, bw()), bd))
300300
301301 let bA = bx(bC)
302302
303303 let bD = bz(bA, br)
304304
305305 let bE = bz(bA, bs)
306306
307307 let bF = bz(bA, bt)
308308
309309 let bG = bz(bA, bu)
310310
311311 let bH = 0
312312
313313 let bI = 1
314314
315315 let bJ = 2
316316
317317 let bK = 3
318318
319319 func bL () = "resTypesProportions"
320320
321321
322322 func bM (aD) = ("stakedLandsByOwner_" + aD)
323323
324324
325325 func bN (aD) = ("stakedPiecesByOwner_" + aD)
326326
327327
328328 func bO (bP) = {
329329 let bc = bP
330330 if ($isInstanceOf(bc, "String"))
331331 then {
332332 let bQ = bc
333333 bQ
334334 }
335335 else throw("fail to cast into String")
336336 }
337337
338338
339339 func bR (bP) = {
340340 let bc = bP
341341 if ($isInstanceOf(bc, "Int"))
342342 then {
343343 let bS = bc
344344 bS
345345 }
346346 else throw("fail to cast into Int")
347347 }
348348
349349
350350 func bT (bU) = {
351351 let bc = bU
352352 if (("S" == bc))
353353 then bj
354354 else if (("M" == bc))
355355 then bk
356356 else if (("L" == bc))
357357 then bl
358358 else if (("XL" == bc))
359359 then bm
360360 else if (("XXL" == bc))
361361 then bn
362362 else throw("Unknown land size")
363363 }
364364
365365
366366 let bV = {
367367 let bc = ba
368368 if ((base58'2W' == bc))
369369 then addressFromStringValue("3PEktVux2RhchSN63DsDo4b4mz4QqzKSeDv")
370370 else if ((base58'2T' == bc))
371371 then this
372372 else throw("Unknown chain")
373373 }
374374
375375 let bW = {
376376 let bc = ba
377377 if ((base58'2W' == bc))
378378 then addressFromStringValue("3PDVuU45H7Eh5dmtNbnRNRStGwULA7NY6Hb")
379379 else if ((base58'2T' == bc))
380380 then this
381381 else throw("Unknown chain")
382382 }
383383
384384 let bX = base58'6LfPuKJjLgekmncBhMg2LZyMTNVzZBccXR28ySXm9uXD'
385385
386386 let bY = [30, 60, 120]
387387
388388 let bZ = 300000
389389
390390 let ca = 5000000
391391
392392 let cb = 50
393393
394394 let cc = 10000000
395395
396396 let cd = {
397397 let bc = ba
398398 if ((base58'2W' == bc))
399399 then 252289527462
400400 else if ((base58'2T' == bc))
401401 then 2522895274
402402 else throw("Unknown chain")
403403 }
404404
405405 let ce = {
406406 let bc = ba
407407 if ((base58'2W' == bc))
408408 then 250000000
409409 else if ((base58'2T' == bc))
410410 then 250000000
411411 else throw("Unknown chain")
412412 }
413413
414414 let cf = toBigInt(5)
415415
416416 let cg = toBigInt(20)
417417
418418 let ch = toBigInt((20 * 20))
419419
420420 let ci = toBigInt(((20 * 20) * 20))
421421
422422 let cj = toBigInt((((20 * 20) * 20) * 20))
423423
424424 let ck = toBigInt(((((20 * 20) * 20) * 20) * 20))
425425
426426 let cl = 500
427427
428428 func cm () = "nextLandNum"
429429
430430
431431 func cn (co) = ("landToAsset_" + co)
432432
433433
434434 func cp (cq) = ("landByCustomName_" + cq)
435435
436436
437437 func cr (av,aD) = ((("infraLevelByAssetIdAndOwner_" + av) + "_") + aD)
438438
439439
440440 func cs (aA,av,aD) = makeString(["landArtStatusByTypeAssetIdAndOwner", aA, av, aD], "_")
441441
442442
443443 func ct (co) = ("landOwner_" + co)
444444
445445
446446 func cu (cq) = ("duckByCustomName_" + cq)
447447
448448
449449 func cv (cq) = ("accountByCustomName_" + cq)
450450
451451
452452 func cw () = "oldiesList"
453453
454454
455455 let cx = 0
456456
457457 let cy = 1
458458
459459 let cz = 2
460460
461461 let cA = 0
462462
463463 let cB = 5
464464
465465 let cC = 6
466466
467467 let cD = 7
468468
469469 func cE (co,bU) = ((P + co) + bU)
470470
471471
472472 func cF (cG,cH) = {
473473 let cI = (((((cH[0] + cH[1]) + cH[2]) + cH[3]) + cH[4]) + cH[5])
474474 if ((0 >= cI))
475475 then throw("Zero weights sum")
476476 else {
477477 let cJ = fraction(cG, bh, cI)
478478 func cK (cL,cM) = (cL :+ fraction(cM, cJ, bh))
479479
480480 let cN = cH
481481 let cO = size(cN)
482482 let cP = nil
483483 func cQ (cR,cS) = if ((cS >= cO))
484484 then cR
485485 else cK(cR, cN[cS])
486486
487487 func cT (cR,cS) = if ((cS >= cO))
488488 then cR
489489 else throw("List size exceeds 6")
490490
491491 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
492492 }
493493 }
494494
495495
496496 func cU (cG) = {
497497 let cV = split(value(getString(bL())), "_")
498498 if ((size(cV) != S))
499499 then throw("Wrong proportions data")
500500 else {
501501 let cW = [parseIntValue(cV[0]), parseIntValue(cV[1]), parseIntValue(cV[2]), parseIntValue(cV[3]), parseIntValue(cV[4]), parseIntValue(cV[5])]
502502 cF(cG, cW)
503503 }
504504 }
505505
506506
507507 func cX (cY,cZ,da) = {
508508 let db = cU(da)
509509 func dc (cL,bB) = {
510510 let dd = (parseIntValue(cZ[bB]) - db[bB])
511511 if ((0 > dd))
512512 then throw(((((("Not enough material idx=" + toString(bB)) + ", you have ") + cZ[bB]) + ", but need ") + toString(db[bB])))
513513 else (cL :+ toString(dd))
514514 }
515515
516516 if (cY)
517517 then {
518518 let cN = [0, 1, 2, 3, 4, 5]
519519 let cO = size(cN)
520520 let cP = nil
521521 func cQ (cR,cS) = if ((cS >= cO))
522522 then cR
523523 else dc(cR, cN[cS])
524524
525525 func cT (cR,cS) = if ((cS >= cO))
526526 then cR
527527 else throw("List size exceeds 6")
528528
529529 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
530530 }
531531 else cZ
532532 }
533533
534534
535535 func de (df,dg) = if ((dg == ""))
536536 then df
537537 else {
538538 let dh = if ((df == ""))
539539 then nil
540540 else split(df, "_")
541541 func di (cL,dj) = {
542542 let dk = cL._1
543543 func dl (dm,dn) = {
544544 let do = split(dn, ",")
545545 if ((size(do) != 2))
546546 then throw("Incorrect format, should be index,amount")
547547 else {
548548 let bB = parseIntValue(do[0])
549549 if (if ((0 > bB))
550550 then true
551551 else (bB >= size(ac)))
552552 then throw("Unknown product idx")
553553 else if ((bB != dk))
554554 then dm
555555 else {
556556 let dp = parseIntValue(do[1])
557557 if ((0 >= dp))
558558 then throw("Pass only positive amounts")
559559 else (dm + dp)
560560 }
561561 }
562562 }
563563
564564 let dq = {
565565 let cN = split(dg, "_")
566566 let cO = size(cN)
567567 let cP = 0
568568 func cQ (cR,cS) = if ((cS >= cO))
569569 then cR
570570 else dl(cR, cN[cS])
571571
572572 func cT (cR,cS) = if ((cS >= cO))
573573 then cR
574574 else throw("List size exceeds 10")
575575
576576 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10)
577577 }
578578 let dr = if ((size(dh) > dk))
579579 then parseIntValue(dh[dk])
580580 else 0
581581 let ds = if ((dr >= dq))
582582 then (dr - dq)
583583 else throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dq)))
584584 $Tuple2((dk + 1), (cL._2 :+ toString(ds)))
585585 }
586586
587587 let dt = {
588588 let cN = ac
589589 let cO = size(cN)
590590 let cP = $Tuple2(0, nil)
591591 func cQ (cR,cS) = if ((cS >= cO))
592592 then cR
593593 else di(cR, cN[cS])
594594
595595 func cT (cR,cS) = if ((cS >= cO))
596596 then cR
597597 else throw("List size exceeds 50")
598598
599599 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
600600 }
601601 makeString(dt._2, "_")
602602 }
603603
604604
605-func du (dv,dh,dw,dx,dy,dz) = {
606- let do = split(dv, ":")
605+func du (dv) = {
606+ let dh = if ((dv == ""))
607+ then nil
608+ else split(dv, "_")
609+ func dw (cL,aY) = {
610+ let dk = (size(cL) / 8)
611+ let dr = if ((size(dh) > dk))
612+ then parseIntValue(dh[dk])
613+ else 0
614+ (cL + toBytes(dr))
615+ }
616+
617+ let cN = ac
618+ let cO = size(cN)
619+ let cP = base58''
620+ func cQ (cR,cS) = if ((cS >= cO))
621+ then cR
622+ else dw(cR, cN[cS])
623+
624+ func cT (cR,cS) = if ((cS >= cO))
625+ then cR
626+ else throw("List size exceeds 50")
627+
628+ cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
629+ }
630+
631+
632+func dx (dy,dh,dz,dA,dB,dC) = {
633+ let do = split(dy, ":")
607634 if ((size(do) != 2))
608635 then throw("Incorrect format, should be index:amount")
609636 else {
610- let dA = parseIntValue(do[0])
611- let dB = parseIntValue(do[1])
612- if (if ((0 > dA))
637+ let dD = parseIntValue(do[0])
638+ let dE = parseIntValue(do[1])
639+ if (if ((0 > dD))
613640 then true
614- else (dA >= size(ac)))
641+ else (dD >= size(ac)))
615642 then throw("Unknown product idx")
616- else if ((0 > dB))
643+ else if ((0 > dE))
617644 then throw("Count can't be negative")
618- else if ((dB == 0))
645+ else if ((dE == 0))
619646 then $Tuple2(dh, false)
620647 else {
621- func dC (cL,dj) = {
648+ func dF (cL,dj) = {
622649 let dk = cL._1
623650 let dr = if ((size(dh) > dk))
624651 then parseIntValue(dh[dk])
625652 else 0
626- if ((dA != dk))
653+ if ((dD != dk))
627654 then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3)
628- else if (if (!(dw))
629- then (dB > dr)
655+ else if (if (!(dz))
656+ then (dE > dr)
630657 else false)
631- then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dB)))
658+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE)))
632659 else {
633- let dD = if (!(dw))
660+ let dG = if (!(dz))
634661 then {
635- let dE = split(dj, "_")[ae]
636- if ((dE == ""))
662+ let dH = split(dj, "_")[ae]
663+ if ((dH == ""))
637664 then throw("Item cannot be equipped")
638665 else {
639- let dF = parseIntValue(dE)
640- let dG = (dF / 100)
641- if ((dx != dG))
666+ let dI = parseIntValue(dH)
667+ let dJ = (dI / 100)
668+ if ((dA != dJ))
642669 then throw("Segment incompatible")
643670 else {
644- let dH = ((dF % 100) / 10)
645- if ((dy != dH))
671+ let dK = ((dI % 100) / 10)
672+ if ((dB != dK))
646673 then throw("Slot incompatible")
647674 else {
648- let dI = (dF % 10)
649- if (if ((dz != 0))
650- then (dI > 1)
675+ let dL = (dI % 10)
676+ if (if ((dC != 0))
677+ then (dL > 1)
651678 else false)
652679 then throw("Big items should occupy slot 0")
653- else (dI > 1)
680+ else (dL > 1)
654681 }
655682 }
656683 }
657684 }
658685 else false
659- $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dw)
660- then dB
661- else -(dB))))), if (cL._3)
686+ $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz)
687+ then dE
688+ else -(dE))))), if (cL._3)
662689 then true
663- else dD)
690+ else dG)
664691 }
665692 }
666693
667694 let dd = {
668695 let cN = ac
669696 let cO = size(cN)
670697 let cP = $Tuple3(0, nil, false)
671698 func cQ (cR,cS) = if ((cS >= cO))
672699 then cR
673- else dC(cR, cN[cS])
700+ else dF(cR, cN[cS])
674701
675702 func cT (cR,cS) = if ((cS >= cO))
676703 then cR
677704 else throw("List size exceeds 27")
678705
679706 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27)
680707 }
681708 $Tuple2(dd._2, dd._3)
682709 }
683710 }
684711 }
685712
686713
687-func dJ (dK,dL,dw,dx,dy) = if ((dK != ""))
714+func dM (dN,dO,dz,dA,dB) = if ((dN != ""))
688715 then {
689- let dM = split(dK, ",")
690- if ((size(dM) > n))
716+ let dP = split(dN, ",")
717+ if ((size(dP) > n))
691718 then throw("Wrong slots format")
692719 else {
693- let dN = dM[0]
694- let dO = if ((size(dM) > 1))
695- then dM[1]
720+ let dQ = dP[0]
721+ let dR = if ((size(dP) > 1))
722+ then dP[1]
696723 else ""
697- if (if ((dN == ""))
698- then (dO == "")
724+ if (if ((dQ == ""))
725+ then (dR == "")
699726 else false)
700- then dL
727+ then dO
701728 else {
702- let dP = if ((dN != ""))
703- then du(dN, dL, dw, dx, dy, 0)
704- else $Tuple2(dL, false)
705- if ((dO != ""))
706- then if (dP._2)
729+ let dS = if ((dQ != ""))
730+ then dx(dQ, dO, dz, dA, dB, 0)
731+ else $Tuple2(dO, false)
732+ if ((dR != ""))
733+ then if (dS._2)
707734 then throw("Big item already occupies slot")
708- else du(dO, dP._1, dw, dx, dy, 1)._1
709- else dP._1
735+ else dx(dR, dS._1, dz, dA, dB, 1)._1
736+ else dS._1
710737 }
711738 }
712739 }
713- else dL
714-
715-
716-func dQ (dR,dh,dw) = {
717- func dx (cL,dS) = {
740+ else dO
741+
742+
743+func dT (dU,dh,dz) = {
744+ func dA (cL,dV) = {
718745 let dk = cL._1
719- let dy = split(dS, ";")
720- if ((size(dy) != m))
746+ let dB = split(dV, ";")
747+ if ((size(dB) != m))
721748 then throw("Wrong segment format")
722749 else {
723- let dT = dy[0]
724- let dq = dy[1]
725- if (if ((dT == ""))
750+ let dW = dB[0]
751+ let dq = dB[1]
752+ if (if ((dW == ""))
726753 then (dq == "")
727754 else false)
728755 then $Tuple2((dk + 1), cL._2)
729756 else {
730- let dU = dJ(dT, cL._2, dw, dk, 0)
731- $Tuple2((dk + 1), dJ(dq, dU, dw, dk, 1))
757+ let dX = dM(dW, cL._2, dz, dk, 0)
758+ $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1))
732759 }
733760 }
734761 }
735762
736-( let cN = dR
763+( let cN = dU
737764 let cO = size(cN)
738765 let cP = $Tuple2(0, dh)
739766 func cQ (cR,cS) = if ((cS >= cO))
740767 then cR
741- else dx(cR, cN[cS])
768+ else dA(cR, cN[cS])
742769
743770 func cT (cR,cS) = if ((cS >= cO))
744771 then cR
745772 else throw("List size exceeds 6")
746773
747774 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
748775 }
749776
750777
751-func dV (dW,dX,dY,dZ) = if ((size(dW) != S))
778+func dY (dZ,ea,eb,ec) = if ((size(dZ) != S))
752779 then throw("Wrong proportions data")
753780 else {
754- func ea (cL,eb) = {
755- let dd = (parseIntValue(dW[eb]) + ((dZ * dX[eb]) * dY))
781+ func ed (cL,ee) = {
782+ let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb))
756783 if ((0 > dd))
757- then throw(((((((("Panic! Pieces of type=" + toString(eb)) + ", sign=") + toString(dZ)) + ", terrainCounts[i]=") + toString(dX[eb])) + ", landSizeIndex=") + toString(dY)))
784+ then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb)))
758785 else (cL :+ toString(dd))
759786 }
760787
761788 let cW = {
762789 let cN = [0, 1, 2, 3, 4, 5]
763790 let cO = size(cN)
764791 let cP = nil
765792 func cQ (cR,cS) = if ((cS >= cO))
766793 then cR
767- else ea(cR, cN[cS])
794+ else ed(cR, cN[cS])
768795
769796 func cT (cR,cS) = if ((cS >= cO))
770797 then cR
771798 else throw("List size exceeds 6")
772799
773800 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
774801 }
775802 makeString(cW, "_")
776803 }
777804
778805
779-func ec (dX,dY,dZ) = {
780- let dW = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
781- dV(dW, dX, dY, dZ)
782- }
783-
784-
785-func ed (ee) = [(size(split(ee, "A")) - 1), (size(split(ee, "B")) - 1), (size(split(ee, "C")) - 1), (size(split(ee, "D")) - 1), (size(split(ee, "E")) - 1), (size(split(ee, "F")) - 1)]
786-
787-
788-func ef (eg,dX,eh,dY,ei) = {
789- func ej (cL,eb) = {
790- let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
791- (cL :+ toString((parseIntValue(eg[eb]) + ek)))
806+func ef (ea,eb,ec) = {
807+ let dZ = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
808+ dY(dZ, ea, eb, ec)
809+ }
810+
811+
812+func eg (eh) = [(size(split(eh, "A")) - 1), (size(split(eh, "B")) - 1), (size(split(eh, "C")) - 1), (size(split(eh, "D")) - 1), (size(split(eh, "E")) - 1), (size(split(eh, "F")) - 1)]
813+
814+
815+func ei (ej,ea,ek,eb,el) = {
816+ func em (cL,ee) = {
817+ let en = ((fraction(ek, el, U) * ea[ee]) * eb)
818+ (cL :+ toString((parseIntValue(ej[ee]) + en)))
792819 }
793820
794821 let cW = {
795822 let cN = [0, 1, 2, 3, 4, 5]
796823 let cO = size(cN)
797824 let cP = nil
798825 func cQ (cR,cS) = if ((cS >= cO))
799826 then cR
800- else ej(cR, cN[cS])
827+ else em(cR, cN[cS])
801828
802829 func cT (cR,cS) = if ((cS >= cO))
803830 then cR
804831 else throw("List size exceeds 6")
805832
806833 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
807834 }
808835 makeString(cW, "_")
809836 }
810837
811838
812-func el (dX,eh,dY,ei) = {
813- func ej (cL,eb) = {
814- let ek = ((fraction(eh, ei, U) * dX[eb]) * dY)
815- $Tuple2((cL._1 :+ ek), (cL._2 + ek))
839+func eo (ea,ek,eb,el) = {
840+ func em (cL,ee) = {
841+ let en = ((fraction(ek, el, U) * ea[ee]) * eb)
842+ $Tuple2((cL._1 :+ en), (cL._2 + en))
816843 }
817844
818845 let cN = [0, 1, 2, 3, 4, 5]
819846 let cO = size(cN)
820847 let cP = $Tuple2(nil, 0)
821848 func cQ (cR,cS) = if ((cS >= cO))
822849 then cR
823- else ej(cR, cN[cS])
850+ else em(cR, cN[cS])
824851
825852 func cT (cR,cS) = if ((cS >= cO))
826853 then cR
827854 else throw("List size exceeds 6")
828855
829856 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
830857 }
831858
832859
833-func em (en,eo,ep,eq) = {
834- let er = ep._1
835- let es = ep._2
836- if ((es == 0))
837- then $Tuple2(makeString(en, "_"), makeString(eo, "_"))
838- else if ((eq >= es))
860+func ep (eq,er,es,et) = {
861+ let eu = es._1
862+ let ev = es._2
863+ if ((ev == 0))
864+ then $Tuple2(makeString(eq, "_"), makeString(er, "_"))
865+ else if ((et >= ev))
839866 then {
840- func et (cL,eb) = (cL :+ toString((parseIntValue(en[eb]) + er[eb])))
867+ func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee])))
841868
842869 let cW = {
843870 let cN = [0, 1, 2, 3, 4, 5]
844871 let cO = size(cN)
845872 let cP = nil
846873 func cQ (cR,cS) = if ((cS >= cO))
847874 then cR
848- else et(cR, cN[cS])
875+ else ew(cR, cN[cS])
849876
850877 func cT (cR,cS) = if ((cS >= cO))
851878 then cR
852879 else throw("List size exceeds 6")
853880
854881 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
855882 }
856- $Tuple2(makeString(cW, "_"), makeString(eo, "_"))
883+ $Tuple2(makeString(cW, "_"), makeString(er, "_"))
857884 }
858885 else {
859- func eu (cL,eb) = {
860- let ev = fraction(er[eb], eq, es)
861- $Tuple2((cL._1 :+ toString((parseIntValue(en[eb]) + ev))), (cL._2 :+ toString(((parseIntValue(eo[eb]) + er[eb]) - ev))))
886+ func ex (cL,ee) = {
887+ let ey = fraction(eu[ee], et, ev)
888+ $Tuple2((cL._1 :+ toString((parseIntValue(eq[ee]) + ey))), (cL._2 :+ toString(((parseIntValue(er[ee]) + eu[ee]) - ey))))
862889 }
863890
864891 let cW = {
865892 let cN = [0, 1, 2, 3, 4, 5]
866893 let cO = size(cN)
867894 let cP = $Tuple2(nil, nil)
868895 func cQ (cR,cS) = if ((cS >= cO))
869896 then cR
870- else eu(cR, cN[cS])
897+ else ex(cR, cN[cS])
871898
872899 func cT (cR,cS) = if ((cS >= cO))
873900 then cR
874901 else throw("List size exceeds 6")
875902
876903 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
877904 }
878905 $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
879906 }
880907 }
881908
882909
883-func ew (ex) = if ((ex >= toBigInt(0)))
884- then ex
885- else -(ex)
886-
887-
888-let ey = [[6, 9, 14, 15, 16], [5, 8, 13, 14, 15], [1, 4, 9, 10, 15], [1, 6, 7, 15, 19], [4, 7, 8, 13, 18]]
889-
890-func ez (bS,eA) = {
891- let eB = toInt((bS % cg))
892- let eC = if ((eA[0] > eB))
910+func ez (eA) = if ((eA >= toBigInt(0)))
911+ then eA
912+ else -(eA)
913+
914+
915+let eB = [[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]]
916+
917+func eC (bS,eD) = {
918+ let eE = toInt((bS % cg))
919+ let eF = if ((eD[0] > eE))
893920 then "A"
894- else if ((eA[1] > eB))
921+ else if ((eD[1] > eE))
895922 then "B"
896- else if ((eA[2] > eB))
923+ else if ((eD[2] > eE))
897924 then "C"
898- else if ((eA[3] > eB))
925+ else if ((eD[3] > eE))
899926 then "D"
900- else if ((eA[4] > eB))
927+ else if ((eD[4] > eE))
901928 then "E"
902929 else "F"
903- eC
904- }
905-
906-
907-func eD (eE,eF) = {
908- let eG = ey[eF]
909- func eH (cL,cM) = $Tuple2((((((cL._1 + ez(cL._2, eG)) + ez((cL._2 / cg), eG)) + ez((cL._2 / ch), eG)) + ez((cL._2 / ci), eG)) + ez((cL._2 / cj), eG)), (cL._2 / ck))
910-
911- let eI = {
930+ eF
931+ }
932+
933+
934+func eG (eH,eI) = {
935+ let eJ = eB[eI]
936+ func eK (cL,cM) = $Tuple2((((((cL._1 + eC(cL._2, eJ)) + eC((cL._2 / cg), eJ)) + eC((cL._2 / ch), eJ)) + eC((cL._2 / ci), eJ)) + eC((cL._2 / cj), eJ)), (cL._2 / ck))
937+
938+ let eL = {
912939 let cN = [1, 2, 3, 4, 5]
913940 let cO = size(cN)
914- let cP = $Tuple2("", (eE / cf))
941+ let cP = $Tuple2("", (eH / cf))
915942 func cQ (cR,cS) = if ((cS >= cO))
916943 then cR
917- else eH(cR, cN[cS])
944+ else eK(cR, cN[cS])
918945
919946 func cT (cR,cS) = if ((cS >= cO))
920947 then cR
921948 else throw("List size exceeds 5")
922949
923950 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
924951 }
925- eI._1
926- }
927-
928-
929-func eJ (eK) = {
930- let eL = split(valueOrElse(getString(eK), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
931-[toString(valueOrElse(parseInt(eL[ap]), 0)), if ((size(split(eL[aq], "_")) == S))
932- then eL[aq]
933- else "0_0_0_0_0_0", if ((size(split(eL[ar], "_")) == S))
934- then eL[ar]
935- else "0_0_0_0_0_0", eL[as]]
952+ eL._1
936953 }
937954
938955
939956 func eM (eN) = {
940- let do = split(eN, "_")
957+ let eO = split(valueOrElse(getString(eN), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
958+[toString(valueOrElse(parseInt(eO[ap]), 0)), if ((size(split(eO[aq], "_")) == S))
959+ then eO[aq]
960+ else "0_0_0_0_0_0", if ((size(split(eO[ar], "_")) == S))
961+ then eO[ar]
962+ else "0_0_0_0_0_0", eO[as]]
963+ }
964+
965+
966+func eP (eQ) = {
967+ let do = split(eQ, "_")
941968 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
942969 }
943970
944971
945-func eO (eP) = {
946- let eQ = eP[aj]
947- func eR (cL,dj) = (cL + parseIntValue(dj))
948-
949- func eS (cL,dj) = {
972+func eR (eS) = {
973+ let eT = eS[aj]
974+ func eU (cL,dj) = (cL + parseIntValue(dj))
975+
976+ func eV (cL,dj) = {
950977 let bB = cL._1
951- let eT = (((parseIntValue(dj) + af) - 1) / af)
952- $Tuple2((bB + 1), (cL._2 + (eT * bi)))
978+ let eW = (((parseIntValue(dj) + af) - 1) / af)
979+ $Tuple2((bB + 1), (cL._2 + (eW * bi)))
953980 }
954981
955- let eU = {
956- let cN = split(eP[ah], "_")
982+ let eX = {
983+ let cN = split(eS[ah], "_")
957984 let cO = size(cN)
958985 let cP = 0
959986 func cQ (cR,cS) = if ((cS >= cO))
960987 then cR
961- else eR(cR, cN[cS])
988+ else eU(cR, cN[cS])
962989
963990 func cT (cR,cS) = if ((cS >= cO))
964991 then cR
965992 else throw("List size exceeds 6")
966993
967994 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
968995 }
969- let eV = {
970- let cN = split(eP[ai], "_")
996+ let eY = {
997+ let cN = split(eS[ai], "_")
971998 let cO = size(cN)
972999 let cP = 0
973- func eW (cR,cS) = if ((cS >= cO))
1000+ func eZ (cR,cS) = if ((cS >= cO))
9741001 then cR
975- else eR(cR, cN[cS])
976-
977- func eX (cR,cS) = if ((cS >= cO))
1002+ else eU(cR, cN[cS])
1003+
1004+ func fa (cR,cS) = if ((cS >= cO))
9781005 then cR
9791006 else throw("List size exceeds 6")
9801007
981- eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
1008+ fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
9821009 }
983- let eY = if ((eQ == ""))
1010+ let fb = if ((eT == ""))
9841011 then 0
985- else ( let cN = split_4C(eQ, "_")
1012+ else ( let cN = split_4C(eT, "_")
9861013 let cO = size(cN)
9871014 let cP = $Tuple2(0, 0)
988- func eZ (cR,cS) = if ((cS >= cO))
1015+ func fc (cR,cS) = if ((cS >= cO))
9891016 then cR
990- else eS(cR, cN[cS])
991-
992- func fa (cR,cS) = if ((cS >= cO))
1017+ else eV(cR, cN[cS])
1018+
1019+ func fd (cR,cS) = if ((cS >= cO))
9931020 then cR
9941021 else throw("List size exceeds 50")
9951022
996- fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
997- ((eU + eV) + eY)
998- }
999-
1000-
1001-func fb (fc,fd,fe) = {
1002- let eN = ((toString(fd) + "_") + toString(fe))
1003- let ff = eM(eN)
1004- let fg = valueOrElse(getString(fc), (eN + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1005- let fh = split_4C(fg, ":")
1006- let fi = eO(fh)
1007- let fj = if ((5 > size(fh)))
1008- then makeString(["0", toString(fi), toString((ff - fi)), toString(ff)], "_")
1009- else {
1010- let fk = split(fh[ak], "_")
1011- let fl = parseIntValue(fk[al])
1012- let fm = if ((size(fk) > 1))
1013- then parseIntValue(fk[am])
1014- else fi
1015- makeString([toString(fl), toString(fm), toString(((ff - fl) - fm)), toString(ff)], "_")
1016- }
1017-[fh[ag], if ((size(split(fh[ah], "_")) == S))
1018- then fh[ah]
1019- else "0_0_0_0_0_0", if ((size(split(fh[ai], "_")) == S))
1020- then fh[ai]
1021- else "0_0_0_0_0_0", fh[aj], fj]
1022- }
1023-
1024-
1025-func fn (eP) = {
1026- let fo = eO(eP)
1027- let fp = parseIntValue(split(eP[ak], "_")[al])
1028- ((eM(eP[ag]) - fo) - fp)
1029- }
1030-
1031-
1032-func fq (fr,fs) = {
1033- let eT = if ((fr >= 0))
1034- then (((fr + fs) - 1) / fs)
1035- else -((((-(fr) + fs) - 1) / fs))
1036- (eT * bi)
1037- }
1038-
1039-
1040-func ft (fu,eP,fv) = if ((size(fu) != 3))
1023+ fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50))._2
1024+ ((eX + eY) + fb)
1025+ }
1026+
1027+
1028+func fe (ff,fg,fh) = {
1029+ let eQ = ((toString(fg) + "_") + toString(fh))
1030+ let fi = eP(eQ)
1031+ let fj = valueOrElse(getString(ff), (eQ + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1032+ let fk = split_4C(fj, ":")
1033+ let fl = eR(fk)
1034+ let fm = if ((5 > size(fk)))
1035+ then makeString(["0", toString(fl), toString((fi - fl)), toString(fi)], "_")
1036+ else {
1037+ let fn = split(fk[ak], "_")
1038+ let fo = parseIntValue(fn[al])
1039+ let fp = if ((size(fn) > 1))
1040+ then parseIntValue(fn[am])
1041+ else fl
1042+ makeString([toString(fo), toString(fp), toString(((fi - fo) - fp)), toString(fi)], "_")
1043+ }
1044+[fk[ag], if ((size(split(fk[ah], "_")) == S))
1045+ then fk[ah]
1046+ else "0_0_0_0_0_0", if ((size(split(fk[ai], "_")) == S))
1047+ then fk[ai]
1048+ else "0_0_0_0_0_0", fk[aj], fm]
1049+ }
1050+
1051+
1052+func fq (eS) = {
1053+ let fr = eR(eS)
1054+ let fs = parseIntValue(split(eS[ak], "_")[al])
1055+ ((eP(eS[ag]) - fr) - fs)
1056+ }
1057+
1058+
1059+func ft (fu,fv) = {
1060+ let eW = if ((fu >= 0))
1061+ then (((fu + fv) - 1) / fv)
1062+ else -((((-(fu) + fv) - 1) / fv))
1063+ (eW * bi)
1064+ }
1065+
1066+
1067+func fw (fx,eS,fy) = if ((size(fx) != 3))
10411068 then throw("cargoListStr should contain exactly 2 ':' separators")
10421069 else {
1043- let fw = split(fu[0], "_")
1044- let fx = split(fu[1], "_")
1045- let fy = if ((fu[2] == ""))
1070+ let fz = split(fx[0], "_")
1071+ let fA = split(fx[1], "_")
1072+ let fB = if ((fx[2] == ""))
10461073 then nil
1047- else split(fu[2], "_")
1048- if ((size(fw) != S))
1074+ else split(fx[2], "_")
1075+ if ((size(fz) != S))
10491076 then throw("All 6 resources should be passed")
1050- else if ((size(fx) != S))
1077+ else if ((size(fA) != S))
10511078 then throw("All 6 materials should be passed")
10521079 else {
1053- let eq = fn(eP)
1054- let fz = split(eP[ah], "_")
1055- let fA = split(eP[ai], "_")
1056- let fB = if ((eP[aj] == ""))
1080+ let et = fq(eS)
1081+ let fC = split(eS[ah], "_")
1082+ let fD = split(eS[ai], "_")
1083+ let fE = if ((eS[aj] == ""))
10571084 then nil
1058- else split(eP[aj], "_")
1059- let eo = split(fv[aq], "_")
1060- let fC = split(fv[ar], "_")
1061- let fD = if ((fv[as] == ""))
1085+ else split(eS[aj], "_")
1086+ let er = split(fy[aq], "_")
1087+ let fF = split(fy[ar], "_")
1088+ let fG = if ((fy[as] == ""))
10621089 then nil
1063- else split(fv[as], "_")
1064- func fE (cL,dj) = {
1065- let eb = cL._1
1066- let fF = parseIntValue(dj)
1067- let fG = parseIntValue(fz[eb])
1068- let fH = parseIntValue(eo[eb])
1069- if ((fF == 0))
1070- then $Tuple4((eb + 1), (cL._2 :+ fz[eb]), (cL._3 :+ eo[eb]), cL._4)
1071- else if ((fF > 0))
1072- then if ((fF > fH))
1073- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fH)) + " available"))
1074- else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1075- else if ((-(fF) > fG))
1076- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fG)) + " available"))
1077- else $Tuple4((eb + 1), (cL._2 :+ toString((fG + fF))), (cL._3 :+ toString((fH - fF))), (cL._4 + fF))
1090+ else split(fy[as], "_")
1091+ func fH (cL,dj) = {
1092+ let ee = cL._1
1093+ let fI = parseIntValue(dj)
1094+ let fJ = parseIntValue(fC[ee])
1095+ let fK = parseIntValue(er[ee])
1096+ if ((fI == 0))
1097+ then $Tuple4((ee + 1), (cL._2 :+ fC[ee]), (cL._3 :+ er[ee]), cL._4)
1098+ else if ((fI > 0))
1099+ then if ((fI > fK))
1100+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1101+ else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI))
1102+ else if ((-(fI) > fJ))
1103+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1104+ else $Tuple4((ee + 1), (cL._2 :+ toString((fJ + fI))), (cL._3 :+ toString((fK - fI))), (cL._4 + fI))
10781105 }
10791106
10801107 let cW = {
1081- let cN = fw
1108+ let cN = fz
10821109 let cO = size(cN)
10831110 let cP = $Tuple4(0, nil, nil, 0)
10841111 func cQ (cR,cS) = if ((cS >= cO))
10851112 then cR
1086- else fE(cR, cN[cS])
1113+ else fH(cR, cN[cS])
10871114
10881115 func cT (cR,cS) = if ((cS >= cO))
10891116 then cR
10901117 else throw("List size exceeds 6")
10911118
10921119 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
10931120 }
1094- func fI (cL,dj) = {
1095- let eb = cL._1
1096- let fF = parseIntValue(dj)
1097- let fJ = parseIntValue(fA[eb])
1098- let fK = parseIntValue(fC[eb])
1099- if ((fF == 0))
1100- then $Tuple4((eb + 1), (cL._2 :+ fA[eb]), (cL._3 :+ fC[eb]), cL._4)
1101- else if ((fF > 0))
1102- then if ((fF > fK))
1103- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fK)) + " available"))
1104- else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1105- else if ((-(fF) > fJ))
1106- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fJ)) + " available"))
1107- else $Tuple4((eb + 1), (cL._2 :+ toString((fJ + fF))), (cL._3 :+ toString((fK - fF))), (cL._4 + fF))
1121+ func fL (cL,dj) = {
1122+ let ee = cL._1
1123+ let fI = parseIntValue(dj)
1124+ let fM = parseIntValue(fD[ee])
1125+ let fN = parseIntValue(fF[ee])
1126+ if ((fI == 0))
1127+ then $Tuple4((ee + 1), (cL._2 :+ fD[ee]), (cL._3 :+ fF[ee]), cL._4)
1128+ else if ((fI > 0))
1129+ then if ((fI > fN))
1130+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
1131+ else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI))
1132+ else if ((-(fI) > fM))
1133+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fM)) + " available"))
1134+ else $Tuple4((ee + 1), (cL._2 :+ toString((fM + fI))), (cL._3 :+ toString((fN - fI))), (cL._4 + fI))
11081135 }
11091136
1110- let dT = {
1111- let cN = fx
1137+ let dW = {
1138+ let cN = fA
11121139 let cO = size(cN)
11131140 let cP = $Tuple4(0, nil, nil, cW._4)
1114- func eW (cR,cS) = if ((cS >= cO))
1141+ func eZ (cR,cS) = if ((cS >= cO))
11151142 then cR
1116- else fI(cR, cN[cS])
1117-
1118- func eX (cR,cS) = if ((cS >= cO))
1143+ else fL(cR, cN[cS])
1144+
1145+ func fa (cR,cS) = if ((cS >= cO))
11191146 then cR
11201147 else throw("List size exceeds 6")
11211148
1122- eX(eW(eW(eW(eW(eW(eW(cP, 0), 1), 2), 3), 4), 5), 6)
1149+ fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
11231150 }
1124- func fL (cL,dj) = {
1125- let eb = cL._1
1126- let fF = parseIntValue(dj)
1127- let fM = if ((size(fB) > eb))
1128- then parseIntValue(fB[eb])
1151+ func fO (cL,dj) = {
1152+ let ee = cL._1
1153+ let fI = parseIntValue(dj)
1154+ let fP = if ((size(fE) > ee))
1155+ then parseIntValue(fE[ee])
11291156 else 0
1130- let fN = if ((size(fD) > eb))
1131- then parseIntValue(fD[eb])
1157+ let fQ = if ((size(fG) > ee))
1158+ then parseIntValue(fG[ee])
11321159 else 0
1133- if ((fF == 0))
1134- then $Tuple4((eb + 1), (cL._2 :+ toString(fM)), (cL._3 :+ toString(fN)), cL._4)
1135- else if ((fF > 0))
1136- then if ((fF > fN))
1137- then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fN)) + " available"))
1160+ if ((fI == 0))
1161+ then $Tuple4((ee + 1), (cL._2 :+ toString(fP)), (cL._3 :+ toString(fQ)), cL._4)
1162+ else if ((fI > 0))
1163+ then if ((fI > fQ))
1164+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fQ)) + " available"))
11381165 else {
1139- let fO = (fq((fM + fF), af) - fq(fM, af))
1140- $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
1166+ let fR = (ft((fP + fI), af) - ft(fP, af))
1167+ $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR))
11411168 }
1142- else if ((-(fF) > fM))
1143- then throw((((("Attempt to take " + toString(-(fF))) + " from warehouse, but only ") + toString(fM)) + " available"))
1169+ else if ((-(fI) > fP))
1170+ then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available"))
11441171 else {
1145- let fO = (fq((fM + fF), af) - fq(fM, af))
1146- $Tuple4((eb + 1), (cL._2 :+ toString((fM + fF))), (cL._3 :+ toString((fN - fF))), (cL._4 + fO))
1172+ let fR = (ft((fP + fI), af) - ft(fP, af))
1173+ $Tuple4((ee + 1), (cL._2 :+ toString((fP + fI))), (cL._3 :+ toString((fQ - fI))), (cL._4 + fR))
11471174 }
11481175 }
11491176
1150- let eL = if ((size(fy) != 0))
1177+ let eO = if ((size(fB) != 0))
11511178 then {
1152- let cN = fy
1179+ let cN = fB
11531180 let cO = size(cN)
1154- let cP = $Tuple4(0, nil, nil, dT._4)
1155- func eZ (cR,cS) = if ((cS >= cO))
1181+ let cP = $Tuple4(0, nil, nil, dW._4)
1182+ func fc (cR,cS) = if ((cS >= cO))
11561183 then cR
1157- else fL(cR, cN[cS])
1158-
1159- func fa (cR,cS) = if ((cS >= cO))
1184+ else fO(cR, cN[cS])
1185+
1186+ func fd (cR,cS) = if ((cS >= cO))
11601187 then cR
11611188 else throw("List size exceeds 50")
11621189
1163- fa(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
1190+ fd(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(fc(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
11641191 }
1165- else $Tuple4(0, fB, fD, dT._4)
1166- let fP = eL._4
1167- if ((fP > eq))
1168- then throw((((("Attempt to put total " + toString(fP)) + " stuff, but only ") + toString(eq)) + " warehouse space left"))
1169- else $Tuple7(makeString(cW._2, "_"), makeString(dT._2, "_"), makeString(eL._2, "_"), makeString(cW._3, "_"), makeString(dT._3, "_"), makeString(eL._3, "_"), fP)
1192+ else $Tuple4(0, fE, fG, dW._4)
1193+ let fS = eO._4
1194+ if ((fS > et))
1195+ then throw((((("Attempt to put total " + toString(fS)) + " stuff, but only ") + toString(et)) + " warehouse space left"))
1196+ else $Tuple7(makeString(cW._2, "_"), makeString(dW._2, "_"), makeString(eO._2, "_"), makeString(cW._3, "_"), makeString(dW._3, "_"), makeString(eO._3, "_"), fS)
11701197 }
11711198 }
11721199
11731200
1174-func fQ (fR,fS) = {
1175- let aT = toString(fR)
1176- let fT = ew(toBigInt(fS))
1177- let fU = valueOrElse(getInteger(cm()), (cl + 1))
1178- let co = toString(fU)
1179- let eF = toInt((fT % cf))
1180- let ee = eD(fT, eF)
1181- let fV = aa[eF]
1182- let fW = Issue(cE(co, "S"), makeString([co, "S", ee, fV], "_"), 1, 0, false)
1183- let av = calculateAssetId(fW)
1184- let fX = toBase58String(av)
1185- $Tuple2([IntegerEntry(cm(), (fU + 1)), fW, StringEntry(cn(co), fX), StringEntry(au(fX), aT), StringEntry(ct(co), aT), IntegerEntry(ay(fX), 0), IntegerEntry(cr(fX, aT), 0), ScriptTransfer(fR, 1, av)], $Tuple2(fX, fV))
1186- }
1187-
1188-
1189-func fY (aT,fZ,ga) = if (!(sigVerify_8Kb(fZ, ga, bX)))
1201+func fT (fU,fV) = {
1202+ let aT = toString(fU)
1203+ let fW = ez(toBigInt(fV))
1204+ let fX = valueOrElse(getInteger(cm()), (cl + 1))
1205+ let co = toString(fX)
1206+ let eI = toInt((fW % cf))
1207+ let eh = eG(fW, eI)
1208+ let fY = aa[eI]
1209+ let fZ = Issue(cE(co, "S"), makeString([co, "S", eh, fY], "_"), 1, 0, false)
1210+ let av = calculateAssetId(fZ)
1211+ let ga = toBase58String(av)
1212+ $Tuple2([IntegerEntry(cm(), (fX + 1)), fZ, StringEntry(cn(co), ga), StringEntry(au(ga), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ga), 0), IntegerEntry(cr(ga, aT), 0), ScriptTransfer(fU, 1, av)], $Tuple2(ga, fY))
1213+ }
1214+
1215+
1216+func gb (aT,gc,gd) = if (!(sigVerify_8Kb(gc, gd, bX)))
11901217 then throw("signature does not match")
11911218 else {
1192- let do = split(toUtf8String(fZ), ";")
1193- let gb = split(do[0], "|")
1194- let gc = split(gb[cA], "_")
1195- let gd = parseIntValue(gc[0])
1196- let ge = parseIntValue(gc[1])
1197- let gf = split(do[1], ":")
1198- let gg = gf[0]
1199- let gh = parseIntValue(gb[cB])
1200- if (if ((gh > (lastBlock.timestamp + bZ)))
1219+ let do = split(toUtf8String(gc), ";")
1220+ let ge = split(do[0], "|")
1221+ let gf = split(ge[cA], "_")
1222+ let gg = parseIntValue(gf[0])
1223+ let gh = parseIntValue(gf[1])
1224+ let gi = split(do[1], ":")
1225+ let gj = gi[0]
1226+ let gk = parseIntValue(ge[cB])
1227+ if (if ((gk > (lastBlock.timestamp + bZ)))
12011228 then true
1202- else ((lastBlock.timestamp - bZ) > gh))
1203- then throw(((("signature outdated: logTime=" + toString(gh)) + ", bcTime=") + toString(lastBlock.timestamp)))
1229+ else ((lastBlock.timestamp - bZ) > gk))
1230+ then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp)))
12041231 else {
1205- let gi = gf[1]
1206- let gj = valueOrElse(getString(at(aT)), "")
1207- if ((gj != gi))
1208- then throw(((("Tx ids don't match! In state: " + gj) + ", in msg: ") + gi))
1232+ let gl = gi[1]
1233+ let gm = valueOrElse(getString(at(aT)), "")
1234+ if ((gm != gl))
1235+ then throw(((("Tx ids don't match! In state: " + gm) + ", in msg: ") + gl))
12091236 else {
12101237 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
1211- let gk = aQ(p)
1212- let gl = J(valueOrElse(getInteger(r(p)), 0))
1213- let gm = valueOrElse(getInteger(gk), gl)
1214- if ((gm != gd))
1215- then throw(((("oldHealth=" + toString(gm)) + " from state does not match one from flight log=") + toString(gd)))
1216- else if ((0 >= gd))
1238+ let gn = aQ(p)
1239+ let go = J(valueOrElse(getInteger(r(p)), 0))
1240+ let gp = valueOrElse(getInteger(gn), go)
1241+ if ((gp != gg))
1242+ then throw(((("oldHealth=" + toString(gp)) + " from state does not match one from flight log=") + toString(gg)))
1243+ else if ((0 >= gg))
12171244 then throw("You can't fly with zero health")
12181245 else {
1219- let gn = if ((size(gb) > cC))
1220- then gb[cC]
1246+ let gq = if ((size(ge) > cC))
1247+ then ge[cC]
12211248 else ""
1222- let go = if ((size(gb) > cD))
1223- then gb[cD]
1249+ let gr = if ((size(ge) > cD))
1250+ then ge[cD]
12241251 else ""
1225- let gp = if (if ((ge > 0))
1226- then (gn == "$")
1252+ let gs = if (if ((gh > 0))
1253+ then (gq == "$")
12271254 else false)
12281255 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12291256 else 0
1230- $Tuple5(ge, p, gp, gg, go)
1257+ $Tuple5(gh, p, gs, gj, gr)
12311258 }
12321259 }
12331260 }
12341261 }
12351262
12361263
1237-func gq (fR,fS,fZ,ga) = {
1238- let aT = toString(fR)
1239- let eG = fY(aT, fZ, ga)
1240- let gk = aQ(eG._2)
1241- let eK = aO(eG._2)
1242- let fv = eJ(eK)
1243- let gr = split(fv[ar], "_")
1244- let gs = makeString(cX(true, gr, cd), "_")
1245- let dt = de(fv[as], eG._5)
1246- if ((0 >= eG._1))
1247- then $Tuple3([IntegerEntry(gk, 0), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":"))], "", 0)
1248- else {
1249- let gt = fQ(fR, fS)
1250- let fX = gt._2._1
1251- $Tuple3((((gt._1 :+ StringEntry(aP(eG._2), makeString([gt._2._2, "L", fX], "_"))) :+ IntegerEntry(gk, eG._1)) :+ StringEntry(eK, makeString([fv[ap], fv[aq], gs, dt], ":"))), fX, eG._3)
1252- }
1253- }
1254-
1255-
1256-func gu (aF,gv) = {
1257- let fe = valueOrElse(getInteger(ay(aF)), 0)
1258- let gw = valueOrElse(getInteger(az(R, aF)), 0)
1259- let gx = (fe / 6)
1260- let gy = (fe / 7)
1261- ((T + fraction(T, ((fe + gx) + (2 * gy)), 5)) + fraction(T, gw, (gv * 5)))
1262- }
1263-
1264-
1265-func gz (b,gA,gB) = {
1266- let gC = if ((gA == cx))
1267- then $Tuple2(gB, valueOrElse(getString(aN(b)), ""))
1264+func gt (fU,fV,gc,gd) = {
1265+ let aT = toString(fU)
1266+ let eJ = gb(aT, gc, gd)
1267+ let gn = aQ(eJ._2)
1268+ let eN = aO(eJ._2)
1269+ let fy = eM(eN)
1270+ let gu = split(fy[ar], "_")
1271+ let gv = makeString(cX(true, gu, cd), "_")
1272+ let dt = de(fy[as], eJ._5)
1273+ if ((0 >= eJ._1))
1274+ then $Tuple3([IntegerEntry(gn, 0), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":"))], "", 0)
1275+ else {
1276+ let gw = fT(fU, fV)
1277+ let ga = gw._2._1
1278+ $Tuple3((((gw._1 :+ StringEntry(aP(eJ._2), makeString([gw._2._2, "L", ga], "_"))) :+ IntegerEntry(gn, eJ._1)) :+ StringEntry(eN, makeString([fy[ap], fy[aq], gv, dt], ":"))), ga, eJ._3)
1279+ }
1280+ }
1281+
1282+
1283+func gx (aF,gy) = {
1284+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1285+ let gz = valueOrElse(getInteger(az(R, aF)), 0)
1286+ let gA = (fh / 6)
1287+ let gB = (fh / 7)
1288+ ((T + fraction(T, ((fh + gA) + (2 * gB)), 5)) + fraction(T, gz, (gy * 5)))
1289+ }
1290+
1291+
1292+func gC (b,gD,gE) = {
1293+ let gF = if ((gD == cx))
1294+ then $Tuple2(gE, valueOrElse(getString(aN(b)), ""))
12681295 else {
12691296 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1270- let gD = valueOrElse(getString(aP(p)), W)
1271- let gE = split(value(gD), "_")
1272- if ((gE[aV] != "L"))
1273- then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
1274- else $Tuple2(gE[aW], p)
1275- }
1276- let aF = gC._1
1277- let gF = gC._2
1278- let gG = value(assetInfo(fromBase58String(aF)))
1279- let gH = ax(aF)
1280- let gI = valueOrErrorMessage(getInteger(gH), (("Land " + gG.name) + " is not staked"))
1281- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1282- if ((gJ != b))
1297+ let gG = valueOrElse(getString(aP(p)), W)
1298+ let gH = split(value(gG), "_")
1299+ if ((gH[aV] != "L"))
1300+ then throw((("Duck location type is " + gH[aV]) + ", but should be L"))
1301+ else $Tuple2(gH[aW], p)
1302+ }
1303+ let aF = gF._1
1304+ let gI = gF._2
1305+ let gJ = value(assetInfo(fromBase58String(aF)))
1306+ let gK = ax(aF)
1307+ let gL = valueOrErrorMessage(getInteger(gK), (("Land " + gJ.name) + " is not staked"))
1308+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
1309+ if ((gM != b))
12831310 then throw((P + " is not yours"))
12841311 else {
1285- let gK = split(gG.description, "_")
1286- $Tuple4(gF, aF, gK, gI)
1287- }
1288- }
1289-
1290-
1291-func gL (b,fr,gA,gB) = if ((0 > fr))
1312+ let gN = split(gJ.description, "_")
1313+ $Tuple4(gI, aF, gN, gL)
1314+ }
1315+ }
1316+
1317+
1318+func gO (b,fu,gD,gE) = if ((0 > fu))
12921319 then throw("Negative amount")
12931320 else {
1294- let dF = gz(b, gA, gB)
1295- let bU = dF._3[bI]
1296- let dX = ed(dF._3[bJ])
1297- let eh = (lastBlock.timestamp - dF._4)
1298- if ((0 > eh))
1299- then throw(((("Saved timestamp is in future, saved = " + toString(dF._4)) + ", current = ") + toString(lastBlock.timestamp)))
1321+ let dI = gC(b, gD, gE)
1322+ let bU = dI._3[bI]
1323+ let ea = eg(dI._3[bJ])
1324+ let ek = (lastBlock.timestamp - dI._4)
1325+ if ((0 > ek))
1326+ then throw(((("Saved timestamp is in future, saved = " + toString(dI._4)) + ", current = ") + toString(lastBlock.timestamp)))
13001327 else {
1301- let gv = bT(bU)
1302- let gM = gu(dF._2, gv)
1303- let gN = fraction(eh, (gM * gv), U)
1304- if ((fr > gN))
1305- then throw(((("Not enough resources, available = " + toString(gN)) + ", requested = ") + toString(fr)))
1328+ let gy = bT(bU)
1329+ let gP = gx(dI._2, gy)
1330+ let gQ = fraction(ek, (gP * gy), U)
1331+ if ((fu > gQ))
1332+ then throw(((("Not enough resources, available = " + toString(gQ)) + ", requested = ") + toString(fu)))
13061333 else {
1307- let gO = fraction((gN - fr), U, (gM * gv))
1308- let gP = (lastBlock.timestamp - gO)
1309- let fd = (gv / bj)
1310- let ep = el(dX, (eh - gO), fd, gM)
1311- let fc = aE(dF._2)
1312- let fe = valueOrElse(getInteger(ay(dF._2)), 0)
1313- let eP = fb(fc, fd, fe)
1314- let fk = split(eP[ak], "_")
1315- let eq = parseIntValue(fk[an])
1316- if (if ((gA == cx))
1317- then (fr > eq)
1334+ let gR = fraction((gQ - fu), U, (gP * gy))
1335+ let gS = (lastBlock.timestamp - gR)
1336+ let fg = (gy / bj)
1337+ let es = eo(ea, (ek - gR), fg, gP)
1338+ let ff = aE(dI._2)
1339+ let fh = valueOrElse(getInteger(ay(dI._2)), 0)
1340+ let eS = fe(ff, fg, fh)
1341+ let fn = split(eS[ak], "_")
1342+ let et = parseIntValue(fn[an])
1343+ if (if ((gD == cx))
1344+ then (fu > et)
13181345 else false)
1319- then throw((("Only " + toString(eq)) + " space left in warehouse"))
1346+ then throw((("Only " + toString(et)) + " space left in warehouse"))
13201347 else {
1321- let eK = aO(dF._1)
1322- let fv = eJ(eK)
1323- let eo = split(fv[aq], "_")
1324- let en = split(eP[ah], "_")
1325- let gQ = if ((gA == cx))
1326- then $Tuple4(ef(en, dX, (eh - gO), fd, gM), fv[aq], (parseIntValue(fk[am]) + ep._2), (parseIntValue(fk[an]) - ep._2))
1327- else if ((gA == cy))
1328- then $Tuple4(eP[ah], ef(eo, dX, (eh - gO), fd, gM), parseIntValue(fk[am]), parseIntValue(fk[an]))
1348+ let eN = aO(dI._1)
1349+ let fy = eM(eN)
1350+ let er = split(fy[aq], "_")
1351+ let eq = split(eS[ah], "_")
1352+ let gT = if ((gD == cx))
1353+ then $Tuple4(ei(eq, ea, (ek - gR), fg, gP), fy[aq], (parseIntValue(fn[am]) + es._2), (parseIntValue(fn[an]) - es._2))
1354+ else if ((gD == cy))
1355+ then $Tuple4(eS[ah], ei(er, ea, (ek - gR), fg, gP), parseIntValue(fn[am]), parseIntValue(fn[an]))
13291356 else {
1330- let gR = em(en, eo, ep, eq)
1331- let gS = min([parseIntValue(fk[an]), ep._2])
1332- $Tuple4(gR._1, gR._2, (parseIntValue(fk[am]) + gS), (parseIntValue(fk[an]) - gS))
1357+ let gU = ep(eq, er, es, et)
1358+ let gV = min([parseIntValue(fn[an]), es._2])
1359+ $Tuple4(gU._1, gU._2, (parseIntValue(fn[am]) + gV), (parseIntValue(fn[an]) - gV))
13331360 }
1334- let gT = gQ._1
1335- let gU = gQ._2
1336- let gV = gQ._3
1337- let gW = gQ._4
1338- $Tuple5([IntegerEntry(ax(dF._2), gP), IntegerEntry(aB(P, dF._2, b), gP)], eK, [fv[ap], gU, fv[ar], fv[as]], fc, [eP[ag], gT, eP[ai], eP[aj], makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")])
1361+ let gW = gT._1
1362+ let gX = gT._2
1363+ let gY = gT._3
1364+ let gZ = gT._4
1365+ $Tuple5([IntegerEntry(ax(dI._2), gS), IntegerEntry(aB(P, dI._2, b), gS)], eN, [fy[ap], gX, fy[ar], fy[as]], ff, [eS[ag], gW, eS[ai], eS[aj], makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")])
13391366 }
13401367 }
13411368 }
13421369 }
13431370
13441371
1345-func gX (b,aF,gv,gA) = {
1346- let gH = ax(aF)
1347- let gI = value(getInteger(gH))
1348- let gN = (fraction((lastBlock.timestamp - gI), gu(aF, gv), U) * gv)
1349- gL(b, gN, gA, aF)
1350- }
1351-
1352-
1353-func gY (cY,fR,gZ,aF) = {
1354- let b = toString(fR)
1355- let dF = gz(b, cz, aF)
1356- let gv = bT(dF._3[bI])
1357- let ha = ay(dF._2)
1358- let hb = valueOrElse(getInteger(ha), 0)
1359- if ((hb >= 3))
1372+func ha (b,aF,gy,gD) = {
1373+ let gK = ax(aF)
1374+ let gL = value(getInteger(gK))
1375+ let gQ = (fraction((lastBlock.timestamp - gL), gx(aF, gy), U) * gy)
1376+ gO(b, gQ, gD, aF)
1377+ }
1378+
1379+
1380+func hb (cY,fU,hc,aF) = {
1381+ let b = toString(fU)
1382+ let dI = gC(b, cz, aF)
1383+ let gy = bT(dI._3[bI])
1384+ let hd = ay(dI._2)
1385+ let he = valueOrElse(getInteger(hd), 0)
1386+ if ((he >= 3))
13601387 then throw("Currently max infrastructure level = 3")
13611388 else {
1362- let O = (hb + 1)
1363- let hc = fraction(cc, (gv * O), bj)
1389+ let O = (he + 1)
1390+ let hf = fraction(cc, (gy * O), bj)
13641391 if (if (!(cY))
1365- then (gZ != hc)
1392+ then (hc != hf)
13661393 else false)
1367- then throw(("Payment attached should be " + toString(hc)))
1394+ then throw(("Payment attached should be " + toString(hf)))
13681395 else {
1369- let eK = aO(dF._1)
1370- let fv = eJ(eK)
1371- let gr = split(fv[ar], "_")
1372- let hd = fraction(be, (gv * O), bj)
1373- let gs = makeString(cX(cY, gr, hd), "_")
1374- let he = gX(b, dF._2, gv, cz)
1375- let hf = he._5
1376- let hg = eM(hf[ag])
1377- let hh = makeString([split(hf[ag], "_")[0], toString(O)], "_")
1378- let hi = eM(hh)
1379- let fk = split(hf[ak], "_")
1380- let hj = makeString([fk[al], fk[am], toString(((parseIntValue(fk[an]) + hi) - hg)), toString(hi)], "_")
1381- $Tuple3(([IntegerEntry(ha, O), IntegerEntry(cr(dF._2, b), O), StringEntry(eK, makeString([fv[ap], he._3[aq], gs, fv[as]], ":")), StringEntry(he._4, makeString([hh, hf[ah], hf[ai], hf[aj], hj], ":"))] ++ he._1), O, hd)
1396+ let eN = aO(dI._1)
1397+ let fy = eM(eN)
1398+ let gu = split(fy[ar], "_")
1399+ let hg = fraction(be, (gy * O), bj)
1400+ let gv = makeString(cX(cY, gu, hg), "_")
1401+ let hh = ha(b, dI._2, gy, cz)
1402+ let hi = hh._5
1403+ let hj = eP(hi[ag])
1404+ let hk = makeString([split(hi[ag], "_")[0], toString(O)], "_")
1405+ let hl = eP(hk)
1406+ let fn = split(hi[ak], "_")
1407+ let hm = makeString([fn[al], fn[am], toString(((parseIntValue(fn[an]) + hl) - hj)), toString(hl)], "_")
1408+ $Tuple3(([IntegerEntry(hd, O), IntegerEntry(cr(dI._2, b), O), StringEntry(eN, makeString([fy[ap], hh._3[aq], gv, fy[as]], ":")), StringEntry(hh._4, makeString([hk, hi[ah], hi[ai], hi[aj], hm], ":"))] ++ hh._1), O, hg)
13821409 }
13831410 }
13841411 }
13851412
13861413
1387-func hk (p,hl) = if (!(aZ))
1414+func hn (p,ho) = if (!(aZ))
13881415 then $Tuple2(nil, 0)
13891416 else {
1390- let hm = r(p)
1391- let hn = q(p)
1392- let I = valueOrElse(getInteger(bD, hn), 0)
1393- let N = (I + hl)
1394- let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1395- let hp = s(p)
1396- $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
1417+ let hp = r(p)
1418+ let hq = q(p)
1419+ let I = valueOrElse(getInteger(bD, hq), 0)
1420+ let N = (I + ho)
1421+ let hr = L(valueOrElse(getInteger(bD, hp), 0), N)
1422+ let hs = s(p)
1423+ $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N)
13971424 }
13981425
13991426
1400-func hq (b,hl) = if (!(aZ))
1427+func ht (b,ho) = if (!(aZ))
14011428 then $Tuple2(nil, 0)
14021429 else {
1403- let hm = v(b)
1404- let hn = u(b)
1405- let I = valueOrElse(getInteger(bD, hn), 0)
1406- let N = (I + hl)
1407- let ho = L(valueOrElse(getInteger(bD, hm), 0), N)
1408- let hp = w(b)
1409- $Tuple2([IntegerEntry(hm, ho[0]), IntegerEntry(hn, N), IntegerEntry(hp, (valueOrElse(getInteger(hp), 0) + ho[1]))], N)
1430+ let hp = v(b)
1431+ let hq = u(b)
1432+ let I = valueOrElse(getInteger(bD, hq), 0)
1433+ let N = (I + ho)
1434+ let hr = L(valueOrElse(getInteger(bD, hp), 0), N)
1435+ let hs = w(b)
1436+ $Tuple2([IntegerEntry(hp, hr[0]), IntegerEntry(hq, N), IntegerEntry(hs, (valueOrElse(getInteger(hs), 0) + hr[1]))], N)
14101437 }
14111438
14121439
1413-func hr (b) = {
1440+func hu (b) = {
14141441 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1415- let hs = aI(b)
1416- let ht = getString(hs)
1417- if (!(isDefined(ht)))
1442+ let hv = aI(b)
1443+ let hw = getString(hv)
1444+ if (!(isDefined(hw)))
14181445 then throw("You are not eligible for ONBOARD artifact")
14191446 else {
1420- let hu = aK(b)
1421- let hv = getString(hu)
1422- if (isDefined(hv))
1423- then throw(("You already used your ONBOARD artifact on duck " + value(hv)))
1447+ let hx = aK(b)
1448+ let hy = getString(hx)
1449+ if (isDefined(hy))
1450+ then throw(("You already used your ONBOARD artifact on duck " + value(hy)))
14241451 else {
1425- let hw = aJ(p)
1426- let hx = getString(hw)
1427- if (isDefined(hx))
1428- then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hx)))
1429- else ([StringEntry(hu, p), StringEntry(hw, b)] ++ hk(p, F)._1)
1452+ let hz = aJ(p)
1453+ let hA = getString(hz)
1454+ if (isDefined(hA))
1455+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hA)))
1456+ else ([StringEntry(hx, p), StringEntry(hz, b)] ++ hn(p, F)._1)
14301457 }
14311458 }
14321459 }
14331460
14341461
1435-func hy (b,gB) = {
1436- let dF = gz(b, cz, gB)
1437- let aF = dF._2
1438- let gv = bT(dF._3[bI])
1439- let hz = az(R, aF)
1440- if ((valueOrElse(getInteger(hz), 0) > 0))
1462+func hB (b,gE) = {
1463+ let dI = gC(b, cz, gE)
1464+ let aF = dI._2
1465+ let gy = bT(dI._3[bI])
1466+ let hC = az(R, aF)
1467+ if ((valueOrElse(getInteger(hC), 0) > 0))
14411468 then throw("Presale artifact is already activated")
1442- else if ((parseIntValue(dF._3[bH]) > cl))
1469+ else if ((parseIntValue(dI._3[bH]) > cl))
14431470 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14441471 else {
1445- let he = gX(b, aF, gv, cz)
1446- ((((he._1 :+ IntegerEntry(hz, gv)) :+ IntegerEntry(cs(R, aF, b), gv)) :+ StringEntry(he._2, makeString(he._3, ":"))) :+ StringEntry(he._4, makeString(he._5, ":")))
1472+ let hh = ha(b, aF, gy, cz)
1473+ ((((hh._1 :+ IntegerEntry(hC, gy)) :+ IntegerEntry(cs(R, aF, b), gy)) :+ StringEntry(hh._2, makeString(hh._3, ":"))) :+ StringEntry(hh._4, makeString(hh._5, ":")))
14471474 }
14481475 }
14491476
14501477
1451-func hA (hB,O,hC,b,hD,fS,hE) = {
1478+func hD (hE,O,hF,b,hG,fV,hH) = {
14521479 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1453- func hF (cL,aF) = {
1454- let gG = value(assetInfo(fromBase58String(aF)))
1455- let gH = ax(aF)
1456- let gI = valueOrErrorMessage(getInteger(gH), (("NFT " + gG.name) + " is not staked"))
1457- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
1458- if ((gJ != b))
1480+ func hI (cL,aF) = {
1481+ let gJ = value(assetInfo(fromBase58String(aF)))
1482+ let gK = ax(aF)
1483+ let gL = valueOrErrorMessage(getInteger(gK), (("NFT " + gJ.name) + " is not staked"))
1484+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
1485+ if ((gM != b))
14591486 then throw((P + " is not yours"))
14601487 else {
1461- let gK = split(gG.description, "_")
1462- let fV = gK[bK]
1488+ let gN = split(gJ.description, "_")
1489+ let fY = gN[bK]
14631490 if (if ((cL._3 != ""))
1464- then (cL._3 != fV)
1491+ then (cL._3 != fY)
14651492 else false)
14661493 then throw("Lands should be on the same continent to merge")
14671494 else {
1468- let bU = gK[bI]
1469- let hG = cL._1
1470- let eb = valueOrErrorMessage(indexOf(hG, bU), "You haven't passed all the lands needed")
1471- let hH = (take(hG, eb) + drop(hG, (eb + 1)))
1472- let gv = bT(bU)
1473- let hI = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1474- let fe = valueOrElse(getInteger(ay(aF)), 0)
1475- let hJ = {
1495+ let bU = gN[bI]
1496+ let hJ = cL._1
1497+ let ee = valueOrErrorMessage(indexOf(hJ, bU), "You haven't passed all the lands needed")
1498+ let hK = (take(hJ, ee) + drop(hJ, (ee + 1)))
1499+ let gy = bT(bU)
1500+ let hL = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1501+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1502+ let hM = {
14761503 let bc = bU
14771504 if (("S" == bc))
14781505 then 3
14791506 else if (("M" == bc))
14801507 then 4
14811508 else if (("L" == bc))
14821509 then 5
14831510 else if (("XL" == bc))
14841511 then 6
14851512 else throw("Only S, M, L, XL can merge")
14861513 }
1487- if ((fe != hJ))
1514+ if ((fh != hM))
14881515 then throw("All lands should be maxed to merge")
14891516 else {
1490- let co = gK[bH]
1491- let dX = ed(gK[bJ])
1492- let eh = (lastBlock.timestamp - gI)
1493- if ((0 > eh))
1494- then throw(((("Saved timestamp is in future, saved = " + toString(gI)) + ", current = ") + toString(lastBlock.timestamp)))
1517+ let co = gN[bH]
1518+ let ea = eg(gN[bJ])
1519+ let ek = (lastBlock.timestamp - gL)
1520+ if ((0 > ek))
1521+ then throw(((("Saved timestamp is in future, saved = " + toString(gL)) + ", current = ") + toString(lastBlock.timestamp)))
14951522 else {
1496- let gM = gu(aF, gv)
1497- let fd = (gv / bj)
1498- let gU = ef(split(cL._4, "_"), dX, eh, fd, gM)
1499- let cV = dV(split(cL._6, "_"), dX, fd, -1)
1500- let hK = cL._7
1501- let bB = indexOf(hK, aF)
1523+ let gP = gx(aF, gy)
1524+ let fg = (gy / bj)
1525+ let gX = ei(split(cL._4, "_"), ea, ek, fg, gP)
1526+ let cV = dY(split(cL._6, "_"), ea, fg, -1)
1527+ let hN = cL._7
1528+ let bB = indexOf(hN, aF)
15021529 if (!(isDefined(bB)))
15031530 then throw(("Your staked lands don't contain " + aF))
15041531 else {
1505- let hL = aw(aF)
1506- let hM = valueOrElse(getString(hL), "")
1507- $Tuple8(hH, hI, fV, gU, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hL)) :+ DeleteEntry(cp(hM))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hK, value(bB)), (cL._8 + gv))
1532+ let hO = aw(aF)
1533+ let hP = valueOrElse(getString(hO), "")
1534+ $Tuple8(hK, hL, fY, gX, (((((((((((((cL._5 :+ DeleteEntry(ax(aF))) :+ DeleteEntry(aB(P, aF, b))) :+ DeleteEntry(cn(co))) :+ DeleteEntry(au(aF))) :+ DeleteEntry(ay(aF))) :+ DeleteEntry(cr(aF, b))) :+ DeleteEntry(az(R, aF))) :+ DeleteEntry(cs(R, aF, b))) :+ DeleteEntry(ct(co))) :+ DeleteEntry(aE(aF))) :+ DeleteEntry(hO)) :+ DeleteEntry(cp(hP))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hN, value(bB)), (cL._8 + gy))
15081535 }
15091536 }
15101537 }
15111538 }
15121539 }
15131540 }
15141541
1515- let eK = aO(p)
1516- let fv = eJ(eK)
1517- let hN = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1518- let hO = bM(b)
1519- let hP = getString(hO)
1520- let hQ = if (isDefined(hP))
1521- then split_51C(value(hP), "_")
1542+ let eN = aO(p)
1543+ let fy = eM(eN)
1544+ let hQ = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1545+ let hR = bM(b)
1546+ let hS = getString(hR)
1547+ let hT = if (isDefined(hS))
1548+ then split_51C(value(hS), "_")
15221549 else nil
15231550 let cW = {
1524- let cN = hD
1551+ let cN = hG
15251552 let cO = size(cN)
1526- let cP = $Tuple8(hC, 0, "", fv[aq], nil, hN, hQ, 0)
1553+ let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0)
15271554 func cQ (cR,cS) = if ((cS >= cO))
15281555 then cR
1529- else hF(cR, cN[cS])
1556+ else hI(cR, cN[cS])
15301557
15311558 func cT (cR,cS) = if ((cS >= cO))
15321559 then cR
15331560 else throw("List size exceeds 5")
15341561
15351562 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15361563 }
1537- let fV = cW._3
1538- let eF = valueOrErrorMessage(indexOf(aa, fV), ("Unknown continent: " + fV))
1539- let ee = eD(ew(toBigInt(fS)), eF)
1540- let fU = valueOrElse(getInteger(cm()), (cl + 1))
1541- let hR = toString(fU)
1542- let fW = Issue(cE(hR, hB), makeString([hR, hB, ee, fV], "_"), 1, 0, false)
1543- let av = calculateAssetId(fW)
1544- let hS = toBase58String(av)
1545- let gs = makeString(cX((hE > 0), split(fv[ar], "_"), hE), "_")
1546- let hT = bN(b)
1547- let hU = valueOrElse(getInteger(hT), 0)
1564+ let fY = cW._3
1565+ let eI = valueOrErrorMessage(indexOf(aa, fY), ("Unknown continent: " + fY))
1566+ let eh = eG(ez(toBigInt(fV)), eI)
1567+ let fX = valueOrElse(getInteger(cm()), (cl + 1))
1568+ let hU = toString(fX)
1569+ let fZ = Issue(cE(hU, hE), makeString([hU, hE, eh, fY], "_"), 1, 0, false)
1570+ let av = calculateAssetId(fZ)
1571+ let hV = toBase58String(av)
1572+ let gv = makeString(cX((hH > 0), split(fy[ar], "_"), hH), "_")
1573+ let hW = bN(b)
1574+ let hX = valueOrElse(getInteger(hW), 0)
15481575 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1549- then StringEntry(hO, makeString_11C(cW._7, "_"))
1550- else DeleteEntry(hO))) :+ IntegerEntry(hT, if ((cW._8 > hU))
1576+ then StringEntry(hR, makeString_11C(cW._7, "_"))
1577+ else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX))
15511578 then 0
1552- else (hU - cW._8))) :+ IntegerEntry(cm(), (fU + 1))) :+ fW) :+ StringEntry(cn(hR), hS)) :+ StringEntry(au(hS), b)) :+ StringEntry(ct(hR), b)) :+ IntegerEntry(az(R, hS), cW._2)) :+ IntegerEntry(cs(R, hS, b), cW._2)) :+ IntegerEntry(ay(hS), O)) :+ IntegerEntry(cr(hS, b), O)) :+ StringEntry(eK, makeString([fv[ap], cW._4, gs, fv[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fV, "L", hS], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hS)
1553- }
1554-
1555-
1556-func hV (b,hD,fS) = hA("M", 3, "SSSS", b, hD, fS, 0)
1557-
1558-
1559-func hW (b,hD,fS,cY,gZ) = {
1560- let hc = (cc * 4)
1579+ else (hX - cW._8))) :+ IntegerEntry(cm(), (fX + 1))) :+ fZ) :+ StringEntry(cn(hU), hV)) :+ StringEntry(au(hV), b)) :+ StringEntry(ct(hU), b)) :+ IntegerEntry(az(R, hV), cW._2)) :+ IntegerEntry(cs(R, hV, b), cW._2)) :+ IntegerEntry(ay(hV), O)) :+ IntegerEntry(cr(hV, b), O)) :+ StringEntry(eN, makeString([fy[ap], cW._4, gv, fy[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([fY, "L", hV], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hV)
1580+ }
1581+
1582+
1583+func hY (b,hG,fV) = hD("M", 3, "SSSS", b, hG, fV, 0)
1584+
1585+
1586+func hZ (b,hG,fV,cY,hc) = {
1587+ let hf = (cc * 4)
15611588 if (if (!(cY))
1562- then (gZ != hc)
1589+ then (hc != hf)
15631590 else false)
1564- then throw(("Payment attached should be " + toString(hc)))
1565- else hA("L", 4, "SMM", b, hD, fS, (be * 4))
1566- }
1567-
1568-
1569-func hX (b,hD,fS,cY,gZ) = {
1570- let hc = (cc * 47)
1591+ then throw(("Payment attached should be " + toString(hf)))
1592+ else hD("L", 4, "SMM", b, hG, fV, (be * 4))
1593+ }
1594+
1595+
1596+func ia (b,hG,fV,cY,hc) = {
1597+ let hf = (cc * 47)
15711598 if (if (!(cY))
1572- then (gZ != hc)
1599+ then (hc != hf)
15731600 else false)
1574- then throw(("Payment attached should be " + toString(hc)))
1575- else hA("XL", 5, "SSSML", b, hD, fS, (be * 47))
1576- }
1577-
1578-
1579-func hY (b,hD,fS,cY,gZ) = {
1580- let hc = (cc * 54)
1601+ then throw(("Payment attached should be " + toString(hf)))
1602+ else hD("XL", 5, "SSSML", b, hG, fV, (be * 47))
1603+ }
1604+
1605+
1606+func ib (b,hG,fV,cY,hc) = {
1607+ let hf = (cc * 54)
15811608 if (if (!(cY))
1582- then (gZ != hc)
1609+ then (hc != hf)
15831610 else false)
1584- then throw(("Payment attached should be " + toString(hc)))
1585- else hA("XXL", 6, "LXL", b, hD, fS, (be * 54))
1586- }
1587-
1588-
1589-func hZ (cY,b,gZ,hD,fS) = {
1590- let ia = {
1591- let bc = size(hD)
1611+ then throw(("Payment attached should be " + toString(hf)))
1612+ else hD("XXL", 6, "LXL", b, hG, fV, (be * 54))
1613+ }
1614+
1615+
1616+func ic (cY,b,hc,hG,fV) = {
1617+ let id = {
1618+ let bc = size(hG)
15921619 if ((4 == bc))
1593- then hV(b, hD, fS)
1620+ then hY(b, hG, fV)
15941621 else if ((3 == bc))
1595- then hW(b, hD, fS, cY, gZ)
1622+ then hZ(b, hG, fV, cY, hc)
15961623 else if ((5 == bc))
1597- then hX(b, hD, fS, cY, gZ)
1624+ then ia(b, hG, fV, cY, hc)
15981625 else if ((2 == bc))
1599- then hY(b, hD, fS, cY, gZ)
1626+ then ib(b, hG, fV, cY, hc)
16001627 else throw("Unknown merge")
16011628 }
1602- ia
1603- }
1604-
1605-
1606-func ib (eb) = if (if ((eb.originCaller != bC))
1629+ id
1630+ }
1631+
1632+
1633+func ie (ee) = if (if ((ee.originCaller != bC))
16071634 then valueOrElse(getBoolean(aR()), false)
16081635 else false)
16091636 then throw("Contracts are under maintenance")
1610- else StringEntry(at(toString(eb.originCaller)), toBase58String(eb.transactionId))
1611-
1612-
1613-@Callable(eb)
1614-func constructorV1 (ic) = if ((eb.caller != this))
1637+ else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId))
1638+
1639+
1640+@Callable(ee)
1641+func constructorV1 (if) = if ((ee.caller != this))
16151642 then throw("Permission denied")
1616- else [StringEntry(bw(), ic)]
1617-
1618-
1619-
1620-@Callable(eb)
1621-func setBlocked (id) = if ((eb.caller != this))
1643+ else [StringEntry(bw(), if)]
1644+
1645+
1646+
1647+@Callable(ee)
1648+func setBlocked (ig) = if ((ee.caller != this))
16221649 then throw("permission denied")
1623- else [BooleanEntry(aR(), id)]
1624-
1625-
1626-
1627-@Callable(eb)
1650+ else [BooleanEntry(aR(), ig)]
1651+
1652+
1653+
1654+@Callable(ee)
16281655 func stakeLand () = {
1629- let ie = ib(eb)
1630- if ((size(eb.payments) != 1))
1656+ let ih = ie(ee)
1657+ if ((size(ee.payments) != 1))
16311658 then throw("Exactly one payment required")
16321659 else {
1633- let if = value(eb.payments[0])
1634- let av = value(if.assetId)
1635- let bp = toString(eb.caller)
1636- if ((if.amount != 1))
1660+ let ii = value(ee.payments[0])
1661+ let av = value(ii.assetId)
1662+ let bp = toString(ee.caller)
1663+ if ((ii.amount != 1))
16371664 then throw((("NFT " + P) + " token should be attached as payment"))
16381665 else {
1639- let gG = value(assetInfo(av))
1640- if ((gG.issuer != this))
1666+ let gJ = value(assetInfo(av))
1667+ if ((gJ.issuer != this))
16411668 then throw("Unknown issuer of token")
1642- else if (!(contains(gG.name, P)))
1669+ else if (!(contains(gJ.name, P)))
16431670 then throw((("Only NFT " + P) + " tokens are accepted"))
16441671 else {
1645- let ig = drop(gG.name, 4)
1646- let co = if (contains(ig, "XXL"))
1647- then dropRight(ig, 3)
1648- else if (contains(ig, "XL"))
1649- then dropRight(ig, 2)
1650- else dropRight(ig, 1)
1672+ let ij = drop(gJ.name, 4)
1673+ let co = if (contains(ij, "XXL"))
1674+ then dropRight(ij, 3)
1675+ else if (contains(ij, "XL"))
1676+ then dropRight(ij, 2)
1677+ else dropRight(ij, 1)
16511678 if (!(isDefined(parseInt(co))))
1652- then throw(("Cannot parse land number from " + gG.name))
1679+ then throw(("Cannot parse land number from " + gJ.name))
16531680 else {
16541681 let aF = toBase58String(av)
1655- let gH = ax(aF)
1656- if (isDefined(getInteger(gH)))
1657- then throw((("NFT " + gG.name) + " is already staked"))
1682+ let gK = ax(aF)
1683+ if (isDefined(getInteger(gK)))
1684+ then throw((("NFT " + gJ.name) + " is already staked"))
16581685 else {
1659- let gK = split(gG.description, "_")
1660- let dX = ed(gK[bJ])
1661- let gv = bT(gK[bI])
1662- let cV = ec(dX, (gv / bj), 1)
1663- let gw = valueOrElse(getInteger(az(R, aF)), 0)
1664- let hO = bM(bp)
1665- let hP = getString(hO)
1666- let hK = if (isDefined(hP))
1667- then split_51C(value(hP), "_")
1686+ let gN = split(gJ.description, "_")
1687+ let ea = eg(gN[bJ])
1688+ let gy = bT(gN[bI])
1689+ let cV = ef(ea, (gy / bj), 1)
1690+ let gz = valueOrElse(getInteger(az(R, aF)), 0)
1691+ let hR = bM(bp)
1692+ let hS = getString(hR)
1693+ let hN = if (isDefined(hS))
1694+ then split_51C(value(hS), "_")
16681695 else nil
1669- if (containsElement(hK, aF))
1696+ if (containsElement(hN, aF))
16701697 then throw(("Your staked lands already contain " + aF))
16711698 else {
1672- let fe = valueOrElse(getInteger(ay(aF)), 0)
1673- let hT = bN(bp)
1674- let ih = valueOrElse(getInteger(hT), 0)
1675- let ii = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1676- $Tuple2([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hO, makeString_11C((hK :+ aF), "_")), IntegerEntry(hT, (ih + gv)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gw), IntegerEntry(cr(aF, bp), fe), StringEntry(bL(), cV), ie], ii)
1699+ let fh = valueOrElse(getInteger(ay(aF)), 0)
1700+ let hW = bN(bp)
1701+ let ik = valueOrElse(getInteger(hW), 0)
1702+ let il = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1703+ $Tuple2([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hR, makeString_11C((hN :+ aF), "_")), IntegerEntry(hW, (ik + gy)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gz), IntegerEntry(cr(aF, bp), fh), StringEntry(bL(), cV), ih], il)
16771704 }
16781705 }
16791706 }
16801707 }
16811708 }
16821709 }
16831710 }
16841711
16851712
16861713
1687-@Callable(eb)
1688-func unstakeLand (gB) = {
1689- let ie = ib(eb)
1690- if ((size(eb.payments) != 0))
1714+@Callable(ee)
1715+func unstakeLand (gE) = {
1716+ let ih = ie(ee)
1717+ if ((size(ee.payments) != 0))
16911718 then throw("No payments required")
16921719 else {
1693- let b = toString(eb.caller)
1694- let dF = gz(b, cy, gB)
1695- let aF = dF._2
1696- let hO = bM(b)
1697- let dX = ed(dF._3[bJ])
1698- let gv = bT(dF._3[bI])
1699- let cV = ec(dX, (gv / bj), -1)
1700- let he = gX(b, aF, gv, cy)
1701- let hK = split_51C(valueOrElse(getString(hO), ""), "_")
1702- let bB = indexOf(hK, aF)
1720+ let b = toString(ee.caller)
1721+ let dI = gC(b, cy, gE)
1722+ let aF = dI._2
1723+ let hR = bM(b)
1724+ let ea = eg(dI._3[bJ])
1725+ let gy = bT(dI._3[bI])
1726+ let cV = ef(ea, (gy / bj), -1)
1727+ let hh = ha(b, aF, gy, cy)
1728+ let hN = split_51C(valueOrElse(getString(hR), ""), "_")
1729+ let bB = indexOf(hN, aF)
17031730 if (!(isDefined(bB)))
17041731 then throw(("Your staked lands don't contain " + aF))
17051732 else {
1706- let ij = lastBlock.timestamp
1707- let ik = valueOrElse(getInteger(bF, aS(b)), 0)
1708- if ((ik >= ij))
1709- then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ik)))
1733+ let im = lastBlock.timestamp
1734+ let in = valueOrElse(getInteger(bF, aS(b)), 0)
1735+ if ((in >= im))
1736+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(in)))
17101737 else {
1711- let il = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1712- if ((il > ij))
1713- then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(il)))
1738+ let io = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1739+ if ((io > im))
1740+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(io)))
17141741 else {
1715- let hT = bN(b)
1716- let hU = valueOrElse(getInteger(hT), 0)
1717- let im = if ((gv > hU))
1742+ let hW = bN(b)
1743+ let hX = valueOrElse(getInteger(hW), 0)
1744+ let ip = if ((gy > hX))
17181745 then 0
1719- else (hU - gv)
1720- let ii = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1721- $Tuple2([ScriptTransfer(eb.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(he._2, makeString(he._3, ":")), if ((size(hK) > 1))
1722- then StringEntry(hO, makeString_11C(removeByIndex(hK, value(bB)), "_"))
1723- else DeleteEntry(hO), IntegerEntry(hT, im), ie], ii)
1746+ else (hX - gy)
1747+ let il = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1748+ $Tuple2([ScriptTransfer(ee.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hh._2, makeString(hh._3, ":")), if ((size(hN) > 1))
1749+ then StringEntry(hR, makeString_11C(removeByIndex(hN, value(bB)), "_"))
1750+ else DeleteEntry(hR), IntegerEntry(hW, ip), ih], il)
17241751 }
17251752 }
17261753 }
17271754 }
17281755 }
17291756
17301757
17311758
1732-@Callable(eb)
1759+@Callable(ee)
17331760 func stakeDuck () = {
1734- let ie = ib(eb)
1735- if ((size(eb.payments) != 1))
1761+ let ih = ie(ee)
1762+ if ((size(ee.payments) != 1))
17361763 then throw("Exactly one payment required")
17371764 else {
1738- let if = value(eb.payments[0])
1739- let av = value(if.assetId)
1740- let bp = toString(eb.caller)
1741- if ((if.amount != 1))
1765+ let ii = value(ee.payments[0])
1766+ let av = value(ii.assetId)
1767+ let bp = toString(ee.caller)
1768+ if ((ii.amount != 1))
17421769 then throw((("NFT " + Q) + " token should be attached as payment"))
17431770 else {
1744- let gG = value(assetInfo(av))
1745- if (if ((gG.issuer != bV))
1746- then (gG.issuer != bW)
1771+ let gJ = value(assetInfo(av))
1772+ if (if ((gJ.issuer != bV))
1773+ then (gJ.issuer != bW)
17471774 else false)
17481775 then throw((("Unknown issuer of " + Q) + " token"))
1749- else if (!(contains(gG.name, Q)))
1776+ else if (!(contains(gJ.name, Q)))
17501777 then throw((("Only NFT " + Q) + " tokens are accepted"))
17511778 else {
1752- let in = toBase58String(av)
1753- let gH = ax(in)
1754- if (isDefined(getInteger(gH)))
1755- then throw((("NFT " + gG.name) + " is already staked"))
1779+ let iq = toBase58String(av)
1780+ let gK = ax(iq)
1781+ if (isDefined(getInteger(gK)))
1782+ then throw((("NFT " + gJ.name) + " is already staked"))
17561783 else if (isDefined(getString(aN(bp))))
1757- then throw(("You already staked one duck: " + gG.name))
1784+ then throw(("You already staked one duck: " + gJ.name))
17581785 else {
1759- let io = aP(in)
1760- let ip = getString(io)
1761- let eK = aO(in)
1762- let iq = getString(eK)
1763- let gk = aQ(in)
1764- let gl = J(valueOrElse(getInteger(r(in)), 0))
1765- let ir = valueOrElse(getInteger(gk), gl)
1766- ([IntegerEntry(gH, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(in), bp), StringEntry(aN(bp), in)] ++ (if (isDefined(ip))
1786+ let ir = aP(iq)
1787+ let is = getString(ir)
1788+ let eN = aO(iq)
1789+ let it = getString(eN)
1790+ let gn = aQ(iq)
1791+ let go = J(valueOrElse(getInteger(r(iq)), 0))
1792+ let iu = valueOrElse(getInteger(gn), go)
1793+ ([IntegerEntry(gK, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iq), bp), StringEntry(aN(bp), iq)] ++ (if (isDefined(is))
17671794 then nil
1768- else ([StringEntry(io, W)] ++ (if (isDefined(iq))
1795+ else ([StringEntry(ir, W)] ++ (if (isDefined(it))
17691796 then nil
1770- else (([StringEntry(eK, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gk, ir)) :+ ie)))))
1797+ else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih)))))
17711798 }
17721799 }
17731800 }
17741801 }
17751802 }
17761803
17771804
17781805
1779-@Callable(eb)
1780-func unstakeDuck (in) = {
1781- let ie = ib(eb)
1782- if ((size(eb.payments) != 0))
1806+@Callable(ee)
1807+func unstakeDuck (iq) = {
1808+ let ih = ie(ee)
1809+ if ((size(ee.payments) != 0))
17831810 then throw("No payments required")
17841811 else {
1785- let av = fromBase58String(in)
1786- let bp = toString(eb.caller)
1787- let gG = value(assetInfo(av))
1788- let gH = ax(toBase58String(av))
1789- if (!(isDefined(getInteger(gH))))
1790- then throw((("NFT " + gG.name) + " is not staked"))
1812+ let av = fromBase58String(iq)
1813+ let bp = toString(ee.caller)
1814+ let gJ = value(assetInfo(av))
1815+ let gK = ax(toBase58String(av))
1816+ if (!(isDefined(getInteger(gK))))
1817+ then throw((("NFT " + gJ.name) + " is not staked"))
17911818 else if (!(isDefined(getString(aN(bp)))))
1792- then throw((("The duck " + gG.name) + " is not staked"))
1819+ then throw((("The duck " + gJ.name) + " is not staked"))
17931820 else {
1794- let gJ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gG.name) + " is orphaned"))
1795- if ((gJ != bp))
1821+ let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned"))
1822+ if ((gM != bp))
17961823 then throw("Staked NFT is not yours")
17971824 else {
1798- let gk = aQ(in)
1799- let gl = J(valueOrElse(getInteger(r(in)), 0))
1800- let is = valueOrElse(getInteger(gk), gl)
1801- if ((gl > is))
1802- then throw((("Please heal your duck to " + toString(gl)) + "hp before unstaking"))
1803- else [ScriptTransfer(eb.caller, 1, av), DeleteEntry(gH), DeleteEntry(gk), DeleteEntry(aP(in)), DeleteEntry(aM(in)), DeleteEntry(aB(Q, in, bp)), DeleteEntry(aN(bp)), ie]
1825+ let gn = aQ(iq)
1826+ let go = J(valueOrElse(getInteger(r(iq)), 0))
1827+ let iv = valueOrElse(getInteger(gn), go)
1828+ if ((go > iv))
1829+ then throw((("Please heal your duck to " + toString(go)) + "hp before unstaking"))
1830+ else [ScriptTransfer(ee.caller, 1, av), DeleteEntry(gK), DeleteEntry(gn), DeleteEntry(aP(iq)), DeleteEntry(aM(iq)), DeleteEntry(aB(Q, iq, bp)), DeleteEntry(aN(bp)), ih]
18041831 }
18051832 }
18061833 }
18071834 }
18081835
18091836
18101837
1811-@Callable(eb)
1812-func claimRes (fr,it) = {
1813- let ie = ib(eb)
1814- if ((size(eb.payments) != 0))
1838+@Callable(ee)
1839+func claimRes (fu,iw) = {
1840+ let ih = ie(ee)
1841+ if ((size(ee.payments) != 0))
18151842 then throw("No payments required")
18161843 else {
1817- let b = toString(eb.originCaller)
1818- let dd = gL(b, fr, cy, it)
1844+ let b = toString(ee.originCaller)
1845+ let dd = gO(b, fu, cy, iw)
18191846 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1820- $Tuple2(((((dd._1 ++ hk(p, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._3[aq])
1821- }
1822- }
1823-
1824-
1825-
1826-@Callable(eb)
1827-func claimResToWH (fr,it) = {
1828- let ie = ib(eb)
1829- if ((size(eb.payments) != 0))
1847+ $Tuple2(((((dd._1 ++ hn(p, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._3[aq])
1848+ }
1849+ }
1850+
1851+
1852+
1853+@Callable(ee)
1854+func claimResToWH (fu,iw) = {
1855+ let ih = ie(ee)
1856+ if ((size(ee.payments) != 0))
18301857 then throw("No payments required")
18311858 else {
1832- let b = toString(eb.originCaller)
1833- let dd = gL(b, fr, cx, it)
1834- $Tuple2(((((dd._1 ++ hq(b, fraction(x, fr, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ie), dd._5[ah])
1835- }
1836- }
1837-
1838-
1839-
1840-@Callable(eb)
1841-func flight (fZ,ga) = {
1842- let ie = ib(eb)
1843- if ((size(eb.payments) != 0))
1859+ let b = toString(ee.originCaller)
1860+ let dd = gO(b, fu, cx, iw)
1861+ $Tuple2(((((dd._1 ++ ht(b, fraction(x, fu, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ ih), dd._5[ah])
1862+ }
1863+ }
1864+
1865+
1866+
1867+@Callable(ee)
1868+func flight (gc,gd) = {
1869+ let ih = ie(ee)
1870+ if ((size(ee.payments) != 0))
18441871 then throw("No payments required")
18451872 else {
1846- let aT = toString(eb.caller)
1847- let eG = fY(aT, fZ, ga)
1848- let p = eG._2
1849- let io = aP(p)
1850- let gD = valueOrElse(getString(io), W)
1851- if ((eG._4 == gD))
1873+ let aT = toString(ee.caller)
1874+ let eJ = gb(aT, gc, gd)
1875+ let p = eJ._2
1876+ let ir = aP(p)
1877+ let gG = valueOrElse(getString(ir), W)
1878+ if ((eJ._4 == gG))
18521879 then throw("You can't fly to the same location")
18531880 else {
1854- let eK = aO(p)
1855- let fv = eJ(eK)
1856- let dt = de(fv[as], eG._5)
1857- $Tuple2(([StringEntry(io, if ((eG._1 > 0))
1858- then eG._4
1859- else gD), StringEntry(eK, makeString([fv[ap], fv[aq], fv[ar], dt], ":")), IntegerEntry(aQ(p), eG._1), ie] ++ hk(p, if ((eG._1 > 0))
1881+ let eN = aO(p)
1882+ let fy = eM(eN)
1883+ let dt = de(fy[as], eJ._5)
1884+ $Tuple2(([StringEntry(ir, if ((eJ._1 > 0))
1885+ then eJ._4
1886+ else gG), StringEntry(eN, makeString([fy[ap], fy[aq], fy[ar], dt], ":")), IntegerEntry(aQ(p), eJ._1), ih] ++ hn(p, if ((eJ._1 > 0))
18601887 then y
1861- else z)._1), eG._3)
1888+ else z)._1), eJ._3)
18621889 }
18631890 }
18641891 }
18651892
18661893
18671894
1868-@Callable(eb)
1869-func heal (iu,iv,iw) = {
1870- let ie = ib(eb)
1871- if (if (if ((0 > iu))
1895+@Callable(ee)
1896+func heal (ix,iy,iz) = {
1897+ let ih = ie(ee)
1898+ if (if (if ((0 > ix))
18721899 then true
1873- else (0 > iv))
1900+ else (0 > iy))
18741901 then true
1875- else (0 > iw))
1902+ else (0 > iz))
18761903 then throw("Quantity cannot be negative")
18771904 else {
1878- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1879- let ix = [iu, iv, iw]
1880- let gk = aQ(p)
1881- let gl = J(valueOrElse(getInteger(r(p)), 0))
1882- let iy = valueOrElse(getInteger(gk), gl)
1883- if ((iy >= gl))
1884- then throw((("HP should be < " + toString(gl)) + " to heal"))
1905+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
1906+ let iA = [ix, iy, iz]
1907+ let gn = aQ(p)
1908+ let go = J(valueOrElse(getInteger(r(p)), 0))
1909+ let iB = valueOrElse(getInteger(gn), go)
1910+ if ((iB >= go))
1911+ then throw((("HP should be < " + toString(go)) + " to heal"))
18851912 else {
1886- let eK = aO(p)
1887- let fv = eJ(eK)
1888- let iz = if ((fv[as] == ""))
1913+ let eN = aO(p)
1914+ let fy = eM(eN)
1915+ let iC = if ((fy[as] == ""))
18891916 then nil
1890- else split(fv[as], "_")
1891- func iA (cL,iB) = {
1917+ else split(fy[as], "_")
1918+ func iD (cL,iE) = {
18921919 let bS = cL._2
1893- let ex = if ((size(iz) > bS))
1894- then parseIntValue(iz[bS])
1920+ let eA = if ((size(iC) > bS))
1921+ then parseIntValue(iC[bS])
18951922 else 0
18961923 if ((3 > bS))
18971924 then {
1898- let iC = ix[bS]
1899- if ((iC > ex))
1900- then throw(((("You have only " + toString(ex)) + " of ") + Z[bS]))
1901- else $Tuple3((cL._1 :+ toString((ex - iC))), (bS + 1), (cL._3 + (bY[bS] * iC)))
1925+ let iF = iA[bS]
1926+ if ((iF > eA))
1927+ then throw(((("You have only " + toString(eA)) + " of ") + Z[bS]))
1928+ else $Tuple3((cL._1 :+ toString((eA - iF))), (bS + 1), (cL._3 + (bY[bS] * iF)))
19021929 }
1903- else $Tuple3((cL._1 :+ toString(ex)), (bS + 1), cL._3)
1930+ else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3)
19041931 }
19051932
19061933 let dd = {
19071934 let cN = ac
19081935 let cO = size(cN)
19091936 let cP = $Tuple3(nil, 0, 0)
19101937 func cQ (cR,cS) = if ((cS >= cO))
19111938 then cR
1912- else iA(cR, cN[cS])
1939+ else iD(cR, cN[cS])
19131940
19141941 func cT (cR,cS) = if ((cS >= cO))
19151942 then cR
19161943 else throw("List size exceeds 50")
19171944
19181945 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
19191946 }
1920- let iD = min([gl, (iy + dd._3)])
1921- $Tuple2(([IntegerEntry(gk, iD), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dd._1, "_")], ":")), ie] ++ hk(p, (G * ((iu + iv) + iw)))._1), iD)
1947+ let iG = min([go, (iB + dd._3)])
1948+ $Tuple2(([IntegerEntry(gn, iG), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dd._1, "_")], ":")), ih] ++ hn(p, (G * ((ix + iy) + iz)))._1), iG)
19221949 }
19231950 }
19241951 }
19251952
19261953
19271954
1928-@Callable(eb)
1955+@Callable(ee)
19291956 func healES () = {
1930- let ie = ib(eb)
1931- if ((size(eb.payments) != 1))
1957+ let ih = ie(ee)
1958+ if ((size(ee.payments) != 1))
19321959 then throw("Exactly one payment required")
19331960 else {
1934- let if = value(eb.payments[0])
1935- if ((if.assetId != bb))
1961+ let ii = value(ee.payments[0])
1962+ if ((ii.assetId != bb))
19361963 then throw("Allowed USDT payment only!")
19371964 else {
1938- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
1939- let gk = aQ(p)
1940- let gl = J(valueOrElse(getInteger(r(p)), 0))
1941- let iy = valueOrElse(getInteger(gk), gl)
1942- if ((iy > 0))
1965+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
1966+ let gn = aQ(p)
1967+ let go = J(valueOrElse(getInteger(r(p)), 0))
1968+ let iB = valueOrElse(getInteger(gn), go)
1969+ if ((iB > 0))
19431970 then throw("HP should be 0 to call Emergency Service")
19441971 else {
1945- let eK = aO(p)
1946- let fv = eJ(eK)
1947- let iz = if ((fv[as] == ""))
1972+ let eN = aO(p)
1973+ let fy = eM(eN)
1974+ let iC = if ((fy[as] == ""))
19481975 then nil
1949- else split(fv[as], "_")
1950- let iE = if ((size(iz) > 0))
1951- then parseIntValue(iz[0])
1976+ else split(fy[as], "_")
1977+ let iH = if ((size(iC) > 0))
1978+ then parseIntValue(iC[0])
19521979 else 0
1953- let iF = if ((size(iz) > 1))
1954- then parseIntValue(iz[1])
1980+ let iI = if ((size(iC) > 1))
1981+ then parseIntValue(iC[1])
19551982 else 0
1956- let iG = if ((size(iz) > 2))
1957- then parseIntValue(iz[2])
1983+ let iJ = if ((size(iC) > 2))
1984+ then parseIntValue(iC[2])
19581985 else 0
1959- if (if (if ((iE > 0))
1986+ if (if (if ((iH > 0))
19601987 then true
1961- else (iF > 0))
1988+ else (iI > 0))
19621989 then true
1963- else (iG > 0))
1990+ else (iJ > 0))
19641991 then throw("You have to use own Medical Kit")
19651992 else {
1966- let iH = getString(bE, aU())
1967- let iI = if (isDefined(iH))
1968- then split(value(iH), "_")
1993+ let iK = getString(bE, aU())
1994+ let iL = if (isDefined(iK))
1995+ then split(value(iK), "_")
19691996 else nil
1970- let iJ = if ((size(iI) > 0))
1971- then parseIntValue(iI[0])
1997+ let iM = if ((size(iL) > 0))
1998+ then parseIntValue(iL[0])
19721999 else 0
1973- if ((0 >= iJ))
2000+ if ((0 >= iM))
19742001 then throw("There are no Medical Kits L1 at Emergency Service storage")
19752002 else {
1976- let iD = (iy + bY[0])
1977- let iK = makeString([toString((iJ - 1)), removeByIndex(iI, 0)], "_")
2003+ let iG = (iB + bY[0])
2004+ let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_")
19782005 let aY = split(ac[0], "_")
1979- let iL = aX(aY)
1980- let iM = fraction((iL * Y), X, (10 * af))
1981- if ((if.amount != iM))
1982- then throw(("Payment attached should be " + toString(iM)))
2006+ let iO = aX(aY)
2007+ let iP = fraction((iO * Y), X, (10 * af))
2008+ if ((ii.amount != iP))
2009+ then throw(("Payment attached should be " + toString(iP)))
19832010 else {
1984- let dd = bO(invoke(bE, "updateEsStorage", [iK], [AttachedPayment(bb, iM)]))
1985- $Tuple2(([IntegerEntry(gk, iD), ie] ++ hk(p, A)._1), dd)
2011+ let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)]))
2012+ $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd)
19862013 }
19872014 }
19882015 }
19892016 }
19902017 }
19912018 }
19922019 }
19932020
19942021
19952022
1996-@Callable(eb)
1997-func updateBackpack (p,iN) = if ((eb.caller != bE))
2023+@Callable(ee)
2024+func updateBackpack (p,iQ) = if ((ee.caller != bE))
19982025 then throw("permission denied")
1999- else $Tuple2([StringEntry(aO(p), iN)], iN)
2000-
2001-
2002-
2003-@Callable(eb)
2026+ else $Tuple2([StringEntry(aO(p), iQ)], iQ)
2027+
2028+
2029+
2030+@Callable(ee)
20042031 func buySLand () = {
2005- let ie = ib(eb)
2006- if ((size(eb.payments) != 1))
2032+ let ih = ie(ee)
2033+ if ((size(ee.payments) != 1))
20072034 then throw("Exactly one payment required")
20082035 else {
2009- let if = value(eb.payments[0])
2010- if ((if.assetId != bb))
2036+ let ii = value(ee.payments[0])
2037+ if ((ii.assetId != bb))
20112038 then throw("Allowed USDT payment only!")
2012- else if ((if.amount != ce))
2039+ else if ((ii.amount != ce))
20132040 then throw(("Payment attached should be " + toString(ce)))
20142041 else {
2015- let dd = fQ(eb.caller, eb.transactionId)
2016- $Tuple2((((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) ++ hq(toString(eb.caller), C)._1) :+ ie), dd._2._1)
2042+ let dd = fT(ee.caller, ee.transactionId)
2043+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) ++ ht(toString(ee.caller), C)._1) :+ ih), dd._2._1)
20172044 }
20182045 }
20192046 }
20202047
20212048
20222049
2023-@Callable(eb)
2024-func expedition (fZ,ga) = {
2025- let ie = ib(eb)
2026- if ((size(eb.payments) != 0))
2050+@Callable(ee)
2051+func expedition (gc,gd) = {
2052+ let ih = ie(ee)
2053+ if ((size(ee.payments) != 0))
20272054 then throw("No payments required")
20282055 else {
2029- let dd = gq(eb.caller, eb.transactionId, fZ, ga)
2030- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2031- $Tuple2(((dd._1 ++ hk(p, C)._1) :+ ie), $Tuple2(dd._2, dd._3))
2032- }
2033- }
2034-
2035-
2036-
2037-@Callable(eb)
2056+ let dd = gt(ee.caller, ee.transactionId, gc, gd)
2057+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
2058+ $Tuple2(((dd._1 ++ hn(p, C)._1) :+ ih), $Tuple2(dd._2, dd._3))
2059+ }
2060+ }
2061+
2062+
2063+
2064+@Callable(ee)
20382065 func upgradeInfra (aF) = {
2039- let ie = ib(eb)
2040- if ((size(eb.payments) != 0))
2066+ let ih = ie(ee)
2067+ if ((size(ee.payments) != 0))
20412068 then throw("No payments required")
20422069 else {
2043- let dd = gY(true, eb.caller, 0, aF)
2044- let p = valueOrErrorMessage(getString(aN(toString(eb.caller))), "You don't have a duck staked")
2045- $Tuple2(((dd._1 :+ ie) ++ hk(p, fraction(D, dd._3, bi))._1), dd._2)
2046- }
2047- }
2048-
2049-
2050-
2051-@Callable(eb)
2052-func upgradeInfraUsdt (aF) = if ((eb.caller != this))
2070+ let dd = hb(true, ee.caller, 0, aF)
2071+ let p = valueOrErrorMessage(getString(aN(toString(ee.caller))), "You don't have a duck staked")
2072+ $Tuple2(((dd._1 :+ ih) ++ hn(p, fraction(D, dd._3, bi))._1), dd._2)
2073+ }
2074+ }
2075+
2076+
2077+
2078+@Callable(ee)
2079+func upgradeInfraUsdt (aF) = if ((ee.caller != this))
20532080 then throw("Permission denied")
20542081 else {
2055- let ie = ib(eb)
2056- if ((size(eb.payments) != 1))
2082+ let ih = ie(ee)
2083+ if ((size(ee.payments) != 1))
20572084 then throw("Exactly one payment required")
20582085 else {
2059- let if = value(eb.payments[0])
2060- if ((if.assetId != bb))
2086+ let ii = value(ee.payments[0])
2087+ if ((ii.assetId != bb))
20612088 then throw("Allowed USDT payment only!")
20622089 else {
2063- let dd = gY(false, eb.caller, if.amount, aF)
2064- $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
2090+ let dd = hb(false, ee.caller, ii.amount, aF)
2091+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
20652092 }
20662093 }
20672094 }
20682095
20692096
20702097
2071-@Callable(eb)
2072-func activateArtifact (iO,iP) = {
2073- let ie = ib(eb)
2074- if ((size(eb.payments) != 0))
2098+@Callable(ee)
2099+func activateArtifact (iR,iS) = {
2100+ let ih = ie(ee)
2101+ if ((size(ee.payments) != 0))
20752102 then throw("No payments required")
20762103 else {
2077- let b = toString(eb.caller)
2104+ let b = toString(ee.caller)
20782105 let dd = {
2079- let bc = iO
2106+ let bc = iR
20802107 if (("PRESALE" == bc))
2081- then hy(b, iP)
2108+ then hB(b, iS)
20822109 else if (("ONBOARD" == bc))
2083- then hr(b)
2110+ then hu(b)
20842111 else throw("Unknown artifact")
20852112 }
2086- (dd :+ ie)
2087- }
2088- }
2089-
2090-
2091-
2092-@Callable(eb)
2093-func mergeLands (hD) = {
2094- let ie = ib(eb)
2095- if ((size(eb.payments) != 0))
2113+ (dd :+ ih)
2114+ }
2115+ }
2116+
2117+
2118+
2119+@Callable(ee)
2120+func mergeLands (hG) = {
2121+ let ih = ie(ee)
2122+ if ((size(ee.payments) != 0))
20962123 then throw("No payments required")
20972124 else {
2098- let dd = hZ(true, toString(eb.caller), 0, hD, eb.transactionId)
2099- $Tuple2(((dd._1 :+ ie) ++ hq(toString(eb.caller), E)._1), dd._2)
2100- }
2101- }
2102-
2103-
2104-
2105-@Callable(eb)
2106-func mergeLandsUsdt (hD) = {
2107- let ie = ib(eb)
2108- if ((size(eb.payments) != 1))
2125+ let dd = ic(true, toString(ee.caller), 0, hG, ee.transactionId)
2126+ $Tuple2(((dd._1 :+ ih) ++ ht(toString(ee.caller), E)._1), dd._2)
2127+ }
2128+ }
2129+
2130+
2131+
2132+@Callable(ee)
2133+func mergeLandsUsdt (hG) = {
2134+ let ih = ie(ee)
2135+ if ((size(ee.payments) != 1))
21092136 then throw("Exactly one payment required")
21102137 else {
2111- let if = value(eb.payments[0])
2112- if ((if.assetId != bb))
2138+ let ii = value(ee.payments[0])
2139+ if ((ii.assetId != bb))
21132140 then throw("Allowed USDT payment only!")
21142141 else {
2115- let dd = hZ(false, toString(eb.caller), if.amount, hD, eb.transactionId)
2116- $Tuple2(((dd._1 :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), dd._2)
2142+ let dd = ic(false, toString(ee.caller), ii.amount, hG, ee.transactionId)
2143+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
21172144 }
21182145 }
21192146 }
21202147
21212148
21222149
2123-@Callable(eb)
2124-func cargoExchange (iQ,aF) = {
2125- let ie = ib(eb)
2126- if ((size(eb.payments) != 0))
2150+@Callable(ee)
2151+func cargoExchange (iT,aF) = {
2152+ let ih = ie(ee)
2153+ if ((size(ee.payments) != 0))
21272154 then throw("No payments required")
21282155 else {
2129- let fu = split_4C(iQ, ":")
2130- let b = toString(eb.originCaller)
2131- let gG = value(assetInfo(fromBase58String(aF)))
2132- let gH = ax(aF)
2133- if (!(isDefined(getInteger(gH))))
2134- then throw((gG.name + " is not staked"))
2156+ let fx = split_4C(iT, ":")
2157+ let b = toString(ee.originCaller)
2158+ let gJ = value(assetInfo(fromBase58String(aF)))
2159+ let gK = ax(aF)
2160+ if (!(isDefined(getInteger(gK))))
2161+ then throw((gJ.name + " is not staked"))
21352162 else {
2136- let gJ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gG.name) + " is orphaned"))
2137- if ((gJ != b))
2163+ let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
2164+ if ((gM != b))
21382165 then throw((P + " is not yours"))
21392166 else {
2140- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2141- let fe = valueOrElse(getInteger(ay(aF)), 0)
2167+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2168+ let fh = valueOrElse(getInteger(ay(aF)), 0)
21422169 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2143- let gD = valueOrElse(getString(aP(p)), W)
2144- let gE = split(value(gD), "_")
2145- if ((gE[aV] != "L"))
2146- then throw((("Duck location type is " + gE[aV]) + ", but should be L"))
2147- else if ((gE[aW] != aF))
2170+ let gG = valueOrElse(getString(aP(p)), W)
2171+ let gH = split(value(gG), "_")
2172+ if ((gH[aV] != "L"))
2173+ then throw((("Duck location type is " + gH[aV]) + ", but should be L"))
2174+ else if ((gH[aW] != aF))
21482175 then throw(("Duck should be on the land " + aF))
21492176 else {
2150- let fc = aE(aF)
2151- let eP = fb(fc, fd, fe)
2152- let eK = aO(p)
2153- let fv = eJ(eK)
2154- let dd = ft(fu, eP, fv)
2155- let fk = split(eP[ak], "_")
2156- let gV = (parseIntValue(fk[am]) + dd._7)
2157- let gW = (parseIntValue(fk[an]) - dd._7)
2158-[StringEntry(eK, makeString_2C([fv[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fc, makeString_2C([eP[ag], dd._1, dd._2, dd._3, makeString([fk[al], toString(gV), toString(gW), fk[ao]], "_")], ":")), ie]
2177+ let ff = aE(aF)
2178+ let eS = fe(ff, fg, fh)
2179+ let eN = aO(p)
2180+ let fy = eM(eN)
2181+ let dd = fw(fx, eS, fy)
2182+ let fn = split(eS[ak], "_")
2183+ let gY = (parseIntValue(fn[am]) + dd._7)
2184+ let gZ = (parseIntValue(fn[an]) - dd._7)
2185+[StringEntry(eN, makeString_2C([fy[ap], dd._4, dd._5, dd._6], ":")), StringEntry(ff, makeString_2C([eS[ag], dd._1, dd._2, dd._3, makeString([fn[al], toString(gY), toString(gZ), fn[ao]], "_")], ":")), ih]
21592186 }
21602187 }
21612188 }
21622189 }
21632190 }
21642191
21652192
21662193
2167-@Callable(eb)
2168-func saveWarehouse (fg,aF) = if ((eb.caller != bE))
2194+@Callable(ee)
2195+func saveWarehouse (fj,aF) = if ((ee.caller != bE))
21692196 then throw("Access denied")
21702197 else {
2171- let fc = aE(aF)
2172- let fh = split_4C(fg, ":")
2173- if ((size(fh) != 5))
2198+ let ff = aE(aF)
2199+ let fk = split_4C(fj, ":")
2200+ if ((size(fk) != 5))
21742201 then throw("warehouse string should contain 4 ':' separators")
21752202 else {
2176- let iR = split(fh[ak], "_")[al]
2177- let gV = eO(fh)
2178- let iS = eM(fh[ag])
2179- let gW = ((iS - parseIntValue(iR)) - gV)
2180- let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([iR, toString(gV), toString(gW), toString(iS)], "_")], ":")
2181- $Tuple2([StringEntry(fc, iT)], iT)
2203+ let iU = split(fk[ak], "_")[al]
2204+ let gY = eR(fk)
2205+ let iV = eP(fk[ag])
2206+ let gZ = ((iV - parseIntValue(iU)) - gY)
2207+ let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([iU, toString(gY), toString(gZ), toString(iV)], "_")], ":")
2208+ $Tuple2([StringEntry(ff, iW)], iW)
21822209 }
21832210 }
21842211
21852212
21862213
2187-@Callable(eb)
2188-func fixWarehouseFormat (aF) = if ((eb.caller != bC))
2214+@Callable(ee)
2215+func fixWarehouseFormat (aF) = if ((ee.caller != bC))
21892216 then throw("Access denied")
21902217 else {
2191- let fc = aE(aF)
2192- let gG = value(assetInfo(fromBase58String(aF)))
2193- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2194- let fe = valueOrElse(getInteger(ay(aF)), 0)
2195- let fh = fb(fc, fd, fe)
2196- let iR = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fh], nil))
2197- let gV = eO(fh)
2198- let iS = eM(fh[ag])
2199- let gW = ((iS - iR) - gV)
2200- let iT = makeString_2C([fh[ag], fh[ah], fh[ai], fh[aj], makeString([toString(iR), toString(gV), toString(gW), toString(iS)], "_")], ":")
2201- $Tuple2([StringEntry(fc, iT)], iT)
2218+ let ff = aE(aF)
2219+ let gJ = value(assetInfo(fromBase58String(aF)))
2220+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2221+ let fh = valueOrElse(getInteger(ay(aF)), 0)
2222+ let fk = fe(ff, fg, fh)
2223+ let iU = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fk], nil))
2224+ let gY = eR(fk)
2225+ let iV = eP(fk[ag])
2226+ let gZ = ((iV - iU) - gY)
2227+ let iW = makeString_2C([fk[ag], fk[ah], fk[ai], fk[aj], makeString([toString(iU), toString(gY), toString(gZ), toString(iV)], "_")], ":")
2228+ $Tuple2([StringEntry(ff, iW)], iW)
22022229 }
22032230
22042231
22052232
2206-@Callable(eb)
2207-func fixStakedPieces (bp) = if ((eb.caller != bC))
2233+@Callable(ee)
2234+func fixStakedPieces (bp) = if ((ee.caller != bC))
22082235 then throw("Access denied")
22092236 else {
2210- let hU = if ((bp == ""))
2237+ let hX = if ((bp == ""))
22112238 then 0
22122239 else {
2213- let hP = getString(bD, bM(bp))
2214- let hK = if (isDefined(hP))
2215- then split_51C(value(hP), "_")
2240+ let hS = getString(bD, bM(bp))
2241+ let hN = if (isDefined(hS))
2242+ then split_51C(value(hS), "_")
22162243 else nil
2217- func iU (cL,aF) = {
2218- let gG = value(assetInfo(fromBase58String(aF)))
2219- let bU = split(gG.description, "_")[bI]
2244+ func iX (cL,aF) = {
2245+ let gJ = value(assetInfo(fromBase58String(aF)))
2246+ let bU = split(gJ.description, "_")[bI]
22202247 (cL + bT(bU))
22212248 }
22222249
2223- let cN = hK
2250+ let cN = hN
22242251 let cO = size(cN)
22252252 let cP = 0
22262253 func cQ (cR,cS) = if ((cS >= cO))
22272254 then cR
2228- else iU(cR, cN[cS])
2255+ else iX(cR, cN[cS])
22292256
22302257 func cT (cR,cS) = if ((cS >= cO))
22312258 then cR
22322259 else throw("List size exceeds 100")
22332260
22342261 cT(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50), 51), 52), 53), 54), 55), 56), 57), 58), 59), 60), 61), 62), 63), 64), 65), 66), 67), 68), 69), 70), 71), 72), 73), 74), 75), 76), 77), 78), 79), 80), 81), 82), 83), 84), 85), 86), 87), 88), 89), 90), 91), 92), 93), 94), 95), 96), 97), 98), 99), 100)
22352262 }
2236- $Tuple2([IntegerEntry(bN(bp), hU)], hU)
2263+ $Tuple2([IntegerEntry(bN(bp), hX)], hX)
22372264 }
22382265
22392266
22402267
2241-@Callable(eb)
2242-func setCustomName (av,hM,aA) = {
2243- let ie = ib(eb)
2244- if ((size(eb.payments) != 1))
2268+@Callable(ee)
2269+func setCustomName (av,hP,aA) = {
2270+ let ih = ie(ee)
2271+ if ((size(ee.payments) != 1))
22452272 then throw("Exactly one payment required")
22462273 else {
2247- let if = value(eb.payments[0])
2248- if ((if.assetId != bb))
2274+ let ii = value(ee.payments[0])
2275+ if ((ii.assetId != bb))
22492276 then throw("Allowed USDT payment only!")
2250- else if ((if.amount != ca))
2277+ else if ((ii.amount != ca))
22512278 then throw(("Payment should be " + toString(ca)))
2252- else if (contains(hM, "__"))
2253- then throw(("Name should not contain '__': " + hM))
2254- else if ((size(hM) > cb))
2279+ else if (contains(hP, "__"))
2280+ then throw(("Name should not contain '__': " + hP))
2281+ else if ((size(hP) > cb))
22552282 then throw(("Name too long, maxLength=" + toString(cb)))
22562283 else {
2257- let b = toString(eb.originCaller)
2258- let iV = {
2284+ let b = toString(ee.originCaller)
2285+ let iY = {
22592286 let bc = aA
22602287 if (("ACCOUNT" == bc))
22612288 then {
2262- let iW = cv(hM)
2263- let iX = getString(iW)
2264- if (isDefined(iX))
2265- then throw(("Name already registered: " + hM))
2289+ let iZ = cv(hP)
2290+ let ja = getString(iZ)
2291+ if (isDefined(ja))
2292+ then throw(("Name already registered: " + hP))
22662293 else {
2267- let iY = aH(b)
2268- let iZ = getString(iY)
2269- let ja = if (isDefined(iZ))
2270- then [DeleteEntry(cv(value(iZ)))]
2294+ let jb = aH(b)
2295+ let jc = getString(jb)
2296+ let jd = if (isDefined(jc))
2297+ then [DeleteEntry(cv(value(jc)))]
22712298 else nil
2272- (((ja :+ StringEntry(iY, hM)) :+ StringEntry(iW, b)) ++ hq(b, B)._1)
2299+ (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1)
22732300 }
22742301 }
22752302 else if (("LAND" == bc))
22762303 then {
2277- let gG = value(assetInfo(fromBase58String(av)))
2278- let gH = ax(av)
2279- if (!(isDefined(getInteger(gH))))
2280- then throw((gG.name + " is not staked"))
2304+ let gJ = value(assetInfo(fromBase58String(av)))
2305+ let gK = ax(av)
2306+ if (!(isDefined(getInteger(gK))))
2307+ then throw((gJ.name + " is not staked"))
22812308 else {
2282- let gJ = valueOrErrorMessage(getString(au(av)), (("NFT " + gG.name) + " is orphaned"))
2283- if ((gJ != b))
2309+ let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned"))
2310+ if ((gM != b))
22842311 then throw((P + " is not yours"))
22852312 else {
2286- let iW = cp(hM)
2287- let iX = getString(iW)
2288- if (isDefined(iX))
2289- then throw(("Name already registered: " + hM))
2313+ let iZ = cp(hP)
2314+ let ja = getString(iZ)
2315+ if (isDefined(ja))
2316+ then throw(("Name already registered: " + hP))
22902317 else {
2291- let jb = aw(av)
2292- let iZ = getString(jb)
2293- let ja = if (isDefined(iZ))
2294- then [DeleteEntry(cp(value(iZ)))]
2318+ let je = aw(av)
2319+ let jc = getString(je)
2320+ let jd = if (isDefined(jc))
2321+ then [DeleteEntry(cp(value(jc)))]
22952322 else nil
2296- (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hq(b, B)._1)
2323+ (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1)
22972324 }
22982325 }
22992326 }
23002327 }
23012328 else if (("DUCK" == bc))
23022329 then {
2303- let gG = value(assetInfo(fromBase58String(av)))
2304- let gH = ax(av)
2305- if (if (!(isDefined(getInteger(gH))))
2330+ let gJ = value(assetInfo(fromBase58String(av)))
2331+ let gK = ax(av)
2332+ if (if (!(isDefined(getInteger(gK))))
23062333 then true
23072334 else !(isDefined(getString(aN(b)))))
2308- then throw((gG.name + " is not staked"))
2335+ then throw((gJ.name + " is not staked"))
23092336 else {
2310- let gJ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gG.name) + " is orphaned"))
2311- if ((gJ != b))
2337+ let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned"))
2338+ if ((gM != b))
23122339 then throw((Q + " is not yours"))
23132340 else {
2314- let iW = cu(hM)
2315- let iX = getString(iW)
2316- if (isDefined(iX))
2317- then throw(("Name already registered: " + hM))
2341+ let iZ = cu(hP)
2342+ let ja = getString(iZ)
2343+ if (isDefined(ja))
2344+ then throw(("Name already registered: " + hP))
23182345 else {
2319- let jb = aG(av)
2320- let iZ = getString(jb)
2321- let ja = if (isDefined(iZ))
2322- then [DeleteEntry(cu(value(iZ)))]
2346+ let je = aG(av)
2347+ let jc = getString(je)
2348+ let jd = if (isDefined(jc))
2349+ then [DeleteEntry(cu(value(jc)))]
23232350 else nil
2324- (((ja :+ StringEntry(jb, hM)) :+ StringEntry(iW, av)) ++ hk(av, B)._1)
2351+ (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1)
23252352 }
23262353 }
23272354 }
23282355 }
23292356 else throw("Unknown entity type")
23302357 }
2331- $Tuple2(((iV :+ ScriptTransfer(bE, if.amount, bb)) :+ ie), 0)
2358+ $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0)
23322359 }
23332360 }
23342361 }
23352362
23362363
23372364
2338-@Callable(eb)
2339-func setReferrals (jc,jd) = if ((eb.callerPublicKey != bX))
2365+@Callable(ee)
2366+func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX))
23402367 then throw("Permission denied")
23412368 else {
2342- let ie = ib(eb)
2343- if ((size(eb.payments) != 0))
2369+ let ih = ie(ee)
2370+ if ((size(ee.payments) != 0))
23442371 then throw("No payments required")
2345- else if (!(isDefined(addressFromString(jc))))
2346- then throw(("Invalid address: " + jc))
2347- else if (!(isDefined(addressFromString(jd))))
2348- then throw(("Invalid address: " + jd))
2372+ else if (!(isDefined(addressFromString(jf))))
2373+ then throw(("Invalid address: " + jf))
2374+ else if (!(isDefined(addressFromString(jg))))
2375+ then throw(("Invalid address: " + jg))
23492376 else {
2350- let je = cw()
2351- let jf = getString(je)
2352- let jg = if (isDefined(jf))
2353- then split_4C(value(jf), "_")
2377+ let jh = cw()
2378+ let ji = getString(jh)
2379+ let jj = if (isDefined(ji))
2380+ then split_4C(value(ji), "_")
23542381 else nil
2355- if (containsElement(jg, jd))
2356- then throw((jd + " is not newbie (already has referrals)"))
2382+ if (containsElement(jj, jg))
2383+ then throw((jg + " is not newbie (already has referrals)"))
23572384 else {
2358- let hs = aI(jd)
2359- let ht = getString(hs)
2360- if (if (isDefined(ht))
2361- then isDefined(addressFromString(value(ht)))
2385+ let hv = aI(jg)
2386+ let hw = getString(hv)
2387+ if (if (isDefined(hw))
2388+ then isDefined(addressFromString(value(hw)))
23622389 else false)
2363- then throw(((jd + " already has refBy: ") + value(ht)))
2390+ then throw(((jg + " already has refBy: ") + value(hw)))
23642391 else {
2365- let jh = aL(jc)
2366- let ji = getString(jh)
2367- let jj = if (isDefined(ji))
2368- then split_4C(value(ji), "_")
2392+ let jk = aL(jf)
2393+ let jl = getString(jk)
2394+ let jm = if (isDefined(jl))
2395+ then split_4C(value(jl), "_")
23692396 else nil
2370- if (containsElement(jj, jd))
2371- then throw((((jc + " already contains ") + jd) + " within referrals"))
2397+ if (containsElement(jm, jg))
2398+ then throw((((jf + " already contains ") + jg) + " within referrals"))
23722399 else {
2373- let jk = makeString_2C((jj :+ jd), "_")
2374- let jl = if (containsElement(jg, jc))
2375- then value(jf)
2376- else makeString_2C((jg :+ jc), "_")
2377- $Tuple2([StringEntry(hs, jc), StringEntry(jh, jk), StringEntry(je, jl), ie], 0)
2400+ let jn = makeString_2C((jm :+ jg), "_")
2401+ let jo = if (containsElement(jj, jf))
2402+ then value(ji)
2403+ else makeString_2C((jj :+ jf), "_")
2404+ $Tuple2([StringEntry(hv, jf), StringEntry(jk, jn), StringEntry(jh, jo), ih], 0)
23782405 }
23792406 }
23802407 }
23812408 }
23822409 }
23832410
23842411
23852412
2386-@Callable(eb)
2387-func distributePoints (jm,jn,jo,jp,jq) = {
2388- let ie = ib(eb)
2389- if ((size(eb.payments) != 0))
2413+@Callable(ee)
2414+func distributePoints (jp,jq,jr,js,jt) = {
2415+ let ih = ie(ee)
2416+ if ((size(ee.payments) != 0))
23902417 then throw("No payments required")
23912418 else {
2392- let b = toString(eb.originCaller)
2419+ let b = toString(ee.originCaller)
23932420 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2394- let jr = w(b)
2395- let js = valueOrElse(getInteger(bD, jr), 0)
2396- let jt = s(p)
2397- let ju = valueOrElse(getInteger(bD, jt), 0)
2398- let jv = (js + ju)
2399- let jw = ((((jm + jn) + jo) + jp) + jq)
2400- if ((jw > jv))
2401- then throw((("There are only " + toString(jv)) + " free points to distribute"))
2421+ let ju = w(b)
2422+ let jv = valueOrElse(getInteger(bD, ju), 0)
2423+ let jw = s(p)
2424+ let jx = valueOrElse(getInteger(bD, jw), 0)
2425+ let jy = (jv + jx)
2426+ let jz = ((((jp + jq) + jr) + js) + jt)
2427+ if ((jz > jy))
2428+ then throw((("There are only " + toString(jy)) + " free points to distribute"))
24022429 else {
2403- let jx = o(p)
2404- let jy = split(valueOrElse(getString(bD, jx), "0_0_0_0_0"), "_")
2405- let jz = (js - jw)
2406- $Tuple2([IntegerEntry(jr, if ((0 > jz))
2430+ let jA = o(p)
2431+ let jB = split(valueOrElse(getString(bD, jA), "0_0_0_0_0"), "_")
2432+ let jC = (jv - jz)
2433+ $Tuple2([IntegerEntry(ju, if ((0 > jC))
24072434 then 0
2408- else jz), IntegerEntry(jt, if ((0 > jz))
2409- then (ju + jz)
2410- else ju), StringEntry(jx, makeString([toString((parseIntValue(jy[g]) + jm)), toString((parseIntValue(jy[h]) + jn)), toString((parseIntValue(jy[i]) + jo)), toString((parseIntValue(jy[j]) + jp)), toString((parseIntValue(jy[k]) + jq))], "_")), ie], 0)
2435+ else jC), IntegerEntry(jw, if ((0 > jC))
2436+ then (jx + jC)
2437+ else jx), StringEntry(jA, makeString([toString((parseIntValue(jB[g]) + jp)), toString((parseIntValue(jB[h]) + jq)), toString((parseIntValue(jB[i]) + jr)), toString((parseIntValue(jB[j]) + js)), toString((parseIntValue(jB[k]) + jt))], "_")), ih], 0)
24112438 }
24122439 }
24132440 }
24142441
24152442
24162443
2417-@Callable(eb)
2418-func splitByGlobalWeightsREADONLY (fr) = $Tuple2(nil, cU(fr))
2419-
2420-
2421-
2422-@Callable(eb)
2423-func splitByGlobalAndLocalWeightsREADONLY (jA,jB,ee) = {
2424- let dX = ed(ee)
2425- $Tuple2(nil, $Tuple2(cU(jA), cF(jB, dX)))
2426- }
2427-
2428-
2429-
2430-@Callable(eb)
2431-func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eJ(aO(p)), ":"))
2432-
2433-
2434-
2435-@Callable(eb)
2444+@Callable(ee)
2445+func splitByGlobalWeightsREADONLY (fu) = $Tuple2(nil, cU(fu))
2446+
2447+
2448+
2449+@Callable(ee)
2450+func splitByGlobalAndLocalWeightsREADONLY (jD,jE,eh) = {
2451+ let ea = eg(eh)
2452+ $Tuple2(nil, $Tuple2(cU(jD), cF(jE, ea)))
2453+ }
2454+
2455+
2456+
2457+@Callable(ee)
2458+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eM(aO(p)), ":"))
2459+
2460+
2461+
2462+@Callable(ee)
24362463 func getWarehouseREADONLY (aF) = {
2437- let gG = value(assetInfo(fromBase58String(aF)))
2438- let fd = (bT(split(gG.description, "_")[bI]) / bj)
2439- let fe = valueOrElse(getInteger(ay(aF)), 0)
2440- $Tuple2(nil, makeString_2C(fb(aE(aF), fd, fe), ":"))
2441- }
2442-
2443-
2444-
2445-@Callable(eb)
2446-func saveLastTx () = if (if ((eb.caller != bG))
2447- then (eb.caller != bE)
2464+ let gJ = value(assetInfo(fromBase58String(aF)))
2465+ let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2466+ let fh = valueOrElse(getInteger(ay(aF)), 0)
2467+ $Tuple2(nil, makeString_2C(fe(aE(aF), fg, fh), ":"))
2468+ }
2469+
2470+
2471+
2472+@Callable(ee)
2473+func saveLastTx () = if (if ((ee.caller != bG))
2474+ then (ee.caller != bE)
24482475 else false)
24492476 then throw("Access denied")
2450- else $Tuple2([ib(eb)], 42)
2451-
2452-
2453-
2454-@Callable(eb)
2455-func updateDuckStats (p,hl) = if ((eb.caller != bE))
2477+ else $Tuple2([ie(ee)], 42)
2478+
2479+
2480+
2481+@Callable(ee)
2482+func updateDuckStats (p,ho) = if ((ee.caller != bE))
24562483 then throw("Access denied")
2457- else hk(p, hl)
2458-
2459-
2460-
2461-@Callable(eb)
2462-func updateAccStats (b,hl) = if ((eb.caller != bE))
2484+ else hn(p, ho)
2485+
2486+
2487+
2488+@Callable(ee)
2489+func updateAccStats (b,ho) = if ((ee.caller != bE))
24632490 then throw("Access denied")
2464- else hq(b, hl)
2465-
2466-
2467-
2468-@Callable(eb)
2469-func equipDuck (jC) = {
2470- let ie = ib(eb)
2471- if ((size(eb.payments) != 0))
2491+ else ht(b, ho)
2492+
2493+
2494+
2495+@Callable(ee)
2496+func equipDuck (jF) = {
2497+ let ih = ie(ee)
2498+ if ((size(ee.payments) != 0))
24722499 then throw("No payments required")
24732500 else {
2474- let b = toString(eb.originCaller)
2501+ let b = toString(ee.originCaller)
24752502 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
2476- let jD = t(p)
2477- let jE = split(valueOrElse(getString(jD), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2478- let eK = aO(p)
2479- let fv = eJ(eK)
2480- let jF = split(jC, "_")
2481- if ((size(jF) != l))
2503+ let jG = t(p)
2504+ let jH = split(valueOrElse(getString(jG), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2505+ let eN = aO(p)
2506+ let fy = eM(eN)
2507+ let jI = split(jF, "_")
2508+ if ((size(jI) != l))
24822509 then throw("Wrong equipment string")
24832510 else {
2484- let jG = fv[as]
2485- let dh = if ((jG == ""))
2511+ let jJ = fy[as]
2512+ let dh = if ((jJ == ""))
24862513 then nil
2487- else split(jG, "_")
2488- let jH = dQ(jE, dh, true)
2489- let dt = dQ(jF, jH, false)
2490- $Tuple2([StringEntry(jD, jC), StringEntry(eK, makeString_2C([fv[ap], fv[aq], fv[ar], makeString(dt, "_")], ":")), ie], 0)
2514+ else split(jJ, "_")
2515+ let jK = dT(jH, dh, true)
2516+ let dt = dT(jI, jK, false)
2517+ $Tuple2([StringEntry(jG, jF), StringEntry(eN, makeString_2C([fy[ap], fy[aq], fy[ar], makeString(dt, "_")], ":")), ih], 0)
24912518 }
24922519 }
24932520 }
2521+
2522+
2523+
2524+@Callable(ee)
2525+func test () = if ((ee.caller != this))
2526+ then throw("Access denied")
2527+ else $Tuple2(nil, du(""))
24942528
24952529

github/deemru/w8io/169f3d6 
1118.97 ms