tx · 3DV35dEdDZQMZDEN21KYbcNDn2gBqTiKwjZbQ2zPr6CA

3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT:  -0.03200000 Waves

2023.02.09 09:31 [2441743] smart account 3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT > SELF 0.00000000 Waves

{ "type": 13, "id": "3DV35dEdDZQMZDEN21KYbcNDn2gBqTiKwjZbQ2zPr6CA", "fee": 3200000, "feeAssetId": null, "timestamp": 1675924331587, "version": 1, "sender": "3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT", "senderPublicKey": "AYbpHveq7zviKTDV7SGTB1pZGFbkumgfq3jSwVv6BznT", "proofs": [ "4iMG9XbvGDsCd1nzkAZiqfXPEkaG8NjGgLussT4Fiusc46d9kAH5ZNJ3aUHLoK3JPBSFc8CvxgqnK42qhsMeHWcy" ], "script": "base64:BgKcKQgCEgQKAgEEEgYKBAEEAQgSAwoBCBIAEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIQa2V5RmFjdG9yeUNvbmZpZyINa2V5TWF0Y2hlclB1YiIpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMiE3Bvb2xDb250cmFjdEFkZHJlc3MiDWtleVBvb2xDb25maWciCWlBbXRBc3NldCILaVByaWNlQXNzZXQiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciITa2V5QWxsUG9vbHNTaHV0ZG93biINa2V5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciD2ZhY3RvcnlDb250cmFjdCITZmVlQ29sbGVjdG9yQWRkcmVzcyIFaW5GZWUiAUAiBm91dEZlZSIQaXNHbG9iYWxTaHV0ZG93biITZ2V0TWF0Y2hlclB1Yk9yRmFpbCINZ2V0UG9vbENvbmZpZyIIYW10QXNzZXQiCnByaWNlQXNzZXQiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3OTA2ODA3MiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIgphbXRBc3NldElkIgxwcmljZUFzc2V0SWQiEmFjY0FtdEFzc2V0QmFsYW5jZSIUYWNjUHJpY2VBc3NldEJhbGFuY2UiDW9yZGVyQW10QXNzZXQiEG9yZGVyQW10QXNzZXRTdHIiD29yZGVyUHJpY2VBc3NldCISb3JkZXJQcmljZUFzc2V0U3RyIgpvcmRlclByaWNlIghwcmljZURjbSIQY2FzdGVkT3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgZhbW91bnQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiByRtYXRjaDAiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIDZmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI5NjkyMzI2MiIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMzI2NjIzNDE1IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzNTQ3MjM2MTEiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI1MDg4MjUyNTUiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjgzNTI2ODkxIgt0b3RhbEFtb3VudCINJHQwMjY4OTUyNzEyMSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCIJaXNNYW5hZ2VyIgJwayILbXVzdE1hbmFnZXIiAnBkIg1jbGVhbkFtb3VudEluIglpc1JldmVyc2UiDSR0MDI4Nzk4MjkxMDMiCGFzc2V0T3V0Igdhc3NldEluIhJwb29sQXNzZXRJbkJhbGFuY2UiE3Bvb2xBc3NldE91dEJhbGFuY2UiCWFtb3VudE91dCIMYW1vdW50T3V0TWluIglhZGRyZXNzVG8iBG9sZEsiBG5ld0siBmNoZWNrSyIIY2hlY2tNaW4iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzNDIyODM0MzU4IgVib251cyITZW1pdEFtb3VudEVzdGltYXRlZCIKZW1pdEFtb3VudCIIc3Rha2VJbnYiB3NlbmRGZWUiDSR0MDM1MDg3MzUyMjIiDW91dEFzc2V0SWRTdHIiDWlzR2V0RGlzYWJsZWQiDSR0MDM2MDI3MzYxNjIiD2Ftb3VudEVzdGltYXRlZCIHYnVybkludiINYXNzZXRUcmFuc2ZlciINJHQwMzY3OTczNjkzNSINdW5zdGFrZUFtb3VudCIKdW5zdGFrZUludiINJHQwMzc3NjAzNzg5MyIJb3V0QW10QW10IhRidXJuTFBBc3NldE9uRmFjdG9yeSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoZQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFu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AmFLAAkA2QQBCQECYXkCBQJhRQkBAmFoAAECYUwABAJhTQkBAmF5AgUEdGhpcwkBAmFlAAQCYU4JAQJheQIFBHRoaXMJAQJhZgAEAmFtCQECYUICBQJhRQkBAmFuAQUCYU4EAmFsCQECYUICBQJhRQkBAmFuAQUCYU0JALUJAgkBAmF5AgUCYUUJAQJhawIJAKQDAQUCYWwJAKQDAQUCYW0FAWoBAmFPAQJhUAMJAAACBQJhUAUBaQUEdW5pdAkA2QQBBQJhUAECYVEBAmFQAwkAAAIFAmFQBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFQAQJhUgECYVMJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhUwUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQFwCQDZBAEJAJEDAgUCYVMFAXEJAQJhTwEJAJEDAgUCYVMFAXIJAQJhTwEJAJEDAgUCYVMFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQF1AAJhVAkBAmFSAQkBAmFMAAACYVUFAmFUAAJhVggFAmFVAl8xAAJhVwgFAmFVAl8yAAJhWAgFAmFVAl8zAAJhWQgFAmFVAl80AAJhWggFAmFVAl81AAJiYQgFAmFVAl82AAJiYggFAmFVAl83AQJiYwAJALUJAgkBAmF5AgUCYUUJAQJhZwAFAWoAAmJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYmMABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJjAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmYKAmJnAmJoAmJpAmJqAmJrAmJsAmJtAmJuAmJvAmJwCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJicAUDbmlsBQFqAQJicQYCYnICYnMCYnQCYmoCYm0CYm4JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJicgkAzAgCCQCkAwEFAmJzCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJtCQDMCAIJAKQDAQUCYm4FA25pbAUBagECYnUBAmJ2AwkAAAIFAmJ2AgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJidgECYncCAmJ4AmJ5CQC8AgMFAmJ4BQFkBQJieQECYnoEAmJBAmJCAmJDAmJEBAJiRQkBAUQCBQJiQwUCYkEEAmJGCQEBRAIFAmJEBQJiQgkBAmJ3AgUCYkYFAmJFAQJiRwMCYkMCYkQCYkgEAmJJCQECYUwABAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiTAkBAmJ6BAUCYkoFAmJLBQJiQwUCYkQEAmJ5CQEBRAIFAmJDBQJiSgQCYngJAQFEAgUCYkQFAmJLBAJiTQkBAUQCBQJiSAUBYgQCYk4JAQJidwIFAmJ5BQJiTQQCYk8JAQJidwIFAmJ4BQJiTQkAzAgCBQJiTAkAzAgCBQJiTgkAzAgCBQJiTwUDbmlsAQJiUAMCYkMCYkQCYkgEAmJRCQECYkcDBQJiQwUCYkQFAmJICQDMCAIJAQFIAgkAkQMCBQJiUQAABQFiCQDMCAIJAQFIAgkAkQMCBQJiUQABBQFiCQDMCAIJAQFIAgkAkQMCBQJiUQACBQFiBQNuaWwBAmJSBAJiUwJiVAJiVQJhYgQCYkkJAQJhTAAEAmJWCQCRAwIFAmJJBQFxBAJiVwkAkQMCBQJiSQUBcgQCYlgJAJEDAgUCYkkFAXMEAmJBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmJZCQCRAwIFAmJJBQFwBAJiWggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiVgUCYlQJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmNhCQECYnUBBQJiVwQCY2IJAQFEAgUCY2EFAmJBBAJjYwkBAmJ1AQUCYlgEAmNkCQEBRAIFAmNjBQJiQgQCY2UJAQJidwIFAmNkBQJjYgQCY2YJAQFIAgUCY2UFAWIEAmNnCQEBRAIFAmJVBQFiBAJjaAkBAUQCBQJiWgUBYgQCY2kJALwCAwUCY2IFAmNnBQJjaAQCY2oJALwCAwUCY2QFAmNnBQJjaAQCY2sJAQFIAgUCY2kFAmJBBAJjbAkBAUgCBQJjagUCYkIEAmNtAwkAAAIFAmJTAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCY2sDCQAAAgUCYlcCBVdBVkVTBQR1bml0CQDZBAEFAmJXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjbAMJAAACBQJiWAIFV0FWRVMFBHVuaXQJANkEAQUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCYlMJAQJicQYFAmNrBQJjbAUCYlUFAmNmBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmBQNuaWwJAJwKCgUCY2sFAmNsBQJiVwUCYlgFAmNhBQJjYwUCYloFAmNlBQJiWQUCY20BAmNuCQJiUwJjbwJjcAJjcQJjcgJjcwJhYgJjdAJjdQQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmN2CQCRAwIFAmJJBQFyBAJjdwkAkQMCBQJiSQUBcwQCY3gJAJEDAgUCYkkFAXYEAmN5CQCRAwIFAmJJBQF3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiWQkAkQMCBQJiSQUBcAQCYloICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlYJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlYCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjegkA2AQBCQELdmFsdWVPckVsc2UCBQJjcQkA2QQBAgVXQVZFUwQCY0EJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY3MJANkEAQIFV0FWRVMDAwkBAiE9AgUCY3YFAmN6BgkBAiE9AgUCY3cFAmNBCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCY2EDBQJjdAkBAmJ1AQUCY3YJAGUCCQECYnUBBQJjdgUCY3AEAmNjAwUCY3QJAQJidQEFAmN3CQBlAgkBAmJ1AQUCY3cFAmNyBAJjQgkBAUQCBQJjcAUCYkoEAmNDCQEBRAIFAmNyBQJiSwQCY0QJAQJidwIFAmNDBQJjQgQCY2IJAQFEAgUCY2EFAmJKBAJjZAkBAUQCBQJjYwUCYksEAmNFAwkAAAIFAmJaAAAEAmNlBQFlBAJjRgUBZQQCYk0JAHYGCQC5AgIFAmNCBQJjQwAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJiTQUBYgkBAUgCBQJjQgUCYkoJAQFIAgUCY0MFAmJLCQECYncCCQC3AgIFAmNkBQJjQwkAtwICBQJjYgUCY0IFAmNGBAJjZQkBAmJ3AgUCY2QFAmNiBAJjRgkAvAIDCQEBUgEJALgCAgUCY2UFAmNEBQFkBQJjZQQCY0cJAQFEAgUCY28FAWIDAwkBAiE9AgUCY2UFAWUJAL8CAgUCY0YFAmNHBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjRgIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNHBAJjaAkBAUQCBQJiWgUBYgQCY0gJALwCAwUCY0IFAmNlBQFkBAJjSQkAvAIDBQJjQwUBZAUCY2UEAmNKAwkAvwICBQJjSAUCY0MJAJQKAgUCY0kFAmNDCQCUCgIFAmNCBQJjSAQCY0sIBQJjSgJfMQQCY0wIBQJjSgJfMgQCYk0JALwCAwUCY2gFAmNMBQJjZAkAlwoFCQEBSAIFAmJNBQFiCQEBSAIFAmNLBQJiSgkBAUgCBQJjTAUCYksFAmNlBQJjRgQCY00IBQJjRQJfMQQCY04IBQJjRQJfMgQCY08IBQJjRQJfMwQCY2YJAQFIAggFAmNFAl80BQFiBAJjUAkBAUgCCAUCY0UCXzUFAWIDCQBnAgAABQJjTQkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY1EDCQEBIQEFAmN1AAAFAmNNBAJjUgkAZQIFAmNwBQJjTgQCY1MJAGUCBQJjcgUCY08EAmNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAmFiBQJiUwkBAmJmCgUCY04FAmNPBQJjUQUCY2YFAmNvBQJjUAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY1IFAmNTBQNuaWwJAJ8KDQUCY00FAmNRBQJjZgUCY2EFAmNjBQJiWgUCYlYFAmJZBQJjVAUCY1IFAmNTBQJjcQUCY3MBAmNVAQJjVgQCYkkJAQJhTAAEAmNXCQCRAwIFAmJJBQFyBAJjWAkAkQMCBQJiSQUBcwQCYlkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBcAQCYkoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdAQCYksJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdQQCY1kJAQJidQEFAmNXBAJjWgkBAmJ1AQUCY1gEAmNlAwkAAAIIBQJjVglvcmRlclR5cGUFA0J1eQkBAmJ6BAUCYkoFAmJLCQBkAgUCY1kIBQJjVgZhbW91bnQFAmNaCQECYnoEBQJiSgUCYksJAGUCBQJjWQgFAmNWBmFtb3VudAUCY1oEAmNmCQEBSAIFAmNlBQFiAwMDCQECYUoABgkAAAIFAmJZBQFtBgkAAAIFAmJZBQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAQCZGEICAUCY1YJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BAJkYgMJAAACBQJkYQUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGEEAmRjCAgFAmNWCWFzc2V0UGFpcgpwcmljZUFzc2V0BAJkZAMJAAACBQJkYwUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGMDAwkBAiE9AgUCZGIFAmNXBgkBAiE9AgUCZGQFAmNYCQACAQITV3Jvbmcgb3JkZXIgYXNzZXRzLgQCZGUIBQJjVgVwcmljZQQCZGYJAGsDBQFiBQJiSwUCYkoEAmRnCQEBTQMFAmRlBQFiBQJkZgQCZGgDCQAAAggFAmNWCW9yZGVyVHlwZQUDQnV5CQBnAgUCY2YFAmRnCQBnAgUCZGcFAmNmBgECZGkBAmRqAwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAQkAAgECHWV4YWN0bHkgMSBwYXltZW50IGlzIGV4cGVjdGVkBAJkawkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCYlQJAQV2YWx1ZQEIBQJkawdhc3NldElkBAJkbAgFAmRrBmFtb3VudAQCY0UJAQJiUgQJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQJANgEAQUCYlQFAmRsCAUCZGoGY2FsbGVyBAJjawgFAmNFAl8xBAJjbAgFAmNFAl8yBAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCY0UCXzkEAmNtCAUCY0UDXzEwAwMJAQJhSgAGCQAAAgUCYlkFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZCQCXCgUFAmNrBQJjbAUCZGwFAmJUBQJjbQECZG0DAmRqAmNvAmN1AwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmRuCQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABAJkbwkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAQQCZHAJAQJjbgkJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQFAmNvCAUCZG4GYW1vdW50CAUCZG4HYXNzZXRJZAgFAmRvBmFtb3VudAgFAmRvB2Fzc2V0SWQJAKUIAQgFAmRqBmNhbGxlcgcFAmN1BAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCZHACXzgDAwMJAQJhSgAGCQAAAgUCYlkFAWwGCQAAAgUCYlkFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZBQJkcAECZHEBAmRyBAJkcwkA/AcEBQJhRQIEZW1pdAkAzAgCBQJkcgUDbmlsBQNuaWwDCQAAAgUCZHMFAmRzBAJkdAQCZHUFAmRzAwkAAQIFAmR1AgdBZGRyZXNzBAJkdgUCZHUJAPwHBAUCZHYCBGVtaXQJAMwIAgUCZHIFA25pbAUDbmlsBQR1bml0AwkAAAIFAmR0BQJkdAUCZHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmR3AgJkcgJkeAQCZHkDCQAAAgUCZHgAAAAACQBrAwUCZHIFAmR4BQFiCQCUCgIJAGUCBQJkcgUCZHkFAmR5AQJkegQCZEECZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmRECQECYnUBCQECYVEBBQJhWQQCZEUJAQJidQEJAQJhUQEFAmFaBAJkRgMJAAACBQJkQgUCYVkGAwkAAAIFAmRCBQJhWgcJAQJhQwECDWludmFsaWQgYXNzZXQEAmRHAwUCZEMJAJQKAgUCZEQFAmRFAwUCZEYJAJQKAgkAZQIFAmREBQJkQQUCZEUJAJQKAgUCZEQJAGUCBQJkRQUCZEEEAmRICAUCZEcCXzEEAmRJCAUCZEcCXzIEAmRKAwUCZEYJAJQKAgUCZEEAAAkAlAoCAAAFAmRBBAJkSwgFAmRKAl8xBAJkTAgFAmRKAl8yBAJkTQgJAQJkdwIFAmRLBQJhRwJfMQQCZE4ICQECZHcCBQJkTAUCYUcCXzEEAmRPCQECZHcCBQJkQQUCYUcEAmRQCAUCZE8CXzEEAmR5CAUCZE8CXzIEAmRRCQBkAgUCZEgFAmRNBAJkUgkAZAIFAmRJBQJkTgQCZFMJAQJidwIJAQFEAgUCZFIFAmJiCQEBRAIFAmRRBQJiYQQCZFQJAQFIAgUCZFMFAWIEAmRVAwUCZEYFAmRIBQJkSQQCZFYJALYCAQUCZFUEAmRXCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVgJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkWAMJAL8CAgUCZFcFAWYGCQECYUMBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRYBQJkWAQCZFkJALYCAQUCZFAEAmRaCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRXCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFkFAWQFAmRWABIAEgUERE9XTgUBZAUBZAUDbmlsBAJjVAMFAmRDBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJmCgUCZEsFAmRMBQJkWgUCZFQAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJlYQkBAmJ3AgkBAUQCBQJkSQUCYmIJAQFEAgUCZEgFAmJhBAJlYgkBAUgCBQJlYQUBYgQCZWMEAmVkAwUCZEYJAJQKAgUCZEsFAmRICQCUCgIFAmRMBQJkSQQCZHIIBQJlZAJfMQQCZWUIBQJlZAJfMgQCZWYJAKADAQkAvAIDBQJkVwkAtgIBCQBpAgUCZHIAAgkAtgIBBQJlZQkAawMJAGUCBQJkWgUCZWYFAWIFAmVmCQCWCgQFAmRaBQJjVAUCZHkFAmVjCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlZwUCZWgCZFACZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmVpCQDMCAIDCQAAAgUCZEIFAmFYBgkBAmFDAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmVpBQJlaQQCZWoDCQAAAgUCZWgFAmFZBgMJAAACBQJlaAUCYVoHCQECYUMBAg1pbnZhbGlkIGFzc2V0BAJlawMFAmVqCQC2AgEJAQJidQEJAQJhUQEFAmFZCQC2AgEJAQJidQEJAQJhUQEFAmFaBAJlbAkBAmJ1AQkBAmFRAQUCYVkEAmVtCQECYnUBCQECYVEBBQJhWgQCZW4DBQJlagUCZWwFAmVtBAJlbwkAtgIBBQJlbgQCZFcJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJhWAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJhWAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmVwCQC2AgEFAmRQBAJlcQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlawkAuAICBQFkCQB2BgkAuAICBQFkCQC6AgIJALkCAgUCZXAFAWQFAmRXABIFAWgAAAASBQRET1dOBQFkBQNuaWwEAmVyCQECZHcCBQJlcQUCYUkEAmVzCAUCZXICXzEEAmR5CAUCZXICXzIEAmV0AwUCZWoJAJYKBAUCZXMAAAkAZQIFAmVsBQJlcQUCZW0JAJYKBAAABQJlcwUCZWwJAGUCBQJlbQUCZXEEAmV1CAUCZXQCXzEEAmV2CAUCZXQCXzIEAmV3CAUCZXQCXzMEAmV4CAUCZXQCXzQEAmRTCQECYncCCQEBRAIFAmV4BQJiYgkBAUQCBQJldwUCYmEEAmRUCQEBSAIFAmRTBQFiBAJjVAMFAmRDBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJxBgUCZXUFAmV2BQJkUAUCZFQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQFA25pbAQCZWEJAQJidwIJAQFEAgUCZW0FAmJiCQEBRAIFAmVsBQJiYQQCZWIJAQFIAgUCZWEFAWIEAmVjBAJleQkAaAIJAKADAQkAvAIDBQJlawUCZXAFAmRXAAIJAGsDCQBlAgUCZXMFAmV5BQFiBQJleQkAlgoEBQJlcwUCY1QFAmR5BQJlYwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXoABAJkdQkAoggBCQEBVQADCQABAgUCZHUCBlN0cmluZwQCZUEFAmR1CQDZBAEFAmVBAwkAAQIFAmR1AgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVCAAQCZHUJAKIIAQkBAVYAAwkAAQIFAmR1AgZTdHJpbmcEAmVBBQJkdQkA2QQBBQJlQQMJAAECBQJkdQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlQwECZGoEAmR1CQECZXoAAwkAAQIFAmR1AgpCeXRlVmVjdG9yBAJlRAUCZHUJAAACCAUCZGoPY2FsbGVyUHVibGljS2V5BQJlRAMJAAECBQJkdQIEVW5pdAkAAAIIBQJkagZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZUUBAmRqBAJlRgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkdQkBAmV6AAMJAAECBQJkdQIKQnl0ZVZlY3RvcgQCZUQFAmR1AwkAAAIIBQJkag9jYWxsZXJQdWJsaWNLZXkFAmVEBgUCZUYDCQABAgUCZHUCBFVuaXQDCQAAAggFAmRqBmNhbGxlcgUEdGhpcwYFAmVGCQACAQILTWF0Y2ggZXJyb3IcAmRqASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkCAmVHAmVIBAJlSQMJAAACBQJlSAcEAmVKCQECYXkCBQR0aGlzCQECYWYABAJlSwkBAmF5AgUEdGhpcwkBAmFlAAkAlAoCBQJlSgUCZUsEAmVKCQECYXkCBQR0aGlzCQECYWUABAJlSwkBAmF5AgUEdGhpcwkBAmFmAAkAlAoCBQJlSgUCZUsEAmVKCAUCZUkCXzEEAmVLCAUCZUkCXzIEAmVMCQECYnUBBQJlSwQCZU0JAQJidQEFAmVKBAJlTgkAaQIJAGgCBQJlTQUCZUcJAGQCBQJlTAUCZUcJAJQKAgUDbmlsBQJlTgJkagEmY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcEFuZFNlbmRUb2tlbnMEAmVHAmVIAmVPAmVQBAJlaQkAzAgCAwkAZwIICQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABmFtb3VudAUCZUcGCQECYUMBAgxXcm9uZyBhbW91bnQJAMwIAgMJAAACCAUCZGoGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBCQECYXkCBQR0aGlzCQEBUwAGCQECYUMBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmVpBQJlaQQCZGsJAQV2YWx1ZQEJAJEDAggFAmRqCHBheW1lbnRzAAAEAmVLAwkAAAIIBQJkawdhc3NldElkBQR1bml0CQDYBAEJAJsDAQIFV0FWRVMJANgEAQkBBXZhbHVlAQgFAmRrB2Fzc2V0SWQEAmVKAwkAAAIFAmVIBwkBAmF5AgUEdGhpcwkBAmFmAAkBAmF5AgUEdGhpcwkBAmFlAAQCZUwJAGUCCQECYnUBBQJlSwgJAQV2YWx1ZQEJAJEDAggFAmRqCHBheW1lbnRzAAAGYW1vdW50BAJlTQkBAmJ1AQUCZUoEAmVOCQBpAgkAaAIFAmVNBQJlRwkAZAIFAmVMBQJlRwQCZVEJAGgCBQJlTAUCZU0EAmVSCQBoAgkBAmJ1AQUCZUsJAGUCCQECYnUBBQJlSgUCZU4EAmVTAwkAZwIFAmVSBQJlUQYJAAIBAhRuZXcgSyBpcyBmZXdlciBlcnJvcgMJAAACBQJlUwUCZVMEAmVUAwkAZwIFAmVOBQJlTwYJAAIBAixFeGNoYW5nZSByZXN1bHQgaXMgZmV3ZXIgY29pbnMgdGhhbiBleHBlY3RlZAMJAAACBQJlVAUCZVQJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZVAFAmVOAwkAAAIFAmVLAgVXQVZFUwUEdW5pdAkA2QQBBQJlSgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQpzZXRNYW5hZ2VyAQJlVQQCZVYJAQJlRQEFAmRqAwkAAAIFAmVWBQJlVgQCZVcJANkEAQUCZVUDCQAAAgUCZVcFAmVXCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFWAAUCZVUFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEOY29uZmlybU1hbmFnZXIABAJlWAkBAmVCAAQCZVkDCQEJaXNEZWZpbmVkAQUCZVgGCQACAQISTm8gcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVZBQJlWQQCZVoDCQAAAggFAmRqD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUCZVgGCQACAQIbWW91IGFyZSBub3QgcGVuZGluZyBtYW5hZ2VyAwkAAAIFAmVaBQJlWgkAzAgCCQELU3RyaW5nRW50cnkCCQEBVQAJANgEAQkBBXZhbHVlAQUCZVgJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBAVYABQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBA3B1dAICY28CZmEDCQBmAgAABQJjbwkAAgECIEludmFsaWQgc2xpcHBhZ2VUb2xlcmFuY2UgcGFzc2VkBAJkcAkBAmRtAwUCZGoFAmNvBgQCY1EIBQJkcAJfMgQCYlYIBQJkcAJfNwQCY20IBQJkcAJfOQQCY1IIBQJkcANfMTAEAmNTCAUCZHADXzExBAJmYggFAmRwA18xMgQCZmMIBQJkcANfMTMEAmRzCQD8BwQFAmFFAgRlbWl0CQDMCAIFAmNRBQNuaWwFA25pbAMJAAACBQJkcwUCZHMEAmR0BAJkdQUCZHMDCQABAgUCZHUCB0FkZHJlc3MEAmR2BQJkdQkA/AcEBQJkdgIEZW1pdAkAzAgCBQJjUQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZHQFAmR0BAJmZAMJAGYCBQJjUgAACQD8BwQFAmJlAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZmIFAmNSBQNuaWwFA25pbAMJAAACBQJmZAUCZmQEAmZlAwkAZgIFAmNTAAAJAPwHBAUCYmUCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmYwUCY1MFA25pbAUDbmlsAwkAAAIFAmZlBQJmZQQCZmYDBQJmYQQCZmcJAPwHBAUCYmQCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJWBQJjUQUDbmlsAwkAAAIFAmZnBQJmZwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkagZjYWxsZXIFAmNRBQJiVgUDbmlsCQDOCAIFAmNtBQJmZgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEKcHV0Rm9yRnJlZQECZmgDCQBmAgAABQJmaAkAAgECFEludmFsaWQgdmFsdWUgcGFzc2VkBAJkcAkBAmRtAwUCZGoFAmZoBwgFAmRwAl85AmRqAQlwdXRPbmVUa24CAmZpAmZqBAJmawoAAmFICQD8BwQFAmFFAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYUgCB0Jvb2xlYW4FAmFICQACAQkArAICCQADAQUCYUgCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZsAwMDCQECYUoABgkAAAIFAmFXBQFsBgkAAAIFAmFXBQFuBgUCZmsEAmVpCQDMCAIDAwkBASEBBQJmbAYJAQJlQwEFAmRqBgkBAmFDAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGoIcGF5bWVudHMAAQYJAQJhQwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVpBQJlaQQCZm0JAJEDAggFAmRqCHBheW1lbnRzAAAEAmRCCAUCZm0HYXNzZXRJZAQCZEEIBQJmbQZhbW91bnQEAmFiCAUCZGoGY2FsbGVyBAJhYwgFAmRqDXRyYW5zYWN0aW9uSWQEAmZuCQECZHoEBQJkQQUCZEIFAmFiBQJhYwMJAAACBQJmbgUCZm4EAmZvCAUCZm4CXzQEAmR5CAUCZm4CXzMEAmNUCAUCZm4CXzIEAmZwCAUCZm4CXzEEAmZxAwMJAGYCBQJmaQAACQBmAgUCZmkFAmZwBwkBAmFDAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmaQUDbmlsAgAFAmZwBAJkcwkBAmRxAQUCZnEDCQAAAgUCZHMFAmRzBAJmZgMFAmZqBAJmcgkA/AcEBQJiZAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVgFAmZxBQNuaWwDCQAAAgUCZnIFAmZyBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRqBmNhbGxlcgUCZnEFAmFYBQNuaWwEAmZzAwkAZgIFAmR5AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUYFAmR5BQJkQgUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNUBQJmZgUCZnMFAmZxCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqARFwdXRPbmVUa25SRUFET05MWQICZEICZEEEAmZ0CQECZHoEBQJkQQkBAmFPAQUCZEIFBHVuaXQFBHVuaXQEAmZwCAUCZnQCXzEEAmNUCAUCZnQCXzIEAmR5CAUCZnQCXzMEAmZvCAUCZnQCXzQJAJQKAgUDbmlsCQCVCgMFAmZwBQJkeQUCZm8CZGoBCWdldE9uZVRrbgICZnUCZmkEAmZrCgACYUgJAPwHBAUCYUUCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhSAIHQm9vbGVhbgUCYUgJAAIBCQCsAgIJAAMBBQJhSAIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZnYDAwkBAmFKAAYJAAACBQJhVwUBbgYFAmZrBAJlaQkAzAgCAwMJAQEhAQUCZnYGCQECZUMBBQJkagYJAQJhQwECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRqCHBheW1lbnRzAAEGCQECYUMBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmVoCQECYU8BBQJmdQQCZm0JAJEDAggFAmRqCHBheW1lbnRzAAAEAmRCCAUCZm0HYXNzZXRJZAQCZFAIBQJmbQZhbW91bnQEAmFiCAUCZGoGY2FsbGVyBAJhYwgFAmRqDXRyYW5zYWN0aW9uSWQEAmZ3CQECZWcFBQJlaAUCZFAFAmRCBQJhYgUCYWMDCQAAAgUCZncFAmZ3BAJmbwgFAmZ3Al80BAJkeQgFAmZ3Al8zBAJjVAgFAmZ3Al8yBAJmeAgFAmZ3Al8xBAJkcgMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmeAcJAQJhQwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmeAQCZnkJAPwHBAUCYUUCBGJ1cm4JAMwIAgUCZFAFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZEIFAmRQBQNuaWwDCQAAAgUCZnkFAmZ5BAJmegkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCZHIFAmVoBQNuaWwEAmZzAwkAZgIFAmR5AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUYFAmR5BQJlaAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNUBQJmegUCZnMFAmRyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqARFnZXRPbmVUa25SRUFET05MWQICZWgCZFAEAmZBCQECZWcFCQECYU8BBQJlaAUCZFAFAmFYBQR1bml0BQR1bml0BAJmeAgFAmZBAl8xBAJjVAgFAmZBAl8yBAJkeQgFAmZBAl8zBAJmbwgFAmZBAl80CQCUCgIFA25pbAkAlQoDBQJmeAUCZHkFAmZvAmRqARN1bnN0YWtlQW5kR2V0T25lVGtuAwJmQgJmdQJmaQQCZmsKAAJhSAkA/AcEBQJhRQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFIAgdCb29sZWFuBQJhSAkAAgEJAKwCAgkAAwEFAmFIAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmdgMDCQECYUoABgkAAAIFAmFXBQFuBgUCZmsEAmVpCQDMCAIDAwkBASEBBQJmdgYJAQJlQwEFAmRqBgkBAmFDAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGoIcGF5bWVudHMAAAYJAQJhQwECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVpBQJlaQQCZWgJAQJhTwEFAmZ1BAJhYggFAmRqBmNhbGxlcgQCYWMIBQJkag10cmFuc2FjdGlvbklkBAJmQwkA/AcEBQJiZAIHdW5zdGFrZQkAzAgCCQDYBAEFAmFYCQDMCAIFAmZCBQNuaWwFA25pbAMJAAACBQJmQwUCZkMEAmZECQECZWcFBQJlaAUCZkIFAmFYBQJhYgUCYWMDCQAAAgUCZkQFAmZEBAJmbwgFAmZEAl80BAJkeQgFAmZEAl8zBAJjVAgFAmZEAl8yBAJmeAgFAmZEAl8xBAJkcgMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmeAcJAQJhQwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmeAQCZnkJAPwHBAUCYUUCBGJ1cm4JAMwIAgUCZkIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVgFAmZCBQNuaWwDCQAAAgUCZnkFAmZ5BAJmegkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGoGY2FsbGVyBQJkcgUCZWgFA25pbAQCZnMDCQBmAgUCZHkAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRgUCZHkFAmVoBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY1QFAmZ6BQJmcwUCZHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBA2dldAAEAmNFCQECZGkBBQJkagQCZkUIBQJjRQJfMQQCY2wIBQJjRQJfMgQCZGwIBQJjRQJfMwQCYlQIBQJjRQJfNAQCY20IBQJjRQJfNQQCZkYJAPwHBAUCYUUCBGJ1cm4JAMwIAgUCZGwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlQFAmRsBQNuaWwDCQAAAgUCZkYFAmZGBQJjbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEJZ2V0Tm9MZXNzAgJmRwJmSAQCY0UJAQJkaQEFAmRqBAJjawgFAmNFAl8xBAJjbAgFAmNFAl8yBAJkbAgFAmNFAl8zBAJiVAgFAmNFAl80BAJjbQgFAmNFAl81AwkAZgIFAmZHBQJjawkAAgEJAKwCAgkArAICCQCsAgICHG5vTGVzc1RoZW5BbXRBc3NldCBmYWlsZWQ6ICAJAKQDAQUCY2sCAyA8IAkApAMBBQJmRwMJAGYCBQJmSAUCY2wJAAIBCQCsAgIJAKwCAgkArAICAh1ub0xlc3NUaGVuUHJpY2VBc3NldCBmYWlsZWQ6IAkApAMBBQJjbAIDIDwgCQCkAwEFAmZIBAJmRgkA/AcEBQJhRQIEYnVybgkAzAgCBQJkbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVAUCZGwFA25pbAMJAAACBQJmRgUCZkYFAmNtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYu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YnUBBQJjWAQCZlADCQAAAgUCZk8AAAkAzAgCBQFlCQDMCAIFAWUJAMwIAgUBZQUDbmlsCQECYkcDBQJjWQUCY1oFAmZPBAJjZgAABAJmUQkBAUgCCQCRAwIFAmZQAAEFAWIEAmZSCQEBSAIJAJEDAgUCZlAAAgUBYgQCZlMJAQV2YWx1ZQEJAJoIAgUCYUUJAQJhcQEJAKUIAQUEdGhpcwkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNZCQDMCAIJAKQDAQUCY1oJAMwIAgkApAMBBQJmTwkAzAgCCQCkAwEFAmNmCQDMCAIJAKQDAQUCZlEJAMwIAgkApAMBBQJmUgkAzAgCCQCkAwEFAmZTBQNuaWwFAWoCZGoBIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZAQJjcAQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmN2CQCRAwIFAmJJBQFyBAJiVwkA2QQBBQJjdgQCY3cJAJEDAgUCYkkFAXMEAmJYCQDZBAEFAmN3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiWQkAkQMCBQJiSQUBcAQCZk8ICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlYJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlYCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjWQkBAmJ1AQUCY3YEAmNaCQECYnUBBQJjdwQCYkUJAQFEAgUCY1kFAmJKBAJiRgkBAUQCBQJjWgUCYksEAmNlAwkAAAIFAmZPAAAFAWUJAQJidwIFAmJGBQJiRQQCY0IJAQFEAgUCY3AFAmJKBAJjQwkAvAIDBQJjQgUCY2UFAWQEAmNyCQEBSAIFAmNDBQJiSwQCZHAJAQJjbgkCAACgwh4FAmNwBQJiVwUCY3IFAmJYAgAGBwQCY00IBQJkcAJfMQQCZlQIBQJkcAJfMwQCY2EIBQJkcAJfNAQCY2MIBQJkcAJfNQQCYloIBQJkcAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY00JAMwIAgkApAMBCQEBSAIFAmNlBQFiCQDMCAIJAKQDAQUCY2EJAMwIAgkApAMBBQJjYwkAzAgCCQCkAwEFAmJaCQDMCAIFAmJZCQDMCAIJAKQDAQUCY3AJAMwIAgkApAMBBQJjcgUDbmlsBQFqAmRqAR9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZAQJjcgQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmN2CQCRAwIFAmJJBQFyBAJiVwkA2QQBBQJjdgQCY3cJAJEDAgUCYkkFAXMEAmJYCQDZBAEFAmN3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiWQkAkQMCBQJiSQUBcAQCZk8ICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlYJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlYCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJmVQkBAmJ1AQUCY3YEAmZWCQECYnUBBQJjdwQCZlcJAQFEAgUCZlUFAmJKBAJmWAkBAUQCBQJmVgUCYksEAmNlAwkAAAIFAmZPAAAFAWUJAQJidwIFAmZYBQJmVwQCY0MJAQFEAgUCY3IFAmJLBAJjQgkAvAIDBQJjQwUBZAUCY2UEAmNwCQEBSAIFAmNCBQJiSgQCZHAJAQJjbgkCAACgwh4FAmNwBQJiVwUCY3IFAmJYAgAGBwQCY00IBQJkcAJfMQQCZlQIBQJkcAJfMwQCY2EIBQJkcAJfNAQCY2MIBQJkcAJfNQQCYloIBQJkcAJfNgkAlAoCBQNuaWwJALkJAgkAzAgCAhAlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY00JAMwIAgkApAMBCQEBSAIFAmNlBQFiCQDMCAIJAKQDAQUCY2EJAMwIAgkApAMBBQJjYwkAzAgCCQCkAwEFAmJaCQDMCAIFAmJZCQDMCAIJAKQDAQUCY3AJAMwIAgkApAMBBQJjcgUDbmlsBQFqAmRqARNldmFsdWF0ZUdldFJFQURPTkxZAgJmWQJmWgQCY0UJAQJiUgQCAAUCZlkFAmZaBQR0aGlzBAJjawgFAmNFAl8xBAJjbAgFAmNFAl8yBAJjYQgFAmNFAl81BAJjYwgFAmNFAl82BAJiWggFAmNFAl83BAJjZggFAmNFAl84BAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCY0UCXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjawkAzAgCCQCkAwEFAmNsCQDMCAIJAKQDAQUCY2EJAMwIAgkApAMBBQJjYwkAzAgCCQCkAwEFAmJaCQDMCAIJAKYDAQUCY2YJAMwIAgkApAMBBQJiWQUDbmlsBQFqAQJnYQECZ2IABAJnYwQCZHUJAQJlegADCQABAgUCZHUCCkJ5dGVWZWN0b3IEAmVEBQJkdQUCZUQDCQABAgUCZHUCBFVuaXQIBQJnYQ9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZHUFAmdhAwkAAQIFAmR1AgVPcmRlcgQCY1YFAmR1BAJnZAkBAmFLAAQCYXYJAQJjVQEFAmNWBAJhdwkA9AMDCAUCY1YJYm9keUJ5dGVzCQCRAwIIBQJjVgZwcm9vZnMAAAgFAmNWD3NlbmRlclB1YmxpY0tleQQCYXgJAPQDAwgFAmNWCWJvZHlCeXRlcwkAkQMCCAUCY1YGcHJvb2ZzAAEFAmdkAwMDBQJhdgUCYXcHBQJheAcGCQECYXUDBQJhdgUCYXcFAmF4AwkAAQIFAmR1AhRTZXRTY3JpcHRUcmFuc2FjdGlvbgQCZUEFAmR1BAJnZQkA9gMBCQEFdmFsdWUBCAUCZUEGc2NyaXB0BAJnZgkA2wQBCQEFdmFsdWUBCQCdCAIFAmFFCQECYXMABAJnZwkA8QcBBQR0aGlzAwMJAAACBQJnZgUCZ2UJAQIhPQIFAmdnBQJnZQcGCQD0AwMIBQJnYQlib2R5Qnl0ZXMJAJEDAggFAmdhBnByb29mcwAABQJnYwkA9AMDCAUCZ2EJYm9keUJ5dGVzCQCRAwIIBQJnYQZwcm9vZnMAAAUCZ2PUbsUV", "chainId": 84, "height": 2441743, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: D8zVNcaXHi7CqYXtEuABKDjwTfzrd6hiw1AgZF3QWArD Next: 7BDPgXb3nZpxhg75K48rdAz2xEX8xP2cANkDigFFj4c7 Diff:
OldNewDifferences
675675 let eL = bu(eK)
676676 let eM = bu(eJ)
677677 let eN = ((eM * eG) / (eL + eG))
678- let eO = (eL * eM)
679- let eP = ((bu(eK) + eG) * (bu(eJ) - eN))
680- let eQ = if ((eP >= eO))
681- then true
682- else throw("new K is fewer error")
683- if ((eQ == eQ))
684- then $Tuple2(nil, eN)
685- else throw("Strict value is not equal to itself.")
678+ $Tuple2(nil, eN)
686679 }
687680
688681
689682
690683 @Callable(dj)
691-func calculateAmountOutForSwapAndSendTokens (eG,eH,eR,eS) = {
684+func calculateAmountOutForSwapAndSendTokens (eG,eH,eO,eP) = {
692685 let ei = [if ((value(dj.payments[0]).amount >= eG))
693686 then true
694687 else aC("Wrong amount"), if ((dj.caller == addressFromStringValue(ay(this, S()))))
706699 let eL = (bu(eK) - value(dj.payments[0]).amount)
707700 let eM = bu(eJ)
708701 let eN = ((eM * eG) / (eL + eG))
709- let eO = (eL * eM)
710- let eP = (bu(eK) * (bu(eJ) - eN))
711- let eQ = if ((eP >= eO))
702+ let eQ = (eL * eM)
703+ let eR = (bu(eK) * (bu(eJ) - eN))
704+ let eS = if ((eR >= eQ))
712705 then true
713706 else throw("new K is fewer error")
714- if ((eQ == eQ))
707+ if ((eS == eS))
715708 then {
716- let eT = if ((eN >= eR))
709+ let eT = if ((eN >= eO))
717710 then true
718711 else throw("Exchange result is fewer coins than expected")
719712 if ((eT == eT))
720- then [ScriptTransfer(addressFromStringValue(eS), eN, if ((eK == "WAVES"))
713+ then [ScriptTransfer(addressFromStringValue(eP), eN, if ((eK == "WAVES"))
721714 then unit
722715 else fromBase58String(eJ))]
723716 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__pendingManagerPublicKey"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 func ag () = "%s__factoryConfig"
118118
119119
120120 func ah () = "%s%s__matcher__publicKey"
121121
122122
123123 func ai (aj) = (("%s%s%s__" + aj) + "__mappings__poolContract2LpAsset")
124124
125125
126126 func ak (al,am) = (((("%d%d%s__" + al) + "__") + am) + "__config")
127127
128128
129129 func an (ao) = ("%s%s%s__mappings__baseAsset2internalId__" + ao)
130130
131131
132132 func ap () = "%s__shutdown"
133133
134134
135135 func aq (ar) = ("%s%s__poolWeight__" + ar)
136136
137137
138138 func as () = "%s__allowedLpScriptHash"
139139
140140
141141 let at = "%s__feeCollectorAddress"
142142
143143 func au (av,aw,ax) = throw(((((("order validation failed: orderValid=" + toString(av)) + " senderValid=") + toString(aw)) + " matcherValid=") + toString(ax)))
144144
145145
146146 func ay (az,aA) = valueOrErrorMessage(getString(az, aA), makeString(["mandatory ", toString(az), ".", aA, " is not defined"], ""))
147147
148148
149149 func aB (az,aA) = valueOrErrorMessage(getInteger(az, aA), makeString(["mandatory ", toString(az), ".", aA, " is not defined"], ""))
150150
151151
152152 func aC (aD) = throw(makeString(["lp.ride:", aD], " "))
153153
154154
155155 let aE = addressFromStringValue(ay(this, T()))
156156
157157 let aF = addressFromStringValue(ay(aE, at))
158158
159159 let aG = {
160160 let aH = invoke(aE, "getInFeeREADONLY", [toString(this)], nil)
161161 if ($isInstanceOf(aH, "Int"))
162162 then aH
163163 else throw(($getType(aH) + " couldn't be cast to Int"))
164164 }
165165
166166 let aI = {
167167 let aH = invoke(aE, "getOutFeeREADONLY", [toString(this)], nil)
168168 if ($isInstanceOf(aH, "Int"))
169169 then aH
170170 else throw(($getType(aH) + " couldn't be cast to Int"))
171171 }
172172
173173 func aJ () = valueOrElse(getBoolean(aE, ap()), false)
174174
175175
176176 func aK () = fromBase58String(ay(aE, ah()))
177177
178178
179179 func aL () = {
180180 let aM = ay(this, ae())
181181 let aN = ay(this, af())
182182 let am = aB(aE, an(aN))
183183 let al = aB(aE, an(aM))
184184 split(ay(aE, ak(toString(al), toString(am))), j)
185185 }
186186
187187
188188 func aO (aP) = if ((aP == i))
189189 then unit
190190 else fromBase58String(aP)
191191
192192
193193 func aQ (aP) = if ((aP == unit))
194194 then i
195195 else toBase58String(value(aP))
196196
197197
198198 func aR (aS) = $Tuple7(addressFromStringValue(aS[o]), parseIntValue(aS[p]), fromBase58String(aS[q]), aO(aS[r]), aO(aS[s]), parseIntValue(aS[t]), parseIntValue(aS[u]))
199199
200200
201201 let aT = aR(aL())
202202
203203 let aU = aT
204204
205205 let aV = aU._1
206206
207207 let aW = aU._2
208208
209209 let aX = aU._3
210210
211211 let aY = aU._4
212212
213213 let aZ = aU._5
214214
215215 let ba = aU._6
216216
217217 let bb = aU._7
218218
219219 func bc () = split(ay(aE, ag()), j)
220220
221221
222222 let bd = valueOrErrorMessage(addressFromString(bc()[B]), "incorrect staking address")
223223
224224 let be = valueOrErrorMessage(addressFromString(bc()[C]), "incorrect staking address")
225225
226226 func bf (bg,bh,bi,bj,bk,bl,bm,bn,bo,bp) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl), toString(bm), toString(bn), toString(bo), toString(bp)], j)
227227
228228
229229 func bq (br,bs,bt,bj,bm,bn) = makeString(["%d%d%d%d%d%d", toString(br), toString(bs), toString(bt), toString(bj), toString(bm), toString(bn)], j)
230230
231231
232232 func bu (bv) = if ((bv == "WAVES"))
233233 then wavesBalance(this).available
234234 else assetBalance(this, fromBase58String(bv))
235235
236236
237237 func bw (bx,by) = fraction(bx, d, by)
238238
239239
240240 func bz (bA,bB,bC,bD) = {
241241 let bE = D(bC, bA)
242242 let bF = D(bD, bB)
243243 bw(bF, bE)
244244 }
245245
246246
247247 func bG (bC,bD,bH) = {
248248 let bI = aL()
249249 let bJ = parseIntValue(bI[t])
250250 let bK = parseIntValue(bI[u])
251251 let bL = bz(bJ, bK, bC, bD)
252252 let by = D(bC, bJ)
253253 let bx = D(bD, bK)
254254 let bM = D(bH, b)
255255 let bN = bw(by, bM)
256256 let bO = bw(bx, bM)
257257 [bL, bN, bO]
258258 }
259259
260260
261261 func bP (bC,bD,bH) = {
262262 let bQ = bG(bC, bD, bH)
263263 [H(bQ[0], b), H(bQ[1], b), H(bQ[2], b)]
264264 }
265265
266266
267267 func bR (bS,bT,bU,ab) = {
268268 let bI = aL()
269269 let bV = bI[q]
270270 let bW = bI[r]
271271 let bX = bI[s]
272272 let bA = parseIntValue(bI[t])
273273 let bB = parseIntValue(bI[u])
274274 let bY = bI[p]
275275 let bZ = valueOrErrorMessage(assetInfo(fromBase58String(bV)), (("Asset " + bV) + " doesn't exist")).quantity
276276 if ((bV != bT))
277277 then throw("Invalid asset passed.")
278278 else {
279279 let ca = bu(bW)
280280 let cb = D(ca, bA)
281281 let cc = bu(bX)
282282 let cd = D(cc, bB)
283283 let ce = bw(cd, cb)
284284 let cf = H(ce, b)
285285 let cg = D(bU, b)
286286 let ch = D(bZ, b)
287287 let ci = fraction(cb, cg, ch)
288288 let cj = fraction(cd, cg, ch)
289289 let ck = H(ci, bA)
290290 let cl = H(cj, bB)
291291 let cm = if ((bS == ""))
292292 then nil
293293 else [ScriptTransfer(ab, ck, if ((bW == "WAVES"))
294294 then unit
295295 else fromBase58String(bW)), ScriptTransfer(ab, cl, if ((bX == "WAVES"))
296296 then unit
297297 else fromBase58String(bX)), StringEntry(ad(toString(ab), bS), bq(ck, cl, bU, cf, height, lastBlock.timestamp)), IntegerEntry(W(), cf), IntegerEntry(X(height, lastBlock.timestamp), cf)]
298298 $Tuple10(ck, cl, bW, bX, ca, cc, bZ, ce, bY, cm)
299299 }
300300 }
301301
302302
303303 func cn (bS,co,cp,cq,cr,cs,ab,ct,cu) = {
304304 let bI = aL()
305305 let bV = fromBase58String(bI[q])
306306 let cv = bI[r]
307307 let cw = bI[s]
308308 let cx = bI[v]
309309 let cy = bI[w]
310310 let bJ = parseIntValue(bI[t])
311311 let bK = parseIntValue(bI[u])
312312 let bY = bI[p]
313313 let bZ = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
314314 let cz = toBase58String(valueOrElse(cq, fromBase58String("WAVES")))
315315 let cA = toBase58String(valueOrElse(cs, fromBase58String("WAVES")))
316316 if (if ((cv != cz))
317317 then true
318318 else (cw != cA))
319319 then throw("Invalid amt or price asset passed.")
320320 else {
321321 let ca = if (ct)
322322 then bu(cv)
323323 else (bu(cv) - cp)
324324 let cc = if (ct)
325325 then bu(cw)
326326 else (bu(cw) - cr)
327327 let cB = D(cp, bJ)
328328 let cC = D(cr, bK)
329329 let cD = bw(cC, cB)
330330 let cb = D(ca, bJ)
331331 let cd = D(cc, bK)
332332 let cE = if ((bZ == 0))
333333 then {
334334 let ce = e
335335 let cF = e
336336 let bM = pow((cB * cC), 0, toBigInt(5), 1, 0, DOWN)
337337 $Tuple5(H(bM, b), H(cB, bJ), H(cC, bK), bw((cd + cC), (cb + cB)), cF)
338338 }
339339 else {
340340 let ce = bw(cd, cb)
341341 let cF = fraction(R((ce - cD)), d, ce)
342342 let cG = D(co, b)
343343 if (if ((ce != e))
344344 then (cF > cG)
345345 else false)
346346 then throw(((("Price slippage " + toString(cF)) + " exceeded the passed limit of ") + toString(cG)))
347347 else {
348348 let ch = D(bZ, b)
349349 let cH = fraction(cB, ce, d)
350350 let cI = fraction(cC, d, ce)
351351 let cJ = if ((cH > cC))
352352 then $Tuple2(cI, cC)
353353 else $Tuple2(cB, cH)
354354 let cK = cJ._1
355355 let cL = cJ._2
356356 let bM = fraction(ch, cL, cd)
357357 $Tuple5(H(bM, b), H(cK, bJ), H(cL, bK), ce, cF)
358358 }
359359 }
360360 let cM = cE._1
361361 let cN = cE._2
362362 let cO = cE._3
363363 let cf = H(cE._4, b)
364364 let cP = H(cE._5, b)
365365 if ((0 >= cM))
366366 then throw("Invalid calculations. LP calculated is less than zero.")
367367 else {
368368 let cQ = if (!(cu))
369369 then 0
370370 else cM
371371 let cR = (cp - cN)
372372 let cS = (cr - cO)
373373 let cT = [IntegerEntry(W(), cf), IntegerEntry(X(height, lastBlock.timestamp), cf), StringEntry(aa(ab, bS), bf(cN, cO, cQ, cf, co, cP, height, lastBlock.timestamp, cR, cS))]
374374 $Tuple13(cM, cQ, cf, ca, cc, bZ, bV, bY, cT, cR, cS, cq, cs)
375375 }
376376 }
377377 }
378378
379379
380380 func cU (cV) = {
381381 let bI = aL()
382382 let cW = bI[r]
383383 let cX = bI[s]
384384 let bY = parseIntValue(bI[p])
385385 let bJ = parseIntValue(bI[t])
386386 let bK = parseIntValue(bI[u])
387387 let cY = bu(cW)
388388 let cZ = bu(cX)
389389 let ce = if ((cV.orderType == Buy))
390390 then bz(bJ, bK, (cY + cV.amount), cZ)
391391 else bz(bJ, bK, (cY - cV.amount), cZ)
392392 let cf = H(ce, b)
393393 if (if (if (aJ())
394394 then true
395395 else (bY == m))
396396 then true
397397 else (bY == n))
398398 then throw("Exchange operations disabled")
399399 else {
400400 let da = cV.assetPair.amountAsset
401401 let db = if ((da == unit))
402402 then "WAVES"
403403 else toBase58String(value(da))
404404 let dc = cV.assetPair.priceAsset
405405 let dd = if ((dc == unit))
406406 then "WAVES"
407407 else toBase58String(value(dc))
408408 if (if ((db != cW))
409409 then true
410410 else (dd != cX))
411411 then throw("Wrong order assets.")
412412 else {
413413 let de = cV.price
414414 let df = fraction(b, bK, bJ)
415415 let dg = M(de, b, df)
416416 let dh = if ((cV.orderType == Buy))
417417 then (cf >= dg)
418418 else (dg >= cf)
419419 true
420420 }
421421 }
422422 }
423423
424424
425425 func di (dj) = if ((size(dj.payments) != 1))
426426 then throw("exactly 1 payment is expected")
427427 else {
428428 let dk = value(dj.payments[0])
429429 let bT = value(dk.assetId)
430430 let dl = dk.amount
431431 let cE = bR(toBase58String(dj.transactionId), toBase58String(bT), dl, dj.caller)
432432 let ck = cE._1
433433 let cl = cE._2
434434 let bY = parseIntValue(cE._9)
435435 let cm = cE._10
436436 if (if (aJ())
437437 then true
438438 else (bY == n))
439439 then throw(("Get operation is blocked by admin. Status = " + toString(bY)))
440440 else $Tuple5(ck, cl, dl, bT, cm)
441441 }
442442
443443
444444 func dm (dj,co,cu) = if ((size(dj.payments) != 2))
445445 then throw("exactly 2 payments are expected")
446446 else {
447447 let dn = value(dj.payments[0])
448448 let do = value(dj.payments[1])
449449 let dp = cn(toBase58String(dj.transactionId), co, dn.amount, dn.assetId, do.amount, do.assetId, toString(dj.caller), false, cu)
450450 let bY = parseIntValue(dp._8)
451451 if (if (if (aJ())
452452 then true
453453 else (bY == l))
454454 then true
455455 else (bY == n))
456456 then throw(("Put operation is blocked by admin. Status = " + toString(bY)))
457457 else dp
458458 }
459459
460460
461461 func dq (dr) = {
462462 let ds = invoke(aE, "emit", [dr], nil)
463463 if ((ds == ds))
464464 then {
465465 let dt = {
466466 let du = ds
467467 if ($isInstanceOf(du, "Address"))
468468 then {
469469 let dv = du
470470 invoke(dv, "emit", [dr], nil)
471471 }
472472 else unit
473473 }
474474 if ((dt == dt))
475475 then dr
476476 else throw("Strict value is not equal to itself.")
477477 }
478478 else throw("Strict value is not equal to itself.")
479479 }
480480
481481
482482 func dw (dr,dx) = {
483483 let dy = if ((dx == 0))
484484 then 0
485485 else fraction(dr, dx, b)
486486 $Tuple2((dr - dy), dy)
487487 }
488488
489489
490490 func dz (dA,dB,ab,ac) = {
491491 let dC = (ac == unit)
492492 let dD = bu(aQ(aY))
493493 let dE = bu(aQ(aZ))
494494 let dF = if ((dB == aY))
495495 then true
496496 else if ((dB == aZ))
497497 then false
498498 else aC("invalid asset")
499499 let dG = if (dC)
500500 then $Tuple2(dD, dE)
501501 else if (dF)
502502 then $Tuple2((dD - dA), dE)
503503 else $Tuple2(dD, (dE - dA))
504504 let dH = dG._1
505505 let dI = dG._2
506506 let dJ = if (dF)
507507 then $Tuple2(dA, 0)
508508 else $Tuple2(0, dA)
509509 let dK = dJ._1
510510 let dL = dJ._2
511511 let dM = dw(dK, aG)._1
512512 let dN = dw(dL, aG)._1
513513 let dO = dw(dA, aG)
514514 let dP = dO._1
515515 let dy = dO._2
516516 let dQ = (dH + dM)
517517 let dR = (dI + dN)
518518 let dS = bw(D(dR, bb), D(dQ, ba))
519519 let dT = H(dS, b)
520520 let dU = if (dF)
521521 then dH
522522 else dI
523523 let dV = toBigInt(dU)
524524 let dW = toBigInt(valueOrErrorMessage(assetInfo(aX), (("asset " + toBase58String(aX)) + " doesn't exist")).quantity)
525525 let dX = if ((dW > f))
526526 then true
527527 else aC("initial deposit requires all coins")
528528 if ((dX == dX))
529529 then {
530530 let dY = toBigInt(dP)
531531 let dZ = max([0, toInt(((dW * (sqrtBigInt((d + ((dY * d) / dV)), 18, 18, DOWN) - d)) / d))])
532532 let cT = if (dC)
533533 then nil
534534 else [IntegerEntry(W(), dT), IntegerEntry(X(height, lastBlock.timestamp), dT), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bf(dK, dL, dZ, dT, 0, 0, height, lastBlock.timestamp, 0, 0))]
535535 let ea = bw(D(dI, bb), D(dH, ba))
536536 let eb = H(ea, b)
537537 let ec = {
538538 let ed = if (dF)
539539 then $Tuple2(dK, dH)
540540 else $Tuple2(dL, dI)
541541 let dr = ed._1
542542 let ee = ed._2
543543 let ef = toInt(fraction(dW, toBigInt((dr / 2)), toBigInt(ee)))
544544 fraction((dZ - ef), b, ef)
545545 }
546546 $Tuple4(dZ, cT, dy, ec)
547547 }
548548 else throw("Strict value is not equal to itself.")
549549 }
550550
551551
552552 func eg (eh,dP,dB,ab,ac) = {
553553 let dC = (ac == unit)
554554 let ei = [if ((dB == aX))
555555 then true
556556 else aC("invalid lp asset")]
557557 if ((ei == ei))
558558 then {
559559 let ej = if ((eh == aY))
560560 then true
561561 else if ((eh == aZ))
562562 then false
563563 else aC("invalid asset")
564564 let ek = if (ej)
565565 then toBigInt(bu(aQ(aY)))
566566 else toBigInt(bu(aQ(aZ)))
567567 let el = bu(aQ(aY))
568568 let em = bu(aQ(aZ))
569569 let en = if (ej)
570570 then el
571571 else em
572572 let eo = toBigInt(en)
573573 let dW = toBigInt(valueOrErrorMessage(assetInfo(aX), (("asset " + toBase58String(aX)) + " doesn't exist")).quantity)
574574 let ep = toBigInt(dP)
575575 let eq = max([0, toInt(((ek * (d - pow((d - ((ep * d) / dW)), 18, h, 0, 18, DOWN))) / d))])
576576 let er = dw(eq, aI)
577577 let es = er._1
578578 let dy = er._2
579579 let et = if (ej)
580580 then $Tuple4(es, 0, (el - eq), em)
581581 else $Tuple4(0, es, el, (em - eq))
582582 let eu = et._1
583583 let ev = et._2
584584 let ew = et._3
585585 let ex = et._4
586586 let dS = bw(D(ex, bb), D(ew, ba))
587587 let dT = H(dS, b)
588588 let cT = if (dC)
589589 then nil
590590 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bq(eu, ev, dP, dT, height, lastBlock.timestamp)), IntegerEntry(W(), dT), IntegerEntry(X(height, lastBlock.timestamp), dT)]
591591 let ea = bw(D(em, bb), D(el, ba))
592592 let eb = H(ea, b)
593593 let ec = {
594594 let ey = (toInt(fraction(ek, ep, dW)) * 2)
595595 fraction((es - ey), b, ey)
596596 }
597597 $Tuple4(es, cT, dy, ec)
598598 }
599599 else throw("Strict value is not equal to itself.")
600600 }
601601
602602
603603 func ez () = {
604604 let du = getString(U())
605605 if ($isInstanceOf(du, "String"))
606606 then {
607607 let eA = du
608608 fromBase58String(eA)
609609 }
610610 else if ($isInstanceOf(du, "Unit"))
611611 then unit
612612 else throw("Match error")
613613 }
614614
615615
616616 func eB () = {
617617 let du = getString(V())
618618 if ($isInstanceOf(du, "String"))
619619 then {
620620 let eA = du
621621 fromBase58String(eA)
622622 }
623623 else if ($isInstanceOf(du, "Unit"))
624624 then unit
625625 else throw("Match error")
626626 }
627627
628628
629629 func eC (dj) = {
630630 let du = ez()
631631 if ($isInstanceOf(du, "ByteVector"))
632632 then {
633633 let eD = du
634634 (dj.callerPublicKey == eD)
635635 }
636636 else if ($isInstanceOf(du, "Unit"))
637637 then (dj.caller == this)
638638 else throw("Match error")
639639 }
640640
641641
642642 func eE (dj) = {
643643 let eF = throw("Permission denied")
644644 let du = ez()
645645 if ($isInstanceOf(du, "ByteVector"))
646646 then {
647647 let eD = du
648648 if ((dj.callerPublicKey == eD))
649649 then true
650650 else eF
651651 }
652652 else if ($isInstanceOf(du, "Unit"))
653653 then if ((dj.caller == this))
654654 then true
655655 else eF
656656 else throw("Match error")
657657 }
658658
659659
660660 @Callable(dj)
661661 func calculateAmountOutForSwapREADONLY (eG,eH) = {
662662 let eI = if ((eH == false))
663663 then {
664664 let eJ = ay(this, af())
665665 let eK = ay(this, ae())
666666 $Tuple2(eJ, eK)
667667 }
668668 else {
669669 let eJ = ay(this, ae())
670670 let eK = ay(this, af())
671671 $Tuple2(eJ, eK)
672672 }
673673 let eJ = eI._1
674674 let eK = eI._2
675675 let eL = bu(eK)
676676 let eM = bu(eJ)
677677 let eN = ((eM * eG) / (eL + eG))
678- let eO = (eL * eM)
679- let eP = ((bu(eK) + eG) * (bu(eJ) - eN))
680- let eQ = if ((eP >= eO))
681- then true
682- else throw("new K is fewer error")
683- if ((eQ == eQ))
684- then $Tuple2(nil, eN)
685- else throw("Strict value is not equal to itself.")
678+ $Tuple2(nil, eN)
686679 }
687680
688681
689682
690683 @Callable(dj)
691-func calculateAmountOutForSwapAndSendTokens (eG,eH,eR,eS) = {
684+func calculateAmountOutForSwapAndSendTokens (eG,eH,eO,eP) = {
692685 let ei = [if ((value(dj.payments[0]).amount >= eG))
693686 then true
694687 else aC("Wrong amount"), if ((dj.caller == addressFromStringValue(ay(this, S()))))
695688 then true
696689 else aC("Permission denied")]
697690 if ((ei == ei))
698691 then {
699692 let dk = value(dj.payments[0])
700693 let eK = if ((dk.assetId == unit))
701694 then toBase58String(toBytes("WAVES"))
702695 else toBase58String(value(dk.assetId))
703696 let eJ = if ((eH == false))
704697 then ay(this, af())
705698 else ay(this, ae())
706699 let eL = (bu(eK) - value(dj.payments[0]).amount)
707700 let eM = bu(eJ)
708701 let eN = ((eM * eG) / (eL + eG))
709- let eO = (eL * eM)
710- let eP = (bu(eK) * (bu(eJ) - eN))
711- let eQ = if ((eP >= eO))
702+ let eQ = (eL * eM)
703+ let eR = (bu(eK) * (bu(eJ) - eN))
704+ let eS = if ((eR >= eQ))
712705 then true
713706 else throw("new K is fewer error")
714- if ((eQ == eQ))
707+ if ((eS == eS))
715708 then {
716- let eT = if ((eN >= eR))
709+ let eT = if ((eN >= eO))
717710 then true
718711 else throw("Exchange result is fewer coins than expected")
719712 if ((eT == eT))
720- then [ScriptTransfer(addressFromStringValue(eS), eN, if ((eK == "WAVES"))
713+ then [ScriptTransfer(addressFromStringValue(eP), eN, if ((eK == "WAVES"))
721714 then unit
722715 else fromBase58String(eJ))]
723716 else throw("Strict value is not equal to itself.")
724717 }
725718 else throw("Strict value is not equal to itself.")
726719 }
727720 else throw("Strict value is not equal to itself.")
728721 }
729722
730723
731724
732725 @Callable(dj)
733726 func setManager (eU) = {
734727 let eV = eE(dj)
735728 if ((eV == eV))
736729 then {
737730 let eW = fromBase58String(eU)
738731 if ((eW == eW))
739732 then [StringEntry(V(), eU)]
740733 else throw("Strict value is not equal to itself.")
741734 }
742735 else throw("Strict value is not equal to itself.")
743736 }
744737
745738
746739
747740 @Callable(dj)
748741 func confirmManager () = {
749742 let eX = eB()
750743 let eY = if (isDefined(eX))
751744 then true
752745 else throw("No pending manager")
753746 if ((eY == eY))
754747 then {
755748 let eZ = if ((dj.callerPublicKey == value(eX)))
756749 then true
757750 else throw("You are not pending manager")
758751 if ((eZ == eZ))
759752 then [StringEntry(U(), toBase58String(value(eX))), DeleteEntry(V())]
760753 else throw("Strict value is not equal to itself.")
761754 }
762755 else throw("Strict value is not equal to itself.")
763756 }
764757
765758
766759
767760 @Callable(dj)
768761 func put (co,fa) = if ((0 > co))
769762 then throw("Invalid slippageTolerance passed")
770763 else {
771764 let dp = dm(dj, co, true)
772765 let cQ = dp._2
773766 let bV = dp._7
774767 let cm = dp._9
775768 let cR = dp._10
776769 let cS = dp._11
777770 let fb = dp._12
778771 let fc = dp._13
779772 let ds = invoke(aE, "emit", [cQ], nil)
780773 if ((ds == ds))
781774 then {
782775 let dt = {
783776 let du = ds
784777 if ($isInstanceOf(du, "Address"))
785778 then {
786779 let dv = du
787780 invoke(dv, "emit", [cQ], nil)
788781 }
789782 else unit
790783 }
791784 if ((dt == dt))
792785 then {
793786 let fd = if ((cR > 0))
794787 then invoke(be, "put", nil, [AttachedPayment(fb, cR)])
795788 else nil
796789 if ((fd == fd))
797790 then {
798791 let fe = if ((cS > 0))
799792 then invoke(be, "put", nil, [AttachedPayment(fc, cS)])
800793 else nil
801794 if ((fe == fe))
802795 then {
803796 let ff = if (fa)
804797 then {
805798 let fg = invoke(bd, "stake", nil, [AttachedPayment(bV, cQ)])
806799 if ((fg == fg))
807800 then nil
808801 else throw("Strict value is not equal to itself.")
809802 }
810803 else [ScriptTransfer(dj.caller, cQ, bV)]
811804 (cm ++ ff)
812805 }
813806 else throw("Strict value is not equal to itself.")
814807 }
815808 else throw("Strict value is not equal to itself.")
816809 }
817810 else throw("Strict value is not equal to itself.")
818811 }
819812 else throw("Strict value is not equal to itself.")
820813 }
821814
822815
823816
824817 @Callable(dj)
825818 func putForFree (fh) = if ((0 > fh))
826819 then throw("Invalid value passed")
827820 else {
828821 let dp = dm(dj, fh, false)
829822 dp._9
830823 }
831824
832825
833826
834827 @Callable(dj)
835828 func putOneTkn (fi,fj) = {
836829 let fk = {
837830 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
838831 if ($isInstanceOf(aH, "Boolean"))
839832 then aH
840833 else throw(($getType(aH) + " couldn't be cast to Boolean"))
841834 }
842835 let fl = if (if (if (aJ())
843836 then true
844837 else (aW == l))
845838 then true
846839 else (aW == n))
847840 then true
848841 else fk
849842 let ei = [if (if (!(fl))
850843 then true
851844 else eC(dj))
852845 then true
853846 else aC("put operation is blocked by admin"), if ((size(dj.payments) == 1))
854847 then true
855848 else aC("exactly 1 payment are expected")]
856849 if ((ei == ei))
857850 then {
858851 let fm = dj.payments[0]
859852 let dB = fm.assetId
860853 let dA = fm.amount
861854 let ab = dj.caller
862855 let ac = dj.transactionId
863856 let fn = dz(dA, dB, ab, ac)
864857 if ((fn == fn))
865858 then {
866859 let fo = fn._4
867860 let dy = fn._3
868861 let cT = fn._2
869862 let fp = fn._1
870863 let fq = if (if ((fi > 0))
871864 then (fi > fp)
872865 else false)
873866 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
874867 else fp
875868 let ds = dq(fq)
876869 if ((ds == ds))
877870 then {
878871 let ff = if (fj)
879872 then {
880873 let fr = invoke(bd, "stake", nil, [AttachedPayment(aX, fq)])
881874 if ((fr == fr))
882875 then nil
883876 else throw("Strict value is not equal to itself.")
884877 }
885878 else [ScriptTransfer(dj.caller, fq, aX)]
886879 let fs = if ((dy > 0))
887880 then [ScriptTransfer(aF, dy, dB)]
888881 else nil
889882 $Tuple2(((cT ++ ff) ++ fs), fq)
890883 }
891884 else throw("Strict value is not equal to itself.")
892885 }
893886 else throw("Strict value is not equal to itself.")
894887 }
895888 else throw("Strict value is not equal to itself.")
896889 }
897890
898891
899892
900893 @Callable(dj)
901894 func putOneTknREADONLY (dB,dA) = {
902895 let ft = dz(dA, aO(dB), unit, unit)
903896 let fp = ft._1
904897 let cT = ft._2
905898 let dy = ft._3
906899 let fo = ft._4
907900 $Tuple2(nil, $Tuple3(fp, dy, fo))
908901 }
909902
910903
911904
912905 @Callable(dj)
913906 func getOneTkn (fu,fi) = {
914907 let fk = {
915908 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
916909 if ($isInstanceOf(aH, "Boolean"))
917910 then aH
918911 else throw(($getType(aH) + " couldn't be cast to Boolean"))
919912 }
920913 let fv = if (if (aJ())
921914 then true
922915 else (aW == n))
923916 then true
924917 else fk
925918 let ei = [if (if (!(fv))
926919 then true
927920 else eC(dj))
928921 then true
929922 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 1))
930923 then true
931924 else aC("exactly 1 payment are expected")]
932925 if ((ei == ei))
933926 then {
934927 let eh = aO(fu)
935928 let fm = dj.payments[0]
936929 let dB = fm.assetId
937930 let dP = fm.amount
938931 let ab = dj.caller
939932 let ac = dj.transactionId
940933 let fw = eg(eh, dP, dB, ab, ac)
941934 if ((fw == fw))
942935 then {
943936 let fo = fw._4
944937 let dy = fw._3
945938 let cT = fw._2
946939 let fx = fw._1
947940 let dr = if (if ((fi > 0))
948941 then (fi > fx)
949942 else false)
950943 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
951944 else fx
952945 let fy = invoke(aE, "burn", [dP], [AttachedPayment(dB, dP)])
953946 if ((fy == fy))
954947 then {
955948 let fz = [ScriptTransfer(ab, dr, eh)]
956949 let fs = if ((dy > 0))
957950 then [ScriptTransfer(aF, dy, eh)]
958951 else nil
959952 $Tuple2(((cT ++ fz) ++ fs), dr)
960953 }
961954 else throw("Strict value is not equal to itself.")
962955 }
963956 else throw("Strict value is not equal to itself.")
964957 }
965958 else throw("Strict value is not equal to itself.")
966959 }
967960
968961
969962
970963 @Callable(dj)
971964 func getOneTknREADONLY (eh,dP) = {
972965 let fA = eg(aO(eh), dP, aX, unit, unit)
973966 let fx = fA._1
974967 let cT = fA._2
975968 let dy = fA._3
976969 let fo = fA._4
977970 $Tuple2(nil, $Tuple3(fx, dy, fo))
978971 }
979972
980973
981974
982975 @Callable(dj)
983976 func unstakeAndGetOneTkn (fB,fu,fi) = {
984977 let fk = {
985978 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
986979 if ($isInstanceOf(aH, "Boolean"))
987980 then aH
988981 else throw(($getType(aH) + " couldn't be cast to Boolean"))
989982 }
990983 let fv = if (if (aJ())
991984 then true
992985 else (aW == n))
993986 then true
994987 else fk
995988 let ei = [if (if (!(fv))
996989 then true
997990 else eC(dj))
998991 then true
999992 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 0))
1000993 then true
1001994 else aC("no payments are expected")]
1002995 if ((ei == ei))
1003996 then {
1004997 let eh = aO(fu)
1005998 let ab = dj.caller
1006999 let ac = dj.transactionId
10071000 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
10081001 if ((fC == fC))
10091002 then {
10101003 let fD = eg(eh, fB, aX, ab, ac)
10111004 if ((fD == fD))
10121005 then {
10131006 let fo = fD._4
10141007 let dy = fD._3
10151008 let cT = fD._2
10161009 let fx = fD._1
10171010 let dr = if (if ((fi > 0))
10181011 then (fi > fx)
10191012 else false)
10201013 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
10211014 else fx
10221015 let fy = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
10231016 if ((fy == fy))
10241017 then {
10251018 let fz = [ScriptTransfer(dj.caller, dr, eh)]
10261019 let fs = if ((dy > 0))
10271020 then [ScriptTransfer(aF, dy, eh)]
10281021 else nil
10291022 $Tuple2(((cT ++ fz) ++ fs), dr)
10301023 }
10311024 else throw("Strict value is not equal to itself.")
10321025 }
10331026 else throw("Strict value is not equal to itself.")
10341027 }
10351028 else throw("Strict value is not equal to itself.")
10361029 }
10371030 else throw("Strict value is not equal to itself.")
10381031 }
10391032
10401033
10411034
10421035 @Callable(dj)
10431036 func get () = {
10441037 let cE = di(dj)
10451038 let fE = cE._1
10461039 let cl = cE._2
10471040 let dl = cE._3
10481041 let bT = cE._4
10491042 let cm = cE._5
10501043 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10511044 if ((fF == fF))
10521045 then cm
10531046 else throw("Strict value is not equal to itself.")
10541047 }
10551048
10561049
10571050
10581051 @Callable(dj)
10591052 func getNoLess (fG,fH) = {
10601053 let cE = di(dj)
10611054 let ck = cE._1
10621055 let cl = cE._2
10631056 let dl = cE._3
10641057 let bT = cE._4
10651058 let cm = cE._5
10661059 if ((fG > ck))
10671060 then throw(((("noLessThenAmtAsset failed: " + toString(ck)) + " < ") + toString(fG)))
10681061 else if ((fH > cl))
10691062 then throw(((("noLessThenPriceAsset failed: " + toString(cl)) + " < ") + toString(fH)))
10701063 else {
10711064 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10721065 if ((fF == fF))
10731066 then cm
10741067 else throw("Strict value is not equal to itself.")
10751068 }
10761069 }
10771070
10781071
10791072
10801073 @Callable(dj)
10811074 func unstakeAndGet (dr) = {
10821075 let fI = if ((size(dj.payments) != 0))
10831076 then throw("No payments are expected")
10841077 else true
10851078 if ((fI == fI))
10861079 then {
10871080 let bI = aL()
10881081 let bV = fromBase58String(bI[q])
10891082 let fC = invoke(bd, "unstake", [toBase58String(bV), dr], nil)
10901083 if ((fC == fC))
10911084 then {
10921085 let cE = bR(toBase58String(dj.transactionId), toBase58String(bV), dr, dj.caller)
10931086 let bY = parseIntValue(cE._9)
10941087 let cm = cE._10
10951088 let fJ = if (if (aJ())
10961089 then true
10971090 else (bY == n))
10981091 then throw(("Get operation is blocked by admin. Status = " + toString(bY)))
10991092 else true
11001093 if ((fJ == fJ))
11011094 then {
11021095 let fF = invoke(aE, "burn", [dr], [AttachedPayment(bV, dr)])
11031096 if ((fF == fF))
11041097 then cm
11051098 else throw("Strict value is not equal to itself.")
11061099 }
11071100 else throw("Strict value is not equal to itself.")
11081101 }
11091102 else throw("Strict value is not equal to itself.")
11101103 }
11111104 else throw("Strict value is not equal to itself.")
11121105 }
11131106
11141107
11151108
11161109 @Callable(dj)
11171110 func unstakeAndGetNoLess (fB,fK,fH) = {
11181111 let fv = if (aJ())
11191112 then true
11201113 else (aW == n)
11211114 let ei = [if (!(fv))
11221115 then true
11231116 else throw("get operation is blocked by admin"), if ((size(dj.payments) == 0))
11241117 then true
11251118 else throw("no payments are expected")]
11261119 if ((ei == ei))
11271120 then {
11281121 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
11291122 if ((fC == fC))
11301123 then {
11311124 let cE = bR(toBase58String(dj.transactionId), toBase58String(aX), fB, dj.caller)
11321125 let ck = cE._1
11331126 let cl = cE._2
11341127 let cm = cE._10
11351128 let fL = [if ((ck >= fK))
11361129 then true
11371130 else throw(makeString(["amount asset amount to receive is less than ", toString(fK)], "")), if ((cl >= fH))
11381131 then true
11391132 else throw(makeString(["price asset amount to receive is less than ", toString(fH)], ""))]
11401133 if ((fL == fL))
11411134 then {
11421135 let fF = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
11431136 if ((fF == fF))
11441137 then cm
11451138 else throw("Strict value is not equal to itself.")
11461139 }
11471140 else throw("Strict value is not equal to itself.")
11481141 }
11491142 else throw("Strict value is not equal to itself.")
11501143 }
11511144 else throw("Strict value is not equal to itself.")
11521145 }
11531146
11541147
11551148
11561149 @Callable(dj)
11571150 func activate (fM,fN) = if ((toString(dj.caller) != toString(aE)))
11581151 then throw("permissions denied")
11591152 else $Tuple2([StringEntry(ae(), fM), StringEntry(af(), fN)], "success")
11601153
11611154
11621155
11631156 @Callable(dj)
11641157 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aL())
11651158
11661159
11671160
11681161 @Callable(dj)
11691162 func getAccBalanceWrapperREADONLY (bv) = $Tuple2(nil, bu(bv))
11701163
11711164
11721165
11731166 @Callable(dj)
11741167 func calcPricesWrapperREADONLY (bC,bD,bH) = {
11751168 let bQ = bG(bC, bD, bH)
11761169 $Tuple2(nil, [toString(bQ[0]), toString(bQ[1]), toString(bQ[2])])
11771170 }
11781171
11791172
11801173
11811174 @Callable(dj)
11821175 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
11831176
11841177
11851178
11861179 @Callable(dj)
11871180 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
11881181
11891182
11901183
11911184 @Callable(dj)
11921185 func calcPriceBigIntWrapperREADONLY (bx,by) = $Tuple2(nil, toString(bw(parseBigIntValue(bx), parseBigIntValue(by))))
11931186
11941187
11951188
11961189 @Callable(dj)
11971190 func estimatePutOperationWrapperREADONLY (bS,co,cp,cq,cr,cs,ab,ct,cu) = $Tuple2(nil, cn(bS, co, cp, cq, cr, cs, ab, ct, cu))
11981191
11991192
12001193
12011194 @Callable(dj)
12021195 func estimateGetOperationWrapperREADONLY (bS,bT,bU,ab) = {
12031196 let cE = bR(bS, bT, bU, addressFromStringValue(ab))
12041197 $Tuple2(nil, $Tuple10(cE._1, cE._2, cE._3, cE._4, cE._5, cE._6, cE._7, toString(cE._8), cE._9, cE._10))
12051198 }
12061199
12071200
12081201
12091202 @Callable(dj)
12101203 func statsREADONLY () = {
12111204 let bI = aL()
12121205 let bV = fromBase58String(bI[q])
12131206 let cW = bI[r]
12141207 let cX = bI[s]
12151208 let cx = bI[v]
12161209 let cy = bI[w]
12171210 let bJ = parseIntValue(bI[t])
12181211 let bK = parseIntValue(bI[u])
12191212 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12201213 let cY = bu(cW)
12211214 let cZ = bu(cX)
12221215 let fP = if ((fO == 0))
12231216 then [e, e, e]
12241217 else bG(cY, cZ, fO)
12251218 let cf = 0
12261219 let fQ = H(fP[1], b)
12271220 let fR = H(fP[2], b)
12281221 let fS = value(getInteger(aE, aq(toString(this))))
12291222 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cY), toString(cZ), toString(fO), toString(cf), toString(fQ), toString(fR), toString(fS)], j))
12301223 }
12311224
12321225
12331226
12341227 @Callable(dj)
12351228 func evaluatePutByAmountAssetREADONLY (cp) = {
12361229 let bI = aL()
12371230 let bV = fromBase58String(bI[q])
12381231 let cv = bI[r]
12391232 let bW = fromBase58String(cv)
12401233 let cw = bI[s]
12411234 let bX = fromBase58String(cw)
12421235 let bJ = parseIntValue(bI[t])
12431236 let bK = parseIntValue(bI[u])
12441237 let bY = bI[p]
12451238 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12461239 let cY = bu(cv)
12471240 let cZ = bu(cw)
12481241 let bE = D(cY, bJ)
12491242 let bF = D(cZ, bK)
12501243 let ce = if ((fO == 0))
12511244 then e
12521245 else bw(bF, bE)
12531246 let cB = D(cp, bJ)
12541247 let cC = fraction(cB, ce, d)
12551248 let cr = H(cC, bK)
12561249 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12571250 let cM = dp._1
12581251 let fT = dp._3
12591252 let ca = dp._4
12601253 let cc = dp._5
12611254 let bZ = dp._6
12621255 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cM), toString(H(ce, b)), toString(ca), toString(cc), toString(bZ), bY, toString(cp), toString(cr)], j))
12631256 }
12641257
12651258
12661259
12671260 @Callable(dj)
12681261 func evaluatePutByPriceAssetREADONLY (cr) = {
12691262 let bI = aL()
12701263 let bV = fromBase58String(bI[q])
12711264 let cv = bI[r]
12721265 let bW = fromBase58String(cv)
12731266 let cw = bI[s]
12741267 let bX = fromBase58String(cw)
12751268 let bJ = parseIntValue(bI[t])
12761269 let bK = parseIntValue(bI[u])
12771270 let bY = bI[p]
12781271 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12791272 let fU = bu(cv)
12801273 let fV = bu(cw)
12811274 let fW = D(fU, bJ)
12821275 let fX = D(fV, bK)
12831276 let ce = if ((fO == 0))
12841277 then e
12851278 else bw(fX, fW)
12861279 let cC = D(cr, bK)
12871280 let cB = fraction(cC, d, ce)
12881281 let cp = H(cB, bJ)
12891282 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12901283 let cM = dp._1
12911284 let fT = dp._3
12921285 let ca = dp._4
12931286 let cc = dp._5
12941287 let bZ = dp._6
12951288 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cM), toString(H(ce, b)), toString(ca), toString(cc), toString(bZ), bY, toString(cp), toString(cr)], j))
12961289 }
12971290
12981291
12991292
13001293 @Callable(dj)
13011294 func evaluateGetREADONLY (fY,fZ) = {
13021295 let cE = bR("", fY, fZ, this)
13031296 let ck = cE._1
13041297 let cl = cE._2
13051298 let ca = cE._5
13061299 let cc = cE._6
13071300 let bZ = cE._7
13081301 let cf = cE._8
13091302 let bY = parseIntValue(cE._9)
13101303 $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(ck), toString(cl), toString(ca), toString(cc), toString(bZ), toString(cf), toString(bY)], j))
13111304 }
13121305
13131306
13141307 @Verifier(ga)
13151308 func gb () = {
13161309 let gc = {
13171310 let du = ez()
13181311 if ($isInstanceOf(du, "ByteVector"))
13191312 then {
13201313 let eD = du
13211314 eD
13221315 }
13231316 else if ($isInstanceOf(du, "Unit"))
13241317 then ga.senderPublicKey
13251318 else throw("Match error")
13261319 }
13271320 let du = ga
13281321 if ($isInstanceOf(du, "Order"))
13291322 then {
13301323 let cV = du
13311324 let gd = aK()
13321325 let av = cU(cV)
13331326 let aw = sigVerify(cV.bodyBytes, cV.proofs[0], cV.senderPublicKey)
13341327 let ax = sigVerify(cV.bodyBytes, cV.proofs[1], gd)
13351328 if (if (if (av)
13361329 then aw
13371330 else false)
13381331 then ax
13391332 else false)
13401333 then true
13411334 else au(av, aw, ax)
13421335 }
13431336 else if ($isInstanceOf(du, "SetScriptTransaction"))
13441337 then {
13451338 let eA = du
13461339 let ge = blake2b256(value(eA.script))
13471340 let gf = fromBase64String(value(getString(aE, as())))
13481341 let gg = scriptHash(this)
13491342 if (if ((gf == ge))
13501343 then (gg != ge)
13511344 else false)
13521345 then true
13531346 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13541347 }
13551348 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13561349 }
13571350

github/deemru/w8io/873ac7e 
236.33 ms