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