tx · BeN4gT1npeBM3i898fZg8kpWPpspepGpw6V3JvuaZJFi

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.01900000 Waves

2023.03.24 06:50 [2503569] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "BeN4gT1npeBM3i898fZg8kpWPpspepGpw6V3JvuaZJFi", "fee": 1900000, "feeAssetId": null, "timestamp": 1679629860969, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "3yZ7mwFey4T2YT4Qjx7LSSZ69gQitmAFX2jq733vXScCmgFD2fpzoqeUMLPtuyX9rHyCUrEF8GUa7zm2kaaCPuKh" ], "script": "base64:BgKKFQgCEgQKAggIEhAKDggICAgICAgICAgICAEIEg8KDQgICAgICAgICAgIAQgSBgoECAgICBIECgIICBIICgYIAQEIAQgSBAoCCAgSBAoCCAgSBwoFCAgICAgSBgoECAgICCIOZ2V0U3RyaW5nQnlLZXkiA2tleSIIdW5pdFRlc3QiCW9yYWNsZUZlZSIIc2lnbkRhcHAiC2ZlZVJlY2VpdmVyIgh1c2VyRGFwcCINd2hpdGVsaXN0RGFwcCILc2lnbkFzc2V0SWQiC3VzZG5Bc3NldElkIgt1c2R0QXNzZXRJZCIMd2F2ZXNBc3NldElkIgVjaHJpcyIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZSIPZ2V0SW50ZWdlckJ5S2V5Ig5jaGVja1doaXRlbGlzdCIPZ2V0Qm9vbGVhbkJ5S2V5IgdzaWduQ3V0Igt1c2RuV2F2ZUN1dCIOZGVmYXVsdExpY2VuY2UiEmRlZmF1bHRIYXNoTGljZW5jZSILZGFwcFJ1bm5pbmciDm1haW50ZW5hbmNlTVNHIg11c2VyU3VzcGVuZGVkIgt1c2VyUmVtb3ZlZCIQdXNlclVucmVnaXN0ZXJlZCILdXNlckFsbG93ZWQiGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UiFGNoZWNrU2lnbkNlcnRpZmljYXRlIgZzaWduSUQiBU93bmVyIgpzaGEyNTZIYXNoIgckbWF0Y2gwIgFhIgt2YWxpZGF0ZUNJRCIDY2lkIgx2YWxpZGF0ZUhhc2giBGhhc2giDWtleVVzZXJTdGF0dXMiBmNhbGxlciIHa2V5RGF0ZSIFYXJ0SWQiB2tleU5hbWUiB2tleURlc2MiDWtleURpc3BsYXlDaWQiDWtleUV4cG9ydEhhc2giDGtleUV4cG9ydENpZCIKa2V5TWF4TWludCIJa2V5U2lnbklEIglrZXlJc3N1ZWQiCWtleU9uU2FsZSIOa2V5TGljZW5jZUhhc2giDWtleUxpY2VuY2VDaWQiB2tleVRhZ3MiB2tleVR5cGUiB2tleU5vdGUiCmtleUNyYXdsZXIiDGtleVJveWFsdGllcyIIa2V5UHJpY2UiCmtleUVuZFNhbGUiEmtleUFzc2V0SWRBY2NlcHRlZCIHa2V5RmxhZyISa2V5QXJ0aXN0QWdlbnRBZGRyIgphcnRpc3RBZGRyIhRrZXlQcmltYXJ5U2hhcmVBZ2VudCIYa2V5QXJ0aXN0UHVibGljQWdlbnRBZGRyIhprZXlQcmltYXJ5U2hhcmVQdWJsaWNBZ2VudCIRa2V5SGFzaEJ5VHhpZEFkZHIiBHR4aWQiDmtleU93bmVyQnlIYXNoIg1rZXlpZEJ5U2lnbmlkIgZzaWduSWQiEmtleVR4aWRCeUhhc2hPd25lciIOdmFsaWRhdGVBbGxDSUQiCmNpZERpc3BsYXkiCWNpZEV4cG9ydCIKY2lkTGljZW5jZSIPdmFsaWRhdGVBbGxIYXNoIgxzaGEyNTZFeHBvcnQiDXNoYTI1NkxpY2VuY2UiDnZhbGlkYXRlU3RyaW5nIgNzdHIiA21heCIMdmFsaWRhdGVVc2VyIgp1c2VyU3RhdHVzIgpzZXRMSWNlbmNlIhN2YWxpZGF0ZUFydHdvcmtEYXRhIgpsaWNlbmNlQ0lEIgtsaWNlbmNlSGFzaCIEbmFtZSILZGVzY3JpcHRpb24iBHRhZ3MiCXJveWFsdGllcyIJY2hlY2tVc2VyIglpc1BheW1lbnQiAWkiB3BheW1lbnQiBmFtb3VudCIPdmFsaWRhdGVQYXltZW50IgskdDA5MTgwOTIxNiIHYXNzZXRJZCILaXNBcnRNaW50ZWQiCWFkZHJUb1VzZSIBYiIUdmFsaWRhdGVQcmljZUFzc2V0SWQiDHByaWNlQXNzZXRJZCIMYXJ0d29ya1ByaWNlIgskdDA5ODA0OTg0MCIQYWNjZXB0ZWRBc3NldElkcyIPdmFsaWRhdGVNaW5TZWxsIgVwcmljZSIMbWluU2VsbFdhdmVzIgttaW5TZWxsVXNkbiILbWluU2VsbFNpZ24iDWdldEJpZEFzc2V0SWQiFmdldFByaWNlQXNzZXRJZEZyb21CaWQiCmJpZERhdGFLZXkiB2JpZERhdGEiCmJpZERhdGFBcnIiCWJpZEFtb3VudCIKYmlkQXNzZXRJZCIVaWRDYWxsZXJEYXRlU3BvbnNvcmVkIgZwdWJLZXkiC2lzU3BvbnNvcmVkIhNnZXRfc3BvbnNvcmVkX3dhdmVzIgxpZENhbGxlckRhdGUiB2J1eU1pbnQiBmlzc3VlciIFYmlkSWQiCGJpZE93bmVyIg0kdDAxMzA0NDEzMTE0IgJpZCIEZGF0ZSIKbmV3X2NhbGxlciIFaXNCaWQiCGJsb2NrRW5kIg5jYWxsZXJJc0lzc3VlciIIdG90YWxORlQiC2FydHdvcmtOYW1lIghpc09uU2FsZSIKYW1vdW50U29sZCIKbWF4Q2FuU2VsbCINJHQwMTUwNTYxNTI0OCIFYWdlbnQiCmFnZW50U2hhcmUiC3B1YmxpY0FnZW50IhBwdWJsaWNBZ2VudFNoYXJlIg1pc1doaXRlbGlzdGVkIgNjdXQiDWFtb3VudEZvclNpZ24iDmFtb3VudEZvckFnZW50IhRhbW91bnRGb3JQdWJsaWNBZ2VudCIQYW1vdW50Rm9yQ3JlYXRvciINbmV3QW1vdW50U29sZCIJaXNzdWVNZXRhIghpc3N1ZU5GVCIFaWRORlQiCnNlbGxTdGF0dXMiCnJlY2VpdmVORlQiCmFzc2V0SWRCaWQiCWJpZERlbE9sZCIJYmlkVXBkYXRlIgdzb2xkS2V5Iglzb2xkVmFsdWUiCHNvbGREYXRhIhRjb21taXNzaW9uc1dpdGhBZ2VudCIaY29tbWlzc2lvbnNXaXRoUHVibGljQWdlbnQiCnR4VG9DYWxsZXIiBmJ1eVJlcyIIYXNTdHJpbmciAmJ2IgNidjAiBmludm9rZSIDdmFsIgR0eXBlIgdjcmF3bGVyIg0kdDAyMDQyNDIwNDk3Ig0kdDAyMDU5ODIwNjY3Ig92YWxpZGF0ZUFydHdvcmsiEHdoaXRlbGlzdGVkX2Ryb3AiDSR0MDIwOTY2MjEwNTAiCmVudHJ5RXhpc3QiCWhhc2hFeGlzdCIPaXNTaWduQ2VydGlmaWVkIhdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcCINJHQwMjQwODQyNDE1NCINJHQwMjQxNjQyNDIzMyIEZmxhZyIEYWRkciIEbm90ZSINJHQwMjU4NjAyNTg5NCINJHQwMjYzMzAyNjM2NCIMZGF0YVRvRGVsZXRlIgdtYXhNaW50Ig0kdDAyOTIwMDI5MjcwIgZiaWROYnIiCmJhc2VIZWlnaHQiDSR0MDMxNjUyMzE2OTIiDSR0MDMxNjk3MzE3MzMiDSR0MDMyOTUzMzMwMjQiB2NhbGxlcjEiDSR0MDMzMjU5MzMzMjAiDXJldHVybk1vbmV5VG8iCWJpZFN0YXR1cyICdHgiCHZlcmlmaWVyIgNpbnZOAQFhAQFiCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAWICAAABYwcAAWQJAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX29yYWNsZV9mZWUAAWUJAQV2YWx1ZQEJAKYIAQkBAWEBAhFjb25mX3NpZ253ZWJfZGFwcAABZgkBAWEBAhFjb25mX2ZlZV9yZWNlaXZlcgABZwMFAWMJAQV2YWx1ZQEJAKYIAQIjM010NFJHTUV5alNXWUFvY1RQcWQ1NXdkSFFRQjNQVTJVQ20JAQV2YWx1ZQEJAKYIAQkBAWEBAg9jb25mX3VzZXJzX2RhcHAAAWgJAQV2YWx1ZQEJAKYIAQkBAWEBAhNjb25mX3doaXRlbGlzdF9kYXBwAAFpCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAFqCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0ROAAFrCQDZBAEJAQFhAQIYY29uZl9hY2NlcHRlZF9hc3NldF9VU0RUAAFsAQAAAW0JAQFhAQIMY29uZl9hZG1pbl8xAQFuAQFiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUBZAUBYgIfSW50ZWdlciB1bmRlZmluZSBvciAwIGluIG9yYWNsZQEBbwEBYgkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQFiAAABAXABAWIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUBaAUBYgAAAQFxAQFiCQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFAWIHAAFyAAcAAXMACgABdAkBAWEBAhRjb25mX2RlZmF1bHRfbGljZW5jZQABdQkBAWEBAhljb25mX2RlZmF1bHRfbGljZW5jZV9oYXNoAAF2CQELdmFsdWVPckVsc2UCCQCbCAIFAWcCFGNvbmZfZGFwcF9pc19ydW5uaW5nBgABdwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnAhRjb25mX21haW50ZW5hbmNlX21zZwIAAAF4AglTVVNQRU5ERUQAAXkCB1JFTU9WRUQAAXoCDFVOUkVHSVNURVJFRAABQQIHQUxMT1dFRAABQgkBAW4BCQCsAgICEmNlcnRpZmljYXRpb25fZmVlXwkA2AQBBQFpAQFDAwFEAUUBRgQBRwkAnQgCBQFlCQCsAgIJAKwCAgkArAICAghkYXRhX2ZjXwUBRAIBXwUBRQMJAAECBQFHAgZTdHJpbmcEAUgFAUcDCQEIY29udGFpbnMCBQFIBQFGBgcHAQFJAQFKAwkBCGNvbnRhaW5zAgUBSgIBLwMDCQBmAgBMCQCxAgEFAUoJAAACCQCxAgEJAJEDAgkAtQkCBQFKAgEvAAAAOwcJAGYCABAJALECAQkAkQMCCQC1CQIFAUoCAS8AAQcHAQFLAQFMCQAAAgkAsQIBBQFMAEABAU0BAU4JAKwCAgIMdXNlcl9zdGF0dXNfBQFOAQFPAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUBUAIBXwUBTgEBUQIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FAVACAV8FAU4BAVICAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQFQAgFfBQFOAQFTAgFOAVAJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FAVACAV8FAU4BAVQCAU4BUAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUBUAIBXwUBTgEBVQIBTgFQCQCsAgIJAKwCAgkArAICAg9hcnRfZXhwb3J0X2NpZF8FAVACAV8FAU4BAVYCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X21heG1pbnRfBQFQAgFfBQFOAQFXAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9zaWduaWRfBQFQAgFfBQFOAQFYAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQFQAgFfBQFOAQFZAgFOAVAJAKwCAgkArAICCQCsAgICC2FydF9vbnNhbGVfBQFQAgFfBQFOAQFaAgFOAVAJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQFQAgFfBQFOAQJhYQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfbGljZW5jZV9jaWRfBQFQAgFfBQFOAQJhYgIBTgFQCQCsAgIJAKwCAgkArAICAglhcnRfdGFnc18FAVACAV8FAU4BAmFjAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUBUAIBXwUBTgECYWQCAU4BUAkArAICCQCsAgIJAKwCAgIJYXJ0X25vdGVfBQFQAgFfBQFOAQJhZQIBTgFQCQCsAgIJAKwCAgkArAICAhBhcnRfY3Jhd2xlcl9jaWRfBQFQAgFfBQFOAQJhZgIBTgFQCQCsAgIJAKwCAgkArAICAg5hcnRfcm95YWx0aWVzXwUBUAIBXwUBTgECYWcCAU4BUAkArAICCQCsAgIJAKwCAgIKYXJ0X3ByaWNlXwUBUAIBXwUBTgECYWgCAU4BUAkArAICCQCsAgIJAKwCAgIMYXJ0X2VuZHNhbGVfBQFQAgFfBQFOAQJhaQIBTgFQCQCsAgIJAKwCAgkArAICAhJhcnRfYXNzZXRBY2NlcHRlZF8FAVACAV8FAU4BAmFqAgFOAVAJAKwCAgkArAICCQCsAgICCWFydF9mbGFnXwUBUAIBXwUBTgECYWsBAmFsCQCsAgICDWFydGlzdF9hZ2VudF8FAmFsAQJhbQECYWwJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQJhbAECYW4BAmFsCQCsAgICFGFydGlzdF9wdWJsaWNfYWdlbnRfBQJhbAECYW8BAmFsCQCsAgICHGFydGlzdF9wdWJsaWNfYWdlbnRfcHJpbWFyeV8FAmFsAQJhcAIBTgJhcQkArAICCQCsAgIJAKwCAgITZ2V0X2hhc2hieXR4aWRhZGRyXwUCYXECAV8FAU4BAmFyAQFGCQCsAgICEmdldF9vd25lcl9ieV9oYXNoXwUBRgECYXMCAU4CYXQJAKwCAgkArAICCQCsAgICEmdldF9hcnRpZGJ5c2lnbmlkXwUCYXQCAV8FAU4BAmF1AgFGAU4JAKwCAgIXZ2V0X3R4aWRfYnlfaGFzaF9vd25lcl8JANgEAQkA1BYBCQCbAwEJAKwCAgUBRgUBTgECYXYDAmF3AmF4AmF5AwkBASEBCQEBSQEFAmF3CQACAQIRV3JvbmcgRGlzcGxheSBDSUQDCQEBIQEJAQFJAQUCYXgJAAIBAhBXcm9uZyBFeHBvcnQgQ0lEAwMJAQIhPQIFAmF5AgAJAQEhAQkBAUkBBQJheQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBAmF6AgJhQQJhQgMJAQEhAQkBAUsBBQJhQQkAAgECGEV4cG9ydCBIYXNoIDY0IGNoYXIuIG1heAMJAQEhAQkBAUsBBQJhQgkAAgECGUxpY2VuY2UgSGFzaCA2NCBjaGFyLiBtYXgGAQJhQwICYUQCYUUDCQAAAgkAsQIBBQJhRAAACQACAQIYRmllbGQgY2Fubm90IGJlIGlzIGVtcHR5AwkAZgIJALECAQUCYUQFAmFFCQACAQkArAICBQJhRAIMIGlzIHRvbyBsb25nBgECYUYBAU4EAmFHCQELdmFsdWVPckVsc2UCCQCdCAIFAWcJAQFNAQUBTgUBegMDCQAAAgUCYUcFAXoGCQAAAgUCYUcFAUECLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUCYUcFAXgCEUFjY291bnQgc3VzcGVuZGVkAwkAAAIFAmFHBQF5Ag9BY2NvdW50IHJlbW92ZWQCAAECYUgCAmF5AmFCBAFKAwkAAAIJALECAQUCYXkAAAUBdAUCYXkEAUwDCQAAAgkAsQIBBQJhQgAABQF1BQJhQgkAlAoCBQFKBQFMAQJhSQoBTgJhdwJheAJhSgJhQQJhSwJhTAJhTQJhTgJhTwQCYVAJAQJhRgEFAU4DCQECIT0CBQJhUAIACQACAQUCYVADCQAAAgkAsQIBBQJhdwAACQACAQIbRGlzcGxheSBDSUQgY2Fubm90IGJlIGVtcHR5AwkBASEBCQECYXYDBQJhdwUCYXgFAmFKCQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBAmF6AgUCYUEFAmFLCQACAQITUHJvYmxlbSB3aXRoIEhhc2hlcwMJAQEhAQkBAmFDAgUCYUwAZAkAAgECEjEwMCBDaGFyLiBtYXggbmFtZQMJAQEhAQkBAmFDAgUCYU0A6AcJAAIBAhoxMDAwIENoYXIuIG1heCBkZXNjcmlwdGlvbgMDCQBmAgAABQJhTwYJAGYCBQJhTwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUCYU4CASwABQkAAgECCzUgdGFncyBtYXguAgABAmFRAQJhUgMJAAACCQCQAwEIBQJhUghwYXltZW50cwAACQACAQITTm8gcGF5bWVudCBhdHRhY2hlZAQCYVMJAQV2YWx1ZQEJAJEDAggFAmFSCHBheW1lbnRzAAAEAmFUCQEFdmFsdWUBCAUCYVMGYW1vdW50CQCUCgIFAmFTBQJhVAECYVUBAmFSBAJhVgkBAmFRAQUCYVIEAmFTCAUCYVYCXzEEAmFUCAUCYVYCXzIEAmFXAwMJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAkAAAIIBQJhUwdhc3NldElkBQFpBwgFAmFTB2Fzc2V0SWQJAAIBAitPbmx5IFNJR04gdG9rZW4gYWNjZXB0ZWQgYXMgdHJhbnNhY3Rpb24gZmVlAwkBAiE9AgUCYVQFAUIJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUBQgkAlAoCBQJhVAUCYVcBAmFYAgJhWQFQBAFHCQCaCAIFBHRoaXMJAQFYAgUCYVkFAVADCQABAgUBRwIDSW50BAJhWgUBRwMJAQIhPQIFAmFaAAAGBwcBAmJhAwJhUgJiYgJiYwQCYmQJAQJhUQEFAmFSBAJhUwgFAmJkAl8xBAJhVAgFAmJkAl8yBAJhVwMJAQEhAQkBCWlzRGVmaW5lZAEIBQJhUwdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFAmJiAAAJAAACCQDYBAEJAQV2YWx1ZQEIBQJhUwdhc3NldElkBQJiYgcIBQJhUwdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFAmFXBQR1bml0CQECIT0CBQJiYgIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUCYmMFAmFUCQACAQITUGF5bWVudCBkb24ndCBtYXRjaAkAlAoCBQJhVAUCYVcBAmJlAQJhVwMDAwMDCQECIT0CBQJhVwkA2AQBBQFpCQECIT0CBQJhVwkA2AQBBQFsBwkBAiE9AgUCYVcCBVdBVkVTBwkBAiE9AgUCYVcJANgEAQUBagcJAQIhPQIFAmFXCQDYBAEFAWsHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQJiZgICYVcCYmcEAmJoAwUBYwAKCQEBbgECDndhdmVzX21pbl9zZWxsBAJiaQDAhD0EAmJqAwUBYwABCQBoAgUBQgACAwMDAwMDCQAAAgUCYVcJANgEAQUBagkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBawkAZgIFAmJpBQJiZwcJAQIhPQIFAmJnAAAHBgMDCQAAAgUCYVcJANgEAQUBaQkAZgIFAmJqBQJiZwcJAQIhPQIFAmJnAAAHBgMDAwkAAAIFAmFXCQDYBAEFAWwGCQAAAgUCYVcCBVdBVkVTCQBmAgUCYmgFAmJnBwkBAiE9AgUCYmcAAAcJAAIBAhhXcm9uZyBtaW5pbXVtIHNlbGwgcHJpY2UGAQJiawECYVcDCQAAAgUCYVcCBVdBVkVTBQR1bml0CQDZBAEFAmFXAQJibAECYm0EAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYnAJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJibwABBAJicQkBAmJrAQkAkQMCBQJibwAAAwkAZwIAAAUCYnAJAAIBAgxXcm9uZyBhbW91bnQJAJQKAgUCYnAFAmJxAQJicgICYVICYnMDCQEBIQEFAXYJAAIBBQF3BAJidAMJAQIhPQIFAmJzAgAJAQt2YWx1ZU9yRWxzZQIJAQFwAQkArAICCQClCAEJAKcIAQkA2QQBBQJicwIJX2ZyZWVfdHhzAAAAAAMJAAACBQJidAUCYnQEAU4DAwkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwkAZgIFAmJ0AAAHCQClCAEJAKcIAQkA2QQBBQJicwkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwQCYnUDAwkBAiE9AgUCYnMCAAkAZgIFAmJ0AAAHCQD8BwQFAWgCCXVzZUZyZWVUeAkAzAgCCQClCAEJAKcIAQkA2QQBBQJicwUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCYnUFAmJ1CQCWCgQJANgEAQgFAmFSDXRyYW5zYWN0aW9uSWQFAU4IBQlsYXN0QmxvY2sJdGltZXN0YW1wCQBmAgUCYnQAAAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECYnYBAmFSAwkBASEBBQF2CQACAQUBdwkAlQoDCQDYBAEIBQJhUg10cmFuc2FjdGlvbklkCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAECYncGAmFSAVACYngCYnkCYnoCYnMEAmJBCQECYnICBQJhUgUCYnMEAmJCCAUCYkECXzEEAU4IBQJiQQJfMgQCYkMIBQJiQQJfMwQCYnQIBQJiQQJfNAMGCQACAQkArAICCQCsAgIJAKUDAQkAAAIJANgEAQgIBQJhUgZjYWxsZXIFYnl0ZXMJAKUIAQUEdGhpcwIDIC8gCQClAwEFAmJ0BAJiRAMDCQAAAgkA2AQBCAgFAmFSBmNhbGxlcgVieXRlcwkApQgBBQR0aGlzBQJidAcJAKUIAQkApwgBCQDZBAEFAmJzCQDYBAEICAUCYVIGY2FsbGVyBWJ5dGVzAwYJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQJiRAIDIC8gBQJieAIDIC8gBQJiegIDIC8gBQJicwQCYkUDAwMJAAACBQFOBQJieAkBAiE9AgUCYnoCAAcJAQIhPQIFAmJ5AgAHBgcEAmJGCQEBbwEJAQJhaAIFAU4FAVADAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkBASEBBQJiRQcJAAIBAgtTYWxlIGVuZGVkLgQCYkcJAAACBQFOBQJieAQCYkgJAQFvAQIQdG90YWxfbmZ0X2lzc3VlZAQBRAkBAWEBCQEBVwIFAmJ4BQFQBAJiSQkBAWEBCQEBUQIFAmJ4BQFQAwkAAAIFAmJJAgAJAAIBAhFBcnQgZG9lc24ndCBleGlzdAQCYkoJAQFxAQkBAVkCBQJieAUBUAQCYksJAQFvAQkBAVgCBQJieAUBUAQCYmMDBQJiRwkAaAIFAUIAAgkBAW8BCQECYWcCBQJieAUBUAQCYmIDBQJiRwkA2AQBBQFpCQEBYQEJAQJhaQIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwMDCQEBIQEFAmJFCQEBIQEFAmJHBwMDCQBnAgAABQJiYwYJAQEhAQUCYkoGCQBnAgAABQJiTAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFAmJFBQJiRwcJAGcCAAAFAmJMBwkAAgECFE1heCBpc3N1YWJsZSBub3Qgc2V0BAJhUAkBAmFGAQUCYngDAwUCYkUJAQIhPQIFAmFQAgAHCQACAQUCYVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJNAwUCYkUJAQJibAEFAmJtCQECYmEDBQJhUgUCYmIFAmJjBAJhVAgFAmJNAl8xBAJhVwgFAmJNAl8yBAJiTgkBC3ZhbHVlT3JFbHNlAgkAnQgCBQFnCQECYWsBBQJieAUBZgQCYk8JAQt2YWx1ZU9yRWxzZQIJAJoIAgUBZwkBAmFtAQUCYngAAAQCYlAJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUBZwkBAmFuAQUCYngFAWYEAmJRCQELdmFsdWVPckVsc2UCCQCaCAIFAWcJAQJhbwEFAmJ4AAAEAmJSCQEBcAEFAmJ4BAJiUwMJAGYCBQJiUgUGaGVpZ2h0AAADCQAAAgUCYVcFAWkFAXIFAXMEAmJUCQBrAwUCYVQFAmJTAGQEAmJVAwMDCQECIT0CBQJiTgUBZgkAZgIFAmJPAAAHCQBmAgUGaGVpZ2h0BQJiUgcJAGsDBQJhVAUCYk8AkE4AAAQCYlYDAwMJAQIhPQIFAmJQBQFmCQBmAgUCYlEAAAcJAGYCBQZoZWlnaHQFAmJSBwkAawMFAmFUBQJiUQCQTgAABAJiVwkAZQIFAmFUBQJiVAMJAAACBQJiSwUCYkwJAAIBAgxBcnQgc29sZCBvdXQEAmJYCQBkAgUCYksAAQQCYlkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglDcmVhdG9yOiAFAmJ4AgosCiBBcnRJRDogBQFQAgssCiBTaWduSUQ6IAUBRAIRLAogQXJ0d29yayBuYW1lOiAFAmJJAgosCiBJc3N1ZTogCQCkAwEFAmJYAgEvCQCkAwEFAmJMBAJiWgkAwggFCQCsAgICA1NBXwkApAMBCQBkAgUCYkgAAQUCYlkAAQAABwQCY2EJALgIAQUCYloEAmNiAwMJAAACBQJiWAUCYkwGCQEBIQEFAmJKBwYEAmNjAwMDCQAAAgUBTgUCYngJAQIhPQIFAmJ6AgAHCQECIT0CBQJieQIABwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCYnoIBQJhUgZjYWxsZXIEAmNkAwkBASEBCQEJaXNEZWZpbmVkAQUCYVcCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFAmFXBAJibgkBAWEBCQCsAgIFAmJtAgVfT1BFTgQCY2UJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOBAJjZgkBC1N0cmluZ0VudHJ5AgkArAICBQJibQIHX0NMT1NFRAkArAICCQCsAgIFAmJuAgFfCQCkAwEFAmJDBAJjZwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAglhcnRfc29sZF8JAKQDAQUCYlgCBF9vZl8JAKQDAQUCYkwCAV8FAVACAV8FAmJ4BAJjaAMJAQEhAQUCYkUJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUBTgIBXwkApAMBBQJiQwIBXwUCYkICAV8JAKQDAQUCYmMCAV8FAmJiAgFfCQDYBAEFAmNhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQUCY2MCAV8JAKQDAQUCYkMCAV8FAmJCAgFfCQCkAwEFAmFUAgFfBQJjZAIBXwkA2AQBBQJjYQQCY2kJAQtTdHJpbmdFbnRyeQIFAmNnBQJjaAQCY2oDCQECIT0CBQJiVQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmCQBlAgUCYlQFAmJVBQJhVwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYk4FAmJVBQJhVwUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJiVAUCYVcFA25pbAQCY2sDCQECIT0CBQJiVgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJiUAUCYlYFAmFXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJieAkAZQIFAmJXBQJiVgUCYVcFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUCYngFAmJXBQJhVwUDbmlsBAJjbAMFAmJ0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsBAJjbQkAzggCCQDOCAIJAM4IAgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQJieAUBUAUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICAgRuZnRfCQDYBAEFAmNhBQJjZwkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFAmJIAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhaAIFAmJ4BQFQAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUCYngFAVAFAmNiCQDMCAIFAmJaCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmNjAAEFAmNhBQNuaWwFAmNqBQJjawUCY2wDBQJiRQkAzAgCBQJjaQkAzAgCBQJjZgkAzAgCBQJjZQUCY20JAMwIAgUCY2kFAmNtAQJjbgECY28EAUcFAmNvAwkAAQIFAUcCBlN0cmluZwQCY3AFAUcFAmNwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkCgJjcQEHc2V0Q29uZgIBYgJjcgQBTgkApQgBCAUCY3EGY2FsbGVyAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgMJAQhjb250YWlucwIFAWICBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFAWIFAmNyBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMCYVIBCmFkZEFydHdvcmsOAUYBRAJhTAJhTQJhTgJjcwJhdwJhQQJheAJhQgJheQJjdAJhTwJicwQCY3UJAQJicgIFAmFSBQJicwQBUAgFAmN1Al8xBAFOCAUCY3UCXzIEAmJDCAUCY3UCXzMEAmJ0CAUCY3UCXzQDCQEBIQEJAQFLAQUBRgkAAgECJEhhc2ggc2hvdWxkIGJlIDY0IGNoYXJhY3RlcnMgbWF4aW11bQQCY3YJAQJhSAIFAmF5BQJhQgQCYUoIBQJjdgJfMQQCYUsIBQJjdgJfMgQCY3cJAQJhSQoFAU4FAmF3BQJheAUCYUoFAmFBBQJhSwUCYUwFAmFNBQJhTgUCYU8DCQECIT0CBQJjdwIACQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJjeAkAZgIJAQFwAQkArAICBQFOAgtfZnJlZV9kcm9wcwAABAJjeQMFAmN4CQCUCgIAAAUBRAkBAmFVAQUCYVIEAmFUCAUCY3kCXzEEAmFXCAUCY3kCXzIDCQEBIQEJAQlpc0RlZmluZWQBBQJhVAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAJjegkBAWEBCQECYXUCBQFGBQFOAwkBAiE9AgUCY3oCAAkAAgECFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAJjQQkBAWEBCQECYXIBBQFGAwkBAiE9AgUCY0ECAAkAAgECF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkBAJjQgkBAUMDBQFEBQFOBQFGAwkBASEBBQJjQgkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuBAJjQwMFAmN4CQD8BwQFAWgCC3VzZUZyZWVEcm9wCQDMCAIFAU4FA25pbAUDbmlsBQR1bml0AwkAAAIFAmNDBQJjQwQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcgEFAUYFAU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmF1AgUBRgUBTgUBUAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAU8CBQFOBQFQBQJiQwkAzAgCCQELU3RyaW5nRW50cnkCCQEBUQIFAU4FAVAFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUBUAUCYU0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVMCBQFOBQFQBQJhdwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQIFAU4FAVAFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUBUAUCYUEJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVoCBQFOBQFQBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECBQFOBQFQBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWMCBQFOBQFQBQJjcwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQFQBQJhTgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVYCBQFOBQFQAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcCBQFOBQFQBQFECQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFAU4FAVAAAAkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBAVkCBQFOBQFQBwkAzAgCCQELU3RyaW5nRW50cnkCCQECYXMCBQFOBQFEBQFQCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhcAIFAU4FAVAFAUYJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAgUBTgUBUAUCY3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZgIFAU4FAVAFAmFPCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFmBQJhVAUBaQUDbmlsBQJjbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJhUgENdXBkYXRlQXJ0d29yaw0CYXECYUwCYU0CYU4CY3MCYXcCYUECYXgCYUICYXkCY3QCYU8CYnMDCQEBIQEFAXYJAAIBBQF3BAJjRAkBAmJyAgUCYVIFAmJzBAJiQggFAmNEAl8xBAFOCAUCY0QCXzIEAmJDCAUCY0QCXzMEAmJ0CAUCY0QCXzQEAmNFCQECYUgCBQJheQUCYUIEAmFKCAUCY0UCXzEEAmFLCAUCY0UCXzIEAmN3CQECYUkKBQFOBQJhdwUCYXgFAmFKBQJhQQUCYUsFAmFMBQJhTQUCYU4FAmFPAwkBAiE9AgUCY3cCAAkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQCY3oJAQFhAQkBAVECBQFOBQJhcQMJAAACBQJjegIACQACAQIPRW50cnkgbm90IGZvdW5kBAJjRgkBAWEBCQECYWoCBQFOBQJhcQMJAAACBQJjRgIHSUxMRUdBTAkAAgECHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBASEBCQECYVgCBQFOBQJhcQQCY2wDBQJidAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUBTgAABQR1bml0BQNuaWwFA25pbAkAzggCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFRAgUBTgUCYXEFAmFMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFSAgUBTgUCYXEFAmFNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFTAgUBTgUCYXEFAmF3CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAgUBTgUCYXEFAmF4CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFUAgUBTgUCYXEFAmFBCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAU4FAmFxBQJhSgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWgIFAU4FAmFxBQJhSwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWICBQFOBQJhcQUCYU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUBTgUCYXEFAmNzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQIFAU4FAmFxBQJjdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAmFmAgUBTgUCYXEFAmFPBQNuaWwFAmNsCQACAQIOQWxyZWFkeSBtaW50ZWQCYVIBC2ZsYWdBcnR3b3JrBAFQAmNHAmNGAmNIBAJjSQkBAmJ2AQUCYVIEAmJCCAUCY0kCXzEEAU4IBQJjSQJfMgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFAW0JAMwIAgkApQgBBQR0aGlzBQNuaWwFAU4DCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAgdDT05TRU5UCQDMCAICAAkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFAmNGCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhagIFAmNHBQFQBQJjRgkAzAgCCQELU3RyaW5nRW50cnkCCQECYWQCBQJjRwUBUAUCY0gFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFAmNGCQACAQITWW91IGFyZSBub3QgYWxsb3dlZAJhUgENZGVsZXRlQXJ0d29yawIBUAJjRwQCY0oJAQJidgEFAmFSBAJiQggFAmNKAl8xBAFOCAUCY0oCXzIEAmFZAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0cFAU4EAmN6CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQFhAQkBAVECBQJhWQUBUAIgTm8gYXJ0IG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MDCQAAAgUCY3oCAAkAAgECIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBAFGCQEBYQEJAQJhcAIFAmFZBQFQAwkAAAIFAUYCAAkAAgECJU5vIGFydCBoYXNoIG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEAUQJAQFhAQkBAVcCBQJhWQUBUAMJAAACBQFEAgAJAAIBAhNObyBTSUdOIElEIG1hdGNoaW5nBAJjSwkAzAgCCQELRGVsZXRlRW50cnkBCQEBTwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFRAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVICBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBUwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFVAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYQIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYwIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQJhYgIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVcCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQEBWAIFAmFZBQFQCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFZAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFqAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFnAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFpAgUCYVkFAVAJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAmFyAQUBRgkAzAgCCQELRGVsZXRlRW50cnkBCQECYXMCBQJhWQUBRAkAzAgCCQELRGVsZXRlRW50cnkBCQECYXUCBQFGBQJhWQkAzAgCCQELRGVsZXRlRW50cnkBCQECYWgCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWQCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWUCBQJhWQUBUAkAzAgCCQELRGVsZXRlRW50cnkBCQECYWYCBQJhWQUBUAUDbmlsAwkBASEBCQECYVgCBQJhWQUBUAMJAQEhAQUBdgkAAgEFAXcFAmNLAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUBbQkAzAgCCQClCAEFBHRoaXMFA25pbAUBTgUCY0sJAAIBAihBcnQgYWxyZWFkeSBtaW50ZWQsIHlvdSBjYW5ub3QgZGVsZXRlIGl0AmFSAQtzZWxsQXJ0d29yawYBUAJiZwJjTAJhVwJiRgJicwQCY00JAQJicgIFAmFSBQJicwQCYkIIBQJjTQJfMQQBTggFAmNNAl8yBAJiQwgFAmNNAl8zBAJidAgFAmNNAl80BAJiSQkBAWEBCQEBUQIFAU4FAVADCQAAAgUCYkkCAAkAAgECI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BAJjRgkBAWEBCQECYWoCBQFOBQFQAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgIPQ0hBTkdFX1JFUVVJUkVECQDMCAICB0ZMQUdHRUQJAMwIAgIHSUxMRUdBTAUDbmlsBQJjRgkAAgECD0ZsYWdnZWQgYXJ0d29yawQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVADCQBmAgAABQJiRgkAAgECDE5lZ2F0aXZlIGVuZAMDCQBmAgUCYkYAAAMJAQIhPQIFAmNMAAEGCQECIT0CBQJiZwAABwkAAgECOlRpbWVkIG9mZmVyIG9ubHkgYWxsb3dlZCBmb3IgdW5pcXVlIGVkaXRpb24gYW5kIG9mZmVyIG9ubHkEAmNPAwkAAAIFAmJGAAAAAAUGaGVpZ2h0AwkBASEBCQECYmUBBQJhVwkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQMJAQEhAQkBAmJmAgUCYVcFAmJnCQACAQIVU29tZXRoaW5nIHdlbnQgd3JvbmchBAJhUAkBAmFGAQUBTgMJAQIhPQIFAmFQAgAJAAIBBQJhUAQCYksJAQFvAQkBAVgCBQFOBQFQBAJiTAkBAW8BCQEBVgIFAU4FAVADCQBmAgUCY0wAZAkAAgECHDEwMCBlZGl0aW9ucyBtYXggcGVyIGFydHdvcmsDAwkBAiE9AgUCYksAAAkAAAIFAmJLBQJiTAcJAAIBAhRNYXggZWRpdGlvbiByZWFjaGVkLgMDCQBmAgUCYksAAAkBAiE9AgUCYkwFAmNMBwkAAgECJkNhbm5vdCBjaGFuZ2UgbWF4aW11bSBpc3N1YWJsZSBhbnltb3JlAwMJAGYCBQJjTgAACQECIT0CBQJiTAUCY0wHCQACAQIxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQCY2IDAwkAZgIFAmJnAAAJAGYCBQJjTAAABwYHBAJjbAMFAmJ0CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQFOAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQFZAgUBTgUBUAUCY2IJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJhZwIFAU4FAVAFAmJnCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVgIFAU4FAVAFAmNMCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaQIFAU4FAVAFAmFXCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECYWgCBQFOBQFQCQBkAgUCY08FAmJGBQNuaWwFAmNsAmFSAQpidXlBcnR3b3JrAgFQAmJ4CQECYncGBQJhUgUBUAUCYngCAAIAAgACYVIBBnNldEJpZAIBUAJieAQCY1AJAQJidgEFAmFSBAJiQggFAmNQAl8xBAFOCAUCY1ACXzIEAmJDCAUCY1ACXzMEAmNRCQECYVEBBQJhUgQCYVMIBQJjUQJfMQQCYVQIBQJjUQJfMgQCYVcDCQEBIQEJAQlpc0RlZmluZWQBCAUCYVMHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFAmFTB2Fzc2V0SWQEAmJGCQEBbwEJAQJhaAIFAmJ4BQFQAwMJAQIhPQIFAmJGAAAJAGcCBQZoZWlnaHQFAmJGBwkAAgECC1NhbGUgZW5kZWQuBAJjTgkBAW8BCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUBUAMJAQEhAQkBAmJlAQUCYVcJAAIBAhJhc3NldCBub3QgYWNjZXB0ZWQDCQEBIQEJAQJiZgIFAmFXBQJhVAkAAgECDldyb25nIG1pbiBzZWxsBAJiSwkBAW8BCQEBWAIFAmJ4BQFQBAJiTAkBAW8BCQEBVgIFAmJ4BQFQAwkAZwIAAAUCYkwJAAIBAiNObyBtYXggZWRpdGlvbiBzZXQgZm9yIHRoaXMgYXJ0d29yawMJAGcCBQJiSwUCYkwJAAIBAhhTb2xkIG91dCwgeW91IGNhbm5vdCBiaWQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQFOAgFfBQJiQgIFX09QRU4JAKwCAgkArAICCQCsAgIJAKwCAgUCYVcCAV8JAKQDAQUCYVQCAV8JAKQDAQUCYkMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQFQCQBkAgUCY04AAQUDbmlsAmFSAQlhY2NlcHRCaWQFAVACYngCYnkCYnoCYnMEAmNSCQECYnICBQJhUgUCYnMEAmJCCAUCY1ICXzEEAmNTCAUCY1ICXzIEAmJDCAUCY1ICXzMEAmJ0CAUCY1ICXzQDCQECIT0CBQJjUwUCYngJAAIBAhlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQECYncGBQJhUgUBUAUCYngFAmJ5BQJiegUCYnMCYVIBCWNhbmNlbEJpZAQBUAJieAJieQJiegQCY1QJAQJidgEFAmFSBAJiQggFAmNUAl8xBAFOCAUCY1QCXzIEAmJDCAUCY1QCXzMDAwkBAiE9AgUBTgUCYnoJAQIhPQIFAU4FAmJ4BwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24EAmNVAwkAAAIFAU4FAmJ4BQJiegUBTgQCY04JAQFvAQkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAEAmJtCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FAVACAV8FAmJ4AgFfBQJiegIBXwUCYnkEAmJuCQEBYQEJAKwCAgUCYm0CBV9PUEVOAwkAAAIFAmJuAgAJAAIBAg1CaWQgbm90IGZvdW5kBAJibwkAtQkCBQJibgIBXwQCYVcJAQJiawEJAJEDAgUCYm8AAAQCY1YCCENBTkNFTEVECQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUCYm0CBV9PUEVOCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICBQJibQIBXwUCY1YJAKwCAgkArAICBQJibgIBXwkApAMBBQJiQwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FAVAJAGUCBQJjTgABCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQJjVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJvAAEFAmFXBQNuaWwBAmNXAQJjWAAEAUcFAmNXAwkAAQIFAUcCF0ludm9rZVNjcmlwdFRyYW5zYWN0aW9uBAJjWQUBRwMDAwMJAAACCAUCY1kIZnVuY3Rpb24CCmFkZEFydHdvcmsJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAPQDAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwANAwMDAwkAAAIIBQJjWQhmdW5jdGlvbgINdXBkYXRlQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAwDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAgtzZWxsQXJ0d29yawkAAAIIBQJjWQRkQXBwBQR0aGlzBwkAAAIIBQJjWQNmZWUAoMIeBwkAAAIIBQJjWQpmZWVBc3NldElkBQR1bml0BwkA9AMDCAUCY1cJYm9keUJ5dGVzCQCRAwIIBQJjVwZwcm9vZnMAAAkA2QQBCQECY24BCQCRAwIIBQJjWQRhcmdzAAUDAwMDCQAAAggFAmNZCGZ1bmN0aW9uAglhY2NlcHRCaWQJAAACCAUCY1kEZEFwcAUEdGhpcwcJAAACCAUCY1kDZmVlAKDCHgcJAAACCAUCY1kKZmVlQXNzZXRJZAUEdW5pdAcJAMgTAwgFAmNXCWJvZHlCeXRlcwkAkQMCCAUCY1cGcHJvb2ZzAAAJANkEAQkBAmNuAQkAkQMCCAUCY1kEYXJncwAECQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5CQD0AwMIBQJjVwlib2R5Qnl0ZXMJAJEDAggFAmNXBnByb29mcwAACAUCY1cPc2VuZGVyUHVibGljS2V5abnymg==", "height": 2503569, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: Ank94k8F9yomj7QdKNgDRWtLj6p2FDs46pqu9shqdXAM Next: H6SZ9uWouiSCzv5Z9W6tuL1NQUoYqXGifXkyqDUVcLnB Diff:
OldNewDifferences
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383- let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
384- then (isSponsored > 0)
385- else false)
386- then toString(addressFromPublicKey(fromBase58String(pubKey)))
387- else toBase58String(i.caller.bytes)
388- let get_sponsored_waves = if (if ((pubKey != ""))
389- then (isSponsored > 0)
390- else false)
391- then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392- else unit
393- if ((get_sponsored_waves == get_sponsored_waves))
394- then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
383+ if ((isSponsored == isSponsored))
384+ then {
385+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
386+ then (isSponsored > 0)
387+ else false)
388+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
389+ else toBase58String(i.caller.bytes)
390+ let get_sponsored_waves = if (if ((pubKey != ""))
391+ then (isSponsored > 0)
392+ else false)
393+ then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
394+ else unit
395+ if ((get_sponsored_waves == get_sponsored_waves))
396+ then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
397+ else throw("Strict value is not equal to itself.")
398+ }
395399 else throw("Strict value is not equal to itself.")
396400 }
397401
402406
403407
404408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
405- let $t01304113111 = idCallerDateSponsored(i, pubKey)
406- let id = $t01304113111._1
407- let caller = $t01304113111._2
408- let date = $t01304113111._3
409- let isSponsored = $t01304113111._4
409+ let $t01304413114 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01304413114._1
411+ let caller = $t01304413114._2
412+ let date = $t01304413114._3
413+ let isSponsored = $t01304413114._4
410414 if (true)
411415 then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
412416 else {
473477 then throw(checkUser)
474478 else {
475479 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01505315245 = if (isBid)
480+ let $t01505615248 = if (isBid)
477481 then getPriceAssetIdFromBid(bidDataKey)
478482 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01505315245._1
480- let assetId = $t01505315245._2
483+ let amount = $t01505615248._1
484+ let assetId = $t01505615248._2
481485 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482486 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483487 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
583587
584588 @Callable(i)
585589 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
586- let $t02042120494 = idCallerDateSponsored(i, pubKey)
587- let artId = $t02042120494._1
588- let caller = $t02042120494._2
589- let date = $t02042120494._3
590- let isSponsored = $t02042120494._4
590+ let $t02042420497 = idCallerDateSponsored(i, pubKey)
591+ let artId = $t02042420497._1
592+ let caller = $t02042420497._2
593+ let date = $t02042420497._3
594+ let isSponsored = $t02042420497._4
591595 if (!(validateHash(sha256Hash)))
592596 then throw("Hash should be 64 characters maximum")
593597 else {
594- let $t02059520664 = setLIcence(cidLicence, sha256Licence)
595- let licenceCID = $t02059520664._1
596- let licenceHash = $t02059520664._2
598+ let $t02059820667 = setLIcence(cidLicence, sha256Licence)
599+ let licenceCID = $t02059820667._1
600+ let licenceHash = $t02059820667._2
597601 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
598602 if ((validateArtwork != ""))
599603 then throw("Something went wrong!")
600604 else {
601605 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
602- let $t02096321047 = if (whitelisted_drop)
606+ let $t02096621050 = if (whitelisted_drop)
603607 then $Tuple2(0, signID)
604608 else validatePayment(i)
605- let amount = $t02096321047._1
606- let assetId = $t02096321047._2
609+ let amount = $t02096621050._1
610+ let assetId = $t02096621050._2
607611 if (!(isDefined(amount)))
608612 then throw("Something went wrong")
609613 else {
644648 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
645649 then throw(maintenanceMSG)
646650 else {
647- let $t02408124151 = idCallerDateSponsored(i, pubKey)
648- let id = $t02408124151._1
649- let caller = $t02408124151._2
650- let date = $t02408124151._3
651- let isSponsored = $t02408124151._4
652- let $t02416124230 = setLIcence(cidLicence, sha256Licence)
653- let licenceCID = $t02416124230._1
654- let licenceHash = $t02416124230._2
651+ let $t02408424154 = idCallerDateSponsored(i, pubKey)
652+ let id = $t02408424154._1
653+ let caller = $t02408424154._2
654+ let date = $t02408424154._3
655+ let isSponsored = $t02408424154._4
656+ let $t02416424233 = setLIcence(cidLicence, sha256Licence)
657+ let licenceCID = $t02416424233._1
658+ let licenceHash = $t02416424233._2
655659 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
656660 if ((validateArtwork != ""))
657661 then throw("Something went wrong!")
679683
680684 @Callable(i)
681685 func flagArtwork (artId,addr,flag,note) = {
682- let $t02585725891 = idCallerDate(i)
683- let id = $t02585725891._1
684- let caller = $t02585725891._2
686+ let $t02586025894 = idCallerDate(i)
687+ let id = $t02586025894._1
688+ let caller = $t02586025894._2
685689 if (containsElement([chris, toString(this)], caller))
686690 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
687691 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
693697
694698 @Callable(i)
695699 func deleteArtwork (artId,addr) = {
696- let $t02632726361 = idCallerDate(i)
697- let id = $t02632726361._1
698- let caller = $t02632726361._2
700+ let $t02633026364 = idCallerDate(i)
701+ let id = $t02633026364._1
702+ let caller = $t02633026364._2
699703 let addrToUse = if (containsElement([chris, toString(this)], caller))
700704 then addr
701705 else caller
728732
729733 @Callable(i)
730734 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
731- let $t02919729267 = idCallerDateSponsored(i, pubKey)
732- let id = $t02919729267._1
733- let caller = $t02919729267._2
734- let date = $t02919729267._3
735- let isSponsored = $t02919729267._4
735+ let $t02920029270 = idCallerDateSponsored(i, pubKey)
736+ let id = $t02920029270._1
737+ let caller = $t02920029270._2
738+ let date = $t02920029270._3
739+ let isSponsored = $t02920029270._4
736740 let artworkName = getStringByKey(keyName(caller, artId))
737741 if ((artworkName == ""))
738742 then throw("This art doesn't match your account")
806810
807811 @Callable(i)
808812 func setBid (artId,issuer) = {
809- let $t03164931689 = idCallerDate(i)
810- let id = $t03164931689._1
811- let caller = $t03164931689._2
812- let date = $t03164931689._3
813- let $t03169431730 = isPayment(i)
814- let payment = $t03169431730._1
815- let amount = $t03169431730._2
813+ let $t03165231692 = idCallerDate(i)
814+ let id = $t03165231692._1
815+ let caller = $t03165231692._2
816+ let date = $t03165231692._3
817+ let $t03169731733 = isPayment(i)
818+ let payment = $t03169731733._1
819+ let amount = $t03169731733._2
816820 let assetId = if (!(isDefined(payment.assetId)))
817821 then "WAVES"
818822 else toBase58String(value(payment.assetId))
843847
844848 @Callable(i)
845849 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
846- let $t03295033021 = idCallerDateSponsored(i, pubKey)
847- let id = $t03295033021._1
848- let caller1 = $t03295033021._2
849- let date = $t03295033021._3
850- let isSponsored = $t03295033021._4
850+ let $t03295333024 = idCallerDateSponsored(i, pubKey)
851+ let id = $t03295333024._1
852+ let caller1 = $t03295333024._2
853+ let date = $t03295333024._3
854+ let isSponsored = $t03295333024._4
851855 if ((caller1 != issuer))
852856 then throw("You cannot do this action")
853857 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
857861
858862 @Callable(i)
859863 func cancelBid (artId,issuer,bidId,bidOwner) = {
860- let $t03325633317 = idCallerDate(i)
861- let id = $t03325633317._1
862- let caller = $t03325633317._2
863- let date = $t03325633317._3
864+ let $t03325933320 = idCallerDate(i)
865+ let id = $t03325933320._1
866+ let caller = $t03325933320._2
867+ let date = $t03325933320._3
864868 if (if ((caller != bidOwner))
865869 then (caller != issuer)
866870 else false)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 func getStringByKey (key) = valueOrElse(getString(this, key), "")
55
66
77 let unitTest = false
88
99 let oracleFee = value(addressFromString(getStringByKey("conf_oracle_fee")))
1010
1111 let signDapp = value(addressFromString(getStringByKey("conf_signweb_dapp")))
1212
1313 let feeReceiver = getStringByKey("conf_fee_receiver")
1414
1515 let userDapp = if (unitTest)
1616 then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
1717 else value(addressFromString(getStringByKey("conf_users_dapp")))
1818
1919 let whitelistDapp = value(addressFromString(getStringByKey("conf_whitelist_dapp")))
2020
2121 let signAssetId = fromBase58String(getStringByKey("conf_accepted_asset_SIGN"))
2222
2323 let usdnAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDN"))
2424
2525 let usdtAssetId = fromBase58String(getStringByKey("conf_accepted_asset_USDT"))
2626
2727 let wavesAssetId = base58''
2828
2929 let chris = getStringByKey("conf_admin_1")
3030
3131 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
3232
3333
3434 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
3535
3636
3737 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
3838
3939
4040 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4141
4242
4343 let signCut = 7
4444
4545 let usdnWaveCut = 10
4646
4747 let defaultLicence = getStringByKey("conf_default_licence")
4848
4949 let defaultHashLicence = getStringByKey("conf_default_licence_hash")
5050
5151 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
5252
5353 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
5454
5555 let userSuspended = "SUSPENDED"
5656
5757 let userRemoved = "REMOVED"
5858
5959 let userUnregistered = "UNREGISTERED"
6060
6161 let userAllowed = "ALLOWED"
6262
6363 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(signAssetId)))
6464
6565 func checkSignCertificate (signID,Owner,sha256Hash) = match getString(signDapp, ((("data_fc_" + signID) + "_") + Owner)) {
6666 case a: String =>
6767 if (contains(a, sha256Hash))
6868 then true
6969 else false
7070 case _ =>
7171 false
7272 }
7373
7474
7575 func validateCID (cid) = if (contains(cid, "/"))
7676 then if (if ((76 > size(cid)))
7777 then (size(split(cid, "/")[0]) == 59)
7878 else false)
7979 then (16 > size(split(cid, "/")[1]))
8080 else false
8181 else false
8282
8383
8484 func validateHash (hash) = (size(hash) == 64)
8585
8686
8787 func keyUserStatus (caller) = ("user_status_" + caller)
8888
8989
9090 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
9191
9292
9393 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
9494
9595
9696 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
9797
9898
9999 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
100100
101101
102102 func keyExportHash (caller,artId) = ((("art_export_hash_" + artId) + "_") + caller)
103103
104104
105105 func keyExportCid (caller,artId) = ((("art_export_cid_" + artId) + "_") + caller)
106106
107107
108108 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
109109
110110
111111 func keySignID (caller,artId) = ((("art_signid_" + artId) + "_") + caller)
112112
113113
114114 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
115115
116116
117117 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
118118
119119
120120 func keyLicenceHash (caller,artId) = ((("art_licence_hash_" + artId) + "_") + caller)
121121
122122
123123 func keyLicenceCid (caller,artId) = ((("art_licence_cid_" + artId) + "_") + caller)
124124
125125
126126 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
127127
128128
129129 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
130130
131131
132132 func keyNote (caller,artId) = ((("art_note_" + artId) + "_") + caller)
133133
134134
135135 func keyCrawler (caller,artId) = ((("art_crawler_cid_" + artId) + "_") + caller)
136136
137137
138138 func keyRoyalties (caller,artId) = ((("art_royalties_" + artId) + "_") + caller)
139139
140140
141141 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
142142
143143
144144 func keyEndSale (caller,artId) = ((("art_endsale_" + artId) + "_") + caller)
145145
146146
147147 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
148148
149149
150150 func keyFlag (caller,artId) = ((("art_flag_" + artId) + "_") + caller)
151151
152152
153153 func keyArtistAgentAddr (artistAddr) = ("artist_agent_" + artistAddr)
154154
155155
156156 func keyPrimaryShareAgent (artistAddr) = ("artist_agent_primary_" + artistAddr)
157157
158158
159159 func keyArtistPublicAgentAddr (artistAddr) = ("artist_public_agent_" + artistAddr)
160160
161161
162162 func keyPrimarySharePublicAgent (artistAddr) = ("artist_public_agent_primary_" + artistAddr)
163163
164164
165165 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
166166
167167
168168 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
169169
170170
171171 func keyidBySignid (caller,signId) = ((("get_artidbysignid_" + signId) + "_") + caller)
172172
173173
174174 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
175175
176176
177177 func validateAllCID (cidDisplay,cidExport,cidLicence) = if (!(validateCID(cidDisplay)))
178178 then throw("Wrong Display CID")
179179 else if (!(validateCID(cidExport)))
180180 then throw("Wrong Export CID")
181181 else if (if ((cidLicence != ""))
182182 then !(validateCID(cidLicence))
183183 else false)
184184 then throw("Wrong Licence CID")
185185 else true
186186
187187
188188 func validateAllHash (sha256Export,sha256Licence) = if (!(validateHash(sha256Export)))
189189 then throw("Export Hash 64 char. max")
190190 else if (!(validateHash(sha256Licence)))
191191 then throw("Licence Hash 64 char. max")
192192 else true
193193
194194
195195 func validateString (str,max) = if ((size(str) == 0))
196196 then throw("Field cannot be is empty")
197197 else if ((size(str) > max))
198198 then throw((str + " is too long"))
199199 else true
200200
201201
202202 func validateUser (caller) = {
203203 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
204204 if (if ((userStatus == userUnregistered))
205205 then true
206206 else (userStatus == userAllowed))
207207 then "Register this account first with \"Account\" tab"
208208 else if ((userStatus == userSuspended))
209209 then "Account suspended"
210210 else if ((userStatus == userRemoved))
211211 then "Account removed"
212212 else ""
213213 }
214214
215215
216216 func setLIcence (cidLicence,sha256Licence) = {
217217 let cid = if ((size(cidLicence) == 0))
218218 then defaultLicence
219219 else cidLicence
220220 let hash = if ((size(sha256Licence) == 0))
221221 then defaultHashLicence
222222 else sha256Licence
223223 $Tuple2(cid, hash)
224224 }
225225
226226
227227 func validateArtworkData (caller,cidDisplay,cidExport,licenceCID,sha256Export,licenceHash,name,description,tags,royalties) = {
228228 let checkUser = validateUser(caller)
229229 if ((checkUser != ""))
230230 then throw(checkUser)
231231 else if ((size(cidDisplay) == 0))
232232 then throw("Display CID cannot be empty")
233233 else if (!(validateAllCID(cidDisplay, cidExport, licenceCID)))
234234 then throw("Problem with CID")
235235 else if (!(validateAllHash(sha256Export, licenceHash)))
236236 then throw("Problem with Hashes")
237237 else if (!(validateString(name, 100)))
238238 then throw("100 Char. max name")
239239 else if (!(validateString(description, 1000)))
240240 then throw("1000 Char. max description")
241241 else if (if ((0 > royalties))
242242 then true
243243 else (royalties > 1000))
244244 then throw("Royalties cannot be less than 0% or higher than 10%")
245245 else if ((size(split(tags, ",")) > 5))
246246 then throw("5 tags max.")
247247 else ""
248248 }
249249
250250
251251 func isPayment (i) = if ((size(i.payments) == 0))
252252 then throw("No payment attached")
253253 else {
254254 let payment = value(i.payments[0])
255255 let amount = value(payment.amount)
256256 $Tuple2(payment, amount)
257257 }
258258
259259
260260 func validatePayment (i) = {
261261 let $t091809216 = isPayment(i)
262262 let payment = $t091809216._1
263263 let amount = $t091809216._2
264264 let assetId = if (if (isDefined(payment.assetId))
265265 then (payment.assetId == signAssetId)
266266 else false)
267267 then payment.assetId
268268 else throw("Only SIGN token accepted as transaction fee")
269269 if ((amount != currentCertificationPrice))
270270 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
271271 else $Tuple2(amount, assetId)
272272 }
273273
274274
275275 func isArtMinted (addrToUse,artId) = match getInteger(this, keyIssued(addrToUse, artId)) {
276276 case b: Int =>
277277 if ((b != 0))
278278 then true
279279 else false
280280 case _ =>
281281 false
282282 }
283283
284284
285285 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
286286 let $t098049840 = isPayment(i)
287287 let payment = $t098049840._1
288288 let amount = $t098049840._2
289289 let assetId = if (!(isDefined(payment.assetId)))
290290 then unit
291291 else if (if ((size(priceAssetId) > 0))
292292 then (toBase58String(value(payment.assetId)) == priceAssetId)
293293 else false)
294294 then payment.assetId
295295 else throw("Wrong asset id")
296296 if (if ((assetId == unit))
297297 then (priceAssetId != "")
298298 else false)
299299 then throw("Wrong asset id")
300300 else if ((artworkPrice != amount))
301301 then throw("Payment don't match")
302302 else $Tuple2(amount, assetId)
303303 }
304304
305305
306306 func acceptedAssetIds (assetId) = if (if (if (if (if ((assetId != toBase58String(signAssetId)))
307307 then (assetId != toBase58String(wavesAssetId))
308308 else false)
309309 then (assetId != "WAVES")
310310 else false)
311311 then (assetId != toBase58String(usdnAssetId))
312312 else false)
313313 then (assetId != toBase58String(usdtAssetId))
314314 else false)
315315 then throw("Only SIGN, USDN,USDT or WAVES accepted")
316316 else true
317317
318318
319319 func validateMinSell (assetId,price) = {
320320 let minSellWaves = if (unitTest)
321321 then 10
322322 else getIntegerByKeyFromOracle("waves_min_sell")
323323 let minSellUsdn = 1000000
324324 let minSellSign = if (unitTest)
325325 then 1
326326 else (currentCertificationPrice * 2)
327327 if (if (if (if (if (if ((assetId == toBase58String(usdnAssetId)))
328328 then (minSellUsdn > price)
329329 else false)
330330 then (price != 0)
331331 else false)
332332 then true
333333 else if (if ((assetId == toBase58String(usdtAssetId)))
334334 then (minSellUsdn > price)
335335 else false)
336336 then (price != 0)
337337 else false)
338338 then true
339339 else if (if ((assetId == toBase58String(signAssetId)))
340340 then (minSellSign > price)
341341 else false)
342342 then (price != 0)
343343 else false)
344344 then true
345345 else if (if (if ((assetId == toBase58String(wavesAssetId)))
346346 then true
347347 else (assetId == "WAVES"))
348348 then (minSellWaves > price)
349349 else false)
350350 then (price != 0)
351351 else false)
352352 then throw("Wrong minimum sell price")
353353 else true
354354 }
355355
356356
357357 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
358358 then unit
359359 else fromBase58String(assetId)
360360
361361
362362 func getPriceAssetIdFromBid (bidDataKey) = {
363363 let bidData = getStringByKey((bidDataKey + "_OPEN"))
364364 if ((bidData == ""))
365365 then throw("Bid not found")
366366 else {
367367 let bidDataArr = split(bidData, "_")
368368 let bidAmount = parseIntValue(bidDataArr[1])
369369 let bidAssetId = getBidAssetId(bidDataArr[0])
370370 if ((0 >= bidAmount))
371371 then throw("Wrong amount")
372372 else $Tuple2(bidAmount, bidAssetId)
373373 }
374374 }
375375
376376
377377 func idCallerDateSponsored (i,pubKey) = if (!(dappRunning))
378378 then throw(maintenanceMSG)
379379 else {
380380 let isSponsored = if ((pubKey != ""))
381381 then valueOrElse(checkWhitelist((toString(addressFromPublicKey(fromBase58String(pubKey))) + "_free_txs")), 0)
382382 else 0
383- let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
384- then (isSponsored > 0)
385- else false)
386- then toString(addressFromPublicKey(fromBase58String(pubKey)))
387- else toBase58String(i.caller.bytes)
388- let get_sponsored_waves = if (if ((pubKey != ""))
389- then (isSponsored > 0)
390- else false)
391- then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
392- else unit
393- if ((get_sponsored_waves == get_sponsored_waves))
394- then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
383+ if ((isSponsored == isSponsored))
384+ then {
385+ let caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
386+ then (isSponsored > 0)
387+ else false)
388+ then toString(addressFromPublicKey(fromBase58String(pubKey)))
389+ else toBase58String(i.caller.bytes)
390+ let get_sponsored_waves = if (if ((pubKey != ""))
391+ then (isSponsored > 0)
392+ else false)
393+ then invoke(whitelistDapp, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(pubKey)))], nil)
394+ else unit
395+ if ((get_sponsored_waves == get_sponsored_waves))
396+ then $Tuple4(toBase58String(i.transactionId), caller, lastBlock.timestamp, (isSponsored > 0))
397+ else throw("Strict value is not equal to itself.")
398+ }
395399 else throw("Strict value is not equal to itself.")
396400 }
397401
398402
399403 func idCallerDate (i) = if (!(dappRunning))
400404 then throw(maintenanceMSG)
401405 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
402406
403407
404408 func buyMint (i,artId,issuer,bidId,bidOwner,pubKey) = {
405- let $t01304113111 = idCallerDateSponsored(i, pubKey)
406- let id = $t01304113111._1
407- let caller = $t01304113111._2
408- let date = $t01304113111._3
409- let isSponsored = $t01304113111._4
409+ let $t01304413114 = idCallerDateSponsored(i, pubKey)
410+ let id = $t01304413114._1
411+ let caller = $t01304413114._2
412+ let date = $t01304413114._3
413+ let isSponsored = $t01304413114._4
410414 if (true)
411415 then throw(((toString((toBase58String(i.caller.bytes) == toString(this))) + " / ") + toString(isSponsored)))
412416 else {
413417 let new_caller = if (if ((toBase58String(i.caller.bytes) == toString(this)))
414418 then isSponsored
415419 else false)
416420 then toString(addressFromPublicKey(fromBase58String(pubKey)))
417421 else toBase58String(i.caller.bytes)
418422 if (true)
419423 then throw(((((((new_caller + " / ") + issuer) + " / ") + bidOwner) + " / ") + pubKey))
420424 else {
421425 let isBid = if (if (if ((caller == issuer))
422426 then (bidOwner != "")
423427 else false)
424428 then (bidId != "")
425429 else false)
426430 then true
427431 else false
428432 let blockEnd = getIntegerByKey(keyEndSale(caller, artId))
429433 if (if (if ((blockEnd != 0))
430434 then (height >= blockEnd)
431435 else false)
432436 then !(isBid)
433437 else false)
434438 then throw("Sale ended.")
435439 else {
436440 let callerIsIssuer = (caller == issuer)
437441 let totalNFT = getIntegerByKey("total_nft_issued")
438442 let signID = getStringByKey(keySignID(issuer, artId))
439443 let artworkName = getStringByKey(keyName(issuer, artId))
440444 if ((artworkName == ""))
441445 then throw("Art doesn't exist")
442446 else {
443447 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
444448 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
445449 let artworkPrice = if (callerIsIssuer)
446450 then (currentCertificationPrice * 2)
447451 else getIntegerByKey(keyPrice(issuer, artId))
448452 let priceAssetId = if (callerIsIssuer)
449453 then toBase58String(signAssetId)
450454 else getStringByKey(keyAssetIdAccepted(issuer, artId))
451455 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
452456 if (if (if (!(isBid))
453457 then !(callerIsIssuer)
454458 else false)
455459 then if (if ((0 >= artworkPrice))
456460 then true
457461 else !(isOnSale))
458462 then true
459463 else (0 >= maxCanSell)
460464 else false)
461465 then throw("Art not for sale")
462466 else if (if (if (!(isBid))
463467 then callerIsIssuer
464468 else false)
465469 then (0 >= maxCanSell)
466470 else false)
467471 then throw("Max issuable not set")
468472 else {
469473 let checkUser = validateUser(issuer)
470474 if (if (isBid)
471475 then (checkUser != "")
472476 else false)
473477 then throw(checkUser)
474478 else {
475479 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
476- let $t01505315245 = if (isBid)
480+ let $t01505615248 = if (isBid)
477481 then getPriceAssetIdFromBid(bidDataKey)
478482 else validatePriceAssetId(i, priceAssetId, artworkPrice)
479- let amount = $t01505315245._1
480- let assetId = $t01505315245._2
483+ let amount = $t01505615248._1
484+ let assetId = $t01505615248._2
481485 let agent = valueOrElse(getString(userDapp, keyArtistAgentAddr(issuer)), feeReceiver)
482486 let agentShare = valueOrElse(getInteger(userDapp, keyPrimaryShareAgent(issuer)), 0)
483487 let publicAgent = valueOrElse(getString(userDapp, keyArtistPublicAgentAddr(issuer)), feeReceiver)
484488 let publicAgentShare = valueOrElse(getInteger(userDapp, keyPrimarySharePublicAgent(issuer)), 0)
485489 let isWhitelisted = checkWhitelist(issuer)
486490 let cut = if ((isWhitelisted > height))
487491 then 0
488492 else if ((assetId == signAssetId))
489493 then signCut
490494 else usdnWaveCut
491495 let amountForSign = fraction(amount, cut, 100)
492496 let amountForAgent = if (if (if ((agent != feeReceiver))
493497 then (agentShare > 0)
494498 else false)
495499 then (height > isWhitelisted)
496500 else false)
497501 then fraction(amount, agentShare, 10000)
498502 else 0
499503 let amountForPublicAgent = if (if (if ((publicAgent != feeReceiver))
500504 then (publicAgentShare > 0)
501505 else false)
502506 then (height > isWhitelisted)
503507 else false)
504508 then fraction(amount, publicAgentShare, 10000)
505509 else 0
506510 let amountForCreator = (amount - amountForSign)
507511 if ((amountSold == maxCanSell))
508512 then throw("Art sold out")
509513 else {
510514 let newAmountSold = (amountSold + 1)
511515 let issueMeta = ((((((((((("Creator: " + issuer) + ",
512516 ArtID: ") + artId) + ",
513517 SignID: ") + signID) + ",
514518 Artwork name: ") + artworkName) + ",
515519 Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
516520 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
517521 let idNFT = calculateAssetId(issueNFT)
518522 let sellStatus = if (if ((newAmountSold == maxCanSell))
519523 then true
520524 else !(isOnSale))
521525 then false
522526 else true
523527 let receiveNFT = if (if (if ((caller == issuer))
524528 then (bidOwner != "")
525529 else false)
526530 then (bidId != "")
527531 else false)
528532 then addressFromStringValue(bidOwner)
529533 else i.caller
530534 let assetIdBid = if (!(isDefined(assetId)))
531535 then "WAVES"
532536 else toBase58String(value(assetId))
533537 let bidData = getStringByKey((bidDataKey + "_OPEN"))
534538 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
535539 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
536540 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
537541 let soldValue = if (!(isBid))
538542 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
539543 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
540544 let soldData = StringEntry(soldKey, soldValue)
541545 let commissionsWithAgent = if ((amountForAgent != 0))
542546 then [ScriptTransfer(Address(fromBase58String(feeReceiver)), (amountForSign - amountForAgent), assetId), ScriptTransfer(Address(fromBase58String(agent)), amountForAgent, assetId)]
543547 else [ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSign, assetId)]
544548 let commissionsWithPublicAgent = if ((amountForPublicAgent != 0))
545549 then [ScriptTransfer(Address(fromBase58String(publicAgent)), amountForPublicAgent, assetId), ScriptTransfer(Address(fromBase58String(issuer)), (amountForCreator - amountForPublicAgent), assetId)]
546550 else [ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId)]
547551 let txToCaller = if (isSponsored)
548552 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
549553 else nil
550554 let buyRes = ((([IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), IntegerEntry(keyEndSale(issuer, artId), 0), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(receiveNFT, 1, idNFT)] ++ commissionsWithAgent) ++ commissionsWithPublicAgent) ++ txToCaller)
551555 if (isBid)
552556 then [soldData, bidUpdate, bidDelOld] :: buyRes
553557 else soldData :: buyRes
554558 }
555559 }
556560 }
557561 }
558562 }
559563 }
560564 }
561565 }
562566
563567
564568 func asString (bv) = match bv {
565569 case bv0: String =>
566570 bv0
567571 case _ =>
568572 throw("Sponsored Public Key String expected")
569573 }
570574
571575
572576 @Callable(invoke)
573577 func setConf (key,val) = {
574578 let caller = toString(invoke.caller)
575579 if (containsElement([chris, toString(this)], caller))
576580 then if (contains(key, "conf_"))
577581 then [StringEntry(key, val)]
578582 else throw("Entries starting with conf_ only")
579583 else throw("You are not allowed to change this")
580584 }
581585
582586
583587
584588 @Callable(i)
585589 func addArtwork (sha256Hash,signID,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = {
586- let $t02042120494 = idCallerDateSponsored(i, pubKey)
587- let artId = $t02042120494._1
588- let caller = $t02042120494._2
589- let date = $t02042120494._3
590- let isSponsored = $t02042120494._4
590+ let $t02042420497 = idCallerDateSponsored(i, pubKey)
591+ let artId = $t02042420497._1
592+ let caller = $t02042420497._2
593+ let date = $t02042420497._3
594+ let isSponsored = $t02042420497._4
591595 if (!(validateHash(sha256Hash)))
592596 then throw("Hash should be 64 characters maximum")
593597 else {
594- let $t02059520664 = setLIcence(cidLicence, sha256Licence)
595- let licenceCID = $t02059520664._1
596- let licenceHash = $t02059520664._2
598+ let $t02059820667 = setLIcence(cidLicence, sha256Licence)
599+ let licenceCID = $t02059820667._1
600+ let licenceHash = $t02059820667._2
597601 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
598602 if ((validateArtwork != ""))
599603 then throw("Something went wrong!")
600604 else {
601605 let whitelisted_drop = (checkWhitelist((caller + "_free_drops")) > 0)
602- let $t02096321047 = if (whitelisted_drop)
606+ let $t02096621050 = if (whitelisted_drop)
603607 then $Tuple2(0, signID)
604608 else validatePayment(i)
605- let amount = $t02096321047._1
606- let assetId = $t02096321047._2
609+ let amount = $t02096621050._1
610+ let assetId = $t02096621050._2
607611 if (!(isDefined(amount)))
608612 then throw("Something went wrong")
609613 else {
610614 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
611615 if ((entryExist != ""))
612616 then throw("You already added it")
613617 else {
614618 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
615619 if ((hashExist != ""))
616620 then throw("Hash already registered")
617621 else {
618622 let isSignCertified = checkSignCertificate(signID, caller, sha256Hash)
619623 if (!(isSignCertified))
620624 then throw("Sign Certificate not found for this address.")
621625 else {
622626 let decrease_whitelist_drop = if (whitelisted_drop)
623627 then invoke(whitelistDapp, "useFreeDrop", [caller], nil)
624628 else unit
625629 if ((decrease_whitelist_drop == decrease_whitelist_drop))
626630 then {
627631 let txToCaller = if (isSponsored)
628632 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
629633 else nil
630634 ([StringEntry(keyOwnerByHash(sha256Hash), caller), StringEntry(keyTxidByHashOwner(sha256Hash, caller), artId), IntegerEntry(keyDate(caller, artId), date), StringEntry(keyName(caller, artId), name), StringEntry(keyDesc(caller, artId), description), StringEntry(keyDisplayCid(caller, artId), cidDisplay), StringEntry(keyExportCid(caller, artId), cidExport), StringEntry(keyExportHash(caller, artId), sha256Export), StringEntry(keyLicenceHash(caller, artId), licenceHash), StringEntry(keyLicenceCid(caller, artId), licenceCID), StringEntry(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), StringEntry(keySignID(caller, artId), signID), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyidBySignid(caller, signID), artId), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), StringEntry(keyCrawler(caller, artId), crawler), IntegerEntry(keyRoyalties(caller, artId), royalties), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, signAssetId)] ++ txToCaller)
631635 }
632636 else throw("Strict value is not equal to itself.")
633637 }
634638 }
635639 }
636640 }
637641 }
638642 }
639643 }
640644
641645
642646
643647 @Callable(i)
644648 func updateArtwork (txid,name,description,tags,type,cidDisplay,sha256Export,cidExport,sha256Licence,cidLicence,crawler,royalties,pubKey) = if (!(dappRunning))
645649 then throw(maintenanceMSG)
646650 else {
647- let $t02408124151 = idCallerDateSponsored(i, pubKey)
648- let id = $t02408124151._1
649- let caller = $t02408124151._2
650- let date = $t02408124151._3
651- let isSponsored = $t02408124151._4
652- let $t02416124230 = setLIcence(cidLicence, sha256Licence)
653- let licenceCID = $t02416124230._1
654- let licenceHash = $t02416124230._2
651+ let $t02408424154 = idCallerDateSponsored(i, pubKey)
652+ let id = $t02408424154._1
653+ let caller = $t02408424154._2
654+ let date = $t02408424154._3
655+ let isSponsored = $t02408424154._4
656+ let $t02416424233 = setLIcence(cidLicence, sha256Licence)
657+ let licenceCID = $t02416424233._1
658+ let licenceHash = $t02416424233._2
655659 let validateArtwork = validateArtworkData(caller, cidDisplay, cidExport, licenceCID, sha256Export, licenceHash, name, description, tags, royalties)
656660 if ((validateArtwork != ""))
657661 then throw("Something went wrong!")
658662 else {
659663 let entryExist = getStringByKey(keyName(caller, txid))
660664 if ((entryExist == ""))
661665 then throw("Entry not found")
662666 else {
663667 let flag = getStringByKey(keyFlag(caller, txid))
664668 if ((flag == "ILLEGAL"))
665669 then throw("Cannot update ILLEGAL artwork")
666670 else if (!(isArtMinted(caller, txid)))
667671 then {
668672 let txToCaller = if (isSponsored)
669673 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
670674 else nil
671675 ([StringEntry(keyName(caller, txid), name), StringEntry(keyDesc(caller, txid), description), StringEntry(keyDisplayCid(caller, txid), cidDisplay), StringEntry(keyExportCid(caller, txid), cidExport), StringEntry(keyExportHash(caller, txid), sha256Export), StringEntry(keyLicenceCid(caller, txid), licenceCID), StringEntry(keyLicenceHash(caller, txid), licenceHash), StringEntry(keyTags(caller, txid), tags), StringEntry(keyType(caller, txid), type), StringEntry(keyCrawler(caller, txid), crawler), IntegerEntry(keyRoyalties(caller, txid), royalties)] ++ txToCaller)
672676 }
673677 else throw("Already minted")
674678 }
675679 }
676680 }
677681
678682
679683
680684 @Callable(i)
681685 func flagArtwork (artId,addr,flag,note) = {
682- let $t02585725891 = idCallerDate(i)
683- let id = $t02585725891._1
684- let caller = $t02585725891._2
686+ let $t02586025894 = idCallerDate(i)
687+ let id = $t02586025894._1
688+ let caller = $t02586025894._2
685689 if (containsElement([chris, toString(this)], caller))
686690 then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
687691 then [StringEntry(keyFlag(addr, artId), flag), StringEntry(keyNote(addr, artId), note)]
688692 else throw(("Unknow status " + flag))
689693 else throw("You are not allowed")
690694 }
691695
692696
693697
694698 @Callable(i)
695699 func deleteArtwork (artId,addr) = {
696- let $t02632726361 = idCallerDate(i)
697- let id = $t02632726361._1
698- let caller = $t02632726361._2
700+ let $t02633026364 = idCallerDate(i)
701+ let id = $t02633026364._1
702+ let caller = $t02633026364._2
699703 let addrToUse = if (containsElement([chris, toString(this)], caller))
700704 then addr
701705 else caller
702706 let entryExist = valueOrErrorMessage(getStringByKey(keyName(addrToUse, artId)), "No art matching for this address")
703707 if ((entryExist == ""))
704708 then throw("No art matching for this address")
705709 else {
706710 let sha256Hash = getStringByKey(keyHashByTxidAddr(addrToUse, artId))
707711 if ((sha256Hash == ""))
708712 then throw("No art hash matching for this address")
709713 else {
710714 let signID = getStringByKey(keySignID(addrToUse, artId))
711715 if ((signID == ""))
712716 then throw("No SIGN ID matching")
713717 else {
714718 let dataToDelete = [DeleteEntry(keyDate(addrToUse, artId)), DeleteEntry(keyName(addrToUse, artId)), DeleteEntry(keyDesc(addrToUse, artId)), DeleteEntry(keyDisplayCid(addrToUse, artId)), DeleteEntry(keyExportCid(addrToUse, artId)), DeleteEntry(keyExportHash(addrToUse, artId)), DeleteEntry(keyLicenceHash(addrToUse, artId)), DeleteEntry(keyLicenceCid(addrToUse, artId)), DeleteEntry(keyType(addrToUse, artId)), DeleteEntry(keyTags(addrToUse, artId)), DeleteEntry(keyMaxMint(addrToUse, artId)), DeleteEntry(keySignID(addrToUse, artId)), DeleteEntry(keyIssued(addrToUse, artId)), DeleteEntry(keyOnSale(addrToUse, artId)), DeleteEntry(keyFlag(addrToUse, artId)), DeleteEntry(keyPrice(addrToUse, artId)), DeleteEntry(keyAssetIdAccepted(addrToUse, artId)), DeleteEntry(keyOwnerByHash(sha256Hash)), DeleteEntry(keyidBySignid(addrToUse, signID)), DeleteEntry(keyTxidByHashOwner(sha256Hash, addrToUse)), DeleteEntry(keyEndSale(addrToUse, artId)), DeleteEntry(keyNote(addrToUse, artId)), DeleteEntry(keyCrawler(addrToUse, artId)), DeleteEntry(keyRoyalties(addrToUse, artId))]
715719 if (!(isArtMinted(addrToUse, artId)))
716720 then if (!(dappRunning))
717721 then throw(maintenanceMSG)
718722 else dataToDelete
719723 else if (containsElement([chris, toString(this)], caller))
720724 then dataToDelete
721725 else throw("Art already minted, you cannot delete it")
722726 }
723727 }
724728 }
725729 }
726730
727731
728732
729733 @Callable(i)
730734 func sellArtwork (artId,price,maxMint,assetId,blockEnd,pubKey) = {
731- let $t02919729267 = idCallerDateSponsored(i, pubKey)
732- let id = $t02919729267._1
733- let caller = $t02919729267._2
734- let date = $t02919729267._3
735- let isSponsored = $t02919729267._4
735+ let $t02920029270 = idCallerDateSponsored(i, pubKey)
736+ let id = $t02920029270._1
737+ let caller = $t02920029270._2
738+ let date = $t02920029270._3
739+ let isSponsored = $t02920029270._4
736740 let artworkName = getStringByKey(keyName(caller, artId))
737741 if ((artworkName == ""))
738742 then throw("This art doesn't match your account")
739743 else {
740744 let flag = getStringByKey(keyFlag(caller, artId))
741745 if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], flag))
742746 then throw("Flagged artwork")
743747 else {
744748 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
745749 if ((0 > blockEnd))
746750 then throw("Negative end")
747751 else if (if ((blockEnd > 0))
748752 then if ((maxMint != 1))
749753 then true
750754 else (price != 0)
751755 else false)
752756 then throw("Timed offer only allowed for unique edition and offer only")
753757 else {
754758 let baseHeight = if ((blockEnd == 0))
755759 then 0
756760 else height
757761 if (!(acceptedAssetIds(assetId)))
758762 then throw("Something went wrong!")
759763 else if (!(validateMinSell(assetId, price)))
760764 then throw("Something went wrong!")
761765 else {
762766 let checkUser = validateUser(caller)
763767 if ((checkUser != ""))
764768 then throw(checkUser)
765769 else {
766770 let amountSold = getIntegerByKey(keyIssued(caller, artId))
767771 let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
768772 if ((maxMint > 100))
769773 then throw("100 editions max per artwork")
770774 else if (if ((amountSold != 0))
771775 then (amountSold == maxCanSell)
772776 else false)
773777 then throw("Max edition reached.")
774778 else if (if ((amountSold > 0))
775779 then (maxCanSell != maxMint)
776780 else false)
777781 then throw("Cannot change maximum issuable anymore")
778782 else if (if ((bidNbr > 0))
779783 then (maxCanSell != maxMint)
780784 else false)
781785 then throw("Cannot change maximum issuable with active orders")
782786 else {
783787 let sellStatus = if (if ((price > 0))
784788 then (maxMint > 0)
785789 else false)
786790 then true
787791 else false
788792 let txToCaller = if (isSponsored)
789793 then [ScriptTransfer(Address(fromBase58String(caller)), 0, unit)]
790794 else nil
791795 ([BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), StringEntry(keyAssetIdAccepted(caller, artId), assetId), IntegerEntry(keyEndSale(caller, artId), (baseHeight + blockEnd))] ++ txToCaller)
792796 }
793797 }
794798 }
795799 }
796800 }
797801 }
798802 }
799803
800804
801805
802806 @Callable(i)
803807 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "", "")
804808
805809
806810
807811 @Callable(i)
808812 func setBid (artId,issuer) = {
809- let $t03164931689 = idCallerDate(i)
810- let id = $t03164931689._1
811- let caller = $t03164931689._2
812- let date = $t03164931689._3
813- let $t03169431730 = isPayment(i)
814- let payment = $t03169431730._1
815- let amount = $t03169431730._2
813+ let $t03165231692 = idCallerDate(i)
814+ let id = $t03165231692._1
815+ let caller = $t03165231692._2
816+ let date = $t03165231692._3
817+ let $t03169731733 = isPayment(i)
818+ let payment = $t03169731733._1
819+ let amount = $t03169731733._2
816820 let assetId = if (!(isDefined(payment.assetId)))
817821 then "WAVES"
818822 else toBase58String(value(payment.assetId))
819823 let blockEnd = getIntegerByKey(keyEndSale(issuer, artId))
820824 if (if ((blockEnd != 0))
821825 then (height >= blockEnd)
822826 else false)
823827 then throw("Sale ended.")
824828 else {
825829 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
826830 if (!(acceptedAssetIds(assetId)))
827831 then throw("asset not accepted")
828832 else if (!(validateMinSell(assetId, amount)))
829833 then throw("Wrong min sell")
830834 else {
831835 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
832836 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
833837 if ((0 >= maxCanSell))
834838 then throw("No max edition set for this artwork")
835839 else if ((amountSold >= maxCanSell))
836840 then throw("Sold out, you cannot bid")
837841 else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
838842 }
839843 }
840844 }
841845
842846
843847
844848 @Callable(i)
845849 func acceptBid (artId,issuer,bidId,bidOwner,pubKey) = {
846- let $t03295033021 = idCallerDateSponsored(i, pubKey)
847- let id = $t03295033021._1
848- let caller1 = $t03295033021._2
849- let date = $t03295033021._3
850- let isSponsored = $t03295033021._4
850+ let $t03295333024 = idCallerDateSponsored(i, pubKey)
851+ let id = $t03295333024._1
852+ let caller1 = $t03295333024._2
853+ let date = $t03295333024._3
854+ let isSponsored = $t03295333024._4
851855 if ((caller1 != issuer))
852856 then throw("You cannot do this action")
853857 else buyMint(i, artId, issuer, bidId, bidOwner, pubKey)
854858 }
855859
856860
857861
858862 @Callable(i)
859863 func cancelBid (artId,issuer,bidId,bidOwner) = {
860- let $t03325633317 = idCallerDate(i)
861- let id = $t03325633317._1
862- let caller = $t03325633317._2
863- let date = $t03325633317._3
864+ let $t03325933320 = idCallerDate(i)
865+ let id = $t03325933320._1
866+ let caller = $t03325933320._2
867+ let date = $t03325933320._3
864868 if (if ((caller != bidOwner))
865869 then (caller != issuer)
866870 else false)
867871 then throw("You cannot do this action")
868872 else {
869873 let returnMoneyTo = if ((caller == issuer))
870874 then bidOwner
871875 else caller
872876 let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
873877 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
874878 let bidData = getStringByKey((bidDataKey + "_OPEN"))
875879 if ((bidData == ""))
876880 then throw("Bid not found")
877881 else {
878882 let bidDataArr = split(bidData, "_")
879883 let assetId = getBidAssetId(bidDataArr[0])
880884 let bidStatus = "CANCELED"
881885 [DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(returnMoneyTo)), parseIntValue(bidDataArr[1]), assetId)]
882886 }
883887 }
884888 }
885889
886890
887891 @Verifier(tx)
888892 func verifier () = match tx {
889893 case inv: InvokeScriptTransaction =>
890894 if (if (if (if ((inv.function == "addArtwork"))
891895 then (inv.dApp == this)
892896 else false)
893897 then (inv.fee == 500000)
894898 else false)
895899 then (inv.feeAssetId == unit)
896900 else false)
897901 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[13])))
898902 else if (if (if (if ((inv.function == "updateArtwork"))
899903 then (inv.dApp == this)
900904 else false)
901905 then (inv.fee == 500000)
902906 else false)
903907 then (inv.feeAssetId == unit)
904908 else false)
905909 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[12])))
906910 else if (if (if (if ((inv.function == "sellArtwork"))
907911 then (inv.dApp == this)
908912 else false)
909913 then (inv.fee == 500000)
910914 else false)
911915 then (inv.feeAssetId == unit)
912916 else false)
913917 then sigVerify(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[5])))
914918 else if (if (if (if ((inv.function == "acceptBid"))
915919 then (inv.dApp == this)
916920 else false)
917921 then (inv.fee == 500000)
918922 else false)
919923 then (inv.feeAssetId == unit)
920924 else false)
921925 then sigVerify_128Kb(tx.bodyBytes, tx.proofs[0], fromBase58String(asString(inv.args[4])))
922926 else sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
923927 case _ =>
924928 sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey)
925929 }
926930

github/deemru/w8io/873ac7e 
251.43 ms