tx · 4zf1kkxY6RRgmPr7B4XkifUxHzrVN5fU4oDpprZMu5Mx 3NCroKxpCWCYijwjiVBg6hc2T7DaajrHuBr: -0.02900000 Waves 2022.07.11 18:49 [2135272] smart account 3NCroKxpCWCYijwjiVBg6hc2T7DaajrHuBr > SELF 0.00000000 Waves
{ "type": 13, "id": "4zf1kkxY6RRgmPr7B4XkifUxHzrVN5fU4oDpprZMu5Mx", "fee": 2900000, "feeAssetId": null, "timestamp": 1657554601253, "version": 1, "sender": "3NCroKxpCWCYijwjiVBg6hc2T7DaajrHuBr", "senderPublicKey": "4j5ighurrUZ2WcdBTRGqBfXs5fz9YDA76D4gtpZ9basj", "proofs": [ "577FDXeCNLf5QbypYzcdnpmCupEDyai5848kcdZqjcXLfvV6yf4zbL2T6QdyrU3anz89YpCsAMK5EQszR1DZ96t5" ], "script": "base64:AAIFAAAAAAAAADQIAhIDCgEIEgkKBwgICAgBCAgSAwoBARIAEgASBQoDCAgIEgQKAggBEgMKAQgSAwoBCBIAAAAAOgAAAAADU0VQAgAAAAJfXwAAAAAFRU1QVFkCAAAAAAEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQAAAANrZXkJAQAAABN2YWx1ZU9yRXJyb3JNZXNzYWdlAAAAAgkABB0AAAACBQAAAAR0aGlzBQAAAANrZXkJAAEsAAAAAgIAAAAVTm8gZGF0YSBmb3IgdGhpcy5rZXk9BQAAAANrZXkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABAAAAA2tleQkBAAAAE3ZhbHVlT3JFcnJvck1lc3NhZ2UAAAACCQAEGwAAAAIFAAAABHRoaXMFAAAAA2tleQkAASwAAAACAgAAABVObyBkYXRhIGZvciB0aGlzLmtleT0FAAAAA2tleQEAAAAHdGVzdGluZwAAAAEAAAADa2V5CQEAAAATdmFsdWVPckVycm9yTWVzc2FnZQAAAAIJAAQbAAAAAgUAAAAEdGhpcwUAAAADa2V5CQABLAAAAAICAAAAFU5vIGRhdGEgZm9yIHRoaXMua2V5PQUAAAADa2V5AQAAABNrZXlNYW5hZ2VyUHVibGljS2V5AAAAAAkABLkAAAACCQAETAAAAAICAAAAAiVzCQAETAAAAAICAAAAEG1hbmFnZXJQdWJsaWNLZXkFAAAAA25pbAUAAAADU0VQAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAABdwZW5kaW5nTWFuYWdlclB1YmxpY0tleQUAAAADbmlsBQAAAANTRVABAAAADmZhaWxFeGVjdXRlR2V0AAAABAAAAANtc2cAAAAMYmFzZUFzc2V0U3RyAAAADnVzZXJBZGRyZXNzU3RyAAAACmdldFR4SWRTdHIJAAACAAAAAQkAASwAAAACCQABLAAAAAIJAAEsAAAAAgkAASwAAAACCQABLAAAAAIJAAEsAAAAAgUAAAADbXNnAgAAAA86IGJhc2VBc3NldFN0cj0FAAAADGJhc2VBc3NldFN0cgIAAAAQIHVzZXJBZGRyZXNzU3RyPQUAAAAOdXNlckFkZHJlc3NTdHICAAAADCBnZXRUeElkU3RyPQUAAAAKZ2V0VHhJZFN0cgEAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAJAAS5AAAAAgkABEwAAAACAgAAAAIlcwkABEwAAAACAgAAABNhc3NldHNTdG9yZUNvbnRyYWN0BQAAAANuaWwFAAAAA1NFUAEAAAALa2V5QXNzZXRDZmcAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAABclcyVzJXNfX2NvbmZpZ19fYXNzZXRfXwUAAAAMYmFzZUFzc2V0U3RyAQAAAA9rZXlQcm94eUFkZHJlc3MAAAABAAAAB2Fzc2V0SWQJAAS5AAAAAgkABEwAAAACAgAAAAQlcyVzCQAETAAAAAICAAAADHByb3h5QWRkcmVzcwkABEwAAAACBQAAAAdhc3NldElkBQAAAANuaWwFAAAAA1NFUAEAAAAKa2V5QmFsYW5jZQAAAAEAAAAHYXNzZXRJZAkABLkAAAACCQAETAAAAAICAAAABCVzJXMJAARMAAAAAgIAAAAHYmFsYW5jZQkABEwAAAACBQAAAAdhc3NldElkBQAAAANuaWwFAAAAA1NFUAEAAAAWa2V5TmV4dEludGVybmFsQXNzZXRJZAAAAAACAAAAFyVzX19uZXh0SW50ZXJuYWxBc3NldElkAQAAAAxrZXlQcmljZUxhc3QAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABUlcyVzJWRfX3ByaWNlX19sYXN0X18FAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgEAAAASa2V5VG9wVXBMYXN0SGVpZ2h0AAAAAgAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIAAAAGc2VuZGVyCQAEuQAAAAIJAARMAAAAAgIAAAAfJXMlcyVzJWQlc19fdG9wdXBfX2xhc3RfX2hlaWdodAkABEwAAAACBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAARMAAAAAgUAAAAGc2VuZGVyBQAAAANuaWwFAAAAA1NFUAEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAwAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIAAAABaAAAAAl0aW1lc3RhbXAJAAS5AAAAAgkABEwAAAACAgAAABolcyVzJWQlZCVkX19wcmljZV9faGlzdG9yeQkABEwAAAACBQAAABVpbnRlcm5hbEJhc2V0QXNzZXRTdHIJAARMAAAAAgkAAaQAAAABBQAAAAFoCQAETAAAAAIJAAGkAAAAAQUAAAAJdGltZXN0YW1wBQAAAANuaWwFAAAAA1NFUAEAAAAOa2V5VG90YWxMb2NrZWQAAAABAAAAFWludGVybmFsQmFzZXRBc3NldFN0cgkAASwAAAACAgAAABclcyVzJWRfX3RvdGFsX19sb2NrZWRfXwUAAAAVaW50ZXJuYWxCYXNldEFzc2V0U3RyAQAAABRrZXlUb3RhbExvY2tlZEJ5VXNlcgAAAAIAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAAOdXNlckFkZHJlc3NTdHIJAAS5AAAAAgkABEwAAAACAgAAABclcyVzJWQlc19fdG90YWxfX2xvY2tlZAkABEwAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACBQAAAA51c2VyQWRkcmVzc1N0cgUAAAADbmlsBQAAAANTRVABAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABAAAAEWludGVybmFsQmFzZUFzc2V0CQABLAAAAAICAAAAKCVzJXMlZF9fbWFwcGluZ3NfX2ludGVybmFsMmJhc2VBc3NldElkX18JAAGkAAAAAQUAAAARaW50ZXJuYWxCYXNlQXNzZXQBAAAAH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQAAAABAAAADGJhc2VBc3NldFN0cgkAASwAAAACAgAAACglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQAAAAxiYXNlQXNzZXRTdHIBAAAAHGtleU1hcHBpbmdzU2hhcmUyYmFzZUFzc2V0SWQAAAABAAAADXNoYXJlQXNzZXRTdHIJAAEsAAAAAgIAAAAlJXMlcyVzX19tYXBwaW5nc19fc2hhcmUyYmFzZUFzc2V0SWRfXwUAAAANc2hhcmVBc3NldFN0cgEAAAAca2V5TWFwcGluZ3NCYXNlQXNzZXQyc2hhcmVJZAAAAAEAAAAMYmFzZUFzc2V0U3RyCQABLAAAAAICAAAAJSVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJzaGFyZUlkX18FAAAADGJhc2VBc3NldFN0cgEAAAAXa2V5U2h1dGRvd25QdXRPcGVyYXRpb24AAAABAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABLAAAAAICAAAAFyVzJXMlZF9fc2h1dGRvd25fX3B1dF9fBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgEAAAASa2V5U2h1dGRvd25NYW5hZ2VyAAAAAQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAASwAAAACAgAAABslcyVzJWRfX3NodXRkb3duX19tYW5hZ2VyX18FAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAQAAABNhc3NldHNTdG9yZUNvbnRyYWN0AAAAAAkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAAWa2V5QXNzZXRzU3RvcmVDb250cmFjdAAAAAAAAAAAEklkeENmZ1NoYXJlQXNzZXRJZAAAAAAAAAAAAQAAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQAAAAAAAAAAAIAAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMAAAAAAAAAAAMAAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlAAAAAAAAAAAEAAAAABRJZHhDZmdHZXREZWxheUJsb2NrcwAAAAAAAAAABQEAAAAMZGF0YUFzc2V0Q2ZnAAAABQAAAA1zaGFyZUFzc2V0U3RyAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMAAAARZGVjaW1hbHNNdWx0UHJpY2UAAAAQZ2V0RGVsYXlJbkJsb2NrcwkABLkAAAACCQAETAAAAAICAAAACiVzJWQlZCVkJWQJAARMAAAAAgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkABEwAAAACCQABpAAAAAEFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAARMAAAAAgkAAaQAAAABBQAAABFkZWNpbWFsc011bHRQcmljZQkABEwAAAACCQABpAAAAAEFAAAAEGdldERlbGF5SW5CbG9ja3MFAAAAA25pbAUAAAADU0VQAAAAABNJZHhUb3RhbExvY2tlZFNoYXJlAAAAAAAAAAABAAAAABJJZHhUb3RhbExvY2tlZEJhc2UAAAAAAAAAAAIBAAAAD2RhdGFUb3RhbExvY2tlZAAAAAIAAAAQc2hhcmVBc3NldEFtb3VudAAAAA9iYXNlQXNzZXRBbW91bnQJAAS5AAAAAgkABEwAAAACAgAAAAQlZCVkCQAETAAAAAIJAAGkAAAAAQUAAAAQc2hhcmVBc3NldEFtb3VudAkABEwAAAACCQABpAAAAAEFAAAAD2Jhc2VBc3NldEFtb3VudAUAAAADbmlsBQAAAANTRVABAAAAD3JlYWRUb3RhbExvY2tlZAAAAAEAAAADa2V5BAAAABB0b3RhbExvY2tlZEFycmF5CQAEtQAAAAIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQdAAAAAgUAAAAEdGhpcwUAAAADa2V5CQEAAAAPZGF0YVRvdGFsTG9ja2VkAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAUAAAADU0VQCQAETAAAAAIA//////////8JAARMAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAE0lkeFRvdGFsTG9ja2VkU2hhcmUJAARMAAAAAgkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAEklkeFRvdGFsTG9ja2VkQmFzZQUAAAADbmlsAQAAAAxrZXlPcGVyYXRpb24AAAAEAAAADW9wZXJhdGlvblR5cGUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIAAAALdXNlckFkZHJlc3MAAAAEdHhJZAkABLkAAAACCQAETAAAAAICAAAACCVzJWQlcyVzCQAETAAAAAIFAAAADW9wZXJhdGlvblR5cGUJAARMAAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgUAAAALdXNlckFkZHJlc3MJAARMAAAAAgUAAAAEdHhJZAUAAAADbmlsBQAAAANTRVAAAAAADUlkeE9wZXJTdGF0dXMAAAAAAAAAAAEAAAAAD0lkeE9wZXJJbkFtb3VudAAAAAAAAAAAAgAAAAAMSWR4T3BlclByaWNlAAAAAAAAAAADAAAAABBJZHhPcGVyT3V0QW1vdW50AAAAAAAAAAAEAAAAABJJZHhPcGVyU3RhcnRIZWlnaHQAAAAAAAAAAAUAAAAAFUlkeE9wZXJTdGFydFRpbWVzdGFtcAAAAAAAAAAABgAAAAAQSWR4T3BlckVuZEhlaWdodAAAAAAAAAAABwAAAAATSWR4T3BlckVuZFRpbWVzdGFtcAAAAAAAAAAACAEAAAAecHJpdmF0ZURhdGFPcGVyYXRpb25BbGxTdHJpbmdzAAAACAAAAAZzdGF0dXMAAAANaW5Bc3NldEFtb3VudAAAAAVwcmljZQAAAA5vdXRBc3NldEFtb3VudAAAAAtzdGFydEhlaWdodAAAAA5zdGFydFRpbWVzdGFtcAAAAAllbmRIZWlnaHQAAAAMZW5kVGltZXN0YW1wCQAEuQAAAAIJAARMAAAAAgIAAAAQJXMlZCVkJWQlZCVkJWQlZAkABEwAAAACBQAAAAZzdGF0dXMJAARMAAAAAgUAAAANaW5Bc3NldEFtb3VudAkABEwAAAACBQAAAAVwcmljZQkABEwAAAACBQAAAA5vdXRBc3NldEFtb3VudAkABEwAAAACBQAAAAtzdGFydEhlaWdodAkABEwAAAACBQAAAA5zdGFydFRpbWVzdGFtcAkABEwAAAACBQAAAAllbmRIZWlnaHQJAARMAAAAAgUAAAAMZW5kVGltZXN0YW1wBQAAAANuaWwFAAAAA1NFUAEAAAANZGF0YU9wZXJhdGlvbgAAAAgAAAAGc3RhdHVzAAAADWluQXNzZXRBbW91bnQAAAAFcHJpY2UAAAAOb3V0QXNzZXRBbW91bnQAAAALc3RhcnRIZWlnaHQAAAAOc3RhcnRUaW1lc3RhbXAAAAAJZW5kSGVpZ2h0AAAADGVuZFRpbWVzdGFtcAkBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAgFAAAABnN0YXR1cwkAAaQAAAABBQAAAA1pbkFzc2V0QW1vdW50CQABpAAAAAEFAAAABXByaWNlCQABpAAAAAEFAAAADm91dEFzc2V0QW1vdW50CQABpAAAAAEFAAAAC3N0YXJ0SGVpZ2h0CQABpAAAAAEFAAAADnN0YXJ0VGltZXN0YW1wCQABpAAAAAEFAAAACWVuZEhlaWdodAkAAaQAAAABBQAAAAxlbmRUaW1lc3RhbXABAAAAHGRhdGFPcGVyYXRpb25FeGVjdXRpb25VcGRhdGUAAAADAAAADWN1cnJPcGVyQXJyYXkAAAAJbmV3U3RhdHVzAAAAD25ld0VuZFRpbWVzdGFtcAkBAAAAHnByaXZhdGVEYXRhT3BlcmF0aW9uQWxsU3RyaW5ncwAAAAgFAAAACW5ld1N0YXR1cwkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAAA9JZHhPcGVySW5BbW91bnQJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAAMSWR4T3BlclByaWNlCQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAAEElkeE9wZXJPdXRBbW91bnQJAAGRAAAAAgUAAAANY3Vyck9wZXJBcnJheQUAAAASSWR4T3BlclN0YXJ0SGVpZ2h0CQABkQAAAAIFAAAADWN1cnJPcGVyQXJyYXkFAAAAFUlkeE9wZXJTdGFydFRpbWVzdGFtcAkAAZEAAAACBQAAAA1jdXJyT3BlckFycmF5BQAAABBJZHhPcGVyRW5kSGVpZ2h0CQABpAAAAAEFAAAAD25ld0VuZFRpbWVzdGFtcAEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQAAAAxiYXNlQXNzZXRTdHIEAAAAA2tleQkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQAEtQAAAAIJAQAAAA9nZXRTdHJpbmdPckZhaWwAAAABBQAAAANrZXkFAAAAA1NFUAEAAAAUaW5jcmVtZW50VG90YWxMb2NrZWQAAAADAAAAA2tleQAAABBzaGFyZUFzc2V0QW1vdW50AAAAD2Jhc2VBc3NldEFtb3VudAQAAAAJZGF0YUFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAAA9kYXRhVG90YWxMb2NrZWQAAAACCQAAZAAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABNJZHhUb3RhbExvY2tlZFNoYXJlBQAAABBzaGFyZUFzc2V0QW1vdW50CQAAZAAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABJJZHhUb3RhbExvY2tlZEJhc2UFAAAAD2Jhc2VBc3NldEFtb3VudAEAAAAUZGVjcmVtZW50VG90YWxMb2NrZWQAAAADAAAAA2tleQAAABBzaGFyZUFzc2V0QW1vdW50AAAAD2Jhc2VBc3NldEFtb3VudAQAAAAJZGF0YUFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQUAAAADa2V5CQEAAAALU3RyaW5nRW50cnkAAAACBQAAAANrZXkJAQAAAA9kYXRhVG90YWxMb2NrZWQAAAACCQAAZQAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABNJZHhUb3RhbExvY2tlZFNoYXJlBQAAABBzaGFyZUFzc2V0QW1vdW50CQAAZQAAAAIJAAGRAAAAAgUAAAAJZGF0YUFycmF5BQAAABJJZHhUb3RhbExvY2tlZEJhc2UFAAAAD2Jhc2VBc3NldEFtb3VudAEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAAEAAAAByRtYXRjaDAJAAQiAAAAAQkBAAAAE2tleU1hbmFnZXJQdWJsaWNLZXkAAAAAAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAAZTdHJpbmcEAAAAAXMFAAAAByRtYXRjaDAJAAJZAAAAAQUAAAABcwMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAEVW5pdAUAAAAEdW5pdAkAAAIAAAABAgAAAAtNYXRjaCBlcnJvcgEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAckbWF0Y2gwCQAEIgAAAAEJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABlN0cmluZwQAAAABcwUAAAAHJG1hdGNoMAkAAlkAAAABBQAAAAFzAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0BQAAAAR1bml0CQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQAAAAdhc3NldElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEHwAAAAEJAQAAAAprZXlCYWxhbmNlAAAAAQUAAAAHYXNzZXRJZAAAAAAAAAAAAAEAAAAJY2FsY1ByaWNlAAAABgAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgAAAAtiYXNlQXNzZXRJZAAAAA90b3BVcEJhc2VBbW91bnQAAAAMc2hhcmVBc3NldElkAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAAEHRvdGFsTG9ja2VkQXJyYXkJAQAAAA9yZWFkVG90YWxMb2NrZWQAAAABCQEAAAAOa2V5VG90YWxMb2NrZWQAAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgQAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CQABkQAAAAIFAAAAEHRvdGFsTG9ja2VkQXJyYXkFAAAAEklkeFRvdGFsTG9ja2VkQmFzZQQAAAAQYmFzZUFzc2V0QmFsYW5jZQkBAAAADWJhbGFuY2VPclplcm8AAAABCQACWAAAAAEFAAAAC2Jhc2VBc3NldElkBAAAAB9iYXNlQXNzZXRCYWxhbmNlQ29uc2lkZXJpbmdMb2NrCQAAZAAAAAIFAAAAEGJhc2VBc3NldEJhbGFuY2UFAAAAD3RvcFVwQmFzZUFtb3VudAMJAABmAAAAAgAAAAAAAAAAAAUAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawkAAAIAAAABCQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAADZiYXNlQXNzZXRCYWxhbmNlQ29uc2lkZXJpbmdMb2NrIDwgMDogYmFzZUFzc2V0QmFsYW5jZT0JAAGkAAAAAQUAAAAQYmFzZUFzc2V0QmFsYW5jZQIAAAAhIGJhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2s9CQABpAAAAAEFAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sEAAAADXNoYXJlRW1pc3Npb24ICQEAAAAFdmFsdWUAAAABCQAD7AAAAAEFAAAADHNoYXJlQXNzZXRJZAAAAAhxdWFudGl0eQQAAAAFcHJpY2UDCQAAAAAAAAIFAAAADXNoYXJlRW1pc3Npb24AAAAAAAAAAAAJAABoAAAAAgAAAAAAAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAABrAAAAAwUAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawUAAAARZGVjaW1hbHNNdWx0UHJpY2UFAAAADXNoYXJlRW1pc3Npb24JAAUXAAAABQUAAAAFcHJpY2UFAAAAEGJhc2VBc3NldEJhbGFuY2UFAAAAFXRvdGFsTG9ja2VkQmFzZUFtb3VudAUAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawUAAAANc2hhcmVFbWlzc2lvbgEAAAAIZ2V0UHJpY2UAAAAFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyAAAAC2Jhc2VBc3NldElkAAAADHNoYXJlQXNzZXRJZAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzAAAAEWRlY2ltYWxzTXVsdFByaWNlBAAAABB0b3RhbExvY2tlZEFycmF5CQEAAAAPcmVhZFRvdGFsTG9ja2VkAAAAAQkBAAAADmtleVRvdGFsTG9ja2VkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIEAAAAFXRvdGFsTG9ja2VkQmFzZUFtb3VudAkAAZEAAAACBQAAABB0b3RhbExvY2tlZEFycmF5BQAAABJJZHhUb3RhbExvY2tlZEJhc2UEAAAAEGJhc2VBc3NldEJhbGFuY2UJAQAAAA1iYWxhbmNlT3JaZXJvAAAAAQkAAlgAAAABBQAAAAtiYXNlQXNzZXRJZAQAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawUAAAAQYmFzZUFzc2V0QmFsYW5jZQQAAAANc2hhcmVFbWlzc2lvbggJAQAAAAV2YWx1ZQAAAAEJAAPsAAAAAQUAAAAMc2hhcmVBc3NldElkAAAACHF1YW50aXR5BAAAAAVwcmljZQkBAAAABXZhbHVlAAAAAQkABB8AAAABCQEAAAAMa2V5UHJpY2VMYXN0AAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAUXAAAABQUAAAAFcHJpY2UFAAAAEGJhc2VBc3NldEJhbGFuY2UFAAAAFXRvdGFsTG9ja2VkQmFzZUFtb3VudAUAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawUAAAANc2hhcmVFbWlzc2lvbgEAAAAbcHJpdmF0ZUN1cnJlbnRTeXNQYXJhbXNSRVNUAAAAAQAAAAxiYXNlQXNzZXRTdHIEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAIY2ZnQXJyYXkJAQAAABJyZWFkQXNzZXRDZmdPckZhaWwAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAADXNoYXJlQXNzZXRTdHIJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAEklkeENmZ1NoYXJlQXNzZXRJZAQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEFAAAADXNoYXJlQXNzZXRTdHIEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnRGVjaW1hbHNNdWx0UHJpY2UEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAQAAAAIc3lzU3RhdGUJAQAAAAhnZXRQcmljZQAAAAUFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAtiYXNlQXNzZXRJZAUAAAAMc2hhcmVBc3NldElkBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzBQAAABFkZWNpbWFsc011bHRQcmljZQQAAAAPdG9wVXBMYXN0SGVpZ2h0BAAAAAckbWF0Y2gwCQAEHwAAAAEJAQAAABJrZXlUb3BVcExhc3RIZWlnaHQAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkBAAAAEUBleHRyTmF0aXZlKDEwNTgpAAAAAQkBAAAAD2tleVByb3h5QWRkcmVzcwAAAAEFAAAADGJhc2VBc3NldFN0cgMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAADSW50BAAAAAFoBQAAAAckbWF0Y2gwCQEAAAAFdmFsdWUAAAABBQAAAAFoAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CQEAAAARQGV4dHJOYXRpdmUoMTA1NSkAAAABCQEAAAASa2V5VG9wVXBMYXN0SGVpZ2h0AAAAAgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAQlAAAAAQkBAAAAFGFkZHJlc3NGcm9tUHVibGljS2V5AAAAAQkAAlkAAAABCQEAAAARQGV4dHJOYXRpdmUoMTA1OCkAAAABCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAACAAAAAQIAAAA4dW5kZWZpbmVkIGJlaGF2aW91ciBpbiBwcml2YXRlQ3VycmVudFN5c1BhcmFtc1JFU1QgbWF0Y2gJAAUaAAAACAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAABXByaWNlCAUAAAAIc3lzU3RhdGUAAAACXzEJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABFkZWNpbWFsc011bHRQcmljZQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABBiYXNlQXNzZXRCYWxhbmNlCAUAAAAIc3lzU3RhdGUAAAACXzIJAQAAAAxJbnRlZ2VyRW50cnkAAAACAgAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQIBQAAAAhzeXNTdGF0ZQAAAAJfMwkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAH2Jhc2VBc3NldEJhbGFuY2VDb25zaWRlcmluZ0xvY2sIBQAAAAhzeXNTdGF0ZQAAAAJfNAkBAAAADEludGVnZXJFbnRyeQAAAAICAAAADXNoYXJlRW1pc3Npb24IBQAAAAhzeXNTdGF0ZQAAAAJfNQkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEWJhc2VBc3NldERlY2ltYWxzCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtiYXNlQXNzZXRJZAAAAAhkZWNpbWFscwkBAAAADEludGVnZXJFbnRyeQAAAAICAAAAEmxhc3RUb3BVcFRpbWVzdGFtcAgJAQAAAAV2YWx1ZQAAAAEJAAPtAAAAAQUAAAAPdG9wVXBMYXN0SGVpZ2h0AAAACXRpbWVzdGFtcAEAAAALbXVzdE1hbmFnZXIAAAABAAAAAWkEAAAAAnBkCQAAAgAAAAECAAAAEXBlcm1pc3Npb24gZGVuaWVkBAAAAAckbWF0Y2gwCQEAAAAWbWFuYWdlclB1YmxpY0tleU9yVW5pdAAAAAADCQAAAQAAAAIFAAAAByRtYXRjaDACAAAACkJ5dGVWZWN0b3IEAAAAAnBrBQAAAAckbWF0Y2gwAwkAAAAAAAACCAUAAAABaQAAAA9jYWxsZXJQdWJsaWNLZXkFAAAAAnBrBgUAAAACcGQDCQAAAQAAAAIFAAAAByRtYXRjaDACAAAABFVuaXQDCQAAAAAAAAIIBQAAAAFpAAAABmNhbGxlcgUAAAAEdGhpcwYFAAAAAnBkCQAAAgAAAAECAAAAC01hdGNoIGVycm9yAQAAABBtdXN0UHJveHlBZGRyZXNzAAAAAgAAAAFpAAAAB2Fzc2V0SWQEAAAAB2lzUHJveHkJAAAAAAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIJAQAAAAt2YWx1ZU9yRWxzZQAAAAIJAAQiAAAAAQkBAAAAD2tleVByb3h5QWRkcmVzcwAAAAEFAAAAB2Fzc2V0SWQFAAAABUVNUFRZAwUAAAAHaXNQcm94eQYEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIGCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAoAAAABaQEAAAALY29uc3RydWN0b3IAAAABAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QEAAAAC2NoZWNrQ2FsbGVyCQEAAAALbXVzdE1hbmFnZXIAAAABBQAAAAFpAwkAAAAAAAACBQAAAAtjaGVja0NhbGxlcgUAAAALY2hlY2tDYWxsZXIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAFmtleUFzc2V0c1N0b3JlQ29udHJhY3QAAAAABQAAABNhc3NldHNTdG9yZUNvbnRyYWN0BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAEmFkbWluUmVnaXN0ZXJBc3NldAAAAAcAAAAMYmFzZUFzc2V0U3RyAAAADnNoYXJlQXNzZXROYW1lAAAAD3NoYXJlQXNzZXREZXNjcgAAAA5zaGFyZUFzc2V0TG9nbwAAABBnZXREZWxheWluQmxvY2tzAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MAAAAMcHJveHlBZGRyZXNzBAAAAAtiYXNlQXNzZXRJZAkAAlkAAAABBQAAAAxiYXNlQXNzZXRTdHIEAAAACGRlY2ltYWxzCAkBAAAABXZhbHVlAAAAAQkAA+wAAAABBQAAAAtiYXNlQXNzZXRJZAAAAAhkZWNpbWFscwQAAAAFY2hlY2sJAQAAAAttdXN0TWFuYWdlcgAAAAEFAAAAAWkDCQAAAAAAAAIFAAAABWNoZWNrBQAAAAVjaGVjawMJAQAAAAIhPQAAAAIJAAQlAAAAAQkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwUAAAAWc2h1dGRvd25NYW5hZ2VyQWRkcmVzcwkAAAIAAAABAgAAAB5pbnZhbGlkIHNodXRkb3duTWFuYWdlckFkZHJlc3MDCQAAZgAAAAIAAAAAAAAAAAAFAAAAEGdldERlbGF5aW5CbG9ja3MJAAACAAAAAQkAASwAAAACAgAAABlpbnZhbGlkIGdldERlbGF5aW5CbG9ja3M9CQABpAAAAAEFAAAAEGdldERlbGF5aW5CbG9ja3MEAAAAFXNoYXJlQXNzZXRJc3N1ZUFjdGlvbgkABEIAAAAFBQAAAA5zaGFyZUFzc2V0TmFtZQUAAAAPc2hhcmVBc3NldERlc2NyAAAAAAAAAAABBQAAAAhkZWNpbWFscwYEAAAADHNoYXJlQXNzZXRJZAkABDgAAAABBQAAABVzaGFyZUFzc2V0SXNzdWVBY3Rpb24EAAAADXNoYXJlQXNzZXRTdHIJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkBAAAABFkZWNpbWFsc011bHRQcmljZQkAAGgAAAACCQAAaAAAAAIAAAAAAAAAAGQAAAAAAAAAA+gAAAAAAAAAA+gEAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMJAABsAAAABgAAAAAAAAAACgAAAAAAAAAAAAUAAAAIZGVjaW1hbHMAAAAAAAAAAAAAAAAAAAAAAAAFAAAABERPV04EAAAACnN0YXJ0UHJpY2UJAABoAAAAAgAAAAAAAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAAFGludGVybmFsQmFzZUFzc2V0dElkCQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAAAAAAAAAAAAAQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXR0SWQEAAAADmNyZWF0ZU9yVXBkYXRlCQAD/AAAAAQJAQAAABNhc3NldHNTdG9yZUNvbnRyYWN0AAAAAAIAAAAOY3JlYXRlT3JVcGRhdGUJAARMAAAAAgUAAAANc2hhcmVBc3NldFN0cgkABEwAAAACBQAAAA5zaGFyZUFzc2V0TG9nbwkABEwAAAACBwUAAAADbmlsBQAAAANuaWwDCQAAAAAAAAIFAAAADmNyZWF0ZU9yVXBkYXRlBQAAAA5jcmVhdGVPclVwZGF0ZQQAAAAIYWRkTGFiZWwJAAP8AAAABAkBAAAAE2Fzc2V0c1N0b3JlQ29udHJhY3QAAAAAAgAAAAhhZGRMYWJlbAkABEwAAAACBQAAAA1zaGFyZUFzc2V0U3RyCQAETAAAAAICAAAABERFRkkFAAAAA25pbAUAAAADbmlsAwkAAAAAAAACBQAAAAhhZGRMYWJlbAUAAAAIYWRkTGFiZWwJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAC2tleUFzc2V0Q2ZnAAAAAQUAAAAMYmFzZUFzc2V0U3RyCQEAAAAMZGF0YUFzc2V0Q2ZnAAAABQUAAAANc2hhcmVBc3NldFN0cgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAFmRlY2ltYWxzTXVsdEJvdGhBc3NldHMFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAABBnZXREZWxheWluQmxvY2tzCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAB9rZXlNYXBwaW5nc0ludGVybmFsMmJhc2VBc3NldElkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXR0SWQFAAAADGJhc2VBc3NldFN0cgkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAAfa2V5TWFwcGluZ3NCYXNlQXNzZXQyaW50ZXJuYWxJZAAAAAEFAAAADGJhc2VBc3NldFN0cgUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHGtleU1hcHBpbmdzU2hhcmUyYmFzZUFzc2V0SWQAAAABBQAAAA1zaGFyZUFzc2V0U3RyBQAAAAxiYXNlQXNzZXRTdHIJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAAHGtleU1hcHBpbmdzQmFzZUFzc2V0MnNoYXJlSWQAAAABBQAAAAxiYXNlQXNzZXRTdHIFAAAADXNoYXJlQXNzZXRTdHIJAARMAAAAAgkBAAAADEJvb2xlYW5FbnRyeQAAAAIJAQAAABdrZXlTaHV0ZG93blB1dE9wZXJhdGlvbgAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBwkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAASa2V5U2h1dGRvd25NYW5hZ2VyAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAABZrZXlOZXh0SW50ZXJuYWxBc3NldElkAAAAAAkAAGQAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldHRJZAAAAAAAAAAAAQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAApzdGFydFByaWNlCQAETAAAAAIJAQAAAAxJbnRlZ2VyRW50cnkAAAACCQEAAAAPa2V5UHJpY2VIaXN0b3J5AAAAAwUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAACnN0YXJ0UHJpY2UJAARMAAAAAgUAAAAVc2hhcmVBc3NldElzc3VlQWN0aW9uCQAETAAAAAIJAQAAAARCdXJuAAAAAgUAAAAMc2hhcmVBc3NldElkAAAAAAAAAAABCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAAA9rZXlQcm94eUFkZHJlc3MAAAABBQAAAAxiYXNlQXNzZXRTdHIFAAAADHByb3h5QWRkcmVzcwUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAAAAAWkBAAAAC3NodXRkb3duUHV0AAAAAQAAABNpbnRlcm5hbEJhc2VBc3NldElkBAAAABZpbnRlcm5hbEJhc2VBc3NldElkU3RyCQABpAAAAAEFAAAAE2ludGVybmFsQmFzZUFzc2V0SWQEAAAADmJhc2VBc3NldElkU3RyCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAH2tleU1hcHBpbmdzSW50ZXJuYWwyYmFzZUFzc2V0SWQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkBAAAABZzaHV0ZG93bk1hbmFnZXJBZGRyZXNzCQEAAAAPZ2V0U3RyaW5nT3JGYWlsAAAAAQkBAAAAEmtleVNodXRkb3duTWFuYWdlcgAAAAEFAAAAFmludGVybmFsQmFzZUFzc2V0SWRTdHIDCQAAZgAAAAIAAAAAAAAAAAEJAAExAAAAAQUAAAAOYmFzZUFzc2V0SWRTdHIJAAACAAAAAQIAAAAbaW52YWxpZCBpbnRlcm5hbEJhc2VBc3NldElkAwkBAAAAAiE9AAAAAgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIFAAAAFnNodXRkb3duTWFuYWdlckFkZHJlc3MJAAACAAAAAQIAAAANYWNjZXNzIGRlbmllZAkABEwAAAACCQEAAAAMQm9vbGVhbkVudHJ5AAAAAgkBAAAAF2tleVNodXRkb3duUHV0T3BlcmF0aW9uAAAAAQkAAaQAAAABBQAAABNpbnRlcm5hbEJhc2VBc3NldElkBgUAAAADbmlsAAAAAWkBAAAAA3B1dAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAALYmFzZUFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAAMYmFzZUFzc2V0U3RyCQACWAAAAAEFAAAAC2Jhc2VBc3NldElkBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABCAUAAAABaQAAAAZjYWxsZXIEAAAACGNmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAA1zaGFyZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABJJZHhDZmdTaGFyZUFzc2V0SWQEAAAADHNoYXJlQXNzZXRJZAkAAlkAAAABBQAAAA1zaGFyZUFzc2V0U3RyBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAHElkeENmZ0RlY2ltYWxzTXVsdEJvdGhBc3NldHMEAAAAEWRlY2ltYWxzTXVsdFByaWNlCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAIY2ZnQXJyYXkFAAAAF0lkeENmZ0RlY2ltYWxzTXVsdFByaWNlBAAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAADGlzUHV0QmxvY2tlZAkBAAAAEGdldEJvb2xlYW5PckZhaWwAAAABCQEAAAAXa2V5U2h1dGRvd25QdXRPcGVyYXRpb24AAAABBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgMFAAAADGlzUHV0QmxvY2tlZAkAAAIAAAABAgAAABhwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQEAAAACm5ld0JhbGFuY2UJAABkAAAAAgkBAAAADWJhbGFuY2VPclplcm8AAAABBQAAAAxiYXNlQXNzZXRTdHIIBQAAAANwbXQAAAAGYW1vdW50BAAAAAVwcmljZQgJAQAAAAhnZXRQcmljZQAAAAUFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAtiYXNlQXNzZXRJZAUAAAAMc2hhcmVBc3NldElkBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzBQAAABFkZWNpbWFsc011bHRQcmljZQAAAAJfMQQAAAAQc2hhcmVBc3NldEFtb3VudAkBAAAACGZyYWN0aW9uAAAABAgFAAAAA3BtdAAAAAZhbW91bnQFAAAAEWRlY2ltYWxzTXVsdFByaWNlBQAAAAVwcmljZQUAAAAHQ0VJTElORwkABEwAAAACCQEAAAAHUmVpc3N1ZQAAAAMFAAAADHNoYXJlQXNzZXRJZAUAAAAQc2hhcmVBc3NldEFtb3VudAYJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwgFAAAAAWkAAAAGY2FsbGVyBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAAxzaGFyZUFzc2V0SWQJAARMAAAAAgkBAAAAC1N0cmluZ0VudHJ5AAAAAgkBAAAADGtleU9wZXJhdGlvbgAAAAQCAAAAAVAFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkCQEAAAANZGF0YU9wZXJhdGlvbgAAAAgCAAAACEZJTklTSEVECAUAAAADcG10AAAABmFtb3VudAUAAAAFcHJpY2UFAAAAEHNoYXJlQXNzZXRBbW91bnQFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwkBAAAAEUBleHRyTmF0aXZlKDEwNjIpAAAAAQkBAAAABXZhbHVlAAAAAQkABCIAAAABCQEAAAAPa2V5UHJveHlBZGRyZXNzAAAAAQUAAAAMYmFzZUFzc2V0U3RyCAUAAAADcG10AAAABmFtb3VudAUAAAALYmFzZUFzc2V0SWQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlCYWxhbmNlAAAAAQUAAAAMYmFzZUFzc2V0U3RyBQAAAApuZXdCYWxhbmNlBQAAAANuaWwAAAABaQEAAAAQc3VibWl0R2V0UmVxdWVzdAAAAAAEAAAAA3BtdAkBAAAABXZhbHVlAAAAAQkAAZEAAAACCAUAAAABaQAAAAhwYXltZW50cwAAAAAAAAAAAAQAAAAMc2hhcmVBc3NldElkCQEAAAAFdmFsdWUAAAABCAUAAAADcG10AAAAB2Fzc2V0SWQEAAAADXNoYXJlQXNzZXRTdHIJAAJYAAAAAQUAAAAMc2hhcmVBc3NldElkBAAAAAxjYWxsZXJQdWJTdHIJAAJYAAAAAQgFAAAAAWkAAAAPY2FsbGVyUHVibGljS2V5BAAAAAt1c2VyQWRkcmVzcwgFAAAAAWkAAAAGY2FsbGVyBAAAAA51c2VyQWRkcmVzc1N0cgkABCUAAAABBQAAAAt1c2VyQWRkcmVzcwQAAAAQc2hhcmVBc3NldEFtb3VudAgFAAAAA3BtdAAAAAZhbW91bnQEAAAADGJhc2VBc3NldFN0cgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEJAQAAABxrZXlNYXBwaW5nc1NoYXJlMmJhc2VBc3NldElkAAAAAQUAAAANc2hhcmVBc3NldFN0cgQAAAALYmFzZUFzc2V0SWQJAAJZAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAhjZmdBcnJheQkBAAAAEnJlYWRBc3NldENmZ09yRmFpbAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABxJZHhDZmdEZWNpbWFsc011bHRCb3RoQXNzZXRzBAAAABFkZWNpbWFsc011bHRQcmljZQkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABdJZHhDZmdEZWNpbWFsc011bHRQcmljZQQAAAAOZ2V0RGVsYXlCbG9ja3MJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAAhjZmdBcnJheQUAAAAUSWR4Q2ZnR2V0RGVsYXlCbG9ja3MEAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQABkQAAAAIFAAAACGNmZ0FycmF5BQAAABdJZHhDZmdJbnRlcm5hbEJhc2VBc3NldAQAAAAFcHJpY2UICQEAAAAIZ2V0UHJpY2UAAAAFBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAALYmFzZUFzc2V0SWQFAAAADHNoYXJlQXNzZXRJZAUAAAAWZGVjaW1hbHNNdWx0Qm90aEFzc2V0cwUAAAARZGVjaW1hbHNNdWx0UHJpY2UAAAACXzEEAAAAD2Jhc2VBc3NldEFtb3VudAkAAGsAAAADBQAAABBzaGFyZUFzc2V0QW1vdW50BQAAAAVwcmljZQUAAAARZGVjaW1hbHNNdWx0UHJpY2UEAAAADG9wZXJhdGlvbktleQkBAAAADGtleU9wZXJhdGlvbgAAAAQCAAAAAUcFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgkAAlgAAAABCAUAAAABaQAAAA10cmFuc2FjdGlvbklkBAAAAA1vcGVyYXRpb25EYXRhCQEAAAANZGF0YU9wZXJhdGlvbgAAAAgCAAAAB1BFTkRJTkcFAAAAEHNoYXJlQXNzZXRBbW91bnQFAAAABXByaWNlBQAAAA9iYXNlQXNzZXRBbW91bnQFAAAABmhlaWdodAgFAAAACWxhc3RCbG9jawAAAAl0aW1lc3RhbXAJAABkAAAAAgUAAAAGaGVpZ2h0BQAAAA5nZXREZWxheUJsb2NrcwAAAAAAAAAAAAkABEwAAAACCQEAAAAEQnVybgAAAAIFAAAADHNoYXJlQXNzZXRJZAUAAAAQc2hhcmVBc3NldEFtb3VudAkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACBQAAAAxvcGVyYXRpb25LZXkFAAAADW9wZXJhdGlvbkRhdGEJAARMAAAAAgkBAAAAFGluY3JlbWVudFRvdGFsTG9ja2VkAAAAAwkBAAAADmtleVRvdGFsTG9ja2VkAAAAAQUAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIFAAAAEHNoYXJlQXNzZXRBbW91bnQFAAAAD2Jhc2VBc3NldEFtb3VudAkABEwAAAACCQEAAAAUaW5jcmVtZW50VG90YWxMb2NrZWQAAAADCQEAAAAUa2V5VG90YWxMb2NrZWRCeVVzZXIAAAACBQAAABRpbnRlcm5hbEJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAAEHNoYXJlQXNzZXRBbW91bnQFAAAAD2Jhc2VBc3NldEFtb3VudAkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAACmtleUJhbGFuY2UAAAABBQAAAAxiYXNlQXNzZXRTdHIJAABlAAAAAgkBAAAADWJhbGFuY2VPclplcm8AAAABBQAAAAxiYXNlQXNzZXRTdHIFAAAAD2Jhc2VBc3NldEFtb3VudAUAAAADbmlsAAAAAWkBAAAAEWV4ZWN1dGVHZXRSZXF1ZXN0AAAAAwAAAAxiYXNlQXNzZXRTdHIAAAAOdXNlckFkZHJlc3NTdHIAAAAKZ2V0VHhJZFN0cgQAAAALdXNlckFkZHJlc3MJAQAAABFAZXh0ck5hdGl2ZSgxMDYyKQAAAAEFAAAADnVzZXJBZGRyZXNzU3RyBAAAAA1hc3NldENmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAAxzaGFyZUFzc2V0SWQJAAJZAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABJJZHhDZmdTaGFyZUFzc2V0SWQEAAAAC2Jhc2VBc3NldElkCQACWQAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAADG9wZXJhdGlvbktleQkBAAAADGtleU9wZXJhdGlvbgAAAAQCAAAAAUcFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAAKZ2V0VHhJZFN0cgQAAAAOb3BlcmF0aW9uQXJyYXkJAAS1AAAAAgkBAAAAD2dldFN0cmluZ09yRmFpbAAAAAEFAAAADG9wZXJhdGlvbktleQUAAAADU0VQBAAAAAZzdGF0dXMJAAGRAAAAAgUAAAAOb3BlcmF0aW9uQXJyYXkFAAAADUlkeE9wZXJTdGF0dXMEAAAACWVuZEhlaWdodAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADm9wZXJhdGlvbkFycmF5BQAAABBJZHhPcGVyRW5kSGVpZ2h0BAAAAA1pblNoYXJlQW1vdW50CQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAAOb3BlcmF0aW9uQXJyYXkFAAAAD0lkeE9wZXJJbkFtb3VudAQAAAANb3V0QmFzZUFtb3VudAkBAAAADXBhcnNlSW50VmFsdWUAAAABCQABkQAAAAIFAAAADm9wZXJhdGlvbkFycmF5BQAAABBJZHhPcGVyT3V0QW1vdW50AwkBAAAAAiE9AAAAAgUAAAAGc3RhdHVzAgAAAAdQRU5ESU5HCQEAAAAOZmFpbEV4ZWN1dGVHZXQAAAAEAgAAABVTdGF0dXMgaXMgbm90IFBFTkRJTkcFAAAADGJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAACmdldFR4SWRTdHIDCQAAZgAAAAIFAAAACWVuZEhlaWdodAUAAAAGaGVpZ2h0CQEAAAAOZmFpbEV4ZWN1dGVHZXQAAAAECQABLAAAAAIJAAEsAAAAAgkAASwAAAACAgAAAApFbmRIZWlnaHRbCQABpAAAAAEFAAAACWVuZEhlaWdodAIAAAAEXSA+IAkAAaQAAAABBQAAAAZoZWlnaHQFAAAADGJhc2VBc3NldFN0cgUAAAAOdXNlckFkZHJlc3NTdHIFAAAACmdldFR4SWRTdHIJAARMAAAAAgkBAAAADlNjcmlwdFRyYW5zZmVyAAAAAwUAAAALdXNlckFkZHJlc3MFAAAADW91dEJhc2VBbW91bnQFAAAAC2Jhc2VBc3NldElkCQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIFAAAADG9wZXJhdGlvbktleQkBAAAAHGRhdGFPcGVyYXRpb25FeGVjdXRpb25VcGRhdGUAAAADBQAAAA5vcGVyYXRpb25BcnJheQIAAAAIRklOSVNIRUQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wCQAETAAAAAIJAQAAABRkZWNyZW1lbnRUb3RhbExvY2tlZAAAAAMJAQAAAA5rZXlUb3RhbExvY2tlZAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA1pblNoYXJlQW1vdW50BQAAAA1vdXRCYXNlQW1vdW50CQAETAAAAAIJAQAAABRkZWNyZW1lbnRUb3RhbExvY2tlZAAAAAMJAQAAABRrZXlUb3RhbExvY2tlZEJ5VXNlcgAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAA51c2VyQWRkcmVzc1N0cgUAAAANaW5TaGFyZUFtb3VudAUAAAANb3V0QmFzZUFtb3VudAUAAAADbmlsAAAAAWkBAAAADHRvcFVwQmFsYW5jZQAAAAIAAAAMYmFzZUFzc2V0U3RyAAAABWRlbHRhBAAAAA1hc3NldENmZ0FycmF5CQEAAAAScmVhZEFzc2V0Q2ZnT3JGYWlsAAAAAQUAAAAMYmFzZUFzc2V0U3RyBAAAAANwbXQJAQAAAAV2YWx1ZQAAAAEJAAGRAAAAAggFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAAEAAAACnBtdEFzc2V0SWQJAQAAAAV2YWx1ZQAAAAEIBQAAAANwbXQAAAAHYXNzZXRJZAQAAAALcG10QXNzZXRTdHIJAAJYAAAAAQUAAAAKcG10QXNzZXRJZAQAAAAMc2hhcmVBc3NldElkCQACWQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAASSWR4Q2ZnU2hhcmVBc3NldElkBAAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzCQEAAAANcGFyc2VJbnRWYWx1ZQAAAAEJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAcSWR4Q2ZnRGVjaW1hbHNNdWx0Qm90aEFzc2V0cwQAAAARZGVjaW1hbHNNdWx0UHJpY2UJAQAAAA1wYXJzZUludFZhbHVlAAAAAQkAAZEAAAACBQAAAA1hc3NldENmZ0FycmF5BQAAABdJZHhDZmdEZWNpbWFsc011bHRQcmljZQQAAAAUaW50ZXJuYWxCYXNlQXNzZXRTdHIJAAGRAAAAAgUAAAANYXNzZXRDZmdBcnJheQUAAAAXSWR4Q2ZnSW50ZXJuYWxCYXNlQXNzZXQEAAAAEnRvcFVwTGFzdEhlaWdodEtFWQkBAAAAEmtleVRvcFVwTGFzdEhlaWdodAAAAAIFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyCQAEJQAAAAEIBQAAAAFpAAAABmNhbGxlcgQAAAAPdG9wVXBMYXN0SGVpZ2h0CQEAAAALdmFsdWVPckVsc2UAAAACCQAEGgAAAAIFAAAABHRoaXMFAAAAEnRvcFVwTGFzdEhlaWdodEtFWQAAAAAAAAAAAAQAAAAGY2hlY2tzCQAETAAAAAIJAQAAABBtdXN0UHJveHlBZGRyZXNzAAAAAgUAAAABaQUAAAAMYmFzZUFzc2V0U3RyCQAETAAAAAIDCQEAAAACIT0AAAACBQAAAA90b3BVcExhc3RIZWlnaHQFAAAABmhlaWdodAYJAAACAAAAAQIAAAAjb25seSBvbmUgdG9wVXAgcGVyIGJsb2NrIGlzIGFsbG93ZWQJAARMAAAAAgMJAABmAAAAAgUAAAAFZGVsdGEAAAAAAAAAAAAGCQAAAgAAAAECAAAAHm9ubHkgcG9zaXRpdmUgZGVsdGEgaXMgYWxsb3dlZAUAAAADbmlsAwkAAAAAAAACBQAAAAZjaGVja3MFAAAABmNoZWNrcwMJAQAAAAIhPQAAAAIFAAAADGJhc2VBc3NldFN0cgUAAAALcG10QXNzZXRTdHIJAAACAAAAAQIAAAA+YXR0YWNoZWQgcGF5bWVudCdzIGFzc2V0IGlkIGlzIE5PVCBtYXRjaGVkIHBhc3NlZCBiYXNlQXNzZXRTdHIDCQAAZgAAAAIJAAGQAAAAAQgFAAAAAWkAAAAIcGF5bWVudHMAAAAAAAAAAAEJAAACAAAAAQIAAAAgb25seSBvbmUgcGF5bWVudCBjYW4gYmUgYXR0YWNoZWQEAAAABXByaWNlCAkBAAAACWNhbGNQcmljZQAAAAYFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAApwbXRBc3NldElkBQAAAAVkZWx0YQUAAAAMc2hhcmVBc3NldElkBQAAABZkZWNpbWFsc011bHRCb3RoQXNzZXRzBQAAABFkZWNpbWFsc011bHRQcmljZQAAAAJfMQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAADGtleVByaWNlTGFzdAAAAAEFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgkBAAAAD2tleVByaWNlSGlzdG9yeQAAAAMFAAAAFGludGVybmFsQmFzZUFzc2V0U3RyBQAAAAZoZWlnaHQIBQAAAAlsYXN0QmxvY2sAAAAJdGltZXN0YW1wBQAAAAVwcmljZQkABEwAAAACCQEAAAAMSW50ZWdlckVudHJ5AAAAAgUAAAASdG9wVXBMYXN0SGVpZ2h0S0VZBQAAAAZoZWlnaHQJAARMAAAAAgkBAAAADEludGVnZXJFbnRyeQAAAAIJAQAAAAprZXlCYWxhbmNlAAAAAQUAAAALcG10QXNzZXRTdHIJAABkAAAAAgkBAAAADWJhbGFuY2VPclplcm8AAAABBQAAAAtwbXRBc3NldFN0cgUAAAAFZGVsdGEFAAAAA25pbAkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABaQEAAAAUY3VycmVudFN5c1BhcmFtc1JFU1QAAAABAAAADGJhc2VBc3NldFN0cgQAAAANc3lzU3RhdGVUdXBsZQkBAAAAG3ByaXZhdGVDdXJyZW50U3lzUGFyYW1zUkVTVAAAAAEFAAAADGJhc2VBc3NldFN0cgQAAAAFcHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMQAAAAV2YWx1ZQQAAAARZGVjaW1hbHNNdWx0UHJpY2UICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfMgAAAAV2YWx1ZQQAAAAQYmFzZUFzc2V0QmFsYW5jZQgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl8zAAAABXZhbHVlBAAAABV0b3RhbExvY2tlZEJhc2VBbW91bnQICAUAAAANc3lzU3RhdGVUdXBsZQAAAAJfNAAAAAV2YWx1ZQQAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawgIBQAAAA1zeXNTdGF0ZVR1cGxlAAAAAl81AAAABXZhbHVlBAAAAA1zaGFyZUVtaXNzaW9uCAgFAAAADXN5c1N0YXRlVHVwbGUAAAACXzYAAAAFdmFsdWUEAAAACHJlc3REYXRhCQAEuQAAAAIJAARMAAAAAgIAAAAZc3RhcnRDdXJyZW50U3lzUGFyYW1zUkVTVAkABEwAAAACCQABpAAAAAEFAAAABXByaWNlCQAETAAAAAIJAAGkAAAAAQUAAAARZGVjaW1hbHNNdWx0UHJpY2UJAARMAAAAAgkAAaQAAAABBQAAABBiYXNlQXNzZXRCYWxhbmNlCQAETAAAAAIJAAGkAAAAAQUAAAAVdG90YWxMb2NrZWRCYXNlQW1vdW50CQAETAAAAAIJAAGkAAAAAQUAAAAfYmFzZUFzc2V0QmFsYW5jZUNvbnNpZGVyaW5nTG9jawkABEwAAAACCQABpAAAAAEFAAAADXNoYXJlRW1pc3Npb24JAARMAAAAAgIAAAAXZW5kQ3VycmVudFN5c1BhcmFtc1JFU1QFAAAAA25pbAUAAAADU0VQCQAAAgAAAAEFAAAACHJlc3REYXRhAAAAAWkBAAAACnNldE1hbmFnZXIAAAABAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BAAAAAtjaGVja0NhbGxlcgkBAAAAC211c3RNYW5hZ2VyAAAAAQUAAAABaQMJAAAAAAAAAgUAAAALY2hlY2tDYWxsZXIFAAAAC2NoZWNrQ2FsbGVyBAAAABVjaGVja01hbmFnZXJQdWJsaWNLZXkJAAJZAAAAAQUAAAAXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAAAAAAIFAAAAFWNoZWNrTWFuYWdlclB1YmxpY0tleQUAAAAVY2hlY2tNYW5hZ2VyUHVibGljS2V5CQAETAAAAAIJAQAAAAtTdHJpbmdFbnRyeQAAAAIJAQAAABprZXlQZW5kaW5nTWFuYWdlclB1YmxpY0tleQAAAAAFAAAAF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5BQAAAANuaWwJAAACAAAAAQIAAAAkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgAAAAFpAQAAAA5jb25maXJtTWFuYWdlcgAAAAAEAAAAAnBtCQEAAAAdcGVuZGluZ01hbmFnZXJQdWJsaWNLZXlPclVuaXQAAAAABAAAAAVoYXNQTQMJAQAAAAlpc0RlZmluZWQAAAABBQAAAAJwbQYJAAACAAAAAQIAAAASbm8gcGVuZGluZyBtYW5hZ2VyAwkAAAAAAAACBQAAAAVoYXNQTQUAAAAFaGFzUE0EAAAAB2NoZWNrUE0DCQAAAAAAAAIIBQAAAAFpAAAAD2NhbGxlclB1YmxpY0tleQkBAAAABXZhbHVlAAAAAQUAAAACcG0GCQAAAgAAAAECAAAAG3lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAAAAAAAAgUAAAAHY2hlY2tQTQUAAAAHY2hlY2tQTQkABEwAAAACCQEAAAALU3RyaW5nRW50cnkAAAACCQEAAAATa2V5TWFuYWdlclB1YmxpY0tleQAAAAAJAAJYAAAAAQkBAAAABXZhbHVlAAAAAQUAAAACcG0JAARMAAAAAgkBAAAAC0RlbGV0ZUVudHJ5AAAAAQkBAAAAGmtleVBlbmRpbmdNYW5hZ2VyUHVibGljS2V5AAAAAAUAAAADbmlsCQAAAgAAAAECAAAAJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAAIAAAABAgAAACRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4AAAABAAAAAnR4AQAAAAZ2ZXJpZnkAAAAABAAAAA90YXJnZXRQdWJsaWNLZXkEAAAAByRtYXRjaDAJAQAAABZtYW5hZ2VyUHVibGljS2V5T3JVbml0AAAAAAMJAAABAAAAAgUAAAAHJG1hdGNoMAIAAAAKQnl0ZVZlY3RvcgQAAAACcGsFAAAAByRtYXRjaDAFAAAAAnBrAwkAAAEAAAACBQAAAAckbWF0Y2gwAgAAAARVbml0CAUAAAACdHgAAAAPc2VuZGVyUHVibGljS2V5CQAAAgAAAAECAAAAC01hdGNoIGVycm9yCQAB9AAAAAMIBQAAAAJ0eAAAAAlib2R5Qnl0ZXMJAAGRAAAAAggFAAAAAnR4AAAABnByb29mcwAAAAAAAAAAAAUAAAAPdGFyZ2V0UHVibGljS2V5OiIJ+Q==", "chainId": 84, "height": 2135272, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 9WgyJ9kYPrLnwcfnuHMWqGJ83DAv3oDm3bg4mXifZxm1 Next: AmbdhwFckrBqxHR5pqY6f5bFMUUa3VhsCmhT3t1XrG88 Diff:
Old | New | Differences | |
---|---|---|---|
11 | 11 | func e (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d)) | |
12 | 12 | ||
13 | 13 | ||
14 | - | func f () = | |
14 | + | func f (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d)) | |
15 | 15 | ||
16 | 16 | ||
17 | - | func g () = makeString(["%s", " | |
17 | + | func g () = makeString(["%s", "managerPublicKey"], a) | |
18 | 18 | ||
19 | 19 | ||
20 | - | func h ( | |
20 | + | func h () = makeString(["%s", "pendingManagerPublicKey"], a) | |
21 | 21 | ||
22 | 22 | ||
23 | - | func | |
23 | + | func i (j,k,l,m) = throw(((((((j + ": baseAssetStr=") + k) + " userAddressStr=") + l) + " getTxIdStr=") + m)) | |
24 | 24 | ||
25 | 25 | ||
26 | - | func n ( | |
26 | + | func n () = makeString(["%s", "assetsStoreContract"], a) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func o ( | |
29 | + | func o (k) = ("%s%s%s__config__asset__" + k) | |
30 | 30 | ||
31 | 31 | ||
32 | - | func | |
32 | + | func p (q) = makeString(["%s%s", "proxyAddress", q], a) | |
33 | 33 | ||
34 | 34 | ||
35 | - | func r () = "%s | |
35 | + | func r (q) = makeString(["%s%s", "balance", q], a) | |
36 | 36 | ||
37 | 37 | ||
38 | - | func s ( | |
38 | + | func s () = "%s__nextInternalAssetId" | |
39 | 39 | ||
40 | 40 | ||
41 | - | func | |
41 | + | func t (u) = ("%s%s%d__price__last__" + u) | |
42 | 42 | ||
43 | 43 | ||
44 | - | func | |
44 | + | func v (u,w) = makeString(["%s%s%s%d%s__topup__last__height", u, w], a) | |
45 | 45 | ||
46 | 46 | ||
47 | - | func | |
47 | + | func x (u,y,z) = makeString(["%s%s%d%d%d__price__history", u, toString(y), toString(z)], a) | |
48 | 48 | ||
49 | 49 | ||
50 | - | func A ( | |
50 | + | func A (u) = ("%s%s%d__total__locked__" + u) | |
51 | 51 | ||
52 | 52 | ||
53 | - | func | |
53 | + | func B (C,l) = makeString(["%s%s%d%s__total__locked", C, l], a) | |
54 | 54 | ||
55 | 55 | ||
56 | - | func | |
56 | + | func D (E) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(E)) | |
57 | 57 | ||
58 | 58 | ||
59 | - | func F ( | |
59 | + | func F (k) = ("%s%s%s__mappings__baseAsset2internalId__" + k) | |
60 | 60 | ||
61 | 61 | ||
62 | - | func | |
62 | + | func G (H) = ("%s%s%s__mappings__share2baseAssetId__" + H) | |
63 | 63 | ||
64 | 64 | ||
65 | - | func I ( | |
65 | + | func I (k) = ("%s%s%s__mappings__baseAsset2shareId__" + k) | |
66 | 66 | ||
67 | 67 | ||
68 | - | func J ( | |
68 | + | func J (C) = ("%s%s%d__shutdown__put__" + C) | |
69 | 69 | ||
70 | 70 | ||
71 | - | func K () = | |
71 | + | func K (C) = ("%s%s%d__shutdown__manager__" + C) | |
72 | 72 | ||
73 | 73 | ||
74 | - | let L = 1 | |
75 | - | ||
76 | - | let M = 2 | |
77 | - | ||
78 | - | let N = 3 | |
79 | - | ||
80 | - | let O = 4 | |
81 | - | ||
82 | - | let P = 5 | |
83 | - | ||
84 | - | func Q (G,B,R,S,T) = makeString(["%s%d%d%d%d", G, B, toString(R), toString(S), toString(T)], a) | |
74 | + | func L () = addressFromStringValue(value(getString(n()))) | |
85 | 75 | ||
86 | 76 | ||
87 | - | let | |
77 | + | let M = 1 | |
88 | 78 | ||
89 | - | let | |
79 | + | let N = 2 | |
90 | 80 | ||
91 | - | func W (X,Y) = makeString(["%d%d", toString(X), toString(Y)], a) | |
81 | + | let O = 3 | |
82 | + | ||
83 | + | let P = 4 | |
84 | + | ||
85 | + | let Q = 5 | |
86 | + | ||
87 | + | func R (H,C,S,T,U) = makeString(["%s%d%d%d%d", H, C, toString(S), toString(T), toString(U)], a) | |
92 | 88 | ||
93 | 89 | ||
94 | - | func Z (d) = { | |
95 | - | let aa = split(valueOrElse(getString(this, d), W(0, 0)), a) | |
96 | - | [-1, parseIntValue(aa[U]), parseIntValue(aa[V])] | |
90 | + | let V = 1 | |
91 | + | ||
92 | + | let W = 2 | |
93 | + | ||
94 | + | func X (Y,Z) = makeString(["%d%d", toString(Y), toString(Z)], a) | |
95 | + | ||
96 | + | ||
97 | + | func aa (d) = { | |
98 | + | let ab = split(valueOrElse(getString(this, d), X(0, 0)), a) | |
99 | + | [-1, parseIntValue(ab[V]), parseIntValue(ab[W])] | |
97 | 100 | } | |
98 | 101 | ||
99 | 102 | ||
100 | - | func | |
103 | + | func ac (ad,C,ae,af) = makeString(["%s%d%s%s", ad, C, ae, af], a) | |
101 | 104 | ||
102 | 105 | ||
103 | - | let | |
106 | + | let ag = 1 | |
104 | 107 | ||
105 | - | let | |
108 | + | let ah = 2 | |
106 | 109 | ||
107 | - | let | |
110 | + | let ai = 3 | |
108 | 111 | ||
109 | - | let | |
112 | + | let aj = 4 | |
110 | 113 | ||
111 | - | let | |
114 | + | let ak = 5 | |
112 | 115 | ||
113 | - | let | |
116 | + | let al = 6 | |
114 | 117 | ||
115 | - | let | |
118 | + | let am = 7 | |
116 | 119 | ||
117 | - | let | |
120 | + | let an = 8 | |
118 | 121 | ||
119 | - | func | |
122 | + | func ao (ap,aq,ar,as,at,au,av,aw) = makeString(["%s%d%d%d%d%d%d%d", ap, aq, ar, as, at, au, av, aw], a) | |
120 | 123 | ||
121 | 124 | ||
122 | - | func | |
125 | + | func ax (ap,aq,ar,as,at,au,av,aw) = ao(ap, toString(aq), toString(ar), toString(as), toString(at), toString(au), toString(av), toString(aw)) | |
123 | 126 | ||
124 | 127 | ||
125 | - | func | |
128 | + | func ay (az,aA,aB) = ao(aA, az[ah], az[ai], az[aj], az[ak], az[al], az[am], toString(aB)) | |
126 | 129 | ||
127 | 130 | ||
128 | - | func | |
129 | - | let d = | |
131 | + | func aC (k) = { | |
132 | + | let d = o(k) | |
130 | 133 | split(c(d), a) | |
131 | 134 | } | |
132 | 135 | ||
133 | 136 | ||
134 | - | func | |
135 | - | let | |
136 | - | StringEntry(d, | |
137 | + | func aD (d,Y,Z) = { | |
138 | + | let aE = aa(d) | |
139 | + | StringEntry(d, X((aE[V] + Y), (aE[W] + Z))) | |
137 | 140 | } | |
138 | 141 | ||
139 | 142 | ||
140 | - | func | |
141 | - | let | |
142 | - | StringEntry(d, | |
143 | + | func aF (d,Y,Z) = { | |
144 | + | let aE = aa(d) | |
145 | + | StringEntry(d, X((aE[V] - Y), (aE[W] - Z))) | |
143 | 146 | } | |
144 | 147 | ||
145 | 148 | ||
146 | - | func | |
147 | - | let | |
148 | - | if ($isInstanceOf( | |
149 | + | func aG () = { | |
150 | + | let aH = getString(g()) | |
151 | + | if ($isInstanceOf(aH, "String")) | |
149 | 152 | then { | |
150 | - | let | |
151 | - | fromBase58String( | |
153 | + | let aI = aH | |
154 | + | fromBase58String(aI) | |
152 | 155 | } | |
153 | - | else if ($isInstanceOf( | |
156 | + | else if ($isInstanceOf(aH, "Unit")) | |
154 | 157 | then unit | |
155 | 158 | else throw("Match error") | |
156 | 159 | } | |
157 | 160 | ||
158 | 161 | ||
159 | - | func | |
160 | - | let | |
161 | - | if ($isInstanceOf( | |
162 | + | func aJ () = { | |
163 | + | let aH = getString(h()) | |
164 | + | if ($isInstanceOf(aH, "String")) | |
162 | 165 | then { | |
163 | - | let | |
164 | - | fromBase58String( | |
166 | + | let aI = aH | |
167 | + | fromBase58String(aI) | |
165 | 168 | } | |
166 | - | else if ($isInstanceOf( | |
169 | + | else if ($isInstanceOf(aH, "Unit")) | |
167 | 170 | then unit | |
168 | 171 | else throw("Match error") | |
169 | 172 | } | |
170 | 173 | ||
171 | 174 | ||
172 | - | func | |
175 | + | func aK (q) = valueOrElse(getInteger(r(q)), 0) | |
173 | 176 | ||
174 | 177 | ||
175 | - | func | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | let | |
180 | - | if ((0 > | |
181 | - | then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString( | |
178 | + | func aL (C,aM,aN,aO,S,T) = { | |
179 | + | let ab = aa(A(C)) | |
180 | + | let aP = ab[W] | |
181 | + | let aQ = aK(toBase58String(aM)) | |
182 | + | let aR = (aQ + aN) | |
183 | + | if ((0 > aR)) | |
184 | + | then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString(aQ)) + " baseAssetBalanceConsideringLock=") + toString(aR))) | |
182 | 185 | else { | |
183 | - | let | |
184 | - | let | |
185 | - | then (1 * | |
186 | - | else fraction( | |
187 | - | $Tuple5( | |
186 | + | let aS = value(assetInfo(aO)).quantity | |
187 | + | let ar = if ((aS == 0)) | |
188 | + | then (1 * T) | |
189 | + | else fraction(aR, T, aS) | |
190 | + | $Tuple5(ar, aQ, aP, aR, aS) | |
188 | 191 | } | |
189 | 192 | } | |
190 | 193 | ||
191 | 194 | ||
192 | - | func | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | $Tuple5( | |
195 | + | func aT (C,aM,aO,S,T) = { | |
196 | + | let ab = aa(A(C)) | |
197 | + | let aP = ab[W] | |
198 | + | let aQ = aK(toBase58String(aM)) | |
199 | + | let aR = aQ | |
200 | + | let aS = value(assetInfo(aO)).quantity | |
201 | + | let ar = value(getInteger(t(C))) | |
202 | + | $Tuple5(ar, aQ, aP, aR, aS) | |
200 | 203 | } | |
201 | 204 | ||
202 | 205 | ||
203 | - | func | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | let | |
214 | - | if ($isInstanceOf( | |
206 | + | func aU (k) = { | |
207 | + | let aM = fromBase58String(k) | |
208 | + | let aV = aC(k) | |
209 | + | let H = aV[M] | |
210 | + | let aO = fromBase58String(H) | |
211 | + | let S = parseIntValue(aV[O]) | |
212 | + | let T = parseIntValue(aV[P]) | |
213 | + | let C = aV[N] | |
214 | + | let aW = aT(C, aM, aO, S, T) | |
215 | + | let aX = { | |
216 | + | let aH = getInteger(v(C, getStringValue(p(k)))) | |
217 | + | if ($isInstanceOf(aH, "Int")) | |
215 | 218 | then { | |
216 | - | let | |
217 | - | value( | |
219 | + | let y = aH | |
220 | + | value(y) | |
218 | 221 | } | |
219 | - | else if ($isInstanceOf( | |
220 | - | then getIntegerValue( | |
222 | + | else if ($isInstanceOf(aH, "Unit")) | |
223 | + | then getIntegerValue(v(C, toString(addressFromPublicKey(fromBase58String(getStringValue(g())))))) | |
221 | 224 | else throw("undefined behaviour in privateCurrentSysParamsREST match") | |
222 | 225 | } | |
223 | - | $Tuple8(IntegerEntry("price", | |
226 | + | $Tuple8(IntegerEntry("price", aW._1), IntegerEntry("decimalsMultPrice", T), IntegerEntry("baseAssetBalance", aW._2), IntegerEntry("totalLockedBaseAmount", aW._3), IntegerEntry("baseAssetBalanceConsideringLock", aW._4), IntegerEntry("shareEmission", aW._5), IntegerEntry("baseAssetDecimals", value(assetInfo(aM)).decimals), IntegerEntry("lastTopUpTimestamp", value(blockInfoByHeight(aX)).timestamp)) | |
224 | 227 | } | |
225 | 228 | ||
226 | 229 | ||
227 | - | func | |
228 | - | let | |
229 | - | let | |
230 | - | if ($isInstanceOf( | |
230 | + | func aY (aZ) = { | |
231 | + | let ba = throw("permission denied") | |
232 | + | let aH = aG() | |
233 | + | if ($isInstanceOf(aH, "ByteVector")) | |
231 | 234 | then { | |
232 | - | let | |
233 | - | if (( | |
235 | + | let bb = aH | |
236 | + | if ((aZ.callerPublicKey == bb)) | |
234 | 237 | then true | |
235 | - | else | |
238 | + | else ba | |
236 | 239 | } | |
237 | - | else if ($isInstanceOf( | |
238 | - | then if (( | |
240 | + | else if ($isInstanceOf(aH, "Unit")) | |
241 | + | then if ((aZ.caller == this)) | |
239 | 242 | then true | |
240 | - | else | |
243 | + | else ba | |
241 | 244 | else throw("Match error") | |
242 | 245 | } | |
243 | 246 | ||
244 | 247 | ||
245 | - | func | |
246 | - | let | |
247 | - | if ( | |
248 | + | func bc (aZ,q) = { | |
249 | + | let bd = (toString(aZ.caller) == valueOrElse(getString(p(q)), b)) | |
250 | + | if (bd) | |
248 | 251 | then true | |
249 | 252 | else { | |
250 | - | let | |
251 | - | if (( | |
253 | + | let be = aY(aZ) | |
254 | + | if ((be == be)) | |
252 | 255 | then true | |
253 | 256 | else throw("Strict value is not equal to itself.") | |
254 | 257 | } | |
255 | 258 | } | |
256 | 259 | ||
257 | 260 | ||
258 | - | @Callable( | |
259 | - | func constructor ( | |
260 | - | let | |
261 | - | if (( | |
262 | - | then [StringEntry( | |
261 | + | @Callable(aZ) | |
262 | + | func constructor (L) = { | |
263 | + | let be = aY(aZ) | |
264 | + | if ((be == be)) | |
265 | + | then [StringEntry(n(), L)] | |
263 | 266 | else throw("Strict value is not equal to itself.") | |
264 | 267 | } | |
265 | 268 | ||
266 | 269 | ||
267 | 270 | ||
268 | - | @Callable( | |
269 | - | func adminRegisterAsset ( | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | if (( | |
274 | - | then if ((toString(addressFromStringValue( | |
271 | + | @Callable(aZ) | |
272 | + | func adminRegisterAsset (k,bf,bg,bh,bi,bj,bk) = { | |
273 | + | let aM = fromBase58String(k) | |
274 | + | let bl = value(assetInfo(aM)).decimals | |
275 | + | let bm = aY(aZ) | |
276 | + | if ((bm == bm)) | |
277 | + | then if ((toString(addressFromStringValue(bj)) != bj)) | |
275 | 278 | then throw("invalid shutdownManagerAddress") | |
276 | - | else if ((0 > | |
277 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
279 | + | else if ((0 > bi)) | |
280 | + | then throw(("invalid getDelayinBlocks=" + toString(bi))) | |
278 | 281 | else { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | if (( | |
282 | + | let bn = Issue(bf, bg, 1, bl, true) | |
283 | + | let aO = calculateAssetId(bn) | |
284 | + | let H = toBase58String(aO) | |
285 | + | let T = ((100 * 1000) * 1000) | |
286 | + | let S = pow(10, 0, bl, 0, 0, DOWN) | |
287 | + | let bo = (1 * T) | |
288 | + | let bp = valueOrElse(getInteger(this, s()), 0) | |
289 | + | let C = toString(bp) | |
290 | + | let bq = invoke(L(), "createOrUpdate", [H, bh, false], nil) | |
291 | + | if ((bq == bq)) | |
289 | 292 | then { | |
290 | - | let | |
291 | - | if (( | |
292 | - | then [StringEntry( | |
293 | + | let br = invoke(L(), "addLabel", [H, "DEFI"], nil) | |
294 | + | if ((br == br)) | |
295 | + | then [StringEntry(o(k), R(H, C, S, T, bi)), StringEntry(D(bp), k), StringEntry(F(k), C), StringEntry(G(H), k), StringEntry(I(k), H), BooleanEntry(J(C), false), StringEntry(K(C), bj), IntegerEntry(s(), (bp + 1)), IntegerEntry(t(C), bo), IntegerEntry(x(C, height, lastBlock.timestamp), bo), bn, Burn(aO, 1), StringEntry(p(k), bk)] | |
293 | 296 | else throw("Strict value is not equal to itself.") | |
294 | 297 | } | |
295 | 298 | else throw("Strict value is not equal to itself.") | |
299 | 302 | ||
300 | 303 | ||
301 | 304 | ||
302 | - | @Callable( | |
303 | - | func shutdownPut ( | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | if ((1 > size( | |
305 | + | @Callable(aZ) | |
306 | + | func shutdownPut (bs) = { | |
307 | + | let bt = toString(bs) | |
308 | + | let bu = c(D(bs)) | |
309 | + | let bj = c(K(bt)) | |
310 | + | if ((1 > size(bu))) | |
308 | 311 | then throw("invalid internalBaseAssetId") | |
309 | - | else if ((toString( | |
312 | + | else if ((toString(aZ.caller) != bj)) | |
310 | 313 | then throw("access denied") | |
311 | - | else [BooleanEntry( | |
314 | + | else [BooleanEntry(J(toString(bs)), true)] | |
312 | 315 | } | |
313 | 316 | ||
314 | 317 | ||
315 | 318 | ||
316 | - | @Callable( | |
319 | + | @Callable(aZ) | |
317 | 320 | func put () = { | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | if ( | |
321 | + | let bv = value(aZ.payments[0]) | |
322 | + | let aM = value(bv.assetId) | |
323 | + | let k = toBase58String(aM) | |
324 | + | let l = toString(aZ.caller) | |
325 | + | let aV = aC(k) | |
326 | + | let H = aV[M] | |
327 | + | let aO = fromBase58String(H) | |
328 | + | let S = parseIntValue(aV[O]) | |
329 | + | let T = parseIntValue(aV[P]) | |
330 | + | let C = aV[N] | |
331 | + | let bw = e(J(C)) | |
332 | + | if (bw) | |
330 | 333 | then throw("put operation is blocked") | |
331 | 334 | else { | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | [Reissue( | |
335 | + | let bx = (aK(k) + bv.amount) | |
336 | + | let ar = aT(C, aM, aO, S, T)._1 | |
337 | + | let Y = fraction(bv.amount, T, ar, CEILING) | |
338 | + | [Reissue(aO, Y, true), ScriptTransfer(aZ.caller, Y, aO), StringEntry(ac("P", C, l, toBase58String(aZ.transactionId)), ax("FINISHED", bv.amount, ar, Y, height, lastBlock.timestamp, height, lastBlock.timestamp)), ScriptTransfer(addressFromStringValue(value(getString(p(k)))), bv.amount, aM), IntegerEntry(r(k), bx)] | |
336 | 339 | } | |
337 | 340 | } | |
338 | 341 | ||
339 | 342 | ||
340 | 343 | ||
341 | - | @Callable( | |
344 | + | @Callable(aZ) | |
342 | 345 | func submitGetRequest () = { | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | [Burn( | |
346 | + | let bv = value(aZ.payments[0]) | |
347 | + | let aO = value(bv.assetId) | |
348 | + | let H = toBase58String(aO) | |
349 | + | let by = toBase58String(aZ.callerPublicKey) | |
350 | + | let ae = aZ.caller | |
351 | + | let l = toString(ae) | |
352 | + | let Y = bv.amount | |
353 | + | let k = c(G(H)) | |
354 | + | let aM = fromBase58String(k) | |
355 | + | let aV = aC(k) | |
356 | + | let S = parseIntValue(aV[O]) | |
357 | + | let T = parseIntValue(aV[P]) | |
358 | + | let bz = parseIntValue(aV[Q]) | |
359 | + | let C = aV[N] | |
360 | + | let ar = aT(C, aM, aO, S, T)._1 | |
361 | + | let Z = fraction(Y, ar, T) | |
362 | + | let bA = ac("G", C, l, toBase58String(aZ.transactionId)) | |
363 | + | let bB = ax("PENDING", Y, ar, Z, height, lastBlock.timestamp, (height + bz), 0) | |
364 | + | [Burn(aO, Y), StringEntry(bA, bB), aD(A(C), Y, Z), aD(B(C, l), Y, Z), IntegerEntry(r(k), (aK(k) - Z))] | |
362 | 365 | } | |
363 | 366 | ||
364 | 367 | ||
365 | 368 | ||
366 | - | @Callable( | |
367 | - | func executeGetRequest ( | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | if (( | |
380 | - | then | |
381 | - | else if (( | |
382 | - | then | |
383 | - | else [ScriptTransfer( | |
369 | + | @Callable(aZ) | |
370 | + | func executeGetRequest (k,l,m) = { | |
371 | + | let ae = addressFromStringValue(l) | |
372 | + | let bC = aC(k) | |
373 | + | let aO = fromBase58String(bC[M]) | |
374 | + | let aM = fromBase58String(k) | |
375 | + | let C = bC[N] | |
376 | + | let bA = ac("G", C, l, m) | |
377 | + | let bD = split(c(bA), a) | |
378 | + | let ap = bD[ag] | |
379 | + | let av = parseIntValue(bD[am]) | |
380 | + | let bE = parseIntValue(bD[ah]) | |
381 | + | let bF = parseIntValue(bD[aj]) | |
382 | + | if ((ap != "PENDING")) | |
383 | + | then i("Status is not PENDING", k, l, m) | |
384 | + | else if ((av > height)) | |
385 | + | then i(((("EndHeight[" + toString(av)) + "] > ") + toString(height)), k, l, m) | |
386 | + | else [ScriptTransfer(ae, bF, aM), StringEntry(bA, ay(bD, "FINISHED", lastBlock.timestamp)), aF(A(C), bE, bF), aF(B(C, l), bE, bF)] | |
384 | 387 | } | |
385 | 388 | ||
386 | 389 | ||
387 | 390 | ||
388 | - | @Callable( | |
389 | - | func topUpBalance ( | |
390 | - | let | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
391 | + | @Callable(aZ) | |
392 | + | func topUpBalance (k,bG) = { | |
393 | + | let bC = aC(k) | |
394 | + | let bv = value(aZ.payments[0]) | |
395 | + | let bH = value(bv.assetId) | |
396 | + | let bI = toBase58String(bH) | |
397 | + | let aO = fromBase58String(bC[M]) | |
398 | + | let S = parseIntValue(bC[O]) | |
399 | + | let T = parseIntValue(bC[P]) | |
400 | + | let C = bC[N] | |
401 | + | let bJ = v(C, toString(aZ.caller)) | |
402 | + | let aX = valueOrElse(getInteger(this, bJ), 0) | |
403 | + | let bK = [bc(aZ, k), if ((aX != height)) | |
401 | 404 | then true | |
402 | - | else throw("only one topUp per block is allowed"), if (( | |
405 | + | else throw("only one topUp per block is allowed"), if ((bG > 0)) | |
403 | 406 | then true | |
404 | 407 | else throw("only positive delta is allowed")] | |
405 | - | if (( | |
406 | - | then if (( | |
408 | + | if ((bK == bK)) | |
409 | + | then if ((k != bI)) | |
407 | 410 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
408 | - | else if ((size( | |
411 | + | else if ((size(aZ.payments) > 1)) | |
409 | 412 | then throw("only one payment can be attached") | |
410 | 413 | else { | |
411 | - | let | |
412 | - | [IntegerEntry( | |
414 | + | let ar = aL(C, bH, bG, aO, S, T)._1 | |
415 | + | [IntegerEntry(t(C), ar), IntegerEntry(x(C, height, lastBlock.timestamp), ar), IntegerEntry(bJ, height), IntegerEntry(r(bI), (aK(bI) + bG))] | |
413 | 416 | } | |
414 | 417 | else throw("Strict value is not equal to itself.") | |
415 | 418 | } | |
416 | 419 | ||
417 | 420 | ||
418 | 421 | ||
419 | - | @Callable( | |
420 | - | func currentSysParamsREST ( | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | let | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | throw( | |
422 | + | @Callable(aZ) | |
423 | + | func currentSysParamsREST (k) = { | |
424 | + | let bL = aU(k) | |
425 | + | let ar = bL._1.value | |
426 | + | let T = bL._2.value | |
427 | + | let aQ = bL._3.value | |
428 | + | let aP = bL._4.value | |
429 | + | let aR = bL._5.value | |
430 | + | let aS = bL._6.value | |
431 | + | let bM = makeString(["startCurrentSysParamsREST", toString(ar), toString(T), toString(aQ), toString(aP), toString(aR), toString(aS), "endCurrentSysParamsREST"], a) | |
432 | + | throw(bM) | |
430 | 433 | } | |
431 | 434 | ||
432 | 435 | ||
433 | 436 | ||
434 | - | @Callable( | |
435 | - | func setManager ( | |
436 | - | let | |
437 | - | if (( | |
437 | + | @Callable(aZ) | |
438 | + | func setManager (bN) = { | |
439 | + | let be = aY(aZ) | |
440 | + | if ((be == be)) | |
438 | 441 | then { | |
439 | - | let | |
440 | - | if (( | |
441 | - | then [StringEntry( | |
442 | + | let bO = fromBase58String(bN) | |
443 | + | if ((bO == bO)) | |
444 | + | then [StringEntry(h(), bN)] | |
442 | 445 | else throw("Strict value is not equal to itself.") | |
443 | 446 | } | |
444 | 447 | else throw("Strict value is not equal to itself.") | |
446 | 449 | ||
447 | 450 | ||
448 | 451 | ||
449 | - | @Callable( | |
452 | + | @Callable(aZ) | |
450 | 453 | func confirmManager () = { | |
451 | - | let | |
452 | - | let | |
454 | + | let bP = aJ() | |
455 | + | let bQ = if (isDefined(bP)) | |
453 | 456 | then true | |
454 | 457 | else throw("no pending manager") | |
455 | - | if (( | |
458 | + | if ((bQ == bQ)) | |
456 | 459 | then { | |
457 | - | let | |
460 | + | let bR = if ((aZ.callerPublicKey == value(bP))) | |
458 | 461 | then true | |
459 | 462 | else throw("you are not pending manager") | |
460 | - | if (( | |
461 | - | then [StringEntry( | |
463 | + | if ((bR == bR)) | |
464 | + | then [StringEntry(g(), toBase58String(value(bP))), DeleteEntry(h())] | |
462 | 465 | else throw("Strict value is not equal to itself.") | |
463 | 466 | } | |
464 | 467 | else throw("Strict value is not equal to itself.") | |
465 | 468 | } | |
466 | 469 | ||
467 | 470 | ||
468 | - | @Verifier( | |
469 | - | func | |
470 | - | let | |
471 | - | let | |
472 | - | if ($isInstanceOf( | |
471 | + | @Verifier(bS) | |
472 | + | func bT () = { | |
473 | + | let bU = { | |
474 | + | let aH = aG() | |
475 | + | if ($isInstanceOf(aH, "ByteVector")) | |
473 | 476 | then { | |
474 | - | let | |
475 | - | | |
477 | + | let bb = aH | |
478 | + | bb | |
476 | 479 | } | |
477 | - | else if ($isInstanceOf( | |
478 | - | then | |
480 | + | else if ($isInstanceOf(aH, "Unit")) | |
481 | + | then bS.senderPublicKey | |
479 | 482 | else throw("Match error") | |
480 | 483 | } | |
481 | - | sigVerify( | |
484 | + | sigVerify(bS.bodyBytes, bS.proofs[0], bU) | |
482 | 485 | } | |
483 | 486 |
Old | New | Differences | |
---|---|---|---|
1 | 1 | {-# STDLIB_VERSION 5 #-} | |
2 | 2 | {-# SCRIPT_TYPE ACCOUNT #-} | |
3 | 3 | {-# CONTENT_TYPE DAPP #-} | |
4 | 4 | let a = "__" | |
5 | 5 | ||
6 | 6 | let b = "" | |
7 | 7 | ||
8 | 8 | func c (d) = valueOrErrorMessage(getString(this, d), ("No data for this.key=" + d)) | |
9 | 9 | ||
10 | 10 | ||
11 | 11 | func e (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d)) | |
12 | 12 | ||
13 | 13 | ||
14 | - | func f () = | |
14 | + | func f (d) = valueOrErrorMessage(getBoolean(this, d), ("No data for this.key=" + d)) | |
15 | 15 | ||
16 | 16 | ||
17 | - | func g () = makeString(["%s", " | |
17 | + | func g () = makeString(["%s", "managerPublicKey"], a) | |
18 | 18 | ||
19 | 19 | ||
20 | - | func h ( | |
20 | + | func h () = makeString(["%s", "pendingManagerPublicKey"], a) | |
21 | 21 | ||
22 | 22 | ||
23 | - | func | |
23 | + | func i (j,k,l,m) = throw(((((((j + ": baseAssetStr=") + k) + " userAddressStr=") + l) + " getTxIdStr=") + m)) | |
24 | 24 | ||
25 | 25 | ||
26 | - | func n ( | |
26 | + | func n () = makeString(["%s", "assetsStoreContract"], a) | |
27 | 27 | ||
28 | 28 | ||
29 | - | func o ( | |
29 | + | func o (k) = ("%s%s%s__config__asset__" + k) | |
30 | 30 | ||
31 | 31 | ||
32 | - | func | |
32 | + | func p (q) = makeString(["%s%s", "proxyAddress", q], a) | |
33 | 33 | ||
34 | 34 | ||
35 | - | func r () = "%s | |
35 | + | func r (q) = makeString(["%s%s", "balance", q], a) | |
36 | 36 | ||
37 | 37 | ||
38 | - | func s ( | |
38 | + | func s () = "%s__nextInternalAssetId" | |
39 | 39 | ||
40 | 40 | ||
41 | - | func | |
41 | + | func t (u) = ("%s%s%d__price__last__" + u) | |
42 | 42 | ||
43 | 43 | ||
44 | - | func | |
44 | + | func v (u,w) = makeString(["%s%s%s%d%s__topup__last__height", u, w], a) | |
45 | 45 | ||
46 | 46 | ||
47 | - | func | |
47 | + | func x (u,y,z) = makeString(["%s%s%d%d%d__price__history", u, toString(y), toString(z)], a) | |
48 | 48 | ||
49 | 49 | ||
50 | - | func A ( | |
50 | + | func A (u) = ("%s%s%d__total__locked__" + u) | |
51 | 51 | ||
52 | 52 | ||
53 | - | func | |
53 | + | func B (C,l) = makeString(["%s%s%d%s__total__locked", C, l], a) | |
54 | 54 | ||
55 | 55 | ||
56 | - | func | |
56 | + | func D (E) = ("%s%s%d__mappings__internal2baseAssetId__" + toString(E)) | |
57 | 57 | ||
58 | 58 | ||
59 | - | func F ( | |
59 | + | func F (k) = ("%s%s%s__mappings__baseAsset2internalId__" + k) | |
60 | 60 | ||
61 | 61 | ||
62 | - | func | |
62 | + | func G (H) = ("%s%s%s__mappings__share2baseAssetId__" + H) | |
63 | 63 | ||
64 | 64 | ||
65 | - | func I ( | |
65 | + | func I (k) = ("%s%s%s__mappings__baseAsset2shareId__" + k) | |
66 | 66 | ||
67 | 67 | ||
68 | - | func J ( | |
68 | + | func J (C) = ("%s%s%d__shutdown__put__" + C) | |
69 | 69 | ||
70 | 70 | ||
71 | - | func K () = | |
71 | + | func K (C) = ("%s%s%d__shutdown__manager__" + C) | |
72 | 72 | ||
73 | 73 | ||
74 | - | let L = 1 | |
75 | - | ||
76 | - | let M = 2 | |
77 | - | ||
78 | - | let N = 3 | |
79 | - | ||
80 | - | let O = 4 | |
81 | - | ||
82 | - | let P = 5 | |
83 | - | ||
84 | - | func Q (G,B,R,S,T) = makeString(["%s%d%d%d%d", G, B, toString(R), toString(S), toString(T)], a) | |
74 | + | func L () = addressFromStringValue(value(getString(n()))) | |
85 | 75 | ||
86 | 76 | ||
87 | - | let | |
77 | + | let M = 1 | |
88 | 78 | ||
89 | - | let | |
79 | + | let N = 2 | |
90 | 80 | ||
91 | - | func W (X,Y) = makeString(["%d%d", toString(X), toString(Y)], a) | |
81 | + | let O = 3 | |
82 | + | ||
83 | + | let P = 4 | |
84 | + | ||
85 | + | let Q = 5 | |
86 | + | ||
87 | + | func R (H,C,S,T,U) = makeString(["%s%d%d%d%d", H, C, toString(S), toString(T), toString(U)], a) | |
92 | 88 | ||
93 | 89 | ||
94 | - | func Z (d) = { | |
95 | - | let aa = split(valueOrElse(getString(this, d), W(0, 0)), a) | |
96 | - | [-1, parseIntValue(aa[U]), parseIntValue(aa[V])] | |
90 | + | let V = 1 | |
91 | + | ||
92 | + | let W = 2 | |
93 | + | ||
94 | + | func X (Y,Z) = makeString(["%d%d", toString(Y), toString(Z)], a) | |
95 | + | ||
96 | + | ||
97 | + | func aa (d) = { | |
98 | + | let ab = split(valueOrElse(getString(this, d), X(0, 0)), a) | |
99 | + | [-1, parseIntValue(ab[V]), parseIntValue(ab[W])] | |
97 | 100 | } | |
98 | 101 | ||
99 | 102 | ||
100 | - | func | |
103 | + | func ac (ad,C,ae,af) = makeString(["%s%d%s%s", ad, C, ae, af], a) | |
101 | 104 | ||
102 | 105 | ||
103 | - | let | |
106 | + | let ag = 1 | |
104 | 107 | ||
105 | - | let | |
108 | + | let ah = 2 | |
106 | 109 | ||
107 | - | let | |
110 | + | let ai = 3 | |
108 | 111 | ||
109 | - | let | |
112 | + | let aj = 4 | |
110 | 113 | ||
111 | - | let | |
114 | + | let ak = 5 | |
112 | 115 | ||
113 | - | let | |
116 | + | let al = 6 | |
114 | 117 | ||
115 | - | let | |
118 | + | let am = 7 | |
116 | 119 | ||
117 | - | let | |
120 | + | let an = 8 | |
118 | 121 | ||
119 | - | func | |
122 | + | func ao (ap,aq,ar,as,at,au,av,aw) = makeString(["%s%d%d%d%d%d%d%d", ap, aq, ar, as, at, au, av, aw], a) | |
120 | 123 | ||
121 | 124 | ||
122 | - | func | |
125 | + | func ax (ap,aq,ar,as,at,au,av,aw) = ao(ap, toString(aq), toString(ar), toString(as), toString(at), toString(au), toString(av), toString(aw)) | |
123 | 126 | ||
124 | 127 | ||
125 | - | func | |
128 | + | func ay (az,aA,aB) = ao(aA, az[ah], az[ai], az[aj], az[ak], az[al], az[am], toString(aB)) | |
126 | 129 | ||
127 | 130 | ||
128 | - | func | |
129 | - | let d = | |
131 | + | func aC (k) = { | |
132 | + | let d = o(k) | |
130 | 133 | split(c(d), a) | |
131 | 134 | } | |
132 | 135 | ||
133 | 136 | ||
134 | - | func | |
135 | - | let | |
136 | - | StringEntry(d, | |
137 | + | func aD (d,Y,Z) = { | |
138 | + | let aE = aa(d) | |
139 | + | StringEntry(d, X((aE[V] + Y), (aE[W] + Z))) | |
137 | 140 | } | |
138 | 141 | ||
139 | 142 | ||
140 | - | func | |
141 | - | let | |
142 | - | StringEntry(d, | |
143 | + | func aF (d,Y,Z) = { | |
144 | + | let aE = aa(d) | |
145 | + | StringEntry(d, X((aE[V] - Y), (aE[W] - Z))) | |
143 | 146 | } | |
144 | 147 | ||
145 | 148 | ||
146 | - | func | |
147 | - | let | |
148 | - | if ($isInstanceOf( | |
149 | + | func aG () = { | |
150 | + | let aH = getString(g()) | |
151 | + | if ($isInstanceOf(aH, "String")) | |
149 | 152 | then { | |
150 | - | let | |
151 | - | fromBase58String( | |
153 | + | let aI = aH | |
154 | + | fromBase58String(aI) | |
152 | 155 | } | |
153 | - | else if ($isInstanceOf( | |
156 | + | else if ($isInstanceOf(aH, "Unit")) | |
154 | 157 | then unit | |
155 | 158 | else throw("Match error") | |
156 | 159 | } | |
157 | 160 | ||
158 | 161 | ||
159 | - | func | |
160 | - | let | |
161 | - | if ($isInstanceOf( | |
162 | + | func aJ () = { | |
163 | + | let aH = getString(h()) | |
164 | + | if ($isInstanceOf(aH, "String")) | |
162 | 165 | then { | |
163 | - | let | |
164 | - | fromBase58String( | |
166 | + | let aI = aH | |
167 | + | fromBase58String(aI) | |
165 | 168 | } | |
166 | - | else if ($isInstanceOf( | |
169 | + | else if ($isInstanceOf(aH, "Unit")) | |
167 | 170 | then unit | |
168 | 171 | else throw("Match error") | |
169 | 172 | } | |
170 | 173 | ||
171 | 174 | ||
172 | - | func | |
175 | + | func aK (q) = valueOrElse(getInteger(r(q)), 0) | |
173 | 176 | ||
174 | 177 | ||
175 | - | func | |
176 | - | let | |
177 | - | let | |
178 | - | let | |
179 | - | let | |
180 | - | if ((0 > | |
181 | - | then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString( | |
178 | + | func aL (C,aM,aN,aO,S,T) = { | |
179 | + | let ab = aa(A(C)) | |
180 | + | let aP = ab[W] | |
181 | + | let aQ = aK(toBase58String(aM)) | |
182 | + | let aR = (aQ + aN) | |
183 | + | if ((0 > aR)) | |
184 | + | then throw(((("baseAssetBalanceConsideringLock < 0: baseAssetBalance=" + toString(aQ)) + " baseAssetBalanceConsideringLock=") + toString(aR))) | |
182 | 185 | else { | |
183 | - | let | |
184 | - | let | |
185 | - | then (1 * | |
186 | - | else fraction( | |
187 | - | $Tuple5( | |
186 | + | let aS = value(assetInfo(aO)).quantity | |
187 | + | let ar = if ((aS == 0)) | |
188 | + | then (1 * T) | |
189 | + | else fraction(aR, T, aS) | |
190 | + | $Tuple5(ar, aQ, aP, aR, aS) | |
188 | 191 | } | |
189 | 192 | } | |
190 | 193 | ||
191 | 194 | ||
192 | - | func | |
193 | - | let | |
194 | - | let | |
195 | - | let | |
196 | - | let | |
197 | - | let | |
198 | - | let | |
199 | - | $Tuple5( | |
195 | + | func aT (C,aM,aO,S,T) = { | |
196 | + | let ab = aa(A(C)) | |
197 | + | let aP = ab[W] | |
198 | + | let aQ = aK(toBase58String(aM)) | |
199 | + | let aR = aQ | |
200 | + | let aS = value(assetInfo(aO)).quantity | |
201 | + | let ar = value(getInteger(t(C))) | |
202 | + | $Tuple5(ar, aQ, aP, aR, aS) | |
200 | 203 | } | |
201 | 204 | ||
202 | 205 | ||
203 | - | func | |
204 | - | let | |
205 | - | let | |
206 | - | let | |
207 | - | let | |
208 | - | let | |
209 | - | let | |
210 | - | let | |
211 | - | let | |
212 | - | let | |
213 | - | let | |
214 | - | if ($isInstanceOf( | |
206 | + | func aU (k) = { | |
207 | + | let aM = fromBase58String(k) | |
208 | + | let aV = aC(k) | |
209 | + | let H = aV[M] | |
210 | + | let aO = fromBase58String(H) | |
211 | + | let S = parseIntValue(aV[O]) | |
212 | + | let T = parseIntValue(aV[P]) | |
213 | + | let C = aV[N] | |
214 | + | let aW = aT(C, aM, aO, S, T) | |
215 | + | let aX = { | |
216 | + | let aH = getInteger(v(C, getStringValue(p(k)))) | |
217 | + | if ($isInstanceOf(aH, "Int")) | |
215 | 218 | then { | |
216 | - | let | |
217 | - | value( | |
219 | + | let y = aH | |
220 | + | value(y) | |
218 | 221 | } | |
219 | - | else if ($isInstanceOf( | |
220 | - | then getIntegerValue( | |
222 | + | else if ($isInstanceOf(aH, "Unit")) | |
223 | + | then getIntegerValue(v(C, toString(addressFromPublicKey(fromBase58String(getStringValue(g())))))) | |
221 | 224 | else throw("undefined behaviour in privateCurrentSysParamsREST match") | |
222 | 225 | } | |
223 | - | $Tuple8(IntegerEntry("price", | |
226 | + | $Tuple8(IntegerEntry("price", aW._1), IntegerEntry("decimalsMultPrice", T), IntegerEntry("baseAssetBalance", aW._2), IntegerEntry("totalLockedBaseAmount", aW._3), IntegerEntry("baseAssetBalanceConsideringLock", aW._4), IntegerEntry("shareEmission", aW._5), IntegerEntry("baseAssetDecimals", value(assetInfo(aM)).decimals), IntegerEntry("lastTopUpTimestamp", value(blockInfoByHeight(aX)).timestamp)) | |
224 | 227 | } | |
225 | 228 | ||
226 | 229 | ||
227 | - | func | |
228 | - | let | |
229 | - | let | |
230 | - | if ($isInstanceOf( | |
230 | + | func aY (aZ) = { | |
231 | + | let ba = throw("permission denied") | |
232 | + | let aH = aG() | |
233 | + | if ($isInstanceOf(aH, "ByteVector")) | |
231 | 234 | then { | |
232 | - | let | |
233 | - | if (( | |
235 | + | let bb = aH | |
236 | + | if ((aZ.callerPublicKey == bb)) | |
234 | 237 | then true | |
235 | - | else | |
238 | + | else ba | |
236 | 239 | } | |
237 | - | else if ($isInstanceOf( | |
238 | - | then if (( | |
240 | + | else if ($isInstanceOf(aH, "Unit")) | |
241 | + | then if ((aZ.caller == this)) | |
239 | 242 | then true | |
240 | - | else | |
243 | + | else ba | |
241 | 244 | else throw("Match error") | |
242 | 245 | } | |
243 | 246 | ||
244 | 247 | ||
245 | - | func | |
246 | - | let | |
247 | - | if ( | |
248 | + | func bc (aZ,q) = { | |
249 | + | let bd = (toString(aZ.caller) == valueOrElse(getString(p(q)), b)) | |
250 | + | if (bd) | |
248 | 251 | then true | |
249 | 252 | else { | |
250 | - | let | |
251 | - | if (( | |
253 | + | let be = aY(aZ) | |
254 | + | if ((be == be)) | |
252 | 255 | then true | |
253 | 256 | else throw("Strict value is not equal to itself.") | |
254 | 257 | } | |
255 | 258 | } | |
256 | 259 | ||
257 | 260 | ||
258 | - | @Callable( | |
259 | - | func constructor ( | |
260 | - | let | |
261 | - | if (( | |
262 | - | then [StringEntry( | |
261 | + | @Callable(aZ) | |
262 | + | func constructor (L) = { | |
263 | + | let be = aY(aZ) | |
264 | + | if ((be == be)) | |
265 | + | then [StringEntry(n(), L)] | |
263 | 266 | else throw("Strict value is not equal to itself.") | |
264 | 267 | } | |
265 | 268 | ||
266 | 269 | ||
267 | 270 | ||
268 | - | @Callable( | |
269 | - | func adminRegisterAsset ( | |
270 | - | let | |
271 | - | let | |
272 | - | let | |
273 | - | if (( | |
274 | - | then if ((toString(addressFromStringValue( | |
271 | + | @Callable(aZ) | |
272 | + | func adminRegisterAsset (k,bf,bg,bh,bi,bj,bk) = { | |
273 | + | let aM = fromBase58String(k) | |
274 | + | let bl = value(assetInfo(aM)).decimals | |
275 | + | let bm = aY(aZ) | |
276 | + | if ((bm == bm)) | |
277 | + | then if ((toString(addressFromStringValue(bj)) != bj)) | |
275 | 278 | then throw("invalid shutdownManagerAddress") | |
276 | - | else if ((0 > | |
277 | - | then throw(("invalid getDelayinBlocks=" + toString( | |
279 | + | else if ((0 > bi)) | |
280 | + | then throw(("invalid getDelayinBlocks=" + toString(bi))) | |
278 | 281 | else { | |
279 | - | let | |
280 | - | let | |
281 | - | let | |
282 | - | let | |
283 | - | let | |
284 | - | let | |
285 | - | let | |
286 | - | let | |
287 | - | let | |
288 | - | if (( | |
282 | + | let bn = Issue(bf, bg, 1, bl, true) | |
283 | + | let aO = calculateAssetId(bn) | |
284 | + | let H = toBase58String(aO) | |
285 | + | let T = ((100 * 1000) * 1000) | |
286 | + | let S = pow(10, 0, bl, 0, 0, DOWN) | |
287 | + | let bo = (1 * T) | |
288 | + | let bp = valueOrElse(getInteger(this, s()), 0) | |
289 | + | let C = toString(bp) | |
290 | + | let bq = invoke(L(), "createOrUpdate", [H, bh, false], nil) | |
291 | + | if ((bq == bq)) | |
289 | 292 | then { | |
290 | - | let | |
291 | - | if (( | |
292 | - | then [StringEntry( | |
293 | + | let br = invoke(L(), "addLabel", [H, "DEFI"], nil) | |
294 | + | if ((br == br)) | |
295 | + | then [StringEntry(o(k), R(H, C, S, T, bi)), StringEntry(D(bp), k), StringEntry(F(k), C), StringEntry(G(H), k), StringEntry(I(k), H), BooleanEntry(J(C), false), StringEntry(K(C), bj), IntegerEntry(s(), (bp + 1)), IntegerEntry(t(C), bo), IntegerEntry(x(C, height, lastBlock.timestamp), bo), bn, Burn(aO, 1), StringEntry(p(k), bk)] | |
293 | 296 | else throw("Strict value is not equal to itself.") | |
294 | 297 | } | |
295 | 298 | else throw("Strict value is not equal to itself.") | |
296 | 299 | } | |
297 | 300 | else throw("Strict value is not equal to itself.") | |
298 | 301 | } | |
299 | 302 | ||
300 | 303 | ||
301 | 304 | ||
302 | - | @Callable( | |
303 | - | func shutdownPut ( | |
304 | - | let | |
305 | - | let | |
306 | - | let | |
307 | - | if ((1 > size( | |
305 | + | @Callable(aZ) | |
306 | + | func shutdownPut (bs) = { | |
307 | + | let bt = toString(bs) | |
308 | + | let bu = c(D(bs)) | |
309 | + | let bj = c(K(bt)) | |
310 | + | if ((1 > size(bu))) | |
308 | 311 | then throw("invalid internalBaseAssetId") | |
309 | - | else if ((toString( | |
312 | + | else if ((toString(aZ.caller) != bj)) | |
310 | 313 | then throw("access denied") | |
311 | - | else [BooleanEntry( | |
314 | + | else [BooleanEntry(J(toString(bs)), true)] | |
312 | 315 | } | |
313 | 316 | ||
314 | 317 | ||
315 | 318 | ||
316 | - | @Callable( | |
319 | + | @Callable(aZ) | |
317 | 320 | func put () = { | |
318 | - | let | |
319 | - | let | |
320 | - | let | |
321 | - | let | |
322 | - | let | |
323 | - | let | |
324 | - | let | |
325 | - | let | |
326 | - | let | |
327 | - | let | |
328 | - | let | |
329 | - | if ( | |
321 | + | let bv = value(aZ.payments[0]) | |
322 | + | let aM = value(bv.assetId) | |
323 | + | let k = toBase58String(aM) | |
324 | + | let l = toString(aZ.caller) | |
325 | + | let aV = aC(k) | |
326 | + | let H = aV[M] | |
327 | + | let aO = fromBase58String(H) | |
328 | + | let S = parseIntValue(aV[O]) | |
329 | + | let T = parseIntValue(aV[P]) | |
330 | + | let C = aV[N] | |
331 | + | let bw = e(J(C)) | |
332 | + | if (bw) | |
330 | 333 | then throw("put operation is blocked") | |
331 | 334 | else { | |
332 | - | let | |
333 | - | let | |
334 | - | let | |
335 | - | [Reissue( | |
335 | + | let bx = (aK(k) + bv.amount) | |
336 | + | let ar = aT(C, aM, aO, S, T)._1 | |
337 | + | let Y = fraction(bv.amount, T, ar, CEILING) | |
338 | + | [Reissue(aO, Y, true), ScriptTransfer(aZ.caller, Y, aO), StringEntry(ac("P", C, l, toBase58String(aZ.transactionId)), ax("FINISHED", bv.amount, ar, Y, height, lastBlock.timestamp, height, lastBlock.timestamp)), ScriptTransfer(addressFromStringValue(value(getString(p(k)))), bv.amount, aM), IntegerEntry(r(k), bx)] | |
336 | 339 | } | |
337 | 340 | } | |
338 | 341 | ||
339 | 342 | ||
340 | 343 | ||
341 | - | @Callable( | |
344 | + | @Callable(aZ) | |
342 | 345 | func submitGetRequest () = { | |
343 | - | let | |
344 | - | let | |
345 | - | let | |
346 | - | let | |
347 | - | let | |
348 | - | let | |
349 | - | let | |
350 | - | let | |
351 | - | let | |
352 | - | let | |
353 | - | let | |
354 | - | let | |
355 | - | let | |
356 | - | let | |
357 | - | let | |
358 | - | let | |
359 | - | let | |
360 | - | let | |
361 | - | [Burn( | |
346 | + | let bv = value(aZ.payments[0]) | |
347 | + | let aO = value(bv.assetId) | |
348 | + | let H = toBase58String(aO) | |
349 | + | let by = toBase58String(aZ.callerPublicKey) | |
350 | + | let ae = aZ.caller | |
351 | + | let l = toString(ae) | |
352 | + | let Y = bv.amount | |
353 | + | let k = c(G(H)) | |
354 | + | let aM = fromBase58String(k) | |
355 | + | let aV = aC(k) | |
356 | + | let S = parseIntValue(aV[O]) | |
357 | + | let T = parseIntValue(aV[P]) | |
358 | + | let bz = parseIntValue(aV[Q]) | |
359 | + | let C = aV[N] | |
360 | + | let ar = aT(C, aM, aO, S, T)._1 | |
361 | + | let Z = fraction(Y, ar, T) | |
362 | + | let bA = ac("G", C, l, toBase58String(aZ.transactionId)) | |
363 | + | let bB = ax("PENDING", Y, ar, Z, height, lastBlock.timestamp, (height + bz), 0) | |
364 | + | [Burn(aO, Y), StringEntry(bA, bB), aD(A(C), Y, Z), aD(B(C, l), Y, Z), IntegerEntry(r(k), (aK(k) - Z))] | |
362 | 365 | } | |
363 | 366 | ||
364 | 367 | ||
365 | 368 | ||
366 | - | @Callable( | |
367 | - | func executeGetRequest ( | |
368 | - | let | |
369 | - | let | |
370 | - | let | |
371 | - | let | |
372 | - | let | |
373 | - | let | |
374 | - | let | |
375 | - | let | |
376 | - | let | |
377 | - | let | |
378 | - | let | |
379 | - | if (( | |
380 | - | then | |
381 | - | else if (( | |
382 | - | then | |
383 | - | else [ScriptTransfer( | |
369 | + | @Callable(aZ) | |
370 | + | func executeGetRequest (k,l,m) = { | |
371 | + | let ae = addressFromStringValue(l) | |
372 | + | let bC = aC(k) | |
373 | + | let aO = fromBase58String(bC[M]) | |
374 | + | let aM = fromBase58String(k) | |
375 | + | let C = bC[N] | |
376 | + | let bA = ac("G", C, l, m) | |
377 | + | let bD = split(c(bA), a) | |
378 | + | let ap = bD[ag] | |
379 | + | let av = parseIntValue(bD[am]) | |
380 | + | let bE = parseIntValue(bD[ah]) | |
381 | + | let bF = parseIntValue(bD[aj]) | |
382 | + | if ((ap != "PENDING")) | |
383 | + | then i("Status is not PENDING", k, l, m) | |
384 | + | else if ((av > height)) | |
385 | + | then i(((("EndHeight[" + toString(av)) + "] > ") + toString(height)), k, l, m) | |
386 | + | else [ScriptTransfer(ae, bF, aM), StringEntry(bA, ay(bD, "FINISHED", lastBlock.timestamp)), aF(A(C), bE, bF), aF(B(C, l), bE, bF)] | |
384 | 387 | } | |
385 | 388 | ||
386 | 389 | ||
387 | 390 | ||
388 | - | @Callable( | |
389 | - | func topUpBalance ( | |
390 | - | let | |
391 | - | let | |
392 | - | let | |
393 | - | let | |
394 | - | let | |
395 | - | let | |
396 | - | let | |
397 | - | let | |
398 | - | let | |
399 | - | let | |
400 | - | let | |
391 | + | @Callable(aZ) | |
392 | + | func topUpBalance (k,bG) = { | |
393 | + | let bC = aC(k) | |
394 | + | let bv = value(aZ.payments[0]) | |
395 | + | let bH = value(bv.assetId) | |
396 | + | let bI = toBase58String(bH) | |
397 | + | let aO = fromBase58String(bC[M]) | |
398 | + | let S = parseIntValue(bC[O]) | |
399 | + | let T = parseIntValue(bC[P]) | |
400 | + | let C = bC[N] | |
401 | + | let bJ = v(C, toString(aZ.caller)) | |
402 | + | let aX = valueOrElse(getInteger(this, bJ), 0) | |
403 | + | let bK = [bc(aZ, k), if ((aX != height)) | |
401 | 404 | then true | |
402 | - | else throw("only one topUp per block is allowed"), if (( | |
405 | + | else throw("only one topUp per block is allowed"), if ((bG > 0)) | |
403 | 406 | then true | |
404 | 407 | else throw("only positive delta is allowed")] | |
405 | - | if (( | |
406 | - | then if (( | |
408 | + | if ((bK == bK)) | |
409 | + | then if ((k != bI)) | |
407 | 410 | then throw("attached payment's asset id is NOT matched passed baseAssetStr") | |
408 | - | else if ((size( | |
411 | + | else if ((size(aZ.payments) > 1)) | |
409 | 412 | then throw("only one payment can be attached") | |
410 | 413 | else { | |
411 | - | let | |
412 | - | [IntegerEntry( | |
414 | + | let ar = aL(C, bH, bG, aO, S, T)._1 | |
415 | + | [IntegerEntry(t(C), ar), IntegerEntry(x(C, height, lastBlock.timestamp), ar), IntegerEntry(bJ, height), IntegerEntry(r(bI), (aK(bI) + bG))] | |
413 | 416 | } | |
414 | 417 | else throw("Strict value is not equal to itself.") | |
415 | 418 | } | |
416 | 419 | ||
417 | 420 | ||
418 | 421 | ||
419 | - | @Callable( | |
420 | - | func currentSysParamsREST ( | |
421 | - | let | |
422 | - | let | |
423 | - | let | |
424 | - | let | |
425 | - | let | |
426 | - | let | |
427 | - | let | |
428 | - | let | |
429 | - | throw( | |
422 | + | @Callable(aZ) | |
423 | + | func currentSysParamsREST (k) = { | |
424 | + | let bL = aU(k) | |
425 | + | let ar = bL._1.value | |
426 | + | let T = bL._2.value | |
427 | + | let aQ = bL._3.value | |
428 | + | let aP = bL._4.value | |
429 | + | let aR = bL._5.value | |
430 | + | let aS = bL._6.value | |
431 | + | let bM = makeString(["startCurrentSysParamsREST", toString(ar), toString(T), toString(aQ), toString(aP), toString(aR), toString(aS), "endCurrentSysParamsREST"], a) | |
432 | + | throw(bM) | |
430 | 433 | } | |
431 | 434 | ||
432 | 435 | ||
433 | 436 | ||
434 | - | @Callable( | |
435 | - | func setManager ( | |
436 | - | let | |
437 | - | if (( | |
437 | + | @Callable(aZ) | |
438 | + | func setManager (bN) = { | |
439 | + | let be = aY(aZ) | |
440 | + | if ((be == be)) | |
438 | 441 | then { | |
439 | - | let | |
440 | - | if (( | |
441 | - | then [StringEntry( | |
442 | + | let bO = fromBase58String(bN) | |
443 | + | if ((bO == bO)) | |
444 | + | then [StringEntry(h(), bN)] | |
442 | 445 | else throw("Strict value is not equal to itself.") | |
443 | 446 | } | |
444 | 447 | else throw("Strict value is not equal to itself.") | |
445 | 448 | } | |
446 | 449 | ||
447 | 450 | ||
448 | 451 | ||
449 | - | @Callable( | |
452 | + | @Callable(aZ) | |
450 | 453 | func confirmManager () = { | |
451 | - | let | |
452 | - | let | |
454 | + | let bP = aJ() | |
455 | + | let bQ = if (isDefined(bP)) | |
453 | 456 | then true | |
454 | 457 | else throw("no pending manager") | |
455 | - | if (( | |
458 | + | if ((bQ == bQ)) | |
456 | 459 | then { | |
457 | - | let | |
460 | + | let bR = if ((aZ.callerPublicKey == value(bP))) | |
458 | 461 | then true | |
459 | 462 | else throw("you are not pending manager") | |
460 | - | if (( | |
461 | - | then [StringEntry( | |
463 | + | if ((bR == bR)) | |
464 | + | then [StringEntry(g(), toBase58String(value(bP))), DeleteEntry(h())] | |
462 | 465 | else throw("Strict value is not equal to itself.") | |
463 | 466 | } | |
464 | 467 | else throw("Strict value is not equal to itself.") | |
465 | 468 | } | |
466 | 469 | ||
467 | 470 | ||
468 | - | @Verifier( | |
469 | - | func | |
470 | - | let | |
471 | - | let | |
472 | - | if ($isInstanceOf( | |
471 | + | @Verifier(bS) | |
472 | + | func bT () = { | |
473 | + | let bU = { | |
474 | + | let aH = aG() | |
475 | + | if ($isInstanceOf(aH, "ByteVector")) | |
473 | 476 | then { | |
474 | - | let | |
475 | - | | |
477 | + | let bb = aH | |
478 | + | bb | |
476 | 479 | } | |
477 | - | else if ($isInstanceOf( | |
478 | - | then | |
480 | + | else if ($isInstanceOf(aH, "Unit")) | |
481 | + | then bS.senderPublicKey | |
479 | 482 | else throw("Match error") | |
480 | 483 | } | |
481 | - | sigVerify( | |
484 | + | sigVerify(bS.bodyBytes, bS.proofs[0], bU) | |
482 | 485 | } | |
483 | 486 |
github/deemru/w8io/169f3d6 219.46 ms ◑