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