tx · 3wQ8pjGoxB995d3EYL98dkcif5V53i2GoLKQSw62f6sH

3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep:  -0.03200000 Waves

2023.05.30 03:25 [2599984] smart account 3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep > SELF 0.00000000 Waves

{ "type": 13, "id": "3wQ8pjGoxB995d3EYL98dkcif5V53i2GoLKQSw62f6sH", "fee": 3200000, "feeAssetId": null, "timestamp": 1685406353907, "version": 2, "chainId": 84, "sender": "3N8y4wxX3JC4TdrCJBXX16SjWf6X256hrep", "senderPublicKey": "7v5L7QkXxfkirALdyqmox38QCsa9jtfAtgUfHTh34eWq", "proofs": [ "454DboysMj2kqbR16tptSn5GBdWcofVQfAw4xMhnfTztGEAcpCSiqUeKYeueuP1GUBGLXncLNk9vhEQ5GBofFiZw" ], "script": "base64:BgIxCAISBAoCCBgSAwoBCBIECgIRERIECgIRERIDCgEREgQKAgEBEgQKAggIEgUKAwgICFkAA1NFUAICX18ABU1VTFQ2AMCEPQAFTVVMVDcAgK3iBAAFTVVMVDgAgMLXLwAGTVVMVDEwAIDIr6AlAAVjaGFpbgkAyQECCQDKAQIIBQR0aGlzBWJ5dGVzAAEAAQALdXNkdEFzc2V0SWQEByRtYXRjaDAFBWNoYWluAwkAAAIBAVcFByRtYXRjaDABIITaerIIAz9O0bvKju6Lk7zJgt0LXfoHlqjUI/moD/+5AwkAAAIBAVQFByRtYXRjaDABIFWx2J9yh4Lv5eNbjawFq2XemkOhLxa7BfMat4el8cUYCQACAQINVW5rbm93biBjaGFpbgAVZGVmYXVsdFJlc3RBZGRyZXNzU3RyBAckbWF0Y2gwBQVjaGFpbgMJAAACAQFXBQckbWF0Y2gwAiMzUFFDdXZGYnZoNExrUFVucm5VMXozam5iQTFwOW0zV05odgMJAAACAQFUBQckbWF0Y2gwAiMzTXVta0dHenRDS0FYcFdEcXhrZGRvZnFYU1VicVFrdlNKeQkAAgECDVVua25vd24gY2hhaW4BD2dldFN0cmluZ09yRmFpbAIHYWRkcmVzcwNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQdhZGRyZXNzBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUHYWRkcmVzcwkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQxnZXRJbnRPckVsc2UCA2tleQpkZWZhdWx0VmFsCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFA2tleQUKZGVmYXVsdFZhbAARSWR4Q2ZnU3Rha2luZ0RhcHAAAQARSWR4Q2ZnRWNvbm9teURhcHAAAgAUSWR4Q2ZnR292ZXJuYW5jZURhcHAAAwEKa2V5UmVzdENmZwACDiVzX19yZXN0Q29uZmlnAQ5rZXlSZXN0QWRkcmVzcwACDCVzX19yZXN0QWRkcgERcmVhZFJlc3RDZmdPckZhaWwBBHJlc3QJALwJAgkBD2dldFN0cmluZ09yRmFpbAIFBHJlc3QJAQprZXlSZXN0Q2ZnAAUDU0VQARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCB3Jlc3RDZmcDaWR4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQdyZXN0Q2ZnBQNpZHgJAKwCAgIqUmVzdCBjZmcgZG9lc24ndCBjb250YWluIGFkZHJlc3MgYXQgaW5kZXggCQCkAwEFA2lkeAAMcmVzdENvbnRyYWN0CQERQGV4dHJOYXRpdmUoMTA2MikBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAQ5rZXlSZXN0QWRkcmVzcwAFFWRlZmF1bHRSZXN0QWRkcmVzc1N0cgAHcmVzdENmZwkBEXJlYWRSZXN0Q2ZnT3JGYWlsAQUMcmVzdENvbnRyYWN0AA9zdGFraW5nQ29udHJhY3QJARhnZXRDb250cmFjdEFkZHJlc3NPckZhaWwCBQdyZXN0Q2ZnBRFJZHhDZmdTdGFraW5nRGFwcAAPREVGQVVMVExPQ0FUSU9OAg9BZnJpY2FfRl9BZnJpY2EABk5VTVJFUwAGABNGQUNUT1JZTUFYV0FSRUhPVVNFAIDIr6AlABBSRVNPVVJDRVBSSUNFTUlOANW1AgAKTUlOUEFZTUVOVACQTgAOU0VMTE1VTFRJUExJRVIAyAEADUJVWU1VTFRJUExJRVIArAIACkxBTkRQUkVGSVgCBExBTkQACkRVQ0tQUkVGSVgCBERVQ0sADFdITVVMVElQTElFUgCAyK+gJQAKQVVDVElPTkZFRQCQTgAOTUlOU0hPUFBBWU1FTlQAoI0GAAhyZXNUeXBlcwkAzAgCAgNPaWwJAMwIAgIDT3JlCQDMCAICBFdvb2QJAMwIAgIEU2FuZAkAzAgCAgRDbGF5CQDMCAICB09yZ2FuaWMFA25pbAAIbWF0VHlwZXMJAMwIAgIERnVlbAkAzAgCAgVNZXRhbAkAzAgCAgVQbGFuawkAzAgCAgVHbGFzcwkAzAgCAgdQbGFzdGljCQDMCAICB1Byb3RlaW4FA25pbAAJcHJvZFR5cGVzCQDMCAICDUZpcnN0IEFpZCBLaXQJAMwIAgIIQmFja3BhY2sJAMwIAgILRm9vZCBSYXRpb24JAMwIAgIISmV0IFBhY2sJAMwIAgIGU2hpZWxkBQNuaWwACmNvbnRpbmVudHMJAMwIAgIIQW1lcmljYXMJAMwIAgIGRXVyb3BlCQDMCAICBEFzaWEJAMwIAgIGQWZyaWNhCQDMCAICB09jZWFuaWEFA25pbAAQcHJvZHVjdGlvbk1hdHJpeAkAzAgCAhIxXzFfMV8yXzJfNV8xXzEwXzAJAMwIAgITMl8yXzJfNF80XzEwXzFfMTBfMAkAzAgCAhMzXzNfM182XzZfMTVfMV8xMF8wCQDMCAICEzJfNV81XzJfN181XzJfMTAwXzEJAMwIAgIXNF8xMF8xMF80XzE0XzEwXzJfMTAwXzEJAMwIAgIXNl8xNV8xNV82XzIxXzE1XzJfMTAwXzEJAMwIAgISMV8xXzFfMV8xXzhfMV8xMF8yCQDMCAICEzJfMl8yXzJfMl8xNl8xXzEwXzIJAMwIAgITM18zXzNfM18zXzI0XzFfMTBfMgkAzAgCAhM5XzlfMV81XzVfMV81XzEwMF8zCQDMCAICFzE4XzE4XzJfMTBfMTBfMl81XzEwMF8zCQDMCAICFzI3XzI3XzNfMTVfMTVfM181XzEwMF8zCQDMCAICEjJfMl8xXzJfMl8yXzFfMTBfNAkAzAgCAhI0XzRfMl80XzRfNF8xXzEwXzQJAMwIAgISNl82XzNfNl82XzZfMV8xMF80BQNuaWwAD2NvbnRJZHhBbWVyaWNhcwAAAA1jb250SWR4RXVyb3BlAAEAC2NvbnRJZHhBc2lhAAIADWNvbnRJZHhBZnJpY2EAAwAOY29udElkeE9jZWFuaWEABAANcmVjaXBlSWR4RnVlbAAAAA5yZWNpcGVJZHhNZXRhbAABAA5yZWNpcGVJZHhQbGFuawACAA5yZWNpcGVJZHhHbGFzcwADABByZWNpcGVJZHhQbGFzdGljAAQAEHJlY2lwZUlkeFByb3RlaW4ABQAPcmVjaXBlSWR4V2VpZ2h0AAYAEXJlY2lwZUlkeFBhY2tzaXplAAcAEnJlY2lwZUlkeENvbnRpbmVudAAIAR5rZXlGYWN0b3J5V2FyZWhvdXNlQnlJZEFuZFR5cGUCCWZhY3RvcnlJZAdyZXNUeXBlCQCsAgIJAKwCAgkArAICAhtmYWN0b3J5V2hCeUNvbnRpbmVudEFuZFJlc18FCWZhY3RvcnlJZAIBXwkApAMBBQdyZXNUeXBlAQ5rZXlPcmRlckJ5TGFuZAELbGFuZEFzc2V0SWQJAKwCAgIKbGFuZE9yZGVyXwULbGFuZEFzc2V0SWQBFGtleVN0YWtlZER1Y2tCeU93bmVyAQlvd25lckFkZHIJAKwCAgISc3Rha2VkRHVja0J5T3duZXJfBQlvd25lckFkZHIBEWtleUJhY2twYWNrQnlEdWNrAQtkdWNrQXNzZXRJZAkArAICAgliYWNrUGFja18FC2R1Y2tBc3NldElkAQ9rZXlEdWNrTG9jYXRpb24BC2R1Y2tBc3NldElkCQCsAgICDWR1Y2tMb2NhdGlvbl8FC2R1Y2tBc3NldElkAQprZXlCbG9ja2VkAAIQY29udHJhY3RzQmxvY2tlZAEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQdhc3NldElkCQCsAgICCW5mdE93bmVyXwUHYXNzZXRJZAEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEHYXNzZXRJZAkArAICAgtzdGFrZWRUaW1lXwUHYXNzZXRJZAEPa2V5QWRkcmVzc1JlZkJ5AQRhZGRyCQCsAgICCWFjY1JlZkJ5XwUEYWRkcgAPbG9jSWR4Q29udGluZW50AAAACmxvY0lkeFR5cGUAAQAIbG9jSWR4SWQAAgAKYnBJZHhMZXZlbAAAAAhicElkeFJlcwABAAhicElkeE1hdAACAAlicElkeFByb2QAAwALd2hJZHhMZXZlbHMAAAAId2hJZHhSZXMAAQAId2hJZHhNYXQAAgAJd2hJZHhQcm9kAAMACXdoSWR4TE9GVAAEAAl2b2xMb2NrZWQAAAALdm9sT2NjdXBpZWQAAQAHdm9sRnJlZQACAAh2b2xUb3RhbAADAAlvcmRJZHhSZXMAAAAJb3JkSWR4TWF0AAEACm9yZElkeFByb2QAAgEIYXNTdHJpbmcBAXYEByRtYXRjaDAFAXYDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwBQFzCQACAQIYZmFpbCB0byBjYXN0IGludG8gU3RyaW5nAQhnZXRPcmRlcgEGb3JkS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAKIIAQUGb3JkS2V5AjAwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDowQDBfMEAwXzBAMF8wQDBfMEAwXzBAMDoCAToJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQlvcmRJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQlvcmRJZHhSZXMCFzBAMF8wQDBfMEAwXzBAMF8wQDBfMEAwCQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUJb3JkSWR4TWF0AgFfBQZOVU1SRVMJAJEDAgUBcAUJb3JkSWR4TWF0AhcwQDBfMEAwXzBAMF8wQDBfMEAwXzBAMAkAzAgCCQCRAwIFAXAFCm9yZElkeFByb2QFA25pbAEIdG9Wb2x1bWUDBmFtb3VudAdwa2dTaXplCWlzUHJvZHVjdAMFCWlzUHJvZHVjdAQEcGtncwMJAGcCBQZhbW91bnQAAAkAaQIJAGUCCQBkAgUGYW1vdW50BQdwa2dTaXplAAEFB3BrZ1NpemUJAQEtAQkAaQIJAGUCCQBkAgkBAS0BBQZhbW91bnQFB3BrZ1NpemUAAQUHcGtnU2l6ZQkAaAIFBHBrZ3MFBU1VTFQ4BQZhbW91bnQBDHNlbGxJbnRlcm5hbAQFbG9jSWQHcmVzVHlwZQZhbW91bnQIbWluUHJpY2UEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFB3Jlc1R5cGUEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEAnIwAwkAZgIFAncwBRNGQUNUT1JZTUFYV0FSRUhPVVNFAAADCQBmAgkAZAIFAncwBQZhbW91bnQFE0ZBQ1RPUllNQVhXQVJFSE9VU0UJAGUCBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQJ3MAUGYW1vdW50BAx1c2R0UmVjZWl2ZWQJAGQCCQBrAwUCcjAJAGUCCQBoAgUOU0VMTE1VTFRJUExJRVIFEFJFU09VUkNFUFJJQ0VNSU4JAGsDCQBkAgkAaAIAZAUCdzAJAGgCADIFAnIwBRBSRVNPVVJDRVBSSUNFTUlOBRNGQUNUT1JZTUFYV0FSRUhPVVNFBQZNVUxUMTAJAGsDCQBlAgUGYW1vdW50BQJyMAUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgEBW1pbjk5CQBlAgUIbWluUHJpY2UJAGkCBQhtaW5QcmljZQBkAwkAZgIJAGgCBQVtaW45OQUGYW1vdW50CQBoAgUMdXNkdFJlY2VpdmVkBQVNVUxUOAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIPQWN0dWFsIHByaWNlID0gCQCkAwEFDHVzZHRSZWNlaXZlZAIDIC8gCQCkAwEFBmFtb3VudAIOIDwgbWluUHJpY2UgPSAJAKQDAQUIbWluUHJpY2UCAywgKAUFbG9jSWQCAiwgCQCRAwIFCHJlc1R5cGVzBQdyZXNUeXBlAgEpCQCUCgIJAQxJbnRlZ2VyRW50cnkCBQV3aEtleQkAZAIFAncwBQZhbW91bnQFDHVzZHRSZWNlaXZlZAELYnV5SW50ZXJuYWwEBWxvY0lkB21hdFR5cGUGYW1vdW50CG1heFByaWNlBAV3aEtleQkBHmtleUZhY3RvcnlXYXJlaG91c2VCeUlkQW5kVHlwZQIFBWxvY0lkBQdtYXRUeXBlBAJ3MAkBC3ZhbHVlT3JFbHNlAgkAnwgBBQV3aEtleQAABAJtMQMJAGYCBQJ3MAUTRkFDVE9SWU1BWFdBUkVIT1VTRQkAlwMBCQDMCAIFBmFtb3VudAkAzAgCCQBlAgUCdzAFE0ZBQ1RPUllNQVhXQVJFSE9VU0UFA25pbAAABAJtMAkAlwMBCQDMCAIFAncwCQDMCAIJAGUCBQZhbW91bnQFAm0xBQNuaWwEAW0JAGQCBQJtMAUCbTEECXVzZHRTcGVudAkAZAIJAGsDBQJtMAkAZQIJAGgCBQ1CVVlNVUxUSVBMSUVSBRBSRVNPVVJDRVBSSUNFTUlOCQBrAwkAZQIJAGgCAGQFAncwCQBoAgAyBQJtMAUQUkVTT1VSQ0VQUklDRU1JTgUTRkFDVE9SWU1BWFdBUkVIT1VTRQUGTVVMVDEwCQBrAwUCbTEJAGgCAAIFEFJFU09VUkNFUFJJQ0VNSU4FBU1VTFQ4BAZtYXgxMDEJAGQCBQhtYXhQcmljZQkAaQIFCG1heFByaWNlAGQDCQBmAgkAaAIFCXVzZHRTcGVudAUFTVVMVDgJAGgCBQZtYXgxMDEFAW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICD0FjdHVhbCBwcmljZSA9IAkApAMBBQl1c2R0U3BlbnQCAyAvIAkApAMBBQFtAg4gPiBtYXhQcmljZSA9IAkApAMBBQhtYXhQcmljZQIDLCAoBQVsb2NJZAICLCAJAJEDAgUIbWF0VHlwZXMFB21hdFR5cGUCASkJAJUKAwkBDEludGVnZXJFbnRyeQIFBXdoS2V5CQBlAgUCdzAFAW0FCXVzZHRTcGVudAUBbQELZ2V0QmFja3BhY2sBBWJwS2V5BAFwCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0BQVicEtleQIaMDowXzBfMF8wXzBfMDowXzBfMF8wXzBfMDoCAToJAMwIAgkApAMBCQELdmFsdWVPckVsc2UCCQC2CQEJAJEDAgUBcAUKYnBJZHhMZXZlbAAACQDMCAIDCQAAAgkAkAMBCQC1CQIJAJEDAgUBcAUIYnBJZHhSZXMCAV8FBk5VTVJFUwkAkQMCBQFwBQhicElkeFJlcwILMF8wXzBfMF8wXzAJAMwIAgMJAAACCQCQAwEJALUJAgkAkQMCBQFwBQhicElkeE1hdAIBXwUGTlVNUkVTCQCRAwIFAXAFCGJwSWR4TWF0AgswXzBfMF8wXzBfMAkAzAgCCQCRAwIFAXAFCWJwSWR4UHJvZAUDbmlsAQxjaGVja0Jsb2NrZWQAAwkBC3ZhbHVlT3JFbHNlAgkAmwgCBQ9zdGFraW5nQ29udHJhY3QJAQprZXlCbG9ja2VkAAcJAAIBAh9Db250cmFjdHMgYXJlIHVuZGVyIG1haW50ZW5hbmNlBQR1bml0AQlzZXRDb21tb24CA2FjYwRpdGVtBAFqCAUDYWNjAl8xBAZpc1Byb2QIBQNhY2MCXzgEB3BrZ1NpemUDBQZpc1Byb2QJAQ1wYXJzZUludFZhbHVlAQkAkQMCCQC1CQIJAJEDAgUQcHJvZHVjdGlvbk1hdHJpeAUBagIBXwURcmVjaXBlSWR4UGFja3NpemUAAAQJaXRlbVBhcnRzCQC1CQIFBGl0ZW0CAUADCQECIT0CCQCQAwEFCWl0ZW1QYXJ0cwACCQACAQIuSW5jb3JyZWN0IG9yZGVyIGZvcm1hdCwgc2hvdWxkIGJlIGFtb3VudEBwcmljZQQIbmV3T3JkQW0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAAQIbmV3T3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQlpdGVtUGFydHMAAQQJbmV3T3JkVXNkCQBrAwUIbmV3T3JkQW0FCG5ld09yZFByBQVNVUxUOAQJbmV3T3JkVm9sCQEIdG9Wb2x1bWUDBQhuZXdPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kBAZ3aEluaXQDCQBmAgkAkAMBCAUDYWNjAl82BQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAggFA2FjYwJfNgUBagAABAtjdXJPcmRQYXJ0cwkAtQkCAwkAZgIJAJADAQgFA2FjYwJfNwUBagkAkQMCCAUDYWNjAl83BQFqAgMwQDACAUAECGN1ck9yZEFtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgULY3VyT3JkUGFydHMAAAQIY3VyT3JkUHIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQtjdXJPcmRQYXJ0cwABAwMJAGYCAAAFCGN1ck9yZFByBgkAZgIAAAUIbmV3T3JkUHIJAAIBAhdQcmljZSBjYW4ndCBiZSBuZWdhdGl2ZQQJY3VyT3JkVXNkCQBrAwUIY3VyT3JkQW0FCGN1ck9yZFByBQVNVUxUOAQJY3VyT3JkVm9sCQEIdG9Wb2x1bWUDBQhjdXJPcmRBbQUHcGtnU2l6ZQUGaXNQcm9kAwkAAAIFCG5ld09yZEFtAAADCQBmAgUIY3VyT3JkQW0AAAkAmgoICQBkAgUBagABCQDNCAIIBQNhY2MCXzIJAKQDAQUGd2hJbml0CAUDYWNjAl8zCAUDYWNjAl80CQBlAggFA2FjYwJfNQUJY3VyT3JkVXNkCAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFCGN1ck9yZEFtCAUDYWNjAl8zCAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CAUDYWNjAl83BQZpc1Byb2QDCQBmAgUIbmV3T3JkQW0AAAMJAGYCAAAFCGN1ck9yZEFtCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBlAgUGd2hJbml0BQhjdXJPcmRBbQkAZAIIBQNhY2MCXzMFCW5ld09yZFZvbAgFA2FjYwJfNAkAZAIIBQNhY2MCXzUFCW5ld09yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBBQZ3aEluaXQJAGQCCAUDYWNjAl8zBQluZXdPcmRWb2wIBQNhY2MCXzQJAGUCCQBkAggFA2FjYwJfNQUJbmV3T3JkVXNkBQljdXJPcmRVc2QIBQNhY2MCXzYIBQNhY2MCXzcFBmlzUHJvZAMJAGYCAAAFCGN1ck9yZEFtBAZhbURpZmYJAGUCBQhjdXJPcmRBbQUIbmV3T3JkQW0DCQBmAgAACQBlAgUGd2hJbml0BQZhbURpZmYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQUGYW1EaWZmAhogZnJvbSB3YXJlaG91c2UsIGJ1dCBvbmx5IAkApAMBBQZ3aEluaXQCCiBhdmFpbGFibGUJAJoKCAkAZAIFAWoAAQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCBQZ3aEluaXQFBmFtRGlmZggFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAgFA2FjYwJfNQgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kAwkAZgIAAAkAZAIFBndoSW5pdAUIbmV3T3JkQW0JAAIBCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gdGFrZSAJAKQDAQkBAS0BBQhuZXdPcmRBbQIaIGZyb20gd2FyZWhvdXNlLCBidXQgb25seSAJAKQDAQUGd2hJbml0AgogYXZhaWxhYmxlCQCaCggJAGQCBQFqAAEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgUGd2hJbml0BQhuZXdPcmRBbQgFA2FjYwJfMwkAZQIIBQNhY2MCXzQFCW5ld09yZFZvbAkAZQIIBQNhY2MCXzUFCWN1ck9yZFVzZAgFA2FjYwJfNggFA2FjYwJfNwUGaXNQcm9kAQtzZXRJbnRlcm5hbAMJY3VycmVudFdoCmN1cnJlbnRPcmQGbmV3T3JkBAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVu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cnNlSW50VmFsdWUBCQCRAwIFCndoT3JkUGFydHMAAAQHd2hPcmRQcgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCndoT3JkUGFydHMAAQMDCQECIT0CBQdicE9yZEFtAAAJAQIhPQIFB2JwT3JkUHIFB3doT3JkUHIHCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICClByaWNlcyBvZiAJAJEDAggFA2FjYwNfMTEFAWoCFyBkb24ndCBtYXRjaCEgV0ggcHJpY2U9CQCkAwEFB3doT3JkUHICDSwgeW91ciBwcmljZT0JAKQDAQUHYnBPcmRQcgQId2hPcmRVc2QJAGsDBQd3aE9yZEFtBQd3aE9yZFByBQVNVUxUOAQIZGVsdGFWb2wJAQh0b1ZvbHVtZQMFB2JwT3JkQW0FB3BrZ1NpemUFBmlzUHJvZAMJAAACBQdicE9yZEFtAAAJAJ4KDAkAzQgCCAUDYWNjAl8xCQCkAwEFBndoSW5pdAkAzQgCCAUDYWNjAl8yCQCRAwIIBQNhY2MDXzEwBQFqCQDNCAIIBQNhY2MCXzMJAKQDAQUGYnBJbml0CAUDYWNjAl80CAUDYWNjAl81CAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAMJAGYCBQdicE9yZEFtAAADCQBmAgAABQd3aE9yZEFtAwkAZgIFB2JwT3JkQW0JAQEtAQUHd2hPcmRBbQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg9BdHRlbXB0IHRvIGJ1eSAJAKQDAQUHYnBPcmRBbQIEIG9mIAkAkQMCCAUDYWNjA18xMQUBagIbLCBidXQgd2FyZWhvdXNlIG9ubHkgc2VsbHMgCQCkAwEJAQEtAQUHd2hPcmRBbQkAngoMCQDNCAIIBQNhY2MCXzEJAKQDAQUGd2hJbml0CQDNCAIIBQNhY2MCXzIJAKwCAgkArAICCQCkAwEJAGQCBQd3aE9yZEFtBQdicE9yZEFtAgFACQCkAwEFB3doT3JkUHIJAM0IAggFA2FjYwJfMwkApAMBCQBkAgUGYnBJbml0BQdicE9yZEFtCQBkAggFA2FjYwJfNAUIZGVsdGFWb2wIBQNhY2MCXzUJAGQCCAUDYWNjAl82BQhicE9yZFVzZAkAZAIIBQNhY2MCXzcAAQgFA2FjYwJfOAgFA2FjYwJfOQgFA2FjYwNfMTAIBQNhY2MDXzExBQZpc1Byb2QJAAIBCQCsAgIJAKwCAgIPQXR0ZW1wdCB0byBidXkgCQCRAwIIBQNhY2MDXzExBQFqAiAgd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3Qgc2VsbCBpdAMJAGYCBQd3aE9yZEFtAAADCQBmAgkBAS0BBQdicE9yZEFtBQd3aE9yZEFtCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAgQgb2YgCQCRAwIIBQNhY2MDXzExBQFqAhosIGJ1dCB3YXJlaG91c2Ugb25seSBidXlzIAkApAMBBQd3aE9yZEFtAwkAZgIJAQEtAQUHYnBPcmRBbQUGYnBJbml0CQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICEEF0dGVtcHQgdG8gc2VsbCAJAKQDAQkBAS0BBQdicE9yZEFtAhQsIGJ1dCB5b3Ugb25seSBoYXZlIAkApAMBBQZicEluaXQCBCBvZiAJAJEDAggFA2FjYwNfMTEFAWoJAJ4KDAkAzQgCCAUDYWNjAl8xCQCkAwEJAGUCBQZ3aEluaXQFB2JwT3JkQW0JAM0IAggFA2FjYwJfMgkArAICCQCsAgIJAKQDAQkAZAIFB3doT3JkQW0FB2JwT3JkQW0CAUAJAKQDAQUHd2hPcmRQcgkAzQgCCAUDYWNjAl8zCQCkAwEJAGQCBQZicEluaXQFB2JwT3JkQW0JAGUCCAUDYWNjAl80BQhkZWx0YVZvbAkAZQIIBQNhY2MCXzUFCGJwT3JkVXNkCAUDYWNjAl82CQBkAggFA2FjYwJfNwABCAUDYWNjAl84CAUDYWNjAl85CAUDYWNjA18xMAgFA2FjYwNfMTEFBmlzUHJvZAkAAgEJAKwCAgkArAICAhBBdHRlbXB0IHRvIHNlbGwgCQCRAwIIBQNhY2MDXzExBQFqAh8gd2hpbGUgd2FyZWhvdXNlIGRvZXNuJ3QgYnV5IGl0CAFpARpyZWNhbGNMb2NrZWRWb2x1bWVSRUFET05MWQILbGFuZEFzc2V0SWQCd2gECmN1cnJlbnRPcmQJAQhnZXRPcmRlcgEJAQ5rZXlPcmRlckJ5TGFuZAEFC2xhbmRBc3NldElkBAF6CQELc2V0SW50ZXJuYWwDBQJ3aAUKY3VycmVudE9yZAUKY3VycmVudE9yZAkAlAoCBQNuaWwJAGQCCAUBegJfNAgFAXoCXzUBaQENY29uc3RydWN0b3JWMQEIcmVzdEFkZHIDCQECIT0CCAUBaQZjYWxsZXIFBHRoaXMJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAkAzAgCCQELU3RyaW5nRW50cnkCCQEOa2V5UmVzdEFkZHJlc3MABQhyZXN0QWRkcgUDbmlsAWkBDXNlbGxSZXNvdXJjZXMCB2Ftb3VudHMJbWluUHJpY2VzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAipzZWxsUmVzb3VyY2VzIGRvZXNuJ3QgcmVxdWlyZSBhbnkgcGF5bWVudHMEC2N1ckxvY2F0aW9uCQC1CQIJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEPa2V5RHVja0xvY2F0aW9uAQULZHVja0Fzc2V0SWQFD0RFRkFVTFRMT0NBVElPTgIBXwMJAQIhPQIJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUCAUYJAAIBCQCsAgICLUR1Y2sgbG9jYXRpb24gdHlwZSBzaG91bGQgYmUgRmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQFbG9jSWQJAJEDAgULY3VyTG9jYXRpb24FCGxvY0lkeElkBAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB3Jlc0xpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhSZXMCAV8KAQVhZGRlcgIDYWNjAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglZb3UgaGF2ZSAJAJEDAgUHcmVzTGlzdAUBagIEIG9mIAkAkQMCBQhyZXNUeXBlcwUBagIULCBidXQgdHJpZWQgdG8gc2VsbCAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIlWW91IHRyaWVkIHRvIHNlbGwgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQkAkQMCBQdhbW91bnRzBQFqAwkAZgIJAJEDAgUHYW1vdW50cwUBagAABAFiCQEMc2VsbEludGVybmFsBAUFbG9jSWQFAWoJAJEDAgUHYW1vdW50cwUBagkAkQMCBQltaW5QcmljZXMFAWoJAJUKAwkAzQgCCAUDYWNjAl8xCAUBYgJfMQkAzQgCCAUDYWNjAl8yCQCkAwEJAGUCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVzTGlzdAUBagkAkQMCBQdhbW91bnRzBQFqCQBkAggFA2FjYwJfMwgFAWICXzIJAJUKAwgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB3Jlc0xpc3QFAWoIBQNhY2MCXzMEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBWFkZGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQZtZXJnZWQCXzICAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsCQCUCgIJAM0IAggFBm1lcmdlZAJfMQkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDGJ1eU1hdGVyaWFscwIHYW1vdW50cwltYXhQcmljZXMEB2Jsb2NrZWQJAQxjaGVja0Jsb2NrZWQAAwkAAAIFB2Jsb2NrZWQFB2Jsb2NrZWQEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECImV4YWN0bHkgMSBwYXltZW50IG11c3QgYmUgYXR0YWNoZWQEA3BtdAkAkQMCCAUBaQhwYXltZW50cwAABANhbXQIBQNwbXQGYW1vdW50BApwbXRBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIIBQNwbXQHYXNzZXRJZAIeV0FWRVMgY2FuJ3QgYmUgdXNlZCBhcyBwYXltZW50AwkBAiE9AgUKcG10QXNzZXRJZAULdXNkdEFzc2V0SWQJAAIBAhNVU0RUIHBheW1lbnRzIG9ubHkhBAtjdXJMb2NhdGlvbgkAtQkCCQELdmFsdWVPckVsc2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBD2tleUR1Y2tMb2NhdGlvbgEFC2R1Y2tBc3NldElkBQ9ERUZBVUxUTE9DQVRJT04CAV8DCQECIT0CCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlAgFGCQACAQkArAICAi1EdWNrIGxvY2F0aW9uIHR5cGUgc2hvdWxkIGJlIEZhY3RvcnksIGJ1dCBpcyAJAJEDAgULY3VyTG9jYXRpb24FCmxvY0lkeFR5cGUEBWxvY0lkCQCRAwIFC2N1ckxvY2F0aW9uBQhsb2NJZHhJZAQLY3VycmVudFBhY2sJAQtnZXRCYWNrcGFjawEJARFrZXlCYWNrcGFja0J5RHVjawEFC2R1Y2tBc3NldElkBAdtYXRMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4TWF0AgFfCgEIbVVwZGF0ZXICA2FjYwFqAwkAZgIAAAkAkQMCBQdhbW91bnRzBQFqCQACAQkArAICCQCsAgIJAKwCAgIkWW91IHRyaWVkIHRvIGJ1eSBuZWdhdGl2ZSBhbW91bnQgb2YgCQCRAwIFCG1hdFR5cGVzBQFqAgI6IAkApAMBCQCRAwIFB2Ftb3VudHMFAWoDCQBmAgkAkQMCBQdhbW91bnRzBQFqAAAEAWIJAQtidXlJbnRlcm5hbAQFBWxvY0lkBQFqCQCRAwIFB2Ftb3VudHMFAWoJAJEDAgUJbWF4UHJpY2VzBQFqCQCVCgMJAM0IAggFA2FjYwJfMQgFAWICXzEJAM0IAggFA2FjYwJfMgkApAMBCQBkAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB21hdExpc3QFAWoIBQFiAl8zCQBkAggFA2FjYwJfMwgFAWICXzIJAJUKAwgFA2FjYwJfMQkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCG1VcGRhdGVyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAZgIIBQZtZXJnZWQCXzMFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAKQDAQUDYW10AgssIHJlcXVpcmVkPQkApAMBCAUGbWVyZ2VkAl8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIIBQZtZXJnZWQCXzICAV8JAMwIAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kBQNuaWwCAToEBnJlc3VsdAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDnVwZGF0ZUJhY2twYWNrCQDMCAIFC2R1Y2tBc3NldElkCQDMCAIFB25ld1BhY2sFA25pbAUDbmlsBARyZXN0AwkAZgIJAGUCBQNhbXQIBQZtZXJnZWQCXzMAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIJAGUCBQNhbXQIBQZtZXJnZWQCXzMFC3VzZHRBc3NldElkBQNuaWwFA25pbAQQYWN0aXZpdGllc0Ftb3VudAkAaQIIBQZtZXJnZWQCXzMAZAkAlAoCCQDNCAIJAM4IAggFBm1lcmdlZAJfMQUEcmVzdAkBDlNjcmlwdFRyYW5zZmVyAwUMcmVzdENvbnRyYWN0BRBhY3Rpdml0aWVzQW1vdW50BQt1c2R0QXNzZXRJZAUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEWV4Y2hhbmdlUmVzb3VyY2VzAQdhbW91bnRzBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAtkdWNrQXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFGtleVN0YWtlZER1Y2tCeU93bmVyAQkApQgBCAUBaQZjYWxsZXICHFlvdSBkb24ndCBoYXZlIGEgZHVjayBzdGFrZWQDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBRgkAAgEJAKwCAgItRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBGYWN0b3J5LCBidXQgaXMgCQCRAwIFC2N1ckxvY2F0aW9uBQpsb2NJZHhUeXBlBAVsb2NJZAkAkQMCBQtjdXJMb2NhdGlvbgUIbG9jSWR4SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBCQERa2V5QmFja3BhY2tCeUR1Y2sBBQtkdWNrQXNzZXRJZAQHcmVzTGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwIBXwQHbWF0TGlzdAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeE1hdAIBXwoBCWV4Y2hhbmdlcgIDYWNjAWoEBXdoS2V5CQEea2V5RmFjdG9yeVdhcmVob3VzZUJ5SWRBbmRUeXBlAgUFbG9jSWQFAWoEAncwCQELdmFsdWVPckVsc2UCCQCfCAEFBXdoS2V5AAAEA2FtagkAkQMCBQdhbW91bnRzBQFqAwkAZgIFA2FtagkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJWW91IGhhdmUgCQCRAwIFB3Jlc0xpc3QFAWoCBCBvZiAJAJEDAgUIcmVzVHlwZXMFAWoCGCwgYnV0IHRyaWVkIHRvIGV4Y2hhbmdlIAkApAMBBQNhbWoDCQBmAgAABQNhbWoJAAIBCQCsAgIJAKwCAgkArAICAilZb3UgdHJpZWQgdG8gZXhjaGFuZ2UgbmVnYXRpdmUgYW1vdW50IG9mIAkAkQMCBQhyZXNUeXBlcwUBagICOiAJAKQDAQUDYW1qAwkAZgIFA2FtagAACQCWCgQJAM0IAggFA2FjYwJfMQkApAMBCQBlAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFB3Jlc0xpc3QFAWoFA2FtagkAzQgCCAUDYWNjAl8yCQCkAwEJAGQCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHbWF0TGlzdAUBagUDYW1qCQBkAggFA2FjYwJfMwkAawMFA2FtagUQUkVTT1VSQ0VQUklDRU1JTgUFTVVMVDgJAM0IAggFA2FjYwJfNAkBDEludGVnZXJFbnRyeQIFBXdoS2V5BQJ3MAkAlgoECQDNCAIIBQNhY2MCXzEJAJEDAgUHcmVzTGlzdAUBagkAzQgCCAUDYWNjAl8yCQCRAwIFB21hdExpc3QFAWoIBQNhY2MCXzMIBQNhY2MCXzQEBm1lcmdlZAoAAiRsCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFBQNuaWwKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCWCgQFA25pbAUDbmlsAAAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZXhjaGFuZ2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAwkAZgIIBQZtZXJnZWQCXzMFA2FtdAkAAgEJAKwCAgkArAICCQCsAgICH0luc3VmZmljaWVudCBwYXltZW50ISBBdHRhY2hlZD0JAKQDAQUDYW10AgssIHJlcXVpcmVkPQkApAMBCAUGbWVyZ2VkAl8zBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQC5CQIIBQZtZXJnZWQCXzECAV8JAMwIAgkAuQkCCAUGbWVyZ2VkAl8yAgFfCQDMCAIJAJEDAgULY3VycmVudFBhY2sFCWJwSWR4UHJvZAUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAQEcmVzdAMJAGYCCQBlAgUDYW10CAUGbWVyZ2VkAl8zAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyCQBlAgUDYW10CAUGbWVyZ2VkAl8zBQt1c2R0QXNzZXRJZAUDbmlsBQNuaWwEEGFjdGl2aXRpZXNBbW91bnQJAGkCCAUGbWVyZ2VkAl8zAGQJAJQKAgkAzQgCCQDOCAIFBHJlc3QIBQZtZXJnZWQCXzQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAUQYWN0aXZpdGllc0Ftb3VudAULdXNkdEFzc2V0SWQFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQpjcmFmdEdvb2RzAgpwcm9kdWN0SWR4CHF1YW50aXR5BAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFBU1VTFQ2CQACAQIqZXhhY3RseSAxIFVTRFQgbXVzdCBiZSBhdHRhY2hlZCBhcyBwYXltZW50AwkAZwIAAAUIcXVhbnRpdHkJAAIBAhtRdWFudGl0eSBzaG91bGQgYmUgcG9zaXRpdmUEC2R1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBCQClCAEIBQFpBmNhbGxlcgIcWW91IGRvbid0IGhhdmUgYSBkdWNrIHN0YWtlZAQLY3VyTG9jYXRpb24JALUJAgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBQtkdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OAgFfAwkBAiE9AgkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQIBTQkAAgEJAKwCAgIxRHVjayBsb2NhdGlvbiB0eXBlIHNob3VsZCBiZSBNYW51ZmFjdG9yeSwgYnV0IGlzIAkAkQMCBQtjdXJMb2NhdGlvbgUKbG9jSWR4VHlwZQQEY29udAkAkQMCBQtjdXJMb2NhdGlvbgUPbG9jSWR4Q29udGluZW50BAtjdXJyZW50UGFjawkBC2dldEJhY2twYWNrAQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEB21hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8DAwkAZgIAAAUKcHJvZHVjdElkeAYJAGcCBQpwcm9kdWN0SWR4CQCQAwEFEHByb2R1Y3Rpb25NYXRyaXgJAAIBCQCsAgICFFVua25vd24gcHJvZHVjdCBpZHg9CQCkAwEFCnByb2R1Y3RJZHgEBnJlY2lwZQkAtQkCCQCRAwIFEHByb2R1Y3Rpb25NYXRyaXgFCnByb2R1Y3RJZHgCAV8DCQECIT0CCQCQAwEFBnJlY2lwZQkAZAIFBk5VTVJFUwADCQACAQkArAICAhdGYXRhbDogdW5rbm93biByZWNpcGU6IAkAkQMCBRBwcm9kdWN0aW9uTWF0cml4BQpw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Y2MwBQNuaWwKAQUkZjFfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCHByb2R1Y2VyAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYxXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhNMaXN0IHNpemUgZXhjZWVkcyA2CQEFJGYxXzICCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECCQEFJGYxXzECBQUkYWNjMAAAAAEAAgADAAQABQAGBAduZXdQYWNrCQC5CQIJAMwIAgkAkQMCBQtjdXJyZW50UGFjawUKYnBJZHhMZXZlbAkAzAgCCQCRAwIFC2N1cnJlbnRQYWNrBQhicElkeFJlcwkAzAgCCQC5CQIFBm1lcmdlZAIBXwkAzAgCCQC5CQIFBmJwUHJvZAIBXwUDbmlsAgE6BAZyZXN1bHQJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQduZXdQYWNrBQNuaWwFA25pbAkAlAoCBQNuaWwFBnJlc3VsdAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARFzZXRXYXJlaG91c2VPcmRlcgIMY2FyZ29MaXN0U3RyC2xhbmRBc3NldElkBAR1c2VyCAUBaQxvcmlnaW5DYWxsZXIEBGFkZHIJAKUIAQUEdXNlcgQGcmVzdWx0AwkBAiE9AgUEdXNlcgUMcmVzdENvbnRyYWN0CQEMY2hlY2tCbG9ja2VkAAcEBWFzc2V0CQEFdmFsdWUBCQDsBwEJANkEAQULbGFuZEFzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFD3N0YWtpbmdDb250cmFjdAkBFmtleVN0YWtlZFRpbWVCeUFzc2V0SWQBBQtsYW5kQXNzZXRJZAkAAgEJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQEBW93bmVyCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEVa2V5TGFuZEFzc2V0SWRUb093bmVyAQULbGFuZEFzc2V0SWQJAKwCAgkArAICAgRORlQgCAUFYXNzZXQEbmFtZQIMIGlzIG9ycGhhbmVkAwMJAQIhPQIFBHVzZXIFDHJlc3RDb250cmFjdAkBAiE9AgUFb3duZXIFBGFkZHIHCQACAQkArAICBQpMQU5EUFJFRklYAg0gaXMgbm90IHlvdXJzBApjYXJnb1BhcnRzCQC8CQIFDGNhcmdvTGlzdFN0cgIBOgQCd2gJAQhhc1N0cmluZwEJAPwHBAUPc3Rha2luZ0NvbnRyYWN0AhRnZXRXYXJlaG91c2VSRUFET05MWQkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwECWN1cnJlbnRXaAkAvAkCBQJ3aAIBOgQEbG9mdAkAtQkCCQCRAwIFCWN1cnJlbnRXaAUJd2hJZHhMT0ZUAgFfBAp3aE9jY3VwaWVkCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUEbG9mdAULdm9sT2NjdXBpZWQEB3doVG90YWwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsb2Z0BQh2b2xUb3RhbAQGb3JkS2V5CQEOa2V5T3JkZXJCeUxhbmQBBQtsYW5kQXNzZXRJZAQKY3VycmVudE9yZAkBCGdldE9yZGVyAQUGb3JkS2V5BAF6CQELc2V0SW50ZXJuYWwDBQljdXJyZW50V2gFCmN1cnJlbnRPcmQFCmNhcmdvUGFydHMEC2J1eVZvbFNhbGRvCAUBegJfNAQMc2VsbFZvbFNhbGRvCAUBegJfNQQId2hMb2NrZWQJAGQCBQtidXlWb2xTYWxkbwUMc2VsbFZvbFNhbGRvBAZ3aEZyZWUJAGUCCQBlAgUHd2hUb3RhbAUKd2hPY2N1cGllZAUId2hMb2NrZWQDCQBmAgULYnV5Vm9sU2FsZG8FBndoRnJlZQkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgITQXR0ZW1wdCB0byByZXNlcnZlIAkApAMBBQtidXlWb2xTYWxkbwIgIHNwYWNlIGZvciBidXkgb3JkZXJzLCBidXQgb25seSAJAKQDAQUGd2hGcmVlAhsgd2FyZWhvdXNlIGVtcHR5IHNwYWNlIGxlZnQDCQBmAgUMc2VsbFZvbFNhbGRvBQp3aE9jY3VwaWVkCQACAQkArAICCQCsAgIJAKwCAgkArAICAhBBdHRlbXB0IHRvIGxvY2sgCQCkAwEFDHNlbGxWb2xTYWxkbwIhIHNwYWNlIGZvciBzZWxsIG9yZGVycywgYnV0IG9ubHkgCQCkAwEFCndoT2NjdXBpZWQCGSB3YXJlaG91c2Ugc3BhY2Ugb2NjdXBpZWQEBXdoU3RyCQC6CQIJAMwIAgkAkQMCBQljdXJyZW50V2gFC3doSWR4TGV2ZWxzCQDMCAIJALkJAggFAXoCXzECAV8JAMwIAgkAuQkCCAUBegJfMgIBXwkAzAgCCQC5CQIIBQF6Al8zAgFfCQDMCAIJAKQDAQUId2hMb2NrZWQFA25pbAIBOgQGd2hTYXZlCQD8BwQFD3N0YWtpbmdDb250cmFjdAINc2F2ZVdhcmVob3VzZQkAzAgCBQV3aFN0cgkAzAgCBQtsYW5kQXNzZXRJZAUDbmlsBQNuaWwDCQAAAgUGd2hTYXZlBQZ3aFNhdmUECHVzZFNhbGRvCAUBegJfNgQHYWN0aW9ucwMJAGYCBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwABCQACAQIiZXhhY3RseSAxIHBheW1lbnQgbXVzdCBiZSBhdHRhY2hlZAQDcG10CQCRAwIIBQFpCHBheW1lbnRzAAAEA2FtdAgFA3BtdAZhbW91bnQECnBtdEFzc2V0SWQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAggFA3BtdAdhc3NldElkAh5XQVZFUyBjYW4ndCBiZSB1c2VkIGFzIHBheW1lbnQDCQECIT0CBQpwbXRBc3NldElkBQt1c2R0QXNzZXRJZAkAAgECE1VTRFQgcGF5bWVudHMgb25seSEDCQECIT0CBQNhbXQFCHVzZFNhbGRvCQACAQkArAICAhJQYXltZW50IG5lZWRlZCBpcyAJAKQDAQUIdXNkU2FsZG8JAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQxjYXJnb0xpc3RTdHIFA25pbAMJAAACBQh1c2RTYWxkbwAAAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQISTm8gcGF5bWVudHMgbmVlZGVkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAAJAAIBAhJObyBwYXltZW50cyBuZWVkZWQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUFb3duZXIJAQEtAQUIdXNkU2FsZG8FC3VzZHRBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBm9yZEtleQUMY2FyZ29MaXN0U3RyBQNuaWwJAJQKAgUHYWN0aW9ucwUGcmVzdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFGFjY2VwdFdhcmVob3VzZU9yZGVyAwpicE9yZGVyU3RyC2xhbmRBc3NldElkC2R1Y2tBc3NldElkBAdibG9ja2VkCQEMY2hlY2tCbG9ja2VkAAMJAAACBQdibG9ja2VkBQdibG9ja2VkBAZjYWxsZXIIBQFpDG9yaWdpbkNhbGxlcgQKY2FsbGVyQWRkcgkApQgBBQZjYWxsZXIEEXN0YWtlZER1Y2tBc3NldElkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUPc3Rha2luZ0NvbnRyYWN0CQEUa2V5U3Rha2VkRHVja0J5T3duZXIBBQpjYWxsZXJBZGRyAhxZb3UgZG9uJ3QgaGF2ZSBhIGR1Y2sgc3Rha2VkBAtjdXJMb2NhdGlvbgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQ9zdGFraW5nQ29udHJhY3QJAQ9rZXlEdWNrTG9jYXRpb24BBRFzdGFrZWREdWNrQXNzZXRJZAUPREVGQVVMVExPQ0FUSU9OBANsb2MJALUJAgkBBXZhbHVlAQULY3VyTG9jYXRpb24CAV8DCQECIT0CCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIBTAkAAgEJAKwCAgkArAICAhZEdWNrIGxvY2F0aW9uIHR5cGUgaXMgCQCRAwIFA2xvYwUKbG9jSWR4VHlwZQIRLCBidXQgc2hvdWxkIGJlIEwDCQECIT0CBRFzdGFrZWREdWNrQXNzZXRJZAULZHVja0Fzc2V0SWQJAAIBCQCsAgIJAKwCAgkArAICAhRZb3VyIHN0YWtlZCBkdWNrIGlzIAURc3Rha2VkRHVja0Fzc2V0SWQCDSwgYnV0IHBhc3NlZCAFC2R1Y2tBc3NldElkBAlsYW5kQXNzZXQJAQV2YWx1ZQEJAOwHAQkA2QQBBQtsYW5kQXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUPc3Rha2luZ0NvbnRyYWN0CQEWa2V5U3Rha2VkVGltZUJ5QXNzZXRJZAEFC2xhbmRBc3NldElkCQACAQkArAICCQCsAgICBE5GVCAIBQlsYW5kQXNzZXQEbmFtZQIOIGlzIG5vdCBzdGFrZWQECWxhbmRPd25lcgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFD3N0YWtpbmdDb250cmFjdAkBFWtleUxhbmRBc3NldElkVG9Pd25lcgEFC2xhbmRBc3NldElkCQCsAgIJAKwCAgIETkZUIAgFCWxhbmRBc3NldARuYW1lAgwgaXMgb3JwaGFuZWQDCQAAAgUJbGFuZE93bmVyBQpjYWxsZXJBZGRyCQACAQIeWW91IGNhbm5vdCB0cmFkZSB3aXRoIHlvdXJzZWxmBAxicE9yZGVyUGFydHMJALwJAgUKYnBPcmRlclN0cgIBOgMJAQIhPQIJAJADAQUMYnBPcmRlclBhcnRzAAMJAAIBAjJicE9yZGVyU3RyIHNob3VsZCBjb250YWluIGV4YWN0bHkgMiAnOicgc2VwYXJhdG9ycwQIYnBPcmRSZXMJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAAIBXwQIYnBPcmRNYXQJALUJAgkAkQMCBQxicE9yZGVyUGFydHMAAQIBXwQJYnBPcmRQcm9kAwkAAAIJAJEDAgUMYnBPcmRlclBhcnRzAAICAAUDbmlsCQC1CQIJAJEDAgUMYnBPcmRlclBhcnRzAAICAV8DCQECIT0CCQCQAwEFCGJwT3JkUmVzBQZOVU1SRVMJAAIBAiBBbGwgNiByZXNvdXJjZXMgc2hvdWxkIGJlIHBhc3NlZAMJAQIhPQIJAJADAQUIYnBPcmRNYXQFBk5VTVJFUwkAAgECIEFsbCA2IG1hdGVyaWFscyBzaG91bGQgYmUgcGFzc2VkBAJ3aAkBCGFzU3RyaW5nAQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCFGdldFdhcmVob3VzZVJFQURPTkxZCQDMCAIFC2xhbmRBc3NldElkBQNuaWwFA25pbAQJY3VycmVudFdoCQC8CQIFAndoAgE6BAljdXJyV2hSZXMJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4UmVzAgFfBAljdXJyV2hNYXQJALUJAgkAkQMCBQljdXJyZW50V2gFCHdoSWR4TWF0AgFfBApjdXJyV2hQcm9kAwkAAAIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAAUDbmlsCQC1CQIJAJEDAgUJY3VycmVudFdoBQl3aElkeFByb2QCAV8ED2N1cnJXaExvY2tlZFZvbAkBDXBhcnNlSW50VmFsdWUBCQCRAwIJALUJAgkAkQMCBQljdXJyZW50V2gFCXdoSWR4TE9GVAIBXwUJdm9sTG9ja2VkBAVicEtleQkBEWtleUJhY2twYWNrQnlEdWNrAQULZHVja0Fzc2V0SWQEC2N1cnJlbnRQYWNrCQELZ2V0QmFja3BhY2sBBQVicEtleQQJYnBSZXNMaXN0CQC1CQIJAJEDAgULY3VycmVudFBhY2sFCGJwSWR4UmVzAgFfBAlicE1hdExpc3QJALUJAgkAkQMCBQtjdXJyZW50UGFjawUIYnBJZHhNYXQCAV8ECmJwUHJvZExpc3QDCQAAAgkAkQMCBQtjdXJyZW50UGFjawUJYnBJZHhQcm9kAgAFA25pbAkAtQkCCQCRAwIFC2N1cnJlbnRQYWNrBQlicElkeFByb2QCAV8EBm9yZEtleQkBDmtleU9yZGVyQnlMYW5kAQULbGFuZEFzc2V0SWQEBXdoT3JkCQEIZ2V0T3JkZXIBBQZvcmRLZXkECHdoT3JkUmVzCQC1CQIJAJEDAgUFd2hPcmQFCW9yZElkeFJlcwIBXwQId2hPcmRNYXQJALUJAgkAkQMCBQV3aE9yZAUJb3JkSWR4TWF0AgFfBAl3aE9yZFByb2QDCQAAAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIABQNuaWwJALUJAgkAkQMCBQV3aE9yZAUKb3JkSWR4UHJvZAIBXwQBcgoAAiRsBQhicE9yZFJlcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJ4KDAUDbmlsBQNuaWwFA25pbAAAAAAAAAAABQlicFJlc0xpc3QFCWN1cnJXaFJlcwUId2hPcmRSZXMFCHJlc1R5cGVzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEMYWNjZXB0Q29tbW9uAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRh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ALkJAggFAXICXzMCAV8JAMwIAgkAuQkCCAUBbQJfMwIBXwkAzAgCCQC5CQIIBQFwAl8zAgFfBQNuaWwCAToEBndoU2F2ZQkA/AcEBQ9zdGFraW5nQ29udHJhY3QCDXNhdmVXYXJlaG91c2UJAMwIAgUFd2hTdHIJAMwIAgULbGFuZEFzc2V0SWQFA25pbAUDbmlsAwkAAAIFBndoU2F2ZQUGd2hTYXZlBAZicFNhdmUJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Ag51cGRhdGVCYWNrcGFjawkAzAgCBQtkdWNrQXNzZXRJZAkAzAgCBQhuZXdCcFN0cgUDbmlsBQNuaWwDCQAAAgUGYnBTYXZlBQZicFNhdmUEB2FjdGlvbnMJAMwIAgkBC1N0cmluZ0VudHJ5AgUGb3JkS2V5BQtuZXdXaE9yZFN0cgUDbmlsBA11c2RXaDJCcFNhbGRvCAUBcAJfNQQIYWN0aW9uczEDCQBmAgUNdXNkV2gyQnBTYWxkbwAABAt1c2RXaDJCcEZlZQkAawMIBQFwAl81BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQpjYWxsZXJBZGRyBAVyZWZCeQkAnQgCBQ9zdGFraW5nQ29udHJhY3QFCHJlZkJ5S2V5AwkBCWlzRGVmaW5lZAEFBXJlZkJ5CQDNCAIJAM0IAgkAzQgCBQdhY3Rpb25zCQEOU2NyaXB0VHJhbnNmZXIDBQZjYWxsZXIJAGUCCAUBcAJfNQkAaAIAAwULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZFdoMkJwRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFB2FjdGlvbnMJAQ5TY3JpcHRUcmFuc2ZlcgMFBmNhbGxlcgkAZQIIBQFwAl81CQBoAgADBQt1c2RXaDJCcEZlZQULdXNkdEFzc2V0SWQJAQ5TY3JpcHRUcmFuc2ZlcgMFDHJlc3RDb250cmFjdAULdXNkV2gyQnBGZWUFC3VzZHRBc3NldElkBQdhY3Rpb25zBA11c2RCcDJXaFNhbGRvCAUBcAJfNgMJAGYCBQ11c2RCcDJXaFNhbGRvAAADCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAiJleGFjdGx5IDEgcGF5bWVudCBtdXN0IGJlIGF0dGFjaGVkBANwbXQJAJEDAggFAWkIcGF5bWVudHMAAAQDYW10CAUDcG10BmFtb3VudAQKcG10QXNzZXRJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCAUDcG10B2Fzc2V0SWQCHldBVkVTIGNhbid0IGJlIHVzZWQgYXMgcGF5bWVudAMJAQIhPQIFCnBtdEFzc2V0SWQFC3VzZHRBc3NldElkCQACAQITVVNEVCBwYXltZW50cyBvbmx5IQMJAQIhPQIFA2FtdAUNdXNkQnAyV2hTYWxkbwkAAgEJAKwCAgISUGF5bWVudCBuZWVkZWQgaXMgCQCkAwEFDXVzZEJwMldoU2FsZG8DCQBmAgUOTUlOU0hPUFBBWU1FTlQFA2FtdAkAAgEJAKwCAgIbUGF5bWVudCBzaG91bGQgYmUgYXQgbGVhc3QgCQCkAwEFDk1JTlNIT1BQQVlNRU5UBAt1c2RCcDJXaEZlZQkAawMIBQFwAl82BQpBVUNUSU9ORkVFBQVNVUxUNgQIcmVmQnlLZXkJAQ9rZXlBZGRyZXNzUmVmQnkBBQlsYW5kT3duZXIEBXJlZkJ5CQCdCAIFD3N0YWtpbmdDb250cmFjdAUIcmVmQnlLZXkDCQEJaXNEZWZpbmVkAQUFcmVmQnkJAM0IAgkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUFcmVmQnkFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAkAzQgCCQDNCAIFCGFjdGlvbnMxCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQlsYW5kT3duZXIJAGUCCAUBcAJfNgkAaAIAAwULdXNkQnAyV2hGZWUFC3VzZHRBc3NldElkCQEOU2NyaXB0VHJhbnNmZXIDBQxyZXN0Q29udHJhY3QFC3VzZEJwMldoRmVlBQt1c2R0QXNzZXRJZAMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECEk5vIHBheW1lbnRzIG5lZWRlZAUIYWN0aW9uczEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4Azc6S8Q==", "height": 2599984, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: B8vJvYsJ28VXeNALv6AxiAaYbAdG7YL6RNst99G9qEAY Next: 9idqNa8EzcRooxoadRjadZNMYUuB1PMRVf8nvPdT6BgE Diff:
OldNewDifferences
774774 let bK = split_4C(cv, ":")
775775 let dn = split(bK[aG], "_")
776776 let do = parseIntValue(dn[aI])
777- let dp = parseIntValue(dn[aJ])
777+ let dp = parseIntValue(dn[aK])
778778 let aS = ai(aj)
779779 let bL = aR(aS)
780780 let cw = bJ(bK, bL, dm)
781781 let dq = cw._4
782782 let dr = cw._5
783- if ((dq > dp))
784- then throw((((("Attempt to reserve " + toString(dq)) + " space for buy orders, but only ") + toString(dp)) + " warehouse empty space left"))
783+ let ds = (dq + dr)
784+ let dt = ((dp - do) - ds)
785+ if ((dq > dt))
786+ then throw((((("Attempt to reserve " + toString(dq)) + " space for buy orders, but only ") + toString(dt)) + " warehouse empty space left"))
785787 else if ((dr > do))
786788 then throw((((("Attempt to lock " + toString(dr)) + " space for sell orders, but only ") + toString(do)) + " warehouse space occupied"))
787789 else {
788- let ds = makeString_2C([bK[aC], makeString(cw._1, "_"), makeString(cw._2, "_"), makeString(cw._3, "_"), toString((dq + dr))], ":")
789- let dt = invoke(z, "saveWarehouse", [ds, aj], nil)
790- if ((dt == dt))
790+ let du = makeString_2C([bK[aC], makeString(cw._1, "_"), makeString(cw._2, "_"), makeString(cw._3, "_"), toString(ds)], ":")
791+ let dv = invoke(z, "saveWarehouse", [du, aj], nil)
792+ if ((dv == dv))
791793 then {
792- let du = cw._6
793- let dv = if ((du > 0))
794+ let dw = cw._6
795+ let dx = if ((dw > 0))
794796 then if ((size(cu.payments) != 1))
795797 then throw("exactly 1 payment must be attached")
796798 else {
799801 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
800802 if ((cM != g))
801803 then throw("USDT payments only!")
802- else if ((cL != du))
803- then throw(("Payment needed is " + toString(du)))
804+ else if ((cL != dw))
805+ then throw(("Payment needed is " + toString(dw)))
804806 else [StringEntry(aS, di)]
805807 }
806- else if ((du == 0))
808+ else if ((dw == 0))
807809 then if ((size(cu.payments) != 0))
808810 then throw("No payments needed")
809811 else [StringEntry(aS, di)]
810812 else if ((size(cu.payments) != 0))
811813 then throw("No payments needed")
812- else [ScriptTransfer(addressFromStringValue(dl), -(du), g), StringEntry(aS, di)]
813- $Tuple2(dv, cI)
814+ else [ScriptTransfer(addressFromStringValue(dl), -(dw), g), StringEntry(aS, di)]
815+ $Tuple2(dx, cI)
814816 }
815817 else throw("Strict value is not equal to itself.")
816818 }
821823
822824
823825 @Callable(cu)
824-func acceptWarehouseOrder (dw,aj,an) = {
826+func acceptWarehouseOrder (dy,aj,an) = {
825827 let cA = br()
826828 if ((cA == cA))
827829 then {
828- let dx = cu.originCaller
829- let dy = toString(dx)
830- let dz = valueOrErrorMessage(getString(z, ak(dy)), "You don't have a duck staked")
831- let cB = valueOrElse(getString(z, ao(dz)), A)
832- let dA = split(value(cB), "_")
833- if ((dA[aw] != "L"))
834- then throw((("Duck location type is " + dA[aw]) + ", but should be L"))
835- else if ((dz != an))
836- then throw(((("Your staked duck is " + dz) + ", but passed ") + an))
830+ let dz = cu.originCaller
831+ let dA = toString(dz)
832+ let dB = valueOrErrorMessage(getString(z, ak(dA)), "You don't have a duck staked")
833+ let cB = valueOrElse(getString(z, ao(dB)), A)
834+ let dC = split(value(cB), "_")
835+ if ((dC[aw] != "L"))
836+ then throw((("Duck location type is " + dC[aw]) + ", but should be L"))
837+ else if ((dB != an))
838+ then throw(((("Your staked duck is " + dB) + ", but passed ") + an))
837839 else {
838- let dB = value(assetInfo(fromBase58String(aj)))
840+ let dD = value(assetInfo(fromBase58String(aj)))
839841 if (!(isDefined(getInteger(z, as(aj)))))
840- then throw((("NFT " + dB.name) + " is not staked"))
842+ then throw((("NFT " + dD.name) + " is not staked"))
841843 else {
842- let dC = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dB.name) + " is orphaned"))
843- if ((dC == dy))
844+ let dE = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dD.name) + " is orphaned"))
845+ if ((dE == dA))
844846 then throw("You cannot trade with yourself")
845847 else {
846- let dD = split_4C(dw, ":")
847- if ((size(dD) != 3))
848+ let dF = split_4C(dy, ":")
849+ if ((size(dF) != 3))
848850 then throw("bpOrderStr should contain exactly 2 ':' separators")
849851 else {
850- let dE = split(dD[0], "_")
851- let dF = split(dD[1], "_")
852- let dG = if ((dD[2] == ""))
852+ let dG = split(dF[0], "_")
853+ let dH = split(dF[1], "_")
854+ let dI = if ((dF[2] == ""))
853855 then nil
854- else split(dD[2], "_")
855- if ((size(dE) != B))
856+ else split(dF[2], "_")
857+ if ((size(dG) != B))
856858 then throw("All 6 resources should be passed")
857- else if ((size(dF) != B))
859+ else if ((size(dH) != B))
858860 then throw("All 6 materials should be passed")
859861 else {
860862 let cv = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
864866 let bP = if ((bK[aF] == ""))
865867 then nil
866868 else split(bK[aF], "_")
867- let dH = parseIntValue(split(bK[aG], "_")[aH])
869+ let dJ = parseIntValue(split(bK[aG], "_")[aH])
868870 let bq = am(an)
869871 let cC = bp(bq)
870- let dI = split(cC[az], "_")
871- let dJ = split(cC[aA], "_")
872- let dK = if ((cC[aB] == ""))
872+ let dK = split(cC[az], "_")
873+ let dL = split(cC[aA], "_")
874+ let dM = if ((cC[aB] == ""))
873875 then nil
874876 else split(cC[aB], "_")
875877 let aS = ai(aj)
876- let dL = aR(aS)
877- let dM = split(dL[aL], "_")
878- let dN = split(dL[aM], "_")
879- let dO = if ((dL[aN] == ""))
878+ let dN = aR(aS)
879+ let dO = split(dN[aL], "_")
880+ let dP = split(dN[aM], "_")
881+ let dQ = if ((dN[aN] == ""))
880882 then nil
881- else split(dL[aN], "_")
883+ else split(dN[aN], "_")
882884 let bW = {
883- let bX = dE
885+ let bX = dG
884886 let bY = size(bX)
885- let bZ = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dI, bN, dM, M, false)
887+ let bZ = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dK, bN, dO, M, false)
886888 func ca (cb,cc) = if ((cc >= bY))
887889 then cb
888890 else ci(cb, bX[cc])
894896 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
895897 }
896898 let bm = {
897- let bX = dF
899+ let bX = dH
898900 let bY = size(bX)
899- let bZ = $Tuple12(nil, nil, nil, bW._4, bW._5, bW._6, 0, dJ, bO, dN, N, false)
901+ let bZ = $Tuple12(nil, nil, nil, bW._4, bW._5, bW._6, 0, dL, bO, dP, N, false)
900902 func ce (cb,cc) = if ((cc >= bY))
901903 then cb
902904 else ci(cb, bX[cc])
907909
908910 cf(ce(ce(ce(ce(ce(ce(bZ, 0), 1), 2), 3), 4), 5), 6)
909911 }
910- let aT = if ((size(dG) != 0))
912+ let aT = if ((size(dI) != 0))
911913 then {
912- let bX = dG
914+ let bX = dI
913915 let bY = size(bX)
914- let bZ = $Tuple12(nil, nil, nil, bm._4, bm._5, bm._6, 0, dK, bP, dO, O, true)
916+ let bZ = $Tuple12(nil, nil, nil, bm._4, bm._5, bm._6, 0, dM, bP, dQ, O, true)
915917 func cg (cb,cc) = if ((cc >= bY))
916918 then cb
917919 else ci(cb, bX[cc])
922924
923925 ch(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(bZ, 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)
924926 }
925- else $Tuple12(bP, dO, dK, bm._4, bm._5, bm._6, 0, dK, bP, dO, O, true)
926- let dP = aT._4
927- let dQ = if ((0 > (dH - dP)))
927+ else $Tuple12(bP, dQ, dM, bm._4, bm._5, bm._6, 0, dM, bP, dQ, O, true)
928+ let dR = aT._4
929+ let dS = if ((0 > (dJ - dR)))
928930 then 0
929- else (dH - dP)
930- let ds = makeString_2C([bK[aC], makeString(bW._1, "_"), makeString(bm._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
931- let dR = makeString_2C([makeString(bW._2, "_"), makeString(bm._2, "_"), makeString(aT._2, "_")], ":")
932- let dS = makeString_2C([cC[ay], makeString(bW._3, "_"), makeString(bm._3, "_"), makeString(aT._3, "_")], ":")
933- let dt = invoke(z, "saveWarehouse", [ds, aj], nil)
934- if ((dt == dt))
931+ else (dJ - dR)
932+ let du = makeString_2C([bK[aC], makeString(bW._1, "_"), makeString(bm._1, "_"), makeString(aT._1, "_"), toString(dS)], ":")
933+ let dT = makeString_2C([makeString(bW._2, "_"), makeString(bm._2, "_"), makeString(aT._2, "_")], ":")
934+ let dU = makeString_2C([cC[ay], makeString(bW._3, "_"), makeString(bm._3, "_"), makeString(aT._3, "_")], ":")
935+ let dv = invoke(z, "saveWarehouse", [du, aj], nil)
936+ if ((dv == dv))
935937 then {
936- let dT = invoke(z, "updateBackpack", [an, dS], nil)
937- if ((dT == dT))
938+ let dV = invoke(z, "updateBackpack", [an, dU], nil)
939+ if ((dV == dV))
938940 then {
939- let dv = [StringEntry(aS, dR)]
940- let dU = aT._5
941- let dV = if ((dU > 0))
941+ let dx = [StringEntry(aS, dT)]
942+ let dW = aT._5
943+ let dX = if ((dW > 0))
942944 then {
943- let dW = fraction(aT._5, K, b)
944- let dX = at(dy)
945- let dY = getString(z, dX)
946- if (isDefined(dY))
947- then (((dv :+ ScriptTransfer(dx, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
948- else ((dv :+ ScriptTransfer(dx, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
945+ let dY = fraction(aT._5, K, b)
946+ let dZ = at(dA)
947+ let ea = getString(z, dZ)
948+ if (isDefined(ea))
949+ then (((dx :+ ScriptTransfer(dz, (aT._5 - (3 * dY)), g)) :+ ScriptTransfer(y, dY, g)) :+ ScriptTransfer(addressFromStringValue(value(ea)), dY, g))
950+ else ((dx :+ ScriptTransfer(dz, (aT._5 - (3 * dY)), g)) :+ ScriptTransfer(y, dY, g))
949951 }
950- else dv
951- let dZ = aT._6
952- if ((dZ > 0))
952+ else dx
953+ let eb = aT._6
954+ if ((eb > 0))
953955 then if ((size(cu.payments) != 1))
954956 then throw("exactly 1 payment must be attached")
955957 else {
958960 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
959961 if ((cM != g))
960962 then throw("USDT payments only!")
961- else if ((cL != dZ))
962- then throw(("Payment needed is " + toString(dZ)))
963+ else if ((cL != eb))
964+ then throw(("Payment needed is " + toString(eb)))
963965 else if ((L > cL))
964966 then throw(("Payment should be at least " + toString(L)))
965967 else {
966- let ea = fraction(aT._6, K, b)
967- let dX = at(dC)
968- let dY = getString(z, dX)
969- if (isDefined(dY))
970- then (((dV :+ ScriptTransfer(addressFromStringValue(dC), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
971- else ((dV :+ ScriptTransfer(addressFromStringValue(dC), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
968+ let ec = fraction(aT._6, K, b)
969+ let dZ = at(dE)
970+ let ea = getString(z, dZ)
971+ if (isDefined(ea))
972+ then (((dX :+ ScriptTransfer(addressFromStringValue(dE), (aT._6 - (3 * ec)), g)) :+ ScriptTransfer(y, ec, g)) :+ ScriptTransfer(addressFromStringValue(value(ea)), ec, g))
973+ else ((dX :+ ScriptTransfer(addressFromStringValue(dE), (aT._6 - (3 * ec)), g)) :+ ScriptTransfer(y, ec, g))
972974 }
973975 }
974976 else if ((size(cu.payments) != 0))
975977 then throw("No payments needed")
976- else dV
978+ else dX
977979 }
978980 else throw("Strict value is not equal to itself.")
979981 }
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "__"
55
66 let b = 1000000
77
88 let c = 10000000
99
1010 let d = 100000000
1111
1212 let e = 10000000000
1313
1414 let f = take(drop(this.bytes, 1), 1)
1515
1616 let g = {
1717 let h = f
1818 if ((base58'2W' == h))
1919 then base58'9wc3LXNA4TEBsXyKtoLE9mrbDD7WMHXvXrCjZvabLAsi'
2020 else if ((base58'2T' == h))
2121 then base58'6mWwf9mZBjVgkC54idpyaZLQfAosD914wT8fGf2iiY63'
2222 else throw("Unknown chain")
2323 }
2424
2525 let i = {
2626 let h = f
2727 if ((base58'2W' == h))
2828 then "3PQCuvFbvh4LkPUnrnU1z3jnbA1p9m3WNhv"
2929 else if ((base58'2T' == h))
3030 then "3MumkGGztCKAXpWDqxkddofqXSUbqQkvSJy"
3131 else throw("Unknown chain")
3232 }
3333
3434 func j (k,l) = valueOrErrorMessage(getString(k, l), makeString(["mandatory ", toString(k), ".", l, " is not defined"], ""))
3535
3636
3737 func m (l,n) = valueOrElse(getInteger(this, l), n)
3838
3939
4040 let o = 1
4141
4242 let p = 2
4343
4444 let q = 3
4545
4646 func r () = "%s__restConfig"
4747
4848
4949 func s () = "%s__restAddr"
5050
5151
5252 func t (u) = split_4C(j(u, r()), a)
5353
5454
5555 func v (w,x) = valueOrErrorMessage(addressFromString(w[x]), ("Rest cfg doesn't contain address at index " + toString(x)))
5656
5757
5858 let y = addressFromStringValue(valueOrElse(getString(this, s()), i))
5959
6060 let w = t(y)
6161
6262 let z = v(w, o)
6363
6464 let A = "Africa_F_Africa"
6565
6666 let B = 6
6767
6868 let C = 10000000000
6969
7070 let D = 39637
7171
7272 let E = 10000
7373
7474 let F = 200
7575
7676 let G = 300
7777
7878 let H = "LAND"
7979
8080 let I = "DUCK"
8181
8282 let J = 10000000000
8383
8484 let K = 10000
8585
8686 let L = 100000
8787
8888 let M = ["Oil", "Ore", "Wood", "Sand", "Clay", "Organic"]
8989
9090 let N = ["Fuel", "Metal", "Plank", "Glass", "Plastic", "Protein"]
9191
9292 let O = ["First Aid Kit", "Backpack", "Food Ration", "Jet Pack", "Shield"]
9393
9494 let P = ["Americas", "Europe", "Asia", "Africa", "Oceania"]
9595
9696 let Q = ["1_1_1_2_2_5_1_10_0", "2_2_2_4_4_10_1_10_0", "3_3_3_6_6_15_1_10_0", "2_5_5_2_7_5_2_100_1", "4_10_10_4_14_10_2_100_1", "6_15_15_6_21_15_2_100_1", "1_1_1_1_1_8_1_10_2", "2_2_2_2_2_16_1_10_2", "3_3_3_3_3_24_1_10_2", "9_9_1_5_5_1_5_100_3", "18_18_2_10_10_2_5_100_3", "27_27_3_15_15_3_5_100_3", "2_2_1_2_2_2_1_10_4", "4_4_2_4_4_4_1_10_4", "6_6_3_6_6_6_1_10_4"]
9797
9898 let R = 0
9999
100100 let S = 1
101101
102102 let T = 2
103103
104104 let U = 3
105105
106106 let V = 4
107107
108108 let W = 0
109109
110110 let X = 1
111111
112112 let Y = 2
113113
114114 let Z = 3
115115
116116 let aa = 4
117117
118118 let ab = 5
119119
120120 let ac = 6
121121
122122 let ad = 7
123123
124124 let ae = 8
125125
126126 func af (ag,ah) = ((("factoryWhByContinentAndRes_" + ag) + "_") + toString(ah))
127127
128128
129129 func ai (aj) = ("landOrder_" + aj)
130130
131131
132132 func ak (al) = ("stakedDuckByOwner_" + al)
133133
134134
135135 func am (an) = ("backPack_" + an)
136136
137137
138138 func ao (an) = ("duckLocation_" + an)
139139
140140
141141 func ap () = "contractsBlocked"
142142
143143
144144 func aq (ar) = ("nftOwner_" + ar)
145145
146146
147147 func as (ar) = ("stakedTime_" + ar)
148148
149149
150150 func at (au) = ("accRefBy_" + au)
151151
152152
153153 let av = 0
154154
155155 let aw = 1
156156
157157 let ax = 2
158158
159159 let ay = 0
160160
161161 let az = 1
162162
163163 let aA = 2
164164
165165 let aB = 3
166166
167167 let aC = 0
168168
169169 let aD = 1
170170
171171 let aE = 2
172172
173173 let aF = 3
174174
175175 let aG = 4
176176
177177 let aH = 0
178178
179179 let aI = 1
180180
181181 let aJ = 2
182182
183183 let aK = 3
184184
185185 let aL = 0
186186
187187 let aM = 1
188188
189189 let aN = 2
190190
191191 func aO (aP) = {
192192 let h = aP
193193 if ($isInstanceOf(h, "String"))
194194 then {
195195 let aQ = h
196196 aQ
197197 }
198198 else throw("fail to cast into String")
199199 }
200200
201201
202202 func aR (aS) = {
203203 let aT = split(valueOrElse(getString(aS), "0@0_0@0_0@0_0@0_0@0_0@0:0@0_0@0_0@0_0@0_0@0_0@0:"), ":")
204204 [if ((size(split(aT[aL], "_")) == B))
205205 then aT[aL]
206206 else "0@0_0@0_0@0_0@0_0@0_0@0", if ((size(split(aT[aM], "_")) == B))
207207 then aT[aM]
208208 else "0@0_0@0_0@0_0@0_0@0_0@0", aT[aN]]
209209 }
210210
211211
212212 func aU (aV,aW,aX) = if (aX)
213213 then {
214214 let aY = if ((aV >= 0))
215215 then (((aV + aW) - 1) / aW)
216216 else -((((-(aV) + aW) - 1) / aW))
217217 (aY * d)
218218 }
219219 else aV
220220
221221
222222 func aZ (ba,ah,aV,bb) = {
223223 let bc = af(ba, ah)
224224 let bd = valueOrElse(getInteger(bc), 0)
225225 let be = if ((bd > C))
226226 then 0
227227 else if (((bd + aV) > C))
228228 then (C - bd)
229229 else aV
230230 let bf = (fraction(be, ((F * D) - fraction(((100 * bd) + (50 * be)), D, C)), e) + fraction((aV - be), D, d))
231231 let bg = (bb - (bb / 100))
232232 if (((bg * aV) > (bf * d)))
233233 then throw((((((((((("Actual price = " + toString(bf)) + " / ") + toString(aV)) + " < minPrice = ") + toString(bb)) + ", (") + ba) + ", ") + M[ah]) + ")"))
234234 else $Tuple2(IntegerEntry(bc, (bd + aV)), bf)
235235 }
236236
237237
238238 func bh (ba,bi,aV,bj) = {
239239 let bc = af(ba, bi)
240240 let bd = valueOrElse(getInteger(bc), 0)
241241 let bk = if ((bd > C))
242242 then min([aV, (bd - C)])
243243 else 0
244244 let bl = min([bd, (aV - bk)])
245245 let bm = (bl + bk)
246246 let bn = (fraction(bl, ((G * D) - fraction(((100 * bd) - (50 * bl)), D, C)), e) + fraction(bk, (2 * D), d))
247247 let bo = (bj + (bj / 100))
248248 if (((bn * d) > (bo * bm)))
249249 then throw((((((((((("Actual price = " + toString(bn)) + " / ") + toString(bm)) + " > maxPrice = ") + toString(bj)) + ", (") + ba) + ", ") + N[bi]) + ")"))
250250 else $Tuple3(IntegerEntry(bc, (bd - bm)), bn, bm)
251251 }
252252
253253
254254 func bp (bq) = {
255255 let aT = split(valueOrElse(getString(z, bq), "0:0_0_0_0_0_0:0_0_0_0_0_0:"), ":")
256256 [toString(valueOrElse(parseInt(aT[ay]), 0)), if ((size(split(aT[az], "_")) == B))
257257 then aT[az]
258258 else "0_0_0_0_0_0", if ((size(split(aT[aA], "_")) == B))
259259 then aT[aA]
260260 else "0_0_0_0_0_0", aT[aB]]
261261 }
262262
263263
264264 func br () = if (valueOrElse(getBoolean(z, ap()), false))
265265 then throw("Contracts are under maintenance")
266266 else unit
267267
268268
269269 func bs (bt,bu) = {
270270 let bv = bt._1
271271 let bw = bt._8
272272 let aW = if (bw)
273273 then parseIntValue(split(Q[bv], "_")[ad])
274274 else 0
275275 let bx = split(bu, "@")
276276 if ((size(bx) != 2))
277277 then throw("Incorrect order format, should be amount@price")
278278 else {
279279 let by = parseIntValue(bx[0])
280280 let bz = parseIntValue(bx[1])
281281 let bA = fraction(by, bz, d)
282282 let bB = aU(by, aW, bw)
283283 let bC = if ((size(bt._6) > bv))
284284 then parseIntValue(bt._6[bv])
285285 else 0
286286 let bD = split(if ((size(bt._7) > bv))
287287 then bt._7[bv]
288288 else "0@0", "@")
289289 let bE = parseIntValue(bD[0])
290290 let bF = parseIntValue(bD[1])
291291 if (if ((0 > bF))
292292 then true
293293 else (0 > bz))
294294 then throw("Price can't be negative")
295295 else {
296296 let bG = fraction(bE, bF, d)
297297 let bH = aU(bE, aW, bw)
298298 if ((by == 0))
299299 then if ((bE > 0))
300300 then $Tuple8((bv + 1), (bt._2 :+ toString(bC)), bt._3, bt._4, (bt._5 - bG), bt._6, bt._7, bw)
301301 else $Tuple8((bv + 1), (bt._2 :+ toString((bC - bE))), bt._3, bt._4, bt._5, bt._6, bt._7, bw)
302302 else if ((by > 0))
303303 then if ((0 > bE))
304304 then $Tuple8((bv + 1), (bt._2 :+ toString((bC - bE))), (bt._3 + bB), bt._4, (bt._5 + bA), bt._6, bt._7, bw)
305305 else $Tuple8((bv + 1), (bt._2 :+ toString(bC)), (bt._3 + bB), bt._4, ((bt._5 + bA) - bG), bt._6, bt._7, bw)
306306 else if ((0 > bE))
307307 then {
308308 let bI = (bE - by)
309309 if ((0 > (bC - bI)))
310310 then throw((((("Attempt to take " + toString(bI)) + " from warehouse, but only ") + toString(bC)) + " available"))
311311 else $Tuple8((bv + 1), (bt._2 :+ toString((bC - bI))), bt._3, (bt._4 - bB), bt._5, bt._6, bt._7, bw)
312312 }
313313 else if ((0 > (bC + by)))
314314 then throw((((("Attempt to take " + toString(-(by))) + " from warehouse, but only ") + toString(bC)) + " available"))
315315 else $Tuple8((bv + 1), (bt._2 :+ toString((bC + by))), bt._3, (bt._4 - bB), (bt._5 - bG), bt._6, bt._7, bw)
316316 }
317317 }
318318 }
319319
320320
321321 func bJ (bK,bL,bM) = {
322322 let bN = split(bK[aD], "_")
323323 let bO = split(bK[aE], "_")
324324 let bP = if ((bK[aF] == ""))
325325 then nil
326326 else split(bK[aF], "_")
327327 let bQ = split(bL[aL], "_")
328328 let bR = split(bL[aM], "_")
329329 let bS = if ((bL[aN] == ""))
330330 then nil
331331 else split(bL[aN], "_")
332332 if ((size(bM) != 3))
333333 then throw("cargoListStr should contain exactly 2 ':' separators")
334334 else {
335335 let bT = split(bM[0], "_")
336336 let bU = split(bM[1], "_")
337337 let bV = if ((bM[2] == ""))
338338 then nil
339339 else split(bM[2], "_")
340340 if ((size(bT) != B))
341341 then throw("All 6 resources should be passed")
342342 else if ((size(bU) != B))
343343 then throw("All 6 materials should be passed")
344344 else {
345345 let bW = {
346346 let bX = bT
347347 let bY = size(bX)
348348 let bZ = $Tuple8(0, nil, 0, 0, 0, bN, bQ, false)
349349 func ca (cb,cc) = if ((cc >= bY))
350350 then cb
351351 else bs(cb, bX[cc])
352352
353353 func cd (cb,cc) = if ((cc >= bY))
354354 then cb
355355 else throw("List size exceeds 6")
356356
357357 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
358358 }
359359 let bm = {
360360 let bX = bU
361361 let bY = size(bX)
362362 let bZ = $Tuple8(0, nil, bW._3, bW._4, bW._5, bO, bR, false)
363363 func ce (cb,cc) = if ((cc >= bY))
364364 then cb
365365 else bs(cb, bX[cc])
366366
367367 func cf (cb,cc) = if ((cc >= bY))
368368 then cb
369369 else throw("List size exceeds 6")
370370
371371 cf(ce(ce(ce(ce(ce(ce(bZ, 0), 1), 2), 3), 4), 5), 6)
372372 }
373373 let aT = if ((size(bV) != 0))
374374 then {
375375 let bX = bV
376376 let bY = size(bX)
377377 let bZ = $Tuple8(0, nil, bm._3, bm._4, bm._5, bP, bS, true)
378378 func cg (cb,cc) = if ((cc >= bY))
379379 then cb
380380 else bs(cb, bX[cc])
381381
382382 func ch (cb,cc) = if ((cc >= bY))
383383 then cb
384384 else throw("List size exceeds 50")
385385
386386 ch(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(bZ, 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)
387387 }
388388 else $Tuple8(0, bP, bm._3, bm._4, bm._5, bP, bS, true)
389389 $Tuple6(bW._2, bm._2, aT._2, aT._3, aT._4, aT._5)
390390 }
391391 }
392392 }
393393
394394
395395 func ci (bt,cj) = {
396396 let bv = bt._7
397397 let bw = bt._12
398398 let aW = if (bw)
399399 then parseIntValue(split(Q[bv], "_")[ad])
400400 else 0
401401 let ck = split(cj, "@")
402402 if ((size(ck) != 2))
403403 then throw("Incorrect order format, should be amount@price")
404404 else {
405405 let cl = parseIntValue(ck[0])
406406 let cm = parseIntValue(ck[1])
407407 if ((0 > cm))
408408 then throw("Price can't be negative")
409409 else {
410410 let cn = fraction(cl, cm, d)
411411 let co = if ((size(bt._8) > bv))
412412 then parseIntValue(bt._8[bv])
413413 else 0
414414 let bC = if ((size(bt._9) > bv))
415415 then parseIntValue(bt._9[bv])
416416 else 0
417417 let cp = split(bt._10[bv], "@")
418418 let cq = parseIntValue(cp[0])
419419 let cr = parseIntValue(cp[1])
420420 if (if ((cl != 0))
421421 then (cm != cr)
422422 else false)
423423 then throw(((((("Prices of " + bt._11[bv]) + " don't match! WH price=") + toString(cr)) + ", your price=") + toString(cm)))
424424 else {
425425 let cs = fraction(cq, cr, d)
426426 let ct = aU(cl, aW, bw)
427427 if ((cl == 0))
428428 then $Tuple12((bt._1 :+ toString(bC)), (bt._2 :+ bt._10[bv]), (bt._3 :+ toString(co)), bt._4, bt._5, bt._6, (bt._7 + 1), bt._8, bt._9, bt._10, bt._11, bw)
429429 else if ((cl > 0))
430430 then if ((0 > cq))
431431 then if ((cl > -(cq)))
432432 then throw(((((("Attempt to buy " + toString(cl)) + " of ") + bt._11[bv]) + ", but warehouse only sells ") + toString(-(cq))))
433433 else $Tuple12((bt._1 :+ toString(bC)), (bt._2 :+ ((toString((cq + cl)) + "@") + toString(cr))), (bt._3 :+ toString((co + cl))), (bt._4 + ct), bt._5, (bt._6 + cn), (bt._7 + 1), bt._8, bt._9, bt._10, bt._11, bw)
434434 else throw((("Attempt to buy " + bt._11[bv]) + " while warehouse doesn't sell it"))
435435 else if ((cq > 0))
436436 then if ((-(cl) > cq))
437437 then throw(((((("Attempt to sell " + toString(-(cl))) + " of ") + bt._11[bv]) + ", but warehouse only buys ") + toString(cq)))
438438 else if ((-(cl) > co))
439439 then throw(((((("Attempt to sell " + toString(-(cl))) + ", but you only have ") + toString(co)) + " of ") + bt._11[bv]))
440440 else $Tuple12((bt._1 :+ toString((bC - cl))), (bt._2 :+ ((toString((cq + cl)) + "@") + toString(cr))), (bt._3 :+ toString((co + cl))), (bt._4 - ct), (bt._5 - cn), bt._6, (bt._7 + 1), bt._8, bt._9, bt._10, bt._11, bw)
441441 else throw((("Attempt to sell " + bt._11[bv]) + " while warehouse doesn't buy it"))
442442 }
443443 }
444444 }
445445 }
446446
447447
448448 @Callable(cu)
449449 func recalcLockedVolumeREADONLY (aj,cv) = {
450450 let bL = aR(ai(aj))
451451 let cw = bJ(cv, bL, bL)
452452 $Tuple2(nil, (cw._4 + cw._5))
453453 }
454454
455455
456456
457457 @Callable(cu)
458458 func constructorV1 (cx) = if ((cu.caller != this))
459459 then throw("Permission denied")
460460 else [StringEntry(s(), cx)]
461461
462462
463463
464464 @Callable(cu)
465465 func sellResources (cy,cz) = {
466466 let cA = br()
467467 if ((cA == cA))
468468 then {
469469 let an = valueOrErrorMessage(getString(z, ak(toString(cu.caller))), "You don't have a duck staked")
470470 if ((size(cu.payments) != 0))
471471 then throw("sellResources doesn't require any payments")
472472 else {
473473 let cB = split(valueOrElse(getString(z, ao(an)), A), "_")
474474 if ((cB[aw] != "F"))
475475 then throw(("Duck location type should be Factory, but is " + cB[aw]))
476476 else {
477477 let ba = cB[ax]
478478 let cC = bp(am(an))
479479 let cD = split(cC[az], "_")
480480 func cE (bt,bv) = if ((cy[bv] > parseIntValue(cD[bv])))
481481 then throw(((((("You have " + cD[bv]) + " of ") + M[bv]) + ", but tried to sell ") + toString(cy[bv])))
482482 else if ((0 > cy[bv]))
483483 then throw(((("You tried to sell negative amount of " + M[bv]) + ": ") + toString(cy[bv])))
484484 else if ((cy[bv] > 0))
485485 then {
486486 let cF = aZ(ba, bv, cy[bv], cz[bv])
487487 $Tuple3((bt._1 :+ cF._1), (bt._2 :+ toString((parseIntValue(cD[bv]) - cy[bv]))), (bt._3 + cF._2))
488488 }
489489 else $Tuple3(bt._1, (bt._2 :+ cD[bv]), bt._3)
490490
491491 let cG = {
492492 let bX = [0, 1, 2, 3, 4, 5]
493493 let bY = size(bX)
494494 let bZ = $Tuple3(nil, nil, 0)
495495 func ca (cb,cc) = if ((cc >= bY))
496496 then cb
497497 else cE(cb, bX[cc])
498498
499499 func cd (cb,cc) = if ((cc >= bY))
500500 then cb
501501 else throw("List size exceeds 6")
502502
503503 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
504504 }
505505 let cH = makeString([cC[ay], makeString(cG._2, "_"), cC[aA], cC[aB]], ":")
506506 let cI = aO(invoke(z, "updateBackpack", [an, cH], nil))
507507 $Tuple2((cG._1 :+ ScriptTransfer(cu.caller, cG._3, g)), cI)
508508 }
509509 }
510510 }
511511 else throw("Strict value is not equal to itself.")
512512 }
513513
514514
515515
516516 @Callable(cu)
517517 func buyMaterials (cy,cJ) = {
518518 let cA = br()
519519 if ((cA == cA))
520520 then {
521521 let an = valueOrErrorMessage(getString(z, ak(toString(cu.caller))), "You don't have a duck staked")
522522 if ((size(cu.payments) != 1))
523523 then throw("exactly 1 payment must be attached")
524524 else {
525525 let cK = cu.payments[0]
526526 let cL = cK.amount
527527 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
528528 if ((cM != g))
529529 then throw("USDT payments only!")
530530 else {
531531 let cB = split(valueOrElse(getString(z, ao(an)), A), "_")
532532 if ((cB[aw] != "F"))
533533 then throw(("Duck location type should be Factory, but is " + cB[aw]))
534534 else {
535535 let ba = cB[ax]
536536 let cC = bp(am(an))
537537 let cN = split(cC[aA], "_")
538538 func cO (bt,bv) = if ((0 > cy[bv]))
539539 then throw(((("You tried to buy negative amount of " + N[bv]) + ": ") + toString(cy[bv])))
540540 else if ((cy[bv] > 0))
541541 then {
542542 let cF = bh(ba, bv, cy[bv], cJ[bv])
543543 $Tuple3((bt._1 :+ cF._1), (bt._2 :+ toString((parseIntValue(cN[bv]) + cF._3))), (bt._3 + cF._2))
544544 }
545545 else $Tuple3(bt._1, (bt._2 :+ cN[bv]), bt._3)
546546
547547 let cG = {
548548 let bX = [0, 1, 2, 3, 4, 5]
549549 let bY = size(bX)
550550 let bZ = $Tuple3(nil, nil, 0)
551551 func ca (cb,cc) = if ((cc >= bY))
552552 then cb
553553 else cO(cb, bX[cc])
554554
555555 func cd (cb,cc) = if ((cc >= bY))
556556 then cb
557557 else throw("List size exceeds 6")
558558
559559 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
560560 }
561561 if ((cG._3 > cL))
562562 then throw(((("Insufficient payment! Attached=" + toString(cL)) + ", required=") + toString(cG._3)))
563563 else {
564564 let cH = makeString([cC[ay], cC[az], makeString(cG._2, "_"), cC[aB]], ":")
565565 let cI = aO(invoke(z, "updateBackpack", [an, cH], nil))
566566 let u = if (((cL - cG._3) > 0))
567567 then [ScriptTransfer(cu.caller, (cL - cG._3), g)]
568568 else nil
569569 let cP = (cG._3 / 100)
570570 $Tuple2(((cG._1 ++ u) :+ ScriptTransfer(y, cP, g)), cI)
571571 }
572572 }
573573 }
574574 }
575575 }
576576 else throw("Strict value is not equal to itself.")
577577 }
578578
579579
580580
581581 @Callable(cu)
582582 func exchangeResources (cy) = {
583583 let cA = br()
584584 if ((cA == cA))
585585 then {
586586 let an = valueOrErrorMessage(getString(z, ak(toString(cu.caller))), "You don't have a duck staked")
587587 if ((size(cu.payments) != 1))
588588 then throw("exactly 1 payment must be attached")
589589 else {
590590 let cK = cu.payments[0]
591591 let cL = cK.amount
592592 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
593593 if ((cM != g))
594594 then throw("USDT payments only!")
595595 else {
596596 let cB = split(valueOrElse(getString(z, ao(an)), A), "_")
597597 if ((cB[aw] != "F"))
598598 then throw(("Duck location type should be Factory, but is " + cB[aw]))
599599 else {
600600 let ba = cB[ax]
601601 let cC = bp(am(an))
602602 let cD = split(cC[az], "_")
603603 let cN = split(cC[aA], "_")
604604 func cQ (bt,bv) = {
605605 let bc = af(ba, bv)
606606 let bd = valueOrElse(getInteger(bc), 0)
607607 let cR = cy[bv]
608608 if ((cR > parseIntValue(cD[bv])))
609609 then throw(((((("You have " + cD[bv]) + " of ") + M[bv]) + ", but tried to exchange ") + toString(cR)))
610610 else if ((0 > cR))
611611 then throw(((("You tried to exchange negative amount of " + M[bv]) + ": ") + toString(cR)))
612612 else if ((cR > 0))
613613 then $Tuple4((bt._1 :+ toString((parseIntValue(cD[bv]) - cR))), (bt._2 :+ toString((parseIntValue(cN[bv]) + cR))), (bt._3 + fraction(cR, D, d)), (bt._4 :+ IntegerEntry(bc, bd)))
614614 else $Tuple4((bt._1 :+ cD[bv]), (bt._2 :+ cN[bv]), bt._3, bt._4)
615615 }
616616
617617 let cG = {
618618 let bX = [0, 1, 2, 3, 4, 5]
619619 let bY = size(bX)
620620 let bZ = $Tuple4(nil, nil, 0, nil)
621621 func ca (cb,cc) = if ((cc >= bY))
622622 then cb
623623 else cQ(cb, bX[cc])
624624
625625 func cd (cb,cc) = if ((cc >= bY))
626626 then cb
627627 else throw("List size exceeds 6")
628628
629629 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
630630 }
631631 if ((cG._3 > cL))
632632 then throw(((("Insufficient payment! Attached=" + toString(cL)) + ", required=") + toString(cG._3)))
633633 else {
634634 let cH = makeString([cC[ay], makeString(cG._1, "_"), makeString(cG._2, "_"), cC[aB]], ":")
635635 let cI = aO(invoke(z, "updateBackpack", [an, cH], nil))
636636 let u = if (((cL - cG._3) > 0))
637637 then [ScriptTransfer(cu.caller, (cL - cG._3), g)]
638638 else nil
639639 let cP = (cG._3 / 100)
640640 $Tuple2(((u ++ cG._4) :+ ScriptTransfer(y, cP, g)), cI)
641641 }
642642 }
643643 }
644644 }
645645 }
646646 else throw("Strict value is not equal to itself.")
647647 }
648648
649649
650650
651651 @Callable(cu)
652652 func craftGoods (cS,cT) = {
653653 let cA = br()
654654 if ((cA == cA))
655655 then if ((size(cu.payments) != 1))
656656 then throw("exactly 1 payment must be attached")
657657 else {
658658 let cK = cu.payments[0]
659659 let cL = cK.amount
660660 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
661661 if ((cM != g))
662662 then throw("USDT payments only!")
663663 else if ((cL != b))
664664 then throw("exactly 1 USDT must be attached as payment")
665665 else if ((0 >= cT))
666666 then throw("Quantity should be positive")
667667 else {
668668 let an = valueOrErrorMessage(getString(z, ak(toString(cu.caller))), "You don't have a duck staked")
669669 let cB = split(valueOrElse(getString(z, ao(an)), A), "_")
670670 if ((cB[aw] != "M"))
671671 then throw(("Duck location type should be Manufactory, but is " + cB[aw]))
672672 else {
673673 let cU = cB[av]
674674 let cC = bp(am(an))
675675 let cN = split(cC[aA], "_")
676676 if (if ((0 > cS))
677677 then true
678678 else (cS >= size(Q)))
679679 then throw(("Unknown product idx=" + toString(cS)))
680680 else {
681681 let cV = split(Q[cS], "_")
682682 if ((size(cV) != (B + 3)))
683683 then throw(("Fatal: unknown recipe: " + Q[cS]))
684684 else {
685685 let cW = parseIntValue(cV[ae])
686686 if ((P[cW] != cU))
687687 then throw(((("This product is available in " + P[cW]) + ", but you are in ") + cU))
688688 else {
689689 let cX = if ((cC[aB] == ""))
690690 then nil
691691 else split(cC[aB], "_")
692692 func cY (bt,cZ) = {
693693 let da = bt._2
694694 let db = if ((size(cX) > da))
695695 then cX[da]
696696 else "0"
697697 let dc = parseIntValue(db)
698698 let aV = (cT * parseIntValue(cV[ad]))
699699 let dd = if ((da == cS))
700700 then toString((dc + aV))
701701 else db
702702 $Tuple2((bt._1 :+ dd), (da + 1))
703703 }
704704
705705 let de = ( let bX = Q
706706 let bY = size(bX)
707707 let bZ = $Tuple2(nil, 0)
708708 func ca (cb,cc) = if ((cc >= bY))
709709 then cb
710710 else cY(cb, bX[cc])
711711
712712 func cd (cb,cc) = if ((cc >= bY))
713713 then cb
714714 else throw("List size exceeds 50")
715715
716716 cd(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(ca(bZ, 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
717717 func df (bt,bv) = {
718718 let dg = ((parseIntValue(cV[bv]) * c) * cT)
719719 let dh = parseIntValue(cN[bv])
720720 if ((dg > dh))
721721 then throw(((((((("You have " + cN[bv]) + " of ") + N[bv]) + ", but recipe requires ") + toString(dg)) + " for quantity ") + toString(cT)))
722722 else if ((dg > 0))
723723 then (bt :+ toString((dh - dg)))
724724 else (bt :+ cN[bv])
725725 }
726726
727727 let cG = {
728728 let bX = [0, 1, 2, 3, 4, 5]
729729 let bY = size(bX)
730730 let bZ = nil
731731 func ce (cb,cc) = if ((cc >= bY))
732732 then cb
733733 else df(cb, bX[cc])
734734
735735 func cf (cb,cc) = if ((cc >= bY))
736736 then cb
737737 else throw("List size exceeds 6")
738738
739739 cf(ce(ce(ce(ce(ce(ce(bZ, 0), 1), 2), 3), 4), 5), 6)
740740 }
741741 let cH = makeString([cC[ay], cC[az], makeString(cG, "_"), makeString(de, "_")], ":")
742742 let cI = aO(invoke(z, "updateBackpack", [an, cH], nil))
743743 $Tuple2(nil, cI)
744744 }
745745 }
746746 }
747747 }
748748 }
749749 }
750750 else throw("Strict value is not equal to itself.")
751751 }
752752
753753
754754
755755 @Callable(cu)
756756 func setWarehouseOrder (di,aj) = {
757757 let dj = cu.originCaller
758758 let au = toString(dj)
759759 let cI = if ((dj != y))
760760 then br()
761761 else false
762762 let dk = value(assetInfo(fromBase58String(aj)))
763763 if (!(isDefined(getInteger(z, as(aj)))))
764764 then throw((("NFT " + dk.name) + " is not staked"))
765765 else {
766766 let dl = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dk.name) + " is orphaned"))
767767 if (if ((dj != y))
768768 then (dl != au)
769769 else false)
770770 then throw((H + " is not yours"))
771771 else {
772772 let dm = split_4C(di, ":")
773773 let cv = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
774774 let bK = split_4C(cv, ":")
775775 let dn = split(bK[aG], "_")
776776 let do = parseIntValue(dn[aI])
777- let dp = parseIntValue(dn[aJ])
777+ let dp = parseIntValue(dn[aK])
778778 let aS = ai(aj)
779779 let bL = aR(aS)
780780 let cw = bJ(bK, bL, dm)
781781 let dq = cw._4
782782 let dr = cw._5
783- if ((dq > dp))
784- then throw((((("Attempt to reserve " + toString(dq)) + " space for buy orders, but only ") + toString(dp)) + " warehouse empty space left"))
783+ let ds = (dq + dr)
784+ let dt = ((dp - do) - ds)
785+ if ((dq > dt))
786+ then throw((((("Attempt to reserve " + toString(dq)) + " space for buy orders, but only ") + toString(dt)) + " warehouse empty space left"))
785787 else if ((dr > do))
786788 then throw((((("Attempt to lock " + toString(dr)) + " space for sell orders, but only ") + toString(do)) + " warehouse space occupied"))
787789 else {
788- let ds = makeString_2C([bK[aC], makeString(cw._1, "_"), makeString(cw._2, "_"), makeString(cw._3, "_"), toString((dq + dr))], ":")
789- let dt = invoke(z, "saveWarehouse", [ds, aj], nil)
790- if ((dt == dt))
790+ let du = makeString_2C([bK[aC], makeString(cw._1, "_"), makeString(cw._2, "_"), makeString(cw._3, "_"), toString(ds)], ":")
791+ let dv = invoke(z, "saveWarehouse", [du, aj], nil)
792+ if ((dv == dv))
791793 then {
792- let du = cw._6
793- let dv = if ((du > 0))
794+ let dw = cw._6
795+ let dx = if ((dw > 0))
794796 then if ((size(cu.payments) != 1))
795797 then throw("exactly 1 payment must be attached")
796798 else {
797799 let cK = cu.payments[0]
798800 let cL = cK.amount
799801 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
800802 if ((cM != g))
801803 then throw("USDT payments only!")
802- else if ((cL != du))
803- then throw(("Payment needed is " + toString(du)))
804+ else if ((cL != dw))
805+ then throw(("Payment needed is " + toString(dw)))
804806 else [StringEntry(aS, di)]
805807 }
806- else if ((du == 0))
808+ else if ((dw == 0))
807809 then if ((size(cu.payments) != 0))
808810 then throw("No payments needed")
809811 else [StringEntry(aS, di)]
810812 else if ((size(cu.payments) != 0))
811813 then throw("No payments needed")
812- else [ScriptTransfer(addressFromStringValue(dl), -(du), g), StringEntry(aS, di)]
813- $Tuple2(dv, cI)
814+ else [ScriptTransfer(addressFromStringValue(dl), -(dw), g), StringEntry(aS, di)]
815+ $Tuple2(dx, cI)
814816 }
815817 else throw("Strict value is not equal to itself.")
816818 }
817819 }
818820 }
819821 }
820822
821823
822824
823825 @Callable(cu)
824-func acceptWarehouseOrder (dw,aj,an) = {
826+func acceptWarehouseOrder (dy,aj,an) = {
825827 let cA = br()
826828 if ((cA == cA))
827829 then {
828- let dx = cu.originCaller
829- let dy = toString(dx)
830- let dz = valueOrErrorMessage(getString(z, ak(dy)), "You don't have a duck staked")
831- let cB = valueOrElse(getString(z, ao(dz)), A)
832- let dA = split(value(cB), "_")
833- if ((dA[aw] != "L"))
834- then throw((("Duck location type is " + dA[aw]) + ", but should be L"))
835- else if ((dz != an))
836- then throw(((("Your staked duck is " + dz) + ", but passed ") + an))
830+ let dz = cu.originCaller
831+ let dA = toString(dz)
832+ let dB = valueOrErrorMessage(getString(z, ak(dA)), "You don't have a duck staked")
833+ let cB = valueOrElse(getString(z, ao(dB)), A)
834+ let dC = split(value(cB), "_")
835+ if ((dC[aw] != "L"))
836+ then throw((("Duck location type is " + dC[aw]) + ", but should be L"))
837+ else if ((dB != an))
838+ then throw(((("Your staked duck is " + dB) + ", but passed ") + an))
837839 else {
838- let dB = value(assetInfo(fromBase58String(aj)))
840+ let dD = value(assetInfo(fromBase58String(aj)))
839841 if (!(isDefined(getInteger(z, as(aj)))))
840- then throw((("NFT " + dB.name) + " is not staked"))
842+ then throw((("NFT " + dD.name) + " is not staked"))
841843 else {
842- let dC = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dB.name) + " is orphaned"))
843- if ((dC == dy))
844+ let dE = valueOrErrorMessage(getString(z, aq(aj)), (("NFT " + dD.name) + " is orphaned"))
845+ if ((dE == dA))
844846 then throw("You cannot trade with yourself")
845847 else {
846- let dD = split_4C(dw, ":")
847- if ((size(dD) != 3))
848+ let dF = split_4C(dy, ":")
849+ if ((size(dF) != 3))
848850 then throw("bpOrderStr should contain exactly 2 ':' separators")
849851 else {
850- let dE = split(dD[0], "_")
851- let dF = split(dD[1], "_")
852- let dG = if ((dD[2] == ""))
852+ let dG = split(dF[0], "_")
853+ let dH = split(dF[1], "_")
854+ let dI = if ((dF[2] == ""))
853855 then nil
854- else split(dD[2], "_")
855- if ((size(dE) != B))
856+ else split(dF[2], "_")
857+ if ((size(dG) != B))
856858 then throw("All 6 resources should be passed")
857- else if ((size(dF) != B))
859+ else if ((size(dH) != B))
858860 then throw("All 6 materials should be passed")
859861 else {
860862 let cv = aO(invoke(z, "getWarehouseREADONLY", [aj], nil))
861863 let bK = split_4C(cv, ":")
862864 let bN = split(bK[aD], "_")
863865 let bO = split(bK[aE], "_")
864866 let bP = if ((bK[aF] == ""))
865867 then nil
866868 else split(bK[aF], "_")
867- let dH = parseIntValue(split(bK[aG], "_")[aH])
869+ let dJ = parseIntValue(split(bK[aG], "_")[aH])
868870 let bq = am(an)
869871 let cC = bp(bq)
870- let dI = split(cC[az], "_")
871- let dJ = split(cC[aA], "_")
872- let dK = if ((cC[aB] == ""))
872+ let dK = split(cC[az], "_")
873+ let dL = split(cC[aA], "_")
874+ let dM = if ((cC[aB] == ""))
873875 then nil
874876 else split(cC[aB], "_")
875877 let aS = ai(aj)
876- let dL = aR(aS)
877- let dM = split(dL[aL], "_")
878- let dN = split(dL[aM], "_")
879- let dO = if ((dL[aN] == ""))
878+ let dN = aR(aS)
879+ let dO = split(dN[aL], "_")
880+ let dP = split(dN[aM], "_")
881+ let dQ = if ((dN[aN] == ""))
880882 then nil
881- else split(dL[aN], "_")
883+ else split(dN[aN], "_")
882884 let bW = {
883- let bX = dE
885+ let bX = dG
884886 let bY = size(bX)
885- let bZ = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dI, bN, dM, M, false)
887+ let bZ = $Tuple12(nil, nil, nil, 0, 0, 0, 0, dK, bN, dO, M, false)
886888 func ca (cb,cc) = if ((cc >= bY))
887889 then cb
888890 else ci(cb, bX[cc])
889891
890892 func cd (cb,cc) = if ((cc >= bY))
891893 then cb
892894 else throw("List size exceeds 6")
893895
894896 cd(ca(ca(ca(ca(ca(ca(bZ, 0), 1), 2), 3), 4), 5), 6)
895897 }
896898 let bm = {
897- let bX = dF
899+ let bX = dH
898900 let bY = size(bX)
899- let bZ = $Tuple12(nil, nil, nil, bW._4, bW._5, bW._6, 0, dJ, bO, dN, N, false)
901+ let bZ = $Tuple12(nil, nil, nil, bW._4, bW._5, bW._6, 0, dL, bO, dP, N, false)
900902 func ce (cb,cc) = if ((cc >= bY))
901903 then cb
902904 else ci(cb, bX[cc])
903905
904906 func cf (cb,cc) = if ((cc >= bY))
905907 then cb
906908 else throw("List size exceeds 6")
907909
908910 cf(ce(ce(ce(ce(ce(ce(bZ, 0), 1), 2), 3), 4), 5), 6)
909911 }
910- let aT = if ((size(dG) != 0))
912+ let aT = if ((size(dI) != 0))
911913 then {
912- let bX = dG
914+ let bX = dI
913915 let bY = size(bX)
914- let bZ = $Tuple12(nil, nil, nil, bm._4, bm._5, bm._6, 0, dK, bP, dO, O, true)
916+ let bZ = $Tuple12(nil, nil, nil, bm._4, bm._5, bm._6, 0, dM, bP, dQ, O, true)
915917 func cg (cb,cc) = if ((cc >= bY))
916918 then cb
917919 else ci(cb, bX[cc])
918920
919921 func ch (cb,cc) = if ((cc >= bY))
920922 then cb
921923 else throw("List size exceeds 50")
922924
923925 ch(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(cg(bZ, 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)
924926 }
925- else $Tuple12(bP, dO, dK, bm._4, bm._5, bm._6, 0, dK, bP, dO, O, true)
926- let dP = aT._4
927- let dQ = if ((0 > (dH - dP)))
927+ else $Tuple12(bP, dQ, dM, bm._4, bm._5, bm._6, 0, dM, bP, dQ, O, true)
928+ let dR = aT._4
929+ let dS = if ((0 > (dJ - dR)))
928930 then 0
929- else (dH - dP)
930- let ds = makeString_2C([bK[aC], makeString(bW._1, "_"), makeString(bm._1, "_"), makeString(aT._1, "_"), toString(dQ)], ":")
931- let dR = makeString_2C([makeString(bW._2, "_"), makeString(bm._2, "_"), makeString(aT._2, "_")], ":")
932- let dS = makeString_2C([cC[ay], makeString(bW._3, "_"), makeString(bm._3, "_"), makeString(aT._3, "_")], ":")
933- let dt = invoke(z, "saveWarehouse", [ds, aj], nil)
934- if ((dt == dt))
931+ else (dJ - dR)
932+ let du = makeString_2C([bK[aC], makeString(bW._1, "_"), makeString(bm._1, "_"), makeString(aT._1, "_"), toString(dS)], ":")
933+ let dT = makeString_2C([makeString(bW._2, "_"), makeString(bm._2, "_"), makeString(aT._2, "_")], ":")
934+ let dU = makeString_2C([cC[ay], makeString(bW._3, "_"), makeString(bm._3, "_"), makeString(aT._3, "_")], ":")
935+ let dv = invoke(z, "saveWarehouse", [du, aj], nil)
936+ if ((dv == dv))
935937 then {
936- let dT = invoke(z, "updateBackpack", [an, dS], nil)
937- if ((dT == dT))
938+ let dV = invoke(z, "updateBackpack", [an, dU], nil)
939+ if ((dV == dV))
938940 then {
939- let dv = [StringEntry(aS, dR)]
940- let dU = aT._5
941- let dV = if ((dU > 0))
941+ let dx = [StringEntry(aS, dT)]
942+ let dW = aT._5
943+ let dX = if ((dW > 0))
942944 then {
943- let dW = fraction(aT._5, K, b)
944- let dX = at(dy)
945- let dY = getString(z, dX)
946- if (isDefined(dY))
947- then (((dv :+ ScriptTransfer(dx, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), dW, g))
948- else ((dv :+ ScriptTransfer(dx, (aT._5 - (3 * dW)), g)) :+ ScriptTransfer(y, dW, g))
945+ let dY = fraction(aT._5, K, b)
946+ let dZ = at(dA)
947+ let ea = getString(z, dZ)
948+ if (isDefined(ea))
949+ then (((dx :+ ScriptTransfer(dz, (aT._5 - (3 * dY)), g)) :+ ScriptTransfer(y, dY, g)) :+ ScriptTransfer(addressFromStringValue(value(ea)), dY, g))
950+ else ((dx :+ ScriptTransfer(dz, (aT._5 - (3 * dY)), g)) :+ ScriptTransfer(y, dY, g))
949951 }
950- else dv
951- let dZ = aT._6
952- if ((dZ > 0))
952+ else dx
953+ let eb = aT._6
954+ if ((eb > 0))
953955 then if ((size(cu.payments) != 1))
954956 then throw("exactly 1 payment must be attached")
955957 else {
956958 let cK = cu.payments[0]
957959 let cL = cK.amount
958960 let cM = valueOrErrorMessage(cK.assetId, "WAVES can't be used as payment")
959961 if ((cM != g))
960962 then throw("USDT payments only!")
961- else if ((cL != dZ))
962- then throw(("Payment needed is " + toString(dZ)))
963+ else if ((cL != eb))
964+ then throw(("Payment needed is " + toString(eb)))
963965 else if ((L > cL))
964966 then throw(("Payment should be at least " + toString(L)))
965967 else {
966- let ea = fraction(aT._6, K, b)
967- let dX = at(dC)
968- let dY = getString(z, dX)
969- if (isDefined(dY))
970- then (((dV :+ ScriptTransfer(addressFromStringValue(dC), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g)) :+ ScriptTransfer(addressFromStringValue(value(dY)), ea, g))
971- else ((dV :+ ScriptTransfer(addressFromStringValue(dC), (aT._6 - (3 * ea)), g)) :+ ScriptTransfer(y, ea, g))
968+ let ec = fraction(aT._6, K, b)
969+ let dZ = at(dE)
970+ let ea = getString(z, dZ)
971+ if (isDefined(ea))
972+ then (((dX :+ ScriptTransfer(addressFromStringValue(dE), (aT._6 - (3 * ec)), g)) :+ ScriptTransfer(y, ec, g)) :+ ScriptTransfer(addressFromStringValue(value(ea)), ec, g))
973+ else ((dX :+ ScriptTransfer(addressFromStringValue(dE), (aT._6 - (3 * ec)), g)) :+ ScriptTransfer(y, ec, g))
972974 }
973975 }
974976 else if ((size(cu.payments) != 0))
975977 then throw("No payments needed")
976- else dV
978+ else dX
977979 }
978980 else throw("Strict value is not equal to itself.")
979981 }
980982 else throw("Strict value is not equal to itself.")
981983 }
982984 }
983985 }
984986 }
985987 }
986988 }
987989 else throw("Strict value is not equal to itself.")
988990 }
989991
990992

github/deemru/w8io/169f3d6 
279.07 ms