tx · 8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep: -0.05700000 Waves 2023.10.09 01:16 [2790248] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves
{ "type": 13, "id": "8eSJCWgEJfRnCYctmbGMCRkmqG78RysEbLFcwPJsKuQE", "fee": 5700000, "feeAssetId": null, "timestamp": 1696803421734, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "2Xd95K16bbkJDtSDNa8Ns2b25pn9emxzx7y9dno5sWDGvxE7dWu1qyeoYQij4TT6NdhavpSo5TjpiuvHxgVF5oHh" ], "script": "base64:BgKGAQgCEgQKAggYEgMKAQgSBAoCERESBAoCCAESAwoBARIFCgMREQgSBgoEEREICBIECgIRERIFCgMREQgSBgoEEREICBIDCgEREgMKARESBAoCEQgSBAoCAQESBAoCCAgSBQoDCAgIEgQKAggIEgUKAwgICBIDCgEREgMKAQgSAwoBARIDCgEIZwAHeHBUcmFkZQCQTgAHeHBDcmFmdACQTgAKeHBTZWxsVG9FcwCQTgAGeHBTaG9wAJBOAApMQU5EUFJFRklYAgRMQU5EAAZOVU1SRVMABgAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EAEFJFU09VUkNFUFJJQ0VNSU4A1bUCAA1FU01BWFBBQ0tBR0VTAAoACUVTQlVZQ09FRgAEABVNSU5fVVNEVF9GRUVfREVMSVZFUlkA0IYDABdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQD4yQQAFVVTRFQyQUNSRVNfTVVMVElQTElFUgAKAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICEEZpcnN0IEFpZCBLaXQgTDEJAMwIAgIQRmlyc3QgQWlkIEtpdCBMMgkAzAgCAhBGaXJzdCBBaWQgS2l0IEwzCQDMCAICC0JhY2twYWNrIEwxCQDMCAICC0JhY2twYWNrIEwyCQDMCAICC0JhY2twYWNrIEwzCQDMCAICDkZvb2QgUmF0aW9uIEwxCQDMCAICDkZvb2QgUmF0aW9uIEwyCQDMCAICDkZvb2QgUmF0aW9uIEwzCQDMCAICC0pldCBQYWNrIEwxCQDMCAICC0pldCBQYWNrIEwyCQDMCAICC0pldCBQYWNrIEwzCQDMCAICCVNoaWVsZCBMMQkAzAgCAglTaGllbGQgTDIJAMwIAgIJU2hpZWxkIEwzCQDMCAICB01pbmUgTDEJAMwIAgIHTWluZSBMMgkAzAgCAgdNaW5lIEwzCQDMCAICB1RyYXAgTDEJAMwIAgIHVHJhcCBMMgkAzAgCAgdUcmFwIEwzBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAJQ09FRkYyTUFUAICt4gQAEHByb2R1Y3Rpb25NYXRyaXgJAMwIAgIlOF84XzhfMTdfMTdfNDJfMTJfMF8zMF8wLDAsMCwwLDAsMCwwXwkAzAgCAiU4XzhfOF8xN18xN180Ml8yNF8wXzYwXzAsMCw1LDIsMCwwLDBfCQDMCAICJzhfOF84XzE3XzE3XzQyXzM2XzBfMTIwXzAsMCwxMCw0LDAsMCwwXwkAzAgCAik4XzE5XzE5XzhfMjdfMTlfMjZfMV8yMF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNTJfMV80MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAik4XzE5XzE5XzhfMjdfMTlfNzhfMV84MF8wLDAsMCwwLDAsMCwwXzAwMQkAzAgCAiU4XzhfOF84XzhfNjBfMTNfMl8yXzAsMCwwLDAsMCwwLDBfMDExCQDMCAICJThfOF84XzhfOF82MF8yNl8yXzRfMCwwLDAsMCwwLDAsMF8wMTEJAMwIAgIlOF84XzhfOF84XzYwXzM5XzJfOF8wLDAsMCwwLDAsMCwwXzAxMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfMzBfM18zMF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfNjBfM181MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAikzMF8zMF8zXzE3XzE3XzNfOTBfM183MF8wLDAsMCwwLDAsMCwwXzExMQkAzAgCAisxOF8xOF8xMF8xOF8xOF8xOF8xMV80XzEwXzAsMCwwLDAsMCwwLDBfMjAxCQDMCAICKzE4XzE4XzEwXzE4XzE4XzE4XzIyXzRfMjBfMCwwLDAsMCwwLDAsMF8yMDEJAMwIAgIrMThfMThfMTBfMThfMThfMThfMzNfNF8zMF8wLDAsMCwwLDAsMCwwXzIwMQkAzAgCAio0XzEzXzIyXzRfMzVfMjJfMjNfMF81MCwxLDBfMCwwLDAsMCwwLDAsMF8JAMwIAgIqNF8xM18yMl80XzM1XzIyXzQ2XzBfNTAsMSwxXzAsMiw1LDAsMCwwLDBfCQDMCAICKzRfMTNfMjJfNF8zNV8yMl82OV8wXzUwLDIsMV8wLDUsMTAsMCwwLDAsMF8JAMwIAgIqNV8yNV80MF81XzEwXzE1XzIwXzFfMzAsMSwxXzAsMCwwLDAsMCwwLDBfCQDMCAICKjVfMjVfNDBfNV8xMF8xNV80MF8xXzMwLDEsMl8yLDEsMywwLDAsMCwwXwkAzAgCAio1XzI1XzQwXzVfMTBfMTVfNjBfMV8zMCwxLDNfNSwyLDgsMCwwLDAsMF8FA25pbAAJcklkeENvZWZmAAYADXJJZHhDb250aW5lbnQABwAKUkVDSVBFU0laRQALAA5QUk9EVUNUUEtHU0laRQAKAAt3aElkeExldmVscwAAAAh3aElkeFJlcwABAAh3aElkeE1hdAACAAl3aElkeFByb2QAAwAJd2hJZHhMT0ZUAAQACXZvbExvY2tlZAAAAAh2b2xUb3RhbAADAApicElkeExldmVsAAAACGJwSWR4UmVzAAEACGJwSWR4TWF0AAIACWJwSWR4UHJvZAADAA9sb2NJZHhDb250aW5lbnQAAAAKbG9jSWR4VHlwZQABAAhsb2NJZHhJZAACARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBB2Fzc2V0SWQJAKwCAgIDbm9fBQdhc3NldElkARZrZXlTdGFrZWRUaW1lQnlBc3NldElkAQdhc3NldElkCQCsAgICA3N0XwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgEUa2V5U3Rha2VkRHVja0J5T3duZXIBCW93bmVyQWRkcgkArAICAhJzdGFrZWREdWNrQnlPd25lcl8FCW93bmVyQWRkcgERa2V5QmFja3BhY2tCeUR1Y2sBC2R1Y2tBc3NldElkCQCsAgICCWJhY2tQYWNrXwULZHVja0Fzc2V0SWQBD2tleUR1Y2tMb2NhdGlvbgELZHVja0Fzc2V0SWQJAKwCAgINZHVja0xvY2F0aW9uXwULZHVja0Fzc2V0SWQBDmtleU9yZGVyQnlMYW5kAQtsYW5kQXNzZXRJZAkArAICAgpsYW5kT3JkZXJfBQtsYW5kQXNzZXRJZAEOa2V5RXNXYXJlaG91c2UAAhplbWVyZ2VuY3lXYXJlaG91c2VQcm9kdWN0cwAPZGVsaXZlcnlGdW5kS2V5AgxkZWxpdmVyeUZ1bmQAEWRlbGl2ZXJ5TG9ja2VkS2V5Ag5kZWxpdmVyeUxvY2tlZAESZ2V0UmVjaXBlTWF0ZXJpYWxzAQZyZWNpcGUJAGgCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUGcmVjaXBlBQlySWR4Q29lZmYFCUNPRUZGMk1BVAARS1NfQUxMT1dfREVMSVZFUlkGAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4AA1NFUAICX18ABU1VTFQ1AKCNBgAFTVVMVDYAwIQ9AAVNVUxUOACAwtcvAAZNVUxUMTAAgMivoCUADk1JTlNIT1BQQVlNRU5UAKCNBgAFSVRFUjYJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUFA25pbAEPZ2V0U3RyaW5nT3JGYWlsAgdhZGRyZXNzA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFB2FkZHJlc3MFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQdhZGRyZXNzCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDyBpcyBub3QgZGVmaW5lZAUDbmlsAgAAEUlkeENmZ1N0YWtpbmdEYXBwAAEAFElkeENmZ0ludmVzdEZ1bmREYXBwAAYAD0lkeENmZ0FjcmVzRGFwcAAIAQprZXlSZXN0Q2ZnAAIOJXNfX3Jlc3RDb25maWcBDmtleVJlc3RBZGRyZXNzAAIMJXNfX3Jlc3RBZGRyARFyZWFkUmVzdENmZ09yRmFpbAEEcmVzdAkAvAkCCQEPZ2V0U3RyaW5nT3JGYWlsAgUEcmVzdAkBCmtleVJlc3RDZmcABQNTRVABGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIHcmVzdENmZwNpZHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB3Jlc3RDZmcFA2lkeAkArAICAipSZXN0IGNmZyBkb2Vzbid0IGNvbnRhaW4gYWRkcmVzcyBhdCBpbmRleCAJAKQDAQUDaWR4AAxyZXN0Q29udHJhY3QJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkBDmtleVJlc3RBZGRyZXNzAAUVZGVmYXVsdFJlc3RBZGRyZXNzU3RyAAdyZXN0Q2ZnCQERcmVhZFJlc3RDZmdPckZhaWwBBQxyZXN0Q29udHJhY3QAD3N0YWtpbmdDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFEUlkeENmZ1N0YWtpbmdEYXBwABJpbnZlc3RGdW5kQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRRJZHhDZmdJbnZlc3RGdW5kRGFwcAANYWNyZXNDb250cmFjdAkBGGdldENvbnRyYWN0QWRkcmVzc09yRmFpbAIFB3Jlc3RDZmcFD0lkeENmZ0FjcmVzRGFwcAEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQVhc0ludAEBdgQHJG1hdGNoMAUBdgMJAAECBQckbWF0Y2gwAgNJbnQEAW4FByRtYXRjaDAFAW4JAAIBAhVmYWlsIHRvIGNhc3QgaW50byBJbnQBCmtleUJsb2NrZWQAAhBjb250cmFjdHNCbG9ja2VkAQpmaXhlZFBvaW50AgN2YWwIZGVjaW1hbHMEBnRlblBvdwkAbAYACgAABQhkZWNpbWFscwAAAAAFBERPV04EB2xvd1BhcnQJAKQDAQkAagIFA3ZhbAUGdGVuUG93BAZ6ZXJvZXMJALACAgkApAMBBQZ0ZW5Qb3cJAGQCAAEJALECAQUHbG93UGFydAkArAICCQCsAgIJAKwCAgkApAMBCQBpAgUDdmFsBQZ0ZW5Qb3cCAS4FBnplcm9lcwUHbG93UGFydAATRkFDVE9SWU1BWFdBUkVIT1VTRQCAyK+gJQAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkFVQ1RJT05GRUUAkE4ADERFTElWRVJZX0ZFRQCQTgAOREVMSVZFUllfRkVFMTUAmHUBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIJZmFjdG9yeUlkB3Jlc1R5cGUJAKwCAgkArAICCQCsAgICG2ZhY3RvcnlXaEJ5Q29udGluZW50QW5kUmVzXwUJZmFjdG9yeUlkAgFfCQCkAwEFB3Jlc1R5cGUACW9yZElkeFJlcwAAAAlvcmRJZHhNYXQAAQAKb3JkSWR4UHJvZAACAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEEBXcwbWluCQCXAwEJAMwIAgUCdzAJAMwIAgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUDbmlsBAl1c2R0U3BlbnQJAGQCCQBrAwUCbTAJAGUCCQBoAgUNQlVZTVVMVElQTElFUgUQUkVTT1VSQ0VQUklDRU1JTgkAawMJAGUCCQBoAgBkBQV3MG1pbgkAaAIAMgUCbTAFEFJFU09VUkNFUFJJQ0VNSU4FE0ZBQ1RPUllNQVhXQVJFSE9VU0UFBk1VTFQxMAkAawMFAm0xCQBoAgACBRBSRVNPVVJDRVBSSUNFTUlOBQVNVUxUOAQGbWF4MTAxCQBkAgUIbWF4UHJpY2UJAGkCBQhtYXhQcmljZQBkAwkAZgIJAGgCBQl1c2R0U3BlbnQFBU1VTFQ4CQBoAgUGbWF4MTAxBQFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BY3R1YWwgcHJpY2UgPSAJAKQDAQUJdXNkdFNwZW50AgMgLyAJAKQDAQUBbQIOID4gbWF4UHJpY2UgPSAJAKQDAQUIbWF4UHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCG1hdFR5cGVzBQdtYXRUeXBlAgEpCQCVCgMJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZQIFAncwBQFtBQl1c2R0U3BlbnQFAW0BC2dldEJhY2twYWNrAQVicEtleQQBcAkAvAkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAUFYnBLZXkCGjA6MF8wXzBfMF8wXzA6MF8wXzBfMF8wXzA6AgE6CQDMCAIJAKQDAQkBC3ZhbHVlT3JFbHNlAgkAtgkBCQCRAwIFAXAFCmJwSWR4TGV2ZWwAAAkAzAgCAwkAAAIJAJADAQkAtQkCCQCRAwIFAXAFCGJwSWR4UmVzAgFfBQZOVU1SRVMJAJEDAgUBcAUIYnBJZHhSZXMCCzBfMF8wXzBfMF8wCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhNYXQCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeE1hdAILMF8wXzBfMF8wXzAJAMwIAgkAkQMCBQFwBQlicElkeFByb2QFA25pbAEMY2hlY2tCbG9ja2VkAAMJAQt2YWx1ZU9yRWxzZQIJAJsIAgUPc3Rha2luZ0NvbnRyYWN0CQEKa2V5QmxvY2tlZAAHCQACAQIfQ29udHJhY3RzIGFyZSB1bmRlciBtYWludGVuYW5jZQUEdW5pdAEGcHJvbG9nAAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCCnNhdmVMYXN0VHgFA25pbAUDbmlsAQlzZXRDb21tb24CA2FjYw9pZ25vcmVkSXRlcmF0b3IEAWoIBQNhY2MCXzEEBGl0ZW0DCQBmAgkAkAMBCAUDYWNjA18xMAUBagkAkQMCCAUDYWNjA18xMAUBagIDMEAwBAZpc1Byb2QIBQNhY2MCXzgECWl0ZW1QYXJ0cwkAtQkCBQRpdGVtAgFAAwkBAiE9AgkAkAMBBQlpdGVtUGFydHMAAgkAAgECLkluY29ycmVjdCBvcmRlciBmb3JtYXQsIHNob3VsZCBiZSBhbW91bnRAcHJpY2UECG5ld09yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAAECG5ld09yZFByCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUJaXRlbVBhcnRzAAEECW5ld09yZFVzZAMFBmlzUHJvZAkAaAIFCG5ld09yZEFtBQhuZXdPcmRQcgkAawMFCG5ld09yZEFtBQhuZXdPcmRQcgUFTVVMVDgECW5ld09yZFZvbAkBCHRvVm9sdW1lAwUIbmV3T3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QEBndoSW5pdAMJAGYCCQCQAwEIBQNhY2MCXzYFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCCAUDYWNjAl82BQFqAAAEC2N1ck9yZFBhcnRzCQC1CQIDCQBmAgkAkAMBCAUDYWNjAl83BQFqCQCRAwIIBQNhY2MCXzcFAWoCAzBAMAIBQAQIY3VyT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwAABAhjdXJPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFC2N1ck9yZFBhcnRzAAEDAwkAZgIAAAUIY3VyT3JkUHIGCQBmAgAABQhuZXdPcmRQcgkAAgECF1ByaWNlIGNhbid0IGJlIG5lZ2F0aXZlBAljdXJPcmRVc2QDBQZpc1Byb2QJAGgCBQhjdXJPcmRBbQUIY3VyT3JkUHIJAGsDBQhjdXJPcmRBbQUIY3VyT3JkUHIFBU1VTFQ4AwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAGQCCAUDYWNjAl85CQEIdG9Wb2x1bWUDBQZ3aEluaXQFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQgFA2FjYwJfMwgFA2FjYwJfNAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQBkAggFA2FjYwJfOQkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIFCG5ld09yZEFtAAADCQBmAgAABQhjdXJPcmRBbQkAnAoKCQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIFBndoSW5pdAUIY3VyT3JkQW0JAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGQCCAUDYWNjAl81BQluZXdPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwkAZQIFBndoSW5pdAUIY3VyT3JkQW0FDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAkBCHRvVm9sdW1lAwUGd2hJbml0BQ5QUk9EVUNUUEtHU0laRQUGaXNQcm9kCAUDYWNjA18xMAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJwKCgkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBlAgUGd2hJbml0BQZhbURpZmYFDlBST0RVQ1RQS0dTSVpFBQZpc1Byb2QIBQNhY2MDXzEwAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCcCgoJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQEIdG9Wb2x1bWUDCQBkAgUGd2hJbml0BQhuZXdPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAgFA2FjYwNfMTABC3NldEludGVybmFsAwljdXJyZW50V2gKY3VycmVudE9yZAZuZXdPcmQECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQNY3VycmVudE9yZFJlcwkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeFJlcwIBXwQNY3VycmVudE9yZE1hdAkAtQkCCQCRAwIFCmN1cnJlbnRPcmQFCW9yZElkeE1hdAIBXwQOY3VycmVudE9yZFByb2QDCQAAAgkAkQMCBQpjdXJyZW50T3JkBQpvcmRJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFCmN1cnJlbnRPcmQFCm9yZElkeFByb2QCAV8DCQECIT0CCQCQAwEFBm5ld09yZAADCQACAQIzbmV3T3JkZXJTdHIgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSAyICc6JyBzZXBhcmF0b3JzBAhyZXNQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAAAAgFfBAhtYXRQYXJ0cwkAtQkCCQCRAwIFBm5ld09yZAABAgFfBAlwcm9kUGFydHMDCQAAAgkAkQMCBQZuZXdPcmQAAgIABQNuaWwJALwJAgkAkQMCBQZuZXdPcmQAAgIBXwMJAQIhPQIJAJADAQUIcmVzUGFydHMFBk5VTVJFUwkAAgECIEFsbCA2IHJlc291cmNlcyBzaG91bGQgYmUgcGFzc2VkAwkBAiE9AgkAkAMBBQhtYXRQYXJ0cwUGTlVNUkVTCQACAQIgQWxsIDYgbWF0ZXJpYWxzIHNob3VsZCBiZSBwYXNzZWQEAXIKAAIkbAUIcmVzVHlwZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCcCgoAAAUDbmlsAAAAAAAABQljdXJyV2hSZXMFDWN1cnJlbnRPcmRSZXMHAAAFCHJlc1BhcnRzCgEFJGYwXzECAiRhAiRpAwkA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XzgFAWoAAAQGd2hJbml0AwkAZgIJAJADAQgFA2FjYwJfOQUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIIBQNhY2MCXzkFAWoAAAQJd2hPcmRJbml0AwkAZgIJAJADAQgFA2FjYwNfMTAFAWoJAJEDAggFA2FjYwNfMTAFAWoCAzBAMAQKd2hPcmRQYXJ0cwkAtQkCBQl3aE9yZEluaXQCAUAEB3doT3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAAEB3doT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQp3aE9yZFBhcnRzAAEDAwkBAiE9AgUHYnBPcmRBbQAACQECIT0CBQdicE9yZFByBQd3aE9yZFByBwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgpQcmljZXMgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhcgZG9uJ3QgbWF0Y2ghIFdIIHByaWNlPQkApAMBBQd3aE9yZFByAg0sIHlvdXIgcHJpY2U9CQCkAwEFB2JwT3JkUHIECHdoT3JkVXNkAwUGaXNQcm9kCQBoAgUHd2hPcmRBbQUHd2hPcmRQcgkAawMFB3doT3JkQW0FB3doT3JkUHIFBU1VTFQ4BAhkZWx0YVZvbAkBCHRvVm9sdW1lAwUHYnBPcmRBbQUOUFJPRFVDVFBLR1NJWkUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ8KDQkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yBQl3aE9yZEluaXQJAM0IAggFA2FjYwJfMwkApAMBBQZicEluaXQIBQNhY2MCXzQIBQNhY2MCXzUIBQNhY2MCXzYJAGQCCAUDYWNjAl83AAEIBQNhY2MCXzgIBQNhY2MCXzkIBQNhY2MDXzEwCAUDYWNjA18xMQUGaXNQcm9kCAUDYWNjA18xMwMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAnwoNCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGQCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICD0F0dGVtcHQgdG8gYnV5IAkAkQMCCAUDYWNjA18xMQUBagIgIHdoaWxlIHdhcmVob3VzZSBkb2Vzbid0IHNlbGwgaXQDCQBmAgUHd2hPcmRBbQAAAwkAZgIJAQEtAQUHYnBPcmRBbQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIaLCBidXQgd2FyZWhvdXNlIG9ubHkgYnV5cyAJAKQDAQUHd2hPcmRBbQMJAGYCCQEBLQEFB2JwT3JkQW0FBmJwSW5pdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCkAwEJAQEtAQUHYnBPcmRBbQIULCBidXQgeW91IG9ubHkgaGF2ZSAJAKQDAQUGYnBJbml0AgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqCQCfCg0JAM0IAggFA2FjYwJfMQkApAMBCQBlAgUGd2hJbml0BQdicE9yZEFtCQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBlAggFA2FjYwJfNAUIZGVsdGFWb2wJAGUCCAUDYWNjAl81BQhicE9yZFVzZAgFA2FjYwJfNgkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAGUCCAUDYWNjA18xMwMFBmlzUHJvZAkAaAIFB2JwT3JkQW0FBU1VTFQ4BQdicE9yZEFtCQACAQkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAJEDAggFA2FjYwNfMTEFAWoCHyB3aGlsZSB3YXJlaG91c2UgZG9lc24ndCBidXkgaXQBE3NlbGxSZXNvdXJjZXNDb21tb24EB3Jlc0xpc3QMZmFjdG9yeUxvY0lkB2Ftb3VudHMJbWluUHJpY2VzCgEFYWRkZXICA2FjYwFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCFCwgYnV0IHRyaWVkIHRvIHNlbGwgCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCAAAJAJEDAgUHYW1vdW50cwUBagkAAgEJAKwCAgkArAICCQCsAgICJVlvdSB0cmllZCB0byBzZWxsIG5lZ2F0aXZlIGFtb3VudCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCAjogCQCkAwEJAJEDAgUHYW1vdW50cwUBagMJAGYCCQCRAwIFB2Ftb3VudHMFAWoAAAQBYgkBDHNlbGxJbnRlcm5hbAQFDGZhY3RvcnlMb2NJZAUBagkAkQMCBQdhbW91bnRzBQFqCQCRAwIFCW1pblByaWNlcwUBagkAlgoECQDNCAIIBQNhY2MCXzEIBQFiAl8xCQDNCAIIBQNhY2MCXzIJAKQDAQkAZQIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXNMaXN0BQFqCQCRAwIFB2Ftb3VudHMFAWoJAGQCCAUDYWNjAl8zCAUBYgJfMgkAZAIIBQNhY2MCXzQJAJEDAgUHYW1vdW50cwUBagkAlgoECAUDYWNj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aGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGARBzaG9wMnVzZXJBY3Rpb25zAw11c2RXaDJCcFNhbGRvCmNhbGxlckFkZHILcmVjZWl2ZWRGZWUDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMFDXVzZFdoMkJwU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2AwkAZwIFC3JlY2VpdmVkRmVlCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgULcmVjZWl2ZWRGZWUABgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5BAZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFCmNhbGxlckFkZHIJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCQBlAgUNdXNkV2gyQnBTYWxkbwkAaAIAAwULdXNkV2gyQnBGZWUFC3JlY2VpdmVkRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQFA25pbAEQdXNlcjJzaG9wQWN0aW9ucwQNdXNkQnAyV2hTYWxkbwRwbXRzDXNob3BMYW5kT3duZXIIc3BlbnRGZWUDCQBmAgUNdXNkQnAyV2hTYWxkbwAAAwkBAiE9AgkAkAMBBQRwbXRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAgUEcG10cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBBB1c2R0U3BlbnRXaXRoRmVlCQBkAgUNdXNkQnAyV2hTYWxkbwUIc3BlbnRGZWUDCQECIT0CBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQ11c2RCcDJXaFNhbGRvAAYCASsJAQpmaXhlZFBvaW50AgUIc3BlbnRGZWUABgIOKGRlbGl2ZXJ5IGZlZSkDCQBmAgUOTUlOU0hPUFBBWU1FTlQFDXVzZEJwMldoU2FsZG8JAAIBCQCsAgICEk1pbiBzaG9wIHRyYWRlIGlzIAkBCmZpeGVkUG9pbnQCBQ5NSU5TSE9QUEFZTUVOVAAGBAt1c2RCcDJXaEZlZQkAawMFDXVzZEJwMldoU2FsZG8FCkFVQ1RJT05GRUUFBU1VTFQ2BAhyZWZCeUtleQkBD2tleUFkZHJlc3NSZWZCeQEFDXNob3BMYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkJAM0IAgkAzQgCAwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQV2YWx1ZQEFBXJlZkJ5BQt1c2RCcDJXaEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQ1zaG9wTGFuZE93bmVyCQBlAgUNdXNkQnAyV2hTYWxkbwkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQUEcG10cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBQNuaWwBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYPc2hvcExhbmRBc3NldElkCmNhbGxlckFkZHIKYnBPcmRlclN0cglicFJlc0xpc3QJYnBNYXRMaXN0CmJwUHJvZExpc3QECWxhbmRBc3NldAkBBXZhbHVlAQkA7AcBCQDZBAEFD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFD3Nob3BMYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUJbGFuZEFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBA1zaG9wTGFuZE93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQUPc2hvcExhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUNc2hvcExhbmRPd25lcgUKY2FsbGVyQWRkcgkAAgECHllvdSBjYW5ub3QgdHJhZGUgd2l0aCB5b3Vyc2VsZgQMYnBPcmRlclBhcnRzCQC8CQIFCmJwT3JkZXJTdHICAToDCQECIT0CCQCQAwEFDGJwT3JkZXJQYXJ0cwADCQACAQIyYnBPcmRlclN0ciBzaG91bGQgY29udGFpbiBleGFjdGx5IDIgJzonIHNlcGFyYXRvcnMECGJwT3JkUmVzCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAACAV8ECGJwT3JkTWF0CQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAECAV8ECWJwT3JkUHJvZAMJAAACCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgAFA25pbAkAvAkCCQCRAwIFDGJwT3JkZXJQYXJ0cwACAgFfAwkBAiE9AgkAkAMBBQhicE9yZFJlcwUGTlVNUkVTCQACAQIgQWxsIDYgcmVzb3VyY2VzIHNob3VsZCBiZSBwYXNzZWQDCQECIT0CCQCQAwEFCGJwT3JkTWF0BQZOVU1SRVMJAAIBAiBBbGwgNiBtYXRlcmlhbHMgc2hvdWxkIGJlIHBhc3NlZAQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToECWN1cnJXaFJlcwkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8ECWN1cnJXaE1hdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhNYXQCAV8ECmN1cnJXaFByb2QDCQAAAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIABQNuaWwJALwJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4UHJvZAIBXwQPY3VycldoTG9ja2VkVm9sCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBQl2b2xMb2NrZWQEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQUPc2hvcExhbmRBc3NldElkBAV3aE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAh3aE9yZFJlcwkAtQkCCQCRAwIFBXdoT3JkBQlvcmRJZHhSZXMCAV8ECHdoT3JkTWF0CQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeE1hdAIBXwQJd2hPcmRQcm9kAwkAAAIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgUFd2hPcmQFCm9yZElkeFByb2QCAV8EAXIKAAIkbAUIYnBPcmRSZXMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCfCg0FA25pbAUDbmlsBQNuaWwAAAAAAAAAAAUJYnBSZXNMaXN0BQljdXJyV2hSZXMFCHdoT3JkUmVzBQhyZXNUeXBlcwcAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNj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A25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ9zaG9wTGFuZEFzc2V0SWQFA25pbAUDbmlsBA5hY2NTdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFDXNob3BMYW5kT3duZXIJAMwIAgkAawMFBnhwU2hvcAgFAXADXzEzBQVNVUxUOAUDbmlsBQNuaWwJAJwKCgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cggFAXICXzMIBQFtAl8zCAUBcAJfMwgFAXACXzUIBQFwAl82CAUBcANfMTMFDXNob3BMYW5kT3duZXIFBndoU2F2ZQUOYWNjU3RhdHNSZXN1bHQBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQZhbW91bnQEBm9uZVJlcwkAaQIFBmFtb3VudAAeBBFvbmVGYWN0b3J5QW1vdW50cwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwkAzAgCBQZvbmVSZXMJAMwIAgUGb25lUmVzCQDMCAIFBm9uZVJlcwUDbmlsBAFzCQCkAwEFBm9uZVJlcwQHcmVzTGlzdAkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwkAzAgCBQFzCQDMCAIFAXMJAMwIAgUBcwUDbmlsBAltaW5QcmljZXMJAMwIAgAACQDMCAIAAAkAzAgCAAAJAMwIAgAACQDMCAIAAAkAzAgCAAAFA25pbAoBCm9uZUZhY3RvcnkCA2FjYwljb250aW5lbnQEAXgJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUJY29udGluZW50BRFvbmVGYWN0b3J5QW1vdW50cwUJbWluUHJpY2VzCQCVCgMJAM4IAggFA2FjYwJfMQgFAXgCXzEJAGQCCAUDYWNjAl8yCAUBeAJfMwkAZAIIBQNhY2MCXzMIBQF4Al80BA0kdDAyNTI2MTI1MzUxCgACJGwFCmNvbnRpbmVudHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAAAAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCm9uZUZhY3RvcnkCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECE0xpc3Qgc2l6ZSBleGNlZWRzIDUJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI1MjYxMjUzNTECXzEEDHVzZHRSZWNlaXZlZAgFDSR0MDI1MjYxMjUzNTECXzIECHRvdGFsUmVzCAUNJHQwMjUyNjEyNTM1MQJfMwQDZmVlCQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQECHVzZHRMZWZ0CQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlCQCXCgUFDmZhY3RvcnlBY3Rpb25zBQh1c2R0TGVmdAUDZmVlBRBhY3Rpdml0aWVzQW1vdW50BQh0b3RhbFJlcxYBaQEacmVjYWxjTG9ja2VkVm9sdW1lUkVBRE9OTFkCC2xhbmRBc3NldElkAndoBApjdXJyZW50T3JkCQEIZ2V0T3JkZXIBCQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQBegkBC3NldEludGVybmFsAwUCd2gFCmN1cnJlbnRPcmQFCmN1cnJlbnRPcmQJAJQKAgUDbmlsCQBkAggFAXoCXzQIBQF6Al81AWkBDWNvbnN0cnVjdG9yVjEBCHJlc3RBZGRyAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIRUGVybWlzc2lvbiBkZW5pZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleVJlc3RBZGRyZXNzAAUIcmVzdEFkZHIFA25pbAFpAQ1zZWxsUmVzb3VyY2VzAgdhbW91bnRzCW1pblByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQNJHQwMjY4MDMyNjkyOQkBE3NlbGxSZXNvdXJjZXNDb21tb24EBQdyZXNMaXN0CQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI2ODAzMjY5MjkCXzEEBm5ld1JlcwgFDSR0MDI2ODAzMjY5MjkCXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI2ODAzMjY5MjkCXzMECHRvdGFsUmVzCAUNJHQwMjY4MDMyNjkyOQJfNAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFDHVzZHRSZWNlaXZlZABkBAduZXdQYWNrCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFBm5ld1JlcwIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIFDmZhY3RvcnlBY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBEnNlbGxSZXNvdXJjZXNXb3JsZAIEYWRkcgZhbW91bnQDCQECIT0CCAUBaQZjYWxsZXIFDWFjcmVzQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQNJHQwMjc3MjEyNzg3OAkBGnNlbGxSZXNvdXJjZXNXb3JsZEludGVybmFsAQUGYW1vdW50BA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI3NzIxMjc4NzgCXzEECHVzZHRMZWZ0CAUNJHQwMjc3MjEyNzg3OAJfMgQDZmVlCAUNJHQwMjc3MjEyNzg3OAJfMwQQYWN0aXZpdGllc0Ftb3VudAgFDSR0MDI3NzIxMjc4NzgCXzQECHRvdGFsUmVzCAUNJHQwMjc3MjEyNzg3OAJfNQMJAGcCAAAFCHVzZHRMZWZ0CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUFjY1N0YXRzCQDMCAIFBGFkZHIJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsUmVzBQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAABQNmZWUJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFEmludmVzdEZ1bmRDb250cmFjdAUIdXNkdExlZnQFC3VzZHRBc3NldElkCQCUCgIFCHVzZHRMZWZ0BQtzdGF0c1Jlc3VsdAFpARpzZWxsUmVzb3VyY2VzV29ybGRSRUFET05MWQEGYW1vdW50BAh1c2R0TGVmdAgJARpzZWxsUmVzb3VyY2VzV29ybGRJbnRlcm5hbAEFBmFtb3VudAJfMgkAlAoCBQNuaWwFCHVzZHRMZWZ0AWkBGXNlbGxSZXNvdXJjZXNEdWNrRGVsaXZlcnkDB2Ftb3VudHMJbWluUHJpY2VzEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQIqc2VsbFJlc291cmNlcyBkb2Vzbid0IHJlcXVpcmUgYW55IHBheW1lbnRzBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8EDSR0MDI5MTExMjkyMzIJARNzZWxsUmVzb3VyY2VzQ29tbW9uBAUHcmVzTGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWluUHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDI5MTExMjkyMzICXzEEBm5ld1JlcwgFDSR0MDI5MTExMjkyMzICXzIEDHVzZHRSZWNlaXZlZAgFDSR0MDI5MTExMjkyMzICXzMECHRvdGFsUmVzCAUNJHQwMjkxMTEyOTIzMgJfNAQHbmV3UGFjawkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbFJlcwUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUMdXNkdFJlY2VpdmVkBQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQx1c2R0UmVjZWl2ZWQAZAMJAGcCBQNmZWUJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQJAAIBCQCsAgICK1RoaXMgdHJhZGUgZG9lcyBub3QgY292ZXIgZGVsaXZlcnkgY29zdCBvZiAJAQpmaXhlZFBvaW50AgUDZmVlAAYECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzQgCBQ5mYWN0b3J5QWN0aW9ucwkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgkAZQIFDHVzZHRSZWNlaXZlZAUQYWN0aXZpdGllc0Ftb3VudAUDZmVlBQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQCVCgMFDmJhY2twYWNrUmVzdWx0BQxwcm9sb2dSZXN1bHQFC3N0YXRzUmVzdWx0AWkBGXNlbGxSZXNvdXJjZXNMYW5kRGVsaXZlcnkEB2Ftb3VudHMJbWluUHJpY2VzC2xhbmRBc3NldElkEGZhY3RvcnlDb250aW5lbnQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECKnNlbGxSZXNvdXJjZXMgZG9lc24ndCByZXF1aXJlIGFueSBwYXltZW50cwQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB3Jlc0xpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBA0kdDAzMTI1OTMxMzgwCQETc2VsbFJlc291cmNlc0NvbW1vbgQFB3Jlc0xpc3QFEGZhY3RvcnlDb250aW5lbnQFB2Ftb3VudHMFCW1pblByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMTI1OTMxMzgwAl8xBAZuZXdSZXMIBQ0kdDAzMTI1OTMxMzgwAl8yBAx1c2R0UmVjZWl2ZWQIBQ0kdDAzMTI1OTMxMzgwAl8zBAh0b3RhbFJlcwgFDSR0MDMxMjU5MzEzODACXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQh3aElkeE1hdAkAzAgCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQWNjU3RhdHMJAMwIAgUEYWRkcgkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxSZXMFBU1VTFQ4BQNuaWwFA25pbAQHZmVlUGFydAkAawMFDHVzZHRSZWNlaXZlZAUMREVMSVZFUllfRkVFBQVNVUxUNgQDZmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BBBhY3Rpdml0aWVzQW1vdW50CQBpAgUMdXNkdFJlY2VpdmVkAGQDCQBnAgUDZmVlCQBlAgUMdXNkdFJlY2VpdmVkBRBhY3Rpdml0aWVzQW1vdW50CQACAQkArAICAitUaGlzIHRyYWRlIGRvZXMgbm90IGNvdmVyIGRlbGl2ZXJ5IGNvc3Qgb2YgCQEKZml4ZWRQb2ludAIFA2ZlZQAGBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAJAJQKAgkAzQgCCQDNCAIJAM0IAgUOZmFjdG9yeUFjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIJAGUCBQx1c2R0UmVjZWl2ZWQFEGFjdGl2aXRpZXNBbW91bnQFA2ZlZQULdXNkdEFzc2V0SWQJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGQCBQlmdW5kVG90YWwFA2ZlZQkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkAlQoDBQZ3aFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEMYnV5TWF0ZXJpYWxzAgdhbW91bnRzCW1heFByaWNlcwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzMzI0MDMzMzYyCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQFB2Ftb3VudHMFCW1heFByaWNlcwQOZmFjdG9yeUFjdGlvbnMIBQ0kdDAzMzI0MDMzMzYyAl8xBAZuZXdNYXQIBQ0kdDAzMzI0MDMzMzYyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzMzI0MDMzMzYyAl8zBAh0b3RhbE1hdAgFDSR0MDMzMjQwMzMzNjICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMJAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUIdG90YWxNYXQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIJAM4IAgUOZmFjdG9yeUFjdGlvbnMFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEYYnV5TWF0ZXJpYWxzRHVja0RlbGl2ZXJ5AwdhbW91bnRzCW1heFByaWNlcxBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8EDSR0MDM0ODgwMzQ5OTcJARJidXlNYXRlcmlhbHNDb21tb24EBQdtYXRMaXN0BRBmYWN0b3J5Q29udGluZW50BQdhbW91bnRzBQltYXhQcmljZXMEDmZhY3RvcnlBY3Rpb25zCAUNJHQwMzQ4ODAzNDk5NwJfMQQGbmV3TWF0CAUNJHQwMzQ4ODAzNDk5NwJfMgQJdXNkdFNwZW50CAUNJHQwMzQ4ODAzNDk5NwJfMwQIdG90YWxNYXQIBQ0kdDAzNDg4MDM0OTk3Al80BAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm5ld01hdAIBXwkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QFA25pbAIBOgQOYmFja3BhY2tSZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFB3hwVHJhZGUFCHRvdGFsTWF0BQVNVUxUOAUDbmlsBQNuaWwEB2ZlZVBhcnQJAGsDBQl1c2R0U3BlbnQFDERFTElWRVJZX0ZFRQUFTVVMVDYEA2ZlZQMJAGYCBRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUHZmVlUGFydAQQdXNkdFNwZW50V2l0aEZlZQkAZAIFCXVzZHRTcGVudAUDZmVlAwkAZgIFEHVzZHRTcGVudFdpdGhGZWUFA2FtdAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAQpmaXhlZFBvaW50AgUDYW10AAYCCywgcmVxdWlyZWQ9CQEKZml4ZWRQb2ludAIFCXVzZHRTcGVudAAGAgErCQEKZml4ZWRQb2ludAIFA2ZlZQAGAg4oZGVsaXZlcnkgZmVlKQQEcmVzdAMJAGYCCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BRB1c2R0U3BlbnRXaXRoRmVlBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCBQl1c2R0U3BlbnQAZAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCCQDOCAIFDmZhY3RvcnlBY3Rpb25zBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEYYnV5TWF0ZXJpYWxzTGFuZERlbGl2ZXJ5BAdhbW91bnRzCW1heFByaWNlcwtsYW5kQXNzZXRJZBBmYWN0b3J5Q29udGluZW50AwkBASEBBRFLU19BTExPV19ERUxJVkVSWQkAAgECH0RlbGl2ZXJ5IGZlYXR1cmUgaXMgdHVybmVkIG9mZiEEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAMDCQEBIQEJAQlpc0RlZmluZWQBCAUDcG10B2Fzc2V0SWQGCQECIT0CCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQEdXNlcggFAWkGY2FsbGVyBARhZGRyCQClCAEFBHVzZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFBGFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsBAljdXJyZW50V2gJALwJAgUCd2gCAToEB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDAzNzI3NTM3MzkyCQESYnV5TWF0ZXJpYWxzQ29tbW9uBAUHbWF0TGlzdAUQZmFjdG9yeUNvbnRpbmVudAUHYW1vdW50cwUJbWF4UHJpY2VzBA5mYWN0b3J5QWN0aW9ucwgFDSR0MDM3Mjc1MzczOTICXzEEBm5ld01hdAgFDSR0MDM3Mjc1MzczOTICXzIECXVzZHRTcGVudAgFDSR0MDM3Mjc1MzczOTICXzMECHRvdGFsTWF0CAUNJHQwMzcyNzUzNzM5MgJfNAQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBQh0b3RhbE1hdAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQxERUxJVkVSWV9GRUUFBU1VTFQ2BANmZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQdmZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgkAzggCBQ5mYWN0b3J5QWN0aW9ucwUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpARFleGNoYW5nZVJlc291cmNlcwEHYW1vdW50cwQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdyZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfBA0kdDAzOTUwNjM5NjEyCQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDAzOTUwNjM5NjEyAl8xBAZuZXdNYXQIBQ0kdDAzOTUwNjM5NjEyAl8yBAl1c2R0U3BlbnQIBQ0kdDAzOTUwNjM5NjEyAl8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDM5NTA2Mzk2MTICXzQDCQBmAgUJdXNkdFNwZW50BQNhbXQJAAIBCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgQHbmV3UGFjawkAuQkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQZuZXdSZXMCAV8JAMwIAgkAuQkCBQZuZXdNYXQCAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEDmJhY2twYWNrUmVzdWx0CQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUHbmV3UGFjawUDbmlsBQNuaWwEBHJlc3QDCQBmAgkAZQIFA2FtdAUJdXNkdFNwZW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10BQl1c2R0U3BlbnQFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDNCAIFBHJlc3QJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEdZXhjaGFuZ2VSZXNvdXJjZXNEdWNrRGVsaXZlcnkBB2Ftb3VudHMDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAQLZHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEJAKUIAQgFAWkGY2FsbGVyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQDAwkBASEBCQEJaXNEZWZpbmVkAQgFA3BtdAdhc3NldElkBgkBAiE9AgkBBXZhbHVlAQgFA3BtdAdhc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQNJHQwNDExMjQ0MTIzMAkBF2V4Y2hhbmdlUmVzb3VyY2VzQ29tbW9uAwUHcmVzTGlzdAUHbWF0TGlzdAUHYW1vdW50cwQGbmV3UmVzCAUNJHQwNDExMjQ0MTIzMAJfMQQGbmV3TWF0CAUNJHQwNDExMjQ0MTIzMAJfMgQJdXNkdFNwZW50CAUNJHQwNDExMjQ0MTIzMAJfMwQUdG90YWxBbW91bnRDb252ZXJ0ZWQIBQ0kdDA0MTEyNDQxMjMwAl80BAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEB25ld1BhY2sJALkJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BA5iYWNrcGFja1Jlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQFEHVzZHRTcGVudFdpdGhGZWUFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIFCXVzZHRTcGVudABkBAtzdGF0c1Jlc3VsdAkBBWFzSW50AQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCD3VwZGF0ZUR1Y2tTdGF0cwkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCCQBrAwUHeHBUcmFkZQUUdG90YWxBbW91bnRDb252ZXJ0ZWQFBU1VTFQ4BQNuaWwFA25pbAQJZnVuZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFD2RlbGl2ZXJ5RnVuZEtleQAACQCUCgIJAM0IAgkAzQgCBQRyZXN0CQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFEGFjdGl2aXRpZXNBbW91bnQFC3VzZHRBc3NldElkCQEMSW50ZWdlckVudHJ5AgUPZGVsaXZlcnlGdW5kS2V5CQBkAgUJZnVuZFRvdGFsBQNmZWUJAJUKAwUOYmFja3BhY2tSZXN1bHQFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEdZXhjaGFuZ2VSZXNvdXJjZXNMYW5kRGVsaXZlcnkCB2Ftb3VudHMLbGFuZEFzc2V0SWQDCQEBIQEFEUtTX0FMTE9XX0RFTElWRVJZCQACAQIfRGVsaXZlcnkgZmVhdHVyZSBpcyB0dXJuZWQgb2ZmIQQMcHJvbG9nUmVzdWx0CQEGcHJvbG9nAAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50AwMJAQEhAQkBCWlzRGVmaW5lZAEIBQNwbXQHYXNzZXRJZAYJAQIhPQIJAQV2YWx1ZQEIBQNwbXQHYXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAR1c2VyCAUBaQZjYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQFYXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAg4gaXMgbm90IHN0YWtlZAQFb3duZXIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARVrZXlMYW5kQXNzZXRJZFRvT3duZXIBBQtsYW5kQXNzZXRJZAkArAICCQCsAgICBE5GVCAIBQVhc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQECIT0CBQVvd25lcgUEYWRkcgkAAgEJAKwCAgUKTEFORFBSRUZJWAINIGlzIG5vdCB5b3VycwQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBA0kdDA0MzUzMDQzNjM2CQEXZXhjaGFuZ2VSZXNvdXJjZXNDb21tb24DBQdyZXNMaXN0BQdtYXRMaXN0BQdhbW91bnRzBAZuZXdSZXMIBQ0kdDA0MzUzMDQzNjM2Al8xBAZuZXdNYXQIBQ0kdDA0MzUzMDQzNjM2Al8yBAl1c2R0U3BlbnQIBQ0kdDA0MzUzMDQzNjM2Al8zBBR0b3RhbEFtb3VudENvbnZlcnRlZAgFDSR0MDQzNTMwNDM2MzYCXzQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAgUGbmV3UmVzAgFfCQDMCAIJALkJAgUGbmV3TWF0AgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QJAMwIAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAUDbmlsAgE6BAZ3aFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag1zYXZlV2FyZWhvdXNlCQDMCAIFBXdoU3RyCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQRhZGRyCQDMCAIJAGsDBQd4cFRyYWRlBRR0b3RhbEFtb3VudENvbnZlcnRlZAUFTVVMVDgFA25pbAUDbmlsBAdmZWVQYXJ0CQBrAwUJdXNkdFNwZW50BQ5ERUxJVkVSWV9GRUUxNQUFTVVMVDYEA2ZlZQMJAGYCBRdNSU5fVVNEVF9GRUVfREVMSVZFUlkxNQUHZmVlUGFydAUXTUlOX1VTRFRfRkVFX0RFTElWRVJZMTUFB2ZlZVBhcnQEEHVzZHRTcGVudFdpdGhGZWUJAGQCBQl1c2R0U3BlbnQFA2ZlZQMJAGYCBRB1c2R0U3BlbnRXaXRoRmVlBQNhbXQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAh9JbnN1ZmZpY2llbnQgcGF5bWVudCEgQXR0YWNoZWQ9CQEKZml4ZWRQb2ludAIFA2FtdAAGAgssIHJlcXVpcmVkPQkBCmZpeGVkUG9pbnQCBQl1c2R0U3BlbnQABgIBKwkBCmZpeGVkUG9pbnQCBQNmZWUABgIOKGRlbGl2ZXJ5IGZlZSkEBHJlc3QDCQBmAgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgkAZQIFA2FtdAUQdXNkdFNwZW50V2l0aEZlZQULdXNkdEFzc2V0SWQFA25pbAUDbmlsBBBhY3Rpdml0aWVzQW1vdW50CQBpAgUJdXNkdFNwZW50AGQECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAkAlAoCCQDNCAIJAM0IAgUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAUDZmVlCQCVCgMFBndoU2F2ZQUMcHJvbG9nUmVzdWx0BQtzdGF0c1Jlc3VsdAFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1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AAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBAhuZXdPcmRlcgkAvAkCBQtuZXdPcmRlclN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAd3aFRvdGFsCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAUIdm9sVG90YWwEBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEFBm9yZEtleQQBegkBC3NldEludGVybmFsAwUJY3VycmVudFdoBQpjdXJyZW50T3JkBQhuZXdPcmRlcgQLYnV5Vm9sU2FsZG8IBQF6Al80BAxzZWxsVm9sU2FsZG8IBQF6Al81BAp3aE9jY3VwaWVkCAUBegJfNwQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgAABQZ3aEZyZWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAhNBdHRlbXB0IHRvIHJlc2VydmUgCQCkAwEFC2J1eVZvbFNhbGRvAhsgc3BhY2UgZm9yIGJ1eSBvcmRlcnMsIGFuZCAJAKQDAQUMc2VsbFZvbFNhbGRvAiUgc3BhY2UgZm9yIHNlbGwgb3JkZXJzIChhbmQgb2NjdXBpZWQ9CQCkAwEFCndoT2NjdXBpZWQCHyksIGxlYWRzIHRvIG5lZ2F0aXZlIGZyZWUgc3BhY2UEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC6CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkAAAIFCHVzZFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdPcmRlclN0cgUDbmlsAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBW93bmVyCQEBLQEFCHVzZFNhbGRvBQt1c2R0QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQZvcmRLZXkFC25ld09yZGVyU3RyBQNuaWwJAJQKAgUHYWN0aW9ucwkAlAoCBQZyZXN1bHQFBndoU2F2ZQFpARRhY2NlcHRXYXJlaG91c2VPcmRlcgMKYnBPcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQLZHVja0Fzc2V0SWQEDHByb2xvZ1Jlc3VsdAkBBnByb2xvZwAEBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyBApjYWxsZXJBZGRyCQClCAEFBmNhbGxlcgQRc3Rha2VkRHVja0Fzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJARRrZXlTdGFrZWREdWNrQnlPd25lcgEFCmNhbGxlckFkZHICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFEXN0YWtlZER1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04EA2xvYwkAtQkCCQEFdmFsdWUBBQtjdXJMb2NhdGlvbgIBXwMJAQIhPQIJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAgFMCQACAQkArAICCQCsAgICFkR1Y2sgbG9jYXRpb24gdHlwZSBpcyAJAJEDAgUDbG9jBQpsb2NJZHhUeXBlAhEsIGJ1dCBzaG91bGQgYmUgTAMJAQIhPQIFEXN0YWtlZER1Y2tBc3NldElkBQtkdWNrQXNzZXRJZAkAAgEJAKwCAgkArAICCQCsAgICFFlvdXIgc3Rha2VkIGR1Y2sgaXMgBRFzdGFrZWREdWNrQXNzZXRJZAINLCBidXQgcGFzc2VkIAULZHVja0Fzc2V0SWQEBWJwS2V5CQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEFBWJwS2V5BAlicFJlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8ECWJwTWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwQKYnBQcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQNJHQwNTMxNDg1MzM4OAkBFWFjY2VwdFNob3BPcmRlckNvbW1vbgYFD3Nob3BMYW5kQXNzZXRJZAUKY2FsbGVyQWRkcgUKYnBPcmRlclN0cgUJYnBSZXNMaXN0BQlicE1hdExpc3QFCmJwUHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1MzE0ODUzMzg4Al8xBApuZXdVc2VyUmVzCAUNJHQwNTMxNDg1MzM4OAJfMgQKbmV3VXNlck1hdAgFDSR0MDUzMTQ4NTMzODgCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTMxNDg1MzM4OAJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDUzMTQ4NTMzODgCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1MzE0ODUzMzg4Al82BAh4cEFtb3VudAgFDSR0MDUzMTQ4NTMzODgCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1MzE0ODUzMzg4Al84BApzaG9wV2hTYXZlCAUNJHQwNTMxNDg1MzM4OAJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1MzE0ODUzMzg4A18xMAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyAAAECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyAAAECG5ld0JwU3RyCQC6CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIFCm5ld1VzZXJSZXMCAV8JAMwIAgkAuQkCBQpuZXdVc2VyTWF0AgFfCQDMCAIJALoJAgULbmV3VXNlclByb2QCAV8FA25pbAIBOgQGYnBTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIOdXBkYXRlQmFja3BhY2sJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgUIbmV3QnBTdHIFA25pbAUDbmlsBA9kdWNrU3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag91cGRhdGVEdWNrU3RhdHMJAMwIAgULZHVja0Fzc2V0SWQJAMwIAgkAawMFBnhwU2hvcAUIeHBBbW91bnQFBU1VTFQ4BQNuaWwFA25pbAkAlAoCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkAlwoFBQxwcm9sb2dSZXN1bHQFCnNob3BXaFNhdmUFBmJwU2F2ZQUPZHVja1N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARthY2NlcHRTaG9wT3JkZXJEdWNrRGVsaXZlcnkCCG9yZGVyU3RyD3Nob3BMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAvAkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EDSR0MDU0ODI3NTUwNjUJARVhY2NlcHRTaG9wT3JkZXJDb21tb24GBQ9zaG9wTGFuZEFzc2V0SWQFCmNhbGxlckFkZHIFCG9yZGVyU3RyBQlicFJlc0xpc3QFCWJwTWF0TGlzdAUKYnBQcm9kTGlzdAQKc2hvcEFjdGlvbggFDSR0MDU0ODI3NTUwNjUCXzEECm5ld1VzZXJSZXMIBQ0kdDA1NDgyNzU1MDY1Al8yBApuZXdVc2VyTWF0CAUNJHQwNTQ4Mjc1NTA2NQJfMwQLbmV3VXNlclByb2QIBQ0kdDA1NDgyNzU1MDY1Al80BA11c2RXaDJCcFNhbGRvCAUNJHQwNTQ4Mjc1NTA2NQJfNQQNdXNkQnAyV2hTYWxkbwgFDSR0MDU0ODI3NTUwNjUCXzYECHhwQW1vdW50CAUNJHQwNTQ4Mjc1NTA2NQJfNwQNc2hvcExhbmRPd25lcggFDSR0MDU0ODI3NTUwNjUCXzgECnNob3BXaFNhdmUIBQ0kdDA1NDgyNzU1MDY1Al85BA5hY2NTdGF0c1Jlc3VsdAgFDSR0MDU0ODI3NTUwNjUDXzEwBA9kZWxpdmVyeUZlZVBhcnQJAGsDCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwUMREVMSVZFUllfRkVFBQVNVUxUNgQLZGVsaXZlcnlGZWUDCQBmAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQ9kZWxpdmVyeUZlZVBhcnQFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BAhzcGVudEZlZQkAawMFC2RlbGl2ZXJ5RmVlBQ11c2RCcDJXaFNhbGRvCQBkAgUNdXNkQnAyV2hTYWxkbwUNdXNkV2gyQnBTYWxkbwQLcmVjZWl2ZWRGZWUJAGUCBQtkZWxpdmVyeUZlZQUIc3BlbnRGZWUECWZ1bmRUb3RhbAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQ9kZWxpdmVyeUZ1bmRLZXkAAAQIYWN0aW9uczEJAMwIAgUKc2hvcEFjdGlvbgkBEHNob3AydXNlckFjdGlvbnMDBQ11c2RXaDJCcFNhbGRvBQpjYWxsZXJBZGRyBQtyZWNlaXZlZEZlZQQIYWN0aW9uczIJARB1c2VyMnNob3BBY3Rpb25zBAUNdXNkQnAyV2hTYWxkbwgFAWkIcGF5bWVudHMFDXNob3BMYW5kT3duZXIFCHNwZW50RmVlBAhuZXdCcFN0cgkAugkCCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCmJwSWR4TGV2ZWwJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC6CQIFC25ld1VzZXJQcm9kAgFfBQNuaWwCAToEBmJwU2F2ZQkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFCG5ld0JwU3RyBQNuaWwFA25pbAQPZHVja1N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZicFNhdmUFD2R1Y2tTdGF0c1Jlc3VsdAUOYWNjU3RhdHNSZXN1bHQBaQEbYWNjZXB0U2hvcE9yZGVyTGFuZERlbGl2ZXJ5AwhvcmRlclN0cg9zaG9wTGFuZEFzc2V0SWQNbXlMYW5kQXNzZXRJZAMJAQEhAQURS1NfQUxMT1dfREVMSVZFUlkJAAIBAh9EZWxpdmVyeSBmZWF0dXJlIGlzIHR1cm5lZCBvZmYhBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cABAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQUNbXlMYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFDW15TGFuZEFzc2V0SWQJAAIBCQCsAgIJAKwCAgIETkZUIAgFBWFzc2V0BG5hbWUCDiBpcyBub3Qgc3Rha2VkBAVvd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFDW15TGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwkBAiE9AgUFb3duZXIFCmNhbGxlckFkZHIJAAIBCQCsAgIFCkxBTkRQUkVGSVgCDSBpcyBub3QgeW91cnMEAndoCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIUZ2V0V2FyZWhvdXNlUkVBRE9OTFkJAMwIAgUNbXlMYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQHcmVzTGlzdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUId2hJZHhSZXMCAV8EB21hdExpc3QJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBAhwcm9kTGlzdAMJAAACCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhQcm9kAgFfBA0kdDA1NzMwNDU3NTM2CQEVYWNjZXB0U2hvcE9yZGVyQ29tbW9uBgUPc2hvcExhbmRBc3NldElkBQpjYWxsZXJBZGRyBQhvcmRlclN0cgUHcmVzTGlzdAUHbWF0TGlzdAUIcHJvZExpc3QECnNob3BBY3Rpb24IBQ0kdDA1NzMwNDU3NTM2Al8xBApuZXdVc2VyUmVzCAUNJHQwNTczMDQ1NzUzNgJfMgQKbmV3VXNlck1hdAgFDSR0MDU3MzA0NTc1MzYCXzMEC25ld1VzZXJQcm9kCAUNJHQwNTczMDQ1NzUzNgJfNAQNdXNkV2gyQnBTYWxkbwgFDSR0MDU3MzA0NTc1MzYCXzUEDXVzZEJwMldoU2FsZG8IBQ0kdDA1NzMwNDU3NTM2Al82BAh4cEFtb3VudAgFDSR0MDU3MzA0NTc1MzYCXzcEDXNob3BMYW5kT3duZXIIBQ0kdDA1NzMwNDU3NTM2Al84BApzaG9wV2hTYXZlCAUNJHQwNTczMDQ1NzUzNgJfOQQOYWNjU3RhdHNSZXN1bHQIBQ0kdDA1NzMwNDU3NTM2A18xMAQPZGVsaXZlcnlGZWVQYXJ0CQBrAwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8FDERFTElWRVJZX0ZFRQUFTVVMVDYEC2RlbGl2ZXJ5RmVlAwkAZgIFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQUPZGVsaXZlcnlGZWVQYXJ0BRVNSU5fVVNEVF9GRUVfREVMSVZFUlkFD2RlbGl2ZXJ5RmVlUGFydAQIc3BlbnRGZWUJAGsDBQtkZWxpdmVyeUZlZQUNdXNkQnAyV2hTYWxkbwkAZAIFDXVzZEJwMldoU2FsZG8FDXVzZFdoMkJwU2FsZG8EC3JlY2VpdmVkRmVlCQBlAgULZGVsaXZlcnlGZWUFCHNwZW50RmVlBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAECGFjdGlvbnMxCQDMCAIFCnNob3BBY3Rpb24JARBzaG9wMnVzZXJBY3Rpb25zAwUNdXNkV2gyQnBTYWxkbwUKY2FsbGVyQWRkcgULcmVjZWl2ZWRGZWUECGFjdGlvbnMyCQEQdXNlcjJzaG9wQWN0aW9ucwQFDXVzZEJwMldoU2FsZG8IBQFpCHBheW1lbnRzBQ1zaG9wTGFuZE93bmVyBQhzcGVudEZlZQQFd2hTdHIJALoJAgkAzAgCCQCRAwIFCWN1cnJlbnRXaAULd2hJZHhMZXZlbHMJAMwIAgkAuQkCBQpuZXdVc2VyUmVzAgFfCQDMCAIJALkJAgUKbmV3VXNlck1hdAIBXwkAzAgCCQC5CQIFC25ld1VzZXJQcm9kAgFfCQDMCAIJAJEDAgUJY3VycmVudFdoBQl3aElkeExPRlQFA25pbAIBOgQGd2hTYXZlCQEIYXNTdHJpbmcBCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQ1teUxhbmRBc3NldElkBQNuaWwFA25pbAQLc3RhdHNSZXN1bHQJAQVhc0ludAEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVBY2NTdGF0cwkAzAgCBQpjYWxsZXJBZGRyCQDMCAIJAGsDBQZ4cFNob3AFCHhwQW1vdW50BQVNVUxUOAUDbmlsBQNuaWwJAJQKAgkAzQgCCQDOCAIFCGFjdGlvbnMxBQhhY3Rpb25zMgkBDEludGVnZXJFbnRyeQIFD2RlbGl2ZXJ5RnVuZEtleQkAZAIFCWZ1bmRUb3RhbAULZGVsaXZlcnlGZWUJAJcKBQUMcHJvbG9nUmVzdWx0BQpzaG9wV2hTYXZlBQZ3aFNhdmUFC3N0YXRzUmVzdWx0BQ5hY2NTdGF0c1Jlc3VsdAFpARBzZWxsUHJvZHVjdHNUb0VTAQdhbW91bnRzBAxwcm9sb2dSZXN1bHQJAQZwcm9sb2cAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUEJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgQWlycG9ydCwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAhwcm9kTGlzdAMJAAACCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAAUDbmlsCQC8CQIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAIBXwQFZXNLZXkJAQ5rZXlFc1dhcmVob3VzZQAECGV4aXN0U3RyCQCiCAEFBWVzS2V5BAxleGlzdEFtb3VudHMDCQEJaXNEZWZpbmVkAQUIZXhpc3RTdHIJALwJAgkBBXZhbHVlAQUIZXhpc3RTdHICAV8FA25pbAoBCG1vdmVQcm9kAgNhY2MJcmVjaXBlU3RyBAFqCAUDYWNjAl8xBAhxdWFudGl0eQMJAGYCCQCQAwEFB2Ftb3VudHMFAWoJAJEDAgUHYW1vdW50cwUBagAAAwkAZgIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBjYW5ub3QgYmUgbmVnYXRpdmUEBnJlY2lwZQkAtQkCBQlyZWNpcGVTdHICAV8DCQECIT0CCQCQAwEFBnJlY2lwZQUKUkVDSVBFU0laRQkAAgEJAKwCAgIXRmF0YWw6IHVua25vd24gcmVjaXBlOiAFCXJlY2lwZVN0cgQJbWF4QW1vdW50CQBoAgUNRVNNQVhQQUNLQUdFUwUOUFJPRFVDVFBLR1NJWkUEC2V4aXN0QW1vdW50AwkAZgIJAJADAQUMZXhpc3RBbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUMZXhpc3RBbW91bnRzBQFqAAAEBmNhbkJ1eQkAZQIFCW1heEFtb3VudAULZXhpc3RBbW91bnQDCQBmAgUIcXVhbnRpdHkFBmNhbkJ1eQkAAgEJAKwCAgkArAICCQCsAgICF1dhcmVob3VzZSBjYW4gYnV5IG9ubHkgCQCkAwEFBmNhbkJ1eQIEIG9mIAkAkQMCBQlwcm9kVHlwZXMFAWoECHRvdGFsTWF0CQESZ2V0UmVjaXBlTWF0ZXJpYWxzAQUGcmVjaXBlBAl1bml0UHJpY2UJAGsDCQBoAgUIdG90YWxNYXQFCUVTQlVZQ09FRgUQUkVTT1VSQ0VQUklDRU1JTgkAaAIFBU1VTFQ4BQ5QUk9EVUNUUEtHU0laRQQMYnBQcm9kQW1vdW50AwkAZgIJAJADAQUIcHJvZExpc3QFAWoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQhwcm9kTGlzdAUBagAAAwkAZgIFCHF1YW50aXR5BQxicFByb2RBbW91bnQJAAIBCQCsAgIJAKwCAgkArAICAg5Zb3UgaGF2ZSBvbmx5IAkApAMBBQxicFByb2RBbW91bnQCBCBvZiAJAJEDAgUJcHJvZFR5cGVzBQFqCQCXCgUJAGQCBQFqAAEJAGQCCAUDYWNjAl8yCQBoAgUJdW5pdFByaWNlBQhxdWFudGl0eQkAzQgCCAUDYWNjAl8zCQCkAwEJAGUCBQxicFByb2RBbW91bnQFCHF1YW50aXR5CQDNCAIIBQNhY2MCXzQJAKQDAQkAZAIFC2V4aXN0QW1vdW50BQhxdWFudGl0eQkAZAIIBQNhY2MCXzUJAGgCBQh0b3RhbE1hdAUIcXVhbnRpdHkEBm1lcmdlZAoAAiRsBRBwcm9kdWN0aW9uTWF0cml4CgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlwoFAAAAAAUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEIbW92ZVByb2QCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDUwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAAVABYAFwAYABkAGgAbABwAHQAeAB8AIAAhACIAIwAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgQIbmV3QnBTdHIJALoJAgkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQpicElkeExldmVsCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0CQDMCAIJALoJAggFBm1lcmdlZAJfMwIBXwUDbmlsAgE6BAZicFNhdmUJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwEC3N0YXRzUmVzdWx0CQEFYXNJbnQBCQD8BwQFD3N0YWtpbmdDb250cmFjdAIPdXBkYXRlRHVja1N0YXRzCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIJAGsDBQp4cFNlbGxUb0VzCAUGbWVyZ2VkAl81CQBoAgUFTVVMVDgACgUDbmlsBQNuaWwJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCBQVlc0tleQkAugkCCAUGbWVyZ2VkAl80AgFfCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcggFBm1lcmdlZAJfMgULdXNkdEFzc2V0SWQFA25pbAkAlQoDBQZicFNhdmUFDHByb2xvZ1Jlc3VsdAULc3RhdHNSZXN1bHQBaQEPdXBkYXRlRXNTdG9yYWdlAQpuZXdTdG9yYWdlAwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlFc1dhcmVob3VzZQAFCm5ld1N0b3JhZ2UFA25pbAUKbmV3U3RvcmFnZQFpARR1cGRhdGVEZWxpdmVyeUxvY2tlZAEJbmV3QW1vdW50AwkBAiE9AggFAWkGY2FsbGVyBQ9zdGFraW5nQ29udHJhY3QJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFkZWxpdmVyeUxvY2tlZEtleQUJbmV3QW1vdW50BQNuaWwFCW5ld0Ftb3VudAFpARJzZW5kRGVsaXZlcnlSZXdhcmQBBGFkZHIDCQECIT0CCAUBaQZjYWxsZXIFD3N0YWtpbmdDb250cmFjdAkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAlmdW5kVG90YWwJAQt2YWx1ZU9yRWxzZQIJAJ8IAQUPZGVsaXZlcnlGdW5kS2V5AAAEC2xvY2tlZFRvdGFsCQELdmFsdWVPckVsc2UCCQCfCAEFEWRlbGl2ZXJ5TG9ja2VkS2V5AAAEC2FjcmVzQW1vdW50CQBoAgUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBRVVU0RUMkFDUkVTX01VTFRJUExJRVIEC2FjcmVzUmVzdWx0CQD8BwQFDWFjcmVzQ29udHJhY3QCCXNlbmRBY3JlcwkAzAgCBQRhZGRyCQDMCAIFC2FjcmVzQW1vdW50BQNuaWwFA25pbAkAlAoCCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ9kZWxpdmVyeUZ1bmRLZXkJAGUCBQlmdW5kVG90YWwFFU1JTl9VU0RUX0ZFRV9ERUxJVkVSWQkAzAgCCQEMSW50ZWdlckVudHJ5AgURZGVsaXZlcnlMb2NrZWRLZXkJAGUCBQtsb2NrZWRUb3RhbAUVTUlOX1VTRFRfRkVFX0RFTElWRVJZBQNuaWwFC2FjcmVzUmVzdWx0AGaSC64=", "height": 2790248, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CFCvr7Be2F22wqM8hoaisFpj9fxdubE8Kyu98mxqVrAB Next: 7ULUxtdwr4y9e2TFrzHWyK3ibTrU538Y1pBkwpGNRwpy Diff:
Old | New | Differences | |
---|---|---|---|
25 | 25 | ||
26 | 26 | let l = 75000 | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = 10 | |
29 | 29 | ||
30 | - | let n = [" | |
30 | + | let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
31 | 31 | ||
32 | - | let o = [" | |
32 | + | let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
33 | 33 | ||
34 | - | let p = [" | |
34 | + | 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"] | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 10000000 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | 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_"] | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 6 | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = 7 | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = 11 | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = 10 | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = 0 | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 1 | |
53 | 53 | ||
54 | - | let z = | |
54 | + | let z = 2 | |
55 | 55 | ||
56 | - | let A = | |
56 | + | let A = 3 | |
57 | 57 | ||
58 | - | let B = | |
58 | + | let B = 4 | |
59 | 59 | ||
60 | - | let C = | |
60 | + | let C = 0 | |
61 | 61 | ||
62 | - | let D = | |
62 | + | let D = 3 | |
63 | 63 | ||
64 | - | let E = | |
64 | + | let E = 0 | |
65 | 65 | ||
66 | - | let F = | |
66 | + | let F = 1 | |
67 | 67 | ||
68 | - | let G = | |
68 | + | let G = 2 | |
69 | 69 | ||
70 | - | let H = | |
70 | + | let H = 3 | |
71 | 71 | ||
72 | - | let I = | |
72 | + | let I = 0 | |
73 | 73 | ||
74 | - | let J = | |
74 | + | let J = 1 | |
75 | 75 | ||
76 | - | func K (L) = ("no_" + L) | |
76 | + | let K = 2 | |
77 | + | ||
78 | + | func L (M) = ("no_" + M) | |
77 | 79 | ||
78 | 80 | ||
79 | - | func | |
81 | + | func N (M) = ("st_" + M) | |
80 | 82 | ||
81 | 83 | ||
82 | - | func | |
84 | + | func O (P) = ("accRefBy_" + P) | |
83 | 85 | ||
84 | 86 | ||
85 | - | func | |
87 | + | func Q (R) = ("stakedDuckByOwner_" + R) | |
86 | 88 | ||
87 | 89 | ||
88 | - | func | |
90 | + | func S (T) = ("backPack_" + T) | |
89 | 91 | ||
90 | 92 | ||
91 | - | func | |
93 | + | func U (T) = ("duckLocation_" + T) | |
92 | 94 | ||
93 | 95 | ||
94 | - | func | |
96 | + | func V (W) = ("landOrder_" + W) | |
95 | 97 | ||
96 | 98 | ||
97 | - | func | |
99 | + | func X () = "emergencyWarehouseProducts" | |
98 | 100 | ||
99 | 101 | ||
100 | - | let | |
102 | + | let Y = "deliveryFund" | |
101 | 103 | ||
102 | - | let | |
104 | + | let Z = "deliveryLocked" | |
103 | 105 | ||
104 | - | func | |
106 | + | func aa (ab) = (parseIntValue(ab[t]) * r) | |
105 | 107 | ||
106 | 108 | ||
107 | - | let | |
109 | + | let ac = true | |
108 | 110 | ||
109 | - | let | |
111 | + | let ad = take(drop(this.bytes, 1), 1) | |
110 | 112 | ||
111 | - | let | |
112 | - | let | |
113 | - | if ((base58'2W' == | |
113 | + | let ae = { | |
114 | + | let af = ad | |
115 | + | if ((base58'2W' == af)) | |
114 | 116 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
115 | - | else if ((base58'2T' == | |
117 | + | else if ((base58'2T' == af)) | |
116 | 118 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
117 | 119 | else throw("Unknown chain") | |
118 | 120 | } | |
119 | 121 | ||
120 | - | let | |
121 | - | let | |
122 | - | if ((base58'2W' == | |
122 | + | let ag = { | |
123 | + | let af = ad | |
124 | + | if ((base58'2W' == af)) | |
123 | 125 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
124 | - | else if ((base58'2T' == | |
126 | + | else if ((base58'2T' == af)) | |
125 | 127 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
126 | 128 | else throw("Unknown chain") | |
127 | 129 | } | |
128 | 130 | ||
129 | - | let | |
131 | + | let ah = "__" | |
130 | 132 | ||
131 | - | let | |
133 | + | let ai = 100000 | |
132 | 134 | ||
133 | - | let | |
135 | + | let aj = 1000000 | |
134 | 136 | ||
135 | - | let | |
137 | + | let ak = 100000000 | |
136 | 138 | ||
137 | - | let | |
139 | + | let al = 10000000000 | |
138 | 140 | ||
139 | - | let | |
141 | + | let am = 100000 | |
140 | 142 | ||
141 | - | let | |
143 | + | let an = [0, 1, 2, 3, 4, 5] | |
142 | 144 | ||
143 | - | func | |
145 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
144 | 146 | ||
145 | 147 | ||
146 | - | let | |
148 | + | let ar = 1 | |
147 | 149 | ||
148 | - | let | |
150 | + | let as = 6 | |
149 | 151 | ||
150 | - | let | |
152 | + | let at = 8 | |
151 | 153 | ||
152 | - | func | |
154 | + | func au () = "%s__restConfig" | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func av () = "%s__restAddr" | |
156 | 158 | ||
157 | 159 | ||
158 | - | func | |
160 | + | func aw (ax) = split_4C(ao(ax, au()), ah) | |
159 | 161 | ||
160 | 162 | ||
161 | - | func | |
163 | + | func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA))) | |
162 | 164 | ||
163 | 165 | ||
164 | - | let | |
166 | + | let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag)) | |
165 | 167 | ||
166 | - | let | |
168 | + | let az = aw(aB) | |
167 | 169 | ||
168 | - | let | |
170 | + | let aC = ay(az, ar) | |
169 | 171 | ||
170 | - | let | |
172 | + | let aD = ay(az, as) | |
171 | 173 | ||
172 | - | let | |
174 | + | let aE = ay(az, at) | |
173 | 175 | ||
174 | - | func | |
175 | - | let | |
176 | - | if ($isInstanceOf( | |
176 | + | func aF (aG) = { | |
177 | + | let af = aG | |
178 | + | if ($isInstanceOf(af, "String")) | |
177 | 179 | then { | |
178 | - | let | |
179 | - | | |
180 | + | let aH = af | |
181 | + | aH | |
180 | 182 | } | |
181 | 183 | else throw("fail to cast into String") | |
182 | 184 | } | |
183 | 185 | ||
184 | 186 | ||
185 | - | func | |
186 | - | let | |
187 | - | if ($isInstanceOf( | |
187 | + | func aI (aG) = { | |
188 | + | let af = aG | |
189 | + | if ($isInstanceOf(af, "Int")) | |
188 | 190 | then { | |
189 | - | let | |
190 | - | | |
191 | + | let aJ = af | |
192 | + | aJ | |
191 | 193 | } | |
192 | 194 | else throw("fail to cast into Int") | |
193 | 195 | } | |
194 | 196 | ||
195 | 197 | ||
196 | - | func | |
198 | + | func aK () = "contractsBlocked" | |
197 | 199 | ||
198 | 200 | ||
199 | - | func | |
200 | - | let | |
201 | - | let | |
202 | - | let | |
203 | - | (((toString(( | |
201 | + | func aL (aM,aN) = { | |
202 | + | let aO = pow(10, 0, aN, 0, 0, DOWN) | |
203 | + | let aP = toString((aM % aO)) | |
204 | + | let aQ = drop(toString(aO), (1 + size(aP))) | |
205 | + | (((toString((aM / aO)) + ".") + aQ) + aP) | |
204 | 206 | } | |
205 | 207 | ||
206 | 208 | ||
207 | - | let | |
209 | + | let aR = 10000000000 | |
208 | 210 | ||
209 | - | let | |
211 | + | let aS = 200 | |
210 | 212 | ||
211 | - | let aS = 300 | |
212 | - | ||
213 | - | let aT = 10000 | |
213 | + | let aT = 300 | |
214 | 214 | ||
215 | 215 | let aU = 10000 | |
216 | 216 | ||
217 | - | let aV = | |
217 | + | let aV = 10000 | |
218 | 218 | ||
219 | - | func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY)) | |
219 | + | let aW = 15000 | |
220 | + | ||
221 | + | func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ)) | |
220 | 222 | ||
221 | 223 | ||
222 | - | let | |
224 | + | let ba = 0 | |
223 | 225 | ||
224 | - | let | |
226 | + | let bb = 1 | |
225 | 227 | ||
226 | - | let | |
228 | + | let bc = 2 | |
227 | 229 | ||
228 | - | func | |
229 | - | let | |
230 | - | [if ((size(split( | |
231 | - | then | |
232 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split( | |
233 | - | then | |
234 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", | |
230 | + | func bd (be) = { | |
231 | + | 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:"), ":") | |
232 | + | [if ((size(split(bf[ba], "_")) == f)) | |
233 | + | then bf[ba] | |
234 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f)) | |
235 | + | then bf[bb] | |
236 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]] | |
235 | 237 | } | |
236 | 238 | ||
237 | 239 | ||
238 | - | func | |
240 | + | func bg (bh,bi,bj) = if (bj) | |
239 | 241 | then { | |
240 | - | let | |
241 | - | then ((( | |
242 | - | else -((((-( | |
243 | - | ( | |
242 | + | let bk = if ((bh >= 0)) | |
243 | + | then (((bh + bi) - 1) / bi) | |
244 | + | else -((((-(bh) + bi) - 1) / bi)) | |
245 | + | (bk * ak) | |
244 | 246 | } | |
245 | - | else | |
247 | + | else bh | |
246 | 248 | ||
247 | 249 | ||
248 | - | func | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
250 | + | func bl (bm,aZ,bh,bn) = { | |
251 | + | let bo = aX(bm, aZ) | |
252 | + | let bp = valueOrElse(getInteger(bo), 0) | |
253 | + | let bq = if ((bp > aR)) | |
252 | 254 | then 0 | |
253 | - | else if ((( | |
254 | - | then ( | |
255 | - | else | |
256 | - | let | |
257 | - | let | |
258 | - | if ((( | |
259 | - | then throw((((((((((("Actual price = " + toString( | |
260 | - | else $Tuple2(IntegerEntry( | |
255 | + | else if (((bp + bh) > aR)) | |
256 | + | then (aR - bp) | |
257 | + | else bh | |
258 | + | let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak)) | |
259 | + | let bs = (bn - (bn / 100)) | |
260 | + | if (((bs * bh) > (br * ak))) | |
261 | + | then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")")) | |
262 | + | else $Tuple2(IntegerEntry(bo, (bp + bh)), br) | |
261 | 263 | } | |
262 | 264 | ||
263 | 265 | ||
264 | - | func | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | then min([ | |
266 | + | func bt (bm,bu,bh,bv) = { | |
267 | + | let bo = aX(bm, bu) | |
268 | + | let bp = valueOrElse(getInteger(bo), 0) | |
269 | + | let bw = if ((bp > aR)) | |
270 | + | then min([bh, (bp - aR)]) | |
269 | 271 | else 0 | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | if ((( | |
276 | - | then throw((((((((((("Actual price = " + toString( | |
277 | - | else $Tuple3(IntegerEntry( | |
272 | + | let bx = min([bp, (bh - bw)]) | |
273 | + | let by = (bx + bw) | |
274 | + | let bz = min([bp, aR]) | |
275 | + | let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak)) | |
276 | + | let bB = (bv + (bv / 100)) | |
277 | + | if (((bA * ak) > (bB * by))) | |
278 | + | then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")")) | |
279 | + | else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by) | |
278 | 280 | } | |
279 | 281 | ||
280 | 282 | ||
281 | - | func | |
282 | - | let | |
283 | - | [toString(valueOrElse(parseInt( | |
284 | - | then | |
285 | - | else "0_0_0_0_0_0", if ((size(split( | |
286 | - | then | |
287 | - | else "0_0_0_0_0_0", | |
283 | + | func bC (bD) = { | |
284 | + | let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
285 | + | [toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f)) | |
286 | + | then bf[F] | |
287 | + | else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f)) | |
288 | + | then bf[G] | |
289 | + | else "0_0_0_0_0_0", bf[H]] | |
288 | 290 | } | |
289 | 291 | ||
290 | 292 | ||
291 | - | func | |
293 | + | func bE () = if (valueOrElse(getBoolean(aC, aK()), false)) | |
292 | 294 | then throw("Contracts are under maintenance") | |
293 | 295 | else unit | |
294 | 296 | ||
295 | 297 | ||
296 | - | func | |
298 | + | func bF () = aI(invoke(aC, "saveLastTx", nil, nil)) | |
297 | 299 | ||
298 | 300 | ||
299 | - | func | |
300 | - | let | |
301 | - | let | |
302 | - | then | |
301 | + | func bG (bH,bI) = { | |
302 | + | let bJ = bH._1 | |
303 | + | let bK = if ((size(bH._10) > bJ)) | |
304 | + | then bH._10[bJ] | |
303 | 305 | else "0@0" | |
304 | - | let | |
305 | - | let | |
306 | - | if ((size( | |
306 | + | let bL = bH._8 | |
307 | + | let bM = split(bK, "@") | |
308 | + | if ((size(bM) != 2)) | |
307 | 309 | then throw("Incorrect order format, should be amount@price") | |
308 | 310 | else { | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | then ( | |
313 | - | else fraction( | |
314 | - | let | |
315 | - | let | |
316 | - | then parseIntValue( | |
311 | + | let bN = parseIntValue(bM[0]) | |
312 | + | let bO = parseIntValue(bM[1]) | |
313 | + | let bP = if (bL) | |
314 | + | then (bN * bO) | |
315 | + | else fraction(bN, bO, ak) | |
316 | + | let bQ = bg(bN, w, bL) | |
317 | + | let bR = if ((size(bH._6) > bJ)) | |
318 | + | then parseIntValue(bH._6[bJ]) | |
317 | 319 | else 0 | |
318 | - | let | |
319 | - | then | |
320 | + | let bS = split(if ((size(bH._7) > bJ)) | |
321 | + | then bH._7[bJ] | |
320 | 322 | else "0@0", "@") | |
321 | - | let | |
322 | - | let | |
323 | - | if (if ((0 > | |
323 | + | let bT = parseIntValue(bS[0]) | |
324 | + | let bU = parseIntValue(bS[1]) | |
325 | + | if (if ((0 > bU)) | |
324 | 326 | then true | |
325 | - | else (0 > | |
327 | + | else (0 > bO)) | |
326 | 328 | then throw("Price can't be negative") | |
327 | 329 | else { | |
328 | - | let | |
329 | - | then ( | |
330 | - | else fraction( | |
331 | - | if (( | |
332 | - | then if (( | |
333 | - | then $Tuple10(( | |
334 | - | else $Tuple10(( | |
335 | - | else if (( | |
336 | - | then if ((0 > | |
337 | - | then $Tuple10(( | |
338 | - | else $Tuple10(( | |
339 | - | else if ((0 > | |
330 | + | let bV = if (bL) | |
331 | + | then (bT * bU) | |
332 | + | else fraction(bT, bU, ak) | |
333 | + | if ((bN == 0)) | |
334 | + | then if ((bT > 0)) | |
335 | + | 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) | |
336 | + | 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) | |
337 | + | else if ((bN > 0)) | |
338 | + | then if ((0 > bT)) | |
339 | + | 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) | |
340 | + | 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) | |
341 | + | else if ((0 > bT)) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | if ((0 > ( | |
343 | - | then throw((((("Attempt to take " + toString( | |
344 | - | else $Tuple10(( | |
343 | + | let bW = (bT - bN) | |
344 | + | if ((0 > (bR - bW))) | |
345 | + | then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available")) | |
346 | + | 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) | |
345 | 347 | } | |
346 | - | else if ((0 > ( | |
347 | - | then throw((((("Attempt to take " + toString(-( | |
348 | - | else $Tuple10(( | |
348 | + | else if ((0 > (bR + bN))) | |
349 | + | then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available")) | |
350 | + | 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) | |
349 | 351 | } | |
350 | 352 | } | |
351 | 353 | } | |
352 | 354 | ||
353 | 355 | ||
354 | - | func | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
356 | + | func bX (bY,bZ,ca) = { | |
357 | + | let cb = split(bY[y], "_") | |
358 | + | let cc = split(bY[z], "_") | |
359 | + | let cd = if ((bY[A] == "")) | |
358 | 360 | then nil | |
359 | - | else split_4C( | |
360 | - | let | |
361 | - | let | |
362 | - | let | |
361 | + | else split_4C(bY[A], "_") | |
362 | + | let ce = split(bZ[ba], "_") | |
363 | + | let cf = split(bZ[bb], "_") | |
364 | + | let cg = if ((bZ[bc] == "")) | |
363 | 365 | then nil | |
364 | - | else split_4C( | |
365 | - | if ((size( | |
366 | + | else split_4C(bZ[bc], "_") | |
367 | + | if ((size(ca) != 3)) | |
366 | 368 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
367 | 369 | else { | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
370 | + | let ch = split(ca[0], "_") | |
371 | + | let ci = split(ca[1], "_") | |
372 | + | let cj = if ((ca[2] == "")) | |
371 | 373 | then nil | |
372 | - | else split_4C( | |
373 | - | if ((size( | |
374 | + | else split_4C(ca[2], "_") | |
375 | + | if ((size(ch) != f)) | |
374 | 376 | then throw("All 6 resources should be passed") | |
375 | - | else if ((size( | |
377 | + | else if ((size(ci) != f)) | |
376 | 378 | then throw("All 6 materials should be passed") | |
377 | 379 | else { | |
378 | - | let | |
379 | - | let | |
380 | - | let | |
381 | - | let | |
382 | - | func | |
383 | - | then | |
384 | - | else | |
380 | + | let ck = { | |
381 | + | let cl = n | |
382 | + | let cm = size(cl) | |
383 | + | let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch) | |
384 | + | func co (cp,cq) = if ((cq >= cm)) | |
385 | + | then cp | |
386 | + | else bG(cp, cl[cq]) | |
385 | 387 | ||
386 | - | func | |
387 | - | then | |
388 | + | func cr (cp,cq) = if ((cq >= cm)) | |
389 | + | then cp | |
388 | 390 | else throw("List size exceeds 6") | |
389 | 391 | ||
390 | - | | |
392 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
391 | 393 | } | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | func | |
397 | - | then | |
398 | - | else | |
394 | + | let by = { | |
395 | + | let cl = o | |
396 | + | let cm = size(cl) | |
397 | + | let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci) | |
398 | + | func cs (cp,cq) = if ((cq >= cm)) | |
399 | + | then cp | |
400 | + | else bG(cp, cl[cq]) | |
399 | 401 | ||
400 | - | func | |
401 | - | then | |
402 | + | func ct (cp,cq) = if ((cq >= cm)) | |
403 | + | then cp | |
402 | 404 | else throw("List size exceeds 6") | |
403 | 405 | ||
404 | - | cs( | |
406 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
405 | 407 | } | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | func | |
411 | - | then | |
412 | - | else | |
408 | + | let bf = { | |
409 | + | let cl = p | |
410 | + | let cm = size(cl) | |
411 | + | let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj) | |
412 | + | func cu (cp,cq) = if ((cq >= cm)) | |
413 | + | then cp | |
414 | + | else bG(cp, cl[cq]) | |
413 | 415 | ||
414 | - | func | |
415 | - | then | |
416 | + | func cv (cp,cq) = if ((cq >= cm)) | |
417 | + | then cp | |
416 | 418 | else throw("List size exceeds 50") | |
417 | 419 | ||
418 | - | cu( | |
420 | + | 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) | |
419 | 421 | } | |
420 | - | $Tuple7( | |
422 | + | $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9) | |
421 | 423 | } | |
422 | 424 | } | |
423 | 425 | } | |
424 | 426 | ||
425 | 427 | ||
426 | - | func | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | if ((size( | |
428 | + | func cw (bH,cx) = { | |
429 | + | let bJ = bH._7 | |
430 | + | let bL = bH._12 | |
431 | + | let cy = split(cx, "@") | |
432 | + | if ((size(cy) != 2)) | |
431 | 433 | then throw("Incorrect order format, should be amount@price") | |
432 | 434 | else { | |
433 | - | let | |
434 | - | let | |
435 | - | if ((0 > | |
435 | + | let cz = parseIntValue(cy[0]) | |
436 | + | let cA = parseIntValue(cy[1]) | |
437 | + | if ((0 > cA)) | |
436 | 438 | then throw("Price can't be negative") | |
437 | 439 | else { | |
438 | - | let | |
439 | - | then ( | |
440 | - | else fraction( | |
441 | - | let | |
442 | - | then parseIntValue( | |
440 | + | let cB = if (bL) | |
441 | + | then (cz * cA) | |
442 | + | else fraction(cz, cA, ak) | |
443 | + | let cC = if ((size(bH._8) > bJ)) | |
444 | + | then parseIntValue(bH._8[bJ]) | |
443 | 445 | else 0 | |
444 | - | let | |
445 | - | then parseIntValue( | |
446 | + | let bR = if ((size(bH._9) > bJ)) | |
447 | + | then parseIntValue(bH._9[bJ]) | |
446 | 448 | else 0 | |
447 | - | let | |
448 | - | then | |
449 | + | let cD = if ((size(bH._10) > bJ)) | |
450 | + | then bH._10[bJ] | |
449 | 451 | else "0@0" | |
450 | - | let | |
451 | - | let | |
452 | - | let | |
453 | - | if (if (( | |
454 | - | then ( | |
452 | + | let cE = split(cD, "@") | |
453 | + | let cF = parseIntValue(cE[0]) | |
454 | + | let cG = parseIntValue(cE[1]) | |
455 | + | if (if ((cz != 0)) | |
456 | + | then (cA != cG) | |
455 | 457 | else false) | |
456 | - | then throw(((((("Prices of " + | |
458 | + | then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA))) | |
457 | 459 | else { | |
458 | - | let | |
459 | - | then ( | |
460 | - | else fraction( | |
461 | - | let | |
462 | - | if (( | |
463 | - | then $Tuple13(( | |
464 | - | else if (( | |
465 | - | then if ((0 > | |
466 | - | then if (( | |
467 | - | then throw(((((("Attempt to buy " + toString( | |
468 | - | else $Tuple13(( | |
469 | - | then ( | |
470 | - | else | |
471 | - | else throw((("Attempt to buy " + | |
472 | - | else if (( | |
473 | - | then if ((-( | |
474 | - | then throw(((((("Attempt to sell " + toString(-( | |
475 | - | else if ((-( | |
476 | - | then throw(((((("Attempt to sell " + toString(-( | |
477 | - | else $Tuple13(( | |
478 | - | then ( | |
479 | - | else | |
480 | - | else throw((("Attempt to sell " + | |
460 | + | let cH = if (bL) | |
461 | + | then (cF * cG) | |
462 | + | else fraction(cF, cG, ak) | |
463 | + | let cI = bg(cz, w, bL) | |
464 | + | if ((cz == 0)) | |
465 | + | 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) | |
466 | + | else if ((cz > 0)) | |
467 | + | then if ((0 > cF)) | |
468 | + | then if ((cz > -(cF))) | |
469 | + | then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF)))) | |
470 | + | 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) | |
471 | + | then (cz * ak) | |
472 | + | else cz))) | |
473 | + | else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it")) | |
474 | + | else if ((cF > 0)) | |
475 | + | then if ((-(cz) > cF)) | |
476 | + | then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF))) | |
477 | + | else if ((-(cz) > cC)) | |
478 | + | then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ])) | |
479 | + | 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) | |
480 | + | then (cz * ak) | |
481 | + | else cz))) | |
482 | + | else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it")) | |
481 | 483 | } | |
482 | 484 | } | |
483 | 485 | } | |
484 | 486 | } | |
485 | 487 | ||
486 | 488 | ||
487 | - | func | |
488 | - | func | |
489 | - | then throw(((((("You have " + | |
490 | - | else if ((0 > | |
491 | - | then throw(((("You tried to sell negative amount of " + | |
492 | - | else if (( | |
489 | + | func cJ (cK,cL,cM,cN) = { | |
490 | + | func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ]))) | |
491 | + | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ]))) | |
492 | + | else if ((0 > cM[bJ])) | |
493 | + | then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ]))) | |
494 | + | else if ((cM[bJ] > 0)) | |
493 | 495 | then { | |
494 | - | let | |
495 | - | $Tuple4(( | |
496 | + | let cP = bl(cL, bJ, cM[bJ], cN[bJ]) | |
497 | + | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
496 | 498 | } | |
497 | - | else $Tuple4( | |
499 | + | else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4) | |
498 | 500 | ||
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | func | |
503 | - | then | |
504 | - | else | |
501 | + | let cl = an | |
502 | + | let cm = size(cl) | |
503 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
504 | + | func co (cp,cq) = if ((cq >= cm)) | |
505 | + | then cp | |
506 | + | else cO(cp, cl[cq]) | |
505 | 507 | ||
506 | - | func | |
507 | - | then | |
508 | + | func cr (cp,cq) = if ((cq >= cm)) | |
509 | + | then cp | |
508 | 510 | else throw("List size exceeds 6") | |
509 | 511 | ||
510 | - | | |
512 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
511 | 513 | } | |
512 | 514 | ||
513 | 515 | ||
514 | - | func | |
515 | - | func | |
516 | - | then throw(((("You tried to buy negative amount of " + | |
517 | - | else if (( | |
516 | + | func cQ (cR,cL,cM,cS) = { | |
517 | + | func cT (bH,bJ) = if ((0 > cM[bJ])) | |
518 | + | then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ]))) | |
519 | + | else if ((cM[bJ] > 0)) | |
518 | 520 | then { | |
519 | - | let | |
520 | - | $Tuple4(( | |
521 | + | let cP = bt(cL, bJ, cM[bJ], cS[bJ]) | |
522 | + | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
521 | 523 | } | |
522 | - | else $Tuple4( | |
524 | + | else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
523 | 525 | ||
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | func | |
528 | - | then | |
529 | - | else | |
526 | + | let cl = an | |
527 | + | let cm = size(cl) | |
528 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
529 | + | func co (cp,cq) = if ((cq >= cm)) | |
530 | + | then cp | |
531 | + | else cT(cp, cl[cq]) | |
530 | 532 | ||
531 | - | func | |
532 | - | then | |
533 | + | func cr (cp,cq) = if ((cq >= cm)) | |
534 | + | then cp | |
533 | 535 | else throw("List size exceeds 6") | |
534 | 536 | ||
535 | - | | |
537 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
536 | 538 | } | |
537 | 539 | ||
538 | 540 | ||
539 | - | func | |
540 | - | func | |
541 | - | let | |
542 | - | if (( | |
543 | - | then throw(((((("You have " + | |
544 | - | else if ((0 > | |
545 | - | then throw(((("You tried to exchange negative amount of " + | |
546 | - | else if (( | |
547 | - | then $Tuple4(( | |
548 | - | else $Tuple4(( | |
541 | + | func cU (cK,cR,cM) = { | |
542 | + | func cV (bH,bJ) = { | |
543 | + | let cW = cM[bJ] | |
544 | + | if ((cW > parseIntValue(cK[bJ]))) | |
545 | + | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW))) | |
546 | + | else if ((0 > cW)) | |
547 | + | then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW))) | |
548 | + | else if ((cW > 0)) | |
549 | + | 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)) | |
550 | + | else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
549 | 551 | } | |
550 | 552 | ||
551 | - | let | |
552 | - | let | |
553 | - | let | |
554 | - | func | |
555 | - | then | |
556 | - | else | |
553 | + | let cl = an | |
554 | + | let cm = size(cl) | |
555 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
556 | + | func co (cp,cq) = if ((cq >= cm)) | |
557 | + | then cp | |
558 | + | else cV(cp, cl[cq]) | |
557 | 559 | ||
558 | - | func | |
559 | - | then | |
560 | + | func cr (cp,cq) = if ((cq >= cm)) | |
561 | + | then cp | |
560 | 562 | else throw("List size exceeds 6") | |
561 | 563 | ||
562 | - | | |
564 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
563 | 565 | } | |
564 | 566 | ||
565 | 567 | ||
566 | - | func | |
568 | + | func cX (cY,cZ,da) = if ((cY > 0)) | |
567 | 569 | then { | |
568 | - | let | |
569 | - | if (( | |
570 | - | then throw(("This trade does not cover delivery cost of " + | |
570 | + | let db = fraction(cY, aU, aj) | |
571 | + | if ((da >= (cY - (3 * db)))) | |
572 | + | then throw(("This trade does not cover delivery cost of " + aL(da, 6))) | |
571 | 573 | else { | |
572 | - | let | |
573 | - | let | |
574 | - | let | |
575 | - | (((if (isDefined( | |
576 | - | then [ScriptTransfer(addressFromStringValue(value( | |
577 | - | else nil) :+ ScriptTransfer( | |
574 | + | let dc = O(cZ) | |
575 | + | let dd = getString(aC, dc) | |
576 | + | let de = addressFromStringValue(cZ) | |
577 | + | (((if (isDefined(dd)) | |
578 | + | then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)] | |
579 | + | else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae)) | |
578 | 580 | } | |
579 | 581 | } | |
580 | 582 | else nil | |
581 | 583 | ||
582 | 584 | ||
583 | - | func | |
584 | - | then if ((size( | |
585 | + | func df (dg,dh,di,dj) = if ((dg > 0)) | |
586 | + | then if ((size(dh) != 1)) | |
585 | 587 | then throw("exactly 1 payment must be attached") | |
586 | 588 | else { | |
587 | - | let | |
588 | - | let | |
589 | - | if (if (!(isDefined( | |
589 | + | let dk = dh[0] | |
590 | + | let dl = dk.amount | |
591 | + | if (if (!(isDefined(dk.assetId))) | |
590 | 592 | then true | |
591 | - | else (value( | |
593 | + | else (value(dk.assetId) != ae)) | |
592 | 594 | then throw("USDT payments only!") | |
593 | 595 | else { | |
594 | - | let | |
595 | - | if (( | |
596 | - | then throw((((((("Insufficient payment! Attached=" + | |
597 | - | else if (( | |
598 | - | then throw(("Min shop trade is " + | |
596 | + | let dm = (dg + dj) | |
597 | + | if ((dl != dm)) | |
598 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)")) | |
599 | + | else if ((am > dg)) | |
600 | + | then throw(("Min shop trade is " + aL(am, 6))) | |
599 | 601 | else { | |
600 | - | let | |
601 | - | let | |
602 | - | let | |
603 | - | (((if (isDefined( | |
604 | - | then [ScriptTransfer(addressFromStringValue(value( | |
605 | - | else nil) :+ ScriptTransfer(addressFromStringValue( | |
602 | + | let dn = fraction(dg, aU, aj) | |
603 | + | let dc = O(di) | |
604 | + | let dd = getString(aC, dc) | |
605 | + | (((if (isDefined(dd)) | |
606 | + | then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)] | |
607 | + | else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae)) | |
606 | 608 | } | |
607 | 609 | } | |
608 | 610 | } | |
609 | - | else if ((size( | |
611 | + | else if ((size(dh) != 0)) | |
610 | 612 | then throw("No payments needed") | |
611 | 613 | else nil | |
612 | 614 | ||
613 | 615 | ||
614 | - | func | |
615 | - | let | |
616 | - | if (!(isDefined(getInteger( | |
617 | - | then throw((("NFT " + | |
616 | + | func do (dp,cZ,dq,dr,ds,dt) = { | |
617 | + | let du = value(assetInfo(fromBase58String(dp))) | |
618 | + | if (!(isDefined(getInteger(aC, N(dp))))) | |
619 | + | then throw((("NFT " + du.name) + " is not staked")) | |
618 | 620 | else { | |
619 | - | let | |
620 | - | if (( | |
621 | + | let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned")) | |
622 | + | if ((di == cZ)) | |
621 | 623 | then throw("You cannot trade with yourself") | |
622 | 624 | else { | |
623 | - | let | |
624 | - | if ((size( | |
625 | + | let dv = split_4C(dq, ":") | |
626 | + | if ((size(dv) != 3)) | |
625 | 627 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
626 | 628 | else { | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
629 | + | let dw = split(dv[0], "_") | |
630 | + | let dx = split(dv[1], "_") | |
631 | + | let dy = if ((dv[2] == "")) | |
630 | 632 | then nil | |
631 | - | else split_4C( | |
632 | - | if ((size( | |
633 | + | else split_4C(dv[2], "_") | |
634 | + | if ((size(dw) != f)) | |
633 | 635 | then throw("All 6 resources should be passed") | |
634 | - | else if ((size( | |
636 | + | else if ((size(dx) != f)) | |
635 | 637 | then throw("All 6 materials should be passed") | |
636 | 638 | else { | |
637 | - | let | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
639 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil)) | |
640 | + | let bY = split_4C(dz, ":") | |
641 | + | let cb = split(bY[y], "_") | |
642 | + | let cc = split(bY[z], "_") | |
643 | + | let cd = if ((bY[A] == "")) | |
642 | 644 | then nil | |
643 | - | else split_4C( | |
644 | - | let | |
645 | - | let | |
646 | - | let | |
647 | - | let | |
648 | - | let | |
649 | - | let | |
645 | + | else split_4C(bY[A], "_") | |
646 | + | let dA = parseIntValue(split(bY[B], "_")[C]) | |
647 | + | let be = V(dp) | |
648 | + | let dB = bd(be) | |
649 | + | let dC = split(dB[ba], "_") | |
650 | + | let dD = split(dB[bb], "_") | |
651 | + | let dE = if ((dB[bc] == "")) | |
650 | 652 | then nil | |
651 | - | else split_4C( | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | func | |
657 | - | then | |
658 | - | else | |
653 | + | else split_4C(dB[bc], "_") | |
654 | + | let ck = { | |
655 | + | let cl = dw | |
656 | + | let cm = size(cl) | |
657 | + | let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0) | |
658 | + | func co (cp,cq) = if ((cq >= cm)) | |
659 | + | then cp | |
660 | + | else cw(cp, cl[cq]) | |
659 | 661 | ||
660 | - | func | |
661 | - | then | |
662 | + | func cr (cp,cq) = if ((cq >= cm)) | |
663 | + | then cp | |
662 | 664 | else throw("List size exceeds 6") | |
663 | 665 | ||
664 | - | | |
666 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
665 | 667 | } | |
666 | - | let | |
667 | - | let | |
668 | - | let | |
669 | - | let | |
670 | - | func | |
671 | - | then | |
672 | - | else | |
668 | + | let by = { | |
669 | + | let cl = dx | |
670 | + | let cm = size(cl) | |
671 | + | let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13) | |
672 | + | func cs (cp,cq) = if ((cq >= cm)) | |
673 | + | then cp | |
674 | + | else cw(cp, cl[cq]) | |
673 | 675 | ||
674 | - | func | |
675 | - | then | |
676 | + | func ct (cp,cq) = if ((cq >= cm)) | |
677 | + | then cp | |
676 | 678 | else throw("List size exceeds 6") | |
677 | 679 | ||
678 | - | cs( | |
680 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
679 | 681 | } | |
680 | - | let | |
682 | + | let bf = if ((size(dy) != 0)) | |
681 | 683 | then { | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | func | |
686 | - | then | |
687 | - | else | |
684 | + | let cl = dy | |
685 | + | let cm = size(cl) | |
686 | + | let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
687 | + | func cu (cp,cq) = if ((cq >= cm)) | |
688 | + | then cp | |
689 | + | else cw(cp, cl[cq]) | |
688 | 690 | ||
689 | - | func | |
690 | - | then | |
691 | + | func cv (cp,cq) = if ((cq >= cm)) | |
692 | + | then cp | |
691 | 693 | else throw("List size exceeds 50") | |
692 | 694 | ||
693 | - | cu( | |
695 | + | 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) | |
694 | 696 | } | |
695 | - | else $Tuple13( | |
696 | - | let | |
697 | - | let | |
697 | + | else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
698 | + | let dF = bf._4 | |
699 | + | let dG = if ((0 > (dA - dF))) | |
698 | 700 | then 0 | |
699 | - | else ( | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | $Tuple10(StringEntry( | |
701 | + | else (dA - dF) | |
702 | + | let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":") | |
703 | + | let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":") | |
704 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil)) | |
705 | + | let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil)) | |
706 | + | $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK) | |
705 | 707 | } | |
706 | 708 | } | |
707 | 709 | } | |
709 | 711 | } | |
710 | 712 | ||
711 | 713 | ||
712 | - | func | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | let | |
720 | - | $Tuple3(( | |
714 | + | func dL (bh) = { | |
715 | + | let dM = (bh / 30) | |
716 | + | let dN = [dM, dM, dM, dM, dM, dM] | |
717 | + | let aH = toString(dM) | |
718 | + | let cK = [aH, aH, aH, aH, aH, aH] | |
719 | + | let cN = [0, 0, 0, 0, 0, 0] | |
720 | + | func dO (bH,dP) = { | |
721 | + | let dQ = cJ(cK, dP, dN, cN) | |
722 | + | $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4)) | |
721 | 723 | } | |
722 | 724 | ||
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | let | |
727 | - | func | |
728 | - | then | |
729 | - | else | |
725 | + | let dR = { | |
726 | + | let cl = q | |
727 | + | let cm = size(cl) | |
728 | + | let cn = $Tuple3(nil, 0, 0) | |
729 | + | func co (cp,cq) = if ((cq >= cm)) | |
730 | + | then cp | |
731 | + | else dO(cp, cl[cq]) | |
730 | 732 | ||
731 | - | func | |
732 | - | then | |
733 | + | func cr (cp,cq) = if ((cq >= cm)) | |
734 | + | then cp | |
733 | 735 | else throw("List size exceeds 5") | |
734 | 736 | ||
735 | - | | |
737 | + | cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5) | |
736 | 738 | } | |
737 | - | let | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | $Tuple5( | |
739 | + | let dS = dR._1 | |
740 | + | let br = dR._2 | |
741 | + | let dT = dR._3 | |
742 | + | let dU = fraction(br, aV, aj) | |
743 | + | let dV = (br / 100) | |
744 | + | let dW = ((br - dV) - dU) | |
745 | + | $Tuple5(dS, dW, dU, dV, dT) | |
744 | 746 | } | |
745 | 747 | ||
746 | 748 | ||
747 | - | @Callable( | |
748 | - | func recalcLockedVolumeREADONLY ( | |
749 | - | let | |
750 | - | let | |
751 | - | $Tuple2(nil, ( | |
749 | + | @Callable(dX) | |
750 | + | func recalcLockedVolumeREADONLY (W,dz) = { | |
751 | + | let bZ = bd(V(W)) | |
752 | + | let dY = bX(dz, bZ, bZ) | |
753 | + | $Tuple2(nil, (dY._4 + dY._5)) | |
752 | 754 | } | |
753 | 755 | ||
754 | 756 | ||
755 | 757 | ||
756 | - | @Callable( | |
757 | - | func constructorV1 ( | |
758 | + | @Callable(dX) | |
759 | + | func constructorV1 (dZ) = if ((dX.caller != this)) | |
758 | 760 | then throw("Permission denied") | |
759 | - | else [StringEntry( | |
761 | + | else [StringEntry(av(), dZ)] | |
760 | 762 | ||
761 | 763 | ||
762 | 764 | ||
763 | - | @Callable( | |
764 | - | func sellResources ( | |
765 | - | let | |
766 | - | let | |
767 | - | if ((size( | |
765 | + | @Callable(dX) | |
766 | + | func sellResources (cM,cN) = { | |
767 | + | 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)) | |
768 | 770 | then throw("sellResources doesn't require any payments") | |
769 | 771 | else { | |
770 | - | let | |
771 | - | if (( | |
772 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
773 | 775 | else { | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | let | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | let | |
782 | - | let | |
783 | - | let | |
784 | - | let | |
785 | - | $Tuple2((( | |
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)) | |
786 | 788 | } | |
787 | 789 | } | |
788 | 790 | } | |
789 | 791 | ||
790 | 792 | ||
791 | 793 | ||
792 | - | @Callable( | |
793 | - | func sellResourcesWorld ( | |
794 | + | @Callable(dX) | |
795 | + | func sellResourcesWorld (P,bh) = if ((dX.caller != aE)) | |
794 | 796 | then throw("Permission denied") | |
795 | 797 | else { | |
796 | - | let | |
797 | - | let | |
798 | - | let | |
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | if ((0 >= | |
803 | - | then throw(("This trade does not cover delivery cost of " + | |
798 | + | let ei = dL(bh) | |
799 | + | let dS = ei._1 | |
800 | + | let dW = ei._2 | |
801 | + | let dU = ei._3 | |
802 | + | let dV = ei._4 | |
803 | + | let dT = ei._5 | |
804 | + | if ((0 >= dW)) | |
805 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
804 | 806 | else { | |
805 | - | let | |
806 | - | $Tuple2(((( | |
807 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil)) | |
808 | + | $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh)) | |
807 | 809 | } | |
808 | 810 | } | |
809 | 811 | ||
810 | 812 | ||
811 | 813 | ||
812 | - | @Callable( | |
813 | - | func sellResourcesWorldREADONLY ( | |
814 | - | let | |
815 | - | $Tuple2(nil, | |
814 | + | @Callable(dX) | |
815 | + | func sellResourcesWorldREADONLY (bh) = { | |
816 | + | let dW = dL(bh)._2 | |
817 | + | $Tuple2(nil, dW) | |
816 | 818 | } | |
817 | 819 | ||
818 | 820 | ||
819 | 821 | ||
820 | - | @Callable( | |
821 | - | func sellResourcesDuckDelivery ( | |
822 | + | @Callable(dX) | |
823 | + | func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac)) | |
822 | 824 | then throw("Delivery feature is turned off!") | |
823 | 825 | else { | |
824 | - | let | |
825 | - | let | |
826 | - | if ((size( | |
826 | + | 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)) | |
827 | 829 | then throw("sellResources doesn't require any payments") | |
828 | 830 | else { | |
829 | - | let | |
830 | - | let | |
831 | - | let | |
832 | - | let | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | let | |
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)) | |
841 | 843 | then k | |
842 | - | else | |
843 | - | let | |
844 | - | if (( | |
845 | - | then throw(("This trade does not cover delivery cost of " + | |
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))) | |
846 | 848 | else { | |
847 | - | let | |
848 | - | $Tuple2(((( | |
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)) | |
849 | 851 | } | |
850 | 852 | } | |
851 | 853 | } | |
852 | 854 | ||
853 | 855 | ||
854 | 856 | ||
855 | - | @Callable( | |
856 | - | func sellResourcesLandDelivery ( | |
857 | + | @Callable(dX) | |
858 | + | func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac)) | |
857 | 859 | then throw("Delivery feature is turned off!") | |
858 | 860 | else { | |
859 | - | let | |
860 | - | if ((size( | |
861 | + | let ea = bF() | |
862 | + | if ((size(dX.payments) != 0)) | |
861 | 863 | then throw("sellResources doesn't require any payments") | |
862 | 864 | else { | |
863 | - | let | |
864 | - | let | |
865 | - | let | |
866 | - | if (!(isDefined(getInteger( | |
867 | - | then throw((("NFT " + | |
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")) | |
868 | 870 | else { | |
869 | - | let | |
870 | - | if (( | |
871 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
872 | + | if ((ep != P)) | |
871 | 873 | then throw((e + " is not yours")) | |
872 | 874 | else { | |
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
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)) | |
886 | 888 | then k | |
887 | - | else | |
888 | - | let | |
889 | - | if (( | |
890 | - | then throw(("This trade does not cover delivery cost of " + | |
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))) | |
891 | 893 | else { | |
892 | - | let | |
893 | - | $Tuple2(((( | |
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)) | |
894 | 896 | } | |
895 | 897 | } | |
896 | 898 | } | |
899 | 901 | ||
900 | 902 | ||
901 | 903 | ||
902 | - | @Callable( | |
903 | - | func buyMaterials ( | |
904 | - | let | |
905 | - | let | |
906 | - | if ((size( | |
904 | + | @Callable(dX) | |
905 | + | func buyMaterials (cM,cS) = { | |
906 | + | 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)) | |
907 | 909 | then throw("exactly 1 payment must be attached") | |
908 | 910 | else { | |
909 | - | let | |
910 | - | let | |
911 | - | if (if (!(isDefined( | |
911 | + | let dk = dX.payments[0] | |
912 | + | let dl = dk.amount | |
913 | + | if (if (!(isDefined(dk.assetId))) | |
912 | 914 | then true | |
913 | - | else (value( | |
915 | + | else (value(dk.assetId) != ae)) | |
914 | 916 | then throw("USDT payments only!") | |
915 | 917 | else { | |
916 | - | let | |
917 | - | if (( | |
918 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
919 | 921 | else { | |
920 | - | let | |
921 | - | let | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | if (( | |
928 | - | then throw(((("Insufficient payment! Attached=" + | |
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))) | |
929 | 931 | else { | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | then [ScriptTransfer( | |
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)] | |
934 | 936 | else nil | |
935 | - | let | |
936 | - | let | |
937 | - | $Tuple2((( | |
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)) | |
938 | 940 | } | |
939 | 941 | } | |
940 | 942 | } | |
943 | 945 | ||
944 | 946 | ||
945 | 947 | ||
946 | - | @Callable( | |
947 | - | func buyMaterialsDuckDelivery ( | |
948 | + | @Callable(dX) | |
949 | + | func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac)) | |
948 | 950 | then throw("Delivery feature is turned off!") | |
949 | 951 | else { | |
950 | - | let | |
951 | - | let | |
952 | - | if ((size( | |
952 | + | 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)) | |
953 | 955 | then throw("exactly 1 payment must be attached") | |
954 | 956 | else { | |
955 | - | let | |
956 | - | let | |
957 | - | if (if (!(isDefined( | |
957 | + | let dk = dX.payments[0] | |
958 | + | let dl = dk.amount | |
959 | + | if (if (!(isDefined(dk.assetId))) | |
958 | 960 | then true | |
959 | - | else (value( | |
961 | + | else (value(dk.assetId) != ae)) | |
960 | 962 | then throw("USDT payments only!") | |
961 | 963 | else { | |
962 | - | let | |
963 | - | let | |
964 | - | let | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | let | |
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)) | |
974 | 976 | then k | |
975 | - | else | |
976 | - | let | |
977 | - | if (( | |
978 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
979 | 981 | else { | |
980 | - | let | |
981 | - | then [ScriptTransfer( | |
982 | + | let ax = if (((dl - dm) > 0)) | |
983 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
982 | 984 | else nil | |
983 | - | let | |
984 | - | let | |
985 | - | $Tuple2(((( | |
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)) | |
986 | 988 | } | |
987 | 989 | } | |
988 | 990 | } | |
990 | 992 | ||
991 | 993 | ||
992 | 994 | ||
993 | - | @Callable( | |
994 | - | func buyMaterialsLandDelivery ( | |
995 | + | @Callable(dX) | |
996 | + | func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac)) | |
995 | 997 | then throw("Delivery feature is turned off!") | |
996 | 998 | else { | |
997 | - | let | |
998 | - | if ((size( | |
999 | + | let ea = bF() | |
1000 | + | if ((size(dX.payments) != 1)) | |
999 | 1001 | then throw("exactly 1 payment must be attached") | |
1000 | 1002 | else { | |
1001 | - | let | |
1002 | - | let | |
1003 | - | if (if (!(isDefined( | |
1003 | + | let dk = dX.payments[0] | |
1004 | + | let dl = dk.amount | |
1005 | + | if (if (!(isDefined(dk.assetId))) | |
1004 | 1006 | then true | |
1005 | - | else (value( | |
1007 | + | else (value(dk.assetId) != ae)) | |
1006 | 1008 | then throw("USDT payments only!") | |
1007 | 1009 | else { | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (!(isDefined(getInteger( | |
1012 | - | then throw((("NFT " + | |
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")) | |
1013 | 1015 | else { | |
1014 | - | let | |
1015 | - | if (( | |
1016 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1017 | + | if ((ep != P)) | |
1016 | 1018 | then throw((e + " is not yours")) | |
1017 | 1019 | else { | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | let | |
1026 | - | let | |
1027 | - | let | |
1028 | - | let | |
1029 | - | let | |
1030 | - | let | |
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)) | |
1031 | 1033 | then k | |
1032 | - | else | |
1033 | - | let | |
1034 | - | if (( | |
1035 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1036 | 1038 | else { | |
1037 | - | let | |
1038 | - | then [ScriptTransfer( | |
1039 | + | let ax = if (((dl - dm) > 0)) | |
1040 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1039 | 1041 | else nil | |
1040 | - | let | |
1041 | - | let | |
1042 | - | $Tuple2(((( | |
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)) | |
1043 | 1045 | } | |
1044 | 1046 | } | |
1045 | 1047 | } | |
1049 | 1051 | ||
1050 | 1052 | ||
1051 | 1053 | ||
1052 | - | @Callable( | |
1053 | - | func exchangeResources ( | |
1054 | - | let | |
1055 | - | let | |
1056 | - | if ((size( | |
1054 | + | @Callable(dX) | |
1055 | + | func exchangeResources (cM) = { | |
1056 | + | 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)) | |
1057 | 1059 | then throw("exactly 1 payment must be attached") | |
1058 | 1060 | else { | |
1059 | - | let | |
1060 | - | let | |
1061 | - | if (if (!(isDefined( | |
1061 | + | let dk = dX.payments[0] | |
1062 | + | let dl = dk.amount | |
1063 | + | if (if (!(isDefined(dk.assetId))) | |
1062 | 1064 | then true | |
1063 | - | else (value( | |
1065 | + | else (value(dk.assetId) != ae)) | |
1064 | 1066 | then throw("USDT payments only!") | |
1065 | 1067 | else { | |
1066 | - | let | |
1067 | - | if (( | |
1068 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
1069 | 1071 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if (( | |
1079 | - | then throw(((("Insufficient payment! Attached=" + | |
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))) | |
1080 | 1082 | else { | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1084 | - | then [ScriptTransfer( | |
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)] | |
1085 | 1087 | else nil | |
1086 | - | let | |
1087 | - | let | |
1088 | - | $Tuple2(( | |
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)) | |
1089 | 1091 | } | |
1090 | 1092 | } | |
1091 | 1093 | } | |
1094 | 1096 | ||
1095 | 1097 | ||
1096 | 1098 | ||
1097 | - | @Callable( | |
1098 | - | func exchangeResourcesDuckDelivery ( | |
1099 | + | @Callable(dX) | |
1100 | + | func exchangeResourcesDuckDelivery (cM) = if (!(ac)) | |
1099 | 1101 | then throw("Delivery feature is turned off!") | |
1100 | 1102 | else { | |
1101 | - | let | |
1102 | - | let | |
1103 | - | if ((size( | |
1103 | + | 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)) | |
1104 | 1106 | then throw("exactly 1 payment must be attached") | |
1105 | 1107 | else { | |
1106 | - | let | |
1107 | - | let | |
1108 | - | if (if (!(isDefined( | |
1108 | + | let dk = dX.payments[0] | |
1109 | + | let dl = dk.amount | |
1110 | + | if (if (!(isDefined(dk.assetId))) | |
1109 | 1111 | then true | |
1110 | - | else (value( | |
1112 | + | else (value(dk.assetId) != ae)) | |
1111 | 1113 | then throw("USDT payments only!") | |
1112 | 1114 | else { | |
1113 | - | let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | let | |
1120 | - | let | |
1121 | - | let | |
1122 | - | let | |
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)) | |
1123 | 1125 | then l | |
1124 | - | else | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1128 | 1130 | else { | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | then [ScriptTransfer( | |
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)] | |
1133 | 1135 | else nil | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1137 | - | $Tuple2((( | |
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)) | |
1138 | 1140 | } | |
1139 | 1141 | } | |
1140 | 1142 | } | |
1142 | 1144 | ||
1143 | 1145 | ||
1144 | 1146 | ||
1145 | - | @Callable( | |
1146 | - | func exchangeResourcesLandDelivery ( | |
1147 | + | @Callable(dX) | |
1148 | + | func exchangeResourcesLandDelivery (cM,W) = if (!(ac)) | |
1147 | 1149 | then throw("Delivery feature is turned off!") | |
1148 | 1150 | else { | |
1149 | - | let | |
1150 | - | if ((size( | |
1151 | + | let ea = bF() | |
1152 | + | if ((size(dX.payments) != 1)) | |
1151 | 1153 | then throw("exactly 1 payment must be attached") | |
1152 | 1154 | else { | |
1153 | - | let | |
1154 | - | let | |
1155 | - | if (if (!(isDefined( | |
1155 | + | let dk = dX.payments[0] | |
1156 | + | let dl = dk.amount | |
1157 | + | if (if (!(isDefined(dk.assetId))) | |
1156 | 1158 | then true | |
1157 | - | else (value( | |
1159 | + | else (value(dk.assetId) != ae)) | |
1158 | 1160 | then throw("USDT payments only!") | |
1159 | 1161 | else { | |
1160 | - | let | |
1161 | - | let | |
1162 | - | let | |
1163 | - | if (!(isDefined(getInteger( | |
1164 | - | then throw((("NFT " + | |
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")) | |
1165 | 1167 | else { | |
1166 | - | let | |
1167 | - | if (( | |
1168 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1169 | + | if ((ep != P)) | |
1168 | 1170 | then throw((e + " is not yours")) | |
1169 | 1171 | else { | |
1170 | - | let | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let | |
1179 | - | let | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let | |
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)) | |
1184 | 1186 | then l | |
1185 | - | else | |
1186 | - | let | |
1187 | - | if (( | |
1188 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1189 | 1191 | else { | |
1190 | - | let | |
1191 | - | then [ScriptTransfer( | |
1192 | + | let ax = if (((dl - dm) > 0)) | |
1193 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1192 | 1194 | else nil | |
1193 | - | let | |
1194 | - | let | |
1195 | - | $Tuple2((( | |
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)) | |
1196 | 1198 | } | |
1197 | 1199 | } | |
1198 | 1200 | } | |
1202 | 1204 | ||
1203 | 1205 | ||
1204 | 1206 | ||
1205 | - | @Callable( | |
1206 | - | func craftGoods ( | |
1207 | - | let | |
1208 | - | if ((size( | |
1207 | + | @Callable(dX) | |
1208 | + | func craftGoods (eA,eB) = { | |
1209 | + | let ea = bF() | |
1210 | + | if ((size(dX.payments) != 1)) | |
1209 | 1211 | then throw("exactly 1 payment must be attached") | |
1210 | 1212 | else { | |
1211 | - | let | |
1212 | - | let | |
1213 | - | let | |
1214 | - | if (( | |
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)) | |
1215 | 1217 | then throw("USDT payments only!") | |
1216 | - | else if (( | |
1218 | + | else if ((dl != aj)) | |
1217 | 1219 | then throw("exactly 1 USDT must be attached as payment") | |
1218 | - | else if ((0 >= | |
1220 | + | else if ((0 >= eB)) | |
1219 | 1221 | then throw("Quantity should be positive") | |
1220 | 1222 | else { | |
1221 | - | let | |
1222 | - | let | |
1223 | - | if (( | |
1224 | - | then throw(("Duck location type should be Manufactory, but is " + | |
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])) | |
1225 | 1227 | else { | |
1226 | - | let | |
1227 | - | let | |
1228 | - | let | |
1229 | - | if (if ((0 > | |
1228 | + | let eD = eb[I] | |
1229 | + | let ec = bC(S(T)) | |
1230 | + | let cR = split(ec[G], "_") | |
1231 | + | if (if ((0 > eA)) | |
1230 | 1232 | then true | |
1231 | - | else ( | |
1232 | - | then throw(("Unknown product idx=" + toString( | |
1233 | + | else (eA >= size(s))) | |
1234 | + | then throw(("Unknown product idx=" + toString(eA))) | |
1233 | 1235 | else { | |
1234 | - | let | |
1235 | - | if ((size( | |
1236 | - | then throw(("Fatal: unknown recipe: " + | |
1236 | + | let ab = split(s[eA], "_") | |
1237 | + | if ((size(ab) != v)) | |
1238 | + | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1237 | 1239 | else { | |
1238 | - | let | |
1239 | - | if (( | |
1240 | - | then throw(((("This product is available in " + | |
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)) | |
1241 | 1243 | else { | |
1242 | - | let | |
1244 | + | let eF = if ((ec[H] == "")) | |
1243 | 1245 | then nil | |
1244 | - | else split_4C( | |
1245 | - | func | |
1246 | - | let | |
1247 | - | let | |
1248 | - | then | |
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] | |
1249 | 1251 | else "0" | |
1250 | - | let | |
1251 | - | let | |
1252 | - | let | |
1253 | - | then toString(( | |
1254 | - | else | |
1255 | - | $Tuple2(( | |
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)) | |
1256 | 1258 | } | |
1257 | 1259 | ||
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | func | |
1262 | - | then | |
1263 | - | else | |
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]) | |
1264 | 1266 | ||
1265 | - | func | |
1266 | - | then | |
1267 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1268 | + | then cp | |
1267 | 1269 | else throw("List size exceeds 50") | |
1268 | 1270 | ||
1269 | - | | |
1270 | - | func | |
1271 | - | let | |
1272 | - | let | |
1273 | - | if (( | |
1274 | - | then throw(((((((("You have " + | |
1275 | - | else if (( | |
1276 | - | then $Tuple2(( | |
1277 | - | else $Tuple2(( | |
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) | |
1278 | 1280 | } | |
1279 | 1281 | ||
1280 | - | let | |
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | func | |
1285 | - | then | |
1286 | - | else | |
1282 | + | let eO = { | |
1283 | + | let cl = an | |
1284 | + | let cm = size(cl) | |
1285 | + | let cn = $Tuple2(nil, 0) | |
1286 | + | func cs (cp,cq) = if ((cq >= cm)) | |
1287 | + | then cp | |
1288 | + | else eL(cp, cl[cq]) | |
1287 | 1289 | ||
1288 | - | func | |
1289 | - | then | |
1290 | + | func ct (cp,cq) = if ((cq >= cm)) | |
1291 | + | then cp | |
1290 | 1292 | else throw("List size exceeds 6") | |
1291 | 1293 | ||
1292 | - | cs( | |
1294 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1293 | 1295 | } | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | $Tuple2(nil, $Tuple3( | |
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)) | |
1298 | 1300 | } | |
1299 | 1301 | } | |
1300 | 1302 | } | |
1305 | 1307 | ||
1306 | 1308 | ||
1307 | 1309 | ||
1308 | - | @Callable( | |
1309 | - | func setWarehouseOrder ( | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | then | |
1310 | + | @Callable(dX) | |
1311 | + | func setWarehouseOrder (eQ,W) = { | |
1312 | + | let en = dX.originCaller | |
1313 | + | let P = toString(en) | |
1314 | + | let eP = if ((en != aB)) | |
1315 | + | then bE() | |
1314 | 1316 | else false | |
1315 | - | let | |
1316 | - | if (!(isDefined(getInteger( | |
1317 | - | then throw((("NFT " + | |
1317 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1318 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1319 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1318 | 1320 | else { | |
1319 | - | let | |
1320 | - | if (if (( | |
1321 | - | then ( | |
1321 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1322 | + | if (if ((en != aB)) | |
1323 | + | then (ep != P) | |
1322 | 1324 | else false) | |
1323 | 1325 | then throw((e + " is not yours")) | |
1324 | 1326 | else { | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | if ((0 > | |
1339 | - | then throw((((((("Attempt to reserve " + toString( | |
1327 | + | let eR = split_4C(eQ, ":") | |
1328 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1329 | + | let bY = split_4C(dz, ":") | |
1330 | + | let eS = split(bY[B], "_") | |
1331 | + | let eT = parseIntValue(eS[D]) | |
1332 | + | let be = V(W) | |
1333 | + | let bZ = bd(be) | |
1334 | + | let dY = bX(bY, bZ, eR) | |
1335 | + | let eU = dY._4 | |
1336 | + | let eV = dY._5 | |
1337 | + | let eW = dY._7 | |
1338 | + | let eX = (eU + eV) | |
1339 | + | let eY = ((eT - eW) - eX) | |
1340 | + | if ((0 > eY)) | |
1341 | + | 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")) | |
1340 | 1342 | else { | |
1341 | - | let | |
1342 | - | let | |
1343 | - | let | |
1344 | - | let | |
1345 | - | then if ((size( | |
1343 | + | let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":") | |
1344 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1345 | + | let eZ = dY._6 | |
1346 | + | let fa = if ((eZ > 0)) | |
1347 | + | then if ((size(dX.payments) != 1)) | |
1346 | 1348 | then throw("exactly 1 payment must be attached") | |
1347 | 1349 | else { | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | if (( | |
1350 | + | let dk = dX.payments[0] | |
1351 | + | let dl = dk.amount | |
1352 | + | let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment") | |
1353 | + | if ((eC != ae)) | |
1352 | 1354 | then throw("USDT payments only!") | |
1353 | - | else if (( | |
1354 | - | then throw(("Payment needed is " + toString( | |
1355 | - | else [StringEntry( | |
1355 | + | else if ((dl != eZ)) | |
1356 | + | then throw(("Payment needed is " + toString(eZ))) | |
1357 | + | else [StringEntry(be, eQ)] | |
1356 | 1358 | } | |
1357 | - | else if (( | |
1358 | - | then if ((size( | |
1359 | + | else if ((eZ == 0)) | |
1360 | + | then if ((size(dX.payments) != 0)) | |
1359 | 1361 | then throw("No payments needed") | |
1360 | - | else [StringEntry( | |
1361 | - | else if ((size( | |
1362 | + | else [StringEntry(be, eQ)] | |
1363 | + | else if ((size(dX.payments) != 0)) | |
1362 | 1364 | then throw("No payments needed") | |
1363 | - | else [ScriptTransfer(addressFromStringValue( | |
1364 | - | $Tuple2( | |
1365 | + | else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)] | |
1366 | + | $Tuple2(fa, $Tuple2(eP, dJ)) | |
1365 | 1367 | } | |
1366 | 1368 | } | |
1367 | 1369 | } | |
1369 | 1371 | ||
1370 | 1372 | ||
1371 | 1373 | ||
1372 | - | @Callable( | |
1373 | - | func acceptWarehouseOrder (dp, | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | let | |
1380 | - | if (( | |
1381 | - | then throw((("Duck location type is " + | |
1382 | - | else if (( | |
1383 | - | then throw(((("Your staked duck is " + | |
1374 | + | @Callable(dX) | |
1375 | + | func acceptWarehouseOrder (dq,dp,T) = { | |
1376 | + | 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)) | |
1384 | 1386 | else { | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
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] == "")) | |
1390 | 1392 | then nil | |
1391 | - | else split_4C( | |
1392 | - | let | |
1393 | - | let | |
1394 | - | let | |
1395 | - | let | |
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | $Tuple2(( | |
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)) | |
1409 | 1411 | } | |
1410 | 1412 | } | |
1411 | 1413 | ||
1412 | 1414 | ||
1413 | 1415 | ||
1414 | - | @Callable( | |
1415 | - | func acceptShopOrderDuckDelivery ( | |
1416 | + | @Callable(dX) | |
1417 | + | func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac)) | |
1416 | 1418 | then throw("Delivery feature is turned off!") | |
1417 | 1419 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | let | |
1424 | - | let | |
1425 | - | let | |
1426 | - | let | |
1420 | + | 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] == "")) | |
1427 | 1429 | then nil | |
1428 | - | else split_4C( | |
1429 | - | let | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | let | |
1440 | - | let | |
1441 | - | let | |
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)) | |
1442 | 1444 | then k | |
1443 | - | else | |
1444 | - | let | |
1445 | - | let | |
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | let | |
1450 | - | let | |
1451 | - | let | |
1452 | - | $Tuple2((( | |
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)) | |
1453 | 1455 | } | |
1454 | 1456 | ||
1455 | 1457 | ||
1456 | 1458 | ||
1457 | - | @Callable( | |
1458 | - | func acceptShopOrderLandDelivery ( | |
1459 | + | @Callable(dX) | |
1460 | + | func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac)) | |
1459 | 1461 | then throw("Delivery feature is turned off!") | |
1460 | 1462 | else { | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let | |
1465 | - | if (!(isDefined(getInteger( | |
1466 | - | then throw((("NFT " + | |
1463 | + | 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")) | |
1467 | 1469 | else { | |
1468 | - | let | |
1469 | - | if (( | |
1470 | + | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1471 | + | if ((ep != cZ)) | |
1470 | 1472 | then throw((e + " is not yours")) | |
1471 | 1473 | else { | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
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] == "")) | |
1477 | 1479 | then nil | |
1478 | - | else split( | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | let | |
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)) | |
1492 | 1494 | then k | |
1493 | - | else | |
1494 | - | let | |
1495 | - | let | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | $Tuple2((( | |
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)) | |
1503 | 1505 | } | |
1504 | 1506 | } | |
1505 | 1507 | } | |
1506 | 1508 | ||
1507 | 1509 | ||
1508 | 1510 | ||
1509 | - | @Callable( | |
1510 | - | func sellProductsToES ( | |
1511 | - | let | |
1512 | - | if ((size( | |
1511 | + | @Callable(dX) | |
1512 | + | func sellProductsToES (cM) = { | |
1513 | + | let ea = bF() | |
1514 | + | if ((size(dX.payments) != 0)) | |
1513 | 1515 | then throw("No payments needed") | |
1514 | 1516 | else { | |
1515 | - | let | |
1516 | - | let | |
1517 | - | if (( | |
1518 | - | then throw(("Duck location type should be Airport, but is " + | |
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])) | |
1519 | 1521 | else { | |
1520 | - | let | |
1521 | - | let | |
1522 | + | let ec = bC(S(T)) | |
1523 | + | let eF = if ((ec[H] == "")) | |
1522 | 1524 | then nil | |
1523 | - | else split_4C( | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | then split_4C(value( | |
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), "_") | |
1528 | 1530 | else nil | |
1529 | - | func | |
1530 | - | let | |
1531 | - | let | |
1532 | - | then | |
1531 | + | func fy (bH,fz) = { | |
1532 | + | let bJ = bH._1 | |
1533 | + | let eB = if ((size(cM) > bJ)) | |
1534 | + | then cM[bJ] | |
1533 | 1535 | else 0 | |
1534 | - | if ((0 > | |
1536 | + | if ((0 > eB)) | |
1535 | 1537 | then throw("Quantity cannot be negative") | |
1536 | 1538 | else { | |
1537 | - | let | |
1538 | - | if ((size( | |
1539 | - | then throw(("Fatal: unknown recipe: " + | |
1539 | + | let ab = split(fz, "_") | |
1540 | + | if ((size(ab) != v)) | |
1541 | + | then throw(("Fatal: unknown recipe: " + fz)) | |
1540 | 1542 | else { | |
1541 | - | let | |
1542 | - | let | |
1543 | - | then parseIntValue( | |
1543 | + | let fA = (i * w) | |
1544 | + | let fB = if ((size(fx) > bJ)) | |
1545 | + | then parseIntValue(fx[bJ]) | |
1544 | 1546 | else 0 | |
1545 | - | let | |
1546 | - | if (( | |
1547 | - | then throw(((("Warehouse can buy only " + toString( | |
1547 | + | let fC = (fA - fB) | |
1548 | + | if ((eB > fC)) | |
1549 | + | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1548 | 1550 | else { | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | then parseIntValue( | |
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]) | |
1553 | 1555 | else 0 | |
1554 | - | if (( | |
1555 | - | then throw(((("You have only " + toString( | |
1556 | - | else $Tuple5(( | |
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))) | |
1557 | 1559 | } | |
1558 | 1560 | } | |
1559 | 1561 | } | |
1560 | 1562 | } | |
1561 | 1563 | ||
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | let | |
1566 | - | func | |
1567 | - | then | |
1568 | - | else | |
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]) | |
1569 | 1571 | ||
1570 | - | func | |
1571 | - | then | |
1572 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1573 | + | then cp | |
1572 | 1574 | else throw("List size exceeds 50") | |
1573 | 1575 | ||
1574 | - | | |
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) | |
1575 | 1577 | } | |
1576 | - | let | |
1577 | - | let | |
1578 | - | let | |
1579 | - | $Tuple2([StringEntry( | |
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)) | |
1580 | 1582 | } | |
1581 | 1583 | } | |
1582 | 1584 | } | |
1583 | 1585 | ||
1584 | 1586 | ||
1585 | 1587 | ||
1586 | - | @Callable( | |
1587 | - | func updateEsStorage ( | |
1588 | + | @Callable(dX) | |
1589 | + | func updateEsStorage (fF) = if ((dX.caller != aC)) | |
1588 | 1590 | then throw("Permission denied") | |
1589 | - | else $Tuple2([StringEntry( | |
1591 | + | else $Tuple2([StringEntry(X(), fF)], fF) | |
1590 | 1592 | ||
1591 | 1593 | ||
1592 | 1594 | ||
1593 | - | @Callable( | |
1594 | - | func updateDeliveryLocked ( | |
1595 | + | @Callable(dX) | |
1596 | + | func updateDeliveryLocked (fG) = if ((dX.caller != aC)) | |
1595 | 1597 | then throw("Permission denied") | |
1596 | - | else $Tuple2([IntegerEntry( | |
1598 | + | else $Tuple2([IntegerEntry(Z, fG)], fG) | |
1597 | 1599 | ||
1598 | 1600 | ||
1599 | 1601 | ||
1600 | - | @Callable( | |
1601 | - | func sendDeliveryReward ( | |
1602 | + | @Callable(dX) | |
1603 | + | func sendDeliveryReward (P) = if ((dX.caller != aC)) | |
1602 | 1604 | then throw("Permission denied") | |
1603 | 1605 | else { | |
1604 | - | let el = valueOrElse(getInteger(X), 0) | |
1605 | - | let fG = valueOrElse(getInteger(Y), 0) | |
1606 | - | $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k) | |
1606 | + | let em = valueOrElse(getInteger(Y), 0) | |
1607 | + | let fH = valueOrElse(getInteger(Z), 0) | |
1608 | + | let fI = (k * m) | |
1609 | + | let fJ = invoke(aE, "sendAcres", [P, fI], nil) | |
1610 | + | $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ) | |
1607 | 1611 | } | |
1608 | 1612 | ||
1609 | 1613 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 6 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = 10000 | |
5 | 5 | ||
6 | 6 | let b = 10000 | |
7 | 7 | ||
8 | 8 | let c = 10000 | |
9 | 9 | ||
10 | 10 | let d = 10000 | |
11 | 11 | ||
12 | 12 | let e = "LAND" | |
13 | 13 | ||
14 | 14 | let f = 6 | |
15 | 15 | ||
16 | 16 | let g = "Africa_F_Africa" | |
17 | 17 | ||
18 | 18 | let h = 39637 | |
19 | 19 | ||
20 | 20 | let i = 10 | |
21 | 21 | ||
22 | 22 | let j = 4 | |
23 | 23 | ||
24 | 24 | let k = 50000 | |
25 | 25 | ||
26 | 26 | let l = 75000 | |
27 | 27 | ||
28 | - | let m = | |
28 | + | let m = 10 | |
29 | 29 | ||
30 | - | let n = [" | |
30 | + | let n = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"] | |
31 | 31 | ||
32 | - | let o = [" | |
32 | + | let o = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"] | |
33 | 33 | ||
34 | - | let p = [" | |
34 | + | 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"] | |
35 | 35 | ||
36 | - | let q = | |
36 | + | let q = ["Americas", "Europe", "Asia", "Africa", "Oceania"] | |
37 | 37 | ||
38 | - | let r = | |
38 | + | let r = 10000000 | |
39 | 39 | ||
40 | - | let s = | |
40 | + | 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_"] | |
41 | 41 | ||
42 | - | let t = | |
42 | + | let t = 6 | |
43 | 43 | ||
44 | - | let u = | |
44 | + | let u = 7 | |
45 | 45 | ||
46 | - | let v = | |
46 | + | let v = 11 | |
47 | 47 | ||
48 | - | let w = | |
48 | + | let w = 10 | |
49 | 49 | ||
50 | - | let x = | |
50 | + | let x = 0 | |
51 | 51 | ||
52 | - | let y = | |
52 | + | let y = 1 | |
53 | 53 | ||
54 | - | let z = | |
54 | + | let z = 2 | |
55 | 55 | ||
56 | - | let A = | |
56 | + | let A = 3 | |
57 | 57 | ||
58 | - | let B = | |
58 | + | let B = 4 | |
59 | 59 | ||
60 | - | let C = | |
60 | + | let C = 0 | |
61 | 61 | ||
62 | - | let D = | |
62 | + | let D = 3 | |
63 | 63 | ||
64 | - | let E = | |
64 | + | let E = 0 | |
65 | 65 | ||
66 | - | let F = | |
66 | + | let F = 1 | |
67 | 67 | ||
68 | - | let G = | |
68 | + | let G = 2 | |
69 | 69 | ||
70 | - | let H = | |
70 | + | let H = 3 | |
71 | 71 | ||
72 | - | let I = | |
72 | + | let I = 0 | |
73 | 73 | ||
74 | - | let J = | |
74 | + | let J = 1 | |
75 | 75 | ||
76 | - | func K (L) = ("no_" + L) | |
76 | + | let K = 2 | |
77 | + | ||
78 | + | func L (M) = ("no_" + M) | |
77 | 79 | ||
78 | 80 | ||
79 | - | func | |
81 | + | func N (M) = ("st_" + M) | |
80 | 82 | ||
81 | 83 | ||
82 | - | func | |
84 | + | func O (P) = ("accRefBy_" + P) | |
83 | 85 | ||
84 | 86 | ||
85 | - | func | |
87 | + | func Q (R) = ("stakedDuckByOwner_" + R) | |
86 | 88 | ||
87 | 89 | ||
88 | - | func | |
90 | + | func S (T) = ("backPack_" + T) | |
89 | 91 | ||
90 | 92 | ||
91 | - | func | |
93 | + | func U (T) = ("duckLocation_" + T) | |
92 | 94 | ||
93 | 95 | ||
94 | - | func | |
96 | + | func V (W) = ("landOrder_" + W) | |
95 | 97 | ||
96 | 98 | ||
97 | - | func | |
99 | + | func X () = "emergencyWarehouseProducts" | |
98 | 100 | ||
99 | 101 | ||
100 | - | let | |
102 | + | let Y = "deliveryFund" | |
101 | 103 | ||
102 | - | let | |
104 | + | let Z = "deliveryLocked" | |
103 | 105 | ||
104 | - | func | |
106 | + | func aa (ab) = (parseIntValue(ab[t]) * r) | |
105 | 107 | ||
106 | 108 | ||
107 | - | let | |
109 | + | let ac = true | |
108 | 110 | ||
109 | - | let | |
111 | + | let ad = take(drop(this.bytes, 1), 1) | |
110 | 112 | ||
111 | - | let | |
112 | - | let | |
113 | - | if ((base58'2W' == | |
113 | + | let ae = { | |
114 | + | let af = ad | |
115 | + | if ((base58'2W' == af)) | |
114 | 116 | then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi' | |
115 | - | else if ((base58'2T' == | |
117 | + | else if ((base58'2T' == af)) | |
116 | 118 | then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63' | |
117 | 119 | else throw("Unknown chain") | |
118 | 120 | } | |
119 | 121 | ||
120 | - | let | |
121 | - | let | |
122 | - | if ((base58'2W' == | |
122 | + | let ag = { | |
123 | + | let af = ad | |
124 | + | if ((base58'2W' == af)) | |
123 | 125 | then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv" | |
124 | - | else if ((base58'2T' == | |
126 | + | else if ((base58'2T' == af)) | |
125 | 127 | then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy" | |
126 | 128 | else throw("Unknown chain") | |
127 | 129 | } | |
128 | 130 | ||
129 | - | let | |
131 | + | let ah = "__" | |
130 | 132 | ||
131 | - | let | |
133 | + | let ai = 100000 | |
132 | 134 | ||
133 | - | let | |
135 | + | let aj = 1000000 | |
134 | 136 | ||
135 | - | let | |
137 | + | let ak = 100000000 | |
136 | 138 | ||
137 | - | let | |
139 | + | let al = 10000000000 | |
138 | 140 | ||
139 | - | let | |
141 | + | let am = 100000 | |
140 | 142 | ||
141 | - | let | |
143 | + | let an = [0, 1, 2, 3, 4, 5] | |
142 | 144 | ||
143 | - | func | |
145 | + | func ao (ap,aq) = valueOrErrorMessage(getString(ap, aq), makeString(["mandatory ", toString(ap), ".", aq, " is not defined"], "")) | |
144 | 146 | ||
145 | 147 | ||
146 | - | let | |
148 | + | let ar = 1 | |
147 | 149 | ||
148 | - | let | |
150 | + | let as = 6 | |
149 | 151 | ||
150 | - | let | |
152 | + | let at = 8 | |
151 | 153 | ||
152 | - | func | |
154 | + | func au () = "%s__restConfig" | |
153 | 155 | ||
154 | 156 | ||
155 | - | func | |
157 | + | func av () = "%s__restAddr" | |
156 | 158 | ||
157 | 159 | ||
158 | - | func | |
160 | + | func aw (ax) = split_4C(ao(ax, au()), ah) | |
159 | 161 | ||
160 | 162 | ||
161 | - | func | |
163 | + | func ay (az,aA) = valueOrErrorMessage(addressFromString(az[aA]), ("Rest cfg doesn't contain address at index " + toString(aA))) | |
162 | 164 | ||
163 | 165 | ||
164 | - | let | |
166 | + | let aB = addressFromStringValue(valueOrElse(getString(this, av()), ag)) | |
165 | 167 | ||
166 | - | let | |
168 | + | let az = aw(aB) | |
167 | 169 | ||
168 | - | let | |
170 | + | let aC = ay(az, ar) | |
169 | 171 | ||
170 | - | let | |
172 | + | let aD = ay(az, as) | |
171 | 173 | ||
172 | - | let | |
174 | + | let aE = ay(az, at) | |
173 | 175 | ||
174 | - | func | |
175 | - | let | |
176 | - | if ($isInstanceOf( | |
176 | + | func aF (aG) = { | |
177 | + | let af = aG | |
178 | + | if ($isInstanceOf(af, "String")) | |
177 | 179 | then { | |
178 | - | let | |
179 | - | | |
180 | + | let aH = af | |
181 | + | aH | |
180 | 182 | } | |
181 | 183 | else throw("fail to cast into String") | |
182 | 184 | } | |
183 | 185 | ||
184 | 186 | ||
185 | - | func | |
186 | - | let | |
187 | - | if ($isInstanceOf( | |
187 | + | func aI (aG) = { | |
188 | + | let af = aG | |
189 | + | if ($isInstanceOf(af, "Int")) | |
188 | 190 | then { | |
189 | - | let | |
190 | - | | |
191 | + | let aJ = af | |
192 | + | aJ | |
191 | 193 | } | |
192 | 194 | else throw("fail to cast into Int") | |
193 | 195 | } | |
194 | 196 | ||
195 | 197 | ||
196 | - | func | |
198 | + | func aK () = "contractsBlocked" | |
197 | 199 | ||
198 | 200 | ||
199 | - | func | |
200 | - | let | |
201 | - | let | |
202 | - | let | |
203 | - | (((toString(( | |
201 | + | func aL (aM,aN) = { | |
202 | + | let aO = pow(10, 0, aN, 0, 0, DOWN) | |
203 | + | let aP = toString((aM % aO)) | |
204 | + | let aQ = drop(toString(aO), (1 + size(aP))) | |
205 | + | (((toString((aM / aO)) + ".") + aQ) + aP) | |
204 | 206 | } | |
205 | 207 | ||
206 | 208 | ||
207 | - | let | |
209 | + | let aR = 10000000000 | |
208 | 210 | ||
209 | - | let | |
211 | + | let aS = 200 | |
210 | 212 | ||
211 | - | let aS = 300 | |
212 | - | ||
213 | - | let aT = 10000 | |
213 | + | let aT = 300 | |
214 | 214 | ||
215 | 215 | let aU = 10000 | |
216 | 216 | ||
217 | - | let aV = | |
217 | + | let aV = 10000 | |
218 | 218 | ||
219 | - | func aW (aX,aY) = ((("factoryWhByContinentAndRes_" + aX) + "_") + toString(aY)) | |
219 | + | let aW = 15000 | |
220 | + | ||
221 | + | func aX (aY,aZ) = ((("factoryWhByContinentAndRes_" + aY) + "_") + toString(aZ)) | |
220 | 222 | ||
221 | 223 | ||
222 | - | let | |
224 | + | let ba = 0 | |
223 | 225 | ||
224 | - | let | |
226 | + | let bb = 1 | |
225 | 227 | ||
226 | - | let | |
228 | + | let bc = 2 | |
227 | 229 | ||
228 | - | func | |
229 | - | let | |
230 | - | [if ((size(split( | |
231 | - | then | |
232 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split( | |
233 | - | then | |
234 | - | else "0@0_0@0_0@0_0@0_0@0_0@0", | |
230 | + | func bd (be) = { | |
231 | + | 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:"), ":") | |
232 | + | [if ((size(split(bf[ba], "_")) == f)) | |
233 | + | then bf[ba] | |
234 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(bf[bb], "_")) == f)) | |
235 | + | then bf[bb] | |
236 | + | else "0@0_0@0_0@0_0@0_0@0_0@0", bf[bc]] | |
235 | 237 | } | |
236 | 238 | ||
237 | 239 | ||
238 | - | func | |
240 | + | func bg (bh,bi,bj) = if (bj) | |
239 | 241 | then { | |
240 | - | let | |
241 | - | then ((( | |
242 | - | else -((((-( | |
243 | - | ( | |
242 | + | let bk = if ((bh >= 0)) | |
243 | + | then (((bh + bi) - 1) / bi) | |
244 | + | else -((((-(bh) + bi) - 1) / bi)) | |
245 | + | (bk * ak) | |
244 | 246 | } | |
245 | - | else | |
247 | + | else bh | |
246 | 248 | ||
247 | 249 | ||
248 | - | func | |
249 | - | let | |
250 | - | let | |
251 | - | let | |
250 | + | func bl (bm,aZ,bh,bn) = { | |
251 | + | let bo = aX(bm, aZ) | |
252 | + | let bp = valueOrElse(getInteger(bo), 0) | |
253 | + | let bq = if ((bp > aR)) | |
252 | 254 | then 0 | |
253 | - | else if ((( | |
254 | - | then ( | |
255 | - | else | |
256 | - | let | |
257 | - | let | |
258 | - | if ((( | |
259 | - | then throw((((((((((("Actual price = " + toString( | |
260 | - | else $Tuple2(IntegerEntry( | |
255 | + | else if (((bp + bh) > aR)) | |
256 | + | then (aR - bp) | |
257 | + | else bh | |
258 | + | let br = (fraction(bq, ((aS * h) - fraction(((100 * bp) + (50 * bq)), h, aR)), al) + fraction((bh - bq), h, ak)) | |
259 | + | let bs = (bn - (bn / 100)) | |
260 | + | if (((bs * bh) > (br * ak))) | |
261 | + | then throw((((((((((("Actual price = " + toString(br)) + " / ") + toString(bh)) + " < minPrice = ") + toString(bn)) + ", (") + bm) + ", ") + n[aZ]) + ")")) | |
262 | + | else $Tuple2(IntegerEntry(bo, (bp + bh)), br) | |
261 | 263 | } | |
262 | 264 | ||
263 | 265 | ||
264 | - | func | |
265 | - | let | |
266 | - | let | |
267 | - | let | |
268 | - | then min([ | |
266 | + | func bt (bm,bu,bh,bv) = { | |
267 | + | let bo = aX(bm, bu) | |
268 | + | let bp = valueOrElse(getInteger(bo), 0) | |
269 | + | let bw = if ((bp > aR)) | |
270 | + | then min([bh, (bp - aR)]) | |
269 | 271 | else 0 | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | let | |
274 | - | let | |
275 | - | if ((( | |
276 | - | then throw((((((((((("Actual price = " + toString( | |
277 | - | else $Tuple3(IntegerEntry( | |
272 | + | let bx = min([bp, (bh - bw)]) | |
273 | + | let by = (bx + bw) | |
274 | + | let bz = min([bp, aR]) | |
275 | + | let bA = (fraction(bx, ((aT * h) - fraction(((100 * bz) - (50 * bx)), h, aR)), al) + fraction(bw, (2 * h), ak)) | |
276 | + | let bB = (bv + (bv / 100)) | |
277 | + | if (((bA * ak) > (bB * by))) | |
278 | + | then throw((((((((((("Actual price = " + toString(bA)) + " / ") + toString(by)) + " > maxPrice = ") + toString(bv)) + ", (") + bm) + ", ") + o[bu]) + ")")) | |
279 | + | else $Tuple3(IntegerEntry(bo, (bp - by)), bA, by) | |
278 | 280 | } | |
279 | 281 | ||
280 | 282 | ||
281 | - | func | |
282 | - | let | |
283 | - | [toString(valueOrElse(parseInt( | |
284 | - | then | |
285 | - | else "0_0_0_0_0_0", if ((size(split( | |
286 | - | then | |
287 | - | else "0_0_0_0_0_0", | |
283 | + | func bC (bD) = { | |
284 | + | let bf = split_4C(valueOrElse(getString(aC, bD), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":") | |
285 | + | [toString(valueOrElse(parseInt(bf[E]), 0)), if ((size(split(bf[F], "_")) == f)) | |
286 | + | then bf[F] | |
287 | + | else "0_0_0_0_0_0", if ((size(split(bf[G], "_")) == f)) | |
288 | + | then bf[G] | |
289 | + | else "0_0_0_0_0_0", bf[H]] | |
288 | 290 | } | |
289 | 291 | ||
290 | 292 | ||
291 | - | func | |
293 | + | func bE () = if (valueOrElse(getBoolean(aC, aK()), false)) | |
292 | 294 | then throw("Contracts are under maintenance") | |
293 | 295 | else unit | |
294 | 296 | ||
295 | 297 | ||
296 | - | func | |
298 | + | func bF () = aI(invoke(aC, "saveLastTx", nil, nil)) | |
297 | 299 | ||
298 | 300 | ||
299 | - | func | |
300 | - | let | |
301 | - | let | |
302 | - | then | |
301 | + | func bG (bH,bI) = { | |
302 | + | let bJ = bH._1 | |
303 | + | let bK = if ((size(bH._10) > bJ)) | |
304 | + | then bH._10[bJ] | |
303 | 305 | else "0@0" | |
304 | - | let | |
305 | - | let | |
306 | - | if ((size( | |
306 | + | let bL = bH._8 | |
307 | + | let bM = split(bK, "@") | |
308 | + | if ((size(bM) != 2)) | |
307 | 309 | then throw("Incorrect order format, should be amount@price") | |
308 | 310 | else { | |
309 | - | let | |
310 | - | let | |
311 | - | let | |
312 | - | then ( | |
313 | - | else fraction( | |
314 | - | let | |
315 | - | let | |
316 | - | then parseIntValue( | |
311 | + | let bN = parseIntValue(bM[0]) | |
312 | + | let bO = parseIntValue(bM[1]) | |
313 | + | let bP = if (bL) | |
314 | + | then (bN * bO) | |
315 | + | else fraction(bN, bO, ak) | |
316 | + | let bQ = bg(bN, w, bL) | |
317 | + | let bR = if ((size(bH._6) > bJ)) | |
318 | + | then parseIntValue(bH._6[bJ]) | |
317 | 319 | else 0 | |
318 | - | let | |
319 | - | then | |
320 | + | let bS = split(if ((size(bH._7) > bJ)) | |
321 | + | then bH._7[bJ] | |
320 | 322 | else "0@0", "@") | |
321 | - | let | |
322 | - | let | |
323 | - | if (if ((0 > | |
323 | + | let bT = parseIntValue(bS[0]) | |
324 | + | let bU = parseIntValue(bS[1]) | |
325 | + | if (if ((0 > bU)) | |
324 | 326 | then true | |
325 | - | else (0 > | |
327 | + | else (0 > bO)) | |
326 | 328 | then throw("Price can't be negative") | |
327 | 329 | else { | |
328 | - | let | |
329 | - | then ( | |
330 | - | else fraction( | |
331 | - | if (( | |
332 | - | then if (( | |
333 | - | then $Tuple10(( | |
334 | - | else $Tuple10(( | |
335 | - | else if (( | |
336 | - | then if ((0 > | |
337 | - | then $Tuple10(( | |
338 | - | else $Tuple10(( | |
339 | - | else if ((0 > | |
330 | + | let bV = if (bL) | |
331 | + | then (bT * bU) | |
332 | + | else fraction(bT, bU, ak) | |
333 | + | if ((bN == 0)) | |
334 | + | then if ((bT > 0)) | |
335 | + | 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) | |
336 | + | 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) | |
337 | + | else if ((bN > 0)) | |
338 | + | then if ((0 > bT)) | |
339 | + | 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) | |
340 | + | 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) | |
341 | + | else if ((0 > bT)) | |
340 | 342 | then { | |
341 | - | let | |
342 | - | if ((0 > ( | |
343 | - | then throw((((("Attempt to take " + toString( | |
344 | - | else $Tuple10(( | |
343 | + | let bW = (bT - bN) | |
344 | + | if ((0 > (bR - bW))) | |
345 | + | then throw((((("Attempt to take " + toString(bW)) + " from warehouse, but only ") + toString(bR)) + " available")) | |
346 | + | 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) | |
345 | 347 | } | |
346 | - | else if ((0 > ( | |
347 | - | then throw((((("Attempt to take " + toString(-( | |
348 | - | else $Tuple10(( | |
348 | + | else if ((0 > (bR + bN))) | |
349 | + | then throw((((("Attempt to take " + toString(-(bN))) + " from warehouse, but only ") + toString(bR)) + " available")) | |
350 | + | 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) | |
349 | 351 | } | |
350 | 352 | } | |
351 | 353 | } | |
352 | 354 | ||
353 | 355 | ||
354 | - | func | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
356 | + | func bX (bY,bZ,ca) = { | |
357 | + | let cb = split(bY[y], "_") | |
358 | + | let cc = split(bY[z], "_") | |
359 | + | let cd = if ((bY[A] == "")) | |
358 | 360 | then nil | |
359 | - | else split_4C( | |
360 | - | let | |
361 | - | let | |
362 | - | let | |
361 | + | else split_4C(bY[A], "_") | |
362 | + | let ce = split(bZ[ba], "_") | |
363 | + | let cf = split(bZ[bb], "_") | |
364 | + | let cg = if ((bZ[bc] == "")) | |
363 | 365 | then nil | |
364 | - | else split_4C( | |
365 | - | if ((size( | |
366 | + | else split_4C(bZ[bc], "_") | |
367 | + | if ((size(ca) != 3)) | |
366 | 368 | then throw("newOrderStr should contain exactly 2 ':' separators") | |
367 | 369 | else { | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
370 | + | let ch = split(ca[0], "_") | |
371 | + | let ci = split(ca[1], "_") | |
372 | + | let cj = if ((ca[2] == "")) | |
371 | 373 | then nil | |
372 | - | else split_4C( | |
373 | - | if ((size( | |
374 | + | else split_4C(ca[2], "_") | |
375 | + | if ((size(ch) != f)) | |
374 | 376 | then throw("All 6 resources should be passed") | |
375 | - | else if ((size( | |
377 | + | else if ((size(ci) != f)) | |
376 | 378 | then throw("All 6 materials should be passed") | |
377 | 379 | else { | |
378 | - | let | |
379 | - | let | |
380 | - | let | |
381 | - | let | |
382 | - | func | |
383 | - | then | |
384 | - | else | |
380 | + | let ck = { | |
381 | + | let cl = n | |
382 | + | let cm = size(cl) | |
383 | + | let cn = $Tuple10(0, nil, 0, 0, 0, cb, ce, false, 0, ch) | |
384 | + | func co (cp,cq) = if ((cq >= cm)) | |
385 | + | then cp | |
386 | + | else bG(cp, cl[cq]) | |
385 | 387 | ||
386 | - | func | |
387 | - | then | |
388 | + | func cr (cp,cq) = if ((cq >= cm)) | |
389 | + | then cp | |
388 | 390 | else throw("List size exceeds 6") | |
389 | 391 | ||
390 | - | | |
392 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
391 | 393 | } | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | func | |
397 | - | then | |
398 | - | else | |
394 | + | let by = { | |
395 | + | let cl = o | |
396 | + | let cm = size(cl) | |
397 | + | let cn = $Tuple10(0, nil, ck._3, ck._4, ck._5, cc, cf, false, ck._9, ci) | |
398 | + | func cs (cp,cq) = if ((cq >= cm)) | |
399 | + | then cp | |
400 | + | else bG(cp, cl[cq]) | |
399 | 401 | ||
400 | - | func | |
401 | - | then | |
402 | + | func ct (cp,cq) = if ((cq >= cm)) | |
403 | + | then cp | |
402 | 404 | else throw("List size exceeds 6") | |
403 | 405 | ||
404 | - | cs( | |
406 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
405 | 407 | } | |
406 | - | let | |
407 | - | let | |
408 | - | let | |
409 | - | let | |
410 | - | func | |
411 | - | then | |
412 | - | else | |
408 | + | let bf = { | |
409 | + | let cl = p | |
410 | + | let cm = size(cl) | |
411 | + | let cn = $Tuple10(0, nil, by._3, by._4, by._5, cd, cg, true, by._9, cj) | |
412 | + | func cu (cp,cq) = if ((cq >= cm)) | |
413 | + | then cp | |
414 | + | else bG(cp, cl[cq]) | |
413 | 415 | ||
414 | - | func | |
415 | - | then | |
416 | + | func cv (cp,cq) = if ((cq >= cm)) | |
417 | + | then cp | |
416 | 418 | else throw("List size exceeds 50") | |
417 | 419 | ||
418 | - | cu( | |
420 | + | 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) | |
419 | 421 | } | |
420 | - | $Tuple7( | |
422 | + | $Tuple7(ck._2, by._2, bf._2, bf._3, bf._4, bf._5, bf._9) | |
421 | 423 | } | |
422 | 424 | } | |
423 | 425 | } | |
424 | 426 | ||
425 | 427 | ||
426 | - | func | |
427 | - | let | |
428 | - | let | |
429 | - | let | |
430 | - | if ((size( | |
428 | + | func cw (bH,cx) = { | |
429 | + | let bJ = bH._7 | |
430 | + | let bL = bH._12 | |
431 | + | let cy = split(cx, "@") | |
432 | + | if ((size(cy) != 2)) | |
431 | 433 | then throw("Incorrect order format, should be amount@price") | |
432 | 434 | else { | |
433 | - | let | |
434 | - | let | |
435 | - | if ((0 > | |
435 | + | let cz = parseIntValue(cy[0]) | |
436 | + | let cA = parseIntValue(cy[1]) | |
437 | + | if ((0 > cA)) | |
436 | 438 | then throw("Price can't be negative") | |
437 | 439 | else { | |
438 | - | let | |
439 | - | then ( | |
440 | - | else fraction( | |
441 | - | let | |
442 | - | then parseIntValue( | |
440 | + | let cB = if (bL) | |
441 | + | then (cz * cA) | |
442 | + | else fraction(cz, cA, ak) | |
443 | + | let cC = if ((size(bH._8) > bJ)) | |
444 | + | then parseIntValue(bH._8[bJ]) | |
443 | 445 | else 0 | |
444 | - | let | |
445 | - | then parseIntValue( | |
446 | + | let bR = if ((size(bH._9) > bJ)) | |
447 | + | then parseIntValue(bH._9[bJ]) | |
446 | 448 | else 0 | |
447 | - | let | |
448 | - | then | |
449 | + | let cD = if ((size(bH._10) > bJ)) | |
450 | + | then bH._10[bJ] | |
449 | 451 | else "0@0" | |
450 | - | let | |
451 | - | let | |
452 | - | let | |
453 | - | if (if (( | |
454 | - | then ( | |
452 | + | let cE = split(cD, "@") | |
453 | + | let cF = parseIntValue(cE[0]) | |
454 | + | let cG = parseIntValue(cE[1]) | |
455 | + | if (if ((cz != 0)) | |
456 | + | then (cA != cG) | |
455 | 457 | else false) | |
456 | - | then throw(((((("Prices of " + | |
458 | + | then throw(((((("Prices of " + bH._11[bJ]) + " don't match! WH price=") + toString(cG)) + ", your price=") + toString(cA))) | |
457 | 459 | else { | |
458 | - | let | |
459 | - | then ( | |
460 | - | else fraction( | |
461 | - | let | |
462 | - | if (( | |
463 | - | then $Tuple13(( | |
464 | - | else if (( | |
465 | - | then if ((0 > | |
466 | - | then if (( | |
467 | - | then throw(((((("Attempt to buy " + toString( | |
468 | - | else $Tuple13(( | |
469 | - | then ( | |
470 | - | else | |
471 | - | else throw((("Attempt to buy " + | |
472 | - | else if (( | |
473 | - | then if ((-( | |
474 | - | then throw(((((("Attempt to sell " + toString(-( | |
475 | - | else if ((-( | |
476 | - | then throw(((((("Attempt to sell " + toString(-( | |
477 | - | else $Tuple13(( | |
478 | - | then ( | |
479 | - | else | |
480 | - | else throw((("Attempt to sell " + | |
460 | + | let cH = if (bL) | |
461 | + | then (cF * cG) | |
462 | + | else fraction(cF, cG, ak) | |
463 | + | let cI = bg(cz, w, bL) | |
464 | + | if ((cz == 0)) | |
465 | + | 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) | |
466 | + | else if ((cz > 0)) | |
467 | + | then if ((0 > cF)) | |
468 | + | then if ((cz > -(cF))) | |
469 | + | then throw(((((("Attempt to buy " + toString(cz)) + " of ") + bH._11[bJ]) + ", but warehouse only sells ") + toString(-(cF)))) | |
470 | + | 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) | |
471 | + | then (cz * ak) | |
472 | + | else cz))) | |
473 | + | else throw((("Attempt to buy " + bH._11[bJ]) + " while warehouse doesn't sell it")) | |
474 | + | else if ((cF > 0)) | |
475 | + | then if ((-(cz) > cF)) | |
476 | + | then throw(((((("Attempt to sell " + toString(-(cz))) + " of ") + bH._11[bJ]) + ", but warehouse only buys ") + toString(cF))) | |
477 | + | else if ((-(cz) > cC)) | |
478 | + | then throw(((((("Attempt to sell " + toString(-(cz))) + ", but you only have ") + toString(cC)) + " of ") + bH._11[bJ])) | |
479 | + | 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) | |
480 | + | then (cz * ak) | |
481 | + | else cz))) | |
482 | + | else throw((("Attempt to sell " + bH._11[bJ]) + " while warehouse doesn't buy it")) | |
481 | 483 | } | |
482 | 484 | } | |
483 | 485 | } | |
484 | 486 | } | |
485 | 487 | ||
486 | 488 | ||
487 | - | func | |
488 | - | func | |
489 | - | then throw(((((("You have " + | |
490 | - | else if ((0 > | |
491 | - | then throw(((("You tried to sell negative amount of " + | |
492 | - | else if (( | |
489 | + | func cJ (cK,cL,cM,cN) = { | |
490 | + | func cO (bH,bJ) = if ((cM[bJ] > parseIntValue(cK[bJ]))) | |
491 | + | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to sell ") + toString(cM[bJ]))) | |
492 | + | else if ((0 > cM[bJ])) | |
493 | + | then throw(((("You tried to sell negative amount of " + n[bJ]) + ": ") + toString(cM[bJ]))) | |
494 | + | else if ((cM[bJ] > 0)) | |
493 | 495 | then { | |
494 | - | let | |
495 | - | $Tuple4(( | |
496 | + | let cP = bl(cL, bJ, cM[bJ], cN[bJ]) | |
497 | + | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cK[bJ]) - cM[bJ]))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
496 | 498 | } | |
497 | - | else $Tuple4( | |
499 | + | else $Tuple4(bH._1, (bH._2 :+ cK[bJ]), bH._3, bH._4) | |
498 | 500 | ||
499 | - | let | |
500 | - | let | |
501 | - | let | |
502 | - | func | |
503 | - | then | |
504 | - | else | |
501 | + | let cl = an | |
502 | + | let cm = size(cl) | |
503 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
504 | + | func co (cp,cq) = if ((cq >= cm)) | |
505 | + | then cp | |
506 | + | else cO(cp, cl[cq]) | |
505 | 507 | ||
506 | - | func | |
507 | - | then | |
508 | + | func cr (cp,cq) = if ((cq >= cm)) | |
509 | + | then cp | |
508 | 510 | else throw("List size exceeds 6") | |
509 | 511 | ||
510 | - | | |
512 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
511 | 513 | } | |
512 | 514 | ||
513 | 515 | ||
514 | - | func | |
515 | - | func | |
516 | - | then throw(((("You tried to buy negative amount of " + | |
517 | - | else if (( | |
516 | + | func cQ (cR,cL,cM,cS) = { | |
517 | + | func cT (bH,bJ) = if ((0 > cM[bJ])) | |
518 | + | then throw(((("You tried to buy negative amount of " + o[bJ]) + ": ") + toString(cM[bJ]))) | |
519 | + | else if ((cM[bJ] > 0)) | |
518 | 520 | then { | |
519 | - | let | |
520 | - | $Tuple4(( | |
521 | + | let cP = bt(cL, bJ, cM[bJ], cS[bJ]) | |
522 | + | $Tuple4((bH._1 :+ cP._1), (bH._2 :+ toString((parseIntValue(cR[bJ]) + cP._3))), (bH._3 + cP._2), (bH._4 + cM[bJ])) | |
521 | 523 | } | |
522 | - | else $Tuple4( | |
524 | + | else $Tuple4(bH._1, (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
523 | 525 | ||
524 | - | let | |
525 | - | let | |
526 | - | let | |
527 | - | func | |
528 | - | then | |
529 | - | else | |
526 | + | let cl = an | |
527 | + | let cm = size(cl) | |
528 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
529 | + | func co (cp,cq) = if ((cq >= cm)) | |
530 | + | then cp | |
531 | + | else cT(cp, cl[cq]) | |
530 | 532 | ||
531 | - | func | |
532 | - | then | |
533 | + | func cr (cp,cq) = if ((cq >= cm)) | |
534 | + | then cp | |
533 | 535 | else throw("List size exceeds 6") | |
534 | 536 | ||
535 | - | | |
537 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
536 | 538 | } | |
537 | 539 | ||
538 | 540 | ||
539 | - | func | |
540 | - | func | |
541 | - | let | |
542 | - | if (( | |
543 | - | then throw(((((("You have " + | |
544 | - | else if ((0 > | |
545 | - | then throw(((("You tried to exchange negative amount of " + | |
546 | - | else if (( | |
547 | - | then $Tuple4(( | |
548 | - | else $Tuple4(( | |
541 | + | func cU (cK,cR,cM) = { | |
542 | + | func cV (bH,bJ) = { | |
543 | + | let cW = cM[bJ] | |
544 | + | if ((cW > parseIntValue(cK[bJ]))) | |
545 | + | then throw(((((("You have " + cK[bJ]) + " of ") + n[bJ]) + ", but tried to exchange ") + toString(cW))) | |
546 | + | else if ((0 > cW)) | |
547 | + | then throw(((("You tried to exchange negative amount of " + n[bJ]) + ": ") + toString(cW))) | |
548 | + | else if ((cW > 0)) | |
549 | + | 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)) | |
550 | + | else $Tuple4((bH._1 :+ cK[bJ]), (bH._2 :+ cR[bJ]), bH._3, bH._4) | |
549 | 551 | } | |
550 | 552 | ||
551 | - | let | |
552 | - | let | |
553 | - | let | |
554 | - | func | |
555 | - | then | |
556 | - | else | |
553 | + | let cl = an | |
554 | + | let cm = size(cl) | |
555 | + | let cn = $Tuple4(nil, nil, 0, 0) | |
556 | + | func co (cp,cq) = if ((cq >= cm)) | |
557 | + | then cp | |
558 | + | else cV(cp, cl[cq]) | |
557 | 559 | ||
558 | - | func | |
559 | - | then | |
560 | + | func cr (cp,cq) = if ((cq >= cm)) | |
561 | + | then cp | |
560 | 562 | else throw("List size exceeds 6") | |
561 | 563 | ||
562 | - | | |
564 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
563 | 565 | } | |
564 | 566 | ||
565 | 567 | ||
566 | - | func | |
568 | + | func cX (cY,cZ,da) = if ((cY > 0)) | |
567 | 569 | then { | |
568 | - | let | |
569 | - | if (( | |
570 | - | then throw(("This trade does not cover delivery cost of " + | |
570 | + | let db = fraction(cY, aU, aj) | |
571 | + | if ((da >= (cY - (3 * db)))) | |
572 | + | then throw(("This trade does not cover delivery cost of " + aL(da, 6))) | |
571 | 573 | else { | |
572 | - | let | |
573 | - | let | |
574 | - | let | |
575 | - | (((if (isDefined( | |
576 | - | then [ScriptTransfer(addressFromStringValue(value( | |
577 | - | else nil) :+ ScriptTransfer( | |
574 | + | let dc = O(cZ) | |
575 | + | let dd = getString(aC, dc) | |
576 | + | let de = addressFromStringValue(cZ) | |
577 | + | (((if (isDefined(dd)) | |
578 | + | then [ScriptTransfer(addressFromStringValue(value(dd)), db, ae)] | |
579 | + | else nil) :+ ScriptTransfer(de, ((cY - (3 * db)) - da), ae)) :+ ScriptTransfer(aB, db, ae)) | |
578 | 580 | } | |
579 | 581 | } | |
580 | 582 | else nil | |
581 | 583 | ||
582 | 584 | ||
583 | - | func | |
584 | - | then if ((size( | |
585 | + | func df (dg,dh,di,dj) = if ((dg > 0)) | |
586 | + | then if ((size(dh) != 1)) | |
585 | 587 | then throw("exactly 1 payment must be attached") | |
586 | 588 | else { | |
587 | - | let | |
588 | - | let | |
589 | - | if (if (!(isDefined( | |
589 | + | let dk = dh[0] | |
590 | + | let dl = dk.amount | |
591 | + | if (if (!(isDefined(dk.assetId))) | |
590 | 592 | then true | |
591 | - | else (value( | |
593 | + | else (value(dk.assetId) != ae)) | |
592 | 594 | then throw("USDT payments only!") | |
593 | 595 | else { | |
594 | - | let | |
595 | - | if (( | |
596 | - | then throw((((((("Insufficient payment! Attached=" + | |
597 | - | else if (( | |
598 | - | then throw(("Min shop trade is " + | |
596 | + | let dm = (dg + dj) | |
597 | + | if ((dl != dm)) | |
598 | + | then throw((((((("Insufficient payment! Attached=" + aL(dl, 6)) + ", required=") + aL(dg, 6)) + "+") + aL(dj, 6)) + "(delivery fee)")) | |
599 | + | else if ((am > dg)) | |
600 | + | then throw(("Min shop trade is " + aL(am, 6))) | |
599 | 601 | else { | |
600 | - | let | |
601 | - | let | |
602 | - | let | |
603 | - | (((if (isDefined( | |
604 | - | then [ScriptTransfer(addressFromStringValue(value( | |
605 | - | else nil) :+ ScriptTransfer(addressFromStringValue( | |
602 | + | let dn = fraction(dg, aU, aj) | |
603 | + | let dc = O(di) | |
604 | + | let dd = getString(aC, dc) | |
605 | + | (((if (isDefined(dd)) | |
606 | + | then [ScriptTransfer(addressFromStringValue(value(dd)), dn, ae)] | |
607 | + | else nil) :+ ScriptTransfer(addressFromStringValue(di), (dg - (3 * dn)), ae)) :+ ScriptTransfer(aB, dn, ae)) | |
606 | 608 | } | |
607 | 609 | } | |
608 | 610 | } | |
609 | - | else if ((size( | |
611 | + | else if ((size(dh) != 0)) | |
610 | 612 | then throw("No payments needed") | |
611 | 613 | else nil | |
612 | 614 | ||
613 | 615 | ||
614 | - | func | |
615 | - | let | |
616 | - | if (!(isDefined(getInteger( | |
617 | - | then throw((("NFT " + | |
616 | + | func do (dp,cZ,dq,dr,ds,dt) = { | |
617 | + | let du = value(assetInfo(fromBase58String(dp))) | |
618 | + | if (!(isDefined(getInteger(aC, N(dp))))) | |
619 | + | then throw((("NFT " + du.name) + " is not staked")) | |
618 | 620 | else { | |
619 | - | let | |
620 | - | if (( | |
621 | + | let di = valueOrErrorMessage(getString(aC, L(dp)), (("NFT " + du.name) + " is orphaned")) | |
622 | + | if ((di == cZ)) | |
621 | 623 | then throw("You cannot trade with yourself") | |
622 | 624 | else { | |
623 | - | let | |
624 | - | if ((size( | |
625 | + | let dv = split_4C(dq, ":") | |
626 | + | if ((size(dv) != 3)) | |
625 | 627 | then throw("bpOrderStr should contain exactly 2 ':' separators") | |
626 | 628 | else { | |
627 | - | let | |
628 | - | let | |
629 | - | let | |
629 | + | let dw = split(dv[0], "_") | |
630 | + | let dx = split(dv[1], "_") | |
631 | + | let dy = if ((dv[2] == "")) | |
630 | 632 | then nil | |
631 | - | else split_4C( | |
632 | - | if ((size( | |
633 | + | else split_4C(dv[2], "_") | |
634 | + | if ((size(dw) != f)) | |
633 | 635 | then throw("All 6 resources should be passed") | |
634 | - | else if ((size( | |
636 | + | else if ((size(dx) != f)) | |
635 | 637 | then throw("All 6 materials should be passed") | |
636 | 638 | else { | |
637 | - | let | |
638 | - | let | |
639 | - | let | |
640 | - | let | |
641 | - | let | |
639 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [dp], nil)) | |
640 | + | let bY = split_4C(dz, ":") | |
641 | + | let cb = split(bY[y], "_") | |
642 | + | let cc = split(bY[z], "_") | |
643 | + | let cd = if ((bY[A] == "")) | |
642 | 644 | then nil | |
643 | - | else split_4C( | |
644 | - | let | |
645 | - | let | |
646 | - | let | |
647 | - | let | |
648 | - | let | |
649 | - | let | |
645 | + | else split_4C(bY[A], "_") | |
646 | + | let dA = parseIntValue(split(bY[B], "_")[C]) | |
647 | + | let be = V(dp) | |
648 | + | let dB = bd(be) | |
649 | + | let dC = split(dB[ba], "_") | |
650 | + | let dD = split(dB[bb], "_") | |
651 | + | let dE = if ((dB[bc] == "")) | |
650 | 652 | then nil | |
651 | - | else split_4C( | |
652 | - | let | |
653 | - | let | |
654 | - | let | |
655 | - | let | |
656 | - | func | |
657 | - | then | |
658 | - | else | |
653 | + | else split_4C(dB[bc], "_") | |
654 | + | let ck = { | |
655 | + | let cl = dw | |
656 | + | let cm = size(cl) | |
657 | + | let cn = $Tuple13(nil, nil, nil, 0, 0, 0, 0, dr, cb, dC, n, false, 0) | |
658 | + | func co (cp,cq) = if ((cq >= cm)) | |
659 | + | then cp | |
660 | + | else cw(cp, cl[cq]) | |
659 | 661 | ||
660 | - | func | |
661 | - | then | |
662 | + | func cr (cp,cq) = if ((cq >= cm)) | |
663 | + | then cp | |
662 | 664 | else throw("List size exceeds 6") | |
663 | 665 | ||
664 | - | | |
666 | + | cr(co(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5), 6) | |
665 | 667 | } | |
666 | - | let | |
667 | - | let | |
668 | - | let | |
669 | - | let | |
670 | - | func | |
671 | - | then | |
672 | - | else | |
668 | + | let by = { | |
669 | + | let cl = dx | |
670 | + | let cm = size(cl) | |
671 | + | let cn = $Tuple13(nil, nil, nil, ck._4, ck._5, ck._6, 0, ds, cc, dD, o, false, ck._13) | |
672 | + | func cs (cp,cq) = if ((cq >= cm)) | |
673 | + | then cp | |
674 | + | else cw(cp, cl[cq]) | |
673 | 675 | ||
674 | - | func | |
675 | - | then | |
676 | + | func ct (cp,cq) = if ((cq >= cm)) | |
677 | + | then cp | |
676 | 678 | else throw("List size exceeds 6") | |
677 | 679 | ||
678 | - | cs( | |
680 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
679 | 681 | } | |
680 | - | let | |
682 | + | let bf = if ((size(dy) != 0)) | |
681 | 683 | then { | |
682 | - | let | |
683 | - | let | |
684 | - | let | |
685 | - | func | |
686 | - | then | |
687 | - | else | |
684 | + | let cl = dy | |
685 | + | let cm = size(cl) | |
686 | + | let cn = $Tuple13(nil, nil, nil, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
687 | + | func cu (cp,cq) = if ((cq >= cm)) | |
688 | + | then cp | |
689 | + | else cw(cp, cl[cq]) | |
688 | 690 | ||
689 | - | func | |
690 | - | then | |
691 | + | func cv (cp,cq) = if ((cq >= cm)) | |
692 | + | then cp | |
691 | 693 | else throw("List size exceeds 50") | |
692 | 694 | ||
693 | - | cu( | |
695 | + | 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) | |
694 | 696 | } | |
695 | - | else $Tuple13( | |
696 | - | let | |
697 | - | let | |
697 | + | else $Tuple13(cd, dE, dt, by._4, by._5, by._6, 0, dt, cd, dE, p, true, by._13) | |
698 | + | let dF = bf._4 | |
699 | + | let dG = if ((0 > (dA - dF))) | |
698 | 700 | then 0 | |
699 | - | else ( | |
700 | - | let | |
701 | - | let | |
702 | - | let | |
703 | - | let | |
704 | - | $Tuple10(StringEntry( | |
701 | + | else (dA - dF) | |
702 | + | let dH = makeString_2C([bY[x], makeString(ck._1, "_"), makeString(by._1, "_"), makeString_2C(bf._1, "_"), toString(dG)], ":") | |
703 | + | let dI = makeString_2C([makeString(ck._2, "_"), makeString(by._2, "_"), makeString_2C(bf._2, "_")], ":") | |
704 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, dp], nil)) | |
705 | + | let dK = aI(invoke(aC, "updateAccStats", [di, fraction(d, bf._13, ak)], nil)) | |
706 | + | $Tuple10(StringEntry(be, dI), ck._3, by._3, bf._3, bf._5, bf._6, bf._13, di, dJ, dK) | |
705 | 707 | } | |
706 | 708 | } | |
707 | 709 | } | |
708 | 710 | } | |
709 | 711 | } | |
710 | 712 | ||
711 | 713 | ||
712 | - | func | |
713 | - | let | |
714 | - | let | |
715 | - | let | |
716 | - | let | |
717 | - | let | |
718 | - | func | |
719 | - | let | |
720 | - | $Tuple3(( | |
714 | + | func dL (bh) = { | |
715 | + | let dM = (bh / 30) | |
716 | + | let dN = [dM, dM, dM, dM, dM, dM] | |
717 | + | let aH = toString(dM) | |
718 | + | let cK = [aH, aH, aH, aH, aH, aH] | |
719 | + | let cN = [0, 0, 0, 0, 0, 0] | |
720 | + | func dO (bH,dP) = { | |
721 | + | let dQ = cJ(cK, dP, dN, cN) | |
722 | + | $Tuple3((bH._1 ++ dQ._1), (bH._2 + dQ._3), (bH._3 + dQ._4)) | |
721 | 723 | } | |
722 | 724 | ||
723 | - | let | |
724 | - | let | |
725 | - | let | |
726 | - | let | |
727 | - | func | |
728 | - | then | |
729 | - | else | |
725 | + | let dR = { | |
726 | + | let cl = q | |
727 | + | let cm = size(cl) | |
728 | + | let cn = $Tuple3(nil, 0, 0) | |
729 | + | func co (cp,cq) = if ((cq >= cm)) | |
730 | + | then cp | |
731 | + | else dO(cp, cl[cq]) | |
730 | 732 | ||
731 | - | func | |
732 | - | then | |
733 | + | func cr (cp,cq) = if ((cq >= cm)) | |
734 | + | then cp | |
733 | 735 | else throw("List size exceeds 5") | |
734 | 736 | ||
735 | - | | |
737 | + | cr(co(co(co(co(co(cn, 0), 1), 2), 3), 4), 5) | |
736 | 738 | } | |
737 | - | let | |
738 | - | let | |
739 | - | let | |
740 | - | let | |
741 | - | let | |
742 | - | let | |
743 | - | $Tuple5( | |
739 | + | let dS = dR._1 | |
740 | + | let br = dR._2 | |
741 | + | let dT = dR._3 | |
742 | + | let dU = fraction(br, aV, aj) | |
743 | + | let dV = (br / 100) | |
744 | + | let dW = ((br - dV) - dU) | |
745 | + | $Tuple5(dS, dW, dU, dV, dT) | |
744 | 746 | } | |
745 | 747 | ||
746 | 748 | ||
747 | - | @Callable( | |
748 | - | func recalcLockedVolumeREADONLY ( | |
749 | - | let | |
750 | - | let | |
751 | - | $Tuple2(nil, ( | |
749 | + | @Callable(dX) | |
750 | + | func recalcLockedVolumeREADONLY (W,dz) = { | |
751 | + | let bZ = bd(V(W)) | |
752 | + | let dY = bX(dz, bZ, bZ) | |
753 | + | $Tuple2(nil, (dY._4 + dY._5)) | |
752 | 754 | } | |
753 | 755 | ||
754 | 756 | ||
755 | 757 | ||
756 | - | @Callable( | |
757 | - | func constructorV1 ( | |
758 | + | @Callable(dX) | |
759 | + | func constructorV1 (dZ) = if ((dX.caller != this)) | |
758 | 760 | then throw("Permission denied") | |
759 | - | else [StringEntry( | |
761 | + | else [StringEntry(av(), dZ)] | |
760 | 762 | ||
761 | 763 | ||
762 | 764 | ||
763 | - | @Callable( | |
764 | - | func sellResources ( | |
765 | - | let | |
766 | - | let | |
767 | - | if ((size( | |
765 | + | @Callable(dX) | |
766 | + | func sellResources (cM,cN) = { | |
767 | + | 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)) | |
768 | 770 | then throw("sellResources doesn't require any payments") | |
769 | 771 | else { | |
770 | - | let | |
771 | - | if (( | |
772 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
773 | 775 | else { | |
774 | - | let | |
775 | - | let | |
776 | - | let | |
777 | - | let | |
778 | - | let | |
779 | - | let | |
780 | - | let | |
781 | - | let | |
782 | - | let | |
783 | - | let | |
784 | - | let | |
785 | - | $Tuple2((( | |
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)) | |
786 | 788 | } | |
787 | 789 | } | |
788 | 790 | } | |
789 | 791 | ||
790 | 792 | ||
791 | 793 | ||
792 | - | @Callable( | |
793 | - | func sellResourcesWorld ( | |
794 | + | @Callable(dX) | |
795 | + | func sellResourcesWorld (P,bh) = if ((dX.caller != aE)) | |
794 | 796 | then throw("Permission denied") | |
795 | 797 | else { | |
796 | - | let | |
797 | - | let | |
798 | - | let | |
799 | - | let | |
800 | - | let | |
801 | - | let | |
802 | - | if ((0 >= | |
803 | - | then throw(("This trade does not cover delivery cost of " + | |
798 | + | let ei = dL(bh) | |
799 | + | let dS = ei._1 | |
800 | + | let dW = ei._2 | |
801 | + | let dU = ei._3 | |
802 | + | let dV = ei._4 | |
803 | + | let dT = ei._5 | |
804 | + | if ((0 >= dW)) | |
805 | + | then throw(("This trade does not cover delivery cost of " + aL(dU, 6))) | |
804 | 806 | else { | |
805 | - | let | |
806 | - | $Tuple2(((( | |
807 | + | let eh = aI(invoke(aC, "updateAccStats", [P, fraction(a, dT, ak)], nil)) | |
808 | + | $Tuple2((((dS :+ IntegerEntry(Y, (valueOrElse(getInteger(Y), 0) + dU))) :+ ScriptTransfer(aB, dV, ae)) :+ ScriptTransfer(aD, dW, ae)), $Tuple2(dW, eh)) | |
807 | 809 | } | |
808 | 810 | } | |
809 | 811 | ||
810 | 812 | ||
811 | 813 | ||
812 | - | @Callable( | |
813 | - | func sellResourcesWorldREADONLY ( | |
814 | - | let | |
815 | - | $Tuple2(nil, | |
814 | + | @Callable(dX) | |
815 | + | func sellResourcesWorldREADONLY (bh) = { | |
816 | + | let dW = dL(bh)._2 | |
817 | + | $Tuple2(nil, dW) | |
816 | 818 | } | |
817 | 819 | ||
818 | 820 | ||
819 | 821 | ||
820 | - | @Callable( | |
821 | - | func sellResourcesDuckDelivery ( | |
822 | + | @Callable(dX) | |
823 | + | func sellResourcesDuckDelivery (cM,cN,ej) = if (!(ac)) | |
822 | 824 | then throw("Delivery feature is turned off!") | |
823 | 825 | else { | |
824 | - | let | |
825 | - | let | |
826 | - | if ((size( | |
826 | + | 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)) | |
827 | 829 | then throw("sellResources doesn't require any payments") | |
828 | 830 | else { | |
829 | - | let | |
830 | - | let | |
831 | - | let | |
832 | - | let | |
833 | - | let | |
834 | - | let | |
835 | - | let | |
836 | - | let | |
837 | - | let | |
838 | - | let | |
839 | - | let | |
840 | - | let | |
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)) | |
841 | 843 | then k | |
842 | - | else | |
843 | - | let | |
844 | - | if (( | |
845 | - | then throw(("This trade does not cover delivery cost of " + | |
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))) | |
846 | 848 | else { | |
847 | - | let | |
848 | - | $Tuple2(((( | |
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)) | |
849 | 851 | } | |
850 | 852 | } | |
851 | 853 | } | |
852 | 854 | ||
853 | 855 | ||
854 | 856 | ||
855 | - | @Callable( | |
856 | - | func sellResourcesLandDelivery ( | |
857 | + | @Callable(dX) | |
858 | + | func sellResourcesLandDelivery (cM,cN,W,ej) = if (!(ac)) | |
857 | 859 | then throw("Delivery feature is turned off!") | |
858 | 860 | else { | |
859 | - | let | |
860 | - | if ((size( | |
861 | + | let ea = bF() | |
862 | + | if ((size(dX.payments) != 0)) | |
861 | 863 | then throw("sellResources doesn't require any payments") | |
862 | 864 | else { | |
863 | - | let | |
864 | - | let | |
865 | - | let | |
866 | - | if (!(isDefined(getInteger( | |
867 | - | then throw((("NFT " + | |
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")) | |
868 | 870 | else { | |
869 | - | let | |
870 | - | if (( | |
871 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
872 | + | if ((ep != P)) | |
871 | 873 | then throw((e + " is not yours")) | |
872 | 874 | else { | |
873 | - | let | |
874 | - | let | |
875 | - | let | |
876 | - | let | |
877 | - | let | |
878 | - | let | |
879 | - | let | |
880 | - | let | |
881 | - | let | |
882 | - | let | |
883 | - | let | |
884 | - | let | |
885 | - | let | |
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)) | |
886 | 888 | then k | |
887 | - | else | |
888 | - | let | |
889 | - | if (( | |
890 | - | then throw(("This trade does not cover delivery cost of " + | |
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))) | |
891 | 893 | else { | |
892 | - | let | |
893 | - | $Tuple2(((( | |
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)) | |
894 | 896 | } | |
895 | 897 | } | |
896 | 898 | } | |
897 | 899 | } | |
898 | 900 | } | |
899 | 901 | ||
900 | 902 | ||
901 | 903 | ||
902 | - | @Callable( | |
903 | - | func buyMaterials ( | |
904 | - | let | |
905 | - | let | |
906 | - | if ((size( | |
904 | + | @Callable(dX) | |
905 | + | func buyMaterials (cM,cS) = { | |
906 | + | 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)) | |
907 | 909 | then throw("exactly 1 payment must be attached") | |
908 | 910 | else { | |
909 | - | let | |
910 | - | let | |
911 | - | if (if (!(isDefined( | |
911 | + | let dk = dX.payments[0] | |
912 | + | let dl = dk.amount | |
913 | + | if (if (!(isDefined(dk.assetId))) | |
912 | 914 | then true | |
913 | - | else (value( | |
915 | + | else (value(dk.assetId) != ae)) | |
914 | 916 | then throw("USDT payments only!") | |
915 | 917 | else { | |
916 | - | let | |
917 | - | if (( | |
918 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
919 | 921 | else { | |
920 | - | let | |
921 | - | let | |
922 | - | let | |
923 | - | let | |
924 | - | let | |
925 | - | let | |
926 | - | let | |
927 | - | if (( | |
928 | - | then throw(((("Insufficient payment! Attached=" + | |
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))) | |
929 | 931 | else { | |
930 | - | let | |
931 | - | let | |
932 | - | let | |
933 | - | then [ScriptTransfer( | |
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)] | |
934 | 936 | else nil | |
935 | - | let | |
936 | - | let | |
937 | - | $Tuple2((( | |
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)) | |
938 | 940 | } | |
939 | 941 | } | |
940 | 942 | } | |
941 | 943 | } | |
942 | 944 | } | |
943 | 945 | ||
944 | 946 | ||
945 | 947 | ||
946 | - | @Callable( | |
947 | - | func buyMaterialsDuckDelivery ( | |
948 | + | @Callable(dX) | |
949 | + | func buyMaterialsDuckDelivery (cM,cS,ej) = if (!(ac)) | |
948 | 950 | then throw("Delivery feature is turned off!") | |
949 | 951 | else { | |
950 | - | let | |
951 | - | let | |
952 | - | if ((size( | |
952 | + | 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)) | |
953 | 955 | then throw("exactly 1 payment must be attached") | |
954 | 956 | else { | |
955 | - | let | |
956 | - | let | |
957 | - | if (if (!(isDefined( | |
957 | + | let dk = dX.payments[0] | |
958 | + | let dl = dk.amount | |
959 | + | if (if (!(isDefined(dk.assetId))) | |
958 | 960 | then true | |
959 | - | else (value( | |
961 | + | else (value(dk.assetId) != ae)) | |
960 | 962 | then throw("USDT payments only!") | |
961 | 963 | else { | |
962 | - | let | |
963 | - | let | |
964 | - | let | |
965 | - | let | |
966 | - | let | |
967 | - | let | |
968 | - | let | |
969 | - | let | |
970 | - | let | |
971 | - | let | |
972 | - | let | |
973 | - | let | |
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)) | |
974 | 976 | then k | |
975 | - | else | |
976 | - | let | |
977 | - | if (( | |
978 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
979 | 981 | else { | |
980 | - | let | |
981 | - | then [ScriptTransfer( | |
982 | + | let ax = if (((dl - dm) > 0)) | |
983 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
982 | 984 | else nil | |
983 | - | let | |
984 | - | let | |
985 | - | $Tuple2(((( | |
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)) | |
986 | 988 | } | |
987 | 989 | } | |
988 | 990 | } | |
989 | 991 | } | |
990 | 992 | ||
991 | 993 | ||
992 | 994 | ||
993 | - | @Callable( | |
994 | - | func buyMaterialsLandDelivery ( | |
995 | + | @Callable(dX) | |
996 | + | func buyMaterialsLandDelivery (cM,cS,W,ej) = if (!(ac)) | |
995 | 997 | then throw("Delivery feature is turned off!") | |
996 | 998 | else { | |
997 | - | let | |
998 | - | if ((size( | |
999 | + | let ea = bF() | |
1000 | + | if ((size(dX.payments) != 1)) | |
999 | 1001 | then throw("exactly 1 payment must be attached") | |
1000 | 1002 | else { | |
1001 | - | let | |
1002 | - | let | |
1003 | - | if (if (!(isDefined( | |
1003 | + | let dk = dX.payments[0] | |
1004 | + | let dl = dk.amount | |
1005 | + | if (if (!(isDefined(dk.assetId))) | |
1004 | 1006 | then true | |
1005 | - | else (value( | |
1007 | + | else (value(dk.assetId) != ae)) | |
1006 | 1008 | then throw("USDT payments only!") | |
1007 | 1009 | else { | |
1008 | - | let | |
1009 | - | let | |
1010 | - | let | |
1011 | - | if (!(isDefined(getInteger( | |
1012 | - | then throw((("NFT " + | |
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")) | |
1013 | 1015 | else { | |
1014 | - | let | |
1015 | - | if (( | |
1016 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1017 | + | if ((ep != P)) | |
1016 | 1018 | then throw((e + " is not yours")) | |
1017 | 1019 | else { | |
1018 | - | let | |
1019 | - | let | |
1020 | - | let | |
1021 | - | let | |
1022 | - | let | |
1023 | - | let | |
1024 | - | let | |
1025 | - | let | |
1026 | - | let | |
1027 | - | let | |
1028 | - | let | |
1029 | - | let | |
1030 | - | let | |
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)) | |
1031 | 1033 | then k | |
1032 | - | else | |
1033 | - | let | |
1034 | - | if (( | |
1035 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1036 | 1038 | else { | |
1037 | - | let | |
1038 | - | then [ScriptTransfer( | |
1039 | + | let ax = if (((dl - dm) > 0)) | |
1040 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1039 | 1041 | else nil | |
1040 | - | let | |
1041 | - | let | |
1042 | - | $Tuple2(((( | |
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)) | |
1043 | 1045 | } | |
1044 | 1046 | } | |
1045 | 1047 | } | |
1046 | 1048 | } | |
1047 | 1049 | } | |
1048 | 1050 | } | |
1049 | 1051 | ||
1050 | 1052 | ||
1051 | 1053 | ||
1052 | - | @Callable( | |
1053 | - | func exchangeResources ( | |
1054 | - | let | |
1055 | - | let | |
1056 | - | if ((size( | |
1054 | + | @Callable(dX) | |
1055 | + | func exchangeResources (cM) = { | |
1056 | + | 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)) | |
1057 | 1059 | then throw("exactly 1 payment must be attached") | |
1058 | 1060 | else { | |
1059 | - | let | |
1060 | - | let | |
1061 | - | if (if (!(isDefined( | |
1061 | + | let dk = dX.payments[0] | |
1062 | + | let dl = dk.amount | |
1063 | + | if (if (!(isDefined(dk.assetId))) | |
1062 | 1064 | then true | |
1063 | - | else (value( | |
1065 | + | else (value(dk.assetId) != ae)) | |
1064 | 1066 | then throw("USDT payments only!") | |
1065 | 1067 | else { | |
1066 | - | let | |
1067 | - | if (( | |
1068 | - | then throw(("Duck location type should be Factory, but is " + | |
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])) | |
1069 | 1071 | else { | |
1070 | - | let | |
1071 | - | let | |
1072 | - | let | |
1073 | - | let | |
1074 | - | let | |
1075 | - | let | |
1076 | - | let | |
1077 | - | let | |
1078 | - | if (( | |
1079 | - | then throw(((("Insufficient payment! Attached=" + | |
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))) | |
1080 | 1082 | else { | |
1081 | - | let | |
1082 | - | let | |
1083 | - | let | |
1084 | - | then [ScriptTransfer( | |
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)] | |
1085 | 1087 | else nil | |
1086 | - | let | |
1087 | - | let | |
1088 | - | $Tuple2(( | |
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)) | |
1089 | 1091 | } | |
1090 | 1092 | } | |
1091 | 1093 | } | |
1092 | 1094 | } | |
1093 | 1095 | } | |
1094 | 1096 | ||
1095 | 1097 | ||
1096 | 1098 | ||
1097 | - | @Callable( | |
1098 | - | func exchangeResourcesDuckDelivery ( | |
1099 | + | @Callable(dX) | |
1100 | + | func exchangeResourcesDuckDelivery (cM) = if (!(ac)) | |
1099 | 1101 | then throw("Delivery feature is turned off!") | |
1100 | 1102 | else { | |
1101 | - | let | |
1102 | - | let | |
1103 | - | if ((size( | |
1103 | + | 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)) | |
1104 | 1106 | then throw("exactly 1 payment must be attached") | |
1105 | 1107 | else { | |
1106 | - | let | |
1107 | - | let | |
1108 | - | if (if (!(isDefined( | |
1108 | + | let dk = dX.payments[0] | |
1109 | + | let dl = dk.amount | |
1110 | + | if (if (!(isDefined(dk.assetId))) | |
1109 | 1111 | then true | |
1110 | - | else (value( | |
1112 | + | else (value(dk.assetId) != ae)) | |
1111 | 1113 | then throw("USDT payments only!") | |
1112 | 1114 | else { | |
1113 | - | let | |
1114 | - | let | |
1115 | - | let | |
1116 | - | let | |
1117 | - | let | |
1118 | - | let | |
1119 | - | let | |
1120 | - | let | |
1121 | - | let | |
1122 | - | let | |
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)) | |
1123 | 1125 | then l | |
1124 | - | else | |
1125 | - | let | |
1126 | - | if (( | |
1127 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1128 | 1130 | else { | |
1129 | - | let | |
1130 | - | let | |
1131 | - | let | |
1132 | - | then [ScriptTransfer( | |
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)] | |
1133 | 1135 | else nil | |
1134 | - | let | |
1135 | - | let | |
1136 | - | let | |
1137 | - | $Tuple2((( | |
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)) | |
1138 | 1140 | } | |
1139 | 1141 | } | |
1140 | 1142 | } | |
1141 | 1143 | } | |
1142 | 1144 | ||
1143 | 1145 | ||
1144 | 1146 | ||
1145 | - | @Callable( | |
1146 | - | func exchangeResourcesLandDelivery ( | |
1147 | + | @Callable(dX) | |
1148 | + | func exchangeResourcesLandDelivery (cM,W) = if (!(ac)) | |
1147 | 1149 | then throw("Delivery feature is turned off!") | |
1148 | 1150 | else { | |
1149 | - | let | |
1150 | - | if ((size( | |
1151 | + | let ea = bF() | |
1152 | + | if ((size(dX.payments) != 1)) | |
1151 | 1153 | then throw("exactly 1 payment must be attached") | |
1152 | 1154 | else { | |
1153 | - | let | |
1154 | - | let | |
1155 | - | if (if (!(isDefined( | |
1155 | + | let dk = dX.payments[0] | |
1156 | + | let dl = dk.amount | |
1157 | + | if (if (!(isDefined(dk.assetId))) | |
1156 | 1158 | then true | |
1157 | - | else (value( | |
1159 | + | else (value(dk.assetId) != ae)) | |
1158 | 1160 | then throw("USDT payments only!") | |
1159 | 1161 | else { | |
1160 | - | let | |
1161 | - | let | |
1162 | - | let | |
1163 | - | if (!(isDefined(getInteger( | |
1164 | - | then throw((("NFT " + | |
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")) | |
1165 | 1167 | else { | |
1166 | - | let | |
1167 | - | if (( | |
1168 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1169 | + | if ((ep != P)) | |
1168 | 1170 | then throw((e + " is not yours")) | |
1169 | 1171 | else { | |
1170 | - | let | |
1171 | - | let | |
1172 | - | let | |
1173 | - | let | |
1174 | - | let | |
1175 | - | let | |
1176 | - | let | |
1177 | - | let | |
1178 | - | let | |
1179 | - | let | |
1180 | - | let | |
1181 | - | let | |
1182 | - | let | |
1183 | - | let | |
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)) | |
1184 | 1186 | then l | |
1185 | - | else | |
1186 | - | let | |
1187 | - | if (( | |
1188 | - | then throw((((((("Insufficient payment! Attached=" + | |
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)")) | |
1189 | 1191 | else { | |
1190 | - | let | |
1191 | - | then [ScriptTransfer( | |
1192 | + | let ax = if (((dl - dm) > 0)) | |
1193 | + | then [ScriptTransfer(dX.caller, (dl - dm), ae)] | |
1192 | 1194 | else nil | |
1193 | - | let | |
1194 | - | let | |
1195 | - | $Tuple2((( | |
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)) | |
1196 | 1198 | } | |
1197 | 1199 | } | |
1198 | 1200 | } | |
1199 | 1201 | } | |
1200 | 1202 | } | |
1201 | 1203 | } | |
1202 | 1204 | ||
1203 | 1205 | ||
1204 | 1206 | ||
1205 | - | @Callable( | |
1206 | - | func craftGoods ( | |
1207 | - | let | |
1208 | - | if ((size( | |
1207 | + | @Callable(dX) | |
1208 | + | func craftGoods (eA,eB) = { | |
1209 | + | let ea = bF() | |
1210 | + | if ((size(dX.payments) != 1)) | |
1209 | 1211 | then throw("exactly 1 payment must be attached") | |
1210 | 1212 | else { | |
1211 | - | let | |
1212 | - | let | |
1213 | - | let | |
1214 | - | if (( | |
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)) | |
1215 | 1217 | then throw("USDT payments only!") | |
1216 | - | else if (( | |
1218 | + | else if ((dl != aj)) | |
1217 | 1219 | then throw("exactly 1 USDT must be attached as payment") | |
1218 | - | else if ((0 >= | |
1220 | + | else if ((0 >= eB)) | |
1219 | 1221 | then throw("Quantity should be positive") | |
1220 | 1222 | else { | |
1221 | - | let | |
1222 | - | let | |
1223 | - | if (( | |
1224 | - | then throw(("Duck location type should be Manufactory, but is " + | |
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])) | |
1225 | 1227 | else { | |
1226 | - | let | |
1227 | - | let | |
1228 | - | let | |
1229 | - | if (if ((0 > | |
1228 | + | let eD = eb[I] | |
1229 | + | let ec = bC(S(T)) | |
1230 | + | let cR = split(ec[G], "_") | |
1231 | + | if (if ((0 > eA)) | |
1230 | 1232 | then true | |
1231 | - | else ( | |
1232 | - | then throw(("Unknown product idx=" + toString( | |
1233 | + | else (eA >= size(s))) | |
1234 | + | then throw(("Unknown product idx=" + toString(eA))) | |
1233 | 1235 | else { | |
1234 | - | let | |
1235 | - | if ((size( | |
1236 | - | then throw(("Fatal: unknown recipe: " + | |
1236 | + | let ab = split(s[eA], "_") | |
1237 | + | if ((size(ab) != v)) | |
1238 | + | then throw(("Fatal: unknown recipe: " + s[eA])) | |
1237 | 1239 | else { | |
1238 | - | let | |
1239 | - | if (( | |
1240 | - | then throw(((("This product is available in " + | |
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)) | |
1241 | 1243 | else { | |
1242 | - | let | |
1244 | + | let eF = if ((ec[H] == "")) | |
1243 | 1245 | then nil | |
1244 | - | else split_4C( | |
1245 | - | func | |
1246 | - | let | |
1247 | - | let | |
1248 | - | then | |
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] | |
1249 | 1251 | else "0" | |
1250 | - | let | |
1251 | - | let | |
1252 | - | let | |
1253 | - | then toString(( | |
1254 | - | else | |
1255 | - | $Tuple2(( | |
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)) | |
1256 | 1258 | } | |
1257 | 1259 | ||
1258 | - | let | |
1259 | - | let | |
1260 | - | let | |
1261 | - | func | |
1262 | - | then | |
1263 | - | else | |
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]) | |
1264 | 1266 | ||
1265 | - | func | |
1266 | - | then | |
1267 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1268 | + | then cp | |
1267 | 1269 | else throw("List size exceeds 50") | |
1268 | 1270 | ||
1269 | - | | |
1270 | - | func | |
1271 | - | let | |
1272 | - | let | |
1273 | - | if (( | |
1274 | - | then throw(((((((("You have " + | |
1275 | - | else if (( | |
1276 | - | then $Tuple2(( | |
1277 | - | else $Tuple2(( | |
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) | |
1278 | 1280 | } | |
1279 | 1281 | ||
1280 | - | let | |
1281 | - | let | |
1282 | - | let | |
1283 | - | let | |
1284 | - | func | |
1285 | - | then | |
1286 | - | else | |
1282 | + | let eO = { | |
1283 | + | let cl = an | |
1284 | + | let cm = size(cl) | |
1285 | + | let cn = $Tuple2(nil, 0) | |
1286 | + | func cs (cp,cq) = if ((cq >= cm)) | |
1287 | + | then cp | |
1288 | + | else eL(cp, cl[cq]) | |
1287 | 1289 | ||
1288 | - | func | |
1289 | - | then | |
1290 | + | func ct (cp,cq) = if ((cq >= cm)) | |
1291 | + | then cp | |
1290 | 1292 | else throw("List size exceeds 6") | |
1291 | 1293 | ||
1292 | - | cs( | |
1294 | + | ct(cs(cs(cs(cs(cs(cs(cn, 0), 1), 2), 3), 4), 5), 6) | |
1293 | 1295 | } | |
1294 | - | let | |
1295 | - | let | |
1296 | - | let | |
1297 | - | $Tuple2(nil, $Tuple3( | |
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)) | |
1298 | 1300 | } | |
1299 | 1301 | } | |
1300 | 1302 | } | |
1301 | 1303 | } | |
1302 | 1304 | } | |
1303 | 1305 | } | |
1304 | 1306 | } | |
1305 | 1307 | ||
1306 | 1308 | ||
1307 | 1309 | ||
1308 | - | @Callable( | |
1309 | - | func setWarehouseOrder ( | |
1310 | - | let | |
1311 | - | let | |
1312 | - | let | |
1313 | - | then | |
1310 | + | @Callable(dX) | |
1311 | + | func setWarehouseOrder (eQ,W) = { | |
1312 | + | let en = dX.originCaller | |
1313 | + | let P = toString(en) | |
1314 | + | let eP = if ((en != aB)) | |
1315 | + | then bE() | |
1314 | 1316 | else false | |
1315 | - | let | |
1316 | - | if (!(isDefined(getInteger( | |
1317 | - | then throw((("NFT " + | |
1317 | + | let eo = value(assetInfo(fromBase58String(W))) | |
1318 | + | if (!(isDefined(getInteger(aC, N(W))))) | |
1319 | + | then throw((("NFT " + eo.name) + " is not staked")) | |
1318 | 1320 | else { | |
1319 | - | let | |
1320 | - | if (if (( | |
1321 | - | then ( | |
1321 | + | let ep = valueOrErrorMessage(getString(aC, L(W)), (("NFT " + eo.name) + " is orphaned")) | |
1322 | + | if (if ((en != aB)) | |
1323 | + | then (ep != P) | |
1322 | 1324 | else false) | |
1323 | 1325 | then throw((e + " is not yours")) | |
1324 | 1326 | else { | |
1325 | - | let | |
1326 | - | let | |
1327 | - | let | |
1328 | - | let | |
1329 | - | let | |
1330 | - | let | |
1331 | - | let | |
1332 | - | let | |
1333 | - | let | |
1334 | - | let | |
1335 | - | let | |
1336 | - | let | |
1337 | - | let | |
1338 | - | if ((0 > | |
1339 | - | then throw((((((("Attempt to reserve " + toString( | |
1327 | + | let eR = split_4C(eQ, ":") | |
1328 | + | let dz = aF(invoke(aC, "getWarehouseREADONLY", [W], nil)) | |
1329 | + | let bY = split_4C(dz, ":") | |
1330 | + | let eS = split(bY[B], "_") | |
1331 | + | let eT = parseIntValue(eS[D]) | |
1332 | + | let be = V(W) | |
1333 | + | let bZ = bd(be) | |
1334 | + | let dY = bX(bY, bZ, eR) | |
1335 | + | let eU = dY._4 | |
1336 | + | let eV = dY._5 | |
1337 | + | let eW = dY._7 | |
1338 | + | let eX = (eU + eV) | |
1339 | + | let eY = ((eT - eW) - eX) | |
1340 | + | if ((0 > eY)) | |
1341 | + | 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")) | |
1340 | 1342 | else { | |
1341 | - | let | |
1342 | - | let | |
1343 | - | let | |
1344 | - | let | |
1345 | - | then if ((size( | |
1343 | + | let dH = makeString_2C([bY[x], makeString(dY._1, "_"), makeString(dY._2, "_"), makeString_2C(dY._3, "_"), toString(eX)], ":") | |
1344 | + | let dJ = aF(invoke(aC, "saveWarehouse", [dH, W], nil)) | |
1345 | + | let eZ = dY._6 | |
1346 | + | let fa = if ((eZ > 0)) | |
1347 | + | then if ((size(dX.payments) != 1)) | |
1346 | 1348 | then throw("exactly 1 payment must be attached") | |
1347 | 1349 | else { | |
1348 | - | let | |
1349 | - | let | |
1350 | - | let | |
1351 | - | if (( | |
1350 | + | let dk = dX.payments[0] | |
1351 | + | let dl = dk.amount | |
1352 | + | let eC = valueOrErrorMessage(dk.assetId, "WAVES can't be used as payment") | |
1353 | + | if ((eC != ae)) | |
1352 | 1354 | then throw("USDT payments only!") | |
1353 | - | else if (( | |
1354 | - | then throw(("Payment needed is " + toString( | |
1355 | - | else [StringEntry( | |
1355 | + | else if ((dl != eZ)) | |
1356 | + | then throw(("Payment needed is " + toString(eZ))) | |
1357 | + | else [StringEntry(be, eQ)] | |
1356 | 1358 | } | |
1357 | - | else if (( | |
1358 | - | then if ((size( | |
1359 | + | else if ((eZ == 0)) | |
1360 | + | then if ((size(dX.payments) != 0)) | |
1359 | 1361 | then throw("No payments needed") | |
1360 | - | else [StringEntry( | |
1361 | - | else if ((size( | |
1362 | + | else [StringEntry(be, eQ)] | |
1363 | + | else if ((size(dX.payments) != 0)) | |
1362 | 1364 | then throw("No payments needed") | |
1363 | - | else [ScriptTransfer(addressFromStringValue( | |
1364 | - | $Tuple2( | |
1365 | + | else [ScriptTransfer(addressFromStringValue(ep), -(eZ), ae), StringEntry(be, eQ)] | |
1366 | + | $Tuple2(fa, $Tuple2(eP, dJ)) | |
1365 | 1367 | } | |
1366 | 1368 | } | |
1367 | 1369 | } | |
1368 | 1370 | } | |
1369 | 1371 | ||
1370 | 1372 | ||
1371 | 1373 | ||
1372 | - | @Callable( | |
1373 | - | func acceptWarehouseOrder (dp, | |
1374 | - | let | |
1375 | - | let | |
1376 | - | let | |
1377 | - | let | |
1378 | - | let | |
1379 | - | let | |
1380 | - | if (( | |
1381 | - | then throw((("Duck location type is " + | |
1382 | - | else if (( | |
1383 | - | then throw(((("Your staked duck is " + | |
1374 | + | @Callable(dX) | |
1375 | + | func acceptWarehouseOrder (dq,dp,T) = { | |
1376 | + | 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)) | |
1384 | 1386 | else { | |
1385 | - | let | |
1386 | - | let | |
1387 | - | let | |
1388 | - | let | |
1389 | - | let | |
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] == "")) | |
1390 | 1392 | then nil | |
1391 | - | else split_4C( | |
1392 | - | let | |
1393 | - | let | |
1394 | - | let | |
1395 | - | let | |
1396 | - | let | |
1397 | - | let | |
1398 | - | let | |
1399 | - | let | |
1400 | - | let | |
1401 | - | let | |
1402 | - | let | |
1403 | - | let | |
1404 | - | let | |
1405 | - | let | |
1406 | - | let | |
1407 | - | let | |
1408 | - | $Tuple2(( | |
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)) | |
1409 | 1411 | } | |
1410 | 1412 | } | |
1411 | 1413 | ||
1412 | 1414 | ||
1413 | 1415 | ||
1414 | - | @Callable( | |
1415 | - | func acceptShopOrderDuckDelivery ( | |
1416 | + | @Callable(dX) | |
1417 | + | func acceptShopOrderDuckDelivery (fp,dp) = if (!(ac)) | |
1416 | 1418 | then throw("Delivery feature is turned off!") | |
1417 | 1419 | else { | |
1418 | - | let | |
1419 | - | let | |
1420 | - | let | |
1421 | - | let | |
1422 | - | let | |
1423 | - | let | |
1424 | - | let | |
1425 | - | let | |
1426 | - | let | |
1420 | + | 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] == "")) | |
1427 | 1429 | then nil | |
1428 | - | else split_4C( | |
1429 | - | let | |
1430 | - | let | |
1431 | - | let | |
1432 | - | let | |
1433 | - | let | |
1434 | - | let | |
1435 | - | let | |
1436 | - | let | |
1437 | - | let | |
1438 | - | let | |
1439 | - | let | |
1440 | - | let | |
1441 | - | let | |
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)) | |
1442 | 1444 | then k | |
1443 | - | else | |
1444 | - | let | |
1445 | - | let | |
1446 | - | let | |
1447 | - | let | |
1448 | - | let | |
1449 | - | let | |
1450 | - | let | |
1451 | - | let | |
1452 | - | $Tuple2((( | |
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)) | |
1453 | 1455 | } | |
1454 | 1456 | ||
1455 | 1457 | ||
1456 | 1458 | ||
1457 | - | @Callable( | |
1458 | - | func acceptShopOrderLandDelivery ( | |
1459 | + | @Callable(dX) | |
1460 | + | func acceptShopOrderLandDelivery (fp,dp,ft) = if (!(ac)) | |
1459 | 1461 | then throw("Delivery feature is turned off!") | |
1460 | 1462 | else { | |
1461 | - | let | |
1462 | - | let | |
1463 | - | let | |
1464 | - | let | |
1465 | - | if (!(isDefined(getInteger( | |
1466 | - | then throw((("NFT " + | |
1463 | + | 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")) | |
1467 | 1469 | else { | |
1468 | - | let | |
1469 | - | if (( | |
1470 | + | let ep = valueOrErrorMessage(getString(aC, L(ft)), (("NFT " + eo.name) + " is orphaned")) | |
1471 | + | if ((ep != cZ)) | |
1470 | 1472 | then throw((e + " is not yours")) | |
1471 | 1473 | else { | |
1472 | - | let | |
1473 | - | let | |
1474 | - | let | |
1475 | - | let | |
1476 | - | let | |
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] == "")) | |
1477 | 1479 | then nil | |
1478 | - | else split( | |
1479 | - | let | |
1480 | - | let | |
1481 | - | let | |
1482 | - | let | |
1483 | - | let | |
1484 | - | let | |
1485 | - | let | |
1486 | - | let | |
1487 | - | let | |
1488 | - | let | |
1489 | - | let | |
1490 | - | let | |
1491 | - | let | |
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)) | |
1492 | 1494 | then k | |
1493 | - | else | |
1494 | - | let | |
1495 | - | let | |
1496 | - | let | |
1497 | - | let | |
1498 | - | let | |
1499 | - | let | |
1500 | - | let | |
1501 | - | let | |
1502 | - | $Tuple2((( | |
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)) | |
1503 | 1505 | } | |
1504 | 1506 | } | |
1505 | 1507 | } | |
1506 | 1508 | ||
1507 | 1509 | ||
1508 | 1510 | ||
1509 | - | @Callable( | |
1510 | - | func sellProductsToES ( | |
1511 | - | let | |
1512 | - | if ((size( | |
1511 | + | @Callable(dX) | |
1512 | + | func sellProductsToES (cM) = { | |
1513 | + | let ea = bF() | |
1514 | + | if ((size(dX.payments) != 0)) | |
1513 | 1515 | then throw("No payments needed") | |
1514 | 1516 | else { | |
1515 | - | let | |
1516 | - | let | |
1517 | - | if (( | |
1518 | - | then throw(("Duck location type should be Airport, but is " + | |
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])) | |
1519 | 1521 | else { | |
1520 | - | let | |
1521 | - | let | |
1522 | + | let ec = bC(S(T)) | |
1523 | + | let eF = if ((ec[H] == "")) | |
1522 | 1524 | then nil | |
1523 | - | else split_4C( | |
1524 | - | let | |
1525 | - | let | |
1526 | - | let | |
1527 | - | then split_4C(value( | |
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), "_") | |
1528 | 1530 | else nil | |
1529 | - | func | |
1530 | - | let | |
1531 | - | let | |
1532 | - | then | |
1531 | + | func fy (bH,fz) = { | |
1532 | + | let bJ = bH._1 | |
1533 | + | let eB = if ((size(cM) > bJ)) | |
1534 | + | then cM[bJ] | |
1533 | 1535 | else 0 | |
1534 | - | if ((0 > | |
1536 | + | if ((0 > eB)) | |
1535 | 1537 | then throw("Quantity cannot be negative") | |
1536 | 1538 | else { | |
1537 | - | let | |
1538 | - | if ((size( | |
1539 | - | then throw(("Fatal: unknown recipe: " + | |
1539 | + | let ab = split(fz, "_") | |
1540 | + | if ((size(ab) != v)) | |
1541 | + | then throw(("Fatal: unknown recipe: " + fz)) | |
1540 | 1542 | else { | |
1541 | - | let | |
1542 | - | let | |
1543 | - | then parseIntValue( | |
1543 | + | let fA = (i * w) | |
1544 | + | let fB = if ((size(fx) > bJ)) | |
1545 | + | then parseIntValue(fx[bJ]) | |
1544 | 1546 | else 0 | |
1545 | - | let | |
1546 | - | if (( | |
1547 | - | then throw(((("Warehouse can buy only " + toString( | |
1547 | + | let fC = (fA - fB) | |
1548 | + | if ((eB > fC)) | |
1549 | + | then throw(((("Warehouse can buy only " + toString(fC)) + " of ") + p[bJ])) | |
1548 | 1550 | else { | |
1549 | - | let | |
1550 | - | let | |
1551 | - | let | |
1552 | - | then parseIntValue( | |
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]) | |
1553 | 1555 | else 0 | |
1554 | - | if (( | |
1555 | - | then throw(((("You have only " + toString( | |
1556 | - | else $Tuple5(( | |
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))) | |
1557 | 1559 | } | |
1558 | 1560 | } | |
1559 | 1561 | } | |
1560 | 1562 | } | |
1561 | 1563 | ||
1562 | - | let | |
1563 | - | let | |
1564 | - | let | |
1565 | - | let | |
1566 | - | func | |
1567 | - | then | |
1568 | - | else | |
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]) | |
1569 | 1571 | ||
1570 | - | func | |
1571 | - | then | |
1572 | + | func cr (cp,cq) = if ((cq >= cm)) | |
1573 | + | then cp | |
1572 | 1574 | else throw("List size exceeds 50") | |
1573 | 1575 | ||
1574 | - | | |
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) | |
1575 | 1577 | } | |
1576 | - | let | |
1577 | - | let | |
1578 | - | let | |
1579 | - | $Tuple2([StringEntry( | |
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)) | |
1580 | 1582 | } | |
1581 | 1583 | } | |
1582 | 1584 | } | |
1583 | 1585 | ||
1584 | 1586 | ||
1585 | 1587 | ||
1586 | - | @Callable( | |
1587 | - | func updateEsStorage ( | |
1588 | + | @Callable(dX) | |
1589 | + | func updateEsStorage (fF) = if ((dX.caller != aC)) | |
1588 | 1590 | then throw("Permission denied") | |
1589 | - | else $Tuple2([StringEntry( | |
1591 | + | else $Tuple2([StringEntry(X(), fF)], fF) | |
1590 | 1592 | ||
1591 | 1593 | ||
1592 | 1594 | ||
1593 | - | @Callable( | |
1594 | - | func updateDeliveryLocked ( | |
1595 | + | @Callable(dX) | |
1596 | + | func updateDeliveryLocked (fG) = if ((dX.caller != aC)) | |
1595 | 1597 | then throw("Permission denied") | |
1596 | - | else $Tuple2([IntegerEntry( | |
1598 | + | else $Tuple2([IntegerEntry(Z, fG)], fG) | |
1597 | 1599 | ||
1598 | 1600 | ||
1599 | 1601 | ||
1600 | - | @Callable( | |
1601 | - | func sendDeliveryReward ( | |
1602 | + | @Callable(dX) | |
1603 | + | func sendDeliveryReward (P) = if ((dX.caller != aC)) | |
1602 | 1604 | then throw("Permission denied") | |
1603 | 1605 | else { | |
1604 | - | let el = valueOrElse(getInteger(X), 0) | |
1605 | - | let fG = valueOrElse(getInteger(Y), 0) | |
1606 | - | $Tuple2([ScriptTransfer(addressFromStringValue(O), k, ad), IntegerEntry(X, (el - k)), IntegerEntry(Y, (fG - k))], k) | |
1606 | + | let em = valueOrElse(getInteger(Y), 0) | |
1607 | + | let fH = valueOrElse(getInteger(Z), 0) | |
1608 | + | let fI = (k * m) | |
1609 | + | let fJ = invoke(aE, "sendAcres", [P, fI], nil) | |
1610 | + | $Tuple2([IntegerEntry(Y, (em - k)), IntegerEntry(Z, (fH - k))], fJ) | |
1607 | 1611 | } | |
1608 | 1612 | ||
1609 | 1613 |
github/deemru/w8io/169f3d6 963.41 ms ◑