tx · 7BaXTizJ1e2xLrPvfqbEuPsXwpibrbQZycte7U3Aobik

3MwB4DruW4zASGmUcka1mXAYyaw7fjmQpoo:  -0.01000000 Waves

2021.07.23 12:35 [1626115] smart account 3MwB4DruW4zASGmUcka1mXAYyaw7fjmQpoo > SELF 0.00000000 Waves

{ "type": 13, "id": "7BaXTizJ1e2xLrPvfqbEuPsXwpibrbQZycte7U3Aobik", "fee": 1000000, "feeAssetId": null, "timestamp": 1627032988649, "version": 2, "chainId": 84, "sender": "3MwB4DruW4zASGmUcka1mXAYyaw7fjmQpoo", "senderPublicKey": "mEckVFEgtDdVAbdGoJipwq49i1iWigTh7kx1ZvsC17U", "proofs": [ "A9b7P2de3gVxH9cNjH7JUiP5PSj2bFb1hEQ7QqXxGzrHvSRgCoRVn4xhCFt9oZ7GNeKQDuE8Ktz5FhsUQm8Y7Aa" ], "script": "base64:AAIFAAAAAAAAAKQIAhIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICBIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICBIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICBIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICBIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICBIFCgMIAQgSAwoBCBIAEgQKAggIEgUKAwgICAAAACEAAAAABE5PTkUCAAAABG5vbmUBAAAADmdldE51bWJlckJ5S2V5AAAAAQAAAANrZXkEAAAAA251bQQAAAAHJG1hdGNoMAkABBoAAAACBQAAAAR0aGlzBQAAAANrZXkDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAAA0ludAQAAAABYQUAAAAHJG1hdGNoMAUAAAABYQAAAAAAAAAAAAUAAAADbnVtAQAAAAtnZXRTdHJCeUtleQAAAAEAAAADa2V5BAAAAANzdHIEAAAAByRtYXRjaDAJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5AwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAWEFAAAAByRtYXRjaDAFAAAAAWEFAAAABE5PTkUFAAAAA3N0cgEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQAAAARpdGVtCQABLAAAAAIFAAAABGl0ZW0CAAAABl9wcmljZQEAAAARZ2V0VmFsdWVJdGVtUHJpY2UAAAABAAAABGl0ZW0JAQAAAA5nZXROdW1iZXJCeUtleQAAAAEJAQAAAA9nZXRLZXlJdGVtUHJpY2UAAAABBQAAAARpdGVtAQAAABVnZXRLZXlVc2VySXRlbUNvdW50ZXIAAAACAAAABHVzZXIAAAAEaXRlbQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAABXwUAAAAEdXNlcgIAAAAEX2NudAEAAAAXZ2V0VmFsdWVVc2VySXRlbUNvdW50ZXIAAAACAAAABHVzZXIAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAABHVzZXIFAAAABGl0ZW0BAAAACmdldEtleUl0ZW0AAAACAAAACHN1cHBsaWVyAAAABXRpdGxlCQABLAAAAAICAAAABWl0ZW1fCQACWAAAAAEJAAH3AAAAAQkAAZsAAAABCQABLAAAAAIFAAAACHN1cHBsaWVyBQAAAAV0aXRsZQEAAAAOZ2V0S2V5SXRlbURhdGEAAAABAAAABGl0ZW0JAAEsAAAAAgUAAAAEaXRlbQIAAAAFX2RhdGEBAAAAEmdldEtleUl0ZW1TdXBwbGllcgAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAZfb3duZXIBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQAAAARpdGVtCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQAAAAdhY2NvdW50CQABLAAAAAIFAAAAB2FjY291bnQCAAAACF9iYWxhbmNlAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEAAAAHYWNjb3VudAkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAFWdldEtleUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAB2FjY291bnQAAAAABlZPVEVSUwAAAAAAAAAAAwAAAAAGUVVPUlVNAAAAAAAAAAACAAAAAAZWT1RJTkcCAAAABnZvdGluZwAAAAAGUkVWRUFMAgAAAAZyZXZlYWwAAAAACEZFQVRVUkVEAgAAAAhmZWF0dXJlZAAAAAAIREVMSVNURUQCAAAACGRlbGlzdGVkAQAAAAxnZXRLZXlDb21taXQAAAACAAAABGl0ZW0AAAAEdXNlcgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAAEaXRlbQIAAAABXwUAAAAEdXNlcgIAAAAHX2NvbW1pdAEAAAAOZ2V0VmFsdWVDb21taXQAAAACAAAABGl0ZW0AAAAEdXNlcgkBAAAAC2dldFN0ckJ5S2V5AAAAAQkBAAAADGdldEtleUNvbW1pdAAAAAIFAAAABGl0ZW0FAAAABHVzZXIBAAAAEmdldEtleUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAdfY29tY250AQAAABRnZXRWYWx1ZUNvbW1pdHNDb3VudAAAAAEAAAAEaXRlbQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAEmdldEtleUNvbW1pdHNDb3VudAAAAAEFAAAABGl0ZW0BAAAADGdldEtleVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQABLAAAAAIJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAFfBQAAAAR1c2VyAgAAAAdfcmV2ZWFsAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIAAAAEaXRlbQAAAAR1c2VyCQEAAAALZ2V0U3RyQnlLZXkAAAABCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEAAAAEaXRlbQkAASwAAAACBQAAAARpdGVtAgAAAAdfc3RhdHVzAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABAAAABGl0ZW0JAQAAAAtnZXRTdHJCeUtleQAAAAEJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQEAAAAPZ2V0S2V5Vm90ZUNvdW50AAAAAgAAAARpdGVtAAAABHZvdGUJAAEsAAAAAgkAASwAAAACBQAAAARpdGVtAgAAAAVfcmVzOgUAAAAEdm90ZQEAAAARZ2V0VmFsdWVWb3RlQ291bnQAAAACAAAABGl0ZW0AAAAEdm90ZQkBAAAADmdldE51bWJlckJ5S2V5AAAAAQkBAAAAD2dldEtleVZvdGVDb3VudAAAAAIFAAAABGl0ZW0FAAAABHZvdGUBAAAAE2dldEV4dEFkZHJlc3NPcmFjbGUAAAAACQEAAAAFdmFsdWUAAAABCQAEJgAAAAECAAAAIzNNc2JpeUZ5eThCM2FOM2tGOG50ZGE0NzRTUG40WU1Wa2lxAAAAAAtCTEFDS0xJU1RFRAIAAAAJYmxhY2tsaXN0AQAAABxnZXRFeHRLZXlJdGVtV2hpdGVMaXN0U3RhdHVzAAAAAQAAAAdhY2NvdW50CQABLAAAAAIFAAAAB2FjY291bnQCAAAAEF92ZXJpZmllcl9zdGF0dXMBAAAAHmdldEV4dFZhbHVlSXRlbVdoaXRlTGlzdFN0YXR1cwAAAAIAAAAGb3JhY2xlAAAAB2FjY291bnQEAAAAA3N0cgQAAAAHJG1hdGNoMAkABB0AAAACBQAAAAZvcmFjbGUJAQAAABxnZXRFeHRLZXlJdGVtV2hpdGVMaXN0U3RhdHVzAAAAAQUAAAAHYWNjb3VudAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAGU3RyaW5nBAAAAAFhBQAAAAckbWF0Y2gwBQAAAAFhBQAAAAROT05FBQAAAANzdHIAAAAeAAAAAWkBAAAAB2FkZEl0ZW0AAAADAAAABXRpdGxlAAAABXByaWNlAAAABGRhdGEEAAAAD3N1cHBsaWVyQWRkcmVzcwkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAARpdGVtCQEAAAAKZ2V0S2V5SXRlbQAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAFdGl0bGUEAAAAEXN1cHBsaWVyV2hpdGVMaXN0CQEAAAAeZ2V0RXh0VmFsdWVJdGVtV2hpdGVMaXN0U3RhdHVzAAAAAgkBAAAAE2dldEV4dEFkZHJlc3NPcmFjbGUAAAAABQAAAA9zdXBwbGllckFkZHJlc3MDCQAAZwAAAAIAAAAAAAAAAAAFAAAABXByaWNlCQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQEAAAACIT0AAAACCQEAAAAUZ2V0VmFsdWVJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAAROT05FCQAAAgAAAAECAAAAFmFuIGl0ZW0gYWxyZWFkeSBleGlzdHMDCQAAAAAAAAIFAAAAEXN1cHBsaWVyV2hpdGVMaXN0BQAAAAtCTEFDS0xJU1RFRAkAAAIAAAABAgAAACdzdXBwbGllcidzIGFjY291bnQgaGFzIGJlZW4gYmxhY2tsaXN0ZWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAEmdldEtleUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAAD3N1cHBsaWVyQWRkcmVzcwkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2dldEtleUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0FAAAABXByaWNlCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA5nZXRLZXlJdGVtRGF0YQAAAAEFAAAABGl0ZW0FAAAABGRhdGEJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHGdldEV4dEtleUl0ZW1XaGl0ZUxpc3RTdGF0dXMAAAABBQAAAA9zdXBwbGllckFkZHJlc3MFAAAAEXN1cHBsaWVyV2hpdGVMaXN0BQAAAANuaWwAAAABaQEAAAAIcHVyY2hhc2UAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VT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cHJpY2UJAAACAAAAAQIAAAAuUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAWYW4gaXRlbSBhbHJlYWR5IGV4aXN0cwMJAAAAAAAAAgUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJ3N1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3RlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAcZ2V0RXh0S2V5SXRlbVdoaXRlTGlzdFN0YXR1cwAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAA25pbAAAAAFpAQAAAAlwdXJjaGFzZTIAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAl3aXRoZHJhdzIAAAAABAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYmFsYW5jZQkBAAAAF2dldFZhbHVlQmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAE2luc3VmaWNpZW50IGJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAdiYWxhbmNlBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAALdm90ZUNvbW1pdDIAAAACAAAABGl0ZW0AAAAEaGFzaAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdjb21taXRzCQEAAAAUZ2V0VmFsdWVDb21taXRzQ291bnQAAAABBQAAAARpdGVtBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtAwkAAGcAAAACBQAAAAdjb21taXRzBQAAAAZWT1RFUlMJAAACAAAAAQIAAAAZUmVhY2hlZCBtYXggbnVtIG9mIHZvdGVycwMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZUNvbW1pdAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAACYjEDCQAAAAAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAAROT05FCQAAAgAAAAECAAAAAmIyAwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAETk9ORQkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcHCQAAAgAAAAECAAAAAmIzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyBQAAAARoYXNoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0S2V5Q29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAGQAAAACBQAAAAdjb21taXRzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQMJAAAAAAAAAgUAAAAHY29tbWl0cwUAAAAGVk9URVJTBQAAAAZSRVZFQUwFAAAABlZPVElORwUAAAADbmlsAAAAAWkBAAAAC3ZvdGVSZXZlYWwyAAAAAwAAAARpdGVtAAAABHZvdGUAAAAEc2FsdAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBAAAAAxuZXdWb3RlQ291bnQJAABkAAAAAgkBAAAAEWdldFZhbHVlVm90ZUNvdW50AAAAAgUAAAAEaXRlbQUAAAAEdm90ZQAAAAAAAAAAAQMJAQAAAAIhPQAAAAIJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAEdm90ZQUAAAAEc2FsdAkBAAAADmdldFZhbHVlQ29tbWl0AAAAAgUAAAAEaXRlbQUAAAAEdXNlcgkAAAIAAAABAgAAABhSZXZlYWwgZGF0YSBpcyBub3QgdmFsaWQDCQAAZgAAAAIFAAAABlZPVEVSUwkBAAAAFGdldFZhbHVlQ29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAAIAAAABAgAAACNtYXggbnVtIG9mIHZvdGVycyBoYXNudCByZWFjaGVkIHlldAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAAddXNlciBoYXMgYWxyZWFkeSBwYXJ0aWNpcGF0ZWQDAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAGUkVWRUFMBwkAAAIAAAABAgAAAAx3cm9uZyBzdGF0dXMDAwkBAAAAAiE9AAAAAgUAAAAEdm90ZQUAAAAIRkVBVFVSRUQJAQAAAAIhPQAAAAIFAAAABHZvdGUFAAAACERFTElTVEVEBwkAAAIAAAABAgAAAAp3cm9uZyB2b3RlAwMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhGRUFUVVJFRAYJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhERUxJU1RFRAkAAAIAAAABAgAAABF2b3RlIGhhcyBmaW5pc2hlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgUAAAAEdm90ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2dldEtleVZvdGVDb3VudAAAAAIFAAAABGl0ZW0FAAAABHZvdGUFAAAADG5ld1ZvdGVDb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0DCQAAZwAAAAIFAAAADG5ld1ZvdGVDb3VudAUAAAAGUVVPUlVNBQAAAAR2b3RlBQAAAAZSRVZFQUwFAAAAA25pbAAAAAFpAQAAAAhhZGRJdGVtMwAAAAMAAAAFdGl0bGUAAAAFcHJpY2UAAAAEZGF0YQQAAAAPc3VwcGxpZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABGl0ZW0JAQAAAApnZXRLZXlJdGVtAAAAAgUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAV0aXRsZQQAAAARc3VwcGxpZXJXaGl0ZUxpc3QJAQAAAB5nZXRFeHRWYWx1ZUl0ZW1XaGl0ZUxpc3RTdGF0dXMAAAACCQEAAAATZ2V0RXh0QWRkcmVzc09yYWNsZQAAAAAFAAAAD3N1cHBsaWVyQWRkcmVzcwMJAABnAAAAAgAAAAAAAAAAAAUAAAAFcHJpY2UJAAACAAAAAQIAAAAuUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAWYW4gaXRlbSBhbHJlYWR5IGV4aXN0cwMJAAAAAAAAAgUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJ3N1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3RlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAcZ2V0RXh0S2V5SXRlbVdoaXRlTGlzdFN0YXR1cwAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAA25pbAAAAAFpAQAAAAlwdXJjaGFzZTMAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAl3aXRoZHJhdzMAAAAABAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYmFsYW5jZQkBAAAAF2dldFZhbHVlQmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAE2luc3VmaWNpZW50IGJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAdiYWxhbmNlBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAALdm90ZUNvbW1pdDMAAAACAAAABGl0ZW0AAAAEaGFzaAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdjb21taXRzCQEAAAAUZ2V0VmFsdWVDb21taXRzQ291bnQAAAABBQAAAARpdGVtBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtAwkAAGcAAAACBQAAAAdjb21taXRzBQAAAAZWT1RFUlMJAAACAAAAAQIAAAAZUmVhY2hlZCBtYXggbnVtIG9mIHZvdGVycwMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZUNvbW1pdAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAACYjEDCQAAAAAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAAROT05FCQAAAgAAAAECAAAAAmIyAwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAETk9ORQkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcHCQAAAgAAAAECAAAAAmIzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyBQAAAARoYXNoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0S2V5Q29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAGQAAAACBQAAAAdjb21taXRzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQMJAAAAAAAAAgUAAAAHY29tbWl0cwUAAAAGVk9URVJTBQAAAAZSRVZFQUwFAAAABlZPVElORwUAAAADbmlsAAAAAWkBAAAAC3ZvdGVSZXZlYWwzAAAAAwAAAARpdGVtAAAABHZvdGUAAAAEc2FsdAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBAAAAAxuZXdWb3RlQ291bnQJAABkAAAAAgkBAAAAEWdldFZhbHVlVm90ZUNvdW50AAAAAgUAAAAEaXRlbQUAAAAEdm90ZQAAAAAAAAAAAQMJAQAAAAIhPQAAAAIJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAEdm90ZQUAAAAEc2FsdAkBAAAADmdldFZhbHVlQ29tbWl0AAAAAgUAAAAEaXRlbQUAAAAEdXNlcgkAAAIAAAABAgAAABhSZXZlYWwgZGF0YSBpcyBub3QgdmFsaWQDCQAAZgAAAAIFAAAABlZPVEVSUwkBAAAAFGdldFZhbHVlQ29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAAIAAAABAgAAACNtYXggbnVtIG9mIHZvdGVycyBoYXNudCByZWFjaGVkIHlldAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAAddXNlciBoYXMgYWxyZWFkeSBwYXJ0aWNpcGF0ZWQDAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAGUkVWRUFMBwkAAAIAAAABAgAAAAx3cm9uZyBzdGF0dXMDAwkBAAAAAiE9AAAAAgUAAAAEdm90ZQUAAAAIRkVBVFVSRUQJAQAAAAIhPQAAAAIFAAAABHZvdGUFAAAACERFTElTVEVEBwkAAAIAAAABAgAAAAp3cm9uZyB2b3RlAwMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhGRUFUVVJFRAYJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhERUxJU1RFRAkAAAIAAAABAgAAABF2b3RlIGhhcyBmaW5pc2hlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgUAAAAEdm90ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2dldEtleVZvdGVDb3VudAAAAAIFAAAABGl0ZW0FAAAABHZvdGUFAAAADG5ld1ZvdGVDb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0DCQAAZwAAAAIFAAAADG5ld1ZvdGVDb3VudAUAAAAGUVVPUlVNBQAAAAR2b3RlBQAAAAZSRVZFQUwFAAAAA25pbAAAAAFpAQAAAAhhZGRJdGVtNAAAAAMAAAAFdGl0bGUAAAAFcHJpY2UAAAAEZGF0YQQAAAAPc3VwcGxpZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABGl0ZW0JAQAAAApnZXRLZXlJdGVtAAAAAgUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAV0aXRsZQQAAAARc3VwcGxpZXJXaGl0ZUxpc3QJAQAAAB5nZXRFeHRWYWx1ZUl0ZW1XaGl0ZUxpc3RTdGF0dXMAAAACCQEAAAATZ2V0RXh0QWRkcmVzc09yYWNsZQAAAAAFAAAAD3N1cHBsaWVyQWRkcmVzcwMJAABnAAAAAgAAAAAAAAAAAAUAAAAFcHJpY2UJAAACAAAAAQIAAAAuUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAWYW4gaXRlbSBhbHJlYWR5IGV4aXN0cwMJAAAAAAAAAgUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJ3N1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3RlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAcZ2V0RXh0S2V5SXRlbVdoaXRlTGlzdFN0YXR1cwAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAA25pbAAAAAFpAQAAAAlwdXJjaGFzZTQAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAl3aXRoZHJhdzQAAAAABAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYmFsYW5jZQkBAAAAF2dldFZhbHVlQmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAE2luc3VmaWNpZW50IGJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAdiYWxhbmNlBQAAAAR1bml0BQAAAANuaWwAAAABaQEAAAALdm90ZUNvbW1pdDQAAAACAAAABGl0ZW0AAAAEaGFzaAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAdjb21taXRzCQEAAAAUZ2V0VmFsdWVDb21taXRzQ291bnQAAAABBQAAAARpdGVtBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtAwkAAGcAAAACBQAAAAdjb21taXRzBQAAAAZWT1RFUlMJAAACAAAAAQIAAAAZUmVhY2hlZCBtYXggbnVtIG9mIHZvdGVycwMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZUNvbW1pdAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAACYjEDCQAAAAAAAAIJAQAAABJnZXRLZXlJdGVtU3VwcGxpZXIAAAABBQAAAARpdGVtBQAAAAROT05FCQAAAgAAAAECAAAAAmIyAwMJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAETk9ORQkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcHCQAAAgAAAAECAAAAAmIzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAAxnZXRLZXlDb21taXQAAAACBQAAAARpdGVtBQAAAAR1c2VyBQAAAARoYXNoCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAASZ2V0S2V5Q29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAGQAAAACBQAAAAdjb21taXRzAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABBnZXRLZXlJdGVtU3RhdHVzAAAAAQUAAAAEaXRlbQMJAAAAAAAAAgUAAAAHY29tbWl0cwUAAAAGVk9URVJTBQAAAAZSRVZFQUwFAAAABlZPVElORwUAAAADbmlsAAAAAWkBAAAAC3ZvdGVSZXZlYWw0AAAAAwAAAARpdGVtAAAABHZvdGUAAAAEc2FsdAQAAAAEdXNlcgkAAlgAAAABCAgFAAAAAWkAAAAGY2FsbGVyAAAABWJ5dGVzBAAAAAZzdGF0dXMJAQAAABJnZXRWYWx1ZUl0ZW1TdGF0dXMAAAABBQAAAARpdGVtBAAAAAxuZXdWb3RlQ291bnQJAABkAAAAAgkBAAAAEWdldFZhbHVlVm90ZUNvdW50AAAAAgUAAAAEaXRlbQUAAAAEdm90ZQAAAAAAAAAAAQMJAQAAAAIhPQAAAAIJAAJYAAAAAQkAAfcAAAABCQABmwAAAAEJAAEsAAAAAgUAAAAEdm90ZQUAAAAEc2FsdAkBAAAADmdldFZhbHVlQ29tbWl0AAAAAgUAAAAEaXRlbQUAAAAEdXNlcgkAAAIAAAABAgAAABhSZXZlYWwgZGF0YSBpcyBub3QgdmFsaWQDCQAAZgAAAAIFAAAABlZPVEVSUwkBAAAAFGdldFZhbHVlQ29tbWl0c0NvdW50AAAAAQUAAAAEaXRlbQkAAAIAAAABAgAAACNtYXggbnVtIG9mIHZvdGVycyBoYXNudCByZWFjaGVkIHlldAMJAQAAAAIhPQAAAAIJAQAAAA5nZXRWYWx1ZVJldmVhbAAAAAIFAAAABGl0ZW0FAAAABHVzZXIFAAAABE5PTkUJAAACAAAAAQIAAAAddXNlciBoYXMgYWxyZWFkeSBwYXJ0aWNpcGF0ZWQDAwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzBQAAAAZWT1RJTkcJAQAAAAIhPQAAAAIFAAAABnN0YXR1cwUAAAAGUkVWRUFMBwkAAAIAAAABAgAAAAx3cm9uZyBzdGF0dXMDAwkBAAAAAiE9AAAAAgUAAAAEdm90ZQUAAAAIRkVBVFVSRUQJAQAAAAIhPQAAAAIFAAAABHZvdGUFAAAACERFTElTVEVEBwkAAAIAAAABAgAAAAp3cm9uZyB2b3RlAwMJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhGRUFUVVJFRAYJAAAAAAAAAgUAAAAGc3RhdHVzBQAAAAhERUxJU1RFRAkAAAIAAAABAgAAABF2b3RlIGhhcyBmaW5pc2hlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAMZ2V0S2V5UmV2ZWFsAAAAAgUAAAAEaXRlbQUAAAAEdXNlcgUAAAAEdm90ZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2dldEtleVZvdGVDb3VudAAAAAIFAAAABGl0ZW0FAAAABHZvdGUFAAAADG5ld1ZvdGVDb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAQZ2V0S2V5SXRlbVN0YXR1cwAAAAEFAAAABGl0ZW0DCQAAZwAAAAIFAAAADG5ld1ZvdGVDb3VudAUAAAAGUVVPUlVNBQAAAAR2b3RlBQAAAAZSRVZFQUwFAAAAA25pbAAAAAFpAQAAAAhhZGRJdGVtNQAAAAMAAAAFdGl0bGUAAAAFcHJpY2UAAAAEZGF0YQQAAAAPc3VwcGxpZXJBZGRyZXNzCQACWAAAAAEICAUAAAABaQAAAAZjYWxsZXIAAAAFYnl0ZXMEAAAABGl0ZW0JAQAAAApnZXRLZXlJdGVtAAAAAgUAAAAPc3VwcGxpZXJBZGRyZXNzBQAAAAV0aXRsZQQAAAARc3VwcGxpZXJXaGl0ZUxpc3QJAQAAAB5nZXRFeHRWYWx1ZUl0ZW1XaGl0ZUxpc3RTdGF0dXMAAAACCQEAAAATZ2V0RXh0QWRkcmVzc09yYWNsZQAAAAAFAAAAD3N1cHBsaWVyQWRkcmVzcwMJAABnAAAAAgAAAAAAAAAAAAUAAAAFcHJpY2UJAAACAAAAAQIAAAAuUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAWYW4gaXRlbSBhbHJlYWR5IGV4aXN0cwMJAAAAAAAAAgUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJ3N1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3RlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAcZ2V0RXh0S2V5SXRlbVdoaXRlTGlzdFN0YXR1cwAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAA25pbAAAAAFpAQAAAAlwdXJjaGFzZTUAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRy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cHBsaWVyQWRkcmVzcwMJAABnAAAAAgAAAAAAAAAAAAUAAAAFcHJpY2UJAAACAAAAAQIAAAAuUHVyY2hhc2UgYW1vdW50IGNhbm5vdCBiZSBsZXNzIHRoYW4gaXRlbSBwcmljZQMJAQAAAAIhPQAAAAIJAQAAABRnZXRWYWx1ZUl0ZW1TdXBwbGllcgAAAAEFAAAABGl0ZW0FAAAABE5PTkUJAAACAAAAAQIAAAAWYW4gaXRlbSBhbHJlYWR5IGV4aXN0cwMJAAAAAAAAAgUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAC0JMQUNLTElTVEVECQAAAgAAAAECAAAAJ3N1cHBsaWVyJ3MgYWNjb3VudCBoYXMgYmVlbiBibGFja2xpc3RlZAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASZ2V0S2V5SXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPZ2V0S2V5SXRlbVByaWNlAAAAAQUAAAAEaXRlbQUAAAAFcHJpY2UJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADmdldEtleUl0ZW1EYXRhAAAAAQUAAAAEaXRlbQUAAAAEZGF0YQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAcZ2V0RXh0S2V5SXRlbVdoaXRlTGlzdFN0YXR1cwAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAARc3VwcGxpZXJXaGl0ZUxpc3QFAAAAA25pbAAAAAFpAQAAAAlwdXJjaGFzZTYAAAABAAAABGl0ZW0EAAAAA3BtdAkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAMJAQAAAAlpc0RlZmluZWQAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQJAAACAAAAAQIAAAAWV0FWRVMgT05MWSBISEVVQVdIRVVBUwQAAAALdXNlckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAFcHJpY2UJAQAAABFnZXRWYWx1ZUl0ZW1QcmljZQAAAAEFAAAABGl0ZW0EAAAAD3N1cHBsaWVyQWRkcmVzcwkBAAAAFGdldFZhbHVlSXRlbVN1cHBsaWVyAAAAAQUAAAAEaXRlbQMJAABmAAAAAgUAAAAFcHJpY2UIBQAAAANwbXQAAAAGYW1vdW50CQAAAgAAAAECAAAALlB1cmNoYXNlIGFtb3VudCBjYW5ub3QgYmUgbGVzcyB0aGFuIGl0ZW0gcHJpY2UDCQAAAAAAAAIFAAAAD3N1cHBsaWVyQWRkcmVzcwUAAAAETk9ORQkAAAIAAAABAgAAABdTdXBwbGllciBkb2VzIG5vdCBleGlzdAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAFWdldEtleVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtCQAAZAAAAAIJAQAAABdnZXRWYWx1ZVVzZXJJdGVtQ291bnRlcgAAAAIFAAAAC3VzZXJBZGRyZXNzBQAAAARpdGVtAAAAAAAAAAABCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAVZ2V0S2V5QmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzCQAAZAAAAAIJAQAAABdnZXRWYWx1ZUJhbGFuY2VTdXBwbGllcgAAAAEFAAAAD3N1cHBsaWVyQWRkcmVzcwgFAAAAA3BtdAAAAAZhbW91bnQFAAAAA25pbAAAAAFpAQAAAAl3aXRoZHJhdzYAAAAABAAAAA9zdXBwbGllckFkZHJlc3MJAAJYAAAAAQgIBQAAAAFpAAAABmNhbGxlcgAAAAVieXRlcwQAAAAHYmFsYW5jZQkBAAAAF2dldFZhbHVlQmFsYW5jZVN1cHBsaWVyAAAAAQUAAAAPc3VwcGxpZXJBZGRyZXNzAwkAAGcAAAACAAAAAAAAAAAABQAAAAdiYWxhbmNlCQAAAgAAAAECAAAAE2luc3VmaWNpZW50IGJhbGFuY2UJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABVnZXRLZXlCYWxhbmNlU3VwcGxpZXIAAAABBQAAAA9zdXBwbGllckFkZHJlc3MAAAAAAAAAAAAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIp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", "height": 1626115, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 93wfZT3chPFgqEWsRDhatojaVEHpRCvcg2f1uA3sh1j Next: none Diff:
OldNewDifferences
213213 }
214214
215215
216+
217+@Callable(i)
218+func addItem2 (title,price,data) = {
219+ let supplierAddress = toBase58String(i.caller.bytes)
220+ let item = getKeyItem(supplierAddress, title)
221+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
222+ if ((0 >= price))
223+ then throw("Purchase amount cannot be less than item price")
224+ else if ((getValueItemSupplier(item) != NONE))
225+ then throw("an item already exists")
226+ else if ((supplierWhiteList == BLACKLISTED))
227+ then throw("supplier's account has been blacklisted")
228+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
229+ }
230+
231+
232+
233+@Callable(i)
234+func purchase2 (item) = {
235+ let pmt = i.payments[0]
236+ if (isDefined(pmt.assetId))
237+ then throw("WAVES ONLY HHEUAWHEUAS")
238+ else {
239+ let userAddress = toBase58String(i.caller.bytes)
240+ let price = getValueItemPrice(item)
241+ let supplierAddress = getValueItemSupplier(item)
242+ if ((price > pmt.amount))
243+ then throw("Purchase amount cannot be less than item price")
244+ else if ((supplierAddress == NONE))
245+ then throw("Supplier does not exist")
246+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
247+ }
248+ }
249+
250+
251+
252+@Callable(i)
253+func withdraw2 () = {
254+ let supplierAddress = toBase58String(i.caller.bytes)
255+ let balance = getValueBalanceSupplier(supplierAddress)
256+ if ((0 >= balance))
257+ then throw("insuficient balance")
258+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
259+ }
260+
261+
262+
263+@Callable(i)
264+func voteCommit2 (item,hash) = {
265+ let user = toBase58String(i.caller.bytes)
266+ let commits = getValueCommitsCount(item)
267+ let status = getValueItemStatus(item)
268+ if ((commits >= VOTERS))
269+ then throw("Reached max num of voters")
270+ else if ((getValueCommit(item, user) != NONE))
271+ then throw("b1")
272+ else if ((getKeyItemSupplier(item) == NONE))
273+ then throw("b2")
274+ else if (if ((status != NONE))
275+ then (status != VOTING)
276+ else false)
277+ then throw("b3")
278+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
279+ then REVEAL
280+ else VOTING)]
281+ }
282+
283+
284+
285+@Callable(i)
286+func voteReveal2 (item,vote,salt) = {
287+ let user = toBase58String(i.caller.bytes)
288+ let status = getValueItemStatus(item)
289+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
290+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
291+ then throw("Reveal data is not valid")
292+ else if ((VOTERS > getValueCommitsCount(item)))
293+ then throw("max num of voters hasnt reached yet")
294+ else if ((getValueReveal(item, user) != NONE))
295+ then throw("user has already participated")
296+ else if (if ((status != VOTING))
297+ then (status != REVEAL)
298+ else false)
299+ then throw("wrong status")
300+ else if (if ((vote != FEATURED))
301+ then (vote != DELISTED)
302+ else false)
303+ then throw("wrong vote")
304+ else if (if ((status == FEATURED))
305+ then true
306+ else (status == DELISTED))
307+ then throw("vote has finished")
308+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
309+ then vote
310+ else REVEAL)]
311+ }
312+
313+
314+
315+@Callable(i)
316+func addItem3 (title,price,data) = {
317+ let supplierAddress = toBase58String(i.caller.bytes)
318+ let item = getKeyItem(supplierAddress, title)
319+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
320+ if ((0 >= price))
321+ then throw("Purchase amount cannot be less than item price")
322+ else if ((getValueItemSupplier(item) != NONE))
323+ then throw("an item already exists")
324+ else if ((supplierWhiteList == BLACKLISTED))
325+ then throw("supplier's account has been blacklisted")
326+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
327+ }
328+
329+
330+
331+@Callable(i)
332+func purchase3 (item) = {
333+ let pmt = i.payments[0]
334+ if (isDefined(pmt.assetId))
335+ then throw("WAVES ONLY HHEUAWHEUAS")
336+ else {
337+ let userAddress = toBase58String(i.caller.bytes)
338+ let price = getValueItemPrice(item)
339+ let supplierAddress = getValueItemSupplier(item)
340+ if ((price > pmt.amount))
341+ then throw("Purchase amount cannot be less than item price")
342+ else if ((supplierAddress == NONE))
343+ then throw("Supplier does not exist")
344+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
345+ }
346+ }
347+
348+
349+
350+@Callable(i)
351+func withdraw3 () = {
352+ let supplierAddress = toBase58String(i.caller.bytes)
353+ let balance = getValueBalanceSupplier(supplierAddress)
354+ if ((0 >= balance))
355+ then throw("insuficient balance")
356+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
357+ }
358+
359+
360+
361+@Callable(i)
362+func voteCommit3 (item,hash) = {
363+ let user = toBase58String(i.caller.bytes)
364+ let commits = getValueCommitsCount(item)
365+ let status = getValueItemStatus(item)
366+ if ((commits >= VOTERS))
367+ then throw("Reached max num of voters")
368+ else if ((getValueCommit(item, user) != NONE))
369+ then throw("b1")
370+ else if ((getKeyItemSupplier(item) == NONE))
371+ then throw("b2")
372+ else if (if ((status != NONE))
373+ then (status != VOTING)
374+ else false)
375+ then throw("b3")
376+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
377+ then REVEAL
378+ else VOTING)]
379+ }
380+
381+
382+
383+@Callable(i)
384+func voteReveal3 (item,vote,salt) = {
385+ let user = toBase58String(i.caller.bytes)
386+ let status = getValueItemStatus(item)
387+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
388+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
389+ then throw("Reveal data is not valid")
390+ else if ((VOTERS > getValueCommitsCount(item)))
391+ then throw("max num of voters hasnt reached yet")
392+ else if ((getValueReveal(item, user) != NONE))
393+ then throw("user has already participated")
394+ else if (if ((status != VOTING))
395+ then (status != REVEAL)
396+ else false)
397+ then throw("wrong status")
398+ else if (if ((vote != FEATURED))
399+ then (vote != DELISTED)
400+ else false)
401+ then throw("wrong vote")
402+ else if (if ((status == FEATURED))
403+ then true
404+ else (status == DELISTED))
405+ then throw("vote has finished")
406+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
407+ then vote
408+ else REVEAL)]
409+ }
410+
411+
412+
413+@Callable(i)
414+func addItem4 (title,price,data) = {
415+ let supplierAddress = toBase58String(i.caller.bytes)
416+ let item = getKeyItem(supplierAddress, title)
417+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
418+ if ((0 >= price))
419+ then throw("Purchase amount cannot be less than item price")
420+ else if ((getValueItemSupplier(item) != NONE))
421+ then throw("an item already exists")
422+ else if ((supplierWhiteList == BLACKLISTED))
423+ then throw("supplier's account has been blacklisted")
424+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
425+ }
426+
427+
428+
429+@Callable(i)
430+func purchase4 (item) = {
431+ let pmt = i.payments[0]
432+ if (isDefined(pmt.assetId))
433+ then throw("WAVES ONLY HHEUAWHEUAS")
434+ else {
435+ let userAddress = toBase58String(i.caller.bytes)
436+ let price = getValueItemPrice(item)
437+ let supplierAddress = getValueItemSupplier(item)
438+ if ((price > pmt.amount))
439+ then throw("Purchase amount cannot be less than item price")
440+ else if ((supplierAddress == NONE))
441+ then throw("Supplier does not exist")
442+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
443+ }
444+ }
445+
446+
447+
448+@Callable(i)
449+func withdraw4 () = {
450+ let supplierAddress = toBase58String(i.caller.bytes)
451+ let balance = getValueBalanceSupplier(supplierAddress)
452+ if ((0 >= balance))
453+ then throw("insuficient balance")
454+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
455+ }
456+
457+
458+
459+@Callable(i)
460+func voteCommit4 (item,hash) = {
461+ let user = toBase58String(i.caller.bytes)
462+ let commits = getValueCommitsCount(item)
463+ let status = getValueItemStatus(item)
464+ if ((commits >= VOTERS))
465+ then throw("Reached max num of voters")
466+ else if ((getValueCommit(item, user) != NONE))
467+ then throw("b1")
468+ else if ((getKeyItemSupplier(item) == NONE))
469+ then throw("b2")
470+ else if (if ((status != NONE))
471+ then (status != VOTING)
472+ else false)
473+ then throw("b3")
474+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
475+ then REVEAL
476+ else VOTING)]
477+ }
478+
479+
480+
481+@Callable(i)
482+func voteReveal4 (item,vote,salt) = {
483+ let user = toBase58String(i.caller.bytes)
484+ let status = getValueItemStatus(item)
485+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
486+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
487+ then throw("Reveal data is not valid")
488+ else if ((VOTERS > getValueCommitsCount(item)))
489+ then throw("max num of voters hasnt reached yet")
490+ else if ((getValueReveal(item, user) != NONE))
491+ then throw("user has already participated")
492+ else if (if ((status != VOTING))
493+ then (status != REVEAL)
494+ else false)
495+ then throw("wrong status")
496+ else if (if ((vote != FEATURED))
497+ then (vote != DELISTED)
498+ else false)
499+ then throw("wrong vote")
500+ else if (if ((status == FEATURED))
501+ then true
502+ else (status == DELISTED))
503+ then throw("vote has finished")
504+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
505+ then vote
506+ else REVEAL)]
507+ }
508+
509+
510+
511+@Callable(i)
512+func addItem5 (title,price,data) = {
513+ let supplierAddress = toBase58String(i.caller.bytes)
514+ let item = getKeyItem(supplierAddress, title)
515+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
516+ if ((0 >= price))
517+ then throw("Purchase amount cannot be less than item price")
518+ else if ((getValueItemSupplier(item) != NONE))
519+ then throw("an item already exists")
520+ else if ((supplierWhiteList == BLACKLISTED))
521+ then throw("supplier's account has been blacklisted")
522+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
523+ }
524+
525+
526+
527+@Callable(i)
528+func purchase5 (item) = {
529+ let pmt = i.payments[0]
530+ if (isDefined(pmt.assetId))
531+ then throw("WAVES ONLY HHEUAWHEUAS")
532+ else {
533+ let userAddress = toBase58String(i.caller.bytes)
534+ let price = getValueItemPrice(item)
535+ let supplierAddress = getValueItemSupplier(item)
536+ if ((price > pmt.amount))
537+ then throw("Purchase amount cannot be less than item price")
538+ else if ((supplierAddress == NONE))
539+ then throw("Supplier does not exist")
540+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
541+ }
542+ }
543+
544+
545+
546+@Callable(i)
547+func withdraw5 () = {
548+ let supplierAddress = toBase58String(i.caller.bytes)
549+ let balance = getValueBalanceSupplier(supplierAddress)
550+ if ((0 >= balance))
551+ then throw("insuficient balance")
552+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
553+ }
554+
555+
556+
557+@Callable(i)
558+func voteCommit5 (item,hash) = {
559+ let user = toBase58String(i.caller.bytes)
560+ let commits = getValueCommitsCount(item)
561+ let status = getValueItemStatus(item)
562+ if ((commits >= VOTERS))
563+ then throw("Reached max num of voters")
564+ else if ((getValueCommit(item, user) != NONE))
565+ then throw("b1")
566+ else if ((getKeyItemSupplier(item) == NONE))
567+ then throw("b2")
568+ else if (if ((status != NONE))
569+ then (status != VOTING)
570+ else false)
571+ then throw("b3")
572+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
573+ then REVEAL
574+ else VOTING)]
575+ }
576+
577+
578+
579+@Callable(i)
580+func voteReveal5 (item,vote,salt) = {
581+ let user = toBase58String(i.caller.bytes)
582+ let status = getValueItemStatus(item)
583+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
584+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
585+ then throw("Reveal data is not valid")
586+ else if ((VOTERS > getValueCommitsCount(item)))
587+ then throw("max num of voters hasnt reached yet")
588+ else if ((getValueReveal(item, user) != NONE))
589+ then throw("user has already participated")
590+ else if (if ((status != VOTING))
591+ then (status != REVEAL)
592+ else false)
593+ then throw("wrong status")
594+ else if (if ((vote != FEATURED))
595+ then (vote != DELISTED)
596+ else false)
597+ then throw("wrong vote")
598+ else if (if ((status == FEATURED))
599+ then true
600+ else (status == DELISTED))
601+ then throw("vote has finished")
602+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
603+ then vote
604+ else REVEAL)]
605+ }
606+
607+
608+
609+@Callable(i)
610+func addItem6 (title,price,data) = {
611+ let supplierAddress = toBase58String(i.caller.bytes)
612+ let item = getKeyItem(supplierAddress, title)
613+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
614+ if ((0 >= price))
615+ then throw("Purchase amount cannot be less than item price")
616+ else if ((getValueItemSupplier(item) != NONE))
617+ then throw("an item already exists")
618+ else if ((supplierWhiteList == BLACKLISTED))
619+ then throw("supplier's account has been blacklisted")
620+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
621+ }
622+
623+
624+
625+@Callable(i)
626+func purchase6 (item) = {
627+ let pmt = i.payments[0]
628+ if (isDefined(pmt.assetId))
629+ then throw("WAVES ONLY HHEUAWHEUAS")
630+ else {
631+ let userAddress = toBase58String(i.caller.bytes)
632+ let price = getValueItemPrice(item)
633+ let supplierAddress = getValueItemSupplier(item)
634+ if ((price > pmt.amount))
635+ then throw("Purchase amount cannot be less than item price")
636+ else if ((supplierAddress == NONE))
637+ then throw("Supplier does not exist")
638+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
639+ }
640+ }
641+
642+
643+
644+@Callable(i)
645+func withdraw6 () = {
646+ let supplierAddress = toBase58String(i.caller.bytes)
647+ let balance = getValueBalanceSupplier(supplierAddress)
648+ if ((0 >= balance))
649+ then throw("insuficient balance")
650+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
651+ }
652+
653+
654+
655+@Callable(i)
656+func voteCommit6 (item,hash) = {
657+ let user = toBase58String(i.caller.bytes)
658+ let commits = getValueCommitsCount(item)
659+ let status = getValueItemStatus(item)
660+ if ((commits >= VOTERS))
661+ then throw("Reached max num of voters")
662+ else if ((getValueCommit(item, user) != NONE))
663+ then throw("b1")
664+ else if ((getKeyItemSupplier(item) == NONE))
665+ then throw("b2")
666+ else if (if ((status != NONE))
667+ then (status != VOTING)
668+ else false)
669+ then throw("b3")
670+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
671+ then REVEAL
672+ else VOTING)]
673+ }
674+
675+
676+
677+@Callable(i)
678+func voteReveal6 (item,vote,salt) = {
679+ let user = toBase58String(i.caller.bytes)
680+ let status = getValueItemStatus(item)
681+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
682+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
683+ then throw("Reveal data is not valid")
684+ else if ((VOTERS > getValueCommitsCount(item)))
685+ then throw("max num of voters hasnt reached yet")
686+ else if ((getValueReveal(item, user) != NONE))
687+ then throw("user has already participated")
688+ else if (if ((status != VOTING))
689+ then (status != REVEAL)
690+ else false)
691+ then throw("wrong status")
692+ else if (if ((vote != FEATURED))
693+ then (vote != DELISTED)
694+ else false)
695+ then throw("wrong vote")
696+ else if (if ((status == FEATURED))
697+ then true
698+ else (status == DELISTED))
699+ then throw("vote has finished")
700+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
701+ then vote
702+ else REVEAL)]
703+ }
704+
705+
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 5 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let NONE = "none"
55
66 func getNumberByKey (key) = {
77 let num = match getInteger(this, key) {
88 case a: Int =>
99 a
1010 case _ =>
1111 0
1212 }
1313 num
1414 }
1515
1616
1717 func getStrByKey (key) = {
1818 let str = match getString(this, key) {
1919 case a: String =>
2020 a
2121 case _ =>
2222 NONE
2323 }
2424 str
2525 }
2626
2727
2828 func getKeyItemPrice (item) = (item + "_price")
2929
3030
3131 func getValueItemPrice (item) = getNumberByKey(getKeyItemPrice(item))
3232
3333
3434 func getKeyUserItemCounter (user,item) = (((item + "_") + user) + "_cnt")
3535
3636
3737 func getValueUserItemCounter (user,item) = getNumberByKey(getKeyUserItemCounter(user, item))
3838
3939
4040 func getKeyItem (supplier,title) = ("item_" + toBase58String(sha256(toBytes((supplier + title)))))
4141
4242
4343 func getKeyItemData (item) = (item + "_data")
4444
4545
4646 func getKeyItemSupplier (item) = (item + "_owner")
4747
4848
4949 func getValueItemSupplier (item) = getStrByKey(getKeyItemSupplier(item))
5050
5151
5252 func getKeyBalanceSupplier (account) = (account + "_balance")
5353
5454
5555 func getValueBalanceSupplier (account) = getNumberByKey(getKeyBalanceSupplier(account))
5656
5757
5858 let VOTERS = 3
5959
6060 let QUORUM = 2
6161
6262 let VOTING = "voting"
6363
6464 let REVEAL = "reveal"
6565
6666 let FEATURED = "featured"
6767
6868 let DELISTED = "delisted"
6969
7070 func getKeyCommit (item,user) = (((item + "_") + user) + "_commit")
7171
7272
7373 func getValueCommit (item,user) = getStrByKey(getKeyCommit(item, user))
7474
7575
7676 func getKeyCommitsCount (item) = (item + "_comcnt")
7777
7878
7979 func getValueCommitsCount (item) = getNumberByKey(getKeyCommitsCount(item))
8080
8181
8282 func getKeyReveal (item,user) = (((item + "_") + user) + "_reveal")
8383
8484
8585 func getValueReveal (item,user) = getStrByKey(getKeyReveal(item, user))
8686
8787
8888 func getKeyItemStatus (item) = (item + "_status")
8989
9090
9191 func getValueItemStatus (item) = getStrByKey(getKeyItemStatus(item))
9292
9393
9494 func getKeyVoteCount (item,vote) = ((item + "_res:") + vote)
9595
9696
9797 func getValueVoteCount (item,vote) = getNumberByKey(getKeyVoteCount(item, vote))
9898
9999
100100 func getExtAddressOracle () = value(addressFromString("3MsbiyFyy8B3aN3kF8ntda474SPn4YMVkiq"))
101101
102102
103103 let BLACKLISTED = "blacklist"
104104
105105 func getExtKeyItemWhiteListStatus (account) = (account + "_verifier_status")
106106
107107
108108 func getExtValueItemWhiteListStatus (oracle,account) = {
109109 let str = match getString(oracle, getExtKeyItemWhiteListStatus(account)) {
110110 case a: String =>
111111 a
112112 case _ =>
113113 NONE
114114 }
115115 str
116116 }
117117
118118
119119 @Callable(i)
120120 func addItem (title,price,data) = {
121121 let supplierAddress = toBase58String(i.caller.bytes)
122122 let item = getKeyItem(supplierAddress, title)
123123 let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
124124 if ((0 >= price))
125125 then throw("Purchase amount cannot be less than item price")
126126 else if ((getValueItemSupplier(item) != NONE))
127127 then throw("an item already exists")
128128 else if ((supplierWhiteList == BLACKLISTED))
129129 then throw("supplier's account has been blacklisted")
130130 else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
131131 }
132132
133133
134134
135135 @Callable(i)
136136 func purchase (item) = {
137137 let pmt = i.payments[0]
138138 if (isDefined(pmt.assetId))
139139 then throw("WAVES ONLY HHEUAWHEUAS")
140140 else {
141141 let userAddress = toBase58String(i.caller.bytes)
142142 let price = getValueItemPrice(item)
143143 let supplierAddress = getValueItemSupplier(item)
144144 if ((price > pmt.amount))
145145 then throw("Purchase amount cannot be less than item price")
146146 else if ((supplierAddress == NONE))
147147 then throw("Supplier does not exist")
148148 else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
149149 }
150150 }
151151
152152
153153
154154 @Callable(i)
155155 func withdraw () = {
156156 let supplierAddress = toBase58String(i.caller.bytes)
157157 let balance = getValueBalanceSupplier(supplierAddress)
158158 if ((0 >= balance))
159159 then throw("insuficient balance")
160160 else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
161161 }
162162
163163
164164
165165 @Callable(i)
166166 func voteCommit (item,hash) = {
167167 let user = toBase58String(i.caller.bytes)
168168 let commits = getValueCommitsCount(item)
169169 let status = getValueItemStatus(item)
170170 if ((commits >= VOTERS))
171171 then throw("Reached max num of voters")
172172 else if ((getValueCommit(item, user) != NONE))
173173 then throw("b1")
174174 else if ((getKeyItemSupplier(item) == NONE))
175175 then throw("b2")
176176 else if (if ((status != NONE))
177177 then (status != VOTING)
178178 else false)
179179 then throw("b3")
180180 else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
181181 then REVEAL
182182 else VOTING)]
183183 }
184184
185185
186186
187187 @Callable(i)
188188 func voteReveal (item,vote,salt) = {
189189 let user = toBase58String(i.caller.bytes)
190190 let status = getValueItemStatus(item)
191191 let newVoteCount = (getValueVoteCount(item, vote) + 1)
192192 if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
193193 then throw("Reveal data is not valid")
194194 else if ((VOTERS > getValueCommitsCount(item)))
195195 then throw("max num of voters hasnt reached yet")
196196 else if ((getValueReveal(item, user) != NONE))
197197 then throw("user has already participated")
198198 else if (if ((status != VOTING))
199199 then (status != REVEAL)
200200 else false)
201201 then throw("wrong status")
202202 else if (if ((vote != FEATURED))
203203 then (vote != DELISTED)
204204 else false)
205205 then throw("wrong vote")
206206 else if (if ((status == FEATURED))
207207 then true
208208 else (status == DELISTED))
209209 then throw("vote has finished")
210210 else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
211211 then vote
212212 else REVEAL)]
213213 }
214214
215215
216+
217+@Callable(i)
218+func addItem2 (title,price,data) = {
219+ let supplierAddress = toBase58String(i.caller.bytes)
220+ let item = getKeyItem(supplierAddress, title)
221+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
222+ if ((0 >= price))
223+ then throw("Purchase amount cannot be less than item price")
224+ else if ((getValueItemSupplier(item) != NONE))
225+ then throw("an item already exists")
226+ else if ((supplierWhiteList == BLACKLISTED))
227+ then throw("supplier's account has been blacklisted")
228+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
229+ }
230+
231+
232+
233+@Callable(i)
234+func purchase2 (item) = {
235+ let pmt = i.payments[0]
236+ if (isDefined(pmt.assetId))
237+ then throw("WAVES ONLY HHEUAWHEUAS")
238+ else {
239+ let userAddress = toBase58String(i.caller.bytes)
240+ let price = getValueItemPrice(item)
241+ let supplierAddress = getValueItemSupplier(item)
242+ if ((price > pmt.amount))
243+ then throw("Purchase amount cannot be less than item price")
244+ else if ((supplierAddress == NONE))
245+ then throw("Supplier does not exist")
246+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
247+ }
248+ }
249+
250+
251+
252+@Callable(i)
253+func withdraw2 () = {
254+ let supplierAddress = toBase58String(i.caller.bytes)
255+ let balance = getValueBalanceSupplier(supplierAddress)
256+ if ((0 >= balance))
257+ then throw("insuficient balance")
258+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
259+ }
260+
261+
262+
263+@Callable(i)
264+func voteCommit2 (item,hash) = {
265+ let user = toBase58String(i.caller.bytes)
266+ let commits = getValueCommitsCount(item)
267+ let status = getValueItemStatus(item)
268+ if ((commits >= VOTERS))
269+ then throw("Reached max num of voters")
270+ else if ((getValueCommit(item, user) != NONE))
271+ then throw("b1")
272+ else if ((getKeyItemSupplier(item) == NONE))
273+ then throw("b2")
274+ else if (if ((status != NONE))
275+ then (status != VOTING)
276+ else false)
277+ then throw("b3")
278+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
279+ then REVEAL
280+ else VOTING)]
281+ }
282+
283+
284+
285+@Callable(i)
286+func voteReveal2 (item,vote,salt) = {
287+ let user = toBase58String(i.caller.bytes)
288+ let status = getValueItemStatus(item)
289+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
290+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
291+ then throw("Reveal data is not valid")
292+ else if ((VOTERS > getValueCommitsCount(item)))
293+ then throw("max num of voters hasnt reached yet")
294+ else if ((getValueReveal(item, user) != NONE))
295+ then throw("user has already participated")
296+ else if (if ((status != VOTING))
297+ then (status != REVEAL)
298+ else false)
299+ then throw("wrong status")
300+ else if (if ((vote != FEATURED))
301+ then (vote != DELISTED)
302+ else false)
303+ then throw("wrong vote")
304+ else if (if ((status == FEATURED))
305+ then true
306+ else (status == DELISTED))
307+ then throw("vote has finished")
308+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
309+ then vote
310+ else REVEAL)]
311+ }
312+
313+
314+
315+@Callable(i)
316+func addItem3 (title,price,data) = {
317+ let supplierAddress = toBase58String(i.caller.bytes)
318+ let item = getKeyItem(supplierAddress, title)
319+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
320+ if ((0 >= price))
321+ then throw("Purchase amount cannot be less than item price")
322+ else if ((getValueItemSupplier(item) != NONE))
323+ then throw("an item already exists")
324+ else if ((supplierWhiteList == BLACKLISTED))
325+ then throw("supplier's account has been blacklisted")
326+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
327+ }
328+
329+
330+
331+@Callable(i)
332+func purchase3 (item) = {
333+ let pmt = i.payments[0]
334+ if (isDefined(pmt.assetId))
335+ then throw("WAVES ONLY HHEUAWHEUAS")
336+ else {
337+ let userAddress = toBase58String(i.caller.bytes)
338+ let price = getValueItemPrice(item)
339+ let supplierAddress = getValueItemSupplier(item)
340+ if ((price > pmt.amount))
341+ then throw("Purchase amount cannot be less than item price")
342+ else if ((supplierAddress == NONE))
343+ then throw("Supplier does not exist")
344+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
345+ }
346+ }
347+
348+
349+
350+@Callable(i)
351+func withdraw3 () = {
352+ let supplierAddress = toBase58String(i.caller.bytes)
353+ let balance = getValueBalanceSupplier(supplierAddress)
354+ if ((0 >= balance))
355+ then throw("insuficient balance")
356+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
357+ }
358+
359+
360+
361+@Callable(i)
362+func voteCommit3 (item,hash) = {
363+ let user = toBase58String(i.caller.bytes)
364+ let commits = getValueCommitsCount(item)
365+ let status = getValueItemStatus(item)
366+ if ((commits >= VOTERS))
367+ then throw("Reached max num of voters")
368+ else if ((getValueCommit(item, user) != NONE))
369+ then throw("b1")
370+ else if ((getKeyItemSupplier(item) == NONE))
371+ then throw("b2")
372+ else if (if ((status != NONE))
373+ then (status != VOTING)
374+ else false)
375+ then throw("b3")
376+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
377+ then REVEAL
378+ else VOTING)]
379+ }
380+
381+
382+
383+@Callable(i)
384+func voteReveal3 (item,vote,salt) = {
385+ let user = toBase58String(i.caller.bytes)
386+ let status = getValueItemStatus(item)
387+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
388+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
389+ then throw("Reveal data is not valid")
390+ else if ((VOTERS > getValueCommitsCount(item)))
391+ then throw("max num of voters hasnt reached yet")
392+ else if ((getValueReveal(item, user) != NONE))
393+ then throw("user has already participated")
394+ else if (if ((status != VOTING))
395+ then (status != REVEAL)
396+ else false)
397+ then throw("wrong status")
398+ else if (if ((vote != FEATURED))
399+ then (vote != DELISTED)
400+ else false)
401+ then throw("wrong vote")
402+ else if (if ((status == FEATURED))
403+ then true
404+ else (status == DELISTED))
405+ then throw("vote has finished")
406+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
407+ then vote
408+ else REVEAL)]
409+ }
410+
411+
412+
413+@Callable(i)
414+func addItem4 (title,price,data) = {
415+ let supplierAddress = toBase58String(i.caller.bytes)
416+ let item = getKeyItem(supplierAddress, title)
417+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
418+ if ((0 >= price))
419+ then throw("Purchase amount cannot be less than item price")
420+ else if ((getValueItemSupplier(item) != NONE))
421+ then throw("an item already exists")
422+ else if ((supplierWhiteList == BLACKLISTED))
423+ then throw("supplier's account has been blacklisted")
424+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
425+ }
426+
427+
428+
429+@Callable(i)
430+func purchase4 (item) = {
431+ let pmt = i.payments[0]
432+ if (isDefined(pmt.assetId))
433+ then throw("WAVES ONLY HHEUAWHEUAS")
434+ else {
435+ let userAddress = toBase58String(i.caller.bytes)
436+ let price = getValueItemPrice(item)
437+ let supplierAddress = getValueItemSupplier(item)
438+ if ((price > pmt.amount))
439+ then throw("Purchase amount cannot be less than item price")
440+ else if ((supplierAddress == NONE))
441+ then throw("Supplier does not exist")
442+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
443+ }
444+ }
445+
446+
447+
448+@Callable(i)
449+func withdraw4 () = {
450+ let supplierAddress = toBase58String(i.caller.bytes)
451+ let balance = getValueBalanceSupplier(supplierAddress)
452+ if ((0 >= balance))
453+ then throw("insuficient balance")
454+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
455+ }
456+
457+
458+
459+@Callable(i)
460+func voteCommit4 (item,hash) = {
461+ let user = toBase58String(i.caller.bytes)
462+ let commits = getValueCommitsCount(item)
463+ let status = getValueItemStatus(item)
464+ if ((commits >= VOTERS))
465+ then throw("Reached max num of voters")
466+ else if ((getValueCommit(item, user) != NONE))
467+ then throw("b1")
468+ else if ((getKeyItemSupplier(item) == NONE))
469+ then throw("b2")
470+ else if (if ((status != NONE))
471+ then (status != VOTING)
472+ else false)
473+ then throw("b3")
474+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
475+ then REVEAL
476+ else VOTING)]
477+ }
478+
479+
480+
481+@Callable(i)
482+func voteReveal4 (item,vote,salt) = {
483+ let user = toBase58String(i.caller.bytes)
484+ let status = getValueItemStatus(item)
485+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
486+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
487+ then throw("Reveal data is not valid")
488+ else if ((VOTERS > getValueCommitsCount(item)))
489+ then throw("max num of voters hasnt reached yet")
490+ else if ((getValueReveal(item, user) != NONE))
491+ then throw("user has already participated")
492+ else if (if ((status != VOTING))
493+ then (status != REVEAL)
494+ else false)
495+ then throw("wrong status")
496+ else if (if ((vote != FEATURED))
497+ then (vote != DELISTED)
498+ else false)
499+ then throw("wrong vote")
500+ else if (if ((status == FEATURED))
501+ then true
502+ else (status == DELISTED))
503+ then throw("vote has finished")
504+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
505+ then vote
506+ else REVEAL)]
507+ }
508+
509+
510+
511+@Callable(i)
512+func addItem5 (title,price,data) = {
513+ let supplierAddress = toBase58String(i.caller.bytes)
514+ let item = getKeyItem(supplierAddress, title)
515+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
516+ if ((0 >= price))
517+ then throw("Purchase amount cannot be less than item price")
518+ else if ((getValueItemSupplier(item) != NONE))
519+ then throw("an item already exists")
520+ else if ((supplierWhiteList == BLACKLISTED))
521+ then throw("supplier's account has been blacklisted")
522+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
523+ }
524+
525+
526+
527+@Callable(i)
528+func purchase5 (item) = {
529+ let pmt = i.payments[0]
530+ if (isDefined(pmt.assetId))
531+ then throw("WAVES ONLY HHEUAWHEUAS")
532+ else {
533+ let userAddress = toBase58String(i.caller.bytes)
534+ let price = getValueItemPrice(item)
535+ let supplierAddress = getValueItemSupplier(item)
536+ if ((price > pmt.amount))
537+ then throw("Purchase amount cannot be less than item price")
538+ else if ((supplierAddress == NONE))
539+ then throw("Supplier does not exist")
540+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
541+ }
542+ }
543+
544+
545+
546+@Callable(i)
547+func withdraw5 () = {
548+ let supplierAddress = toBase58String(i.caller.bytes)
549+ let balance = getValueBalanceSupplier(supplierAddress)
550+ if ((0 >= balance))
551+ then throw("insuficient balance")
552+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
553+ }
554+
555+
556+
557+@Callable(i)
558+func voteCommit5 (item,hash) = {
559+ let user = toBase58String(i.caller.bytes)
560+ let commits = getValueCommitsCount(item)
561+ let status = getValueItemStatus(item)
562+ if ((commits >= VOTERS))
563+ then throw("Reached max num of voters")
564+ else if ((getValueCommit(item, user) != NONE))
565+ then throw("b1")
566+ else if ((getKeyItemSupplier(item) == NONE))
567+ then throw("b2")
568+ else if (if ((status != NONE))
569+ then (status != VOTING)
570+ else false)
571+ then throw("b3")
572+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
573+ then REVEAL
574+ else VOTING)]
575+ }
576+
577+
578+
579+@Callable(i)
580+func voteReveal5 (item,vote,salt) = {
581+ let user = toBase58String(i.caller.bytes)
582+ let status = getValueItemStatus(item)
583+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
584+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
585+ then throw("Reveal data is not valid")
586+ else if ((VOTERS > getValueCommitsCount(item)))
587+ then throw("max num of voters hasnt reached yet")
588+ else if ((getValueReveal(item, user) != NONE))
589+ then throw("user has already participated")
590+ else if (if ((status != VOTING))
591+ then (status != REVEAL)
592+ else false)
593+ then throw("wrong status")
594+ else if (if ((vote != FEATURED))
595+ then (vote != DELISTED)
596+ else false)
597+ then throw("wrong vote")
598+ else if (if ((status == FEATURED))
599+ then true
600+ else (status == DELISTED))
601+ then throw("vote has finished")
602+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
603+ then vote
604+ else REVEAL)]
605+ }
606+
607+
608+
609+@Callable(i)
610+func addItem6 (title,price,data) = {
611+ let supplierAddress = toBase58String(i.caller.bytes)
612+ let item = getKeyItem(supplierAddress, title)
613+ let supplierWhiteList = getExtValueItemWhiteListStatus(getExtAddressOracle(), supplierAddress)
614+ if ((0 >= price))
615+ then throw("Purchase amount cannot be less than item price")
616+ else if ((getValueItemSupplier(item) != NONE))
617+ then throw("an item already exists")
618+ else if ((supplierWhiteList == BLACKLISTED))
619+ then throw("supplier's account has been blacklisted")
620+ else [StringEntry(getKeyItemSupplier(item), supplierAddress), IntegerEntry(getKeyItemPrice(item), price), StringEntry(getKeyItemData(item), data), StringEntry(getExtKeyItemWhiteListStatus(supplierAddress), supplierWhiteList)]
621+ }
622+
623+
624+
625+@Callable(i)
626+func purchase6 (item) = {
627+ let pmt = i.payments[0]
628+ if (isDefined(pmt.assetId))
629+ then throw("WAVES ONLY HHEUAWHEUAS")
630+ else {
631+ let userAddress = toBase58String(i.caller.bytes)
632+ let price = getValueItemPrice(item)
633+ let supplierAddress = getValueItemSupplier(item)
634+ if ((price > pmt.amount))
635+ then throw("Purchase amount cannot be less than item price")
636+ else if ((supplierAddress == NONE))
637+ then throw("Supplier does not exist")
638+ else [IntegerEntry(getKeyUserItemCounter(userAddress, item), (getValueUserItemCounter(userAddress, item) + 1)), IntegerEntry(getKeyBalanceSupplier(supplierAddress), (getValueBalanceSupplier(supplierAddress) + pmt.amount))]
639+ }
640+ }
641+
642+
643+
644+@Callable(i)
645+func withdraw6 () = {
646+ let supplierAddress = toBase58String(i.caller.bytes)
647+ let balance = getValueBalanceSupplier(supplierAddress)
648+ if ((0 >= balance))
649+ then throw("insuficient balance")
650+ else [IntegerEntry(getKeyBalanceSupplier(supplierAddress), 0), ScriptTransfer(addressFromStringValue(supplierAddress), balance, unit)]
651+ }
652+
653+
654+
655+@Callable(i)
656+func voteCommit6 (item,hash) = {
657+ let user = toBase58String(i.caller.bytes)
658+ let commits = getValueCommitsCount(item)
659+ let status = getValueItemStatus(item)
660+ if ((commits >= VOTERS))
661+ then throw("Reached max num of voters")
662+ else if ((getValueCommit(item, user) != NONE))
663+ then throw("b1")
664+ else if ((getKeyItemSupplier(item) == NONE))
665+ then throw("b2")
666+ else if (if ((status != NONE))
667+ then (status != VOTING)
668+ else false)
669+ then throw("b3")
670+ else [StringEntry(getKeyCommit(item, user), hash), IntegerEntry(getKeyCommitsCount(item), (commits + 1)), StringEntry(getKeyItemStatus(item), if ((commits == VOTERS))
671+ then REVEAL
672+ else VOTING)]
673+ }
674+
675+
676+
677+@Callable(i)
678+func voteReveal6 (item,vote,salt) = {
679+ let user = toBase58String(i.caller.bytes)
680+ let status = getValueItemStatus(item)
681+ let newVoteCount = (getValueVoteCount(item, vote) + 1)
682+ if ((toBase58String(sha256(toBytes((vote + salt)))) != getValueCommit(item, user)))
683+ then throw("Reveal data is not valid")
684+ else if ((VOTERS > getValueCommitsCount(item)))
685+ then throw("max num of voters hasnt reached yet")
686+ else if ((getValueReveal(item, user) != NONE))
687+ then throw("user has already participated")
688+ else if (if ((status != VOTING))
689+ then (status != REVEAL)
690+ else false)
691+ then throw("wrong status")
692+ else if (if ((vote != FEATURED))
693+ then (vote != DELISTED)
694+ else false)
695+ then throw("wrong vote")
696+ else if (if ((status == FEATURED))
697+ then true
698+ else (status == DELISTED))
699+ then throw("vote has finished")
700+ else [StringEntry(getKeyReveal(item, user), vote), IntegerEntry(getKeyVoteCount(item, vote), newVoteCount), StringEntry(getKeyItemStatus(item), if ((newVoteCount >= QUORUM))
701+ then vote
702+ else REVEAL)]
703+ }
704+
705+

github/deemru/w8io/169f3d6 
62.82 ms