tx · 6sDjuS2KxGc5vN1a1cLRP33wMk7stgq3sAvBtgTT2kef

3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2:  -0.01500000 Waves

2019.10.12 12:11 [716475] smart account 3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2 > SELF 0.00000000 Waves

{ "type": 13, "id": "6sDjuS2KxGc5vN1a1cLRP33wMk7stgq3sAvBtgTT2kef", "fee": 1500000, "feeAssetId": null, "timestamp": 1570871543498, "version": 1, "sender": "3N2EM5HFgf6UMBnvcJX3Cegmozwdv1iDeq2", "senderPublicKey": "8y2Uc9uYf5gRD6Dzm1aC73zYe3LZvtVDUVAnAhNdN2mg", "proofs": [ "E1Fwox2JYsbnBDMZkRZym9eAAaNhy7ZAKWUGqWvzKYwfYCjTqFWqyw5e1PJeUzYBfMnoLErDFnMzfCuWKrT3RjM" ], "script": "base64:AAIDAAAAAAAAAD8IARIDCgEIEgMKAQgSBQoDAQEIEgQKAggBEgQKAggIEgQKAggBEgMKAQgSAwoBCBIECgIICBIDCgEIEgMKAQgAAAAlAAAAAANkYXkAAAAAAAAABaAAAAAABVdBVkVTBQAAAAR1bml0AAAAAAR3QlRDAQAAACBs+mr/xe2qjAt/tSqT0qIML4KC23R6BIxT+/0TH3Og/wAAAAAEd0VVUgEAAAAg7BZhBF97kSFBBjs38+fX1Pjz08YOqoCX85C/0PoVupkAAAAABHdVU0QBAAAAIN0cvQHwz3UFMHgHsqi2OJjRRd1cH7ozWuNAb/pmWXD9AAAAAAlzdGF0ZU9wZW4CAAAABk9wZW5lZAAAAAAOc3RhdGVTdWdnZXN0ZWQCAAAACVN1Z2dlc3RlZAAAAAALc3RhdGVDYW5jZWwCAAAACENhbmNlbGVkAAAAAA9zdGF0ZUluUHJvZ3Jlc3MCAAAACkluUHJvZ3Jlc3MAAAAAEXN0YXRlV2FpdDRDb25maXJtAgAAABNXYWl0Rm9yQ29uZmlybWF0aW9uAAAAAA1zdGF0ZUNvbXBsZXRlAgAAAAlDb21wbGV0ZWQAAAAADHN0YXRlRGlzcHV0ZQIAAAAHRGlzcHV0ZQAAAAAUc3RhdGVEaXNwdXRlUmVzb2x2ZWQCAAAAD0Rpc3B1dGVSZXNvbHZlZAAAAAAGY2xpZW50AgAAAANDTVIAAAAACmZyZWVsYW5jZXICAAAAAkZMAAAAAAthbWJhc3NhZG9yMQEAAAAg27TPUj36Wh4UzoIbdIokDoBJ0cVnPSfudcacjaZH5x4AAAAAC2FtYmFzc2Fkb3IyAQAAACBQOV8ymRPt2eY6h12J/8iJk4eyEUDx8WjjRS+op7oMFwAAAAALYW1iYXNzYWRvcjMBAAAAIBmXMrJ2k2vKhLZB/kgqcwMBMuhLaCefR2Wwj/4iLIVyAAAAAAthbWJhc3NhZG9yNAEAAAAgi1NZ9R0YZs+seHSmrgvSRQ6ZmuRIAZ2DN019Y0z3cnEAAAAAC2FtYmFzc2Fkb3I1AQAAACAAo6Owdzt27VP+hB9eWv3blLpSzkiqiD2bSXnq6z/BMQEAAAAQQXVjdGlvbklkRGF0YUtleQAAAAEAAAAJYXVjdGlvbklkCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0F1Y3Rpb25EYXRhAQAAAAZnZXRJbnQAAAABAAAAA2tleQQAAAAQdmFsdWVKb2JzT25Hb2luZwkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkEAAAAByRtYXRjaDAFAAAAEHZhbHVlSm9ic09uR29pbmcDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAEAAAARQXNzZXROYW1lVG9CYXNlNTgAAAABAAAAEGF1Y3Rpb25Bc3NldE5hbWUDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAABVdBVkVTBQAAAAVXQVZFUwMJAAAAAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQIAAAADQlRDBQAAAAR3QlRDAwkAAAAAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAANFVVIFAAAABHdFVVIDCQAAAAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAAA1VTRAUAAAAEd1VTRAkAAAIAAAABAgAAABJJbmNvcnJlY3QgQXNzZXQgSWQBAAAACXRpbWVDaGVjawAAAAMAAAALY3VycmVudFRpbWUAAAAJc3RhcnRUaW1lAAAADmV4cGlyYXRpb25UaW1lCQAAZgAAAAIJAABlAAAAAgUAAAALY3VycmVudFRpbWUFAAAACXN0YXJ0VGltZQUAAAAOZXhwaXJhdGlvblRpbWUBAAAADmJpZEFtb3VudENoZWNrAAAAAgAAAAZhbW91bnQAAAAMYXVjdGlvblByaWNlAwkAAGYAAAACBQAAAAZhbW91bnQFAAAADGF1Y3Rpb25QcmljZQkAAAIAAAABAgAAADNCaWQgYW1vdW50IG11c3QgYmUgbG93ZXIgb3IgZXF1YWwgdGhhbiBhdWN0aW9uUHJpY2UFAAAABmFtb3VudAEAAAAWaW5jcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIAAAAMcG10QXNzZXROYW1lAAAADGF1Y3Rpb25QcmljZQQAAAAPa2V5RnJlZXplZEZ1bmRzCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAMcG10QXNzZXROYW1lAgAAAAhfRnJlZXplZAQAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBAAAAAckbWF0Y2gwBQAAAA9rZXlGcmVlemVkRnVuZHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAkAAGQAAAACBQAAABVjdXJyZW50RnJlZXplZEJhbGFuY2UFAAAADGF1Y3Rpb25QcmljZQEAAAAWZGVjcmVhc2VGcmVlemVkQmFsYW5jZQAAAAIAAAAMcG10QXNzZXROYW1lAAAADGF1Y3Rpb25QcmljZQQAAAAPa2V5RnJlZXplZEZ1bmRzCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAMcG10QXNzZXROYW1lAgAAAAhfRnJlZXplZAQAAAAVY3VycmVudEZyZWV6ZWRCYWxhbmNlBAAAAAckbWF0Y2gwBQAAAA9rZXlGcmVlemVkRnVuZHMDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAQAAAABYQkAAGUAAAACBQAAABVjdXJyZW50RnJlZXplZEJhbGFuY2UFAAAADGF1Y3Rpb25QcmljZQMJAABnAAAAAgUAAAABYQAAAAAAAAAAAAUAAAABYQkAAAIAAAABAgAAACZGcmVlemVkIGFtb3VudCBjb3VsZG4ndCBiZSBsZXNzIHRoYW4gMAEAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAAAAAEAAAAJY2FsbGVyUHViBAAAABZmcmVlbGFuY2VySXNSZWdpc3RlcmVkCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJY2FsbGVyUHViAgAAAAtfRnJlZWxhbmNlcgQAAAAHJG1hdGNoMAUAAAAWZnJlZWxhbmNlcklzUmVnaXN0ZXJlZAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAljYWxsZXJQdWIJAAACAAAAAQIAAAAjT25seSByZWdpc3RlcmVkIHVzZXJzIGNhbiBtYWtlIGJldHMBAAAAF2NyZWF0ZUF1Y3Rpb25QcmljZUNoZWNrAAAAAQAAAAlwbXRBbW91bnQDCQAAZgAAAAIFAAAACXBtdEFtb3VudAAAAAAAAAAAAAUAAAAJcG10QW1vdW50CQAAAgAAAAECAAAAHEFtb3VudCBtdXN0IGJlIGhpZ2hlciB0aGVuIDABAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEAAAAJYXVjdGlvbklkBAAAAAp2YWx1ZVN0YXRlCQAEHQAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUEAAAAByRtYXRjaDAFAAAACnZhbHVlU3RhdGUDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABtBdWN0aW9uIFN0YXRlIHdhcyBub3QgZm91bmQBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABAAAACWF1Y3Rpb25JZAQAAAALdmFsdWVDbGllbnQJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADl9BdWN0aW9uQ2xpZW50BAAAAAljbGllbnRQdWIEAAAAByRtYXRjaDAFAAAAC3ZhbHVlQ2xpZW50AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAcQXVjdGlvbiBDbGllbnQgd2FzIG5vdCBmb3VuZAkAAlkAAAABBQAAAAljbGllbnRQdWIBAAAAE2dldEF1Y3Rpb25TdGFydFRpbWUAAAABAAAACWF1Y3Rpb25JZAQAAAARdmFsdWVBdWN0aW9uU3RhcnQJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9BdWN0aW9uU3RhcnQEAAAAByRtYXRjaDAFAAAAEXZhbHVlQXVjdGlvblN0YXJ0AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAgQXVjdGlvbiBTdGFydCB0aW1lIHdhcyBub3QgZm91bmQBAAAAFmdldEF1Y3Rpb25EdXJhdGlvblRpbWUAAAABAAAACWF1Y3Rpb25JZAQAAAAUdmFsdWVhdWN0aW9uRHVyYXRpb24JAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9BdWN0aW9uRHVyYXRpb24EAAAAByRtYXRjaDAFAAAAFHZhbHVlYXVjdGlvbkR1cmF0aW9uAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAjQXVjdGlvbiBkdXJhdGlvbiB0aW1lIHdhcyBub3QgZm91bmQBAAAAHGdldEF1Y3Rpb25Kb2JQZXJmb3JtYW5jZVRpbWUAAAABAAAACWF1Y3Rpb25JZAQAAAAXdmFsdWVCbG9ja3NGb3JFeGVjdXRpb24JAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAD19Kb2JQZXJmb3JtYW5jZQQAAAAHJG1hdGNoMAUAAAAXdmFsdWVCbG9ja3NGb3JFeGVjdXRpb24DCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACpBdWN0aW9uIGpvYiBwZXJmb3JtYW5jZSB0aW1lIHdhcyBub3QgZm91bmQBAAAAE2dldEF1Y3Rpb25Bc3NldE5hbWUAAAABAAAACWF1Y3Rpb25JZAQAAAAOdmFsdWVBc3NldE5hbWUJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAACl9Bc3NldE5hbWUEAAAAByRtYXRjaDAFAAAADnZhbHVlQXNzZXROYW1lAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAgQXVjdGlvbiBhc3NldCBuYW1lIHdhcyBub3QgZm91bmQBAAAAD2dldEF1Y3Rpb25QcmljZQAAAAEAAAAJYXVjdGlvbklkBAAAAAp2YWx1ZVByaWNlCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UEAAAAByRtYXRjaDAFAAAACnZhbHVlUHJpY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAABtBdWN0aW9uIHBy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bnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfSW5mbwUAAAALYXVjdGlvbkluZm8JAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA5fQXVjdGlvbkNsaWVudAUAAAANYXVjdGlvbkNsaWVudAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9BdWN0aW9uU3RhcnQFAAAADGF1Y3Rpb25TdGFydAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9BdWN0aW9uRHVyYXRpb24FAAAAFWF1Y3Rpb25EdXJhdGlvbkJsb2NrcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAD19Kb2JQZXJmb3JtYW5jZQUAAAASYmxvY2tzRm9yRXhlY3V0aW9uCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAKX0Fzc2V0TmFtZQUAAAAMcG10QXNzZXROYW1lCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1ByaWNlBQAAAAxhdWN0aW9uUHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAMcG10QXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNDcmVhdGVkCQAAZAAAAAIFAAAAC2pvYnNDcmVhdGVkAAAAAAAAAAABBQAAAANuaWwAAAABaQEAAAAHbWFrZUJpZAAAAAIAAAAJYXVjdGlvbklkAAAABmFtb3VudAQAAAAJY2FsbGVyUHViCQACWAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAHYmV0VGltZQUAAAAGaGVpZ2h0BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uU3RhcnQJAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAAcZ2V0QXVjdGlvbkpvYlBlcmZvcm1hbmNlVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0TmFtZQkBAAAAE2dldEF1Y3Rpb25Bc3NldE5hbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25QcmljZQkBAAAAD2dldEF1Y3Rpb25QcmljZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0SWQ1OAkBAAAAEUFzc2V0TmFtZVRvQmFzZTU4AAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQQAAAANbmV3RnJlZWxhbmNlcgkBAAAAFmZyZWVsYW5jZXJJc1JlZ2lzdGVyZWQAAAABBQAAAAljYWxsZXJQdWIEAAAADmRBcHBDb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABFuZXdGcmVlemVkQmFsYW5jZQkBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAAAxhdWN0aW9uUHJpY2UEAAAACWJpZEFtb3VudAkBAAAADmJpZEFtb3VudENoZWNrAAAAAgUAAAAGYW1vdW50BQAAAAxhdWN0aW9uUHJpY2UEAAAAEWF1Y3Rpb25UaW1laXNPdmVyCQEAAAAJdGltZUNoZWNrAAAAAwUAAAAHYmV0VGltZQUAAAAMYXVjdGlvblN0YXJ0BQAAAA9hdWN0aW9uRHVyYXRpb24DBQAAABFhdWN0aW9uVGltZWlzT3ZlcgMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAAtzdGF0ZUNhbmNlbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1hdWN0aW9uQ2xpZW50CQAAZQAAAAIFAAAADGF1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAQAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgQAAAARdmFsdWVMb3dlc3RCaWRkZXIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9Mb3dlc3RCaWRkZXJQdWIEAAAAByRtYXRjaDAFAAAAEXZhbHVlTG93ZXN0QmlkZGVyAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAjQXVjdGlvbiBsb3dlc3QgYmlkZGVyIHdhcyBub3QgZm91bmQEAAAAD25ld0F1Y3Rpb25QcmljZQQAAAAUdmFsdWVOZXdBdWN0aW9uUHJpY2UJAAQaAAAAAgUAAAAEdGhpcwkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIEAAAAByRtYXRjaDAFAAAAFHZhbHVlTmV3QXVjdGlvblByaWNlAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAgQXVjdGlvbiBsb3dlc3QgYmlkIHdhcyBub3QgZm91bmQEAAAAEGFtb3VudERpZmZlcmVuY2UJAABlAAAAAgkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAAD25ld0F1Y3Rpb25QcmljZQUAAAAOZEFwcENvbW1pc3Npb24JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAA9zdGF0ZUluUHJvZ3Jlc3MJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAABBfSGlyZWRGcmVlbGFuY2VyBQAAABNhdWN0aW9uTG93ZXN0QmlkZGVyCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1ByaWNlBQAAAA9uZXdBdWN0aW9uUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1hdWN0aW9uQ2xpZW50BQAAABBhbW91bnREaWZmZXJlbmNlBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAAACAAAAAQIAAAAXSW5jb3JyZWN0IGF1Y3Rpb24gc3RhdGUDCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAJc3RhdGVPcGVuCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANbmV3RnJlZWxhbmNlcgUAAAAJYmlkQW1vdW50CQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9Mb3dlc3RCaWRkZXJQdWIFAAAACWNhbGxlclB1YgUAAAADbmlsAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAADnN0YXRlU3VnZ2VzdGVkBAAAABZjdXJyZW50TG93ZXN0QmlkZGVyUHViBAAAAAxsb3dlc3RCaWRkZXIJAAQdAAAAAgUAAAAEdGhpcwkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9Mb3dlc3RCaWRkZXJQdWIEAAAAByRtYXRjaDAFAAAADGxvd2VzdEJpZGRlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhCQAAAgAAAAECAAAAI0F1Y3Rpb24gbG93ZXN0IGJpZGRlciB3YXMgbm90IGZvdW5kBAAAABJuZXdMb3dlc3RCaWRkZXJQdWIEAAAAFXZhbHVlQ3VycmVudExvd2VzdEJpZAkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgQAAAAQY3VycmVudExvd2VzdEJpZAQAAAAHJG1hdGNoMAUAAAAVdmFsdWVDdXJyZW50TG93ZXN0QmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAgQXVjdGlvbiBsb3dlc3QgYmlkIHdhcyBub3QgZm91bmQDCQAAZgAAAAIFAAAAEGN1cnJlbnRMb3dlc3RCaWQFAAAACWJpZEFtb3VudAUAAAANbmV3RnJlZWxhbmNlcgUAAAAWY3VycmVudExvd2VzdEJpZGRlclB1YgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9Mb3dlc3RCaWRkZXJQdWIFAAAAEm5ld0xvd2VzdEJpZGRlclB1YgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAFX0JpZF8FAAAADW5ld0ZyZWVsYW5jZXIFAAAACWJpZEFtb3VudAUAAAADbmlsCQAAAgAAAAEJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABxJbmNvcnJlY3Qgam9iSWQgc3RhdGUuIE5vdzogBQAAAAxhdWN0aW9uU3RhdGUCAAAACywgbXVzdCBiZTogBQAAAAlzdGF0ZU9wZW4CAAAABCBvciAFAAAADnN0YXRlU3VnZ2VzdGVkAAAAAWkBAAAAEGNob29zZUZyZWVsYW5jZXIAAAACAAAACWF1Y3Rpb25JZAAAAA1mcmVlbGFuY2VyUHViBAAAAAljYWxsZXJQdWIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAdiZXRUaW1lBQAAAAZoZWlnaHQEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25TdGFydAkBAAAAE2dldEF1Y3Rpb25TdGFydFRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAD2F1Y3Rpb25EdXJhdGlvbgkBAAAAFmdldEF1Y3Rpb25EdXJhdGlvblRpbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAAC2pvYnNPbkdvaW5nCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwQAAAAZZnJlZWxhbmNlclBlbmRpbmdFYXJuaW5ncwkBAAAABmdldEludAAAAAEJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAQX1BlbmRpbmdFYXJuaW5ncwQAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIFAAAADWZyZWVsYW5jZXJQdWICAAAADl9Ub3RhbEVhcm5pbmdzBAAAABNmcmVlbGFuY2VyQmlkQW1vdW50BAAAABBrZXlGcmVlbGFuY2VyQmlkCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANZnJlZWxhbmNlclB1YgQAAAARdmFsdWVGcmVlbGFjZXJCaWQJAAQaAAAAAgUAAAAEdGhpcwUAAAAQa2V5RnJlZWxhbmNlckJpZAQAAAAHJG1hdGNoMAUAAAARdmFsdWVGcmVlbGFjZXJCaWQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAAB5GcmVlbGFuY2VyJ3MgYmV0IHdhcyBub3QgZm91bmQEAAAAEWF1Y3Rpb25UaW1laXNPdmVyCQEAAAAJdGltZUNoZWNrAAAAAwUAAAAHYmV0VGltZQUAAAAMYXVjdGlvblN0YXJ0BQAAAA9hdWN0aW9uRHVyYXRpb24DCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAANYXVjdGlvbkNsaWVudAMFAAAAEWF1Y3Rpb25UaW1laXNPdmVyAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAMYXVjdGlvblByaWNlBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAC3N0YXRlQ2FuY2VsCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAADWF1Y3Rpb25DbGllbnQJAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAA5kQXBwQ29tbWlzc2lvbgUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAADnN0YXRlU3VnZ2VzdGVkBAAAABNhdWN0aW9uTG93ZXN0QmlkZGVyBAAAABF2YWx1ZUxvd2VzdEJpZGRlcgkABB0AAAACBQAAAAR0aGlzCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0xvd2VzdEJpZGRlclB1YgQAAAAHJG1hdGNoMAUAAAARdmFsdWVMb3dlc3RCaWRkZXIDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACNBdWN0aW9uIGxvd2VzdCBiaWRkZXIgd2FzIG5vdCBmb3VuZAQAAAAPbmV3QXVjdGlvblByaWNlBAAAABR2YWx1ZU5ld0F1Y3Rpb25QcmljZQkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAATYXVjdGlvbkxvd2VzdEJpZGRlcgQAAAAHJG1hdGNoMAUAAAAUdmFsdWVOZXdBdWN0aW9uUHJpY2UDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQkAAAIAAAABAgAAACBBdWN0aW9uIGxvd2VzdCBiaWQgd2FzIG5vdCBmb3VuZAQAAAAQYW1vdW50RGlmZmVyZW5jZQkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAAD25ld0F1Y3Rpb25QcmljZQQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUAAAAQYW1vdW50RGlmZmVyZW5jZQkBAAAADFNjcmlwdFJlc3VsdAAAAAIJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAAEF9IaXJlZEZyZWVsYW5jZXIFAAAAE2F1Y3Rpb25Mb3dlc3RCaWRkZXIJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfUHJpY2UFAAAAD25ld0F1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAAxfSm9ic09uR29pbmcJAABkAAAAAgUAAAALam9ic09uR29pbmcAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAQX1BlbmRpbmdFYXJuaW5ncwkAAGQAAAACBQAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzBQAAAA9uZXdBdWN0aW9uUHJpY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAANZnJlZWxhbmNlclB1YgIAAAAOX1RvdGFsRWFybmluZ3MJAABkAAAAAgUAAAAXZnJlZWxhbmNlclRvdGFsRWFybmluZ3MFAAAAD25ld0F1Y3Rpb25QcmljZQUAAAADbmlsCQEAAAALVHJhbnNmZXJTZXQAAAABCQAETAAAAAIJAQAAAA5TY3JpcHRUcmFuc2ZlcgAAAAMJAQAAABRhZGRyZXNzRnJvbVB1YmxpY0tleQAAAAEFAAAADWF1Y3Rpb25DbGllbnQFAAAAEGFtb3VudERpZmZlcmVuY2UFAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkAAAIAAAABAgAAABdJbmNvcnJlY3QgYXVjdGlvbiBzdGF0ZQQAAAAQc2V0TmV3RnJlZWxhbmNlcgQAAAANbmV3RnJlZWxhbmNlcgkABBoAAAACBQAAAAR0aGlzCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAVfQmlkXwUAAAANZnJlZWxhbmNlclB1YgQAAAAHJG1hdGNoMAUAAAANbmV3RnJlZWxhbmNlcgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFhBQAAAAckbWF0Y2gwBQAAAA1mcmVlbGFuY2VyUHViCQAAAgAAAAECAAAAHkVycm9yOiBJbmNvcnJlY3QgZnJlZWxhbmNlclB1YgQAAAAPbmV3QXVjdGlvblByaWNlBAAAAA1mcmVlbGFuY2VyQmlkCQAEGgAAAAIFAAAABHRoaXMJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABV9CaWRfBQAAAA1mcmVlbGFuY2VyUHViBAAAAAckbWF0Y2gwBQAAAA1mcmVlbGFuY2VyQmlkAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAANJbnQEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEJAAACAAAAAQIAAAAjQXVjdGlvbiBsb3dlc3QgYmlkZGVyIHdhcyBub3QgZm91bmQEAAAAEGFtb3VudERpZmZlcmVuY2UJAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAABNmcmVlbGFuY2VyQmlkQW1vdW50BAAAABFuZXdGcmVlemVkQmFsYW5jZQkBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAABBhbW91bnREaWZmZXJlbmNlCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAQX0hpcmVkRnJlZWxhbmNlcgUAAAAQc2V0TmV3RnJlZWxhbmNlcgkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9QcmljZQUAAAAPbmV3QXVjdGlvblByaWNlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAAEGF1Y3Rpb25Bc3NldE5hbWUCAAAACF9GcmVlemVkBQAAABFuZXdGcmVlemVkQmFsYW5jZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADF9Kb2JzT25Hb2luZwkAAGQAAAACBQAAAAtqb2JzT25Hb2luZwAAAAAAAAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAABBfUGVuZGluZ0Vhcm5pbmdzCQAAZAAAAAIFAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MFAAAAD25ld0F1Y3Rpb25QcmljZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAA1mcmVlbGFuY2VyUHViAgAAAA5fVG90YWxFYXJuaW5ncwkAAGQAAAACBQAAABdmcmVlbGFuY2VyVG90YWxFYXJuaW5ncwUAAAAPbmV3QXVjdGlvblByaWNlBQAAAANuaWwJAQAAAAtUcmFuc2ZlclNldAAAAAEJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQUAAAANYXVjdGlvbkNsaWVudAkAAGQAAAACBQAAABBhbW91bnREaWZmZXJlbmNlAAAAAAAAAAABBQAAABBhdWN0aW9uQXNzZXRJZDU4BQAAAANuaWwJAAACAAAAAQIAAAAtT25seSBhdWN0aW9uIGN1c3RvbWVyIGNhbiBjaG9vc2UgYSBmcmVlbGFuY2VyAAAAAWkBAAAAFWluY3JlYXNlRXhlY3V0aW9uVGltZQAAAAIAAAAJYXVjdGlvbklkAAAADWV4ZWN1dGlvbkRheXMEAAAABmNhbGxlcgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAQAAABxnZXRBdWN0aW9uSm9iUGVyZm9ybWFuY2VUaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAABduZXdBdWN0aW9uRXhlY3V0aW9uVGltZQQAAAAcbmV3QXVjdGlvbkJsb2Nrc0ZvckV4ZWN1dGlvbgkAAGgAAAACBQAAAA1leGVjdXRpb25EYXlzBQAAAANkYXkDCQAAZgAAAAIFAAAAHG5ld0F1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24FAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24FAAAAHG5ld0F1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24JAAACAAAAAQIAAAA4TmV3IGV4ZWN1dGlvbiB0aW1lIG11c3QgbW9yZSB0aGFuIGN1cnJlbnQgZXhlY3V0aW9uIHRpbWUDCQAAAAAAAAIFAAAABmNhbGxlcgUAAAANYXVjdGlvbkNsaWVudAMDAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAACXN0YXRlT3BlbgYJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA5zdGF0ZVN1Z2dlc3RlZAYJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAA9zdGF0ZUluUHJvZ3Jlc3MJAQAAAAhXcml0ZVNldAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAA9fSm9iUGVyZm9ybWFuY2UFAAAAF25ld0F1Y3Rpb25FeGVjdXRpb25UaW1lBQAAAANuaWwJAAACAAAAAQIAAAAPSW5jb3JyZWN0IHN0YXRlCQAAAgAAAAECAAAAJ09ubHkgQ2xpZW50IGNhbiBpbmNyZWFzZSBleGVjdXRpb24gdGltZQAAAAFpAQAAAA1jYW5jZWxBdWN0aW9uAAAAAQAAAAlhdWN0aW9uSWQEAAAACWNhbGxlclB1YgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAADmRBcHBDb21taXNzaW9uCQAAaQAAAAIJAABoAAAAAgUAAAAMYXVjdGlvblByaWNlAAAAAAAAAAADAAAAAAAAAABkBAAAABFhbW91bnRXaXRob3V0Q29tbQkAAGUAAAACBQAAAAxhdWN0aW9uUHJpY2UFAAAADmRBcHBDb21taXNzaW9uBAAAABFuZXdGcmVlemVkQmFsYW5jZQkBAAAAFmRlY3JlYXNlRnJlZXplZEJhbGFuY2UAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lBQAAAAxhdWN0aW9uUHJpY2UDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAANYXVjdGlvbkNsaWVudAMJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAAAlzdGF0ZU9wZW4JAQAAAAxTY3JpcHRSZXN1bHQAAAACCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAAAtzdGF0ZUNhbmNlbAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1hdWN0aW9uQ2xpZW50BQAAABFhbW91bnRXaXRob3V0Q29tbQUAAAAQYXVjdGlvbkFzc2V0SWQ1OAUAAAADbmlsCQAAAgAAAAECAAAALkF1Y3Rpb24gY2FuIGJlIGNhbmNlbGVkIG9ubHkgYnkgYXVjdGlvbiBvd25lci4JAAACAAAAAQIAAAAeT25seSBDbGllbnQgY2FuIGNhbmNlbCBhdWN0aW9uAAAAAWkBAAAAC29wZW5EaXNwdXRlAAAAAQAAAAlhdWN0aW9uSWQEAAAABmNhbGxlcgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAXZ2V0QXVjdGlvbkZyZWVsYW5jZXJQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAOX0pvYnNJbkRpc3B1dGUDAwkAAAAAAAACBQAAAAxhdWN0aW9uU3RhdGUFAAAAD3N0YXRlSW5Qcm9ncmVzcwYJAAAAAAAAAgUAAAAMYXVjdGlvblN0YXRlBQAAABFzdGF0ZVdhaXQ0Q29uZmlybQMDCQAAAAAAAAIFAAAABmNhbGxlcgUAAAANYXVjdGlvbkNsaWVudAYJAAAAAAAAAgUAAAAGY2FsbGVyBQAAABFhdWN0aW9uRnJlZWxhbmNlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAMc3RhdGVEaXNwdXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0Rpc3B1dGVWb3RlcwAAAAAAAAAAAAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADV9Kb2JJbkRpc3B1dGUJAABkAAAAAgUAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQAAAAAAAAAAAQUAAAADbmlsCQAAAgAAAAECAAAAK09ubHkgQ2xpZW50IGFuZCBGcmVlbGFuY2VyIGNhbiBvcGVuIGRpc3B1dGUJAAACAAAAAQIAAAArSW5jb3JyZWN0IGF1Y3Rpb24gc3RhdGUgZm9yIGRpc3B1dGUgb3BlbmluZwAAAAFpAQAAAAt2b3RlRGlzcHV0ZQAAAAIAAAAJYXVjdGlvbklkAAAABHZvdGUEAAAACWNhbGxlclB1YgkBAAAAB2V4dHJhY3QAAAABCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkEAAAADGF1Y3Rpb25TdGF0ZQkBAAAAD2dldEF1Y3Rpb25TdGF0ZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAANYXVjdGlvbkNsaWVudAkBAAAAE2dldEF1Y3Rpb25DbGllbnRQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAAEGF1Y3Rpb25Bc3NldE5hbWUJAQAAABNnZXRBdWN0aW9uQXNzZXROYW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uUHJpY2UJAQAAAA9nZXRBdWN0aW9uUHJpY2UAAAABBQAAAAlhdWN0aW9uSWQEAAAAEWF1Y3Rpb25GcmVlbGFuY2VyCQEAAAAXZ2V0QXVjdGlvbkZyZWVsYW5jZXJQdWIAAAABBQAAAAlhdWN0aW9uSWQEAAAACmNvbW1pc3Npb24JAABpAAAAAgkAAGgAAAACBQAAAAxhdWN0aW9uUHJpY2UAAAAAAAAAAAMAAAAAAAAAAGQEAAAAEGF1Y3Rpb25Bc3NldElkNTgJAQAAABFBc3NldE5hbWVUb0Jhc2U1OAAAAAEFAAAAEGF1Y3Rpb25Bc3NldE5hbWUEAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAOX0pvYnNJbkRpc3B1dGUEAAAAGWZyZWVsYW5jZXJQZW5kaW5nRWFybmluZ3MJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIJAAJYAAAAAQUAAAARYXVjdGlvbkZyZWVsYW5jZXICAAAAEF9QZW5kaW5nRWFybmluZ3MEAAAAEmNhbGxlcklzQW1iYXNzYWRvcgMDAwMDCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjEGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjIGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjMGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjQGCQAAAAAAAAIFAAAACWNhbGxlclB1YgUAAAALYW1iYXNzYWRvcjUJAAJYAAAAAQUAAAAJY2FsbGVyUHViCQAAAgAAAAECAAAALU9ubHkgZGVmaW5lZCBhbWJhc3NhZG9ycyBjYW4gdm90ZSBpbiBkaXNwdXRlcwQAAAAHbmV3Vm90ZQMDCQAAAAAAAAIFAAAABHZvdGUFAAAABmNsaWVudAYJAAAAAAAAAgUAAAAEdm90ZQUAAAAKZnJlZWxhbmNlcgUAAAAEdm90ZQkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAABxWb3RlIGlzIGluY29ycmVjdC4gTXVzdCBiZTogBQAAAAZjbGllbnQCAAAABCBvciAFAAAACmZyZWVsYW5jZXIEAAAACG5ld1ZvdGVyBAAAAAhrZXlWb3RlcgkAASwAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAMX0RpcHV0ZVZvdGVfBQAAABJjYWxsZXJJc0FtYmFzc2Fkb3IEAAAACnZhbHVlVm90ZXIJAAQdAAAAAgUAAAAEdGhpcwUAAAAIa2V5Vm90ZXIEAAAAByRtYXRjaDAFAAAA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aWNlCQEAAAAMU2NyaXB0UmVzdWx0AAAAAgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9EaXNwdXRlVm90ZXMJAABkAAAAAgUAAAALdm90ZXNOdW1iZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAZfU3RhdGUFAAAAFHN0YXRlRGlzcHV0ZVJlc29sdmVkCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAJYXVjdGlvbklkAgAAAAxfRGlwdXRlVm90ZV8FAAAAEmNhbGxlcklzQW1iYXNzYWRvcgUAAAAHbmV3Vm90ZQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAABBhdWN0aW9uQXNzZXROYW1lAgAAAAhfRnJlZXplZAUAAAARbmV3RnJlZXplZEJhbGFuY2UJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA1fSm9iSW5EaXNwdXRlCQAAZQAAAAIFAAAAE2NsaWVudEpvYnNJbkRpc3B1dGUAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAAlgAAAABBQAAABFhdWN0aW9uRnJlZWxhbmNlcgIAAAAQX1BlbmRpbmdFYXJuaW5ncwkAAGUAAAACBQAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzBQAAAAxhdWN0aW9uUHJpY2UFAAAAA25pbAkBAAAAC1RyYW5zZmVyU2V0AAAAAQkABEwAAAACCQEAAAAOU2NyaXB0VHJhbnNmZXIAAAADCQEAAAAUYWRkcmVzc0Zyb21QdWJsaWNLZXkAAAABBQAAAA1kaXNwdXRlV2lubmVyBQAAABJwYXltZW50V2l0aG91dENvbW0FAAAAEGF1Y3Rpb25Bc3NldElkNTgFAAAAA25pbAkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADV9EaXNwdXRlVm90ZXMJAABkAAAAAgUAAAALdm90ZXNOdW1iZXIAAAAAAAAAAAEJAARMAAAAAgkBAAAACURhdGFFbnRyeQAAAAIJAAEsAAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAADF9EaXB1dGVWb3RlXwUAAAASY2FsbGVySXNBbWJhc3NhZG9yBQAAAAduZXdWb3RlBQAAAANuaWwJAAACAAAAAQkAASwAAAACAgAAABpJbmNvcnJlY3Qgc3RhdGUuIE11c3QgYmU6IAUAAAAMc3RhdGVEaXNwdXRlAAAAAWkBAAAADHdvcmtIYW5kT3ZlcgAAAAEAAAAJYXVjdGlvbklkBAAAAAljYWxsZXJQdWIJAQAAAAdleHRyYWN0AAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAxhdWN0aW9uU3RhdGUJAQAAAA9nZXRBdWN0aW9uU3RhdGUAAAABBQAAAAlhdWN0aW9uSWQEAAAADWF1Y3Rpb25DbGllbnQJAQAAABNnZXRBdWN0aW9uQ2xpZW50UHViAAAAAQUAAAAJYXVjdGlvbklkBAAAAAxhdWN0aW9uU3RhcnQJAQAAABNnZXRBdWN0aW9uU3RhcnRUaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAAA9hdWN0aW9uRHVyYXRpb24JAQAAABZnZXRBdWN0aW9uRHVyYXRpb25UaW1lAAAAAQUAAAAJYXVjdGlvbklkBAAAABlhdWN0aW9uQmxvY2tzRm9yRXhlY3V0aW9uCQEAAAAcZ2V0QXVjdGlvbkpvYlBlcmZvcm1hbmNlVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAARYXVjdGlvbkZyZWVsYW5jZXIJAQAAABdnZXRBdWN0aW9uRnJlZWxhbmNlclB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQkBAAAABmdldEludAAAAAEJAAEsAAAAAgkAAlgAAAABBQAAAA1hdWN0aW9uQ2xpZW50AgAAAA5fSm9ic0luRGlzcHV0ZQQAAAALY3VycmVudFRpbWUFAAAABmhlaWdodAQAAAASZnJlZWxhbmNlclB1YkNoZWNrAwkAAAAAAAACBQAAAAljYWxsZXJQdWIFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyBQAAAAljYWxsZXJQdWIJAAACAAAAAQIAAAA0T25seSBhIGZyZWVsYW5jZXIgY2FuIGluZGljYXRlIHRoYXQgdGhlIHdvcmsgaXMgZG9uZQQAAAAKdGltZUlzT3ZlcgkAAGYAAAACCQAAZQAAAAIFAAAAC2N1cnJlbnRUaW1lBQAAAAxhdWN0aW9uU3RhcnQFAAAAGWF1Y3Rpb25CbG9ja3NGb3JFeGVjdXRpb24DCQAAAAAAAAIFAAAADGF1Y3Rpb25TdGF0ZQUAAAAPc3RhdGVJblByb2dyZXNzAwUAAAAKdGltZUlzT3ZlcgkBAAAACFdyaXRlU2V0AAAAAQkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACBQAAAAlhdWN0aW9uSWQCAAAABl9TdGF0ZQUAAAAMc3RhdGVEaXNwdXRlCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAANX0Rpc3B1dGVWb3RlcwIAAAABMAkABEwAAAACCQEAAAAJRGF0YUVudHJ5AAAAAgkAASwAAAACCQACWAAAAAEFAAAADWF1Y3Rpb25DbGllbnQCAAAADV9Kb2JJbkRpc3B1dGUJAABkAAAAAgUAAAATY2xpZW50Sm9ic0luRGlzcHV0ZQAAAAAAAAAAAQUAAAADbmlsCQEAAAAIV3JpdGVTZXQAAAABCQAETAAAAAIJAQAAAAlEYXRhRW50cnkAAAACCQABLAAAAAIFAAAACWF1Y3Rpb25JZAIAAAAGX1N0YXRlBQAAABFzdGF0ZVdhaXQ0Q29uZmlybQUAAAADbmlsCQAAAgAAAAECAAAAGkF1Y3Rpb24gc3RhdGUgaXMgaW5jb3JyZWN0AAAAAWkBAAAACmFjY2VwdFdvcmsAAAABAAAACWF1Y3Rpb25JZAQAAAAJY2FsbGVyUHViCQEAAAAHZXh0cmFjdAAAAAEIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQQAAAAMYXVjdGlvblN0YXRlCQEAAAAPZ2V0QXVjdGlvblN0YXRlAAAAAQUAAAAJYXVjdGlvbklkBAAAAA1hdWN0aW9uQ2xpZW50CQEAAAATZ2V0QXVjdGlvbkNsaWVudFB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAAMYXVjdGlvblN0YXJ0CQEAAAATZ2V0QXVjdGlvblN0YXJ0VGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAPYXVjdGlvbkR1cmF0aW9uCQEAAAAWZ2V0QXVjdGlvbkR1cmF0aW9uVGltZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAAQYXVjdGlvbkFzc2V0TmFtZQkBAAAAE2dldEF1Y3Rpb25Bc3NldE5hbWUAAAABBQAAAAlhdWN0aW9uSWQEAAAADGF1Y3Rpb25QcmljZQkBAAAAD2dldEF1Y3Rpb25QcmljZQAAAAEFAAAACWF1Y3Rpb25JZAQAAAARYXVjdGlvbkZyZWVsYW5jZXIJAQAAABdnZXRBdWN0aW9uRnJlZWxhbmNlclB1YgAAAAEFAAAACWF1Y3Rpb25JZAQAAAALam9ic09uR29pbmcJAQAAAAZnZXRJbnQAAAABCQABLAAAAAIJAAJYAAAAAQUAAAANYXVjdGlvbkNsaWVudAIAAAAMX0pvYnNPbkdvaW5nBAAAABlmcmVlbGFuY2VyUGVuZGluZ0Vhcm5pbmdzCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAABBfUGVuZGluZ0Vhcm5pbmdzBAAAABZmcmVlbGFuY2VyUGFpZEVhcm5pbmdzCQEAAAAGZ2V0SW50AAAAAQkAASwAAAACCQACWAAAAAEFAAAAEWF1Y3Rpb25GcmVlbGFuY2VyAgAAAA1fUGFpZEVhcm5pbmdzBAAAAA5kQXBwQ29tbWlzc2lvbgkAAGkAAAACCQAAaAAAAAIFAAAADGF1Y3Rpb25QcmljZQAAAAAAAAAAAwAAAAAAAAAAZAQAAAARYW1vdW50V2l0aG91dENvbW0JAABlAAAAAgUAAAAMYXVjdGlvblByaWNlBQAAAA5kQXBwQ29tbWlzc2lvbgQAAAAQYXVjdGlvbkFzc2V0SWQ1OAkBAAAAEUFzc2V0TmFtZVRvQmFzZTU4AAAAAQUAAAAQYXVjdGlvbkFzc2V0TmFtZQQAAAARbmV3RnJlZXplZEJhbGFuY2UJAQAAABZkZWNyZWFzZUZyZWV6ZWRCYWxhbmNlAAAAAgUAAAAQYXVjdGlvbkFzc2V0TmFtZQUA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", "chainId": 84, "height": 716475, "spentComplexity": 0 } View: original | compacted Prev: DQF1ckC5oYxqfejNucHLwk5vZAuAbVyYaf6zeFwWZo8o Next: DUKzfnHFRiBkK3G387TYM1CBqqwEZrdejkfsmiM9Us7q Diff:
OldNewDifferences
3131
3232 let freelancer = "FL"
3333
34-let ambassador1 = base58'1'
34+let ambassador1 = base58'FneCJqM5BP2eAuyteMiuEEHYALrE4axhEfcpHVGbdr5s'
3535
36-let ambassador2 = base58'1'
36+let ambassador2 = base58'6QAMdssb1GJjpQVQQcnx8fKU8WhtcF9ZsQhifdThAEK8'
3737
38-let ambassador3 = base58'1'
38+let ambassador3 = base58'2ituwW7DSRsLP3Vcbnpr98QUQMGFRWKmyYPFqsUKRDoP'
3939
40-let ambassador4 = base58'1'
40+let ambassador4 = base58'ANsPQocEESyLb3yQqk2pwCdoK7PJQxLoZVpYvsm3SxUG'
4141
42-let ambassador5 = base58'1'
42+let ambassador5 = base58'13VixwQin1MzZCyY69NSWMSBNEV27Rzc159o7uZXR9VS'
4343
4444 func AuctionIdDataKey (auctionId) = (auctionId + "_AuctionData")
4545
469469 let auctionClient = getAuctionClientPub(auctionId)
470470 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
471471 let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
472- if (if ((auctionState == stateOpen))
472+ if (if ((auctionState == stateInProgress))
473473 then true
474- else (auctionState == stateSuggested))
475- then throw("Incorrect auction state for dispute opening")
476- else if (if ((caller == auctionClient))
474+ else (auctionState == stateWait4Confirm))
475+ then if (if ((caller == auctionClient))
477476 then true
478477 else (caller == auctionFreelancer))
479478 then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), 0), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute + 1))])
480479 else throw("Only Client and Freelancer can open dispute")
480+ else throw("Incorrect auction state for dispute opening")
481481 }
482482
483483
493493 let commission = ((auctionPrice * 3) / 100)
494494 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
495495 let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
496+ let freelancerPendingEarnings = getInt((toBase58String(auctionFreelancer) + "_PendingEarnings"))
496497 let callerIsAmbassador = if (if (if (if (if ((callerPub == ambassador1))
497498 then true
498499 else (callerPub == ambassador2))
564565 then (auctionPrice - commission)
565566 else (auctionPrice - (commission * 2))
566567 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
567- ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute - 1))]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinner), paymentWithoutComm, auctionAssetId58)]))
568+ ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute - 1)), DataEntry((toBase58String(auctionFreelancer) + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinner), paymentWithoutComm, auctionAssetId58)]))
568569 }
569570 else WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote)])
570571 else throw(("Incorrect state. Must be: " + stateDispute))
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 3 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let day = 1440
55
66 let WAVES = unit
77
88 let wBTC = base58'8LQW8f7P5d5PZM7GtZEBgaqRPGSzS3DfPuiXrURJ4AJS'
99
1010 let wEUR = base58'Gtb1WRznfchDnTh37ezoDTJ4wcoKaRsKqKjJjy7nm2zU'
1111
1212 let wUSD = base58'Ft8X1v1LTa1ABafufpaCWyVj8KkaxUWE6xBhW6sNFJck'
1313
1414 let stateOpen = "Opened"
1515
1616 let stateSuggested = "Suggested"
1717
1818 let stateCancel = "Canceled"
1919
2020 let stateInProgress = "InProgress"
2121
2222 let stateWait4Confirm = "WaitForConfirmation"
2323
2424 let stateComplete = "Completed"
2525
2626 let stateDispute = "Dispute"
2727
2828 let stateDisputeResolved = "DisputeResolved"
2929
3030 let client = "CMR"
3131
3232 let freelancer = "FL"
3333
34-let ambassador1 = base58'1'
34+let ambassador1 = base58'FneCJqM5BP2eAuyteMiuEEHYALrE4axhEfcpHVGbdr5s'
3535
36-let ambassador2 = base58'1'
36+let ambassador2 = base58'6QAMdssb1GJjpQVQQcnx8fKU8WhtcF9ZsQhifdThAEK8'
3737
38-let ambassador3 = base58'1'
38+let ambassador3 = base58'2ituwW7DSRsLP3Vcbnpr98QUQMGFRWKmyYPFqsUKRDoP'
3939
40-let ambassador4 = base58'1'
40+let ambassador4 = base58'ANsPQocEESyLb3yQqk2pwCdoK7PJQxLoZVpYvsm3SxUG'
4141
42-let ambassador5 = base58'1'
42+let ambassador5 = base58'13VixwQin1MzZCyY69NSWMSBNEV27Rzc159o7uZXR9VS'
4343
4444 func AuctionIdDataKey (auctionId) = (auctionId + "_AuctionData")
4545
4646
4747 func getInt (key) = {
4848 let valueJobsOnGoing = getInteger(this, key)
4949 match valueJobsOnGoing {
5050 case a: Int =>
5151 a
5252 case _ =>
5353 0
5454 }
5555 }
5656
5757
5858 func AssetNameToBase58 (auctionAssetName) = if ((auctionAssetName == "WAVES"))
5959 then WAVES
6060 else if ((auctionAssetName == "BTC"))
6161 then wBTC
6262 else if ((auctionAssetName == "EUR"))
6363 then wEUR
6464 else if ((auctionAssetName == "USD"))
6565 then wUSD
6666 else throw("Incorrect Asset Id")
6767
6868
6969 func timeCheck (currentTime,startTime,expirationTime) = ((currentTime - startTime) > expirationTime)
7070
7171
7272 func bidAmountCheck (amount,auctionPrice) = if ((amount > auctionPrice))
7373 then throw("Bid amount must be lower or equal than auctionPrice")
7474 else amount
7575
7676
7777 func increaseFreezedBalance (pmtAssetName,auctionPrice) = {
7878 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
7979 let currentFreezedBalance = match keyFreezedFunds {
8080 case a: Int =>
8181 a
8282 case _ =>
8383 0
8484 }
8585 (currentFreezedBalance + auctionPrice)
8686 }
8787
8888
8989 func decreaseFreezedBalance (pmtAssetName,auctionPrice) = {
9090 let keyFreezedFunds = getInteger(this, (pmtAssetName + "_Freezed"))
9191 let currentFreezedBalance = match keyFreezedFunds {
9292 case a: Int =>
9393 a
9494 case _ =>
9595 0
9696 }
9797 let a = (currentFreezedBalance - auctionPrice)
9898 if ((a >= 0))
9999 then a
100100 else throw("Freezed amount couldn't be less than 0")
101101 }
102102
103103
104104 func freelancerIsRegistered (callerPub) = {
105105 let freelancerIsRegistered = getString(this, (callerPub + "_Freelancer"))
106106 match freelancerIsRegistered {
107107 case a: String =>
108108 callerPub
109109 case _ =>
110110 throw("Only registered users can make bets")
111111 }
112112 }
113113
114114
115115 func createAuctionPriceCheck (pmtAmount) = if ((pmtAmount > 0))
116116 then pmtAmount
117117 else throw("Amount must be higher then 0")
118118
119119
120120 func getAuctionState (auctionId) = {
121121 let valueState = getString(this, (auctionId + "_State"))
122122 match valueState {
123123 case a: String =>
124124 a
125125 case _ =>
126126 throw("Auction State was not found")
127127 }
128128 }
129129
130130
131131 func getAuctionClientPub (auctionId) = {
132132 let valueClient = getString(this, (auctionId + "_AuctionClient"))
133133 let clientPub = match valueClient {
134134 case a: String =>
135135 a
136136 case _ =>
137137 throw("Auction Client was not found")
138138 }
139139 fromBase58String(clientPub)
140140 }
141141
142142
143143 func getAuctionStartTime (auctionId) = {
144144 let valueAuctionStart = getInteger(this, (auctionId + "_AuctionStart"))
145145 match valueAuctionStart {
146146 case a: Int =>
147147 a
148148 case _ =>
149149 throw("Auction Start time was not found")
150150 }
151151 }
152152
153153
154154 func getAuctionDurationTime (auctionId) = {
155155 let valueauctionDuration = getInteger(this, (auctionId + "_AuctionDuration"))
156156 match valueauctionDuration {
157157 case a: Int =>
158158 a
159159 case _ =>
160160 throw("Auction duration time was not found")
161161 }
162162 }
163163
164164
165165 func getAuctionJobPerformanceTime (auctionId) = {
166166 let valueBlocksForExecution = getInteger(this, (auctionId + "_JobPerformance"))
167167 match valueBlocksForExecution {
168168 case a: Int =>
169169 a
170170 case _ =>
171171 throw("Auction job performance time was not found")
172172 }
173173 }
174174
175175
176176 func getAuctionAssetName (auctionId) = {
177177 let valueAssetName = getString(this, (auctionId + "_AssetName"))
178178 match valueAssetName {
179179 case a: String =>
180180 a
181181 case _ =>
182182 throw("Auction asset name was not found")
183183 }
184184 }
185185
186186
187187 func getAuctionPrice (auctionId) = {
188188 let valuePrice = getInteger(this, (auctionId + "_Price"))
189189 match valuePrice {
190190 case a: Int =>
191191 a
192192 case _ =>
193193 throw("Auction price was not found")
194194 }
195195 }
196196
197197
198198 func getAuctionFreelancerPub (auctionId) = {
199199 let valueClient = getString(this, (auctionId + "_HiredFreelancer"))
200200 let a = match valueClient {
201201 case a: String =>
202202 a
203203 case _ =>
204204 throw("Auction Client was not found")
205205 }
206206 fromBase58String(a)
207207 }
208208
209209
210210 @Callable(i)
211211 func freelancerSignUp (info) = {
212212 let userPublicKey = toBase58String(i.callerPublicKey)
213213 let alreadyRegistered = getString(this, (userPublicKey + "_Freelancer"))
214214 if (isDefined(alreadyRegistered))
215215 then throw("User already registered")
216216 else WriteSet([DataEntry((userPublicKey + "_Freelancer"), info), DataEntry((userPublicKey + "_PendingEarnings"), 0), DataEntry((userPublicKey + "_PaidEarnings"), 0), DataEntry((userPublicKey + "_TotalEarnings"), 0), DataEntry((userPublicKey + "_JobsPending"), 0), DataEntry((userPublicKey + "_JobsCompleted"), 0), DataEntry((userPublicKey + "_JobsTotal"), 0)])
217217 }
218218
219219
220220
221221 @Callable(i)
222222 func clientSignUp (info) = {
223223 let userPublicKey = toBase58String(i.callerPublicKey)
224224 let alreadyRegistered = getString(this, (userPublicKey + "_Client"))
225225 if (isDefined(alreadyRegistered))
226226 then throw("User already registered")
227227 else WriteSet([DataEntry((userPublicKey + "_Client"), info), DataEntry((userPublicKey + "_JobsCreated"), 0), DataEntry((userPublicKey + "_JobsOnGoing"), 0), DataEntry((userPublicKey + "_JobInDispute"), 0)])
228228 }
229229
230230
231231
232232 @Callable(i)
233233 func createAuction (jobExecutionDays,auctionDurationDays,auctionInfo) = {
234234 let auctionId = toBase58String(i.transactionId)
235235 let auctionClient = toBase58String(i.callerPublicKey)
236236 let pmt = extract(i.payment)
237237 let pmtAmount = pmt.amount
238238 let auctionPrice = createAuctionPriceCheck(pmtAmount)
239239 let auctionStart = height
240240 let auctionDurationBlocks = (auctionDurationDays * day)
241241 let blocksForExecution = (jobExecutionDays * day)
242242 let pmtAssetName = if (!(isDefined(pmt.assetId)))
243243 then "WAVES"
244244 else if ((pmt.assetId == wBTC))
245245 then "BTC"
246246 else if ((pmt.assetId == wEUR))
247247 then "EUR"
248248 else if ((pmt.assetId == wUSD))
249249 then "USD"
250250 else throw("AssetId is incorrect")
251251 let jobsCreated = getInt((auctionClient + "_JobsCreated"))
252252 let newFreezedBalance = increaseFreezedBalance(pmtAssetName, auctionPrice)
253253 WriteSet([DataEntry((auctionId + "_State"), stateOpen), DataEntry((auctionId + "_Info"), auctionInfo), DataEntry((auctionId + "_AuctionClient"), auctionClient), DataEntry((auctionId + "_AuctionStart"), auctionStart), DataEntry((auctionId + "_AuctionDuration"), auctionDurationBlocks), DataEntry((auctionId + "_JobPerformance"), blocksForExecution), DataEntry((auctionId + "_AssetName"), pmtAssetName), DataEntry((auctionId + "_Price"), auctionPrice), DataEntry((pmtAssetName + "_Freezed"), newFreezedBalance), DataEntry((auctionClient + "_JobsCreated"), (jobsCreated + 1))])
254254 }
255255
256256
257257
258258 @Callable(i)
259259 func makeBid (auctionId,amount) = {
260260 let callerPub = toBase58String(i.callerPublicKey)
261261 let betTime = height
262262 let auctionState = getAuctionState(auctionId)
263263 let auctionClient = getAuctionClientPub(auctionId)
264264 let auctionStart = getAuctionStartTime(auctionId)
265265 let auctionDuration = getAuctionDurationTime(auctionId)
266266 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
267267 let auctionAssetName = getAuctionAssetName(auctionId)
268268 let auctionPrice = getAuctionPrice(auctionId)
269269 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
270270 let newFreelancer = freelancerIsRegistered(callerPub)
271271 let dAppCommission = ((auctionPrice * 3) / 100)
272272 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
273273 let bidAmount = bidAmountCheck(amount, auctionPrice)
274274 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
275275 if (auctionTimeisOver)
276276 then if ((auctionState == stateOpen))
277277 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (auctionPrice - dAppCommission), auctionAssetId58)]))
278278 else if ((auctionState == stateSuggested))
279279 then {
280280 let auctionLowestBidder = {
281281 let valueLowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
282282 match valueLowestBidder {
283283 case a: String =>
284284 a
285285 case _ =>
286286 throw("Auction lowest bidder was not found")
287287 }
288288 }
289289 let newAuctionPrice = {
290290 let valueNewAuctionPrice = getInteger(this, ((auctionId + "_Bid_") + auctionLowestBidder))
291291 match valueNewAuctionPrice {
292292 case a: Int =>
293293 a
294294 case _ =>
295295 throw("Auction lowest bid was not found")
296296 }
297297 }
298298 let amountDifference = ((auctionPrice - newAuctionPrice) - dAppCommission)
299299 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), newAuctionPrice)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountDifference, auctionAssetId58)]))
300300 }
301301 else throw("Incorrect auction state")
302302 else if ((auctionState == stateOpen))
303303 then WriteSet([DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount), DataEntry((auctionId + "_State"), stateSuggested), DataEntry((auctionId + "_LowestBidderPub"), callerPub)])
304304 else if ((auctionState == stateSuggested))
305305 then {
306306 let currentLowestBidderPub = {
307307 let lowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
308308 match lowestBidder {
309309 case a: String =>
310310 a
311311 case _ =>
312312 throw("Auction lowest bidder was not found")
313313 }
314314 }
315315 let newLowestBidderPub = {
316316 let valueCurrentLowestBid = getInteger(this, ((auctionId + "_Bid_") + currentLowestBidderPub))
317317 let currentLowestBid = match valueCurrentLowestBid {
318318 case a: Int =>
319319 a
320320 case _ =>
321321 throw("Auction lowest bid was not found")
322322 }
323323 if ((currentLowestBid > bidAmount))
324324 then newFreelancer
325325 else currentLowestBidderPub
326326 }
327327 WriteSet([DataEntry((auctionId + "_LowestBidderPub"), newLowestBidderPub), DataEntry(((auctionId + "_Bid_") + newFreelancer), bidAmount)])
328328 }
329329 else throw(((((("Incorrect jobId state. Now: " + auctionState) + ", must be: ") + stateOpen) + " or ") + stateSuggested))
330330 }
331331
332332
333333
334334 @Callable(i)
335335 func chooseFreelancer (auctionId,freelancerPub) = {
336336 let callerPub = extract(i.callerPublicKey)
337337 let betTime = height
338338 let auctionState = getAuctionState(auctionId)
339339 let auctionClient = getAuctionClientPub(auctionId)
340340 let auctionStart = getAuctionStartTime(auctionId)
341341 let auctionDuration = getAuctionDurationTime(auctionId)
342342 let auctionAssetName = getAuctionAssetName(auctionId)
343343 let auctionPrice = getAuctionPrice(auctionId)
344344 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
345345 let jobsOnGoing = getInt((toBase58String(auctionClient) + "_JobsOnGoing"))
346346 let freelancerPendingEarnings = getInt((freelancerPub + "_PendingEarnings"))
347347 let freelancerTotalEarnings = getInt((freelancerPub + "_TotalEarnings"))
348348 let freelancerBidAmount = {
349349 let keyFreelancerBid = ((auctionId + "_Bid_") + freelancerPub)
350350 let valueFreelacerBid = getInteger(this, keyFreelancerBid)
351351 match valueFreelacerBid {
352352 case a: Int =>
353353 a
354354 case _ =>
355355 throw("Freelancer's bet was not found")
356356 }
357357 }
358358 let auctionTimeisOver = timeCheck(betTime, auctionStart, auctionDuration)
359359 if ((callerPub == auctionClient))
360360 then if (auctionTimeisOver)
361361 then if ((auctionState == stateOpen))
362362 then {
363363 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
364364 let dAppCommission = ((auctionPrice * 3) / 100)
365365 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (auctionPrice - dAppCommission), auctionAssetId58)]))
366366 }
367367 else if ((auctionState == stateSuggested))
368368 then {
369369 let auctionLowestBidder = {
370370 let valueLowestBidder = getString(this, (auctionId + "_LowestBidderPub"))
371371 match valueLowestBidder {
372372 case a: String =>
373373 a
374374 case _ =>
375375 throw("Auction lowest bidder was not found")
376376 }
377377 }
378378 let newAuctionPrice = {
379379 let valueNewAuctionPrice = getInteger(this, ((auctionId + "_Bid_") + auctionLowestBidder))
380380 match valueNewAuctionPrice {
381381 case a: Int =>
382382 a
383383 case _ =>
384384 throw("Auction lowest bid was not found")
385385 }
386386 }
387387 let amountDifference = (auctionPrice - newAuctionPrice)
388388 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
389389 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), auctionLowestBidder), DataEntry((auctionId + "_Price"), newAuctionPrice), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + newAuctionPrice)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + newAuctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountDifference, auctionAssetId58)]))
390390 }
391391 else throw("Incorrect auction state")
392392 else {
393393 let setNewFreelancer = {
394394 let newFreelancer = getInteger(this, ((auctionId + "_Bid_") + freelancerPub))
395395 match newFreelancer {
396396 case a: Int =>
397397 freelancerPub
398398 case _ =>
399399 throw("Error: Incorrect freelancerPub")
400400 }
401401 }
402402 let newAuctionPrice = {
403403 let freelancerBid = getInteger(this, ((auctionId + "_Bid_") + freelancerPub))
404404 match freelancerBid {
405405 case a: Int =>
406406 a
407407 case _ =>
408408 throw("Auction lowest bidder was not found")
409409 }
410410 }
411411 let amountDifference = (auctionPrice - freelancerBidAmount)
412412 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, amountDifference)
413413 ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateInProgress), DataEntry((auctionId + "_HiredFreelancer"), setNewFreelancer), DataEntry((auctionId + "_Price"), newAuctionPrice), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing + 1)), DataEntry((freelancerPub + "_PendingEarnings"), (freelancerPendingEarnings + newAuctionPrice)), DataEntry((freelancerPub + "_TotalEarnings"), (freelancerTotalEarnings + newAuctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), (amountDifference + 1), auctionAssetId58)]))
414414 }
415415 else throw("Only auction customer can choose a freelancer")
416416 }
417417
418418
419419
420420 @Callable(i)
421421 func increaseExecutionTime (auctionId,executionDays) = {
422422 let caller = extract(i.callerPublicKey)
423423 let auctionState = getAuctionState(auctionId)
424424 let auctionClient = getAuctionClientPub(auctionId)
425425 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
426426 let newAuctionExecutionTime = {
427427 let newAuctionBlocksForExecution = (executionDays * day)
428428 if ((newAuctionBlocksForExecution > auctionBlocksForExecution))
429429 then newAuctionBlocksForExecution
430430 else throw("New execution time must more than current execution time")
431431 }
432432 if ((caller == auctionClient))
433433 then if (if (if ((auctionState == stateOpen))
434434 then true
435435 else (auctionState == stateSuggested))
436436 then true
437437 else (auctionState == stateInProgress))
438438 then WriteSet([DataEntry((auctionId + "_JobPerformance"), newAuctionExecutionTime)])
439439 else throw("Incorrect state")
440440 else throw("Only Client can increase execution time")
441441 }
442442
443443
444444
445445 @Callable(i)
446446 func cancelAuction (auctionId) = {
447447 let callerPub = extract(i.callerPublicKey)
448448 let auctionState = getAuctionState(auctionId)
449449 let auctionClient = getAuctionClientPub(auctionId)
450450 let auctionAssetName = getAuctionAssetName(auctionId)
451451 let auctionPrice = getAuctionPrice(auctionId)
452452 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
453453 let dAppCommission = ((auctionPrice * 3) / 100)
454454 let amountWithoutComm = (auctionPrice - dAppCommission)
455455 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
456456 if ((callerPub == auctionClient))
457457 then if ((auctionState == stateOpen))
458458 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateCancel), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance)]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionClient), amountWithoutComm, auctionAssetId58)]))
459459 else throw("Auction can be canceled only by auction owner.")
460460 else throw("Only Client can cancel auction")
461461 }
462462
463463
464464
465465 @Callable(i)
466466 func openDispute (auctionId) = {
467467 let caller = extract(i.callerPublicKey)
468468 let auctionState = getAuctionState(auctionId)
469469 let auctionClient = getAuctionClientPub(auctionId)
470470 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
471471 let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
472- if (if ((auctionState == stateOpen))
472+ if (if ((auctionState == stateInProgress))
473473 then true
474- else (auctionState == stateSuggested))
475- then throw("Incorrect auction state for dispute opening")
476- else if (if ((caller == auctionClient))
474+ else (auctionState == stateWait4Confirm))
475+ then if (if ((caller == auctionClient))
477476 then true
478477 else (caller == auctionFreelancer))
479478 then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), 0), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute + 1))])
480479 else throw("Only Client and Freelancer can open dispute")
480+ else throw("Incorrect auction state for dispute opening")
481481 }
482482
483483
484484
485485 @Callable(i)
486486 func voteDispute (auctionId,vote) = {
487487 let callerPub = extract(i.callerPublicKey)
488488 let auctionState = getAuctionState(auctionId)
489489 let auctionClient = getAuctionClientPub(auctionId)
490490 let auctionAssetName = getAuctionAssetName(auctionId)
491491 let auctionPrice = getAuctionPrice(auctionId)
492492 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
493493 let commission = ((auctionPrice * 3) / 100)
494494 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
495495 let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
496+ let freelancerPendingEarnings = getInt((toBase58String(auctionFreelancer) + "_PendingEarnings"))
496497 let callerIsAmbassador = if (if (if (if (if ((callerPub == ambassador1))
497498 then true
498499 else (callerPub == ambassador2))
499500 then true
500501 else (callerPub == ambassador3))
501502 then true
502503 else (callerPub == ambassador4))
503504 then true
504505 else (callerPub == ambassador5))
505506 then toBase58String(callerPub)
506507 else throw("Only defined ambassadors can vote in disputes")
507508 let newVote = if (if ((vote == client))
508509 then true
509510 else (vote == freelancer))
510511 then vote
511512 else throw(((("Vote is incorrect. Must be: " + client) + " or ") + freelancer))
512513 let newVoter = {
513514 let keyVoter = ((auctionId + "_DiputeVote_") + callerIsAmbassador)
514515 let valueVoter = getString(this, keyVoter)
515516 match valueVoter {
516517 case a: String =>
517518 throw("User already voted")
518519 case _ =>
519520 callerIsAmbassador
520521 }
521522 }
522523 let votesNumber = {
523524 let valueVotesNumber = getInteger(this, (auctionId + "_DisputeVotes"))
524525 match valueVotesNumber {
525526 case a: Int =>
526527 a
527528 case _ =>
528529 throw("VotesNumber was not found")
529530 }
530531 }
531532 if ((auctionState == stateDispute))
532533 then if ((votesNumber == 4))
533534 then {
534535 let disputeWinner = {
535536 let ambassador1Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador1)))
536537 let ambassador2Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador2)))
537538 let ambassador3Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador3)))
538539 let ambassador4Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador4)))
539540 let ambassador5Vote = getString(this, ((auctionId + "_DiputeVote_") + toBase58String(ambassador5)))
540541 let v1 = if ((ambassador1Vote == client))
541542 then 1
542543 else 0
543544 let v2 = if ((ambassador2Vote == client))
544545 then 1
545546 else 0
546547 let v3 = if ((ambassador3Vote == client))
547548 then 1
548549 else 0
549550 let v4 = if ((ambassador4Vote == client))
550551 then 1
551552 else 0
552553 let v5 = if ((ambassador5Vote == client))
553554 then 1
554555 else 0
555556 let currentVote = if ((newVote == client))
556557 then 1
557558 else 0
558559 let votesForClient = (((((v1 + v2) + v3) + v4) + v5) + currentVote)
559560 if ((votesForClient > 2))
560561 then auctionClient
561562 else auctionFreelancer
562563 }
563564 let paymentWithoutComm = if ((disputeWinner == auctionClient))
564565 then (auctionPrice - commission)
565566 else (auctionPrice - (commission * 2))
566567 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
567- ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute - 1))]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinner), paymentWithoutComm, auctionAssetId58)]))
568+ ScriptResult(WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry((auctionId + "_State"), stateDisputeResolved), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute - 1)), DataEntry((toBase58String(auctionFreelancer) + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(disputeWinner), paymentWithoutComm, auctionAssetId58)]))
568569 }
569570 else WriteSet([DataEntry((auctionId + "_DisputeVotes"), (votesNumber + 1)), DataEntry(((auctionId + "_DiputeVote_") + callerIsAmbassador), newVote)])
570571 else throw(("Incorrect state. Must be: " + stateDispute))
571572 }
572573
573574
574575
575576 @Callable(i)
576577 func workHandOver (auctionId) = {
577578 let callerPub = extract(i.callerPublicKey)
578579 let auctionState = getAuctionState(auctionId)
579580 let auctionClient = getAuctionClientPub(auctionId)
580581 let auctionStart = getAuctionStartTime(auctionId)
581582 let auctionDuration = getAuctionDurationTime(auctionId)
582583 let auctionBlocksForExecution = getAuctionJobPerformanceTime(auctionId)
583584 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
584585 let clientJobsInDispute = getInt((toBase58String(auctionClient) + "_JobsInDispute"))
585586 let currentTime = height
586587 let freelancerPubCheck = if ((callerPub == auctionFreelancer))
587588 then callerPub
588589 else throw("Only a freelancer can indicate that the work is done")
589590 let timeIsOver = ((currentTime - auctionStart) > auctionBlocksForExecution)
590591 if ((auctionState == stateInProgress))
591592 then if (timeIsOver)
592593 then WriteSet([DataEntry((auctionId + "_State"), stateDispute), DataEntry((auctionId + "_DisputeVotes"), "0"), DataEntry((toBase58String(auctionClient) + "_JobInDispute"), (clientJobsInDispute + 1))])
593594 else WriteSet([DataEntry((auctionId + "_State"), stateWait4Confirm)])
594595 else throw("Auction state is incorrect")
595596 }
596597
597598
598599
599600 @Callable(i)
600601 func acceptWork (auctionId) = {
601602 let callerPub = extract(i.callerPublicKey)
602603 let auctionState = getAuctionState(auctionId)
603604 let auctionClient = getAuctionClientPub(auctionId)
604605 let auctionStart = getAuctionStartTime(auctionId)
605606 let auctionDuration = getAuctionDurationTime(auctionId)
606607 let auctionAssetName = getAuctionAssetName(auctionId)
607608 let auctionPrice = getAuctionPrice(auctionId)
608609 let auctionFreelancer = getAuctionFreelancerPub(auctionId)
609610 let jobsOnGoing = getInt((toBase58String(auctionClient) + "_JobsOnGoing"))
610611 let freelancerPendingEarnings = getInt((toBase58String(auctionFreelancer) + "_PendingEarnings"))
611612 let freelancerPaidEarnings = getInt((toBase58String(auctionFreelancer) + "_PaidEarnings"))
612613 let dAppCommission = ((auctionPrice * 3) / 100)
613614 let amountWithoutComm = (auctionPrice - dAppCommission)
614615 let auctionAssetId58 = AssetNameToBase58(auctionAssetName)
615616 let newFreezedBalance = decreaseFreezedBalance(auctionAssetName, auctionPrice)
616617 let newRating = {
617618 let valueRating = getInteger(this, (toBase58String(auctionFreelancer) + "_Rating"))
618619 let currentRating = match valueRating {
619620 case a: Int =>
620621 a
621622 case _ =>
622623 0
623624 }
624625 (currentRating + 1)
625626 }
626627 if ((callerPub == auctionClient))
627628 then if ((auctionState == stateWait4Confirm))
628629 then ScriptResult(WriteSet([DataEntry((auctionId + "_State"), stateComplete), DataEntry((toBase58String(auctionFreelancer) + "_Rating"), newRating), DataEntry((auctionAssetName + "_Freezed"), newFreezedBalance), DataEntry((toBase58String(auctionClient) + "_JobsOnGoing"), (jobsOnGoing - 1)), DataEntry((toBase58String(auctionFreelancer) + "_PendingEarnings"), (freelancerPendingEarnings - auctionPrice)), DataEntry((toBase58String(auctionFreelancer) + "_PaidEarnings"), (freelancerPaidEarnings + auctionPrice))]), TransferSet([ScriptTransfer(addressFromPublicKey(auctionFreelancer), amountWithoutComm, auctionAssetId58)]))
629630 else throw(("Incorrect state. Must be: " + stateWait4Confirm))
630631 else throw("Only auction customer can use this function")
631632 }
632633
633634
634635 @Verifier(tx)
635636 func verify () = if (sigVerify(tx.bodyBytes, tx.proofs[0], tx.senderPublicKey))
636637 then match tx {
637638 case ttx: TransferTransaction =>
638639 true
639640 case stx: SetScriptTransaction =>
640641 true
641642 case _ =>
642643 false
643644 }
644645 else false
645646

github/deemru/w8io/026f985 
61.96 ms