tx · 93JCaHiMe8d3iUnAkzqD2ThmDqzwA16MmdTgZY851yti

3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY:  -0.02500000 Waves

2023.01.20 08:39 [2412864] smart account 3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY > SELF 0.00000000 Waves

{ "type": 13, "id": "93JCaHiMe8d3iUnAkzqD2ThmDqzwA16MmdTgZY851yti", "fee": 2500000, "feeAssetId": null, "timestamp": 1674193257572, "version": 2, "chainId": 84, "sender": "3NBynfbXC2KastUxhukcMUaE58K9cBdB9UY", "senderPublicKey": "J9DCtJJxJBWZdtDR12BA1U94Q3cZzMi4R6k5hYkAzmzC", "proofs": [ "3oWDb6DZwdSCwrqdqhNF3iEu1zm3VoDGkz6a2QCHMWhFW7iXFrceb8PzTopHVVCqtFmuVZvFMs613VjK7bA2AGQd" ], "script": "base64:BgJfCAISBAoCCAgSEAoOCAgICAgICAgICAgIAQgSDwoNCAgICAgICAgICAgBCBIGCgQICAgIEgQKAggIEggKBggBAQgBCBIECgIICBIECgIICBIGCgQICAgIEgYKBAgICAhOAAdWRVJTSU9OAgYxLjEuMTABDmdldFN0cmluZ0J5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUDa2V5AgAACHVuaXRUZXN0BwAJb3JhY2xlRmVlCQEFdmFsdWUBCQCmCAEJAQ5nZXRTdHJpbmdCeUtleQECD2NvbmZfb3JhY2xlX2ZlZQAIc2lnbkRhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQIRY29uZl9zaWdud2ViX2RhcHAAC2ZlZVJlY2VpdmVyCQEOZ2V0U3RyaW5nQnlLZXkBAhFjb25mX2ZlZV9yZWNlaXZlcgAIdXNlckRhcHADBQh1bml0VGVzdAkBBXZhbHVlAQkApggBAiMzTXQ0UkdNRXlqU1dZQW9jVFBxZDU1d2RIUVFCM1BVMlVDbQkBBXZhbHVlAQkApggBCQEOZ2V0U3RyaW5nQnlLZXkBAg9jb25mX3VzZXJzX2RhcHAADXdoaXRlbGlzdERhcHAJAQV2YWx1ZQEJAKYIAQkBDmdldFN0cmluZ0J5S2V5AQITY29uZl93aGl0ZWxpc3RfZGFwcAALc2lnbkFzc2V0SWQJANkEAQkBDmdldFN0cmluZ0J5S2V5AQIYY29uZl9hY2NlcHRlZF9hc3NldF9TSUdOAAt1c2RuQXNzZXRJZAkA2QQBCQEOZ2V0U3RyaW5nQnlLZXkBAhhjb25mX2FjY2VwdGVkX2Fzc2V0X1VTRE4AC3VzZHRBc3NldElkCQDZBAEJAQ5nZXRTdHJpbmdCeUtleQECGGNvbmZfYWNjZXB0ZWRfYXNzZXRfVVNEVAAMd2F2ZXNBc3NldElkAQAABWNocmlzCQEOZ2V0U3RyaW5nQnlLZXkBAgxjb25mX2FkbWluXzEBGWdldEludGVnZXJCeUtleUZyb21PcmFjbGUBA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFCW9yYWNsZUZlZQUDa2V5Ah9JbnRlZ2VyIHVuZGVmaW5lIG9yIDAgaW4gb3JhY2xlAQ9nZXRJbnRlZ2VyQnlLZXkBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkAAAEOY2hlY2tXaGl0ZWxpc3QBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQ13aGl0ZWxpc3REYXBwBQNrZXkAAAEPZ2V0Qm9vbGVhbkJ5S2V5AQNrZXkJAQt2YWx1ZU9yRWxzZQIJAJsIAgUEdGhpcwUDa2V5BwAHc2lnbkN1dAAHAAt1c2RuV2F2ZUN1dAAKAA5kZWZhdWx0TGljZW5jZQkBDmdldFN0cmluZ0J5S2V5AQIUY29uZl9kZWZhdWx0X2xpY2VuY2UAEmRlZmF1bHRIYXNoTGljZW5jZQkBDmdldFN0cmluZ0J5S2V5AQIZY29uZl9kZWZhdWx0X2xpY2VuY2VfaGFzaAALZGFwcFJ1bm5pbmcJAQt2YWx1ZU9yRWxzZQIJAJsIAgUIdXNlckRhcHACFGNvbmZfZGFwcF9pc19ydW5uaW5nBgAObWFpbnRlbmFuY2VNU0cJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHACFGNvbmZfbWFpbnRlbmFuY2VfbXNnAgAADXVzZXJTdXNwZW5kZWQCCVNVU1BFTkRFRAALdXNlclJlbW92ZWQCB1JFTU9WRUQAEHVzZXJVbnJlZ2lzdGVyZWQCDFVOUkVHSVNURVJFRAALdXNlckFsbG93ZWQCB0FMTE9XRUQAGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQkArAICAhJjZXJ0aWZpY2F0aW9uX2ZlZV8JANgEAQULc2lnbkFzc2V0SWQBE2dldEFydHdvcmtSb3lhbHRpZXMBA2tleQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQNrZXkA6AcBFGNoZWNrU2lnbkNlcnRpZmljYXRlAwZzaWduSUQFT3duZXIKc2hhMjU2SGFzaAQHJG1hdGNoMAkAnQgCBQhzaWduRGFwcAkArAICCQCsAgIJAKwCAgIIZGF0YV9mY18FBnNpZ25JRAIBXwUFT3duZXIDCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFhBQckbWF0Y2gwAwkBCGNvbnRhaW5zAgUBYQUKc2hhMjU2SGFzaAYHBwELdmFsaWRhdGVDSUQBA2NpZAMJAQhjb250YWlucwIFA2NpZAIBLwMDCQBmAgBMCQCxAgEFA2NpZAkAAAIJALECAQkAkQMCCQC1CQIFA2NpZAIBLwAAADsHCQBmAgAQCQCxAgEJAJEDAgkAtQkCBQNjaWQCAS8AAQcHAQx2YWxpZGF0ZUhhc2gBBGhhc2gJAAACCQCxAgEFBGhhc2gAQAENa2V5VXNlclN0YXR1cwEGY2FsbGVyCQCsAgICDHVzZXJfc3RhdHVzXwUGY2FsbGVyAQdrZXlEYXRlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF9kYXRlXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5TmFtZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfbmFtZV8FBWFydElkAgFfBQZjYWxsZXIBB2tleURlc2MCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X2Rlc2NfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlEaXNwbGF5Q2lkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9kaXNwbGF5X2NpZF8FBWFydElkAgFfBQZjYWxsZXIBDWtleUV4cG9ydEhhc2gCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2V4cG9ydF9oYXNoXwUFYXJ0SWQCAV8FBmNhbGxlcgEMa2V5RXhwb3J0Q2lkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICD2FydF9leHBvcnRfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgEKa2V5TWF4TWludAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgxhcnRfbWF4bWludF8FBWFydElkAgFfBQZjYWxsZXIBCWtleVNpZ25JRAIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgthcnRfc2lnbmlkXwUFYXJ0SWQCAV8FBmNhbGxlcgEJa2V5SXNzdWVkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICC2FydF9pc3N1ZWRfBQVhcnRJZAIBXwUGY2FsbGVyAQlrZXlPblNhbGUCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgILYXJ0X29uc2FsZV8FBWFydElkAgFfBQZjYWxsZXIBDmtleUxpY2VuY2VIYXNoAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEWFydF9saWNlbmNlX2hhc2hfBQVhcnRJZAIBXwUGY2FsbGVyAQ1rZXlMaWNlbmNlQ2lkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEGFydF9saWNlbmNlX2NpZF8FBWFydElkAgFfBQZjYWxsZXIBB2tleVRhZ3MCBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIJYXJ0X3RhZ3NfBQVhcnRJZAIBXwUGY2FsbGVyAQdrZXlUeXBlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICCWFydF90eXBlXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5Tm90ZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfbm90ZV8FBWFydElkAgFfBQZjYWxsZXIBCmtleUNyYXdsZXICBmNhbGxlcgVhcnRJZAkArAICCQCsAgIJAKwCAgIQYXJ0X2NyYXdsZXJfY2lkXwUFYXJ0SWQCAV8FBmNhbGxlcgEMa2V5Um95YWx0aWVzAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICDmFydF9yb3lhbHRpZXNfBQVhcnRJZAIBXwUGY2FsbGVyAQhrZXlQcmljZQIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAgphcnRfcHJpY2VfBQVhcnRJZAIBXwUGY2FsbGVyAQprZXlFbmRTYWxlAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICDGFydF9lbmRzYWxlXwUFYXJ0SWQCAV8FBmNhbGxlcgESa2V5QXNzZXRJZEFjY2VwdGVkAgZjYWxsZXIFYXJ0SWQJAKwCAgkArAICCQCsAgICEmFydF9hc3NldEFjY2VwdGVkXwUFYXJ0SWQCAV8FBmNhbGxlcgEHa2V5RmxhZwIGY2FsbGVyBWFydElkCQCsAgIJAKwCAgkArAICAglhcnRfZmxhZ18FBWFydElkAgFfBQZjYWxsZXIBEmtleUFydGlzdEFnZW50QWRkcgEKYXJ0aXN0QWRkcgkArAICAg1hcnRpc3RfYWdlbnRfBQphcnRpc3RBZGRyAQ9rZXlQcmltYXJ5U2hhcmUBCmFydGlzdEFkZHIJAKwCAgIVYXJ0aXN0X2FnZW50X3ByaW1hcnlfBQphcnRpc3RBZGRyARFrZXlIYXNoQnlUeGlkQWRkcgIGY2FsbGVyBHR4aWQJAKwCAgkArAICCQCsAgICE2dldF9oYXNoYnl0eGlkYWRkcl8FBHR4aWQCAV8FBmNhbGxlcgEOa2V5T3duZXJCeUhhc2gBCnNoYTI1Nkhhc2gJAKwCAgISZ2V0X293bmVyX2J5X2hhc2hfBQpzaGEyNTZIYXNoAQ1rZXlpZEJ5U2lnbmlkAgZjYWxsZXIGc2lnbklkCQCsAgIJAKwCAgkArAICAhJnZXRfYXJ0aWRieXNpZ25pZF8FBnNpZ25JZAIBXwUGY2FsbGVyARJrZXlUeGlkQnlIYXNoT3duZXICCnNoYTI1Nkhhc2gGY2FsbGVyCQCsAgICF2dldF90eGlkX2J5X2hhc2hfb3duZXJfCQDYBAEJANQWAQkAmwMBCQCsAgIFCnNoYTI1Nkhhc2gFBmNhbGxlcgEOdmFsaWRhdGVBbGxDSUQDCmNpZERpc3BsYXkJY2lkRXhwb3J0CmNpZExpY2VuY2UDCQEBIQEJAQt2YWxpZGF0ZUNJRAEFCmNpZERpc3BsYXkJAAIBAhFXcm9uZyBEaXNwbGF5IENJRAMJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUJY2lkRXhwb3J0CQACAQIQV3JvbmcgRXhwb3J0IENJRAMDCQECIT0CBQpjaWRMaWNlbmNlAgAJAQEhAQkBC3ZhbGlkYXRlQ0lEAQUKY2lkTGljZW5jZQcJAAIBAhFXcm9uZyBMaWNlbmNlIENJRAYBD3ZhbGlkYXRlQWxsSGFzaAIMc2hhMjU2RXhwb3J0DXNoYTI1NkxpY2VuY2UDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQxzaGEyNTZFeHBvcnQJAAIBAhhFeHBvcnQgSGFzaCA2NCBjaGFyLiBtYXgDCQEBIQEJAQx2YWxpZGF0ZUhhc2gBBQ1zaGEyNTZMaWNlbmNlCQACAQIZTGljZW5jZSBIYXNoIDY0IGNoYXIuIG1heAYBDnZhbGlkYXRlU3RyaW5nAgNzdHIDbWF4AwkAAAIJALECAQUDc3RyAAAJAAIBAhhGaWVsZCBjYW5ub3QgYmUgaXMgZW1wdHkDCQBmAgkAsQIBBQNzdHIFA21heAkAAgEJAKwCAgUDc3RyAgwgaXMgdG9vIGxvbmcGAQx2YWxpZGF0ZVVzZXIBBmNhbGxlcgQKdXNlclN0YXR1cwkBC3ZhbHVlT3JFbHNlAgkAnQgCBQh1c2VyRGFwcAkBDWtleVVzZXJTdGF0dXMBBQZjYWxsZXIFEHVzZXJVbnJlZ2lzdGVyZWQDAwkAAAIFCnVzZXJTdGF0dXMFEHVzZXJVbnJlZ2lzdGVyZWQGCQAAAgUKdXNlclN0YXR1cwULdXNlckFsbG93ZWQCLlJlZ2lzdGVyIHRoaXMgYWNjb3VudCBmaXJzdCB3aXRoICJBY2NvdW50IiB0YWIDCQAAAgUKdXNlclN0YXR1cwUNdXNlclN1c3BlbmRlZAIRQWNjb3VudCBzdXNwZW5kZWQDCQAAAgUKdXNlclN0YXR1cwULdXNlclJlbW92ZWQCD0FjY291bnQgcmVtb3ZlZAIAAQpzZXRMSWNlbmNlAgpjaWRMaWNlbmNlDXNoYTI1NkxpY2VuY2UEA2NpZAMJAAACCQCxAgEFCmNpZExpY2VuY2UAAAUOZGVmYXVsdExpY2VuY2UFCmNpZExpY2VuY2UEBGhhc2gDCQAAAgkAsQIBBQ1zaGEyNTZMaWNlbmNlAAAFEmRlZmF1bHRIYXNoTGljZW5jZQUNc2hhMjU2TGljZW5jZQkAlAoCBQNjaWQFBGhhc2gBE3ZhbGlkYXRlQXJ0d29ya0RhdGEKBmNhbGxlcgpjaWREaXNwbGF5CWNpZEV4cG9ydApsaWNlbmNlQ0lEDHNoYTI1NkV4cG9ydAtsaWNlbmNlSGFzaARuYW1lC2Rlc2NyaXB0aW9uBHRhZ3MJcm95YWx0aWVzBAljaGVja1VzZXIJAQx2YWxpZGF0ZVVzZXIBBQZjYWxsZXIDCQECIT0CBQljaGVja1VzZXICAAkAAgEFCWNoZWNrVXNlcgMJAAACCQCxAgEFCmNpZERpc3BsYXkAAAkAAgECG0Rpc3BsYXkgQ0lEIGNhbm5vdCBiZSBlbXB0eQMJAQEhAQkBDnZhbGlkYXRlQWxsQ0lEAwUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lECQACAQIQUHJvYmxlbSB3aXRoIENJRAMJAQEhAQkBD3ZhbGlkYXRlQWxsSGFzaAIFDHNoYTI1NkV4cG9ydAULbGljZW5jZUhhc2gJAAIBAhNQcm9ibGVtIHdpdGggSGFzaGVzAwkBASEBCQEOdmFsaWRhdGVTdHJpbmcCBQRuYW1lAGQJAAIBAhIxMDAgQ2hhci4gbWF4IG5hbWUDCQEBIQEJAQ52YWxpZGF0ZVN0cmluZwIFC2Rlc2NyaXB0aW9uAOgHCQACAQIaMTAwMCBDaGFyLiBtYXggZGVzY3JpcHRpb24DAwkAZgIAAAUJcm95YWx0aWVzBgkAZgIFCXJveWFsdGllcwDoBwkAAgECM1JveWFsdGllcyBjYW5ub3QgYmUgbGVzcyB0aGFuIDAlIG9yIGhpZ2hlciB0aGFuIDEwJQMJAGYCCQCQAwEJALUJAgUEdGFncwIBLAAFCQACAQILNSB0YWdzIG1heC4CAAEJaXNQYXltZW50AQFpAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAkAAgECE05vIHBheW1lbnQgYXR0YWNoZWQEB3BheW1lbnQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQGYW1vdW50CQEFdmFsdWUBCAUHcGF5bWVudAZhbW91bnQJAJQKAgUHcGF5bWVudAUGYW1vdW50AQ92YWxpZGF0ZVBheW1lbnQBAWkECyR0MDg5MDc4OTQzCQEJaXNQYXltZW50AQUBaQQHcGF5bWVudAgFCyR0MDg5MDc4OTQzAl8xBAZhbW91bnQIBQskdDA4OTA3ODk0MwJfMgQHYXNzZXRJZAMDCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAkAAAIIBQdwYXltZW50B2Fzc2V0SWQFC3NpZ25Bc3NldElkBwgFB3BheW1lbnQHYXNzZXRJZAkAAgECK09ubHkgU0lHTiB0b2tlbiBhY2NlcHRlZCBhcyB0cmFuc2FjdGlvbiBmZWUDCQECIT0CBQZhbW91bnQFGWN1cnJlbnRDZXJ0aWZpY2F0aW9uUHJpY2UJAAIBCQCsAgICGVBheW1lbnQgYW1vdW50IHNob3VsZCBiZSAJAKQDAQUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQkAlAoCBQZhbW91bnQFB2Fzc2V0SWQBC2lzQXJ0TWludGVkAglhZGRyVG9Vc2UFYXJ0SWQEByRtYXRjaDAJAJoIAgUEdGhpcwkBCWtleUlzc3VlZAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQABAgUHJG1hdGNoMAIDSW50BAFiBQckbWF0Y2gwAwkBAiE9AgUBYgAABgcHARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMBaQxwcmljZUFzc2V0SWQMYXJ0d29ya1ByaWNlBAskdDA5NTMxOTU2NwkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQskdDA5NTMxOTU2NwJfMQQGYW1vdW50CAULJHQwOTUzMTk1NjcCXzIEB2Fzc2V0SWQDCQEBIQEJAQlpc0RlZmluZWQBCAUHcGF5bWVudAdhc3NldElkBQR1bml0AwMJAGYCCQCxAgEFDHByaWNlQXNzZXRJZAAACQAAAgkA2AQBCQEFdmFsdWUBCAUHcGF5bWVudAdhc3NldElkBQxwcmljZUFzc2V0SWQHCAUHcGF5bWVudAdhc3NldElkCQACAQIOV3JvbmcgYXNzZXQgaWQDAwkAAAIFB2Fzc2V0SWQFBHVuaXQJAQIhPQIFDHByaWNlQXNzZXRJZAIABwkAAgECDldyb25nIGFzc2V0IGlkAwkBAiE9AgUMYXJ0d29ya1ByaWNlBQZhbW91bnQJAAIBAhNQYXltZW50IGRvbid0IG1hdGNoCQCUCgIFBmFtb3VudAUHYXNzZXRJZAEQYWNjZXB0ZWRBc3NldElkcwEHYXNzZXRJZAMDAwMDCQECIT0CBQdhc3NldElkCQDYBAEFC3NpZ25Bc3NldElkCQECIT0CBQdhc3NldElkCQDYBAEFDHdhdmVzQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQCBVdBVkVTBwkBAiE9AgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAcJAQIhPQIFB2Fzc2V0SWQJANgEAQULdXNkdEFzc2V0SWQHCQACAQImT25seSBTSUdOLCBVU0ROLFVTRFQgb3IgV0FWRVMgYWNjZXB0ZWQGAQ92YWxpZGF0ZU1pblNlbGwCB2Fzc2V0SWQFcHJpY2UEDG1pblNlbGxXYXZlcwMFCHVuaXRUZXN0AAoJARlnZXRJbnRlZ2VyQnlLZXlGcm9tT3JhY2xlAQIOd2F2ZXNfbWluX3NlbGwEC21pblNlbGxVc2RuAMCEPQQLbWluU2VsbFNpZ24DBQh1bml0VGVzdAABCQBoAgUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQACAwMDAwMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2RuQXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQt1c2R0QXNzZXRJZAkAZgIFC21pblNlbGxVc2RuBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDCQAAAgUHYXNzZXRJZAkA2AQBBQtzaWduQXNzZXRJZAkAZgIFC21pblNlbGxTaWduBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHBgMDAwkAAAIFB2Fzc2V0SWQJANgEAQUMd2F2ZXNBc3NldElkBgkAAAIFB2Fzc2V0SWQCBVdBVkVTCQBmAgUMbWluU2VsbFdhdmVzBQVwcmljZQcJAQIhPQIFBXByaWNlAAAHCQACAQIYV3JvbmcgbWluaW11bSBzZWxsIHByaWNlBgENZ2V0QmlkQXNzZXRJZAEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwUEdW5pdAkA2QQBBQdhc3NldElkARZnZXRQcmljZUFzc2V0SWRGcm9tQmlkAQpiaWREYXRhS2V5BAdiaWREYXRhCQEOZ2V0U3RyaW5nQnlLZXkBCQCsAgIFCmJpZERhdGFLZXkCBV9PUEVOAwkAAAIFB2JpZERhdGECAAkAAgECDUJpZCBub3QgZm91bmQECmJpZERhdGFBcnIJALUJAgUHYmlkRGF0YQIBXwQJYmlkQW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKYmlkRGF0YUFycgABBApiaWRBc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAAAwkAZwIAAAUJYmlkQW1vdW50CQACAQIMV3JvbmcgYW1vdW50CQCUCgIFCWJpZEFtb3VudAUKYmlkQXNzZXRJZAEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgFpBnB1YktleQMJAQEhAQULZGFwcFJ1bm5pbmcJAAIBBQ5tYWludGVuYW5jZU1TRwQLaXNTcG9uc29yZWQJAQt2YWx1ZU9yRWxzZQIJAQ5jaGVja1doaXRlbGlzdAEJAKwCAgkApQgBCQCnCAEJANkEAQUGcHViS2V5AglfZnJlZV90eHMAAAQGY2FsbGVyAwMDCQAAAgkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzCQClCAEFBHRoaXMJAAACCQCQAwEIBQFpCHBheW1lbnRzAAAHCQBmAgULaXNTcG9uc29yZWQAAAcJAKUIAQkApwgBCQDZBAEFBnB1YktleQkA2AQBCAgFAWkGY2FsbGVyBWJ5dGVzBBNnZXRfc3BvbnNvcmVkX3dhdmVzAwkBAiE9AgUGcHViS2V5AgAJAPwHBAUNd2hpdGVsaXN0RGFwcAIJdXNlRnJlZVR4CQDMCAIJAKUIAQkApwgBCQDZBAEFBnB1YktleQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUTZ2V0X3Nwb25zb3JlZF93YXZlcwUTZ2V0X3Nwb25zb3JlZF93YXZlcwkAlgoECQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQFBmNhbGxlcggFCWxhc3RCbG9jawl0aW1lc3RhbXAJAGYCBQtpc1Nwb25zb3JlZAAACQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxpZENhbGxlckRhdGUBAWkDCQEBIQEFC2RhcHBSdW5uaW5nCQACAQUObWFpbnRlbmFuY2VNU0cJAJUKAwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEICAUBaQZjYWxsZXIFYnl0ZXMIBQlsYXN0QmxvY2sJdGltZXN0YW1wAQdidXlNaW50BQFpBWFydElkBmlzc3VlcgViaWRJZAhiaWRPd25lcgQNJHQwMTI5MTkxMjk3OAkBDGlkQ2FsbGVyRGF0ZQEFAWkEAmlkCAUNJHQwMTI5MTkxMjk3OAJfMQQGY2FsbGVyCAUNJHQwMTI5MTkxMjk3OAJfMgQEZGF0ZQgFDSR0MDEyOTE5MTI5NzgCXzMEBWlzQmlkAwMDCQAAAgUGY2FsbGVyBQZpc3N1ZXIJAQIhPQIFCGJpZE93bmVyAgAHCQECIT0CBQViaWRJZAIABwYHBAhibG9ja0VuZAkBD2dldEludGVnZXJCeUtleQEJAQprZXlFbmRTYWxlAgUGY2FsbGVyBQVhcnRJZAMDAwkBAiE9AgUIYmxvY2tFbmQAAAkAZwIFBmhlaWdodAUIYmxvY2tFbmQHCQEBIQEFBWlzQmlkBwkAAgECC1NhbGUgZW5kZWQuBA5jYWxsZXJJc0lzc3VlcgkAAAIFBmNhbGxlcgUGaXNzdWVyBAh0b3RhbE5GVAkBD2dldEludGVnZXJCeUtleQECEHRvdGFsX25mdF9pc3N1ZWQEBnNpZ25JRAkBDmdldFN0cmluZ0J5S2V5AQkBCWtleVNpZ25JRAIFBmlzc3VlcgUFYXJ0SWQEC2FydHdvcmtOYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmlzc3VlcgUFYXJ0SWQDCQAAAgULYXJ0d29ya05hbWUCAAkAAgECEUFydCBkb2Vzbid0IGV4aXN0BAhpc09uU2FsZQkBD2dldEJvb2xlYW5CeUtleQEJAQlrZXlPblNhbGUCBQZpc3N1ZXIFBWFydElkBAphbW91bnRTb2xkCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCWtleUlzc3VlZAIFBmlzc3VlcgUFYXJ0SWQEDGFydHdvcmtQcmljZQMFDmNhbGxlcklzSXNzdWVyCQBoAgUZY3VycmVudENlcnRpZmljYXRpb25QcmljZQACCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCGtleVByaWNlAgUGaXNzdWVyBQVhcnRJZAQMcHJpY2VBc3NldElkAwUOY2FsbGVySXNJc3N1ZXIJANgEAQULc2lnbkFzc2V0SWQJAQ5nZXRTdHJpbmdCeUtleQEJARJrZXlBc3NldElkQWNjZXB0ZWQCBQZpc3N1ZXIFBWFydElkBAptYXhDYW5TZWxsCQEPZ2V0SW50ZWdlckJ5S2V5AQkBCmtleU1heE1pbnQCBQZpc3N1ZXIFBWFydElkAwMDCQEBIQEFBWlzQmlkCQEBIQEFDmNhbGxlcklzSXNzdWVyBwMDCQBnAgAABQxhcnR3b3JrUHJpY2UGCQEBIQEFCGlzT25TYWxlBgkAZwIAAAUKbWF4Q2FuU2VsbAcJAAIBAhBBcnQgbm90IGZvciBzYWxlAwMDCQEBIQEFBWlzQmlkBQ5jYWxsZXJJc0lzc3VlcgcJAGcCAAAFCm1heENhblNlbGwHCQACAQIUTWF4IGlzc3VhYmxlIG5vdCBzZXQECWNoZWNrVXNlcgkBDHZhbGlkYXRlVXNlcgEFBmlzc3VlcgMDBQVpc0JpZAkBAiE9AgUJY2hlY2tVc2VyAgAHCQACAQUJY2hlY2tVc2VyBApiaWREYXRhS2V5CQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICBGJpZF8FBWFydElkAgFfBQZpc3N1ZXICAV8FCGJpZE93bmVyAgFfBQViaWRJZAQNJHQwMTQ2ODExNDg0OAMFBWlzQmlkCQEWZ2V0UHJpY2VBc3NldElkRnJvbUJpZAEFCmJpZERhdGFLZXkJARR2YWxpZGF0ZVByaWNlQXNzZXRJZAMFAWkFDHByaWNlQXNzZXRJZAUMYXJ0d29ya1ByaWNlBAZhbW91bnQIBQ0kdDAxNDY4MTE0ODQ4Al8xBAdhc3NldElkCAUNJHQwMTQ2ODExNDg0OAJfMgQFYWdlbnQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUIdXNlckRhcHAJARJrZXlBcnRpc3RBZ2VudEFkZHIBBQZpc3N1ZXIFC2ZlZVJlY2VpdmVyBAphZ2VudFNoYXJlCQELdmFsdWVPckVsc2UCCQCaCAIFCHVzZXJEYXBwCQEPa2V5UHJpbWFyeVNoYXJlAQUGaXNzdWVyAAAEDWlzV2hpdGVsaXN0ZWQJAQ5jaGVja1doaXRlbGlzdAEFBmlzc3VlcgQDY3V0AwkAZgIFDWlzV2hpdGVsaXN0ZWQFBmhlaWdodAAAAwkAAAIFB2Fzc2V0SWQFC3NpZ25Bc3NldElkBQdzaWduQ3V0BQt1c2RuV2F2ZUN1dAQNYW1vdW50Rm9yU2lnbgkAawMFBmFtb3VudAUDY3V0AGQEDmFtb3VudEZvckFnZW50AwMDCQECIT0CBQVhZ2VudAULZmVlUmVjZWl2ZXIJAGYCBQphZ2VudFNoYXJlAAAHCQBmAgUGaGVpZ2h0BQ1pc1doaXRlbGlzdGVkBwkAawMFBmFtb3VudAUKYWdlbnRTaGFyZQBkAAAEEGFtb3VudEZvckNyZWF0b3IJAGUCBQZhbW91bnQFDWFtb3VudEZvclNpZ24DCQAAAgUKYW1vdW50U29sZAUKbWF4Q2FuU2VsbAkAAgECDEFydCBzb2xkIG91dAQNbmV3QW1vdW50U29sZAkAZAIFCmFtb3VudFNvbGQAAQQJaXNzdWVNZXRhCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJQ3JlYXRvcjogBQZpc3N1ZXICCiwKIEFydElEOiAFBWFydElkAgssCiBTaWduSUQ6IAUGc2lnbklEAhEsCiBBcnR3b3JrIG5hbWU6IAULYXJ0d29ya05hbWUCCiwKIElzc3VlOiAJAKQDAQUNbmV3QW1vdW50U29sZAIBLwkApAMBBQptYXhDYW5TZWxsBAhpc3N1ZU5GVAkAwggFCQCsAgICA1NBXwkApAMBCQBkAgUIdG90YWxORlQAAQUJaXNzdWVNZXRhAAEAAAcEBWlkTkZUCQC4CAEFCGlzc3VlTkZUBApzZWxsU3RhdHVzAwMJAAACBQ1uZXdBbW91bnRTb2xkBQptYXhDYW5TZWxsBgkBASEBBQhpc09uU2FsZQcGBApyZWNlaXZlTkZUAwMDCQAAAgUGY2FsbGVyBQZpc3N1ZXIJAQIhPQIFCGJpZE93bmVyAgAHCQECIT0CBQViaWRJZAIABwkBEUBleHRyTmF0aXZlKDEwNjIpAQUIYmlkT3duZXIIBQFpBmNhbGxlcgQKYXNzZXRJZEJpZAMJAQEhAQkBCWlzRGVmaW5lZAEFB2Fzc2V0SWQCBVdBVkVTCQDYBAEJAQV2YWx1ZQEFB2Fzc2V0SWQEB2JpZERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4ECWJpZERlbE9sZAkBC0RlbGV0ZUVudHJ5AQkArAICBQpiaWREYXRhS2V5AgVfT1BFTgQJYmlkVXBkYXRlCQELU3RyaW5nRW50cnkCCQCsAgIFCmJpZERhdGFLZXkCB19DTE9TRUQJAKwCAgkArAICBQdiaWREYXRhAgFfCQCkAwEFBGRhdGUEB3NvbGRLZXkJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIJYXJ0X3NvbGRfCQCkAwEFDW5ld0Ftb3VudFNvbGQCBF9vZl8JAKQDAQUKbWF4Q2FuU2VsbAIBXwUFYXJ0SWQCAV8FBmlzc3VlcgQJc29sZFZhbHVlAwkBASEBBQVpc0JpZAkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZjYWxsZXICAV8JAKQDAQUEZGF0ZQIBXwUCaWQCAV8JAKQDAQUMYXJ0d29ya1ByaWNlAgFfBQxwcmljZUFzc2V0SWQCAV8JANgEAQUFaWRORlQJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApQgBBQpyZWNlaXZlTkZUAgFfCQCkAwEFBGRhdGUCAV8FAmlkAgFfCQCkAwEFBmFtb3VudAIBXwUKYXNzZXRJZEJpZAIBXwkA2AQBBQVpZE5GVAQIc29sZERhdGEJAQtTdHJpbmdFbnRyeQIFB3NvbGRLZXkFCXNvbGRWYWx1ZQQLY29tbWlzc2lvbnMDCQECIT0CBQ5hbW91bnRGb3JBZ2VudAAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQtmZWVSZWNlaXZlcgkAZQIFDWFtb3VudEZvclNpZ24FDmFtb3VudEZvckFnZW50BQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQVhZ2VudAUOYW1vdW50Rm9yQWdlbnQFB2Fzc2V0SWQFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIFDWFtb3VudEZvclNpZ24FB2Fzc2V0SWQFA25pbAQGYnV5UmVzCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlJc3N1ZWQCBQZpc3N1ZXIFBWFydElkBQ1uZXdBbW91bnRTb2xkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgIEbmZ0XwkA2AQBBQVpZE5GVAUHc29sZEtleQkAzAgCCQEMSW50ZWdlckVudHJ5AgIQdG90YWxfbmZ0X2lzc3VlZAkAZAIFCHRvdGFsTkZUAAEJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlFbmRTYWxlAgUGaXNzdWVyBQVhcnRJZAAACQDMCAIJAQxCb29sZWFuRW50cnkCCQEJa2V5T25TYWxlAgUGaXNzdWVyBQVhcnRJZAUKc2VsbFN0YXR1cwkAzAgCBQhpc3N1ZU5GVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGaXNzdWVyBRBhbW91bnRGb3JDcmVhdG9yBQdhc3NldElkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCnJlY2VpdmVORlQAAQUFaWRORlQFA25pbAULY29tbWlzc2lvbnMDBQVpc0JpZAkAzAgCBQhzb2xkRGF0YQkAzAgCBQliaWRVcGRhdGUJAMwIAgUJYmlkRGVsT2xkBQZidXlSZXMJAMwIAgUIc29sZERhdGEFBmJ1eVJlcwEIYXNTdHJpbmcBAmJ2BAckbWF0Y2gwBQJidgMJAAECBQckbWF0Y2gwAgZTdHJpbmcEA2J2MAUHJG1hdGNoMAUDYnYwCQACAQIkU3BvbnNvcmVkIFB1YmxpYyBLZXkgU3RyaW5nIGV4cGVjdGVkCgZpbnZva2UBB3NldENvbmYCA2tleQN2YWwEBmNhbGxlcgkApQgBCAUGaW52b2tlBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIDCQEIY29udGFpbnMCBQNrZXkCBWNvbmZfCQDMCAIJAQtTdHJpbmdFbnRyeQIFA2tleQUDdmFsBQNuaWwJAAIBAiBFbnRyaWVzIHN0YXJ0aW5nIHdpdGggY29uZl8gb25seQkAAgECIllvdSBhcmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoaXMBaQEKYWRkQXJ0d29yaw4Kc2hhMjU2SGFzaAZzaWduSUQEbmFtZQtkZXNjcmlwdGlvbgR0YWdzBHR5cGUKY2lkRGlzcGxheQxzaGEyNTZFeHBvcnQJY2lkRXhwb3J0DXNoYTI1NkxpY2VuY2UKY2lkTGljZW5jZQdjcmF3bGVyCXJveWFsdGllcwZwdWJLZXkEDSR0MDE4ODgxMTg5NTQJARVpZENhbGxlckRhdGVTcG9uc29yZWQCBQFpBQZwdWJLZXkEBWFydElkCAUNJHQwMTg4ODExODk1NAJfMQQGY2FsbGVyCAUNJHQwMTg4ODExODk1NAJfMgQEZGF0ZQgFDSR0MDE4ODgxMTg5NTQCXzMEC2lzU3BvbnNvcmVkCAUNJHQwMTg4ODExODk1NAJfNAMJAQEhAQkBDHZhbGlkYXRlSGFzaAEFCnNoYTI1Nkhhc2gJAAIBAiRIYXNoIHNob3VsZCBiZSA2NCBjaGFyYWN0ZXJzIG1heGltdW0EDSR0MDE5MDU1MTkxMjQJAQpzZXRMSWNlbmNlAgUKY2lkTGljZW5jZQUNc2hhMjU2TGljZW5jZQQKbGljZW5jZUNJRAgFDSR0MDE5MDU1MTkxMjQCXzEEC2xpY2VuY2VIYXNoCAUNJHQwMTkwNTUxOTEyNAJfMgQPdmFsaWRhdGVBcnR3b3JrCQETdmFsaWRhdGVBcnR3b3JrRGF0YQoFBmNhbGxlcgUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lEBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoBQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUJcm95YWx0aWVzAwkBAiE9AgUPdmFsaWRhdGVBcnR3b3JrAgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEEEHdoaXRlbGlzdGVkX2Ryb3AJAGYCCQEOY2hlY2tXaGl0ZWxpc3QBCQCsAgIFBmNhbGxlcgILX2ZyZWVfZHJvcHMAAAQNJHQwMTk0MjMxOTUwNwMFEHdoaXRlbGlzdGVkX2Ryb3AJAJQKAgAABQZzaWduSUQJAQ92YWxpZGF0ZVBheW1lbnQBBQFpBAZhbW91bnQIBQ0kdDAxOTQyMzE5NTA3Al8xBAdhc3NldElkCAUNJHQwMTk0MjMxOTUwNwJfMgMJAQEhAQkBCWlzRGVmaW5lZAEFBmFtb3VudAkAAgECFFNvbWV0aGluZyB3ZW50IHdyb25nBAplbnRyeUV4aXN0CQEOZ2V0U3RyaW5nQnlLZXkBCQESa2V5VHhpZEJ5SGFzaE93bmVyAgUKc2hhMjU2SGFzaAUGY2FsbGVyAwkBAiE9AgUKZW50cnlFeGlzdAIACQACAQIUWW91IGFscmVhZHkgYWRkZWQgaXQECWhhc2hFeGlzdAkBDmdldFN0cmluZ0J5S2V5AQkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAMJAQIhPQIFCWhhc2hFeGlzdAIACQACAQIXSGFzaCBhbHJlYWR5IHJlZ2lzdGVyZWQED2lzU2lnbkNlcnRpZmllZAkBFGNoZWNrU2lnbkNlcnRpZmljYXRlAwUGc2lnbklEBQZjYWxsZXIFCnNoYTI1Nkhhc2gDCQEBIQEFD2lzU2lnbkNlcnRpZmllZAkAAgECLFNpZ24gQ2VydGlmaWNhdGUgbm90IGZvdW5kIGZvciB0aGlzIGFkZHJlc3MuBBdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcAMFEHdoaXRlbGlzdGVkX2Ryb3AJAPwHBAUNd2hpdGVsaXN0RGFwcAILdXNlRnJlZURyb3AJAMwIAgUGY2FsbGVyBQNuaWwFA25pbAUEdW5pdAMJAAACBRdkZWNyZWFzZV93aGl0ZWxpc3RfZHJvcAUXZGVjcmVhc2Vfd2hpdGVsaXN0X2Ryb3AECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleU93bmVyQnlIYXNoAQUKc2hhMjU2SGFzaAUGY2FsbGVyCQDMCAIJAQtTdHJpbmdFbnRyeQIJARJrZXlUeGlkQnlIYXNoT3duZXICBQpzaGEyNTZIYXNoBQZjYWxsZXIFBWFydElkCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEHa2V5RGF0ZQIFBmNhbGxlcgUFYXJ0SWQFBGRhdGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5hbWUCBQZjYWxsZXIFBWFydElkBQRuYW1lCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlEZXNjAgUGY2FsbGVyBQVhcnRJZAULZGVzY3JpcHRpb24JAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleURpc3BsYXlDaWQCBQZjYWxsZXIFBWFydElkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFeHBvcnRDaWQCBQZjYWxsZXIFBWFydElkBQljaWRFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUV4cG9ydEhhc2gCBQZjYWxsZXIFBWFydElkBQxzaGEyNTZFeHBvcnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDmtleUxpY2VuY2VIYXNoAgUGY2FsbGVyBQVhcnRJZAULbGljZW5jZUhhc2gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBDWtleUxpY2VuY2VDaWQCBQZjYWxsZXIFBWFydElkBQpsaWNlbmNlQ0lECQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlUeXBlAgUGY2FsbGVyBQVhcnRJZAUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5VGFncwIFBmNhbGxlcgUFYXJ0SWQFBHRhZ3MJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAAACQDMCAIJAQtTdHJpbmdFbnRyeQIJAQlrZXlTaWduSUQCBQZjYWxsZXIFBWFydElkBQZzaWduSUQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQlrZXlJc3N1ZWQCBQZjYWxsZXIFBWFydElkAAAJAMwIAgkBDEJvb2xlYW5FbnRyeQIJAQlrZXlPblNhbGUCBQZjYWxsZXIFBWFydElkBwkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5aWRCeVNpZ25pZAIFBmNhbGxlcgUGc2lnbklEBQVhcnRJZAkAzAgCCQELU3RyaW5nRW50cnkCCQERa2V5SGFzaEJ5VHhpZEFkZHICBQZjYWxsZXIFBWFydElkBQpzaGEyNTZIYXNoCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQprZXlDcmF3bGVyAgUGY2FsbGVyBQVhcnRJZAUHY3Jhd2xlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDGtleVJveWFsdGllcwIFBmNhbGxlcgUFYXJ0SWQFCXJveWFsdGllcwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQULZmVlUmVjZWl2ZXIFBmFtb3VudAULc2lnbkFzc2V0SWQFA25pbAUKdHhUb0NhbGxlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ11cGRhdGVBcnR3b3JrDQR0eGlkBG5hbWULZGVzY3JpcHRpb24EdGFncwR0eXBlCmNpZERpc3BsYXkMc2hhMjU2RXhwb3J0CWNpZEV4cG9ydA1zaGEyNTZMaWNlbmNlCmNpZExpY2VuY2UHY3Jhd2xlcglyb3lhbHRpZXMGcHViS2V5AwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBA0kdDAyMjU0MTIyNjExCQEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgUBaQUGcHViS2V5BAJpZAgFDSR0MDIyNTQxMjI2MTECXzEEBmNhbGxlcggFDSR0MDIyNTQxMjI2MTECXzIEBGRhdGUIBQ0kdDAyMjU0MTIyNjExAl8zBAtpc1Nwb25zb3JlZAgFDSR0MDIyNTQxMjI2MTECXzQEDSR0MDIyNjIxMjI2OTAJAQpzZXRMSWNlbmNlAgUKY2lkTGljZW5jZQUNc2hhMjU2TGljZW5jZQQKbGljZW5jZUNJRAgFDSR0MDIyNjIxMjI2OTACXzEEC2xpY2VuY2VIYXNoCAUNJHQwMjI2MjEyMjY5MAJfMgQPdmFsaWRhdGVBcnR3b3JrCQETdmFsaWRhdGVBcnR3b3JrRGF0YQoFBmNhbGxlcgUKY2lkRGlzcGxheQUJY2lkRXhwb3J0BQpsaWNlbmNlQ0lEBQxzaGEyNTZFeHBvcnQFC2xpY2VuY2VIYXNoBQRuYW1lBQtkZXNjcmlwdGlvbgUEdGFncwUJcm95YWx0aWVzAwkBAiE9AgUPdmFsaWRhdGVBcnR3b3JrAgAJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEECmVudHJ5RXhpc3QJAQ5nZXRTdHJpbmdCeUtleQEJAQdrZXlOYW1lAgUGY2FsbGVyBQR0eGlkAwkAAAIFCmVudHJ5RXhpc3QCAAkAAgECD0VudHJ5IG5vdCBmb3VuZAQEZmxhZwkBDmdldFN0cmluZ0J5S2V5AQkBB2tleUZsYWcCBQZjYWxsZXIFBHR4aWQDCQAAAgUEZmxhZwIHSUxMRUdBTAkAAgECHUNhbm5vdCB1cGRhdGUgSUxMRUdBTCBhcnR3b3JrAwkBASEBCQELaXNBcnRNaW50ZWQCBQZjYWxsZXIFBHR4aWQECnR4VG9DYWxsZXIDBQtpc1Nwb25zb3JlZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEHQWRkcmVzcwEJANkEAQUGY2FsbGVyAAAFBHVuaXQFA25pbAUDbmlsCQDOCAIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleU5hbWUCBQZjYWxsZXIFBHR4aWQFBG5hbWUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleURlc2MCBQZjYWxsZXIFBHR4aWQFC2Rlc2NyaXB0aW9uCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlEaXNwbGF5Q2lkAgUGY2FsbGVyBQR0eGlkBQpjaWREaXNwbGF5CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQxrZXlFeHBvcnRDaWQCBQZjYWxsZXIFBHR4aWQFCWNpZEV4cG9ydAkAzAgCCQELU3RyaW5nRW50cnkCCQENa2V5RXhwb3J0SGFzaAIFBmNhbGxlcgUEdHhpZAUMc2hhMjU2RXhwb3J0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ1rZXlMaWNlbmNlQ2lkAgUGY2FsbGVyBQR0eGlkBQpsaWNlbmNlQ0lECQDMCAIJAQtTdHJpbmdFbnRyeQIJAQ5rZXlMaWNlbmNlSGFzaAIFBmNhbGxlcgUEdHhpZAULbGljZW5jZUhhc2gJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVRhZ3MCBQZjYWxsZXIFBHR4aWQFBHRhZ3MJAMwIAgkBC1N0cmluZ0VudHJ5AgkBB2tleVR5cGUCBQZjYWxsZXIFBHR4aWQFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkBCmtleUNyYXdsZXICBQZjYWxsZXIFBHR4aWQFB2NyYXdsZXIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQxrZXlSb3lhbHRpZXMCBQZjYWxsZXIFBHR4aWQFCXJveWFsdGllcwUDbmlsBQp0eFRvQ2FsbGVyCQACAQIOQWxyZWFkeSBtaW50ZWQBaQELZmxhZ0FydHdvcmsEBWFydElkBGFkZHIEZmxhZwRub3RlBA0kdDAyNDMxNzI0MzUxCQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAyNDMxNzI0MzUxAl8xBAZjYWxsZXIIBQ0kdDAyNDMxNzI0MzUxAl8yAwkBD2NvbnRhaW5zRWxlbWVudAIJAMwIAgUFY2hyaXMJAMwIAgkApQgBBQR0aGlzBQNuaWwFBmNhbGxlcgMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAICB0NPTlNFTlQJAMwIAgIACQDMCAICD0NIQU5HRV9SRVFVSVJFRAkAzAgCAgdGTEFHR0VECQDMCAICB0lMTEVHQUwFA25pbAUEZmxhZwkAzAgCCQELU3RyaW5nRW50cnkCCQEHa2V5RmxhZwIFBGFkZHIFBWFydElkBQRmbGFnCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQdrZXlOb3RlAgUEYWRkcgUFYXJ0SWQFBG5vdGUFA25pbAkAAgEJAKwCAgIOVW5rbm93IHN0YXR1cyAFBGZsYWcJAAIBAhNZb3UgYXJlIG5vdCBhbGxvd2VkAWkBDWRlbGV0ZUFydHdvcmsCBWFydElkBGFkZHIEDSR0MDI0Nzg3MjQ4MjEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDI0Nzg3MjQ4MjECXzEEBmNhbGxlcggFDSR0MDI0Nzg3MjQ4MjECXzIECWFkZHJUb1VzZQMJAQ9jb250YWluc0VsZW1lbnQCCQDMCAIFBWNocmlzCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQZjYWxsZXIFBGFkZHIFBmNhbGxlcgQKZW50cnlFeGlzdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFCWFkZHJUb1VzZQUFYXJ0SWQCIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzAwkAAAIFCmVudHJ5RXhpc3QCAAkAAgECIE5vIGFydCBtYXRjaGluZyBmb3IgdGhpcyBhZGRyZXNzBApzaGEyNTZIYXNoCQEOZ2V0U3RyaW5nQnlLZXkBCQERa2V5SGFzaEJ5VHhpZEFkZHICBQlhZGRyVG9Vc2UFBWFydElkAwkAAAIFCnNoYTI1Nkhhc2gCAAkAAgECJU5vIGFydCBoYXNoIG1hdGNoaW5nIGZvciB0aGlzIGFkZHJlc3MEBnNpZ25JRAkBDmdldFN0cmluZ0J5S2V5AQkBCWtleVNpZ25JRAIFCWFkZHJUb1VzZQUFYXJ0SWQDCQAAAgUGc2lnbklEAgAJAAIBAhNObyBTSUdOIElEIG1hdGNoaW5nBAxkYXRhVG9EZWxldGUJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleURhdGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQdrZXlOYW1lAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5RGVzYwIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDWtleURpc3BsYXlDaWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQxrZXlFeHBvcnRDaWQCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlFeHBvcnRIYXNoAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEOa2V5TGljZW5jZUhhc2gCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlMaWNlbmNlQ2lkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5VHlwZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleVRhZ3MCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlNYXhNaW50AgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEJa2V5U2lnbklEAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEJa2V5SXNzdWVkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEJa2V5T25TYWxlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEHa2V5RmxhZwIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBCGtleVByaWNlAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQESa2V5QXNzZXRJZEFjY2VwdGVkAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEOa2V5T3duZXJCeUhhc2gBBQpzaGEyNTZIYXNoCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ1rZXlpZEJ5U2lnbmlkAgUJYWRkclRvVXNlBQZzaWduSUQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBEmtleVR4aWRCeUhhc2hPd25lcgIFCnNoYTI1Nkhhc2gFCWFkZHJUb1VzZQkAzAgCCQELRGVsZXRlRW50cnkBCQEKa2V5RW5kU2FsZQIFCWFkZHJUb1VzZQUFYXJ0SWQJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBB2tleU5vdGUCBQlhZGRyVG9Vc2UFBWFydElkCQDMCAIJAQtEZWxldGVFbnRyeQEJAQprZXlDcmF3bGVyAgUJYWRkclRvVXNlBQVhcnRJZAkAzAgCCQELRGVsZXRlRW50cnkBCQEMa2V5Um95YWx0aWVzAgUJYWRkclRvVXNlBQVhcnRJZAUDbmlsAwkBASEBCQELaXNBcnRNaW50ZWQCBQlhZGRyVG9Vc2UFBWFydElkAwkBASEBBQtkYXBwUnVubmluZwkAAgEFDm1haW50ZW5hbmNlTVNHBQxkYXRhVG9EZWxldGUDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCBQVjaHJpcwkAzAgCCQClCAEFBHRoaXMFA25pbAUGY2FsbGVyBQxkYXRhVG9EZWxldGUJAAIBAihBcnQgYWxyZWFkeSBtaW50ZWQsIHlvdSBjYW5ub3QgZGVsZXRlIGl0AWkBC3NlbGxBcnR3b3JrBgVhcnRJZAVwcmljZQdtYXhNaW50B2Fzc2V0SWQIYmxvY2tFbmQGcHViS2V5BA0kdDAyNzY1NzI3NzI3CQEVaWRDYWxsZXJEYXRlU3BvbnNvcmVkAgUBaQUGcHViS2V5BAJpZAgFDSR0MDI3NjU3Mjc3MjcCXzEEBmNhbGxlcggFDSR0MDI3NjU3Mjc3MjcCXzIEBGRhdGUIBQ0kdDAyNzY1NzI3NzI3Al8zBAtpc1Nwb25zb3JlZAgFDSR0MDI3NjU3Mjc3MjcCXzQEC2FydHdvcmtOYW1lCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5TmFtZQIFBmNhbGxlcgUFYXJ0SWQDCQAAAgULYXJ0d29ya05hbWUCAAkAAgECI1RoaXMgYXJ0IGRvZXNuJ3QgbWF0Y2ggeW91ciBhY2NvdW50BARmbGFnCQEOZ2V0U3RyaW5nQnlLZXkBCQEHa2V5RmxhZwIFBmNhbGxlcgUFYXJ0SWQDCQEPY29udGFpbnNFbGVtZW50AgkAzAgCAg9DSEFOR0VfUkVRVUlSRUQJAMwIAgIHRkxBR0dFRAkAzAgCAgdJTExFR0FMBQNuaWwFBGZsYWcJAAIBAg9GbGFnZ2VkIGFydHdvcmsEBmJpZE5icgkBD2dldEludGVnZXJCeUtleQEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAMJAGYCAAAFCGJsb2NrRW5kCQACAQIMTmVnYXRpdmUgZW5kAwMJAGYCBQhibG9ja0VuZAAAAwkBAiE9AgUHbWF4TWludAABBgkBAiE9AgUFcHJpY2UAAAcJAAIBAjpUaW1lZCBvZmZlciBvbmx5IGFsbG93ZWQgZm9yIHVuaXF1ZSBlZGl0aW9uIGFuZCBvZmZlciBvbmx5BApiYXNlSGVpZ2h0AwkAAAIFCGJsb2NrRW5kAAAAAAUGaGVpZ2h0AwkBASEBCQEQYWNjZXB0ZWRBc3NldElkcwEFB2Fzc2V0SWQJAAIBAhVTb21ldGhpbmcgd2VudCB3cm9uZyEDCQEBIQEJAQ92YWxpZGF0ZU1pblNlbGwCBQdhc3NldElkBQVwcmljZQkAAgECFVNvbWV0aGluZyB3ZW50IHdyb25nIQQJY2hlY2tVc2VyCQEMdmFsaWRhdGVVc2VyAQUGY2FsbGVyAwkBAiE9AgUJY2hlY2tVc2VyAgAJAAIBBQljaGVja1VzZXIECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEJa2V5SXNzdWVkAgUGY2FsbGVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGY2FsbGVyBQVhcnRJZAMJAGYCBQdtYXhNaW50AGQJAAIBAhwxMDAgZWRpdGlvbnMgbWF4IHBlciBhcnR3b3JrAwMJAQIhPQIFCmFtb3VudFNvbGQAAAkAAAIFCmFtb3VudFNvbGQFCm1heENhblNlbGwHCQACAQIUTWF4IGVkaXRpb24gcmVhY2hlZC4DAwkAZgIFCmFtb3VudFNvbGQAAAkBAiE9AgUKbWF4Q2FuU2VsbAUHbWF4TWludAcJAAIBAiZDYW5ub3QgY2hhbmdlIG1heGltdW0gaXNzdWFibGUgYW55bW9yZQMDCQBmAgUGYmlkTmJyAAAJAQIhPQIFCm1heENhblNlbGwFB21heE1pbnQHCQACAQIxQ2Fubm90IGNoYW5nZSBtYXhpbXVtIGlzc3VhYmxlIHdpdGggYWN0aXZlIG9yZGVycwQKc2VsbFN0YXR1cwMDCQBmAgUFcHJpY2UAAAkAZgIFB21heE1pbnQAAAcGBwQKdHhUb0NhbGxlcgMFC2lzU3BvbnNvcmVkCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQdBZGRyZXNzAQkA2QQBBQZjYWxsZXIAAAUEdW5pdAUDbmlsBQNuaWwJAM4IAgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkBCWtleU9uU2FsZQIFBmNhbGxlcgUFYXJ0SWQFCnNlbGxTdGF0dXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQhrZXlQcmljZQIFBmNhbGxlcgUFYXJ0SWQFBXByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEKa2V5TWF4TWludAIFBmNhbGxlcgUFYXJ0SWQFB21heE1pbnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBEmtleUFzc2V0SWRBY2NlcHRlZAIFBmNhbGxlcgUFYXJ0SWQFB2Fzc2V0SWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQprZXlFbmRTYWxlAgUGY2FsbGVyBQVhcnRJZAkAZAIFCmJhc2VIZWlnaHQFCGJsb2NrRW5kBQNuaWwFCnR4VG9DYWxsZXIBaQEKYnV5QXJ0d29yawIFYXJ0SWQGaXNzdWVyCQEHYnV5TWludAUFAWkFBWFydElkBQZpc3N1ZXICAAIAAWkBBnNldEJpZAIFYXJ0SWQGaXNzdWVyBA0kdDAzMDEwNTMwMTQ1CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAzMDEwNTMwMTQ1Al8xBAZjYWxsZXIIBQ0kdDAzMDEwNTMwMTQ1Al8yBARkYXRlCAUNJHQwMzAxMDUzMDE0NQJfMwQNJHQwMzAxNTAzMDE4NgkBCWlzUGF5bWVudAEFAWkEB3BheW1lbnQIBQ0kdDAzMDE1MDMwMTg2Al8xBAZhbW91bnQIBQ0kdDAzMDE1MDMwMTg2Al8yBAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQgFB3BheW1lbnQHYXNzZXRJZAIFV0FWRVMJANgEAQkBBXZhbHVlAQgFB3BheW1lbnQHYXNzZXRJZAQIYmxvY2tFbmQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEKa2V5RW5kU2FsZQIFBmlzc3VlcgUFYXJ0SWQDAwkBAiE9AgUIYmxvY2tFbmQAAAkAZwIFBmhlaWdodAUIYmxvY2tFbmQHCQACAQILU2FsZSBlbmRlZC4EBmJpZE5icgkBD2dldEludGVnZXJCeUtleQEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAMJAQEhAQkBEGFjY2VwdGVkQXNzZXRJZHMBBQdhc3NldElkCQACAQISYXNzZXQgbm90IGFjY2VwdGVkAwkBASEBCQEPdmFsaWRhdGVNaW5TZWxsAgUHYXNzZXRJZAUGYW1vdW50CQACAQIOV3JvbmcgbWluIHNlbGwECmFtb3VudFNvbGQJAQ9nZXRJbnRlZ2VyQnlLZXkBCQEJa2V5SXNzdWVkAgUGaXNzdWVyBQVhcnRJZAQKbWF4Q2FuU2VsbAkBD2dldEludGVnZXJCeUtleQEJAQprZXlNYXhNaW50AgUGaXNzdWVyBQVhcnRJZAMJAGcCAAAFCm1heENhblNlbGwJAAIBAiNObyBtYXggZWRpdGlvbiBzZXQgZm9yIHRoaXMgYXJ0d29yawMJAGcCBQphbW91bnRTb2xkBQptYXhDYW5TZWxsCQACAQIYU29sZCBvdXQsIHlvdSBjYW5ub3QgYmlkCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQVhcnRJZAIBXwUGaXNzdWVyAgFfBQZjYWxsZXICAV8FAmlkAgVfT1BFTgkArAICCQCsAgIJAKwCAgkArAICBQdhc3NldElkAgFfCQCkAwEFBmFtb3VudAIBXwkApAMBBQRkYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgICEmN1cnJlbnRfYmlkYW1vdW50XwUFYXJ0SWQJAGQCBQZiaWROYnIAAQUDbmlsAWkBCWFjY2VwdEJpZAQFYXJ0SWQGaXNzdWVyBWJpZElkCGJpZE93bmVyBA0kdDAzMTM0NDMxMzg0CQEMaWRDYWxsZXJEYXRlAQUBaQQCaWQIBQ0kdDAzMTM0NDMxMzg0Al8xBAZjYWxsZXIIBQ0kdDAzMTM0NDMxMzg0Al8yBARkYXRlCAUNJHQwMzEzNDQzMTM4NAJfMwMJAQIhPQIFBmNhbGxlcgUGaXNzdWVyCQACAQIZWW91IGNhbm5vdCBkbyB0aGlzIGFjdGlvbgkBB2J1eU1pbnQFBQFpBQVhcnRJZAUGaXNzdWVyBQViaWRJZAUIYmlkT3duZXIBaQEJY2FuY2VsQmlkBAVhcnRJZAZpc3N1ZXIFYmlkSWQIYmlkT3duZXIEDSR0MDMxNjEwMzE2NzEJAQxpZENhbGxlckRhdGUBBQFpBAJpZAgFDSR0MDMxNjEwMzE2NzECXzEEBmNhbGxlcggFDSR0MDMxNjEwMzE2NzECXzIEBGRhdGUIBQ0kdDAzMTYxMDMxNjcxAl8zAwMJAQIhPQIFBmNhbGxlcgUIYmlkT3duZXIJAQIhPQIFBmNhbGxlcgUGaXNzdWVyBwkAAgECGVlvdSBjYW5ub3QgZG8gdGhpcyBhY3Rpb24EDXJldHVybk1vbmV5VG8DCQAAAgUGY2FsbGVyBQZpc3N1ZXIFCGJpZE93bmVyBQZjYWxsZXIEBmJpZE5icgkBD2dldEludGVnZXJCeUtleQEJAKwCAgISY3VycmVudF9iaWRhbW91bnRfBQVhcnRJZAQKYmlkRGF0YUtleQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAgRiaWRfBQVhcnRJZAIBXwUGaXNzdWVyAgFfBQhiaWRPd25lcgIBXwUFYmlkSWQEB2JpZERhdGEJAQ5nZXRTdHJpbmdCeUtleQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4DCQAAAgUHYmlkRGF0YQIACQACAQINQmlkIG5vdCBmb3VuZAQKYmlkRGF0YUFycgkAtQkCBQdiaWREYXRhAgFfBAdhc3NldElkCQENZ2V0QmlkQXNzZXRJZAEJAJEDAgUKYmlkRGF0YUFycgAABAliaWRTdGF0dXMCCENBTkNFTEVECQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgUKYmlkRGF0YUtleQIFX09QRU4JAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIFCmJpZERhdGFLZXkCAV8FCWJpZFN0YXR1cwkArAICCQCsAgIFB2JpZERhdGECAV8JAKQDAQUEZGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICAhJjdXJyZW50X2JpZGFtb3VudF8FBWFydElkCQBlAgUGYmlkTmJyAAEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBB0FkZHJlc3MBCQDZBAEFDXJldHVybk1vbmV5VG8JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpiaWREYXRhQXJyAAEFB2Fzc2V0SWQFA25pbAECdHgBCHZlcmlmaWVyAAQHJG1hdGNoMAUCdHgDCQABAgUHJG1hdGNoMAIXSW52b2tlU2NyaXB0VHJhbnNhY3Rpb24EA2ludgUHJG1hdGNoMAMDAwkAAAIIBQNpbnYIZnVuY3Rpb24CCmFkZEFydHdvcmsJAAACCAUDaW52BGRBcHAFBHRoaXMHCQAAAggFA2ludgNmZWUAoMIeBwkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAkA2QQBCQEIYXNTdHJpbmcBCQCRAwIIBQNpbnYEYXJncwANAwMDCQAAAggFA2ludghmdW5jdGlvbgINdXBkYXRlQXJ0d29yawkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAwDAwMJAAACCAUDaW52CGZ1bmN0aW9uAgtzZWxsQXJ0d29yawkAAAIIBQNpbnYEZEFwcAUEdGhpcwcJAAACCAUDaW52A2ZlZQCgwh4HCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQDZBAEJAQhhc1N0cmluZwEJAJEDAggFA2ludgRhcmdzAAUJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXkJAPQDAwgFAnR4CWJvZHlCeXRlcwkAkQMCCAUCdHgGcHJvb2ZzAAAIBQJ0eA9zZW5kZXJQdWJsaWNLZXnUd3pP", "height": 2412864, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: CxATTQkJGwMW5NJnMhwXzm2Kowba6fCNhY2U4qbNpbhx Next: 9kDGwgP1t1AmFViMTyAqXeptj59HjpgLnxizf5tn51tm Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
4-let a = "1.5"
4+let a = "1.1.10"
55
66 func b (c) = valueOrElse(getString(this, c), "")
77
88
9-func d (c) = valueOrElse(getBoolean(this, c), false)
9+let d = false
10+
11+let e = value(addressFromString(b("conf_oracle_fee")))
12+
13+let f = value(addressFromString(b("conf_signweb_dapp")))
14+
15+let g = b("conf_fee_receiver")
16+
17+let h = if (d)
18+ then value(addressFromString("3Mt4RGMEyjSWYAocTPqd55wdHQQB3PU2UCm"))
19+ else value(addressFromString(b("conf_users_dapp")))
20+
21+let i = value(addressFromString(b("conf_whitelist_dapp")))
22+
23+let j = fromBase58String(b("conf_accepted_asset_SIGN"))
24+
25+let k = fromBase58String(b("conf_accepted_asset_USDN"))
26+
27+let l = fromBase58String(b("conf_accepted_asset_USDT"))
28+
29+let m = base58''
30+
31+let n = b("conf_admin_1")
32+
33+func o (c) = valueOrErrorMessage(getInteger(e, c), "Integer undefine or 0 in oracle")
1034
1135
12-func e (c) = valueOrElse(getInteger(this, c), 0)
36+func p (c) = valueOrElse(getInteger(this, c), 0)
1337
1438
15-let f = b("conf_admin_1")
16-
17-let g = "conf_dapp_is_running"
18-
19-let h = "conf_maintenance_msg"
20-
21-let i = "conf_whitelisted_only"
22-
23-let j = valueOrElse(getBoolean(this, g), true)
24-
25-let k = valueOrElse(getString(this, h), "")
26-
27-let l = valueOrElse(getBoolean(this, i), true)
28-
29-let m = value(addressFromString(b("conf_whitelist_dapp")))
30-
31-let n = "ALLOWED"
32-
33-let o = "REGISTERED"
34-
35-let p = "VERIFIED"
36-
37-let q = "SUSPENDED"
38-
39-let r = "REMOVED"
40-
41-let s = "CHANGE_REQUIRED"
42-
43-let t = "UNREGISTERED"
44-
45-let u = "RESET"
46-
47-func v (w) = ("user_" + w)
39+func q (c) = valueOrElse(getInteger(i, c), 0)
4840
4941
50-func x (w) = ("user_name_" + w)
42+func r (c) = valueOrElse(getBoolean(this, c), false)
5143
5244
53-func y (w) = ("user_desc_" + w)
45+let s = 7
46+
47+let t = 10
48+
49+let u = b("conf_default_licence")
50+
51+let v = b("conf_default_licence_hash")
52+
53+let w = valueOrElse(getBoolean(h, "conf_dapp_is_running"), true)
54+
55+let x = valueOrElse(getString(h, "conf_maintenance_msg"), "")
56+
57+let y = "SUSPENDED"
58+
59+let z = "REMOVED"
60+
61+let A = "UNREGISTERED"
62+
63+let B = "ALLOWED"
64+
65+let C = o(("certification_fee_" + toBase58String(j)))
66+
67+func D (c) = valueOrElse(getInteger(this, c), 1000)
5468
5569
56-func z (w) = ("user_social_" + w)
70+func E (F,G,H) = {
71+ let I = getString(f, ((("data_fc_" + F) + "_") + G))
72+ if ($isInstanceOf(I, "String"))
73+ then {
74+ let J = I
75+ if (contains(J, H))
76+ then true
77+ else false
78+ }
79+ else false
80+ }
5781
5882
59-func A (w) = ("user_thumb_" + w)
60-
61-
62-func B (w) = ("user_status_" + w)
63-
64-
65-func C (w) = ("user_royalties_" + w)
66-
67-
68-func D (w) = ("user_date_" + w)
69-
70-
71-func E (w) = ("user_ERC20_" + w)
72-
73-
74-func F (G) = ("artist_agent_" + G)
75-
76-
77-func H (I,G) = ((("agent_" + I) + "_") + G)
78-
79-
80-func J (G) = ("artist_agent_primary_" + G)
81-
82-
83-func K (G) = ("artist_agent_secondary_" + G)
84-
85-
86-func L (c) = valueOrElse(getInteger(m, c), 0)
87-
88-
89-func M (N) = if (contains(N, "/"))
90- then if (if ((76 > size(N)))
91- then (size(split(N, "/")[0]) == 59)
83+func K (L) = if (contains(L, "/"))
84+ then if (if ((76 > size(L)))
85+ then (size(split(L, "/")[0]) == 59)
9286 else false)
93- then (16 > size(split(N, "/")[1]))
87+ then (16 > size(split(L, "/")[1]))
9488 else false
9589 else false
9690
9791
98-func O (w,P,Q,R,S) = {
99- let T = if ((size(R) != 0))
100- then M(R)
92+func M (N) = (size(N) == 64)
93+
94+
95+func O (P) = ("user_status_" + P)
96+
97+
98+func Q (P,R) = ((("art_date_" + R) + "_") + P)
99+
100+
101+func S (P,R) = ((("art_name_" + R) + "_") + P)
102+
103+
104+func T (P,R) = ((("art_desc_" + R) + "_") + P)
105+
106+
107+func U (P,R) = ((("art_display_cid_" + R) + "_") + P)
108+
109+
110+func V (P,R) = ((("art_export_hash_" + R) + "_") + P)
111+
112+
113+func W (P,R) = ((("art_export_cid_" + R) + "_") + P)
114+
115+
116+func X (P,R) = ((("art_maxmint_" + R) + "_") + P)
117+
118+
119+func Y (P,R) = ((("art_signid_" + R) + "_") + P)
120+
121+
122+func Z (P,R) = ((("art_issued_" + R) + "_") + P)
123+
124+
125+func aa (P,R) = ((("art_onsale_" + R) + "_") + P)
126+
127+
128+func ab (P,R) = ((("art_licence_hash_" + R) + "_") + P)
129+
130+
131+func ac (P,R) = ((("art_licence_cid_" + R) + "_") + P)
132+
133+
134+func ad (P,R) = ((("art_tags_" + R) + "_") + P)
135+
136+
137+func ae (P,R) = ((("art_type_" + R) + "_") + P)
138+
139+
140+func af (P,R) = ((("art_note_" + R) + "_") + P)
141+
142+
143+func ag (P,R) = ((("art_crawler_cid_" + R) + "_") + P)
144+
145+
146+func ah (P,R) = ((("art_royalties_" + R) + "_") + P)
147+
148+
149+func ai (P,R) = ((("art_price_" + R) + "_") + P)
150+
151+
152+func aj (P,R) = ((("art_endsale_" + R) + "_") + P)
153+
154+
155+func ak (P,R) = ((("art_assetAccepted_" + R) + "_") + P)
156+
157+
158+func al (P,R) = ((("art_flag_" + R) + "_") + P)
159+
160+
161+func am (an) = ("artist_agent_" + an)
162+
163+
164+func ao (an) = ("artist_agent_primary_" + an)
165+
166+
167+func ap (P,aq) = ((("get_hashbytxidaddr_" + aq) + "_") + P)
168+
169+
170+func ar (H) = ("get_owner_by_hash_" + H)
171+
172+
173+func as (P,at) = ((("get_artidbysignid_" + at) + "_") + P)
174+
175+
176+func au (H,P) = ("get_txid_by_hash_owner_" + toBase58String(sha256_16Kb(toBytes((H + P)))))
177+
178+
179+func av (aw,ax,ay) = if (!(K(aw)))
180+ then throw("Wrong Display CID")
181+ else if (!(K(ax)))
182+ then throw("Wrong Export CID")
183+ else if (if ((ay != ""))
184+ then !(K(ay))
185+ else false)
186+ then throw("Wrong Licence CID")
187+ else true
188+
189+
190+func az (aA,aB) = if (!(M(aA)))
191+ then throw("Export Hash 64 char. max")
192+ else if (!(M(aB)))
193+ then throw("Licence Hash 64 char. max")
101194 else true
102- if (!(T))
103- then throw("CID don't match requirement!")
104- else if (if ((P == ""))
105- then true
106- else (Q == ""))
107- then throw("Name and description cannot be empty")
108- else if ((size(Q) > 600))
109- then throw("600 Char. max description")
110- else if ((size(P) > 45))
111- then throw("45 Char. max name")
112- else {
113- let U = b(B(w))
114- if (if ((U == q))
115- then true
116- else (U == r))
117- then throw("Account suspended/ removed.")
118- else if (if (!(S))
119- then (U == o)
120- else false)
121- then throw("Already registered")
122- else if (if (if (!(S))
123- then (U == "")
124- else false)
125- then l
126- else false)
127- then throw("Can't register, get approved first.")
128- else if (if (if (S)
129- then (U == "")
130- else false)
131- then true
132- else if (S)
133- then (U == n)
134- else false)
135- then throw("Register first")
136- else true
137- }
195+
196+
197+func aC (aD,aE) = if ((size(aD) == 0))
198+ then throw("Field cannot be is empty")
199+ else if ((size(aD) > aE))
200+ then throw((aD + " is too long"))
201+ else true
202+
203+
204+func aF (P) = {
205+ let aG = valueOrElse(getString(h, O(P)), A)
206+ if (if ((aG == A))
207+ then true
208+ else (aG == B))
209+ then "Register this account first with \"Account\" tab"
210+ else if ((aG == y))
211+ then "Account suspended"
212+ else if ((aG == z))
213+ then "Account removed"
214+ else ""
138215 }
139216
140217
141-func V (U,W,X) = {
142- let Y = [p, o, q, r, n, s]
143- let Z = if (containsElement(Y, U))
144- then U
145- else if (if ((U == u))
146- then (X == n)
147- else false)
148- then ""
149- else throw("Unknown status")
150- let aa = e(D(W))
151- if (if ((aa == 0))
152- then (Z != n)
153- else false)
154- then throw("You cant set this status, user is not registered.")
155- else if (if ((X == n))
156- then (Z == n)
157- else false)
158- then throw("User already allowed")
159- else if (if ((X == o))
160- then (Z == n)
161- else false)
162- then throw("User already allowed & registered")
163- else if (if ((X == p))
164- then (Z == n)
165- else false)
166- then throw("User already allowed & verified")
167- else Z
218+func aH (ay,aB) = {
219+ let L = if ((size(ay) == 0))
220+ then u
221+ else ay
222+ let N = if ((size(aB) == 0))
223+ then v
224+ else aB
225+ $Tuple2(L, N)
168226 }
169227
170228
171-func ab (P,R,ac) = (((((("{\"user_name\": \"" + P) + "\", \"user_thumb\":\"") + R) + "\",\"user_date\":\"") + ac) + "\"}")
229+func aI (P,aw,ax,aJ,aA,aK,aL,aM,aN,aO) = {
230+ let aP = aF(P)
231+ if ((aP != ""))
232+ then throw(aP)
233+ else if ((size(aw) == 0))
234+ then throw("Display CID cannot be empty")
235+ else if (!(av(aw, ax, aJ)))
236+ then throw("Problem with CID")
237+ else if (!(az(aA, aK)))
238+ then throw("Problem with Hashes")
239+ else if (!(aC(aL, 100)))
240+ then throw("100 Char. max name")
241+ else if (!(aC(aM, 1000)))
242+ then throw("1000 Char. max description")
243+ else if (if ((0 > aO))
244+ then true
245+ else (aO > 1000))
246+ then throw("Royalties cannot be less than 0% or higher than 10%")
247+ else if ((size(split(aN, ",")) > 5))
248+ then throw("5 tags max.")
249+ else ""
250+ }
172251
173252
174-func ad (ae) = {
175- let af = ae
176- if ($isInstanceOf(af, "String"))
253+func aQ (aR) = if ((size(aR.payments) == 0))
254+ then throw("No payment attached")
255+ else {
256+ let aS = value(aR.payments[0])
257+ let aT = value(aS.amount)
258+ $Tuple2(aS, aT)
259+ }
260+
261+
262+func aU (aR) = {
263+ let aV = aQ(aR)
264+ let aS = aV._1
265+ let aT = aV._2
266+ let aW = if (if (isDefined(aS.assetId))
267+ then (aS.assetId == j)
268+ else false)
269+ then aS.assetId
270+ else throw("Only SIGN token accepted as transaction fee")
271+ if ((aT != C))
272+ then throw(("Payment amount should be " + toString(C)))
273+ else $Tuple2(aT, aW)
274+ }
275+
276+
277+func aX (aY,R) = {
278+ let I = getInteger(this, Z(aY, R))
279+ if ($isInstanceOf(I, "Int"))
177280 then {
178- let ag = af
179- ag
281+ let aZ = I
282+ if ((aZ != 0))
283+ then true
284+ else false
285+ }
286+ else false
287+ }
288+
289+
290+func ba (aR,bb,bc) = {
291+ let bd = aQ(aR)
292+ let aS = bd._1
293+ let aT = bd._2
294+ let aW = if (!(isDefined(aS.assetId)))
295+ then unit
296+ else if (if ((size(bb) > 0))
297+ then (toBase58String(value(aS.assetId)) == bb)
298+ else false)
299+ then aS.assetId
300+ else throw("Wrong asset id")
301+ if (if ((aW == unit))
302+ then (bb != "")
303+ else false)
304+ then throw("Wrong asset id")
305+ else if ((bc != aT))
306+ then throw("Payment don't match")
307+ else $Tuple2(aT, aW)
308+ }
309+
310+
311+func be (aW) = if (if (if (if (if ((aW != toBase58String(j)))
312+ then (aW != toBase58String(m))
313+ else false)
314+ then (aW != "WAVES")
315+ else false)
316+ then (aW != toBase58String(k))
317+ else false)
318+ then (aW != toBase58String(l))
319+ else false)
320+ then throw("Only SIGN, USDN,USDT or WAVES accepted")
321+ else true
322+
323+
324+func bf (aW,bg) = {
325+ let bh = if (d)
326+ then 10
327+ else o("waves_min_sell")
328+ let bi = 1000000
329+ let bj = if (d)
330+ then 1
331+ else (C * 2)
332+ if (if (if (if (if (if ((aW == toBase58String(k)))
333+ then (bi > bg)
334+ else false)
335+ then (bg != 0)
336+ else false)
337+ then true
338+ else if (if ((aW == toBase58String(l)))
339+ then (bi > bg)
340+ else false)
341+ then (bg != 0)
342+ else false)
343+ then true
344+ else if (if ((aW == toBase58String(j)))
345+ then (bj > bg)
346+ else false)
347+ then (bg != 0)
348+ else false)
349+ then true
350+ else if (if (if ((aW == toBase58String(m)))
351+ then true
352+ else (aW == "WAVES"))
353+ then (bh > bg)
354+ else false)
355+ then (bg != 0)
356+ else false)
357+ then throw("Wrong minimum sell price")
358+ else true
359+ }
360+
361+
362+func bk (aW) = if ((aW == "WAVES"))
363+ then unit
364+ else fromBase58String(aW)
365+
366+
367+func bl (bm) = {
368+ let bn = b((bm + "_OPEN"))
369+ if ((bn == ""))
370+ then throw("Bid not found")
371+ else {
372+ let bo = split(bn, "_")
373+ let bp = parseIntValue(bo[1])
374+ let bq = bk(bo[0])
375+ if ((0 >= bp))
376+ then throw("Wrong amount")
377+ else $Tuple2(bp, bq)
378+ }
379+ }
380+
381+
382+func br (aR,bs) = if (!(w))
383+ then throw(x)
384+ else {
385+ let bt = valueOrElse(q((toString(addressFromPublicKey(fromBase58String(bs))) + "_free_txs")), 0)
386+ let P = if (if (if ((toBase58String(aR.caller.bytes) == toString(this)))
387+ then (size(aR.payments) == 0)
388+ else false)
389+ then (bt > 0)
390+ else false)
391+ then toString(addressFromPublicKey(fromBase58String(bs)))
392+ else toBase58String(aR.caller.bytes)
393+ let bu = if ((bs != ""))
394+ then invoke(i, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(bs)))], nil)
395+ else unit
396+ if ((bu == bu))
397+ then $Tuple4(toBase58String(aR.transactionId), P, lastBlock.timestamp, (bt > 0))
398+ else throw("Strict value is not equal to itself.")
399+ }
400+
401+
402+func bv (aR) = if (!(w))
403+ then throw(x)
404+ else $Tuple3(toBase58String(aR.transactionId), toBase58String(aR.caller.bytes), lastBlock.timestamp)
405+
406+
407+func bw (aR,R,bx,by,bz) = {
408+ let bA = bv(aR)
409+ let bB = bA._1
410+ let P = bA._2
411+ let bC = bA._3
412+ let bD = if (if (if ((P == bx))
413+ then (bz != "")
414+ else false)
415+ then (by != "")
416+ else false)
417+ then true
418+ else false
419+ let bE = p(aj(P, R))
420+ if (if (if ((bE != 0))
421+ then (height >= bE)
422+ else false)
423+ then !(bD)
424+ else false)
425+ then throw("Sale ended.")
426+ else {
427+ let bF = (P == bx)
428+ let bG = p("total_nft_issued")
429+ let F = b(Y(bx, R))
430+ let bH = b(S(bx, R))
431+ if ((bH == ""))
432+ then throw("Art doesn't exist")
433+ else {
434+ let bI = r(aa(bx, R))
435+ let bJ = p(Z(bx, R))
436+ let bc = if (bF)
437+ then (C * 2)
438+ else p(ai(bx, R))
439+ let bb = if (bF)
440+ then toBase58String(j)
441+ else b(ak(bx, R))
442+ let bK = p(X(bx, R))
443+ if (if (if (!(bD))
444+ then !(bF)
445+ else false)
446+ then if (if ((0 >= bc))
447+ then true
448+ else !(bI))
449+ then true
450+ else (0 >= bK)
451+ else false)
452+ then throw("Art not for sale")
453+ else if (if (if (!(bD))
454+ then bF
455+ else false)
456+ then (0 >= bK)
457+ else false)
458+ then throw("Max issuable not set")
459+ else {
460+ let aP = aF(bx)
461+ if (if (bD)
462+ then (aP != "")
463+ else false)
464+ then throw(aP)
465+ else {
466+ let bm = ((((((("bid_" + R) + "_") + bx) + "_") + bz) + "_") + by)
467+ let bL = if (bD)
468+ then bl(bm)
469+ else ba(aR, bb, bc)
470+ let aT = bL._1
471+ let aW = bL._2
472+ let bM = valueOrElse(getString(h, am(bx)), g)
473+ let bN = valueOrElse(getInteger(h, ao(bx)), 0)
474+ let bO = q(bx)
475+ let bP = if ((bO > height))
476+ then 0
477+ else if ((aW == j))
478+ then s
479+ else t
480+ let bQ = fraction(aT, bP, 100)
481+ let bR = if (if (if ((bM != g))
482+ then (bN > 0)
483+ else false)
484+ then (height > bO)
485+ else false)
486+ then fraction(aT, bN, 100)
487+ else 0
488+ let bS = (aT - bQ)
489+ if ((bJ == bK))
490+ then throw("Art sold out")
491+ else {
492+ let bT = (bJ + 1)
493+ let bU = ((((((((((("Creator: " + bx) + ",
494+ ArtID: ") + R) + ",
495+ SignID: ") + F) + ",
496+ Artwork name: ") + bH) + ",
497+ Issue: ") + toString(bT)) + "/") + toString(bK))
498+ let bV = Issue(("SA_" + toString((bG + 1))), bU, 1, 0, false)
499+ let bW = calculateAssetId(bV)
500+ let bX = if (if ((bT == bK))
501+ then true
502+ else !(bI))
503+ then false
504+ else true
505+ let bY = if (if (if ((P == bx))
506+ then (bz != "")
507+ else false)
508+ then (by != "")
509+ else false)
510+ then addressFromStringValue(bz)
511+ else aR.caller
512+ let bZ = if (!(isDefined(aW)))
513+ then "WAVES"
514+ else toBase58String(value(aW))
515+ let bn = b((bm + "_OPEN"))
516+ let ca = DeleteEntry((bm + "_OPEN"))
517+ let cb = StringEntry((bm + "_CLOSED"), ((bn + "_") + toString(bC)))
518+ let cc = ((((((("art_sold_" + toString(bT)) + "_of_") + toString(bK)) + "_") + R) + "_") + bx)
519+ let cd = if (!(bD))
520+ then ((((((((((P + "_") + toString(bC)) + "_") + bB) + "_") + toString(bc)) + "_") + bb) + "_") + toBase58String(bW))
521+ else ((((((((((toString(bY) + "_") + toString(bC)) + "_") + bB) + "_") + toString(aT)) + "_") + bZ) + "_") + toBase58String(bW))
522+ let ce = StringEntry(cc, cd)
523+ let cf = if ((bR != 0))
524+ then [ScriptTransfer(Address(fromBase58String(g)), (bQ - bR), aW), ScriptTransfer(Address(fromBase58String(bM)), bR, aW)]
525+ else [ScriptTransfer(Address(fromBase58String(g)), bQ, aW)]
526+ let cg = ([IntegerEntry(Z(bx, R), bT), StringEntry(("nft_" + toBase58String(bW)), cc), IntegerEntry("total_nft_issued", (bG + 1)), IntegerEntry(aj(bx, R), 0), BooleanEntry(aa(bx, R), bX), bV, ScriptTransfer(Address(fromBase58String(bx)), bS, aW), ScriptTransfer(bY, 1, bW)] ++ cf)
527+ if (bD)
528+ then [ce, cb, ca] :: cg
529+ else ce :: cg
530+ }
531+ }
532+ }
533+ }
534+ }
535+ }
536+
537+
538+func ch (ci) = {
539+ let I = ci
540+ if ($isInstanceOf(I, "String"))
541+ then {
542+ let cj = I
543+ cj
180544 }
181545 else throw("Sponsored Public Key String expected")
182546 }
183547
184548
185-func ah (ai,aj) = {
186- let ak = valueOrElse(L((toString(addressFromPublicKey(fromBase58String(aj))) + "_free_txs")), 0)
187- let w = if (if (if ((toBase58String(ai.caller.bytes) == toString(this)))
188- then (size(ai.payments) == 0)
189- else false)
190- then (ak > 0)
191- else false)
192- then toString(addressFromPublicKey(fromBase58String(aj)))
193- else toBase58String(ai.caller.bytes)
194- let al = if ((aj != ""))
195- then invoke(m, "useFreeTx", [toString(addressFromPublicKey(fromBase58String(aj)))], nil)
196- else unit
197- if ((al == al))
198- then $Tuple2(w, (ak > 0))
199- else throw("Strict value is not equal to itself.")
200- }
201-
202-
203-@Callable(am)
204-func setConf (c,an) = {
205- let w = toString(am.caller)
206- if (containsElement([f, toString(this)], w))
207- then [StringEntry(c, an)]
549+@Callable(ck)
550+func setConf (c,cl) = {
551+ let P = toString(ck.caller)
552+ if (containsElement([n, toString(this)], P))
553+ then if (contains(c, "conf_"))
554+ then [StringEntry(c, cl)]
555+ else throw("Entries starting with conf_ only")
208556 else throw("You are not allowed to change this")
209557 }
210558
211559
212560
213-@Callable(am)
214-func appRunning (ao,ap) = {
215- let w = toString(am.caller)
216- if (containsElement([f, toString(this)], w))
217- then [BooleanEntry(g, ao), StringEntry(h, ap)]
218- else throw("You are not allowed to change this")
561+@Callable(aR)
562+func addArtwork (H,F,aL,aM,aN,cm,aw,aA,ax,aB,ay,cn,aO,bs) = {
563+ let co = br(aR, bs)
564+ let R = co._1
565+ let P = co._2
566+ let bC = co._3
567+ let bt = co._4
568+ if (!(M(H)))
569+ then throw("Hash should be 64 characters maximum")
570+ else {
571+ let cp = aH(ay, aB)
572+ let aJ = cp._1
573+ let aK = cp._2
574+ let cq = aI(P, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
575+ if ((cq != ""))
576+ then throw("Something went wrong!")
577+ else {
578+ let cr = (q((P + "_free_drops")) > 0)
579+ let cs = if (cr)
580+ then $Tuple2(0, F)
581+ else aU(aR)
582+ let aT = cs._1
583+ let aW = cs._2
584+ if (!(isDefined(aT)))
585+ then throw("Something went wrong")
586+ else {
587+ let ct = b(au(H, P))
588+ if ((ct != ""))
589+ then throw("You already added it")
590+ else {
591+ let cu = b(ar(H))
592+ if ((cu != ""))
593+ then throw("Hash already registered")
594+ else {
595+ let cv = E(F, P, H)
596+ if (!(cv))
597+ then throw("Sign Certificate not found for this address.")
598+ else {
599+ let cw = if (cr)
600+ then invoke(i, "useFreeDrop", [P], nil)
601+ else unit
602+ if ((cw == cw))
603+ then {
604+ let cx = if (bt)
605+ then [ScriptTransfer(Address(fromBase58String(P)), 0, unit)]
606+ else nil
607+ ([StringEntry(ar(H), P), StringEntry(au(H, P), R), IntegerEntry(Q(P, R), bC), StringEntry(S(P, R), aL), StringEntry(T(P, R), aM), StringEntry(U(P, R), aw), StringEntry(W(P, R), ax), StringEntry(V(P, R), aA), StringEntry(ab(P, R), aK), StringEntry(ac(P, R), aJ), StringEntry(ae(P, R), cm), StringEntry(ad(P, R), aN), IntegerEntry(X(P, R), 0), StringEntry(Y(P, R), F), IntegerEntry(Z(P, R), 0), BooleanEntry(aa(P, R), false), StringEntry(as(P, F), R), StringEntry(ap(P, R), H), StringEntry(ag(P, R), cn), IntegerEntry(ah(P, R), aO), ScriptTransfer(Address(fromBase58String(g)), aT, j)] ++ cx)
608+ }
609+ else throw("Strict value is not equal to itself.")
610+ }
611+ }
612+ }
613+ }
614+ }
615+ }
219616 }
220617
221618
222619
223-@Callable(am)
224-func registrationMode (aq) = {
225- let w = toString(am.caller)
226- if (containsElement([f, toString(this)], w))
227- then [BooleanEntry(i, aq)]
228- else throw("You are not allowed to change this")
229- }
230-
231-
232-
233-@Callable(am)
234-func registerUser (P,Q,R,ar,as,aj) = if (!(j))
235- then throw(k)
620+@Callable(aR)
621+func updateArtwork (aq,aL,aM,aN,cm,aw,aA,ax,aB,ay,cn,aO,bs) = if (!(w))
622+ then throw(x)
236623 else {
237- let at = ah(am, aj)
238- let w = at._1
239- let ak = at._2
240- let au = toBase58String(am.transactionId)
241- let av = lastBlock.timestamp
242- if (!(O(w, P, Q, R, false)))
243- then throw("Something went wrong")
624+ let cy = br(aR, bs)
625+ let bB = cy._1
626+ let P = cy._2
627+ let bC = cy._3
628+ let bt = cy._4
629+ let cz = aH(ay, aB)
630+ let aJ = cz._1
631+ let aK = cz._2
632+ let cq = aI(P, aw, ax, aJ, aA, aK, aL, aM, aN, aO)
633+ if ((cq != ""))
634+ then throw("Something went wrong!")
244635 else {
245- let aw = ab(toBase64String(toBytes(P)), toBase64String(toBytes(R)), toString(av))
246- if (if ((0 > as))
247- then true
248- else (as > 1000))
249- then throw("Royalties cannot be less than 0% or higher than 10%")
636+ let ct = b(S(P, aq))
637+ if ((ct == ""))
638+ then throw("Entry not found")
250639 else {
251- let ax = if (ak)
252- then [ScriptTransfer(Address(fromBase58String(w)), 0, unit)]
253- else nil
254- ([IntegerEntry(D(w), av), StringEntry(v(w), ((au + "_") + toString(av))), StringEntry(x(w), P), StringEntry(y(w), Q), StringEntry(z(w), ar), StringEntry(A(w), R), StringEntry(B(w), o), IntegerEntry(C(w), as), DeleteEntry(("ALLOWED_" + w)), StringEntry(((o + "_") + w), aw)] ++ ax)
640+ let cA = b(al(P, aq))
641+ if ((cA == "ILLEGAL"))
642+ then throw("Cannot update ILLEGAL artwork")
643+ else if (!(aX(P, aq)))
644+ then {
645+ let cx = if (bt)
646+ then [ScriptTransfer(Address(fromBase58String(P)), 0, unit)]
647+ else nil
648+ ([StringEntry(S(P, aq), aL), StringEntry(T(P, aq), aM), StringEntry(U(P, aq), aw), StringEntry(W(P, aq), ax), StringEntry(V(P, aq), aA), StringEntry(ac(P, aq), aJ), StringEntry(ab(P, aq), aK), StringEntry(ad(P, aq), aN), StringEntry(ae(P, aq), cm), StringEntry(ag(P, aq), cn), IntegerEntry(ah(P, aq), aO)] ++ cx)
649+ }
650+ else throw("Already minted")
255651 }
256652 }
257653 }
258654
259655
260656
261-@Callable(am)
262-func updateUser (P,Q,R,ar,as,aj) = if (!(j))
263- then throw(k)
264- else {
265- let ay = ah(am, aj)
266- let w = ay._1
267- let ak = ay._2
268- let U = b(B(w))
269- if (!(O(w, P, Q, R, true)))
270- then throw("Something went wrong")
271- else {
272- let ac = e(D(w))
273- let aw = ab(toBase64String(toBytes(P)), toBase64String(toBytes(R)), toString(ac))
274- if (if ((0 > as))
275- then true
276- else (as > 1000))
277- then throw("Royalties cannot be less than 0% or higher than 10%")
278- else {
279- let ax = if (ak)
280- then [ScriptTransfer(Address(fromBase58String(w)), 0, unit)]
281- else nil
282- ([StringEntry(x(w), P), StringEntry(y(w), Q), StringEntry(z(w), ar), StringEntry(A(w), R), IntegerEntry(C(w), as), StringEntry(((U + "_") + w), aw)] ++ ax)
283- }
284- }
285- }
286-
287-
288-
289-@Callable(am)
290-func setERC20User (az,aj) = if (!(j))
291- then throw(k)
292- else {
293- let aA = ah(am, aj)
294- let w = aA._1
295- let ak = aA._2
296- let U = b(B(w))
297- if (if ((U != o))
298- then (U != p)
299- else false)
300- then throw("Not allowed to set ERC20 address")
301- else {
302- let aB = take(az, 2)
303- if (if ((aB != "0x"))
304- then true
305- else (size(az) != 42))
306- then throw("This is not an erc20 address")
307- else {
308- let ax = if (ak)
309- then [ScriptTransfer(Address(fromBase58String(w)), 0, unit)]
310- else nil
311- ([StringEntry(E(w), az)] ++ ax)
312- }
313- }
314- }
315-
316-
317-
318-@Callable(am)
319-func changeUserStatus (W,U,aC) = {
320- let w = toString(am.caller)
321- let X = b(B(W))
322- let Z = V(U, W, X)
323- let P = toBase64String(toBytes(b(x(W))))
324- let R = toBase64String(toBytes(b(A(W))))
325- let ac = e(D(W))
326- let aw = ab(P, R, toString(ac))
327- if (containsElement([f, toString(this)], w))
328- then [StringEntry(B(W), Z), DeleteEntry(((X + "_") + W)), StringEntry(((Z + "_") + W), aw), StringEntry(("user_note_" + W), aC)]
329- else throw("Not allowed to change user status")
657+@Callable(aR)
658+func flagArtwork (R,cB,cA,cC) = {
659+ let cD = bv(aR)
660+ let bB = cD._1
661+ let P = cD._2
662+ if (containsElement([n, toString(this)], P))
663+ then if (containsElement(["CONSENT", "", "CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cA))
664+ then [StringEntry(al(cB, R), cA), StringEntry(af(cB, R), cC)]
665+ else throw(("Unknow status " + cA))
666+ else throw("You are not allowed")
330667 }
331668
332669
333670
334-@Callable(am)
335-func deleteUser (W) = {
336- let w = toString(am.caller)
337- let X = b(B(W))
338- if (containsElement([f, toString(this)], w))
339- then [DeleteEntry(D(W)), DeleteEntry(v(W)), DeleteEntry(x(W)), DeleteEntry(y(W)), DeleteEntry(z(W)), DeleteEntry(A(W)), DeleteEntry(("user_note_" + W)), DeleteEntry(((X + "_") + W)), DeleteEntry(C(W)), StringEntry(B(W), r)]
340- else throw("Not allowed")
671+@Callable(aR)
672+func deleteArtwork (R,cB) = {
673+ let cE = bv(aR)
674+ let bB = cE._1
675+ let P = cE._2
676+ let aY = if (containsElement([n, toString(this)], P))
677+ then cB
678+ else P
679+ let ct = valueOrErrorMessage(b(S(aY, R)), "No art matching for this address")
680+ if ((ct == ""))
681+ then throw("No art matching for this address")
682+ else {
683+ let H = b(ap(aY, R))
684+ if ((H == ""))
685+ then throw("No art hash matching for this address")
686+ else {
687+ let F = b(Y(aY, R))
688+ if ((F == ""))
689+ then throw("No SIGN ID matching")
690+ else {
691+ let cF = [DeleteEntry(Q(aY, R)), DeleteEntry(S(aY, R)), DeleteEntry(T(aY, R)), DeleteEntry(U(aY, R)), DeleteEntry(W(aY, R)), DeleteEntry(V(aY, R)), DeleteEntry(ab(aY, R)), DeleteEntry(ac(aY, R)), DeleteEntry(ae(aY, R)), DeleteEntry(ad(aY, R)), DeleteEntry(X(aY, R)), DeleteEntry(Y(aY, R)), DeleteEntry(Z(aY, R)), DeleteEntry(aa(aY, R)), DeleteEntry(al(aY, R)), DeleteEntry(ai(aY, R)), DeleteEntry(ak(aY, R)), DeleteEntry(ar(H)), DeleteEntry(as(aY, F)), DeleteEntry(au(H, aY)), DeleteEntry(aj(aY, R)), DeleteEntry(af(aY, R)), DeleteEntry(ag(aY, R)), DeleteEntry(ah(aY, R))]
692+ if (!(aX(aY, R)))
693+ then if (!(w))
694+ then throw(x)
695+ else cF
696+ else if (containsElement([n, toString(this)], P))
697+ then cF
698+ else throw("Art already minted, you cannot delete it")
699+ }
700+ }
701+ }
341702 }
342703
343704
344705
345-@Callable(ai)
346-func setAgent (G,I,aD,aE) = if (!(j))
347- then throw(k)
348- else {
349- let w = toString(ai.caller)
350- if (containsElement([f, toString(this)], w))
351- then if (if ((size(G) != 35))
352- then true
353- else (size(I) != 35))
354- then throw("Wrong address")
355- else [StringEntry(F(G), I), StringEntry(H(I, G), G), IntegerEntry(J(G), aD), IntegerEntry(K(G), aE)]
356- else throw("You are not allowed")
357- }
706+@Callable(aR)
707+func sellArtwork (R,bg,cG,aW,bE,bs) = {
708+ let cH = br(aR, bs)
709+ let bB = cH._1
710+ let P = cH._2
711+ let bC = cH._3
712+ let bt = cH._4
713+ let bH = b(S(P, R))
714+ if ((bH == ""))
715+ then throw("This art doesn't match your account")
716+ else {
717+ let cA = b(al(P, R))
718+ if (containsElement(["CHANGE_REQUIRED", "FLAGGED", "ILLEGAL"], cA))
719+ then throw("Flagged artwork")
720+ else {
721+ let cI = p(("current_bidamount_" + R))
722+ if ((0 > bE))
723+ then throw("Negative end")
724+ else if (if ((bE > 0))
725+ then if ((cG != 1))
726+ then true
727+ else (bg != 0)
728+ else false)
729+ then throw("Timed offer only allowed for unique edition and offer only")
730+ else {
731+ let cJ = if ((bE == 0))
732+ then 0
733+ else height
734+ if (!(be(aW)))
735+ then throw("Something went wrong!")
736+ else if (!(bf(aW, bg)))
737+ then throw("Something went wrong!")
738+ else {
739+ let aP = aF(P)
740+ if ((aP != ""))
741+ then throw(aP)
742+ else {
743+ let bJ = p(Z(P, R))
744+ let bK = p(X(P, R))
745+ if ((cG > 100))
746+ then throw("100 editions max per artwork")
747+ else if (if ((bJ != 0))
748+ then (bJ == bK)
749+ else false)
750+ then throw("Max edition reached.")
751+ else if (if ((bJ > 0))
752+ then (bK != cG)
753+ else false)
754+ then throw("Cannot change maximum issuable anymore")
755+ else if (if ((cI > 0))
756+ then (bK != cG)
757+ else false)
758+ then throw("Cannot change maximum issuable with active orders")
759+ else {
760+ let bX = if (if ((bg > 0))
761+ then (cG > 0)
762+ else false)
763+ then true
764+ else false
765+ let cx = if (bt)
766+ then [ScriptTransfer(Address(fromBase58String(P)), 0, unit)]
767+ else nil
768+ ([BooleanEntry(aa(P, R), bX), IntegerEntry(ai(P, R), bg), IntegerEntry(X(P, R), cG), StringEntry(ak(P, R), aW), IntegerEntry(aj(P, R), (cJ + bE))] ++ cx)
769+ }
770+ }
771+ }
772+ }
773+ }
774+ }
775+ }
358776
359777
360778
361-@Callable(ai)
362-func unsetAgent (G,I) = if (!(j))
363- then throw(k)
364- else {
365- let w = toString(ai.caller)
366- if (containsElement([f, toString(this)], w))
367- then if (if ((size(G) != 35))
368- then true
369- else (size(I) != 35))
370- then throw("Wrong address")
371- else [DeleteEntry(F(G)), DeleteEntry(H(I, G)), DeleteEntry(J(G)), DeleteEntry(K(G))]
372- else throw("You are not allowed")
373- }
779+@Callable(aR)
780+func buyArtwork (R,bx) = bw(aR, R, bx, "", "")
374781
375782
376783
377-@Callable(ai)
378-func deleteEntry (aF) = {
379- let w = toString(ai.caller)
380- if ((w == f))
381- then [DeleteEntry(aF)]
382- else throw("no")
784+@Callable(aR)
785+func setBid (R,bx) = {
786+ let cK = bv(aR)
787+ let bB = cK._1
788+ let P = cK._2
789+ let bC = cK._3
790+ let cL = aQ(aR)
791+ let aS = cL._1
792+ let aT = cL._2
793+ let aW = if (!(isDefined(aS.assetId)))
794+ then "WAVES"
795+ else toBase58String(value(aS.assetId))
796+ let bE = p(aj(bx, R))
797+ if (if ((bE != 0))
798+ then (height >= bE)
799+ else false)
800+ then throw("Sale ended.")
801+ else {
802+ let cI = p(("current_bidamount_" + R))
803+ if (!(be(aW)))
804+ then throw("asset not accepted")
805+ else if (!(bf(aW, aT)))
806+ then throw("Wrong min sell")
807+ else {
808+ let bJ = p(Z(bx, R))
809+ let bK = p(X(bx, R))
810+ if ((0 >= bK))
811+ then throw("No max edition set for this artwork")
812+ else if ((bJ >= bK))
813+ then throw("Sold out, you cannot bid")
814+ else [StringEntry((((((((("bid_" + R) + "_") + bx) + "_") + P) + "_") + bB) + "_OPEN"), ((((aW + "_") + toString(aT)) + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + R), (cI + 1))]
815+ }
816+ }
383817 }
384818
385819
386-@Verifier(aG)
387-func aH () = {
388- let af = aG
389- if ($isInstanceOf(af, "InvokeScriptTransaction"))
820+
821+@Callable(aR)
822+func acceptBid (R,bx,by,bz) = {
823+ let cM = bv(aR)
824+ let bB = cM._1
825+ let P = cM._2
826+ let bC = cM._3
827+ if ((P != bx))
828+ then throw("You cannot do this action")
829+ else bw(aR, R, bx, by, bz)
830+ }
831+
832+
833+
834+@Callable(aR)
835+func cancelBid (R,bx,by,bz) = {
836+ let cN = bv(aR)
837+ let bB = cN._1
838+ let P = cN._2
839+ let bC = cN._3
840+ if (if ((P != bz))
841+ then (P != bx)
842+ else false)
843+ then throw("You cannot do this action")
844+ else {
845+ let cO = if ((P == bx))
846+ then bz
847+ else P
848+ let cI = p(("current_bidamount_" + R))
849+ let bm = ((((((("bid_" + R) + "_") + bx) + "_") + bz) + "_") + by)
850+ let bn = b((bm + "_OPEN"))
851+ if ((bn == ""))
852+ then throw("Bid not found")
853+ else {
854+ let bo = split(bn, "_")
855+ let aW = bk(bo[0])
856+ let cP = "CANCELED"
857+[DeleteEntry((bm + "_OPEN")), StringEntry(((bm + "_") + cP), ((bn + "_") + toString(bC))), IntegerEntry(("current_bidamount_" + R), (cI - 1)), ScriptTransfer(Address(fromBase58String(cO)), parseIntValue(bo[1]), aW)]
858+ }
859+ }
860+ }
861+
862+
863+@Verifier(cQ)
864+func cR () = {
865+ let I = cQ
866+ if ($isInstanceOf(I, "InvokeScriptTransaction"))
390867 then {
391- let aI = af
392- if (if (if ((aI.function == "registerUser"))
393- then (aI.dApp == this)
868+ let cS = I
869+ if (if (if ((cS.function == "addArtwork"))
870+ then (cS.dApp == this)
394871 else false)
395- then (aI.fee == 500000)
872+ then (cS.fee == 500000)
396873 else false)
397- then sigVerify(aG.bodyBytes, aG.proofs[0], fromBase58String(ad(aI.args[5])))
398- else if (if (if ((aI.function == "updateUser"))
399- then (aI.dApp == this)
874+ then sigVerify(cQ.bodyBytes, cQ.proofs[0], fromBase58String(ch(cS.args[13])))
875+ else if (if (if ((cS.function == "updateArtwork"))
876+ then (cS.dApp == this)
400877 else false)
401- then (aI.fee == 500000)
878+ then (cS.fee == 500000)
402879 else false)
403- then sigVerify(aG.bodyBytes, aG.proofs[0], fromBase58String(ad(aI.args[5])))
404- else if (if (if ((aI.function == "setERC20User"))
405- then (aI.dApp == this)
880+ then sigVerify(cQ.bodyBytes, cQ.proofs[0], fromBase58String(ch(cS.args[12])))
881+ else if (if (if ((cS.function == "sellArtwork"))
882+ then (cS.dApp == this)
406883 else false)
407- then (aI.fee == 500000)
884+ then (cS.fee == 500000)
408885 else false)
409- then sigVerify(aG.bodyBytes, aG.proofs[0], fromBase58String(ad(aI.args[2])))
410- else sigVerify(aG.bodyBytes, aG.proofs[0], aG.senderPublicKey)
886+ then sigVerify(cQ.bodyBytes, cQ.proofs[0], fromBase58String(ch(cS.args[5])))
887+ else sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
411888 }
412- else sigVerify(aG.bodyBytes, aG.proofs[0], aG.senderPublicKey)
889+ else sigVerify(cQ.bodyBytes, cQ.proofs[0], cQ.senderPublicKey)
413890 }
414891

github/deemru/w8io/169f3d6 
104.37 ms