tx · ANuvAdbbymxB8qAAY2yskfJ5FfK81Yvqq4GyN59CL7yd

3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT:  -0.03200000 Waves

2023.02.09 10:53 [2441822] smart account 3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT > SELF 0.00000000 Waves

{ "type": 13, "id": "ANuvAdbbymxB8qAAY2yskfJ5FfK81Yvqq4GyN59CL7yd", "fee": 3200000, "feeAssetId": null, "timestamp": 1675929164487, "version": 1, "sender": "3N7b3kPunHUXhZp1vMG9NhPMARNEprCMWxT", "senderPublicKey": "AYbpHveq7zviKTDV7SGTB1pZGFbkumgfq3jSwVv6BznT", "proofs": [ "3wSyExSW6xHRJXmspjmQcPcMhg6F3TRTdoj3iRtnye3wgbLKEWBdP6oyRGN1Fmti6xHDw17vPhY1qG3RcAvMvMkK" ], "script": "base64:BgKcKQgCEgQKAgEEEgYKBAEEAQgSAwoBCBIAEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIQa2V5RmFjdG9yeUNvbmZpZyINa2V5TWF0Y2hlclB1YiIpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMiE3Bvb2xDb250cmFjdEFkZHJlc3MiDWtleVBvb2xDb25maWciCWlBbXRBc3NldCILaVByaWNlQXNzZXQiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciITa2V5QWxsUG9vbHNTaHV0ZG93biINa2V5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciD2ZhY3RvcnlDb250cmFjdCITZmVlQ29sbGVjdG9yQWRkcmVzcyIFaW5GZWUiAUAiBm91dEZlZSIQaXNHbG9iYWxTaHV0ZG93biITZ2V0TWF0Y2hlclB1Yk9yRmFpbCINZ2V0UG9vbENvbmZpZyIIYW10QXNzZXQiCnByaWNlQXNzZXQiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3OTA2ODA3MiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIgphbXRBc3NldElkIgxwcmljZUFzc2V0SWQiEmFjY0FtdEFzc2V0QmFsYW5jZSIUYWNjUHJpY2VBc3NldEJhbGFuY2UiDW9yZGVyQW10QXNzZXQiEG9yZGVyQW10QXNzZXRTdHIiD29yZGVyUHJpY2VBc3NldCISb3JkZXJQcmljZUFzc2V0U3RyIgpvcmRlclByaWNlIghwcmljZURjbSIQY2FzdGVkT3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgZhbW91bnQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiByRtYXRjaDAiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIDZmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI5NjkyMzI2MiIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMzI2NjIzNDE1IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzNTQ3MjM2MTEiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI1MDg4MjUyNTUiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjgzNTI2ODkxIgt0b3RhbEFtb3VudCINJHQwMjY4OTUyNzEyMSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCIJaXNNYW5hZ2VyIgJwayILbXVzdE1hbmFnZXIiAnBkIg1jbGVhbkFtb3VudEluIglpc1JldmVyc2UiDSR0MDI4Nzk4MjkxMDMiCGFzc2V0T3V0Igdhc3NldEluIhJwb29sQXNzZXRJbkJhbGFuY2UiE3Bvb2xBc3NldE91dEJhbGFuY2UiCWFtb3VudE91dCIEb2xkSyIEbmV3SyIGY2hlY2tLIgxhbW91bnRPdXRNaW4iCWFkZHJlc3NUbyIIY2hlY2tNaW4iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzNDI5NDM0NDI0IgVib251cyITZW1pdEFtb3VudEVzdGltYXRlZCIKZW1pdEFtb3VudCIIc3Rha2VJbnYiB3NlbmRGZWUiDSR0MDM1MTUzMzUyODgiDW91dEFzc2V0SWRTdHIiDWlzR2V0RGlzYWJsZWQiDSR0MDM2MDkzMzYyMjgiD2Ftb3VudEVzdGltYXRlZCIHYnVybkludiINYXNzZXRUcmFuc2ZlciINJHQwMzY4NjMzNzAwMSINdW5zdGFrZUFtb3VudCIKdW5zdGFrZUludiINJHQwMzc4MjYzNzk1OSIJb3V0QW10QW10IhRidXJuTFBBc3NldE9uRmFjdG9yeSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoZQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBVwACESVzJXNfX3ByaWNlX19sYXN0AQFYAgFZAVoJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFZCQDMCAIJAKQDAQUBWgUDbmlsBQFqAQJhYQICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQJhYgICX18FAmFjAQJhZAICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQJhYgICX18FAmFjAQJhZQACDyVzX19hbW91bnRBc3NldAECYWYAAg4lc19fcHJpY2VBc3NldAECYWcAAhElc19fZmFjdG9yeUNvbmZpZwECYWgAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmFpAQJhagkArAICCQCsAgICCCVzJXMlc19fBQJhagIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmFrAgJhbAJhbQkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYWwCAl9fBQJhbQIIX19jb25maWcBAmFuAQJhbwkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhbwECYXAAAgwlc19fc2h1dGRvd24BAmFxAQJhcgkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFyAQJhcwACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhdAIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmF1AwJhdgJhdwJheAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYXYCDSBzZW5kZXJWYWxpZD0JAKUDAQUCYXcCDiBtYXRjaGVyVmFsaWQ9CQClAwEFAmF4AQJheQICYXoCYUEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJhegUCYUEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXoJAMwIAgIBLgkAzAgCBQJhQQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhQgICYXoCYUEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQJhegUCYUEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXoJAMwIAgIBLgkAzAgCBQJhQQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhQwECYUQJAAIBCQC5CQIJAMwIAgIIbHAucmlkZToJAMwIAgUCYUQFA25pbAIBIAACYUUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJheQIFBHRoaXMJAQFUAAACYUYJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJheQIFAmFFBQJhdAACYUcKAAJhSAkA/AcEBQJhRQIQZ2V0SW5GZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFIAgNJbnQFAmFICQACAQkArAICCQADAQUCYUgCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAACYUkKAAJhSAkA/AcEBQJhRQIRZ2V0T3V0RmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhSAIDSW50BQJhSAkAAgEJAKwCAgkAAwEFAmFIAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBAmFKAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJhRQkBAmFwAAcBAmFLAAkA2QQBCQECYXkCBQJhRQkBAmFoAAECYUwABAJhTQkBAmF5AgUEdGhpcwkBAmFlAAQCYU4JAQJheQIFBHRoaXMJAQJhZgAEAmFtCQECYUICBQJhRQkBAmFuAQUCYU4EAmFsCQECYUICBQJhRQkBAmFuAQUCYU0JALUJAgkBAmF5AgUCYUUJAQJhawIJAKQDAQUCYWwJAKQDAQUCYW0FAWoBAmFPAQJhUAMJAAACBQJhUAUBaQUEdW5pdAkA2QQBBQJhUAECYVEBAmFQAwkAAAIFAmFQBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFQAQJhUgECYVMJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhUwUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQFwCQDZBAEJAJEDAgUCYVMFAXEJAQJhTwEJAJEDAgUCYVMFAXIJAQJhTwEJAJEDAgUCYVMFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQF1AAJhVAkBAmFSAQkBAmFMAAACYVUFAmFUAAJhVggFAmFVAl8xAAJhVwgFAmFVAl8yAAJhWAgFAmFVAl8zAAJhWQgFAmFVAl80AAJhWggFAmFVAl81AAJiYQgFAmFVAl82AAJiYggFAmFVAl83AQJiYwAJALUJAgkBAmF5AgUCYUUJAQJhZwAFAWoAAmJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYmMABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJjAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmYKAmJnAmJoAmJpAmJqAmJrAmJsAmJtAmJuAmJvAmJwCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJicAUDbmlsBQFqAQJicQYCYnICYnMCYnQCYmoCYm0CYm4JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJicgkAzAgCCQCkAwEFAmJzCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJtCQDMCAIJAKQDAQUCYm4FA25pbAUBagECYnUBAmJ2AwkAAAIFAmJ2AgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJidgECYncCAmJ4AmJ5CQC8AgMFAmJ4BQFkBQJieQECYnoEAmJBAmJCAmJDAmJEBAJiRQkBAUQCBQJiQwUCYkEEAmJGCQEBRAIFAmJEBQJiQgkBAmJ3AgUCYkYFAmJFAQJiRwMCYkMCYkQCYkgEAmJJCQECYUwABAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiTAkBAmJ6BAUCYkoFAmJLBQJiQwUCYkQEAmJ5CQEBRAIFAmJDBQJiSgQCYngJAQFEAgUCYkQFAmJLBAJiTQkBAUQCBQJiSAUBYgQCYk4JAQJidwIFAmJ5BQJiTQQCYk8JAQJidwIFAmJ4BQJiTQkAzAgCBQJiTAkAzAgCBQJiTgkAzAgCBQJiTwUDbmlsAQJiUAMCYkMCYkQCYkgEAmJRCQECYkcDBQJiQwUCYkQFAmJICQDMCAIJAQFIAgkAkQMCBQJiUQAABQFiCQDMCAIJAQFIAgkAkQMCBQJiUQABBQFiCQDMCAIJAQFIAgkAkQMCBQJiUQACBQFiBQNuaWwBAmJSBAJiUwJiVAJiVQJhYgQCYkkJAQJhTAAEAmJWCQCRAwIFAmJJBQFxBAJiVwkAkQMCBQJiSQUBcgQCYlgJAJEDAgUCYkkFAXMEAmJBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmJZCQCRAwIFAmJJBQFwBAJiWggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiVgUCYlQJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmNhCQECYnUBBQJiVwQCY2IJAQFEAgUCY2EFAmJBBAJjYwkBAmJ1AQUCYlgEAmNkCQEBRAIFAmNjBQJiQgQCY2UJAQJidwIFAmNkBQJjYgQCY2YJAQFIAgUCY2UFAWIEAmNnCQEBRAIFAmJVBQFiBAJjaAkBAUQCBQJiWgUBYgQCY2kJALwCAwUCY2IFAmNnBQJjaAQCY2oJALwCAwUCY2QFAmNnBQJjaAQCY2sJAQFIAgUCY2kFAmJBBAJjbAkBAUgCBQJjagUCYkIEAmNtAwkAAAIFAmJTAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCY2sDCQAAAgUCYlcCBVdBVkVTBQR1bml0CQDZBAEFAmJXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjbAMJAAACBQJiWAIFV0FWRVMFBHVuaXQJANkEAQUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCYlMJAQJicQYFAmNrBQJjbAUCYlUFAmNmBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmBQNuaWwJAJwKCgUCY2sFAmNsBQJiVwUCYlgFAmNhBQJjYwUCYloFAmNlBQJiWQUCY20BAmNuCQJiUwJjbwJjcAJjcQJjcgJjcwJhYgJjdAJjdQQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmN2CQCRAwIFAmJJBQFyBAJjdwkAkQMCBQJiSQUBcwQCY3gJAJEDAgUCYkkFAXYEAmN5CQCRAwIFAmJJBQF3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiWQkAkQMCBQJiSQUBcAQCYloICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlYJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlYCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjegkA2AQBCQELdmFsdWVPckVsc2UCBQJjcQkA2QQBAgVXQVZFUwQCY0EJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY3MJANkEAQIFV0FWRVMDAwkBAiE9AgUCY3YFAmN6BgkBAiE9AgUCY3cFAmNBCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCY2EDBQJjdAkBAmJ1AQUCY3YJAGUCCQECYnUBBQJjdgUCY3AEAmNjAwUCY3QJAQJidQEFAmN3CQBlAgkBAmJ1AQUCY3cFAmNyBAJjQgkBAUQCBQJjcAUCYkoEAmNDCQEBRAIFAmNyBQJiSwQCY0QJAQJidwIFAmNDBQJjQgQCY2IJAQFEAgUCY2EFAmJKBAJjZAkBAUQCBQJjYwUCYksEAmNFAwkAAAIFAmJaAAAEAmNlBQFlBAJjRgUBZQQCYk0JAHYGCQC5AgIFAmNCBQJjQwAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJiTQUBYgkBAUgCBQJjQgUCYkoJAQFIAgUCY0MFAmJLCQECYncCCQC3AgIFAmNkBQJjQwkAtwICBQJjYgUCY0IFAmNGBAJjZQkBAmJ3AgUCY2QFAmNiBAJjRgkAvAIDCQEBUgEJALgCAgUCY2UFAmNEBQFkBQJjZQQCY0cJAQFEAgUCY28FAWIDAwkBAiE9AgUCY2UFAWUJAL8CAgUCY0YFAmNHBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjRgIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNHBAJjaAkBAUQCBQJiWgUBYgQCY0gJALwCAwUCY0IFAmNlBQFkBAJjSQkAvAIDBQJjQwUBZAUCY2UEAmNKAwkAvwICBQJjSAUCY0MJAJQKAgUCY0kFAmNDCQCUCgIFAmNCBQJjSAQCY0sIBQJjSgJfMQQCY0wIBQJjSgJfMgQCYk0JALwCAwUCY2gFAmNMBQJjZAkAlwoFCQEBSAIFAmJNBQFiCQEBSAIFAmNLBQJiSgkBAUgCBQJjTAUCYksFAmNlBQJjRgQCY00IBQJjRQJfMQQCY04IBQJjRQJfMgQCY08IBQJjRQJfMwQCY2YJAQFIAggFAmNFAl80BQFiBAJjUAkBAUgCCAUCY0UCXzUFAWIDCQBnAgAABQJjTQkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY1EDCQEBIQEFAmN1AAAFAmNNBAJjUgkAZQIFAmNwBQJjTgQCY1MJAGUCBQJjcgUCY08EAmNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAmFiBQJiUwkBAmJmCgUCY04FAmNPBQJjUQUCY2YFAmNvBQJjUAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY1IFAmNTBQNuaWwJAJ8KDQUCY00FAmNRBQJjZgUCY2EFAmNjBQJiWgUCYlYFAmJZBQJjVAUCY1IFAmNTBQJjcQUCY3MBAmNVAQJjVgQCYkkJAQJhTAAEAmNXCQCRAwIFAmJJBQFyBAJjWAkAkQMCBQJiSQUBcwQCYlkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBcAQCYkoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdAQCYksJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdQQCY1kJAQJidQEFAmNXBAJjWgkBAmJ1AQUCY1gEAmNlAwkAAAIIBQJjVglvcmRlclR5cGUFA0J1eQkBAmJ6BAUCYkoFAmJLCQBkAgUCY1kIBQJjVgZhbW91bnQFAmNaCQECYnoEBQJiSgUCYksJAGUCBQJjWQgFAmNWBmFtb3VudAUCY1oEAmNmCQEBSAIFAmNlBQFiAwMDCQECYUoABgkAAAIFAmJZBQFtBgkAAAIFAmJZBQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAQCZGEICAUCY1YJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BAJkYgMJAAACBQJkYQUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGEEAmRjCAgFAmNWCWFzc2V0UGFpcgpwcmljZUFzc2V0BAJkZAMJAAACBQJkYwUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGMDAwkBAiE9AgUCZGIFAmNXBgkBAiE9AgUCZGQFAmNYCQACAQITV3Jvbmcgb3JkZXIgYXNzZXRzLgQCZGUIBQJjVgVwcmljZQQCZGYJAGsDBQFiBQJiSwUCYkoEAmRnCQEBTQMFAmRlBQFiBQJkZgQCZGgDCQAAAggFAmNWCW9yZGVyVHlwZQUDQnV5CQBnAgUCY2YFAmRnCQBnAgUCZGcFAmNmBgECZGkBAmRqAwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAQkAAgECHWV4YWN0bHkgMSBwYXltZW50IGlzIGV4cGVjdGVkBAJkawkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCYlQJAQV2YWx1ZQEIBQJkawdhc3NldElkBAJkbAgFAmRrBmFtb3VudAQCY0UJAQJiUgQJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQJANgEAQUCYlQFAmRsCAUCZGoGY2FsbGVyBAJjawgFAmNFAl8xBAJjbAgFAmNFAl8yBAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCY0UCXzkEAmNtCAUCY0UDXzEwAwMJAQJhSgAGCQAAAgUCYlkFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZCQCXCgUFAmNrBQJjbAUCZGwFAmJUBQJjbQECZG0DAmRqAmNvAmN1AwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmRuCQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABAJkbwkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAQQCZHAJAQJjbgkJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQFAmNvCAUCZG4GYW1vdW50CAUCZG4HYXNzZXRJZAgFAmRvBmFtb3VudAgFAmRvB2Fzc2V0SWQJAKUIAQgFAmRqBmNhbGxlcgcFAmN1BAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCZHACXzgDAwMJAQJhSgAGCQAAAgUCYlkFAWwGCQAAAgUCYlkFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZBQJkcAECZHEBAmRyBAJkcwkA/AcEBQJhRQIEZW1pdAkAzAgCBQJkcgUDbmlsBQNuaWwDCQAAAgUCZHMFAmRzBAJkdAQCZHUFAmRzAwkAAQIFAmR1AgdBZGRyZXNzBAJkdgUCZHUJAPwHBAUCZHYCBGVtaXQJAMwIAgUCZHIFA25pbAUDbmlsBQR1bml0AwkAAAIFAmR0BQJkdAUCZHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmR3AgJkcgJkeAQCZHkDCQAAAgUCZHgAAAAACQBrAwUCZHIFAmR4BQFiCQCUCgIJAGUCBQJkcgUCZHkFAmR5AQJkegQCZEECZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmRECQECYnUBCQECYVEBBQJhWQQCZEUJAQJidQEJAQJhUQEFAmFaBAJkRgMJAAACBQJkQgUCYVkGAwkAAAIFAmRCBQJhWgcJAQJhQwECDWludmFsaWQgYXNzZXQEAmRHAwUCZEMJAJQKAgUCZEQFAmRFAwUCZEYJAJQKAgkAZQIFAmREBQJkQQUCZEUJAJQKAgUCZEQJAGUCBQJkRQUCZEEEAmRICAUCZEcCXzEEAmRJCAUCZEcCXzIEAmRKAwUCZEYJAJQKAgUCZEEAAAkAlAoCAAAFAmRBBAJkSwgFAmRKAl8xBAJkTAgFAmRKAl8yBAJkTQgJAQJkdwIFAmRLBQJhRwJfMQQCZE4ICQECZHcCBQJkTAUCYUcCXzEEAmRPCQECZHcCBQJkQQUCYUcEAmRQCAUCZE8CXzEEAmR5CAUCZE8CXzIEAmRRCQBkAgUCZEgFAmRNBAJkUgkAZAIFAmRJBQJkTgQCZFMJAQJidwIJAQFEAgUCZFIFAmJiCQEBRAIFAmRRBQJiYQQCZFQJAQFIAgUCZFMFAWIEAmRVAwUCZEYFAmRIBQJkSQQCZFYJALYCAQUCZFUEAmRXCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVgJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkWAMJAL8CAgUCZFcFAWYGCQECYUMBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRYBQJkWAQCZFkJALYCAQUCZFAEAmRaCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRXCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFkFAWQFAmRWABIAEgUERE9XTgUBZAUBZAUDbmlsBAJjVAMFAmRDBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJmCgUCZEsFAmRMBQJkWgUCZFQAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJlYQkBAmJ3AgkBAUQCBQJkSQUCYmIJAQFEAgUCZEgFAmJhBAJlYgkBAUgCBQJlYQUBYgQCZWMEAmVkAwUCZEYJAJQKAgUCZEsFAmRICQCUCgIFAmRMBQJkSQQCZHIIBQJlZAJfMQQCZWUIBQJlZAJfMgQCZWYJAKADAQkAvAIDBQJkVwkAtgIBCQBpAgUCZHIAAgkAtgIBBQJlZQkAawMJAGUCBQJkWgUCZWYFAWIFAmVmCQCWCgQFAmRaBQJjVAUCZHkFAmVjCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlZwUCZWgCZFACZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmVpCQDMCAIDCQAAAgUCZEIFAmFYBgkBAmFDAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmVpBQJlaQQCZWoDCQAAAgUCZWgFAmFZBgMJAAACBQJlaAUCYVoHCQECYUMBAg1pbnZhbGlkIGFzc2V0BAJlawMFAmVqCQC2AgEJAQJidQEJAQJhUQEFAmFZCQC2AgEJAQJidQEJAQJhUQEFAmFaBAJlbAkBAmJ1AQkBAmFRAQUCYVkEAmVtCQECYnUBCQECYVEBBQJhWgQCZW4DBQJlagUCZWwFAmVtBAJlbwkAtgIBBQJlbgQCZFcJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJhWAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJhWAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmVwCQC2AgEFAmRQBAJlcQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlawkAuAICBQFkCQB2BgkAuAICBQFkCQC6AgIJALkCAgUCZXAFAWQFAmRXABIFAWgAAAASBQRET1dOBQFkBQNuaWwEAmVyCQECZHcCBQJlcQUCYUkEAmVzCAUCZXICXzEEAmR5CAUCZXICXzIEAmV0AwUCZWoJAJYKBAUCZXMAAAkAZQIFAmVsBQJlcQUCZW0JAJYKBAAABQJlcwUCZWwJAGUCBQJlbQUCZXEEAmV1CAUCZXQCXzEEAmV2CAUCZXQCXzIEAmV3CAUCZXQCXzMEAmV4CAUCZXQCXzQEAmRTCQECYncCCQEBRAIFAmV4BQJiYgkBAUQCBQJldwUCYmEEAmRUCQEBSAIFAmRTBQFiBAJjVAMFAmRDBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJxBgUCZXUFAmV2BQJkUAUCZFQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQFA25pbAQCZWEJAQJidwIJAQFEAgUCZW0FAmJiCQEBRAIFAmVsBQJiYQQCZWIJAQFIAgUCZWEFAWIEAmVjBAJleQkAaAIJAKADAQkAvAIDBQJlawUCZXAFAmRXAAIJAGsDCQBlAgUCZXMFAmV5BQFiBQJleQkAlgoEBQJlcwUCY1QFAmR5BQJlYwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXoABAJkdQkAoggBCQEBVQADCQABAgUCZHUCBlN0cmluZwQCZUEFAmR1CQDZBAEFAmVBAwkAAQIFAmR1AgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVCAAQCZHUJAKIIAQkBAVYAAwkAAQIFAmR1AgZTdHJpbmcEAmVBBQJkdQkA2QQBBQJlQQMJAAECBQJkdQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlQwECZGoEAmR1CQECZXoAAwkAAQIFAmR1AgpCeXRlVmVjdG9yBAJlRAUCZHUJAAACCAUCZGoPY2FsbGVyUHVibGljS2V5BQJlRAMJAAECBQJkdQIEVW5pdAkAAAIIBQJkagZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZUUBAmRqBAJlRgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkdQkBAmV6AAMJAAECBQJkdQIKQnl0ZVZlY3RvcgQCZUQFAmR1AwkAAAIIBQJkag9jYWxsZXJQdWJsaWNLZXkFAmVEBgUCZUYDCQABAgUCZHUCBFVuaXQDCQAAAggFAmRqBmNhbGxlcgUEdGhpcwYFAmVGCQACAQILTWF0Y2ggZXJyb3IcAmRqASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkCAmVHAmVIBAJlSQMJAAACBQJlSAcEAmVKCQECYXkCBQR0aGlzCQECYWYABAJlSwkBAmF5AgUEdGhpcwkBAmFlAAkAlAoCBQJlSgUCZUsEAmVKCQECYXkCBQR0aGlzCQECYWUABAJlSwkBAmF5AgUEdGhpcwkBAmFmAAkAlAoCBQJlSgUCZUsEAmVKCAUCZUkCXzEEAmVLCAUCZUkCXzIEAmVMCQECYnUBBQJlSwQCZU0JAQJidQEFAmVKBAJlTgkAawMFAmVNBQJlRwkAZAIFAmVMBQJlRwQCZU8JALkCAgkAtgIBBQJlTAkAtgIBBQJlTQQCZVAJALkCAgkAtwICCQC2AgEJAQJidQEFAmVLCQC2AgEFAmVHCQC4AgIJALYCAQkBAmJ1AQUCZUoJALYCAQUCZU4EAmVRAwkAwAICBQJlUAUCZU8GCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZVEFAmVRCQCUCgIFA25pbAUCZU4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBAJlRwJlSAJlUgJlUwQCZWkJAMwIAgMJAGcCCAkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAZhbW91bnQFAmVHBgkBAmFDAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAmRqBmNhbGxlcgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBAmF5AgUEdGhpcwkBAVMABgkBAmFDAQIRUGVybWlzc2lvbiBkZW5pZWQFA25pbAMJAAACBQJlaQUCZWkEAmRrCQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABAJlSwMJAAACCAUCZGsHYXNzZXRJZAUEdW5pdAkA2AQBCQCbAwECBVdBVkVTCQDYBAEJAQV2YWx1ZQEIBQJkawdhc3NldElkBAJlSgMJAAACBQJlSAcJAQJheQIFBHRoaXMJAQJhZgAJAQJheQIFBHRoaXMJAQJhZQAEAmVMCQBlAgkBAmJ1AQUCZUsICQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABmFtb3VudAQCZU0JAQJidQEFAmVKBAJlTgkAaQIJAGgCBQJlTQUCZUcJAGQCBQJlTAUCZUcEAmVPCQBoAgUCZUwFAmVNBAJlUAkAaAIJAQJidQEFAmVLCQBlAgkBAmJ1AQUCZUoFAmVOBAJlUQMJAGcCBQJlUAUCZU8GCQACAQIUbmV3IEsgaXMgZmV3ZXIgZXJyb3IDCQAAAgUCZVEFAmVRBAJlVAMJAGcCBQJlTgUCZVIGCQACAQIsRXhjaGFuZ2UgcmVzdWx0IGlzIGZld2VyIGNvaW5zIHRoYW4gZXhwZWN0ZWQDCQAAAgUCZVQFAmVUCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmVTBQJlTgMJAAACBQJlSwIFV0FWRVMFBHVuaXQJANkEAQUCZUoFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEKc2V0TWFuYWdlcgECZVUEAmVWCQECZUUBBQJkagMJAAACBQJlVgUCZVYEAmVXCQDZBAEFAmVVAwkAAAIFAmVXBQJlVwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgAFAmVVBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBDmNvbmZpcm1NYW5hZ2VyAAQCZVgJAQJlQgAEAmVZAwkBCWlzRGVmaW5lZAEFAmVYBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlWQUCZVkEAmVaAwkAAAIIBQJkag9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmVYBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJlWgUCZVoJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVUACQDYBAEJAQV2YWx1ZQEFAmVYCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFWAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQNwdXQCAmNvAmZhAwkAZgIAAAUCY28JAAIBAiBJbnZhbGlkIHNsaXBwYWdlVG9sZXJhbmNlIHBhc3NlZAQCZHAJAQJkbQMFAmRqBQJjbwYEAmNRCAUCZHACXzIEAmJWCAUCZHACXzcEAmNtCAUCZHACXzkEAmNSCAUCZHADXzEwBAJjUwgFAmRwA18xMQQCZmIIBQJkcANfMTIEAmZjCAUCZHADXzEzBAJkcwkA/AcEBQJhRQIEZW1pdAkAzAgCBQJjUQUDbmlsBQNuaWwDCQAAAgUCZHMFAmRzBAJkdAQCZHUFAmRzAwkAAQIFAmR1AgdBZGRyZXNzBAJkdgUCZHUJAPwHBAUCZHYCBGVtaXQJAMwIAgUCY1EFA25pbAUDbmlsBQR1bml0AwkAAAIFAmR0BQJkdAQCZmQDCQBmAgUCY1IAAAkA/AcEBQJiZQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmZiBQJjUgUDbmlsBQNuaWwDCQAAAgUCZmQFAmZkBAJmZQMJAGYCBQJjUwAACQD8BwQFAmJlAgNwdXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZmMFAmNTBQNuaWwFA25pbAMJAAACBQJmZQUCZmUEAmZmAwUCZmEEAmZnCQD8BwQFAmJkAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVgUCY1EFA25pbAMJAAACBQJmZwUCZmcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGoGY2FsbGVyBQJjUQUCYlYFA25pbAkAzggCBQJjbQUCZmYJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBCnB1dEZvckZyZWUBAmZoAwkAZgIAAAUCZmgJAAIBAhRJbnZhbGlkIHZhbHVlIHBhc3NlZAQCZHAJAQJkbQMFAmRqBQJmaAcIBQJkcAJfOQJkagEJcHV0T25lVGtuAgJmaQJmagQCZmsKAAJhSAkA/AcEBQJhRQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFIAgdCb29sZWFuBQJhSAkAAgEJAKwCAgkAAwEFAmFIAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmbAMDAwkBAmFKAAYJAAACBQJhVwUBbAYJAAACBQJhVwUBbgYFAmZrBAJlaQkAzAgCAwMJAQEhAQUCZmwGCQECZUMBBQJkagYJAQJhQwECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRqCHBheW1lbnRzAAEGCQECYUMBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmZtCQCRAwIIBQJkaghwYXltZW50cwAABAJkQggFAmZtB2Fzc2V0SWQEAmRBCAUCZm0GYW1vdW50BAJhYggFAmRqBmNhbGxlcgQCYWMIBQJkag10cmFuc2FjdGlvbklkBAJmbgkBAmR6BAUCZEEFAmRCBQJhYgUCYWMDCQAAAgUCZm4FAmZuBAJmbwgFAmZuAl80BAJkeQgFAmZuAl8zBAJjVAgFAmZuAl8yBAJmcAgFAmZuAl8xBAJmcQMDCQBmAgUCZmkAAAkAZgIFAmZpBQJmcAcJAQJhQwEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZmkFA25pbAIABQJmcAQCZHMJAQJkcQEFAmZxAwkAAAIFAmRzBQJkcwQCZmYDBQJmagQCZnIJAPwHBAUCYmQCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFYBQJmcQUDbmlsAwkAAAIFAmZyBQJmcgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkagZjYWxsZXIFAmZxBQJhWAUDbmlsBAJmcwMJAGYCBQJkeQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFGBQJkeQUCZEIFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjVAUCZmYFAmZzBQJmcQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagERcHV0T25lVGtuUkVBRE9OTFkCAmRCAmRBBAJmdAkBAmR6BAUCZEEJAQJhTwEFAmRCBQR1bml0BQR1bml0BAJmcAgFAmZ0Al8xBAJjVAgFAmZ0Al8yBAJkeQgFAmZ0Al8zBAJmbwgFAmZ0Al80CQCUCgIFA25pbAkAlQoDBQJmcAUCZHkFAmZvAmRqAQlnZXRPbmVUa24CAmZ1AmZpBAJmawoAAmFICQD8BwQFAmFFAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYUgCB0Jvb2xlYW4FAmFICQACAQkArAICCQADAQUCYUgCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZ2AwMJAQJhSgAGCQAAAgUCYVcFAW4GBQJmawQCZWkJAMwIAgMDCQEBIQEFAmZ2BgkBAmVDAQUCZGoGCQECYUMBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkaghwYXltZW50cwABBgkBAmFDAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWkFAmVpBAJlaAkBAmFPAQUCZnUEAmZtCQCRAwIIBQJkaghwYXltZW50cwAABAJkQggFAmZtB2Fzc2V0SWQEAmRQCAUCZm0GYW1vdW50BAJhYggFAmRqBmNhbGxlcgQCYWMIBQJkag10cmFuc2FjdGlvbklkBAJmdwkBAmVnBQUCZWgFAmRQBQJkQgUCYWIFAmFjAwkAAAIFAmZ3BQJmdwQCZm8IBQJmdwJfNAQCZHkIBQJmdwJfMwQCY1QIBQJmdwJfMgQCZngIBQJmdwJfMQQCZHIDAwkAZgIFAmZpAAAJAGYCBQJmaQUCZngHCQECYUMBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZpBQNuaWwCAAUCZngEAmZ5CQD8BwQFAmFFAgRidXJuCQDMCAIFAmRQBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmRCBQJkUAUDbmlsAwkAAAIFAmZ5BQJmeQQCZnoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYWIFAmRyBQJlaAUDbmlsBAJmcwMJAGYCBQJkeQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFGBQJkeQUCZWgFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjVAUCZnoFAmZzBQJkcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagERZ2V0T25lVGtuUkVBRE9OTFkCAmVoAmRQBAJmQQkBAmVnBQkBAmFPAQUCZWgFAmRQBQJhWAUEdW5pdAUEdW5pdAQCZngIBQJmQQJfMQQCY1QIBQJmQQJfMgQCZHkIBQJmQQJfMwQCZm8IBQJmQQJfNAkAlAoCBQNuaWwJAJUKAwUCZngFAmR5BQJmbwJkagETdW5zdGFrZUFuZEdldE9uZVRrbgMCZkICZnUCZmkEAmZrCgACYUgJAPwHBAUCYUUCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhSAIHQm9vbGVhbgUCYUgJAAIBCQCsAgIJAAMBBQJhSAIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZnYDAwkBAmFKAAYJAAACBQJhVwUBbgYFAmZrBAJlaQkAzAgCAwMJAQEhAQUCZnYGCQECZUMBBQJkagYJAQJhQwECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRqCHBheW1lbnRzAAAGCQECYUMBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJlaQUCZWkEAmVoCQECYU8BBQJmdQQCYWIIBQJkagZjYWxsZXIEAmFjCAUCZGoNdHJhbnNhY3Rpb25JZAQCZkMJAPwHBAUCYmQCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhWAkAzAgCBQJmQgUDbmlsBQNuaWwDCQAAAgUCZkMFAmZDBAJmRAkBAmVnBQUCZWgFAmZCBQJhWAUCYWIFAmFjAwkAAAIFAmZEBQJmRAQCZm8IBQJmRAJfNAQCZHkIBQJmRAJfMwQCY1QIBQJmRAJfMgQCZngIBQJmRAJfMQQCZHIDAwkAZgIFAmZpAAAJAGYCBQJmaQUCZngHCQECYUMBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZpBQNuaWwCAAUCZngEAmZ5CQD8BwQFAmFFAgRidXJuCQDMCAIFAmZCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFYBQJmQgUDbmlsAwkAAAIFAmZ5BQJmeQQCZnoJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRqBmNhbGxlcgUCZHIFAmVoBQNuaWwEAmZzAwkAZgIFAmR5AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYUYFAmR5BQJlaAUDbmlsBQNuaWwJAJQKAgkAzggCCQDOCAIFAmNUBQJmegUCZnMFAmRyCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQNnZXQABAJjRQkBAmRpAQUCZGoEAmZFCAUCY0UCXzEEAmNsCAUCY0UCXzIEAmRsCAUCY0UCXzMEAmJUCAUCY0UCXzQEAmNtCAUCY0UCXzUEAmZGCQD8BwQFAmFFAgRidXJuCQDMCAIFAmRsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJUBQJkbAUDbmlsAwkAAAIFAmZGBQJmRgUCY20JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBCWdldE5vTGVzcwICZkcCZkgEAmNFCQECZGkBBQJkagQCY2sIBQJjRQJfMQQCY2wIBQJjRQJfMgQCZGwIBQJjRQJfMwQCYlQIBQJjRQJfNAQCY20IBQJjRQJfNQMJAGYCBQJmRwUCY2sJAAIBCQCsAgIJAKwCAgkArAICAhxub0xlc3NUaGVuQW10QXNzZXQgZmFpbGVkOiAgCQCkAwEFAmNrAgMgPCAJAKQDAQUCZkcDCQBmAgUCZkgFAmNsCQACAQkArAICCQCsAgIJAKwCAgIdbm9MZXNzVGhlblByaWNlQXNzZXQgZmFpbGVkOiAJAKQDAQUCY2wCAyA8IAkApAMBBQJmSAQCZkYJAPwHBAUCYUUCBGJ1cm4JAMwIAgUCZGwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlQFAmRsBQNuaWwDCQAAAgUCZkYFAmZGBQJjbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagENdW5zdGFrZUFuZEdldAECZHIEAmZJAwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAAkAAgECGE5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAYDCQAAAgUCZkkFAmZJBAJiSQkBAmFMAAQCYlYJANkEAQkAkQMCBQJiSQUBcQQCZkMJAPwHBAUCYmQCB3Vuc3Rha2UJAMwIAgkA2AQBBQJiVgkAzAgCBQJkcgUDbmlsBQNuaWwDCQAAAgUCZkMFAmZDBAJjRQkBAmJSBAkA2AQBCAUCZGoNdHJhbnNhY3Rpb25JZAkA2AQBBQJiVgUCZHIIBQJkagZjYWxsZXIEAmJZCQENcGFyc2VJbnRWYWx1ZQEIBQJjRQJfOQQCY20IBQJjRQNfMTAEAmZKAwMJAQJhSgAGCQAAAgUCYlkFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZBgMJAAACBQJmSgUCZkoEAmZGCQD8BwQFAmFFAgRidXJuCQDMCAIFAmRyBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJWBQJkcgUDbmlsAwkAAAIFAmZGBQJmRgUCY20JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBE3Vuc3Rha2VBbmRHZXROb0xlc3MDAmZCAmZLAmZIBAJmdgMJAQJhSgAGCQAAAgUCYVcFAW4EAmVpCQDMCAIDCQEBIQEFAmZ2BgkAAgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRqCHBheW1lbnRzAAAGCQACAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWkFAmVpBAJmQwkA/AcEBQJiZAIHdW5zdGFrZQkAzAgCCQDYBAEFAmFYCQDMCAIFAmZCBQNuaWwFA25pbAMJAAACBQJmQwUCZkMEAmNFCQECYlIECQDYBAEIBQJkag10cmFuc2FjdGlvbklkCQDYBAEFAmFYBQJmQggFAmRqBmNhbGxlcgQCY2sIBQJjRQJfMQQCY2wIBQJjRQJfMgQCY20IBQJjRQNfMTAEAmZMCQDMCAIDCQBnAgUCY2sFAmZLBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZLBQNuaWwCAAkAzAgCAwkAZwIFAmNsBQJmSAYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZIBQNuaWwCAAUDbmlsAwkAAAIFAmZMBQJmTAQCZkYJAPwHBAUCYUUCBGJ1cm4JAMwIAgUCZkIFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYVgFAmZCBQNuaWwDCQAAAgUCZkYFAmZGBQJjbQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEIYWN0aXZhdGUCAmZNAmZOAwkBAiE9AgkApQgBCAUCZGoGY2FsbGVyCQClCAEFAmFFCQACAQIScGVybWlzc2lvbnMgZGVuaWVkCQCUCgIJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFlAAUCZk0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFmAAUCZk4FA25pbAIHc3VjY2VzcwJkagEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYUwAAmRqARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJidgkAlAoCBQNuaWwJAQJidQEFAmJ2AmRqARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJiQwJiRAJiSAQCYlEJAQJiRwMFAmJDBQJiRAUCYkgJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJiUQAACQDMCAIJAKYDAQkAkQMCBQJiUQABCQDMCAIJAKYDAQkAkQMCBQJiUQACBQNuaWwCZGoBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFFAUYJAJQKAgUDbmlsCQCmAwEJAQFEAgUBRQUBRgJkagEWZnJvbVgxOFdyYXBwZXJSRUFET05MWQIBSQFKCQCUCgIFA25pbAkBAUgCCQCnAwEFAUkFAUoCZGoBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQICYngCYnkJAJQKAgUDbmlsCQCmAwEJAQJidwIJAKcDAQUCYngJAKcDAQUCYnkCZGoBI2VzdGltYXRlUHV0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZCQJiUwJjbwJjcAJjcQJjcgJjcwJhYgJjdAJjdQkAlAoCBQNuaWwJAQJjbgkFAmJTBQJjbwUCY3AFAmNxBQJjcgUCY3MFAmFiBQJjdAUCY3UCZGoBI2VzdGltYXRlR2V0T3BlcmF0aW9uV3JhcHBlclJFQURPTkxZBAJiUwJiVAJiVQJhYgQCY0UJAQJiUgQFAmJTBQJiVAUCYlUJARFAZXh0ck5hdGl2ZSgxMDYyKQEFAmFiCQCUCgIFA25pbAkAnAoKCAUCY0UCXzEIBQJjRQJfMggFAmNFAl8zCAUCY0UCXzQIBQJjRQJfNQgFAmNFAl82CAUCY0UCXzcJAKYDAQgFAmNFAl84CAUCY0UCXzkIBQJjRQNfMTACZGoBDXN0YXRzUkVBRE9OTFkABAJiSQkBAmFMAAQCYlYJANkEAQkAkQMCBQJiSQUBcQQCY1cJAJEDAgUCYkkFAXIEAmNYCQCRAwIFAmJJBQFzBAJjeAkAkQMCBQJiSQUBdgQCY3kJAJEDAgUCYkkFAXcEAmJKCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJLCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmZPCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJWAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1kJAQJidQEFAmNXBAJjWgkBAmJ1AQUCY1gEAmZQAwkAAAIFAmZPAAAJAMwIAgUBZQkAzAgCBQFlCQDMCAIFAWUFA25pbAkBAmJHAwUCY1kFAmNaBQJmTwQCY2YAAAQCZlEJAQFIAgkAkQMCBQJmUAABBQFiBAJmUgkBAUgCCQCRAwIFAmZQAAIFAWIEAmZTCQEFdmFsdWUBCQCaCAIFAmFFCQECYXEBCQClCAEFBHRoaXMJAJQKAgUDbmlsCQC5CQIJAMwIAgIOJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjWQkAzAgCCQCkAwEFAmNaCQDMCAIJAKQDAQUCZk8JAMwIAgkApAMBBQJjZgkAzAgCCQCkAwEFAmZRCQDMCAIJAKQDAQUCZlIJAMwIAgkApAMBBQJmUwUDbmlsBQFqAmRqASBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQECY3AEAmJJCQECYUwABAJiVgkA2QQBCQCRAwIFAmJJBQFxBAJjdgkAkQMCBQJiSQUBcgQCYlcJANkEAQUCY3YEAmN3CQCRAwIFAmJJBQFzBAJiWAkA2QQBBQJjdwQCYkoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdAQCYksJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdQQCYlkJAJEDAgUCYkkFAXAEAmZPCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJWAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCY1kJAQJidQEFAmN2BAJjWgkBAmJ1AQUCY3cEAmJFCQEBRAIFAmNZBQJiSgQCYkYJAQFEAgUCY1oFAmJLBAJjZQMJAAACBQJmTwAABQFlCQECYncCBQJiRgUCYkUEAmNCCQEBRAIFAmNwBQJiSgQCY0MJALwCAwUCY0IFAmNlBQFkBAJjcgkBAUgCBQJjQwUCYksEAmRwCQECY24JAgAAoMIeBQJjcAUCYlcFAmNyBQJiWAIABgcEAmNNCAUCZHACXzEEAmZUCAUCZHACXzMEAmNhCAUCZHACXzQEAmNjCAUCZHACXzUEAmJaCAUCZHACXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNNCQDMCAIJAKQDAQkBAUgCBQJjZQUBYgkAzAgCCQCkAwEFAmNhCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJiWgkAzAgCBQJiWQkAzAgCCQCkAwEFAmNwCQDMCAIJAKQDAQUCY3IFA25pbAUBagJkagEfZXZhbHVhdGVQdXRCeVByaWNlQXNzZXRSRUFET05MWQECY3IEAmJJCQECYUwABAJiVgkA2QQBCQCRAwIFAmJJBQFxBAJjdgkAkQMCBQJiSQUBcgQCYlcJANkEAQUCY3YEAmN3CQCRAwIFAmJJBQFzBAJiWAkA2QQBBQJjdwQCYkoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdAQCYksJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdQQCYlkJAJEDAgUCYkkFAXAEAmZPCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgCQDYBAEFAmJWAg4gZG9lc24ndCBleGlzdAhxdWFudGl0eQQCZlUJAQJidQEFAmN2BAJmVgkBAmJ1AQUCY3cEAmZXCQEBRAIFAmZVBQJiSgQCZlgJAQFEAgUCZlYFAmJLBAJjZQMJAAACBQJmTwAABQFlCQECYncCBQJmWAUCZlcEAmNDCQEBRAIFAmNyBQJiSwQCY0IJALwCAwUCY0MFAWQFAmNlBAJjcAkBAUgCBQJjQgUCYkoEAmRwCQECY24JAgAAoMIeBQJjcAUCYlcFAmNyBQJiWAIABgcEAmNNCAUCZHACXzEEAmZUCAUCZHACXzMEAmNhCAUCZHACXzQEAmNjCAUCZHACXzUEAmJaCAUCZHACXzYJAJQKAgUDbmlsCQC5CQIJAMwIAgIQJWQlZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNNCQDMCAIJAKQDAQkBAUgCBQJjZQUBYgkAzAgCCQCkAwEFAmNhCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJiWgkAzAgCBQJiWQkAzAgCCQCkAwEFAmNwCQDMCAIJAKQDAQUCY3IFA25pbAUBagJkagETZXZhbHVhdGVHZXRSRUFET05MWQICZlkCZloEAmNFCQECYlIEAgAFAmZZBQJmWgUEdGhpcwQCY2sIBQJjRQJfMQQCY2wIBQJjRQJfMgQCY2EIBQJjRQJfNQQCY2MIBQJjRQJfNgQCYloIBQJjRQJfNwQCY2YIBQJjRQJfOAQCYlkJAQ1wYXJzZUludFZhbHVlAQgFAmNFAl85CQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY2sJAMwIAgkApAMBBQJjbAkAzAgCCQCkAwEFAmNhCQDMCAIJAKQDAQUCY2MJAMwIAgkApAMBBQJiWgkAzAgCCQCmAwEFAmNmCQDMCAIJAKQDAQUCYlkFA25pbAUBagECZ2EBAmdiAAQCZ2MEAmR1CQECZXoAAwkAAQIFAmR1AgpCeXRlVmVjdG9yBAJlRAUCZHUFAmVEAwkAAQIFAmR1AgRVbml0CAUCZ2EPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEAmR1BQJnYQMJAAECBQJkdQIFT3JkZXIEAmNWBQJkdQQCZ2QJAQJhSwAEAmF2CQECY1UBBQJjVgQCYXcJAPQDAwgFAmNWCWJvZHlCeXRlcwkAkQMCCAUCY1YGcHJvb2ZzAAAIBQJjVg9zZW5kZXJQdWJsaWNLZXkEAmF4CQD0AwMIBQJjVglib2R5Qnl0ZXMJAJEDAggFAmNWBnByb29mcwABBQJnZAMDAwUCYXYFAmF3BwUCYXgHBgkBAmF1AwUCYXYFAmF3BQJheAMJAAECBQJkdQIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAmVBBQJkdQQCZ2UJAPYDAQkBBXZhbHVlAQgFAmVBBnNjcmlwdAQCZ2YJANsEAQkBBXZhbHVlAQkAnQgCBQJhRQkBAmFzAAQCZ2cJAPEHAQUEdGhpcwMDCQAAAgUCZ2YFAmdlCQECIT0CBQJnZwUCZ2UHBgkA9AMDCAUCZ2EJYm9keUJ5dGVzCQCRAwIIBQJnYQZwcm9vZnMAAAUCZ2MJAPQDAwgFAmdhCWJvZHlCeXRlcwkAkQMCCAUCZ2EGcHJvb2ZzAAAFAmdj+bnUOA==", "chainId": 84, "height": 2441822, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 7BDPgXb3nZpxhg75K48rdAz2xEX8xP2cANkDigFFj4c7 Next: 6BFy4ARjgz7zzBUxVi7Heuth4rLmckFhyscYJ1nM6sJY Diff:
OldNewDifferences
674674 let eK = eI._2
675675 let eL = bu(eK)
676676 let eM = bu(eJ)
677- let eN = ((eM * eG) / (eL + eG))
677+ let eN = fraction(eM, eG, (eL + eG))
678678 let eO = (toBigInt(eL) * toBigInt(eM))
679679 let eP = ((toBigInt(bu(eK)) + toBigInt(eG)) * (toBigInt(bu(eJ)) - toBigInt(eN)))
680680 let eQ = if ((eP >= eO))
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)
677- let eN = ((eM * eG) / (eL + eG))
677+ let eN = fraction(eM, eG, (eL + eG))
678678 let eO = (toBigInt(eL) * toBigInt(eM))
679679 let eP = ((toBigInt(bu(eK)) + toBigInt(eG)) * (toBigInt(bu(eJ)) - toBigInt(eN)))
680680 let eQ = if ((eP >= eO))
681681 then true
682682 else throw("new K is fewer error")
683683 if ((eQ == eQ))
684684 then $Tuple2(nil, eN)
685685 else throw("Strict value is not equal to itself.")
686686 }
687687
688688
689689
690690 @Callable(dj)
691691 func calculateAmountOutForSwapAndSendTokens (eG,eH,eR,eS) = {
692692 let ei = [if ((value(dj.payments[0]).amount >= eG))
693693 then true
694694 else aC("Wrong amount"), if ((dj.caller == addressFromStringValue(ay(this, S()))))
695695 then true
696696 else aC("Permission denied")]
697697 if ((ei == ei))
698698 then {
699699 let dk = value(dj.payments[0])
700700 let eK = if ((dk.assetId == unit))
701701 then toBase58String(toBytes("WAVES"))
702702 else toBase58String(value(dk.assetId))
703703 let eJ = if ((eH == false))
704704 then ay(this, af())
705705 else ay(this, ae())
706706 let eL = (bu(eK) - value(dj.payments[0]).amount)
707707 let eM = bu(eJ)
708708 let eN = ((eM * eG) / (eL + eG))
709709 let eO = (eL * eM)
710710 let eP = (bu(eK) * (bu(eJ) - eN))
711711 let eQ = if ((eP >= eO))
712712 then true
713713 else throw("new K is fewer error")
714714 if ((eQ == eQ))
715715 then {
716716 let eT = if ((eN >= eR))
717717 then true
718718 else throw("Exchange result is fewer coins than expected")
719719 if ((eT == eT))
720720 then [ScriptTransfer(addressFromStringValue(eS), eN, if ((eK == "WAVES"))
721721 then unit
722722 else fromBase58String(eJ))]
723723 else throw("Strict value is not equal to itself.")
724724 }
725725 else throw("Strict value is not equal to itself.")
726726 }
727727 else throw("Strict value is not equal to itself.")
728728 }
729729
730730
731731
732732 @Callable(dj)
733733 func setManager (eU) = {
734734 let eV = eE(dj)
735735 if ((eV == eV))
736736 then {
737737 let eW = fromBase58String(eU)
738738 if ((eW == eW))
739739 then [StringEntry(V(), eU)]
740740 else throw("Strict value is not equal to itself.")
741741 }
742742 else throw("Strict value is not equal to itself.")
743743 }
744744
745745
746746
747747 @Callable(dj)
748748 func confirmManager () = {
749749 let eX = eB()
750750 let eY = if (isDefined(eX))
751751 then true
752752 else throw("No pending manager")
753753 if ((eY == eY))
754754 then {
755755 let eZ = if ((dj.callerPublicKey == value(eX)))
756756 then true
757757 else throw("You are not pending manager")
758758 if ((eZ == eZ))
759759 then [StringEntry(U(), toBase58String(value(eX))), DeleteEntry(V())]
760760 else throw("Strict value is not equal to itself.")
761761 }
762762 else throw("Strict value is not equal to itself.")
763763 }
764764
765765
766766
767767 @Callable(dj)
768768 func put (co,fa) = if ((0 > co))
769769 then throw("Invalid slippageTolerance passed")
770770 else {
771771 let dp = dm(dj, co, true)
772772 let cQ = dp._2
773773 let bV = dp._7
774774 let cm = dp._9
775775 let cR = dp._10
776776 let cS = dp._11
777777 let fb = dp._12
778778 let fc = dp._13
779779 let ds = invoke(aE, "emit", [cQ], nil)
780780 if ((ds == ds))
781781 then {
782782 let dt = {
783783 let du = ds
784784 if ($isInstanceOf(du, "Address"))
785785 then {
786786 let dv = du
787787 invoke(dv, "emit", [cQ], nil)
788788 }
789789 else unit
790790 }
791791 if ((dt == dt))
792792 then {
793793 let fd = if ((cR > 0))
794794 then invoke(be, "put", nil, [AttachedPayment(fb, cR)])
795795 else nil
796796 if ((fd == fd))
797797 then {
798798 let fe = if ((cS > 0))
799799 then invoke(be, "put", nil, [AttachedPayment(fc, cS)])
800800 else nil
801801 if ((fe == fe))
802802 then {
803803 let ff = if (fa)
804804 then {
805805 let fg = invoke(bd, "stake", nil, [AttachedPayment(bV, cQ)])
806806 if ((fg == fg))
807807 then nil
808808 else throw("Strict value is not equal to itself.")
809809 }
810810 else [ScriptTransfer(dj.caller, cQ, bV)]
811811 (cm ++ ff)
812812 }
813813 else throw("Strict value is not equal to itself.")
814814 }
815815 else throw("Strict value is not equal to itself.")
816816 }
817817 else throw("Strict value is not equal to itself.")
818818 }
819819 else throw("Strict value is not equal to itself.")
820820 }
821821
822822
823823
824824 @Callable(dj)
825825 func putForFree (fh) = if ((0 > fh))
826826 then throw("Invalid value passed")
827827 else {
828828 let dp = dm(dj, fh, false)
829829 dp._9
830830 }
831831
832832
833833
834834 @Callable(dj)
835835 func putOneTkn (fi,fj) = {
836836 let fk = {
837837 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
838838 if ($isInstanceOf(aH, "Boolean"))
839839 then aH
840840 else throw(($getType(aH) + " couldn't be cast to Boolean"))
841841 }
842842 let fl = if (if (if (aJ())
843843 then true
844844 else (aW == l))
845845 then true
846846 else (aW == n))
847847 then true
848848 else fk
849849 let ei = [if (if (!(fl))
850850 then true
851851 else eC(dj))
852852 then true
853853 else aC("put operation is blocked by admin"), if ((size(dj.payments) == 1))
854854 then true
855855 else aC("exactly 1 payment are expected")]
856856 if ((ei == ei))
857857 then {
858858 let fm = dj.payments[0]
859859 let dB = fm.assetId
860860 let dA = fm.amount
861861 let ab = dj.caller
862862 let ac = dj.transactionId
863863 let fn = dz(dA, dB, ab, ac)
864864 if ((fn == fn))
865865 then {
866866 let fo = fn._4
867867 let dy = fn._3
868868 let cT = fn._2
869869 let fp = fn._1
870870 let fq = if (if ((fi > 0))
871871 then (fi > fp)
872872 else false)
873873 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
874874 else fp
875875 let ds = dq(fq)
876876 if ((ds == ds))
877877 then {
878878 let ff = if (fj)
879879 then {
880880 let fr = invoke(bd, "stake", nil, [AttachedPayment(aX, fq)])
881881 if ((fr == fr))
882882 then nil
883883 else throw("Strict value is not equal to itself.")
884884 }
885885 else [ScriptTransfer(dj.caller, fq, aX)]
886886 let fs = if ((dy > 0))
887887 then [ScriptTransfer(aF, dy, dB)]
888888 else nil
889889 $Tuple2(((cT ++ ff) ++ fs), fq)
890890 }
891891 else throw("Strict value is not equal to itself.")
892892 }
893893 else throw("Strict value is not equal to itself.")
894894 }
895895 else throw("Strict value is not equal to itself.")
896896 }
897897
898898
899899
900900 @Callable(dj)
901901 func putOneTknREADONLY (dB,dA) = {
902902 let ft = dz(dA, aO(dB), unit, unit)
903903 let fp = ft._1
904904 let cT = ft._2
905905 let dy = ft._3
906906 let fo = ft._4
907907 $Tuple2(nil, $Tuple3(fp, dy, fo))
908908 }
909909
910910
911911
912912 @Callable(dj)
913913 func getOneTkn (fu,fi) = {
914914 let fk = {
915915 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
916916 if ($isInstanceOf(aH, "Boolean"))
917917 then aH
918918 else throw(($getType(aH) + " couldn't be cast to Boolean"))
919919 }
920920 let fv = if (if (aJ())
921921 then true
922922 else (aW == n))
923923 then true
924924 else fk
925925 let ei = [if (if (!(fv))
926926 then true
927927 else eC(dj))
928928 then true
929929 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 1))
930930 then true
931931 else aC("exactly 1 payment are expected")]
932932 if ((ei == ei))
933933 then {
934934 let eh = aO(fu)
935935 let fm = dj.payments[0]
936936 let dB = fm.assetId
937937 let dP = fm.amount
938938 let ab = dj.caller
939939 let ac = dj.transactionId
940940 let fw = eg(eh, dP, dB, ab, ac)
941941 if ((fw == fw))
942942 then {
943943 let fo = fw._4
944944 let dy = fw._3
945945 let cT = fw._2
946946 let fx = fw._1
947947 let dr = if (if ((fi > 0))
948948 then (fi > fx)
949949 else false)
950950 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
951951 else fx
952952 let fy = invoke(aE, "burn", [dP], [AttachedPayment(dB, dP)])
953953 if ((fy == fy))
954954 then {
955955 let fz = [ScriptTransfer(ab, dr, eh)]
956956 let fs = if ((dy > 0))
957957 then [ScriptTransfer(aF, dy, eh)]
958958 else nil
959959 $Tuple2(((cT ++ fz) ++ fs), dr)
960960 }
961961 else throw("Strict value is not equal to itself.")
962962 }
963963 else throw("Strict value is not equal to itself.")
964964 }
965965 else throw("Strict value is not equal to itself.")
966966 }
967967
968968
969969
970970 @Callable(dj)
971971 func getOneTknREADONLY (eh,dP) = {
972972 let fA = eg(aO(eh), dP, aX, unit, unit)
973973 let fx = fA._1
974974 let cT = fA._2
975975 let dy = fA._3
976976 let fo = fA._4
977977 $Tuple2(nil, $Tuple3(fx, dy, fo))
978978 }
979979
980980
981981
982982 @Callable(dj)
983983 func unstakeAndGetOneTkn (fB,fu,fi) = {
984984 let fk = {
985985 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
986986 if ($isInstanceOf(aH, "Boolean"))
987987 then aH
988988 else throw(($getType(aH) + " couldn't be cast to Boolean"))
989989 }
990990 let fv = if (if (aJ())
991991 then true
992992 else (aW == n))
993993 then true
994994 else fk
995995 let ei = [if (if (!(fv))
996996 then true
997997 else eC(dj))
998998 then true
999999 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 0))
10001000 then true
10011001 else aC("no payments are expected")]
10021002 if ((ei == ei))
10031003 then {
10041004 let eh = aO(fu)
10051005 let ab = dj.caller
10061006 let ac = dj.transactionId
10071007 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
10081008 if ((fC == fC))
10091009 then {
10101010 let fD = eg(eh, fB, aX, ab, ac)
10111011 if ((fD == fD))
10121012 then {
10131013 let fo = fD._4
10141014 let dy = fD._3
10151015 let cT = fD._2
10161016 let fx = fD._1
10171017 let dr = if (if ((fi > 0))
10181018 then (fi > fx)
10191019 else false)
10201020 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
10211021 else fx
10221022 let fy = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
10231023 if ((fy == fy))
10241024 then {
10251025 let fz = [ScriptTransfer(dj.caller, dr, eh)]
10261026 let fs = if ((dy > 0))
10271027 then [ScriptTransfer(aF, dy, eh)]
10281028 else nil
10291029 $Tuple2(((cT ++ fz) ++ fs), dr)
10301030 }
10311031 else throw("Strict value is not equal to itself.")
10321032 }
10331033 else throw("Strict value is not equal to itself.")
10341034 }
10351035 else throw("Strict value is not equal to itself.")
10361036 }
10371037 else throw("Strict value is not equal to itself.")
10381038 }
10391039
10401040
10411041
10421042 @Callable(dj)
10431043 func get () = {
10441044 let cE = di(dj)
10451045 let fE = cE._1
10461046 let cl = cE._2
10471047 let dl = cE._3
10481048 let bT = cE._4
10491049 let cm = cE._5
10501050 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10511051 if ((fF == fF))
10521052 then cm
10531053 else throw("Strict value is not equal to itself.")
10541054 }
10551055
10561056
10571057
10581058 @Callable(dj)
10591059 func getNoLess (fG,fH) = {
10601060 let cE = di(dj)
10611061 let ck = cE._1
10621062 let cl = cE._2
10631063 let dl = cE._3
10641064 let bT = cE._4
10651065 let cm = cE._5
10661066 if ((fG > ck))
10671067 then throw(((("noLessThenAmtAsset failed: " + toString(ck)) + " < ") + toString(fG)))
10681068 else if ((fH > cl))
10691069 then throw(((("noLessThenPriceAsset failed: " + toString(cl)) + " < ") + toString(fH)))
10701070 else {
10711071 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10721072 if ((fF == fF))
10731073 then cm
10741074 else throw("Strict value is not equal to itself.")
10751075 }
10761076 }
10771077
10781078
10791079
10801080 @Callable(dj)
10811081 func unstakeAndGet (dr) = {
10821082 let fI = if ((size(dj.payments) != 0))
10831083 then throw("No payments are expected")
10841084 else true
10851085 if ((fI == fI))
10861086 then {
10871087 let bI = aL()
10881088 let bV = fromBase58String(bI[q])
10891089 let fC = invoke(bd, "unstake", [toBase58String(bV), dr], nil)
10901090 if ((fC == fC))
10911091 then {
10921092 let cE = bR(toBase58String(dj.transactionId), toBase58String(bV), dr, dj.caller)
10931093 let bY = parseIntValue(cE._9)
10941094 let cm = cE._10
10951095 let fJ = if (if (aJ())
10961096 then true
10971097 else (bY == n))
10981098 then throw(("Get operation is blocked by admin. Status = " + toString(bY)))
10991099 else true
11001100 if ((fJ == fJ))
11011101 then {
11021102 let fF = invoke(aE, "burn", [dr], [AttachedPayment(bV, dr)])
11031103 if ((fF == fF))
11041104 then cm
11051105 else throw("Strict value is not equal to itself.")
11061106 }
11071107 else throw("Strict value is not equal to itself.")
11081108 }
11091109 else throw("Strict value is not equal to itself.")
11101110 }
11111111 else throw("Strict value is not equal to itself.")
11121112 }
11131113
11141114
11151115
11161116 @Callable(dj)
11171117 func unstakeAndGetNoLess (fB,fK,fH) = {
11181118 let fv = if (aJ())
11191119 then true
11201120 else (aW == n)
11211121 let ei = [if (!(fv))
11221122 then true
11231123 else throw("get operation is blocked by admin"), if ((size(dj.payments) == 0))
11241124 then true
11251125 else throw("no payments are expected")]
11261126 if ((ei == ei))
11271127 then {
11281128 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
11291129 if ((fC == fC))
11301130 then {
11311131 let cE = bR(toBase58String(dj.transactionId), toBase58String(aX), fB, dj.caller)
11321132 let ck = cE._1
11331133 let cl = cE._2
11341134 let cm = cE._10
11351135 let fL = [if ((ck >= fK))
11361136 then true
11371137 else throw(makeString(["amount asset amount to receive is less than ", toString(fK)], "")), if ((cl >= fH))
11381138 then true
11391139 else throw(makeString(["price asset amount to receive is less than ", toString(fH)], ""))]
11401140 if ((fL == fL))
11411141 then {
11421142 let fF = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
11431143 if ((fF == fF))
11441144 then cm
11451145 else throw("Strict value is not equal to itself.")
11461146 }
11471147 else throw("Strict value is not equal to itself.")
11481148 }
11491149 else throw("Strict value is not equal to itself.")
11501150 }
11511151 else throw("Strict value is not equal to itself.")
11521152 }
11531153
11541154
11551155
11561156 @Callable(dj)
11571157 func activate (fM,fN) = if ((toString(dj.caller) != toString(aE)))
11581158 then throw("permissions denied")
11591159 else $Tuple2([StringEntry(ae(), fM), StringEntry(af(), fN)], "success")
11601160
11611161
11621162
11631163 @Callable(dj)
11641164 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aL())
11651165
11661166
11671167
11681168 @Callable(dj)
11691169 func getAccBalanceWrapperREADONLY (bv) = $Tuple2(nil, bu(bv))
11701170
11711171
11721172
11731173 @Callable(dj)
11741174 func calcPricesWrapperREADONLY (bC,bD,bH) = {
11751175 let bQ = bG(bC, bD, bH)
11761176 $Tuple2(nil, [toString(bQ[0]), toString(bQ[1]), toString(bQ[2])])
11771177 }
11781178
11791179
11801180
11811181 @Callable(dj)
11821182 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
11831183
11841184
11851185
11861186 @Callable(dj)
11871187 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
11881188
11891189
11901190
11911191 @Callable(dj)
11921192 func calcPriceBigIntWrapperREADONLY (bx,by) = $Tuple2(nil, toString(bw(parseBigIntValue(bx), parseBigIntValue(by))))
11931193
11941194
11951195
11961196 @Callable(dj)
11971197 func estimatePutOperationWrapperREADONLY (bS,co,cp,cq,cr,cs,ab,ct,cu) = $Tuple2(nil, cn(bS, co, cp, cq, cr, cs, ab, ct, cu))
11981198
11991199
12001200
12011201 @Callable(dj)
12021202 func estimateGetOperationWrapperREADONLY (bS,bT,bU,ab) = {
12031203 let cE = bR(bS, bT, bU, addressFromStringValue(ab))
12041204 $Tuple2(nil, $Tuple10(cE._1, cE._2, cE._3, cE._4, cE._5, cE._6, cE._7, toString(cE._8), cE._9, cE._10))
12051205 }
12061206
12071207
12081208
12091209 @Callable(dj)
12101210 func statsREADONLY () = {
12111211 let bI = aL()
12121212 let bV = fromBase58String(bI[q])
12131213 let cW = bI[r]
12141214 let cX = bI[s]
12151215 let cx = bI[v]
12161216 let cy = bI[w]
12171217 let bJ = parseIntValue(bI[t])
12181218 let bK = parseIntValue(bI[u])
12191219 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12201220 let cY = bu(cW)
12211221 let cZ = bu(cX)
12221222 let fP = if ((fO == 0))
12231223 then [e, e, e]
12241224 else bG(cY, cZ, fO)
12251225 let cf = 0
12261226 let fQ = H(fP[1], b)
12271227 let fR = H(fP[2], b)
12281228 let fS = value(getInteger(aE, aq(toString(this))))
12291229 $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))
12301230 }
12311231
12321232
12331233
12341234 @Callable(dj)
12351235 func evaluatePutByAmountAssetREADONLY (cp) = {
12361236 let bI = aL()
12371237 let bV = fromBase58String(bI[q])
12381238 let cv = bI[r]
12391239 let bW = fromBase58String(cv)
12401240 let cw = bI[s]
12411241 let bX = fromBase58String(cw)
12421242 let bJ = parseIntValue(bI[t])
12431243 let bK = parseIntValue(bI[u])
12441244 let bY = bI[p]
12451245 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12461246 let cY = bu(cv)
12471247 let cZ = bu(cw)
12481248 let bE = D(cY, bJ)
12491249 let bF = D(cZ, bK)
12501250 let ce = if ((fO == 0))
12511251 then e
12521252 else bw(bF, bE)
12531253 let cB = D(cp, bJ)
12541254 let cC = fraction(cB, ce, d)
12551255 let cr = H(cC, bK)
12561256 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12571257 let cM = dp._1
12581258 let fT = dp._3
12591259 let ca = dp._4
12601260 let cc = dp._5
12611261 let bZ = dp._6
12621262 $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))
12631263 }
12641264
12651265
12661266
12671267 @Callable(dj)
12681268 func evaluatePutByPriceAssetREADONLY (cr) = {
12691269 let bI = aL()
12701270 let bV = fromBase58String(bI[q])
12711271 let cv = bI[r]
12721272 let bW = fromBase58String(cv)
12731273 let cw = bI[s]
12741274 let bX = fromBase58String(cw)
12751275 let bJ = parseIntValue(bI[t])
12761276 let bK = parseIntValue(bI[u])
12771277 let bY = bI[p]
12781278 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12791279 let fU = bu(cv)
12801280 let fV = bu(cw)
12811281 let fW = D(fU, bJ)
12821282 let fX = D(fV, bK)
12831283 let ce = if ((fO == 0))
12841284 then e
12851285 else bw(fX, fW)
12861286 let cC = D(cr, bK)
12871287 let cB = fraction(cC, d, ce)
12881288 let cp = H(cB, bJ)
12891289 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12901290 let cM = dp._1
12911291 let fT = dp._3
12921292 let ca = dp._4
12931293 let cc = dp._5
12941294 let bZ = dp._6
12951295 $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))
12961296 }
12971297
12981298
12991299
13001300 @Callable(dj)
13011301 func evaluateGetREADONLY (fY,fZ) = {
13021302 let cE = bR("", fY, fZ, this)
13031303 let ck = cE._1
13041304 let cl = cE._2
13051305 let ca = cE._5
13061306 let cc = cE._6
13071307 let bZ = cE._7
13081308 let cf = cE._8
13091309 let bY = parseIntValue(cE._9)
13101310 $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))
13111311 }
13121312
13131313
13141314 @Verifier(ga)
13151315 func gb () = {
13161316 let gc = {
13171317 let du = ez()
13181318 if ($isInstanceOf(du, "ByteVector"))
13191319 then {
13201320 let eD = du
13211321 eD
13221322 }
13231323 else if ($isInstanceOf(du, "Unit"))
13241324 then ga.senderPublicKey
13251325 else throw("Match error")
13261326 }
13271327 let du = ga
13281328 if ($isInstanceOf(du, "Order"))
13291329 then {
13301330 let cV = du
13311331 let gd = aK()
13321332 let av = cU(cV)
13331333 let aw = sigVerify(cV.bodyBytes, cV.proofs[0], cV.senderPublicKey)
13341334 let ax = sigVerify(cV.bodyBytes, cV.proofs[1], gd)
13351335 if (if (if (av)
13361336 then aw
13371337 else false)
13381338 then ax
13391339 else false)
13401340 then true
13411341 else au(av, aw, ax)
13421342 }
13431343 else if ($isInstanceOf(du, "SetScriptTransaction"))
13441344 then {
13451345 let eA = du
13461346 let ge = blake2b256(value(eA.script))
13471347 let gf = fromBase64String(value(getString(aE, as())))
13481348 let gg = scriptHash(this)
13491349 if (if ((gf == ge))
13501350 then (gg != ge)
13511351 else false)
13521352 then true
13531353 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13541354 }
13551355 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13561356 }
13571357

github/deemru/w8io/873ac7e 
151.04 ms