tx · BWbY7DFLScZXubjxsvHHTTfKvpEBYHgR6vwy43NMtkHr

3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA:  -0.01000000 Waves

2021.08.09 20:27 [1651102] smart account 3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA > SELF 0.00000000 Waves

{ "type": 13, "id": "BWbY7DFLScZXubjxsvHHTTfKvpEBYHgR6vwy43NMtkHr", "fee": 1000000, "feeAssetId": null, "timestamp": 1628530108771, "version": 2, "chainId": 84, "sender": "3MrWNTqFcHBqb58Za1A5crQrMV5KJ5DYhtA", "senderPublicKey": "9abKuN1XmLjjire2feZH26PmcEWhEXxiHToWSmii3Gn2", "proofs": [ "mKkqjxc1hDRHnTNcGq6UK2y7ZZPRNvmshwmQzhH3nPtTavXYnjKZEAWzPaWdJFavfVRhNNrAxYnoifMLQihH9qk" ], "script": "base64:AAIFAAAAAAAACtcIAhIICgYICAgICAgSCQoHCAEBCAgBARIECgIICBIDCgEIEgQKAggIEgYKBAgICAgSBQoDCAgIGg4KAmExEgh1bml0VGVzdBoPCgJhMhIJb3JhY2xlRmVlGhEKAmEzEgtmZWVSZWNlaXZlchoOCgJhNBIIdXNlckRhcHAaEwoCYTUSDXdoaXRlbGlzdERhcHAaEwoCYTYSDXNjb25leEFzc2V0SWQaCwoCYTcSBW93bmVyGhgKAmE4EhJzY29uZXhGaXJzdFNlbGxDdXQaEQoCYTkSC2RhcHBSdW5uaW5nGhQKAmIxEg5tYWludGVuYW5jZU1TRxoTCgJiMhINdXNlclN1c3BlbmRlZBoRCgJiMxILdXNlclJlbW92ZWQaFgoCYjQSEHVzZXJVbnJlZ2lzdGVyZWQaEQoCYjUSC3VzZXJBbGxvd2VkGhIKAmI2EgxhdWN0aW9uVHlwZTEaEgoCYjcSDGF1Y3Rpb25UeXBlMhoUCgJiOBIOZ2V0U3RyaW5nQnlLZXkaCQoCYjkSA2tleRofCgJjMRIZZ2V0SW50ZWdlckJ5S2V5RnJvbU9yYWNsZRoVCgJjMhIPZ2V0SW50ZWdlckJ5S2V5GhQKAmMzEg5jaGVja1doaXRlbGlzdBoVCgJjNBIPZ2V0Qm9vbGVhbkJ5S2V5GhMKAmM1Eg1rZXlVc2VyU3RhdHVzGgwKAmM2EgZjYWxsZXIaDQoCYzcSB2tleURhdGUaCwoCYzgSBWFydElkGg0KAmM5EgdrZXlOYW1lGg0KAmQxEgdrZXlEZXNjGhMKAmQyEg1rZXlEaXNwbGF5Q2lkGhAKAmQzEgprZXlNYXhNaW50GhEKAmQ0EgtrZXlNaW5QcmljZRoRCgJkNRILa2V5RHVyYXRpb24aFAoCZDYSDmtleUF1Y3Rpb25UeXBlGg8KAmQ3EglrZXlJc3N1ZWQaDwoCZDgSCWtleU9uU2FsZRoNCgJkORIHa2V5VGFncxoNCgJlMRIHa2V5VHlwZRoOCgJlMhIIa2V5UHJpY2UaGAoCZTMSEmtleUFzc2V0SWRBY2NlcHRlZBoXCgJlNBIRa2V5SGFzaEJ5VHhpZEFkZHIaCgoCZTUSBHR4aWQaFAoCZTYSDmtleU93bmVyQnlIYXNoGhAKAmU3EgpzaGEyNTZIYXNoGhgKAmU4EhJrZXlUeGlkQnlIYXNoT3duZXIaHwoCZTkSGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UaFAoCZjESDnZhbGlkYXRlU3RyaW5nGgkKAmYyEgNzdHIaCQoCZjMSA21heBoSCgJmNBIMdmFsaWRhdGVVc2VyGhAKAmY1Egp1c2VyU3RhdHVzGhkKAmY2EhN2YWxpZGF0ZUFydHdvcmtEYXRhGhAKAmY3EgpjaWREaXNwbGF5GgoKAmY4EgRuYW1lGhEKAmY5EgtkZXNjcmlwdGlvbhoKCgJnMRIEdGFncxoPCgJnMhIJY2hlY2tVc2VyGg8KAmczEglpc1BheW1lbnQaBwoCZzQSAWkaDQoCZzUSB3BheW1lbnQaDAoCZzYSBmFtb3VudBoVCgJnNxIPdmFsaWRhdGVQYXltZW50GhAKAmc4Egp0MDg5ODI5MDE4Gg0KAmc5Egdhc3NldElkGhoKAmgxEhR2YWxpZGF0ZVByaWNlQXNzZXRJZBoSCgJoMhIMcHJpY2VBc3NldElkGhIKAmgzEgxhcnR3b3JrUHJpY2UaEAoCaDQSCnQwOTYxMTk2NDcaFgoCaDUSEGFjY2VwdGVkQXNzZXRJZHMaFQoCaDYSD3ZhbGlkYXRlTWluU2VsbBoLCgJoNxIFcHJpY2UaEwoCaDgSDW1pblNlbGxTY29uZXgaEwoCaDkSDWdldEJpZEFzc2V0SWQaHAoCaTESFmdldFByaWNlQXNzZXRJZEZyb21CaWQaEAoCaTISCmJpZERhdGFLZXkaDQoCaTMSB2JpZERhdGEaEAoCaTQSCmJpZERhdGFBcnIaDwoCaTUSCWJpZEFtb3VudBoQCgJpNhIKYmlkQXNzZXRJZBoSCgJpNxIMaWRDYWxsZXJEYXRlGhAKAmk4Egppc0JpZENoZWNrGgwKAmk5EgZpc3N1ZXIaDgoCajESCGJpZE93bmVyGgsKAmoyEgViaWRJZBoQCgJqMxIKZ2V0QXJ0RGF0YRoLCgJqNBIFaXNCaWQaFAoCajUSDmNhbGxlcklzSXNzdWVyGg4KAmo2Egh0b3RhbE5GVBoRCgJqNxILYXJ0d29ya05hbWUaDgoCajgSCGlzT25TYWxlGhAKAmo5EgphbW91bnRTb2xkGhAKAmsxEgptYXhDYW5TZWxsGhAKAmsyEgpnZXRCaWREYXRhGhIKAmszEgx0MDEzNTE5MTM2NDgaFwoCazQSEWdldENvbW1pc3Npb25EYXRhGhMKAms1Eg1pc1doaXRlbGlzdGVkGgkKAms2EgNjdXQaFQoCazcSD2Ftb3VudEZvclNjb25leBoWCgJrOBIQYW1vdW50Rm9yQ3JlYXRvchoTCgJrORINbmV3QW1vdW50U29sZBoSCgJsMRIMZ2V0SXNzdWVEYXRhGg8KAmwyEglpc3N1ZU1ldGEaDgoCbDMSCGlzc3VlTkZUGgsKAmw0EgVpZE5GVBoQCgJsNRIKc2VsbFN0YXR1cxoQCgJsNhIKcmVjZWl2ZU5GVBoSCgJsNxIMZ2V0QmlkS2V5VmFsGgoKAmw4EgRkYXRlGhAKAmw5Egphc3NldElkQmlkGg8KAm0xEgliaWREZWxPbGQaDwoCbTISCWJpZFVwZGF0ZRoNCgJtMxIHYnV5TWludBoSCgJtNBIMdDAxNTUxNjE1NTY2GggKAm01EgJpZBoSCgJtNhIMdDAxNTY0NjE1Nzk3GhIKAm03Egx0MDE1ODAyMTU5NDgaEgoCbTgSDHQwMTU5NTMxNjA5NRoSCgJtORIMdDAxNjEwMDE2MjkwGhIKAm4xEgx0MDE2Mjk1MTYzOTQaDQoCbjISB3NvbGRLZXkaDwoCbjMSCXNvbGRWYWx1ZRoOCgJuNBIIc29sZERhdGEaDAoCbjUSBmJ1eVJlcxoaCgJuNhIUc2V0QmlkTm9uVHJhZGl0aW9uYWwaEgoCbjcSDHQwMjc3MDkyNzc0NxoSCgJuOBIMdDAyNzc1MjI3Nzg4GgwKAm45EgZiaWROYnIaFwoCbzESEXNldEJpZFRyYWRpdGlvbmFsGg8KAm8yEgllbmRIZWlnaHQaEQoCbzMSC2NhbGxkZXJEYXRhGhIKAm80Egxpc1BheW1lbnRWYXIaEwoCbzUSDWNhbmNlbEJpZEltcGwaEgoCbzYSDHQwMjg5NDIyOTA5NBoPCgJvNxIJYmlkU3RhdHVzGh4KAm84EhhjYW5jZWxCaWRJbXBsVHJhZGl0aW9uYWwaCgoCbzkSBHR5cGUaEgoCcDESDHQwMTc3NDAxNzc4MRoVCgJwMhIPdmFsaWRhdGVBcnR3b3JrGhIKAnAzEgx0MDE4MTcwMTgyMTIaEAoCcDQSCmVudHJ5RXhpc3QaDwoCcDUSCWhhc2hFeGlzdBoNCgJwNhIHbWF4TWludBoRCgJwNxILYXVjdGlvblR5cGUaDAoCcDgSBm1pbkJpZBoOCgJwORIIZHVyYXRpb24aEgoCcTESDHQwMjU3MTQyNTc0NxoLCgJxMhIFZW50cnkAAAA+AAAAAAJhMQcAAAAAAmEyCQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNcFpRanpHb2dtaWZjRUtlOG1EZDZyaWJMN254VDlBQ3llAAAAAAJhMwIAAAAjM042NXhMcThKY0NlYUVpUjFUSlE3ZEJxWEJ2RXk2RTQ4V3oAAAAAAmE0CQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNOOWNRZ1pGUEhIVnU4d3FzbjJEa1FGZWhnM2g4Q05pb29BAAAAAAJhNQkBAAAABXZhbHVlAAAAAQkABCYAAAABAgAAACMzTjl4WllHcHpNRkRYdlh1Y3RtVTZ6VjhxU3ptMlpmRjMxZgAAAAACYTYBAAAAILqG7RB0p6PAf0j6P4bwBgeStpaWajtKEXDr6lXgktMzAAAAAAJhNwIAAAAjM04xRGhxNVpaeW9valFpc3VUTHVzWWpuR2lzcXJ4RHdHTHkAAAAAAmE4AAAAAAAAAACWAAAAAAJhOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAJhNAIAAAAUY29uZl9kYXBwX2lzX3J1bm5pbmcGAAAAAAJiMQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAJhNAIAAAAUY29uZl9tYWludGVuYW5jZV9tc2cCAAAAAAAAAAACYjICAAAACVNVU1BFTkRFRAAAAAACYjMCAAAAB1JFTU9WRUQAAAAAAmI0AgAAAAxVTlJFR0lTVEVSRUQAAAAAAmI1AgAAAAdBTExPV0VEAAAAAAJiNgIAAAAHQklEVFlQRQAAAAACYjcCAAAAC1RSQURJVElPTkFMAQAAAAJiOAAAAAEAAAACYjkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAACYjkCAAAAAAEAAAACYzEAAAABAAAAAmI5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQaAAAAAgUAAAACYTIFAAAAAmI5AgAAAB9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAQAAAAJjMgAAAAEAAAACYjkJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQaAAAAAgUAAAAEdGhpcwUAAAACYjkAAAAAAAAAAAABAAAAAmMzAAAAAQAAAAJiOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBoAAAACBQAAAAJhNQUAAAACYjkAAAAAAAAAAAABAAAAAmM0AAAAAQAAAAJiOQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABBsAAAACBQAAAAR0aGlzBQAAAAJiOQcBAAAAAmM1AAAAAQAAAAJjNgkAASwAAAACAgAAAAx1c2VyX3N0YXR1c18FAAAAAmM2AQAAAAJjNwAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kYXRlXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJjOQAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9uYW1lXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkMQAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9kZXNjXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkMgAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEGFydF9kaXNwbGF5X2NpZF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDMAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAxhcnRfbWF4bWludF8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDQAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAA1hcnRfbWlucHJpY2VfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmQ1AAAAAgAAAAJjNgAAAAJjOAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAANYXJ0X2R1cmF0aW9uXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkNgAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEGFydF9hdWN0aW9udHlwZV8FAAAAAmM4AgAAAAFfBQAAAAJjNgEAAAACZDcAAAACAAAAAmM2AAAAAmM4CQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAAthcnRfaXNzdWVkXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJkOAAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAC2FydF9vbnNhbGVfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmQ5AAAAAgAAAAJjNgAAAAJjOAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3RhZ3NfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmUxAAAAAgAAAAJjNgAAAAJjOAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAJYXJ0X3R5cGVfBQAAAAJjOAIAAAABXwUAAAACYzYBAAAAAmUyAAAAAgAAAAJjNgAAAAJjOAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAKYXJ0X3ByaWNlXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJlMwAAAAIAAAACYzYAAAACYzgJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAEmFydF9hc3NldEFjY2VwdGVkXwUAAAACYzgCAAAAAV8FAAAAAmM2AQAAAAJlNAAAAAIAAAACYzYAAAACZTUJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAAE2dldF9oYXNoYnl0eGlkYWRkcl8FAAAAAmU1AgAAAAFfBQAAAAJjNgEAAAACZTYAAAABAAAAAmU3CQABLAAAAAICAAAAEmdldF9vd25lcl9ieV9oYXNoXwUAAAACZTcBAAAAAmU4AAAAAgAAAAJlNwAAAAJjNgkAASwAAAACAgAAABdnZXRfdHhpZF9ieV9oYXNoX293bmVyXwkAAlgAAAABCQALVAAAAAEJAAGbAAAAAQkAASwAAAACBQAAAAJlNwUAAAACYzYAAAAAAmU5CQEAAAACYzEAAAABCQABLAAAAAICAAAAEmNlcnRpZmljYXRpb25fZmVlXwkAAlgAAAABBQAAAAJhNgEAAAACZjEAAAACAAAAAmYyAAAAAmYzAwkAAAAAAAACCQABMQAAAAEFAAAAAmYyAAAAAAAAAAAACQAAAgAAAAECAAAAGEZpZWxkIGNhbm5vdCBiZSBpcyBlbXB0eQMJAABmAAAAAgkAATEAAAABBQAAAAJmMgUAAAACZjMJAAACAAAAAQkAASwAAAACBQAAAAJmMgIAAAAMIGlzIHRvbyBsb25nBgEAAAACZjQAAAABAAAAAmM2BAAAAAJmNQkBAAAAC3ZhbHVlT3JFbHNlAAAAAgkABB0AAAACBQAAAAJhNAkBAAAAAmM1AAAAAQUAAAACYzYFAAAAAmI0AwMJAAAAAAAAAgUAAAACZjUFAAAAAmI0BgkAAAAAAAACBQAAAAJmNQUAAAACYjUCAAAALlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICdBY2NvdW50JyB0YWIDCQAAAAAAAAIFAAAAAmY1BQAAAAJiMgIAAAARQWNjb3VudCBzdXNwZW5kZWQDCQAAAAAAAAIFAAAAAmY1BQAAAAJiMwIAAAAPQWNjb3VudCByZW1vdmVkAgAAAAABAAAAAmY2AAAABQAAAAJjNgAAAAJmNwAAAAJmOAAAAAJmOQAAAAJnMQQAAAACZzIJAQAAAAJmNAAAAAEFAAAAAmM2AwkBAAAAAiE9AAAAAgUAAAACZzICAAAAAAkAAAIAAAABBQAAAAJnMgMJAAAAAAAAAgkAATEAAAABBQAAAAJmNwAAAAAAAAAAAAkAAAIAAAABAgAAABtEaXNwbGF5IENJRCBjYW5ub3QgYmUgZW1wdHkDCQEAAAABIQAAAAEJAQAAAAJmMQAAAAIFAAAAAmY4AAAAAAAAAABkCQAAAgAAAAECAAAAEjEwMCBDaGFyLiBtYXggbmFtZQMJAQAAAAEhAAAAAQkBAAAAAmYxAAAAAgUAAAACZjkAAAAAAAAAA+gJAAACAAAAAQIAAAAaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DCQAAZgAAAAIJAAGQAAAAAQkABLUAAAACBQAAAAJnMQIAAAABLAAAAAAAAAAABQkAAAIAAAABAgAAAAs1IHRhZ3MgbWF4LgIAAAAAAQAAAAJnMwAAAAEAAAACZzQDCQAAAAAAAAIJAAGQAAAAAQgFAAAAAmc0AAAACHBheW1lbnRzAAAAAAAAAAAACQAAAgAAAAECAAAAE05vIHBheW1lbnQgYXR0YWNoZWQEAAAAAmc1CQEAAAAFdmFsdWUAAAABCQABkQAAAAIIBQAAAAJnNAAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAACZzYJAQAAAAV2YWx1ZQAAAAEIBQAAAAJnNQAAAAZhbW91bnQJAAUUAAAAAgUAAAACZzUFAAAAAmc2AQAAAAJnNwAAAAEAAAACZzQEAAAAAmc4CQEAAAACZzMAAAABBQAAAAJnNAQAAAACZzUIBQAAAAJnOAAAAAJfMQQAAAACZzYIBQAAAAJnOAAAAAJfMgQAAAACZzkDAwkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAJnNQAAAAdhc3NldElkCQAAAAAAAAIIBQAAAAJnNQAAAAdhc3NldElkBQAAAAJhNgcIBQAAAAJnNQAAAAdhc3NldElkCQAAAgAAAAECAAAALU9ubHkgU2NvbmV4IHRva2VuIGFjY2VwdGVkIGFzIHRyYW5zYWN0aW9uIGZlZQMJAQAAAAIhPQAAAAIFAAAAAmc2BQAAAAJlOQkAAAIAAAABCQABLAAAAAICAAAAGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAAGkAAAAAQUAAAACZTkJAAUUAAAAAgUAAAACZzYFAAAAAmc5AQAAAAJoMQAAAAMAAAACZzQAAAACaDIAAAACaDMEAAAAAmg0CQEAAAACZzMAAAABBQAAAAJnNAQAAAACZzUIBQAAAAJoNAAAAAJfMQQAAAACZzYIBQAAAAJoNAAAAAJfMgQAAAACZzkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAACZzUAAAAHYXNzZXRJZAkAAAIAAAABAgAAAA5Xcm9uZyBhc3NldCBpZAMDCQAAZgAAAAIJAAExAAAAAQUAAAACaDIAAAAAAAAAAAAJAAAAAAAAAgkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAACZzUAAAAHYXNzZXRJZAUAAAACaDIHCAUAAAACZzUAAAAHYXNzZXRJZAkAAAIAAAABAgAAAA5Xcm9uZyBhc3NldCBpZAMDCQAAAAAAAAIFAAAAAmc5BQAAAAR1bml0CQEAAAACIT0AAAACBQAAAAJoMgIAAAAABwkAAAIAAAABAgAAAA5Xcm9uZyBhc3NldCBpZAMJAQAAAAIhPQAAAAIFAAAAAmgzBQAAAAJnNgkAAAIAAAABAgAAABNQYXltZW50IGRvbid0IG1hdGNoCQAFFAAAAAIFAAAAAmc2BQAAAAJnOQEAAAACaDUAAAABAAAAAmc5AwkBAAAAAiE9AAAAAgUAAAACZzkJAAJYAAAAAQUAAAACYTYJAAACAAAAAQIAAAAUT25seSBTY29uZXggYWNjZXB0ZWQGAQAAAAJoNgAAAAIAAAACZzkAAAACaDcEAAAAAmg4AwUAAAACYTEAAAAAAAAAAAEJAABoAAAAAgUAAAACZTkAAAAAAAAAAAIDAwMJAAAAAAAAAgUAAAACZzkJAAJYAAAAAQUAAAACYTYJAABmAAAAAgUAAAACaDgFAAAAAmg3BwkBAAAAAiE9AAAAAgUAAAACaDcAAAAAAAAAAAAHCQAAAgAAAAEJAAEsAAAAAgIAAAAZV3JvbmcgbWluaW11bSBzZWxsIHByaWNlIAkAAaQAAAABBQAAAAJoOAYBAAAAAmg5AAAAAQAAAAJnOQMJAAAAAAAAAgUAAAACZzkCAAAABVdBVkVTCQAAAgAAAAECAAAAGE9ubHkgc2NvbmV4IGlzIGFjY2VwdGVkIQkAAlkAAAABBQAAAAJnOQEAAAACaTEAAAABAAAAAmkyBAAAAAJpMwkBAAAAAmI4AAAAAQkAASwAAAACBQAAAAJpMgIAAAAFX09QRU4DCQAAAAAAAAIFAAAAAmkzAgAAAAAJAAACAAAAAQIAAAANQmlkIG5vdCBmb3VuZAQAAAACaTQJAAS1AAAAAgUAAAACaTMCAAAAAV8EAAAAAmk1CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACaTQAAAAAAAAAAAEEAAAAAmk2CQEAAAACaDkAAAABCQABkQAAAAIFAAAAAmk0AAAAAAAAAAAAAwkAAGcAAAACAAAAAAAAAAAABQAAAAJpNQkAAAIAAAABAgAAAAxXcm9uZyBhbW91bnQJAAUUAAAAAgUAAAACaTUFAAAAAmk2AQAAAAJpNwAAAAEAAAACZzQDCQEAAAABIQAAAAEFAAAAAmE5CQAAAgAAAAEFAAAAAmIxCQAFFQAAAAMJAAJYAAAAAQgFAAAAAmc0AAAADXRyYW5zYWN0aW9uSWQJAAJYAAAAAQgIBQAAAAJnNAAAAAZjYWxsZXIAAAAFYnl0ZXMIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wAQAAAAJpOAAAAAQAAAACZzQAAAACaTkAAAACajEAAAACajIDAwMJAAAAAAAAAgkAAlgAAAABCAgFAAAAAmc0AAAABmNhbGxlcgAAAAVieXRlcwUAAAACaTkJAQAAAAIhPQAAAAIFAAAAAmoxAgAAAAAHCQEAAAACIT0AAAACBQAAAAJqMgIAAAAABwYHAQAAAAJqMwAAAAQAAAACZzQAAAACaTkAAAACYzgAAAACajQEAAAAAmo1CQAAAAAAAAIJAAJYAAAAAQgIBQAAAAJnNAAAAAZjYWxsZXIAAAAFYnl0ZXMFAAAAAmk5BAAAAAJqNgkBAAAAAmMyAAAAAQIAAAAQdG90YWxfbmZ0X2lzc3VlZAQAAAACajcJAQAAAAJiOAAAAAEJAQAAAAJjOQAAAAIFAAAAAmk5BQAAAAJjOAMJAAAAAAAAAgUAAAACajcCAAAAAAkAAAIAAAABAgAAABFBcnQgZG9lc24ndCBleGlzdAQAAAACajgJAQAAAAJjNAAAAAEJAQAAAAJkOAAAAAIFAAAAAmk5BQAAAAJjOAQAAAACajkJAQAAAAJjMgAAAAEJAQAAAAJkNwAAAAIFAAAAAmk5BQAAAAJjOAQAAAACaDMDBQAAAAJqNQkAAGgAAAACBQAAAAJlOQAAAAAAAAAAAgkBAAAAAmMyAAAAAQkBAAAAAmUyAAAAAgUAAAACaTkFAAAAAmM4BAAAAAJoMgMFAAAAAmo1CQACWAAAAAEFAAAAAmE2CQEAAAACYjgAAAABCQEAAAACZTMAAAACBQAAAAJpOQUAAAACYzgEAAAAAmsxCQEAAAACYzIAAAABCQEAAAACZDMAAAACBQAAAAJpOQUAAAACYzgDAwMJAQAAAAEhAAAAAQUAAAACajQJAQAAAAEhAAAAAQUAAAACajUHAwMJAABnAAAAAgAAAAAAAAAAAAUAAAACaDMGCQEAAAABIQAAAAEFAAAAAmo4BgkAAGcAAAACAAAAAAAAAAAABQAAAAJrMQcJAAACAAAAAQIAAAAQQXJ0IG5vdCBmb3Igc2FsZQMDAwkBAAAAASEAAAABBQAAAAJqNAUAAAACajUHCQAAZwAAAAIAAAAAAAAAAAAFAAAAAmsxBwkAAAIAAAABAgAAABRNYXggaXNzdWFibGUgbm90IHNldAkABRkAAAAHBQAAAAJqNgUAAAACajcFAAAAAmo5BQAAAAJoMwUAAAACaDIFAAAAAmsxBQAAAAJqOAEAAAACazIAAAAJAAAAAmc0AAAAAmM2AAAAAmk5AAAAAmM4AAAAAmoxAAAAAmoyAAAAAmgyAAAAAmgzAAAAAmo0BAAAAAJnMgkBAAAAAmY0AAAAAQUAAAACaTkDAwUAAAACajQJAQAAAAIhPQAAAAIFAAAAAmcyAgAAAAAHCQAAAgAAAAEFAAAAAmcyBAAAAAJpMgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiaWRfBQAAAAJjOAIAAAABXwUAAAACaTkCAAAAAV8FAAAAAmoxAgAAAAFfBQAAAAJqMgQAAAACazMDBQAAAAJqNAkBAAAAAmkxAAAAAQUAAAACaTIJAQAAAAJoMQAAAAMFAAAAAmc0BQAAAAJoMgUAAAACaDMEAAAAAmc2CAUAAAACazMAAAACXzEEAAAAAmc5CAUAAAACazMAAAACXzIJAAUVAAAAAwUAAAACaTIFAAAAAmc2BQAAAAJnOQEAAAACazQAAAAFAAAAAmk5AAAAAmc5AAAAAmc2AAAAAmo5AAAAAmsxBAAAAAJrNQkBAAAAAmMzAAAAAQUAAAACaTkEAAAAAms2AwkAAGYAAAACBQAAAAJrNQUAAAAGaGVpZ2h0AAAAAAAAAAAAAwkAAAAAAAACBQAAAAJnOQUAAAACYTYFAAAAAmE4CQAAAgAAAAECAAAAGE9ubHkgU2NvbmV4IGlzIGFjY2VwdGVkIQQAAAACazcJAABrAAAAAwUAAAACZzYFAAAAAms2AAAAAAAAAAPoBAAAAAJrOAkAAGUAAAACBQAAAAJnNgUAAAACazcDCQAAAAAAAAIFAAAAAmo5BQAAAAJrMQkAAAIAAAABAgAAAAxBcnQgc29sZCBvdXQEAAAAAms5CQAAZAAAAAIFAAAAAmo5AAAAAAAAAAABCQAFFQAAAAMFAAAAAms3BQAAAAJrOAUAAAACazkBAAAAAmwxAAAACwAAAAJpOQAAAAJjOAAAAAJqNwAAAAJrOQAAAAJrMQAAAAJqNgAAAAJjNgAAAAJqMQAAAAJqMgAAAAJnNAAAAAJqOAQAAAACbDIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACUNyZWF0b3I6IAUAAAACaTkCAAAACCxBcnRJRDogBQAAAAJjOAIAAAAPLEFydHdvcmsgbmFtZTogBQAAAAJqNwIAAAAILElzc3VlOiAJAAGkAAAAAQUAAAACazkCAAAAAS8JAAGkAAAAAQUAAAACazEEAAAAAmwzCQAEQgAAAAUJAAEsAAAAAgIAAAADU0FfCQABpAAAAAEJAABkAAAAAgUAAAACajYAAAAAAAAAAAEFAAAAAmwyAAAAAAAAAAABAAAAAAAAAAAABwQAAAACbDQJAAQ4AAAAAQUAAAACbDMEAAAAAmw1AwMJAAAAAAAAAgUAAAACazkFAAAAAmsxBgkBAAAAASEAAAABBQAAAAJqOAcGBAAAAAJsNgMDAwkAAAAAAAACBQAAAAJjNgUAAAACaTkJAQAAAAIhPQAAAAIFAAAAAmoxAgAAAAAHCQEAAAACIT0AAAACBQAAAAJqMgIAAAAABwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAACajEIBQAAAAJnNAAAAAZjYWxsZXIJAAUWAAAABAUAAAACbDMFAAAAAmw0BQAAAAJsNQUAAAACbDYBAAAAAmw3AAAAAwAAAAJnOQAAAAJpMgAAAAJsOAQAAAACbDkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJnOQkAAAIAAAABAgAAABdPbmx5IHNjb25leCBpcyBhY2NlcHRlZAkAAlgAAAABCQEAAAAFdmFsdWUAAAABBQAAAAJnOQQAAAACaTMJAQAAAAJiOAAAAAEJAAEsAAAAAgUAAAACaTICAAAABV9PUEVOBAAAAAJtMQkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAJpMgIAAAAFX09QRU4EAAAAAm0yCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIFAAAAAmkyAgAAAAdfQ0xPU0VECQABLAAAAAIJAAEsAAAAAgUAAAACaTMCAAAAAV8JAAGkAAAAAQUAAAACbDgJAAUVAAAAAwUAAAACbDkFAAAAAm0xBQAAAAJtMgEAAAACbTMAAAAFAAAAAmc0AAAAAmM4AAAAAmk5AAAAAmoyAAAAAmoxBAAAAAJtNAkBAAAAAmk3AAAAAQUAAAACZzQEAAAAAm01CAUAAAACbTQAAAACXzEEAAAAAmM2CAUAAAACbTQAAAACXzIEAAAAAmw4CAUAAAACbTQAAAACXzMEAAAAAmo0CQEAAAACaTgAAAAEBQAAAAJnNAUAAAACaTkFAAAAAmoxBQAAAAJqMgQAAAACbTYJAQAAAAJqMwAAAAQFAAAAAmc0BQAAAAJpOQUAAAACYzgFAAAAAmo0BAAAAAJqNggFAAAAAm02AAAAAl8xBAAAAAJqNwgFAAAAAm02AAAAAl8yBAAAAAJqOQgFAAAAAm02AAAAAl8zBAAAAAJoMwgFAAAAAm02AAAAAl80BAAAAAJoMggFAAAAAm02AAAAAl81BAAAAAJrMQgFAAAAAm02AAAAAl82BAAAAAJqOAgFAAAAAm02AAAAAl83BAAAAAJtNwkBAAAAAmsyAAAACQUAAAACZzQFAAAAAmM2BQAAAAJpOQUAAAACYzgFAAAAAmoxBQAAAAJqMgUAAAACaDIFAAAAAmgzBQAAAAJqNAQAAAACaTIIBQAAAAJtNwAAAAJfMQQAAAACZzYIBQAAAAJtNwAAAAJfMgQAAAACZzkIBQAAAAJtNwAAAAJfMwQAAAACbTgJAQAAAAJrNAAAAAUFAAAAAmk5CQEAAAAFdmFsdWUAAAABBQAAAAJnOQUAAAACZzYFAAAAAmo5BQAAAAJrMQQAAAACazcIBQAAAAJtOAAAAAJfMQQAAAACazgIBQAAAAJtOAAAAAJfMgQAAAACazkIBQAAAAJtOAAAAAJfMwQAAAACbTkJAQAAAAJsMQAAAAsFAAAAAmk5BQAAAAJjOAUAAAACajcFAAAAAms5BQAAAAJrMQUAAAACajYFAAAAAmM2BQAAAAJqMQUAAAACajIFAAAAAmc0BQAAAAJqOAQAAAACbDMIBQAAAAJtOQAAAAJfMQQAAAACbDQIBQAAAAJtOQAAAAJfMgQAAAACbDUIBQAAAAJtOQAAAAJfMwQAAAACbDYIBQAAAAJtOQAAAAJfNAQAAAACbjEJAQAAAAJsNwAAAAMFAAAAAmc5BQAAAAJpMgUAAAACbDgEAAAAAmw5CAUAAAACbjEAAAACXzEEAAAAAm0xCAUAAAACbjEAAAACXzIEAAAAAm0yCAUAAAACbjEAAAACXzMEAAAAAm4yCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAACWFydF9zb2xkXwkAAaQAAAABBQAAAAJrOQIAAAAEX29mXwkAAaQAAAABBQAAAAJrMQIAAAABXwUAAAACYzgCAAAAAV8FAAAAAmk5BAAAAAJuMwMJAQAAAAEhAAAAAQUAAAACajQJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACYzYCAAAAAV8JAAGkAAAAAQUAAAACbDgCAAAAAV8FAAAAAm01AgAAAAFfCQABpAAAAAEFAAAAAmgzAgAAAAFfBQAAAAJoMgIAAAABXwkAAlgAAAABBQAAAAJsNAkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQAEJQAAAAEFAAAAAmw2AgAAAAFfCQABpAAAAAEFAAAAAmw4AgAAAAFfBQAAAAJtNQIAAAABXwkAAaQAAAABBQAAAAJnNgIAAAABXwUAAAACbDkCAAAAAV8JAAJYAAAAAQUAAAACbDQEAAAAAm40CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAJuMgUAAAACbjMEAAAAAm41CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZDcAAAACBQAAAAJpOQUAAAACYzgFAAAAAms5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgIAAAAEbmZ0XwkAAlgAAAABBQAAAAJsNAUAAAACbjIJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEHRvdGFsX25mdF9pc3N1ZWQJAABkAAAAAgUAAAACajYAAAAAAAAAAAEJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAJkOAAAAAIFAAAAAmk5BQAAAAJjOAUAAAACbDUJAARMAAAAAgUAAAACbDMJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAmk5BQAAAAJrOAUAAAACZzkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAmEzBQAAAAJrNwUAAAACZzkJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAACbDYAAAAAAAAAAAEFAAAAAmw0BQAAAANuaWwDBQAAAAJqNAkABE0AAAACCQAETQAAAAIJAARNAAAAAgUAAAACbjUFAAAAAm40BQAAAAJtMgUAAAACbTEJAARMAAAAAgUAAAACbjQFAAAAAm41AQAAAAJuNgAAAAMAAAACZzQAAAACYzgAAAACaTkEAAAAAm43CQEAAAACaTcAAAABBQAAAAJnNAQAAAACbTUIBQAAAAJuNwAAAAJfMQQAAAACYzYIBQAAAAJuNwAAAAJfMgQAAAACbDgIBQAAAAJuNwAAAAJfMwQAAAACbjgJAQAAAAJnMwAAAAEFAAAAAmc0BAAAAAJnNQgFAAAAAm44AAAAAl8xBAAAAAJnNggFAAAAAm44AAAAAl8yBAAAAAJnOQMJAQAAAAEhAAAAAQkBAAAACWlzRGVmaW5lZAAAAAEIBQAAAAJnNQAAAAdhc3NldElkCQAAAgAAAAECAAAAGE9ubHkgc2NvbmV4IGlzIGFjY2VwdGVkIQkAAlgAAAABCQEAAAAFdmFsdWUAAAABCAUAAAACZzUAAAAHYXNzZXRJZAQAAAACbjkJAQAAAAJjMgAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAMJAQAAAAEhAAAAAQkBAAAAAmg1AAAAAQUAAAACZzkJAAACAAAAAQIAAAASYXNzZXQgbm90IGFjY2VwdGVkAwkBAAAAASEAAAABCQEAAAACaDYAAAACBQAAAAJnOQUAAAACZzYJAAACAAAAAQIAAAAOV3JvbmcgbWluIHNlbGwEAAAAAmo5CQEAAAACYzIAAAABCQEAAAACZDcAAAACBQAAAAJpOQUAAAACYzgEAAAAAmsxCQEAAAACYzIAAAABCQEAAAACZDMAAAACBQAAAAJpOQUAAAACYzgDCQAAZwAAAAIAAAAAAAAAAAAFAAAAAmsxCQAAAgAAAAECAAAAI05vIG1heCBlZGl0aW9uIHNldCBmb3IgdGhpcyBhcnR3b3JrAwkAAGcAAAACBQAAAAJqOQUAAAACazEJAAACAAAAAQIAAAAYU29sZCBvdXQsIHlvdSBjYW5ub3QgYmlkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAARiaWRfBQAAAAJjOAIAAAABXwUAAAACaTkCAAAAAV8FAAAAAmM2AgAAAAFfBQAAAAJtNQIAAAAFX09QRU4JAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACZzkCAAAAAV8JAAGkAAAAAQUAAAACZzYCAAAAAV8JAAGkAAAAAQUAAAACbDgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAkAAGQAAAACBQAAAAJuOQAAAAAAAAAAAQUAAAADbmlsAQAAAAJvMQAAAAMAAAACZzQAAAACYzgAAAACaTkEAAAAAm8yCQEAAAACYzIAAAABCQEAAAACZDUAAAACBQAAAAJpOQUAAAACYzgDCQAAZgAAAAIFAAAABmhlaWdodAUAAAACbzIJAAACAAAAAQIAAAAhVGhpcyBhdWN0aW9uIGlzIGZpbmlzaGVkIGFscmVhZHkhBAAAAAJvMwkBAAAAAmk3AAAAAQUAAAACZzQEAAAAAm01CAUAAAACbzMAAAACXzEEAAAAAmM2CAUAAAACbzMAAAACXzIEAAAAAmw4CAUAAAACbzMAAAACXzMEAAAAAm80CQEAAAACZzMAAAABBQAAAAJnNAQAAAACZzUIBQAAAAJvNAAAAAJfMQQAAAACZzYIBQAAAAJvNAAAAAJfMgQAAAACZzkDCQEAAAABIQAAAAEJAQAAAAlpc0RlZmluZWQAAAABCAUAAAACZzUAAAAHYXNzZXRJZAkAAAIAAAABAgAAABhPbmx5IHNjb25leCBpcyBhY2NlcHRlZCEJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQgFAAAAAmc1AAAAB2Fzc2V0SWQEAAAAAm45CQEAAAACYzIAAAABCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgDCQEAAAABIQAAAAEJAQAAAAJoNQAAAAEFAAAAAmc5CQAAAgAAAAECAAAAEmFzc2V0IG5vdCBhY2NlcHRlZAMJAQAAAAEhAAAAAQkBAAAAAmg2AAAAAgUAAAACZzkFAAAAAmc2CQAAAgAAAAECAAAADldyb25nIG1pbiBzZWxsBAAAAAJqOQkBAAAAAmMyAAAAAQkBAAAAAmQ3AAAAAgUAAAACaTkFAAAAAmM4BAAAAAJrMQkBAAAAAmMyAAAAAQkBAAAAAmQzAAAAAgUAAAACaTkFAAAAAmM4AwkAAGcAAAACAAAAAAAAAAAABQAAAAJrMQkAAAIAAAABAgAAACNObyBtYXggZWRpdGlvbiBzZXQgZm9yIHRoaXMgYXJ0d29yawMJAABnAAAAAgUAAAACajkFAAAAAmsxCQAAAgAAAAECAAAAGFNvbGQgb3V0LCB5b3UgY2Fubm90IGJpZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmlkXwUAAAACYzgCAAAAAV8FAAAAAmk5AgAAAAFfBQAAAAJjNgIAAAABXwUAAAACbTUCAAAABV9PUEVOCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIFAAAAAmc5AgAAAAFfCQABpAAAAAEFAAAAAmc2AgAAAAFfCQABpAAAAAEFAAAAAmw4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgJAABkAAAAAgUAAAACbjkAAAAAAAAAAAEFAAAAA25pbAEAAAACbzUAAAAEAAAAAmc0AAAAAmM4AAAAAmk5AAAAAmoyBAAAAAJvNgkBAAAAAmk3AAAAAQUAAAACZzQEAAAAAm01CAUAAAACbzYAAAACXzEEAAAAAmM2CAUAAAACbzYAAAACXzIEAAAAAmw4CAUAAAACbzYAAAACXzMEAAAAAm45CQEAAAACYzIAAAABCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgEAAAAAmkyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAICAAAABGJpZF8FAAAAAmM4AgAAAAFfBQAAAAJpOQIAAAABXwUAAAACYzYCAAAAAV8FAAAAAmoyBAAAAAJpMwkBAAAAAmI4AAAAAQkAASwAAAACBQAAAAJpMgIAAAAFX09QRU4DCQAAAAAAAAIFAAAAAmkzAgAAAAAJAAACAAAAAQIAAAANQmlkIG5vdCBmb3VuZAQAAAACaTQJAAS1AAAAAgUAAAACaTMCAAAAAV8EAAAAAmc5CQEAAAACaDkAAAABCQABkQAAAAIFAAAAAmk0AAAAAAAAAAAABAAAAAJvNwIAAAAIQ0FOQ0VMRUQJAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkAASwAAAACBQAAAAJpMgIAAAAFX09QRU4JAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAAAmkyAgAAAAFfBQAAAAJvNwkAASwAAAACCQABLAAAAAIFAAAAAmkzAgAAAAFfCQABpAAAAAEFAAAAAmw4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQABLAAAAAICAAAAEmN1cnJlbnRfYmlkYW1vdW50XwUAAAACYzgJAABlAAAAAgUAAAACbjkAAAAAAAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAB0FkZHJlc3MAAAABCQACWQAAAAEFAAAAAmM2CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAACaTQAAAAAAAAAAAEFAAAAAmc5BQAAAANuaWwBAAAAAm84AAAABAAAAAJnNAAAAAJjOAAAAAJpOQAAAAJqMgQAAAACbzIJAQAAAAJjMgAAAAEJAQAAAAJkNQAAAAIFAAAAAmk5BQAAAAJjOAMJAABmAAAAAgUAAAACbzIFAAAABmhlaWdodAkAAAIAAAABAgAAACFUaGlzIGF1Y3Rpb24gaXMgbm90IGZpbmlzaGVkIHlldCEEAAAAAm82CQEAAAACaTcAAAABBQAAAAJnNAQAAAACbTUIBQAAAAJvNgAAAAJfMQQAAAACYzYIBQAAAAJvNgAAAAJfMgQAAAACbDgIBQAAAAJvNgAAAAJfMwQAAAACbjkJAQAAAAJjMgAAAAEJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAQAAAACaTIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgIAAAAEYmlkXwUAAAACYzgCAAAAAV8FAAAAAmk5AgAAAAFfBQAAAAJjNgIAAAABXwUAAAACajIEAAAAAmkzCQEAAAACYjgAAAABCQABLAAAAAIFAAAAAmkyAgAAAAVfT1BFTgMJAAAAAAAAAgUAAAACaTMCAAAAAAkAAAIAAAABAgAAAA1CaWQgbm90IGZvdW5kBAAAAAJpNAkABLUAAAACBQAAAAJpMwIAAAABXwQAAAACZzkJAQAAAAJoOQAAAAEJAAGRAAAAAgUAAAACaTQAAAAAAAAAAAAEAAAAAm83AgAAAAhDQU5DRUxFRAkABEwAAAACCQEAAAALRGVsZXRlRW50cnkAAAABCQABLAAAAAIFAAAAAmkyAgAAAAVfT1BFTgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAACaTICAAAAAV8FAAAAAm83CQABLAAAAAIJAAEsAAAAAgUAAAACaTMCAAAAAV8JAAGkAAAAAQUAAAACbDgJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAAEsAAAAAgIAAAASY3VycmVudF9iaWRhbW91bnRfBQAAAAJjOAkAAGUAAAACBQAAAAJuOQAAAAAAAAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAACYzYJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAJpNAAAAAAAAAAAAQUAAAACZzkFAAAAA25pbAAAAAcAAAACZzQBAAAACmFkZEFydHdvcmsAAAAGAAAAAmU3AAAAAmY4AAAAAmY5AAAAAmcxAAAAAm85AAAAAmY3BAAAAAJwMQkBAAAAAmk3AAAAAQUAAAACZzQEAAAAAmM4CAUAAAACcDEAAAACXzEEAAAAAmM2CAUAAAACcDEAAAACXzIEAAAAAmw4CAUAAAACcDEAAAACXzMEAAAAAnAyCQEAAAACZjYAAAAFBQAAAAJjNgUAAAACZjcFAAAAAmY4BQAAAAJmOQUAAAACZzEDCQEAAAACIT0AAAACBQAAAAJwMgIAAAAACQAAAgAAAAECAAAAFVNvbWV0aGluZyB3ZW50IHdyb25nIQQAAAACcDMJAQAAAAJnNwAAAAEFAAAAAmc0BAAAAAJnNggFAAAAAnAzAAAAAl8xBAAAAAJnOQgFAAAAAnAzAAAAAl8yAwkBAAAAASEAAAABCQEAAAAJaXNEZWZpbmVkAAAAAQUAAAACZzYJAAACAAAAAQIAAAAUU29tZXRoaW5nIHdlbnQgd3JvbmcEAAAAAnA0CQEAAAACYjgAAAABCQEAAAACZTgAAAACBQAAAAJlNwUAAAACYzYDCQEAAAACIT0AAAACBQAAAAJwNAIAAAAACQAAAgAAAAECAAAAFFlvdSBhbHJlYWR5IGFkZGVkIGl0BAAAAAJwNQkBAAAAAmI4AAAAAQkBAAAAAmU2AAAAAQUAAAACZTcDCQEAAAACIT0AAAACBQAAAAJwNQIAAAAACQAAAgAAAAECAAAAF0hhc2ggYWxyZWFkeSByZWdpc3RlcmVkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJlNgAAAAEFAAAAAmU3BQAAAAJjNgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACZTgAAAACBQAAAAJlNwUAAAACYzYFAAAAAmM4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACYzcAAAACBQAAAAJjNgUAAAACYzgFAAAAAmw4CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJjOQAAAAIFAAAAAmM2BQAAAAJjOAUAAAACZjgJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmQxAAAAAgUAAAACYzYFAAAAAmM4BQAAAAJmOQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAACZDIAAAACBQAAAAJjNgUAAAACYzgFAAAAAmY3CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJlMQAAAAIFAAAAAmM2BQAAAAJjOAUAAAACbzkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmQ5AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJnMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAAmQzAAAAAgUAAAACYzYFAAAAAmM4AAAAAAAAAAAACQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZDcAAAACBQAAAAJjNgUAAAACYzgAAAAAAAAAAAAJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAAAJkOAAAAAIFAAAAAmM2BQAAAAJjOAcJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmU0AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJlNwkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAHQWRkcmVzcwAAAAEJAAJZAAAAAQUAAAACYTMFAAAAAmc2BQAAAAJnOQUAAAADbmlsAAAAAmc0AQAAAAtzZWxsQXJ0d29yawAAAAcAAAACYzgAAAACaDcAAAACcDYAAAACZzkAAAACcDcAAAACcDgAAAACcDkEAAAAAnExCQEAAAACaTcAAAABBQAAAAJnNAQAAAACbTUIBQAAAAJxMQAAAAJfMQQAAAACYzYIBQAAAAJxMQAAAAJfMgQAAAACajcJAQAAAAJiOAAAAAEJAQAAAAJjOQAAAAIFAAAAAmM2BQAAAAJjOAMJAQAAAAEhAAAAAQkBAAAAD2NvbnRhaW5zRWxlbWVudAAAAAIJAARMAAAAAgUAAAACYjYJAARMAAAAAgUAAAACYjcFAAAAA25pbAUAAAACcDcJAAACAAAAAQIAAAAeV2UgZG9udCBrbm93IHRoaXMgYXVjdGlvbiB0eXBlAwkAAAAAAAACBQAAAAJqNwIAAAAACQAAAgAAAAECAAAAI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BAAAAAJuOQkBAAAAAmMyAAAAAQkAASwAAAACAgAAABJjdXJyZW50X2JpZGFtb3VudF8FAAAAAmM4AwkBAAAAASEAAAABCQEAAAACaDUAAAABBQAAAAJnOQkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEDCQEAAAABIQAAAAEJAQAAAAJoNgAAAAIFAAAAAmc5BQAAAAJoNwkAAAIAAAABAgAAABVTb21ldGhpbmcgd2VudCB3cm9uZyEEAAAAAmcyCQEAAAACZjQAAAABBQAAAAJjNgMJAQAAAAIhPQAAAAIFAAAAAmcyAgAAAAAJAAACAAAAAQUAAAACZzIEAAAAAmo5CQEAAAACYzIAAAABCQEAAAACZDcAAAACBQAAAAJjNgUAAAACYzgEAAAAAmsxCQEAAAACYzIAAAABCQEAAAACZDMAAAACBQAAAAJjNgUAAAACYzgDCQAAZgAAAAIFAAAAAnA2AAAAAAAAAAAKCQAAAgAAAAECAAAAGzEwIGVkaXRpb25zIG1heCBwZXIgYXJ0d29yawMDCQEAAAACIT0AAAACBQAAAAJqOQAAAAAAAAAAAAkAAAAAAAACBQAAAAJqOQUAAAACazEHCQAAAgAAAAECAAAAFE1heCBlZGl0aW9uIHJlYWNoZWQuAwMJAABmAAAAAgUAAAACajkAAAAAAAAAAAAJAQAAAAIhPQAAAAIFAAAAAmsxBQAAAAJwNgcJAAACAAAAAQIAAAAmQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIGFueW1vcmUDAwkAAGYAAAACBQAAAAJuOQAAAAAAAAAAAAkBAAAAAiE9AAAAAgUAAAACazEFAAAAAnA2BwkAAAIAAAABAgAAADFDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgd2l0aCBhY3RpdmUgb3JkZXJzBAAAAAJsNQMDCQAAZgAAAAIFAAAAAmg3AAAAAAAAAAAACQAAZgAAAAIFAAAAAnA2AAAAAAAAAAAABwYHBAAAAAJvMgkAAGQAAAACBQAAAAJwOQUAAAAGaGVpZ2h0CQAETAAAAAIJAQAAAAxCb29sZWFuRW50cnkAAAACCQEAAAACZDgAAAACBQAAAAJjNgUAAAACYzgFAAAAAmw1CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZTIAAAACBQAAAAJjNgUAAAACYzgFAAAAAmg3CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZDMAAAACBQAAAAJjNgUAAAACYzgFAAAAAnA2CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZDQAAAACBQAAAAJjNgUAAAACYzgFAAAAAnA4CQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAACZDUAAAACBQAAAAJjNgUAAAACYzgFAAAAAm8yCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAJlMwAAAAIFAAAAAmM2BQAAAAJjOAUAAAACZzkJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAAmQ2AAAAAgUAAAACYzYFAAAAAmM4BQAAAAJwNwUAAAADbmlsAAAAAmc0AQAAAApidXlBcnR3b3JrAAAAAgAAAAJjOAAAAAJpOQkBAAAAAm0zAAAABQUAAAACZzQFAAAAAmM4BQAAAAJpOQIAAAAAAgAAAAAAAAACZzQBAAAAC2RlbGV0ZUVudHJ5AAAAAQAAAAJxMgQAAAACYzYJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQgFAAAAAmc0AAAAD2NhbGxlclB1YmxpY0tleQMJAAAAAAAAAgUAAAACYzYFAAAAAmE3CQAETAAAAAIJAQAAAAtEZWxldGVFbnRyeQAAAAEFAAAAAnEyBQAAAANuaWwJAAACAAAAAQIAAAACbm8AAAACZzQBAAAABnNldEJpZAAAAAIAAAACYzgAAAACaTkEAAAAAnA3CQEAAAACZDYAAAACBQAAAAJjOAUAAAACaTkDCQAAAAAAAAIFAAAAAnA3BQAAAAJiNgkBAAAAAm42AAAAAwUAAAACZzQFAAAAAmM4BQAAAAJpOQMJAAAAAAAAAgUAAAACcDcFAAAAAmI3CQEAAAACbzEAAAADBQAAAAJnNAUAAAACYzgFAAAAAmk5CQAAAgAAAAECAAAAL1Vua25vd24gYXVjdGlvbiB0eXBlLCBwbGVhc2UgY29udGFjdCB0aGUgYWRtaW5zAAAAAmc0AQAAAAlhY2NlcHRCaWQAAAAEAAAAAmM4AAAAAmk5AAAAAmoyAAAAAmoxBAAAAAJjNgkAAlgAAAABCAgFAAAAAmc0AAAABmNhbGxlcgAAAAVieXRlcwMJAQAAAAIhPQAAAAIFAAAAAmM2BQAAAAJpOQkAAAIAAAABAgAAABlZb3UgY2Fubm90IGRvIHRoaXMgYWN0aW9uCQEAAAACbTMAAAAFBQAAAAJnNAUAAAACYzgFAAAAAmk5BQAAAAJqMgUAAAACajEAAAACZzQBAAAACWNhbmNlbEJpZAAAAAMAAAACYzgAAAACaTkAAAACajIEAAAAAnA3CQEAAAACZDYAAAACBQAAAAJjOAUAAAACaTkDCQAAAAAAAAIFAAAAAnA3BQAAAAJiNgkBAAAAAm81AAAABAUAAAACZzQFAAAAAmM4BQAAAAJpOQUAAAACajIJAQAAAAJvOAAAAAQFAAAAAmc0BQAAAAJjOAUAAAACaTkFAAAAAmoyAAAAAJvTHK0=", "height": 1651102, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: DTXvDhb4BHv7WgJG7kzZinyyQMZycdXm6BeYGdASQDtd Next: BmpT9emEvB6zu65nGcnFg9GrELJqaNkZS22EjDQCApFc Diff:
OldNewDifferences
386386 }
387387
388388
389+func setBidNonTraditional (i,artId,issuer) = {
390+ let t02770927747 = idCallerDate(i)
391+ let id = t02770927747._1
392+ let caller = t02770927747._2
393+ let date = t02770927747._3
394+ let t02775227788 = isPayment(i)
395+ let payment = t02775227788._1
396+ let amount = t02775227788._2
397+ let assetId = if (!(isDefined(payment.assetId)))
398+ then throw("Only sconex is accepted!")
399+ else toBase58String(value(payment.assetId))
400+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
401+ if (!(acceptedAssetIds(assetId)))
402+ then throw("asset not accepted")
403+ else if (!(validateMinSell(assetId, amount)))
404+ then throw("Wrong min sell")
405+ else {
406+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
407+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
408+ if ((0 >= maxCanSell))
409+ then throw("No max edition set for this artwork")
410+ else if ((amountSold >= maxCanSell))
411+ then throw("Sold out, you cannot bid")
412+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
413+ }
414+ }
415+
416+
417+func setBidTraditional (i,artId,issuer) = {
418+ let endHeight = getIntegerByKey(keyDuration(issuer, artId))
419+ if ((height > endHeight))
420+ then throw("This auction is finished already!")
421+ else {
422+ let callderData = idCallerDate(i)
423+ let id = callderData._1
424+ let caller = callderData._2
425+ let date = callderData._3
426+ let isPaymentVar = isPayment(i)
427+ let payment = isPaymentVar._1
428+ let amount = isPaymentVar._2
429+ let assetId = if (!(isDefined(payment.assetId)))
430+ then throw("Only sconex is accepted!")
431+ else toBase58String(value(payment.assetId))
432+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
433+ if (!(acceptedAssetIds(assetId)))
434+ then throw("asset not accepted")
435+ else if (!(validateMinSell(assetId, amount)))
436+ then throw("Wrong min sell")
437+ else {
438+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
439+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
440+ if ((0 >= maxCanSell))
441+ then throw("No max edition set for this artwork")
442+ else if ((amountSold >= maxCanSell))
443+ then throw("Sold out, you cannot bid")
444+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
445+ }
446+ }
447+ }
448+
449+
450+func cancelBidImpl (i,artId,issuer,bidId) = {
451+ let t02894229094 = idCallerDate(i)
452+ let id = t02894229094._1
453+ let caller = t02894229094._2
454+ let date = t02894229094._3
455+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
456+ let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
457+ let bidData = getStringByKey((bidDataKey + "_OPEN"))
458+ if ((bidData == ""))
459+ then throw("Bid not found")
460+ else {
461+ let bidDataArr = split(bidData, "_")
462+ let assetId = getBidAssetId(bidDataArr[0])
463+ let bidStatus = "CANCELED"
464+[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
465+ }
466+ }
467+
468+
469+func cancelBidImplTraditional (i,artId,issuer,bidId) = {
470+ let endHeight = getIntegerByKey(keyDuration(issuer, artId))
471+ if ((endHeight > height))
472+ then throw("This auction is not finished yet!")
473+ else {
474+ let t02894229094 = idCallerDate(i)
475+ let id = t02894229094._1
476+ let caller = t02894229094._2
477+ let date = t02894229094._3
478+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
479+ let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
480+ let bidData = getStringByKey((bidDataKey + "_OPEN"))
481+ if ((bidData == ""))
482+ then throw("Bid not found")
483+ else {
484+ let bidDataArr = split(bidData, "_")
485+ let assetId = getBidAssetId(bidDataArr[0])
486+ let bidStatus = "CANCELED"
487+[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
488+ }
489+ }
490+ }
491+
492+
389493 @Callable(i)
390494 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay) = {
391495 let t01774017781 = idCallerDate(i)
425529 let artworkName = getStringByKey(keyName(caller, artId))
426530 if (!(containsElement([auctionType1, auctionType2], auctionType)))
427531 then throw("We dont know this auction type")
428- else if (containsElement([auctionType2], auctionType))
429- then throw("We didnt implement this auction type yet")
430- else if ((artworkName == ""))
431- then throw("This art doesn't match your account")
432- else {
433- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
434- if (!(acceptedAssetIds(assetId)))
532+ else if ((artworkName == ""))
533+ then throw("This art doesn't match your account")
534+ else {
535+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
536+ if (!(acceptedAssetIds(assetId)))
537+ then throw("Something went wrong!")
538+ else if (!(validateMinSell(assetId, price)))
435539 then throw("Something went wrong!")
436- else if (!(validateMinSell(assetId, price)))
437- then throw("Something went wrong!")
438- else {
439- let checkUser = validateUser(caller)
440- if ((checkUser != ""))
441- then throw(checkUser)
442- else {
443- let amountSold = getIntegerByKey(keyIssued(caller, artId))
444- let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
445- if ((maxMint > 10))
446- then throw("10 editions max per artwork")
447- else if (if ((amountSold != 0))
448- then (amountSold == maxCanSell)
540+ else {
541+ let checkUser = validateUser(caller)
542+ if ((checkUser != ""))
543+ then throw(checkUser)
544+ else {
545+ let amountSold = getIntegerByKey(keyIssued(caller, artId))
546+ let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
547+ if ((maxMint > 10))
548+ then throw("10 editions max per artwork")
549+ else if (if ((amountSold != 0))
550+ then (amountSold == maxCanSell)
551+ else false)
552+ then throw("Max edition reached.")
553+ else if (if ((amountSold > 0))
554+ then (maxCanSell != maxMint)
449555 else false)
450- then throw("Max edition reached.")
451- else if (if ((amountSold > 0))
556+ then throw("Cannot change maximum issuable anymore")
557+ else if (if ((bidNbr > 0))
452558 then (maxCanSell != maxMint)
453559 else false)
454- then throw("Cannot change maximum issuable anymore")
455- else if (if ((bidNbr > 0))
456- then (maxCanSell != maxMint)
457- else false)
458- then throw("Cannot change maximum issuable with active orders")
459- else {
460- let sellStatus = if (if ((price > 0))
461- then (maxMint > 0)
462- else false)
463- then true
464- else false
465-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
466- }
467- }
468- }
469- }
560+ then throw("Cannot change maximum issuable with active orders")
561+ else {
562+ let sellStatus = if (if ((price > 0))
563+ then (maxMint > 0)
564+ else false)
565+ then true
566+ else false
567+ let endHeight = (duration + height)
568+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
569+ }
570+ }
571+ }
572+ }
470573 }
471574
472575
488591
489592 @Callable(i)
490593 func setBid (artId,issuer) = {
491- let t02770927747 = idCallerDate(i)
492- let id = t02770927747._1
493- let caller = t02770927747._2
494- let date = t02770927747._3
495- let t02775227788 = isPayment(i)
496- let payment = t02775227788._1
497- let amount = t02775227788._2
498- let assetId = if (!(isDefined(payment.assetId)))
499- then throw("Only sconex is accepted!")
500- else toBase58String(value(payment.assetId))
501- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
502- if (!(acceptedAssetIds(assetId)))
503- then throw("asset not accepted")
504- else if (!(validateMinSell(assetId, amount)))
505- then throw("Wrong min sell")
506- else {
507- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
508- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
509- if ((0 >= maxCanSell))
510- then throw("No max edition set for this artwork")
511- else if ((amountSold >= maxCanSell))
512- then throw("Sold out, you cannot bid")
513- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
514- }
594+ let auctionType = keyAuctionType(artId, issuer)
595+ if ((auctionType == auctionType1))
596+ then setBidNonTraditional(i, artId, issuer)
597+ else if ((auctionType == auctionType2))
598+ then setBidTraditional(i, artId, issuer)
599+ else throw("Unknown auction type, please contact the admins")
515600 }
516601
517602
528613
529614 @Callable(i)
530615 func cancelBid (artId,issuer,bidId) = {
531- let t02894229094 = idCallerDate(i)
532- let id = t02894229094._1
533- let caller = t02894229094._2
534- let date = t02894229094._3
535- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
536- let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
537- let bidData = getStringByKey((bidDataKey + "_OPEN"))
538- if ((bidData == ""))
539- then throw("Bid not found")
540- else {
541- let bidDataArr = split(bidData, "_")
542- let assetId = getBidAssetId(bidDataArr[0])
543- let bidStatus = "CANCELED"
544-[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
545- }
616+ let auctionType = keyAuctionType(artId, issuer)
617+ if ((auctionType == auctionType1))
618+ then cancelBidImpl(i, artId, issuer, bidId)
619+ else cancelBidImplTraditional(i, artId, issuer, bidId)
546620 }
547621
548622
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let unitTest = false
55
66 let oracleFee = value(addressFromString("3MpZQjzGogmifcEKe8mDd6ribL7nxT9ACye"))
77
88 let feeReceiver = "3N65xLq8JcCeaEiR1TJQ7dBqXBvEy6E48Wz"
99
1010 let userDapp = value(addressFromString("3N9cQgZFPHHVu8wqsn2DkQFehg3h8CNiooA"))
1111
1212 let whitelistDapp = value(addressFromString("3N9xZYGpzMFDXvXuctmU6zV8qSzm2ZfF31f"))
1313
1414 let sconexAssetId = base58'DZ8ALmuLeSZ2ocsYLAcL9MiXBFDbMNQG9LtitREyU5ZC'
1515
1616 let owner = "3N1Dhq5ZZyoojQisuTLusYjnGisqrxDwGLy"
1717
1818 let sconexFirstSellCut = 150
1919
2020 let dappRunning = valueOrElse(getBoolean(userDapp, "conf_dapp_is_running"), true)
2121
2222 let maintenanceMSG = valueOrElse(getString(userDapp, "conf_maintenance_msg"), "")
2323
2424 let userSuspended = "SUSPENDED"
2525
2626 let userRemoved = "REMOVED"
2727
2828 let userUnregistered = "UNREGISTERED"
2929
3030 let userAllowed = "ALLOWED"
3131
3232 let auctionType1 = "BIDTYPE"
3333
3434 let auctionType2 = "TRADITIONAL"
3535
3636 func getStringByKey (key) = valueOrElse(getString(this, key), "")
3737
3838
3939 func getIntegerByKeyFromOracle (key) = valueOrErrorMessage(getInteger(oracleFee, key), "Integer undefine or 0 in oracle")
4040
4141
4242 func getIntegerByKey (key) = valueOrElse(getInteger(this, key), 0)
4343
4444
4545 func checkWhitelist (key) = valueOrElse(getInteger(whitelistDapp, key), 0)
4646
4747
4848 func getBooleanByKey (key) = valueOrElse(getBoolean(this, key), false)
4949
5050
5151 func keyUserStatus (caller) = ("user_status_" + caller)
5252
5353
5454 func keyDate (caller,artId) = ((("art_date_" + artId) + "_") + caller)
5555
5656
5757 func keyName (caller,artId) = ((("art_name_" + artId) + "_") + caller)
5858
5959
6060 func keyDesc (caller,artId) = ((("art_desc_" + artId) + "_") + caller)
6161
6262
6363 func keyDisplayCid (caller,artId) = ((("art_display_cid_" + artId) + "_") + caller)
6464
6565
6666 func keyMaxMint (caller,artId) = ((("art_maxmint_" + artId) + "_") + caller)
6767
6868
6969 func keyMinPrice (caller,artId) = ((("art_minprice_" + artId) + "_") + caller)
7070
7171
7272 func keyDuration (caller,artId) = ((("art_duration_" + artId) + "_") + caller)
7373
7474
7575 func keyAuctionType (caller,artId) = ((("art_auctiontype_" + artId) + "_") + caller)
7676
7777
7878 func keyIssued (caller,artId) = ((("art_issued_" + artId) + "_") + caller)
7979
8080
8181 func keyOnSale (caller,artId) = ((("art_onsale_" + artId) + "_") + caller)
8282
8383
8484 func keyTags (caller,artId) = ((("art_tags_" + artId) + "_") + caller)
8585
8686
8787 func keyType (caller,artId) = ((("art_type_" + artId) + "_") + caller)
8888
8989
9090 func keyPrice (caller,artId) = ((("art_price_" + artId) + "_") + caller)
9191
9292
9393 func keyAssetIdAccepted (caller,artId) = ((("art_assetAccepted_" + artId) + "_") + caller)
9494
9595
9696 func keyHashByTxidAddr (caller,txid) = ((("get_hashbytxidaddr_" + txid) + "_") + caller)
9797
9898
9999 func keyOwnerByHash (sha256Hash) = ("get_owner_by_hash_" + sha256Hash)
100100
101101
102102 func keyTxidByHashOwner (sha256Hash,caller) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((sha256Hash + caller)))))
103103
104104
105105 let currentCertificationPrice = getIntegerByKeyFromOracle(("certification_fee_" + toBase58String(sconexAssetId)))
106106
107107 func validateString (str,max) = if ((size(str) == 0))
108108 then throw("Field cannot be is empty")
109109 else if ((size(str) > max))
110110 then throw((str + " is too long"))
111111 else true
112112
113113
114114 func validateUser (caller) = {
115115 let userStatus = valueOrElse(getString(userDapp, keyUserStatus(caller)), userUnregistered)
116116 if (if ((userStatus == userUnregistered))
117117 then true
118118 else (userStatus == userAllowed))
119119 then "Register this account first with 'Account' tab"
120120 else if ((userStatus == userSuspended))
121121 then "Account suspended"
122122 else if ((userStatus == userRemoved))
123123 then "Account removed"
124124 else ""
125125 }
126126
127127
128128 func validateArtworkData (caller,cidDisplay,name,description,tags) = {
129129 let checkUser = validateUser(caller)
130130 if ((checkUser != ""))
131131 then throw(checkUser)
132132 else if ((size(cidDisplay) == 0))
133133 then throw("Display CID cannot be empty")
134134 else if (!(validateString(name, 100)))
135135 then throw("100 Char. max name")
136136 else if (!(validateString(description, 1000)))
137137 then throw("1000 Char. max description")
138138 else if ((size(split(tags, ",")) > 5))
139139 then throw("5 tags max.")
140140 else ""
141141 }
142142
143143
144144 func isPayment (i) = if ((size(i.payments) == 0))
145145 then throw("No payment attached")
146146 else {
147147 let payment = value(i.payments[0])
148148 let amount = value(payment.amount)
149149 $Tuple2(payment, amount)
150150 }
151151
152152
153153 func validatePayment (i) = {
154154 let t089829018 = isPayment(i)
155155 let payment = t089829018._1
156156 let amount = t089829018._2
157157 let assetId = if (if (isDefined(payment.assetId))
158158 then (payment.assetId == sconexAssetId)
159159 else false)
160160 then payment.assetId
161161 else throw("Only Sconex token accepted as transaction fee")
162162 if ((amount != currentCertificationPrice))
163163 then throw(("Payment amount should be " + toString(currentCertificationPrice)))
164164 else $Tuple2(amount, assetId)
165165 }
166166
167167
168168 func validatePriceAssetId (i,priceAssetId,artworkPrice) = {
169169 let t096119647 = isPayment(i)
170170 let payment = t096119647._1
171171 let amount = t096119647._2
172172 let assetId = if (!(isDefined(payment.assetId)))
173173 then throw("Wrong asset id")
174174 else if (if ((size(priceAssetId) > 0))
175175 then (toBase58String(value(payment.assetId)) == priceAssetId)
176176 else false)
177177 then payment.assetId
178178 else throw("Wrong asset id")
179179 if (if ((assetId == unit))
180180 then (priceAssetId != "")
181181 else false)
182182 then throw("Wrong asset id")
183183 else if ((artworkPrice != amount))
184184 then throw("Payment don't match")
185185 else $Tuple2(amount, assetId)
186186 }
187187
188188
189189 func acceptedAssetIds (assetId) = if ((assetId != toBase58String(sconexAssetId)))
190190 then throw("Only Sconex accepted")
191191 else true
192192
193193
194194 func validateMinSell (assetId,price) = {
195195 let minSellSconex = if (unitTest)
196196 then 1
197197 else (currentCertificationPrice * 2)
198198 if (if (if ((assetId == toBase58String(sconexAssetId)))
199199 then (minSellSconex > price)
200200 else false)
201201 then (price != 0)
202202 else false)
203203 then throw(("Wrong minimum sell price " + toString(minSellSconex)))
204204 else true
205205 }
206206
207207
208208 func getBidAssetId (assetId) = if ((assetId == "WAVES"))
209209 then throw("Only sconex is accepted!")
210210 else fromBase58String(assetId)
211211
212212
213213 func getPriceAssetIdFromBid (bidDataKey) = {
214214 let bidData = getStringByKey((bidDataKey + "_OPEN"))
215215 if ((bidData == ""))
216216 then throw("Bid not found")
217217 else {
218218 let bidDataArr = split(bidData, "_")
219219 let bidAmount = parseIntValue(bidDataArr[1])
220220 let bidAssetId = getBidAssetId(bidDataArr[0])
221221 if ((0 >= bidAmount))
222222 then throw("Wrong amount")
223223 else $Tuple2(bidAmount, bidAssetId)
224224 }
225225 }
226226
227227
228228 func idCallerDate (i) = if (!(dappRunning))
229229 then throw(maintenanceMSG)
230230 else $Tuple3(toBase58String(i.transactionId), toBase58String(i.caller.bytes), lastBlock.timestamp)
231231
232232
233233 func isBidCheck (i,issuer,bidOwner,bidId) = if (if (if ((toBase58String(i.caller.bytes) == issuer))
234234 then (bidOwner != "")
235235 else false)
236236 then (bidId != "")
237237 else false)
238238 then true
239239 else false
240240
241241
242242 func getArtData (i,issuer,artId,isBid) = {
243243 let callerIsIssuer = (toBase58String(i.caller.bytes) == issuer)
244244 let totalNFT = getIntegerByKey("total_nft_issued")
245245 let artworkName = getStringByKey(keyName(issuer, artId))
246246 if ((artworkName == ""))
247247 then throw("Art doesn't exist")
248248 else {
249249 let isOnSale = getBooleanByKey(keyOnSale(issuer, artId))
250250 let amountSold = getIntegerByKey(keyIssued(issuer, artId))
251251 let artworkPrice = if (callerIsIssuer)
252252 then (currentCertificationPrice * 2)
253253 else getIntegerByKey(keyPrice(issuer, artId))
254254 let priceAssetId = if (callerIsIssuer)
255255 then toBase58String(sconexAssetId)
256256 else getStringByKey(keyAssetIdAccepted(issuer, artId))
257257 let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
258258 if (if (if (!(isBid))
259259 then !(callerIsIssuer)
260260 else false)
261261 then if (if ((0 >= artworkPrice))
262262 then true
263263 else !(isOnSale))
264264 then true
265265 else (0 >= maxCanSell)
266266 else false)
267267 then throw("Art not for sale")
268268 else if (if (if (!(isBid))
269269 then callerIsIssuer
270270 else false)
271271 then (0 >= maxCanSell)
272272 else false)
273273 then throw("Max issuable not set")
274274 else $Tuple7(totalNFT, artworkName, amountSold, artworkPrice, priceAssetId, maxCanSell, isOnSale)
275275 }
276276 }
277277
278278
279279 func getBidData (i,caller,issuer,artId,bidOwner,bidId,priceAssetId,artworkPrice,isBid) = {
280280 let checkUser = validateUser(issuer)
281281 if (if (isBid)
282282 then (checkUser != "")
283283 else false)
284284 then throw(checkUser)
285285 else {
286286 let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + bidOwner) + "_") + bidId)
287287 let t01351913648 = if (isBid)
288288 then getPriceAssetIdFromBid(bidDataKey)
289289 else validatePriceAssetId(i, priceAssetId, artworkPrice)
290290 let amount = t01351913648._1
291291 let assetId = t01351913648._2
292292 $Tuple3(bidDataKey, amount, assetId)
293293 }
294294 }
295295
296296
297297 func getCommissionData (issuer,assetId,amount,amountSold,maxCanSell) = {
298298 let isWhitelisted = checkWhitelist(issuer)
299299 let cut = if ((isWhitelisted > height))
300300 then 0
301301 else if ((assetId == sconexAssetId))
302302 then sconexFirstSellCut
303303 else throw("Only Sconex is accepted!")
304304 let amountForSconex = fraction(amount, cut, 1000)
305305 let amountForCreator = (amount - amountForSconex)
306306 if ((amountSold == maxCanSell))
307307 then throw("Art sold out")
308308 else {
309309 let newAmountSold = (amountSold + 1)
310310 $Tuple3(amountForSconex, amountForCreator, newAmountSold)
311311 }
312312 }
313313
314314
315315 func getIssueData (issuer,artId,artworkName,newAmountSold,maxCanSell,totalNFT,caller,bidOwner,bidId,i,isOnSale) = {
316316 let issueMeta = ((((((((("Creator: " + issuer) + ",ArtID: ") + artId) + ",Artwork name: ") + artworkName) + ",Issue: ") + toString(newAmountSold)) + "/") + toString(maxCanSell))
317317 let issueNFT = Issue(("SA_" + toString((totalNFT + 1))), issueMeta, 1, 0, false)
318318 let idNFT = calculateAssetId(issueNFT)
319319 let sellStatus = if (if ((newAmountSold == maxCanSell))
320320 then true
321321 else !(isOnSale))
322322 then false
323323 else true
324324 let receiveNFT = if (if (if ((caller == issuer))
325325 then (bidOwner != "")
326326 else false)
327327 then (bidId != "")
328328 else false)
329329 then addressFromStringValue(bidOwner)
330330 else i.caller
331331 $Tuple4(issueNFT, idNFT, sellStatus, receiveNFT)
332332 }
333333
334334
335335 func getBidKeyVal (assetId,bidDataKey,date) = {
336336 let assetIdBid = if (!(isDefined(assetId)))
337337 then throw("Only sconex is accepted")
338338 else toBase58String(value(assetId))
339339 let bidData = getStringByKey((bidDataKey + "_OPEN"))
340340 let bidDelOld = DeleteEntry((bidDataKey + "_OPEN"))
341341 let bidUpdate = StringEntry((bidDataKey + "_CLOSED"), ((bidData + "_") + toString(date)))
342342 $Tuple3(assetIdBid, bidDelOld, bidUpdate)
343343 }
344344
345345
346346 func buyMint (i,artId,issuer,bidId,bidOwner) = {
347347 let t01551615566 = idCallerDate(i)
348348 let id = t01551615566._1
349349 let caller = t01551615566._2
350350 let date = t01551615566._3
351351 let isBid = isBidCheck(i, issuer, bidOwner, bidId)
352352 let t01564615797 = getArtData(i, issuer, artId, isBid)
353353 let totalNFT = t01564615797._1
354354 let artworkName = t01564615797._2
355355 let amountSold = t01564615797._3
356356 let artworkPrice = t01564615797._4
357357 let priceAssetId = t01564615797._5
358358 let maxCanSell = t01564615797._6
359359 let isOnSale = t01564615797._7
360360 let t01580215948 = getBidData(i, caller, issuer, artId, bidOwner, bidId, priceAssetId, artworkPrice, isBid)
361361 let bidDataKey = t01580215948._1
362362 let amount = t01580215948._2
363363 let assetId = t01580215948._3
364364 let t01595316095 = getCommissionData(issuer, value(assetId), amount, amountSold, maxCanSell)
365365 let amountForSconex = t01595316095._1
366366 let amountForCreator = t01595316095._2
367367 let newAmountSold = t01595316095._3
368368 let t01610016290 = getIssueData(issuer, artId, artworkName, newAmountSold, maxCanSell, totalNFT, caller, bidOwner, bidId, i, isOnSale)
369369 let issueNFT = t01610016290._1
370370 let idNFT = t01610016290._2
371371 let sellStatus = t01610016290._3
372372 let receiveNFT = t01610016290._4
373373 let t01629516394 = getBidKeyVal(assetId, bidDataKey, date)
374374 let assetIdBid = t01629516394._1
375375 let bidDelOld = t01629516394._2
376376 let bidUpdate = t01629516394._3
377377 let soldKey = ((((((("art_sold_" + toString(newAmountSold)) + "_of_") + toString(maxCanSell)) + "_") + artId) + "_") + issuer)
378378 let soldValue = if (!(isBid))
379379 then ((((((((((caller + "_") + toString(date)) + "_") + id) + "_") + toString(artworkPrice)) + "_") + priceAssetId) + "_") + toBase58String(idNFT))
380380 else ((((((((((toString(receiveNFT) + "_") + toString(date)) + "_") + id) + "_") + toString(amount)) + "_") + assetIdBid) + "_") + toBase58String(idNFT))
381381 let soldData = StringEntry(soldKey, soldValue)
382382 let buyRes = [IntegerEntry(keyIssued(issuer, artId), newAmountSold), StringEntry(("nft_" + toBase58String(idNFT)), soldKey), IntegerEntry("total_nft_issued", (totalNFT + 1)), BooleanEntry(keyOnSale(issuer, artId), sellStatus), issueNFT, ScriptTransfer(Address(fromBase58String(issuer)), amountForCreator, assetId), ScriptTransfer(Address(fromBase58String(feeReceiver)), amountForSconex, assetId), ScriptTransfer(receiveNFT, 1, idNFT)]
383383 if (isBid)
384384 then (((buyRes :+ soldData) :+ bidUpdate) :+ bidDelOld)
385385 else soldData :: buyRes
386386 }
387387
388388
389+func setBidNonTraditional (i,artId,issuer) = {
390+ let t02770927747 = idCallerDate(i)
391+ let id = t02770927747._1
392+ let caller = t02770927747._2
393+ let date = t02770927747._3
394+ let t02775227788 = isPayment(i)
395+ let payment = t02775227788._1
396+ let amount = t02775227788._2
397+ let assetId = if (!(isDefined(payment.assetId)))
398+ then throw("Only sconex is accepted!")
399+ else toBase58String(value(payment.assetId))
400+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
401+ if (!(acceptedAssetIds(assetId)))
402+ then throw("asset not accepted")
403+ else if (!(validateMinSell(assetId, amount)))
404+ then throw("Wrong min sell")
405+ else {
406+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
407+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
408+ if ((0 >= maxCanSell))
409+ then throw("No max edition set for this artwork")
410+ else if ((amountSold >= maxCanSell))
411+ then throw("Sold out, you cannot bid")
412+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
413+ }
414+ }
415+
416+
417+func setBidTraditional (i,artId,issuer) = {
418+ let endHeight = getIntegerByKey(keyDuration(issuer, artId))
419+ if ((height > endHeight))
420+ then throw("This auction is finished already!")
421+ else {
422+ let callderData = idCallerDate(i)
423+ let id = callderData._1
424+ let caller = callderData._2
425+ let date = callderData._3
426+ let isPaymentVar = isPayment(i)
427+ let payment = isPaymentVar._1
428+ let amount = isPaymentVar._2
429+ let assetId = if (!(isDefined(payment.assetId)))
430+ then throw("Only sconex is accepted!")
431+ else toBase58String(value(payment.assetId))
432+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
433+ if (!(acceptedAssetIds(assetId)))
434+ then throw("asset not accepted")
435+ else if (!(validateMinSell(assetId, amount)))
436+ then throw("Wrong min sell")
437+ else {
438+ let amountSold = getIntegerByKey(keyIssued(issuer, artId))
439+ let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
440+ if ((0 >= maxCanSell))
441+ then throw("No max edition set for this artwork")
442+ else if ((amountSold >= maxCanSell))
443+ then throw("Sold out, you cannot bid")
444+ else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
445+ }
446+ }
447+ }
448+
449+
450+func cancelBidImpl (i,artId,issuer,bidId) = {
451+ let t02894229094 = idCallerDate(i)
452+ let id = t02894229094._1
453+ let caller = t02894229094._2
454+ let date = t02894229094._3
455+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
456+ let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
457+ let bidData = getStringByKey((bidDataKey + "_OPEN"))
458+ if ((bidData == ""))
459+ then throw("Bid not found")
460+ else {
461+ let bidDataArr = split(bidData, "_")
462+ let assetId = getBidAssetId(bidDataArr[0])
463+ let bidStatus = "CANCELED"
464+[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
465+ }
466+ }
467+
468+
469+func cancelBidImplTraditional (i,artId,issuer,bidId) = {
470+ let endHeight = getIntegerByKey(keyDuration(issuer, artId))
471+ if ((endHeight > height))
472+ then throw("This auction is not finished yet!")
473+ else {
474+ let t02894229094 = idCallerDate(i)
475+ let id = t02894229094._1
476+ let caller = t02894229094._2
477+ let date = t02894229094._3
478+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
479+ let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
480+ let bidData = getStringByKey((bidDataKey + "_OPEN"))
481+ if ((bidData == ""))
482+ then throw("Bid not found")
483+ else {
484+ let bidDataArr = split(bidData, "_")
485+ let assetId = getBidAssetId(bidDataArr[0])
486+ let bidStatus = "CANCELED"
487+[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
488+ }
489+ }
490+ }
491+
492+
389493 @Callable(i)
390494 func addArtwork (sha256Hash,name,description,tags,type,cidDisplay) = {
391495 let t01774017781 = idCallerDate(i)
392496 let artId = t01774017781._1
393497 let caller = t01774017781._2
394498 let date = t01774017781._3
395499 let validateArtwork = validateArtworkData(caller, cidDisplay, name, description, tags)
396500 if ((validateArtwork != ""))
397501 then throw("Something went wrong!")
398502 else {
399503 let t01817018212 = validatePayment(i)
400504 let amount = t01817018212._1
401505 let assetId = t01817018212._2
402506 if (!(isDefined(amount)))
403507 then throw("Something went wrong")
404508 else {
405509 let entryExist = getStringByKey(keyTxidByHashOwner(sha256Hash, caller))
406510 if ((entryExist != ""))
407511 then throw("You already added it")
408512 else {
409513 let hashExist = getStringByKey(keyOwnerByHash(sha256Hash))
410514 if ((hashExist != ""))
411515 then throw("Hash already registered")
412516 else [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(keyType(caller, artId), type), StringEntry(keyTags(caller, artId), tags), IntegerEntry(keyMaxMint(caller, artId), 0), IntegerEntry(keyIssued(caller, artId), 0), BooleanEntry(keyOnSale(caller, artId), false), StringEntry(keyHashByTxidAddr(caller, artId), sha256Hash), ScriptTransfer(Address(fromBase58String(feeReceiver)), amount, assetId)]
413517 }
414518 }
415519 }
416520 }
417521
418522
419523
420524 @Callable(i)
421525 func sellArtwork (artId,price,maxMint,assetId,auctionType,minBid,duration) = {
422526 let t02571425747 = idCallerDate(i)
423527 let id = t02571425747._1
424528 let caller = t02571425747._2
425529 let artworkName = getStringByKey(keyName(caller, artId))
426530 if (!(containsElement([auctionType1, auctionType2], auctionType)))
427531 then throw("We dont know this auction type")
428- else if (containsElement([auctionType2], auctionType))
429- then throw("We didnt implement this auction type yet")
430- else if ((artworkName == ""))
431- then throw("This art doesn't match your account")
432- else {
433- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
434- if (!(acceptedAssetIds(assetId)))
532+ else if ((artworkName == ""))
533+ then throw("This art doesn't match your account")
534+ else {
535+ let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
536+ if (!(acceptedAssetIds(assetId)))
537+ then throw("Something went wrong!")
538+ else if (!(validateMinSell(assetId, price)))
435539 then throw("Something went wrong!")
436- else if (!(validateMinSell(assetId, price)))
437- then throw("Something went wrong!")
438- else {
439- let checkUser = validateUser(caller)
440- if ((checkUser != ""))
441- then throw(checkUser)
442- else {
443- let amountSold = getIntegerByKey(keyIssued(caller, artId))
444- let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
445- if ((maxMint > 10))
446- then throw("10 editions max per artwork")
447- else if (if ((amountSold != 0))
448- then (amountSold == maxCanSell)
540+ else {
541+ let checkUser = validateUser(caller)
542+ if ((checkUser != ""))
543+ then throw(checkUser)
544+ else {
545+ let amountSold = getIntegerByKey(keyIssued(caller, artId))
546+ let maxCanSell = getIntegerByKey(keyMaxMint(caller, artId))
547+ if ((maxMint > 10))
548+ then throw("10 editions max per artwork")
549+ else if (if ((amountSold != 0))
550+ then (amountSold == maxCanSell)
551+ else false)
552+ then throw("Max edition reached.")
553+ else if (if ((amountSold > 0))
554+ then (maxCanSell != maxMint)
449555 else false)
450- then throw("Max edition reached.")
451- else if (if ((amountSold > 0))
556+ then throw("Cannot change maximum issuable anymore")
557+ else if (if ((bidNbr > 0))
452558 then (maxCanSell != maxMint)
453559 else false)
454- then throw("Cannot change maximum issuable anymore")
455- else if (if ((bidNbr > 0))
456- then (maxCanSell != maxMint)
457- else false)
458- then throw("Cannot change maximum issuable with active orders")
459- else {
460- let sellStatus = if (if ((price > 0))
461- then (maxMint > 0)
462- else false)
463- then true
464- else false
465-[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), duration), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
466- }
467- }
468- }
469- }
560+ then throw("Cannot change maximum issuable with active orders")
561+ else {
562+ let sellStatus = if (if ((price > 0))
563+ then (maxMint > 0)
564+ else false)
565+ then true
566+ else false
567+ let endHeight = (duration + height)
568+[BooleanEntry(keyOnSale(caller, artId), sellStatus), IntegerEntry(keyPrice(caller, artId), price), IntegerEntry(keyMaxMint(caller, artId), maxMint), IntegerEntry(keyMinPrice(caller, artId), minBid), IntegerEntry(keyDuration(caller, artId), endHeight), StringEntry(keyAssetIdAccepted(caller, artId), assetId), StringEntry(keyAuctionType(caller, artId), auctionType)]
569+ }
570+ }
571+ }
572+ }
470573 }
471574
472575
473576
474577 @Callable(i)
475578 func buyArtwork (artId,issuer) = buyMint(i, artId, issuer, "", "")
476579
477580
478581
479582 @Callable(i)
480583 func deleteEntry (entry) = {
481584 let caller = toString(addressFromPublicKey(i.callerPublicKey))
482585 if ((caller == owner))
483586 then [DeleteEntry(entry)]
484587 else throw("no")
485588 }
486589
487590
488591
489592 @Callable(i)
490593 func setBid (artId,issuer) = {
491- let t02770927747 = idCallerDate(i)
492- let id = t02770927747._1
493- let caller = t02770927747._2
494- let date = t02770927747._3
495- let t02775227788 = isPayment(i)
496- let payment = t02775227788._1
497- let amount = t02775227788._2
498- let assetId = if (!(isDefined(payment.assetId)))
499- then throw("Only sconex is accepted!")
500- else toBase58String(value(payment.assetId))
501- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
502- if (!(acceptedAssetIds(assetId)))
503- then throw("asset not accepted")
504- else if (!(validateMinSell(assetId, amount)))
505- then throw("Wrong min sell")
506- else {
507- let amountSold = getIntegerByKey(keyIssued(issuer, artId))
508- let maxCanSell = getIntegerByKey(keyMaxMint(issuer, artId))
509- if ((0 >= maxCanSell))
510- then throw("No max edition set for this artwork")
511- else if ((amountSold >= maxCanSell))
512- then throw("Sold out, you cannot bid")
513- else [StringEntry((((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + id) + "_OPEN"), ((((assetId + "_") + toString(amount)) + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr + 1))]
514- }
594+ let auctionType = keyAuctionType(artId, issuer)
595+ if ((auctionType == auctionType1))
596+ then setBidNonTraditional(i, artId, issuer)
597+ else if ((auctionType == auctionType2))
598+ then setBidTraditional(i, artId, issuer)
599+ else throw("Unknown auction type, please contact the admins")
515600 }
516601
517602
518603
519604 @Callable(i)
520605 func acceptBid (artId,issuer,bidId,bidOwner) = {
521606 let caller = toBase58String(i.caller.bytes)
522607 if ((caller != issuer))
523608 then throw("You cannot do this action")
524609 else buyMint(i, artId, issuer, bidId, bidOwner)
525610 }
526611
527612
528613
529614 @Callable(i)
530615 func cancelBid (artId,issuer,bidId) = {
531- let t02894229094 = idCallerDate(i)
532- let id = t02894229094._1
533- let caller = t02894229094._2
534- let date = t02894229094._3
535- let bidNbr = getIntegerByKey(("current_bidamount_" + artId))
536- let bidDataKey = ((((((("bid_" + artId) + "_") + issuer) + "_") + caller) + "_") + bidId)
537- let bidData = getStringByKey((bidDataKey + "_OPEN"))
538- if ((bidData == ""))
539- then throw("Bid not found")
540- else {
541- let bidDataArr = split(bidData, "_")
542- let assetId = getBidAssetId(bidDataArr[0])
543- let bidStatus = "CANCELED"
544-[DeleteEntry((bidDataKey + "_OPEN")), StringEntry(((bidDataKey + "_") + bidStatus), ((bidData + "_") + toString(date))), IntegerEntry(("current_bidamount_" + artId), (bidNbr - 1)), ScriptTransfer(Address(fromBase58String(caller)), parseIntValue(bidDataArr[1]), assetId)]
545- }
616+ let auctionType = keyAuctionType(artId, issuer)
617+ if ((auctionType == auctionType1))
618+ then cancelBidImpl(i, artId, issuer, bidId)
619+ else cancelBidImplTraditional(i, artId, issuer, bidId)
546620 }
547621
548622

github/deemru/w8io/026f985 
118.20 ms