tx · jcNRJcbbHqLFSUAeLyY4xNSJ5YPNCysECGq4zzKgQkH

3N9gvX5N9mqdzHZjthYPtLjCvs5Z5y7WcKm:  -0.03700000 Waves

2023.05.02 17:31 [2560258] smart account 3N9gvX5N9mqdzHZjthYPtLjCvs5Z5y7WcKm > SELF 0.00000000 Waves

{ "type": 13, "id": "jcNRJcbbHqLFSUAeLyY4xNSJ5YPNCysECGq4zzKgQkH", "fee": 3700000, "feeAssetId": null, "timestamp": 1683037957410, "version": 2, "chainId": 84, "sender": "3N9gvX5N9mqdzHZjthYPtLjCvs5Z5y7WcKm", "senderPublicKey": "BPXEMrsvB4LzzNPWvb1syBrFgvWKNnPsegeMeaW3MY9C", "proofs": [ "2fhV71TAWpin6AayXcM6zX53pP1RpFfWE4AehwYYZ6pW7YvYgJc5MA7fkmCECm1rDMvLJyyYSRyswZTy6Qtwbrbg" ], "script": "base64:BgLiLwgCEgUKAwEEARIHCgUBBAEIARIDCgEIEgASBAoCAQQSAwoBARIECgIBBBIECgIIARIECgIIARIECgIIARIFCgMBCAESABIECgIBARIDCgEBEgUKAwEBARIECgIICBIAEgASAwoBCBIFCgMBAQESBAoCAQESBAoCCAESBAoCCAgSCwoJCAEBAgECCAQEEgYKBAgIAQgSABIDCgEBEgMKAQESBAoCCAEiCmxQZGVjaW1hbHMiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgt3YXZlc1N0cmluZyIDU0VQIgpQb29sQWN0aXZlIg9Qb29sUHV0RGlzYWJsZWQiE1Bvb2xNYXRjaGVyRGlzYWJsZWQiDFBvb2xTaHV0ZG93biIOaWR4UG9vbEFkZHJlc3MiDWlkeFBvb2xTdGF0dXMiEGlkeFBvb2xMUEFzc2V0SWQiDWlkeEFtdEFzc2V0SWQiD2lkeFByaWNlQXNzZXRJZCIOaWR4QW10QXNzZXREY20iEGlkeFByaWNlQXNzZXREY20iDmlkeElBbXRBc3NldElkIhBpZHhJUHJpY2VBc3NldElkIg1pZHhMUEFzc2V0RGNtIhJpZHhQb29sQW10QXNzZXRBbXQiFGlkeFBvb2xQcmljZUFzc2V0QW10IhFpZHhQb29sTFBBc3NldEFtdCIZaWR4RmFjdG9yeVN0YWtpbmdDb250cmFjdCIaaWR4RmFjdG9yeVNsaXBwYWdlQ29udHJhY3QiBXRvWDE4IgdvcmlnVmFsIg1vcmlnU2NhbGVNdWx0Igt0b1gxOEJpZ0ludCIHZnJvbVgxOCIDdmFsIg9yZXN1bHRTY2FsZU11bHQiDGZyb21YMThSb3VuZCIFcm91bmQiB3RvU2NhbGUiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCIMc3dhcENvbnRyYWN0IgJmYyIDbXBrIgRwbXBrIgJwbCICcGgiAWgiCXRpbWVzdGFtcCIDcGF1Igt1c2VyQWRkcmVzcyIEdHhJZCIDZ2F1IgJhYSICcGEiBmtleUZlZSIKZmVlRGVmYXVsdCIDZmVlIgZrZXlLTHAiFWtleUtMcFJlZnJlc2hlZEhlaWdodCISa2V5S0xwUmVmcmVzaERlbGF5IhZrTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9rTHBSZWZyZXNoRGVsYXkiEGtleUZhY3RvcnlDb25maWciDWtleU1hdGNoZXJQdWIiKWtleU1hcHBpbmdQb29sQ29udHJhY3RBZGRyZXNzVG9Qb29sQXNzZXRzIhNwb29sQ29udHJhY3RBZGRyZXNzIg1rZXlQb29sQ29uZmlnIglpQW10QXNzZXQiC2lQcmljZUFzc2V0Ih9rZXlNYXBwaW5nc0Jhc2VBc3NldDJpbnRlcm5hbElkIgxiYXNlQXNzZXRTdHIiE2tleUFsbFBvb2xzU2h1dGRvd24iDWtleVBvb2xXZWlnaHQiD2NvbnRyYWN0QWRkcmVzcyIWa2V5QWxsb3dlZExwU2NyaXB0SGFzaCIWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcyIPdGhyb3dPcmRlckVycm9yIgpvcmRlclZhbGlkIg5vcmRlclZhbGlkSW5mbyILc2VuZGVyVmFsaWQiDG1hdGNoZXJWYWxpZCIPZ2V0U3RyaW5nT3JGYWlsIgdhZGRyZXNzIgNrZXkiDGdldEludE9yRmFpbCIIdGhyb3dFcnIiA21zZyIGZm10RXJyIg9mYWN0b3J5Q29udHJhY3QiE2ZlZUNvbGxlY3RvckFkZHJlc3MiBWluRmVlIgFAIgZvdXRGZWUiEGlzR2xvYmFsU2h1dGRvd24iE2dldE1hdGNoZXJQdWJPckZhaWwiDWdldFBvb2xDb25maWciCGFtdEFzc2V0IgpwcmljZUFzc2V0IgxwYXJzZUFzc2V0SWQiBWlucHV0Ig9hc3NldElkVG9TdHJpbmciD3BhcnNlUG9vbENvbmZpZyIKcG9vbENvbmZpZyIQcG9vbENvbmZpZ1BhcnNlZCILJHQwODQ2OTg2MzUiDmNmZ1Bvb2xBZGRyZXNzIg1jZmdQb29sU3RhdHVzIgxjZmdMcEFzc2V0SWQiEGNmZ0Ftb3VudEFzc2V0SWQiD2NmZ1ByaWNlQXNzZXRJZCIWY2ZnQW1vdW50QXNzZXREZWNpbWFscyIVY2ZnUHJpY2VBc3NldERlY2ltYWxzIhBnZXRGYWN0b3J5Q29uZmlnIg9zdGFraW5nQ29udHJhY3QiEHNsaXBwYWdlQ29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIdc2xpcHBhZ2VUb2xlcmFuY2VQYXNzZWRCeVVzZXIiFXNsaXBwYWdlVG9sZXJhbmNlUmVhbCIIdHhIZWlnaHQiC3R4VGltZXN0YW1wIhJzbGlwYWdlQW10QXNzZXRBbXQiFHNsaXBhZ2VQcmljZUFzc2V0QW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiD2NhbGNQcmljZUJpZ0ludCIIcHJBbXRYMTgiCGFtQW10WDE4IhRjYWxjUHJpY2VCaWdJbnRSb3VuZCIQcHJpdmF0ZUNhbGNQcmljZSIKYW1Bc3NldERjbSIKcHJBc3NldERjbSIFYW1BbXQiBXByQW10Ig5hbXRBc3NldEFtdFgxOCIQcHJpY2VBc3NldEFtdFgxOCIKY2FsY1ByaWNlcyIFbHBBbXQiA2NmZyILYW10QXNzZXREY20iDXByaWNlQXNzZXREY20iCHByaWNlWDE4IghscEFtdFgxOCITbHBQcmljZUluQW1Bc3NldFgxOCITbHBQcmljZUluUHJBc3NldFgxOCIPY2FsY3VsYXRlUHJpY2VzIgZwcmljZXMiFGVzdGltYXRlR2V0T3BlcmF0aW9uIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10IglscEFzc2V0SWQiCWFtQXNzZXRJZCIJcHJBc3NldElkIgpwb29sU3RhdHVzIgpscEVtaXNzaW9uIglhbUJhbGFuY2UiDGFtQmFsYW5jZVgxOCIJcHJCYWxhbmNlIgxwckJhbGFuY2VYMTgiC2N1clByaWNlWDE4IghjdXJQcmljZSILcG10THBBbXRYMTgiDWxwRW1pc3Npb25YMTgiC291dEFtQW10WDE4IgtvdXRQckFtdFgxOCIIb3V0QW1BbXQiCG91dFByQW10IgVzdGF0ZSIUZXN0aW1hdGVQdXRPcGVyYXRpb24iEXNsaXBwYWdlVG9sZXJhbmNlIgxpbkFtQXNzZXRBbXQiC2luQW1Bc3NldElkIgxpblByQXNzZXRBbXQiC2luUHJBc3NldElkIgppc0V2YWx1YXRlIgZlbWl0THAiDGFtQXNzZXRJZFN0ciIMcHJBc3NldElkU3RyIgtpQW10QXNzZXRJZCINaVByaWNlQXNzZXRJZCIOaW5BbUFzc2V0SWRTdHIiDmluUHJBc3NldElkU3RyIg9pbkFtQXNzZXRBbXRYMTgiD2luUHJBc3NldEFtdFgxOCIMdXNlclByaWNlWDE4IgNyZXMiC3NsaXBwYWdlWDE4IhRzbGlwcGFnZVRvbGVyYW5jZVgxOCIKcHJWaWFBbVgxOCIKYW1WaWFQclgxOCIMZXhwZWN0ZWRBbXRzIhFleHBBbXRBc3NldEFtdFgxOCITZXhwUHJpY2VBc3NldEFtdFgxOCIJY2FsY0xwQW10Ig5jYWxjQW1Bc3NldFBtdCIOY2FsY1ByQXNzZXRQbXQiDHNsaXBwYWdlQ2FsYyIJZW1pdExwQW10IgZhbURpZmYiBnByRGlmZiILY29tbW9uU3RhdGUiB2NhbGNLTHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIQYW1vdW50QmFsYW5jZVgxOCIPcHJpY2VCYWxhbmNlWDE4Igp1cGRhdGVkS0xwIg5jYWxjQ3VycmVudEtMcCIQYW1vdW50QXNzZXREZWx0YSIPcHJpY2VBc3NldERlbHRhIhRscEFzc2V0RW1pc3Npb25EZWx0YSISYW1vdW50QXNzZXRCYWxhbmNlIhFwcmljZUFzc2V0QmFsYW5jZSIPbHBBc3NldEVtaXNzaW9uIgpjdXJyZW50S0xwIhJyZWZyZXNoS0xwSW50ZXJuYWwiF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhIhZwcmljZUFzc2V0QmFsYW5jZURlbHRhIgdhY3Rpb25zIhJ2YWxpZGF0ZVVwZGF0ZWRLTHAiBm9sZEtMcCIbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkIgVvcmRlciIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIxNTQxMjE3NTMiA2tMcCINJHQwMjIxOTMyMjI5MyINdW51c2VkQWN0aW9ucyIGa0xwTmV3Igxpc09yZGVyVmFsaWQiBGluZm8iCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgZhbW91bnQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiByRtYXRjaDAiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIJZmVlQW1vdW50Ig9jYWxjUHV0T25lVG9rZW4iEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIgZpc0V2YWwiEGFtb3VudEJhbGFuY2VSYXciD3ByaWNlQmFsYW5jZVJhdyIUcGF5bWVudEluQW1vdW50QXNzZXQiDSR0MDI1NDA2MjU2OTkiEGFtb3VudEJhbGFuY2VPbGQiD3ByaWNlQmFsYW5jZU9sZCINJHQwMjU3MDMyNTg1MiIUYW1vdW50QXNzZXRBbW91bnRSYXciE3ByaWNlQXNzZXRBbW91bnRSYXciDSR0MDI1OTg0MjYwNDgiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI3NzI5Mjc4OTYiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiGG91dEluQW1vdW50QXNzZXREZWNpbWFscyIMYW1CYWxhbmNlT2xkIgxwckJhbGFuY2VPbGQiCm91dEJhbGFuY2UiEG91dEJhbGFuY2VCaWdJbnQiDnJlZGVlbWVkQmlnSW50IglhbW91bnRSYXciDSR0MDI5OTc0MzAwMzAiC3RvdGFsQW1vdW50Ig0kdDAzMDAzNDMwMjYwIgtvdXRBbUFtb3VudCILb3V0UHJBbW91bnQiDGFtQmFsYW5jZU5ldyIMcHJCYWxhbmNlTmV3IhhhbW91bnRCb3RoSW5QYXltZW50QXNzZXQiFm1hbmFnZXJQdWJsaWNLZXlPclVuaXQiAXMiHXBlbmRpbmdNYW5hZ2VyUHVibGljS2V5T3JVbml0Iglpc01hbmFnZXIiAnBrIgttdXN0TWFuYWdlciICcGQiDWNsZWFuQW1vdW50SW4iCWlzUmV2ZXJzZSINZmVlUG9vbEFtb3VudCINJHQwMzE5NzczMjI4MiIIYXNzZXRPdXQiB2Fzc2V0SW4iEnBvb2xBc3NldEluQmFsYW5jZSITcG9vbEFzc2V0T3V0QmFsYW5jZSIJYW1vdW50T3V0IgRvbGRLIgRuZXdLIgZjaGVja0siDGFtb3VudE91dE1pbiIJYWRkcmVzc1RvIgtzd2FwQ29udGFjdCIIY2hlY2tNaW4iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52Ig0kdDAzNzE2NjM3NjI4IhFyZWZyZXNoS0xwQWN0aW9ucyIRaXNVcGRhdGVkS0xwVmFsaWQiC21heFNsaXBwYWdlIg0kdDAzODE5MDM4MjU1IgxtaW5PdXRBbW91bnQiCWF1dG9TdGFrZSIgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQiDWlzUHV0RGlzYWJsZWQiB3BheW1lbnQiDSR0MDM5NDQzMzk1OTUiBWJvbnVzIhNlbWl0QW1vdW50RXN0aW1hdGVkIgplbWl0QW1vdW50IghzdGFrZUludiIHc2VuZEZlZSINJHQwNDAxODE0MDM3OCINJHQwNDAzODE0MDQ4OSINJHQwNDA3OTU0MDk1MiINb3V0QXNzZXRJZFN0ciINaXNHZXREaXNhYmxlZCINJHQwNDE4Mzc0MTk5MCIPYW1vdW50RXN0aW1hdGVkIgdidXJuSW52Ig1hc3NldFRyYW5zZmVyIg0kdDA0MjQ5MDQyNzM3IhBmZWVBbW91bnRGb3JDYWxjIg0kdDA0Mjc0MDQyODQ4Ig0kdDA0MzEwNTQzMjYxIg11bnN0YWtlQW1vdW50Igp1bnN0YWtlSW52Ig0kdDA0NDE2NjQ0MzE3Ig0kdDA0NDgxMjQ1MDU5Ig0kdDA0NTA2MjQ1MTcwIglvdXRBbXRBbXQiFGJ1cm5MUEFzc2V0T25GYWN0b3J5Ig0kdDA0NjExNjQ2MTk4IhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0Ig0kdDA0NzE0NzQ3MjI4Ig1jaGVja1BheW1lbnRzIg9jaGVja1Bvb2xTdGF0dXMiDSR0MDQ4MzU0NDg0MzUiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIMY2hlY2tBbW91bnRzIg0kdDA0OTczMDQ5ODExIgthbXRBc3NldFN0ciINcHJpY2VBc3NldFN0ciIYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0Ih1jaGVja0xhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCINJHQwNTA5OTg1MTA2MiIQa0xwVXBkYXRlQWN0aW9ucyIKYW10QXNzZXRJZCIMcHJpY2VBc3NldElkIg1wb29sTFBCYWxhbmNlIhJhY2NBbXRBc3NldEJhbGFuY2UiFGFjY1ByaWNlQXNzZXRCYWxhbmNlIgpwcmljZXNMaXN0Ig9scEFtdEFzc2V0U2hhcmUiEWxwUHJpY2VBc3NldFNoYXJlIgpwb29sV2VpZ2h0IgxjdXJQcmljZUNhbGMiDGFtQmFsYW5jZVJhdyIMcHJCYWxhbmNlUmF3Ig9hbUJhbGFuY2VSYXdYMTgiD3ByQmFsYW5jZVJhd1gxOCIQcGF5bWVudExwQXNzZXRJZCIMcGF5bWVudExwQW10IgJ0eCIGdmVyaWZ5Ig90YXJnZXRQdWJsaWNLZXkiCm1hdGNoZXJQdWIiDSR0MDU5NzI0NTk3OTMiB25ld0hhc2giC2FsbG93ZWRIYXNoIgtjdXJyZW50SGFzaHMAAWEACAABYgCAwtcvAAFjCQC2AgEAgMLXLwABZAkAtgIBAICAkLu61q3wDQABZQkAtgIBAAAAAWYJALYCAQAAAAFnCQC2AgEAAQABaAkAtgIBAAIAAWkCBVdBVkVTAAFqAgJfXwABawABAAFsAAIAAW0AAwABbgAEAAFvAAEAAXAAAgABcQADAAFyAAQAAXMABQABdAAGAAF1AAcAAXYACAABdwAJAAF4AAoAAXkAAQABegAC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ZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFSAgNJbnQFAmFSCQACAQkArAICCQADAQUCYVICGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAACYVMKAAJhUgkA/AcEBQJhTwIRZ2V0T3V0RmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhUgIDSW50BQJhUgkAAgEJAKwCAgkAAwEFAmFSAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBAmFUAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJhTwkBAmF4AAcBAmFVAAkA2QQBCQECYUgCBQJhTwkBAmFwAAECYVYABAJhVwkBAmFIAgUEdGhpcwkBAmFlAAQCYVgJAQJhSAIFBHRoaXMJAQJhZgAEAmF1CQECYUsCBQJhTwkBAmF2AQUCYVgEAmF0CQECYUsCBQJhTwkBAmF2AQUCYVcJALUJAgkBAmFIAgUCYU8JAQJhcwIJAKQDAQUCYXQJAKQDAQUCYXUFAWoBAmFZAQJhWgMJAAACBQJhWgUBaQUEdW5pdAkA2QQBBQJhWgECYmEBAmFaAwkAAAIFAmFaBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFaAQJiYgECYmMJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJiYwUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJjBQFwCQDZBAEJAJEDAgUCYmMFAXEJAQJhWQEJAJEDAgUCYmMFAXIJAQJhWQEJAJEDAgUCYmMFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiYwUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJjBQF1AAJiZAkBAmJiAQkBAmFWAAACYmUFAmJkAAJiZggFAmJlAl8xAAJiZwgFAmJlAl8yAAJiaAgFAmJlAl8zAAJiaQgFAmJlAl80AAJiaggFAmJlAl81AAJiawgFAmJlAl82AAJibAgFAmJlAl83AQJibQAJALUJAgkBAmFIAgUCYU8JAQJhbwAFAWoAAmJuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYm0ABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJibwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJtAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYnAKAmJxAmJyAmJzAmJ0AmJ1AmJ2AmJ3AmJ4AmJ5AmJ6CQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJicQkAzAgCCQCkAwEFAmJyCQDMCAIJAKQDAQUCYnMJAMwIAgkApAMBBQJidAkAzAgCCQCkAwEFAmJ1CQDMCAIJAKQDAQUCYnYJAMwIAgkApAMBBQJidwkAzAgCCQCkAwEFAmJ4CQDMCAIJAKQDAQUCYnkJAMwIAgkApAMBBQJiegUDbmlsBQFqAQJiQQYCYkICYkMCYkQCYnQCYncCYngJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiQgkAzAgCCQCkAwEFAmJDCQDMCAIJAKQDAQUCYkQJAMwIAgkApAMBBQJidAkAzAgCCQCkAwEFAmJ3CQDMCAIJAKQDAQUCYngFA25pbAUBagECYkUBAmJGAwkAAAIFAmJGAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJiRgECYkcCAmJIAmJJCQC8AgMFAmJIBQFkBQJiSQECYkoDAmJIAmJJAUwJAL0CBAUCYkgFAWQFAmJJBQFMAQJiSwQCYkwCYk0CYk4CYk8EAmJQCQEBRAIFAmJOBQJiTAQCYlEJAQFEAgUCYk8FAmJNCQECYkcCBQJiUQUCYlABAmJSAwJiTgJiTwJiUwQCYlQJAQJhVgAEAmJVCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlQFAXQEAmJWCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYlQFAXUEAmJXCQECYksEBQJiVQUCYlYFAmJOBQJiTwQCYkkJAQFEAgUCYk4FAmJVBAJiSAkBAUQCBQJiTwUCYlYEAmJYCQEBRAIFAmJTBQFiBAJiWQkBAmJHAgUCYkkFAmJYBAJiWgkBAmJHAgUCYkgFAmJYCQDMCAIFAmJXCQDMCAIFAmJZCQDMCAIFAmJaBQNuaWwBAmNhAwJiTgJiTwJiUwQCY2IJAQJiUgMFAmJOBQJiTwUCYlMJAMwIAgkBAUgCCQCRAwIFAmNiAAAFAWIJAMwIAgkBAUgCCQCRAwIFAmNiAAEFAWIJAMwIAgkBAUgCCQCRAwIFAmNiAAIFAWIFA25pbAECY2MEAmNkAmNlAmNmAmFiBAJiVAkBAmFWAAQCY2cJAJEDAgUCYlQFAXEEAmNoCQCRAwIFAmJUBQFyBAJjaQkAkQMCBQJiVAUBcwQCYkwJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVAUBdAQCYk0JAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVAUBdQQCY2oJAJEDAgUCYlQFAXAEAmNrCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY2cJAKwCAgkArAICAgZBc3NldCAFAmNnAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQMJAQIhPQIFAmNnBQJjZQkAAgECFUludmFsaWQgYXNzZXQgcGFzc2VkLgQCY2wJAQJiRQEFAmNoBAJjbQkBAUQCBQJjbAUCYkwEAmNuCQECYkUBBQJjaQQCY28JAQFEAgUCY24FAmJNBAJjcAkBAmJHAgUCY28FAmNtBAJjcQkBAUgCBQJjcAUBYgQCY3IJAQFEAgUCY2YFAWIEAmNzCQEBRAIFAmNrBQFiBAJjdAkAvAIDBQJjbQUCY3IFAmNzBAJjdQkAvAIDBQJjbwUCY3IFAmNzBAJjdgkBAUsDBQJjdAUCYkwFBUZMT09SBAJjdwkBAUsDBQJjdQUCYk0FBUZMT09SBAJjeAMJAAACBQJjZAIABQNuaWwJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmN2AwkAAAIFAmNoAgVXQVZFUwUEdW5pdAkA2QQBBQJjaAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCY3cDCQAAAgUCY2kCBVdBVkVTBQR1bml0CQDZBAEFAmNpCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZAIJAKUIAQUCYWIFAmNkCQECYkEGBQJjdgUCY3cFAmNmBQJjcQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJjcQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJjcQUDbmlsCQCcCgoFAmN2BQJjdwUCY2gFAmNpBQJjbAUCY24FAmNrBQJjcAUCY2oFAmN4AQJjeQkCY2QCY3oCY0ECY0ICY0MCY0QCYWICY0UCY0YEAmJUCQECYVYABAJjZwkA2QQBCQCRAwIFAmJUBQFxBAJjRwkAkQMCBQJiVAUBcgQCY0gJAJEDAgUCYlQFAXMEAmNJCQCRAwIFAmJUBQF2BAJjSgkAkQMCBQJiVAUBdwQCYlUJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVAUBdAQCYlYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiVAUBdQQCY2oJAJEDAgUCYlQFAXAEAmNrCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmNnCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmNnAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY0sJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY0IJANkEAQIFV0FWRVMEAmNMCQDYBAEJAQt2YWx1ZU9yRWxzZQIFAmNECQDZBAECBVdBVkVTAwMJAQIhPQIFAmNHBQJjSwYJAQIhPQIFAmNIBQJjTAkAAgECIkludmFsaWQgYW10IG9yIHByaWNlIGFzc2V0IHBhc3NlZC4EAmNsAwUCY0UJAQJiRQEFAmNHCQBlAgkBAmJFAQUCY0cFAmNBBAJjbgMFAmNFCQECYkUBBQJjSAkAZQIJAQJiRQEFAmNIBQJjQwQCY00JAQFEAgUCY0EFAmJVBAJjTgkBAUQCBQJjQwUCYlYEAmNPCQECYkcCBQJjTgUCY00EAmNtCQEBRAIFAmNsBQJiVQQCY28JAQFEAgUCY24FAmJWBAJjUAMJAAACBQJjawAABAJjcAUBZQQCY1EFAWUEAmJYCQB2BgkAuQICBQJjTQUCY04AAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFIAgUCYlgFAWIJAQFIAgUCY00FAmJVCQEBSAIFAmNOBQJiVgkBAmJHAgkAtwICBQJjbwUCY04JALcCAgUCY20FAmNNBQJjUQQCY3AJAQJiRwIFAmNvBQJjbQQCY1EJALwCAwkBAVIBCQC4AgIFAmNwBQJjTwUBZAUCY3AEAmNSCQEBRAIFAmN6BQFiAwMJAQIhPQIFAmNwBQFlCQC/AgIFAmNRBQJjUgcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCY1ECHiBleGNlZWRlZCB0aGUgcGFzc2VkIGxpbWl0IG9mIAkApgMBBQJjUgQCY3MJAQFEAgUCY2sFAWIEAmNTCQC9AgQFAmNNCQECYkoDBQJjbwUCY20FB0NFSUxJTkcFAWQFB0NFSUxJTkcEAmNUCQC9AgQFAmNOBQFkCQECYkoDBQJjbwUCY20FBUZMT09SBQdDRUlMSU5HBAJjVQMJAL8CAgUCY1MFAmNOCQCUCgIFAmNUBQJjTgkAlAoCBQJjTQUCY1MEAmNWCAUCY1UCXzEEAmNXCAUCY1UCXzIEAmJYCQC9AgQFAmNzBQJjVwUCY28FBUZMT09SCQCXCgUJAQFLAwUCYlgFAWIFBUZMT09SCQEBSwMFAmNWBQJiVQUHQ0VJTElORwkBAUsDBQJjVwUCYlYFB0NFSUxJTkcFAmNwBQJjUQQCY1gIBQJjUAJfMQQCY1kIBQJjUAJfMgQCY1oIBQJjUAJfMwQCY3EJAQFIAggFAmNQAl80BQFiBAJkYQkBAUgCCAUCY1ACXzUFAWIDCQBnAgAABQJjWAkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCZGIDCQEBIQEFAmNGAAAFAmNYBAJkYwkAZQIFAmNBBQJjWQQCZGQJAGUCBQJjQwUCY1oEAmRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNxCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNxCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAmFiBQJjZAkBAmJwCgUCY1kFAmNaBQJkYgUCY3EFAmN6BQJkYQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZGMFAmRkBQNuaWwJAJ8KDQUCY1gFAmRiBQJjcQUCY2wFAmNuBQJjawUCY2cFAmNqBQJkZQUCZGMFAmRkBQJjQgUCY0QBAmRmAwJkZwJkaAJjawQCZGkJAQFHAgUCZGcJALYCAQUCYmsEAmRqCQEBRwIFAmRoCQC2AgEFAmJsBAJkawkAvAIDCQB2BgkAuQICBQJkaQUCZGoAAAkAtgIBAAUAAQASBQRET1dOBQFnBQJjawMJAAACBQJjawUBZgUBZgUCZGsBAmRsAwJkbQJkbgJkbwQCZHAJALgCAgkAtgIBCQECYkUBCQECYmEBBQJiaQUCZG0EAmRxCQC4AgIJALYCAQkBAmJFAQkBAmJhAQUCYmoFAmRuBAJkcgkAuAICCQC2AgEICQEFdmFsdWUBCQDsBwEFAmJoCHF1YW50aXR5BQJkbwQCZHMJAQJkZgMFAmRwBQJkcQUCZHIFAmRzAQJkdAMCZHUCZHYCZG8EAmRwCQBkAgkBAmJFAQkBAmJhAQUCYmkFAmR1BAJkcQkAZAIJAQJiRQEJAQJiYQEFAmJqBQJkdgQCZHIJAGQCCAkBBXZhbHVlAQkA7AcBBQJiaAhxdWFudGl0eQUCZG8EAmRrCQECZGYDCQC2AgEFAmRwCQC2AgEFAmRxCQC2AgEFAmRyBAJkdwkAzAgCCQEMSW50ZWdlckVudHJ5AgUCYWsFBmhlaWdodAkAzAgCCQELU3RyaW5nRW50cnkCBQJhagkApgMBBQJkawUDbmlsCQCUCgIFAmR3BQJkawECZHgCAmR5AmRrAwkAwAICBQJkawUCZHkGCQECYUwBCQC5CQIJAMwIAgIidXBkYXRlZCBLTHAgbG93ZXIgdGhhbiBjdXJyZW50IEtMcAkAzAgCCQCmAwEFAmR5CQDMCAIJAKYDAQUCZGsFA25pbAIBIAECZHoBAmRBBAJkcAkBAmJFAQkBAmJhAQUCYmkEAmRxCQECYkUBCQECYmEBBQJiagQCZEIIBQJkQQZhbW91bnQEAmRDCQBuBAgFAmRBBmFtb3VudAgFAmRBBXByaWNlBQFiBQVGTE9PUgQCZEQDCQAAAggFAmRBCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmRCCQEBLQEFAmRDCQCUCgIJAQEtAQUCZEIFAmRDBAJkdQgFAmREAl8xBAJkdggFAmREAl8yAwMDCQECYVQABgkAAAIFAmJnBQFtBgkAAAIFAmJnBQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAMDCQECIT0CCAgFAmRBCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYmkGCQECIT0CCAgFAmRBCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiagkAAgECE1dyb25nIG9yZGVyIGFzc2V0cy4EAmRFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhagIBMAkBAmFOAQILaW52YWxpZCBrTHAEAmRGCQECZHQDBQJkdQUCZHYAAAQCZEcIBQJkRgJfMQQCZEgIBQJkRgJfMgQCZEkJAMACAgUCZEgFAmRFBAJkSgkAuQkCCQDMCAICBGtMcD0JAMwIAgkApgMBBQJkRQkAzAgCAggga0xwTmV3PQkAzAgCCQCmAwEFAmRICQDMCAICFCBhbW91bnRBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQUCZHAJAMwIAgITIHByaWNlQXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFAmRxCQDMCAICGSBhbW91bnRBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJkdQkAzAgCAhggcHJpY2VBc3NldEJhbGFuY2VEZWx0YT0JAMwIAgkApAMBBQJkdgkAzAgCAgggaGVpZ2h0PQkAzAgCCQCkAwEFBmhlaWdodAUDbmlsAgAJAJQKAgUCZEkFAmRKAQJkSwECZEwDCQECIT0CCQCQAwEIBQJkTAhwYXltZW50cwABCQACAQIdZXhhY3RseSAxIHBheW1lbnQgaXMgZXhwZWN0ZWQEAmRNCQEFdmFsdWUBCQCRAwIIBQJkTAhwYXltZW50cwAABAJjZQkBBXZhbHVlAQgFAmRNB2Fzc2V0SWQEAmROCAUCZE0GYW1vdW50BAJjUAkBAmNjBAkA2AQBCAUCZEwNdHJhbnNhY3Rpb25JZAkA2AQBBQJjZQUCZE4IBQJkTAZjYWxsZXIEAmN2CAUCY1ACXzEEAmN3CAUCY1ACXzIEAmNqCQENcGFyc2VJbnRWYWx1ZQEIBQJjUAJfOQQCY3gIBQJjUANfMTADAwkBAmFUAAYJAAACBQJjagUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2oJAJcKBQUCY3YFAmN3BQJkTgUCY2UFAmN4AQJkTwMCZEwCY3oCY0YDCQECIT0CCQCQAwEIBQJkTAhwYXltZW50cwACCQACAQIfZXhhY3RseSAyIHBheW1lbnRzIGFyZSBleHBlY3RlZAQCZFAJAQV2YWx1ZQEJAJEDAggFAmRMCHBheW1lbnRzAAAEAmRRCQEFdmFsdWUBCQCRAwIIBQJkTAhwYXltZW50cwABBAJkUgkBAmN5CQkA2AQBCAUCZEwNdHJhbnNhY3Rpb25JZAUCY3oIBQJkUAZhbW91bnQIBQJkUAdhc3NldElkCAUCZFEGYW1vdW50CAUCZFEHYXNzZXRJZAkApQgBCAUCZEwGY2FsbGVyBwUCY0YEAmNqCQENcGFyc2VJbnRWYWx1ZQEIBQJkUgJfOAMDAwkBAmFUAAYJAAACBQJjagUBbAYJAAACBQJjagUBbgkAAgEJAKwCAgIsUHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2oFAmRSAQJkUwECZFQEAmRVCQD8BwQFAmFPAgRlbWl0CQDMCAIFAmRUBQNuaWwFA25pbAMJAAACBQJkVQUCZFUEAmRWBAJkVwUCZFUDCQABAgUCZFcCB0FkZHJlc3MEAmRYBQJkVwkA/AcEBQJkWAIEZW1pdAkAzAgCBQJkVAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZFYFAmRWBQJkVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZFkCAmRUAmFpBAJkWgMJAAACBQJhaQAAAAAJAGsDBQJkVAUCYWkFAWIJAJQKAgkAZQIFAmRUBQJkWgUCZFoBAmVhBAJlYgJlYwJhYgJhYwQCZWQJAAACBQJhYwUEdW5pdAQCZWUJAQJiRQEJAQJiYQEFAmJpBAJlZgkBAmJFAQkBAmJhAQUCYmoEAmVnAwkAAAIFAmVjBQJiaQYDCQAAAgUCZWMFAmJqBwkBAmFMAQINaW52YWxpZCBhc3NldAQCZWgDBQJlZAkAlAoCBQJlZQUCZWYDBQJlZwkAlAoCCQBlAgUCZWUFAmViBQJlZgkAlAoCBQJlZQkAZQIFAmVmBQJlYgQCZWkIBQJlaAJfMQQCZWoIBQJlaAJfMgQCZWsDBQJlZwkAlAoCBQJlYgAACQCUCgIAAAUCZWIEAmVsCAUCZWsCXzEEAmVtCAUCZWsCXzIEAmRCCAkBAmRZAgUCZWwFAmFRAl8xBAJkQwgJAQJkWQIFAmVtBQJhUQJfMQQCZW4JAQJkWQIFAmViBQJhUQQCZW8IBQJlbgJfMQQCZFoIBQJlbgJfMgQCZXAJAGQCBQJlaQUCZEIEAmVxCQBkAgUCZWoFAmRDBAJlcgkBAmJHAgkBAUQCBQJlcQUCYmwJAQFEAgUCZXAFAmJrBAJlcwkBAUgCBQJlcgUBYgQCZXQDBQJlZwUCZWkFAmVqBAJldQkAtgIBBQJldAQCZXYJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiaAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiaAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmV3AwkAvwICBQJldgUBZgYJAQJhTAECImluaXRpYWwgZGVwb3NpdCByZXF1aXJlcyBhbGwgY29pbnMDCQAAAgUCZXcFAmV3BAJleAkAtgIBBQJlbwQCZXkJAJYDAQkAzAgCAAAJAMwIAgkAoAMBCQC6AgIJALkCAgUCZXYJALgCAgkBCnNxcnRCaWdJbnQECQC3AgIFAWQJALoCAgkAuQICBQJleAUBZAUCZXUAEgASBQRET1dOBQFkBQFkBQNuaWwEAmRlAwUCZWQFA25pbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVcABQJlcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJlcwkAzAgCCQELU3RyaW5nRW50cnkCCQECYWECCQClCAEJAQV2YWx1ZQEFAmFiCQDYBAEJAQV2YWx1ZQEFAmFjCQECYnAKBQJlbAUCZW0FAmV5BQJlcwAAAAAFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAAAAAABQNuaWwEAmV6CQECYkcCCQEBRAIFAmVqBQJibAkBAUQCBQJlaQUCYmsEAmVBCQEBSAIFAmV6BQFiBAJlQgQCZUMDBQJlZwkAlAoCBQJlbAUCZWkJAJQKAgUCZW0FAmVqBAJkVAgFAmVDAl8xBAJlRAgFAmVDAl8yBAJlRQkAoAMBCQC8AgMFAmV2CQC2AgEJAGkCBQJkVAACCQC2AgEFAmVECQBrAwkAZQIFAmV5BQJlRQUBYgUCZUUJAJcKBQUCZXkFAmRlBQJkWgUCZUIFAmVnCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlRgUCZUcCZW8CZWMCYWICYWMEAmVkCQAAAgUCYWMFBHVuaXQEAmJUCQECYVYABAJiVQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJUBQF0BAJiVgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJUBQF1BAJlSAkAzAgCAwkAAAIFAmVjBQJiaAYJAQJhTAECEGludmFsaWQgbHAgYXNzZXQFA25pbAMJAAACBQJlSAUCZUgEAmVJAwkAAAIFAmVHBQJiaQYDCQAAAgUCZUcFAmJqBwkBAmFMAQINaW52YWxpZCBhc3NldAQCZUoDBQJlSQkAtgIBCQECYkUBCQECYmEBBQJiaQkAtgIBCQECYkUBCQECYmEBBQJiagQCZUsDBQJlSQUCYlUFAmJWBAJlTAkBAmJFAQkBAmJhAQUCYmkEAmVNCQECYkUBCQECYmEBBQJiagQCZU4DBQJlSQUCZUwFAmVNBAJlTwkAtgIBBQJlTgQCZXYJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiaAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJiaAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmVQCQC2AgEFAmVvBAJlUQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlSgkAuAICBQFkCQB2BgkAuAICBQFkCQC6AgIJALkCAgUCZVAFAWQFAmV2ABIFAWgAAAASBQRET1dOBQFkBQNuaWwEAmVSCQECZFkCBQJlUQUCYVMEAmVTCAUCZVICXzEEAmRaCAUCZVICXzIEAmVUAwUCZUkJAJYKBAUCZVMAAAkAZQIFAmVMBQJlUQUCZU0JAJYKBAAABQJlUwUCZUwJAGUCBQJlTQUCZVEEAmVVCAUCZVQCXzEEAmVWCAUCZVQCXzIEAmVXCAUCZVQCXzMEAmVYCAUCZVQCXzQEAmVyCQECYkcCCQEBRAIFAmVYBQJibAkBAUQCBQJlVwUCYmsEAmVzCQEBSAIFAmVyBQFiBAJkZQMFAmVkBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJBBgUCZVUFAmVWBQJlbwUCZXMFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZXMFA25pbAQCZXoJAQJiRwIJAQFEAgUCZU0FAmJsCQEBRAIFAmVMBQJiawQCZUEJAQFIAgUCZXoFAWIEAmVCBAJlWQkAaAIJAKADAQkAvAIDBQJlSgUCZVAFAmV2AAIJAGsDCQBlAgUCZVMFAmVZBQFiBQJlWQkAlwoFBQJlUwUCZGUFAmRaBQJlQgUCZUkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmVaAAQCZFcJAKIIAQkBAVUAAwkAAQIFAmRXAgZTdHJpbmcEAmZhBQJkVwkA2QQBBQJmYQMJAAECBQJkVwIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJmYgAEAmRXCQCiCAEJAQFWAAMJAAECBQJkVwIGU3RyaW5nBAJmYQUCZFcJANkEAQUCZmEDCQABAgUCZFcCBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgECZmMBAmRMBAJkVwkBAmVaAAMJAAECBQJkVwIKQnl0ZVZlY3RvcgQCZmQFAmRXCQAAAggFAmRMD2NhbGxlclB1YmxpY0tleQUCZmQDCQABAgUCZFcCBFVuaXQJAAACCAUCZEwGY2FsbGVyBQR0aGlzCQACAQILTWF0Y2ggZXJyb3IBAmZlAQJkTAQCZmYJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAQCZFcJAQJlWgADCQABAgUCZFcCCkJ5dGVWZWN0b3IEAmZkBQJkVwMJAAACCAUCZEwPY2FsbGVyUHVibGljS2V5BQJmZAYFAmZmAwkAAQIFAmRXAgRVbml0AwkAAAIIBQJkTAZjYWxsZXIFBHRoaXMGBQJmZgkAAgECC01hdGNoIGVycm9yHQJkTAEhY2FsY3VsYXRlQW1vdW50T3V0Rm9yU3dhcFJFQURPTkxZAwJmZwJmaAJmaQQCZmoDCQAAAgUCZmgHBAJmawkBAmFIAgUEdGhpcwkBAmFmAAQCZmwJAQJhSAIFBHRoaXMJAQJhZQAJAJQKAgUCZmsFAmZsBAJmawkBAmFIAgUEdGhpcwkBAmFlAAQCZmwJAQJhSAIFBHRoaXMJAQJhZgAJAJQKAgUCZmsFAmZsBAJmawgFAmZqAl8xBAJmbAgFAmZqAl8yBAJmbQkBAmJFAQUCZmwEAmZuCQECYkUBBQJmawQCZm8JAGsDBQJmbgUCZmcJAGQCBQJmbQUCZmcEAmZwCQC5AgIJALYCAQUCZm0JALYCAQUCZm4EAmZxCQC5AgIJALcCAgkAtwICCQC2AgEJAQJiRQEFAmZsCQC2AgEFAmZnCQC2AgEFAmZpCQC4AgIJALYCAQkBAmJFAQUCZmsJALYCAQUCZm8EAmZyAwkAwAICBQJmcQUCZnAGCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZnIFAmZyCQCUCgIFA25pbAUCZm8JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEwBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBQJmZwJmaAJmcwJmdAJmaQQCZnUKAAJhUgkA/AcEBQJhTwIXZ2V0U3dhcENvbnRyYWN0UkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAmFSAgZTdHJpbmcFAmFSCQACAQkArAICCQADAQUCYVICGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwQCZUgJAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZEwIcGF5bWVudHMAAAZhbW91bnQFAmZnBgkBAmFMAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmRMBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQUCZnUGCQECYUwBAhFQZXJtaXNzaW9uIGRlbmllZAUDbmlsAwkAAAIFAmVIBQJlSAQCZE0JAQV2YWx1ZQEJAJEDAggFAmRMCHBheW1lbnRzAAAEAmZsCQECYmEBCAUCZE0HYXNzZXRJZAQCZmsDCQAAAgUCZmgHCQECYUgCBQR0aGlzCQECYWYACQECYUgCBQR0aGlzCQECYWUABAJmbQkAZQIJAQJiRQEFAmZsCAkBBXZhbHVlAQkAkQMCCAUCZEwIcGF5bWVudHMAAAZhbW91bnQEAmZuCQECYkUBBQJmawQCZm8JAGsDBQJmbgUCZmcJAGQCBQJmbQUCZmcEAmZwCQC5AgIJALYCAQUCZm0JALYCAQUCZm4EAmZxCQC5AgIJALcCAgkAtgIBCQECYkUBBQJmbAkAtgIBBQJmaQkAuAICCQC2AgEJAQJiRQEFAmZrCQC2AgEFAmZvBAJmcgMJAMACAgUCZnEFAmZwBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmZyBQJmcgQCZnYDCQBnAgUCZm8FAmZzBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmZ2BQJmdgkAlAoCCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmZ0BQJmbwkBAmFZAQUCZmsFA25pbAUCZm8JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEwBCnNldE1hbmFnZXIBAmZ3BAJmeAkBAmZlAQUCZEwDCQAAAgUCZngFAmZ4BAJmeQkA2QQBBQJmdwMJAAACBQJmeQUCZnkJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYABQJmdwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRMAQ5jb25maXJtTWFuYWdlcgAEAmZ6CQECZmIABAJmQQMJAQlpc0RlZmluZWQBBQJmegYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZkEFAmZBBAJmQgMJAAACCAUCZEwPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJmegYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZkIFAmZCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAAkA2AQBCQEFdmFsdWUBBQJmegkAzAgCCQELRGVsZXRlRW50cnkBCQEBVgAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkTAEDcHV0AgJjegJmQwMJAGYCAAAFAmN6CQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEAmRSCQECZE8DBQJkTAUCY3oGBAJkYggFAmRSAl8yBAJjZwgFAmRSAl83BAJjeAgFAmRSAl85BAJkYwgFAmRSA18xMAQCZGQIBQJkUgNfMTEEAmZECAUCZFIDXzEyBAJmRQgFAmRSA18xMwQCZFAJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRMCHBheW1lbnRzAAAGYW1vdW50BAJkUQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZEwIcGF5bWVudHMAAQZhbW91bnQEAmRzCQECZGwDBQJkUAUCZFEJALYCAQAAAwkAAAIFAmRzBQJkcwQCZFUJAPwHBAUCYU8CBGVtaXQJAMwIAgUCZGIFA25pbAUDbmlsAwkAAAIFAmRVBQJkVQQCZFYEAmRXBQJkVQMJAAECBQJkVwIHQWRkcmVzcwQCZFgFAmRXCQD8BwQFAmRYAgRlbWl0CQDMCAIFAmRiBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkVgUCZFYEAmZGAwkAZgIFAmRjAAAJAPwHBAUCYm8CA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmRAUCZGMFA25pbAUDbmlsAwkAAAIFAmZGBQJmRgQCZkcDCQBmAgUCZGQAAAkA/AcEBQJibwIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmZFBQJkZAUDbmlsBQNuaWwDCQAAAgUCZkcFAmZHBAJmSAMFAmZDBAJmSQkA/AcEBQJibgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY2cFAmRiBQNuaWwDCQAAAgUCZkkFAmZJBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRMBmNhbGxlcgUCZGIFAmNnBQNuaWwEAmZKCQECZHQDAAAAAAAAAwkAAAIFAmZKBQJmSgQCZGsIBQJmSgJfMgQCZksIBQJmSgJfMQQCZkwJAQJkeAIFAmRzBQJkawMJAAACBQJmTAUCZkwJAM4IAgkAzggCBQJjeAUCZkgFAmZLCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRMAQpwdXRGb3JGcmVlAQJmTQMJAGYCAAAFAmZNCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmRSCQECZE8DBQJkTAUCZk0HBAJjeAgFAmRSAl85BAJkUAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZEwIcGF5bWVudHMAAAZhbW91bnQEAmRRCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkTAhwYXltZW50cwABBmFtb3VudAQCZHMJAQJkbAMFAmRQBQJkUQkAtgIBAAADCQAAAgUCZHMFAmRzBAJmTgkBAmR0AwAAAAAAAAQCZksIBQJmTgJfMQQCZGsIBQJmTgJfMgQCZkwJAQJkeAIFAmRzBQJkawMJAAACBQJmTAUCZkwJAM4IAgUCY3gFAmZLCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRMAQlwdXRPbmVUa24CAmZPAmZQBAJmUQoAAmFSCQD8BwQFAmFPAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVICB0Jvb2xlYW4FAmFSCQACAQkArAICCQADAQUCYVICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZSAwMDCQECYVQABgkAAAIFAmJnBQFsBgkAAAIFAmJnBQFuBgUCZlEEAmVICQDMCAIDAwkBASEBBQJmUgYJAQJmYwEFAmRMBgkBAmFMAQIhcHV0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZEwIcGF5bWVudHMAAQYJAQJhTAECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVIBQJlSAQCZlMJAJEDAggFAmRMCHBheW1lbnRzAAAEAmVjCAUCZlMHYXNzZXRJZAQCZWIIBQJmUwZhbW91bnQEAmRzAwkAAAIFAmVjBQJiaQkBAmRsAwkAtgIBBQJlYgkAtgIBAAAJALYCAQAAAwkAAAIFAmVjBQJiagkBAmRsAwkAtgIBAAAJALYCAQUCZWIJALYCAQAACQECYUwBAh5wYXltZW50IGFzc2V0IGlzIG5vdCBzdXBwb3J0ZWQDCQAAAgUCZHMFAmRzBAJhYggFAmRMBmNhbGxlcgQCYWMIBQJkTA10cmFuc2FjdGlvbklkBAJmVAkBAmVhBAUCZWIFAmVjBQJhYgUCYWMDCQAAAgUCZlQFAmZUBAJlZwgFAmZUAl81BAJmVQgFAmZUAl80BAJkWggFAmZUAl8zBAJkZQgFAmZUAl8yBAJmVggFAmZUAl8xBAJmVwMDCQBmAgUCZk8AAAkAZgIFAmZPBQJmVgcJAQJhTAEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZk8FA25pbAIABQJmVgQCZFUJAQJkUwEFAmZXAwkAAAIFAmRVBQJkVQQCZkgDBQJmUAQCZlgJAPwHBAUCYm4CBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJoBQJmVwUDbmlsAwkAAAIFAmZYBQJmWAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkTAZjYWxsZXIFAmZXBQJiaAUDbmlsBAJmWQMJAGYCBQJkWgAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFQBQJkWgUCZWMFA25pbAUDbmlsBAJmWgMJAAACBQR0aGlzBQJhUAkAlAoCAAAAAAMFAmVnCQCUCgIJAQEtAQUCZFoAAAkAlAoCAAAJAQEtAQUCZFoEAmR1CAUCZloCXzEEAmR2CAUCZloCXzIEAmdhCQECZHQDBQJkdQUCZHYAAAQCZksIBQJnYQJfMQQCZGsIBQJnYQJfMgQCZEUJAQV2YWx1ZQEJAKIIAQUCYWoEAmZMCQECZHgCBQJkcwUCZGsDCQAAAgUCZkwFAmZMCQCUCgIJAM4IAgkAzggCCQDOCAIFAmRlBQJmSAUCZlkFAmZLBQJmVwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkTAERcHV0T25lVGtuUkVBRE9OTFkCAmVjAmViBAJnYgkBAmVhBAUCZWIJAQJhWQEFAmVjBQR1bml0BQR1bml0BAJmVggFAmdiAl8xBAJkZQgFAmdiAl8yBAJkWggFAmdiAl8zBAJmVQgFAmdiAl80BAJlZwgFAmdiAl81CQCUCgIFA25pbAkAlQoDBQJmVgUCZFoFAmZVAmRMAQlnZXRPbmVUa24CAmdjAmZPBAJmUQoAAmFSCQD8BwQFAmFPAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYVICB0Jvb2xlYW4FAmFSCQACAQkArAICCQADAQUCYVICHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmdkAwMJAQJhVAAGCQAAAgUCYmcFAW4GBQJmUQQCZUgJAMwIAgMDCQEBIQEFAmdkBgkBAmZjAQUCZEwGCQECYUwBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkTAhwYXltZW50cwABBgkBAmFMAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZUgFAmVIBAJlRwkBAmFZAQUCZ2MEAmZTCQCRAwIIBQJkTAhwYXltZW50cwAABAJlYwgFAmZTB2Fzc2V0SWQEAmVvCAUCZlMGYW1vdW50BAJkcwkBAmRsAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJkcwUCZHMEAmFiCAUCZEwGY2FsbGVyBAJhYwgFAmRMDXRyYW5zYWN0aW9uSWQEAmdlCQECZUYFBQJlRwUCZW8FAmVjBQJhYgUCYWMDCQAAAgUCZ2UFAmdlBAJlSQgFAmdlAl81BAJmVQgFAmdlAl80BAJkWggFAmdlAl8zBAJkZQgFAmdlAl8yBAJnZggFAmdlAl8xBAJkVAMDCQBmAgUCZk8AAAkAZgIFAmZPBQJnZgcJAQJhTAEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZk8FA25pbAIABQJnZgQCZ2cJAPwHBAUCYU8CBGJ1cm4JAMwIAgUCZW8FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZWMFAmVvBQNuaWwDCQAAAgUCZ2cFAmdnBAJnaAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCZFQFAmVHBQNuaWwEAmZZAwkAZgIFAmRaAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVAFAmRaBQJlRwUDbmlsBQNuaWwEAmdpBAJnagMJAAACBQR0aGlzBQJhUAAABQJkWgMFAmVJCQCUCgIJAQEtAQkAZAIFAmRUBQJnagAACQCUCgIAAAkBAS0BCQBkAgUCZFQFAmdqBAJkdQgFAmdpAl8xBAJkdggFAmdpAl8yBAJnawkBAmR0AwUCZHUFAmR2AAAEAmZLCAUCZ2sCXzEEAmRrCAUCZ2sCXzIEAmZMCQECZHgCBQJkcwUCZGsDCQAAAgUCZkwFAmZMCQCUCgIJAM4IAgkAzggCCQDOCAIFAmRlBQJnaAUCZlkFAmZLBQJkVAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkTAERZ2V0T25lVGtuUkVBRE9OTFkCAmVHAmVvBAJnbAkBAmVGBQkBAmFZAQUCZUcFAmVvBQJiaAUEdW5pdAUEdW5pdAQCZ2YIBQJnbAJfMQQCZGUIBQJnbAJfMgQCZFoIBQJnbAJfMwQCZlUIBQJnbAJfNAQCZUkIBQJnbAJfNQkAlAoCBQNuaWwJAJUKAwUCZ2YFAmRaBQJmVQJkTAETdW5zdGFrZUFuZEdldE9uZVRrbgMCZ20CZ2MCZk8EAmZRCgACYVIJAPwHBAUCYU8CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhUgIHQm9vbGVhbgUCYVIJAAIBCQCsAgIJAAMBBQJhUgIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ2QDAwkBAmFUAAYJAAACBQJiZwUBbgYFAmZRBAJlSAkAzAgCAwMJAQEhAQUCZ2QGCQECZmMBBQJkTAYJAQJhTAECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRMCHBheW1lbnRzAAAGCQECYUwBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlSAUCZUgEAmVHCQECYVkBBQJnYwQCYWIIBQJkTAZjYWxsZXIEAmFjCAUCZEwNdHJhbnNhY3Rpb25JZAQCZHMJAQJkbAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZHMFAmRzBAJnbgkA/AcEBQJibgIHdW5zdGFrZQkAzAgCCQDYBAEFAmJoCQDMCAIFAmdtBQNuaWwFA25pbAMJAAACBQJnbgUCZ24EAmdvCQECZUYFBQJlRwUCZ20FAmJoBQJhYgUCYWMDCQAAAgUCZ28FAmdvBAJlSQgFAmdvAl81BAJmVQgFAmdvAl80BAJkWggFAmdvAl8zBAJkZQgFAmdvAl8yBAJnZggFAmdvAl8xBAJkVAMDCQBmAgUCZk8AAAkAZgIFAmZPBQJnZgcJAQJhTAEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZk8FA25pbAIABQJnZgQCZ2cJAPwHBAUCYU8CBGJ1cm4JAMwIAgUCZ20FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYmgFAmdtBQNuaWwDCQAAAgUCZ2cFAmdnBAJnaAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZEwGY2FsbGVyBQJkVAUCZUcFA25pbAQCZlkDCQBmAgUCZFoAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhUAUCZFoFAmVHBQNuaWwFA25pbAQCZ3AEAmdqAwkAAAIFBHRoaXMFAmFQAAAFAmRaAwUCZUkJAJQKAgkBAS0BCQBkAgUCZFQFAmdqAAAJAJQKAgAACQEBLQEJAGQCBQJkVAUCZ2oEAmR1CAUCZ3ACXzEEAmR2CAUCZ3ACXzIEAmdxCQECZHQDBQJkdQUCZHYAAAQCZksIBQJncQJfMQQCZGsIBQJncQJfMgQCZkwJAQJkeAIFAmRzBQJkawMJAAACBQJmTAUCZkwJAJQKAgkAzggCCQDOCAIJAM4IAgUCZGUFAmdoBQJmWQUCZksFAmRUCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRMAQNnZXQABAJjUAkBAmRLAQUCZEwEAmdyCAUCY1ACXzEEAmN3CAUCY1ACXzIEAmROCAUCY1ACXzMEAmNlCAUCY1ACXzQEAmN4CAUCY1ACXzUEAmRzCQECZGwDCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFAmRzBQJkcwQCZ3MJAPwHBAUCYU8CBGJ1cm4JAMwIAgUCZE4FA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY2UFAmROBQNuaWwDCQAAAgUCZ3MFAmdzBAJndAkBAmR0AwkBAS0BBQJncgkBAS0BBQJjdwAABAJmSwgFAmd0Al8xBAJkawgFAmd0Al8yBAJmTAkBAmR4AgUCZHMFAmRrAwkAAAIFAmZMBQJmTAkAzggCBQJjeAUCZksJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEwBCWdldE5vTGVzcwICZ3UCZ3YEAmNQCQECZEsBBQJkTAQCY3YIBQJjUAJfMQQCY3cIBQJjUAJfMgQCZE4IBQJjUAJfMwQCY2UIBQJjUAJfNAQCY3gIBQJjUAJfNQMJAGYCBQJndQUCY3YJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmN2AgMgPCAJAKQDAQUCZ3UDCQBmAgUCZ3YFAmN3CQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY3cCAyA8IAkApAMBBQJndgQCZHMJAQJkbAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZHMFAmRzBAJncwkA/AcEBQJhTwIEYnVybgkAzAgCBQJkTgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjZQUCZE4FA25pbAMJAAACBQJncwUCZ3MEAmd3CQECZHQDCQEBLQEFAmN2CQEBLQEFAmN3AAAEAmZLCAUCZ3cCXzEEAmRrCAUCZ3cCXzIEAmZMCQECZHgCBQJkcwUCZGsDCQAAAgUCZkwFAmZMCQDOCAIFAmN4BQJmSwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkTAENdW5zdGFrZUFuZEdldAECZFQEAmd4AwkBAiE9AgkAkAMBCAUCZEwIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZ3gFAmd4BAJiVAkBAmFWAAQCY2cJANkEAQkAkQMCBQJiVAUBcQQCZHMJAQJkbAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZHMFAmRzBAJnbgkA/AcEBQJibgIHdW5zdGFrZQkAzAgCCQDYBAEFAmNnCQDMCAIFAmRUBQNuaWwFA25pbAMJAAACBQJnbgUCZ24EAmNQCQECY2MECQDYBAEIBQJkTA10cmFuc2FjdGlvbklkCQDYBAEFAmNnBQJkVAgFAmRMBmNhbGxlcgQCY3YIBQJjUAJfMQQCY3cIBQJjUAJfMgQCY2oJAQ1wYXJzZUludFZhbHVlAQgFAmNQAl85BAJjeAgFAmNQA18xMAQCZ3kDAwkBAmFUAAYJAAACBQJjagUBbgkAAgEJAKwCAgIsR2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluLiBTdGF0dXMgPSAJAKQDAQUCY2oGAwkAAAIFAmd5BQJneQQCZ3MJAPwHBAUCYU8CBGJ1cm4JAMwIAgUCZFQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY2cFAmRUBQNuaWwDCQAAAgUCZ3MFAmdzBAJnegkBAmR0AwkBAS0BBQJjdgkBAS0BBQJjdwAABAJmSwgFAmd6Al8xBAJkawgFAmd6Al8yBAJmTAkBAmR4AgUCZHMFAmRrAwkAAAIFAmZMBQJmTAkAzggCBQJjeAUCZksJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZEwBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmdtAmdBAmd2BAJnZAMJAQJhVAAGCQAAAgUCYmcFAW4EAmVICQDMCAIDCQEBIQEFAmdkBgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRMCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZUgFAmVIBAJkcwkBAmRsAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJkcwUCZHMEAmduCQD8BwQFAmJuAgd1bnN0YWtlCQDMCAIJANgEAQUCYmgJAMwIAgUCZ20FA25pbAUDbmlsAwkAAAIFAmduBQJnbgQCY1AJAQJjYwQJANgEAQgFAmRMDXRyYW5zYWN0aW9uSWQJANgEAQUCYmgFAmdtCAUCZEwGY2FsbGVyBAJjdggFAmNQAl8xBAJjdwgFAmNQAl8yBAJjeAgFAmNQA18xMAQCZ0IJAMwIAgMJAGcCBQJjdgUCZ0EGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ0EFA25pbAIACQDMCAIDCQBnAgUCY3cFAmd2BgkAAgEJALkJAgkAzAgCAitwcmljZSBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZ3YFA25pbAIABQNuaWwDCQAAAgUCZ0IFAmdCBAJncwkA/AcEBQJhTwIEYnVybgkAzAgCBQJnbQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiaAUCZ20FA25pbAMJAAACBQJncwUCZ3MEAmdDCQECZHQDCQEBLQEFAmN2CQEBLQEFAmN3AAAEAmZLCAUCZ0MCXzEEAmRrCAUCZ0MCXzIEAmZMCQECZHgCBQJkcwUCZGsDCQAAAgUCZkwFAmZMCQDOCAIFAmN4BQJmSwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkTAEIYWN0aXZhdGUCAmdEAmdFAwkBAiE9AgkApQgBCAUCZEwGY2FsbGVyCQClCAEFAmFPCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAAUCZ0QJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAAUCZ0UFA25pbAIHc3VjY2VzcwJkTAEKcmVmcmVzaEtMcAAEAmdGCQELdmFsdWVPckVsc2UCCQCfCAEFAmFrAAAEAmdHAwkAZwIJAGUCBQZoZWlnaHQFAmdGBQJhbgUEdW5pdAkBAmFMAQkAuQkCCQDMCAIJAKQDAQUCYW4JAMwIAgIvIGJsb2NrcyBoYXZlIG5vdCBwYXNzZWQgc2luY2UgdGhlIHByZXZpb3VzIGNhbGwFA25pbAIAAwkAAAIFAmdHBQJnRwQCZEUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFAmFqAgEwCQECYU4BAgtpbnZhbGlkIGtMcAQCZ0gJAQJkdAMAAAAAAAAEAmdJCAUCZ0gCXzEEAmRrCAUCZ0gCXzIEAmR3AwkBAiE9AgUCZEUFAmRrBQJnSQkBAmFMAQISbm90aGluZyB0byByZWZyZXNoCQCUCgIFAmR3CQCmAwEFAmRrCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRMARxnZXRQb29sQ29uZmlnV3JhcHBl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CAIFAmNqCQDMCAIJAKQDAQUCY0EJAMwIAgkApAMBBQJjQwUDbmlsBQFqAmRMARNldmFsdWF0ZUdldFJFQURPTkxZAgJnWAJnWQQCY1AJAQJjYwQCAAUCZ1gFAmdZBQR0aGlzBAJjdggFAmNQAl8xBAJjdwgFAmNQAl8yBAJjbAgFAmNQAl81BAJjbggFAmNQAl82BAJjawgFAmNQAl83BAJjcQgFAmNQAl84BAJjagkBDXBhcnNlSW50VmFsdWUBCAUCY1ACXzkJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjdgkAzAgCCQCkAwEFAmN3CQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjbgkAzAgCCQCkAwEFAmNrCQDMCAIJAKYDAQUCY3EJAMwIAgkApAMBBQJjagUDbmlsBQFqAQJnWgECaGEABAJoYgQCZFcJAQJlWgADCQABAgUCZFcCCkJ5dGVWZWN0b3IEAmZkBQJkVwUCZmQDCQABAgUCZFcCBFVuaXQIBQJnWg9zZW5kZXJQdWJsaWNLZXkJAAIBAgtNYXRjaCBlcnJvcgQCZFcFAmdaAwkAAQIFAmRXAgVPcmRlcgQCZEEFAmRXBAJoYwkBAmFVAAQCaGQJAQJkegEFAmRBBAJhRAgFAmhkAl8xBAJhRQgFAmhkAl8yBAJhRgkA9AMDCAUCZEEJYm9keUJ5dGVzCQCRAwIIBQJkQQZwcm9vZnMAAAgFAmRBD3NlbmRlclB1YmxpY0tleQQCYUcJAPQDAwgFAmRBCWJvZHlCeXRlcwkAkQMCCAUCZEEGcHJvb2ZzAAEFAmhjAwMDBQJhRAUCYUYHBQJhRwcGCQECYUMEBQJhRAUCYUUFAmFGBQJhRwMJAAECBQJkVwIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmZhBQJkVwMJAPQDAwgFAmdaCWJvZHlCeXRlcwkAkQMCCAUCZ1oGcHJvb2ZzAAAFAmhiBgQCaGUJAPYDAQkBBXZhbHVlAQgFAmZhBnNjcmlwdAQCaGYJANsEAQkBBXZhbHVlAQkAnQgCBQJhTwkBAmFBAAQCaGcJAPEHAQUEdGhpcwMJAAACBQJoZgUCaGUJAQIhPQIFAmhnBQJoZQcJAPQDAwgFAmdaCWJvZHlCeXRlcwkAkQMCCAUCZ1oGcHJvb2ZzAAAFAmhiqF/ylA==", "height": 2560258, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: DESKE8FVKp7c4R9wu794HnyRMp3MTWyya3mEkY8NU4ck Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let a = 8
5+
6+let b = 100000000
7+
8+let c = toBigInt(100000000)
9+
10+let d = toBigInt(1000000000000000000)
11+
12+let e = toBigInt(0)
13+
14+let f = toBigInt(0)
15+
16+let g = toBigInt(1)
17+
18+let h = toBigInt(2)
19+
20+let i = "WAVES"
21+
22+let j = "__"
23+
24+let k = 1
25+
26+let l = 2
27+
28+let m = 3
29+
30+let n = 4
31+
32+let o = 1
33+
34+let p = 2
35+
36+let q = 3
37+
38+let r = 4
39+
40+let s = 5
41+
42+let t = 6
43+
44+let u = 7
45+
46+let v = 8
47+
48+let w = 9
49+
50+let x = 10
51+
52+let y = 1
53+
54+let z = 2
55+
56+let A = 3
57+
58+let B = 1
59+
60+let C = 7
61+
62+func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
63+
64+
65+func G (E,F) = fraction(E, d, F)
66+
67+
68+func H (I,J) = toInt(fraction(I, toBigInt(J), d))
69+
70+
71+func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
72+
73+
74+func M (N,O,P) = fraction(N, O, P)
75+
76+
77+func Q (I) = if ((0 > I))
78+ then -(I)
79+ else I
80+
81+
82+func R (I) = if ((e > I))
83+ then -(I)
84+ else I
85+
86+
87+func S () = "%s__swapContract"
88+
89+
90+func T () = "%s__factoryContract"
91+
92+
93+func U () = "%s__managerPublicKey"
94+
95+
96+func V () = "%s__pendingManagerPublicKey"
97+
98+
99+func W () = "%s%s__price__last"
100+
101+
102+func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103+
104+
105+func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106+
107+
108+func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109+
110+
111+func ae () = "%s__amountAsset"
112+
113+
114+func af () = "%s__priceAsset"
115+
116+
117+let ag = "%s__fee"
118+
119+let ah = fraction(10, b, 10000)
120+
121+let ai = valueOrElse(getInteger(this, ag), ah)
122+
123+let aj = makeString(["%s", "kLp"], j)
124+
125+let ak = makeString(["%s", "kLpRefreshedHeight"], j)
126+
127+let al = makeString(["%s", "refreshKLpDelay"], j)
128+
129+let am = 30
130+
131+let an = valueOrElse(getInteger(this, al), am)
132+
133+func ao () = "%s__factoryConfig"
134+
135+
136+func ap () = "%s%s__matcher__publicKey"
137+
138+
139+func aq (ar) = (("%s%s%s__" + ar) + "__mappings__poolContract2LpAsset")
140+
141+
142+func as (at,au) = (((("%d%d%s__" + at) + "__") + au) + "__config")
143+
144+
145+func av (aw) = ("%s%s%s__mappings__baseAsset2internalId__" + aw)
146+
147+
148+func ax () = "%s__shutdown"
149+
150+
151+func ay (az) = ("%s%s__poolWeight__" + az)
152+
153+
154+func aA () = "%s__allowedLpScriptHash"
155+
156+
157+let aB = "%s__feeCollectorAddress"
158+
159+func aC (aD,aE,aF,aG) = throw((((((((("order validation failed: orderValid=" + toString(aD)) + " (") + aE) + ")") + " senderValid=") + toString(aF)) + " matcherValid=") + toString(aG)))
160+
161+
162+func aH (aI,aJ) = valueOrErrorMessage(getString(aI, aJ), makeString(["mandatory ", toString(aI), ".", aJ, " is not defined"], ""))
163+
164+
165+func aK (aI,aJ) = valueOrErrorMessage(getInteger(aI, aJ), makeString(["mandatory ", toString(aI), ".", aJ, " is not defined"], ""))
166+
167+
168+func aL (aM) = throw(makeString(["lp.ride:", aM], " "))
169+
170+
171+func aN (aM) = makeString(["lp.ride:", aM], " ")
172+
173+
174+let aO = addressFromStringValue(aH(this, T()))
175+
176+let aP = addressFromStringValue(aH(aO, aB))
177+
178+let aQ = {
179+ let aR = invoke(aO, "getInFeeREADONLY", [toString(this)], nil)
180+ if ($isInstanceOf(aR, "Int"))
181+ then aR
182+ else throw(($getType(aR) + " couldn't be cast to Int"))
183+ }
184+
185+let aS = {
186+ let aR = invoke(aO, "getOutFeeREADONLY", [toString(this)], nil)
187+ if ($isInstanceOf(aR, "Int"))
188+ then aR
189+ else throw(($getType(aR) + " couldn't be cast to Int"))
190+ }
191+
192+func aT () = valueOrElse(getBoolean(aO, ax()), false)
193+
194+
195+func aU () = fromBase58String(aH(aO, ap()))
196+
197+
198+func aV () = {
199+ let aW = aH(this, ae())
200+ let aX = aH(this, af())
201+ let au = aK(aO, av(aX))
202+ let at = aK(aO, av(aW))
203+ split(aH(aO, as(toString(at), toString(au))), j)
204+ }
205+
206+
207+func aY (aZ) = if ((aZ == i))
208+ then unit
209+ else fromBase58String(aZ)
210+
211+
212+func ba (aZ) = if ((aZ == unit))
213+ then i
214+ else toBase58String(value(aZ))
215+
216+
217+func bb (bc) = $Tuple7(addressFromStringValue(bc[o]), parseIntValue(bc[p]), fromBase58String(bc[q]), aY(bc[r]), aY(bc[s]), parseIntValue(bc[t]), parseIntValue(bc[u]))
218+
219+
220+let bd = bb(aV())
221+
222+let be = bd
223+
224+let bf = be._1
225+
226+let bg = be._2
227+
228+let bh = be._3
229+
230+let bi = be._4
231+
232+let bj = be._5
233+
234+let bk = be._6
235+
236+let bl = be._7
237+
238+func bm () = split(aH(aO, ao()), j)
239+
240+
241+let bn = valueOrErrorMessage(addressFromString(bm()[B]), "incorrect staking address")
242+
243+let bo = valueOrErrorMessage(addressFromString(bm()[C]), "incorrect staking address")
244+
245+func bp (bq,br,bs,bt,bu,bv,bw,bx,by,bz) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bq), toString(br), toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by), toString(bz)], j)
246+
247+
248+func bA (bB,bC,bD,bt,bw,bx) = makeString(["%d%d%d%d%d%d", toString(bB), toString(bC), toString(bD), toString(bt), toString(bw), toString(bx)], j)
249+
250+
251+func bE (bF) = if ((bF == "WAVES"))
252+ then wavesBalance(this).available
253+ else assetBalance(this, fromBase58String(bF))
254+
255+
256+func bG (bH,bI) = fraction(bH, d, bI)
257+
258+
259+func bJ (bH,bI,L) = fraction(bH, d, bI, L)
260+
261+
262+func bK (bL,bM,bN,bO) = {
263+ let bP = D(bN, bL)
264+ let bQ = D(bO, bM)
265+ bG(bQ, bP)
266+ }
267+
268+
269+func bR (bN,bO,bS) = {
270+ let bT = aV()
271+ let bU = parseIntValue(bT[t])
272+ let bV = parseIntValue(bT[u])
273+ let bW = bK(bU, bV, bN, bO)
274+ let bI = D(bN, bU)
275+ let bH = D(bO, bV)
276+ let bX = D(bS, b)
277+ let bY = bG(bI, bX)
278+ let bZ = bG(bH, bX)
279+[bW, bY, bZ]
280+ }
281+
282+
283+func ca (bN,bO,bS) = {
284+ let cb = bR(bN, bO, bS)
285+[H(cb[0], b), H(cb[1], b), H(cb[2], b)]
286+ }
287+
288+
289+func cc (cd,ce,cf,ab) = {
290+ let bT = aV()
291+ let cg = bT[q]
292+ let ch = bT[r]
293+ let ci = bT[s]
294+ let bL = parseIntValue(bT[t])
295+ let bM = parseIntValue(bT[u])
296+ let cj = bT[p]
297+ let ck = valueOrErrorMessage(assetInfo(fromBase58String(cg)), (("Asset " + cg) + " doesn't exist")).quantity
298+ if ((cg != ce))
299+ then throw("Invalid asset passed.")
300+ else {
301+ let cl = bE(ch)
302+ let cm = D(cl, bL)
303+ let cn = bE(ci)
304+ let co = D(cn, bM)
305+ let cp = bG(co, cm)
306+ let cq = H(cp, b)
307+ let cr = D(cf, b)
308+ let cs = D(ck, b)
309+ let ct = fraction(cm, cr, cs)
310+ let cu = fraction(co, cr, cs)
311+ let cv = K(ct, bL, FLOOR)
312+ let cw = K(cu, bM, FLOOR)
313+ let cx = if ((cd == ""))
314+ then nil
315+ else [ScriptTransfer(ab, cv, if ((ch == "WAVES"))
316+ then unit
317+ else fromBase58String(ch)), ScriptTransfer(ab, cw, if ((ci == "WAVES"))
318+ then unit
319+ else fromBase58String(ci)), StringEntry(ad(toString(ab), cd), bA(cv, cw, cf, cq, height, lastBlock.timestamp)), IntegerEntry(W(), cq), IntegerEntry(X(height, lastBlock.timestamp), cq)]
320+ $Tuple10(cv, cw, ch, ci, cl, cn, ck, cp, cj, cx)
321+ }
322+ }
323+
324+
325+func cy (cd,cz,cA,cB,cC,cD,ab,cE,cF) = {
326+ let bT = aV()
327+ let cg = fromBase58String(bT[q])
328+ let cG = bT[r]
329+ let cH = bT[s]
330+ let cI = bT[v]
331+ let cJ = bT[w]
332+ let bU = parseIntValue(bT[t])
333+ let bV = parseIntValue(bT[u])
334+ let cj = bT[p]
335+ let ck = valueOrErrorMessage(assetInfo(cg), (("Asset " + toBase58String(cg)) + " doesn't exist")).quantity
336+ let cK = toBase58String(valueOrElse(cB, fromBase58String("WAVES")))
337+ let cL = toBase58String(valueOrElse(cD, fromBase58String("WAVES")))
338+ if (if ((cG != cK))
339+ then true
340+ else (cH != cL))
341+ then throw("Invalid amt or price asset passed.")
342+ else {
343+ let cl = if (cE)
344+ then bE(cG)
345+ else (bE(cG) - cA)
346+ let cn = if (cE)
347+ then bE(cH)
348+ else (bE(cH) - cC)
349+ let cM = D(cA, bU)
350+ let cN = D(cC, bV)
351+ let cO = bG(cN, cM)
352+ let cm = D(cl, bU)
353+ let co = D(cn, bV)
354+ let cP = if ((ck == 0))
355+ then {
356+ let cp = e
357+ let cQ = e
358+ let bX = pow((cM * cN), 0, toBigInt(5), 1, 0, DOWN)
359+ $Tuple5(H(bX, b), H(cM, bU), H(cN, bV), bG((co + cN), (cm + cM)), cQ)
360+ }
361+ else {
362+ let cp = bG(co, cm)
363+ let cQ = fraction(R((cp - cO)), d, cp)
364+ let cR = D(cz, b)
365+ if (if ((cp != e))
366+ then (cQ > cR)
367+ else false)
368+ then throw(((("Price slippage " + toString(cQ)) + " exceeded the passed limit of ") + toString(cR)))
369+ else {
370+ let cs = D(ck, b)
371+ let cS = fraction(cM, bJ(co, cm, CEILING), d, CEILING)
372+ let cT = fraction(cN, d, bJ(co, cm, FLOOR), CEILING)
373+ let cU = if ((cS > cN))
374+ then $Tuple2(cT, cN)
375+ else $Tuple2(cM, cS)
376+ let cV = cU._1
377+ let cW = cU._2
378+ let bX = fraction(cs, cW, co, FLOOR)
379+ $Tuple5(K(bX, b, FLOOR), K(cV, bU, CEILING), K(cW, bV, CEILING), cp, cQ)
380+ }
381+ }
382+ let cX = cP._1
383+ let cY = cP._2
384+ let cZ = cP._3
385+ let cq = H(cP._4, b)
386+ let da = H(cP._5, b)
387+ if ((0 >= cX))
388+ then throw("Invalid calculations. LP calculated is less than zero.")
389+ else {
390+ let db = if (!(cF))
391+ then 0
392+ else cX
393+ let dc = (cA - cY)
394+ let dd = (cC - cZ)
395+ let de = [IntegerEntry(W(), cq), IntegerEntry(X(height, lastBlock.timestamp), cq), StringEntry(aa(ab, cd), bp(cY, cZ, db, cq, cz, da, height, lastBlock.timestamp, dc, dd))]
396+ $Tuple13(cX, db, cq, cl, cn, ck, cg, cj, de, dc, dd, cB, cD)
397+ }
398+ }
399+ }
400+
401+
402+func df (dg,dh,ck) = {
403+ let di = G(dg, toBigInt(bk))
404+ let dj = G(dh, toBigInt(bl))
405+ let dk = fraction(pow((di * dj), 0, toBigInt(5), 1, 18, DOWN), g, ck)
406+ if ((ck == f))
407+ then f
408+ else dk
409+ }
410+
411+
412+func dl (dm,dn,do) = {
413+ let dp = (toBigInt(bE(ba(bi))) - dm)
414+ let dq = (toBigInt(bE(ba(bj))) - dn)
415+ let dr = (toBigInt(value(assetInfo(bh)).quantity) - do)
416+ let ds = df(dp, dq, dr)
417+ ds
418+ }
419+
420+
421+func dt (du,dv,do) = {
422+ let dp = (bE(ba(bi)) + du)
423+ let dq = (bE(ba(bj)) + dv)
424+ let dr = (value(assetInfo(bh)).quantity + do)
425+ let dk = df(toBigInt(dp), toBigInt(dq), toBigInt(dr))
426+ let dw = [IntegerEntry(ak, height), StringEntry(aj, toString(dk))]
427+ $Tuple2(dw, dk)
428+ }
429+
430+
431+func dx (dy,dk) = if ((dk >= dy))
432+ then true
433+ else aL(makeString(["updated KLp lower than current KLp", toString(dy), toString(dk)], " "))
434+
435+
436+func dz (dA) = {
437+ let dp = bE(ba(bi))
438+ let dq = bE(ba(bj))
439+ let dB = dA.amount
440+ let dC = fraction(dA.amount, dA.price, b, FLOOR)
441+ let dD = if ((dA.orderType == Buy))
442+ then $Tuple2(dB, -(dC))
443+ else $Tuple2(-(dB), dC)
444+ let du = dD._1
445+ let dv = dD._2
446+ if (if (if (aT())
447+ then true
448+ else (bg == m))
449+ then true
450+ else (bg == n))
451+ then throw("Exchange operations disabled")
452+ else if (if ((dA.assetPair.amountAsset != bi))
453+ then true
454+ else (dA.assetPair.priceAsset != bj))
455+ then throw("Wrong order assets.")
456+ else {
457+ let dE = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aN("invalid kLp"))
458+ let dF = dt(du, dv, 0)
459+ let dG = dF._1
460+ let dH = dF._2
461+ let dI = (dH >= dE)
462+ let dJ = makeString(["kLp=", toString(dE), " kLpNew=", toString(dH), " amountAssetBalance=", toString(dp), " priceAssetBalance=", toString(dq), " amountAssetBalanceDelta=", toString(du), " priceAssetBalanceDelta=", toString(dv), " height=", toString(height)], "")
463+ $Tuple2(dI, dJ)
464+ }
465+ }
466+
467+
468+func dK (dL) = if ((size(dL.payments) != 1))
469+ then throw("exactly 1 payment is expected")
470+ else {
471+ let dM = value(dL.payments[0])
472+ let ce = value(dM.assetId)
473+ let dN = dM.amount
474+ let cP = cc(toBase58String(dL.transactionId), toBase58String(ce), dN, dL.caller)
475+ let cv = cP._1
476+ let cw = cP._2
477+ let cj = parseIntValue(cP._9)
478+ let cx = cP._10
479+ if (if (aT())
480+ then true
481+ else (cj == n))
482+ then throw(("Get operation is blocked by admin. Status = " + toString(cj)))
483+ else $Tuple5(cv, cw, dN, ce, cx)
484+ }
485+
486+
487+func dO (dL,cz,cF) = if ((size(dL.payments) != 2))
488+ then throw("exactly 2 payments are expected")
489+ else {
490+ let dP = value(dL.payments[0])
491+ let dQ = value(dL.payments[1])
492+ let dR = cy(toBase58String(dL.transactionId), cz, dP.amount, dP.assetId, dQ.amount, dQ.assetId, toString(dL.caller), false, cF)
493+ let cj = parseIntValue(dR._8)
494+ if (if (if (aT())
495+ then true
496+ else (cj == l))
497+ then true
498+ else (cj == n))
499+ then throw(("Put operation is blocked by admin. Status = " + toString(cj)))
500+ else dR
501+ }
502+
503+
504+func dS (dT) = {
505+ let dU = invoke(aO, "emit", [dT], nil)
506+ if ((dU == dU))
507+ then {
508+ let dV = {
509+ let dW = dU
510+ if ($isInstanceOf(dW, "Address"))
511+ then {
512+ let dX = dW
513+ invoke(dX, "emit", [dT], nil)
514+ }
515+ else unit
516+ }
517+ if ((dV == dV))
518+ then dT
519+ else throw("Strict value is not equal to itself.")
520+ }
521+ else throw("Strict value is not equal to itself.")
522+ }
523+
524+
525+func dY (dT,ai) = {
526+ let dZ = if ((ai == 0))
527+ then 0
528+ else fraction(dT, ai, b)
529+ $Tuple2((dT - dZ), dZ)
530+ }
531+
532+
533+func ea (eb,ec,ab,ac) = {
534+ let ed = (ac == unit)
535+ let ee = bE(ba(bi))
536+ let ef = bE(ba(bj))
537+ let eg = if ((ec == bi))
538+ then true
539+ else if ((ec == bj))
540+ then false
541+ else aL("invalid asset")
542+ let eh = if (ed)
543+ then $Tuple2(ee, ef)
544+ else if (eg)
545+ then $Tuple2((ee - eb), ef)
546+ else $Tuple2(ee, (ef - eb))
547+ let ei = eh._1
548+ let ej = eh._2
549+ let ek = if (eg)
550+ then $Tuple2(eb, 0)
551+ else $Tuple2(0, eb)
552+ let el = ek._1
553+ let em = ek._2
554+ let dB = dY(el, aQ)._1
555+ let dC = dY(em, aQ)._1
556+ let en = dY(eb, aQ)
557+ let eo = en._1
558+ let dZ = en._2
559+ let ep = (ei + dB)
560+ let eq = (ej + dC)
561+ let er = bG(D(eq, bl), D(ep, bk))
562+ let es = H(er, b)
563+ let et = if (eg)
564+ then ei
565+ else ej
566+ let eu = toBigInt(et)
567+ let ev = toBigInt(valueOrErrorMessage(assetInfo(bh), (("asset " + toBase58String(bh)) + " doesn't exist")).quantity)
568+ let ew = if ((ev > f))
569+ then true
570+ else aL("initial deposit requires all coins")
571+ if ((ew == ew))
572+ then {
573+ let ex = toBigInt(eo)
574+ let ey = max([0, toInt(((ev * (sqrtBigInt((d + ((ex * d) / eu)), 18, 18, DOWN) - d)) / d))])
575+ let de = if (ed)
576+ then nil
577+ else [IntegerEntry(W(), es), IntegerEntry(X(height, lastBlock.timestamp), es), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bp(el, em, ey, es, 0, 0, height, lastBlock.timestamp, 0, 0))]
578+ let ez = bG(D(ej, bl), D(ei, bk))
579+ let eA = H(ez, b)
580+ let eB = {
581+ let eC = if (eg)
582+ then $Tuple2(el, ei)
583+ else $Tuple2(em, ej)
584+ let dT = eC._1
585+ let eD = eC._2
586+ let eE = toInt(fraction(ev, toBigInt((dT / 2)), toBigInt(eD)))
587+ fraction((ey - eE), b, eE)
588+ }
589+ $Tuple5(ey, de, dZ, eB, eg)
590+ }
591+ else throw("Strict value is not equal to itself.")
592+ }
593+
594+
595+func eF (eG,eo,ec,ab,ac) = {
596+ let ed = (ac == unit)
597+ let bT = aV()
598+ let bU = parseIntValue(bT[t])
599+ let bV = parseIntValue(bT[u])
600+ let eH = [if ((ec == bh))
601+ then true
602+ else aL("invalid lp asset")]
603+ if ((eH == eH))
604+ then {
605+ let eI = if ((eG == bi))
606+ then true
607+ else if ((eG == bj))
608+ then false
609+ else aL("invalid asset")
610+ let eJ = if (eI)
611+ then toBigInt(bE(ba(bi)))
612+ else toBigInt(bE(ba(bj)))
613+ let eK = if (eI)
614+ then bU
615+ else bV
616+ let eL = bE(ba(bi))
617+ let eM = bE(ba(bj))
618+ let eN = if (eI)
619+ then eL
620+ else eM
621+ let eO = toBigInt(eN)
622+ let ev = toBigInt(valueOrErrorMessage(assetInfo(bh), (("asset " + toBase58String(bh)) + " doesn't exist")).quantity)
623+ let eP = toBigInt(eo)
624+ let eQ = max([0, toInt(((eJ * (d - pow((d - ((eP * d) / ev)), 18, h, 0, 18, DOWN))) / d))])
625+ let eR = dY(eQ, aS)
626+ let eS = eR._1
627+ let dZ = eR._2
628+ let eT = if (eI)
629+ then $Tuple4(eS, 0, (eL - eQ), eM)
630+ else $Tuple4(0, eS, eL, (eM - eQ))
631+ let eU = eT._1
632+ let eV = eT._2
633+ let eW = eT._3
634+ let eX = eT._4
635+ let er = bG(D(eX, bl), D(eW, bk))
636+ let es = H(er, b)
637+ let de = if (ed)
638+ then nil
639+ else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bA(eU, eV, eo, es, height, lastBlock.timestamp)), IntegerEntry(W(), es), IntegerEntry(X(height, lastBlock.timestamp), es)]
640+ let ez = bG(D(eM, bl), D(eL, bk))
641+ let eA = H(ez, b)
642+ let eB = {
643+ let eY = (toInt(fraction(eJ, eP, ev)) * 2)
644+ fraction((eS - eY), b, eY)
645+ }
646+ $Tuple5(eS, de, dZ, eB, eI)
647+ }
648+ else throw("Strict value is not equal to itself.")
649+ }
650+
651+
652+func eZ () = {
653+ let dW = getString(U())
654+ if ($isInstanceOf(dW, "String"))
655+ then {
656+ let fa = dW
657+ fromBase58String(fa)
658+ }
659+ else if ($isInstanceOf(dW, "Unit"))
660+ then unit
661+ else throw("Match error")
662+ }
663+
664+
665+func fb () = {
666+ let dW = getString(V())
667+ if ($isInstanceOf(dW, "String"))
668+ then {
669+ let fa = dW
670+ fromBase58String(fa)
671+ }
672+ else if ($isInstanceOf(dW, "Unit"))
673+ then unit
674+ else throw("Match error")
675+ }
676+
677+
678+func fc (dL) = {
679+ let dW = eZ()
680+ if ($isInstanceOf(dW, "ByteVector"))
681+ then {
682+ let fd = dW
683+ (dL.callerPublicKey == fd)
684+ }
685+ else if ($isInstanceOf(dW, "Unit"))
686+ then (dL.caller == this)
687+ else throw("Match error")
688+ }
689+
690+
691+func fe (dL) = {
692+ let ff = throw("Permission denied")
693+ let dW = eZ()
694+ if ($isInstanceOf(dW, "ByteVector"))
695+ then {
696+ let fd = dW
697+ if ((dL.callerPublicKey == fd))
698+ then true
699+ else ff
700+ }
701+ else if ($isInstanceOf(dW, "Unit"))
702+ then if ((dL.caller == this))
703+ then true
704+ else ff
705+ else throw("Match error")
706+ }
707+
708+
709+@Callable(dL)
710+func calculateAmountOutForSwapREADONLY (fg,fh,fi) = {
711+ let fj = if ((fh == false))
712+ then {
713+ let fk = aH(this, af())
714+ let fl = aH(this, ae())
715+ $Tuple2(fk, fl)
716+ }
717+ else {
718+ let fk = aH(this, ae())
719+ let fl = aH(this, af())
720+ $Tuple2(fk, fl)
721+ }
722+ let fk = fj._1
723+ let fl = fj._2
724+ let fm = bE(fl)
725+ let fn = bE(fk)
726+ let fo = fraction(fn, fg, (fm + fg))
727+ let fp = (toBigInt(fm) * toBigInt(fn))
728+ let fq = (((toBigInt(bE(fl)) + toBigInt(fg)) + toBigInt(fi)) * (toBigInt(bE(fk)) - toBigInt(fo)))
729+ let fr = if ((fq >= fp))
730+ then true
731+ else throw("new K is fewer error")
732+ if ((fr == fr))
733+ then $Tuple2(nil, fo)
734+ else throw("Strict value is not equal to itself.")
735+ }
736+
737+
738+
739+@Callable(dL)
740+func calculateAmountOutForSwapAndSendTokens (fg,fh,fs,ft,fi) = {
741+ let fu = {
742+ let aR = invoke(aO, "getSwapContractREADONLY", nil, nil)
743+ if ($isInstanceOf(aR, "String"))
744+ then aR
745+ else throw(($getType(aR) + " couldn't be cast to String"))
746+ }
747+ let eH = [if ((value(dL.payments[0]).amount >= fg))
748+ then true
749+ else aL("Wrong amount"), if ((dL.caller == addressFromStringValue(fu)))
750+ then true
751+ else aL("Permission denied")]
752+ if ((eH == eH))
753+ then {
754+ let dM = value(dL.payments[0])
755+ let fl = ba(dM.assetId)
756+ let fk = if ((fh == false))
757+ then aH(this, af())
758+ else aH(this, ae())
759+ let fm = (bE(fl) - value(dL.payments[0]).amount)
760+ let fn = bE(fk)
761+ let fo = fraction(fn, fg, (fm + fg))
762+ let fp = (toBigInt(fm) * toBigInt(fn))
763+ let fq = ((toBigInt(bE(fl)) + toBigInt(fi)) * (toBigInt(bE(fk)) - toBigInt(fo)))
764+ let fr = if ((fq >= fp))
765+ then true
766+ else throw("new K is fewer error")
767+ if ((fr == fr))
768+ then {
769+ let fv = if ((fo >= fs))
770+ then true
771+ else throw("Exchange result is fewer coins than expected")
772+ if ((fv == fv))
773+ then $Tuple2([ScriptTransfer(addressFromStringValue(ft), fo, aY(fk))], fo)
774+ else throw("Strict value is not equal to itself.")
775+ }
776+ else throw("Strict value is not equal to itself.")
777+ }
778+ else throw("Strict value is not equal to itself.")
779+ }
780+
781+
782+
783+@Callable(dL)
784+func setManager (fw) = {
785+ let fx = fe(dL)
786+ if ((fx == fx))
787+ then {
788+ let fy = fromBase58String(fw)
789+ if ((fy == fy))
790+ then [StringEntry(V(), fw)]
791+ else throw("Strict value is not equal to itself.")
792+ }
793+ else throw("Strict value is not equal to itself.")
794+ }
795+
796+
797+
798+@Callable(dL)
799+func confirmManager () = {
800+ let fz = fb()
801+ let fA = if (isDefined(fz))
802+ then true
803+ else throw("No pending manager")
804+ if ((fA == fA))
805+ then {
806+ let fB = if ((dL.callerPublicKey == value(fz)))
807+ then true
808+ else throw("You are not pending manager")
809+ if ((fB == fB))
810+ then [StringEntry(U(), toBase58String(value(fz))), DeleteEntry(V())]
811+ else throw("Strict value is not equal to itself.")
812+ }
813+ else throw("Strict value is not equal to itself.")
814+ }
815+
816+
817+
818+@Callable(dL)
819+func put (cz,fC) = if ((0 > cz))
820+ then throw("Invalid slippageTolerance passed")
821+ else {
822+ let dR = dO(dL, cz, true)
823+ let db = dR._2
824+ let cg = dR._7
825+ let cx = dR._9
826+ let dc = dR._10
827+ let dd = dR._11
828+ let fD = dR._12
829+ let fE = dR._13
830+ let dP = toBigInt(value(dL.payments[0]).amount)
831+ let dQ = toBigInt(value(dL.payments[1]).amount)
832+ let ds = dl(dP, dQ, toBigInt(0))
833+ if ((ds == ds))
834+ then {
835+ let dU = invoke(aO, "emit", [db], nil)
836+ if ((dU == dU))
837+ then {
838+ let dV = {
839+ let dW = dU
840+ if ($isInstanceOf(dW, "Address"))
841+ then {
842+ let dX = dW
843+ invoke(dX, "emit", [db], nil)
844+ }
845+ else unit
846+ }
847+ if ((dV == dV))
848+ then {
849+ let fF = if ((dc > 0))
850+ then invoke(bo, "put", nil, [AttachedPayment(fD, dc)])
851+ else nil
852+ if ((fF == fF))
853+ then {
854+ let fG = if ((dd > 0))
855+ then invoke(bo, "put", nil, [AttachedPayment(fE, dd)])
856+ else nil
857+ if ((fG == fG))
858+ then {
859+ let fH = if (fC)
860+ then {
861+ let fI = invoke(bn, "stake", nil, [AttachedPayment(cg, db)])
862+ if ((fI == fI))
863+ then nil
864+ else throw("Strict value is not equal to itself.")
865+ }
866+ else [ScriptTransfer(dL.caller, db, cg)]
867+ let fJ = dt(0, 0, 0)
868+ if ((fJ == fJ))
869+ then {
870+ let dk = fJ._2
871+ let fK = fJ._1
872+ let fL = dx(ds, dk)
873+ if ((fL == fL))
874+ then ((cx ++ fH) ++ fK)
875+ else throw("Strict value is not equal to itself.")
876+ }
877+ else throw("Strict value is not equal to itself.")
878+ }
879+ else throw("Strict value is not equal to itself.")
880+ }
881+ else throw("Strict value is not equal to itself.")
882+ }
883+ else throw("Strict value is not equal to itself.")
884+ }
885+ else throw("Strict value is not equal to itself.")
886+ }
887+ else throw("Strict value is not equal to itself.")
888+ }
889+
890+
891+
892+@Callable(dL)
893+func putForFree (fM) = if ((0 > fM))
894+ then throw("Invalid value passed")
895+ else {
896+ let dR = dO(dL, fM, false)
897+ let cx = dR._9
898+ let dP = toBigInt(value(dL.payments[0]).amount)
899+ let dQ = toBigInt(value(dL.payments[1]).amount)
900+ let ds = dl(dP, dQ, toBigInt(0))
901+ if ((ds == ds))
902+ then {
903+ let fN = dt(0, 0, 0)
904+ let fK = fN._1
905+ let dk = fN._2
906+ let fL = dx(ds, dk)
907+ if ((fL == fL))
908+ then (cx ++ fK)
909+ else throw("Strict value is not equal to itself.")
910+ }
911+ else throw("Strict value is not equal to itself.")
912+ }
913+
914+
915+
916+@Callable(dL)
917+func putOneTkn (fO,fP) = {
918+ let fQ = {
919+ let aR = invoke(aO, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
920+ if ($isInstanceOf(aR, "Boolean"))
921+ then aR
922+ else throw(($getType(aR) + " couldn't be cast to Boolean"))
923+ }
924+ let fR = if (if (if (aT())
925+ then true
926+ else (bg == l))
927+ then true
928+ else (bg == n))
929+ then true
930+ else fQ
931+ let eH = [if (if (!(fR))
932+ then true
933+ else fc(dL))
934+ then true
935+ else aL("put operation is blocked by admin"), if ((size(dL.payments) == 1))
936+ then true
937+ else aL("exactly 1 payment are expected")]
938+ if ((eH == eH))
939+ then {
940+ let fS = dL.payments[0]
941+ let ec = fS.assetId
942+ let eb = fS.amount
943+ let ds = if ((ec == bi))
944+ then dl(toBigInt(eb), toBigInt(0), toBigInt(0))
945+ else if ((ec == bj))
946+ then dl(toBigInt(0), toBigInt(eb), toBigInt(0))
947+ else aL("payment asset is not supported")
948+ if ((ds == ds))
949+ then {
950+ let ab = dL.caller
951+ let ac = dL.transactionId
952+ let fT = ea(eb, ec, ab, ac)
953+ if ((fT == fT))
954+ then {
955+ let eg = fT._5
956+ let fU = fT._4
957+ let dZ = fT._3
958+ let de = fT._2
959+ let fV = fT._1
960+ let fW = if (if ((fO > 0))
961+ then (fO > fV)
962+ else false)
963+ then aL(makeString(["amount to receive is less than ", toString(fO)], ""))
964+ else fV
965+ let dU = dS(fW)
966+ if ((dU == dU))
967+ then {
968+ let fH = if (fP)
969+ then {
970+ let fX = invoke(bn, "stake", nil, [AttachedPayment(bh, fW)])
971+ if ((fX == fX))
972+ then nil
973+ else throw("Strict value is not equal to itself.")
974+ }
975+ else [ScriptTransfer(dL.caller, fW, bh)]
976+ let fY = if ((dZ > 0))
977+ then [ScriptTransfer(aP, dZ, ec)]
978+ else nil
979+ let fZ = if ((this == aP))
980+ then $Tuple2(0, 0)
981+ else if (eg)
982+ then $Tuple2(-(dZ), 0)
983+ else $Tuple2(0, -(dZ))
984+ let du = fZ._1
985+ let dv = fZ._2
986+ let ga = dt(du, dv, 0)
987+ let fK = ga._1
988+ let dk = ga._2
989+ let dE = value(getString(aj))
990+ let fL = dx(ds, dk)
991+ if ((fL == fL))
992+ then $Tuple2((((de ++ fH) ++ fY) ++ fK), fW)
993+ else throw("Strict value is not equal to itself.")
994+ }
995+ else throw("Strict value is not equal to itself.")
996+ }
997+ else throw("Strict value is not equal to itself.")
998+ }
999+ else throw("Strict value is not equal to itself.")
1000+ }
1001+ else throw("Strict value is not equal to itself.")
1002+ }
1003+
1004+
1005+
1006+@Callable(dL)
1007+func putOneTknREADONLY (ec,eb) = {
1008+ let gb = ea(eb, aY(ec), unit, unit)
1009+ let fV = gb._1
1010+ let de = gb._2
1011+ let dZ = gb._3
1012+ let fU = gb._4
1013+ let eg = gb._5
1014+ $Tuple2(nil, $Tuple3(fV, dZ, fU))
1015+ }
1016+
1017+
1018+
1019+@Callable(dL)
1020+func getOneTkn (gc,fO) = {
1021+ let fQ = {
1022+ let aR = invoke(aO, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1023+ if ($isInstanceOf(aR, "Boolean"))
1024+ then aR
1025+ else throw(($getType(aR) + " couldn't be cast to Boolean"))
1026+ }
1027+ let gd = if (if (aT())
1028+ then true
1029+ else (bg == n))
1030+ then true
1031+ else fQ
1032+ let eH = [if (if (!(gd))
1033+ then true
1034+ else fc(dL))
1035+ then true
1036+ else aL("get operation is blocked by admin"), if ((size(dL.payments) == 1))
1037+ then true
1038+ else aL("exactly 1 payment are expected")]
1039+ if ((eH == eH))
1040+ then {
1041+ let eG = aY(gc)
1042+ let fS = dL.payments[0]
1043+ let ec = fS.assetId
1044+ let eo = fS.amount
1045+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1046+ if ((ds == ds))
1047+ then {
1048+ let ab = dL.caller
1049+ let ac = dL.transactionId
1050+ let ge = eF(eG, eo, ec, ab, ac)
1051+ if ((ge == ge))
1052+ then {
1053+ let eI = ge._5
1054+ let fU = ge._4
1055+ let dZ = ge._3
1056+ let de = ge._2
1057+ let gf = ge._1
1058+ let dT = if (if ((fO > 0))
1059+ then (fO > gf)
1060+ else false)
1061+ then aL(makeString(["amount to receive is less than ", toString(fO)], ""))
1062+ else gf
1063+ let gg = invoke(aO, "burn", [eo], [AttachedPayment(ec, eo)])
1064+ if ((gg == gg))
1065+ then {
1066+ let gh = [ScriptTransfer(ab, dT, eG)]
1067+ let fY = if ((dZ > 0))
1068+ then [ScriptTransfer(aP, dZ, eG)]
1069+ else nil
1070+ let gi = {
1071+ let gj = if ((this == aP))
1072+ then 0
1073+ else dZ
1074+ if (eI)
1075+ then $Tuple2(-((dT + gj)), 0)
1076+ else $Tuple2(0, -((dT + gj)))
1077+ }
1078+ let du = gi._1
1079+ let dv = gi._2
1080+ let gk = dt(du, dv, 0)
1081+ let fK = gk._1
1082+ let dk = gk._2
1083+ let fL = dx(ds, dk)
1084+ if ((fL == fL))
1085+ then $Tuple2((((de ++ gh) ++ fY) ++ fK), dT)
1086+ else throw("Strict value is not equal to itself.")
1087+ }
1088+ else throw("Strict value is not equal to itself.")
1089+ }
1090+ else throw("Strict value is not equal to itself.")
1091+ }
1092+ else throw("Strict value is not equal to itself.")
1093+ }
1094+ else throw("Strict value is not equal to itself.")
1095+ }
1096+
1097+
1098+
1099+@Callable(dL)
1100+func getOneTknREADONLY (eG,eo) = {
1101+ let gl = eF(aY(eG), eo, bh, unit, unit)
1102+ let gf = gl._1
1103+ let de = gl._2
1104+ let dZ = gl._3
1105+ let fU = gl._4
1106+ let eI = gl._5
1107+ $Tuple2(nil, $Tuple3(gf, dZ, fU))
1108+ }
1109+
1110+
1111+
1112+@Callable(dL)
1113+func unstakeAndGetOneTkn (gm,gc,fO) = {
1114+ let fQ = {
1115+ let aR = invoke(aO, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1116+ if ($isInstanceOf(aR, "Boolean"))
1117+ then aR
1118+ else throw(($getType(aR) + " couldn't be cast to Boolean"))
1119+ }
1120+ let gd = if (if (aT())
1121+ then true
1122+ else (bg == n))
1123+ then true
1124+ else fQ
1125+ let eH = [if (if (!(gd))
1126+ then true
1127+ else fc(dL))
1128+ then true
1129+ else aL("get operation is blocked by admin"), if ((size(dL.payments) == 0))
1130+ then true
1131+ else aL("no payments are expected")]
1132+ if ((eH == eH))
1133+ then {
1134+ let eG = aY(gc)
1135+ let ab = dL.caller
1136+ let ac = dL.transactionId
1137+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1138+ if ((ds == ds))
1139+ then {
1140+ let gn = invoke(bn, "unstake", [toBase58String(bh), gm], nil)
1141+ if ((gn == gn))
1142+ then {
1143+ let go = eF(eG, gm, bh, ab, ac)
1144+ if ((go == go))
1145+ then {
1146+ let eI = go._5
1147+ let fU = go._4
1148+ let dZ = go._3
1149+ let de = go._2
1150+ let gf = go._1
1151+ let dT = if (if ((fO > 0))
1152+ then (fO > gf)
1153+ else false)
1154+ then aL(makeString(["amount to receive is less than ", toString(fO)], ""))
1155+ else gf
1156+ let gg = invoke(aO, "burn", [gm], [AttachedPayment(bh, gm)])
1157+ if ((gg == gg))
1158+ then {
1159+ let gh = [ScriptTransfer(dL.caller, dT, eG)]
1160+ let fY = if ((dZ > 0))
1161+ then [ScriptTransfer(aP, dZ, eG)]
1162+ else nil
1163+ let gp = {
1164+ let gj = if ((this == aP))
1165+ then 0
1166+ else dZ
1167+ if (eI)
1168+ then $Tuple2(-((dT + gj)), 0)
1169+ else $Tuple2(0, -((dT + gj)))
1170+ }
1171+ let du = gp._1
1172+ let dv = gp._2
1173+ let gq = dt(du, dv, 0)
1174+ let fK = gq._1
1175+ let dk = gq._2
1176+ let fL = dx(ds, dk)
1177+ if ((fL == fL))
1178+ then $Tuple2((((de ++ gh) ++ fY) ++ fK), dT)
1179+ else throw("Strict value is not equal to itself.")
1180+ }
1181+ else throw("Strict value is not equal to itself.")
1182+ }
1183+ else throw("Strict value is not equal to itself.")
1184+ }
1185+ else throw("Strict value is not equal to itself.")
1186+ }
1187+ else throw("Strict value is not equal to itself.")
1188+ }
1189+ else throw("Strict value is not equal to itself.")
1190+ }
1191+
1192+
1193+
1194+@Callable(dL)
1195+func get () = {
1196+ let cP = dK(dL)
1197+ let gr = cP._1
1198+ let cw = cP._2
1199+ let dN = cP._3
1200+ let ce = cP._4
1201+ let cx = cP._5
1202+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1203+ if ((ds == ds))
1204+ then {
1205+ let gs = invoke(aO, "burn", [dN], [AttachedPayment(ce, dN)])
1206+ if ((gs == gs))
1207+ then {
1208+ let gt = dt(-(gr), -(cw), 0)
1209+ let fK = gt._1
1210+ let dk = gt._2
1211+ let fL = dx(ds, dk)
1212+ if ((fL == fL))
1213+ then (cx ++ fK)
1214+ else throw("Strict value is not equal to itself.")
1215+ }
1216+ else throw("Strict value is not equal to itself.")
1217+ }
1218+ else throw("Strict value is not equal to itself.")
1219+ }
1220+
1221+
1222+
1223+@Callable(dL)
1224+func getNoLess (gu,gv) = {
1225+ let cP = dK(dL)
1226+ let cv = cP._1
1227+ let cw = cP._2
1228+ let dN = cP._3
1229+ let ce = cP._4
1230+ let cx = cP._5
1231+ if ((gu > cv))
1232+ then throw(((("noLessThenAmtAsset failed: " + toString(cv)) + " < ") + toString(gu)))
1233+ else if ((gv > cw))
1234+ then throw(((("noLessThenPriceAsset failed: " + toString(cw)) + " < ") + toString(gv)))
1235+ else {
1236+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1237+ if ((ds == ds))
1238+ then {
1239+ let gs = invoke(aO, "burn", [dN], [AttachedPayment(ce, dN)])
1240+ if ((gs == gs))
1241+ then {
1242+ let gw = dt(-(cv), -(cw), 0)
1243+ let fK = gw._1
1244+ let dk = gw._2
1245+ let fL = dx(ds, dk)
1246+ if ((fL == fL))
1247+ then (cx ++ fK)
1248+ else throw("Strict value is not equal to itself.")
1249+ }
1250+ else throw("Strict value is not equal to itself.")
1251+ }
1252+ else throw("Strict value is not equal to itself.")
1253+ }
1254+ }
1255+
1256+
1257+
1258+@Callable(dL)
1259+func unstakeAndGet (dT) = {
1260+ let gx = if ((size(dL.payments) != 0))
1261+ then throw("No payments are expected")
1262+ else true
1263+ if ((gx == gx))
1264+ then {
1265+ let bT = aV()
1266+ let cg = fromBase58String(bT[q])
1267+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1268+ if ((ds == ds))
1269+ then {
1270+ let gn = invoke(bn, "unstake", [toBase58String(cg), dT], nil)
1271+ if ((gn == gn))
1272+ then {
1273+ let cP = cc(toBase58String(dL.transactionId), toBase58String(cg), dT, dL.caller)
1274+ let cv = cP._1
1275+ let cw = cP._2
1276+ let cj = parseIntValue(cP._9)
1277+ let cx = cP._10
1278+ let gy = if (if (aT())
1279+ then true
1280+ else (cj == n))
1281+ then throw(("Get operation is blocked by admin. Status = " + toString(cj)))
1282+ else true
1283+ if ((gy == gy))
1284+ then {
1285+ let gs = invoke(aO, "burn", [dT], [AttachedPayment(cg, dT)])
1286+ if ((gs == gs))
1287+ then {
1288+ let gz = dt(-(cv), -(cw), 0)
1289+ let fK = gz._1
1290+ let dk = gz._2
1291+ let fL = dx(ds, dk)
1292+ if ((fL == fL))
1293+ then (cx ++ fK)
1294+ else throw("Strict value is not equal to itself.")
1295+ }
1296+ else throw("Strict value is not equal to itself.")
1297+ }
1298+ else throw("Strict value is not equal to itself.")
1299+ }
1300+ else throw("Strict value is not equal to itself.")
1301+ }
1302+ else throw("Strict value is not equal to itself.")
1303+ }
1304+ else throw("Strict value is not equal to itself.")
1305+ }
1306+
1307+
1308+
1309+@Callable(dL)
1310+func unstakeAndGetNoLess (gm,gA,gv) = {
1311+ let gd = if (aT())
1312+ then true
1313+ else (bg == n)
1314+ let eH = [if (!(gd))
1315+ then true
1316+ else throw("get operation is blocked by admin"), if ((size(dL.payments) == 0))
1317+ then true
1318+ else throw("no payments are expected")]
1319+ if ((eH == eH))
1320+ then {
1321+ let ds = dl(toBigInt(0), toBigInt(0), toBigInt(0))
1322+ if ((ds == ds))
1323+ then {
1324+ let gn = invoke(bn, "unstake", [toBase58String(bh), gm], nil)
1325+ if ((gn == gn))
1326+ then {
1327+ let cP = cc(toBase58String(dL.transactionId), toBase58String(bh), gm, dL.caller)
1328+ let cv = cP._1
1329+ let cw = cP._2
1330+ let cx = cP._10
1331+ let gB = [if ((cv >= gA))
1332+ then true
1333+ else throw(makeString(["amount asset amount to receive is less than ", toString(gA)], "")), if ((cw >= gv))
1334+ then true
1335+ else throw(makeString(["price asset amount to receive is less than ", toString(gv)], ""))]
1336+ if ((gB == gB))
1337+ then {
1338+ let gs = invoke(aO, "burn", [gm], [AttachedPayment(bh, gm)])
1339+ if ((gs == gs))
1340+ then {
1341+ let gC = dt(-(cv), -(cw), 0)
1342+ let fK = gC._1
1343+ let dk = gC._2
1344+ let fL = dx(ds, dk)
1345+ if ((fL == fL))
1346+ then (cx ++ fK)
1347+ else throw("Strict value is not equal to itself.")
1348+ }
1349+ else throw("Strict value is not equal to itself.")
1350+ }
1351+ else throw("Strict value is not equal to itself.")
1352+ }
1353+ else throw("Strict value is not equal to itself.")
1354+ }
1355+ else throw("Strict value is not equal to itself.")
1356+ }
1357+ else throw("Strict value is not equal to itself.")
1358+ }
1359+
1360+
1361+
1362+@Callable(dL)
1363+func activate (gD,gE) = if ((toString(dL.caller) != toString(aO)))
1364+ then throw("permissions denied")
1365+ else $Tuple2([StringEntry(ae(), gD), StringEntry(af(), gE)], "success")
1366+
1367+
1368+
1369+@Callable(dL)
1370+func refreshKLp () = {
1371+ let gF = valueOrElse(getInteger(ak), 0)
1372+ let gG = if (((height - gF) >= an))
1373+ then unit
1374+ else aL(makeString([toString(an), " blocks have not passed since the previous call"], ""))
1375+ if ((gG == gG))
1376+ then {
1377+ let dE = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, aj), "0")), aN("invalid kLp"))
1378+ let gH = dt(0, 0, 0)
1379+ let gI = gH._1
1380+ let dk = gH._2
1381+ let dw = if ((dE != dk))
1382+ then gI
1383+ else aL("nothing to refresh")
1384+ $Tuple2(dw, toString(dk))
1385+ }
1386+ else throw("Strict value is not equal to itself.")
1387+ }
1388+
1389+
1390+
1391+@Callable(dL)
1392+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aV())
1393+
1394+
1395+
1396+@Callable(dL)
1397+func getAccBalanceWrapperREADONLY (bF) = $Tuple2(nil, bE(bF))
1398+
1399+
1400+
1401+@Callable(dL)
1402+func calcPricesWrapperREADONLY (bN,bO,bS) = {
1403+ let cb = bR(bN, bO, bS)
1404+ $Tuple2(nil, [toString(cb[0]), toString(cb[1]), toString(cb[2])])
1405+ }
1406+
1407+
1408+
1409+@Callable(dL)
1410+func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
1411+
1412+
1413+
1414+@Callable(dL)
1415+func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
1416+
1417+
1418+
1419+@Callable(dL)
1420+func calcPriceBigIntWrapperREADONLY (bH,bI) = $Tuple2(nil, toString(bG(parseBigIntValue(bH), parseBigIntValue(bI))))
1421+
1422+
1423+
1424+@Callable(dL)
1425+func estimatePutOperationWrapperREADONLY (cd,cz,cA,cB,cC,cD,ab,cE,cF) = $Tuple2(nil, cy(cd, cz, cA, cB, cC, cD, ab, cE, cF))
1426+
1427+
1428+
1429+@Callable(dL)
1430+func estimateGetOperationWrapperREADONLY (cd,ce,cf,ab) = {
1431+ let cP = cc(cd, ce, cf, addressFromStringValue(ab))
1432+ $Tuple2(nil, $Tuple10(cP._1, cP._2, cP._3, cP._4, cP._5, cP._6, cP._7, toString(cP._8), cP._9, cP._10))
1433+ }
1434+
1435+
1436+
1437+@Callable(dL)
1438+func statsREADONLY () = {
1439+ let bT = aV()
1440+ let cg = fromBase58String(bT[q])
1441+ let gJ = bT[r]
1442+ let gK = bT[s]
1443+ let cI = bT[v]
1444+ let cJ = bT[w]
1445+ let bU = parseIntValue(bT[t])
1446+ let bV = parseIntValue(bT[u])
1447+ let gL = valueOrErrorMessage(assetInfo(cg), (("Asset " + toBase58String(cg)) + " doesn't exist")).quantity
1448+ let gM = bE(gJ)
1449+ let gN = bE(gK)
1450+ let gO = if ((gL == 0))
1451+ then [e, e, e]
1452+ else bR(gM, gN, gL)
1453+ let cq = 0
1454+ let gP = H(gO[1], b)
1455+ let gQ = H(gO[2], b)
1456+ let gR = value(getInteger(aO, ay(toString(this))))
1457+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(gM), toString(gN), toString(gL), toString(cq), toString(gP), toString(gQ), toString(gR)], j))
1458+ }
1459+
1460+
1461+
1462+@Callable(dL)
1463+func evaluatePutByAmountAssetREADONLY (cA) = {
1464+ let bT = aV()
1465+ let cg = fromBase58String(bT[q])
1466+ let cG = bT[r]
1467+ let ch = fromBase58String(cG)
1468+ let cH = bT[s]
1469+ let ci = fromBase58String(cH)
1470+ let bU = parseIntValue(bT[t])
1471+ let bV = parseIntValue(bT[u])
1472+ let cj = bT[p]
1473+ let gL = valueOrErrorMessage(assetInfo(cg), (("Asset " + toBase58String(cg)) + " doesn't exist")).quantity
1474+ let gM = bE(cG)
1475+ let gN = bE(cH)
1476+ let bP = D(gM, bU)
1477+ let bQ = D(gN, bV)
1478+ let cp = if ((gL == 0))
1479+ then e
1480+ else bG(bQ, bP)
1481+ let cM = D(cA, bU)
1482+ let cN = fraction(cM, cp, d)
1483+ let cC = H(cN, bV)
1484+ let dR = cy("", 500000, cA, ch, cC, ci, "", true, false)
1485+ let cX = dR._1
1486+ let gS = dR._3
1487+ let cl = dR._4
1488+ let cn = dR._5
1489+ let ck = dR._6
1490+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cX), toString(H(cp, b)), toString(cl), toString(cn), toString(ck), cj, toString(cA), toString(cC)], j))
1491+ }
1492+
1493+
1494+
1495+@Callable(dL)
1496+func evaluatePutByPriceAssetREADONLY (cC) = {
1497+ let bT = aV()
1498+ let cg = fromBase58String(bT[q])
1499+ let cG = bT[r]
1500+ let ch = fromBase58String(cG)
1501+ let cH = bT[s]
1502+ let ci = fromBase58String(cH)
1503+ let bU = parseIntValue(bT[t])
1504+ let bV = parseIntValue(bT[u])
1505+ let cj = bT[p]
1506+ let gL = valueOrErrorMessage(assetInfo(cg), (("Asset " + toBase58String(cg)) + " doesn't exist")).quantity
1507+ let gT = bE(cG)
1508+ let gU = bE(cH)
1509+ let gV = D(gT, bU)
1510+ let gW = D(gU, bV)
1511+ let cp = if ((gL == 0))
1512+ then e
1513+ else bG(gW, gV)
1514+ let cN = D(cC, bV)
1515+ let cM = fraction(cN, d, cp)
1516+ let cA = H(cM, bU)
1517+ let dR = cy("", 500000, cA, ch, cC, ci, "", true, false)
1518+ let cX = dR._1
1519+ let gS = dR._3
1520+ let cl = dR._4
1521+ let cn = dR._5
1522+ let ck = dR._6
1523+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d%d", toString(cX), toString(H(cp, b)), toString(cl), toString(cn), toString(ck), cj, toString(cA), toString(cC)], j))
1524+ }
1525+
1526+
1527+
1528+@Callable(dL)
1529+func evaluateGetREADONLY (gX,gY) = {
1530+ let cP = cc("", gX, gY, this)
1531+ let cv = cP._1
1532+ let cw = cP._2
1533+ let cl = cP._5
1534+ let cn = cP._6
1535+ let ck = cP._7
1536+ let cq = cP._8
1537+ let cj = parseIntValue(cP._9)
1538+ $Tuple2(nil, makeString(["%d%d%d%d%d%d%d", toString(cv), toString(cw), toString(cl), toString(cn), toString(ck), toString(cq), toString(cj)], j))
1539+ }
1540+
1541+
1542+@Verifier(gZ)
1543+func ha () = {
1544+ let hb = {
1545+ let dW = eZ()
1546+ if ($isInstanceOf(dW, "ByteVector"))
1547+ then {
1548+ let fd = dW
1549+ fd
1550+ }
1551+ else if ($isInstanceOf(dW, "Unit"))
1552+ then gZ.senderPublicKey
1553+ else throw("Match error")
1554+ }
1555+ let dW = gZ
1556+ if ($isInstanceOf(dW, "Order"))
1557+ then {
1558+ let dA = dW
1559+ let hc = aU()
1560+ let hd = dz(dA)
1561+ let aD = hd._1
1562+ let aE = hd._2
1563+ let aF = sigVerify(dA.bodyBytes, dA.proofs[0], dA.senderPublicKey)
1564+ let aG = sigVerify(dA.bodyBytes, dA.proofs[1], hc)
1565+ if (if (if (aD)
1566+ then aF
1567+ else false)
1568+ then aG
1569+ else false)
1570+ then true
1571+ else aC(aD, aE, aF, aG)
1572+ }
1573+ else if ($isInstanceOf(dW, "SetScriptTransaction"))
1574+ then {
1575+ let fa = dW
1576+ if (sigVerify(gZ.bodyBytes, gZ.proofs[0], hb))
1577+ then true
1578+ else {
1579+ let he = blake2b256(value(fa.script))
1580+ let hf = fromBase64String(value(getString(aO, aA())))
1581+ let hg = scriptHash(this)
1582+ if ((hf == he))
1583+ then (hg != he)
1584+ else false
1585+ }
1586+ }
1587+ else sigVerify(gZ.bodyBytes, gZ.proofs[0], hb)
1588+ }
1589+

github/deemru/w8io/026f985 
66.61 ms