tx · 7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.05800000 Waves

2023.10.14 19:34 [2798535] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy", "fee": 5800000, "feeAssetId": null, "timestamp": 1697301309353, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2qXxbVxbdshJAihYrgFU6yWT161yYvzaL7DvEmRhFGcn1RB4vMkkE6G2J5sSmZFZXLWBpfQh2er9pZKDSgSXGoXo" ], "script": "base64:BgKGAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIZwAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEEBXcwbWluCQCXAwEJAMwIAgUCdzAJAMwIAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQV3MG1pbgkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAvAkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEGcHJvbG9nAAkBBWFzSW50AQkA/QcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQlzZXRDb21tb24CA2FjYw9pZ25vcmVkSXRlcmF0b3IEAWoIBQNhY2MCXzEEBGl0ZW0DCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAZpc1Byb2QIBQNhY2MCXzgECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAMFBmlzUHJvZAkAaAIFCG5ld09yZEFtBQhuZXdPcmRQcgkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QDBQZpc1Byb2QJAGgCBQhjdXJPcmRBbQUIY3VyT3JkUHIJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBkAgUGd2hJbml0BQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTABC3NldEludGVybmFsAwljdXJyZW50V2gKY3VycmVudE9yZAZuZXdPcmQECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8DCQECIT0CCQCQAwEFBm5ld09yZAADCQACAQIzbmV3T3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQZuZXdPcmQAAgIABQNuaWwJALwJAgkAkQMCBQZuZXdPcmQAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAXIKAAIkbAUIcmVzVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsAAAAAAAABQljdXJyV2hSZXMFDWN1cnJlbnRPcmRSZXMHAAAFCHJlc1BhcnRzCgEFJGYwXzECAiRhAiRpAwkA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XzgFAWoAAAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfOQUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzkFAWoAAAQJd2hPcmRJbml0AwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQKd2hPcmRQYXJ0cwkAtQkCBQl3aE9yZEluaXQCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkAwUGaXNQcm9kCQBoAgUHd2hPcmRBbQUHd2hPcmRQcgkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yBQl3aE9yZEluaXQJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCAUDYWNjA18xMwMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGQCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGUCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQBE3NlbGxSZXNvdXJjZXNDb21tb24EB3Jlc0xpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWluUHJpY2VzCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAZAIIBQNhY2MCXzQJAJEDAgUHYW1vdW50cwUBagkAlgoECAUDYWNj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aGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARBzaG9wMnVzZXJBY3Rpb25zAw11c2RXaDJCcFNhbGRvCmNhbGxlckFkZHILcmVjZWl2ZWRGZWUDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMFDXVzZFdoMkJwU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2AwkAZwIFC3JlY2VpdmVkRmVlCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgULcmVjZWl2ZWRGZWUABgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5BAZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmNhbGxlckFkZHIJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUFC3JlY2VpdmVkRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAEQdXNlcjJzaG9wQWN0aW9ucwQNdXNkQnAyV2hTYWxkbwRwbXRzDXNob3BMYW5kT3duZXIIc3BlbnRGZWUDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBBQRwbXRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAgUEcG10cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUNdXNkQnAyV2hTYWxkbwUIc3BlbnRGZWUDCQECIT0CBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ11c2RCcDJXaFNhbGRvAAYCASsJAQpmaXhlZFBvaW50AgUIc3BlbnRGZWUABgIOKGRlbGl2ZXJ5IGZlZSkDCQBmAgUOTUlOU0hPUFBBWU1FTlQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICEk1pbiBzaG9wIHRyYWRlIGlzIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGBAt1c2RCcDJXaEZlZQkAawMFDXVzZEJwMldoU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDXNob3BMYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zaG9wTGFuZE93bmVyCQBlAgUNdXNkQnAyV2hTYWxkbwkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQUEcG10cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQNuaWwBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYPc2hvcExhbmRBc3NldElkCmNhbGxlckFkZHIKYnBPcmRlclN0cglicFJlc0xpc3QJYnBNYXRMaXN0CmJwUHJvZExpc3QECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFD3Nob3BMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBA1zaG9wTGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUPc2hvcExhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUNc2hvcExhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQUPc2hvcExhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMFCHdoT3JkUmVzBQhyZXNUeXBlcwcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAFtCgACJGwFCGJwT3JkTWF0CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsCAUBcgJfNAgFAXICXzUIBQFyAl82AAAFCWJwTWF0TGlzdAUJY3VycldoTWF0BQh3aE9yZE1hdAUIbWF0VHlwZXMHCAUBcgNfMTMKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBDGFjY2VwdENvbW1vbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQBcAMJAQIhPQIJAJADAQUJYnBPcmRQcm9kAAAKAAIkbAUJYnBPcmRQcm9kCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAnwoNBQNuaWwFA25pbAUDbmlsCAUBbQJfNAgFAW0CXzUIBQFtAl82AAAFCmJwUHJvZExpc3QFCmN1cnJXaFByb2QFCXdoT3JkUHJvZAUJcHJvZFR5cGVzBggFAW0DXzEzCgEFJGYyXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQxhY2NlcHRDb21tb24CBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjJfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYyXzICCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECCQEFJGYyXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgkAnwoNBQpjdXJyV2hQcm9kBQl3aE9yZFByb2QFCmJwUHJvZExpc3QIBQFtAl80CAUBbQJfNQgFAW0CXzYAAAUKYnBQcm9kTGlzdAUKY3VycldoUHJvZAUJd2hPcmRQcm9kBQlwcm9kVHlwZXMGCAUBbQNfMTMECHZvbFNhbGRvCAUBcAJfNAQMbmV3TG9ja2VkVm9sAwkAZgIAAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8AAAkAZQIFD2N1cnJXaExvY2tlZFZvbAUIdm9sU2FsZG8EBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXICXzECAV8JAMwIAgkAuQkCCAUBbQJfMQIBXwkAzAgCCQC6CQIIBQFwAl8xAgFfCQDMCAIJAKQDAQUMbmV3TG9ja2VkVm9sBQNuaWwCAToEC25ld1doT3JkU3RyCQC6CQIJAMwIAgkAuQkCCAUBcgJfMgIBXwkAzAgCCQC5CQIIBQFtAl8yAgFfCQDMCAIJALoJAggFAXACXzICAV8FA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBA5hY2NTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFDXNob3BMYW5kT3duZXIJAMwIAgkAawMFBnhwU2hvcAgFAXADXzEzBQVNVUxUOAUDbmlsBQNuaWwJAJwKCgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cggFAXICXzMIBQFtAl8zCAUBcAJfMwgFAXACXzUIBQFwAl82CAUBcANfMTMFDXNob3BMYW5kT3duZXIFBndoU2F2ZQUOYWNjU3RhdHNSZXN1bHQBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQZhbW91bnQEBm9uZVJlcwkAaQIFBmFtb3VudAAeBBFvbmVGYWN0b3J5QW1vdW50cwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwUDbmlsBAFzCQCkAwEFBm9uZVJlcwQHcmVzTGlzdAkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwUDbmlsBAltaW5QcmljZXMJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAFA25pbAoBCm9uZUZhY3RvcnkCA2FjYwljb250aW5lbnQEAXgJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUJY29udGluZW50BRFvbmVGYWN0b3J5QW1vdW50cwUJbWluUHJpY2VzCQCVCgMJAM4IAggFA2FjYwJfMQgFAXgCXzEJAGQCCAUDYWNjAl8yCAUBeAJfMwkAZAIIBQNhY2MCXzMIBQF4Al80BA0kdDAyNTI3MDI1MzYwCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm9uZUZhY3RvcnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1MjcwMjUzNjACXzEEDHVzZHRSZWNlaXZlZAgFDSR0MDI1MjcwMjUzNjACXzIECHRvdGFsUmVzCAUNJHQwMjUyNzAyNTM2MAJfMwQDZmVlCQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQECHVzZHRMZWZ0CQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlCQCXCgUFDmZhY3RvcnlBY3Rpb25zBQh1c2R0TGVmdAUDZmVlBRBhY3Rpdml0aWVzQW1vdW50BQh0b3RhbFJlcxYBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjY4MTUyNjk0MQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI2ODE1MjY5NDECXzEEBm5ld1JlcwgFDSR0MDI2ODE1MjY5NDECXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI2ODE1MjY5NDECXzMECHRvdGFsUmVzCAUNJHQwMjY4MTUyNjk0MQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjc3MzMyNzg5MAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI3NzMzMjc4OTACXzEECHVzZHRMZWZ0CAUNJHQwMjc3MzMyNzg5MAJfMgQDZmVlCAUNJHQwMjc3MzMyNzg5MAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI3NzMzMjc4OTACXzQECHRvdGFsUmVzCAUNJHQwMjc3MzMyNzg5MAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDSR0MDI5MTI2MjkyNDcJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5MTI2MjkyNDcCXzEEBm5ld1JlcwgFDSR0MDI5MTI2MjkyNDcCXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI5MTI2MjkyNDcCXzMECHRvdGFsUmVzCAUNJHQwMjkxMjYyOTI0NwJfNAQHbmV3UGFjawkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbFJlcwUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXNlbGxSZXNvdXJjZXNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWluUHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTI3NzMxMzk4CQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTI3NzMxMzk4Al8xBAZuZXdSZXMIBQ0kdDAzMTI3NzMxMzk4Al8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTI3NzMxMzk4Al8zBAh0b3RhbFJlcwgFDSR0MDMxMjc3MzEzOTgCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQDCQBnAgUDZmVlCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzMzI2MTMzMzgzCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzI2MTMzMzgzAl8xBAZuZXdNYXQIBQ0kdDAzMzI2MTMzMzgzAl8yBAl1c2R0U3BlbnQIBQ0kdDAzMzI2MTMzMzgzAl8zBAh0b3RhbE1hdAgFDSR0MDMzMjYxMzMzODMCXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzRHVja0RlbGl2ZXJ5AwdhbW91bnRzCW1heFByaWNlcxBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDM0OTA0MzUwMjEJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzQ5MDQzNTAyMQJfMQQGbmV3TWF0CAUNJHQwMzQ5MDQzNTAyMQJfMgQJdXNkdFNwZW50CAUNJHQwMzQ5MDQzNTAyMQJfMwQIdG90YWxNYXQIBQ0kdDAzNDkwNDM1MDIxAl80BAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDAzNzMwMjM3NDE5CQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM3MzAyMzc0MTkCXzEEBm5ld01hdAgFDSR0MDM3MzAyMzc0MTkCXzIECXVzZHRTcGVudAgFDSR0MDM3MzAyMzc0MTkCXzMECHRvdGFsTWF0CAUNJHQwMzczMDIzNzQxOQJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzOTUzNjM5NjQyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDAzOTUzNjM5NjQyAl8xBAZuZXdNYXQIBQ0kdDAzOTUzNjM5NjQyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzOTUzNjM5NjQyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDM5NTM2Mzk2NDICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdZXhjaGFuZ2VSZXNvdXJjZXNEdWNrRGVsaXZlcnkBB2Ftb3VudHMDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDExNTc0MTI2MwkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDExNTc0MTI2MwJfMQQGbmV3TWF0CAUNJHQwNDExNTc0MTI2MwJfMgQJdXNkdFNwZW50CAUNJHQwNDExNTc0MTI2MwJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MTE1NzQxMjYzAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEdZXhjaGFuZ2VSZXNvdXJjZXNMYW5kRGVsaXZlcnkCB2Ftb3VudHMLbGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAAACBQxwcm9sb2dSZXN1bHQFDHByb2xvZ1Jlc3VsdAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0MzU2NjQzNjcyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MzU2NjQzNjcyAl8xBAZuZXdNYXQIBQ0kdDA0MzU2NjQzNjcyAl8yBAl1c2R0U3BlbnQIBQ0kdDA0MzU2NjQzNjcyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQzNTY2NDM2NzICXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUKcHJvZHVjdElkeAQOcHJvZHVjdENvbnRJZHgJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQZyZWNpcGUFDXJJZHhDb250aW5lbnQDCQECIT0CCQCRAwIFCmNvbnRpbmVu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cgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMV8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQITTGlzdCBzaXplIGV4Y2VlZHMgNgkBBSRmMV8yAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgkBBSRmMV8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCCAUGbWVyZ2VkAl8xAgFfCQDMCAIJALoJAgUGYnBQcm9kAgFfBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBDcmFmdAgFBm1lcmdlZAJfMgUFTVVMVDgFA25pbAUDbmlsCQCUCgIFA25pbAkAlQoDBQZyZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQERc2V0V2FyZWhvdXNlT3JkZXICC25ld09yZGVyU3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQAAAgUMcHJvbG9nUmVzdWx0BQxwcm9sb2dSZXN1bHQEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTMxOTA1MzQzMAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1MzE5MDUzNDMwAl8xBApuZXdVc2VyUmVzCAUNJHQwNTMxOTA1MzQzMAJfMgQKbmV3VXNlck1hdAgFDSR0MDUzMTkwNTM0MzACXzMEC25ld1VzZXJQcm9kCAUNJHQwNTMxOTA1MzQzMAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDUzMTkwNTM0MzACXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1MzE5MDUzNDMwAl82BAh4cEFtb3VudAgFDSR0MDUzMTkwNTM0MzACXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1MzE5MDUzNDMwAl84BApzaG9wV2hTYXZlCAUNJHQwNTMxOTA1MzQzMAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1MzE5MDUzNDMwA18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU0ODcyNTUxMTAJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU0ODcyNTUxMTACXzEECm5ld1VzZXJSZXMIBQ0kdDA1NDg3MjU1MTEwAl8yBApuZXdVc2VyTWF0CAUNJHQwNTQ4NzI1NTExMAJfMwQLbmV3VXNlclByb2QIBQ0kdDA1NDg3MjU1MTEwAl80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTQ4NzI1NTExMAJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU0ODcyNTUxMTACXzYECHhwQW1vdW50CAUNJHQwNTQ4NzI1NTExMAJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU0ODcyNTUxMTACXzgECnNob3BXaFNhdmUIBQ0kdDA1NDg3MjU1MTEwAl85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU0ODcyNTUxMTADXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0BAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUNbXlMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFDW15TGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDW15TGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFCmNhbGxlckFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA0kdDA1NzM1MjU3NTg0CQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUHcmVzTGlzdAUHbWF0TGlzdAUIcHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NzM1MjU3NTg0Al8xBApuZXdVc2VyUmVzCAUNJHQwNTczNTI1NzU4NAJfMgQKbmV3VXNlck1hdAgFDSR0MDU3MzUyNTc1ODQCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTczNTI1NzU4NAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU3MzUyNTc1ODQCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NzM1MjU3NTg0Al82BAh4cEFtb3VudAgFDSR0MDU3MzUyNTc1ODQCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NzM1MjU3NTg0Al84BApzaG9wV2hTYXZlCAUNJHQwNTczNTI1NzU4NAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NzM1MjU3NTg0A18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkAAAIFDHByb2xvZ1Jlc3VsdAUMcHJvbG9nUmVzdWx0AwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtH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ZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AAuPkRQ=", "height": 2798535, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE Next: 7ALzi2wC8GDNAAek1dKHzwo6FJH5MbWWw29m4W4GqJKg Diff:
OldNewDifferences
295295 else unit
296296
297297
298-func bF () = aI(invoke(aC, "saveLastTx", nil, nil))
298+func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil))
299299
300300
301301 func bG (bH,bI) = {
765765 @Callable(dX)
766766 func sellResources (cM,cN) = {
767767 let ea = bF()
768- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
769- if ((size(dX.payments) != 0))
770- then throw("sellResources doesn't require any payments")
771- else {
772- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
773- if ((eb[J] != "F"))
774- then throw(("Duck location type should be Factory, but is " + eb[J]))
768+ if ((ea == ea))
769+ then {
770+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
771+ if ((size(dX.payments) != 0))
772+ then throw("sellResources doesn't require any payments")
775773 else {
776- let ec = bC(S(T))
777- let cK = split(ec[F], "_")
778- let ed = cJ(cK, eb[K], cM, cN)
779- let dS = ed._1
780- let ee = ed._2
781- let br = ed._3
782- let dT = ed._4
783- let dV = (br / 100)
784- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
785- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
786- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
787- $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
774+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
775+ if ((eb[J] != "F"))
776+ then throw(("Duck location type should be Factory, but is " + eb[J]))
777+ else {
778+ let ec = bC(S(T))
779+ let cK = split(ec[F], "_")
780+ let ed = cJ(cK, eb[K], cM, cN)
781+ let dS = ed._1
782+ let ee = ed._2
783+ let br = ed._3
784+ let dT = ed._4
785+ let dV = (br / 100)
786+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
787+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
788+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
789+ $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
790+ }
788791 }
789792 }
793+ else throw("Strict value is not equal to itself.")
790794 }
791795
792796
824828 then throw("Delivery feature is turned off!")
825829 else {
826830 let ea = bF()
827- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
828- if ((size(dX.payments) != 0))
829- then throw("sellResources doesn't require any payments")
830- else {
831- let ec = bC(S(T))
832- let cK = split(ec[F], "_")
833- let ek = cJ(cK, ej, cM, cN)
834- let dS = ek._1
835- let ee = ek._2
836- let br = ek._3
837- let dT = ek._4
838- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
839- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
840- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
841- let el = fraction(br, aV, aj)
842- let dU = if ((k > el))
843- then k
844- else el
845- let dV = (br / 100)
846- if ((dU >= (br - dV)))
847- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
831+ if ((ea == ea))
832+ then {
833+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
834+ if ((size(dX.payments) != 0))
835+ then throw("sellResources doesn't require any payments")
848836 else {
849- let em = valueOrElse(getInteger(Y), 0)
850- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
837+ let ec = bC(S(T))
838+ let cK = split(ec[F], "_")
839+ let ek = cJ(cK, ej, cM, cN)
840+ let dS = ek._1
841+ let ee = ek._2
842+ let br = ek._3
843+ let dT = ek._4
844+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
845+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
846+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
847+ let el = fraction(br, aV, aj)
848+ let dU = if ((k > el))
849+ then k
850+ else el
851+ let dV = (br / 100)
852+ if ((dU >= (br - dV)))
853+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
854+ else {
855+ let em = valueOrElse(getInteger(Y), 0)
856+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
857+ }
851858 }
852859 }
860+ else throw("Strict value is not equal to itself.")
853861 }
854862
855863
859867 then throw("Delivery feature is turned off!")
860868 else {
861869 let ea = bF()
862- if ((size(dX.payments) != 0))
863- then throw("sellResources doesn't require any payments")
864- else {
865- let en = dX.caller
866- let P = toString(en)
867- let eo = value(assetInfo(fromBase58String(W)))
868- if (!(isDefined(getInteger(aC, N(W)))))
869- then throw((("NFT " + eo.name) + " is not staked"))
870- else {
871- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
872- if ((ep != P))
873- then throw((e + " is not yours"))
874- else {
875- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
876- let bY = split_4C(dz, ":")
877- let cK = split(bY[y], "_")
878- let eq = cJ(cK, ej, cM, cN)
879- let dS = eq._1
880- let ee = eq._2
881- let br = eq._3
882- let dT = eq._4
883- let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
884- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
885- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
886- let el = fraction(br, aV, aj)
887- let dU = if ((k > el))
888- then k
889- else el
890- let dV = (br / 100)
891- if ((dU >= (br - dV)))
892- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
893- else {
894- let em = valueOrElse(getInteger(Y), 0)
895- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
896- }
897- }
898- }
899- }
870+ if ((ea == ea))
871+ then if ((size(dX.payments) != 0))
872+ then throw("sellResources doesn't require any payments")
873+ else {
874+ let en = dX.caller
875+ let P = toString(en)
876+ let eo = value(assetInfo(fromBase58String(W)))
877+ if (!(isDefined(getInteger(aC, N(W)))))
878+ then throw((("NFT " + eo.name) + " is not staked"))
879+ else {
880+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
881+ if ((ep != P))
882+ then throw((e + " is not yours"))
883+ else {
884+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
885+ let bY = split_4C(dz, ":")
886+ let cK = split(bY[y], "_")
887+ let eq = cJ(cK, ej, cM, cN)
888+ let dS = eq._1
889+ let ee = eq._2
890+ let br = eq._3
891+ let dT = eq._4
892+ let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
893+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
894+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
895+ let el = fraction(br, aV, aj)
896+ let dU = if ((k > el))
897+ then k
898+ else el
899+ let dV = (br / 100)
900+ if ((dU >= (br - dV)))
901+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
902+ else {
903+ let em = valueOrElse(getInteger(Y), 0)
904+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
905+ }
906+ }
907+ }
908+ }
909+ else throw("Strict value is not equal to itself.")
900910 }
901911
902912
904914 @Callable(dX)
905915 func buyMaterials (cM,cS) = {
906916 let ea = bF()
907- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
908- if ((size(dX.payments) != 1))
909- then throw("exactly 1 payment must be attached")
910- else {
911- let dk = dX.payments[0]
912- let dl = dk.amount
913- if (if (!(isDefined(dk.assetId)))
914- then true
915- else (value(dk.assetId) != ae))
916- then throw("USDT payments only!")
917+ if ((ea == ea))
918+ then {
919+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
920+ if ((size(dX.payments) != 1))
921+ then throw("exactly 1 payment must be attached")
917922 else {
918- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
919- if ((eb[J] != "F"))
920- then throw(("Duck location type should be Factory, but is " + eb[J]))
923+ let dk = dX.payments[0]
924+ let dl = dk.amount
925+ if (if (!(isDefined(dk.assetId)))
926+ then true
927+ else (value(dk.assetId) != ae))
928+ then throw("USDT payments only!")
921929 else {
922- let ec = bC(S(T))
923- let cR = split(ec[G], "_")
924- let er = cQ(cR, eb[K], cM, cS)
925- let dS = er._1
926- let es = er._2
927- let bA = er._3
928- let et = er._4
929- if ((bA > dl))
930- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
930+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
931+ if ((eb[J] != "F"))
932+ then throw(("Duck location type should be Factory, but is " + eb[J]))
931933 else {
932- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
933- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
934- let ax = if (((dl - bA) > 0))
935- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
936- else nil
937- let dV = (bA / 100)
938- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
939- $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
934+ let ec = bC(S(T))
935+ let cR = split(ec[G], "_")
936+ let er = cQ(cR, eb[K], cM, cS)
937+ let dS = er._1
938+ let es = er._2
939+ let bA = er._3
940+ let et = er._4
941+ if ((bA > dl))
942+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
943+ else {
944+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
945+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
946+ let ax = if (((dl - bA) > 0))
947+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
948+ else nil
949+ let dV = (bA / 100)
950+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
951+ $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
952+ }
940953 }
941954 }
942955 }
943956 }
957+ else throw("Strict value is not equal to itself.")
944958 }
945959
946960
950964 then throw("Delivery feature is turned off!")
951965 else {
952966 let ea = bF()
953- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
954- if ((size(dX.payments) != 1))
955- then throw("exactly 1 payment must be attached")
956- else {
957- let dk = dX.payments[0]
958- let dl = dk.amount
959- if (if (!(isDefined(dk.assetId)))
960- then true
961- else (value(dk.assetId) != ae))
962- then throw("USDT payments only!")
967+ if ((ea == ea))
968+ then {
969+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
970+ if ((size(dX.payments) != 1))
971+ then throw("exactly 1 payment must be attached")
963972 else {
964- let ec = bC(S(T))
965- let cR = split(ec[G], "_")
966- let eu = cQ(cR, ej, cM, cS)
967- let dS = eu._1
968- let es = eu._2
969- let bA = eu._3
970- let et = eu._4
971- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
972- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
973- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
974- let el = fraction(bA, aV, aj)
975- let dU = if ((k > el))
976- then k
977- else el
978- let dm = (bA + dU)
979- if ((dm > dl))
980- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
973+ let dk = dX.payments[0]
974+ let dl = dk.amount
975+ if (if (!(isDefined(dk.assetId)))
976+ then true
977+ else (value(dk.assetId) != ae))
978+ then throw("USDT payments only!")
981979 else {
982- let ax = if (((dl - dm) > 0))
983- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
984- else nil
985- let dV = (bA / 100)
986- let em = valueOrElse(getInteger(Y), 0)
987- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
980+ let ec = bC(S(T))
981+ let cR = split(ec[G], "_")
982+ let eu = cQ(cR, ej, cM, cS)
983+ let dS = eu._1
984+ let es = eu._2
985+ let bA = eu._3
986+ let et = eu._4
987+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
988+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
989+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
990+ let el = fraction(bA, aV, aj)
991+ let dU = if ((k > el))
992+ then k
993+ else el
994+ let dm = (bA + dU)
995+ if ((dm > dl))
996+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
997+ else {
998+ let ax = if (((dl - dm) > 0))
999+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1000+ else nil
1001+ let dV = (bA / 100)
1002+ let em = valueOrElse(getInteger(Y), 0)
1003+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1004+ }
9881005 }
9891006 }
9901007 }
1008+ else throw("Strict value is not equal to itself.")
9911009 }
9921010
9931011
9971015 then throw("Delivery feature is turned off!")
9981016 else {
9991017 let ea = bF()
1000- if ((size(dX.payments) != 1))
1001- then throw("exactly 1 payment must be attached")
1002- else {
1003- let dk = dX.payments[0]
1004- let dl = dk.amount
1005- if (if (!(isDefined(dk.assetId)))
1006- then true
1007- else (value(dk.assetId) != ae))
1008- then throw("USDT payments only!")
1009- else {
1010- let en = dX.caller
1011- let P = toString(en)
1012- let eo = value(assetInfo(fromBase58String(W)))
1013- if (!(isDefined(getInteger(aC, N(W)))))
1014- then throw((("NFT " + eo.name) + " is not staked"))
1015- else {
1016- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1017- if ((ep != P))
1018- then throw((e + " is not yours"))
1019- else {
1020- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1021- let bY = split_4C(dz, ":")
1022- let cR = split(bY[z], "_")
1023- let ev = cQ(cR, ej, cM, cS)
1024- let dS = ev._1
1025- let es = ev._2
1026- let bA = ev._3
1027- let et = ev._4
1028- let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1029- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1030- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1031- let el = fraction(bA, aV, aj)
1032- let dU = if ((k > el))
1033- then k
1034- else el
1035- let dm = (bA + dU)
1036- if ((dm > dl))
1037- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1038- else {
1039- let ax = if (((dl - dm) > 0))
1040- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1041- else nil
1042- let dV = (bA / 100)
1043- let em = valueOrElse(getInteger(Y), 0)
1044- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1045- }
1046- }
1047- }
1048- }
1049- }
1018+ if ((ea == ea))
1019+ then if ((size(dX.payments) != 1))
1020+ then throw("exactly 1 payment must be attached")
1021+ else {
1022+ let dk = dX.payments[0]
1023+ let dl = dk.amount
1024+ if (if (!(isDefined(dk.assetId)))
1025+ then true
1026+ else (value(dk.assetId) != ae))
1027+ then throw("USDT payments only!")
1028+ else {
1029+ let en = dX.caller
1030+ let P = toString(en)
1031+ let eo = value(assetInfo(fromBase58String(W)))
1032+ if (!(isDefined(getInteger(aC, N(W)))))
1033+ then throw((("NFT " + eo.name) + " is not staked"))
1034+ else {
1035+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1036+ if ((ep != P))
1037+ then throw((e + " is not yours"))
1038+ else {
1039+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1040+ let bY = split_4C(dz, ":")
1041+ let cR = split(bY[z], "_")
1042+ let ev = cQ(cR, ej, cM, cS)
1043+ let dS = ev._1
1044+ let es = ev._2
1045+ let bA = ev._3
1046+ let et = ev._4
1047+ let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1048+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1049+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1050+ let el = fraction(bA, aV, aj)
1051+ let dU = if ((k > el))
1052+ then k
1053+ else el
1054+ let dm = (bA + dU)
1055+ if ((dm > dl))
1056+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1057+ else {
1058+ let ax = if (((dl - dm) > 0))
1059+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1060+ else nil
1061+ let dV = (bA / 100)
1062+ let em = valueOrElse(getInteger(Y), 0)
1063+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1064+ }
1065+ }
1066+ }
1067+ }
1068+ }
1069+ else throw("Strict value is not equal to itself.")
10501070 }
10511071
10521072
10541074 @Callable(dX)
10551075 func exchangeResources (cM) = {
10561076 let ea = bF()
1057- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1058- if ((size(dX.payments) != 1))
1059- then throw("exactly 1 payment must be attached")
1060- else {
1061- let dk = dX.payments[0]
1062- let dl = dk.amount
1063- if (if (!(isDefined(dk.assetId)))
1064- then true
1065- else (value(dk.assetId) != ae))
1066- then throw("USDT payments only!")
1077+ if ((ea == ea))
1078+ then {
1079+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1080+ if ((size(dX.payments) != 1))
1081+ then throw("exactly 1 payment must be attached")
10671082 else {
1068- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1069- if ((eb[J] != "F"))
1070- then throw(("Duck location type should be Factory, but is " + eb[J]))
1083+ let dk = dX.payments[0]
1084+ let dl = dk.amount
1085+ if (if (!(isDefined(dk.assetId)))
1086+ then true
1087+ else (value(dk.assetId) != ae))
1088+ then throw("USDT payments only!")
10711089 else {
1072- let ec = bC(S(T))
1073- let cK = split(ec[F], "_")
1074- let cR = split(ec[G], "_")
1075- let ew = cU(cK, cR, cM)
1076- let ee = ew._1
1077- let es = ew._2
1078- let bA = ew._3
1079- let ex = ew._4
1080- if ((bA > dl))
1081- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1090+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1091+ if ((eb[J] != "F"))
1092+ then throw(("Duck location type should be Factory, but is " + eb[J]))
10821093 else {
1083- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1084- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1085- let ax = if (((dl - bA) > 0))
1086- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1087- else nil
1088- let dV = (bA / 100)
1089- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1090- $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1094+ let ec = bC(S(T))
1095+ let cK = split(ec[F], "_")
1096+ let cR = split(ec[G], "_")
1097+ let ew = cU(cK, cR, cM)
1098+ let ee = ew._1
1099+ let es = ew._2
1100+ let bA = ew._3
1101+ let ex = ew._4
1102+ if ((bA > dl))
1103+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1104+ else {
1105+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1106+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1107+ let ax = if (((dl - bA) > 0))
1108+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1109+ else nil
1110+ let dV = (bA / 100)
1111+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1112+ $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1113+ }
10911114 }
10921115 }
10931116 }
10941117 }
1118+ else throw("Strict value is not equal to itself.")
10951119 }
10961120
10971121
11011125 then throw("Delivery feature is turned off!")
11021126 else {
11031127 let ea = bF()
1104- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1105- if ((size(dX.payments) != 1))
1106- then throw("exactly 1 payment must be attached")
1107- else {
1108- let dk = dX.payments[0]
1109- let dl = dk.amount
1110- if (if (!(isDefined(dk.assetId)))
1111- then true
1112- else (value(dk.assetId) != ae))
1113- then throw("USDT payments only!")
1128+ if ((ea == ea))
1129+ then {
1130+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1131+ if ((size(dX.payments) != 1))
1132+ then throw("exactly 1 payment must be attached")
11141133 else {
1115- let ec = bC(S(T))
1116- let cK = split(ec[F], "_")
1117- let cR = split(ec[G], "_")
1118- let ey = cU(cK, cR, cM)
1119- let ee = ey._1
1120- let es = ey._2
1121- let bA = ey._3
1122- let ex = ey._4
1123- let el = fraction(bA, aW, aj)
1124- let dU = if ((l > el))
1125- then l
1126- else el
1127- let dm = (bA + dU)
1128- if ((dm > dl))
1129- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1134+ let dk = dX.payments[0]
1135+ let dl = dk.amount
1136+ if (if (!(isDefined(dk.assetId)))
1137+ then true
1138+ else (value(dk.assetId) != ae))
1139+ then throw("USDT payments only!")
11301140 else {
1131- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1132- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1133- let ax = if (((dl - dm) > 0))
1134- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1135- else nil
1136- let dV = (bA / 100)
1137- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1138- let em = valueOrElse(getInteger(Y), 0)
1139- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1141+ let ec = bC(S(T))
1142+ let cK = split(ec[F], "_")
1143+ let cR = split(ec[G], "_")
1144+ let ey = cU(cK, cR, cM)
1145+ let ee = ey._1
1146+ let es = ey._2
1147+ let bA = ey._3
1148+ let ex = ey._4
1149+ let el = fraction(bA, aW, aj)
1150+ let dU = if ((l > el))
1151+ then l
1152+ else el
1153+ let dm = (bA + dU)
1154+ if ((dm > dl))
1155+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1156+ else {
1157+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1158+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1159+ let ax = if (((dl - dm) > 0))
1160+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1161+ else nil
1162+ let dV = (bA / 100)
1163+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1164+ let em = valueOrElse(getInteger(Y), 0)
1165+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1166+ }
11401167 }
11411168 }
11421169 }
1170+ else throw("Strict value is not equal to itself.")
11431171 }
11441172
11451173
11491177 then throw("Delivery feature is turned off!")
11501178 else {
11511179 let ea = bF()
1152- if ((size(dX.payments) != 1))
1153- then throw("exactly 1 payment must be attached")
1154- else {
1155- let dk = dX.payments[0]
1156- let dl = dk.amount
1157- if (if (!(isDefined(dk.assetId)))
1158- then true
1159- else (value(dk.assetId) != ae))
1160- then throw("USDT payments only!")
1161- else {
1162- let en = dX.caller
1163- let P = toString(en)
1164- let eo = value(assetInfo(fromBase58String(W)))
1165- if (!(isDefined(getInteger(aC, N(W)))))
1166- then throw((("NFT " + eo.name) + " is not staked"))
1167- else {
1168- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1169- if ((ep != P))
1170- then throw((e + " is not yours"))
1171- else {
1172- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1173- let bY = split_4C(dz, ":")
1174- let cK = split(bY[y], "_")
1175- let cR = split(bY[z], "_")
1176- let ez = cU(cK, cR, cM)
1177- let ee = ez._1
1178- let es = ez._2
1179- let bA = ez._3
1180- let ex = ez._4
1181- let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1182- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1183- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1184- let el = fraction(bA, aW, aj)
1185- let dU = if ((l > el))
1186- then l
1187- else el
1188- let dm = (bA + dU)
1189- if ((dm > dl))
1190- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1191- else {
1192- let ax = if (((dl - dm) > 0))
1193- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1194- else nil
1195- let dV = (bA / 100)
1196- let em = valueOrElse(getInteger(Y), 0)
1197- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1198- }
1199- }
1200- }
1201- }
1202- }
1180+ if ((ea == ea))
1181+ then if ((size(dX.payments) != 1))
1182+ then throw("exactly 1 payment must be attached")
1183+ else {
1184+ let dk = dX.payments[0]
1185+ let dl = dk.amount
1186+ if (if (!(isDefined(dk.assetId)))
1187+ then true
1188+ else (value(dk.assetId) != ae))
1189+ then throw("USDT payments only!")
1190+ else {
1191+ let en = dX.caller
1192+ let P = toString(en)
1193+ let eo = value(assetInfo(fromBase58String(W)))
1194+ if (!(isDefined(getInteger(aC, N(W)))))
1195+ then throw((("NFT " + eo.name) + " is not staked"))
1196+ else {
1197+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1198+ if ((ep != P))
1199+ then throw((e + " is not yours"))
1200+ else {
1201+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1202+ let bY = split_4C(dz, ":")
1203+ let cK = split(bY[y], "_")
1204+ let cR = split(bY[z], "_")
1205+ let ez = cU(cK, cR, cM)
1206+ let ee = ez._1
1207+ let es = ez._2
1208+ let bA = ez._3
1209+ let ex = ez._4
1210+ let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1211+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1212+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1213+ let el = fraction(bA, aW, aj)
1214+ let dU = if ((l > el))
1215+ then l
1216+ else el
1217+ let dm = (bA + dU)
1218+ if ((dm > dl))
1219+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1220+ else {
1221+ let ax = if (((dl - dm) > 0))
1222+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1223+ else nil
1224+ let dV = (bA / 100)
1225+ let em = valueOrElse(getInteger(Y), 0)
1226+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1227+ }
1228+ }
1229+ }
1230+ }
1231+ }
1232+ else throw("Strict value is not equal to itself.")
12031233 }
12041234
12051235
12071237 @Callable(dX)
12081238 func craftGoods (eA,eB) = {
12091239 let ea = bF()
1210- if ((size(dX.payments) != 1))
1211- then throw("exactly 1 payment must be attached")
1212- else {
1213- let dk = dX.payments[0]
1214- let dl = dk.amount
1215- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1216- if ((eC != ae))
1217- then throw("USDT payments only!")
1218- else if ((dl != aj))
1219- then throw("exactly 1 USDT must be attached as payment")
1220- else if ((0 >= eB))
1221- then throw("Quantity should be positive")
1222- else {
1223- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1224- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1225- if ((eb[J] != "M"))
1226- then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1227- else {
1228- let eD = eb[I]
1229- let ec = bC(S(T))
1230- let cR = split(ec[G], "_")
1231- if (if ((0 > eA))
1232- then true
1233- else (eA >= size(s)))
1234- then throw(("Unknown product idx=" + toString(eA)))
1235- else {
1236- let ab = split(s[eA], "_")
1237- if ((size(ab) != v))
1238- then throw(("Fatal: unknown recipe: " + s[eA]))
1239- else {
1240- let eE = parseIntValue(ab[u])
1241- if ((q[eE] != eD))
1242- then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1243- else {
1244- let eF = if ((ec[H] == ""))
1245- then nil
1246- else split_4C(ec[H], "_")
1247- func eG (bH,eH) = {
1248- let aJ = bH._2
1249- let eI = if ((size(eF) > aJ))
1250- then eF[aJ]
1251- else "0"
1252- let dQ = parseIntValue(eI)
1253- let bh = (eB * w)
1254- let eJ = if ((aJ == eA))
1255- then toString((dQ + bh))
1256- else eI
1257- $Tuple2((bH._1 :+ eJ), (aJ + 1))
1258- }
1240+ if ((ea == ea))
1241+ then if ((size(dX.payments) != 1))
1242+ then throw("exactly 1 payment must be attached")
1243+ else {
1244+ let dk = dX.payments[0]
1245+ let dl = dk.amount
1246+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1247+ if ((eC != ae))
1248+ then throw("USDT payments only!")
1249+ else if ((dl != aj))
1250+ then throw("exactly 1 USDT must be attached as payment")
1251+ else if ((0 >= eB))
1252+ then throw("Quantity should be positive")
1253+ else {
1254+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1255+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1256+ if ((eb[J] != "M"))
1257+ then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1258+ else {
1259+ let eD = eb[I]
1260+ let ec = bC(S(T))
1261+ let cR = split(ec[G], "_")
1262+ if (if ((0 > eA))
1263+ then true
1264+ else (eA >= size(s)))
1265+ then throw(("Unknown product idx=" + toString(eA)))
1266+ else {
1267+ let ab = split(s[eA], "_")
1268+ if ((size(ab) != v))
1269+ then throw(("Fatal: unknown recipe: " + s[eA]))
1270+ else {
1271+ let eE = parseIntValue(ab[u])
1272+ if ((q[eE] != eD))
1273+ then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1274+ else {
1275+ let eF = if ((ec[H] == ""))
1276+ then nil
1277+ else split_4C(ec[H], "_")
1278+ func eG (bH,eH) = {
1279+ let aJ = bH._2
1280+ let eI = if ((size(eF) > aJ))
1281+ then eF[aJ]
1282+ else "0"
1283+ let dQ = parseIntValue(eI)
1284+ let bh = (eB * w)
1285+ let eJ = if ((aJ == eA))
1286+ then toString((dQ + bh))
1287+ else eI
1288+ $Tuple2((bH._1 :+ eJ), (aJ + 1))
1289+ }
12591290
1260- let eK = ( let cl = s
1261- let cm = size(cl)
1262- let cn = $Tuple2(nil, 0)
1263- func co (cp,cq) = if ((cq >= cm))
1264- then cp
1265- else eG(cp, cl[cq])
1266-
1267- func cr (cp,cq) = if ((cq >= cm))
1268- then cp
1269- else throw("List size exceeds 50")
1270-
1271- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1272- func eL (bH,bJ) = {
1273- let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1274- let eN = parseIntValue(cR[bJ])
1275- if ((eM > eN))
1276- then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1277- else if ((eM > 0))
1278- then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1279- else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1280- }
1281-
1282- let eO = {
1283- let cl = an
1291+ let eK = ( let cl = s
12841292 let cm = size(cl)
12851293 let cn = $Tuple2(nil, 0)
1286- func cs (cp,cq) = if ((cq >= cm))
1294+ func co (cp,cq) = if ((cq >= cm))
12871295 then cp
1288- else eL(cp, cl[cq])
1296+ else eG(cp, cl[cq])
12891297
1290- func ct (cp,cq) = if ((cq >= cm))
1298+ func cr (cp,cq) = if ((cq >= cm))
12911299 then cp
1292- else throw("List size exceeds 6")
1300+ else throw("List size exceeds 50")
12931301
1294- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1302+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1303+ func eL (bH,bJ) = {
1304+ let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1305+ let eN = parseIntValue(cR[bJ])
1306+ if ((eM > eN))
1307+ then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1308+ else if ((eM > 0))
1309+ then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1310+ else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1311+ }
1312+
1313+ let eO = {
1314+ let cl = an
1315+ let cm = size(cl)
1316+ let cn = $Tuple2(nil, 0)
1317+ func cs (cp,cq) = if ((cq >= cm))
1318+ then cp
1319+ else eL(cp, cl[cq])
1320+
1321+ func ct (cp,cq) = if ((cq >= cm))
1322+ then cp
1323+ else throw("List size exceeds 6")
1324+
1325+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1326+ }
1327+ let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1328+ let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1329+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1330+ $Tuple2(nil, $Tuple3(eP, ea, eh))
12951331 }
1296- let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1297- let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1298- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1299- $Tuple2(nil, $Tuple3(eP, ea, eh))
1300- }
1301- }
1302- }
1303- }
1304- }
1305- }
1332+ }
1333+ }
1334+ }
1335+ }
1336+ }
1337+ else throw("Strict value is not equal to itself.")
13061338 }
13071339
13081340
13741406 @Callable(dX)
13751407 func acceptWarehouseOrder (dq,dp,T) = {
13761408 let ea = bF()
1377- let de = dX.originCaller
1378- let cZ = toString(de)
1379- let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1380- let eb = valueOrElse(getString(aC, U(fb)), g)
1381- let fc = split(value(eb), "_")
1382- if ((fc[J] != "L"))
1383- then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1384- else if ((fb != T))
1385- then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1386- else {
1387- let bD = S(T)
1388- let ec = bC(bD)
1389- let dr = split(ec[F], "_")
1390- let ds = split(ec[G], "_")
1391- let dt = if ((ec[H] == ""))
1392- then nil
1393- else split_4C(ec[H], "_")
1394- let fd = do(dp, cZ, dq, dr, ds, dt)
1395- let fe = fd._1
1396- let ff = fd._2
1397- let fg = fd._3
1398- let fh = fd._4
1399- let cY = fd._5
1400- let dg = fd._6
1401- let fi = fd._7
1402- let di = fd._8
1403- let fj = fd._9
1404- let dK = fd._10
1405- let fk = [fe, cX(cY, cZ, 0)]
1406- let fl = df(dg, dX.payments, di, 0)
1407- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1408- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1409- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1410- $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1411- }
1409+ if ((ea == ea))
1410+ then {
1411+ let de = dX.originCaller
1412+ let cZ = toString(de)
1413+ let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1414+ let eb = valueOrElse(getString(aC, U(fb)), g)
1415+ let fc = split(value(eb), "_")
1416+ if ((fc[J] != "L"))
1417+ then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1418+ else if ((fb != T))
1419+ then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1420+ else {
1421+ let bD = S(T)
1422+ let ec = bC(bD)
1423+ let dr = split(ec[F], "_")
1424+ let ds = split(ec[G], "_")
1425+ let dt = if ((ec[H] == ""))
1426+ then nil
1427+ else split_4C(ec[H], "_")
1428+ let fd = do(dp, cZ, dq, dr, ds, dt)
1429+ let fe = fd._1
1430+ let ff = fd._2
1431+ let fg = fd._3
1432+ let fh = fd._4
1433+ let cY = fd._5
1434+ let dg = fd._6
1435+ let fi = fd._7
1436+ let di = fd._8
1437+ let fj = fd._9
1438+ let dK = fd._10
1439+ let fk = [fe, cX(cY, cZ, 0)]
1440+ let fl = df(dg, dX.payments, di, 0)
1441+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1442+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1443+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1444+ $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1445+ }
1446+ }
1447+ else throw("Strict value is not equal to itself.")
14121448 }
14131449
14141450
14181454 then throw("Delivery feature is turned off!")
14191455 else {
14201456 let ea = bF()
1421- let de = dX.originCaller
1422- let cZ = toString(de)
1423- let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1424- let bD = S(T)
1425- let ec = bC(bD)
1426- let dr = split(ec[F], "_")
1427- let ds = split(ec[G], "_")
1428- let dt = if ((ec[H] == ""))
1429- then nil
1430- else split_4C(ec[H], "_")
1431- let fq = do(dp, cZ, fp, dr, ds, dt)
1432- let fe = fq._1
1433- let ff = fq._2
1434- let fg = fq._3
1435- let fh = fq._4
1436- let cY = fq._5
1437- let dg = fq._6
1438- let fi = fq._7
1439- let di = fq._8
1440- let fj = fq._9
1441- let dK = fq._10
1442- let fr = fraction((dg + cY), aV, aj)
1443- let fs = if ((k > fr))
1444- then k
1445- else fr
1446- let dj = fraction(fs, dg, (dg + cY))
1447- let da = (fs - dj)
1448- let em = valueOrElse(getInteger(Y), 0)
1449- let fk = [fe, cX(cY, cZ, da)]
1450- let fl = df(dg, dX.payments, di, dj)
1451- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1452- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1453- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1454- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1457+ if ((ea == ea))
1458+ then {
1459+ let de = dX.originCaller
1460+ let cZ = toString(de)
1461+ let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1462+ let bD = S(T)
1463+ let ec = bC(bD)
1464+ let dr = split(ec[F], "_")
1465+ let ds = split(ec[G], "_")
1466+ let dt = if ((ec[H] == ""))
1467+ then nil
1468+ else split_4C(ec[H], "_")
1469+ let fq = do(dp, cZ, fp, dr, ds, dt)
1470+ let fe = fq._1
1471+ let ff = fq._2
1472+ let fg = fq._3
1473+ let fh = fq._4
1474+ let cY = fq._5
1475+ let dg = fq._6
1476+ let fi = fq._7
1477+ let di = fq._8
1478+ let fj = fq._9
1479+ let dK = fq._10
1480+ let fr = fraction((dg + cY), aV, aj)
1481+ let fs = if ((k > fr))
1482+ then k
1483+ else fr
1484+ let dj = fraction(fs, dg, (dg + cY))
1485+ let da = (fs - dj)
1486+ let em = valueOrElse(getInteger(Y), 0)
1487+ let fk = [fe, cX(cY, cZ, da)]
1488+ let fl = df(dg, dX.payments, di, dj)
1489+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1490+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1491+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1492+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1493+ }
1494+ else throw("Strict value is not equal to itself.")
14551495 }
14561496
14571497
14611501 then throw("Delivery feature is turned off!")
14621502 else {
14631503 let ea = bF()
1464- let de = dX.originCaller
1465- let cZ = toString(de)
1466- let eo = value(assetInfo(fromBase58String(ft)))
1467- if (!(isDefined(getInteger(aC, N(ft)))))
1468- then throw((("NFT " + eo.name) + " is not staked"))
1469- else {
1470- let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1471- if ((ep != cZ))
1472- then throw((e + " is not yours"))
1504+ if ((ea == ea))
1505+ then {
1506+ let de = dX.originCaller
1507+ let cZ = toString(de)
1508+ let eo = value(assetInfo(fromBase58String(ft)))
1509+ if (!(isDefined(getInteger(aC, N(ft)))))
1510+ then throw((("NFT " + eo.name) + " is not staked"))
14731511 else {
1474- let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1475- let bY = split_4C(dz, ":")
1476- let cK = split(bY[y], "_")
1477- let cR = split(bY[z], "_")
1478- let eF = if ((bY[A] == ""))
1479- then nil
1480- else split(bY[A], "_")
1481- let fu = do(dp, cZ, fp, cK, cR, eF)
1482- let fe = fu._1
1483- let ff = fu._2
1484- let fg = fu._3
1485- let fh = fu._4
1486- let cY = fu._5
1487- let dg = fu._6
1488- let fi = fu._7
1489- let di = fu._8
1490- let fj = fu._9
1491- let dK = fu._10
1492- let fr = fraction((dg + cY), aV, aj)
1493- let fs = if ((k > fr))
1494- then k
1495- else fr
1496- let dj = fraction(fs, dg, (dg + cY))
1497- let da = (fs - dj)
1498- let em = valueOrElse(getInteger(Y), 0)
1499- let fk = [fe, cX(cY, cZ, da)]
1500- let fl = df(dg, dX.payments, di, dj)
1501- let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1502- let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1503- let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1504- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1512+ let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1513+ if ((ep != cZ))
1514+ then throw((e + " is not yours"))
1515+ else {
1516+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1517+ let bY = split_4C(dz, ":")
1518+ let cK = split(bY[y], "_")
1519+ let cR = split(bY[z], "_")
1520+ let eF = if ((bY[A] == ""))
1521+ then nil
1522+ else split(bY[A], "_")
1523+ let fu = do(dp, cZ, fp, cK, cR, eF)
1524+ let fe = fu._1
1525+ let ff = fu._2
1526+ let fg = fu._3
1527+ let fh = fu._4
1528+ let cY = fu._5
1529+ let dg = fu._6
1530+ let fi = fu._7
1531+ let di = fu._8
1532+ let fj = fu._9
1533+ let dK = fu._10
1534+ let fr = fraction((dg + cY), aV, aj)
1535+ let fs = if ((k > fr))
1536+ then k
1537+ else fr
1538+ let dj = fraction(fs, dg, (dg + cY))
1539+ let da = (fs - dj)
1540+ let em = valueOrElse(getInteger(Y), 0)
1541+ let fk = [fe, cX(cY, cZ, da)]
1542+ let fl = df(dg, dX.payments, di, dj)
1543+ let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1544+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1545+ let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1546+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1547+ }
15051548 }
15061549 }
1550+ else throw("Strict value is not equal to itself.")
15071551 }
15081552
15091553
15111555 @Callable(dX)
15121556 func sellProductsToES (cM) = {
15131557 let ea = bF()
1514- if ((size(dX.payments) != 0))
1515- then throw("No payments needed")
1516- else {
1517- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1518- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1519- if ((eb[J] != "A"))
1520- then throw(("Duck location type should be Airport, but is " + eb[J]))
1521- else {
1522- let ec = bC(S(T))
1523- let eF = if ((ec[H] == ""))
1524- then nil
1525- else split_4C(ec[H], "_")
1526- let fv = X()
1527- let fw = getString(fv)
1528- let fx = if (isDefined(fw))
1529- then split_4C(value(fw), "_")
1530- else nil
1531- func fy (bH,fz) = {
1532- let bJ = bH._1
1533- let eB = if ((size(cM) > bJ))
1534- then cM[bJ]
1535- else 0
1536- if ((0 > eB))
1537- then throw("Quantity cannot be negative")
1538- else {
1539- let ab = split(fz, "_")
1540- if ((size(ab) != v))
1541- then throw(("Fatal: unknown recipe: " + fz))
1542- else {
1543- let fA = (i * w)
1544- let fB = if ((size(fx) > bJ))
1545- then parseIntValue(fx[bJ])
1546- else 0
1547- let fC = (fA - fB)
1548- if ((eB > fC))
1549- then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1550- else {
1551- let et = aa(ab)
1552- let fD = fraction((et * j), h, (ak * w))
1553- let fE = if ((size(eF) > bJ))
1554- then parseIntValue(eF[bJ])
1555- else 0
1556- if ((eB > fE))
1557- then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1558- else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1559- }
1560- }
1561- }
1558+ if ((ea == ea))
1559+ then if ((size(dX.payments) != 0))
1560+ then throw("No payments needed")
1561+ else {
1562+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1563+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1564+ if ((eb[J] != "A"))
1565+ then throw(("Duck location type should be Airport, but is " + eb[J]))
1566+ else {
1567+ let ec = bC(S(T))
1568+ let eF = if ((ec[H] == ""))
1569+ then nil
1570+ else split_4C(ec[H], "_")
1571+ let fv = X()
1572+ let fw = getString(fv)
1573+ let fx = if (isDefined(fw))
1574+ then split_4C(value(fw), "_")
1575+ else nil
1576+ func fy (bH,fz) = {
1577+ let bJ = bH._1
1578+ let eB = if ((size(cM) > bJ))
1579+ then cM[bJ]
1580+ else 0
1581+ if ((0 > eB))
1582+ then throw("Quantity cannot be negative")
1583+ else {
1584+ let ab = split(fz, "_")
1585+ if ((size(ab) != v))
1586+ then throw(("Fatal: unknown recipe: " + fz))
1587+ else {
1588+ let fA = (i * w)
1589+ let fB = if ((size(fx) > bJ))
1590+ then parseIntValue(fx[bJ])
1591+ else 0
1592+ let fC = (fA - fB)
1593+ if ((eB > fC))
1594+ then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1595+ else {
1596+ let et = aa(ab)
1597+ let fD = fraction((et * j), h, (ak * w))
1598+ let fE = if ((size(eF) > bJ))
1599+ then parseIntValue(eF[bJ])
1600+ else 0
1601+ if ((eB > fE))
1602+ then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1603+ else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1604+ }
1605+ }
1606+ }
1607+ }
1608+
1609+ let eO = {
1610+ let cl = s
1611+ let cm = size(cl)
1612+ let cn = $Tuple5(0, 0, nil, nil, 0)
1613+ func co (cp,cq) = if ((cq >= cm))
1614+ then cp
1615+ else fy(cp, cl[cq])
1616+
1617+ func cr (cp,cq) = if ((cq >= cm))
1618+ then cp
1619+ else throw("List size exceeds 50")
1620+
1621+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1622+ }
1623+ let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1624+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1625+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1626+ $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
15621627 }
1563-
1564- let eO = {
1565- let cl = s
1566- let cm = size(cl)
1567- let cn = $Tuple5(0, 0, nil, nil, 0)
1568- func co (cp,cq) = if ((cq >= cm))
1569- then cp
1570- else fy(cp, cl[cq])
1571-
1572- func cr (cp,cq) = if ((cq >= cm))
1573- then cp
1574- else throw("List size exceeds 50")
1575-
1576- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1577- }
1578- let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1579- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1580- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1581- $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
1582- }
1583- }
1628+ }
1629+ else throw("Strict value is not equal to itself.")
15841630 }
15851631
15861632
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 10000
55
66 let b = 10000
77
88 let c = 10000
99
1010 let d = 10000
1111
1212 let e = "LAND"
1313
1414 let f = 6
1515
1616 let g = "Africa_F_Africa"
1717
1818 let h = 39637
1919
2020 let i = 10
2121
2222 let j = 4
2323
2424 let k = 50000
2525
2626 let l = 75000
2727
2828 let m = 10
2929
3030 let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
3131
3232 let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
3333
3434 let p = ["First Aid Kit L1", "First Aid Kit L2", "First Aid Kit L3", "Backpack L1", "Backpack L2", "Backpack L3", "Food Ration L1", "Food Ration L2", "Food Ration L3", "Jet Pack L1", "Jet Pack L2", "Jet Pack L3", "Shield L1", "Shield L2", "Shield L3", "Mine L1", "Mine L2", "Mine L3", "Trap L1", "Trap L2", "Trap L3"]
3535
3636 let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
3737
3838 let r = 10000000
3939
4040 let s = ["8_8_8_17_17_42_12_0_30_0,0,0,0,0,0,0_", "8_8_8_17_17_42_24_0_60_0,0,5,2,0,0,0_", "8_8_8_17_17_42_36_0_120_0,0,10,4,0,0,0_", "8_19_19_8_27_19_26_1_20_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_52_1_40_0,0,0,0,0,0,0_001", "8_19_19_8_27_19_78_1_80_0,0,0,0,0,0,0_001", "8_8_8_8_8_60_13_2_2_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_26_2_4_0,0,0,0,0,0,0_011", "8_8_8_8_8_60_39_2_8_0,0,0,0,0,0,0_011", "30_30_3_17_17_3_30_3_30_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_60_3_50_0,0,0,0,0,0,0_111", "30_30_3_17_17_3_90_3_70_0,0,0,0,0,0,0_111", "18_18_10_18_18_18_11_4_10_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_22_4_20_0,0,0,0,0,0,0_201", "18_18_10_18_18_18_33_4_30_0,0,0,0,0,0,0_201", "4_13_22_4_35_22_23_0_50,1,0_0,0,0,0,0,0,0_", "4_13_22_4_35_22_46_0_50,1,1_0,2,5,0,0,0,0_", "4_13_22_4_35_22_69_0_50,2,1_0,5,10,0,0,0,0_", "5_25_40_5_10_15_20_1_30,1,1_0,0,0,0,0,0,0_", "5_25_40_5_10_15_40_1_30,1,2_2,1,3,0,0,0,0_", "5_25_40_5_10_15_60_1_30,1,3_5,2,8,0,0,0,0_"]
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 11
4747
4848 let w = 10
4949
5050 let x = 0
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 4
5959
6060 let C = 0
6161
6262 let D = 3
6363
6464 let E = 0
6565
6666 let F = 1
6767
6868 let G = 2
6969
7070 let H = 3
7171
7272 let I = 0
7373
7474 let J = 1
7575
7676 let K = 2
7777
7878 func L (M) = ("no_" + M)
7979
8080
8181 func N (M) = ("st_" + M)
8282
8383
8484 func O (P) = ("accRefBy_" + P)
8585
8686
8787 func Q (R) = ("stakedDuckByOwner_" + R)
8888
8989
9090 func S (T) = ("backPack_" + T)
9191
9292
9393 func U (T) = ("duckLocation_" + T)
9494
9595
9696 func V (W) = ("landOrder_" + W)
9797
9898
9999 func X () = "emergencyWarehouseProducts"
100100
101101
102102 let Y = "deliveryFund"
103103
104104 let Z = "deliveryLocked"
105105
106106 func aa (ab) = (parseIntValue(ab[t]) * r)
107107
108108
109109 let ac = true
110110
111111 let ad = take(drop(this.bytes, 1), 1)
112112
113113 let ae = {
114114 let af = ad
115115 if ((base58'2W' == af))
116116 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
117117 else if ((base58'2T' == af))
118118 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
119119 else throw("Unknown chain")
120120 }
121121
122122 let ag = {
123123 let af = ad
124124 if ((base58'2W' == af))
125125 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
126126 else if ((base58'2T' == af))
127127 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
128128 else throw("Unknown chain")
129129 }
130130
131131 let ah = "__"
132132
133133 let ai = 100000
134134
135135 let aj = 1000000
136136
137137 let ak = 100000000
138138
139139 let al = 10000000000
140140
141141 let am = 100000
142142
143143 let an = [0, 1, 2, 3, 4, 5]
144144
145145 func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], ""))
146146
147147
148148 let ar = 1
149149
150150 let as = 6
151151
152152 let at = 8
153153
154154 func au () = "%s__restConfig"
155155
156156
157157 func av () = "%s__restAddr"
158158
159159
160160 func aw (ax) = split_4C(ao(ax, au()), ah)
161161
162162
163163 func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA)))
164164
165165
166166 let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag))
167167
168168 let az = aw(aB)
169169
170170 let aC = ay(az, ar)
171171
172172 let aD = ay(az, as)
173173
174174 let aE = ay(az, at)
175175
176176 func aF (aG) = {
177177 let af = aG
178178 if ($isInstanceOf(af, "String"))
179179 then {
180180 let aH = af
181181 aH
182182 }
183183 else throw("fail to cast into String")
184184 }
185185
186186
187187 func aI (aG) = {
188188 let af = aG
189189 if ($isInstanceOf(af, "Int"))
190190 then {
191191 let aJ = af
192192 aJ
193193 }
194194 else throw("fail to cast into Int")
195195 }
196196
197197
198198 func aK () = "contractsBlocked"
199199
200200
201201 func aL (aM,aN) = {
202202 let aO = pow(10, 0, aN, 0, 0, DOWN)
203203 let aP = toString((aM % aO))
204204 let aQ = drop(toString(aO), (1 + size(aP)))
205205 (((toString((aM / aO)) + ".") + aQ) + aP)
206206 }
207207
208208
209209 let aR = 10000000000
210210
211211 let aS = 200
212212
213213 let aT = 300
214214
215215 let aU = 10000
216216
217217 let aV = 10000
218218
219219 let aW = 15000
220220
221221 func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ))
222222
223223
224224 let ba = 0
225225
226226 let bb = 1
227227
228228 let bc = 2
229229
230230 func bd (be) = {
231231 let bf = split(valueOrElse(getString(be), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
232232 [if ((size(split(bf[ba], "_")) == f))
233233 then bf[ba]
234234 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f))
235235 then bf[bb]
236236 else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]]
237237 }
238238
239239
240240 func bg (bh,bi,bj) = if (bj)
241241 then {
242242 let bk = if ((bh >= 0))
243243 then (((bh + bi) - 1) / bi)
244244 else -((((-(bh) + bi) - 1) / bi))
245245 (bk * ak)
246246 }
247247 else bh
248248
249249
250250 func bl (bm,aZ,bh,bn) = {
251251 let bo = aX(bm, aZ)
252252 let bp = valueOrElse(getInteger(bo), 0)
253253 let bq = if ((bp > aR))
254254 then 0
255255 else if (((bp + bh) > aR))
256256 then (aR - bp)
257257 else bh
258258 let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak))
259259 let bs = (bn - (bn / 100))
260260 if (((bs * bh) > (br * ak)))
261261 then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")"))
262262 else $Tuple2(IntegerEntry(bo, (bp + bh)), br)
263263 }
264264
265265
266266 func bt (bm,bu,bh,bv) = {
267267 let bo = aX(bm, bu)
268268 let bp = valueOrElse(getInteger(bo), 0)
269269 let bw = if ((bp > aR))
270270 then min([bh, (bp - aR)])
271271 else 0
272272 let bx = min([bp, (bh - bw)])
273273 let by = (bx + bw)
274274 let bz = min([bp, aR])
275275 let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak))
276276 let bB = (bv + (bv / 100))
277277 if (((bA * ak) > (bB * by)))
278278 then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")"))
279279 else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by)
280280 }
281281
282282
283283 func bC (bD) = {
284284 let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
285285 [toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f))
286286 then bf[F]
287287 else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f))
288288 then bf[G]
289289 else "0_0_0_0_0_0", bf[H]]
290290 }
291291
292292
293293 func bE () = if (valueOrElse(getBoolean(aC, aK()), false))
294294 then throw("Contracts are under maintenance")
295295 else unit
296296
297297
298-func bF () = aI(invoke(aC, "saveLastTx", nil, nil))
298+func bF () = aI(reentrantInvoke(aC, "saveLastTx", nil, nil))
299299
300300
301301 func bG (bH,bI) = {
302302 let bJ = bH._1
303303 let bK = if ((size(bH._10) > bJ))
304304 then bH._10[bJ]
305305 else "0@0"
306306 let bL = bH._8
307307 let bM = split(bK, "@")
308308 if ((size(bM) != 2))
309309 then throw("Incorrect order format, should be amount@price")
310310 else {
311311 let bN = parseIntValue(bM[0])
312312 let bO = parseIntValue(bM[1])
313313 let bP = if (bL)
314314 then (bN * bO)
315315 else fraction(bN, bO, ak)
316316 let bQ = bg(bN, w, bL)
317317 let bR = if ((size(bH._6) > bJ))
318318 then parseIntValue(bH._6[bJ])
319319 else 0
320320 let bS = split(if ((size(bH._7) > bJ))
321321 then bH._7[bJ]
322322 else "0@0", "@")
323323 let bT = parseIntValue(bS[0])
324324 let bU = parseIntValue(bS[1])
325325 if (if ((0 > bU))
326326 then true
327327 else (0 > bO))
328328 then throw("Price can't be negative")
329329 else {
330330 let bV = if (bL)
331331 then (bT * bU)
332332 else fraction(bT, bU, ak)
333333 if ((bN == 0))
334334 then if ((bT > 0))
335335 then $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), bH._3, bH._4, (bH._5 - bV), bH._6, bH._7, bL, (bH._9 + bg(bR, w, bL)), bH._10)
336336 else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), bH._3, bH._4, bH._5, bH._6, bH._7, bL, (bH._9 + bg((bR - bT), w, bL)), bH._10)
337337 else if ((bN > 0))
338338 then if ((0 > bT))
339339 then $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bT))), (bH._3 + bQ), bH._4, (bH._5 + bP), bH._6, bH._7, bL, bg((bR - bT), w, bL), bH._10)
340340 else $Tuple10((bJ + 1), (bH._2 :+ toString(bR)), (bH._3 + bQ), bH._4, ((bH._5 + bP) - bV), bH._6, bH._7, bL, bg(bR, w, bL), bH._10)
341341 else if ((0 > bT))
342342 then {
343343 let bW = (bT - bN)
344344 if ((0 > (bR - bW)))
345345 then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available"))
346346 else $Tuple10((bJ + 1), (bH._2 :+ toString((bR - bW))), bH._3, (bH._4 - bQ), bH._5, bH._6, bH._7, bL, bg((bR - bW), w, bL), bH._10)
347347 }
348348 else if ((0 > (bR + bN)))
349349 then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available"))
350350 else $Tuple10((bJ + 1), (bH._2 :+ toString((bR + bN))), bH._3, (bH._4 - bQ), (bH._5 - bV), bH._6, bH._7, bL, bg((bR + bN), w, bL), bH._10)
351351 }
352352 }
353353 }
354354
355355
356356 func bX (bY,bZ,ca) = {
357357 let cb = split(bY[y], "_")
358358 let cc = split(bY[z], "_")
359359 let cd = if ((bY[A] == ""))
360360 then nil
361361 else split_4C(bY[A], "_")
362362 let ce = split(bZ[ba], "_")
363363 let cf = split(bZ[bb], "_")
364364 let cg = if ((bZ[bc] == ""))
365365 then nil
366366 else split_4C(bZ[bc], "_")
367367 if ((size(ca) != 3))
368368 then throw("newOrderStr should contain exactly 2 ':' separators")
369369 else {
370370 let ch = split(ca[0], "_")
371371 let ci = split(ca[1], "_")
372372 let cj = if ((ca[2] == ""))
373373 then nil
374374 else split_4C(ca[2], "_")
375375 if ((size(ch) != f))
376376 then throw("All 6 resources should be passed")
377377 else if ((size(ci) != f))
378378 then throw("All 6 materials should be passed")
379379 else {
380380 let ck = {
381381 let cl = n
382382 let cm = size(cl)
383383 let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch)
384384 func co (cp,cq) = if ((cq >= cm))
385385 then cp
386386 else bG(cp, cl[cq])
387387
388388 func cr (cp,cq) = if ((cq >= cm))
389389 then cp
390390 else throw("List size exceeds 6")
391391
392392 cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
393393 }
394394 let by = {
395395 let cl = o
396396 let cm = size(cl)
397397 let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci)
398398 func cs (cp,cq) = if ((cq >= cm))
399399 then cp
400400 else bG(cp, cl[cq])
401401
402402 func ct (cp,cq) = if ((cq >= cm))
403403 then cp
404404 else throw("List size exceeds 6")
405405
406406 ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
407407 }
408408 let bf = {
409409 let cl = p
410410 let cm = size(cl)
411411 let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj)
412412 func cu (cp,cq) = if ((cq >= cm))
413413 then cp
414414 else bG(cp, cl[cq])
415415
416416 func cv (cp,cq) = if ((cq >= cm))
417417 then cp
418418 else throw("List size exceeds 50")
419419
420420 cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
421421 }
422422 $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9)
423423 }
424424 }
425425 }
426426
427427
428428 func cw (bH,cx) = {
429429 let bJ = bH._7
430430 let bL = bH._12
431431 let cy = split(cx, "@")
432432 if ((size(cy) != 2))
433433 then throw("Incorrect order format, should be amount@price")
434434 else {
435435 let cz = parseIntValue(cy[0])
436436 let cA = parseIntValue(cy[1])
437437 if ((0 > cA))
438438 then throw("Price can't be negative")
439439 else {
440440 let cB = if (bL)
441441 then (cz * cA)
442442 else fraction(cz, cA, ak)
443443 let cC = if ((size(bH._8) > bJ))
444444 then parseIntValue(bH._8[bJ])
445445 else 0
446446 let bR = if ((size(bH._9) > bJ))
447447 then parseIntValue(bH._9[bJ])
448448 else 0
449449 let cD = if ((size(bH._10) > bJ))
450450 then bH._10[bJ]
451451 else "0@0"
452452 let cE = split(cD, "@")
453453 let cF = parseIntValue(cE[0])
454454 let cG = parseIntValue(cE[1])
455455 if (if ((cz != 0))
456456 then (cA != cG)
457457 else false)
458458 then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA)))
459459 else {
460460 let cH = if (bL)
461461 then (cF * cG)
462462 else fraction(cF, cG, ak)
463463 let cI = bg(cz, w, bL)
464464 if ((cz == 0))
465465 then $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ cD), (bH._3 :+ toString(cC)), bH._4, bH._5, bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, bH._13)
466466 else if ((cz > 0))
467467 then if ((0 > cF))
468468 then if ((cz > -(cF)))
469469 then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF))))
470470 else $Tuple13((bH._1 :+ toString(bR)), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 + cI), bH._5, (bH._6 + cB), (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 + (if (bL)
471471 then (cz * ak)
472472 else cz)))
473473 else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it"))
474474 else if ((cF > 0))
475475 then if ((-(cz) > cF))
476476 then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF)))
477477 else if ((-(cz) > cC))
478478 then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ]))
479479 else $Tuple13((bH._1 :+ toString((bR - cz))), (bH._2 :+ ((toString((cF + cz)) + "@") + toString(cG))), (bH._3 :+ toString((cC + cz))), (bH._4 - cI), (bH._5 - cB), bH._6, (bH._7 + 1), bH._8, bH._9, bH._10, bH._11, bL, (bH._13 - (if (bL)
480480 then (cz * ak)
481481 else cz)))
482482 else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it"))
483483 }
484484 }
485485 }
486486 }
487487
488488
489489 func cJ (cK,cL,cM,cN) = {
490490 func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ])))
491491 then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ])))
492492 else if ((0 > cM[bJ]))
493493 then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ])))
494494 else if ((cM[bJ] > 0))
495495 then {
496496 let cP = bl(cL, bJ, cM[bJ], cN[bJ])
497497 $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
498498 }
499499 else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4)
500500
501501 let cl = an
502502 let cm = size(cl)
503503 let cn = $Tuple4(nil, nil, 0, 0)
504504 func co (cp,cq) = if ((cq >= cm))
505505 then cp
506506 else cO(cp, cl[cq])
507507
508508 func cr (cp,cq) = if ((cq >= cm))
509509 then cp
510510 else throw("List size exceeds 6")
511511
512512 cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
513513 }
514514
515515
516516 func cQ (cR,cL,cM,cS) = {
517517 func cT (bH,bJ) = if ((0 > cM[bJ]))
518518 then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ])))
519519 else if ((cM[bJ] > 0))
520520 then {
521521 let cP = bt(cL, bJ, cM[bJ], cS[bJ])
522522 $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ]))
523523 }
524524 else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4)
525525
526526 let cl = an
527527 let cm = size(cl)
528528 let cn = $Tuple4(nil, nil, 0, 0)
529529 func co (cp,cq) = if ((cq >= cm))
530530 then cp
531531 else cT(cp, cl[cq])
532532
533533 func cr (cp,cq) = if ((cq >= cm))
534534 then cp
535535 else throw("List size exceeds 6")
536536
537537 cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
538538 }
539539
540540
541541 func cU (cK,cR,cM) = {
542542 func cV (bH,bJ) = {
543543 let cW = cM[bJ]
544544 if ((cW > parseIntValue(cK[bJ])))
545545 then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW)))
546546 else if ((0 > cW))
547547 then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW)))
548548 else if ((cW > 0))
549549 then $Tuple4((bH._1 :+ toString((parseIntValue(cK[bJ]) - cW))), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cW))), (bH._3 + fraction(cW, h, ak)), (bH._4 + cW))
550550 else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4)
551551 }
552552
553553 let cl = an
554554 let cm = size(cl)
555555 let cn = $Tuple4(nil, nil, 0, 0)
556556 func co (cp,cq) = if ((cq >= cm))
557557 then cp
558558 else cV(cp, cl[cq])
559559
560560 func cr (cp,cq) = if ((cq >= cm))
561561 then cp
562562 else throw("List size exceeds 6")
563563
564564 cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
565565 }
566566
567567
568568 func cX (cY,cZ,da) = if ((cY > 0))
569569 then {
570570 let db = fraction(cY, aU, aj)
571571 if ((da >= (cY - (3 * db))))
572572 then throw(("This trade does not cover delivery cost of " + aL(da, 6)))
573573 else {
574574 let dc = O(cZ)
575575 let dd = getString(aC, dc)
576576 let de = addressFromStringValue(cZ)
577577 (((if (isDefined(dd))
578578 then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)]
579579 else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae))
580580 }
581581 }
582582 else nil
583583
584584
585585 func df (dg,dh,di,dj) = if ((dg > 0))
586586 then if ((size(dh) != 1))
587587 then throw("exactly 1 payment must be attached")
588588 else {
589589 let dk = dh[0]
590590 let dl = dk.amount
591591 if (if (!(isDefined(dk.assetId)))
592592 then true
593593 else (value(dk.assetId) != ae))
594594 then throw("USDT payments only!")
595595 else {
596596 let dm = (dg + dj)
597597 if ((dl != dm))
598598 then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)"))
599599 else if ((am > dg))
600600 then throw(("Min shop trade is " + aL(am, 6)))
601601 else {
602602 let dn = fraction(dg, aU, aj)
603603 let dc = O(di)
604604 let dd = getString(aC, dc)
605605 (((if (isDefined(dd))
606606 then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)]
607607 else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae))
608608 }
609609 }
610610 }
611611 else if ((size(dh) != 0))
612612 then throw("No payments needed")
613613 else nil
614614
615615
616616 func do (dp,cZ,dq,dr,ds,dt) = {
617617 let du = value(assetInfo(fromBase58String(dp)))
618618 if (!(isDefined(getInteger(aC, N(dp)))))
619619 then throw((("NFT " + du.name) + " is not staked"))
620620 else {
621621 let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned"))
622622 if ((di == cZ))
623623 then throw("You cannot trade with yourself")
624624 else {
625625 let dv = split_4C(dq, ":")
626626 if ((size(dv) != 3))
627627 then throw("bpOrderStr should contain exactly 2 ':' separators")
628628 else {
629629 let dw = split(dv[0], "_")
630630 let dx = split(dv[1], "_")
631631 let dy = if ((dv[2] == ""))
632632 then nil
633633 else split_4C(dv[2], "_")
634634 if ((size(dw) != f))
635635 then throw("All 6 resources should be passed")
636636 else if ((size(dx) != f))
637637 then throw("All 6 materials should be passed")
638638 else {
639639 let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil))
640640 let bY = split_4C(dz, ":")
641641 let cb = split(bY[y], "_")
642642 let cc = split(bY[z], "_")
643643 let cd = if ((bY[A] == ""))
644644 then nil
645645 else split_4C(bY[A], "_")
646646 let dA = parseIntValue(split(bY[B], "_")[C])
647647 let be = V(dp)
648648 let dB = bd(be)
649649 let dC = split(dB[ba], "_")
650650 let dD = split(dB[bb], "_")
651651 let dE = if ((dB[bc] == ""))
652652 then nil
653653 else split_4C(dB[bc], "_")
654654 let ck = {
655655 let cl = dw
656656 let cm = size(cl)
657657 let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0)
658658 func co (cp,cq) = if ((cq >= cm))
659659 then cp
660660 else cw(cp, cl[cq])
661661
662662 func cr (cp,cq) = if ((cq >= cm))
663663 then cp
664664 else throw("List size exceeds 6")
665665
666666 cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6)
667667 }
668668 let by = {
669669 let cl = dx
670670 let cm = size(cl)
671671 let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13)
672672 func cs (cp,cq) = if ((cq >= cm))
673673 then cp
674674 else cw(cp, cl[cq])
675675
676676 func ct (cp,cq) = if ((cq >= cm))
677677 then cp
678678 else throw("List size exceeds 6")
679679
680680 ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
681681 }
682682 let bf = if ((size(dy) != 0))
683683 then {
684684 let cl = dy
685685 let cm = size(cl)
686686 let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
687687 func cu (cp,cq) = if ((cq >= cm))
688688 then cp
689689 else cw(cp, cl[cq])
690690
691691 func cv (cp,cq) = if ((cq >= cm))
692692 then cp
693693 else throw("List size exceeds 50")
694694
695695 cv(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cu(cn, 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)
696696 }
697697 else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13)
698698 let dF = bf._4
699699 let dG = if ((0 > (dA - dF)))
700700 then 0
701701 else (dA - dF)
702702 let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":")
703703 let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":")
704704 let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil))
705705 let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil))
706706 $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK)
707707 }
708708 }
709709 }
710710 }
711711 }
712712
713713
714714 func dL (bh) = {
715715 let dM = (bh / 30)
716716 let dN = [dM, dM, dM, dM, dM, dM]
717717 let aH = toString(dM)
718718 let cK = [aH, aH, aH, aH, aH, aH]
719719 let cN = [0, 0, 0, 0, 0, 0]
720720 func dO (bH,dP) = {
721721 let dQ = cJ(cK, dP, dN, cN)
722722 $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4))
723723 }
724724
725725 let dR = {
726726 let cl = q
727727 let cm = size(cl)
728728 let cn = $Tuple3(nil, 0, 0)
729729 func co (cp,cq) = if ((cq >= cm))
730730 then cp
731731 else dO(cp, cl[cq])
732732
733733 func cr (cp,cq) = if ((cq >= cm))
734734 then cp
735735 else throw("List size exceeds 5")
736736
737737 cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5)
738738 }
739739 let dS = dR._1
740740 let br = dR._2
741741 let dT = dR._3
742742 let dU = fraction(br, aV, aj)
743743 let dV = (br / 100)
744744 let dW = ((br - dV) - dU)
745745 $Tuple5(dS, dW, dU, dV, dT)
746746 }
747747
748748
749749 @Callable(dX)
750750 func recalcLockedVolumeREADONLY (W,dz) = {
751751 let bZ = bd(V(W))
752752 let dY = bX(dz, bZ, bZ)
753753 $Tuple2(nil, (dY._4 + dY._5))
754754 }
755755
756756
757757
758758 @Callable(dX)
759759 func constructorV1 (dZ) = if ((dX.caller != this))
760760 then throw("Permission denied")
761761 else [StringEntry(av(), dZ)]
762762
763763
764764
765765 @Callable(dX)
766766 func sellResources (cM,cN) = {
767767 let ea = bF()
768- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
769- if ((size(dX.payments) != 0))
770- then throw("sellResources doesn't require any payments")
771- else {
772- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
773- if ((eb[J] != "F"))
774- then throw(("Duck location type should be Factory, but is " + eb[J]))
768+ if ((ea == ea))
769+ then {
770+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
771+ if ((size(dX.payments) != 0))
772+ then throw("sellResources doesn't require any payments")
775773 else {
776- let ec = bC(S(T))
777- let cK = split(ec[F], "_")
778- let ed = cJ(cK, eb[K], cM, cN)
779- let dS = ed._1
780- let ee = ed._2
781- let br = ed._3
782- let dT = ed._4
783- let dV = (br / 100)
784- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
785- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
786- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
787- $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
774+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
775+ if ((eb[J] != "F"))
776+ then throw(("Duck location type should be Factory, but is " + eb[J]))
777+ else {
778+ let ec = bC(S(T))
779+ let cK = split(ec[F], "_")
780+ let ed = cJ(cK, eb[K], cM, cN)
781+ let dS = ed._1
782+ let ee = ed._2
783+ let br = ed._3
784+ let dT = ed._4
785+ let dV = (br / 100)
786+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
787+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
788+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
789+ $Tuple2(((dS :+ ScriptTransfer(dX.caller, (br - dV), ae)) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
790+ }
788791 }
789792 }
793+ else throw("Strict value is not equal to itself.")
790794 }
791795
792796
793797
794798 @Callable(dX)
795799 func sellResourcesWorld (P,bh) = if ((dX.caller != aE))
796800 then throw("Permission denied")
797801 else {
798802 let ei = dL(bh)
799803 let dS = ei._1
800804 let dW = ei._2
801805 let dU = ei._3
802806 let dV = ei._4
803807 let dT = ei._5
804808 if ((0 >= dW))
805809 then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
806810 else {
807811 let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
808812 $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh))
809813 }
810814 }
811815
812816
813817
814818 @Callable(dX)
815819 func sellResourcesWorldREADONLY (bh) = {
816820 let dW = dL(bh)._2
817821 $Tuple2(nil, dW)
818822 }
819823
820824
821825
822826 @Callable(dX)
823827 func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac))
824828 then throw("Delivery feature is turned off!")
825829 else {
826830 let ea = bF()
827- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
828- if ((size(dX.payments) != 0))
829- then throw("sellResources doesn't require any payments")
830- else {
831- let ec = bC(S(T))
832- let cK = split(ec[F], "_")
833- let ek = cJ(cK, ej, cM, cN)
834- let dS = ek._1
835- let ee = ek._2
836- let br = ek._3
837- let dT = ek._4
838- let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
839- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
840- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
841- let el = fraction(br, aV, aj)
842- let dU = if ((k > el))
843- then k
844- else el
845- let dV = (br / 100)
846- if ((dU >= (br - dV)))
847- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
831+ if ((ea == ea))
832+ then {
833+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
834+ if ((size(dX.payments) != 0))
835+ then throw("sellResources doesn't require any payments")
848836 else {
849- let em = valueOrElse(getInteger(Y), 0)
850- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
837+ let ec = bC(S(T))
838+ let cK = split(ec[F], "_")
839+ let ek = cJ(cK, ej, cM, cN)
840+ let dS = ek._1
841+ let ee = ek._2
842+ let br = ek._3
843+ let dT = ek._4
844+ let ef = makeString_2C([ec[E], makeString(ee, "_"), ec[G], ec[H]], ":")
845+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
846+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, dT, ak)], nil))
847+ let el = fraction(br, aV, aj)
848+ let dU = if ((k > el))
849+ then k
850+ else el
851+ let dV = (br / 100)
852+ if ((dU >= (br - dV)))
853+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
854+ else {
855+ let em = valueOrElse(getInteger(Y), 0)
856+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
857+ }
851858 }
852859 }
860+ else throw("Strict value is not equal to itself.")
853861 }
854862
855863
856864
857865 @Callable(dX)
858866 func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac))
859867 then throw("Delivery feature is turned off!")
860868 else {
861869 let ea = bF()
862- if ((size(dX.payments) != 0))
863- then throw("sellResources doesn't require any payments")
864- else {
865- let en = dX.caller
866- let P = toString(en)
867- let eo = value(assetInfo(fromBase58String(W)))
868- if (!(isDefined(getInteger(aC, N(W)))))
869- then throw((("NFT " + eo.name) + " is not staked"))
870- else {
871- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
872- if ((ep != P))
873- then throw((e + " is not yours"))
874- else {
875- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
876- let bY = split_4C(dz, ":")
877- let cK = split(bY[y], "_")
878- let eq = cJ(cK, ej, cM, cN)
879- let dS = eq._1
880- let ee = eq._2
881- let br = eq._3
882- let dT = eq._4
883- let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
884- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
885- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
886- let el = fraction(br, aV, aj)
887- let dU = if ((k > el))
888- then k
889- else el
890- let dV = (br / 100)
891- if ((dU >= (br - dV)))
892- then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
893- else {
894- let em = valueOrElse(getInteger(Y), 0)
895- $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
896- }
897- }
898- }
899- }
870+ if ((ea == ea))
871+ then if ((size(dX.payments) != 0))
872+ then throw("sellResources doesn't require any payments")
873+ else {
874+ let en = dX.caller
875+ let P = toString(en)
876+ let eo = value(assetInfo(fromBase58String(W)))
877+ if (!(isDefined(getInteger(aC, N(W)))))
878+ then throw((("NFT " + eo.name) + " is not staked"))
879+ else {
880+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
881+ if ((ep != P))
882+ then throw((e + " is not yours"))
883+ else {
884+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
885+ let bY = split_4C(dz, ":")
886+ let cK = split(bY[y], "_")
887+ let eq = cJ(cK, ej, cM, cN)
888+ let dS = eq._1
889+ let ee = eq._2
890+ let br = eq._3
891+ let dT = eq._4
892+ let dH = makeString_2C([bY[x], makeString(ee, "_"), bY[z], bY[A], bY[B]], ":")
893+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
894+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil))
895+ let el = fraction(br, aV, aj)
896+ let dU = if ((k > el))
897+ then k
898+ else el
899+ let dV = (br / 100)
900+ if ((dU >= (br - dV)))
901+ then throw(("This trade does not cover delivery cost of " + aL(dU, 6)))
902+ else {
903+ let em = valueOrElse(getInteger(Y), 0)
904+ $Tuple2((((dS :+ ScriptTransfer(dX.caller, ((br - dV) - dU), ae)) :+ IntegerEntry(Y, (em + dU))) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(dJ, ea, eh))
905+ }
906+ }
907+ }
908+ }
909+ else throw("Strict value is not equal to itself.")
900910 }
901911
902912
903913
904914 @Callable(dX)
905915 func buyMaterials (cM,cS) = {
906916 let ea = bF()
907- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
908- if ((size(dX.payments) != 1))
909- then throw("exactly 1 payment must be attached")
910- else {
911- let dk = dX.payments[0]
912- let dl = dk.amount
913- if (if (!(isDefined(dk.assetId)))
914- then true
915- else (value(dk.assetId) != ae))
916- then throw("USDT payments only!")
917+ if ((ea == ea))
918+ then {
919+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
920+ if ((size(dX.payments) != 1))
921+ then throw("exactly 1 payment must be attached")
917922 else {
918- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
919- if ((eb[J] != "F"))
920- then throw(("Duck location type should be Factory, but is " + eb[J]))
923+ let dk = dX.payments[0]
924+ let dl = dk.amount
925+ if (if (!(isDefined(dk.assetId)))
926+ then true
927+ else (value(dk.assetId) != ae))
928+ then throw("USDT payments only!")
921929 else {
922- let ec = bC(S(T))
923- let cR = split(ec[G], "_")
924- let er = cQ(cR, eb[K], cM, cS)
925- let dS = er._1
926- let es = er._2
927- let bA = er._3
928- let et = er._4
929- if ((bA > dl))
930- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
930+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
931+ if ((eb[J] != "F"))
932+ then throw(("Duck location type should be Factory, but is " + eb[J]))
931933 else {
932- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
933- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
934- let ax = if (((dl - bA) > 0))
935- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
936- else nil
937- let dV = (bA / 100)
938- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
939- $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
934+ let ec = bC(S(T))
935+ let cR = split(ec[G], "_")
936+ let er = cQ(cR, eb[K], cM, cS)
937+ let dS = er._1
938+ let es = er._2
939+ let bA = er._3
940+ let et = er._4
941+ if ((bA > dl))
942+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
943+ else {
944+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
945+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
946+ let ax = if (((dl - bA) > 0))
947+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
948+ else nil
949+ let dV = (bA / 100)
950+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
951+ $Tuple2(((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
952+ }
940953 }
941954 }
942955 }
943956 }
957+ else throw("Strict value is not equal to itself.")
944958 }
945959
946960
947961
948962 @Callable(dX)
949963 func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac))
950964 then throw("Delivery feature is turned off!")
951965 else {
952966 let ea = bF()
953- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
954- if ((size(dX.payments) != 1))
955- then throw("exactly 1 payment must be attached")
956- else {
957- let dk = dX.payments[0]
958- let dl = dk.amount
959- if (if (!(isDefined(dk.assetId)))
960- then true
961- else (value(dk.assetId) != ae))
962- then throw("USDT payments only!")
967+ if ((ea == ea))
968+ then {
969+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
970+ if ((size(dX.payments) != 1))
971+ then throw("exactly 1 payment must be attached")
963972 else {
964- let ec = bC(S(T))
965- let cR = split(ec[G], "_")
966- let eu = cQ(cR, ej, cM, cS)
967- let dS = eu._1
968- let es = eu._2
969- let bA = eu._3
970- let et = eu._4
971- let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
972- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
973- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
974- let el = fraction(bA, aV, aj)
975- let dU = if ((k > el))
976- then k
977- else el
978- let dm = (bA + dU)
979- if ((dm > dl))
980- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
973+ let dk = dX.payments[0]
974+ let dl = dk.amount
975+ if (if (!(isDefined(dk.assetId)))
976+ then true
977+ else (value(dk.assetId) != ae))
978+ then throw("USDT payments only!")
981979 else {
982- let ax = if (((dl - dm) > 0))
983- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
984- else nil
985- let dV = (bA / 100)
986- let em = valueOrElse(getInteger(Y), 0)
987- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
980+ let ec = bC(S(T))
981+ let cR = split(ec[G], "_")
982+ let eu = cQ(cR, ej, cM, cS)
983+ let dS = eu._1
984+ let es = eu._2
985+ let bA = eu._3
986+ let et = eu._4
987+ let ef = makeString([ec[E], ec[F], makeString(es, "_"), ec[H]], ":")
988+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
989+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, et, ak)], nil))
990+ let el = fraction(bA, aV, aj)
991+ let dU = if ((k > el))
992+ then k
993+ else el
994+ let dm = (bA + dU)
995+ if ((dm > dl))
996+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
997+ else {
998+ let ax = if (((dl - dm) > 0))
999+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1000+ else nil
1001+ let dV = (bA / 100)
1002+ let em = valueOrElse(getInteger(Y), 0)
1003+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1004+ }
9881005 }
9891006 }
9901007 }
1008+ else throw("Strict value is not equal to itself.")
9911009 }
9921010
9931011
9941012
9951013 @Callable(dX)
9961014 func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac))
9971015 then throw("Delivery feature is turned off!")
9981016 else {
9991017 let ea = bF()
1000- if ((size(dX.payments) != 1))
1001- then throw("exactly 1 payment must be attached")
1002- else {
1003- let dk = dX.payments[0]
1004- let dl = dk.amount
1005- if (if (!(isDefined(dk.assetId)))
1006- then true
1007- else (value(dk.assetId) != ae))
1008- then throw("USDT payments only!")
1009- else {
1010- let en = dX.caller
1011- let P = toString(en)
1012- let eo = value(assetInfo(fromBase58String(W)))
1013- if (!(isDefined(getInteger(aC, N(W)))))
1014- then throw((("NFT " + eo.name) + " is not staked"))
1015- else {
1016- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1017- if ((ep != P))
1018- then throw((e + " is not yours"))
1019- else {
1020- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1021- let bY = split_4C(dz, ":")
1022- let cR = split(bY[z], "_")
1023- let ev = cQ(cR, ej, cM, cS)
1024- let dS = ev._1
1025- let es = ev._2
1026- let bA = ev._3
1027- let et = ev._4
1028- let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1029- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1030- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1031- let el = fraction(bA, aV, aj)
1032- let dU = if ((k > el))
1033- then k
1034- else el
1035- let dm = (bA + dU)
1036- if ((dm > dl))
1037- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1038- else {
1039- let ax = if (((dl - dm) > 0))
1040- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1041- else nil
1042- let dV = (bA / 100)
1043- let em = valueOrElse(getInteger(Y), 0)
1044- $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1045- }
1046- }
1047- }
1048- }
1049- }
1018+ if ((ea == ea))
1019+ then if ((size(dX.payments) != 1))
1020+ then throw("exactly 1 payment must be attached")
1021+ else {
1022+ let dk = dX.payments[0]
1023+ let dl = dk.amount
1024+ if (if (!(isDefined(dk.assetId)))
1025+ then true
1026+ else (value(dk.assetId) != ae))
1027+ then throw("USDT payments only!")
1028+ else {
1029+ let en = dX.caller
1030+ let P = toString(en)
1031+ let eo = value(assetInfo(fromBase58String(W)))
1032+ if (!(isDefined(getInteger(aC, N(W)))))
1033+ then throw((("NFT " + eo.name) + " is not staked"))
1034+ else {
1035+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1036+ if ((ep != P))
1037+ then throw((e + " is not yours"))
1038+ else {
1039+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1040+ let bY = split_4C(dz, ":")
1041+ let cR = split(bY[z], "_")
1042+ let ev = cQ(cR, ej, cM, cS)
1043+ let dS = ev._1
1044+ let es = ev._2
1045+ let bA = ev._3
1046+ let et = ev._4
1047+ let dH = makeString_2C([bY[x], bY[y], makeString(es, "_"), bY[A], bY[B]], ":")
1048+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1049+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, et, ak)], nil))
1050+ let el = fraction(bA, aV, aj)
1051+ let dU = if ((k > el))
1052+ then k
1053+ else el
1054+ let dm = (bA + dU)
1055+ if ((dm > dl))
1056+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1057+ else {
1058+ let ax = if (((dl - dm) > 0))
1059+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1060+ else nil
1061+ let dV = (bA / 100)
1062+ let em = valueOrElse(getInteger(Y), 0)
1063+ $Tuple2((((dS ++ ax) :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1064+ }
1065+ }
1066+ }
1067+ }
1068+ }
1069+ else throw("Strict value is not equal to itself.")
10501070 }
10511071
10521072
10531073
10541074 @Callable(dX)
10551075 func exchangeResources (cM) = {
10561076 let ea = bF()
1057- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1058- if ((size(dX.payments) != 1))
1059- then throw("exactly 1 payment must be attached")
1060- else {
1061- let dk = dX.payments[0]
1062- let dl = dk.amount
1063- if (if (!(isDefined(dk.assetId)))
1064- then true
1065- else (value(dk.assetId) != ae))
1066- then throw("USDT payments only!")
1077+ if ((ea == ea))
1078+ then {
1079+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1080+ if ((size(dX.payments) != 1))
1081+ then throw("exactly 1 payment must be attached")
10671082 else {
1068- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1069- if ((eb[J] != "F"))
1070- then throw(("Duck location type should be Factory, but is " + eb[J]))
1083+ let dk = dX.payments[0]
1084+ let dl = dk.amount
1085+ if (if (!(isDefined(dk.assetId)))
1086+ then true
1087+ else (value(dk.assetId) != ae))
1088+ then throw("USDT payments only!")
10711089 else {
1072- let ec = bC(S(T))
1073- let cK = split(ec[F], "_")
1074- let cR = split(ec[G], "_")
1075- let ew = cU(cK, cR, cM)
1076- let ee = ew._1
1077- let es = ew._2
1078- let bA = ew._3
1079- let ex = ew._4
1080- if ((bA > dl))
1081- then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1090+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1091+ if ((eb[J] != "F"))
1092+ then throw(("Duck location type should be Factory, but is " + eb[J]))
10821093 else {
1083- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1084- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1085- let ax = if (((dl - bA) > 0))
1086- then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1087- else nil
1088- let dV = (bA / 100)
1089- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1090- $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1094+ let ec = bC(S(T))
1095+ let cK = split(ec[F], "_")
1096+ let cR = split(ec[G], "_")
1097+ let ew = cU(cK, cR, cM)
1098+ let ee = ew._1
1099+ let es = ew._2
1100+ let bA = ew._3
1101+ let ex = ew._4
1102+ if ((bA > dl))
1103+ then throw(((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)))
1104+ else {
1105+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1106+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1107+ let ax = if (((dl - bA) > 0))
1108+ then [ScriptTransfer(dX.caller, (dl - bA), ae)]
1109+ else nil
1110+ let dV = (bA / 100)
1111+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1112+ $Tuple2((ax :+ ScriptTransfer(aB, dV, ae)), $Tuple3(eg, ea, eh))
1113+ }
10911114 }
10921115 }
10931116 }
10941117 }
1118+ else throw("Strict value is not equal to itself.")
10951119 }
10961120
10971121
10981122
10991123 @Callable(dX)
11001124 func exchangeResourcesDuckDelivery (cM) = if (!(ac))
11011125 then throw("Delivery feature is turned off!")
11021126 else {
11031127 let ea = bF()
1104- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1105- if ((size(dX.payments) != 1))
1106- then throw("exactly 1 payment must be attached")
1107- else {
1108- let dk = dX.payments[0]
1109- let dl = dk.amount
1110- if (if (!(isDefined(dk.assetId)))
1111- then true
1112- else (value(dk.assetId) != ae))
1113- then throw("USDT payments only!")
1128+ if ((ea == ea))
1129+ then {
1130+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1131+ if ((size(dX.payments) != 1))
1132+ then throw("exactly 1 payment must be attached")
11141133 else {
1115- let ec = bC(S(T))
1116- let cK = split(ec[F], "_")
1117- let cR = split(ec[G], "_")
1118- let ey = cU(cK, cR, cM)
1119- let ee = ey._1
1120- let es = ey._2
1121- let bA = ey._3
1122- let ex = ey._4
1123- let el = fraction(bA, aW, aj)
1124- let dU = if ((l > el))
1125- then l
1126- else el
1127- let dm = (bA + dU)
1128- if ((dm > dl))
1129- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1134+ let dk = dX.payments[0]
1135+ let dl = dk.amount
1136+ if (if (!(isDefined(dk.assetId)))
1137+ then true
1138+ else (value(dk.assetId) != ae))
1139+ then throw("USDT payments only!")
11301140 else {
1131- let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1132- let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1133- let ax = if (((dl - dm) > 0))
1134- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1135- else nil
1136- let dV = (bA / 100)
1137- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1138- let em = valueOrElse(getInteger(Y), 0)
1139- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1141+ let ec = bC(S(T))
1142+ let cK = split(ec[F], "_")
1143+ let cR = split(ec[G], "_")
1144+ let ey = cU(cK, cR, cM)
1145+ let ee = ey._1
1146+ let es = ey._2
1147+ let bA = ey._3
1148+ let ex = ey._4
1149+ let el = fraction(bA, aW, aj)
1150+ let dU = if ((l > el))
1151+ then l
1152+ else el
1153+ let dm = (bA + dU)
1154+ if ((dm > dl))
1155+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1156+ else {
1157+ let ef = makeString([ec[E], makeString(ee, "_"), makeString(es, "_"), ec[H]], ":")
1158+ let eg = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1159+ let ax = if (((dl - dm) > 0))
1160+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1161+ else nil
1162+ let dV = (bA / 100)
1163+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(a, ex, ak)], nil))
1164+ let em = valueOrElse(getInteger(Y), 0)
1165+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(eg, ea, eh))
1166+ }
11401167 }
11411168 }
11421169 }
1170+ else throw("Strict value is not equal to itself.")
11431171 }
11441172
11451173
11461174
11471175 @Callable(dX)
11481176 func exchangeResourcesLandDelivery (cM,W) = if (!(ac))
11491177 then throw("Delivery feature is turned off!")
11501178 else {
11511179 let ea = bF()
1152- if ((size(dX.payments) != 1))
1153- then throw("exactly 1 payment must be attached")
1154- else {
1155- let dk = dX.payments[0]
1156- let dl = dk.amount
1157- if (if (!(isDefined(dk.assetId)))
1158- then true
1159- else (value(dk.assetId) != ae))
1160- then throw("USDT payments only!")
1161- else {
1162- let en = dX.caller
1163- let P = toString(en)
1164- let eo = value(assetInfo(fromBase58String(W)))
1165- if (!(isDefined(getInteger(aC, N(W)))))
1166- then throw((("NFT " + eo.name) + " is not staked"))
1167- else {
1168- let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1169- if ((ep != P))
1170- then throw((e + " is not yours"))
1171- else {
1172- let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1173- let bY = split_4C(dz, ":")
1174- let cK = split(bY[y], "_")
1175- let cR = split(bY[z], "_")
1176- let ez = cU(cK, cR, cM)
1177- let ee = ez._1
1178- let es = ez._2
1179- let bA = ez._3
1180- let ex = ez._4
1181- let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1182- let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1183- let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1184- let el = fraction(bA, aW, aj)
1185- let dU = if ((l > el))
1186- then l
1187- else el
1188- let dm = (bA + dU)
1189- if ((dm > dl))
1190- then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1191- else {
1192- let ax = if (((dl - dm) > 0))
1193- then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1194- else nil
1195- let dV = (bA / 100)
1196- let em = valueOrElse(getInteger(Y), 0)
1197- $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1198- }
1199- }
1200- }
1201- }
1202- }
1180+ if ((ea == ea))
1181+ then if ((size(dX.payments) != 1))
1182+ then throw("exactly 1 payment must be attached")
1183+ else {
1184+ let dk = dX.payments[0]
1185+ let dl = dk.amount
1186+ if (if (!(isDefined(dk.assetId)))
1187+ then true
1188+ else (value(dk.assetId) != ae))
1189+ then throw("USDT payments only!")
1190+ else {
1191+ let en = dX.caller
1192+ let P = toString(en)
1193+ let eo = value(assetInfo(fromBase58String(W)))
1194+ if (!(isDefined(getInteger(aC, N(W)))))
1195+ then throw((("NFT " + eo.name) + " is not staked"))
1196+ else {
1197+ let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
1198+ if ((ep != P))
1199+ then throw((e + " is not yours"))
1200+ else {
1201+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
1202+ let bY = split_4C(dz, ":")
1203+ let cK = split(bY[y], "_")
1204+ let cR = split(bY[z], "_")
1205+ let ez = cU(cK, cR, cM)
1206+ let ee = ez._1
1207+ let es = ez._2
1208+ let bA = ez._3
1209+ let ex = ez._4
1210+ let dH = makeString_2C([bY[x], makeString(ee, "_"), makeString(es, "_"), bY[A], bY[B]], ":")
1211+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
1212+ let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, ex, ak)], nil))
1213+ let el = fraction(bA, aW, aj)
1214+ let dU = if ((l > el))
1215+ then l
1216+ else el
1217+ let dm = (bA + dU)
1218+ if ((dm > dl))
1219+ then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(bA, 6)) + "+") + aL(dU, 6)) + "(delivery fee)"))
1220+ else {
1221+ let ax = if (((dl - dm) > 0))
1222+ then [ScriptTransfer(dX.caller, (dl - dm), ae)]
1223+ else nil
1224+ let dV = (bA / 100)
1225+ let em = valueOrElse(getInteger(Y), 0)
1226+ $Tuple2(((ax :+ ScriptTransfer(aB, dV, ae)) :+ IntegerEntry(Y, (em + dU))), $Tuple3(dJ, ea, eh))
1227+ }
1228+ }
1229+ }
1230+ }
1231+ }
1232+ else throw("Strict value is not equal to itself.")
12031233 }
12041234
12051235
12061236
12071237 @Callable(dX)
12081238 func craftGoods (eA,eB) = {
12091239 let ea = bF()
1210- if ((size(dX.payments) != 1))
1211- then throw("exactly 1 payment must be attached")
1212- else {
1213- let dk = dX.payments[0]
1214- let dl = dk.amount
1215- let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1216- if ((eC != ae))
1217- then throw("USDT payments only!")
1218- else if ((dl != aj))
1219- then throw("exactly 1 USDT must be attached as payment")
1220- else if ((0 >= eB))
1221- then throw("Quantity should be positive")
1222- else {
1223- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1224- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1225- if ((eb[J] != "M"))
1226- then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1227- else {
1228- let eD = eb[I]
1229- let ec = bC(S(T))
1230- let cR = split(ec[G], "_")
1231- if (if ((0 > eA))
1232- then true
1233- else (eA >= size(s)))
1234- then throw(("Unknown product idx=" + toString(eA)))
1235- else {
1236- let ab = split(s[eA], "_")
1237- if ((size(ab) != v))
1238- then throw(("Fatal: unknown recipe: " + s[eA]))
1239- else {
1240- let eE = parseIntValue(ab[u])
1241- if ((q[eE] != eD))
1242- then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1243- else {
1244- let eF = if ((ec[H] == ""))
1245- then nil
1246- else split_4C(ec[H], "_")
1247- func eG (bH,eH) = {
1248- let aJ = bH._2
1249- let eI = if ((size(eF) > aJ))
1250- then eF[aJ]
1251- else "0"
1252- let dQ = parseIntValue(eI)
1253- let bh = (eB * w)
1254- let eJ = if ((aJ == eA))
1255- then toString((dQ + bh))
1256- else eI
1257- $Tuple2((bH._1 :+ eJ), (aJ + 1))
1258- }
1240+ if ((ea == ea))
1241+ then if ((size(dX.payments) != 1))
1242+ then throw("exactly 1 payment must be attached")
1243+ else {
1244+ let dk = dX.payments[0]
1245+ let dl = dk.amount
1246+ let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
1247+ if ((eC != ae))
1248+ then throw("USDT payments only!")
1249+ else if ((dl != aj))
1250+ then throw("exactly 1 USDT must be attached as payment")
1251+ else if ((0 >= eB))
1252+ then throw("Quantity should be positive")
1253+ else {
1254+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1255+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1256+ if ((eb[J] != "M"))
1257+ then throw(("Duck location type should be Manufactory, but is " + eb[J]))
1258+ else {
1259+ let eD = eb[I]
1260+ let ec = bC(S(T))
1261+ let cR = split(ec[G], "_")
1262+ if (if ((0 > eA))
1263+ then true
1264+ else (eA >= size(s)))
1265+ then throw(("Unknown product idx=" + toString(eA)))
1266+ else {
1267+ let ab = split(s[eA], "_")
1268+ if ((size(ab) != v))
1269+ then throw(("Fatal: unknown recipe: " + s[eA]))
1270+ else {
1271+ let eE = parseIntValue(ab[u])
1272+ if ((q[eE] != eD))
1273+ then throw(((("This product is available in " + q[eE]) + ", but you are in ") + eD))
1274+ else {
1275+ let eF = if ((ec[H] == ""))
1276+ then nil
1277+ else split_4C(ec[H], "_")
1278+ func eG (bH,eH) = {
1279+ let aJ = bH._2
1280+ let eI = if ((size(eF) > aJ))
1281+ then eF[aJ]
1282+ else "0"
1283+ let dQ = parseIntValue(eI)
1284+ let bh = (eB * w)
1285+ let eJ = if ((aJ == eA))
1286+ then toString((dQ + bh))
1287+ else eI
1288+ $Tuple2((bH._1 :+ eJ), (aJ + 1))
1289+ }
12591290
1260- let eK = ( let cl = s
1261- let cm = size(cl)
1262- let cn = $Tuple2(nil, 0)
1263- func co (cp,cq) = if ((cq >= cm))
1264- then cp
1265- else eG(cp, cl[cq])
1266-
1267- func cr (cp,cq) = if ((cq >= cm))
1268- then cp
1269- else throw("List size exceeds 50")
1270-
1271- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1272- func eL (bH,bJ) = {
1273- let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1274- let eN = parseIntValue(cR[bJ])
1275- if ((eM > eN))
1276- then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1277- else if ((eM > 0))
1278- then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1279- else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1280- }
1281-
1282- let eO = {
1283- let cl = an
1291+ let eK = ( let cl = s
12841292 let cm = size(cl)
12851293 let cn = $Tuple2(nil, 0)
1286- func cs (cp,cq) = if ((cq >= cm))
1294+ func co (cp,cq) = if ((cq >= cm))
12871295 then cp
1288- else eL(cp, cl[cq])
1296+ else eG(cp, cl[cq])
12891297
1290- func ct (cp,cq) = if ((cq >= cm))
1298+ func cr (cp,cq) = if ((cq >= cm))
12911299 then cp
1292- else throw("List size exceeds 6")
1300+ else throw("List size exceeds 50")
12931301
1294- ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1302+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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))._1
1303+ func eL (bH,bJ) = {
1304+ let eM = (((parseIntValue(ab[bJ]) * ai) * eB) * parseIntValue(ab[t]))
1305+ let eN = parseIntValue(cR[bJ])
1306+ if ((eM > eN))
1307+ then throw(((((((("You have " + aL(eN, 8)) + " of ") + o[bJ]) + ", but recipe requires ") + aL(eM, 8)) + " for quantity ") + toString(eB)))
1308+ else if ((eM > 0))
1309+ then $Tuple2((bH._1 :+ toString((eN - eM))), (bH._2 + eM))
1310+ else $Tuple2((bH._1 :+ cR[bJ]), bH._2)
1311+ }
1312+
1313+ let eO = {
1314+ let cl = an
1315+ let cm = size(cl)
1316+ let cn = $Tuple2(nil, 0)
1317+ func cs (cp,cq) = if ((cq >= cm))
1318+ then cp
1319+ else eL(cp, cl[cq])
1320+
1321+ func ct (cp,cq) = if ((cq >= cm))
1322+ then cp
1323+ else throw("List size exceeds 6")
1324+
1325+ ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6)
1326+ }
1327+ let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1328+ let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1329+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1330+ $Tuple2(nil, $Tuple3(eP, ea, eh))
12951331 }
1296- let ef = makeString([ec[E], ec[F], makeString(eO._1, "_"), makeString_2C(eK, "_")], ":")
1297- let eP = aF(invoke(aC, "updateBackpack", [T, ef], nil))
1298- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(b, eO._2, ak)], nil))
1299- $Tuple2(nil, $Tuple3(eP, ea, eh))
1300- }
1301- }
1302- }
1303- }
1304- }
1305- }
1332+ }
1333+ }
1334+ }
1335+ }
1336+ }
1337+ else throw("Strict value is not equal to itself.")
13061338 }
13071339
13081340
13091341
13101342 @Callable(dX)
13111343 func setWarehouseOrder (eQ,W) = {
13121344 let en = dX.originCaller
13131345 let P = toString(en)
13141346 let eP = if ((en != aB))
13151347 then bE()
13161348 else false
13171349 let eo = value(assetInfo(fromBase58String(W)))
13181350 if (!(isDefined(getInteger(aC, N(W)))))
13191351 then throw((("NFT " + eo.name) + " is not staked"))
13201352 else {
13211353 let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned"))
13221354 if (if ((en != aB))
13231355 then (ep != P)
13241356 else false)
13251357 then throw((e + " is not yours"))
13261358 else {
13271359 let eR = split_4C(eQ, ":")
13281360 let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil))
13291361 let bY = split_4C(dz, ":")
13301362 let eS = split(bY[B], "_")
13311363 let eT = parseIntValue(eS[D])
13321364 let be = V(W)
13331365 let bZ = bd(be)
13341366 let dY = bX(bY, bZ, eR)
13351367 let eU = dY._4
13361368 let eV = dY._5
13371369 let eW = dY._7
13381370 let eX = (eU + eV)
13391371 let eY = ((eT - eW) - eX)
13401372 if ((0 > eY))
13411373 then throw((((((("Attempt to reserve " + toString(eU)) + " space for buy orders, and ") + toString(eV)) + " space for sell orders (and occupied=") + toString(eW)) + "), leads to negative free space"))
13421374 else {
13431375 let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":")
13441376 let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil))
13451377 let eZ = dY._6
13461378 let fa = if ((eZ > 0))
13471379 then if ((size(dX.payments) != 1))
13481380 then throw("exactly 1 payment must be attached")
13491381 else {
13501382 let dk = dX.payments[0]
13511383 let dl = dk.amount
13521384 let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment")
13531385 if ((eC != ae))
13541386 then throw("USDT payments only!")
13551387 else if ((dl != eZ))
13561388 then throw(("Payment needed is " + toString(eZ)))
13571389 else [StringEntry(be, eQ)]
13581390 }
13591391 else if ((eZ == 0))
13601392 then if ((size(dX.payments) != 0))
13611393 then throw("No payments needed")
13621394 else [StringEntry(be, eQ)]
13631395 else if ((size(dX.payments) != 0))
13641396 then throw("No payments needed")
13651397 else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)]
13661398 $Tuple2(fa, $Tuple2(eP, dJ))
13671399 }
13681400 }
13691401 }
13701402 }
13711403
13721404
13731405
13741406 @Callable(dX)
13751407 func acceptWarehouseOrder (dq,dp,T) = {
13761408 let ea = bF()
1377- let de = dX.originCaller
1378- let cZ = toString(de)
1379- let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1380- let eb = valueOrElse(getString(aC, U(fb)), g)
1381- let fc = split(value(eb), "_")
1382- if ((fc[J] != "L"))
1383- then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1384- else if ((fb != T))
1385- then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1386- else {
1387- let bD = S(T)
1388- let ec = bC(bD)
1389- let dr = split(ec[F], "_")
1390- let ds = split(ec[G], "_")
1391- let dt = if ((ec[H] == ""))
1392- then nil
1393- else split_4C(ec[H], "_")
1394- let fd = do(dp, cZ, dq, dr, ds, dt)
1395- let fe = fd._1
1396- let ff = fd._2
1397- let fg = fd._3
1398- let fh = fd._4
1399- let cY = fd._5
1400- let dg = fd._6
1401- let fi = fd._7
1402- let di = fd._8
1403- let fj = fd._9
1404- let dK = fd._10
1405- let fk = [fe, cX(cY, cZ, 0)]
1406- let fl = df(dg, dX.payments, di, 0)
1407- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1408- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1409- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1410- $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1411- }
1409+ if ((ea == ea))
1410+ then {
1411+ let de = dX.originCaller
1412+ let cZ = toString(de)
1413+ let fb = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1414+ let eb = valueOrElse(getString(aC, U(fb)), g)
1415+ let fc = split(value(eb), "_")
1416+ if ((fc[J] != "L"))
1417+ then throw((("Duck location type is " + fc[J]) + ", but should be L"))
1418+ else if ((fb != T))
1419+ then throw(((("Your staked duck is " + fb) + ", but passed ") + T))
1420+ else {
1421+ let bD = S(T)
1422+ let ec = bC(bD)
1423+ let dr = split(ec[F], "_")
1424+ let ds = split(ec[G], "_")
1425+ let dt = if ((ec[H] == ""))
1426+ then nil
1427+ else split_4C(ec[H], "_")
1428+ let fd = do(dp, cZ, dq, dr, ds, dt)
1429+ let fe = fd._1
1430+ let ff = fd._2
1431+ let fg = fd._3
1432+ let fh = fd._4
1433+ let cY = fd._5
1434+ let dg = fd._6
1435+ let fi = fd._7
1436+ let di = fd._8
1437+ let fj = fd._9
1438+ let dK = fd._10
1439+ let fk = [fe, cX(cY, cZ, 0)]
1440+ let fl = df(dg, dX.payments, di, 0)
1441+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1442+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1443+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1444+ $Tuple2((fk ++ fl), $Tuple5(ea, fj, fn, fo, dK))
1445+ }
1446+ }
1447+ else throw("Strict value is not equal to itself.")
14121448 }
14131449
14141450
14151451
14161452 @Callable(dX)
14171453 func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac))
14181454 then throw("Delivery feature is turned off!")
14191455 else {
14201456 let ea = bF()
1421- let de = dX.originCaller
1422- let cZ = toString(de)
1423- let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1424- let bD = S(T)
1425- let ec = bC(bD)
1426- let dr = split(ec[F], "_")
1427- let ds = split(ec[G], "_")
1428- let dt = if ((ec[H] == ""))
1429- then nil
1430- else split_4C(ec[H], "_")
1431- let fq = do(dp, cZ, fp, dr, ds, dt)
1432- let fe = fq._1
1433- let ff = fq._2
1434- let fg = fq._3
1435- let fh = fq._4
1436- let cY = fq._5
1437- let dg = fq._6
1438- let fi = fq._7
1439- let di = fq._8
1440- let fj = fq._9
1441- let dK = fq._10
1442- let fr = fraction((dg + cY), aV, aj)
1443- let fs = if ((k > fr))
1444- then k
1445- else fr
1446- let dj = fraction(fs, dg, (dg + cY))
1447- let da = (fs - dj)
1448- let em = valueOrElse(getInteger(Y), 0)
1449- let fk = [fe, cX(cY, cZ, da)]
1450- let fl = df(dg, dX.payments, di, dj)
1451- let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1452- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1453- let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1454- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1457+ if ((ea == ea))
1458+ then {
1459+ let de = dX.originCaller
1460+ let cZ = toString(de)
1461+ let T = valueOrErrorMessage(getString(aC, Q(cZ)), "You don't have a duck staked")
1462+ let bD = S(T)
1463+ let ec = bC(bD)
1464+ let dr = split(ec[F], "_")
1465+ let ds = split(ec[G], "_")
1466+ let dt = if ((ec[H] == ""))
1467+ then nil
1468+ else split_4C(ec[H], "_")
1469+ let fq = do(dp, cZ, fp, dr, ds, dt)
1470+ let fe = fq._1
1471+ let ff = fq._2
1472+ let fg = fq._3
1473+ let fh = fq._4
1474+ let cY = fq._5
1475+ let dg = fq._6
1476+ let fi = fq._7
1477+ let di = fq._8
1478+ let fj = fq._9
1479+ let dK = fq._10
1480+ let fr = fraction((dg + cY), aV, aj)
1481+ let fs = if ((k > fr))
1482+ then k
1483+ else fr
1484+ let dj = fraction(fs, dg, (dg + cY))
1485+ let da = (fs - dj)
1486+ let em = valueOrElse(getInteger(Y), 0)
1487+ let fk = [fe, cX(cY, cZ, da)]
1488+ let fl = df(dg, dX.payments, di, dj)
1489+ let fm = makeString_2C([ec[E], makeString(ff, "_"), makeString(fg, "_"), makeString_2C(fh, "_")], ":")
1490+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1491+ let fo = aI(invoke(aC, "updateDuckStats", [T, fraction(d, fi, ak)], nil))
1492+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, fn, fo, dK))
1493+ }
1494+ else throw("Strict value is not equal to itself.")
14551495 }
14561496
14571497
14581498
14591499 @Callable(dX)
14601500 func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac))
14611501 then throw("Delivery feature is turned off!")
14621502 else {
14631503 let ea = bF()
1464- let de = dX.originCaller
1465- let cZ = toString(de)
1466- let eo = value(assetInfo(fromBase58String(ft)))
1467- if (!(isDefined(getInteger(aC, N(ft)))))
1468- then throw((("NFT " + eo.name) + " is not staked"))
1469- else {
1470- let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1471- if ((ep != cZ))
1472- then throw((e + " is not yours"))
1504+ if ((ea == ea))
1505+ then {
1506+ let de = dX.originCaller
1507+ let cZ = toString(de)
1508+ let eo = value(assetInfo(fromBase58String(ft)))
1509+ if (!(isDefined(getInteger(aC, N(ft)))))
1510+ then throw((("NFT " + eo.name) + " is not staked"))
14731511 else {
1474- let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1475- let bY = split_4C(dz, ":")
1476- let cK = split(bY[y], "_")
1477- let cR = split(bY[z], "_")
1478- let eF = if ((bY[A] == ""))
1479- then nil
1480- else split(bY[A], "_")
1481- let fu = do(dp, cZ, fp, cK, cR, eF)
1482- let fe = fu._1
1483- let ff = fu._2
1484- let fg = fu._3
1485- let fh = fu._4
1486- let cY = fu._5
1487- let dg = fu._6
1488- let fi = fu._7
1489- let di = fu._8
1490- let fj = fu._9
1491- let dK = fu._10
1492- let fr = fraction((dg + cY), aV, aj)
1493- let fs = if ((k > fr))
1494- then k
1495- else fr
1496- let dj = fraction(fs, dg, (dg + cY))
1497- let da = (fs - dj)
1498- let em = valueOrElse(getInteger(Y), 0)
1499- let fk = [fe, cX(cY, cZ, da)]
1500- let fl = df(dg, dX.payments, di, dj)
1501- let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1502- let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1503- let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1504- $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1512+ let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned"))
1513+ if ((ep != cZ))
1514+ then throw((e + " is not yours"))
1515+ else {
1516+ let dz = aF(invoke(aC, "getWarehouseREADONLY", [ft], nil))
1517+ let bY = split_4C(dz, ":")
1518+ let cK = split(bY[y], "_")
1519+ let cR = split(bY[z], "_")
1520+ let eF = if ((bY[A] == ""))
1521+ then nil
1522+ else split(bY[A], "_")
1523+ let fu = do(dp, cZ, fp, cK, cR, eF)
1524+ let fe = fu._1
1525+ let ff = fu._2
1526+ let fg = fu._3
1527+ let fh = fu._4
1528+ let cY = fu._5
1529+ let dg = fu._6
1530+ let fi = fu._7
1531+ let di = fu._8
1532+ let fj = fu._9
1533+ let dK = fu._10
1534+ let fr = fraction((dg + cY), aV, aj)
1535+ let fs = if ((k > fr))
1536+ then k
1537+ else fr
1538+ let dj = fraction(fs, dg, (dg + cY))
1539+ let da = (fs - dj)
1540+ let em = valueOrElse(getInteger(Y), 0)
1541+ let fk = [fe, cX(cY, cZ, da)]
1542+ let fl = df(dg, dX.payments, di, dj)
1543+ let dH = makeString_2C([bY[x], makeString(ff, "_"), makeString(fg, "_"), makeString(fh, "_"), bY[B]], ":")
1544+ let dJ = aF(invoke(aC, "saveWarehouse", [dH, ft], nil))
1545+ let eh = aI(invoke(aC, "updateAccStats", [cZ, fraction(d, fi, ak)], nil))
1546+ $Tuple2(((fk ++ fl) :+ IntegerEntry(Y, (em + fs))), $Tuple5(ea, fj, dJ, eh, dK))
1547+ }
15051548 }
15061549 }
1550+ else throw("Strict value is not equal to itself.")
15071551 }
15081552
15091553
15101554
15111555 @Callable(dX)
15121556 func sellProductsToES (cM) = {
15131557 let ea = bF()
1514- if ((size(dX.payments) != 0))
1515- then throw("No payments needed")
1516- else {
1517- let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1518- let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1519- if ((eb[J] != "A"))
1520- then throw(("Duck location type should be Airport, but is " + eb[J]))
1521- else {
1522- let ec = bC(S(T))
1523- let eF = if ((ec[H] == ""))
1524- then nil
1525- else split_4C(ec[H], "_")
1526- let fv = X()
1527- let fw = getString(fv)
1528- let fx = if (isDefined(fw))
1529- then split_4C(value(fw), "_")
1530- else nil
1531- func fy (bH,fz) = {
1532- let bJ = bH._1
1533- let eB = if ((size(cM) > bJ))
1534- then cM[bJ]
1535- else 0
1536- if ((0 > eB))
1537- then throw("Quantity cannot be negative")
1538- else {
1539- let ab = split(fz, "_")
1540- if ((size(ab) != v))
1541- then throw(("Fatal: unknown recipe: " + fz))
1542- else {
1543- let fA = (i * w)
1544- let fB = if ((size(fx) > bJ))
1545- then parseIntValue(fx[bJ])
1546- else 0
1547- let fC = (fA - fB)
1548- if ((eB > fC))
1549- then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1550- else {
1551- let et = aa(ab)
1552- let fD = fraction((et * j), h, (ak * w))
1553- let fE = if ((size(eF) > bJ))
1554- then parseIntValue(eF[bJ])
1555- else 0
1556- if ((eB > fE))
1557- then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1558- else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1559- }
1560- }
1561- }
1558+ if ((ea == ea))
1559+ then if ((size(dX.payments) != 0))
1560+ then throw("No payments needed")
1561+ else {
1562+ let T = valueOrErrorMessage(getString(aC, Q(toString(dX.caller))), "You don't have a duck staked")
1563+ let eb = split(valueOrElse(getString(aC, U(T)), g), "_")
1564+ if ((eb[J] != "A"))
1565+ then throw(("Duck location type should be Airport, but is " + eb[J]))
1566+ else {
1567+ let ec = bC(S(T))
1568+ let eF = if ((ec[H] == ""))
1569+ then nil
1570+ else split_4C(ec[H], "_")
1571+ let fv = X()
1572+ let fw = getString(fv)
1573+ let fx = if (isDefined(fw))
1574+ then split_4C(value(fw), "_")
1575+ else nil
1576+ func fy (bH,fz) = {
1577+ let bJ = bH._1
1578+ let eB = if ((size(cM) > bJ))
1579+ then cM[bJ]
1580+ else 0
1581+ if ((0 > eB))
1582+ then throw("Quantity cannot be negative")
1583+ else {
1584+ let ab = split(fz, "_")
1585+ if ((size(ab) != v))
1586+ then throw(("Fatal: unknown recipe: " + fz))
1587+ else {
1588+ let fA = (i * w)
1589+ let fB = if ((size(fx) > bJ))
1590+ then parseIntValue(fx[bJ])
1591+ else 0
1592+ let fC = (fA - fB)
1593+ if ((eB > fC))
1594+ then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ]))
1595+ else {
1596+ let et = aa(ab)
1597+ let fD = fraction((et * j), h, (ak * w))
1598+ let fE = if ((size(eF) > bJ))
1599+ then parseIntValue(eF[bJ])
1600+ else 0
1601+ if ((eB > fE))
1602+ then throw(((("You have only " + toString(fE)) + " of ") + p[bJ]))
1603+ else $Tuple5((bJ + 1), (bH._2 + (fD * eB)), (bH._3 :+ toString((fE - eB))), (bH._4 :+ toString((fB + eB))), (bH._5 + (et * eB)))
1604+ }
1605+ }
1606+ }
1607+ }
1608+
1609+ let eO = {
1610+ let cl = s
1611+ let cm = size(cl)
1612+ let cn = $Tuple5(0, 0, nil, nil, 0)
1613+ func co (cp,cq) = if ((cq >= cm))
1614+ then cp
1615+ else fy(cp, cl[cq])
1616+
1617+ func cr (cp,cq) = if ((cq >= cm))
1618+ then cp
1619+ else throw("List size exceeds 50")
1620+
1621+ cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1622+ }
1623+ let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1624+ let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1625+ let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1626+ $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
15621627 }
1563-
1564- let eO = {
1565- let cl = s
1566- let cm = size(cl)
1567- let cn = $Tuple5(0, 0, nil, nil, 0)
1568- func co (cp,cq) = if ((cq >= cm))
1569- then cp
1570- else fy(cp, cl[cq])
1571-
1572- func cr (cp,cq) = if ((cq >= cm))
1573- then cp
1574- else throw("List size exceeds 50")
1575-
1576- cr(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(co(cn, 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)
1577- }
1578- let fm = makeString_2C([ec[E], ec[F], ec[G], makeString_2C(eO._3, "_")], ":")
1579- let fn = aF(invoke(aC, "updateBackpack", [T, fm], nil))
1580- let eh = aI(invoke(aC, "updateDuckStats", [T, fraction(c, eO._5, (ak * 10))], nil))
1581- $Tuple2([StringEntry(fv, makeString_2C(eO._4, "_")), ScriptTransfer(dX.caller, eO._2, ae)], $Tuple3(fn, ea, eh))
1582- }
1583- }
1628+ }
1629+ else throw("Strict value is not equal to itself.")
15841630 }
15851631
15861632
15871633
15881634 @Callable(dX)
15891635 func updateEsStorage (fF) = if ((dX.caller != aC))
15901636 then throw("Permission denied")
15911637 else $Tuple2([StringEntry(X(), fF)], fF)
15921638
15931639
15941640
15951641 @Callable(dX)
15961642 func updateDeliveryLocked (fG) = if ((dX.caller != aC))
15971643 then throw("Permission denied")
15981644 else $Tuple2([IntegerEntry(Z, fG)], fG)
15991645
16001646
16011647
16021648 @Callable(dX)
16031649 func sendDeliveryReward (P) = if ((dX.caller != aC))
16041650 then throw("Permission denied")
16051651 else {
16061652 let em = valueOrElse(getInteger(Y), 0)
16071653 let fH = valueOrElse(getInteger(Z), 0)
16081654 let fI = (k * m)
16091655 let fJ = invoke(aE, "sendAcres", [P, fI], nil)
16101656 $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ)
16111657 }
16121658
16131659

github/deemru/w8io/169f3d6 
194.53 ms