tx · EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J

3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm:  -0.07600000 Waves

2023.07.20 00:16 [2673265] smart account 3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm > SELF 0.00000000 Waves

{ "type": 13, "id": "EyTKrE58J62gwb1rYThaJsTaTe2KW4RFKpdV84SFua7J", "fee": 7600000, "feeAssetId": null, "timestamp": 1689801433015, "version": 2, "chainId": 84, "sender": "3NDCyBG5q85JuaRiigUeEtainyjCQT3XpZm", "senderPublicKey": "EVooykMNV691Venwp1dHUTBd7KWequzUcda57Wd3LQEX", "proofs": [ "37jQDJL6ydGoniq4GY5oNqUGfDDimA1M1uoc13PfwD8dhSgxDTxGmu7j8ctoWEq1m9D2Tr5QkrQJzFEQqfF2g2Zx" ], "script": "base64:BgK0AQgCEgMKAQgSAwoBBBIAEgMKAQgSABIDCgEIEgQKAgEIEgQKAgEIEgQKAgICEgUKAwEBARIAEgQKAggIEgASBAoCAgISAwoBCBIDCgEIEgQKAggIEgMKARgSAwoBGBIECgIICBIECgIICBIDCgEIEgMKAQgSBQoDCAgIEgQKAggIEgcKBQEBAQEBEgMKAQESBQoDAQEIEgMKAQgSAwoBCBIAEgQKAggBEgQKAggBEgMKAQgSAM8BARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEEYWRkcgkArAICAhBsYXN0QXJiVGltZVVzZXJfBQRhZGRyAAZTQ0FMRTgAgMLXLwAMeHBMZXZlbFNjYWxlAIAZAA94cExldmVsUmVjaXBQb3cAoB8AEm51bVBvaW50c09uTGV2ZWxVcAADAAxjaGFyU3RyZW5ndGgAAAAMY2hhckFjY3VyYWN5AAEADWNoYXJJbnRlbGxlY3QAAgANY2hhckVuZHVyYW5jZQADAA1jaGFyRGV4dGVyaXR5AAQAC05VTVNFR01FTlRTAAYACk5VTU1BSU5BVVgAAgAITUFYU0xPVFMAAgEMa2V5RHVja0NoYXJzAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrQ2hhcnNfBQtkdWNrQXNzZXRJZAEJa2V5RHVja1hQAQtkdWNrQXNzZXRJZAkArAICAgdkdWNrWFBfBQtkdWNrQXNzZXRJZAEMa2V5RHVja0xldmVsAQtkdWNrQXNzZXRJZAkArAICAgpkdWNrTGV2ZWxfBQtkdWNrQXNzZXRJZAERa2V5RHVja0ZyZWVQb2ludHMBC2R1Y2tBc3NldElkCQCsAgICD2R1Y2tGcmVlUG9pbnRzXwULZHVja0Fzc2V0SWQBEGtleUR1Y2tFcXVpcG1lbnQBC2R1Y2tBc3NldElkCQCsAgICDmR1Y2tFcXVpcG1lbnRfBQtkdWNrQXNzZXRJZAEJa2V5VXNlclhQAQRhZGRyCQCsAgICB3VzZXJYUF8FBGFkZHIBDGtleVVzZXJMZXZlbAEEYWRkcgkArAICAgp1c2VyTGV2ZWxfBQRhZGRyARFrZXlVc2VyRnJlZVBvaW50cwEEYWRkcgkArAICAg91c2VyRnJlZVBvaW50c18FBGFkZHIAB3hwQ2xhaW0AoI0GAA94cFN1Y2Nlc3NGbGlnaHQA0IYDAAx4cEZhaWxGbGlnaHQAkE4ACHhwQ2FsbEVTAKCNBgAMeHBDdXN0b21OYW1lAMCWsQIACnhwTmV3U0xhbmQAgOHrFwAOeHBVcGdyYWRlSW5mcmEAoI0GAAd4cE1lcmdlAICt4gQACXhwT25ib2FyZACAreIEAAZ4cEhlYWwAkE4BCWxldmVsQnlYUAECeHAJAGsDBQx4cExldmVsU2NhbGUJAGwGBQJ4cAAEBQ94cExldmVsUmVjaXBQb3cABAAEBQRET1dOBQZTQ0FMRTgBCW1heEhlYWx0aAEFbGV2ZWwJAGQCAGQFBWxldmVsAQdsZXZlbFVwAgljdXJyTGV2ZWwFbmV3WFAECG5ld0xldmVsCQEJbGV2ZWxCeVhQAQUFbmV3WFAJAMwIAgUIbmV3TGV2ZWwJAMwIAgkAaAIFEm51bVBvaW50c09uTGV2ZWxVcAkAZQIFCG5ld0xldmVsBQljdXJyTGV2ZWwFA25pbAAKTEFORFBSRUZJWAIETEFORAAKRFVDS1BSRUZJWAIERFVDSwAKQVJUUFJFU0FMRQIHUFJFU0FMRQAGTlVNUkVTAAYAD0RBSUxZUkVTQllQSUVDRQCA+NIBAAlEQVlNSUxMSVMAgLiZKQAMV0hNVUxUSVBMSUVSAIDIr6AlAA9ERUZBVUxUTE9DQVRJT04CD0FmcmljYV9GX0FmcmljYQAQUkVTT1VSQ0VQUklDRU1JTgDVtQIACkVTU0VMTENPRUYACgAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiI4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfCQDMCAICIjhfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8JAMwIAgIiOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXwkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzMwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfNTBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF83MF8wLDAsMCwwLDAsMCwwXzIwMQUDbmlsAAlySWR4Q29lZmYABgAJcklkeFNsb3RzAAoADlBST0RVQ1RQS0dTSVpFAAoAC3doSWR4TGV2ZWxzAAAACHdoSWR4UmVzAAEACHdoSWR4TWF0AAIACXdoSWR4UHJvZAADAAl3aElkeExPRlQABAAJdm9sTG9ja2VkAAAAC3ZvbE9jY3VwaWVkAAEAB3ZvbEZyZWUAAgAIdm9sVG90YWwAAwAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwERa2V5TGFzdFR4SWRCeVVzZXIBBGFkZHIJAKwCAgIPbGFzdFR4SWRCeVVzZXJfBQRhZGRyARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIJbmZ0T3duZXJfBQdhc3NldElkARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEHYXNzZXRJZAkArAICAhhsYW5kQ3VzdG9tTmFtZUJ5QXNzZXRJZF8FB2Fzc2V0SWQBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILc3Rha2VkVGltZV8FB2Fzc2V0SWQBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBB2Fzc2V0SWQJAKwCAgILaW5mcmFMZXZlbF8FB2Fzc2V0SWQBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgR0eXBlB2Fzc2V0SWQJALkJAgkAzAgCAg1sYW5kQXJ0U3RhdHVzCQDMCAIFBHR5cGUJAMwIAgUHYXNzZXRJZAUDbmlsAgFfASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwduZnRUeXBlB2Fzc2V0SWQJb3duZXJBZGRyCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIgc3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcl8FB25mdFR5cGUCAV8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgESa2V5V2FyZWhvdXNlQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgp3YXJlSG91c2VfBQtsYW5kQXNzZXRJZAEaa2V5RHVja0Fzc2V0SWRUb0N1c3RvbU5hbWUBB2Fzc2V0SWQJAKwCAgIYZHVja0N1c3RvbU5hbWVCeUFzc2V0SWRfBQdhc3NldElkARZrZXlBZGRyZXNzVG9DdXN0b21OYW1lAQRhZGRyCQCsAgICGGFjY291bnRDdXN0b21OYW1lQnlBZGRyXwUEYWRkcgEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEca2V5T25ib2FyZEFydEFjdGl2YXRlZE9uRHVjawELZHVja0Fzc2V0SWQJAKwCAgIab25ib2FyZEFydEFjdGl2YXRlZE9uRHVja18FC2R1Y2tBc3NldElkARxrZXlPbmJvYXJkQXJ0RHVja0FjdGl2YXRlZEJ5AQRhZGRyCQCsAgICGm9uYm9hcmRBcnRBY3RpdmF0ZWREdWNrQnlfBQRhZGRyARNrZXlBZGRyZXNzUmVmZXJyYWxzAQRhZGRyCQCsAgICDWFjY1JlZmVycmFsc18FBGFkZHIBEGtleUR1Y2tJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIKZHVja093bmVyXwUHYXNzZXRJZAEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDWtleUR1Y2tIZWFsdGgBC2R1Y2tBc3NldElkCQCsAgICC2R1Y2tIZWFsdGhfBQtkdWNrQXNzZXRJZAEKa2V5QmxvY2tlZAACEGNvbnRyYWN0c0Jsb2NrZWQBFWtleVVzZXJHd2xSZWxlYXNlVGltZQEIdXNlckFkZHIJAKwCAgIaJXMlc19fdXNlckd3bFJlbGVhc2VUaW1lX18FCHVzZXJBZGRyAQ5rZXlFc1dhcmVob3VzZQACGmVtZXJnZW5jeVdhcmVob3VzZVByb2R1Y3RzAApsb2NJZHhUeXBlAAEACGxvY0lkeElkAAIBEmdldFJlY2lwZU1hdGVyaWFscwEGcmVjaXBlCQBoAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBnJlY2lwZQUJcklkeENvZWZmBQlDT0VGRjJNQVQAD0tTQUxMT1dYUExFVkVMUwYABWNoYWluCQDJAQIJAMoBAggFBHRoaXMFYnl0ZXMAAQABAAt1c2R0QXNzZXRJZAQHJG1hdGNoMAUFY2hhaW4DCQAAAgEBVwUHJG1hdGNoMAEghNp6sggDP07Ru8qO7ouTvMmC3Qtd+geWqNQj+agP/7kDCQAAAgEBVAUHJG1hdGNoMAEgVbHYn3KHgu/l41uNrAWrZd6aQ6EvFrsF8xq3h6XxxRgJAAIBAg1Vbmtub3duIGNoYWluABVkZWZhdWx0UmVzdEFkZHJlc3NTdHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDACIzNQUUN1dkZidmg0TGtQVW5yblUxejNqbmJBMXA5bTNXTmh2AwkAAAIBAVQFByRtYXRjaDACIzNNdW1rR0d6dENLQVhwV0RxeGtkZG9mcVhTVWJxUWt2U0p5CQACAQINVW5rbm93biBjaGFpbgARSW5mcmFVcGdyYWRlQ29zdFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAgMivoCUDCQAAAgEBVAUHJG1hdGNoMACAwtcvCQACAQINVW5rbm93biBjaGFpbgAOYXJiaXRyYWdlRGVsYXkEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAAwM8kAwkAAAIBAVQFByRtYXRjaDAA4NQDCQACAQINVW5rbm93biBjaGFpbgADU0VQAgJfXwAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAVTU0laRQAZAAVNU0laRQBkAAVMU0laRQDhAQAGWExTSVpFAJADAAdYWExTSVpFAPEEAQ9nZXRTdHJpbmdPckZhaWwCB2FkZHJlc3MDa2V5CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUHYWRkcmVzcwUDa2V5CQC5CQIJAMwIAgIKbWFuZGF0b3J5IAkAzAgCCQClCAEFB2FkZHJlc3MJAMwIAgIBLgkAzAgCBQNrZXkJAMwIAgIPIGlzIG5vdCBkZWZpbmVkBQNuaWwCAAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwANSWR4Q2ZnV2xnRGFwcAAEAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwAA9lY29ub215Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdFY29ub215RGFwcAALZ292Q29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdHb3Zlcm5hbmNlRGFwcAALd2xnQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBQ1JZHhDZmdXbGdEYXBwAApyZWNMYW5kTnVtAAAAC3JlY0xhbmRTaXplAAEAC3JlY1RlcnJhaW5zAAIADHJlY0NvbnRpbmVudAADARFrZXlSZXNQcm9wb3J0aW9ucwACE3Jlc1R5cGVzUHJvcG9ydGlvbnMBFWtleVN0YWtlZExhbmRzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICE3N0YWtlZExhbmRzQnlPd25lcl8FCW93bmVyQWRkcgEWa2V5U3Rha2VkUGllY2VzQnlPd25lcgEJb3duZXJBZGRyCQCsAgICFHN0YWtlZFBpZWNlc0J5T3duZXJfBQlvd25lckFkZHIBCGFzU3RyaW5nAQF2BAckbWF0Y2gwBQF2AwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAUBcwkAAgECGGZhaWwgdG8gY2FzdCBpbnRvIFN0cmluZwEFYXNJbnQBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIDSW50BAFuBQckbWF0Y2gwBQFuCQACAQIVZmFpbCB0byBjYXN0IGludG8gSW50AQ9udW1QaWVjZXNCeVNpemUBCGxhbmRTaXplBAckbWF0Y2gwBQhsYW5kU2l6ZQMJAAACAgFTBQckbWF0Y2gwBQVTU0laRQMJAAACAgFNBQckbWF0Y2gwBQVNU0laRQMJAAACAgFMBQckbWF0Y2gwBQVMU0laRQMJAAACAgJYTAUHJG1hdGNoMAUGWExTSVpFAwkAAAICA1hYTAUHJG1hdGNoMAUHWFhMU0laRQkAAgECEVVua25vd24gbGFuZCBzaXplAA1pbmN1YmF0b3JBZGRyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwCQERQGV4dHJOYXRpdmUoMTA2MikBAiMzUEVrdFZ1eDJSaGNoU042M0RzRG80YjRtejRRcXpLU2VEdgMJAAACAQFUBQckbWF0Y2gwBQR0aGlzCQACAQINVW5rbm93biBjaGFpbgALYnJlZWRlckFkZHIEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAJARFAZXh0ck5hdGl2ZSgxMDYyKQECIzNQRFZ1VTQ1SDdFaDVkbXROYm5STlJTdEd3VUxBN05ZNkhiAwkAAAIBAVQFByRtYXRjaDAFBHRoaXMJAAIBAg1Vbmtub3duIGNoYWluAANwdWIBIE9T4ho/VKjWnVJOEx1GJ1W9s1PzLHvJVFSw/0PBtBQoAAhtZWRLaXRIcAkAzAgCAB4JAMwIAgA8CQDMCAIAeAUDbmlsABFGSVZFTUlOVVRFU01JTExJUwDgpxIADFJFTkFNSU5HQ09TVADAlrECAApNQVhOQU1FTEVOADIAFUluZnJhVXBncmFkZUNvc3RTVXNkdACAreIEAAxFWFBNQVRFUklBTFMEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDAApt2C7asHAwkAAAIBAVQFByRtYXRjaDAAqqeBswkJAAIBAg1Vbmtub3duIGNoYWluAAdFWFBVU0RUBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAIDlmncDCQAAAgEBVAUHJG1hdGNoMACA5Zp3CQACAQINVW5rbm93biBjaGFpbgAFRklWRVgJALYCAQAFAAdUV0VOVFlYCQC2AgEAFAAIVFdFTlRZMlgJALYCAQkAaAIAFAAUAAhUV0VOVFkzWAkAtgIBCQBoAgkAaAIAFAAUABQACFRXRU5UWTRYCQC2AgEJAGgCCQBoAgkAaAIAFAAUABQAFAAIVFdFTlRZNVgJALYCAQkAaAIJAGgCCQBoAgkAaAIAFAAUABQAFAAUAA9QUkVTQUxFTlVNTEFORFMA9AMBEmtleU5leHRGcmVlTGFuZE51bQACC25leHRMYW5kTnVtARBrZXlMYW5kVG9Bc3NldElkAQdsYW5kTnVtCQCsAgICDGxhbmRUb0Fzc2V0XwUHbGFuZE51bQEaa2V5TGFuZEN1c3RvbU5hbWVUb0Fzc2V0SWQBBG5hbWUJAKwCAgIRbGFuZEJ5Q3VzdG9tTmFtZV8FBG5hbWUBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIHYXNzZXRJZAlvd25lckFkZHIJAKwCAgkArAICCQCsAgICHGluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcl8FB2Fzc2V0SWQCAV8FCW93bmVyQWRkcgEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMEdHlwZQdhc3NldElkCW93bmVyQWRkcgkAuQkCCQDMCAICImxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIJAMwIAgUEdHlwZQkAzAgCBQdhc3NldElkCQDMCAIFCW93bmVyQWRkcgUDbmlsAgFfARFrZXlMYW5kTnVtVG9Pd25lcgEHbGFuZE51bQkArAICAgpsYW5kT3duZXJfBQdsYW5kTnVtARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEEbmFtZQkArAICAhFkdWNrQnlDdXN0b21OYW1lXwUEbmFtZQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEEbmFtZQkArAICAhRhY2NvdW50QnlDdXN0b21OYW1lXwUEbmFtZQEJa2V5T2xkaWVzAAIKb2xkaWVzTGlzdAALY2xhaW1Nb2RlV2gAAAANY2xhaW1Nb2RlRHVjawABABNjbGFpbU1vZGVXaFRoZW5EdWNrAAIACGZsSGVhbHRoAAAAC2ZsVGltZXN0YW1wAAUAB2ZsQm9udXMABgALZmxQcm9kc1VzZWQABwEHbmZ0TmFtZQIHbGFuZE51bQhsYW5kU2l6ZQkArAICCQCsAgIFCkxBTkRQUkVGSVgFB2xhbmROdW0FCGxhbmRTaXplARNkaXN0cmlidXRlQnlXZWlnaHRzAgV0b3RhbAd3ZWlnaHRzBANzdW0JAGQCCQBkAgkAZAIJAGQCCQBkAgkAkQMCBQd3ZWlnaHRzAAAJAJEDAgUHd2VpZ2h0cwABCQCRAwIFB3dlaWdodHMAAgkAkQMCBQd3ZWlnaHRzAAMJAJEDAgUHd2VpZ2h0cwAECQCRAwIFB3dlaWdodHMABQMJAGcCAAAFA3N1bQkAAgECEFplcm8gd2VpZ2h0cyBzdW0EBW5vcm02CQBrAwUFdG90YWwFBU1VTFQ2BQNzdW0KAQpub3JtYWxpemVyAgNhY2MEZWxlbQkAzQgCBQNhY2MJAGsDBQRlbGVtBQVub3JtNgUFTVVMVDYKAAIkbAUHd2VpZ2h0cwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKbm9ybWFsaXplcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgESZ2V0TmVlZGVkTWF0ZXJpYWxzAQV0b3RhbAQFcHJvcHMJALUJAgkBBXZhbHVlAQkAoggBCQERa2V5UmVzUHJvcG9ydGlvbnMAAgFfAwkBAiE9AgkAkAMBBQVwcm9wcwUGTlVNUkVTCQACAQIWV3JvbmcgcHJvcG9ydGlvbnMgZGF0YQQBcgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAQkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAgkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMAAwkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABAkAzAgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFcHJvcHMABQUDbmlsCQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFBXRvdGFsBQFyARFzdWJ0cmFjdE1hdGVyaWFscwMMc2hvdWxkVXNlTWF0A2hhcwl0b3RhbE5lZWQEBG5lZWQJARJnZXROZWVkZWRNYXRlcmlhbHMBBQl0b3RhbE5lZWQKAQpzdWJ0cmFjdG9yAgNhY2MDaWR4BAZyZXN1bHQJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaGFzBQNpZHgJAJEDAgUEbmVlZAUDaWR4AwkAZgIAAAUGcmVzdWx0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGE5vdCBlbm91Z2ggbWF0ZXJpYWwgaWR4PQkApAMBBQNpZHgCCywgeW91IGhhdmUgCQCRAwIFA2hhcwUDaWR4AgssIGJ1dCBuZWVkIAkApAMBCQCRAwIFBG5lZWQFA2lkeAkAzQgCBQNhY2MJAKQDAQUGcmVzdWx0AwUMc2hvdWxkVXNlTWF0CgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEKc3VidHJhY3RvcgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgUDaGFzARBzdWJ0cmFjdFByb2R1Y3RzAgRwSGFzBXBVc2VkAwkAAAIFBXBVc2VkAgAFBHBIYXMEBXBMaXN0AwkAAAIFBHBIYXMCAAUDbmlsCQC1CQIFBHBIYXMCAV8KAQRzdWJQAgNhY2MEaXRlbQQBaggFA2Fj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b3VudAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBXBhcnRzAAEDAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBAhNVbmtub3duIHByb2R1Y3QgaWR4AwkAZgIAAAUFY291bnQJAAIBAhdDb3VudCBjYW4ndCBiZSBuZWdhdGl2ZQMJAAACBQVjb3VudAAACQCUCgIFBXBMaXN0BwoBBGFkZFACA2FjYwRpdGVtBAFqCAUDYWNjAl8xBARjdXJyAwkAZgIJAJADAQUFcExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwTGlzdAUBagAAAwkBAiE9AgUKcHJvZHVjdElkeAUBagkAlQoDCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUEY3VycggFA2FjYwJfMwMDCQEBIQEFCmlzUG9zaXRpdmUJAGYCBQVjb3VudAUEY3VycgcJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCkAwEFBGN1cnICBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqAhMsIGJ1dCB0cmllZCB0byB1c2UgCQCkAwEFBWNvdW50BAVpc0JpZwMJAQEhAQUKaXNQb3NpdGl2ZQQGY29tcGF0CQCRAwIJALUJAgUEaXRlbQIBXwUJcklkeFNsb3RzAwkAAAIFBmNvbXBhdAIACQACAQIXSXRlbSBjYW5ub3QgYmUgZXF1aXBwZWQEAWMJAQ1wYXJzZUludFZhbHVlAQUGY29tcGF0BARjU2VnCQBpAgUBYwBkAwkBAiE9AgUHc2VnbWVudAUEY1NlZwkAAgECFFNlZ21lbnQgaW5jb21wYXRpYmxlBAhjTWFpbkF1eAkAaQIJAGoCBQFjAGQACgMJAQIhPQIFB21haW5BdXgFCGNNYWluQXV4CQACAQIRU2xvdCBpbmNvbXBhdGlibGUECWNOdW1TbG90cwkAagIFAWMACgMDCQECIT0CBQRzbG90AAAJAGYCBQljTnVtU2xvdHMAAQcJAAIBAh5CaWcgaXRlbXMgc2hvdWxkIG9jY3VweSBzbG90IDAJAGYCBQljTnVtU2xvdHMAAQcJAJUKAwkAZAIFAWoAAQkAzQgCCAUDYWNj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AMwIAgkAZQIJAJADAQkAtQkCBQh0ZXJyYWlucwIBRAABCQDMCAIJAGUCCQCQAwEJALUJAgUIdGVycmFpbnMCAUUAAQkAzAgCCQBlAgkAkAMBCQC1CQIFCHRlcnJhaW5zAgFGAAEFA25pbAEGYWRkUmVzBQpjdXJyZW50UmVzDXRlcnJhaW5Db3VudHMJZGVsdGFUaW1lDWxhbmRTaXplSW5kZXgXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMKAQVhZGRlcgIDYWNjAWkECXJlc09mVHlwZQkAaAIJAGgCCQBrAwUJZGVsdGFUaW1lBRdkYWlseUJ5UGllY2VXaXRoQm9udXNlcwUJREFZTUlMTElTCQCRAwIFDXRlcnJhaW5Db3VudHMFAWkFDWxhbmRTaXplSW5kZXgJAM0IAgUDYWNjCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKY3VycmVudFJlcwUBaQUJcmVzT2ZUeXBlBAFyCgACJGwJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEFYWRkZXICBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDYJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYJALkJAgUBcgIBXwEJdmlydENsYWltBA10ZXJyYWluQ291bnRzCWRlbHRhVGltZQ1sYW5kU2l6ZUluZGV4F2RhaWx5QnlQaWVjZVdpdGhCb251c2VzCgEFYWRkZXICA2FjYwFpBAlyZXNPZlR5cGUJAGgCCQBoAgkAawMFCWRlbHRhVGltZQUXZGFpbHlCeVBpZWNlV2l0aEJvbnVzZXMFCURBWU1JTExJUwkAkQMCBQ10ZXJyYWluQ291bnRzBQFpBQ1sYW5kU2l6ZUluZGV4CQCUCgIJAM0IAggFA2FjYwJfMQUJcmVzT2ZUeXBlCQBk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AQUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCXZvbFByZWZpeAQFcGFydHMJALUJAgUJdm9sUHJlZml4AgFfCQBoAgkAaAIFDFdITVVMVElQTElFUgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwABAAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVwYXJ0cwAAARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEJY3VycmVudFdoBAVnb29kcwkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAoBCXN1bVJlc01hdAIDYWNjBGl0ZW0JAGQCBQNhY2MJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQoBB3N1bVByb2QCA2FjYwRpdGVtBANpZHgIBQNhY2MCXzEEBHBrZ3MJAGkCCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQUEaXRlbQUOUFJPRFVDVFBLR1NJWkUAAQUOUFJPRFVDVFBLR1NJWkUJAJQKAgkAZAIFA2lkeAABCQBkAggFA2FjYwJfMgkAaAIFBHBrZ3MFBU1VTFQ4BAh3aFJlc1ZvbAoAAiRsCQC1CQIJAJEDAgUJY3VycmVudFdoBQh3aElkeFJlcwIBXwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJc3VtUmVzTWF0AgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVk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aFRvdGFsBQh3aExvY2tlZAUDb2NjCQDMCAIJAKQDAQUHd2hUb3RhbAUDbmlsAgFfCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUCd2gFCHdoSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUCd2gFCHdoSWR4UmVzAgswXzBfMF8wXzBfMAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAndoBQh3aElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAndoBQh3aElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIFBndoTG9mdAUDbmlsARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBCWN1cnJlbnRXaAQLb2NjdXBpZWRWb2wJARdnZXRXYXJlaG91c2VPY2N1cGllZFZvbAEFCWN1cnJlbnRXaAQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQJAGUCCQBlAgkBF2dldFdhcmVob3VzZVRvdGFsVm9sdW1lAQkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzBQtvY2N1cGllZFZvbAUPY3VycldoTG9ja2VkVm9sAQh0b1ZvbHVtZQIGYW1vdW50B3BrZ1NpemUEBHBrZ3MDCQBnAgUGYW1vdW50AAAJAGkCCQBlAgkAZAIFBmFtb3VudAUHcGtnU2l6ZQABBQdwa2dTaXplCQEBLQEJAGkCCQBlAgkAZAIJAQEtAQUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAGgCBQRwa2dzBQVNVUxUOAEJbW92ZVN0dWZmAwpjYXJnb1BhcnRzCWN1cnJlbnRXaAtjdXJyZW50UGFjawMJAQIhPQIJAJADAQUKY2FyZ29QYXJ0cwADCQACAQI0Y2FyZ29MaXN0U3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIcmVzUGFydHMJALUJAgkAkQMCBQpjYXJnb1BhcnRzAAACAV8ECG1hdFBhcnRzCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQpjYXJnb1BhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUKY2FyZ29QYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhyZXNQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCG1hdFBhcnRzBQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQLd2hTcGFjZUxlZnQJARVnZXRXYXJlaG91c2VTcGFjZUxlZnQBBQljdXJyZW50V2gECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDmN1cnJlbnRQYWNrTWF0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA9jdXJyZW50UGFja1Byb2QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQNtdlICA2FjYwRpdGVtBAFpCAUDYWNjAl8xBAJhbQkBDXBhcnNlSW50VmFsdWUBBQRpdGVtBAN3aHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQljdXJyV2hSZXMFAWkEA2JwcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpAwkAAAIFAmFtAAAJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCRAwIFCWN1cnJXaFJlcwUBaQkAzQgCCAUDYWNjAl8zCQCRAwIFDmN1cnJlbnRQYWNrUmVzBQFpCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0F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Y3VycmVudFBhY2tQcm9kBQFpAAADCQAAAgUCYW0AAAkAlgoECQBkAgUBaQABCQDNCAIIBQNhY2MCXzIJAKQDAQUDd2hwCQDNCAIIBQNhY2MCXzMJAKQDAQUDYnBwCAUDYWNjAl80AwkAZgIFAmFtAAADCQBmAgUCYW0FA2JwcAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgIQQXR0ZW1wdCB0byB0YWtlIAUEaXRlbQIZIGZyb20gYmFja3BhY2ssIGJ1dCBvbmx5IAkApAMBBQNicHACCiBhdmFpbGFibGUECGRlbHRhVm9sCQBlAgkBCHRvVm9sdW1lAgkAZAIFA3docAUCYW0FDlBST0RVQ1RQS0dTSVpFCQEIdG9Wb2x1bWUCBQN3aHAFDlBST0RVQ1RQS0dTSVpFCQCWCgQJAGQCBQFpAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUDd2hwBQJhbQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQNicHAFAmFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wDCQBmAgkBAS0BBQJhbQUDd2hwCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHRha2UgCQCkAwEJAQEtAQUCYW0CGiBmcm9tIHdhcmVob3VzZSwgYnV0IG9ubHkgCQCkAwEFA3docAIKIGF2YWlsYWJsZQQIZGVsdGFWb2wJAGUCCQEIdG9Wb2x1bWUCCQBkAgUDd2hwBQJhbQUOUFJPRFVDVFBLR1NJWkUJAQh0b1ZvbHVtZQIFA3docAUOUFJPRFVDVFBLR1NJWkUJAJYKBAkAZAIFAWkAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCBQN3aHAFAmFtCQDNCAIIBQNhY2MCXzMJAKQDAQkAZQIFA2JwcAUCYW0JAGQCCAUDYWNjAl80BQhkZWx0YVZvbAQBcAMJAQIhPQIJAJADAQUJcHJvZFBhcnRzAAAKAAIkbAUJcHJvZFBhcnRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlgoEAAAFA25pbAUDbmlsCAUBbQJfNAoBBSRmMl8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEDbXZQAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYyXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMl8yAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgkBBSRmMl8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIJAJYKBAAABQpjdXJyV2hQcm9kBQ9jdXJyZW50UGFja1Byb2QIBQFtAl80BAh2b2xTYWxkbwgFAXACXzQDCQBmAgUIdm9sU2FsZG8FC3doU3BhY2VMZWZ0CQACAQkArAICCQCsAgIJAKwCAgkArAICAhVBdHRlbXB0IHRvIHB1dCB0b3RhbCAJAKQDAQUIdm9sU2FsZG8CESBzdHVmZiwgYnV0IG9ubHkgCQCkAwEFC3doU3BhY2VMZWZ0AhUgd2FyZWhvdXNlIHNwYWNlIGxlZnQJAJkKBwkAuQkCCAUBcgJfMgIBXwkAuQkCCAUBbQJfMgIBXwkAuQkCCAUBcAJfMgIBXwkAuQkCCAUBcgJfMwIBXwkAuQkCCAUBbQJfMwIBXwkAuQkCCAUBcAJfMwIBXwUIdm9sU2FsZG8BEmV4cGVkaXRpb25JbnRlcm5hbAIGY2FsbGVyBHR4SWQECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQGYmlnTnVtCQEDYWJzAQkAngMBBQR0eElkBAdmcmVlTnVtCQELdmFsdWVPckVsc2UCCQCfCAEJARJrZXlOZXh0RnJlZUxhbmROdW0ACQBkAgUPUFJFU0FMRU5VTUxBTkRTAAEEB2xhbmROdW0JAKQDAQUHZnJlZU51bQQMY29udGluZW50SWR4CQCgAwEJALsCAgUGYmlnTnVtBQVGSVZFWAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIFBmJpZ051bQUMY29udGluZW50SWR4BAljb250aW5lbnQJAJEDAgUKY29udGluZW50cwUMY29udGluZW50SWR4BAVpc3N1ZQkAwggFCQEHbmZ0TmFtZQIFB2xhbmROdW0CAVMJALkJAgkAzAgCBQdsYW5kTnVtCQDMCAICAVMJAMwIAgUIdGVycmFpbnMJAMwIAgUJY29udGluZW50BQNuaWwCAV8AAQAABwQHYXNzZXRJZAkAuAgBBQVpc3N1ZQQCaWQJANgEAQUHYXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQkAzAgCBQVpc3N1ZQkAzAgCCQELU3RyaW5nRW50cnkCCQEQa2V5TGFuZFRvQXNzZXRJZAEFB2xhbmROdW0FAmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQJpZAUIdXNlckFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUHbGFuZE51bQUIdXNlckFkZHIJAMwIAgkBDEludGVnZXJFbnRyeQIJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQUCaWQAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFAmlkBQh1c2VyQWRkcgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgABBQdhc3NldElkBQNuaWwJAJQKAgUCaWQFCWNvbnRpbmVudAEMZmxpZ2h0Q29tbW9uAwh1c2VyQWRkcgdtZXNzYWdlA3NpZwMJAQEhAQkAxBMDBQdtZXNzYWdlBQNzaWcFA3B1YgkAAgECGHNpZ25hdHVyZSBkb2VzIG5vdCBtYXRjaAQFcGFydHMJALUJAgkAsAkBBQdtZXNzYWdlAgE7BAlmbGlnaHRMb2cJALUJAgkAkQMCBQVwYXJ0cwAAAgF8BAJocAkAtQkCCQCRAwIFCWZsaWdodExvZwUIZmxIZWFsdGgCAV8EBWN1ckhQCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCaHAAAAQFbmV3SFAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJocAABBAtuZXdMb2NUeFZlcgkAtQkCCQCRAwIFBXBhcnRzAAECAToEC25ld0xvY2F0aW9uCQCRAwIFC25ld0xvY1R4VmVyAAAEBHRpbWUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlmbGlnaHRMb2cFC2ZsVGltZXN0YW1wAwMJAGYCBQR0aW1lCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFEUZJVkVNSU5VVEVTTUlMTElTBgkAZgIJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAURRklWRU1JTlVURVNNSUxMSVMFBHRpbWUJAAIBCQCsAgIJAKwCAgkArAICAhxzaWduYXR1cmUgb3V0ZGF0ZWQ6IGxvZ1RpbWU9CQCkAwEFBHRpbWUCCSwgYmNUaW1lPQkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQJdHhGcm9tTXNnCQCRAwIFC25ld0xvY1R4VmVyAAEEBmxhc3RUeAkBC3ZhbHVlT3JFbHNlAgkAoggBCQERa2V5TGFzdFR4SWRCeVVzZXIBBQh1c2VyQWRkcgIAAwkBAiE9AgUGbGFzdFR4BQl0eEZyb21Nc2cJAAIBCQCsAgIJAKwCAgkArAICAh5UeCBpZHMgZG9uJ3QgbWF0Y2ghIEluIHN0YXRlOiAFBmxhc3RUeAIKLCBpbiBtc2c6IAUJdHhGcm9tTXNnBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCHVzZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQMb2xkRnJvbVN0YXRlCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQECIT0CBQxvbGRGcm9tU3RhdGUFBWN1ckhQCQACAQkArAICCQCsAgIJAKwCAgIKb2xkSGVhbHRoPQkApAMBBQxvbGRGcm9tU3RhdGUCLyBmcm9tIHN0YXRlIGRvZXMgbm90IG1hdGNoIG9uZSBmcm9tIGZsaWdodCBsb2c9CQCkAwEFBWN1ckhQAwkAZwIAAAUFY3VySFAJAAIBAh5Zb3UgY2FuJ3QgZmx5IHdpdGggemVybyBoZWFsdGgEBWJvbnVzAwkAZgIJAJADAQUJZmxpZ2h0TG9nBQdmbEJvbnVzCQCRAwIFCWZsaWdodExvZwUHZmxCb251cwIABAhwcm9kVXNlZAMJAGYCCQCQAwEFCWZsaWdodExvZwULZmxQcm9kc1VzZWQJAJEDAgUJZmxpZ2h0TG9nBQtmbFByb2RzVXNlZAIABApzZW50QW1vdW50AwMJAGYCBQVuZXdIUAAACQAAAgUFYm9udXMCASQHCQEFYXNJbnQBCQD8BwQFDHJlc3RDb250cmFjdAINc2VuZFVzZHRQcml6ZQkAzAgCBQh1c2VyQWRkcgUDbmlsBQNuaWwAAAkAlwoFBQVuZXdIUAULZHVja0Fzc2V0SWQFCnNlbnRBbW91bnQFC25ld0xvY2F0aW9uBQhwcm9kVXNlZAEQZXhwZWRpdGlvbkNvbW1vbgQGY2FsbGVyBHR4SWQHbWVzc2FnZQNzaWcECHVzZXJBZGRyCQClCAEFBmNhbGxlcgQBZgkBDGZsaWdodENvbW1vbgMFCHVzZXJBZGRyBQdtZXNzYWdlBQNzaWcECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBCAUBZgJfMgQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFmAl8yBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAZuZXdNYXQJALkJAgkBEXN1YnRyYWN0TWF0ZXJpYWxzAwYFBW1MaXN0BQxFWFBNQVRFUklBTFMCAV8EB25ld1Byb2QJARBzdWJ0cmFjdFByb2R1Y3RzAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kCAUBZgJfNQMJAGcCAAAIBQFmAl8xCQCVCgMJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAAACQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToFA25pbAIAAAAEAWUJARJleHBlZGl0aW9uSW50ZXJuYWwCBQZjYWxsZXIFBHR4SWQEAmlkCAgFAWUCXzICXzEJAJUKAwkAzQgCCQDNCAIJAM0IAggFAWUCXzEJAQtTdHJpbmdFbnRyeQIJAQ9rZXlEdWNrTG9jYXRpb24BCAUBZgJfMgkAuQkCCQDMCAIICAUBZQJfMgJfMgkAzAgCAgFMCQDMCAIFAmlkBQNuaWwCAV8JAQxJbnRlZ2VyRW50cnkCBQlrZXlIZWFsdGgIBQFmAl8xCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIFB25ld1Byb2QFA25pbAIBOgUCaWQIBQFmAl8zAQxhcHBseUJvbnVzZXMCC2xhbmRBc3NldElkBnBpZWNlcwQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECWFydFBpZWNlcwkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEga2V5TGFuZEFydFN0YXR1c0J5VHlwZUFuZEFzc2V0SWQCBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAAABARhZGQ2CQBpAgUKaW5mcmFMZXZlbAAGBARhZGQ3CQBpAgUKaW5mcmFMZXZlbAAHCQBkAgkAZAIFD0RBSUxZUkVTQllQSUVDRQkAawMFD0RBSUxZUkVTQllQSUVDRQkAZAIJAGQCBQppbmZyYUxldmVsBQRhZGQ2CQBoAgACBQRhZGQ3AAUJAGsDBQ9EQUlMWVJFU0JZUElFQ0UFCWFydFBpZWNlcwkAaAIFBnBpZWNlcwAFARRjaGVja0NsYWltQ29uZGl0aW9ucwMEYWRkcgljbGFpbU1vZGUNbGFuZEFzc2V0SWRJbgQNJHQwMjg4MDgyOTM0NwMJAAACBQljbGFpbU1vZGUFC2NsYWltTW9kZVdoCQCUCgIFDWxhbmRBc3NldElkSW4JAQt2YWx1ZU9yRWxzZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIABAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFBGFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCiCAEJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwJAJQKAgkAkQMCBQNsb2MFCGxvY0lkeElkBQtkdWNrQXNzZXRJZAQLbGFuZEFzc2V0SWQIBQ0kdDAyODgwODI5MzQ3Al8xBAZkdWNrSWQIBQ0kdDAyODgwODI5MzQ3Al8yBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIFTGFuZCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAWQJALUJAggFBWFzc2V0C2Rlc2NyaXB0aW9uAgFfCQCWCgQFBmR1Y2tJZAULbGFuZEFzc2V0SWQFAWQFCXNhdmVkVGltZQEQY2xhaW1SZXNJbnRlcm5hbAQEYWRkcgZhbW91bnQJY2xhaW1Nb2RlDWxhbmRBc3NldElkSW4DCQBmAgAABQZhbW91bnQJAAIBAg9OZWdhdGl2ZSBhbW91bnQEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFCWNsYWltTW9kZQUNbGFuZEFzc2V0SWRJbgQIbGFuZFNpemUJAJEDAggFAWMCXzMFC3JlY0xhbmRTaXplBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAlkZWx0YVRpbWUJAGUCCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAgFAWMCXzQDCQBmAgAABQlkZWx0YVRpbWUJAAIBCQCsAgIJAKwCAgkArAICAiZTYXZlZCB0aW1lc3RhbXAgaXMgaW4gZnV0dXJlLCBzYXZlZCA9IAkApAMBCAUBYwJfNAIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBBQhsYW5kU2l6ZQQWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkBDGFwcGx5Qm9udXNlcwIIBQFjAl8yBQZwaWVjZXMECGF2YWlsUmVzCQBrAwUJZGVsdGFUaW1lCQBoAgUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQUGcGllY2VzBQlEQVlNSUxMSVMDCQBmAgUGYW1vdW50BQhhdmFpbFJlcwkAAgEJAKwCAgkArAICCQCsAgICIk5vdCBlbm91Z2ggcmVzb3VyY2VzLCBhdmFpbGFibGUgPSAJAKQDAQUIYXZhaWxSZXMCDiwgcmVxdWVzdGVkID0gCQCkAwEFBmFtb3VudAQMbmV3RGVsdGFUaW1lCQBrAwkAZQIFCGF2YWlsUmVzBQZhbW91bnQFCURBWU1JTExJUwkAaAIFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UFBnBpZWNlcwQMbmV3VGltZXN0YW1wCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDG5ld0RlbHRhVGltZQQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQKcmVzVG9DbGFpbQkBCXZpcnRDbGFpbQQFDXRlcnJhaW5Db3VudHMJAGUCBQlkZWx0YVRpbWUFDG5ld0RlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAV3aEtleQkBEmtleVdhcmVob3VzZUJ5TGFuZAEIBQFjAl8yBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQgFAWMCXzIAAAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAt3aFNwYWNlTGVmdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUDAwkAAAIFCWNsYWltTW9kZQULY2xhaW1Nb2RlV2gJAGYCBQZhbW91bnQFC3doU3BhY2VMZWZ0BwkAAgEJAKwCAgkArAICAgVPbmx5IAkApAMBBQt3aFNwYWNlTGVmdAIYIHNwYWNlIGxlZnQgaW4gd2FyZWhvdXNlBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQgFAWMCXzEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQOY3VycmVudFBhY2tSZXMJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDGN1cnJlbnRXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EDSR0MDMxNzIxMzI1OTIDCQAAAgUJY2xhaW1Nb2RlBQtjbGFpbU1vZGVXaAkAlgoECQEGYWRkUmVzBQUMY3VycmVudFdoUmVzBQ10ZXJyYWluQ291bnRzCQBlAgUJZGVsdGFUaW1lBQxuZXdEZWx0YVRpbWUFCWxhbmRJbmRleAUWZGFpbHlQcm9kdWN0aW9uQnlQaWVjZQkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQpyZXNUb0NsYWltAl8yCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQpyZXNUb0NsYWltAl8yAwkAAAIFCWNsYWltTW9kZQUNY2xhaW1Nb2RlRHVjawkAlgoECQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMJAQZhZGRSZXMFBQ5jdXJyZW50UGFja1JlcwUNdGVycmFpbkNvdW50cwkAZQIFCWRlbHRhVGltZQUMbmV3RGVsdGFUaW1lBQlsYW5kSW5kZXgFFmRhaWx5UHJvZHVjdGlvbkJ5UGllY2UJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUEBWRpc3RyCQENZGlzdHJpYnV0ZVJlcwQFDGN1cnJlbnRXaFJlcwUOY3VycmVudFBhY2tSZXMFCnJlc1RvQ2xhaW0FC3doU3BhY2VMZWZ0BAR3aEFtCQCXAwEJAMwIAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUJAMwIAggFCnJlc1RvQ2xhaW0CXzIFA25pbAkAlgoECAUFZGlzdHICXzEIBQVkaXN0cgJfMgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQt2b2xPY2N1cGllZAUEd2hBbQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQR3aEFtBAV3aFJlcwgFDSR0MDMxNzIxMzI1OTICXzEEBWJwUmVzCAUNJHQwMzE3MjEzMjU5MgJfMgQFbG9mdE8IBQ0kdDAzMTcyMTMyNTkyAl8zBAVsb2Z0RggFDSR0MDMxNzIxMzI1OTICXzQJAJcKBQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCAUBYwJfMgUMbmV3VGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgIBQFjAl8yBQRhZGRyBQxuZXdUaW1lc3RhbXAFA25pbAUFYnBLZXkJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCBQVicFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAUFd2hLZXkJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIFBXdoUmVzCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCCQCRAwIFBGxvZnQFCXZvbExvY2tlZAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkAkQMCBQRsb2Z0BQh2b2xUb3RhbAUDbmlsAgFfBQNuaWwBCGNsYWltQWxsBARhZGRyC2xhbmRBc3NldElkBnBpZWNlcwljbGFpbU1vZGUEB3RpbWVLZXkJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQECXNhdmVkVGltZQkBBXZhbHVlAQkAnwgBBQd0aW1lS2V5BAhhdmFpbFJlcwkAaAIJAGsDCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQkBDGFwcGx5Qm9udXNlcwIFC2xhbmRBc3NldElkBQZwaWVjZXMFCURBWU1JTExJUwUGcGllY2VzCQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFCGF2YWlsUmVzBQljbGFpbU1vZGUFC2xhbmRBc3NldElkAQ11cEluZnJhQ29tbW9uBAxzaG91bGRVc2VNYXQGY2FsbGVyDXBheW1lbnRBbW91bnQLbGFuZEFzc2V0SWQEBGFkZHIJAKUIAQUGY2FsbGVyBAFjCQEUY2hlY2tDbGFpbUNvbmRpdGlvbnMDBQRhZGRyBRNjbGFpbU1vZGVXaFRoZW5EdWNrBQtsYW5kQXNzZXRJZAQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCAUBYwJfMwULcmVjTGFuZFNpemUECGluZnJhS2V5CQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEIBQFjAl8yBAhjdXJMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQhpbmZyYUtleQAAAwkAZwIFCGN1ckxldmVsAAMJAAIBAiZDdXJyZW50bHkgbWF4IGluZnJhc3RydWN0dXJlIGxldmVsID0gMwQIbmV3TGV2ZWwJAGQCBQhjdXJMZXZlbAABBARjb3N0CQBrAwUVSW5mcmFVcGdyYWRlQ29zdFNVc2R0CQBoAgUGcGllY2VzBQhuZXdMZXZlbAUFU1NJWkUDAwkBASEBBQxzaG91bGRVc2VNYXQJAQIhPQIFDXBheW1lbnRBbW91bnQFBGNvc3QHCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUEY29zdAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEIBQFjAl8xBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBW1MaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBAdtYXRVc2VkCQBrAwURSW5mcmFVcGdyYWRlQ29zdFMJAGgCBQZwaWVjZXMFCG5ld0xldmVsBQVTU0laRQQGbmV3TWF0CQC5CQIJARFzdWJ0cmFjdE1hdGVyaWFscwMFDHNob3VsZFVzZU1hdAUFbUxpc3QFB21hdFVzZWQCAV8EC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyCAUBYwJfMgUGcGllY2VzBRNjbGFpbU1vZGVXaFRoZW5EdWNrBAZ3aERhdGEIBQtjbGFpbVJlc3VsdAJfNQQGb2xkVm9sCQEXZ2V0V2FyZWhvdXNlVG90YWxWb2x1bWUBCQCRAwIFBndoRGF0YQULd2hJZHhMZXZlbHMECm5ld1ZvbERhdGEJALkJAgkAzAgCCQCRAwIJALUJAgkAkQMCBQZ3aERhdGEFC3doSWR4TGV2ZWxzAgFfAAAJAMwIAgkApAMBBQhuZXdMZXZlbAUDbmlsAgFfBAZuZXdWb2wJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEFCm5ld1ZvbERhdGEEBGxvZnQJALUJAgkAkQMCBQZ3aERhdGEFCXdoSWR4TE9GVAIBXwQKbmV3TG9mdFN0cgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQJAMwIAgkApAMBCQBlAgkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQd2b2xGcmVlBQZuZXdWb2wFBm9sZFZvbAkAzAgCCQCkAwEFBm5ld1ZvbAUDbmlsAgFfCQCVCgMJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUIaW5mcmFLZXkFCG5ld0xldmVsCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAggFAWMCXzIFBGFkZHIFCG5ld0xldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIIBQtjbGFpbVJlc3VsdAJfMwUIYnBJZHhSZXMJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQDMCAIJAQtTdHJpbmdFbnRyeQIIBQtjbGFpbVJlc3VsdAJfNAkAuQkCCQDMCAIFCm5ld1ZvbERhdGEJAMwIAgkAkQMCBQZ3aERhdGEFCHdoSWR4UmVzCQDMCAIJAJEDAgUGd2hEYXRhBQh3aElkeE1hdAkAzAgCCQCRAwIFBndoRGF0YQUJd2hJZHhQcm9kCQDMCAIFCm5ld0xvZnRTdHIFA25pbAIBOgUDbmlsCAULY2xhaW1SZXN1bHQCXzEFCG5ld0xldmVsBQdtYXRVc2VkARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAILZHVja0Fzc2V0SWQHZGVsdGFYUAMJAQEhAQUPS1NBTExPV1hQTEVWRUxTCQCUCgIFA25pbAAABAZsdmxLZXkJAQxrZXlEdWNrTGV2ZWwBBQtkdWNrQXNzZXRJZAQFeHBLZXkJAQlrZXlEdWNrWFABBQtkdWNrQXNzZXRJZAQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5RHVja0ZyZWVQb2ludHMBBQtkdWNrQXNzZXRJZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQZsdmxLZXkJAJEDAgUJbHZsUG9pbnRzAAAJAMwIAgkBDEludGVnZXJFbnRyeQIFBXhwS2V5BQVuZXdYUAkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5UG9pbnRzCQBkAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlQb2ludHMAAAkAkQMCBQlsdmxQb2ludHMAAQUDbmlsBQVuZXdYUAEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIEYWRkcgdkZWx0YVhQAwkBASEBBQ9LU0FMTE9XWFBMRVZFTFMJAJQKAgUDbmlsAAAEBmx2bEtleQkBDGtleVVzZXJMZXZlbAEFBGFkZHIEBXhwS2V5CQEJa2V5VXNlclhQAQUEYWRkcgQCeHAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUPc3Rha2luZ0NvbnRyYWN0BQV4cEtleQAABAVuZXdYUAkAZAIFAnhwBQdkZWx0YVhQBAlsdmxQb2ludHMJAQdsZXZlbFVwAgkBC3ZhbHVlT3JFbHNlAgkAmggCBQ9zdGFraW5nQ29udHJhY3QFBmx2bEtleQAABQVuZXdYUAQJa2V5UG9pbnRzCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFBmx2bEtleQkAkQMCBQlsdmxQb2ludHMAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFeHBLZXkFBW5ld1hQCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlrZXlQb2ludHMJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleVBvaW50cwAACQCRAwIFCWx2bFBvaW50cwABBQNuaWwFBW5ld1hQARJhY3RpdmF0ZU9uYm9hcmRBcnQBBGFkZHIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQRhZGRyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMJAQEhAQkBCWlzRGVmaW5lZAEFBXJlZkJ5CQACAQIpWW91IGFyZSBub3QgZWxpZ2libGUgZm9yIE9OQk9BUkQgYXJ0aWZhY3QEBmFydEtleQkBHGtleU9uYm9hcmRBcnREdWNrQWN0aXZhdGVkQnkBBQRhZGRyBAdhcnREdWNrCQCiCAEFBmFydEtleQMJAQlpc0RlZmluZWQBBQdhcnREdWNrCQACAQkArAICAi9Zb3UgYWxyZWFkeSB1c2VkIHlvdXIgT05CT0FSRCBhcnRpZmFjdCBvbiBkdWNrIAkBBXZhbHVlAQUHYXJ0RHVjawQQZHVja0FjdGl2YXRvcktleQkBHGtleU9uYm9hcmRBcnRBY3RpdmF0ZWRPbkR1Y2sBBQtkdWNrQXNzZXRJZAQNZHVja0FjdGl2YXRvcgkAoggBBRBkdWNrQWN0aXZhdG9yS2V5AwkBCWlzRGVmaW5lZAEFDWR1Y2tBY3RpdmF0b3IJAAIBCQCsAgIJAKwCAgkArAICAglUaGUgZHVjayAFC2R1Y2tBc3NldElkAjQgYWxyZWFkeSBnb3QgcG9pbnRzIGZyb20gT05CT0FSRCBhcnRpZmFjdCBmcm9tIHVzZXIgCQEFdmFsdWUBBQ1kdWNrQWN0aXZhdG9yCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGYXJ0S2V5BQtkdWNrQXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBRBkdWNrQWN0aXZhdG9yS2V5BQRhZGRyBQNuaWwICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUJeHBPbmJvYXJkAl8xARJhY3RpdmF0ZVByZXNhbGVBcnQCBGFkZHINbGFuZEFzc2V0SWRJbgQBYwkBFGNoZWNrQ2xhaW1Db25kaXRpb25zAwUEYWRkcgUTY2xhaW1Nb2RlV2hUaGVuRHVjawUNbGFuZEFzc2V0SWRJbgQLbGFuZEFzc2V0SWQIBQFjAl8yBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQNYWN0aXZhdGlvbktleQkBIGtleUxhbmRBcnRTdGF0dXNCeVR5cGVBbmRBc3NldElkAgUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQDCQBmAgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ1hY3RpdmF0aW9uS2V5AAAAAAkAAgECJVByZXNhbGUgYXJ0aWZhY3QgaXMgYWxyZWFkeSBhY3RpdmF0ZWQDCQBmAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQFjAl8zBQpyZWNMYW5kTnVtBQ9QUkVTQUxFTlVNTEFORFMJAAIBCQCsAgIJAKwCAgkArAICBQpMQU5EUFJFRklYAgEgBQtsYW5kQXNzZXRJZAIlIGlzIG5vdCBlbGlnaWJsZSBmb3IgcHJlc2FsZSBhcnRpZmFjdAQLY2xhaW1SZXN1bHQJAQhjbGFpbUFsbAQFBGFkZHIFC2xhbmRBc3NldElkBQZwaWVjZXMFE2NsYWltTW9kZVdoVGhlbkR1Y2sJAM0IAgkAzQgCCQDNCAIJAM0IAggFC2NsYWltUmVzdWx0Al8xCQEMSW50ZWdlckVudHJ5AgUNYWN0aXZhdGlvbktleQUGcGllY2VzCQEMSW50ZWdlckVudHJ5AgkBJWtleUxhbmRBcnRTdGF0dXNCeVR5cGVBc3NldElkQW5kT3duZXIDBQpBUlRQUkVTQUxFBQtsYW5kQXNzZXRJZAUEYWRkcgUGcGllY2VzCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzQJALkJAggFC2NsYWltUmVzdWx0Al81AgE6AQ1tZXJnZUludGVybmFsBwtuZXdMYW5kU2l6ZQhuZXdMZXZlbAdmb3JtdWxhBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQHbmVlZE1hdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCgEKY2hlY2tNZXJnZQIDYWNjC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkBAlzYXZlZFRpbWUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnwgBBQd0aW1lS2V5CQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQBZAkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8ECWNvbnRpbmVudAkAkQMCBQFkBQxyZWNDb250aW5lbnQDAwkBAiE9AggFA2FjYwJfMwIACQECIT0CCAUDYWNjAl8zBQljb250aW5lbnQHCQACAQIuTGFuZHMgc2hvdWxkIGJlIG9uIHRoZSBzYW1lIGNvbnRpbmVudCB0byBtZXJnZQQIbGFuZFNpemUJAJEDAgUBZAULcmVjTGFuZFNpemUEB3NpemVzSW4IBQNhY2MCXzEEAWkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAswkCBQdzaXplc0luBQhsYW5kU2l6ZQInWW91IGhhdmVuJ3QgcGFzc2VkIGFsbCB0aGUgbGFuZHMgbmVlZGVkBAhzaXplc091dAkArAICCQCvAgIFB3NpemVzSW4FAWkJALACAgUHc2l6ZXNJbgkAZAIFAWkAAQQGcGllY2VzCQEPbnVtUGllY2VzQnlTaXplAQUIbGFuZFNpemUEBGFydHMJAGQCCAUDYWNjAl8yCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECmluZnJhTGV2ZWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAAABAhyZXFMZXZlbAQHJG1hdGNoMAUIbGFuZFNpemUDCQAAAgIBUwUHJG1hdGNoMAADAwkAAAICAU0FByRtYXRjaDAABAMJAAACAgFMBQckbWF0Y2gwAAUDCQAAAgICWEwFByRtYXRjaDAABgkAAgECGk9ubHkgUywgTSwgTCwgWEwgY2FuIG1lcmdlAwkBAiE9AgUKaW5mcmFMZXZlbAUIcmVxTGV2ZWwJAAIBAiJBbGwgbGFuZHMgc2hvdWxkIGJlIG1heGVkIHRvIG1lcmdlBAdsYW5kTnVtCQCRAwIFAWQFCnJlY0xhbmROdW0EDXRlcnJhaW5Db3VudHMJAQ1jb3VudFRlcnJhaW5zAQkAkQMCBQFkBQtyZWNUZXJyYWlucwQJZGVsdGFUaW1lCQBlAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFCXNhdmVkVGltZQMJAGYCAAAFCWRlbHRhVGltZQkAAgEJAKwCAgkArAICCQCsAgICJlNhdmVkIHRpbWVzdGFtcCBpcyBpbiBmdXR1cmUsIHNhdmVkID0gCQCkAwEFCXNhdmVkVGltZQIMLCBjdXJyZW50ID0gCQCkAwEIBQlsYXN0QmxvY2sJdGltZXN0YW1wBBZkYWlseVByb2R1Y3Rpb25CeVBpZWNlCQEMYXBwbHlCb251c2VzAgULbGFuZEFzc2V0SWQFBnBpZWNlcwQJbGFuZEluZGV4CQBpAgUGcGllY2VzBQVTU0laRQQFYnBSZXMJAQZhZGRSZXMFCQC1CQIIBQNhY2MCXzQCAV8FDXRlcnJhaW5Db3VudHMFCWRlbHRhVGltZQUJbGFuZEluZGV4BRZkYWlseVByb2R1Y3Rpb25CeVBpZWNlBAVwcm9wcwkBGXVwZGF0ZVByb3BvcnRpb25zSW50ZXJuYWwECQC1CQIIBQNhY2MCXzYCAV8FDXRlcnJhaW5Db3VudHMFCWxhbmRJbmRleAD///////////8BBAVsYW5kcwgFA2FjYwJfNwQDaWR4CQDPCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEFA2lkeAkAAgEJAKwCAgIgWW91ciBzdGFrZWQgbGFuZHMgZG9uJ3QgY29udGFpbiAFC2xhbmRBc3NldElkBAljdXN0b21LZXkJARprZXlMYW5kQXNzZXRJZFRvQ3VzdG9tTmFtZQEFC2xhbmRBc3NldElkBApjdXN0b21OYW1lCQELdmFsdWVPckVsc2UCCQCiCAEFCWN1c3RvbUtleQIACQCaCggFCHNpemVzT3V0BQRhcnRzBQljb250aW5lbnQFBWJwUmVzCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQNhY2MCXzUJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEJASJrZXlTdGFrZWRUaW1lQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKTEFORFBSRUZJWAULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJARBrZXlMYW5kVG9Bc3NldElkAQUHbGFuZE51bQkBC0RlbGV0ZUVudHJ5AQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgULbGFuZEFzc2V0SWQFBGFkZHIJAQtEZWxldGVFbnRyeQEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkCQELRGVsZXRlRW50cnkBCQEla2V5TGFuZEFydFN0YXR1c0J5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkBQRhZGRyCQELRGVsZXRlRW50cnkBCQERa2V5TGFuZE51bVRvT3duZXIBBQdsYW5kTnVtCQELRGVsZXRlRW50cnkBCQESa2V5V2FyZWhvdXNlQnlMYW5kAQULbGFuZEFzc2V0SWQJAQtEZWxldGVFbnRyeQEFCWN1c3RvbUtleQkBC0RlbGV0ZUVudHJ5AQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQkBBEJ1cm4CCQDZBAEFC2xhbmRBc3NldElkAAEFBXByb3BzCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgJAGQCCAUDYWNjAl84BQZwaWVjZXMEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAdwcm9wU3RyCQELdmFsdWVPckVsc2UCCQCiCAEJARFrZXlSZXNQcm9wb3J0aW9ucwACCzBfMF8wXzBfMF8wBAhsYW5kc0tleQkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFBGFkZHIECGxhbmRzU3RyCQCiCAEFCGxhbmRzS2V5BAdsYW5kc0luAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwEAXIKAAIkbAUMbGFuZEFzc2V0SWRzCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAmgoIBQdmb3JtdWxhAAACAAkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMFA25pbAUHcHJvcFN0cgUHbGFuZHNJbgAACgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQpjaGVja01lcmdlAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQQJY29udGluZW50CAUBcgJfMwQMY29udGluZW50SWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAM8IAgUKY29udGluZW50cwUJY29udGluZW50CQCsAgICE1Vua25vd24gY29udGluZW50OiAFCWNvbnRpbmVudAQIdGVycmFpbnMJAQtnZW5UZXJyYWlucwIJAQNhYnMBCQCeAwEFBHR4SWQFDGNvbnRpbmVudElkeAQHZnJlZU51bQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFD1BSRVNBTEVOVU1MQU5EUwABBApuZXdMYW5kTnVtCQCkAwEFB2ZyZWVOdW0EBWlzc3VlCQDCCAUJAQduZnROYW1lAgUKbmV3TGFuZE51bQULbmV3TGFuZFNpemUJALkJAgkAzAgCBQpuZXdMYW5kTnVtCQDMCAIFC25ld0xhbmRTaXplCQDMCAIFCHRlcnJhaW5zCQDMCAIFCWNvbnRpbmVudAUDbmlsAgFfAAEAAAcEB2Fzc2V0SWQJALgIAQUFaXNzdWUEDm5ld0xhbmRBc3NldElkCQDYBAEFB2Fzc2V0SWQEBm5ld01hdAkAuQkCCQERc3VidHJhY3RNYXRlcmlhbHMDCQBmAgUHbmVlZE1hdAAACQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBQduZWVkTWF0AgFfBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAACQCUCgIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIJAM0IAgkAzQgCCQDNCAIIBQFyAl81AwkAZgIJAJADAQgFAXICXzcAAAkBC1N0cmluZ0VudHJ5AgUIbGFuZHNLZXkJALsJAggFAXICXzcCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5AwkAZgIIBQFyAl84BQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwgFAXICXzgJAQxJbnRlZ2VyRW50cnkCCQESa2V5TmV4dEZyZWVMYW5kTnVtAAkAZAIFB2ZyZWVOdW0AAQUFaXNzdWUJAQtTdHJpbmdFbnRyeQIJARBrZXlMYW5kVG9Bc3NldElkAQUKbmV3TGFuZE51bQUObmV3TGFuZEFzc2V0SWQJAQtTdHJpbmdFbnRyeQIJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQ5uZXdMYW5kQXNzZXRJZAUEYWRkcgkBC1N0cmluZ0VudHJ5AgkBEWtleUxhbmROdW1Ub093bmVyAQUKbmV3TGFuZE51bQUEYWRkcgkBDEludGVnZXJFbnRyeQIJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFDm5ld0xhbmRBc3NldElkCAUBcgJfMgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQUObmV3TGFuZEFzc2V0SWQFBGFkZHIIBQFyAl8yCQEMSW50ZWdlckVudHJ5AgkBFmtleUluZnJhTGV2ZWxCeUFzc2V0SWQBBQ5uZXdMYW5kQXNzZXRJZAUIbmV3TGV2ZWwJAQxJbnRlZ2VyRW50cnkCCQEea2V5SW5mcmFMZXZlbEJ5QXNzZXRJZEFuZE93bmVyAgUObmV3TGFuZEFzc2V0SWQFBGFkZHIFCG5ld0xldmVsCQELU3RyaW5nRW50cnkCBQVicEtleQkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAggFAXICXzQJAMwIAgUGbmV3TWF0CQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6CQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMACAUBcgJfNgkBC1N0cmluZ0VudHJ5AgkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkCQC5CQIJAMwIAgUJY29udGluZW50CQDMCAICAUwJAMwIAgUObmV3TGFuZEFzc2V0SWQFA25pbAIBXwkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUEYWRkcgABBQdhc3NldElkBQ5uZXdMYW5kQXNzZXRJZAEDczJtAwRhZGRyDGxhbmRBc3NldElkcwR0eElkCQENbWVyZ2VJbnRlcm5hbAcCAU0AAwIEU1NTUwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAAABA20ybAUEYWRkcgxsYW5kQXNzZXRJZHMEdHhJZAxzaG91bGRVc2VNYXQNcGF5bWVudEFtb3VudAQEY29zdAkAaAIFFUluZnJhVXBncmFkZUNvc3RTVXNkdAAEAwMJAQEhAQUMc2hvdWxkVXNlTWF0CQECIT0CBQ1wYXltZW50QW1vdW50BQRjb3N0BwkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFBGNvc3QJAQ1tZXJnZUludGVybmFsBwIBTAAEAgNTTU0FBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTAAQBBGwyeGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQALwMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCAlhMAAUCBVNTU01MBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQJAGgCBRFJbmZyYVVwZ3JhZGVDb3N0UwAvAQZ4bDJ4eGwFBGFkZHIMbGFuZEFzc2V0SWRzBHR4SWQMc2hvdWxkVXNlTWF0DXBheW1lbnRBbW91bnQEBGNvc3QJAGgCBRVJbmZyYVVwZ3JhZGVDb3N0U1VzZHQANgMDCQEBIQEFDHNob3VsZFVzZU1hdAkBAiE9AgUNcGF5bWVudEFtb3VudAUEY29zdAcJAAIBCQCsAgICG1BheW1lbnQgYXR0YWNoZWQgc2hvdWxkIGJlIAkApAMBBQRjb3N0CQENbWVyZ2VJbnRlcm5hbAcCA1hYTAAGAgNMWEwFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAkAaAIFEUluZnJhVXBncmFkZUNvc3RTADYBC21lcmdlQ29tbW9uBQxzaG91bGRVc2VNYXQEYWRkcg1wYXltZW50QW1vdW50DGxhbmRBc3NldElkcwR0eElkBAttZXJnZVJlc3VsdAQHJG1hdGNoMAkAkAMBBQxsYW5kQXNzZXRJZHMDCQAAAgAEBQckbWF0Y2gwCQEDczJtAwUEYWRkcgUMbGFuZEFzc2V0SWRzBQR0eElkAwkAAAIAAwUHJG1hdGNoMAkBA20ybAUFBGFkZHIFDGxhbmRBc3NldElkcwUEdHhJZAUMc2hvdWxkVXNlTWF0BQ1wYXltZW50QW1vdW50AwkAAAIABQUHJG1hdGNoMAkBBGwyeGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAMJAAACAAIFByRtYXRjaDAJAQZ4bDJ4eGwFBQRhZGRyBQxsYW5kQXNzZXRJZHMFBHR4SWQFDHNob3VsZFVzZU1hdAUNcGF5bWVudEFtb3VudAkAAgECDVVua25vd24gbWVyZ2UFC21lcmdlUmVzdWx0AQZwcm9sb2cBAWkDAwkBAiE9AggFAWkMb3JpZ2luQ2FsbGVyBQxyZXN0Q29udHJhY3QJAQt2YWx1ZU9yRWxzZQIJAKAIAQkBCmtleUJsb2NrZWQABwcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlCQELU3RyaW5nRW50cnkCCQERa2V5TGFzdFR4SWRCeVVzZXIBCQClCAEIBQFpDG9yaWdpbkNhbGxlcgkA2AQBCAUBaQ10cmFuc2FjdGlvbklkIwFpAQ1jb25zdHJ1Y3RvclYxAQhyZXN0QWRkcgMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECEVBlcm1pc3Npb24gZGVuaWVkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlSZXN0QWRkcmVzcwAFCHJlc3RBZGRyBQNuaWwBaQEKc2V0QmxvY2tlZAEJaXNCbG9ja2VkAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRcGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQprZXlCbG9ja2VkAAUJaXNCbG9ja2VkBQNuaWwBaQEJc3Rha2VMYW5kAAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEB2FkZHJlc3MJAKUIAQgFAWkGY2FsbGVyAwkBAiE9AggFA3BtdAZhbW91bnQAAQkAAgEJAKwCAgkArAICAgRORlQgBQpMQU5EUFJFRklYAiQgdG9rZW4gc2hvdWxkIGJlIGF0dGFjaGVkIGFzIHBheW1lbnQEBWFzc2V0CQEFdmFsdWUBCQDsBwEFB2Fzc2V0SWQDCQECIT0CCAUFYXNzZXQGaXNzdWVyBQR0aGlzCQACAQIXVW5rbm93biBpc3N1ZXIgb2YgdG9rZW4DCQEBIQEJAQhjb250YWlucwIIBQVhc3NldARuYW1lBQpMQU5EUFJFRklYCQACAQkArAICCQCsAgICCU9ubHkgTkZUIAUKTEFORFBSRUZJWAIUIHRva2VucyBhcmUgYWNjZXB0ZWQEC2xhbmROdW1TaXplCQCwAgIIBQVhc3NldARuYW1lAAQEB2xhbmROdW0DCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQIDWFhMCQCzAgIFC2xhbmROdW1TaXplAAMDCQEIY29udGFpbnMCBQtsYW5kTnVtU2l6ZQICWEwJALMCAgULbGFuZE51bVNpemUAAgkAswICBQtsYW5kTnVtU2l6ZQABAwkBASEBCQEJaXNEZWZpbmVkAQkAtgkBBQdsYW5kTnVtCQACAQkArAICAh5DYW5ub3QgcGFyc2UgbGFuZCBudW1iZXIgZnJvbSAIBQVhc3NldARuYW1lBAtsYW5kQXNzZXRJZAkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQISIGlzIGFscmVhZHkgc3Rha2VkBAFkCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwQNdGVycmFpbkNvdW50cwkBDWNvdW50VGVycmFpbnMBCQCRAwIFAWQFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIFAWQFC3JlY0xhbmRTaXplBAVwcm9wcwkBEXVwZGF0ZVByb3BvcnRpb25zAwUNdGVycmFpbkNvdW50cwkAaQIFBnBpZWNlcwUFU1NJWkUAAQQJYXJ0UGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEJASBrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQW5kQXNzZXRJZAIFCkFSVFBSRVNBTEUFC2xhbmRBc3NldElkAAAECGxhbmRzS2V5CQEVa2V5U3Rha2VkTGFuZHNCeU93bmVyAQUHYWRkcmVzcwQIbGFuZHNTdHIJAKIIAQUIbGFuZHNLZXkEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUFbGFuZHMFC2xhbmRBc3NldElkCQACAQkArAICAiJZb3VyIHN0YWtlZCBsYW5kcyBhbHJlYWR5IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAECXBpZWNlc0tleQkBFmtleVN0YWtlZFBpZWNlc0J5T3duZXIBBQdhZGRyZXNzBAlvbGRQaWVjZXMJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUJcGllY2VzS2V5AAAECXdsZ1Jlc3VsdAkBBWFzSW50AQkA/AcEBQt3bGdDb250cmFjdAISb25TdGFrZVVuc3Rha2VMYW5kCQDMCAIFB2FkZHJlc3MFA25pbAUDbmlsCQCUCgIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkxBTkRQUkVGSVgFC2xhbmRBc3NldElkBQdhZGRyZXNzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDNCAIFBWxhbmRzBQtsYW5kQXNzZXRJZAIBXwkAzAgCCQEMSW50ZWdlckVudHJ5AgUJcGllY2VzS2V5CQBkAgUJb2xkUGllY2VzBQZwaWVjZXMJAMwIAgkBC1N0cmluZ0VudHJ5AgkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlMYW5kTnVtVG9Pd25lcgEFB2xhbmROdW0FB2FkZHJlc3MJAMwIAgkBDEludGVnZXJFbnRyeQIJASVrZXlMYW5kQXJ0U3RhdHVzQnlUeXBlQXNzZXRJZEFuZE93bmVyAwUKQVJUUFJFU0FMRQULbGFuZEFzc2V0SWQFB2FkZHJlc3MFCWFydFBpZWNlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBHmtleUluZnJhTGV2ZWxCeUFzc2V0SWRBbmRPd25lcgIFC2xhbmRBc3NldElkBQdhZGRyZXNzBQppbmZyYUxldmVsCQDMCAIJAQtTdHJpbmdFbnRyeQIJARFrZXlSZXNQcm9wb3J0aW9ucwAFBXByb3BzCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsBQl3bGdSZXN1bHQBaQELdW5zdGFrZUxhbmQBDWxhbmRBc3NldElkSW4EDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEAWMJARRjaGVja0NsYWltQ29uZGl0aW9ucwMFBGFkZHIFDWNsYWltTW9kZUR1Y2sFDWxhbmRBc3NldElkSW4EC2xhbmRBc3NldElkCAUBYwJfMgQIbGFuZHNLZXkJARVrZXlTdGFrZWRMYW5kc0J5T3duZXIBBQRhZGRyBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEJAJEDAggFAWMCXzMFC3JlY1RlcnJhaW5zBAZwaWVjZXMJAQ9udW1QaWVjZXNCeVNpemUBCQCRAwIIBQFjAl8zBQtyZWNMYW5kU2l6ZQQFcHJvcHMJARF1cGRhdGVQcm9wb3J0aW9ucwMFDXRlcnJhaW5Db3VudHMJAGkCBQZwaWVjZXMFBVNTSVpFAP///////////wEEC2NsYWltUmVzdWx0CQEIY2xhaW1BbGwEBQRhZGRyBQtsYW5kQXNzZXRJZAUGcGllY2VzBQ1jbGFpbU1vZGVEdWNrBAVsYW5kcwkAvQkCCQELdmFsdWVPckVsc2UCCQCiCAEFCGxhbmRzS2V5AgACAV8EA2lkeAkAzwgCBQVsYW5kcwULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBBQNpZHgJAAIBCQCsAgICIFlvdXIgc3Rha2VkIGxhbmRzIGRvbid0IGNvbnRhaW4gBQtsYW5kQXNzZXRJZAQDbm93CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQOZ292UmVsZWFzZVRpbWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgULZ292Q29udHJhY3QJARVrZXlVc2VyR3dsUmVsZWFzZVRpbWUBBQRhZGRyAAADCQBnAgUOZ292UmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI5WW91ciBnV0wgYXJlIHRha2luZyBwYXJ0IGluIHZvdGluZywgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmdvdlJlbGVhc2VUaW1lBA5hcmJSZWxlYXNlVGltZQkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgULd2xnQ29udHJhY3QJARRrZXlMYXN0QXJiVGltZUJ5VXNlcgEFBGFkZHIAAAUOYXJiaXRyYWdlRGVsYXkDCQBmAgUOYXJiUmVsZWFzZVRpbWUFA25vdwkAAgEJAKwCAgI/WW91ciBzdGFrZWQgbGFuZHMgdG9vayBwYXJ0IGluIGFyYml0cmFnZSwgY2Fubm90IHVuc3Rha2UgdW50aWwgCQCkAwEFDmFyYlJlbGVhc2VUaW1lBAlwaWVjZXNLZXkJARZrZXlTdGFrZWRQaWVjZXNCeU93bmVyAQUEYWRkcgQMc3Rha2VkUGllY2VzCQELdmFsdWVPckVsc2UCCQCfCAEFCXBpZWNlc0tleQAABAluZXdQaWVjZXMDCQBmAgUGcGllY2VzBQxzdGFrZWRQaWVjZXMAAAkAZQIFDHN0YWtlZFBpZWNlcwUGcGllY2VzBAl3bGdSZXN1bHQJAQVhc0ludAEJAPwHBAULd2xnQ29udHJhY3QCEm9uU3Rha2VVbnN0YWtlTGFuZAkAzAgCBQRhZGRyBQNuaWwFA25pbAkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABCQDZBAEFC2xhbmRBc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEJARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQULbGFuZEFzc2V0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBImtleVN0YWtlZFRpbWVCeVR5cGVBc3NldElkQW5kT3duZXIDBQpMQU5EUFJFRklYBQtsYW5kQXNzZXRJZAUEYWRkcgkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5UmVzUHJvcG9ydGlvbnMABQVwcm9wcwkAzAgCCQELU3RyaW5nRW50cnkCCAULY2xhaW1SZXN1bHQCXzIJALkJAggFC2NsYWltUmVzdWx0Al8zAgE6CQDMCAIDCQBmAgkAkAMBBQVsYW5kcwABCQELU3RyaW5nRW50cnkCBQhsYW5kc0tleQkAuwkCCQDRCAIFBWxhbmRzCQEFdmFsdWUBBQNpZHgCAV8JAQtEZWxldGVFbnRyeQEFCGxhbmRzS2V5CQDMCAIJAQxJbnRlZ2VyRW50cnkCBQlwaWVjZXNLZXkFCW5ld1BpZWNlcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAUJd2xnUmVzdWx0AWkBCXN0YWtlRHVjawAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQHYXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgMJAQIhPQIIBQNwbXQGYW1vdW50AAEJAAIBCQCsAgIJAKwCAgIETkZUIAUKRFVDS1BSRUZJWAIkIHRva2VuIHNob3VsZCBiZSBhdHRhY2hlZCBhcyBwYXltZW50BAVhc3NldAkBBXZhbHVlAQkA7AcBBQdhc3NldElkAwMJAQIhPQIIBQVhc3NldAZpc3N1ZXIFDWluY3ViYXRvckFkZHIJAQIhPQIIBQVhc3NldAZpc3N1ZXIFC2JyZWVkZXJBZGRyBwkAAgEJAKwCAgkArAICAhJVbmtub3duIGlzc3VlciBvZiAFCkRVQ0tQUkVGSVgCBiB0b2tlbgMJAQEhAQkBCGNvbnRhaW5zAggFBWFzc2V0BG5hbWUFCkRVQ0tQUkVGSVgJAAIBCQCsAgIJAKwCAgIJT25seSBORlQgBQpEVUNLUFJFRklYAhQgdG9rZW5zIGFyZSBhY2NlcHRlZAQKYXNzZXRJZFN0cgkA2AQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFCmFzc2V0SWRTdHIDCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAhIgaXMgYWxyZWFkeSBzdGFrZWQDCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICAh1Zb3UgYWxyZWFkeSBzdGFrZWQgb25lIGR1Y2s6IAgFBWFzc2V0BG5hbWUEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFCmFzc2V0SWRTdHIECGxvY2F0aW9uCQCiCAEFBmxvY0tleQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFCmFzc2V0SWRTdHIECGJhY2twYWNrCQCiCAEFBWJwS2V5BAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQUKYXNzZXRJZFN0cgQFbWF4SFAJAQltYXhIZWFsdGgBCQELdmFsdWVPckVsc2UCCQCfCAEJAQxrZXlEdWNrTGV2ZWwBBQphc3NldElkU3RyAAAECWN1ckhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFB3RpbWVLZXkIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgJANgEAQUHYXNzZXRJZAUHYWRkcmVzcwgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEGtleUR1Y2tJZFRvT3duZXIBBQphc3NldElkU3RyBQdhZGRyZXNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFB2FkZHJlc3MFCmFzc2V0SWRTdHIFA25pbAMJAQlpc0RlZmluZWQBBQhsb2NhdGlvbgUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgUGbG9jS2V5BQ9ERUZBVUxUTE9DQVRJT04FA25pbAMJAQlpc0RlZmluZWQBBQhiYWNrcGFjawUDbmlsCQDNCAIJAM0IAgkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoFA25pbAkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJY3VySGVhbHRoBQxwcm9sb2dBY3Rpb24BaQELdW5zdGFrZUR1Y2sBCmFzc2V0SWRTdHIEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQHYXNzZXRJZAkA2QQBBQphc3NldElkU3RyBAdhZGRyZXNzCQClCAEIBQFpBmNhbGxlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBCQDYBAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkAwkBASEBCQEJaXNEZWZpbmVkAQkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQdhZGRyZXNzCQACAQkArAICCQCsAgICCVRoZSBkdWNrIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQkA2AQBBQdhc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQdhZGRyZXNzCQACAQIXU3Rha2VkIE5GVCBpcyBub3QgeW91cnMECWtleUhlYWx0aAkBDWtleUR1Y2tIZWFsdGgBBQphc3NldElkU3RyBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFCmFzc2V0SWRTdHIAAAQGaGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBmAgUFbWF4SFAFBmhlYWx0aAkAAgEJAKwCAgkArAICAhlQbGVhc2UgaGVhbCB5b3VyIGR1Y2sgdG8gCQCkAwEFBW1heEhQAhNocCBiZWZvcmUgdW5zdGFraW5nCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgABBQdhc3NldElkCQDMCAIJAQtEZWxldGVFbnRyeQEFB3RpbWVLZXkJAMwIAgkBC0RlbGV0ZUVudHJ5AQUJa2V5SGVhbHRoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ9rZXlEdWNrTG9jYXRpb24BBQphc3NldElkU3RyCQDMCAIJAQtEZWxldGVFbnRyeQEJARBrZXlEdWNrSWRUb093bmVyAQUKYXNzZXRJZFN0cgkAzAgCCQELRGVsZXRlRW50cnkBCQEia2V5U3Rha2VkVGltZUJ5VHlwZUFzc2V0SWRBbmRPd25lcgMFCkRVQ0tQUkVGSVgFCmFzc2V0SWRTdHIFB2FkZHJlc3MJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUHYWRkcmVzcwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQhjbGFpbVJlcwIGYW1vdW50DmxhbmRBc3NldElkU3RyBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAZyZXN1bHQJARBjbGFpbVJlc0ludGVybmFsBAUEYWRkcgUGYW1vdW50BQ1jbGFpbU1vZGVEdWNrBQ5sYW5kQXNzZXRJZFN0cgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFC2R1Y2tBc3NldElkCQBrAwUHeHBDbGFpbQUGYW1vdW50BQVNVUxUOAJfMQkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfMgkAuQkCCAUGcmVzdWx0Al8zAgE6CQELU3RyaW5nRW50cnkCCAUGcmVzdWx0Al80CQC5CQIIBQZyZXN1bHQCXzUCAToFDHByb2xvZ0FjdGlvbgkAkQMCCAUGcmVzdWx0Al8zBQhicElkeFJlcwFpAQxjbGFpbVJlc1RvV0gCBmFtb3VudA5sYW5kQXNzZXRJZFN0cgQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQGcmVzdWx0CQEQY2xhaW1SZXNJbnRlcm5hbAQFBGFkZHIFBmFtb3VudAULY2xhaW1Nb2RlV2gFDmxhbmRBc3NldElkU3RyCQCUCgIJAM0IAgkAzQgCCQDNCAIJAM4IAggFBnJlc3VsdAJfMQgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgkAawMFB3hwQ2xhaW0FBmFtb3VudAUFTVVMVDgCXzEJAQtTdHJpbmdFbnRyeQIIBQZyZXN1bHQCXzIJALkJAggFBnJlc3VsdAJfMwIBOgkBC1N0cmluZ0VudHJ5AggFBnJlc3VsdAJfNAkAuQkCCAUGcmVzdWx0Al81AgE6BQxwcm9sb2dBY3Rpb24JAJEDAggFBnJlc3VsdAJfNQUId2hJZHhSZXMBaQEGZmxpZ2h0AgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAh1c2VyQWRkcgkApQgBCAUBaQZjYWxsZXIEAWYJAQxmbGlnaHRDb21tb24DBQh1c2VyQWRkcgUHbWVzc2FnZQUDc2lnBAtkdWNrQXNzZXRJZAgFAWYCXzIEBmxvY0tleQkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBBQZsb2NLZXkFD0RFRkFVTFRMT0NBVElPTgMJAAACCAUBZgJfNAULY3VyTG9jYXRpb24JAAIBAiJZb3UgY2FuJ3QgZmx5IHRvIHRoZSBzYW1lIGxvY2F0aW9uBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQHbmV3UHJvZAkBEHN1YnRyYWN0UHJvZHVjdHMCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QIBQFmAl81CQCUCgIJAM4IAgkAzAgCCQELU3RyaW5nRW50cnkCBQZsb2NLZXkDCQBmAggFAWYCXzEAAAgFAWYCXzQFC2N1ckxvY2F0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWJwS2V5CQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCBQduZXdQcm9kBQNuaWwCAToJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQIBQFmAl8xCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQDCQBmAggFAWYCXzEAAAUPeHBTdWNjZXNzRmxpZ2h0BQx4cEZhaWxGbGlnaHQCXzEIBQFmAl8zAWkBBGhlYWwDCnF1YW50aXR5TDEKcXVhbnRpdHlMMgpxdWFudGl0eUwzBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwMDCQBmAgAABQpxdWFudGl0eUwxBgkAZgIAAAUKcXVhbnRpdHlMMgYJAGYCAAAFCnF1YW50aXR5TDMJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEA3F0cwkAzAgCBQpxdWFudGl0eUwxCQDMCAIFCnF1YW50aXR5TDIJAMwIAgUKcXVhbnRpdHlMMwUDbmlsBAlrZXlIZWFsdGgJAQ1rZXlEdWNrSGVhbHRoAQULZHVja0Fzc2V0SWQEBW1heEhQCQEJbWF4SGVhbHRoAQkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEMa2V5RHVja0xldmVsAQULZHVja0Fzc2V0SWQAAAQJb2xkSGVhbHRoCQELdmFsdWVPckVsc2UCCQCfCAEFCWtleUhlYWx0aAUFbWF4SFADCQBnAgUJb2xkSGVhbHRoBQVtYXhIUAkAAgEJAKwCAgkArAICAg9IUCBzaG91bGQgYmUgPCAJAKQDAQUFbWF4SFACCCB0byBoZWFsBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQIcHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8KAQtpdGVyYXRlUHJvZAIDYWNjC2lnbm9yZWRJdGVtBAFuCAUDYWNjAl8yBAF4AwkAZgIJAJADAQUIcHJvZExpc3QFAW4JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBbgAAAwkAZgIAAwUBbgQBcQkAkQMCBQNxdHMFAW4DCQBmAgUBcQUBeAkAAgEJAKwCAgkArAICCQCsAgICDllvdSBoYXZlIG9ubHkgCQCkAwEFAXgCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFuCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBCQBlAgUBeAUBcQkAZAIFAW4AAQkAZAIIBQNhY2MCXzMJAGgCCQCRAwIFCG1lZEtpdEhwBQFuBQFxCQCVCgMJAM0IAggFA2FjYwJfMQkApAMBBQF4CQBkAgUBbgABCAUDYWNjAl8zBAZyZXN1bHQKAAIkbAUQcHJvZHVjdGlvbk1hdHJpeAoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsAAAAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQELaXRlcmF0ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQJbmV3SGVhbHRoCQCXAwEJAMwIAgUFbWF4SFAJAMwIAgkAZAIFCW9sZEhlYWx0aAgFBnJlc3VsdAJfMwUDbmlsCQCUCgIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa2V5SGVhbHRoBQluZXdIZWFsdGgJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALkJAggFBnJlc3VsdAJfMQIBXwUDbmlsAgE6CQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGgCBQZ4cEhlYWwJAGQCCQBkAgUKcXVhbnRpdHlMMQUKcXVhbnRpdHlMMgUKcXVhbnRpdHlMMwJfMQUJbmV3SGVhbHRoAWkBBmhlYWxFUwAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQJa2V5SGVhbHRoCQENa2V5RHVja0hlYWx0aAEFC2R1Y2tBc3NldElkBAVtYXhIUAkBCW1heEhlYWx0aAEJAQt2YWx1ZU9yRWxzZQIJAJ8IAQkBDGtleUR1Y2tMZXZlbAEFC2R1Y2tBc3NldElkAAAECW9sZEhlYWx0aAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQlrZXlIZWFsdGgFBW1heEhQAwkAZgIFCW9sZEhlYWx0aAAACQACAQIoSFAgc2hvdWxkIGJlIDAgdG8gY2FsbCBFbWVyZ2VuY3kgU2VydmljZQQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkECHByb2RMaXN0AwkAAAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgFfBA1tZWRLaXRBbW91bnQxAwkAZgIJAJADAQUIcHJvZExpc3QAAAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCHByb2RMaXN0AAAAAAQNbWVkS2l0QW1vdW50MgMJAGYCCQCQAwEFCHByb2RMaXN0AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAABAAAEDW1lZEtpdEFtb3VudDMDCQBmAgkAkAMBBQhwcm9kTGlzdAACCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUIcHJvZExpc3QAAgAAAwMDCQBmAgUNbWVkS2l0QW1vdW50MQAABgkAZgIFDW1lZEtpdEFtb3VudDIAAAYJAGYCBQ1tZWRLaXRBbW91bnQzAAAJAAIBAh9Zb3UgaGF2ZSB0byB1c2Ugb3duIE1lZGljYWwgS2l0BAhleGlzdFN0cgkAnQgCBQ9lY29ub215Q29udHJhY3QJAQ5rZXlFc1dhcmVob3VzZQAEDGV4aXN0QW1vdW50cwMJAQlpc0RlZmluZWQBBQhleGlzdFN0cgkAtQkCCQEFdmFsdWUBBQhleGlzdFN0cgIBXwUDbmlsBAtleGlzdEFtb3VudAMJAGYCCQCQAwEFDGV4aXN0QW1vdW50cwAACQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzAAAAAAMJAGcCAAAFC2V4aXN0QW1vdW50CQACAQI5VGhlcmUgYXJlIG5vIE1lZGljYWwgS2l0cyBMMSBhdCBFbWVyZ2VuY3kgU2VydmljZSBzdG9yYWdlBAluZXdIZWFsdGgJAGQCBQlvbGRIZWFsdGgJAJEDAgUIbWVkS2l0SHAAAAQFbmV3RVMJALkJAgkAzAgCCQCkAwEJAGUCBQtleGlzdEFtb3VudAABCQDRCAIFDGV4aXN0QW1vdW50cwAAAgFfBAZyZWNpcGUJALUJAgkAkQMCBRBwcm9kdWN0aW9uTWF0cml4AAACAV8ECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAlzZWxsUHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCkVTU0VMTENPRUYFEFJFU09VUkNFUFJJQ0VNSU4JAGgCAAoFDlBST0RVQ1RQS0dTSVpFAwkBAiE9AggFA3BtdAZhbW91bnQFCXNlbGxQcmljZQkAAgEJAKwCAgIbUGF5bWVudCBhdHRhY2hlZCBzaG91bGQgYmUgCQCkAwEFCXNlbGxQcmljZQQGcmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD2Vjb25vbXlDb250cmFjdAIPdXBkYXRlRXNTdG9yYWdlCQDMCAIFBW5ld0VTBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFC3VzZHRBc3NldElkBQlzZWxsUHJpY2UFA25pbAkAlAoCCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtleUhlYWx0aAUJbmV3SGVhbHRoCQDMCAIFDHByb2xvZ0FjdGlvbgUDbmlsCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQFCHhwQ2FsbEVTAl8xBQZyZXN1bHQBaQEOdXBkYXRlQmFja3BhY2sCC2R1Y2tBc3NldElkB25ld1BhY2sDCQECIT0CCAUBaQZjYWxsZXIFD2Vjb25vbXlDb250cmFjdAkAAgECEXBlcm1pc3Npb24gZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQFB25ld1BhY2sFA25pbAUHbmV3UGFjawFpAQhidXlTTGFuZAAEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhxFeGFjdGx5IG9uZSBwYXltZW50IHJlcXVpcmVkBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAMJAQIhPQIIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhpBbGxvd2VkIFVTRFQgcGF5bWVudCBvbmx5IQMJAQIhPQIIBQNwbXQGYW1vdW50BQdFWFBVU0RUCQACAQkArAICAhtQYXltZW50IGF0dGFjaGVkIHNob3VsZCBiZSAJAKQDAQUHRVhQVVNEVAQGcmVzdWx0CQESZXhwZWRpdGlvbkludGVybmFsAggFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkCQCUCgIJAM0IAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCCQClCAEIBQFpBmNhbGxlcgUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCAgFBnJlc3VsdAJfMgJfMQFpAQpleHBlZGl0aW9uAgdtZXNzYWdlA3NpZwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJARBleHBlZGl0aW9uQ29tbW9uBAgFAWkGY2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBQdtZXNzYWdlBQNzaWcEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQJAJQKAgkAzQgCCQDOCAIIBQZyZXN1bHQCXzEICQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUKeHBOZXdTTGFuZAJfMQUMcHJvbG9nQWN0aW9uCQCUCgIIBQZyZXN1bHQCXzIIBQZyZXN1bHQCXzMBaQEMdXBncmFkZUluZnJhAQtsYW5kQXNzZXRJZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAYIBQFpBmNhbGxlcgAABQtsYW5kQXNzZXRJZAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAkAlAoCCQDOCAIJAM0IAggFBnJlc3VsdAJfMQUMcHJvbG9nQWN0aW9uCAkBF3VwZGF0ZUR1Y2tTdGF0c0ludGVybmFsAgULZHVja0Fzc2V0SWQJAGsDBQ54cFVwZ3JhZGVJbmZyYQgFBnJlc3VsdAJfMwUFTVVMVDgCXzEIBQZyZXN1bHQCXzIBaQEQdXBncmFkZUluZnJhVXNkdAELbGFuZEFzc2V0SWQDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQ11cEluZnJhQ29tbW9uBAcIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFC2xhbmRBc3NldElkCQCUCgIJAM0IAgkAzQgCCAUGcmVzdWx0Al8xCQEOU2NyaXB0VHJhbnNmZXIDBQ9lY29ub215Q29udHJhY3QIBQNwbXQGYW1vdW50BQt1c2R0QXNzZXRJZAUMcHJvbG9nQWN0aW9uCAUGcmVzdWx0Al8yAWkBEGFjdGl2YXRlQXJ0aWZhY3QCB2FydE5hbWUObGFuZEFzc2V0SWRPcHQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQZjYWxsZXIEBnJlc3VsdAQHJG1hdGNoMAUHYXJ0TmFtZQMJAAACAgdQUkVTQUxFBQckbWF0Y2gwCQESYWN0aXZhdGVQcmVzYWxlQXJ0AgUEYWRkcgUObGFuZEFzc2V0SWRPcHQDCQAAAgIHT05CT0FSRAUHJG1hdGNoMAkBEmFjdGl2YXRlT25ib2FyZEFydAEFBGFkZHIJAAIBAhBVbmtub3duIGFydGlmYWN0CQDNCAIFBnJlc3VsdAUMcHJvbG9nQWN0aW9uAWkBCm1lcmdlTGFuZHMBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUGCQClCAEIBQFpBmNhbGxlcgAABQxsYW5kQXNzZXRJZHMIBQFpDXRyYW5zYWN0aW9uSWQJAJQKAgkAzggCCQDNCAIIBQZyZXN1bHQCXzEFDHByb2xvZ0FjdGlvbggJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgkApQgBCAUBaQZjYWxsZXIFB3hwTWVyZ2UCXzEIBQZyZXN1bHQCXzIBaQEObWVyZ2VMYW5kc1VzZHQBDGxhbmRBc3NldElkcwQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECHEV4YWN0bHkgb25lIHBheW1lbnQgcmVxdWlyZWQEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAAwkBAiE9AggFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECGkFsbG93ZWQgVVNEVCBwYXltZW50IG9ubHkhBAZyZXN1bHQJAQttZXJnZUNvbW1vbgUHCQClCAEIBQFpBmNhbGxlcggFA3BtdAZhbW91bnQFDGxhbmRBc3NldElkcwgFAWkNdHJhbnNhY3Rpb25JZAkAlAoCCQDNCAIJAM0IAggFBnJlc3VsdAJfMQkBDlNjcmlwdFRyYW5zZmVyAwUPZWNvbm9teUNvbnRyYWN0CAUDcG10BmFtb3VudAULdXNkdEFzc2V0SWQFDHByb2xvZ0FjdGlvbggFBnJlc3VsdAJfMgFpAQ1jYXJnb0V4Y2hhbmdlAgxjYXJnb0xpc3RTdHILbGFuZEFzc2V0SWQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQKY2FyZ29QYXJ0cwkAvAkCBQxjYXJnb0xpc3RTdHICAToEBGFkZHIJAKUIAQgFAWkMb3JpZ2luQ2FsbGVyBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAnwgBBQd0aW1lS2V5CQACAQkArAICCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDCBpcyBvcnBoYW5lZAMJAQIhPQIFBW93bmVyBQRhZGRyCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAoggBCQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgQDbG9jCQC1CQIJAQV2YWx1ZQEFC2N1ckxvY2F0aW9uAgFfAwkBAiE9AgkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCAUwJAAIBCQCsAgIJAKwCAgIWRHVjayBsb2NhdGlvbiB0eXBlIGlzIAkAkQMCBQNsb2MFCmxvY0lkeFR5cGUCESwgYnV0IHNob3VsZCBiZSBMAwkBAiE9AgkAkQMCBQNsb2MFCGxvY0lkeElkBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgIbRHVjayBzaG91bGQgYmUgb24gdGhlIGxhbmQgBQtsYW5kQXNzZXRJZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQJY3VycmVudFdoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFYnBLZXkJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQUFYnBLZXkEBnJlc3VsdAkBCW1vdmVTdHVmZgMFCmNhcmdvUGFydHMFCWN1cnJlbnRXaAULY3VycmVudFBhY2sEBGxvZnQJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwQFbG9mdE8JAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQIBQZyZXN1bHQCXzcEBWxvZnRGCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBGxvZnQFB3ZvbEZyZWUIBQZyZXN1bHQCXzcJAMwIAgkBC1N0cmluZ0VudHJ5AgUFYnBLZXkJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIIBQZyZXN1bHQCXzQJAMwIAggFBnJlc3VsdAJfNQkAzAgCCAUGcmVzdWx0Al82BQNuaWwCAToJAMwIAgkBC1N0cmluZ0VudHJ5AgUFd2hLZXkJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAggFBnJlc3VsdAJfMQkAzAgCCAUGcmVzdWx0Al8yCQDMCAIIBQZyZXN1bHQCXzMJAMwIAgkAuQkCCQDMCAIJAJEDAgUEbG9mdAUJdm9sTG9ja2VkCQDMCAIJAKQDAQUFbG9mdE8JAMwIAgkApAMBBQVsb2Z0RgkAzAgCCQCRAwIFBGxvZnQFCHZvbFRvdGFsBQNuaWwCAV8FA25pbAIBOgkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAFpAQ1zYXZlV2FyZWhvdXNlAgV3aFN0cgtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQCd2gJALwJAgUFd2hTdHICAToDCQECIT0CCQCQAwEFAndoAAUJAAIBAjB3YXJlaG91c2Ugc3RyaW5nIHNob3VsZCBjb250YWluIDQgJzonIHNlcGFyYXRvcnMEBWxvZnRMCQCRAwIJALUJAgkAkQMCBQJ3aAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAkBDXBhcnNlSW50VmFsdWUBBQVsb2Z0TAUFbG9mdE8ECG5ld1doU3RyCQC6CQIJAMwIAgkAkQMCBQJ3aAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQJ3aAUId2hJZHhSZXMJAMwIAgkAkQMCBQJ3aAUId2hJZHhNYXQJAMwIAgkAkQMCBQJ3aAUJd2hJZHhQcm9kCQDMCAIJALkJAgkAzAgCBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQESZml4V2FyZWhvdXNlRm9ybWF0AQtsYW5kQXNzZXRJZAMJAQIhPQIIBQFpBmNhbGxlcgUMcmVzdENvbnRyYWN0CQACAQINQWNjZXNzIGRlbmllZAQFd2hLZXkJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAQJbGFuZEluZGV4CQBpAgkBD251bVBpZWNlc0J5U2l6ZQEJAJEDAgkAtQkCCAUFYXNzZXQLZGVzY3JpcHRpb24CAV8FC3JlY0xhbmRTaXplBQVTU0laRQQKaW5mcmFMZXZlbAkBC3ZhbHVlT3JFbHNlAgkAnwgBCQEWa2V5SW5mcmFMZXZlbEJ5QXNzZXRJZAEFC2xhbmRBc3NldElkAAAEAndoCQEMZ2V0V2FyZWhvdXNlAwUFd2hLZXkFCWxhbmRJbmRleAUKaW5mcmFMZXZlbAQFbG9mdEwJAQVhc0ludAEJAPwHBAUPZWNvbm9teUNvbnRyYWN0AhpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAkAzAgCBQJ3aAUDbmlsBQNuaWwEBWxvZnRPCQEXZ2V0V2FyZWhvdXNlT2NjdXBpZWRWb2wBBQJ3aAQFbG9mdFQJARdnZXRXYXJlaG91c2VUb3RhbFZvbHVtZQEJAJEDAgUCd2gFC3doSWR4TGV2ZWxzBAVsb2Z0RgkAZQIJAGUCBQVsb2Z0VAUFbG9mdEwFBWxvZnRPBAhuZXdXaFN0cgkAugkCCQDMCAIJAJEDAgUCd2gFC3doSWR4TGV2ZWxzCQDMCAIJAJEDAgUCd2gFCHdoSWR4UmVzCQDMCAIJAJEDAgUCd2gFCHdoSWR4TWF0CQDMCAIJAJEDAgUCd2gFCXdoSWR4UHJvZAkAzAgCCQC5CQIJAMwIAgkApAMBBQVsb2Z0TAkAzAgCCQCkAwEFBWxvZnRPCQDMCAIJAKQDAQUFbG9mdEYJAMwIAgkApAMBBQVsb2Z0VAUDbmlsAgFfBQNuaWwCAToJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQV3aEtleQUIbmV3V2hTdHIFA25pbAUIbmV3V2hTdHIBaQEPZml4U3Rha2VkUGllY2VzAQdhZGRyZXNzAwkBAiE9AggFAWkGY2FsbGVyBQxyZXN0Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkBAxzdGFrZWRQaWVjZXMDCQAAAgUHYWRkcmVzcwIAAAAECGxhbmRzU3RyCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleVN0YWtlZExhbmRzQnlPd25lcgEFB2FkZHJlc3MEBWxhbmRzAwkBCWlzRGVmaW5lZAEFCGxhbmRzU3RyCQC9CQIJAQV2YWx1ZQEFCGxhbmRzU3RyAgFfBQNuaWwKAQdvbmVMYW5kAgNhY2MLbGFuZEFzc2V0SWQEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFu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b21OYW1lAgJfXwkAAgEJAKwCAgIeTmFtZSBzaG91bGQgbm90IGNvbnRhaW4gJ19fJzogBQpjdXN0b21OYW1lAwkAZgIJALECAQUKY3VzdG9tTmFtZQUKTUFYTkFNRUxFTgkAAgEJAKwCAgIZTmFtZSB0b28gbG9uZywgbWF4TGVuZ3RoPQkApAMBBQpNQVhOQU1FTEVOBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQHYWN0aW9ucwQHJG1hdGNoMAUEdHlwZQMJAAACAgdBQ0NPVU5UBQckbWF0Y2gwBApyZXZlcnNlS2V5CQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEFCmN1c3RvbU5hbWUECW5hbWVPd25lcgkAoggBBQpyZXZlcnNlS2V5AwkBCWlzRGVmaW5lZAEFCW5hbWVPd25lcgkAAgEJAKwCAgIZTmFtZSBhbHJlYWR5IHJlZ2lzdGVyZWQ6IAUKY3VzdG9tTmFtZQQNYWRkclRvTmFtZUtleQkBFmtleUFkZHJlc3NUb0N1c3RvbU5hbWUBBQRhZGRyBAdvbGROYW1lCQCiCAEFDWFkZHJUb05hbWVLZXkEB2ZyZWVPbGQDCQEJaXNEZWZpbmVkAQUHb2xkTmFtZQkAzAgCCQELRGVsZXRlRW50cnkBCQEWa2V5Q3VzdG9tTmFtZVRvQWRkcmVzcwEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ1hZGRyVG9OYW1lS2V5BQpjdXN0b21OYW1lCQELU3RyaW5nRW50cnkCBQpyZXZlcnNlS2V5BQRhZGRyCAkBFnVwZGF0ZUFjY1N0YXRzSW50ZXJuYWwCBQRhZGRyBQx4cEN1c3RvbU5hbWUCXzEDCQAAAgIETEFORAUHJG1hdGNoMAQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQdhc3NldElkBAd0aW1lS2V5CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCfCAEFB3RpbWVLZXkJAAIBCQCsAgIIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUxhbmRDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUxhbmRBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlMYW5kQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARZ1cGRhdGVBY2NTdGF0c0ludGVybmFsAgUEYWRkcgUMeHBDdXN0b21OYW1lAl8xAwkAAAICBERVQ0sFByRtYXRjaDAEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUHYXNzZXRJZAQHdGltZUtleQkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQdhc3NldElkAwMJAQEhAQkBCWlzRGVmaW5lZAEJAJ8IAQUHdGltZUtleQYJAQEhAQkBCWlzRGVmaW5lZAEJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgkAAgEJAKwCAggFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCiCAEJARBrZXlEdWNrSWRUb093bmVyAQUHYXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKRFVDS1BSRUZJWAINIGlzIG5vdCB5b3VycwQKcmV2ZXJzZUtleQkBGmtleUR1Y2tDdXN0b21OYW1lVG9Bc3NldElkAQUKY3VzdG9tTmFtZQQJbmFtZU93bmVyCQCiCAEFCnJldmVyc2VLZXkDCQEJaXNEZWZpbmVkAQUJbmFtZU93bmVyCQACAQkArAICAhlOYW1lIGFscmVhZHkgcmVnaXN0ZXJlZDogBQpjdXN0b21OYW1lBA5hc3NldFRvTmFtZUtleQkBGmtleUR1Y2tBc3NldElkVG9DdXN0b21OYW1lAQUHYXNzZXRJZAQHb2xkTmFtZQkAoggBBQ5hc3NldFRvTmFtZUtleQQHZnJlZU9sZAMJAQlpc0RlZmluZWQBBQdvbGROYW1lCQDMCAIJAQtEZWxldGVFbnRyeQEJARprZXlEdWNrQ3VzdG9tTmFtZVRvQXNzZXRJZAEJAQV2YWx1ZQEFB29sZE5hbWUFA25pbAUDbmlsCQDOCAIJAM0IAgkAzQgCBQdmcmVlT2xkCQELU3RyaW5nRW50cnkCBQ5hc3NldFRvTmFtZUtleQUKY3VzdG9tTmFtZQkBC1N0cmluZ0VudHJ5AgUKcmV2ZXJzZUtleQUHYXNzZXRJZAgJARd1cGRhdGVEdWNrU3RhdHNJbnRlcm5hbAIFB2Fzc2V0SWQFDHhwQ3VzdG9tTmFtZQJfMQkAAgECE1Vua25vd24gZW50aXR5IHR5cGUJAJQKAgkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFD2Vjb25vbXlDb250cmFjdAgFA3BtdAZhbW91bnQFC3VzZHRBc3NldElkBQxwcm9sb2dBY3Rpb24AAAFpAQxzZXRSZWZlcnJhbHMCCW9sZFBsYXllcgluZXdQbGF5ZXIDCQECIT0CCAUBaQ9jYWxsZXJQdWJsaWNLZXkFA3B1YgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAxwcm9sb2dBY3Rpb24JAQZwcm9sb2cBBQFpAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIUTm8gcGF5bWVudHMgcmVxdWlyZWQDCQEBIQEJAQlpc0RlZmluZWQBCQCmCAEFCW9sZFBsYXllcgkAAgEJAKwCAgIRSW52YWxpZCBhZGRyZXNzOiAFCW9sZFBsYXllcgMJAQEhAQkBCWlzRGVmaW5lZAEJAKYIAQUJbmV3UGxheWVyCQACAQkArAICAhFJbnZhbGlkIGFkZHJlc3M6IAUJbmV3UGxheWVyBAdvbGRzS2V5CQEJa2V5T2xkaWVzAAQEb2xkcwkAoggBBQdvbGRzS2V5BAZvbGRpZXMDCQEJaXNEZWZpbmVkAQUEb2xkcwkAvAkCCQEFdmFsdWUBBQRvbGRzAgFfBQNuaWwDCQEPY29udGFpbnNFbGVtZW50AgUGb2xkaWVzBQluZXdQbGF5ZXIJAAIBCQCsAgIFCW5ld1BsYXllcgImIGlzIG5vdCBuZXdiaWUgKGFscmVhZHkgaGFzIHJlZmVycmFscykECHJlZkJ5S2V5CQEPa2V5QWRkcmVzc1JlZkJ5AQUJbmV3UGxheWVyBAVyZWZCeQkAoggBBQhyZWZCeUtleQMDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAQlpc0RlZmluZWQBCQCmCAEJAQV2YWx1ZQEFBXJlZkJ5BwkAAgEJAKwCAgkArAICBQluZXdQbGF5ZXICFCBhbHJlYWR5IGhhcyByZWZCeTogCQEFdmFsdWUBBQVyZWZCeQQHcmVmc0tleQkBE2tleUFkZHJlc3NSZWZlcnJhbHMBBQlvbGRQbGF5ZXIEBHJlZnMJAKIIAQUHcmVmc0tleQQJcmVmc0FycmF5AwkBCWlzRGVmaW5lZAEFBHJlZnMJALwJAgkBBXZhbHVlAQUEcmVmcwIBXwUDbmlsAwkBD2NvbnRhaW5zRWxlbWVudAIFCXJlZnNBcnJheQUJbmV3UGxheWVyCQACAQkArAICCQCsAgIJAKwCAgUJb2xkUGxheWVyAhIgYWxyZWFkeSBjb250YWlucyAFCW5ld1BsYXllcgIRIHdpdGhpbiByZWZlcnJhbHMEB25ld1JlZnMJALoJAgkAzQgCBQlyZWZzQXJyYXkFCW5ld1BsYXllcgIBXwQHbmV3T2xkcwMJAQ9jb250YWluc0VsZW1lbnQCBQZvbGRpZXMFCW9sZFBsYXllcgkBBXZhbHVlAQUEb2xkcwkAugkCCQDNCAIFBm9sZGllcwUJb2xkUGxheWVyAgFfCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUIcmVmQnlLZXkFCW9sZFBsYXllcgkAzAgCCQELU3RyaW5nRW50cnkCBQdyZWZzS2V5BQduZXdSZWZzCQDMCAIJAQtTdHJpbmdFbnRyeQIFB29sZHNLZXkFB25ld09sZHMJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpARBkaXN0cmlidXRlUG9pbnRzBQhzdHJlbmd0aAhhY2N1cmFjeQlpbnRlbGxlY3QJZW5kdXJhbmNlCWRleHRlcml0eQQMcHJvbG9nQWN0aW9uCQEGcHJvbG9nAQUBaQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECFE5vIHBheW1lbnRzIHJlcXVpcmVkBARhZGRyCQClCAEIBQFpDG9yaWdpbkNhbGxlcgQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAoggBCQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQRhZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBApmcmVlS2V5QWNjCQERa2V5VXNlckZyZWVQb2ludHMBBQRhZGRyBA1mcmVlUG9pbnRzQWNjCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAUKZnJlZUtleUFjYwAABAtmcmVlS2V5RHVjawkBEWtleUR1Y2tGcmVlUG9pbnRzAQULZHVja0Fzc2V0SWQEDmZyZWVQb2ludHNEdWNrCQELdmFsdWVPckVsc2UCCQCaCAIFD3N0YWtpbmdDb250cmFjdAULZnJlZUtleUR1Y2sAAAQHc3VtRnJlZQkAZAIFDWZyZWVQb2ludHNBY2MFDmZyZWVQb2ludHNEdWNrBA9zdW1Ub0Rpc3RyaWJ1dGUJAGQCCQBkAgkAZAIJAGQCBQhzdHJlbmd0aAUIYWNjdXJhY3kFCWludGVsbGVjdAUJZW5kdXJhbmNlBQlkZXh0ZXJpdHkDCQBmAgUPc3VtVG9EaXN0cmlidXRlBQdzdW1GcmVlCQACAQkArAICCQCsAgICD1RoZXJlIGFyZSBvbmx5IAkApAMBBQdzdW1GcmVlAhogZnJlZSBwb2ludHMgdG8gZGlzdHJpYnV0ZQQIY2hhcnNLZXkJAQxrZXlEdWNrQ2hhcnMBBQtkdWNrQXNzZXRJZAQFY2hhcnMJALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCGNoYXJzS2V5AgkwXzBfMF8wXzACAV8EBm5ld0FjYwkAZQIFDWZyZWVQb2ludHNBY2MFD3N1bVRvRGlzdHJpYnV0ZQkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQpmcmVlS2V5QWNjAwkAZgIAAAUGbmV3QWNjAAAFBm5ld0FjYwkAzAgCCQEMSW50ZWdlckVudHJ5AgULZnJlZUtleUR1Y2sDCQBmAgAABQZuZXdBY2MJAGQCBQ5mcmVlUG9pbnRzRHVjawUGbmV3QWNjBQ5mcmVlUG9pbnRzRHVjawkAzAgCCQELU3RyaW5nRW50cnkCBQhjaGFyc0tleQkAuQkCCQDMCAIJAKQDAQkAZAIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQVjaGFycwUMY2hhclN0cmVuZ3RoBQhzdHJlbmd0aAkAzAgCCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUFY2hhcnMFDGNoYXJBY2N1cmFjeQUIYWNjdXJhY3kJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFySW50ZWxsZWN0BQlpbnRlbGxlY3QJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRW5kdXJhbmNlBQllbmR1cmFuY2UJAMwIAgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFBWNoYXJzBQ1jaGFyRGV4dGVyaXR5BQlkZXh0ZXJpdHkFA25pbAIBXwkAzAgCBQxwcm9sb2dBY3Rpb24FA25pbAAAAWkBHHNwbGl0QnlHbG9iYWxXZWlnaHRzUkVBRE9OTFkBBmFtb3VudAkAlAoCBQNuaWwJARJnZXROZWVkZWRNYXRlcmlhbHMBBQZhbW91bnQBaQEkc3BsaXRCeUdsb2JhbEFuZExvY2FsV2VpZ2h0c1JFQURPTkxZAwltYXRBbW91bnQJcmVzQW1vdW50CHRlcnJhaW5zBA10ZXJyYWluQ291bnRzCQENY291bnRUZXJyYWlucwEFCHRlcnJhaW5zCQCUCgIFA25pbAkAlAoCCQESZ2V0TmVlZGVkTWF0ZXJpYWxzAQUJbWF0QW1vdW50CQETZGlzdHJpYnV0ZUJ5V2VpZ2h0cwIFCXJlc0Ftb3VudAUNdGVycmFpbkNvdW50cwFpARNnZXRCYWNrcGFja1JFQURPTkxZAQtkdWNrQXNzZXRJZAkAlAoCBQNuaWwJALkJAgkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQCAToBaQEUZ2V0V2FyZWhvdXNlUkVBRE9OTFkBC2xhbmRBc3NldElkBAVhc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFC2xhbmRBc3NldElkBAlsYW5kSW5kZXgJAGkCCQEPbnVtUGllY2VzQnlTaXplAQkAkQMCCQC1CQIIBQVhc3NldAtkZXNjcmlwdGlvbgIBXwULcmVjTGFuZFNpemUFBVNTSVpFBAppbmZyYUxldmVsCQELdmFsdWVPckVsc2UCCQCfCAEJARZrZXlJbmZyYUxldmVsQnlBc3NldElkAQULbGFuZEFzc2V0SWQAAAkAlAoCBQNuaWwJALoJAgkBDGdldFdhcmVob3VzZQMJARJrZXlXYXJlaG91c2VCeUxhbmQBBQtsYW5kQXNzZXRJZAUJbGFuZEluZGV4BQppbmZyYUxldmVsAgE6AWkBCnNhdmVMYXN0VHgAAwMJAQIhPQIIBQFpBmNhbGxlcgULd2xnQ29udHJhY3QJAQIhPQIIBQFpBmNhbGxlcgUPZWNvbm9teUNvbnRyYWN0BwkAAgECDUFjY2VzcyBkZW5pZWQJAJQKAgkAzAgCCQEGcHJvbG9nAQUBaQUDbmlsACoBaQEPdXBkYXRlRHVja1N0YXRzAgtkdWNrQXNzZXRJZAdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEXdXBkYXRlRHVja1N0YXRzSW50ZXJuYWwCBQtkdWNrQXNzZXRJZAUHZGVsdGFYUAFpAQ51cGRhdGVBY2NTdGF0cwIEYWRkcgdkZWx0YVhQAwkBAiE9AggFAWkGY2FsbGVyBQ9lY29ub215Q29udHJhY3QJAAIBAg1BY2Nlc3MgZGVuaWVkCQEWdXBkYXRlQWNjU3RhdHNJbnRlcm5hbAIFBGFkZHIFB2RlbHRhWFABaQEJZXF1aXBEdWNrAQllcXVpcG1lbnQEDHByb2xvZ0FjdGlvbgkBBnByb2xvZwEFAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhRObyBwYXltZW50cyByZXF1aXJlZAQEYWRkcgkApQgBCAUBaQxvcmlnaW5DYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKIIAQkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQUEYWRkcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQFZXFLZXkJARBrZXlEdWNrRXF1aXBtZW50AQULZHVja0Fzc2V0SWQEC2N1cnJlbnRTZWdzCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUFZXFLZXkCFyw7LF8sOyxfLDssXyw7LF8sOyxfLDssAgFfBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQFbmV3RXEJALUJAgUJZXF1aXBtZW50AgFfAwkBAiE9AgkAkAMBBQVuZXdFcQULTlVNU0VHTUVOVFMJAAIBAhZXcm9uZyBlcXVpcG1lbnQgc3RyaW5nBAZicFByb2QJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAQFcExpc3QDCQAAAgUGYnBQcm9kAgAFA25pbAkAtQkCBQZicFByb2QCAV8ECHRlbXBQcm9kCQEFZHJlc3MDBQtjdXJyZW50U2VncwUFcExpc3QGBAduZXdQcm9kCQEFZHJlc3MDBQVuZXdFcQUIdGVtcFByb2QHCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgUFZXFLZXkFCWVxdWlwbWVudAkAzAgCCQELU3RyaW5nRW50cnkCBQVicEtleQkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAuQkCBQduZXdQcm9kAgFfBQNuaWwCAToJAMwIAgUMcHJvbG9nQWN0aW9uBQNuaWwAAAFpAQR0ZXN0AAMJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECDUFjY2VzcyBkZW5pZWQEAWEJAQ5wcm9kU3RyVG9CeXRlcwECAAQBYgkBDmJ5dGVzVG9Qcm9kU3RyAQUBYQkAlAoCBQNuaWwFAWIAUjAB0Q==", "height": 2673265, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4HMn2iaQefwUd2cwjtYtnNeapvfENycA2J5EEVPPNehu Next: 2NcKvAgbF6WbQQedZPYNRKY17h7AK6BR5FfRVLB1Hf5K Diff:
OldNewDifferences
629629 }
630630
631631
632-func dx (dy,dh,dz,dA,dB,dC) = {
633- let do = split(dy, ":")
632+func dx (dy) = {
633+ func dz (cL,aY) = {
634+ let dk = size(cL)
635+ let dA = take(drop(dy, (8 * dk)), 8)
636+ (cL :+ toString(toInt(dA)))
637+ }
638+
639+ makeString({
640+ let cN = ac
641+ let cO = size(cN)
642+ let cP = nil
643+ func cQ (cR,cS) = if ((cS >= cO))
644+ then cR
645+ else dz(cR, cN[cS])
646+
647+ func cT (cR,cS) = if ((cS >= cO))
648+ then cR
649+ else throw("List size exceeds 50")
650+
651+ 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)
652+ }, "_")
653+ }
654+
655+
656+func dB (dC,dh,dD,dE,dF,dG) = {
657+ let do = split(dC, ":")
634658 if ((size(do) != 2))
635659 then throw("Incorrect format, should be index:amount")
636660 else {
637- let dD = parseIntValue(do[0])
638- let dE = parseIntValue(do[1])
639- if (if ((0 > dD))
661+ let dH = parseIntValue(do[0])
662+ let dI = parseIntValue(do[1])
663+ if (if ((0 > dH))
640664 then true
641- else (dD >= size(ac)))
665+ else (dH >= size(ac)))
642666 then throw("Unknown product idx")
643- else if ((0 > dE))
667+ else if ((0 > dI))
644668 then throw("Count can't be negative")
645- else if ((dE == 0))
669+ else if ((dI == 0))
646670 then $Tuple2(dh, false)
647671 else {
648- func dF (cL,dj) = {
672+ func dJ (cL,dj) = {
649673 let dk = cL._1
650674 let dr = if ((size(dh) > dk))
651675 then parseIntValue(dh[dk])
652676 else 0
653- if ((dD != dk))
677+ if ((dH != dk))
654678 then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3)
655- else if (if (!(dz))
656- then (dE > dr)
679+ else if (if (!(dD))
680+ then (dI > dr)
657681 else false)
658- then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE)))
682+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dI)))
659683 else {
660- let dG = if (!(dz))
684+ let dK = if (!(dD))
661685 then {
662- let dH = split(dj, "_")[ae]
663- if ((dH == ""))
686+ let dL = split(dj, "_")[ae]
687+ if ((dL == ""))
664688 then throw("Item cannot be equipped")
665689 else {
666- let dI = parseIntValue(dH)
667- let dJ = (dI / 100)
668- if ((dA != dJ))
690+ let dM = parseIntValue(dL)
691+ let dN = (dM / 100)
692+ if ((dE != dN))
669693 then throw("Segment incompatible")
670694 else {
671- let dK = ((dI % 100) / 10)
672- if ((dB != dK))
695+ let dO = ((dM % 100) / 10)
696+ if ((dF != dO))
673697 then throw("Slot incompatible")
674698 else {
675- let dL = (dI % 10)
676- if (if ((dC != 0))
677- then (dL > 1)
699+ let dP = (dM % 10)
700+ if (if ((dG != 0))
701+ then (dP > 1)
678702 else false)
679703 then throw("Big items should occupy slot 0")
680- else (dL > 1)
704+ else (dP > 1)
681705 }
682706 }
683707 }
684708 }
685709 else false
686- $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz)
687- then dE
688- else -(dE))))), if (cL._3)
710+ $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dD)
711+ then dI
712+ else -(dI))))), if (cL._3)
689713 then true
690- else dG)
714+ else dK)
691715 }
692716 }
693717
697721 let cP = $Tuple3(0, nil, false)
698722 func cQ (cR,cS) = if ((cS >= cO))
699723 then cR
700- else dF(cR, cN[cS])
724+ else dJ(cR, cN[cS])
701725
702726 func cT (cR,cS) = if ((cS >= cO))
703727 then cR
711735 }
712736
713737
714-func dM (dN,dO,dz,dA,dB) = if ((dN != ""))
738+func dQ (dR,dS,dD,dE,dF) = if ((dR != ""))
715739 then {
716- let dP = split(dN, ",")
717- if ((size(dP) > n))
740+ let dT = split(dR, ",")
741+ if ((size(dT) > n))
718742 then throw("Wrong slots format")
719743 else {
720- let dQ = dP[0]
721- let dR = if ((size(dP) > 1))
722- then dP[1]
744+ let dU = dT[0]
745+ let dV = if ((size(dT) > 1))
746+ then dT[1]
723747 else ""
724- if (if ((dQ == ""))
725- then (dR == "")
748+ if (if ((dU == ""))
749+ then (dV == "")
726750 else false)
727- then dO
751+ then dS
728752 else {
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)
753+ let dW = if ((dU != ""))
754+ then dB(dU, dS, dD, dE, dF, 0)
755+ else $Tuple2(dS, false)
756+ if ((dV != ""))
757+ then if (dW._2)
734758 then throw("Big item already occupies slot")
735- else dx(dR, dS._1, dz, dA, dB, 1)._1
736- else dS._1
759+ else dB(dV, dW._1, dD, dE, dF, 1)._1
760+ else dW._1
737761 }
738762 }
739763 }
740- else dO
741-
742-
743-func dT (dU,dh,dz) = {
744- func dA (cL,dV) = {
764+ else dS
765+
766+
767+func dX (dY,dh,dD) = {
768+ func dE (cL,dZ) = {
745769 let dk = cL._1
746- let dB = split(dV, ";")
747- if ((size(dB) != m))
770+ let dF = split(dZ, ";")
771+ if ((size(dF) != m))
748772 then throw("Wrong segment format")
749773 else {
750- let dW = dB[0]
751- let dq = dB[1]
752- if (if ((dW == ""))
774+ let ea = dF[0]
775+ let dq = dF[1]
776+ if (if ((ea == ""))
753777 then (dq == "")
754778 else false)
755779 then $Tuple2((dk + 1), cL._2)
756780 else {
757- let dX = dM(dW, cL._2, dz, dk, 0)
758- $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1))
781+ let eb = dQ(ea, cL._2, dD, dk, 0)
782+ $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1))
759783 }
760784 }
761785 }
762786
763-( let cN = dU
787+( let cN = dY
764788 let cO = size(cN)
765789 let cP = $Tuple2(0, dh)
766790 func cQ (cR,cS) = if ((cS >= cO))
767791 then cR
768- else dA(cR, cN[cS])
792+ else dE(cR, cN[cS])
769793
770794 func cT (cR,cS) = if ((cS >= cO))
771795 then cR
775799 }
776800
777801
778-func dY (dZ,ea,eb,ec) = if ((size(dZ) != S))
802+func ec (ed,ee,ef,eg) = if ((size(ed) != S))
779803 then throw("Wrong proportions data")
780804 else {
781- func ed (cL,ee) = {
782- let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb))
805+ func eh (cL,ei) = {
806+ let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef))
783807 if ((0 > dd))
784- then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb)))
808+ then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef)))
785809 else (cL :+ toString(dd))
786810 }
787811
791815 let cP = nil
792816 func cQ (cR,cS) = if ((cS >= cO))
793817 then cR
794- else ed(cR, cN[cS])
818+ else eh(cR, cN[cS])
795819
796820 func cT (cR,cS) = if ((cS >= cO))
797821 then cR
803827 }
804828
805829
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)))
830+func ej (ee,ef,eg) = {
831+ let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
832+ ec(ed, ee, ef, eg)
833+ }
834+
835+
836+func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)]
837+
838+
839+func em (en,ee,eo,ef,ep) = {
840+ func eq (cL,ei) = {
841+ let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
842+ (cL :+ toString((parseIntValue(en[ei]) + er)))
819843 }
820844
821845 let cW = {
824848 let cP = nil
825849 func cQ (cR,cS) = if ((cS >= cO))
826850 then cR
827- else em(cR, cN[cS])
851+ else eq(cR, cN[cS])
828852
829853 func cT (cR,cS) = if ((cS >= cO))
830854 then cR
836860 }
837861
838862
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))
863+func es (ee,eo,ef,ep) = {
864+ func eq (cL,ei) = {
865+ let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
866+ $Tuple2((cL._1 :+ er), (cL._2 + er))
843867 }
844868
845869 let cN = [0, 1, 2, 3, 4, 5]
847871 let cP = $Tuple2(nil, 0)
848872 func cQ (cR,cS) = if ((cS >= cO))
849873 then cR
850- else em(cR, cN[cS])
874+ else eq(cR, cN[cS])
851875
852876 func cT (cR,cS) = if ((cS >= cO))
853877 then cR
857881 }
858882
859883
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))
884+func et (eu,ev,ew,ex) = {
885+ let ey = ew._1
886+ let ez = ew._2
887+ if ((ez == 0))
888+ then $Tuple2(makeString(eu, "_"), makeString(ev, "_"))
889+ else if ((ex >= ez))
866890 then {
867- func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee])))
891+ func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei])))
868892
869893 let cW = {
870894 let cN = [0, 1, 2, 3, 4, 5]
872896 let cP = nil
873897 func cQ (cR,cS) = if ((cS >= cO))
874898 then cR
875- else ew(cR, cN[cS])
899+ else eA(cR, cN[cS])
876900
877901 func cT (cR,cS) = if ((cS >= cO))
878902 then cR
880904
881905 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
882906 }
883- $Tuple2(makeString(cW, "_"), makeString(er, "_"))
907+ $Tuple2(makeString(cW, "_"), makeString(ev, "_"))
884908 }
885909 else {
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))))
910+ func eB (cL,ei) = {
911+ let eC = fraction(ey[ei], ex, ez)
912+ $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC))))
889913 }
890914
891915 let cW = {
894918 let cP = $Tuple2(nil, nil)
895919 func cQ (cR,cS) = if ((cS >= cO))
896920 then cR
897- else ex(cR, cN[cS])
921+ else eB(cR, cN[cS])
898922
899923 func cT (cR,cS) = if ((cS >= cO))
900924 then cR
907931 }
908932
909933
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))
934+func eD (eE) = if ((eE >= toBigInt(0)))
935+ then eE
936+ else -(eE)
937+
938+
939+let eF = [[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]]
940+
941+func eG (bS,eH) = {
942+ let eI = toInt((bS % cg))
943+ let eJ = if ((eH[0] > eI))
920944 then "A"
921- else if ((eD[1] > eE))
945+ else if ((eH[1] > eI))
922946 then "B"
923- else if ((eD[2] > eE))
947+ else if ((eH[2] > eI))
924948 then "C"
925- else if ((eD[3] > eE))
949+ else if ((eH[3] > eI))
926950 then "D"
927- else if ((eD[4] > eE))
951+ else if ((eH[4] > eI))
928952 then "E"
929953 else "F"
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 = {
954+ eJ
955+ }
956+
957+
958+func eK (eL,eM) = {
959+ let eN = eF[eM]
960+ func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck))
961+
962+ let eP = {
939963 let cN = [1, 2, 3, 4, 5]
940964 let cO = size(cN)
941- let cP = $Tuple2("", (eH / cf))
965+ let cP = $Tuple2("", (eL / cf))
942966 func cQ (cR,cS) = if ((cS >= cO))
943967 then cR
944- else eK(cR, cN[cS])
968+ else eO(cR, cN[cS])
945969
946970 func cT (cR,cS) = if ((cS >= cO))
947971 then cR
949973
950974 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
951975 }
952- eL._1
953- }
954-
955-
956-func eM (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, "_")
976+ eP._1
977+ }
978+
979+
980+func eQ (eR) = {
981+ let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
982+[toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S))
983+ then eS[aq]
984+ else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S))
985+ then eS[ar]
986+ else "0_0_0_0_0_0", eS[as]]
987+ }
988+
989+
990+func eT (eU) = {
991+ let do = split(eU, "_")
968992 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
969993 }
970994
971995
972-func eR (eS) = {
973- let eT = eS[aj]
974- func eU (cL,dj) = (cL + parseIntValue(dj))
975-
976- func eV (cL,dj) = {
996+func eV (eW) = {
997+ let eX = eW[aj]
998+ func eY (cL,dj) = (cL + parseIntValue(dj))
999+
1000+ func eZ (cL,dj) = {
9771001 let bB = cL._1
978- let eW = (((parseIntValue(dj) + af) - 1) / af)
979- $Tuple2((bB + 1), (cL._2 + (eW * bi)))
980- }
981-
982- let eX = {
983- let cN = split(eS[ah], "_")
1002+ let fa = (((parseIntValue(dj) + af) - 1) / af)
1003+ $Tuple2((bB + 1), (cL._2 + (fa * bi)))
1004+ }
1005+
1006+ let fb = {
1007+ let cN = split(eW[ah], "_")
9841008 let cO = size(cN)
9851009 let cP = 0
9861010 func cQ (cR,cS) = if ((cS >= cO))
9871011 then cR
988- else eU(cR, cN[cS])
1012+ else eY(cR, cN[cS])
9891013
9901014 func cT (cR,cS) = if ((cS >= cO))
9911015 then cR
9931017
9941018 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
9951019 }
996- let eY = {
997- let cN = split(eS[ai], "_")
1020+ let fc = {
1021+ let cN = split(eW[ai], "_")
9981022 let cO = size(cN)
9991023 let cP = 0
1000- func eZ (cR,cS) = if ((cS >= cO))
1024+ func fd (cR,cS) = if ((cS >= cO))
10011025 then cR
1002- else eU(cR, cN[cS])
1003-
1004- func fa (cR,cS) = if ((cS >= cO))
1026+ else eY(cR, cN[cS])
1027+
1028+ func fe (cR,cS) = if ((cS >= cO))
10051029 then cR
10061030 else throw("List size exceeds 6")
10071031
1008- fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
1009- }
1010- let fb = if ((eT == ""))
1032+ fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1033+ }
1034+ let ff = if ((eX == ""))
10111035 then 0
1012- else ( let cN = split_4C(eT, "_")
1036+ else ( let cN = split_4C(eX, "_")
10131037 let cO = size(cN)
10141038 let cP = $Tuple2(0, 0)
1015- func fc (cR,cS) = if ((cS >= cO))
1039+ func fg (cR,cS) = if ((cS >= cO))
10161040 then cR
1017- else eV(cR, cN[cS])
1018-
1019- func fd (cR,cS) = if ((cS >= cO))
1041+ else eZ(cR, cN[cS])
1042+
1043+ func fh (cR,cS) = if ((cS >= cO))
10201044 then cR
10211045 else throw("List size exceeds 50")
10221046
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))
1047+ fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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
1048+ ((fb + fc) + ff)
1049+ }
1050+
1051+
1052+func fi (fj,fk,fl) = {
1053+ let eU = ((toString(fk) + "_") + toString(fl))
1054+ let fm = eT(eU)
1055+ let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1056+ let fo = split_4C(fn, ":")
1057+ let fp = eV(fo)
1058+ let fq = if ((5 > size(fo)))
1059+ then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_")
1060+ else {
1061+ let fr = split(fo[ak], "_")
1062+ let fs = parseIntValue(fr[al])
1063+ let ft = if ((size(fr) > 1))
1064+ then parseIntValue(fr[am])
1065+ else fp
1066+ makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_")
1067+ }
1068+[fo[ag], if ((size(split(fo[ah], "_")) == S))
1069+ then fo[ah]
1070+ else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S))
1071+ then fo[ai]
1072+ else "0_0_0_0_0_0", fo[aj], fq]
1073+ }
1074+
1075+
1076+func fu (eW) = {
1077+ let fv = eV(eW)
1078+ let fw = parseIntValue(split(eW[ak], "_")[al])
1079+ ((eT(eW[ag]) - fv) - fw)
1080+ }
1081+
1082+
1083+func fx (fy,fz) = {
1084+ let fa = if ((fy >= 0))
1085+ then (((fy + fz) - 1) / fz)
1086+ else -((((-(fy) + fz) - 1) / fz))
1087+ (fa * bi)
1088+ }
1089+
1090+
1091+func fA (fB,eW,fC) = if ((size(fB) != 3))
10681092 then throw("cargoListStr should contain exactly 2 ':' separators")
10691093 else {
1070- let fz = split(fx[0], "_")
1071- let fA = split(fx[1], "_")
1072- let fB = if ((fx[2] == ""))
1094+ let fD = split(fB[0], "_")
1095+ let fE = split(fB[1], "_")
1096+ let fF = if ((fB[2] == ""))
10731097 then nil
1074- else split(fx[2], "_")
1075- if ((size(fz) != S))
1098+ else split(fB[2], "_")
1099+ if ((size(fD) != S))
10761100 then throw("All 6 resources should be passed")
1077- else if ((size(fA) != S))
1101+ else if ((size(fE) != S))
10781102 then throw("All 6 materials should be passed")
10791103 else {
1080- let et = fq(eS)
1081- let fC = split(eS[ah], "_")
1082- let fD = split(eS[ai], "_")
1083- let fE = if ((eS[aj] == ""))
1104+ let ex = fu(eW)
1105+ let fG = split(eW[ah], "_")
1106+ let fH = split(eW[ai], "_")
1107+ let fI = if ((eW[aj] == ""))
10841108 then nil
1085- else split(eS[aj], "_")
1086- let er = split(fy[aq], "_")
1087- let fF = split(fy[ar], "_")
1088- let fG = if ((fy[as] == ""))
1109+ else split(eW[aj], "_")
1110+ let ev = split(fC[aq], "_")
1111+ let fJ = split(fC[ar], "_")
1112+ let fK = if ((fC[as] == ""))
10891113 then nil
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))
1114+ else split(fC[as], "_")
1115+ func fL (cL,dj) = {
1116+ let ei = cL._1
1117+ let fM = parseIntValue(dj)
1118+ let fN = parseIntValue(fG[ei])
1119+ let fO = parseIntValue(ev[ei])
1120+ if ((fM == 0))
1121+ then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4)
1122+ else if ((fM > 0))
1123+ then if ((fM > fO))
1124+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available"))
1125+ else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
1126+ else if ((-(fM) > fN))
1127+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available"))
1128+ else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
11051129 }
11061130
11071131 let cW = {
1108- let cN = fz
1132+ let cN = fD
11091133 let cO = size(cN)
11101134 let cP = $Tuple4(0, nil, nil, 0)
11111135 func cQ (cR,cS) = if ((cS >= cO))
11121136 then cR
1113- else fH(cR, cN[cS])
1137+ else fL(cR, cN[cS])
11141138
11151139 func cT (cR,cS) = if ((cS >= cO))
11161140 then cR
11181142
11191143 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
11201144 }
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))
1145+ func fP (cL,dj) = {
1146+ let ei = cL._1
1147+ let fM = parseIntValue(dj)
1148+ let fQ = parseIntValue(fH[ei])
1149+ let fR = parseIntValue(fJ[ei])
1150+ if ((fM == 0))
1151+ then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4)
1152+ else if ((fM > 0))
1153+ then if ((fM > fR))
1154+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available"))
1155+ else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
1156+ else if ((-(fM) > fQ))
1157+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available"))
1158+ else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
11351159 }
11361160
1137- let dW = {
1138- let cN = fA
1161+ let ea = {
1162+ let cN = fE
11391163 let cO = size(cN)
11401164 let cP = $Tuple4(0, nil, nil, cW._4)
1141- func eZ (cR,cS) = if ((cS >= cO))
1165+ func fd (cR,cS) = if ((cS >= cO))
11421166 then cR
1143- else fL(cR, cN[cS])
1144-
1145- func fa (cR,cS) = if ((cS >= cO))
1167+ else fP(cR, cN[cS])
1168+
1169+ func fe (cR,cS) = if ((cS >= cO))
11461170 then cR
11471171 else throw("List size exceeds 6")
11481172
1149- fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
1173+ fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
11501174 }
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])
1175+ func fS (cL,dj) = {
1176+ let ei = cL._1
1177+ let fM = parseIntValue(dj)
1178+ let fT = if ((size(fI) > ei))
1179+ then parseIntValue(fI[ei])
11561180 else 0
1157- let fQ = if ((size(fG) > ee))
1158- then parseIntValue(fG[ee])
1181+ let fU = if ((size(fK) > ei))
1182+ then parseIntValue(fK[ei])
11591183 else 0
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"))
1184+ if ((fM == 0))
1185+ then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4)
1186+ else if ((fM > 0))
1187+ then if ((fM > fU))
1188+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available"))
11651189 else {
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))
1190+ let fV = (fx((fT + fM), af) - fx(fT, af))
1191+ $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
11681192 }
1169- else if ((-(fI) > fP))
1170- then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available"))
1193+ else if ((-(fM) > fT))
1194+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available"))
11711195 else {
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))
1196+ let fV = (fx((fT + fM), af) - fx(fT, af))
1197+ $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
11741198 }
11751199 }
11761200
1177- let eO = if ((size(fB) != 0))
1201+ let eS = if ((size(fF) != 0))
11781202 then {
1179- let cN = fB
1203+ let cN = fF
11801204 let cO = size(cN)
1181- let cP = $Tuple4(0, nil, nil, dW._4)
1182- func fc (cR,cS) = if ((cS >= cO))
1205+ let cP = $Tuple4(0, nil, nil, ea._4)
1206+ func fg (cR,cS) = if ((cS >= cO))
11831207 then cR
1184- else fO(cR, cN[cS])
1185-
1186- func fd (cR,cS) = if ((cS >= cO))
1208+ else fS(cR, cN[cS])
1209+
1210+ func fh (cR,cS) = if ((cS >= cO))
11871211 then cR
11881212 else throw("List size exceeds 50")
11891213
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)
1214+ fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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)
11911215 }
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)
1216+ else $Tuple4(0, fI, fK, ea._4)
1217+ let fW = eS._4
1218+ if ((fW > ex))
1219+ then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left"))
1220+ else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW)
11971221 }
11981222 }
11991223
12001224
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)))
1225+func fX (fY,fZ) = {
1226+ let aT = toString(fY)
1227+ let ga = eD(toBigInt(fZ))
1228+ let gb = valueOrElse(getInteger(cm()), (cl + 1))
1229+ let co = toString(gb)
1230+ let eM = toInt((ga % cf))
1231+ let el = eK(ga, eM)
1232+ let gc = aa[eM]
1233+ let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false)
1234+ let av = calculateAssetId(gd)
1235+ let ge = toBase58String(av)
1236+ $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc))
1237+ }
1238+
1239+
1240+func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX)))
12171241 then throw("signature does not match")
12181242 else {
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)))
1243+ let do = split(toUtf8String(gg), ";")
1244+ let gi = split(do[0], "|")
1245+ let gj = split(gi[cA], "_")
1246+ let gk = parseIntValue(gj[0])
1247+ let gl = parseIntValue(gj[1])
1248+ let gm = split(do[1], ":")
1249+ let gn = gm[0]
1250+ let go = parseIntValue(gi[cB])
1251+ if (if ((go > (lastBlock.timestamp + bZ)))
12281252 then true
1229- else ((lastBlock.timestamp - bZ) > gk))
1230- then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp)))
1253+ else ((lastBlock.timestamp - bZ) > go))
1254+ then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp)))
12311255 else {
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))
1256+ let gp = gm[1]
1257+ let gq = valueOrElse(getString(at(aT)), "")
1258+ if ((gq != gp))
1259+ then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp))
12361260 else {
12371261 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
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))
1262+ let gr = aQ(p)
1263+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1264+ let gt = valueOrElse(getInteger(gr), gs)
1265+ if ((gt != gk))
1266+ then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk)))
1267+ else if ((0 >= gk))
12441268 then throw("You can't fly with zero health")
12451269 else {
1246- let gq = if ((size(ge) > cC))
1247- then ge[cC]
1270+ let gu = if ((size(gi) > cC))
1271+ then gi[cC]
12481272 else ""
1249- let gr = if ((size(ge) > cD))
1250- then ge[cD]
1273+ let gv = if ((size(gi) > cD))
1274+ then gi[cD]
12511275 else ""
1252- let gs = if (if ((gh > 0))
1253- then (gq == "$")
1276+ let gw = if (if ((gl > 0))
1277+ then (gu == "$")
12541278 else false)
12551279 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12561280 else 0
1257- $Tuple5(gh, p, gs, gj, gr)
1281+ $Tuple5(gl, p, gw, gn, gv)
12581282 }
12591283 }
12601284 }
12611285 }
12621286
12631287
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)), ""))
1288+func gx (fY,fZ,gg,gh) = {
1289+ let aT = toString(fY)
1290+ let eN = gf(aT, gg, gh)
1291+ let gr = aQ(eN._2)
1292+ let eR = aO(eN._2)
1293+ let fC = eQ(eR)
1294+ let gy = split(fC[ar], "_")
1295+ let gz = makeString(cX(true, gy, cd), "_")
1296+ let dt = de(fC[as], eN._5)
1297+ if ((0 >= eN._1))
1298+ then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0)
1299+ else {
1300+ let gA = fX(fY, fZ)
1301+ let ge = gA._2._1
1302+ $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3)
1303+ }
1304+ }
1305+
1306+
1307+func gB (aF,gC) = {
1308+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1309+ let gD = valueOrElse(getInteger(az(R, aF)), 0)
1310+ let gE = (fl / 6)
1311+ let gF = (fl / 7)
1312+ ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5)))
1313+ }
1314+
1315+
1316+func gG (b,gH,gI) = {
1317+ let gJ = if ((gH == cx))
1318+ then $Tuple2(gI, valueOrElse(getString(aN(b)), ""))
12951319 else {
12961320 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1321+ let gK = valueOrElse(getString(aP(p)), W)
1322+ let gL = split(value(gK), "_")
1323+ if ((gL[aV] != "L"))
1324+ then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
1325+ else $Tuple2(gL[aW], p)
1326+ }
1327+ let aF = gJ._1
1328+ let gM = gJ._2
1329+ let gN = value(assetInfo(fromBase58String(aF)))
1330+ let gO = ax(aF)
1331+ let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked"))
1332+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1333+ if ((gQ != b))
13101334 then throw((P + " is not yours"))
13111335 else {
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))
1336+ let gR = split(gN.description, "_")
1337+ $Tuple4(gM, aF, gR, gP)
1338+ }
1339+ }
1340+
1341+
1342+func gS (b,fy,gH,gI) = if ((0 > fy))
13191343 then throw("Negative amount")
13201344 else {
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)))
1345+ let dM = gG(b, gH, gI)
1346+ let bU = dM._3[bI]
1347+ let ee = ek(dM._3[bJ])
1348+ let eo = (lastBlock.timestamp - dM._4)
1349+ if ((0 > eo))
1350+ then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp)))
13271351 else {
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)))
1352+ let gC = bT(bU)
1353+ let gT = gB(dM._2, gC)
1354+ let gU = fraction(eo, (gT * gC), U)
1355+ if ((fy > gU))
1356+ then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy)))
13331357 else {
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)
1358+ let gV = fraction((gU - fy), U, (gT * gC))
1359+ let gW = (lastBlock.timestamp - gV)
1360+ let fk = (gC / bj)
1361+ let ew = es(ee, (eo - gV), fk, gT)
1362+ let fj = aE(dM._2)
1363+ let fl = valueOrElse(getInteger(ay(dM._2)), 0)
1364+ let eW = fi(fj, fk, fl)
1365+ let fr = split(eW[ak], "_")
1366+ let ex = parseIntValue(fr[an])
1367+ if (if ((gH == cx))
1368+ then (fy > ex)
13451369 else false)
1346- then throw((("Only " + toString(et)) + " space left in warehouse"))
1370+ then throw((("Only " + toString(ex)) + " space left in warehouse"))
13471371 else {
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]))
1372+ let eR = aO(dM._1)
1373+ let fC = eQ(eR)
1374+ let ev = split(fC[aq], "_")
1375+ let eu = split(eW[ah], "_")
1376+ let gX = if ((gH == cx))
1377+ then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2))
1378+ else if ((gH == cy))
1379+ then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an]))
13561380 else {
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))
1381+ let gY = et(eu, ev, ew, ex)
1382+ let gZ = min([parseIntValue(fr[an]), ew._2])
1383+ $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ))
13601384 }
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]], "_")])
1385+ let ha = gX._1
1386+ let hb = gX._2
1387+ let hc = gX._3
1388+ let hd = gX._4
1389+ $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")])
13661390 }
13671391 }
13681392 }
13691393 }
13701394
13711395
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))
1396+func he (b,aF,gC,gH) = {
1397+ let gO = ax(aF)
1398+ let gP = value(getInteger(gO))
1399+ let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC)
1400+ gS(b, gU, gH, aF)
1401+ }
1402+
1403+
1404+func hf (cY,fY,hg,aF) = {
1405+ let b = toString(fY)
1406+ let dM = gG(b, cz, aF)
1407+ let gC = bT(dM._3[bI])
1408+ let hh = ay(dM._2)
1409+ let hi = valueOrElse(getInteger(hh), 0)
1410+ if ((hi >= 3))
13871411 then throw("Currently max infrastructure level = 3")
13881412 else {
1389- let O = (he + 1)
1390- let hf = fraction(cc, (gy * O), bj)
1413+ let O = (hi + 1)
1414+ let hj = fraction(cc, (gC * O), bj)
13911415 if (if (!(cY))
1392- then (hc != hf)
1416+ then (hg != hj)
13931417 else false)
1394- then throw(("Payment attached should be " + toString(hf)))
1418+ then throw(("Payment attached should be " + toString(hj)))
13951419 else {
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)
1420+ let eR = aO(dM._1)
1421+ let fC = eQ(eR)
1422+ let gy = split(fC[ar], "_")
1423+ let hk = fraction(be, (gC * O), bj)
1424+ let gz = makeString(cX(cY, gy, hk), "_")
1425+ let hl = he(b, dM._2, gC, cz)
1426+ let hm = hl._5
1427+ let hn = eT(hm[ag])
1428+ let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_")
1429+ let hp = eT(ho)
1430+ let fr = split(hm[ak], "_")
1431+ let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_")
1432+ $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk)
14091433 }
14101434 }
14111435 }
14121436
14131437
1414-func hn (p,ho) = if (!(aZ))
1438+func hr (p,hs) = if (!(aZ))
14151439 then $Tuple2(nil, 0)
14161440 else {
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)
1424- }
1425-
1426-
1427-func ht (b,ho) = if (!(aZ))
1441+ let ht = r(p)
1442+ let hu = q(p)
1443+ let I = valueOrElse(getInteger(bD, hu), 0)
1444+ let N = (I + hs)
1445+ let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1446+ let hw = s(p)
1447+ $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1448+ }
1449+
1450+
1451+func hx (b,hs) = if (!(aZ))
14281452 then $Tuple2(nil, 0)
14291453 else {
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)
1437- }
1438-
1439-
1440-func hu (b) = {
1454+ let ht = v(b)
1455+ let hu = u(b)
1456+ let I = valueOrElse(getInteger(bD, hu), 0)
1457+ let N = (I + hs)
1458+ let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1459+ let hw = w(b)
1460+ $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1461+ }
1462+
1463+
1464+func hy (b) = {
14411465 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1442- let hv = aI(b)
1443- let hw = getString(hv)
1444- if (!(isDefined(hw)))
1466+ let hz = aI(b)
1467+ let hA = getString(hz)
1468+ if (!(isDefined(hA)))
14451469 then throw("You are not eligible for ONBOARD artifact")
14461470 else {
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)))
1471+ let hB = aK(b)
1472+ let hC = getString(hB)
1473+ if (isDefined(hC))
1474+ then throw(("You already used your ONBOARD artifact on duck " + value(hC)))
14511475 else {
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)
1476+ let hD = aJ(p)
1477+ let hE = getString(hD)
1478+ if (isDefined(hE))
1479+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE)))
1480+ else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1)
14571481 }
14581482 }
14591483 }
14601484
14611485
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))
1486+func hF (b,gI) = {
1487+ let dM = gG(b, cz, gI)
1488+ let aF = dM._2
1489+ let gC = bT(dM._3[bI])
1490+ let hG = az(R, aF)
1491+ if ((valueOrElse(getInteger(hG), 0) > 0))
14681492 then throw("Presale artifact is already activated")
1469- else if ((parseIntValue(dI._3[bH]) > cl))
1493+ else if ((parseIntValue(dM._3[bH]) > cl))
14701494 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14711495 else {
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, ":")))
1496+ let hl = he(b, aF, gC, cz)
1497+ ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":")))
14741498 }
14751499 }
14761500
14771501
1478-func hD (hE,O,hF,b,hG,fV,hH) = {
1502+func hH (hI,O,hJ,b,hK,fZ,hL) = {
14791503 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1504+ func hM (cL,aF) = {
1505+ let gN = value(assetInfo(fromBase58String(aF)))
1506+ let gO = ax(aF)
1507+ let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked"))
1508+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1509+ if ((gQ != b))
14861510 then throw((P + " is not yours"))
14871511 else {
1488- let gN = split(gJ.description, "_")
1489- let fY = gN[bK]
1512+ let gR = split(gN.description, "_")
1513+ let gc = gR[bK]
14901514 if (if ((cL._3 != ""))
1491- then (cL._3 != fY)
1515+ then (cL._3 != gc)
14921516 else false)
14931517 then throw("Lands should be on the same continent to merge")
14941518 else {
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 = {
1519+ let bU = gR[bI]
1520+ let hN = cL._1
1521+ let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed")
1522+ let hO = (take(hN, ei) + drop(hN, (ei + 1)))
1523+ let gC = bT(bU)
1524+ let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1525+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1526+ let hQ = {
15031527 let bc = bU
15041528 if (("S" == bc))
15051529 then 3
15111535 then 6
15121536 else throw("Only S, M, L, XL can merge")
15131537 }
1514- if ((fh != hM))
1538+ if ((fl != hQ))
15151539 then throw("All lands should be maxed to merge")
15161540 else {
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)))
1541+ let co = gR[bH]
1542+ let ee = ek(gR[bJ])
1543+ let eo = (lastBlock.timestamp - gP)
1544+ if ((0 > eo))
1545+ then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp)))
15221546 else {
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)
1547+ let gT = gB(aF, gC)
1548+ let fk = (gC / bj)
1549+ let hb = em(split(cL._4, "_"), ee, eo, fk, gT)
1550+ let cV = ec(split(cL._6, "_"), ee, fk, -1)
1551+ let hR = cL._7
1552+ let bB = indexOf(hR, aF)
15291553 if (!(isDefined(bB)))
15301554 then throw(("Your staked lands don't contain " + aF))
15311555 else {
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))
1556+ let hS = aw(aF)
1557+ let hT = valueOrElse(getString(hS), "")
1558+ $Tuple8(hO, hP, gc, hb, (((((((((((((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(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC))
15351559 }
15361560 }
15371561 }
15391563 }
15401564 }
15411565
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), "_")
1566+ let eR = aO(p)
1567+ let fC = eQ(eR)
1568+ let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1569+ let hV = bM(b)
1570+ let hW = getString(hV)
1571+ let hX = if (isDefined(hW))
1572+ then split_51C(value(hW), "_")
15491573 else nil
15501574 let cW = {
1551- let cN = hG
1575+ let cN = hK
15521576 let cO = size(cN)
1553- let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0)
1577+ let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0)
15541578 func cQ (cR,cS) = if ((cS >= cO))
15551579 then cR
1556- else hI(cR, cN[cS])
1580+ else hM(cR, cN[cS])
15571581
15581582 func cT (cR,cS) = if ((cS >= cO))
15591583 then cR
15611585
15621586 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15631587 }
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)
1588+ let gc = cW._3
1589+ let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc))
1590+ let el = eK(eD(toBigInt(fZ)), eM)
1591+ let gb = valueOrElse(getInteger(cm()), (cl + 1))
1592+ let hY = toString(gb)
1593+ let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false)
1594+ let av = calculateAssetId(gd)
1595+ let hZ = toBase58String(av)
1596+ let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_")
1597+ let ia = bN(b)
1598+ let ib = valueOrElse(getInteger(ia), 0)
15751599 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1576- then StringEntry(hR, makeString_11C(cW._7, "_"))
1577- else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX))
1600+ then StringEntry(hV, makeString_11C(cW._7, "_"))
1601+ else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib))
15781602 then 0
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)
1603+ else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ)
1604+ }
1605+
1606+
1607+func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0)
1608+
1609+
1610+func id (b,hK,fZ,cY,hg) = {
1611+ let hj = (cc * 4)
15881612 if (if (!(cY))
1589- then (hc != hf)
1613+ then (hg != hj)
15901614 else false)
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)
1615+ then throw(("Payment attached should be " + toString(hj)))
1616+ else hH("L", 4, "SMM", b, hK, fZ, (be * 4))
1617+ }
1618+
1619+
1620+func ie (b,hK,fZ,cY,hg) = {
1621+ let hj = (cc * 47)
15981622 if (if (!(cY))
1599- then (hc != hf)
1623+ then (hg != hj)
16001624 else false)
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)
1625+ then throw(("Payment attached should be " + toString(hj)))
1626+ else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47))
1627+ }
1628+
1629+
1630+func if (b,hK,fZ,cY,hg) = {
1631+ let hj = (cc * 54)
16081632 if (if (!(cY))
1609- then (hc != hf)
1633+ then (hg != hj)
16101634 else false)
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)
1635+ then throw(("Payment attached should be " + toString(hj)))
1636+ else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54))
1637+ }
1638+
1639+
1640+func ig (cY,b,hg,hK,fZ) = {
1641+ let ih = {
1642+ let bc = size(hK)
16191643 if ((4 == bc))
1620- then hY(b, hG, fV)
1644+ then ic(b, hK, fZ)
16211645 else if ((3 == bc))
1622- then hZ(b, hG, fV, cY, hc)
1646+ then id(b, hK, fZ, cY, hg)
16231647 else if ((5 == bc))
1624- then ia(b, hG, fV, cY, hc)
1648+ then ie(b, hK, fZ, cY, hg)
16251649 else if ((2 == bc))
1626- then ib(b, hG, fV, cY, hc)
1650+ then if(b, hK, fZ, cY, hg)
16271651 else throw("Unknown merge")
16281652 }
1629- id
1630- }
1631-
1632-
1633-func ie (ee) = if (if ((ee.originCaller != bC))
1653+ ih
1654+ }
1655+
1656+
1657+func ii (ei) = if (if ((ei.originCaller != bC))
16341658 then valueOrElse(getBoolean(aR()), false)
16351659 else false)
16361660 then throw("Contracts are under maintenance")
1637- else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId))
1638-
1639-
1640-@Callable(ee)
1641-func constructorV1 (if) = if ((ee.caller != this))
1661+ else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId))
1662+
1663+
1664+@Callable(ei)
1665+func constructorV1 (ij) = if ((ei.caller != this))
16421666 then throw("Permission denied")
1643- else [StringEntry(bw(), if)]
1644-
1645-
1646-
1647-@Callable(ee)
1648-func setBlocked (ig) = if ((ee.caller != this))
1667+ else [StringEntry(bw(), ij)]
1668+
1669+
1670+
1671+@Callable(ei)
1672+func setBlocked (ik) = if ((ei.caller != this))
16491673 then throw("permission denied")
1650- else [BooleanEntry(aR(), ig)]
1651-
1652-
1653-
1654-@Callable(ee)
1674+ else [BooleanEntry(aR(), ik)]
1675+
1676+
1677+
1678+@Callable(ei)
16551679 func stakeLand () = {
1656- let ih = ie(ee)
1657- if ((size(ee.payments) != 1))
1680+ let il = ii(ei)
1681+ if ((size(ei.payments) != 1))
16581682 then throw("Exactly one payment required")
16591683 else {
1660- let ii = value(ee.payments[0])
1661- let av = value(ii.assetId)
1662- let bp = toString(ee.caller)
1663- if ((ii.amount != 1))
1684+ let im = value(ei.payments[0])
1685+ let av = value(im.assetId)
1686+ let bp = toString(ei.caller)
1687+ if ((im.amount != 1))
16641688 then throw((("NFT " + P) + " token should be attached as payment"))
16651689 else {
1666- let gJ = value(assetInfo(av))
1667- if ((gJ.issuer != this))
1690+ let gN = value(assetInfo(av))
1691+ if ((gN.issuer != this))
16681692 then throw("Unknown issuer of token")
1669- else if (!(contains(gJ.name, P)))
1693+ else if (!(contains(gN.name, P)))
16701694 then throw((("Only NFT " + P) + " tokens are accepted"))
16711695 else {
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)
1696+ let in = drop(gN.name, 4)
1697+ let co = if (contains(in, "XXL"))
1698+ then dropRight(in, 3)
1699+ else if (contains(in, "XL"))
1700+ then dropRight(in, 2)
1701+ else dropRight(in, 1)
16781702 if (!(isDefined(parseInt(co))))
1679- then throw(("Cannot parse land number from " + gJ.name))
1703+ then throw(("Cannot parse land number from " + gN.name))
16801704 else {
16811705 let aF = toBase58String(av)
1682- let gK = ax(aF)
1683- if (isDefined(getInteger(gK)))
1684- then throw((("NFT " + gJ.name) + " is already staked"))
1706+ let gO = ax(aF)
1707+ if (isDefined(getInteger(gO)))
1708+ then throw((("NFT " + gN.name) + " is already staked"))
16851709 else {
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), "_")
1710+ let gR = split(gN.description, "_")
1711+ let ee = ek(gR[bJ])
1712+ let gC = bT(gR[bI])
1713+ let cV = ej(ee, (gC / bj), 1)
1714+ let gD = valueOrElse(getInteger(az(R, aF)), 0)
1715+ let hV = bM(bp)
1716+ let hW = getString(hV)
1717+ let hR = if (isDefined(hW))
1718+ then split_51C(value(hW), "_")
16951719 else nil
1696- if (containsElement(hN, aF))
1720+ if (containsElement(hR, aF))
16971721 then throw(("Your staked lands already contain " + aF))
16981722 else {
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)
1723+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1724+ let ia = bN(bp)
1725+ let io = valueOrElse(getInteger(ia), 0)
1726+ let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1727+ $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip)
17041728 }
17051729 }
17061730 }
17111735
17121736
17131737
1714-@Callable(ee)
1715-func unstakeLand (gE) = {
1716- let ih = ie(ee)
1717- if ((size(ee.payments) != 0))
1738+@Callable(ei)
1739+func unstakeLand (gI) = {
1740+ let il = ii(ei)
1741+ if ((size(ei.payments) != 0))
17181742 then throw("No payments required")
17191743 else {
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)
1744+ let b = toString(ei.caller)
1745+ let dM = gG(b, cy, gI)
1746+ let aF = dM._2
1747+ let hV = bM(b)
1748+ let ee = ek(dM._3[bJ])
1749+ let gC = bT(dM._3[bI])
1750+ let cV = ej(ee, (gC / bj), -1)
1751+ let hl = he(b, aF, gC, cy)
1752+ let hR = split_51C(valueOrElse(getString(hV), ""), "_")
1753+ let bB = indexOf(hR, aF)
17301754 if (!(isDefined(bB)))
17311755 then throw(("Your staked lands don't contain " + aF))
17321756 else {
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)))
1757+ let iq = lastBlock.timestamp
1758+ let ir = valueOrElse(getInteger(bF, aS(b)), 0)
1759+ if ((ir >= iq))
1760+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir)))
17371761 else {
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)))
1762+ let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1763+ if ((is > iq))
1764+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is)))
17411765 else {
1742- let hW = bN(b)
1743- let hX = valueOrElse(getInteger(hW), 0)
1744- let ip = if ((gy > hX))
1766+ let ia = bN(b)
1767+ let ib = valueOrElse(getInteger(ia), 0)
1768+ let it = if ((gC > ib))
17451769 then 0
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)
1770+ else (ib - gC)
1771+ let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1772+ $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1))
1773+ then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_"))
1774+ else DeleteEntry(hV), IntegerEntry(ia, it), il], ip)
17511775 }
17521776 }
17531777 }
17561780
17571781
17581782
1759-@Callable(ee)
1783+@Callable(ei)
17601784 func stakeDuck () = {
1761- let ih = ie(ee)
1762- if ((size(ee.payments) != 1))
1785+ let il = ii(ei)
1786+ if ((size(ei.payments) != 1))
17631787 then throw("Exactly one payment required")
17641788 else {
1765- let ii = value(ee.payments[0])
1766- let av = value(ii.assetId)
1767- let bp = toString(ee.caller)
1768- if ((ii.amount != 1))
1789+ let im = value(ei.payments[0])
1790+ let av = value(im.assetId)
1791+ let bp = toString(ei.caller)
1792+ if ((im.amount != 1))
17691793 then throw((("NFT " + Q) + " token should be attached as payment"))
17701794 else {
1771- let gJ = value(assetInfo(av))
1772- if (if ((gJ.issuer != bV))
1773- then (gJ.issuer != bW)
1795+ let gN = value(assetInfo(av))
1796+ if (if ((gN.issuer != bV))
1797+ then (gN.issuer != bW)
17741798 else false)
17751799 then throw((("Unknown issuer of " + Q) + " token"))
1776- else if (!(contains(gJ.name, Q)))
1800+ else if (!(contains(gN.name, Q)))
17771801 then throw((("Only NFT " + Q) + " tokens are accepted"))
17781802 else {
1779- let iq = toBase58String(av)
1780- let gK = ax(iq)
1781- if (isDefined(getInteger(gK)))
1782- then throw((("NFT " + gJ.name) + " is already staked"))
1803+ let iu = toBase58String(av)
1804+ let gO = ax(iu)
1805+ if (isDefined(getInteger(gO)))
1806+ then throw((("NFT " + gN.name) + " is already staked"))
17831807 else if (isDefined(getString(aN(bp))))
1784- then throw(("You already staked one duck: " + gJ.name))
1808+ then throw(("You already staked one duck: " + gN.name))
17851809 else {
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))
1810+ let iv = aP(iu)
1811+ let iw = getString(iv)
1812+ let eR = aO(iu)
1813+ let ix = getString(eR)
1814+ let gr = aQ(iu)
1815+ let gs = J(valueOrElse(getInteger(r(iu)), 0))
1816+ let iy = valueOrElse(getInteger(gr), gs)
1817+ ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw))
17941818 then nil
1795- else ([StringEntry(ir, W)] ++ (if (isDefined(it))
1819+ else ([StringEntry(iv, W)] ++ (if (isDefined(ix))
17961820 then nil
1797- else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih)))))
1821+ else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il)))))
17981822 }
17991823 }
18001824 }
18031827
18041828
18051829
1806-@Callable(ee)
1807-func unstakeDuck (iq) = {
1808- let ih = ie(ee)
1809- if ((size(ee.payments) != 0))
1830+@Callable(ei)
1831+func unstakeDuck (iu) = {
1832+ let il = ii(ei)
1833+ if ((size(ei.payments) != 0))
18101834 then throw("No payments required")
18111835 else {
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"))
1836+ let av = fromBase58String(iu)
1837+ let bp = toString(ei.caller)
1838+ let gN = value(assetInfo(av))
1839+ let gO = ax(toBase58String(av))
1840+ if (!(isDefined(getInteger(gO))))
1841+ then throw((("NFT " + gN.name) + " is not staked"))
18181842 else if (!(isDefined(getString(aN(bp)))))
1819- then throw((("The duck " + gJ.name) + " is not staked"))
1843+ then throw((("The duck " + gN.name) + " is not staked"))
18201844 else {
1821- let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned"))
1822- if ((gM != bp))
1845+ let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned"))
1846+ if ((gQ != bp))
18231847 then throw("Staked NFT is not yours")
18241848 else {
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]
1849+ let gr = aQ(iu)
1850+ let gs = J(valueOrElse(getInteger(r(iu)), 0))
1851+ let iz = valueOrElse(getInteger(gr), gs)
1852+ if ((gs > iz))
1853+ then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking"))
1854+ else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il]
18311855 }
18321856 }
18331857 }
18351859
18361860
18371861
1838-@Callable(ee)
1839-func claimRes (fu,iw) = {
1840- let ih = ie(ee)
1841- if ((size(ee.payments) != 0))
1862+@Callable(ei)
1863+func claimRes (fy,iA) = {
1864+ let il = ii(ei)
1865+ if ((size(ei.payments) != 0))
18421866 then throw("No payments required")
18431867 else {
1844- let b = toString(ee.originCaller)
1845- let dd = gO(b, fu, cy, iw)
1868+ let b = toString(ei.originCaller)
1869+ let dd = gS(b, fy, cy, iA)
18461870 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1871+ $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq])
1872+ }
1873+ }
1874+
1875+
1876+
1877+@Callable(ei)
1878+func claimResToWH (fy,iA) = {
1879+ let il = ii(ei)
1880+ if ((size(ei.payments) != 0))
18571881 then throw("No payments required")
18581882 else {
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))
1883+ let b = toString(ei.originCaller)
1884+ let dd = gS(b, fy, cx, iA)
1885+ $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah])
1886+ }
1887+ }
1888+
1889+
1890+
1891+@Callable(ei)
1892+func flight (gg,gh) = {
1893+ let il = ii(ei)
1894+ if ((size(ei.payments) != 0))
18711895 then throw("No payments required")
18721896 else {
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))
1897+ let aT = toString(ei.caller)
1898+ let eN = gf(aT, gg, gh)
1899+ let p = eN._2
1900+ let iv = aP(p)
1901+ let gK = valueOrElse(getString(iv), W)
1902+ if ((eN._4 == gK))
18791903 then throw("You can't fly to the same location")
18801904 else {
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))
1905+ let eR = aO(p)
1906+ let fC = eQ(eR)
1907+ let dt = de(fC[as], eN._5)
1908+ $Tuple2(([StringEntry(iv, if ((eN._1 > 0))
1909+ then eN._4
1910+ else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0))
18871911 then y
1888- else z)._1), eJ._3)
1912+ else z)._1), eN._3)
18891913 }
18901914 }
18911915 }
18921916
18931917
18941918
1895-@Callable(ee)
1896-func heal (ix,iy,iz) = {
1897- let ih = ie(ee)
1898- if (if (if ((0 > ix))
1919+@Callable(ei)
1920+func heal (iB,iC,iD) = {
1921+ let il = ii(ei)
1922+ if (if (if ((0 > iB))
18991923 then true
1900- else (0 > iy))
1924+ else (0 > iC))
19011925 then true
1902- else (0 > iz))
1926+ else (0 > iD))
19031927 then throw("Quantity cannot be negative")
19041928 else {
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"))
1929+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1930+ let iE = [iB, iC, iD]
1931+ let gr = aQ(p)
1932+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1933+ let iF = valueOrElse(getInteger(gr), gs)
1934+ if ((iF >= gs))
1935+ then throw((("HP should be < " + toString(gs)) + " to heal"))
19121936 else {
1913- let eN = aO(p)
1914- let fy = eM(eN)
1915- let iC = if ((fy[as] == ""))
1937+ let eR = aO(p)
1938+ let fC = eQ(eR)
1939+ let iG = if ((fC[as] == ""))
19161940 then nil
1917- else split(fy[as], "_")
1918- func iD (cL,iE) = {
1941+ else split(fC[as], "_")
1942+ func iH (cL,iI) = {
19191943 let bS = cL._2
1920- let eA = if ((size(iC) > bS))
1921- then parseIntValue(iC[bS])
1944+ let eE = if ((size(iG) > bS))
1945+ then parseIntValue(iG[bS])
19221946 else 0
19231947 if ((3 > bS))
19241948 then {
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)))
1949+ let iJ = iE[bS]
1950+ if ((iJ > eE))
1951+ then throw(((("You have only " + toString(eE)) + " of ") + Z[bS]))
1952+ else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ)))
19291953 }
1930- else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3)
1954+ else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3)
19311955 }
19321956
19331957 let dd = {
19361960 let cP = $Tuple3(nil, 0, 0)
19371961 func cQ (cR,cS) = if ((cS >= cO))
19381962 then cR
1939- else iD(cR, cN[cS])
1963+ else iH(cR, cN[cS])
19401964
19411965 func cT (cR,cS) = if ((cS >= cO))
19421966 then cR
19441968
19451969 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)
19461970 }
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)
1971+ let iK = min([gs, (iF + dd._3)])
1972+ $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK)
19491973 }
19501974 }
19511975 }
19521976
19531977
19541978
1955-@Callable(ee)
1979+@Callable(ei)
19561980 func healES () = {
1957- let ih = ie(ee)
1958- if ((size(ee.payments) != 1))
1981+ let il = ii(ei)
1982+ if ((size(ei.payments) != 1))
19591983 then throw("Exactly one payment required")
19601984 else {
1961- let ii = value(ee.payments[0])
1962- if ((ii.assetId != bb))
1985+ let im = value(ei.payments[0])
1986+ if ((im.assetId != bb))
19631987 then throw("Allowed USDT payment only!")
19641988 else {
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))
1989+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1990+ let gr = aQ(p)
1991+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1992+ let iF = valueOrElse(getInteger(gr), gs)
1993+ if ((iF > 0))
19701994 then throw("HP should be 0 to call Emergency Service")
19711995 else {
1972- let eN = aO(p)
1973- let fy = eM(eN)
1974- let iC = if ((fy[as] == ""))
1996+ let eR = aO(p)
1997+ let fC = eQ(eR)
1998+ let iG = if ((fC[as] == ""))
19751999 then nil
1976- else split(fy[as], "_")
1977- let iH = if ((size(iC) > 0))
1978- then parseIntValue(iC[0])
2000+ else split(fC[as], "_")
2001+ let iL = if ((size(iG) > 0))
2002+ then parseIntValue(iG[0])
19792003 else 0
1980- let iI = if ((size(iC) > 1))
1981- then parseIntValue(iC[1])
2004+ let iM = if ((size(iG) > 1))
2005+ then parseIntValue(iG[1])
19822006 else 0
1983- let iJ = if ((size(iC) > 2))
1984- then parseIntValue(iC[2])
2007+ let iN = if ((size(iG) > 2))
2008+ then parseIntValue(iG[2])
19852009 else 0
1986- if (if (if ((iH > 0))
2010+ if (if (if ((iL > 0))
19872011 then true
1988- else (iI > 0))
2012+ else (iM > 0))
19892013 then true
1990- else (iJ > 0))
2014+ else (iN > 0))
19912015 then throw("You have to use own Medical Kit")
19922016 else {
1993- let iK = getString(bE, aU())
1994- let iL = if (isDefined(iK))
1995- then split(value(iK), "_")
2017+ let iO = getString(bE, aU())
2018+ let iP = if (isDefined(iO))
2019+ then split(value(iO), "_")
19962020 else nil
1997- let iM = if ((size(iL) > 0))
1998- then parseIntValue(iL[0])
2021+ let iQ = if ((size(iP) > 0))
2022+ then parseIntValue(iP[0])
19992023 else 0
2000- if ((0 >= iM))
2024+ if ((0 >= iQ))
20012025 then throw("There are no Medical Kits L1 at Emergency Service storage")
20022026 else {
2003- let iG = (iB + bY[0])
2004- let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_")
2027+ let iK = (iF + bY[0])
2028+ let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_")
20052029 let aY = split(ac[0], "_")
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)))
2030+ let iS = aX(aY)
2031+ let iT = fraction((iS * Y), X, (10 * af))
2032+ if ((im.amount != iT))
2033+ then throw(("Payment attached should be " + toString(iT)))
20102034 else {
2011- let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)]))
2012- $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd)
2035+ let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)]))
2036+ $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd)
20132037 }
20142038 }
20152039 }
20202044
20212045
20222046
2023-@Callable(ee)
2024-func updateBackpack (p,iQ) = if ((ee.caller != bE))
2047+@Callable(ei)
2048+func updateBackpack (p,iU) = if ((ei.caller != bE))
20252049 then throw("permission denied")
2026- else $Tuple2([StringEntry(aO(p), iQ)], iQ)
2027-
2028-
2029-
2030-@Callable(ee)
2050+ else $Tuple2([StringEntry(aO(p), iU)], iU)
2051+
2052+
2053+
2054+@Callable(ei)
20312055 func buySLand () = {
2032- let ih = ie(ee)
2033- if ((size(ee.payments) != 1))
2056+ let il = ii(ei)
2057+ if ((size(ei.payments) != 1))
20342058 then throw("Exactly one payment required")
20352059 else {
2036- let ii = value(ee.payments[0])
2037- if ((ii.assetId != bb))
2060+ let im = value(ei.payments[0])
2061+ if ((im.assetId != bb))
20382062 then throw("Allowed USDT payment only!")
2039- else if ((ii.amount != ce))
2063+ else if ((im.amount != ce))
20402064 then throw(("Payment attached should be " + toString(ce)))
20412065 else {
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)
2066+ let dd = fX(ei.caller, ei.transactionId)
2067+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1)
20442068 }
20452069 }
20462070 }
20472071
20482072
20492073
2050-@Callable(ee)
2051-func expedition (gc,gd) = {
2052- let ih = ie(ee)
2053- if ((size(ee.payments) != 0))
2074+@Callable(ei)
2075+func expedition (gg,gh) = {
2076+ let il = ii(ei)
2077+ if ((size(ei.payments) != 0))
20542078 then throw("No payments required")
20552079 else {
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)
2080+ let dd = gx(ei.caller, ei.transactionId, gg, gh)
2081+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2082+ $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3))
2083+ }
2084+ }
2085+
2086+
2087+
2088+@Callable(ei)
20652089 func upgradeInfra (aF) = {
2066- let ih = ie(ee)
2067- if ((size(ee.payments) != 0))
2090+ let il = ii(ei)
2091+ if ((size(ei.payments) != 0))
20682092 then throw("No payments required")
20692093 else {
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))
2094+ let dd = hf(true, ei.caller, 0, aF)
2095+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2096+ $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2)
2097+ }
2098+ }
2099+
2100+
2101+
2102+@Callable(ei)
2103+func upgradeInfraUsdt (aF) = if ((ei.caller != this))
20802104 then throw("Permission denied")
20812105 else {
2082- let ih = ie(ee)
2083- if ((size(ee.payments) != 1))
2106+ let il = ii(ei)
2107+ if ((size(ei.payments) != 1))
20842108 then throw("Exactly one payment required")
20852109 else {
2086- let ii = value(ee.payments[0])
2087- if ((ii.assetId != bb))
2110+ let im = value(ei.payments[0])
2111+ if ((im.assetId != bb))
20882112 then throw("Allowed USDT payment only!")
20892113 else {
2090- let dd = hb(false, ee.caller, ii.amount, aF)
2091- $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
2114+ let dd = hf(false, ei.caller, im.amount, aF)
2115+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
20922116 }
20932117 }
20942118 }
20952119
20962120
20972121
2098-@Callable(ee)
2099-func activateArtifact (iR,iS) = {
2100- let ih = ie(ee)
2101- if ((size(ee.payments) != 0))
2122+@Callable(ei)
2123+func activateArtifact (iV,iW) = {
2124+ let il = ii(ei)
2125+ if ((size(ei.payments) != 0))
21022126 then throw("No payments required")
21032127 else {
2104- let b = toString(ee.caller)
2128+ let b = toString(ei.caller)
21052129 let dd = {
2106- let bc = iR
2130+ let bc = iV
21072131 if (("PRESALE" == bc))
2108- then hB(b, iS)
2132+ then hF(b, iW)
21092133 else if (("ONBOARD" == bc))
2110- then hu(b)
2134+ then hy(b)
21112135 else throw("Unknown artifact")
21122136 }
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))
2137+ (dd :+ il)
2138+ }
2139+ }
2140+
2141+
2142+
2143+@Callable(ei)
2144+func mergeLands (hK) = {
2145+ let il = ii(ei)
2146+ if ((size(ei.payments) != 0))
21232147 then throw("No payments required")
21242148 else {
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))
2149+ let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId)
2150+ $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2)
2151+ }
2152+ }
2153+
2154+
2155+
2156+@Callable(ei)
2157+func mergeLandsUsdt (hK) = {
2158+ let il = ii(ei)
2159+ if ((size(ei.payments) != 1))
21362160 then throw("Exactly one payment required")
21372161 else {
2138- let ii = value(ee.payments[0])
2139- if ((ii.assetId != bb))
2162+ let im = value(ei.payments[0])
2163+ if ((im.assetId != bb))
21402164 then throw("Allowed USDT payment only!")
21412165 else {
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)
2166+ let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId)
2167+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
21442168 }
21452169 }
21462170 }
21472171
21482172
21492173
2150-@Callable(ee)
2151-func cargoExchange (iT,aF) = {
2152- let ih = ie(ee)
2153- if ((size(ee.payments) != 0))
2174+@Callable(ei)
2175+func cargoExchange (iX,aF) = {
2176+ let il = ii(ei)
2177+ if ((size(ei.payments) != 0))
21542178 then throw("No payments required")
21552179 else {
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"))
2180+ let fB = split_4C(iX, ":")
2181+ let b = toString(ei.originCaller)
2182+ let gN = value(assetInfo(fromBase58String(aF)))
2183+ let gO = ax(aF)
2184+ if (!(isDefined(getInteger(gO))))
2185+ then throw((gN.name + " is not staked"))
21622186 else {
2163- let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
2164- if ((gM != b))
2187+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
2188+ if ((gQ != b))
21652189 then throw((P + " is not yours"))
21662190 else {
2167- let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2168- let fh = valueOrElse(getInteger(ay(aF)), 0)
2191+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2192+ let fl = valueOrElse(getInteger(ay(aF)), 0)
21692193 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
2194+ let gK = valueOrElse(getString(aP(p)), W)
2195+ let gL = split(value(gK), "_")
2196+ if ((gL[aV] != "L"))
2197+ then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
2198+ else if ((gL[aW] != aF))
21752199 then throw(("Duck should be on the land " + aF))
21762200 else {
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]
2201+ let fj = aE(aF)
2202+ let eW = fi(fj, fk, fl)
2203+ let eR = aO(p)
2204+ let fC = eQ(eR)
2205+ let dd = fA(fB, eW, fC)
2206+ let fr = split(eW[ak], "_")
2207+ let hc = (parseIntValue(fr[am]) + dd._7)
2208+ let hd = (parseIntValue(fr[an]) - dd._7)
2209+[StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il]
21862210 }
21872211 }
21882212 }
21912215
21922216
21932217
2194-@Callable(ee)
2195-func saveWarehouse (fj,aF) = if ((ee.caller != bE))
2218+@Callable(ei)
2219+func saveWarehouse (fn,aF) = if ((ei.caller != bE))
21962220 then throw("Access denied")
21972221 else {
2198- let ff = aE(aF)
2199- let fk = split_4C(fj, ":")
2200- if ((size(fk) != 5))
2222+ let fj = aE(aF)
2223+ let fo = split_4C(fn, ":")
2224+ if ((size(fo) != 5))
22012225 then throw("warehouse string should contain 4 ':' separators")
22022226 else {
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)
2227+ let iY = split(fo[ak], "_")[al]
2228+ let hc = eV(fo)
2229+ let iZ = eT(fo[ag])
2230+ let hd = ((iZ - parseIntValue(iY)) - hc)
2231+ let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":")
2232+ $Tuple2([StringEntry(fj, ja)], ja)
22092233 }
22102234 }
22112235
22122236
22132237
2214-@Callable(ee)
2215-func fixWarehouseFormat (aF) = if ((ee.caller != bC))
2238+@Callable(ei)
2239+func fixWarehouseFormat (aF) = if ((ei.caller != bC))
22162240 then throw("Access denied")
22172241 else {
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)
2229- }
2230-
2231-
2232-
2233-@Callable(ee)
2234-func fixStakedPieces (bp) = if ((ee.caller != bC))
2242+ let fj = aE(aF)
2243+ let gN = value(assetInfo(fromBase58String(aF)))
2244+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2245+ let fl = valueOrElse(getInteger(ay(aF)), 0)
2246+ let fo = fi(fj, fk, fl)
2247+ let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil))
2248+ let hc = eV(fo)
2249+ let iZ = eT(fo[ag])
2250+ let hd = ((iZ - iY) - hc)
2251+ let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":")
2252+ $Tuple2([StringEntry(fj, ja)], ja)
2253+ }
2254+
2255+
2256+
2257+@Callable(ei)
2258+func fixStakedPieces (bp) = if ((ei.caller != bC))
22352259 then throw("Access denied")
22362260 else {
2237- let hX = if ((bp == ""))
2261+ let ib = if ((bp == ""))
22382262 then 0
22392263 else {
2240- let hS = getString(bD, bM(bp))
2241- let hN = if (isDefined(hS))
2242- then split_51C(value(hS), "_")
2264+ let hW = getString(bD, bM(bp))
2265+ let hR = if (isDefined(hW))
2266+ then split_51C(value(hW), "_")
22432267 else nil
2244- func iX (cL,aF) = {
2245- let gJ = value(assetInfo(fromBase58String(aF)))
2246- let bU = split(gJ.description, "_")[bI]
2268+ func jb (cL,aF) = {
2269+ let gN = value(assetInfo(fromBase58String(aF)))
2270+ let bU = split(gN.description, "_")[bI]
22472271 (cL + bT(bU))
22482272 }
22492273
2250- let cN = hN
2274+ let cN = hR
22512275 let cO = size(cN)
22522276 let cP = 0
22532277 func cQ (cR,cS) = if ((cS >= cO))
22542278 then cR
2255- else iX(cR, cN[cS])
2279+ else jb(cR, cN[cS])
22562280
22572281 func cT (cR,cS) = if ((cS >= cO))
22582282 then cR
22602284
22612285 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)
22622286 }
2263- $Tuple2([IntegerEntry(bN(bp), hX)], hX)
2264- }
2265-
2266-
2267-
2268-@Callable(ee)
2269-func setCustomName (av,hP,aA) = {
2270- let ih = ie(ee)
2271- if ((size(ee.payments) != 1))
2287+ $Tuple2([IntegerEntry(bN(bp), ib)], ib)
2288+ }
2289+
2290+
2291+
2292+@Callable(ei)
2293+func setCustomName (av,hT,aA) = {
2294+ let il = ii(ei)
2295+ if ((size(ei.payments) != 1))
22722296 then throw("Exactly one payment required")
22732297 else {
2274- let ii = value(ee.payments[0])
2275- if ((ii.assetId != bb))
2298+ let im = value(ei.payments[0])
2299+ if ((im.assetId != bb))
22762300 then throw("Allowed USDT payment only!")
2277- else if ((ii.amount != ca))
2301+ else if ((im.amount != ca))
22782302 then throw(("Payment should be " + toString(ca)))
2279- else if (contains(hP, "__"))
2280- then throw(("Name should not contain '__': " + hP))
2281- else if ((size(hP) > cb))
2303+ else if (contains(hT, "__"))
2304+ then throw(("Name should not contain '__': " + hT))
2305+ else if ((size(hT) > cb))
22822306 then throw(("Name too long, maxLength=" + toString(cb)))
22832307 else {
2284- let b = toString(ee.originCaller)
2285- let iY = {
2308+ let b = toString(ei.originCaller)
2309+ let jc = {
22862310 let bc = aA
22872311 if (("ACCOUNT" == bc))
22882312 then {
2289- let iZ = cv(hP)
2290- let ja = getString(iZ)
2291- if (isDefined(ja))
2292- then throw(("Name already registered: " + hP))
2313+ let jd = cv(hT)
2314+ let je = getString(jd)
2315+ if (isDefined(je))
2316+ then throw(("Name already registered: " + hT))
22932317 else {
2294- let jb = aH(b)
2295- let jc = getString(jb)
2296- let jd = if (isDefined(jc))
2297- then [DeleteEntry(cv(value(jc)))]
2318+ let jf = aH(b)
2319+ let jg = getString(jf)
2320+ let jh = if (isDefined(jg))
2321+ then [DeleteEntry(cv(value(jg)))]
22982322 else nil
2299- (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1)
2323+ (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1)
23002324 }
23012325 }
23022326 else if (("LAND" == bc))
23032327 then {
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"))
2328+ let gN = value(assetInfo(fromBase58String(av)))
2329+ let gO = ax(av)
2330+ if (!(isDefined(getInteger(gO))))
2331+ then throw((gN.name + " is not staked"))
23082332 else {
2309- let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned"))
2310- if ((gM != b))
2333+ let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned"))
2334+ if ((gQ != b))
23112335 then throw((P + " is not yours"))
23122336 else {
2313- let iZ = cp(hP)
2314- let ja = getString(iZ)
2315- if (isDefined(ja))
2316- then throw(("Name already registered: " + hP))
2337+ let jd = cp(hT)
2338+ let je = getString(jd)
2339+ if (isDefined(je))
2340+ then throw(("Name already registered: " + hT))
23172341 else {
2318- let je = aw(av)
2319- let jc = getString(je)
2320- let jd = if (isDefined(jc))
2321- then [DeleteEntry(cp(value(jc)))]
2342+ let ji = aw(av)
2343+ let jg = getString(ji)
2344+ let jh = if (isDefined(jg))
2345+ then [DeleteEntry(cp(value(jg)))]
23222346 else nil
2323- (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1)
2347+ (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1)
23242348 }
23252349 }
23262350 }
23272351 }
23282352 else if (("DUCK" == bc))
23292353 then {
2330- let gJ = value(assetInfo(fromBase58String(av)))
2331- let gK = ax(av)
2332- if (if (!(isDefined(getInteger(gK))))
2354+ let gN = value(assetInfo(fromBase58String(av)))
2355+ let gO = ax(av)
2356+ if (if (!(isDefined(getInteger(gO))))
23332357 then true
23342358 else !(isDefined(getString(aN(b)))))
2335- then throw((gJ.name + " is not staked"))
2359+ then throw((gN.name + " is not staked"))
23362360 else {
2337- let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned"))
2338- if ((gM != b))
2361+ let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned"))
2362+ if ((gQ != b))
23392363 then throw((Q + " is not yours"))
23402364 else {
2341- let iZ = cu(hP)
2342- let ja = getString(iZ)
2343- if (isDefined(ja))
2344- then throw(("Name already registered: " + hP))
2365+ let jd = cu(hT)
2366+ let je = getString(jd)
2367+ if (isDefined(je))
2368+ then throw(("Name already registered: " + hT))
23452369 else {
2346- let je = aG(av)
2347- let jc = getString(je)
2348- let jd = if (isDefined(jc))
2349- then [DeleteEntry(cu(value(jc)))]
2370+ let ji = aG(av)
2371+ let jg = getString(ji)
2372+ let jh = if (isDefined(jg))
2373+ then [DeleteEntry(cu(value(jg)))]
23502374 else nil
2351- (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1)
2375+ (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1)
23522376 }
23532377 }
23542378 }
23552379 }
23562380 else throw("Unknown entity type")
23572381 }
2358- $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0)
2382+ $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0)
23592383 }
23602384 }
23612385 }
23622386
23632387
23642388
2365-@Callable(ee)
2366-func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX))
2389+@Callable(ei)
2390+func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX))
23672391 then throw("Permission denied")
23682392 else {
2369- let ih = ie(ee)
2370- if ((size(ee.payments) != 0))
2393+ let il = ii(ei)
2394+ if ((size(ei.payments) != 0))
23712395 then throw("No payments required")
2372- else if (!(isDefined(addressFromString(jf))))
2373- then throw(("Invalid address: " + jf))
2374- else if (!(isDefined(addressFromString(jg))))
2375- then throw(("Invalid address: " + jg))
2396+ else if (!(isDefined(addressFromString(jj))))
2397+ then throw(("Invalid address: " + jj))
2398+ else if (!(isDefined(addressFromString(jk))))
2399+ then throw(("Invalid address: " + jk))
23762400 else {
2377- let jh = cw()
2378- let ji = getString(jh)
2379- let jj = if (isDefined(ji))
2380- then split_4C(value(ji), "_")
2401+ let jl = cw()
2402+ let jm = getString(jl)
2403+ let jn = if (isDefined(jm))
2404+ then split_4C(value(jm), "_")
23812405 else nil
2382- if (containsElement(jj, jg))
2383- then throw((jg + " is not newbie (already has referrals)"))
2406+ if (containsElement(jn, jk))
2407+ then throw((jk + " is not newbie (already has referrals)"))
23842408 else {
2385- let hv = aI(jg)
2386- let hw = getString(hv)
2387- if (if (isDefined(hw))
2388- then isDefined(addressFromString(value(hw)))
2409+ let hz = aI(jk)
2410+ let hA = getString(hz)
2411+ if (if (isDefined(hA))
2412+ then isDefined(addressFromString(value(hA)))
23892413 else false)
2390- then throw(((jg + " already has refBy: ") + value(hw)))
2414+ then throw(((jk + " already has refBy: ") + value(hA)))
23912415 else {
2392- let jk = aL(jf)
2393- let jl = getString(jk)
2394- let jm = if (isDefined(jl))
2395- then split_4C(value(jl), "_")
2416+ let jo = aL(jj)
2417+ let jp = getString(jo)
2418+ let jq = if (isDefined(jp))
2419+ then split_4C(value(jp), "_")
23962420 else nil
2397- if (containsElement(jm, jg))
2398- then throw((((jf + " already contains ") + jg) + " within referrals"))
2421+ if (containsElement(jq, jk))
2422+ then throw((((jj + " already contains ") + jk) + " within referrals"))
23992423 else {
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)
2424+ let jr = makeString_2C((jq :+ jk), "_")
2425+ let js = if (containsElement(jn, jj))
2426+ then value(jm)
2427+ else makeString_2C((jn :+ jj), "_")
2428+ $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0)
24052429 }
24062430 }
24072431 }
24102434
24112435
24122436
2413-@Callable(ee)
2414-func distributePoints (jp,jq,jr,js,jt) = {
2415- let ih = ie(ee)
2416- if ((size(ee.payments) != 0))
2437+@Callable(ei)
2438+func distributePoints (jt,ju,jv,jw,jx) = {
2439+ let il = ii(ei)
2440+ if ((size(ei.payments) != 0))
24172441 then throw("No payments required")
24182442 else {
2419- let b = toString(ee.originCaller)
2443+ let b = toString(ei.originCaller)
24202444 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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"))
2445+ let jy = w(b)
2446+ let jz = valueOrElse(getInteger(bD, jy), 0)
2447+ let jA = s(p)
2448+ let jB = valueOrElse(getInteger(bD, jA), 0)
2449+ let jC = (jz + jB)
2450+ let jD = ((((jt + ju) + jv) + jw) + jx)
2451+ if ((jD > jC))
2452+ then throw((("There are only " + toString(jC)) + " free points to distribute"))
24292453 else {
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))
2454+ let jE = o(p)
2455+ let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_")
2456+ let jG = (jz - jD)
2457+ $Tuple2([IntegerEntry(jy, if ((0 > jG))
24342458 then 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)
2459+ else jG), IntegerEntry(jA, if ((0 > jG))
2460+ then (jB + jG)
2461+ else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0)
24382462 }
24392463 }
24402464 }
24412465
24422466
24432467
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)
2468+@Callable(ei)
2469+func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy))
2470+
2471+
2472+
2473+@Callable(ei)
2474+func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = {
2475+ let ee = ek(el)
2476+ $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee)))
2477+ }
2478+
2479+
2480+
2481+@Callable(ei)
2482+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":"))
2483+
2484+
2485+
2486+@Callable(ei)
24632487 func getWarehouseREADONLY (aF) = {
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)
2488+ let gN = value(assetInfo(fromBase58String(aF)))
2489+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2490+ let fl = valueOrElse(getInteger(ay(aF)), 0)
2491+ $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":"))
2492+ }
2493+
2494+
2495+
2496+@Callable(ei)
2497+func saveLastTx () = if (if ((ei.caller != bG))
2498+ then (ei.caller != bE)
24752499 else false)
24762500 then throw("Access denied")
2477- else $Tuple2([ie(ee)], 42)
2478-
2479-
2480-
2481-@Callable(ee)
2482-func updateDuckStats (p,ho) = if ((ee.caller != bE))
2501+ else $Tuple2([ii(ei)], 42)
2502+
2503+
2504+
2505+@Callable(ei)
2506+func updateDuckStats (p,hs) = if ((ei.caller != bE))
24832507 then throw("Access denied")
2484- else hn(p, ho)
2485-
2486-
2487-
2488-@Callable(ee)
2489-func updateAccStats (b,ho) = if ((ee.caller != bE))
2508+ else hr(p, hs)
2509+
2510+
2511+
2512+@Callable(ei)
2513+func updateAccStats (b,hs) = if ((ei.caller != bE))
24902514 then throw("Access denied")
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))
2515+ else hx(b, hs)
2516+
2517+
2518+
2519+@Callable(ei)
2520+func equipDuck (jJ) = {
2521+ let il = ii(ei)
2522+ if ((size(ei.payments) != 0))
24992523 then throw("No payments required")
25002524 else {
2501- let b = toString(ee.originCaller)
2525+ let b = toString(ei.originCaller)
25022526 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
2527+ let jK = t(p)
2528+ let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2529+ let eR = aO(p)
2530+ let fC = eQ(eR)
2531+ let jM = split(jJ, "_")
2532+ if ((size(jM) != l))
25092533 then throw("Wrong equipment string")
25102534 else {
2511- let jJ = fy[as]
2512- let dh = if ((jJ == ""))
2535+ let jN = fC[as]
2536+ let dh = if ((jN == ""))
25132537 then nil
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)
2538+ else split(jN, "_")
2539+ let jO = dX(jL, dh, true)
2540+ let dt = dX(jM, jO, false)
2541+ $Tuple2([StringEntry(jK, jJ), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dt, "_")], ":")), il], 0)
25182542 }
25192543 }
25202544 }
25212545
25222546
25232547
2524-@Callable(ee)
2525-func test () = if ((ee.caller != this))
2548+@Callable(ei)
2549+func test () = if ((ei.caller != this))
25262550 then throw("Access denied")
2527- else $Tuple2(nil, du(""))
2551+ else {
2552+ let dq = du("")
2553+ let dA = dx(dq)
2554+ $Tuple2(nil, dA)
2555+ }
25282556
25292557
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
605605 func du (dv) = {
606606 let dh = if ((dv == ""))
607607 then nil
608608 else split(dv, "_")
609609 func dw (cL,aY) = {
610610 let dk = (size(cL) / 8)
611611 let dr = if ((size(dh) > dk))
612612 then parseIntValue(dh[dk])
613613 else 0
614614 (cL + toBytes(dr))
615615 }
616616
617617 let cN = ac
618618 let cO = size(cN)
619619 let cP = base58''
620620 func cQ (cR,cS) = if ((cS >= cO))
621621 then cR
622622 else dw(cR, cN[cS])
623623
624624 func cT (cR,cS) = if ((cS >= cO))
625625 then cR
626626 else throw("List size exceeds 50")
627627
628628 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)
629629 }
630630
631631
632-func dx (dy,dh,dz,dA,dB,dC) = {
633- let do = split(dy, ":")
632+func dx (dy) = {
633+ func dz (cL,aY) = {
634+ let dk = size(cL)
635+ let dA = take(drop(dy, (8 * dk)), 8)
636+ (cL :+ toString(toInt(dA)))
637+ }
638+
639+ makeString({
640+ let cN = ac
641+ let cO = size(cN)
642+ let cP = nil
643+ func cQ (cR,cS) = if ((cS >= cO))
644+ then cR
645+ else dz(cR, cN[cS])
646+
647+ func cT (cR,cS) = if ((cS >= cO))
648+ then cR
649+ else throw("List size exceeds 50")
650+
651+ 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)
652+ }, "_")
653+ }
654+
655+
656+func dB (dC,dh,dD,dE,dF,dG) = {
657+ let do = split(dC, ":")
634658 if ((size(do) != 2))
635659 then throw("Incorrect format, should be index:amount")
636660 else {
637- let dD = parseIntValue(do[0])
638- let dE = parseIntValue(do[1])
639- if (if ((0 > dD))
661+ let dH = parseIntValue(do[0])
662+ let dI = parseIntValue(do[1])
663+ if (if ((0 > dH))
640664 then true
641- else (dD >= size(ac)))
665+ else (dH >= size(ac)))
642666 then throw("Unknown product idx")
643- else if ((0 > dE))
667+ else if ((0 > dI))
644668 then throw("Count can't be negative")
645- else if ((dE == 0))
669+ else if ((dI == 0))
646670 then $Tuple2(dh, false)
647671 else {
648- func dF (cL,dj) = {
672+ func dJ (cL,dj) = {
649673 let dk = cL._1
650674 let dr = if ((size(dh) > dk))
651675 then parseIntValue(dh[dk])
652676 else 0
653- if ((dD != dk))
677+ if ((dH != dk))
654678 then $Tuple3((dk + 1), (cL._2 :+ toString(dr)), cL._3)
655- else if (if (!(dz))
656- then (dE > dr)
679+ else if (if (!(dD))
680+ then (dI > dr)
657681 else false)
658- then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dE)))
682+ then throw(((((("You have " + toString(dr)) + " of ") + Z[dk]) + ", but tried to use ") + toString(dI)))
659683 else {
660- let dG = if (!(dz))
684+ let dK = if (!(dD))
661685 then {
662- let dH = split(dj, "_")[ae]
663- if ((dH == ""))
686+ let dL = split(dj, "_")[ae]
687+ if ((dL == ""))
664688 then throw("Item cannot be equipped")
665689 else {
666- let dI = parseIntValue(dH)
667- let dJ = (dI / 100)
668- if ((dA != dJ))
690+ let dM = parseIntValue(dL)
691+ let dN = (dM / 100)
692+ if ((dE != dN))
669693 then throw("Segment incompatible")
670694 else {
671- let dK = ((dI % 100) / 10)
672- if ((dB != dK))
695+ let dO = ((dM % 100) / 10)
696+ if ((dF != dO))
673697 then throw("Slot incompatible")
674698 else {
675- let dL = (dI % 10)
676- if (if ((dC != 0))
677- then (dL > 1)
699+ let dP = (dM % 10)
700+ if (if ((dG != 0))
701+ then (dP > 1)
678702 else false)
679703 then throw("Big items should occupy slot 0")
680- else (dL > 1)
704+ else (dP > 1)
681705 }
682706 }
683707 }
684708 }
685709 else false
686- $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dz)
687- then dE
688- else -(dE))))), if (cL._3)
710+ $Tuple3((dk + 1), (cL._2 :+ toString((dr + (if (dD)
711+ then dI
712+ else -(dI))))), if (cL._3)
689713 then true
690- else dG)
714+ else dK)
691715 }
692716 }
693717
694718 let dd = {
695719 let cN = ac
696720 let cO = size(cN)
697721 let cP = $Tuple3(0, nil, false)
698722 func cQ (cR,cS) = if ((cS >= cO))
699723 then cR
700- else dF(cR, cN[cS])
724+ else dJ(cR, cN[cS])
701725
702726 func cT (cR,cS) = if ((cS >= cO))
703727 then cR
704728 else throw("List size exceeds 27")
705729
706730 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)
707731 }
708732 $Tuple2(dd._2, dd._3)
709733 }
710734 }
711735 }
712736
713737
714-func dM (dN,dO,dz,dA,dB) = if ((dN != ""))
738+func dQ (dR,dS,dD,dE,dF) = if ((dR != ""))
715739 then {
716- let dP = split(dN, ",")
717- if ((size(dP) > n))
740+ let dT = split(dR, ",")
741+ if ((size(dT) > n))
718742 then throw("Wrong slots format")
719743 else {
720- let dQ = dP[0]
721- let dR = if ((size(dP) > 1))
722- then dP[1]
744+ let dU = dT[0]
745+ let dV = if ((size(dT) > 1))
746+ then dT[1]
723747 else ""
724- if (if ((dQ == ""))
725- then (dR == "")
748+ if (if ((dU == ""))
749+ then (dV == "")
726750 else false)
727- then dO
751+ then dS
728752 else {
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)
753+ let dW = if ((dU != ""))
754+ then dB(dU, dS, dD, dE, dF, 0)
755+ else $Tuple2(dS, false)
756+ if ((dV != ""))
757+ then if (dW._2)
734758 then throw("Big item already occupies slot")
735- else dx(dR, dS._1, dz, dA, dB, 1)._1
736- else dS._1
759+ else dB(dV, dW._1, dD, dE, dF, 1)._1
760+ else dW._1
737761 }
738762 }
739763 }
740- else dO
741-
742-
743-func dT (dU,dh,dz) = {
744- func dA (cL,dV) = {
764+ else dS
765+
766+
767+func dX (dY,dh,dD) = {
768+ func dE (cL,dZ) = {
745769 let dk = cL._1
746- let dB = split(dV, ";")
747- if ((size(dB) != m))
770+ let dF = split(dZ, ";")
771+ if ((size(dF) != m))
748772 then throw("Wrong segment format")
749773 else {
750- let dW = dB[0]
751- let dq = dB[1]
752- if (if ((dW == ""))
774+ let ea = dF[0]
775+ let dq = dF[1]
776+ if (if ((ea == ""))
753777 then (dq == "")
754778 else false)
755779 then $Tuple2((dk + 1), cL._2)
756780 else {
757- let dX = dM(dW, cL._2, dz, dk, 0)
758- $Tuple2((dk + 1), dM(dq, dX, dz, dk, 1))
781+ let eb = dQ(ea, cL._2, dD, dk, 0)
782+ $Tuple2((dk + 1), dQ(dq, eb, dD, dk, 1))
759783 }
760784 }
761785 }
762786
763-( let cN = dU
787+( let cN = dY
764788 let cO = size(cN)
765789 let cP = $Tuple2(0, dh)
766790 func cQ (cR,cS) = if ((cS >= cO))
767791 then cR
768- else dA(cR, cN[cS])
792+ else dE(cR, cN[cS])
769793
770794 func cT (cR,cS) = if ((cS >= cO))
771795 then cR
772796 else throw("List size exceeds 6")
773797
774798 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6))._2
775799 }
776800
777801
778-func dY (dZ,ea,eb,ec) = if ((size(dZ) != S))
802+func ec (ed,ee,ef,eg) = if ((size(ed) != S))
779803 then throw("Wrong proportions data")
780804 else {
781- func ed (cL,ee) = {
782- let dd = (parseIntValue(dZ[ee]) + ((ec * ea[ee]) * eb))
805+ func eh (cL,ei) = {
806+ let dd = (parseIntValue(ed[ei]) + ((eg * ee[ei]) * ef))
783807 if ((0 > dd))
784- then throw(((((((("Panic! Pieces of type=" + toString(ee)) + ", sign=") + toString(ec)) + ", terrainCounts[i]=") + toString(ea[ee])) + ", landSizeIndex=") + toString(eb)))
808+ then throw(((((((("Panic! Pieces of type=" + toString(ei)) + ", sign=") + toString(eg)) + ", terrainCounts[i]=") + toString(ee[ei])) + ", landSizeIndex=") + toString(ef)))
785809 else (cL :+ toString(dd))
786810 }
787811
788812 let cW = {
789813 let cN = [0, 1, 2, 3, 4, 5]
790814 let cO = size(cN)
791815 let cP = nil
792816 func cQ (cR,cS) = if ((cS >= cO))
793817 then cR
794- else ed(cR, cN[cS])
818+ else eh(cR, cN[cS])
795819
796820 func cT (cR,cS) = if ((cS >= cO))
797821 then cR
798822 else throw("List size exceeds 6")
799823
800824 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
801825 }
802826 makeString(cW, "_")
803827 }
804828
805829
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)))
830+func ej (ee,ef,eg) = {
831+ let ed = split(valueOrElse(getString(bL()), "0_0_0_0_0_0"), "_")
832+ ec(ed, ee, ef, eg)
833+ }
834+
835+
836+func ek (el) = [(size(split(el, "A")) - 1), (size(split(el, "B")) - 1), (size(split(el, "C")) - 1), (size(split(el, "D")) - 1), (size(split(el, "E")) - 1), (size(split(el, "F")) - 1)]
837+
838+
839+func em (en,ee,eo,ef,ep) = {
840+ func eq (cL,ei) = {
841+ let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
842+ (cL :+ toString((parseIntValue(en[ei]) + er)))
819843 }
820844
821845 let cW = {
822846 let cN = [0, 1, 2, 3, 4, 5]
823847 let cO = size(cN)
824848 let cP = nil
825849 func cQ (cR,cS) = if ((cS >= cO))
826850 then cR
827- else em(cR, cN[cS])
851+ else eq(cR, cN[cS])
828852
829853 func cT (cR,cS) = if ((cS >= cO))
830854 then cR
831855 else throw("List size exceeds 6")
832856
833857 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
834858 }
835859 makeString(cW, "_")
836860 }
837861
838862
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))
863+func es (ee,eo,ef,ep) = {
864+ func eq (cL,ei) = {
865+ let er = ((fraction(eo, ep, U) * ee[ei]) * ef)
866+ $Tuple2((cL._1 :+ er), (cL._2 + er))
843867 }
844868
845869 let cN = [0, 1, 2, 3, 4, 5]
846870 let cO = size(cN)
847871 let cP = $Tuple2(nil, 0)
848872 func cQ (cR,cS) = if ((cS >= cO))
849873 then cR
850- else em(cR, cN[cS])
874+ else eq(cR, cN[cS])
851875
852876 func cT (cR,cS) = if ((cS >= cO))
853877 then cR
854878 else throw("List size exceeds 6")
855879
856880 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
857881 }
858882
859883
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))
884+func et (eu,ev,ew,ex) = {
885+ let ey = ew._1
886+ let ez = ew._2
887+ if ((ez == 0))
888+ then $Tuple2(makeString(eu, "_"), makeString(ev, "_"))
889+ else if ((ex >= ez))
866890 then {
867- func ew (cL,ee) = (cL :+ toString((parseIntValue(eq[ee]) + eu[ee])))
891+ func eA (cL,ei) = (cL :+ toString((parseIntValue(eu[ei]) + ey[ei])))
868892
869893 let cW = {
870894 let cN = [0, 1, 2, 3, 4, 5]
871895 let cO = size(cN)
872896 let cP = nil
873897 func cQ (cR,cS) = if ((cS >= cO))
874898 then cR
875- else ew(cR, cN[cS])
899+ else eA(cR, cN[cS])
876900
877901 func cT (cR,cS) = if ((cS >= cO))
878902 then cR
879903 else throw("List size exceeds 6")
880904
881905 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
882906 }
883- $Tuple2(makeString(cW, "_"), makeString(er, "_"))
907+ $Tuple2(makeString(cW, "_"), makeString(ev, "_"))
884908 }
885909 else {
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))))
910+ func eB (cL,ei) = {
911+ let eC = fraction(ey[ei], ex, ez)
912+ $Tuple2((cL._1 :+ toString((parseIntValue(eu[ei]) + eC))), (cL._2 :+ toString(((parseIntValue(ev[ei]) + ey[ei]) - eC))))
889913 }
890914
891915 let cW = {
892916 let cN = [0, 1, 2, 3, 4, 5]
893917 let cO = size(cN)
894918 let cP = $Tuple2(nil, nil)
895919 func cQ (cR,cS) = if ((cS >= cO))
896920 then cR
897- else ex(cR, cN[cS])
921+ else eB(cR, cN[cS])
898922
899923 func cT (cR,cS) = if ((cS >= cO))
900924 then cR
901925 else throw("List size exceeds 6")
902926
903927 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
904928 }
905929 $Tuple2(makeString(cW._1, "_"), makeString(cW._2, "_"))
906930 }
907931 }
908932
909933
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))
934+func eD (eE) = if ((eE >= toBigInt(0)))
935+ then eE
936+ else -(eE)
937+
938+
939+let eF = [[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]]
940+
941+func eG (bS,eH) = {
942+ let eI = toInt((bS % cg))
943+ let eJ = if ((eH[0] > eI))
920944 then "A"
921- else if ((eD[1] > eE))
945+ else if ((eH[1] > eI))
922946 then "B"
923- else if ((eD[2] > eE))
947+ else if ((eH[2] > eI))
924948 then "C"
925- else if ((eD[3] > eE))
949+ else if ((eH[3] > eI))
926950 then "D"
927- else if ((eD[4] > eE))
951+ else if ((eH[4] > eI))
928952 then "E"
929953 else "F"
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 = {
954+ eJ
955+ }
956+
957+
958+func eK (eL,eM) = {
959+ let eN = eF[eM]
960+ func eO (cL,cM) = $Tuple2((((((cL._1 + eG(cL._2, eN)) + eG((cL._2 / cg), eN)) + eG((cL._2 / ch), eN)) + eG((cL._2 / ci), eN)) + eG((cL._2 / cj), eN)), (cL._2 / ck))
961+
962+ let eP = {
939963 let cN = [1, 2, 3, 4, 5]
940964 let cO = size(cN)
941- let cP = $Tuple2("", (eH / cf))
965+ let cP = $Tuple2("", (eL / cf))
942966 func cQ (cR,cS) = if ((cS >= cO))
943967 then cR
944- else eK(cR, cN[cS])
968+ else eO(cR, cN[cS])
945969
946970 func cT (cR,cS) = if ((cS >= cO))
947971 then cR
948972 else throw("List size exceeds 5")
949973
950974 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
951975 }
952- eL._1
953- }
954-
955-
956-func eM (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, "_")
976+ eP._1
977+ }
978+
979+
980+func eQ (eR) = {
981+ let eS = split(valueOrElse(getString(eR), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
982+[toString(valueOrElse(parseInt(eS[ap]), 0)), if ((size(split(eS[aq], "_")) == S))
983+ then eS[aq]
984+ else "0_0_0_0_0_0", if ((size(split(eS[ar], "_")) == S))
985+ then eS[ar]
986+ else "0_0_0_0_0_0", eS[as]]
987+ }
988+
989+
990+func eT (eU) = {
991+ let do = split(eU, "_")
968992 ((V * (parseIntValue(do[1]) + 1)) * parseIntValue(do[0]))
969993 }
970994
971995
972-func eR (eS) = {
973- let eT = eS[aj]
974- func eU (cL,dj) = (cL + parseIntValue(dj))
975-
976- func eV (cL,dj) = {
996+func eV (eW) = {
997+ let eX = eW[aj]
998+ func eY (cL,dj) = (cL + parseIntValue(dj))
999+
1000+ func eZ (cL,dj) = {
9771001 let bB = cL._1
978- let eW = (((parseIntValue(dj) + af) - 1) / af)
979- $Tuple2((bB + 1), (cL._2 + (eW * bi)))
980- }
981-
982- let eX = {
983- let cN = split(eS[ah], "_")
1002+ let fa = (((parseIntValue(dj) + af) - 1) / af)
1003+ $Tuple2((bB + 1), (cL._2 + (fa * bi)))
1004+ }
1005+
1006+ let fb = {
1007+ let cN = split(eW[ah], "_")
9841008 let cO = size(cN)
9851009 let cP = 0
9861010 func cQ (cR,cS) = if ((cS >= cO))
9871011 then cR
988- else eU(cR, cN[cS])
1012+ else eY(cR, cN[cS])
9891013
9901014 func cT (cR,cS) = if ((cS >= cO))
9911015 then cR
9921016 else throw("List size exceeds 6")
9931017
9941018 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
9951019 }
996- let eY = {
997- let cN = split(eS[ai], "_")
1020+ let fc = {
1021+ let cN = split(eW[ai], "_")
9981022 let cO = size(cN)
9991023 let cP = 0
1000- func eZ (cR,cS) = if ((cS >= cO))
1024+ func fd (cR,cS) = if ((cS >= cO))
10011025 then cR
1002- else eU(cR, cN[cS])
1003-
1004- func fa (cR,cS) = if ((cS >= cO))
1026+ else eY(cR, cN[cS])
1027+
1028+ func fe (cR,cS) = if ((cS >= cO))
10051029 then cR
10061030 else throw("List size exceeds 6")
10071031
1008- fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
1009- }
1010- let fb = if ((eT == ""))
1032+ fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
1033+ }
1034+ let ff = if ((eX == ""))
10111035 then 0
1012- else ( let cN = split_4C(eT, "_")
1036+ else ( let cN = split_4C(eX, "_")
10131037 let cO = size(cN)
10141038 let cP = $Tuple2(0, 0)
1015- func fc (cR,cS) = if ((cS >= cO))
1039+ func fg (cR,cS) = if ((cS >= cO))
10161040 then cR
1017- else eV(cR, cN[cS])
1018-
1019- func fd (cR,cS) = if ((cS >= cO))
1041+ else eZ(cR, cN[cS])
1042+
1043+ func fh (cR,cS) = if ((cS >= cO))
10201044 then cR
10211045 else throw("List size exceeds 50")
10221046
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))
1047+ fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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
1048+ ((fb + fc) + ff)
1049+ }
1050+
1051+
1052+func fi (fj,fk,fl) = {
1053+ let eU = ((toString(fk) + "_") + toString(fl))
1054+ let fm = eT(eU)
1055+ let fn = valueOrElse(getString(fj), (eU + ":0_0_0_0_0_0:0_0_0_0_0_0::0"))
1056+ let fo = split_4C(fn, ":")
1057+ let fp = eV(fo)
1058+ let fq = if ((5 > size(fo)))
1059+ then makeString(["0", toString(fp), toString((fm - fp)), toString(fm)], "_")
1060+ else {
1061+ let fr = split(fo[ak], "_")
1062+ let fs = parseIntValue(fr[al])
1063+ let ft = if ((size(fr) > 1))
1064+ then parseIntValue(fr[am])
1065+ else fp
1066+ makeString([toString(fs), toString(ft), toString(((fm - fs) - ft)), toString(fm)], "_")
1067+ }
1068+[fo[ag], if ((size(split(fo[ah], "_")) == S))
1069+ then fo[ah]
1070+ else "0_0_0_0_0_0", if ((size(split(fo[ai], "_")) == S))
1071+ then fo[ai]
1072+ else "0_0_0_0_0_0", fo[aj], fq]
1073+ }
1074+
1075+
1076+func fu (eW) = {
1077+ let fv = eV(eW)
1078+ let fw = parseIntValue(split(eW[ak], "_")[al])
1079+ ((eT(eW[ag]) - fv) - fw)
1080+ }
1081+
1082+
1083+func fx (fy,fz) = {
1084+ let fa = if ((fy >= 0))
1085+ then (((fy + fz) - 1) / fz)
1086+ else -((((-(fy) + fz) - 1) / fz))
1087+ (fa * bi)
1088+ }
1089+
1090+
1091+func fA (fB,eW,fC) = if ((size(fB) != 3))
10681092 then throw("cargoListStr should contain exactly 2 ':' separators")
10691093 else {
1070- let fz = split(fx[0], "_")
1071- let fA = split(fx[1], "_")
1072- let fB = if ((fx[2] == ""))
1094+ let fD = split(fB[0], "_")
1095+ let fE = split(fB[1], "_")
1096+ let fF = if ((fB[2] == ""))
10731097 then nil
1074- else split(fx[2], "_")
1075- if ((size(fz) != S))
1098+ else split(fB[2], "_")
1099+ if ((size(fD) != S))
10761100 then throw("All 6 resources should be passed")
1077- else if ((size(fA) != S))
1101+ else if ((size(fE) != S))
10781102 then throw("All 6 materials should be passed")
10791103 else {
1080- let et = fq(eS)
1081- let fC = split(eS[ah], "_")
1082- let fD = split(eS[ai], "_")
1083- let fE = if ((eS[aj] == ""))
1104+ let ex = fu(eW)
1105+ let fG = split(eW[ah], "_")
1106+ let fH = split(eW[ai], "_")
1107+ let fI = if ((eW[aj] == ""))
10841108 then nil
1085- else split(eS[aj], "_")
1086- let er = split(fy[aq], "_")
1087- let fF = split(fy[ar], "_")
1088- let fG = if ((fy[as] == ""))
1109+ else split(eW[aj], "_")
1110+ let ev = split(fC[aq], "_")
1111+ let fJ = split(fC[ar], "_")
1112+ let fK = if ((fC[as] == ""))
10891113 then nil
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))
1114+ else split(fC[as], "_")
1115+ func fL (cL,dj) = {
1116+ let ei = cL._1
1117+ let fM = parseIntValue(dj)
1118+ let fN = parseIntValue(fG[ei])
1119+ let fO = parseIntValue(ev[ei])
1120+ if ((fM == 0))
1121+ then $Tuple4((ei + 1), (cL._2 :+ fG[ei]), (cL._3 :+ ev[ei]), cL._4)
1122+ else if ((fM > 0))
1123+ then if ((fM > fO))
1124+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fO)) + " available"))
1125+ else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
1126+ else if ((-(fM) > fN))
1127+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fN)) + " available"))
1128+ else $Tuple4((ei + 1), (cL._2 :+ toString((fN + fM))), (cL._3 :+ toString((fO - fM))), (cL._4 + fM))
11051129 }
11061130
11071131 let cW = {
1108- let cN = fz
1132+ let cN = fD
11091133 let cO = size(cN)
11101134 let cP = $Tuple4(0, nil, nil, 0)
11111135 func cQ (cR,cS) = if ((cS >= cO))
11121136 then cR
1113- else fH(cR, cN[cS])
1137+ else fL(cR, cN[cS])
11141138
11151139 func cT (cR,cS) = if ((cS >= cO))
11161140 then cR
11171141 else throw("List size exceeds 6")
11181142
11191143 cT(cQ(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5), 6)
11201144 }
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))
1145+ func fP (cL,dj) = {
1146+ let ei = cL._1
1147+ let fM = parseIntValue(dj)
1148+ let fQ = parseIntValue(fH[ei])
1149+ let fR = parseIntValue(fJ[ei])
1150+ if ((fM == 0))
1151+ then $Tuple4((ei + 1), (cL._2 :+ fH[ei]), (cL._3 :+ fJ[ei]), cL._4)
1152+ else if ((fM > 0))
1153+ then if ((fM > fR))
1154+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fR)) + " available"))
1155+ else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
1156+ else if ((-(fM) > fQ))
1157+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fQ)) + " available"))
1158+ else $Tuple4((ei + 1), (cL._2 :+ toString((fQ + fM))), (cL._3 :+ toString((fR - fM))), (cL._4 + fM))
11351159 }
11361160
1137- let dW = {
1138- let cN = fA
1161+ let ea = {
1162+ let cN = fE
11391163 let cO = size(cN)
11401164 let cP = $Tuple4(0, nil, nil, cW._4)
1141- func eZ (cR,cS) = if ((cS >= cO))
1165+ func fd (cR,cS) = if ((cS >= cO))
11421166 then cR
1143- else fL(cR, cN[cS])
1144-
1145- func fa (cR,cS) = if ((cS >= cO))
1167+ else fP(cR, cN[cS])
1168+
1169+ func fe (cR,cS) = if ((cS >= cO))
11461170 then cR
11471171 else throw("List size exceeds 6")
11481172
1149- fa(eZ(eZ(eZ(eZ(eZ(eZ(cP, 0), 1), 2), 3), 4), 5), 6)
1173+ fe(fd(fd(fd(fd(fd(fd(cP, 0), 1), 2), 3), 4), 5), 6)
11501174 }
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])
1175+ func fS (cL,dj) = {
1176+ let ei = cL._1
1177+ let fM = parseIntValue(dj)
1178+ let fT = if ((size(fI) > ei))
1179+ then parseIntValue(fI[ei])
11561180 else 0
1157- let fQ = if ((size(fG) > ee))
1158- then parseIntValue(fG[ee])
1181+ let fU = if ((size(fK) > ei))
1182+ then parseIntValue(fK[ei])
11591183 else 0
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"))
1184+ if ((fM == 0))
1185+ then $Tuple4((ei + 1), (cL._2 :+ toString(fT)), (cL._3 :+ toString(fU)), cL._4)
1186+ else if ((fM > 0))
1187+ then if ((fM > fU))
1188+ then throw((((("Attempt to take " + dj) + " from backpack, but only ") + toString(fU)) + " available"))
11651189 else {
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))
1190+ let fV = (fx((fT + fM), af) - fx(fT, af))
1191+ $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
11681192 }
1169- else if ((-(fI) > fP))
1170- then throw((((("Attempt to take " + toString(-(fI))) + " from warehouse, but only ") + toString(fP)) + " available"))
1193+ else if ((-(fM) > fT))
1194+ then throw((((("Attempt to take " + toString(-(fM))) + " from warehouse, but only ") + toString(fT)) + " available"))
11711195 else {
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))
1196+ let fV = (fx((fT + fM), af) - fx(fT, af))
1197+ $Tuple4((ei + 1), (cL._2 :+ toString((fT + fM))), (cL._3 :+ toString((fU - fM))), (cL._4 + fV))
11741198 }
11751199 }
11761200
1177- let eO = if ((size(fB) != 0))
1201+ let eS = if ((size(fF) != 0))
11781202 then {
1179- let cN = fB
1203+ let cN = fF
11801204 let cO = size(cN)
1181- let cP = $Tuple4(0, nil, nil, dW._4)
1182- func fc (cR,cS) = if ((cS >= cO))
1205+ let cP = $Tuple4(0, nil, nil, ea._4)
1206+ func fg (cR,cS) = if ((cS >= cO))
11831207 then cR
1184- else fO(cR, cN[cS])
1185-
1186- func fd (cR,cS) = if ((cS >= cO))
1208+ else fS(cR, cN[cS])
1209+
1210+ func fh (cR,cS) = if ((cS >= cO))
11871211 then cR
11881212 else throw("List size exceeds 50")
11891213
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)
1214+ fh(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(fg(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)
11911215 }
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)
1216+ else $Tuple4(0, fI, fK, ea._4)
1217+ let fW = eS._4
1218+ if ((fW > ex))
1219+ then throw((((("Attempt to put total " + toString(fW)) + " stuff, but only ") + toString(ex)) + " warehouse space left"))
1220+ else $Tuple7(makeString(cW._2, "_"), makeString(ea._2, "_"), makeString(eS._2, "_"), makeString(cW._3, "_"), makeString(ea._3, "_"), makeString(eS._3, "_"), fW)
11971221 }
11981222 }
11991223
12001224
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)))
1225+func fX (fY,fZ) = {
1226+ let aT = toString(fY)
1227+ let ga = eD(toBigInt(fZ))
1228+ let gb = valueOrElse(getInteger(cm()), (cl + 1))
1229+ let co = toString(gb)
1230+ let eM = toInt((ga % cf))
1231+ let el = eK(ga, eM)
1232+ let gc = aa[eM]
1233+ let gd = Issue(cE(co, "S"), makeString([co, "S", el, gc], "_"), 1, 0, false)
1234+ let av = calculateAssetId(gd)
1235+ let ge = toBase58String(av)
1236+ $Tuple2([IntegerEntry(cm(), (gb + 1)), gd, StringEntry(cn(co), ge), StringEntry(au(ge), aT), StringEntry(ct(co), aT), IntegerEntry(ay(ge), 0), IntegerEntry(cr(ge, aT), 0), ScriptTransfer(fY, 1, av)], $Tuple2(ge, gc))
1237+ }
1238+
1239+
1240+func gf (aT,gg,gh) = if (!(sigVerify_8Kb(gg, gh, bX)))
12171241 then throw("signature does not match")
12181242 else {
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)))
1243+ let do = split(toUtf8String(gg), ";")
1244+ let gi = split(do[0], "|")
1245+ let gj = split(gi[cA], "_")
1246+ let gk = parseIntValue(gj[0])
1247+ let gl = parseIntValue(gj[1])
1248+ let gm = split(do[1], ":")
1249+ let gn = gm[0]
1250+ let go = parseIntValue(gi[cB])
1251+ if (if ((go > (lastBlock.timestamp + bZ)))
12281252 then true
1229- else ((lastBlock.timestamp - bZ) > gk))
1230- then throw(((("signature outdated: logTime=" + toString(gk)) + ", bcTime=") + toString(lastBlock.timestamp)))
1253+ else ((lastBlock.timestamp - bZ) > go))
1254+ then throw(((("signature outdated: logTime=" + toString(go)) + ", bcTime=") + toString(lastBlock.timestamp)))
12311255 else {
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))
1256+ let gp = gm[1]
1257+ let gq = valueOrElse(getString(at(aT)), "")
1258+ if ((gq != gp))
1259+ then throw(((("Tx ids don't match! In state: " + gq) + ", in msg: ") + gp))
12361260 else {
12371261 let p = valueOrErrorMessage(getString(aN(aT)), "You don't have a duck staked")
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))
1262+ let gr = aQ(p)
1263+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1264+ let gt = valueOrElse(getInteger(gr), gs)
1265+ if ((gt != gk))
1266+ then throw(((("oldHealth=" + toString(gt)) + " from state does not match one from flight log=") + toString(gk)))
1267+ else if ((0 >= gk))
12441268 then throw("You can't fly with zero health")
12451269 else {
1246- let gq = if ((size(ge) > cC))
1247- then ge[cC]
1270+ let gu = if ((size(gi) > cC))
1271+ then gi[cC]
12481272 else ""
1249- let gr = if ((size(ge) > cD))
1250- then ge[cD]
1273+ let gv = if ((size(gi) > cD))
1274+ then gi[cD]
12511275 else ""
1252- let gs = if (if ((gh > 0))
1253- then (gq == "$")
1276+ let gw = if (if ((gl > 0))
1277+ then (gu == "$")
12541278 else false)
12551279 then bR(invoke(bC, "sendUsdtPrize", [aT], nil))
12561280 else 0
1257- $Tuple5(gh, p, gs, gj, gr)
1281+ $Tuple5(gl, p, gw, gn, gv)
12581282 }
12591283 }
12601284 }
12611285 }
12621286
12631287
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)), ""))
1288+func gx (fY,fZ,gg,gh) = {
1289+ let aT = toString(fY)
1290+ let eN = gf(aT, gg, gh)
1291+ let gr = aQ(eN._2)
1292+ let eR = aO(eN._2)
1293+ let fC = eQ(eR)
1294+ let gy = split(fC[ar], "_")
1295+ let gz = makeString(cX(true, gy, cd), "_")
1296+ let dt = de(fC[as], eN._5)
1297+ if ((0 >= eN._1))
1298+ then $Tuple3([IntegerEntry(gr, 0), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":"))], "", 0)
1299+ else {
1300+ let gA = fX(fY, fZ)
1301+ let ge = gA._2._1
1302+ $Tuple3((((gA._1 :+ StringEntry(aP(eN._2), makeString([gA._2._2, "L", ge], "_"))) :+ IntegerEntry(gr, eN._1)) :+ StringEntry(eR, makeString([fC[ap], fC[aq], gz, dt], ":"))), ge, eN._3)
1303+ }
1304+ }
1305+
1306+
1307+func gB (aF,gC) = {
1308+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1309+ let gD = valueOrElse(getInteger(az(R, aF)), 0)
1310+ let gE = (fl / 6)
1311+ let gF = (fl / 7)
1312+ ((T + fraction(T, ((fl + gE) + (2 * gF)), 5)) + fraction(T, gD, (gC * 5)))
1313+ }
1314+
1315+
1316+func gG (b,gH,gI) = {
1317+ let gJ = if ((gH == cx))
1318+ then $Tuple2(gI, valueOrElse(getString(aN(b)), ""))
12951319 else {
12961320 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1321+ let gK = valueOrElse(getString(aP(p)), W)
1322+ let gL = split(value(gK), "_")
1323+ if ((gL[aV] != "L"))
1324+ then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
1325+ else $Tuple2(gL[aW], p)
1326+ }
1327+ let aF = gJ._1
1328+ let gM = gJ._2
1329+ let gN = value(assetInfo(fromBase58String(aF)))
1330+ let gO = ax(aF)
1331+ let gP = valueOrErrorMessage(getInteger(gO), (("Land " + gN.name) + " is not staked"))
1332+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1333+ if ((gQ != b))
13101334 then throw((P + " is not yours"))
13111335 else {
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))
1336+ let gR = split(gN.description, "_")
1337+ $Tuple4(gM, aF, gR, gP)
1338+ }
1339+ }
1340+
1341+
1342+func gS (b,fy,gH,gI) = if ((0 > fy))
13191343 then throw("Negative amount")
13201344 else {
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)))
1345+ let dM = gG(b, gH, gI)
1346+ let bU = dM._3[bI]
1347+ let ee = ek(dM._3[bJ])
1348+ let eo = (lastBlock.timestamp - dM._4)
1349+ if ((0 > eo))
1350+ then throw(((("Saved timestamp is in future, saved = " + toString(dM._4)) + ", current = ") + toString(lastBlock.timestamp)))
13271351 else {
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)))
1352+ let gC = bT(bU)
1353+ let gT = gB(dM._2, gC)
1354+ let gU = fraction(eo, (gT * gC), U)
1355+ if ((fy > gU))
1356+ then throw(((("Not enough resources, available = " + toString(gU)) + ", requested = ") + toString(fy)))
13331357 else {
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)
1358+ let gV = fraction((gU - fy), U, (gT * gC))
1359+ let gW = (lastBlock.timestamp - gV)
1360+ let fk = (gC / bj)
1361+ let ew = es(ee, (eo - gV), fk, gT)
1362+ let fj = aE(dM._2)
1363+ let fl = valueOrElse(getInteger(ay(dM._2)), 0)
1364+ let eW = fi(fj, fk, fl)
1365+ let fr = split(eW[ak], "_")
1366+ let ex = parseIntValue(fr[an])
1367+ if (if ((gH == cx))
1368+ then (fy > ex)
13451369 else false)
1346- then throw((("Only " + toString(et)) + " space left in warehouse"))
1370+ then throw((("Only " + toString(ex)) + " space left in warehouse"))
13471371 else {
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]))
1372+ let eR = aO(dM._1)
1373+ let fC = eQ(eR)
1374+ let ev = split(fC[aq], "_")
1375+ let eu = split(eW[ah], "_")
1376+ let gX = if ((gH == cx))
1377+ then $Tuple4(em(eu, ee, (eo - gV), fk, gT), fC[aq], (parseIntValue(fr[am]) + ew._2), (parseIntValue(fr[an]) - ew._2))
1378+ else if ((gH == cy))
1379+ then $Tuple4(eW[ah], em(ev, ee, (eo - gV), fk, gT), parseIntValue(fr[am]), parseIntValue(fr[an]))
13561380 else {
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))
1381+ let gY = et(eu, ev, ew, ex)
1382+ let gZ = min([parseIntValue(fr[an]), ew._2])
1383+ $Tuple4(gY._1, gY._2, (parseIntValue(fr[am]) + gZ), (parseIntValue(fr[an]) - gZ))
13601384 }
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]], "_")])
1385+ let ha = gX._1
1386+ let hb = gX._2
1387+ let hc = gX._3
1388+ let hd = gX._4
1389+ $Tuple5([IntegerEntry(ax(dM._2), gW), IntegerEntry(aB(P, dM._2, b), gW)], eR, [fC[ap], hb, fC[ar], fC[as]], fj, [eW[ag], ha, eW[ai], eW[aj], makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")])
13661390 }
13671391 }
13681392 }
13691393 }
13701394
13711395
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))
1396+func he (b,aF,gC,gH) = {
1397+ let gO = ax(aF)
1398+ let gP = value(getInteger(gO))
1399+ let gU = (fraction((lastBlock.timestamp - gP), gB(aF, gC), U) * gC)
1400+ gS(b, gU, gH, aF)
1401+ }
1402+
1403+
1404+func hf (cY,fY,hg,aF) = {
1405+ let b = toString(fY)
1406+ let dM = gG(b, cz, aF)
1407+ let gC = bT(dM._3[bI])
1408+ let hh = ay(dM._2)
1409+ let hi = valueOrElse(getInteger(hh), 0)
1410+ if ((hi >= 3))
13871411 then throw("Currently max infrastructure level = 3")
13881412 else {
1389- let O = (he + 1)
1390- let hf = fraction(cc, (gy * O), bj)
1413+ let O = (hi + 1)
1414+ let hj = fraction(cc, (gC * O), bj)
13911415 if (if (!(cY))
1392- then (hc != hf)
1416+ then (hg != hj)
13931417 else false)
1394- then throw(("Payment attached should be " + toString(hf)))
1418+ then throw(("Payment attached should be " + toString(hj)))
13951419 else {
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)
1420+ let eR = aO(dM._1)
1421+ let fC = eQ(eR)
1422+ let gy = split(fC[ar], "_")
1423+ let hk = fraction(be, (gC * O), bj)
1424+ let gz = makeString(cX(cY, gy, hk), "_")
1425+ let hl = he(b, dM._2, gC, cz)
1426+ let hm = hl._5
1427+ let hn = eT(hm[ag])
1428+ let ho = makeString([split(hm[ag], "_")[0], toString(O)], "_")
1429+ let hp = eT(ho)
1430+ let fr = split(hm[ak], "_")
1431+ let hq = makeString([fr[al], fr[am], toString(((parseIntValue(fr[an]) + hp) - hn)), toString(hp)], "_")
1432+ $Tuple3(([IntegerEntry(hh, O), IntegerEntry(cr(dM._2, b), O), StringEntry(eR, makeString([fC[ap], hl._3[aq], gz, fC[as]], ":")), StringEntry(hl._4, makeString([ho, hm[ah], hm[ai], hm[aj], hq], ":"))] ++ hl._1), O, hk)
14091433 }
14101434 }
14111435 }
14121436
14131437
1414-func hn (p,ho) = if (!(aZ))
1438+func hr (p,hs) = if (!(aZ))
14151439 then $Tuple2(nil, 0)
14161440 else {
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)
1424- }
1425-
1426-
1427-func ht (b,ho) = if (!(aZ))
1441+ let ht = r(p)
1442+ let hu = q(p)
1443+ let I = valueOrElse(getInteger(bD, hu), 0)
1444+ let N = (I + hs)
1445+ let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1446+ let hw = s(p)
1447+ $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1448+ }
1449+
1450+
1451+func hx (b,hs) = if (!(aZ))
14281452 then $Tuple2(nil, 0)
14291453 else {
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)
1437- }
1438-
1439-
1440-func hu (b) = {
1454+ let ht = v(b)
1455+ let hu = u(b)
1456+ let I = valueOrElse(getInteger(bD, hu), 0)
1457+ let N = (I + hs)
1458+ let hv = L(valueOrElse(getInteger(bD, ht), 0), N)
1459+ let hw = w(b)
1460+ $Tuple2([IntegerEntry(ht, hv[0]), IntegerEntry(hu, N), IntegerEntry(hw, (valueOrElse(getInteger(hw), 0) + hv[1]))], N)
1461+ }
1462+
1463+
1464+func hy (b) = {
14411465 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
1442- let hv = aI(b)
1443- let hw = getString(hv)
1444- if (!(isDefined(hw)))
1466+ let hz = aI(b)
1467+ let hA = getString(hz)
1468+ if (!(isDefined(hA)))
14451469 then throw("You are not eligible for ONBOARD artifact")
14461470 else {
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)))
1471+ let hB = aK(b)
1472+ let hC = getString(hB)
1473+ if (isDefined(hC))
1474+ then throw(("You already used your ONBOARD artifact on duck " + value(hC)))
14511475 else {
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)
1476+ let hD = aJ(p)
1477+ let hE = getString(hD)
1478+ if (isDefined(hE))
1479+ then throw(((("The duck " + p) + " already got points from ONBOARD artifact from user ") + value(hE)))
1480+ else ([StringEntry(hB, p), StringEntry(hD, b)] ++ hr(p, F)._1)
14571481 }
14581482 }
14591483 }
14601484
14611485
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))
1486+func hF (b,gI) = {
1487+ let dM = gG(b, cz, gI)
1488+ let aF = dM._2
1489+ let gC = bT(dM._3[bI])
1490+ let hG = az(R, aF)
1491+ if ((valueOrElse(getInteger(hG), 0) > 0))
14681492 then throw("Presale artifact is already activated")
1469- else if ((parseIntValue(dI._3[bH]) > cl))
1493+ else if ((parseIntValue(dM._3[bH]) > cl))
14701494 then throw((((P + " ") + aF) + " is not eligible for presale artifact"))
14711495 else {
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, ":")))
1496+ let hl = he(b, aF, gC, cz)
1497+ ((((hl._1 :+ IntegerEntry(hG, gC)) :+ IntegerEntry(cs(R, aF, b), gC)) :+ StringEntry(hl._2, makeString(hl._3, ":"))) :+ StringEntry(hl._4, makeString(hl._5, ":")))
14741498 }
14751499 }
14761500
14771501
1478-func hD (hE,O,hF,b,hG,fV,hH) = {
1502+func hH (hI,O,hJ,b,hK,fZ,hL) = {
14791503 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1504+ func hM (cL,aF) = {
1505+ let gN = value(assetInfo(fromBase58String(aF)))
1506+ let gO = ax(aF)
1507+ let gP = valueOrErrorMessage(getInteger(gO), (("NFT " + gN.name) + " is not staked"))
1508+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
1509+ if ((gQ != b))
14861510 then throw((P + " is not yours"))
14871511 else {
1488- let gN = split(gJ.description, "_")
1489- let fY = gN[bK]
1512+ let gR = split(gN.description, "_")
1513+ let gc = gR[bK]
14901514 if (if ((cL._3 != ""))
1491- then (cL._3 != fY)
1515+ then (cL._3 != gc)
14921516 else false)
14931517 then throw("Lands should be on the same continent to merge")
14941518 else {
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 = {
1519+ let bU = gR[bI]
1520+ let hN = cL._1
1521+ let ei = valueOrErrorMessage(indexOf(hN, bU), "You haven't passed all the lands needed")
1522+ let hO = (take(hN, ei) + drop(hN, (ei + 1)))
1523+ let gC = bT(bU)
1524+ let hP = (cL._2 + valueOrElse(getInteger(az(R, aF)), 0))
1525+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1526+ let hQ = {
15031527 let bc = bU
15041528 if (("S" == bc))
15051529 then 3
15061530 else if (("M" == bc))
15071531 then 4
15081532 else if (("L" == bc))
15091533 then 5
15101534 else if (("XL" == bc))
15111535 then 6
15121536 else throw("Only S, M, L, XL can merge")
15131537 }
1514- if ((fh != hM))
1538+ if ((fl != hQ))
15151539 then throw("All lands should be maxed to merge")
15161540 else {
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)))
1541+ let co = gR[bH]
1542+ let ee = ek(gR[bJ])
1543+ let eo = (lastBlock.timestamp - gP)
1544+ if ((0 > eo))
1545+ then throw(((("Saved timestamp is in future, saved = " + toString(gP)) + ", current = ") + toString(lastBlock.timestamp)))
15221546 else {
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)
1547+ let gT = gB(aF, gC)
1548+ let fk = (gC / bj)
1549+ let hb = em(split(cL._4, "_"), ee, eo, fk, gT)
1550+ let cV = ec(split(cL._6, "_"), ee, fk, -1)
1551+ let hR = cL._7
1552+ let bB = indexOf(hR, aF)
15291553 if (!(isDefined(bB)))
15301554 then throw(("Your staked lands don't contain " + aF))
15311555 else {
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))
1556+ let hS = aw(aF)
1557+ let hT = valueOrElse(getString(hS), "")
1558+ $Tuple8(hO, hP, gc, hb, (((((((((((((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(hS)) :+ DeleteEntry(cp(hT))) :+ Burn(fromBase58String(aF), 1)), cV, removeByIndex(hR, value(bB)), (cL._8 + gC))
15351559 }
15361560 }
15371561 }
15381562 }
15391563 }
15401564 }
15411565
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), "_")
1566+ let eR = aO(p)
1567+ let fC = eQ(eR)
1568+ let hU = valueOrElse(getString(bL()), "0_0_0_0_0_0")
1569+ let hV = bM(b)
1570+ let hW = getString(hV)
1571+ let hX = if (isDefined(hW))
1572+ then split_51C(value(hW), "_")
15491573 else nil
15501574 let cW = {
1551- let cN = hG
1575+ let cN = hK
15521576 let cO = size(cN)
1553- let cP = $Tuple8(hF, 0, "", fy[aq], nil, hQ, hT, 0)
1577+ let cP = $Tuple8(hJ, 0, "", fC[aq], nil, hU, hX, 0)
15541578 func cQ (cR,cS) = if ((cS >= cO))
15551579 then cR
1556- else hI(cR, cN[cS])
1580+ else hM(cR, cN[cS])
15571581
15581582 func cT (cR,cS) = if ((cS >= cO))
15591583 then cR
15601584 else throw("List size exceeds 5")
15611585
15621586 cT(cQ(cQ(cQ(cQ(cQ(cP, 0), 1), 2), 3), 4), 5)
15631587 }
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)
1588+ let gc = cW._3
1589+ let eM = valueOrErrorMessage(indexOf(aa, gc), ("Unknown continent: " + gc))
1590+ let el = eK(eD(toBigInt(fZ)), eM)
1591+ let gb = valueOrElse(getInteger(cm()), (cl + 1))
1592+ let hY = toString(gb)
1593+ let gd = Issue(cE(hY, hI), makeString([hY, hI, el, gc], "_"), 1, 0, false)
1594+ let av = calculateAssetId(gd)
1595+ let hZ = toBase58String(av)
1596+ let gz = makeString(cX((hL > 0), split(fC[ar], "_"), hL), "_")
1597+ let ia = bN(b)
1598+ let ib = valueOrElse(getInteger(ia), 0)
15751599 $Tuple2((((((((((((((((cW._5 :+ (if ((size(cW._7) > 0))
1576- then StringEntry(hR, makeString_11C(cW._7, "_"))
1577- else DeleteEntry(hR))) :+ IntegerEntry(hW, if ((cW._8 > hX))
1600+ then StringEntry(hV, makeString_11C(cW._7, "_"))
1601+ else DeleteEntry(hV))) :+ IntegerEntry(ia, if ((cW._8 > ib))
15781602 then 0
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)
1603+ else (ib - cW._8))) :+ IntegerEntry(cm(), (gb + 1))) :+ gd) :+ StringEntry(cn(hY), hZ)) :+ StringEntry(au(hZ), b)) :+ StringEntry(ct(hY), b)) :+ IntegerEntry(az(R, hZ), cW._2)) :+ IntegerEntry(cs(R, hZ, b), cW._2)) :+ IntegerEntry(ay(hZ), O)) :+ IntegerEntry(cr(hZ, b), O)) :+ StringEntry(eR, makeString([fC[ap], cW._4, gz, fC[as]], ":"))) :+ StringEntry(bL(), cW._6)) :+ StringEntry(aP(p), makeString([gc, "L", hZ], "_"))) :+ ScriptTransfer(addressFromStringValue(b), 1, av)), hZ)
1604+ }
1605+
1606+
1607+func ic (b,hK,fZ) = hH("M", 3, "SSSS", b, hK, fZ, 0)
1608+
1609+
1610+func id (b,hK,fZ,cY,hg) = {
1611+ let hj = (cc * 4)
15881612 if (if (!(cY))
1589- then (hc != hf)
1613+ then (hg != hj)
15901614 else false)
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)
1615+ then throw(("Payment attached should be " + toString(hj)))
1616+ else hH("L", 4, "SMM", b, hK, fZ, (be * 4))
1617+ }
1618+
1619+
1620+func ie (b,hK,fZ,cY,hg) = {
1621+ let hj = (cc * 47)
15981622 if (if (!(cY))
1599- then (hc != hf)
1623+ then (hg != hj)
16001624 else false)
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)
1625+ then throw(("Payment attached should be " + toString(hj)))
1626+ else hH("XL", 5, "SSSML", b, hK, fZ, (be * 47))
1627+ }
1628+
1629+
1630+func if (b,hK,fZ,cY,hg) = {
1631+ let hj = (cc * 54)
16081632 if (if (!(cY))
1609- then (hc != hf)
1633+ then (hg != hj)
16101634 else false)
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)
1635+ then throw(("Payment attached should be " + toString(hj)))
1636+ else hH("XXL", 6, "LXL", b, hK, fZ, (be * 54))
1637+ }
1638+
1639+
1640+func ig (cY,b,hg,hK,fZ) = {
1641+ let ih = {
1642+ let bc = size(hK)
16191643 if ((4 == bc))
1620- then hY(b, hG, fV)
1644+ then ic(b, hK, fZ)
16211645 else if ((3 == bc))
1622- then hZ(b, hG, fV, cY, hc)
1646+ then id(b, hK, fZ, cY, hg)
16231647 else if ((5 == bc))
1624- then ia(b, hG, fV, cY, hc)
1648+ then ie(b, hK, fZ, cY, hg)
16251649 else if ((2 == bc))
1626- then ib(b, hG, fV, cY, hc)
1650+ then if(b, hK, fZ, cY, hg)
16271651 else throw("Unknown merge")
16281652 }
1629- id
1630- }
1631-
1632-
1633-func ie (ee) = if (if ((ee.originCaller != bC))
1653+ ih
1654+ }
1655+
1656+
1657+func ii (ei) = if (if ((ei.originCaller != bC))
16341658 then valueOrElse(getBoolean(aR()), false)
16351659 else false)
16361660 then throw("Contracts are under maintenance")
1637- else StringEntry(at(toString(ee.originCaller)), toBase58String(ee.transactionId))
1638-
1639-
1640-@Callable(ee)
1641-func constructorV1 (if) = if ((ee.caller != this))
1661+ else StringEntry(at(toString(ei.originCaller)), toBase58String(ei.transactionId))
1662+
1663+
1664+@Callable(ei)
1665+func constructorV1 (ij) = if ((ei.caller != this))
16421666 then throw("Permission denied")
1643- else [StringEntry(bw(), if)]
1644-
1645-
1646-
1647-@Callable(ee)
1648-func setBlocked (ig) = if ((ee.caller != this))
1667+ else [StringEntry(bw(), ij)]
1668+
1669+
1670+
1671+@Callable(ei)
1672+func setBlocked (ik) = if ((ei.caller != this))
16491673 then throw("permission denied")
1650- else [BooleanEntry(aR(), ig)]
1651-
1652-
1653-
1654-@Callable(ee)
1674+ else [BooleanEntry(aR(), ik)]
1675+
1676+
1677+
1678+@Callable(ei)
16551679 func stakeLand () = {
1656- let ih = ie(ee)
1657- if ((size(ee.payments) != 1))
1680+ let il = ii(ei)
1681+ if ((size(ei.payments) != 1))
16581682 then throw("Exactly one payment required")
16591683 else {
1660- let ii = value(ee.payments[0])
1661- let av = value(ii.assetId)
1662- let bp = toString(ee.caller)
1663- if ((ii.amount != 1))
1684+ let im = value(ei.payments[0])
1685+ let av = value(im.assetId)
1686+ let bp = toString(ei.caller)
1687+ if ((im.amount != 1))
16641688 then throw((("NFT " + P) + " token should be attached as payment"))
16651689 else {
1666- let gJ = value(assetInfo(av))
1667- if ((gJ.issuer != this))
1690+ let gN = value(assetInfo(av))
1691+ if ((gN.issuer != this))
16681692 then throw("Unknown issuer of token")
1669- else if (!(contains(gJ.name, P)))
1693+ else if (!(contains(gN.name, P)))
16701694 then throw((("Only NFT " + P) + " tokens are accepted"))
16711695 else {
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)
1696+ let in = drop(gN.name, 4)
1697+ let co = if (contains(in, "XXL"))
1698+ then dropRight(in, 3)
1699+ else if (contains(in, "XL"))
1700+ then dropRight(in, 2)
1701+ else dropRight(in, 1)
16781702 if (!(isDefined(parseInt(co))))
1679- then throw(("Cannot parse land number from " + gJ.name))
1703+ then throw(("Cannot parse land number from " + gN.name))
16801704 else {
16811705 let aF = toBase58String(av)
1682- let gK = ax(aF)
1683- if (isDefined(getInteger(gK)))
1684- then throw((("NFT " + gJ.name) + " is already staked"))
1706+ let gO = ax(aF)
1707+ if (isDefined(getInteger(gO)))
1708+ then throw((("NFT " + gN.name) + " is already staked"))
16851709 else {
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), "_")
1710+ let gR = split(gN.description, "_")
1711+ let ee = ek(gR[bJ])
1712+ let gC = bT(gR[bI])
1713+ let cV = ej(ee, (gC / bj), 1)
1714+ let gD = valueOrElse(getInteger(az(R, aF)), 0)
1715+ let hV = bM(bp)
1716+ let hW = getString(hV)
1717+ let hR = if (isDefined(hW))
1718+ then split_51C(value(hW), "_")
16951719 else nil
1696- if (containsElement(hN, aF))
1720+ if (containsElement(hR, aF))
16971721 then throw(("Your staked lands already contain " + aF))
16981722 else {
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)
1723+ let fl = valueOrElse(getInteger(ay(aF)), 0)
1724+ let ia = bN(bp)
1725+ let io = valueOrElse(getInteger(ia), 0)
1726+ let ip = bR(invoke(bG, "onStakeUnstakeLand", [bp], nil))
1727+ $Tuple2([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(P, aF, bp), lastBlock.timestamp), StringEntry(hV, makeString_11C((hR :+ aF), "_")), IntegerEntry(ia, (io + gC)), StringEntry(au(aF), bp), StringEntry(ct(co), bp), IntegerEntry(cs(R, aF, bp), gD), IntegerEntry(cr(aF, bp), fl), StringEntry(bL(), cV), il], ip)
17041728 }
17051729 }
17061730 }
17071731 }
17081732 }
17091733 }
17101734 }
17111735
17121736
17131737
1714-@Callable(ee)
1715-func unstakeLand (gE) = {
1716- let ih = ie(ee)
1717- if ((size(ee.payments) != 0))
1738+@Callable(ei)
1739+func unstakeLand (gI) = {
1740+ let il = ii(ei)
1741+ if ((size(ei.payments) != 0))
17181742 then throw("No payments required")
17191743 else {
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)
1744+ let b = toString(ei.caller)
1745+ let dM = gG(b, cy, gI)
1746+ let aF = dM._2
1747+ let hV = bM(b)
1748+ let ee = ek(dM._3[bJ])
1749+ let gC = bT(dM._3[bI])
1750+ let cV = ej(ee, (gC / bj), -1)
1751+ let hl = he(b, aF, gC, cy)
1752+ let hR = split_51C(valueOrElse(getString(hV), ""), "_")
1753+ let bB = indexOf(hR, aF)
17301754 if (!(isDefined(bB)))
17311755 then throw(("Your staked lands don't contain " + aF))
17321756 else {
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)))
1757+ let iq = lastBlock.timestamp
1758+ let ir = valueOrElse(getInteger(bF, aS(b)), 0)
1759+ if ((ir >= iq))
1760+ then throw(("Your gWL are taking part in voting, cannot unstake until " + toString(ir)))
17371761 else {
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)))
1762+ let is = (valueOrElse(getInteger(bG, a(b)), 0) + bf)
1763+ if ((is > iq))
1764+ then throw(("Your staked lands took part in arbitrage, cannot unstake until " + toString(is)))
17411765 else {
1742- let hW = bN(b)
1743- let hX = valueOrElse(getInteger(hW), 0)
1744- let ip = if ((gy > hX))
1766+ let ia = bN(b)
1767+ let ib = valueOrElse(getInteger(ia), 0)
1768+ let it = if ((gC > ib))
17451769 then 0
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)
1770+ else (ib - gC)
1771+ let ip = bR(invoke(bG, "onStakeUnstakeLand", [b], nil))
1772+ $Tuple2([ScriptTransfer(ei.caller, 1, fromBase58String(aF)), DeleteEntry(ax(aF)), DeleteEntry(aB(P, aF, b)), StringEntry(bL(), cV), StringEntry(hl._2, makeString(hl._3, ":")), if ((size(hR) > 1))
1773+ then StringEntry(hV, makeString_11C(removeByIndex(hR, value(bB)), "_"))
1774+ else DeleteEntry(hV), IntegerEntry(ia, it), il], ip)
17511775 }
17521776 }
17531777 }
17541778 }
17551779 }
17561780
17571781
17581782
1759-@Callable(ee)
1783+@Callable(ei)
17601784 func stakeDuck () = {
1761- let ih = ie(ee)
1762- if ((size(ee.payments) != 1))
1785+ let il = ii(ei)
1786+ if ((size(ei.payments) != 1))
17631787 then throw("Exactly one payment required")
17641788 else {
1765- let ii = value(ee.payments[0])
1766- let av = value(ii.assetId)
1767- let bp = toString(ee.caller)
1768- if ((ii.amount != 1))
1789+ let im = value(ei.payments[0])
1790+ let av = value(im.assetId)
1791+ let bp = toString(ei.caller)
1792+ if ((im.amount != 1))
17691793 then throw((("NFT " + Q) + " token should be attached as payment"))
17701794 else {
1771- let gJ = value(assetInfo(av))
1772- if (if ((gJ.issuer != bV))
1773- then (gJ.issuer != bW)
1795+ let gN = value(assetInfo(av))
1796+ if (if ((gN.issuer != bV))
1797+ then (gN.issuer != bW)
17741798 else false)
17751799 then throw((("Unknown issuer of " + Q) + " token"))
1776- else if (!(contains(gJ.name, Q)))
1800+ else if (!(contains(gN.name, Q)))
17771801 then throw((("Only NFT " + Q) + " tokens are accepted"))
17781802 else {
1779- let iq = toBase58String(av)
1780- let gK = ax(iq)
1781- if (isDefined(getInteger(gK)))
1782- then throw((("NFT " + gJ.name) + " is already staked"))
1803+ let iu = toBase58String(av)
1804+ let gO = ax(iu)
1805+ if (isDefined(getInteger(gO)))
1806+ then throw((("NFT " + gN.name) + " is already staked"))
17831807 else if (isDefined(getString(aN(bp))))
1784- then throw(("You already staked one duck: " + gJ.name))
1808+ then throw(("You already staked one duck: " + gN.name))
17851809 else {
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))
1810+ let iv = aP(iu)
1811+ let iw = getString(iv)
1812+ let eR = aO(iu)
1813+ let ix = getString(eR)
1814+ let gr = aQ(iu)
1815+ let gs = J(valueOrElse(getInteger(r(iu)), 0))
1816+ let iy = valueOrElse(getInteger(gr), gs)
1817+ ([IntegerEntry(gO, lastBlock.timestamp), IntegerEntry(aB(Q, toBase58String(av), bp), lastBlock.timestamp), StringEntry(aM(iu), bp), StringEntry(aN(bp), iu)] ++ (if (isDefined(iw))
17941818 then nil
1795- else ([StringEntry(ir, W)] ++ (if (isDefined(it))
1819+ else ([StringEntry(iv, W)] ++ (if (isDefined(ix))
17961820 then nil
1797- else (([StringEntry(eN, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gn, iu)) :+ ih)))))
1821+ else (([StringEntry(eR, "0:0_0_0_0_0_0:0_0_0_0_0_0:")] :+ IntegerEntry(gr, iy)) :+ il)))))
17981822 }
17991823 }
18001824 }
18011825 }
18021826 }
18031827
18041828
18051829
1806-@Callable(ee)
1807-func unstakeDuck (iq) = {
1808- let ih = ie(ee)
1809- if ((size(ee.payments) != 0))
1830+@Callable(ei)
1831+func unstakeDuck (iu) = {
1832+ let il = ii(ei)
1833+ if ((size(ei.payments) != 0))
18101834 then throw("No payments required")
18111835 else {
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"))
1836+ let av = fromBase58String(iu)
1837+ let bp = toString(ei.caller)
1838+ let gN = value(assetInfo(av))
1839+ let gO = ax(toBase58String(av))
1840+ if (!(isDefined(getInteger(gO))))
1841+ then throw((("NFT " + gN.name) + " is not staked"))
18181842 else if (!(isDefined(getString(aN(bp)))))
1819- then throw((("The duck " + gJ.name) + " is not staked"))
1843+ then throw((("The duck " + gN.name) + " is not staked"))
18201844 else {
1821- let gM = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gJ.name) + " is orphaned"))
1822- if ((gM != bp))
1845+ let gQ = valueOrErrorMessage(getString(aM(toBase58String(av))), (("NFT " + gN.name) + " is orphaned"))
1846+ if ((gQ != bp))
18231847 then throw("Staked NFT is not yours")
18241848 else {
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]
1849+ let gr = aQ(iu)
1850+ let gs = J(valueOrElse(getInteger(r(iu)), 0))
1851+ let iz = valueOrElse(getInteger(gr), gs)
1852+ if ((gs > iz))
1853+ then throw((("Please heal your duck to " + toString(gs)) + "hp before unstaking"))
1854+ else [ScriptTransfer(ei.caller, 1, av), DeleteEntry(gO), DeleteEntry(gr), DeleteEntry(aP(iu)), DeleteEntry(aM(iu)), DeleteEntry(aB(Q, iu, bp)), DeleteEntry(aN(bp)), il]
18311855 }
18321856 }
18331857 }
18341858 }
18351859
18361860
18371861
1838-@Callable(ee)
1839-func claimRes (fu,iw) = {
1840- let ih = ie(ee)
1841- if ((size(ee.payments) != 0))
1862+@Callable(ei)
1863+func claimRes (fy,iA) = {
1864+ let il = ii(ei)
1865+ if ((size(ei.payments) != 0))
18421866 then throw("No payments required")
18431867 else {
1844- let b = toString(ee.originCaller)
1845- let dd = gO(b, fu, cy, iw)
1868+ let b = toString(ei.originCaller)
1869+ let dd = gS(b, fy, cy, iA)
18461870 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
1871+ $Tuple2(((((dd._1 ++ hr(p, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._3[aq])
1872+ }
1873+ }
1874+
1875+
1876+
1877+@Callable(ei)
1878+func claimResToWH (fy,iA) = {
1879+ let il = ii(ei)
1880+ if ((size(ei.payments) != 0))
18571881 then throw("No payments required")
18581882 else {
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))
1883+ let b = toString(ei.originCaller)
1884+ let dd = gS(b, fy, cx, iA)
1885+ $Tuple2(((((dd._1 ++ hx(b, fraction(x, fy, bi))._1) :+ StringEntry(dd._2, makeString(dd._3, ":"))) :+ StringEntry(dd._4, makeString(dd._5, ":"))) :+ il), dd._5[ah])
1886+ }
1887+ }
1888+
1889+
1890+
1891+@Callable(ei)
1892+func flight (gg,gh) = {
1893+ let il = ii(ei)
1894+ if ((size(ei.payments) != 0))
18711895 then throw("No payments required")
18721896 else {
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))
1897+ let aT = toString(ei.caller)
1898+ let eN = gf(aT, gg, gh)
1899+ let p = eN._2
1900+ let iv = aP(p)
1901+ let gK = valueOrElse(getString(iv), W)
1902+ if ((eN._4 == gK))
18791903 then throw("You can't fly to the same location")
18801904 else {
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))
1905+ let eR = aO(p)
1906+ let fC = eQ(eR)
1907+ let dt = de(fC[as], eN._5)
1908+ $Tuple2(([StringEntry(iv, if ((eN._1 > 0))
1909+ then eN._4
1910+ else gK), StringEntry(eR, makeString([fC[ap], fC[aq], fC[ar], dt], ":")), IntegerEntry(aQ(p), eN._1), il] ++ hr(p, if ((eN._1 > 0))
18871911 then y
1888- else z)._1), eJ._3)
1912+ else z)._1), eN._3)
18891913 }
18901914 }
18911915 }
18921916
18931917
18941918
1895-@Callable(ee)
1896-func heal (ix,iy,iz) = {
1897- let ih = ie(ee)
1898- if (if (if ((0 > ix))
1919+@Callable(ei)
1920+func heal (iB,iC,iD) = {
1921+ let il = ii(ei)
1922+ if (if (if ((0 > iB))
18991923 then true
1900- else (0 > iy))
1924+ else (0 > iC))
19011925 then true
1902- else (0 > iz))
1926+ else (0 > iD))
19031927 then throw("Quantity cannot be negative")
19041928 else {
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"))
1929+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1930+ let iE = [iB, iC, iD]
1931+ let gr = aQ(p)
1932+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1933+ let iF = valueOrElse(getInteger(gr), gs)
1934+ if ((iF >= gs))
1935+ then throw((("HP should be < " + toString(gs)) + " to heal"))
19121936 else {
1913- let eN = aO(p)
1914- let fy = eM(eN)
1915- let iC = if ((fy[as] == ""))
1937+ let eR = aO(p)
1938+ let fC = eQ(eR)
1939+ let iG = if ((fC[as] == ""))
19161940 then nil
1917- else split(fy[as], "_")
1918- func iD (cL,iE) = {
1941+ else split(fC[as], "_")
1942+ func iH (cL,iI) = {
19191943 let bS = cL._2
1920- let eA = if ((size(iC) > bS))
1921- then parseIntValue(iC[bS])
1944+ let eE = if ((size(iG) > bS))
1945+ then parseIntValue(iG[bS])
19221946 else 0
19231947 if ((3 > bS))
19241948 then {
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)))
1949+ let iJ = iE[bS]
1950+ if ((iJ > eE))
1951+ then throw(((("You have only " + toString(eE)) + " of ") + Z[bS]))
1952+ else $Tuple3((cL._1 :+ toString((eE - iJ))), (bS + 1), (cL._3 + (bY[bS] * iJ)))
19291953 }
1930- else $Tuple3((cL._1 :+ toString(eA)), (bS + 1), cL._3)
1954+ else $Tuple3((cL._1 :+ toString(eE)), (bS + 1), cL._3)
19311955 }
19321956
19331957 let dd = {
19341958 let cN = ac
19351959 let cO = size(cN)
19361960 let cP = $Tuple3(nil, 0, 0)
19371961 func cQ (cR,cS) = if ((cS >= cO))
19381962 then cR
1939- else iD(cR, cN[cS])
1963+ else iH(cR, cN[cS])
19401964
19411965 func cT (cR,cS) = if ((cS >= cO))
19421966 then cR
19431967 else throw("List size exceeds 50")
19441968
19451969 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)
19461970 }
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)
1971+ let iK = min([gs, (iF + dd._3)])
1972+ $Tuple2(([IntegerEntry(gr, iK), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dd._1, "_")], ":")), il] ++ hr(p, (G * ((iB + iC) + iD)))._1), iK)
19491973 }
19501974 }
19511975 }
19521976
19531977
19541978
1955-@Callable(ee)
1979+@Callable(ei)
19561980 func healES () = {
1957- let ih = ie(ee)
1958- if ((size(ee.payments) != 1))
1981+ let il = ii(ei)
1982+ if ((size(ei.payments) != 1))
19591983 then throw("Exactly one payment required")
19601984 else {
1961- let ii = value(ee.payments[0])
1962- if ((ii.assetId != bb))
1985+ let im = value(ei.payments[0])
1986+ if ((im.assetId != bb))
19631987 then throw("Allowed USDT payment only!")
19641988 else {
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))
1989+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
1990+ let gr = aQ(p)
1991+ let gs = J(valueOrElse(getInteger(r(p)), 0))
1992+ let iF = valueOrElse(getInteger(gr), gs)
1993+ if ((iF > 0))
19701994 then throw("HP should be 0 to call Emergency Service")
19711995 else {
1972- let eN = aO(p)
1973- let fy = eM(eN)
1974- let iC = if ((fy[as] == ""))
1996+ let eR = aO(p)
1997+ let fC = eQ(eR)
1998+ let iG = if ((fC[as] == ""))
19751999 then nil
1976- else split(fy[as], "_")
1977- let iH = if ((size(iC) > 0))
1978- then parseIntValue(iC[0])
2000+ else split(fC[as], "_")
2001+ let iL = if ((size(iG) > 0))
2002+ then parseIntValue(iG[0])
19792003 else 0
1980- let iI = if ((size(iC) > 1))
1981- then parseIntValue(iC[1])
2004+ let iM = if ((size(iG) > 1))
2005+ then parseIntValue(iG[1])
19822006 else 0
1983- let iJ = if ((size(iC) > 2))
1984- then parseIntValue(iC[2])
2007+ let iN = if ((size(iG) > 2))
2008+ then parseIntValue(iG[2])
19852009 else 0
1986- if (if (if ((iH > 0))
2010+ if (if (if ((iL > 0))
19872011 then true
1988- else (iI > 0))
2012+ else (iM > 0))
19892013 then true
1990- else (iJ > 0))
2014+ else (iN > 0))
19912015 then throw("You have to use own Medical Kit")
19922016 else {
1993- let iK = getString(bE, aU())
1994- let iL = if (isDefined(iK))
1995- then split(value(iK), "_")
2017+ let iO = getString(bE, aU())
2018+ let iP = if (isDefined(iO))
2019+ then split(value(iO), "_")
19962020 else nil
1997- let iM = if ((size(iL) > 0))
1998- then parseIntValue(iL[0])
2021+ let iQ = if ((size(iP) > 0))
2022+ then parseIntValue(iP[0])
19992023 else 0
2000- if ((0 >= iM))
2024+ if ((0 >= iQ))
20012025 then throw("There are no Medical Kits L1 at Emergency Service storage")
20022026 else {
2003- let iG = (iB + bY[0])
2004- let iN = makeString([toString((iM - 1)), removeByIndex(iL, 0)], "_")
2027+ let iK = (iF + bY[0])
2028+ let iR = makeString([toString((iQ - 1)), removeByIndex(iP, 0)], "_")
20052029 let aY = split(ac[0], "_")
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)))
2030+ let iS = aX(aY)
2031+ let iT = fraction((iS * Y), X, (10 * af))
2032+ if ((im.amount != iT))
2033+ then throw(("Payment attached should be " + toString(iT)))
20102034 else {
2011- let dd = bO(invoke(bE, "updateEsStorage", [iN], [AttachedPayment(bb, iP)]))
2012- $Tuple2(([IntegerEntry(gn, iG), ih] ++ hn(p, A)._1), dd)
2035+ let dd = bO(invoke(bE, "updateEsStorage", [iR], [AttachedPayment(bb, iT)]))
2036+ $Tuple2(([IntegerEntry(gr, iK), il] ++ hr(p, A)._1), dd)
20132037 }
20142038 }
20152039 }
20162040 }
20172041 }
20182042 }
20192043 }
20202044
20212045
20222046
2023-@Callable(ee)
2024-func updateBackpack (p,iQ) = if ((ee.caller != bE))
2047+@Callable(ei)
2048+func updateBackpack (p,iU) = if ((ei.caller != bE))
20252049 then throw("permission denied")
2026- else $Tuple2([StringEntry(aO(p), iQ)], iQ)
2027-
2028-
2029-
2030-@Callable(ee)
2050+ else $Tuple2([StringEntry(aO(p), iU)], iU)
2051+
2052+
2053+
2054+@Callable(ei)
20312055 func buySLand () = {
2032- let ih = ie(ee)
2033- if ((size(ee.payments) != 1))
2056+ let il = ii(ei)
2057+ if ((size(ei.payments) != 1))
20342058 then throw("Exactly one payment required")
20352059 else {
2036- let ii = value(ee.payments[0])
2037- if ((ii.assetId != bb))
2060+ let im = value(ei.payments[0])
2061+ if ((im.assetId != bb))
20382062 then throw("Allowed USDT payment only!")
2039- else if ((ii.amount != ce))
2063+ else if ((im.amount != ce))
20402064 then throw(("Payment attached should be " + toString(ce)))
20412065 else {
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)
2066+ let dd = fX(ei.caller, ei.transactionId)
2067+ $Tuple2((((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) ++ hx(toString(ei.caller), C)._1) :+ il), dd._2._1)
20442068 }
20452069 }
20462070 }
20472071
20482072
20492073
2050-@Callable(ee)
2051-func expedition (gc,gd) = {
2052- let ih = ie(ee)
2053- if ((size(ee.payments) != 0))
2074+@Callable(ei)
2075+func expedition (gg,gh) = {
2076+ let il = ii(ei)
2077+ if ((size(ei.payments) != 0))
20542078 then throw("No payments required")
20552079 else {
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)
2080+ let dd = gx(ei.caller, ei.transactionId, gg, gh)
2081+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2082+ $Tuple2(((dd._1 ++ hr(p, C)._1) :+ il), $Tuple2(dd._2, dd._3))
2083+ }
2084+ }
2085+
2086+
2087+
2088+@Callable(ei)
20652089 func upgradeInfra (aF) = {
2066- let ih = ie(ee)
2067- if ((size(ee.payments) != 0))
2090+ let il = ii(ei)
2091+ if ((size(ei.payments) != 0))
20682092 then throw("No payments required")
20692093 else {
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))
2094+ let dd = hf(true, ei.caller, 0, aF)
2095+ let p = valueOrErrorMessage(getString(aN(toString(ei.caller))), "You don't have a duck staked")
2096+ $Tuple2(((dd._1 :+ il) ++ hr(p, fraction(D, dd._3, bi))._1), dd._2)
2097+ }
2098+ }
2099+
2100+
2101+
2102+@Callable(ei)
2103+func upgradeInfraUsdt (aF) = if ((ei.caller != this))
20802104 then throw("Permission denied")
20812105 else {
2082- let ih = ie(ee)
2083- if ((size(ee.payments) != 1))
2106+ let il = ii(ei)
2107+ if ((size(ei.payments) != 1))
20842108 then throw("Exactly one payment required")
20852109 else {
2086- let ii = value(ee.payments[0])
2087- if ((ii.assetId != bb))
2110+ let im = value(ei.payments[0])
2111+ if ((im.assetId != bb))
20882112 then throw("Allowed USDT payment only!")
20892113 else {
2090- let dd = hb(false, ee.caller, ii.amount, aF)
2091- $Tuple2(((dd._1 :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), dd._2)
2114+ let dd = hf(false, ei.caller, im.amount, aF)
2115+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
20922116 }
20932117 }
20942118 }
20952119
20962120
20972121
2098-@Callable(ee)
2099-func activateArtifact (iR,iS) = {
2100- let ih = ie(ee)
2101- if ((size(ee.payments) != 0))
2122+@Callable(ei)
2123+func activateArtifact (iV,iW) = {
2124+ let il = ii(ei)
2125+ if ((size(ei.payments) != 0))
21022126 then throw("No payments required")
21032127 else {
2104- let b = toString(ee.caller)
2128+ let b = toString(ei.caller)
21052129 let dd = {
2106- let bc = iR
2130+ let bc = iV
21072131 if (("PRESALE" == bc))
2108- then hB(b, iS)
2132+ then hF(b, iW)
21092133 else if (("ONBOARD" == bc))
2110- then hu(b)
2134+ then hy(b)
21112135 else throw("Unknown artifact")
21122136 }
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))
2137+ (dd :+ il)
2138+ }
2139+ }
2140+
2141+
2142+
2143+@Callable(ei)
2144+func mergeLands (hK) = {
2145+ let il = ii(ei)
2146+ if ((size(ei.payments) != 0))
21232147 then throw("No payments required")
21242148 else {
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))
2149+ let dd = ig(true, toString(ei.caller), 0, hK, ei.transactionId)
2150+ $Tuple2(((dd._1 :+ il) ++ hx(toString(ei.caller), E)._1), dd._2)
2151+ }
2152+ }
2153+
2154+
2155+
2156+@Callable(ei)
2157+func mergeLandsUsdt (hK) = {
2158+ let il = ii(ei)
2159+ if ((size(ei.payments) != 1))
21362160 then throw("Exactly one payment required")
21372161 else {
2138- let ii = value(ee.payments[0])
2139- if ((ii.assetId != bb))
2162+ let im = value(ei.payments[0])
2163+ if ((im.assetId != bb))
21402164 then throw("Allowed USDT payment only!")
21412165 else {
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)
2166+ let dd = ig(false, toString(ei.caller), im.amount, hK, ei.transactionId)
2167+ $Tuple2(((dd._1 :+ ScriptTransfer(bE, im.amount, bb)) :+ il), dd._2)
21442168 }
21452169 }
21462170 }
21472171
21482172
21492173
2150-@Callable(ee)
2151-func cargoExchange (iT,aF) = {
2152- let ih = ie(ee)
2153- if ((size(ee.payments) != 0))
2174+@Callable(ei)
2175+func cargoExchange (iX,aF) = {
2176+ let il = ii(ei)
2177+ if ((size(ei.payments) != 0))
21542178 then throw("No payments required")
21552179 else {
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"))
2180+ let fB = split_4C(iX, ":")
2181+ let b = toString(ei.originCaller)
2182+ let gN = value(assetInfo(fromBase58String(aF)))
2183+ let gO = ax(aF)
2184+ if (!(isDefined(getInteger(gO))))
2185+ then throw((gN.name + " is not staked"))
21622186 else {
2163- let gM = valueOrErrorMessage(getString(au(aF)), (("NFT " + gJ.name) + " is orphaned"))
2164- if ((gM != b))
2187+ let gQ = valueOrErrorMessage(getString(au(aF)), (("NFT " + gN.name) + " is orphaned"))
2188+ if ((gQ != b))
21652189 then throw((P + " is not yours"))
21662190 else {
2167- let fg = (bT(split(gJ.description, "_")[bI]) / bj)
2168- let fh = valueOrElse(getInteger(ay(aF)), 0)
2191+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2192+ let fl = valueOrElse(getInteger(ay(aF)), 0)
21692193 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
2194+ let gK = valueOrElse(getString(aP(p)), W)
2195+ let gL = split(value(gK), "_")
2196+ if ((gL[aV] != "L"))
2197+ then throw((("Duck location type is " + gL[aV]) + ", but should be L"))
2198+ else if ((gL[aW] != aF))
21752199 then throw(("Duck should be on the land " + aF))
21762200 else {
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]
2201+ let fj = aE(aF)
2202+ let eW = fi(fj, fk, fl)
2203+ let eR = aO(p)
2204+ let fC = eQ(eR)
2205+ let dd = fA(fB, eW, fC)
2206+ let fr = split(eW[ak], "_")
2207+ let hc = (parseIntValue(fr[am]) + dd._7)
2208+ let hd = (parseIntValue(fr[an]) - dd._7)
2209+[StringEntry(eR, makeString_2C([fC[ap], dd._4, dd._5, dd._6], ":")), StringEntry(fj, makeString_2C([eW[ag], dd._1, dd._2, dd._3, makeString([fr[al], toString(hc), toString(hd), fr[ao]], "_")], ":")), il]
21862210 }
21872211 }
21882212 }
21892213 }
21902214 }
21912215
21922216
21932217
2194-@Callable(ee)
2195-func saveWarehouse (fj,aF) = if ((ee.caller != bE))
2218+@Callable(ei)
2219+func saveWarehouse (fn,aF) = if ((ei.caller != bE))
21962220 then throw("Access denied")
21972221 else {
2198- let ff = aE(aF)
2199- let fk = split_4C(fj, ":")
2200- if ((size(fk) != 5))
2222+ let fj = aE(aF)
2223+ let fo = split_4C(fn, ":")
2224+ if ((size(fo) != 5))
22012225 then throw("warehouse string should contain 4 ':' separators")
22022226 else {
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)
2227+ let iY = split(fo[ak], "_")[al]
2228+ let hc = eV(fo)
2229+ let iZ = eT(fo[ag])
2230+ let hd = ((iZ - parseIntValue(iY)) - hc)
2231+ let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([iY, toString(hc), toString(hd), toString(iZ)], "_")], ":")
2232+ $Tuple2([StringEntry(fj, ja)], ja)
22092233 }
22102234 }
22112235
22122236
22132237
2214-@Callable(ee)
2215-func fixWarehouseFormat (aF) = if ((ee.caller != bC))
2238+@Callable(ei)
2239+func fixWarehouseFormat (aF) = if ((ei.caller != bC))
22162240 then throw("Access denied")
22172241 else {
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)
2229- }
2230-
2231-
2232-
2233-@Callable(ee)
2234-func fixStakedPieces (bp) = if ((ee.caller != bC))
2242+ let fj = aE(aF)
2243+ let gN = value(assetInfo(fromBase58String(aF)))
2244+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2245+ let fl = valueOrElse(getInteger(ay(aF)), 0)
2246+ let fo = fi(fj, fk, fl)
2247+ let iY = bR(invoke(bE, "recalcLockedVolumeREADONLY", [aF, fo], nil))
2248+ let hc = eV(fo)
2249+ let iZ = eT(fo[ag])
2250+ let hd = ((iZ - iY) - hc)
2251+ let ja = makeString_2C([fo[ag], fo[ah], fo[ai], fo[aj], makeString([toString(iY), toString(hc), toString(hd), toString(iZ)], "_")], ":")
2252+ $Tuple2([StringEntry(fj, ja)], ja)
2253+ }
2254+
2255+
2256+
2257+@Callable(ei)
2258+func fixStakedPieces (bp) = if ((ei.caller != bC))
22352259 then throw("Access denied")
22362260 else {
2237- let hX = if ((bp == ""))
2261+ let ib = if ((bp == ""))
22382262 then 0
22392263 else {
2240- let hS = getString(bD, bM(bp))
2241- let hN = if (isDefined(hS))
2242- then split_51C(value(hS), "_")
2264+ let hW = getString(bD, bM(bp))
2265+ let hR = if (isDefined(hW))
2266+ then split_51C(value(hW), "_")
22432267 else nil
2244- func iX (cL,aF) = {
2245- let gJ = value(assetInfo(fromBase58String(aF)))
2246- let bU = split(gJ.description, "_")[bI]
2268+ func jb (cL,aF) = {
2269+ let gN = value(assetInfo(fromBase58String(aF)))
2270+ let bU = split(gN.description, "_")[bI]
22472271 (cL + bT(bU))
22482272 }
22492273
2250- let cN = hN
2274+ let cN = hR
22512275 let cO = size(cN)
22522276 let cP = 0
22532277 func cQ (cR,cS) = if ((cS >= cO))
22542278 then cR
2255- else iX(cR, cN[cS])
2279+ else jb(cR, cN[cS])
22562280
22572281 func cT (cR,cS) = if ((cS >= cO))
22582282 then cR
22592283 else throw("List size exceeds 100")
22602284
22612285 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)
22622286 }
2263- $Tuple2([IntegerEntry(bN(bp), hX)], hX)
2264- }
2265-
2266-
2267-
2268-@Callable(ee)
2269-func setCustomName (av,hP,aA) = {
2270- let ih = ie(ee)
2271- if ((size(ee.payments) != 1))
2287+ $Tuple2([IntegerEntry(bN(bp), ib)], ib)
2288+ }
2289+
2290+
2291+
2292+@Callable(ei)
2293+func setCustomName (av,hT,aA) = {
2294+ let il = ii(ei)
2295+ if ((size(ei.payments) != 1))
22722296 then throw("Exactly one payment required")
22732297 else {
2274- let ii = value(ee.payments[0])
2275- if ((ii.assetId != bb))
2298+ let im = value(ei.payments[0])
2299+ if ((im.assetId != bb))
22762300 then throw("Allowed USDT payment only!")
2277- else if ((ii.amount != ca))
2301+ else if ((im.amount != ca))
22782302 then throw(("Payment should be " + toString(ca)))
2279- else if (contains(hP, "__"))
2280- then throw(("Name should not contain '__': " + hP))
2281- else if ((size(hP) > cb))
2303+ else if (contains(hT, "__"))
2304+ then throw(("Name should not contain '__': " + hT))
2305+ else if ((size(hT) > cb))
22822306 then throw(("Name too long, maxLength=" + toString(cb)))
22832307 else {
2284- let b = toString(ee.originCaller)
2285- let iY = {
2308+ let b = toString(ei.originCaller)
2309+ let jc = {
22862310 let bc = aA
22872311 if (("ACCOUNT" == bc))
22882312 then {
2289- let iZ = cv(hP)
2290- let ja = getString(iZ)
2291- if (isDefined(ja))
2292- then throw(("Name already registered: " + hP))
2313+ let jd = cv(hT)
2314+ let je = getString(jd)
2315+ if (isDefined(je))
2316+ then throw(("Name already registered: " + hT))
22932317 else {
2294- let jb = aH(b)
2295- let jc = getString(jb)
2296- let jd = if (isDefined(jc))
2297- then [DeleteEntry(cv(value(jc)))]
2318+ let jf = aH(b)
2319+ let jg = getString(jf)
2320+ let jh = if (isDefined(jg))
2321+ then [DeleteEntry(cv(value(jg)))]
22982322 else nil
2299- (((jd :+ StringEntry(jb, hP)) :+ StringEntry(iZ, b)) ++ ht(b, B)._1)
2323+ (((jh :+ StringEntry(jf, hT)) :+ StringEntry(jd, b)) ++ hx(b, B)._1)
23002324 }
23012325 }
23022326 else if (("LAND" == bc))
23032327 then {
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"))
2328+ let gN = value(assetInfo(fromBase58String(av)))
2329+ let gO = ax(av)
2330+ if (!(isDefined(getInteger(gO))))
2331+ then throw((gN.name + " is not staked"))
23082332 else {
2309- let gM = valueOrErrorMessage(getString(au(av)), (("NFT " + gJ.name) + " is orphaned"))
2310- if ((gM != b))
2333+ let gQ = valueOrErrorMessage(getString(au(av)), (("NFT " + gN.name) + " is orphaned"))
2334+ if ((gQ != b))
23112335 then throw((P + " is not yours"))
23122336 else {
2313- let iZ = cp(hP)
2314- let ja = getString(iZ)
2315- if (isDefined(ja))
2316- then throw(("Name already registered: " + hP))
2337+ let jd = cp(hT)
2338+ let je = getString(jd)
2339+ if (isDefined(je))
2340+ then throw(("Name already registered: " + hT))
23172341 else {
2318- let je = aw(av)
2319- let jc = getString(je)
2320- let jd = if (isDefined(jc))
2321- then [DeleteEntry(cp(value(jc)))]
2342+ let ji = aw(av)
2343+ let jg = getString(ji)
2344+ let jh = if (isDefined(jg))
2345+ then [DeleteEntry(cp(value(jg)))]
23222346 else nil
2323- (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ ht(b, B)._1)
2347+ (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hx(b, B)._1)
23242348 }
23252349 }
23262350 }
23272351 }
23282352 else if (("DUCK" == bc))
23292353 then {
2330- let gJ = value(assetInfo(fromBase58String(av)))
2331- let gK = ax(av)
2332- if (if (!(isDefined(getInteger(gK))))
2354+ let gN = value(assetInfo(fromBase58String(av)))
2355+ let gO = ax(av)
2356+ if (if (!(isDefined(getInteger(gO))))
23332357 then true
23342358 else !(isDefined(getString(aN(b)))))
2335- then throw((gJ.name + " is not staked"))
2359+ then throw((gN.name + " is not staked"))
23362360 else {
2337- let gM = valueOrErrorMessage(getString(aM(av)), (("NFT " + gJ.name) + " is orphaned"))
2338- if ((gM != b))
2361+ let gQ = valueOrErrorMessage(getString(aM(av)), (("NFT " + gN.name) + " is orphaned"))
2362+ if ((gQ != b))
23392363 then throw((Q + " is not yours"))
23402364 else {
2341- let iZ = cu(hP)
2342- let ja = getString(iZ)
2343- if (isDefined(ja))
2344- then throw(("Name already registered: " + hP))
2365+ let jd = cu(hT)
2366+ let je = getString(jd)
2367+ if (isDefined(je))
2368+ then throw(("Name already registered: " + hT))
23452369 else {
2346- let je = aG(av)
2347- let jc = getString(je)
2348- let jd = if (isDefined(jc))
2349- then [DeleteEntry(cu(value(jc)))]
2370+ let ji = aG(av)
2371+ let jg = getString(ji)
2372+ let jh = if (isDefined(jg))
2373+ then [DeleteEntry(cu(value(jg)))]
23502374 else nil
2351- (((jd :+ StringEntry(je, hP)) :+ StringEntry(iZ, av)) ++ hn(av, B)._1)
2375+ (((jh :+ StringEntry(ji, hT)) :+ StringEntry(jd, av)) ++ hr(av, B)._1)
23522376 }
23532377 }
23542378 }
23552379 }
23562380 else throw("Unknown entity type")
23572381 }
2358- $Tuple2(((iY :+ ScriptTransfer(bE, ii.amount, bb)) :+ ih), 0)
2382+ $Tuple2(((jc :+ ScriptTransfer(bE, im.amount, bb)) :+ il), 0)
23592383 }
23602384 }
23612385 }
23622386
23632387
23642388
2365-@Callable(ee)
2366-func setReferrals (jf,jg) = if ((ee.callerPublicKey != bX))
2389+@Callable(ei)
2390+func setReferrals (jj,jk) = if ((ei.callerPublicKey != bX))
23672391 then throw("Permission denied")
23682392 else {
2369- let ih = ie(ee)
2370- if ((size(ee.payments) != 0))
2393+ let il = ii(ei)
2394+ if ((size(ei.payments) != 0))
23712395 then throw("No payments required")
2372- else if (!(isDefined(addressFromString(jf))))
2373- then throw(("Invalid address: " + jf))
2374- else if (!(isDefined(addressFromString(jg))))
2375- then throw(("Invalid address: " + jg))
2396+ else if (!(isDefined(addressFromString(jj))))
2397+ then throw(("Invalid address: " + jj))
2398+ else if (!(isDefined(addressFromString(jk))))
2399+ then throw(("Invalid address: " + jk))
23762400 else {
2377- let jh = cw()
2378- let ji = getString(jh)
2379- let jj = if (isDefined(ji))
2380- then split_4C(value(ji), "_")
2401+ let jl = cw()
2402+ let jm = getString(jl)
2403+ let jn = if (isDefined(jm))
2404+ then split_4C(value(jm), "_")
23812405 else nil
2382- if (containsElement(jj, jg))
2383- then throw((jg + " is not newbie (already has referrals)"))
2406+ if (containsElement(jn, jk))
2407+ then throw((jk + " is not newbie (already has referrals)"))
23842408 else {
2385- let hv = aI(jg)
2386- let hw = getString(hv)
2387- if (if (isDefined(hw))
2388- then isDefined(addressFromString(value(hw)))
2409+ let hz = aI(jk)
2410+ let hA = getString(hz)
2411+ if (if (isDefined(hA))
2412+ then isDefined(addressFromString(value(hA)))
23892413 else false)
2390- then throw(((jg + " already has refBy: ") + value(hw)))
2414+ then throw(((jk + " already has refBy: ") + value(hA)))
23912415 else {
2392- let jk = aL(jf)
2393- let jl = getString(jk)
2394- let jm = if (isDefined(jl))
2395- then split_4C(value(jl), "_")
2416+ let jo = aL(jj)
2417+ let jp = getString(jo)
2418+ let jq = if (isDefined(jp))
2419+ then split_4C(value(jp), "_")
23962420 else nil
2397- if (containsElement(jm, jg))
2398- then throw((((jf + " already contains ") + jg) + " within referrals"))
2421+ if (containsElement(jq, jk))
2422+ then throw((((jj + " already contains ") + jk) + " within referrals"))
23992423 else {
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)
2424+ let jr = makeString_2C((jq :+ jk), "_")
2425+ let js = if (containsElement(jn, jj))
2426+ then value(jm)
2427+ else makeString_2C((jn :+ jj), "_")
2428+ $Tuple2([StringEntry(hz, jj), StringEntry(jo, jr), StringEntry(jl, js), il], 0)
24052429 }
24062430 }
24072431 }
24082432 }
24092433 }
24102434
24112435
24122436
2413-@Callable(ee)
2414-func distributePoints (jp,jq,jr,js,jt) = {
2415- let ih = ie(ee)
2416- if ((size(ee.payments) != 0))
2437+@Callable(ei)
2438+func distributePoints (jt,ju,jv,jw,jx) = {
2439+ let il = ii(ei)
2440+ if ((size(ei.payments) != 0))
24172441 then throw("No payments required")
24182442 else {
2419- let b = toString(ee.originCaller)
2443+ let b = toString(ei.originCaller)
24202444 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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"))
2445+ let jy = w(b)
2446+ let jz = valueOrElse(getInteger(bD, jy), 0)
2447+ let jA = s(p)
2448+ let jB = valueOrElse(getInteger(bD, jA), 0)
2449+ let jC = (jz + jB)
2450+ let jD = ((((jt + ju) + jv) + jw) + jx)
2451+ if ((jD > jC))
2452+ then throw((("There are only " + toString(jC)) + " free points to distribute"))
24292453 else {
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))
2454+ let jE = o(p)
2455+ let jF = split(valueOrElse(getString(bD, jE), "0_0_0_0_0"), "_")
2456+ let jG = (jz - jD)
2457+ $Tuple2([IntegerEntry(jy, if ((0 > jG))
24342458 then 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)
2459+ else jG), IntegerEntry(jA, if ((0 > jG))
2460+ then (jB + jG)
2461+ else jB), StringEntry(jE, makeString([toString((parseIntValue(jF[g]) + jt)), toString((parseIntValue(jF[h]) + ju)), toString((parseIntValue(jF[i]) + jv)), toString((parseIntValue(jF[j]) + jw)), toString((parseIntValue(jF[k]) + jx))], "_")), il], 0)
24382462 }
24392463 }
24402464 }
24412465
24422466
24432467
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)
2468+@Callable(ei)
2469+func splitByGlobalWeightsREADONLY (fy) = $Tuple2(nil, cU(fy))
2470+
2471+
2472+
2473+@Callable(ei)
2474+func splitByGlobalAndLocalWeightsREADONLY (jH,jI,el) = {
2475+ let ee = ek(el)
2476+ $Tuple2(nil, $Tuple2(cU(jH), cF(jI, ee)))
2477+ }
2478+
2479+
2480+
2481+@Callable(ei)
2482+func getBackpackREADONLY (p) = $Tuple2(nil, makeString(eQ(aO(p)), ":"))
2483+
2484+
2485+
2486+@Callable(ei)
24632487 func getWarehouseREADONLY (aF) = {
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)
2488+ let gN = value(assetInfo(fromBase58String(aF)))
2489+ let fk = (bT(split(gN.description, "_")[bI]) / bj)
2490+ let fl = valueOrElse(getInteger(ay(aF)), 0)
2491+ $Tuple2(nil, makeString_2C(fi(aE(aF), fk, fl), ":"))
2492+ }
2493+
2494+
2495+
2496+@Callable(ei)
2497+func saveLastTx () = if (if ((ei.caller != bG))
2498+ then (ei.caller != bE)
24752499 else false)
24762500 then throw("Access denied")
2477- else $Tuple2([ie(ee)], 42)
2478-
2479-
2480-
2481-@Callable(ee)
2482-func updateDuckStats (p,ho) = if ((ee.caller != bE))
2501+ else $Tuple2([ii(ei)], 42)
2502+
2503+
2504+
2505+@Callable(ei)
2506+func updateDuckStats (p,hs) = if ((ei.caller != bE))
24832507 then throw("Access denied")
2484- else hn(p, ho)
2485-
2486-
2487-
2488-@Callable(ee)
2489-func updateAccStats (b,ho) = if ((ee.caller != bE))
2508+ else hr(p, hs)
2509+
2510+
2511+
2512+@Callable(ei)
2513+func updateAccStats (b,hs) = if ((ei.caller != bE))
24902514 then throw("Access denied")
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))
2515+ else hx(b, hs)
2516+
2517+
2518+
2519+@Callable(ei)
2520+func equipDuck (jJ) = {
2521+ let il = ii(ei)
2522+ if ((size(ei.payments) != 0))
24992523 then throw("No payments required")
25002524 else {
2501- let b = toString(ee.originCaller)
2525+ let b = toString(ei.originCaller)
25022526 let p = valueOrErrorMessage(getString(aN(b)), "You don't have a duck staked")
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))
2527+ let jK = t(p)
2528+ let jL = split(valueOrElse(getString(jK), ",;,_,;,_,;,_,;,_,;,_,;,"), "_")
2529+ let eR = aO(p)
2530+ let fC = eQ(eR)
2531+ let jM = split(jJ, "_")
2532+ if ((size(jM) != l))
25092533 then throw("Wrong equipment string")
25102534 else {
2511- let jJ = fy[as]
2512- let dh = if ((jJ == ""))
2535+ let jN = fC[as]
2536+ let dh = if ((jN == ""))
25132537 then nil
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)
2538+ else split(jN, "_")
2539+ let jO = dX(jL, dh, true)
2540+ let dt = dX(jM, jO, false)
2541+ $Tuple2([StringEntry(jK, jJ), StringEntry(eR, makeString_2C([fC[ap], fC[aq], fC[ar], makeString(dt, "_")], ":")), il], 0)
25182542 }
25192543 }
25202544 }
25212545
25222546
25232547
2524-@Callable(ee)
2525-func test () = if ((ee.caller != this))
2548+@Callable(ei)
2549+func test () = if ((ei.caller != this))
25262550 then throw("Access denied")
2527- else $Tuple2(nil, du(""))
2551+ else {
2552+ let dq = du("")
2553+ let dA = dx(dq)
2554+ $Tuple2(nil, dA)
2555+ }
25282556
25292557

github/deemru/w8io/03bedc9 
856.61 ms