tx · 43zJtiajVkbynkk8vbquUzekGY6r9cFZFjacVtcS91PK

3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt:  -0.03200000 Waves

2023.02.09 09:38 [2441750] smart account 3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt > SELF 0.00000000 Waves

{ "type": 13, "id": "43zJtiajVkbynkk8vbquUzekGY6r9cFZFjacVtcS91PK", "fee": 3200000, "feeAssetId": null, "timestamp": 1675924730980, "version": 1, "sender": "3MrULQRLc52GWrJF1tMcAm4M78fPe57o9Kt", "senderPublicKey": "Aig94J3pRT3J41eXw33rJrs67gTCECiMVRZrbtuoARit", "proofs": [ "3MbfMnbXDnYtKtdwMaAqCdYBEy5NCuEc5aUYnkJ1x8AhzKgbVucoN8VrDPPkj7MM9QVGBeDeLgWsVhUPq59d5Lsi" ], "script": "base64:BgKcKQgCEgQKAgEEEgYKBAEEAQgSAwoBCBIAEgQKAgEEEgMKAQESBAoCAQQSBAoCCAESBAoCCAESBAoCCAESBQoDAQgBEgASBAoCAQESAwoBARIFCgMBAQESBAoCCAgSABIDCgEIEgUKAwEBARIECgIBARIECgIIARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCBIAEgMKAQESAwoBARIECgIIASIKbFBkZWNpbWFscyIGc2NhbGU4IgxzY2FsZThCaWdJbnQiB3NjYWxlMTgiCnplcm9CaWdJbnQiBGJpZzAiBGJpZzEiBGJpZzIiC3dhdmVzU3RyaW5nIgNTRVAiClBvb2xBY3RpdmUiD1Bvb2xQdXREaXNhYmxlZCITUG9vbE1hdGNoZXJEaXNhYmxlZCIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyINaWR4UG9vbFN0YXR1cyIQaWR4UG9vbExQQXNzZXRJZCINaWR4QW10QXNzZXRJZCIPaWR4UHJpY2VBc3NldElkIg5pZHhBbXRBc3NldERjbSIQaWR4UHJpY2VBc3NldERjbSIOaWR4SUFtdEFzc2V0SWQiEGlkeElQcmljZUFzc2V0SWQiDWlkeExQQXNzZXREY20iEmlkeFBvb2xBbXRBc3NldEFtdCIUaWR4UG9vbFByaWNlQXNzZXRBbXQiEWlkeFBvb2xMUEFzc2V0QW10IhlpZHhGYWN0b3J5U3Rha2luZ0NvbnRyYWN0IhppZHhGYWN0b3J5U2xpcHBhZ2VDb250cmFjdCIFdG9YMTgiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiC3RvWDE4QmlnSW50Igdmcm9tWDE4IgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCIHdG9TY2FsZSIDYW10IghyZXNTY2FsZSIIY3VyU2NhbGUiA2FicyIJYWJzQmlnSW50Igxzd2FwQ29udHJhY3QiAmZjIgNtcGsiBHBtcGsiAnBsIgJwaCIBaCIJdGltZXN0YW1wIgNwYXUiC3VzZXJBZGRyZXNzIgR0eElkIgNnYXUiAmFhIgJwYSIQa2V5RmFjdG9yeUNvbmZpZyINa2V5TWF0Y2hlclB1YiIpa2V5TWFwcGluZ1Bvb2xDb250cmFjdEFkZHJlc3NUb1Bvb2xBc3NldHMiE3Bvb2xDb250cmFjdEFkZHJlc3MiDWtleVBvb2xDb25maWciCWlBbXRBc3NldCILaVByaWNlQXNzZXQiH2tleU1hcHBpbmdzQmFzZUFzc2V0MmludGVybmFsSWQiDGJhc2VBc3NldFN0ciITa2V5QWxsUG9vbHNTaHV0ZG93biINa2V5UG9vbFdlaWdodCIPY29udHJhY3RBZGRyZXNzIhZrZXlBbGxvd2VkTHBTY3JpcHRIYXNoIhZrZXlGZWVDb2xsZWN0b3JBZGRyZXNzIg90aHJvd09yZGVyRXJyb3IiCm9yZGVyVmFsaWQiC3NlbmRlclZhbGlkIgxtYXRjaGVyVmFsaWQiD2dldFN0cmluZ09yRmFpbCIHYWRkcmVzcyIDa2V5IgxnZXRJbnRPckZhaWwiCHRocm93RXJyIgNtc2ciD2ZhY3RvcnlDb250cmFjdCITZmVlQ29sbGVjdG9yQWRkcmVzcyIFaW5GZWUiAUAiBm91dEZlZSIQaXNHbG9iYWxTaHV0ZG93biITZ2V0TWF0Y2hlclB1Yk9yRmFpbCINZ2V0UG9vbENvbmZpZyIIYW10QXNzZXQiCnByaWNlQXNzZXQiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3OTA2ODA3MiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEGdldEZhY3RvcnlDb25maWciD3N0YWtpbmdDb250cmFjdCIQc2xpcHBhZ2VDb250cmFjdCIRZGF0YVB1dEFjdGlvbkluZm8iDWluQW10QXNzZXRBbXQiD2luUHJpY2VBc3NldEFtdCIIb3V0THBBbXQiBXByaWNlIh1zbGlwcGFnZVRvbGVyYW5jZVBhc3NlZEJ5VXNlciIVc2xpcHBhZ2VUb2xlcmFuY2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiEnNsaXBhZ2VBbXRBc3NldEFtdCIUc2xpcGFnZVByaWNlQXNzZXRBbXQiEWRhdGFHZXRBY3Rpb25JbmZvIg5vdXRBbXRBc3NldEFtdCIQb3V0UHJpY2VBc3NldEFtdCIHaW5McEFtdCINZ2V0QWNjQmFsYW5jZSIHYXNzZXRJZCIPY2FsY1ByaWNlQmlnSW50IghwckFtdFgxOCIIYW1BbXRYMTgiEHByaXZhdGVDYWxjUHJpY2UiCmFtQXNzZXREY20iCnByQXNzZXREY20iBWFtQW10IgVwckFtdCIOYW10QXNzZXRBbXRYMTgiEHByaWNlQXNzZXRBbXRYMTgiCmNhbGNQcmljZXMiBWxwQW10IgNjZmciC2FtdEFzc2V0RGNtIg1wcmljZUFzc2V0RGNtIghwcmljZVgxOCIIbHBBbXRYMTgiE2xwUHJpY2VJbkFtQXNzZXRYMTgiE2xwUHJpY2VJblByQXNzZXRYMTgiD2NhbGN1bGF0ZVByaWNlcyIGcHJpY2VzIhRlc3RpbWF0ZUdldE9wZXJhdGlvbiIGdHhJZDU4IgpwbXRBc3NldElkIghwbXRMcEFtdCIJbHBBc3NldElkIglhbUFzc2V0SWQiCXByQXNzZXRJZCIKcG9vbFN0YXR1cyIKbHBFbWlzc2lvbiIJYW1CYWxhbmNlIgxhbUJhbGFuY2VYMTgiCXByQmFsYW5jZSIMcHJCYWxhbmNlWDE4IgtjdXJQcmljZVgxOCIIY3VyUHJpY2UiC3BtdExwQW10WDE4Ig1scEVtaXNzaW9uWDE4IgtvdXRBbUFtdFgxOCILb3V0UHJBbXRYMTgiCG91dEFtQW10IghvdXRQckFtdCIFc3RhdGUiFGVzdGltYXRlUHV0T3BlcmF0aW9uIhFzbGlwcGFnZVRvbGVyYW5jZSIMaW5BbUFzc2V0QW10IgtpbkFtQXNzZXRJZCIMaW5QckFzc2V0QW10IgtpblByQXNzZXRJZCIKaXNFdmFsdWF0ZSIGZW1pdExwIgxhbUFzc2V0SWRTdHIiDHByQXNzZXRJZFN0ciILaUFtdEFzc2V0SWQiDWlQcmljZUFzc2V0SWQiDmluQW1Bc3NldElkU3RyIg5pblByQXNzZXRJZFN0ciIPaW5BbUFzc2V0QW10WDE4Ig9pblByQXNzZXRBbXRYMTgiDHVzZXJQcmljZVgxOCIDcmVzIgtzbGlwcGFnZVgxOCIUc2xpcHBhZ2VUb2xlcmFuY2VYMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiC2NvbW1vblN0YXRlIht2YWxpZGF0ZU1hdGNoZXJPcmRlckFsbG93ZWQiBW9yZGVyIgphbXRBc3NldElkIgxwcmljZUFzc2V0SWQiEmFjY0FtdEFzc2V0QmFsYW5jZSIUYWNjUHJpY2VBc3NldEJhbGFuY2UiDW9yZGVyQW10QXNzZXQiEG9yZGVyQW10QXNzZXRTdHIiD29yZGVyUHJpY2VBc3NldCISb3JkZXJQcmljZUFzc2V0U3RyIgpvcmRlclByaWNlIghwcmljZURjbSIQY2FzdGVkT3JkZXJQcmljZSIRaXNPcmRlclByaWNlVmFsaWQiCWNvbW1vbkdldCIBaSIDcG10IgZwbXRBbXQiCWNvbW1vblB1dCIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIGZXN0UHV0IgRlbWl0IgZhbW91bnQiB2VtaXRJbnYiDWVtaXRJbnZMZWdhY3kiByRtYXRjaDAiFWxlZ2FjeUZhY3RvcnlDb250cmFjdCIHdGFrZUZlZSIDZmVlIglmZWVBbW91bnQiD2NhbGNQdXRPbmVUb2tlbiIQcGF5bWVudEFtb3VudFJhdyIOcGF5bWVudEFzc2V0SWQiBmlzRXZhbCIQYW1vdW50QmFsYW5jZVJhdyIPcHJpY2VCYWxhbmNlUmF3IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMjI5NjkyMzI2MiIQYW1vdW50QmFsYW5jZU9sZCIPcHJpY2VCYWxhbmNlT2xkIg0kdDAyMzI2NjIzNDE1IhRhbW91bnRBc3NldEFtb3VudFJhdyITcHJpY2VBc3NldEFtb3VudFJhdyIRYW1vdW50QXNzZXRBbW91bnQiEHByaWNlQXNzZXRBbW91bnQiDSR0MDIzNTQ3MjM2MTEiDXBheW1lbnRBbW91bnQiEGFtb3VudEJhbGFuY2VOZXciD3ByaWNlQmFsYW5jZU5ldyILcHJpY2VOZXdYMTgiCHByaWNlTmV3Ig5wYXltZW50QmFsYW5jZSIUcGF5bWVudEJhbGFuY2VCaWdJbnQiDHN1cHBseUJpZ0ludCILY2hlY2hTdXBwbHkiDWRlcG9zaXRCaWdJbnQiC2lzc3VlQW1vdW50IgtwcmljZU9sZFgxOCIIcHJpY2VPbGQiBGxvc3MiDSR0MDI1MDg4MjUyNTUiB2JhbGFuY2UiD2lzc3VlQW1vdW50Qm90aCIPY2FsY0dldE9uZVRva2VuIgpvdXRBc3NldElkIgZjaGVja3MiEG91dEluQW1vdW50QXNzZXQiDWJhbGFuY2VCaWdJbnQiDGFtQmFsYW5jZU9sZCIMcHJCYWxhbmNlT2xkIgpvdXRCYWxhbmNlIhBvdXRCYWxhbmNlQmlnSW50Ig5yZWRlZW1lZEJpZ0ludCIJYW1vdW50UmF3Ig0kdDAyNjgzNTI2ODkxIgt0b3RhbEFtb3VudCINJHQwMjY4OTUyNzEyMSILb3V0QW1BbW91bnQiC291dFByQW1vdW50IgxhbUJhbGFuY2VOZXciDHByQmFsYW5jZU5ldyIYYW1vdW50Qm90aEluUGF5bWVudEFzc2V0IhZtYW5hZ2VyUHVibGljS2V5T3JVbml0IgFzIh1wZW5kaW5nTWFuYWdlclB1YmxpY0tleU9yVW5pdCIJaXNNYW5hZ2VyIgJwayILbXVzdE1hbmFnZXIiAnBkIg1jbGVhbkFtb3VudEluIglpc1JldmVyc2UiDSR0MDI4Nzk4MjkxMDMiCGFzc2V0T3V0Igdhc3NldEluIhJwb29sQXNzZXRJbkJhbGFuY2UiE3Bvb2xBc3NldE91dEJhbGFuY2UiCWFtb3VudE91dCIEb2xkSyIEbmV3SyIGY2hlY2tLIgxhbW91bnRPdXRNaW4iCWFkZHJlc3NUbyIIY2hlY2tNaW4iF3BlbmRpbmdNYW5hZ2VyUHVibGljS2V5IgtjaGVja0NhbGxlciIVY2hlY2tNYW5hZ2VyUHVibGljS2V5IgJwbSIFaGFzUE0iB2NoZWNrUE0iD3Nob3VsZEF1dG9TdGFrZSIEYW1JZCIEcHJJZCIMc2xpcHBhZ2VBSW52IgxzbGlwcGFnZVBJbnYiCmxwVHJhbnNmZXIiC3NscFN0YWtlSW52IgttYXhTbGlwcGFnZSIMbWluT3V0QW1vdW50IglhdXRvU3Rha2UiIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkIg1pc1B1dERpc2FibGVkIgdwYXltZW50Ig0kdDAzNDI4ODM0NDE4IgVib251cyITZW1pdEFtb3VudEVzdGltYXRlZCIKZW1pdEFtb3VudCIIc3Rha2VJbnYiB3NlbmRGZWUiDSR0MDM1MTQ3MzUyODIiDW91dEFzc2V0SWRTdHIiDWlzR2V0RGlzYWJsZWQiDSR0MDM2MDg3MzYyMjIiD2Ftb3VudEVzdGltYXRlZCIHYnVybkludiINYXNzZXRUcmFuc2ZlciINJHQwMzY4NTczNjk5NSINdW5zdGFrZUFtb3VudCIKdW5zdGFrZUludiINJHQwMzc4MjAzNzk1MyIJb3V0QW10QW10IhRidXJuTFBBc3NldE9uRmFjdG9yeSISbm9MZXNzVGhlbkFtdEFzc2V0IhRub0xlc3NUaGVuUHJpY2VBc3NldCINY2hlY2tQYXltZW50cyIPY2hlY2tQb29sU3RhdHVzIhVub0xlc3NUaGVuQW1vdW50QXNzZXQiDGNoZWNrQW1vdW50cyILYW10QXNzZXRTdHIiDXByaWNlQXNzZXRTdHIiDXBvb2xMUEJhbGFuY2UiCnByaWNlc0xpc3QiD2xwQW10QXNzZXRTaGFyZSIRbHBQcmljZUFzc2V0U2hhcmUiCnBvb2xXZWlnaHQiDGN1clByaWNlQ2FsYyIMYW1CYWxhbmNlUmF3IgxwckJhbGFuY2VSYXciD2FtQmFsYW5jZVJhd1gxOCIPcHJCYWxhbmNlUmF3WDE4IhBwYXltZW50THBBc3NldElkIgxwYXltZW50THBBbXQiAnR4IgZ2ZXJpZnkiD3RhcmdldFB1YmxpY0tleSIKbWF0Y2hlclB1YiIHbmV3SGFzaCILYWxsb3dlZEhhc2giC2N1cnJlbnRIYXNoZQABYQAIAAFiAIDC1y8AAWMJALYCAQCAwtcvAAFkCQC2AgEAgICQu7rWrfANAAFlCQC2AgEAAAABZgkAtgIBAAAAAWcJALYCAQABAAFoCQC2AgEAAgABaQIFV0FWRVMAAWoCAl9fAAFrAAEAAWwAAgABbQADAAFuAAQAAW8AAQABcAACAAFxAAMAAXIABAABcwAFAAF0AAYAAXUABwABdgAIAAF3AAkAAXgACgABeQABAAF6AAIAAUEAAwABQgABAAFDAAcBAUQCAUUBRgkAvAIDCQC2AgEFAUUFAWQJALYCAQUBRgEBRwIBRQFGCQC8AgMFAUUFAWQFAUYBAUgCAUkBSgkAoAMBCQC8AgMFAUkJALYCAQUBSgUBZAEBSwMBSQFKAUwJAKADAQkAvQIEBQFJCQC2AgEFAUoFAWQFAUwBAU0DAU4BTwFQCQBrAwUBTgUBTwUBUAEBUQEBSQMJAGYCAAAFAUkJAQEtAQUBSQUBSQEBUgEBSQMJAL8CAgUBZQUBSQkAvgIBBQFJBQFJAQFTAAIQJXNfX3N3YXBDb250cmFjdAEBVAACEyVzX19mYWN0b3J5Q29udHJhY3QBAVUAAhQlc19fbWFuYWdlclB1YmxpY0tleQEBVgACGyVzX19wZW5kaW5nTWFuYWdlclB1YmxpY0tleQEBVwACESVzJXNfX3ByaWNlX19sYXN0AQFYAgFZAVoJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFZCQDMCAIJAKQDAQUBWgUDbmlsBQFqAQJhYQICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fUF9fBQJhYgICX18FAmFjAQJhZAICYWICYWMJAKwCAgkArAICCQCsAgICCyVzJXMlc19fR19fBQJhYgICX18FAmFjAQJhZQACDyVzX19hbW91bnRBc3NldAECYWYAAg4lc19fcHJpY2VBc3NldAECYWcAAhElc19fZmFjdG9yeUNvbmZpZwECYWgAAhglcyVzX19tYXRjaGVyX19wdWJsaWNLZXkBAmFpAQJhagkArAICCQCsAgICCCVzJXMlc19fBQJhagIgX19tYXBwaW5nc19fcG9vbENvbnRyYWN0MkxwQXNzZXQBAmFrAgJhbAJhbQkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUCYWwCAl9fBQJhbQIIX19jb25maWcBAmFuAQJhbwkArAICAiglcyVzJXNfX21hcHBpbmdzX19iYXNlQXNzZXQyaW50ZXJuYWxJZF9fBQJhbwECYXAAAgwlc19fc2h1dGRvd24BAmFxAQJhcgkArAICAhIlcyVzX19wb29sV2VpZ2h0X18FAmFyAQJhcwACFyVzX19hbGxvd2VkTHBTY3JpcHRIYXNoAAJhdAIXJXNfX2ZlZUNvbGxlY3RvckFkZHJlc3MBAmF1AwJhdgJhdwJheAkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAiRvcmRlciB2YWxpZGF0aW9uIGZhaWxlZDogb3JkZXJWYWxpZD0JAKUDAQUCYXYCDSBzZW5kZXJWYWxpZD0JAKUDAQUCYXcCDiBtYXRjaGVyVmFsaWQ9CQClAwEFAmF4AQJheQICYXoCYUEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQJhegUCYUEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXoJAMwIAgIBLgkAzAgCBQJhQQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhQgICYXoCYUEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQJhegUCYUEJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUCYXoJAMwIAgIBLgkAzAgCBQJhQQkAzAgCAg8gaXMgbm90IGRlZmluZWQFA25pbAIAAQJhQwECYUQJAAIBCQC5CQIJAMwIAgIIbHAucmlkZToJAMwIAgUCYUQFA25pbAIBIAACYUUJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJheQIFBHRoaXMJAQFUAAACYUYJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJheQIFAmFFBQJhdAACYUcKAAJhSAkA/AcEBQJhRQIQZ2V0SW5GZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFIAgNJbnQFAmFICQACAQkArAICCQADAQUCYUgCGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAACYUkKAAJhSAkA/AcEBQJhRQIRZ2V0T3V0RmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhSAIDSW50BQJhSAkAAgEJAKwCAgkAAwEFAmFIAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQBAmFKAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQJhRQkBAmFwAAcBAmFLAAkA2QQBCQECYXkCBQJhRQkBAmFoAAECYUwABAJhTQkBAmF5AgUEdGhpcwkBAmFlAAQCYU4JAQJheQIFBHRoaXMJAQJhZgAEAmFtCQECYUICBQJhRQkBAmFuAQUCYU4EAmFsCQECYUICBQJhRQkBAmFuAQUCYU0JALUJAgkBAmF5AgUCYUUJAQJhawIJAKQDAQUCYWwJAKQDAQUCYW0FAWoBAmFPAQJhUAMJAAACBQJhUAUBaQUEdW5pdAkA2QQBBQJhUAECYVEBAmFQAwkAAAIFAmFQBQR1bml0BQFpCQDYBAEJAQV2YWx1ZQEFAmFQAQJhUgECYVMJAJkKBwkBEUBleHRyTmF0aXZlKDEwNjIpAQkAkQMCBQJhUwUBbwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQFwCQDZBAEJAJEDAgUCYVMFAXEJAQJhTwEJAJEDAgUCYVMFAXIJAQJhTwEJAJEDAgUCYVMFAXMJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJhUwUBdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFTBQF1AAJhVAkBAmFSAQkBAmFMAAACYVUFAmFUAAJhVggFAmFVAl8xAAJhVwgFAmFVAl8yAAJhWAgFAmFVAl8zAAJhWQgFAmFVAl80AAJhWggFAmFVAl81AAJiYQgFAmFVAl82AAJiYggFAmFVAl83AQJiYwAJALUJAgkBAmF5AgUCYUUJAQJhZwAFAWoAAmJkCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCCQECYmMABQFCAhlpbmNvcnJlY3Qgc3Rha2luZyBhZGRyZXNzAAJiZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgkBAmJjAAUBQwIZaW5jb3JyZWN0IHN0YWtpbmcgYWRkcmVzcwECYmYKAmJnAmJoAmJpAmJqAmJrAmJsAmJtAmJuAmJvAmJwCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiZwkAzAgCCQCkAwEFAmJoCQDMCAIJAKQDAQUCYmkJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJrCQDMCAIJAKQDAQUCYmwJAMwIAgkApAMBBQJibQkAzAgCCQCkAwEFAmJuCQDMCAIJAKQDAQUCYm8JAMwIAgkApAMBBQJicAUDbmlsBQFqAQJicQYCYnICYnMCYnQCYmoCYm0CYm4JALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJicgkAzAgCCQCkAwEFAmJzCQDMCAIJAKQDAQUCYnQJAMwIAgkApAMBBQJiagkAzAgCCQCkAwEFAmJtCQDMCAIJAKQDAQUCYm4FA25pbAUBagECYnUBAmJ2AwkAAAIFAmJ2AgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJidgECYncCAmJ4AmJ5CQC8AgMFAmJ4BQFkBQJieQECYnoEAmJBAmJCAmJDAmJEBAJiRQkBAUQCBQJiQwUCYkEEAmJGCQEBRAIFAmJEBQJiQgkBAmJ3AgUCYkYFAmJFAQJiRwMCYkMCYkQCYkgEAmJJCQECYUwABAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiTAkBAmJ6BAUCYkoFAmJLBQJiQwUCYkQEAmJ5CQEBRAIFAmJDBQJiSgQCYngJAQFEAgUCYkQFAmJLBAJiTQkBAUQCBQJiSAUBYgQCYk4JAQJidwIFAmJ5BQJiTQQCYk8JAQJidwIFAmJ4BQJiTQkAzAgCBQJiTAkAzAgCBQJiTgkAzAgCBQJiTwUDbmlsAQJiUAMCYkMCYkQCYkgEAmJRCQECYkcDBQJiQwUCYkQFAmJICQDMCAIJAQFIAgkAkQMCBQJiUQAABQFiCQDMCAIJAQFIAgkAkQMCBQJiUQABBQFiCQDMCAIJAQFIAgkAkQMCBQJiUQACBQFiBQNuaWwBAmJSBAJiUwJiVAJiVQJhYgQCYkkJAQJhTAAEAmJWCQCRAwIFAmJJBQFxBAJiVwkAkQMCBQJiSQUBcgQCYlgJAJEDAgUCYkkFAXMEAmJBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmJZCQCRAwIFAmJJBQFwBAJiWggJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFAmJWCQCsAgIJAKwCAgIGQXNzZXQgBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkDCQECIT0CBQJiVgUCYlQJAAIBAhVJbnZhbGlkIGFzc2V0IHBhc3NlZC4EAmNhCQECYnUBBQJiVwQCY2IJAQFEAgUCY2EFAmJBBAJjYwkBAmJ1AQUCYlgEAmNkCQEBRAIFAmNjBQJiQgQCY2UJAQJidwIFAmNkBQJjYgQCY2YJAQFIAgUCY2UFAWIEAmNnCQEBRAIFAmJVBQFiBAJjaAkBAUQCBQJiWgUBYgQCY2kJALwCAwUCY2IFAmNnBQJjaAQCY2oJALwCAwUCY2QFAmNnBQJjaAQCY2sJAQFIAgUCY2kFAmJBBAJjbAkBAUgCBQJjagUCYkIEAmNtAwkAAAIFAmJTAgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhYgUCY2sDCQAAAgUCYlcCBVdBVkVTBQR1bml0CQDZBAEFAmJXCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJjbAMJAAACBQJiWAIFV0FWRVMFBHVuaXQJANkEAQUCYlgJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBBQJhYgUCYlMJAQJicQYFAmNrBQJjbAUCYlUFAmNmBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmBQNuaWwJAJwKCgUCY2sFAmNsBQJiVwUCYlgFAmNhBQJjYwUCYloFAmNlBQJiWQUCY20BAmNuCQJiUwJjbwJjcAJjcQJjcgJjcwJhYgJjdAJjdQQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmN2CQCRAwIFAmJJBQFyBAJjdwkAkQMCBQJiSQUBcwQCY3gJAJEDAgUCYkkFAXYEAmN5CQCRAwIFAmJJBQF3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJiWQkAkQMCBQJiSQUBcAQCYloICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYlYJAKwCAgkArAICAgZBc3NldCAJANgEAQUCYlYCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJjegkA2AQBCQELdmFsdWVPckVsc2UCBQJjcQkA2QQBAgVXQVZFUwQCY0EJANgEAQkBC3ZhbHVlT3JFbHNlAgUCY3MJANkEAQIFV0FWRVMDAwkBAiE9AgUCY3YFAmN6BgkBAiE9AgUCY3cFAmNBCQACAQIiSW52YWxpZCBhbXQgb3IgcHJpY2UgYXNzZXQgcGFzc2VkLgQCY2EDBQJjdAkBAmJ1AQUCY3YJAGUCCQECYnUBBQJjdgUCY3AEAmNjAwUCY3QJAQJidQEFAmN3CQBlAgkBAmJ1AQUCY3cFAmNyBAJjQgkBAUQCBQJjcAUCYkoEAmNDCQEBRAIFAmNyBQJiSwQCY0QJAQJidwIFAmNDBQJjQgQCY2IJAQFEAgUCY2EFAmJKBAJjZAkBAUQCBQJjYwUCYksEAmNFAwkAAAIFAmJaAAAEAmNlBQFlBAJjRgUBZQQCYk0JAHYGCQC5AgIFAmNCBQJjQwAACQC2AgEABQABAAAFBERPV04JAJcKBQkBAUgCBQJiTQUBYgkBAUgCBQJjQgUCYkoJAQFIAgUCY0MFAmJLCQECYncCCQC3AgIFAmNkBQJjQwkAtwICBQJjYgUCY0IFAmNGBAJjZQkBAmJ3AgUCY2QFAmNiBAJjRgkAvAIDCQEBUgEJALgCAgUCY2UFAmNEBQFkBQJjZQQCY0cJAQFEAgUCY28FAWIDAwkBAiE9AgUCY2UFAWUJAL8CAgUCY0YFAmNHBwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQJjRgIeIGV4Y2VlZGVkIHRoZSBwYXNzZWQgbGltaXQgb2YgCQCmAwEFAmNHBAJjaAkBAUQCBQJiWgUBYgQCY0gJALwCAwUCY0IFAmNlBQFkBAJjSQkAvAIDBQJjQwUBZAUCY2UEAmNKAwkAvwICBQJjSAUCY0MJAJQKAgUCY0kFAmNDCQCUCgIFAmNCBQJjSAQCY0sIBQJjSgJfMQQCY0wIBQJjSgJfMgQCYk0JALwCAwUCY2gFAmNMBQJjZAkAlwoFCQEBSAIFAmJNBQFiCQEBSAIFAmNLBQJiSgkBAUgCBQJjTAUCYksFAmNlBQJjRgQCY00IBQJjRQJfMQQCY04IBQJjRQJfMgQCY08IBQJjRQJfMwQCY2YJAQFIAggFAmNFAl80BQFiBAJjUAkBAUgCCAUCY0UCXzUFAWIDCQBnAgAABQJjTQkAAgECNkludmFsaWQgY2FsY3VsYXRpb25zLiBMUCBjYWxjdWxhdGVkIGlzIGxlc3MgdGhhbiB6ZXJvLgQCY1EDCQEBIQEFAmN1AAAFAmNNBAJjUgkAZQIFAmNwBQJjTgQCY1MJAGUCBQJjcgUCY08EAmNUCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBVwAFAmNmCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNmCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQIFAmFiBQJiUwkBAmJmCgUCY04FAmNPBQJjUQUCY2YFAmNvBQJjUAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY1IFAmNTBQNuaWwJAJ8KDQUCY00FAmNRBQJjZgUCY2EFAmNjBQJiWgUCYlYFAmJZBQJjVAUCY1IFAmNTBQJjcQUCY3MBAmNVAQJjVgQCYkkJAQJhTAAEAmNXCQCRAwIFAmJJBQFyBAJjWAkAkQMCBQJiSQUBcwQCYlkJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBcAQCYkoJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdAQCYksJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQJiSQUBdQQCY1kJAQJidQEFAmNXBAJjWgkBAmJ1AQUCY1gEAmNlAwkAAAIIBQJjVglvcmRlclR5cGUFA0J1eQkBAmJ6BAUCYkoFAmJLCQBkAgUCY1kIBQJjVgZhbW91bnQFAmNaCQECYnoEBQJiSgUCYksJAGUCBQJjWQgFAmNWBmFtb3VudAUCY1oEAmNmCQEBSAIFAmNlBQFiAwMDCQECYUoABgkAAAIFAmJZBQFtBgkAAAIFAmJZBQFuCQACAQIcRXhjaGFuZ2Ugb3BlcmF0aW9ucyBkaXNhYmxlZAQCZGEICAUCY1YJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BAJkYgMJAAACBQJkYQUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGEEAmRjCAgFAmNWCWFzc2V0UGFpcgpwcmljZUFzc2V0BAJkZAMJAAACBQJkYwUEdW5pdAIFV0FWRVMJANgEAQkBBXZhbHVlAQUCZGMDAwkBAiE9AgUCZGIFAmNXBgkBAiE9AgUCZGQFAmNYCQACAQITV3Jvbmcgb3JkZXIgYXNzZXRzLgQCZGUIBQJjVgVwcmljZQQCZGYJAGsDBQFiBQJiSwUCYkoEAmRnCQEBTQMFAmRlBQFiBQJkZgQCZGgDCQAAAggFAmNWCW9yZGVyVHlwZQUDQnV5CQBnAgUCY2YFAmRnCQBnAgUCZGcFAmNmBgECZGkBAmRqAwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAQkAAgECHWV4YWN0bHkgMSBwYXltZW50IGlzIGV4cGVjdGVkBAJkawkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCYlQJAQV2YWx1ZQEIBQJkawdhc3NldElkBAJkbAgFAmRrBmFtb3VudAQCY0UJAQJiUgQJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQJANgEAQUCYlQFAmRsCAUCZGoGY2FsbGVyBAJjawgFAmNFAl8xBAJjbAgFAmNFAl8yBAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCY0UCXzkEAmNtCAUCY0UDXzEwAwMJAQJhSgAGCQAAAgUCYlkFAW4JAAIBCQCsAgICLEdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZCQCXCgUFAmNrBQJjbAUCZGwFAmJUBQJjbQECZG0DAmRqAmNvAmN1AwkBAiE9AgkAkAMBCAUCZGoIcGF5bWVudHMAAgkAAgECH2V4YWN0bHkgMiBwYXltZW50cyBhcmUgZXhwZWN0ZWQEAmRuCQEFdmFsdWUBCQCRAwIIBQJkaghwYXltZW50cwAABAJkbwkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAQQCZHAJAQJjbgkJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQFAmNvCAUCZG4GYW1vdW50CAUCZG4HYXNzZXRJZAgFAmRvBmFtb3VudAgFAmRvB2Fzc2V0SWQJAKUIAQgFAmRqBmNhbGxlcgcFAmN1BAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCZHACXzgDAwMJAQJhSgAGCQAAAgUCYlkFAWwGCQAAAgUCYlkFAW4JAAIBCQCsAgICLFB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbi4gU3RhdHVzID0gCQCkAwEFAmJZBQJkcAECZHEBAmRyBAJkcwkA/AcEBQJhRQIEZW1pdAkAzAgCBQJkcgUDbmlsBQNuaWwDCQAAAgUCZHMFAmRzBAJkdAQCZHUFAmRzAwkAAQIFAmR1AgdBZGRyZXNzBAJkdgUCZHUJAPwHBAUCZHYCBGVtaXQJAMwIAgUCZHIFA25pbAUDbmlsBQR1bml0AwkAAAIFAmR0BQJkdAUCZHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAmR3AgJkcgJkeAQCZHkDCQAAAgUCZHgAAAAACQBrAwUCZHIFAmR4BQFiCQCUCgIJAGUCBQJkcgUCZHkFAmR5AQJkegQCZEECZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmRECQECYnUBCQECYVEBBQJhWQQCZEUJAQJidQEJAQJhUQEFAmFaBAJkRgMJAAACBQJkQgUCYVkGAwkAAAIFAmRCBQJhWgcJAQJhQwECDWludmFsaWQgYXNzZXQEAmRHAwUCZEMJAJQKAgUCZEQFAmRFAwUCZEYJAJQKAgkAZQIFAmREBQJkQQUCZEUJAJQKAgUCZEQJAGUCBQJkRQUCZEEEAmRICAUCZEcCXzEEAmRJCAUCZEcCXzIEAmRKAwUCZEYJAJQKAgUCZEEAAAkAlAoCAAAFAmRBBAJkSwgFAmRKAl8xBAJkTAgFAmRKAl8yBAJkTQgJAQJkdwIFAmRLBQJhRwJfMQQCZE4ICQECZHcCBQJkTAUCYUcCXzEEAmRPCQECZHcCBQJkQQUCYUcEAmRQCAUCZE8CXzEEAmR5CAUCZE8CXzIEAmRRCQBkAgUCZEgFAmRNBAJkUgkAZAIFAmRJBQJkTgQCZFMJAQJidwIJAQFEAgUCZFIFAmJiCQEBRAIFAmRRBQJiYQQCZFQJAQFIAgUCZFMFAWIEAmRVAwUCZEYFAmRIBQJkSQQCZFYJALYCAQUCZFUEAmRXCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCYVgJAKwCAgkArAICAgZhc3NldCAJANgEAQUCYVgCDiBkb2Vzbid0IGV4aXN0CHF1YW50aXR5BAJkWAMJAL8CAgUCZFcFAWYGCQECYUMBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmRYBQJkWAQCZFkJALYCAQUCZFAEAmRaCQCWAwEJAMwIAgAACQDMCAIJAKADAQkAugICCQC5AgIFAmRXCQC4AgIJAQpzcXJ0QmlnSW50BAkAtwICBQFkCQC6AgIJALkCAgUCZFkFAWQFAmRWABIAEgUERE9XTgUBZAUBZAUDbmlsBAJjVAMFAmRDBQNuaWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFhAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJmCgUCZEsFAmRMBQJkWgUCZFQAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBAJlYQkBAmJ3AgkBAUQCBQJkSQUCYmIJAQFEAgUCZEgFAmJhBAJlYgkBAUgCBQJlYQUBYgQCZWMEAmVkAwUCZEYJAJQKAgUCZEsFAmRICQCUCgIFAmRMBQJkSQQCZHIIBQJlZAJfMQQCZWUIBQJlZAJfMgQCZWYJAKADAQkAvAIDBQJkVwkAtgIBCQBpAgUCZHIAAgkAtgIBBQJlZQkAawMJAGUCBQJkWgUCZWYFAWIFAmVmCQCWCgQFAmRaBQJjVAUCZHkFAmVjCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJlZwUCZWgCZFACZEICYWICYWMEAmRDCQAAAgUCYWMFBHVuaXQEAmVpCQDMCAIDCQAAAgUCZEIFAmFYBgkBAmFDAQIQaW52YWxpZCBscCBhc3NldAUDbmlsAwkAAAIFAmVpBQJlaQQCZWoDCQAAAgUCZWgFAmFZBgMJAAACBQJlaAUCYVoHCQECYUMBAg1pbnZhbGlkIGFzc2V0BAJlawMFAmVqCQC2AgEJAQJidQEJAQJhUQEFAmFZCQC2AgEJAQJidQEJAQJhUQEFAmFaBAJlbAkBAmJ1AQkBAmFRAQUCYVkEAmVtCQECYnUBCQECYVEBBQJhWgQCZW4DBQJlagUCZWwFAmVtBAJlbwkAtgIBBQJlbgQCZFcJALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJhWAkArAICCQCsAgICBmFzc2V0IAkA2AQBBQJhWAIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmVwCQC2AgEFAmRQBAJlcQkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALoCAgkAuQICBQJlawkAuAICBQFkCQB2BgkAuAICBQFkCQC6AgIJALkCAgUCZXAFAWQFAmRXABIFAWgAAAASBQRET1dOBQFkBQNuaWwEAmVyCQECZHcCBQJlcQUCYUkEAmVzCAUCZXICXzEEAmR5CAUCZXICXzIEAmV0AwUCZWoJAJYKBAUCZXMAAAkAZQIFAmVsBQJlcQUCZW0JAJYKBAAABQJlcwUCZWwJAGUCBQJlbQUCZXEEAmV1CAUCZXQCXzEEAmV2CAUCZXQCXzIEAmV3CAUCZXQCXzMEAmV4CAUCZXQCXzQEAmRTCQECYncCCQEBRAIFAmV4BQJiYgkBAUQCBQJldwUCYmEEAmRUCQEBSAIFAmRTBQFiBAJjVAMFAmRDBQNuaWwJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFkAgkApQgBCQEFdmFsdWUBBQJhYgkA2AQBCQEFdmFsdWUBBQJhYwkBAmJxBgUCZXUFAmV2BQJkUAUCZFQFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFXAAUCZFQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFYAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZFQFA25pbAQCZWEJAQJidwIJAQFEAgUCZW0FAmJiCQEBRAIFAmVsBQJiYQQCZWIJAQFIAgUCZWEFAWIEAmVjBAJleQkAaAIJAKADAQkAvAIDBQJlawUCZXAFAmRXAAIJAGsDCQBlAgUCZXMFAmV5BQFiBQJleQkAlgoEBQJlcwUCY1QFAmR5BQJlYwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZXoABAJkdQkAoggBCQEBVQADCQABAgUCZHUCBlN0cmluZwQCZUEFAmR1CQDZBAEFAmVBAwkAAQIFAmR1AgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmVCAAQCZHUJAKIIAQkBAVYAAwkAAQIFAmR1AgZTdHJpbmcEAmVBBQJkdQkA2QQBBQJlQQMJAAECBQJkdQIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJlQwECZGoEAmR1CQECZXoAAwkAAQIFAmR1AgpCeXRlVmVjdG9yBAJlRAUCZHUJAAACCAUCZGoPY2FsbGVyUHVibGljS2V5BQJlRAMJAAECBQJkdQIEVW5pdAkAAAIIBQJkagZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZUUBAmRqBAJlRgkAAgECEVBlcm1pc3Npb24gZGVuaWVkBAJkdQkBAmV6AAMJAAECBQJkdQIKQnl0ZVZlY3RvcgQCZUQFAmR1AwkAAAIIBQJkag9jYWxsZXJQdWJsaWNLZXkFAmVEBgUCZUYDCQABAgUCZHUCBFVuaXQDCQAAAggFAmRqBmNhbGxlcgUEdGhpcwYFAmVGCQACAQILTWF0Y2ggZXJyb3IcAmRqASFjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwUkVBRE9OTFkCAmVHAmVIBAJlSQMJAAACBQJlSAcEAmVKCQECYXkCBQR0aGlzCQECYWYABAJlSwkBAmF5AgUEdGhpcwkBAmFlAAkAlAoCBQJlSgUCZUsEAmVKCQECYXkCBQR0aGlzCQECYWUABAJlSwkBAmF5AgUEdGhpcwkBAmFmAAkAlAoCBQJlSgUCZUsEAmVKCAUCZUkCXzEEAmVLCAUCZUkCXzIEAmVMCQECYnUBBQJlSwQCZU0JAQJidQEFAmVKBAJlTgkAaQIJAGgCBQJlTQUCZUcJAGQCBQJlTAUCZUcEAmVPCQC5AgIJALYCAQUCZUwJALYCAQUCZU0EAmVQCQC5AgIJALcCAgkAtgIBCQECYnUBBQJlSwkAtgIBBQJlRwkAuAICCQC2AgEJAQJidQEFAmVKCQC2AgEFAmVOBAJlUQMJAMACAgUCZVAFAmVPBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmVRBQJlUQkAlAoCBQNuaWwFAmVOCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqASZjYWxjdWxhdGVBbW91bnRPdXRGb3JTd2FwQW5kU2VuZFRva2VucwQCZUcCZUgCZVICZVMEAmVpCQDMCAIDCQBnAggJAQV2YWx1ZQEJAJEDAggFAmRqCHBheW1lbnRzAAAGYW1vdW50BQJlRwYJAQJhQwECDFdyb25nIGFtb3VudAkAzAgCAwkAAAIIBQJkagZjYWxsZXIJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJheQIFBHRoaXMJAQFTAAYJAQJhQwECEVBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUCZWkFAmVpBAJkawkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCZUsDCQAAAggFAmRrB2Fzc2V0SWQFBHVuaXQJANgEAQkAmwMBAgVXQVZFUwkA2AQBCQEFdmFsdWUBCAUCZGsHYXNzZXRJZAQCZUoDCQAAAgUCZUgHCQECYXkCBQR0aGlzCQECYWYACQECYXkCBQR0aGlzCQECYWUABAJlTAkAZQIJAQJidQEFAmVLCAkBBXZhbHVlAQkAkQMCCAUCZGoIcGF5bWVudHMAAAZhbW91bnQEAmVNCQECYnUBBQJlSgQCZU4JAGkCCQBoAgUCZU0FAmVHCQBkAgUCZUwFAmVHBAJlTwkAaAIFAmVMBQJlTQQCZVAJAGgCCQECYnUBBQJlSwkAZQIJAQJidQEFAmVKBQJlTgQCZVEDCQBnAgUCZVAFAmVPBgkAAgECFG5ldyBLIGlzIGZld2VyIGVycm9yAwkAAAIFAmVRBQJlUQQCZVQDCQBnAgUCZU4FAmVSBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFAmVUBQJlVAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQERQGV4dHJOYXRpdmUoMTA2MikBBQJlUwUCZU4DCQAAAgUCZUsCBVdBVkVTBQR1bml0CQDZBAEFAmVKBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBCnNldE1hbmFnZXIBAmVVBAJlVgkBAmVFAQUCZGoDCQAAAgUCZVYFAmVWBAJlVwkA2QQBBQJlVQMJAAACBQJlVwUCZVcJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVYABQJlVQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQ5jb25maXJtTWFuYWdlcgAEAmVYCQECZUIABAJlWQMJAQlpc0RlZmluZWQBBQJlWAYJAAIBAhJObyBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZVkFAmVZBAJlWgMJAAACCAUCZGoPY2FsbGVyUHVibGljS2V5CQEFdmFsdWUBBQJlWAYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUCZVoFAmVaCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQFVAAkA2AQBCQEFdmFsdWUBBQJlWAkAzAgCCQELRGVsZXRlRW50cnkBCQEBVgAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEDcHV0AgJjbwJmYQMJAGYCAAAFAmNvCQACAQIgSW52YWxpZCBzbGlwcGFnZVRvbGVyYW5jZSBwYXNzZWQEAmRwCQECZG0DBQJkagUCY28GBAJjUQgFAmRwAl8yBAJiVggFAmRwAl83BAJjbQgFAmRwAl85BAJjUggFAmRwA18xMAQCY1MIBQJkcANfMTEEAmZiCAUCZHADXzEyBAJmYwgFAmRwA18xMwQCZHMJAPwHBAUCYUUCBGVtaXQJAMwIAgUCY1EFA25pbAUDbmlsAwkAAAIFAmRzBQJkcwQCZHQEAmR1BQJkcwMJAAECBQJkdQIHQWRkcmVzcwQCZHYFAmR1CQD8BwQFAmR2AgRlbWl0CQDMCAIFAmNRBQNuaWwFA25pbAUEdW5pdAMJAAACBQJkdAUCZHQEAmZkAwkAZgIFAmNSAAAJAPwHBAUCYmUCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJmYgUCY1IFA25pbAUDbmlsAwkAAAIFAmZkBQJmZAQCZmUDCQBmAgUCY1MAAAkA/AcEBQJiZQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmZjBQJjUwUDbmlsBQNuaWwDCQAAAgUCZmUFAmZlBAJmZgMFAmZhBAJmZwkA/AcEBQJiZAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYlYFAmNRBQNuaWwDCQAAAgUCZmcFAmZnBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRqBmNhbGxlcgUCY1EFAmJWBQNuaWwJAM4IAgUCY20FAmZmCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQpwdXRGb3JGcmVlAQJmaAMJAGYCAAAFAmZoCQACAQIUSW52YWxpZCB2YWx1ZSBwYXNzZWQEAmRwCQECZG0DBQJkagUCZmgHCAUCZHACXzkCZGoBCXB1dE9uZVRrbgICZmkCZmoEAmZrCgACYUgJAPwHBAUCYUUCKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJhSAIHQm9vbGVhbgUCYUgJAAIBCQCsAgIJAAMBBQJhSAIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZmwDAwMJAQJhSgAGCQAAAgUCYVcFAWwGCQAAAgUCYVcFAW4GBQJmawQCZWkJAMwIAgMDCQEBIQEFAmZsBgkBAmVDAQUCZGoGCQECYUMBAiFwdXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkaghwYXltZW50cwABBgkBAmFDAQIeZXhhY3RseSAxIHBheW1lbnQgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWkFAmVpBAJmbQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCZEIIBQJmbQdhc3NldElkBAJkQQgFAmZtBmFtb3VudAQCYWIIBQJkagZjYWxsZXIEAmFjCAUCZGoNdHJhbnNhY3Rpb25JZAQCZm4JAQJkegQFAmRBBQJkQgUCYWIFAmFjAwkAAAIFAmZuBQJmbgQCZm8IBQJmbgJfNAQCZHkIBQJmbgJfMwQCY1QIBQJmbgJfMgQCZnAIBQJmbgJfMQQCZnEDAwkAZgIFAmZpAAAJAGYCBQJmaQUCZnAHCQECYUMBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZpBQNuaWwCAAUCZnAEAmRzCQECZHEBBQJmcQMJAAACBQJkcwUCZHMEAmZmAwUCZmoEAmZyCQD8BwQFAmJkAgVzdGFrZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhWAUCZnEFA25pbAMJAAACBQJmcgUCZnIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUCZGoGY2FsbGVyBQJmcQUCYVgFA25pbAQCZnMDCQBmAgUCZHkAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRgUCZHkFAmRCBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY1QFAmZmBQJmcwUCZnEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBEXB1dE9uZVRrblJFQURPTkxZAgJkQgJkQQQCZnQJAQJkegQFAmRBCQECYU8BBQJkQgUEdW5pdAUEdW5pdAQCZnAIBQJmdAJfMQQCY1QIBQJmdAJfMgQCZHkIBQJmdAJfMwQCZm8IBQJmdAJfNAkAlAoCBQNuaWwJAJUKAwUCZnAFAmR5BQJmbwJkagEJZ2V0T25lVGtuAgJmdQJmaQQCZmsKAAJhSAkA/AcEBQJhRQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmFIAgdCb29sZWFuBQJhSAkAAgEJAKwCAgkAAwEFAmFIAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJmdgMDCQECYUoABgkAAAIFAmFXBQFuBgUCZmsEAmVpCQDMCAIDAwkBASEBBQJmdgYJAQJlQwEFAmRqBgkBAmFDAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZGoIcGF5bWVudHMAAQYJAQJhQwECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVpBQJlaQQCZWgJAQJhTwEFAmZ1BAJmbQkAkQMCCAUCZGoIcGF5bWVudHMAAAQCZEIIBQJmbQdhc3NldElkBAJkUAgFAmZtBmFtb3VudAQCYWIIBQJkagZjYWxsZXIEAmFjCAUCZGoNdHJhbnNhY3Rpb25JZAQCZncJAQJlZwUFAmVoBQJkUAUCZEIFAmFiBQJhYwMJAAACBQJmdwUCZncEAmZvCAUCZncCXzQEAmR5CAUCZncCXzMEAmNUCAUCZncCXzIEAmZ4CAUCZncCXzEEAmRyAwMJAGYCBQJmaQAACQBmAgUCZmkFAmZ4BwkBAmFDAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmaQUDbmlsAgAFAmZ4BAJmeQkA/AcEBQJhRQIEYnVybgkAzAgCBQJkUAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJkQgUCZFAFA25pbAMJAAACBQJmeQUCZnkEAmZ6CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFiBQJkcgUCZWgFA25pbAQCZnMDCQBmAgUCZHkAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhRgUCZHkFAmVoBQNuaWwFA25pbAkAlAoCCQDOCAIJAM4IAgUCY1QFAmZ6BQJmcwUCZHIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBEWdldE9uZVRrblJFQURPTkxZAgJlaAJkUAQCZkEJAQJlZwUJAQJhTwEFAmVoBQJkUAUCYVgFBHVuaXQFBHVuaXQEAmZ4CAUCZkECXzEEAmNUCAUCZkECXzIEAmR5CAUCZkECXzMEAmZvCAUCZkECXzQJAJQKAgUDbmlsCQCVCgMFAmZ4BQJkeQUCZm8CZGoBE3Vuc3Rha2VBbmRHZXRPbmVUa24DAmZCAmZ1AmZpBAJmawoAAmFICQD8BwQFAmFFAihpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZFJFQURPTkxZCQDMCAIJAKUIAQUEdGhpcwUDbmlsBQNuaWwDCQABAgUCYUgCB0Jvb2xlYW4FAmFICQACAQkArAICCQADAQUCYUgCHCBjb3VsZG4ndCBiZSBjYXN0IHRvIEJvb2xlYW4EAmZ2AwMJAQJhSgAGCQAAAgUCYVcFAW4GBQJmawQCZWkJAMwIAgMDCQEBIQEFAmZ2BgkBAmVDAQUCZGoGCQECYUMBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkaghwYXltZW50cwAABgkBAmFDAQIYbm8gcGF5bWVudHMgYXJlIGV4cGVjdGVkBQNuaWwDCQAAAgUCZWkFAmVpBAJlaAkBAmFPAQUCZnUEAmFiCAUCZGoGY2FsbGVyBAJhYwgFAmRqDXRyYW5zYWN0aW9uSWQEAmZDCQD8BwQFAmJkAgd1bnN0YWtlCQDMCAIJANgEAQUCYVgJAMwIAgUCZkIFA25pbAUDbmlsAwkAAAIFAmZDBQJmQwQCZkQJAQJlZwUFAmVoBQJmQgUCYVgFAmFiBQJhYwMJAAACBQJmRAUCZkQEAmZvCAUCZkQCXzQEAmR5CAUCZkQCXzMEAmNUCAUCZkQCXzIEAmZ4CAUCZkQCXzEEAmRyAwMJAGYCBQJmaQAACQBmAgUCZmkFAmZ4BwkBAmFDAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmaQUDbmlsAgAFAmZ4BAJmeQkA/AcEBQJhRQIEYnVybgkAzAgCBQJmQgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJhWAUCZkIFA25pbAMJAAACBQJmeQUCZnkEAmZ6CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQJkagZjYWxsZXIFAmRyBQJlaAUDbmlsBAJmcwMJAGYCBQJkeQAACQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmFGBQJkeQUCZWgFA25pbAUDbmlsCQCUCgIJAM4IAgkAzggCBQJjVAUCZnoFAmZzBQJkcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkagEDZ2V0AAQCY0UJAQJkaQEFAmRqBAJmRQgFAmNFAl8xBAJjbAgFAmNFAl8yBAJkbAgFAmNFAl8zBAJiVAgFAmNFAl80BAJjbQgFAmNFAl81BAJmRgkA/AcEBQJhRQIEYnVybgkAzAgCBQJkbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVAUCZGwFA25pbAMJAAACBQJmRgUCZkYFAmNtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqAQlnZXROb0xlc3MCAmZHAmZIBAJjRQkBAmRpAQUCZGoEAmNrCAUCY0UCXzEEAmNsCAUCY0UCXzIEAmRsCAUCY0UCXzMEAmJUCAUCY0UCXzQEAmNtCAUCY0UCXzUDCQBmAgUCZkcFAmNrCQACAQkArAICCQCsAgIJAKwCAgIcbm9MZXNzVGhlbkFtdEFzc2V0IGZhaWxlZDogIAkApAMBBQJjawIDIDwgCQCkAwEFAmZHAwkAZgIFAmZIBQJjbAkAAgEJAKwCAgkArAICCQCsAgICHW5vTGVzc1RoZW5QcmljZUFzc2V0IGZhaWxlZDogCQCkAwEFAmNsAgMgPCAJAKQDAQUCZkgEAmZGCQD8BwQFAmFFAgRidXJuCQDMCAIFAmRsBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmJUBQJkbAUDbmlsAwkAAAIFAmZGBQJmRgUCY20JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBDXVuc3Rha2VBbmRHZXQBAmRyBAJmSQMJAQIhPQIJAJADAQgFAmRqCHBheW1lbnRzAAAJAAIBAhhObyBwYXltZW50cyBhcmUgZXhwZWN0ZWQGAwkAAAIFAmZJBQJmSQQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmZDCQD8BwQFAmJkAgd1bnN0YWtlCQDMCAIJANgEAQUCYlYJAMwIAgUCZHIFA25pbAUDbmlsAwkAAAIFAmZDBQJmQwQCY0UJAQJiUgQJANgEAQgFAmRqDXRyYW5zYWN0aW9uSWQJANgEAQUCYlYFAmRyCAUCZGoGY2FsbGVyBAJiWQkBDXBhcnNlSW50VmFsdWUBCAUCY0UCXzkEAmNtCAUCY0UDXzEwBAJmSgMDCQECYUoABgkAAAIFAmJZBQFuCQACAQkArAICAixHZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4uIFN0YXR1cyA9IAkApAMBBQJiWQYDCQAAAgUCZkoFAmZKBAJmRgkA/AcEBQJhRQIEYnVybgkAzAgCBQJkcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJiVgUCZHIFA25pbAMJAAACBQJmRgUCZkYFAmNtCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRqARN1bnN0YWtlQW5kR2V0Tm9MZXNzAwJmQgJmSwJmSAQCZnYDCQECYUoABgkAAAIFAmFXBQFuBAJlaQkAzAgCAwkBASEBBQJmdgYJAAIBAiFnZXQgb3BlcmF0aW9uIGlzIGJsb2NrZWQgYnkgYWRtaW4JAMwIAgMJAAACCQCQAwEIBQJkaghwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmVpBQJlaQQCZkMJAPwHBAUCYmQCB3Vuc3Rha2UJAMwIAgkA2AQBBQJhWAkAzAgCBQJmQgUDbmlsBQNuaWwDCQAAAgUCZkMFAmZDBAJjRQkBAmJSBAkA2AQBCAUCZGoNdHJhbnNhY3Rpb25JZAkA2AQBBQJhWAUCZkIIBQJkagZjYWxsZXIEAmNrCAUCY0UCXzEEAmNsCAUCY0UCXzIEAmNtCAUCY0UDXzEwBAJmTAkAzAgCAwkAZwIFAmNrBQJmSwYJAAIBCQC5CQIJAMwIAgIsYW1vdW50IGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSwUDbmlsAgAJAMwIAgMJAGcCBQJjbAUCZkgGCQACAQkAuQkCCQDMCAICK3ByaWNlIGFzc2V0IGFtb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQJmSAUDbmlsAgAFA25pbAMJAAACBQJmTAUCZkwEAmZGCQD8BwQFAmFFAgRidXJuCQDMCAIFAmZCBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmFYBQJmQgUDbmlsAwkAAAIFAmZGBQJmRgUCY20JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZGoBCGFjdGl2YXRlAgJmTQJmTgMJAQIhPQIJAKUIAQgFAmRqBmNhbGxlcgkApQgBBQJhRQkAAgECEnBlcm1pc3Npb25zIGRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZQAFAmZNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgAFAmZOBQNuaWwCB3N1Y2Nlc3MCZGoBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBAmFMAAJkagEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQECYnYJAJQKAgUDbmlsCQECYnUBBQJidgJkagEZY2FsY1ByaWNlc1dyYXBwZXJSRUFET05MWQMCYkMCYkQCYkgEAmJRCQECYkcDBQJiQwUCYkQFAmJICQCUCgIFA25pbAkAzAgCCQCmAwEJAJEDAgUCYlEAAAkAzAgCCQCmAwEJAJEDAgUCYlEAAQkAzAgCCQCmAwEJAJEDAgUCYlEAAgUDbmlsAmRqARR0b1gxOFdyYXBwZXJSRUFET05MWQIBRQFGCQCUCgIFA25pbAkApgMBCQEBRAIFAUUFAUYCZGoBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUkBSgkAlAoCBQNuaWwJAQFIAgkApwMBBQFJBQFKAmRqAR5jYWxjUHJpY2VCaWdJbnRXcmFwcGVyUkVBRE9OTFkCAmJ4AmJ5CQCUCgIFA25pbAkApgMBCQECYncCCQCnAwEFAmJ4CQCnAwEFAmJ5AmRqASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkCYlMCY28CY3ACY3ECY3ICY3MCYWICY3QCY3UJAJQKAgUDbmlsCQECY24JBQJiUwUCY28FAmNwBQJjcQUCY3IFAmNzBQJhYgUCY3QFAmN1AmRqASNlc3RpbWF0ZUdldE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQQCYlMCYlQCYlUCYWIEAmNFCQECYlIEBQJiUwUCYlQFAmJVCQERQGV4dHJOYXRpdmUoMTA2MikBBQJhYgkAlAoCBQNuaWwJAJwKCggFAmNFAl8xCAUCY0UCXzIIBQJjRQJfMwgFAmNFAl80CAUCY0UCXzUIBQJjRQJfNggFAmNFAl83CQCmAwEIBQJjRQJfOAgFAmNFAl85CAUCY0UDXzEwAmRqAQ1zdGF0c1JFQURPTkxZAAQCYkkJAQJhTAAEAmJWCQDZBAEJAJEDAgUCYkkFAXEEAmNXCQCRAwIFAmJJBQFyBAJjWAkAkQMCBQJiSQUBcwQCY3gJAJEDAgUCYkkFAXYEAmN5CQCRAwIFAmJJBQF3BAJiSgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF0BAJiSwkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmJJBQF1BAJmTwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiVgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmNZCQECYnUBBQJjVwQCY1oJAQJidQEFAmNYBAJmUAMJAAACBQJmTwAACQDMCAIFAWUJAMwIAgUBZQkAzAgCBQFlBQNuaWwJAQJiRwMFAmNZBQJjWgUCZk8EAmNmAAAEAmZRCQEBSAIJAJEDAgUCZlAAAQUBYgQCZlIJAQFIAgkAkQMCBQJmUAACBQFiBAJmUwkBBXZhbHVlAQkAmggCBQJhRQkBAmFxAQkApQgBBQR0aGlzCQCUCgIFA25pbAkAuQkCCQDMCAICDiVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUCY1kJAMwIAgkApAMBBQJjWgkAzAgCCQCkAwEFAmZPCQDMCAIJAKQDAQUCY2YJAMwIAgkApAMBBQJmUQkAzAgCCQCkAwEFAmZSCQDMCAIJAKQDAQUCZlMFA25pbAUBagJkagEgZXZhbHVhdGVQdXRCeUFtb3VudEFzc2V0UkVBRE9OTFkBAmNwBAJiSQkBAmFMAAQCYlYJANkEAQkAkQMCBQJiSQUBcQQCY3YJAJEDAgUCYkkFAXIEAmJXCQDZBAEFAmN2BAJjdwkAkQMCBQJiSQUBcwQCYlgJANkEAQUCY3cEAmJKCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJLCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmJZCQCRAwIFAmJJBQFwBAJmTwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiVgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmNZCQECYnUBBQJjdgQCY1oJAQJidQEFAmN3BAJiRQkBAUQCBQJjWQUCYkoEAmJGCQEBRAIFAmNaBQJiSwQCY2UDCQAAAgUCZk8AAAUBZQkBAmJ3AgUCYkYFAmJFBAJjQgkBAUQCBQJjcAUCYkoEAmNDCQC8AgMFAmNCBQJjZQUBZAQCY3IJAQFIAgUCY0MFAmJLBAJkcAkBAmNuCQIAAKDCHgUCY3AFAmJXBQJjcgUCYlgCAAYHBAJjTQgFAmRwAl8xBAJmVAgFAmRwAl8zBAJjYQgFAmRwAl80BAJjYwgFAmRwAl81BAJiWggFAmRwAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjTQkAzAgCCQCkAwEJAQFIAgUCY2UFAWIJAMwIAgkApAMBBQJjYQkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCYloJAMwIAgUCYlkJAMwIAgkApAMBBQJjcAkAzAgCCQCkAwEFAmNyBQNuaWwFAWoCZGoBH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkBAmNyBAJiSQkBAmFMAAQCYlYJANkEAQkAkQMCBQJiSQUBcQQCY3YJAJEDAgUCYkkFAXIEAmJXCQDZBAEFAmN2BAJjdwkAkQMCBQJiSQUBcwQCYlgJANkEAQUCY3cEAmJKCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXQEAmJLCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYkkFAXUEAmJZCQCRAwIFAmJJBQFwBAJmTwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQJiVgkArAICCQCsAgICBkFzc2V0IAkA2AQBBQJiVgIOIGRvZXNuJ3QgZXhpc3QIcXVhbnRpdHkEAmZVCQECYnUBBQJjdgQCZlYJAQJidQEFAmN3BAJmVwkBAUQCBQJmVQUCYkoEAmZYCQEBRAIFAmZWBQJiSwQCY2UDCQAAAgUCZk8AAAUBZQkBAmJ3AgUCZlgFAmZXBAJjQwkBAUQCBQJjcgUCYksEAmNCCQC8AgMFAmNDBQFkBQJjZQQCY3AJAQFIAgUCY0IFAmJKBAJkcAkBAmNuCQIAAKDCHgUCY3AFAmJXBQJjcgUCYlgCAAYHBAJjTQgFAmRwAl8xBAJmVAgFAmRwAl8zBAJjYQgFAmRwAl80BAJjYwgFAmRwAl81BAJiWggFAmRwAl82CQCUCgIFA25pbAkAuQkCCQDMCAICECVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJjTQkAzAgCCQCkAwEJAQFIAgUCY2UFAWIJAMwIAgkApAMBBQJjYQkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCYloJAMwIAgUCYlkJAMwIAgkApAMBBQJjcAkAzAgCCQCkAwEFAmNyBQNuaWwFAWoCZGoBE2V2YWx1YXRlR2V0UkVBRE9OTFkCAmZZAmZaBAJjRQkBAmJSBAIABQJmWQUCZloFBHRoaXMEAmNrCAUCY0UCXzEEAmNsCAUCY0UCXzIEAmNhCAUCY0UCXzUEAmNjCAUCY0UCXzYEAmJaCAUCY0UCXzcEAmNmCAUCY0UCXzgEAmJZCQENcGFyc2VJbnRWYWx1ZQEIBQJjRQJfOQkAlAoCBQNuaWwJALkJAgkAzAgCAg4lZCVkJWQlZCVkJWQlZAkAzAgCCQCkAwEFAmNrCQDMCAIJAKQDAQUCY2wJAMwIAgkApAMBBQJjYQkAzAgCCQCkAwEFAmNjCQDMCAIJAKQDAQUCYloJAMwIAgkApgMBBQJjZgkAzAgCCQCkAwEFAmJZBQNuaWwFAWoBAmdhAQJnYgAEAmdjBAJkdQkBAmV6AAMJAAECBQJkdQIKQnl0ZVZlY3RvcgQCZUQFAmR1BQJlRAMJAAECBQJkdQIEVW5pdAgFAmdhD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJkdQUCZ2EDCQABAgUCZHUCBU9yZGVyBAJjVgUCZHUEAmdkCQECYUsABAJhdgkBAmNVAQUCY1YEAmF3CQD0AwMIBQJjVglib2R5Qnl0ZXMJAJEDAggFAmNWBnByb29mcwAACAUCY1YPc2VuZGVyUHVibGljS2V5BAJheAkA9AMDCAUCY1YJYm9keUJ5dGVzCQCRAwIIBQJjVgZwcm9vZnMAAQUCZ2QDAwMFAmF2BQJhdwcFAmF4BwYJAQJhdQMFAmF2BQJhdwUCYXgDCQABAgUCZHUCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJlQQUCZHUEAmdlCQD2AwEJAQV2YWx1ZQEIBQJlQQZzY3JpcHQEAmdmCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYUUJAQJhcwAEAmdnCQDxBwEFBHRoaXMDAwkAAAIFAmdmBQJnZQkBAiE9AgUCZ2cFAmdlBwYJAPQDAwgFAmdhCWJvZHlCeXRlcwkAkQMCCAUCZ2EGcHJvb2ZzAAAFAmdjCQD0AwMIBQJnYQlib2R5Qnl0ZXMJAJEDAggFAmdhBnByb29mcwAABQJnY3VB6WA=", "chainId": 84, "height": 2441750, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: EVocwwUUMEi3obSa5Cik7Hmb1WCRfFoHPFQneg9v1GHB Next: AwWkqBbUqcToRCoKbiHUvxqQK2Ej8TARad4qRVXyJy2g Diff:
OldNewDifferences
675675 let eL = bu(eK)
676676 let eM = bu(eJ)
677677 let eN = ((eM * eG) / (eL + eG))
678- $Tuple2(nil, eN)
678+ let eO = (toBigInt(eL) * toBigInt(eM))
679+ let eP = ((toBigInt(bu(eK)) + toBigInt(eG)) * (toBigInt(bu(eJ)) - toBigInt(eN)))
680+ let eQ = if ((eP >= eO))
681+ then true
682+ else throw("new K is fewer error")
683+ if ((eQ == eQ))
684+ then $Tuple2(nil, eN)
685+ else throw("Strict value is not equal to itself.")
679686 }
680687
681688
682689
683690 @Callable(dj)
684-func calculateAmountOutForSwapAndSendTokens (eG,eH,eO,eP) = {
691+func calculateAmountOutForSwapAndSendTokens (eG,eH,eR,eS) = {
685692 let ei = [if ((value(dj.payments[0]).amount >= eG))
686693 then true
687694 else aC("Wrong amount"), if ((dj.caller == addressFromStringValue(ay(this, S()))))
699706 let eL = (bu(eK) - value(dj.payments[0]).amount)
700707 let eM = bu(eJ)
701708 let eN = ((eM * eG) / (eL + eG))
702- let eQ = (eL * eM)
703- let eR = (bu(eK) * (bu(eJ) - eN))
704- let eS = if ((eR >= eQ))
709+ let eO = (eL * eM)
710+ let eP = (bu(eK) * (bu(eJ) - eN))
711+ let eQ = if ((eP >= eO))
705712 then true
706713 else throw("new K is fewer error")
707- if ((eS == eS))
714+ if ((eQ == eQ))
708715 then {
709- let eT = if ((eN >= eO))
716+ let eT = if ((eN >= eR))
710717 then true
711718 else throw("Exchange result is fewer coins than expected")
712719 if ((eT == eT))
713- then [ScriptTransfer(addressFromStringValue(eP), eN, if ((eK == "WAVES"))
720+ then [ScriptTransfer(addressFromStringValue(eS), eN, if ((eK == "WAVES"))
714721 then unit
715722 else fromBase58String(eJ))]
716723 else throw("Strict value is not equal to itself.")
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 8
55
66 let b = 100000000
77
88 let c = toBigInt(100000000)
99
1010 let d = toBigInt(1000000000000000000)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(0)
1515
1616 let g = toBigInt(1)
1717
1818 let h = toBigInt(2)
1919
2020 let i = "WAVES"
2121
2222 let j = "__"
2323
2424 let k = 1
2525
2626 let l = 2
2727
2828 let m = 3
2929
3030 let n = 4
3131
3232 let o = 1
3333
3434 let p = 2
3535
3636 let q = 3
3737
3838 let r = 4
3939
4040 let s = 5
4141
4242 let t = 6
4343
4444 let u = 7
4545
4646 let v = 8
4747
4848 let w = 9
4949
5050 let x = 10
5151
5252 let y = 1
5353
5454 let z = 2
5555
5656 let A = 3
5757
5858 let B = 1
5959
6060 let C = 7
6161
6262 func D (E,F) = fraction(toBigInt(E), d, toBigInt(F))
6363
6464
6565 func G (E,F) = fraction(E, d, F)
6666
6767
6868 func H (I,J) = toInt(fraction(I, toBigInt(J), d))
6969
7070
7171 func K (I,J,L) = toInt(fraction(I, toBigInt(J), d, L))
7272
7373
7474 func M (N,O,P) = fraction(N, O, P)
7575
7676
7777 func Q (I) = if ((0 > I))
7878 then -(I)
7979 else I
8080
8181
8282 func R (I) = if ((e > I))
8383 then -(I)
8484 else I
8585
8686
8787 func S () = "%s__swapContract"
8888
8989
9090 func T () = "%s__factoryContract"
9191
9292
9393 func U () = "%s__managerPublicKey"
9494
9595
9696 func V () = "%s__pendingManagerPublicKey"
9797
9898
9999 func W () = "%s%s__price__last"
100100
101101
102102 func X (Y,Z) = makeString(["%s%s%d%d__price__history", toString(Y), toString(Z)], j)
103103
104104
105105 func aa (ab,ac) = ((("%s%s%s__P__" + ab) + "__") + ac)
106106
107107
108108 func ad (ab,ac) = ((("%s%s%s__G__" + ab) + "__") + ac)
109109
110110
111111 func ae () = "%s__amountAsset"
112112
113113
114114 func af () = "%s__priceAsset"
115115
116116
117117 func ag () = "%s__factoryConfig"
118118
119119
120120 func ah () = "%s%s__matcher__publicKey"
121121
122122
123123 func ai (aj) = (("%s%s%s__" + aj) + "__mappings__poolContract2LpAsset")
124124
125125
126126 func ak (al,am) = (((("%d%d%s__" + al) + "__") + am) + "__config")
127127
128128
129129 func an (ao) = ("%s%s%s__mappings__baseAsset2internalId__" + ao)
130130
131131
132132 func ap () = "%s__shutdown"
133133
134134
135135 func aq (ar) = ("%s%s__poolWeight__" + ar)
136136
137137
138138 func as () = "%s__allowedLpScriptHash"
139139
140140
141141 let at = "%s__feeCollectorAddress"
142142
143143 func au (av,aw,ax) = throw(((((("order validation failed: orderValid=" + toString(av)) + " senderValid=") + toString(aw)) + " matcherValid=") + toString(ax)))
144144
145145
146146 func ay (az,aA) = valueOrErrorMessage(getString(az, aA), makeString(["mandatory ", toString(az), ".", aA, " is not defined"], ""))
147147
148148
149149 func aB (az,aA) = valueOrErrorMessage(getInteger(az, aA), makeString(["mandatory ", toString(az), ".", aA, " is not defined"], ""))
150150
151151
152152 func aC (aD) = throw(makeString(["lp.ride:", aD], " "))
153153
154154
155155 let aE = addressFromStringValue(ay(this, T()))
156156
157157 let aF = addressFromStringValue(ay(aE, at))
158158
159159 let aG = {
160160 let aH = invoke(aE, "getInFeeREADONLY", [toString(this)], nil)
161161 if ($isInstanceOf(aH, "Int"))
162162 then aH
163163 else throw(($getType(aH) + " couldn't be cast to Int"))
164164 }
165165
166166 let aI = {
167167 let aH = invoke(aE, "getOutFeeREADONLY", [toString(this)], nil)
168168 if ($isInstanceOf(aH, "Int"))
169169 then aH
170170 else throw(($getType(aH) + " couldn't be cast to Int"))
171171 }
172172
173173 func aJ () = valueOrElse(getBoolean(aE, ap()), false)
174174
175175
176176 func aK () = fromBase58String(ay(aE, ah()))
177177
178178
179179 func aL () = {
180180 let aM = ay(this, ae())
181181 let aN = ay(this, af())
182182 let am = aB(aE, an(aN))
183183 let al = aB(aE, an(aM))
184184 split(ay(aE, ak(toString(al), toString(am))), j)
185185 }
186186
187187
188188 func aO (aP) = if ((aP == i))
189189 then unit
190190 else fromBase58String(aP)
191191
192192
193193 func aQ (aP) = if ((aP == unit))
194194 then i
195195 else toBase58String(value(aP))
196196
197197
198198 func aR (aS) = $Tuple7(addressFromStringValue(aS[o]), parseIntValue(aS[p]), fromBase58String(aS[q]), aO(aS[r]), aO(aS[s]), parseIntValue(aS[t]), parseIntValue(aS[u]))
199199
200200
201201 let aT = aR(aL())
202202
203203 let aU = aT
204204
205205 let aV = aU._1
206206
207207 let aW = aU._2
208208
209209 let aX = aU._3
210210
211211 let aY = aU._4
212212
213213 let aZ = aU._5
214214
215215 let ba = aU._6
216216
217217 let bb = aU._7
218218
219219 func bc () = split(ay(aE, ag()), j)
220220
221221
222222 let bd = valueOrErrorMessage(addressFromString(bc()[B]), "incorrect staking address")
223223
224224 let be = valueOrErrorMessage(addressFromString(bc()[C]), "incorrect staking address")
225225
226226 func bf (bg,bh,bi,bj,bk,bl,bm,bn,bo,bp) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bg), toString(bh), toString(bi), toString(bj), toString(bk), toString(bl), toString(bm), toString(bn), toString(bo), toString(bp)], j)
227227
228228
229229 func bq (br,bs,bt,bj,bm,bn) = makeString(["%d%d%d%d%d%d", toString(br), toString(bs), toString(bt), toString(bj), toString(bm), toString(bn)], j)
230230
231231
232232 func bu (bv) = if ((bv == "WAVES"))
233233 then wavesBalance(this).available
234234 else assetBalance(this, fromBase58String(bv))
235235
236236
237237 func bw (bx,by) = fraction(bx, d, by)
238238
239239
240240 func bz (bA,bB,bC,bD) = {
241241 let bE = D(bC, bA)
242242 let bF = D(bD, bB)
243243 bw(bF, bE)
244244 }
245245
246246
247247 func bG (bC,bD,bH) = {
248248 let bI = aL()
249249 let bJ = parseIntValue(bI[t])
250250 let bK = parseIntValue(bI[u])
251251 let bL = bz(bJ, bK, bC, bD)
252252 let by = D(bC, bJ)
253253 let bx = D(bD, bK)
254254 let bM = D(bH, b)
255255 let bN = bw(by, bM)
256256 let bO = bw(bx, bM)
257257 [bL, bN, bO]
258258 }
259259
260260
261261 func bP (bC,bD,bH) = {
262262 let bQ = bG(bC, bD, bH)
263263 [H(bQ[0], b), H(bQ[1], b), H(bQ[2], b)]
264264 }
265265
266266
267267 func bR (bS,bT,bU,ab) = {
268268 let bI = aL()
269269 let bV = bI[q]
270270 let bW = bI[r]
271271 let bX = bI[s]
272272 let bA = parseIntValue(bI[t])
273273 let bB = parseIntValue(bI[u])
274274 let bY = bI[p]
275275 let bZ = valueOrErrorMessage(assetInfo(fromBase58String(bV)), (("Asset " + bV) + " doesn't exist")).quantity
276276 if ((bV != bT))
277277 then throw("Invalid asset passed.")
278278 else {
279279 let ca = bu(bW)
280280 let cb = D(ca, bA)
281281 let cc = bu(bX)
282282 let cd = D(cc, bB)
283283 let ce = bw(cd, cb)
284284 let cf = H(ce, b)
285285 let cg = D(bU, b)
286286 let ch = D(bZ, b)
287287 let ci = fraction(cb, cg, ch)
288288 let cj = fraction(cd, cg, ch)
289289 let ck = H(ci, bA)
290290 let cl = H(cj, bB)
291291 let cm = if ((bS == ""))
292292 then nil
293293 else [ScriptTransfer(ab, ck, if ((bW == "WAVES"))
294294 then unit
295295 else fromBase58String(bW)), ScriptTransfer(ab, cl, if ((bX == "WAVES"))
296296 then unit
297297 else fromBase58String(bX)), StringEntry(ad(toString(ab), bS), bq(ck, cl, bU, cf, height, lastBlock.timestamp)), IntegerEntry(W(), cf), IntegerEntry(X(height, lastBlock.timestamp), cf)]
298298 $Tuple10(ck, cl, bW, bX, ca, cc, bZ, ce, bY, cm)
299299 }
300300 }
301301
302302
303303 func cn (bS,co,cp,cq,cr,cs,ab,ct,cu) = {
304304 let bI = aL()
305305 let bV = fromBase58String(bI[q])
306306 let cv = bI[r]
307307 let cw = bI[s]
308308 let cx = bI[v]
309309 let cy = bI[w]
310310 let bJ = parseIntValue(bI[t])
311311 let bK = parseIntValue(bI[u])
312312 let bY = bI[p]
313313 let bZ = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
314314 let cz = toBase58String(valueOrElse(cq, fromBase58String("WAVES")))
315315 let cA = toBase58String(valueOrElse(cs, fromBase58String("WAVES")))
316316 if (if ((cv != cz))
317317 then true
318318 else (cw != cA))
319319 then throw("Invalid amt or price asset passed.")
320320 else {
321321 let ca = if (ct)
322322 then bu(cv)
323323 else (bu(cv) - cp)
324324 let cc = if (ct)
325325 then bu(cw)
326326 else (bu(cw) - cr)
327327 let cB = D(cp, bJ)
328328 let cC = D(cr, bK)
329329 let cD = bw(cC, cB)
330330 let cb = D(ca, bJ)
331331 let cd = D(cc, bK)
332332 let cE = if ((bZ == 0))
333333 then {
334334 let ce = e
335335 let cF = e
336336 let bM = pow((cB * cC), 0, toBigInt(5), 1, 0, DOWN)
337337 $Tuple5(H(bM, b), H(cB, bJ), H(cC, bK), bw((cd + cC), (cb + cB)), cF)
338338 }
339339 else {
340340 let ce = bw(cd, cb)
341341 let cF = fraction(R((ce - cD)), d, ce)
342342 let cG = D(co, b)
343343 if (if ((ce != e))
344344 then (cF > cG)
345345 else false)
346346 then throw(((("Price slippage " + toString(cF)) + " exceeded the passed limit of ") + toString(cG)))
347347 else {
348348 let ch = D(bZ, b)
349349 let cH = fraction(cB, ce, d)
350350 let cI = fraction(cC, d, ce)
351351 let cJ = if ((cH > cC))
352352 then $Tuple2(cI, cC)
353353 else $Tuple2(cB, cH)
354354 let cK = cJ._1
355355 let cL = cJ._2
356356 let bM = fraction(ch, cL, cd)
357357 $Tuple5(H(bM, b), H(cK, bJ), H(cL, bK), ce, cF)
358358 }
359359 }
360360 let cM = cE._1
361361 let cN = cE._2
362362 let cO = cE._3
363363 let cf = H(cE._4, b)
364364 let cP = H(cE._5, b)
365365 if ((0 >= cM))
366366 then throw("Invalid calculations. LP calculated is less than zero.")
367367 else {
368368 let cQ = if (!(cu))
369369 then 0
370370 else cM
371371 let cR = (cp - cN)
372372 let cS = (cr - cO)
373373 let cT = [IntegerEntry(W(), cf), IntegerEntry(X(height, lastBlock.timestamp), cf), StringEntry(aa(ab, bS), bf(cN, cO, cQ, cf, co, cP, height, lastBlock.timestamp, cR, cS))]
374374 $Tuple13(cM, cQ, cf, ca, cc, bZ, bV, bY, cT, cR, cS, cq, cs)
375375 }
376376 }
377377 }
378378
379379
380380 func cU (cV) = {
381381 let bI = aL()
382382 let cW = bI[r]
383383 let cX = bI[s]
384384 let bY = parseIntValue(bI[p])
385385 let bJ = parseIntValue(bI[t])
386386 let bK = parseIntValue(bI[u])
387387 let cY = bu(cW)
388388 let cZ = bu(cX)
389389 let ce = if ((cV.orderType == Buy))
390390 then bz(bJ, bK, (cY + cV.amount), cZ)
391391 else bz(bJ, bK, (cY - cV.amount), cZ)
392392 let cf = H(ce, b)
393393 if (if (if (aJ())
394394 then true
395395 else (bY == m))
396396 then true
397397 else (bY == n))
398398 then throw("Exchange operations disabled")
399399 else {
400400 let da = cV.assetPair.amountAsset
401401 let db = if ((da == unit))
402402 then "WAVES"
403403 else toBase58String(value(da))
404404 let dc = cV.assetPair.priceAsset
405405 let dd = if ((dc == unit))
406406 then "WAVES"
407407 else toBase58String(value(dc))
408408 if (if ((db != cW))
409409 then true
410410 else (dd != cX))
411411 then throw("Wrong order assets.")
412412 else {
413413 let de = cV.price
414414 let df = fraction(b, bK, bJ)
415415 let dg = M(de, b, df)
416416 let dh = if ((cV.orderType == Buy))
417417 then (cf >= dg)
418418 else (dg >= cf)
419419 true
420420 }
421421 }
422422 }
423423
424424
425425 func di (dj) = if ((size(dj.payments) != 1))
426426 then throw("exactly 1 payment is expected")
427427 else {
428428 let dk = value(dj.payments[0])
429429 let bT = value(dk.assetId)
430430 let dl = dk.amount
431431 let cE = bR(toBase58String(dj.transactionId), toBase58String(bT), dl, dj.caller)
432432 let ck = cE._1
433433 let cl = cE._2
434434 let bY = parseIntValue(cE._9)
435435 let cm = cE._10
436436 if (if (aJ())
437437 then true
438438 else (bY == n))
439439 then throw(("Get operation is blocked by admin. Status = " + toString(bY)))
440440 else $Tuple5(ck, cl, dl, bT, cm)
441441 }
442442
443443
444444 func dm (dj,co,cu) = if ((size(dj.payments) != 2))
445445 then throw("exactly 2 payments are expected")
446446 else {
447447 let dn = value(dj.payments[0])
448448 let do = value(dj.payments[1])
449449 let dp = cn(toBase58String(dj.transactionId), co, dn.amount, dn.assetId, do.amount, do.assetId, toString(dj.caller), false, cu)
450450 let bY = parseIntValue(dp._8)
451451 if (if (if (aJ())
452452 then true
453453 else (bY == l))
454454 then true
455455 else (bY == n))
456456 then throw(("Put operation is blocked by admin. Status = " + toString(bY)))
457457 else dp
458458 }
459459
460460
461461 func dq (dr) = {
462462 let ds = invoke(aE, "emit", [dr], nil)
463463 if ((ds == ds))
464464 then {
465465 let dt = {
466466 let du = ds
467467 if ($isInstanceOf(du, "Address"))
468468 then {
469469 let dv = du
470470 invoke(dv, "emit", [dr], nil)
471471 }
472472 else unit
473473 }
474474 if ((dt == dt))
475475 then dr
476476 else throw("Strict value is not equal to itself.")
477477 }
478478 else throw("Strict value is not equal to itself.")
479479 }
480480
481481
482482 func dw (dr,dx) = {
483483 let dy = if ((dx == 0))
484484 then 0
485485 else fraction(dr, dx, b)
486486 $Tuple2((dr - dy), dy)
487487 }
488488
489489
490490 func dz (dA,dB,ab,ac) = {
491491 let dC = (ac == unit)
492492 let dD = bu(aQ(aY))
493493 let dE = bu(aQ(aZ))
494494 let dF = if ((dB == aY))
495495 then true
496496 else if ((dB == aZ))
497497 then false
498498 else aC("invalid asset")
499499 let dG = if (dC)
500500 then $Tuple2(dD, dE)
501501 else if (dF)
502502 then $Tuple2((dD - dA), dE)
503503 else $Tuple2(dD, (dE - dA))
504504 let dH = dG._1
505505 let dI = dG._2
506506 let dJ = if (dF)
507507 then $Tuple2(dA, 0)
508508 else $Tuple2(0, dA)
509509 let dK = dJ._1
510510 let dL = dJ._2
511511 let dM = dw(dK, aG)._1
512512 let dN = dw(dL, aG)._1
513513 let dO = dw(dA, aG)
514514 let dP = dO._1
515515 let dy = dO._2
516516 let dQ = (dH + dM)
517517 let dR = (dI + dN)
518518 let dS = bw(D(dR, bb), D(dQ, ba))
519519 let dT = H(dS, b)
520520 let dU = if (dF)
521521 then dH
522522 else dI
523523 let dV = toBigInt(dU)
524524 let dW = toBigInt(valueOrErrorMessage(assetInfo(aX), (("asset " + toBase58String(aX)) + " doesn't exist")).quantity)
525525 let dX = if ((dW > f))
526526 then true
527527 else aC("initial deposit requires all coins")
528528 if ((dX == dX))
529529 then {
530530 let dY = toBigInt(dP)
531531 let dZ = max([0, toInt(((dW * (sqrtBigInt((d + ((dY * d) / dV)), 18, 18, DOWN) - d)) / d))])
532532 let cT = if (dC)
533533 then nil
534534 else [IntegerEntry(W(), dT), IntegerEntry(X(height, lastBlock.timestamp), dT), StringEntry(aa(toString(value(ab)), toBase58String(value(ac))), bf(dK, dL, dZ, dT, 0, 0, height, lastBlock.timestamp, 0, 0))]
535535 let ea = bw(D(dI, bb), D(dH, ba))
536536 let eb = H(ea, b)
537537 let ec = {
538538 let ed = if (dF)
539539 then $Tuple2(dK, dH)
540540 else $Tuple2(dL, dI)
541541 let dr = ed._1
542542 let ee = ed._2
543543 let ef = toInt(fraction(dW, toBigInt((dr / 2)), toBigInt(ee)))
544544 fraction((dZ - ef), b, ef)
545545 }
546546 $Tuple4(dZ, cT, dy, ec)
547547 }
548548 else throw("Strict value is not equal to itself.")
549549 }
550550
551551
552552 func eg (eh,dP,dB,ab,ac) = {
553553 let dC = (ac == unit)
554554 let ei = [if ((dB == aX))
555555 then true
556556 else aC("invalid lp asset")]
557557 if ((ei == ei))
558558 then {
559559 let ej = if ((eh == aY))
560560 then true
561561 else if ((eh == aZ))
562562 then false
563563 else aC("invalid asset")
564564 let ek = if (ej)
565565 then toBigInt(bu(aQ(aY)))
566566 else toBigInt(bu(aQ(aZ)))
567567 let el = bu(aQ(aY))
568568 let em = bu(aQ(aZ))
569569 let en = if (ej)
570570 then el
571571 else em
572572 let eo = toBigInt(en)
573573 let dW = toBigInt(valueOrErrorMessage(assetInfo(aX), (("asset " + toBase58String(aX)) + " doesn't exist")).quantity)
574574 let ep = toBigInt(dP)
575575 let eq = max([0, toInt(((ek * (d - pow((d - ((ep * d) / dW)), 18, h, 0, 18, DOWN))) / d))])
576576 let er = dw(eq, aI)
577577 let es = er._1
578578 let dy = er._2
579579 let et = if (ej)
580580 then $Tuple4(es, 0, (el - eq), em)
581581 else $Tuple4(0, es, el, (em - eq))
582582 let eu = et._1
583583 let ev = et._2
584584 let ew = et._3
585585 let ex = et._4
586586 let dS = bw(D(ex, bb), D(ew, ba))
587587 let dT = H(dS, b)
588588 let cT = if (dC)
589589 then nil
590590 else [StringEntry(ad(toString(value(ab)), toBase58String(value(ac))), bq(eu, ev, dP, dT, height, lastBlock.timestamp)), IntegerEntry(W(), dT), IntegerEntry(X(height, lastBlock.timestamp), dT)]
591591 let ea = bw(D(em, bb), D(el, ba))
592592 let eb = H(ea, b)
593593 let ec = {
594594 let ey = (toInt(fraction(ek, ep, dW)) * 2)
595595 fraction((es - ey), b, ey)
596596 }
597597 $Tuple4(es, cT, dy, ec)
598598 }
599599 else throw("Strict value is not equal to itself.")
600600 }
601601
602602
603603 func ez () = {
604604 let du = getString(U())
605605 if ($isInstanceOf(du, "String"))
606606 then {
607607 let eA = du
608608 fromBase58String(eA)
609609 }
610610 else if ($isInstanceOf(du, "Unit"))
611611 then unit
612612 else throw("Match error")
613613 }
614614
615615
616616 func eB () = {
617617 let du = getString(V())
618618 if ($isInstanceOf(du, "String"))
619619 then {
620620 let eA = du
621621 fromBase58String(eA)
622622 }
623623 else if ($isInstanceOf(du, "Unit"))
624624 then unit
625625 else throw("Match error")
626626 }
627627
628628
629629 func eC (dj) = {
630630 let du = ez()
631631 if ($isInstanceOf(du, "ByteVector"))
632632 then {
633633 let eD = du
634634 (dj.callerPublicKey == eD)
635635 }
636636 else if ($isInstanceOf(du, "Unit"))
637637 then (dj.caller == this)
638638 else throw("Match error")
639639 }
640640
641641
642642 func eE (dj) = {
643643 let eF = throw("Permission denied")
644644 let du = ez()
645645 if ($isInstanceOf(du, "ByteVector"))
646646 then {
647647 let eD = du
648648 if ((dj.callerPublicKey == eD))
649649 then true
650650 else eF
651651 }
652652 else if ($isInstanceOf(du, "Unit"))
653653 then if ((dj.caller == this))
654654 then true
655655 else eF
656656 else throw("Match error")
657657 }
658658
659659
660660 @Callable(dj)
661661 func calculateAmountOutForSwapREADONLY (eG,eH) = {
662662 let eI = if ((eH == false))
663663 then {
664664 let eJ = ay(this, af())
665665 let eK = ay(this, ae())
666666 $Tuple2(eJ, eK)
667667 }
668668 else {
669669 let eJ = ay(this, ae())
670670 let eK = ay(this, af())
671671 $Tuple2(eJ, eK)
672672 }
673673 let eJ = eI._1
674674 let eK = eI._2
675675 let eL = bu(eK)
676676 let eM = bu(eJ)
677677 let eN = ((eM * eG) / (eL + eG))
678- $Tuple2(nil, eN)
678+ let eO = (toBigInt(eL) * toBigInt(eM))
679+ let eP = ((toBigInt(bu(eK)) + toBigInt(eG)) * (toBigInt(bu(eJ)) - toBigInt(eN)))
680+ let eQ = if ((eP >= eO))
681+ then true
682+ else throw("new K is fewer error")
683+ if ((eQ == eQ))
684+ then $Tuple2(nil, eN)
685+ else throw("Strict value is not equal to itself.")
679686 }
680687
681688
682689
683690 @Callable(dj)
684-func calculateAmountOutForSwapAndSendTokens (eG,eH,eO,eP) = {
691+func calculateAmountOutForSwapAndSendTokens (eG,eH,eR,eS) = {
685692 let ei = [if ((value(dj.payments[0]).amount >= eG))
686693 then true
687694 else aC("Wrong amount"), if ((dj.caller == addressFromStringValue(ay(this, S()))))
688695 then true
689696 else aC("Permission denied")]
690697 if ((ei == ei))
691698 then {
692699 let dk = value(dj.payments[0])
693700 let eK = if ((dk.assetId == unit))
694701 then toBase58String(toBytes("WAVES"))
695702 else toBase58String(value(dk.assetId))
696703 let eJ = if ((eH == false))
697704 then ay(this, af())
698705 else ay(this, ae())
699706 let eL = (bu(eK) - value(dj.payments[0]).amount)
700707 let eM = bu(eJ)
701708 let eN = ((eM * eG) / (eL + eG))
702- let eQ = (eL * eM)
703- let eR = (bu(eK) * (bu(eJ) - eN))
704- let eS = if ((eR >= eQ))
709+ let eO = (eL * eM)
710+ let eP = (bu(eK) * (bu(eJ) - eN))
711+ let eQ = if ((eP >= eO))
705712 then true
706713 else throw("new K is fewer error")
707- if ((eS == eS))
714+ if ((eQ == eQ))
708715 then {
709- let eT = if ((eN >= eO))
716+ let eT = if ((eN >= eR))
710717 then true
711718 else throw("Exchange result is fewer coins than expected")
712719 if ((eT == eT))
713- then [ScriptTransfer(addressFromStringValue(eP), eN, if ((eK == "WAVES"))
720+ then [ScriptTransfer(addressFromStringValue(eS), eN, if ((eK == "WAVES"))
714721 then unit
715722 else fromBase58String(eJ))]
716723 else throw("Strict value is not equal to itself.")
717724 }
718725 else throw("Strict value is not equal to itself.")
719726 }
720727 else throw("Strict value is not equal to itself.")
721728 }
722729
723730
724731
725732 @Callable(dj)
726733 func setManager (eU) = {
727734 let eV = eE(dj)
728735 if ((eV == eV))
729736 then {
730737 let eW = fromBase58String(eU)
731738 if ((eW == eW))
732739 then [StringEntry(V(), eU)]
733740 else throw("Strict value is not equal to itself.")
734741 }
735742 else throw("Strict value is not equal to itself.")
736743 }
737744
738745
739746
740747 @Callable(dj)
741748 func confirmManager () = {
742749 let eX = eB()
743750 let eY = if (isDefined(eX))
744751 then true
745752 else throw("No pending manager")
746753 if ((eY == eY))
747754 then {
748755 let eZ = if ((dj.callerPublicKey == value(eX)))
749756 then true
750757 else throw("You are not pending manager")
751758 if ((eZ == eZ))
752759 then [StringEntry(U(), toBase58String(value(eX))), DeleteEntry(V())]
753760 else throw("Strict value is not equal to itself.")
754761 }
755762 else throw("Strict value is not equal to itself.")
756763 }
757764
758765
759766
760767 @Callable(dj)
761768 func put (co,fa) = if ((0 > co))
762769 then throw("Invalid slippageTolerance passed")
763770 else {
764771 let dp = dm(dj, co, true)
765772 let cQ = dp._2
766773 let bV = dp._7
767774 let cm = dp._9
768775 let cR = dp._10
769776 let cS = dp._11
770777 let fb = dp._12
771778 let fc = dp._13
772779 let ds = invoke(aE, "emit", [cQ], nil)
773780 if ((ds == ds))
774781 then {
775782 let dt = {
776783 let du = ds
777784 if ($isInstanceOf(du, "Address"))
778785 then {
779786 let dv = du
780787 invoke(dv, "emit", [cQ], nil)
781788 }
782789 else unit
783790 }
784791 if ((dt == dt))
785792 then {
786793 let fd = if ((cR > 0))
787794 then invoke(be, "put", nil, [AttachedPayment(fb, cR)])
788795 else nil
789796 if ((fd == fd))
790797 then {
791798 let fe = if ((cS > 0))
792799 then invoke(be, "put", nil, [AttachedPayment(fc, cS)])
793800 else nil
794801 if ((fe == fe))
795802 then {
796803 let ff = if (fa)
797804 then {
798805 let fg = invoke(bd, "stake", nil, [AttachedPayment(bV, cQ)])
799806 if ((fg == fg))
800807 then nil
801808 else throw("Strict value is not equal to itself.")
802809 }
803810 else [ScriptTransfer(dj.caller, cQ, bV)]
804811 (cm ++ ff)
805812 }
806813 else throw("Strict value is not equal to itself.")
807814 }
808815 else throw("Strict value is not equal to itself.")
809816 }
810817 else throw("Strict value is not equal to itself.")
811818 }
812819 else throw("Strict value is not equal to itself.")
813820 }
814821
815822
816823
817824 @Callable(dj)
818825 func putForFree (fh) = if ((0 > fh))
819826 then throw("Invalid value passed")
820827 else {
821828 let dp = dm(dj, fh, false)
822829 dp._9
823830 }
824831
825832
826833
827834 @Callable(dj)
828835 func putOneTkn (fi,fj) = {
829836 let fk = {
830837 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
831838 if ($isInstanceOf(aH, "Boolean"))
832839 then aH
833840 else throw(($getType(aH) + " couldn't be cast to Boolean"))
834841 }
835842 let fl = if (if (if (aJ())
836843 then true
837844 else (aW == l))
838845 then true
839846 else (aW == n))
840847 then true
841848 else fk
842849 let ei = [if (if (!(fl))
843850 then true
844851 else eC(dj))
845852 then true
846853 else aC("put operation is blocked by admin"), if ((size(dj.payments) == 1))
847854 then true
848855 else aC("exactly 1 payment are expected")]
849856 if ((ei == ei))
850857 then {
851858 let fm = dj.payments[0]
852859 let dB = fm.assetId
853860 let dA = fm.amount
854861 let ab = dj.caller
855862 let ac = dj.transactionId
856863 let fn = dz(dA, dB, ab, ac)
857864 if ((fn == fn))
858865 then {
859866 let fo = fn._4
860867 let dy = fn._3
861868 let cT = fn._2
862869 let fp = fn._1
863870 let fq = if (if ((fi > 0))
864871 then (fi > fp)
865872 else false)
866873 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
867874 else fp
868875 let ds = dq(fq)
869876 if ((ds == ds))
870877 then {
871878 let ff = if (fj)
872879 then {
873880 let fr = invoke(bd, "stake", nil, [AttachedPayment(aX, fq)])
874881 if ((fr == fr))
875882 then nil
876883 else throw("Strict value is not equal to itself.")
877884 }
878885 else [ScriptTransfer(dj.caller, fq, aX)]
879886 let fs = if ((dy > 0))
880887 then [ScriptTransfer(aF, dy, dB)]
881888 else nil
882889 $Tuple2(((cT ++ ff) ++ fs), fq)
883890 }
884891 else throw("Strict value is not equal to itself.")
885892 }
886893 else throw("Strict value is not equal to itself.")
887894 }
888895 else throw("Strict value is not equal to itself.")
889896 }
890897
891898
892899
893900 @Callable(dj)
894901 func putOneTknREADONLY (dB,dA) = {
895902 let ft = dz(dA, aO(dB), unit, unit)
896903 let fp = ft._1
897904 let cT = ft._2
898905 let dy = ft._3
899906 let fo = ft._4
900907 $Tuple2(nil, $Tuple3(fp, dy, fo))
901908 }
902909
903910
904911
905912 @Callable(dj)
906913 func getOneTkn (fu,fi) = {
907914 let fk = {
908915 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
909916 if ($isInstanceOf(aH, "Boolean"))
910917 then aH
911918 else throw(($getType(aH) + " couldn't be cast to Boolean"))
912919 }
913920 let fv = if (if (aJ())
914921 then true
915922 else (aW == n))
916923 then true
917924 else fk
918925 let ei = [if (if (!(fv))
919926 then true
920927 else eC(dj))
921928 then true
922929 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 1))
923930 then true
924931 else aC("exactly 1 payment are expected")]
925932 if ((ei == ei))
926933 then {
927934 let eh = aO(fu)
928935 let fm = dj.payments[0]
929936 let dB = fm.assetId
930937 let dP = fm.amount
931938 let ab = dj.caller
932939 let ac = dj.transactionId
933940 let fw = eg(eh, dP, dB, ab, ac)
934941 if ((fw == fw))
935942 then {
936943 let fo = fw._4
937944 let dy = fw._3
938945 let cT = fw._2
939946 let fx = fw._1
940947 let dr = if (if ((fi > 0))
941948 then (fi > fx)
942949 else false)
943950 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
944951 else fx
945952 let fy = invoke(aE, "burn", [dP], [AttachedPayment(dB, dP)])
946953 if ((fy == fy))
947954 then {
948955 let fz = [ScriptTransfer(ab, dr, eh)]
949956 let fs = if ((dy > 0))
950957 then [ScriptTransfer(aF, dy, eh)]
951958 else nil
952959 $Tuple2(((cT ++ fz) ++ fs), dr)
953960 }
954961 else throw("Strict value is not equal to itself.")
955962 }
956963 else throw("Strict value is not equal to itself.")
957964 }
958965 else throw("Strict value is not equal to itself.")
959966 }
960967
961968
962969
963970 @Callable(dj)
964971 func getOneTknREADONLY (eh,dP) = {
965972 let fA = eg(aO(eh), dP, aX, unit, unit)
966973 let fx = fA._1
967974 let cT = fA._2
968975 let dy = fA._3
969976 let fo = fA._4
970977 $Tuple2(nil, $Tuple3(fx, dy, fo))
971978 }
972979
973980
974981
975982 @Callable(dj)
976983 func unstakeAndGetOneTkn (fB,fu,fi) = {
977984 let fk = {
978985 let aH = invoke(aE, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
979986 if ($isInstanceOf(aH, "Boolean"))
980987 then aH
981988 else throw(($getType(aH) + " couldn't be cast to Boolean"))
982989 }
983990 let fv = if (if (aJ())
984991 then true
985992 else (aW == n))
986993 then true
987994 else fk
988995 let ei = [if (if (!(fv))
989996 then true
990997 else eC(dj))
991998 then true
992999 else aC("get operation is blocked by admin"), if ((size(dj.payments) == 0))
9931000 then true
9941001 else aC("no payments are expected")]
9951002 if ((ei == ei))
9961003 then {
9971004 let eh = aO(fu)
9981005 let ab = dj.caller
9991006 let ac = dj.transactionId
10001007 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
10011008 if ((fC == fC))
10021009 then {
10031010 let fD = eg(eh, fB, aX, ab, ac)
10041011 if ((fD == fD))
10051012 then {
10061013 let fo = fD._4
10071014 let dy = fD._3
10081015 let cT = fD._2
10091016 let fx = fD._1
10101017 let dr = if (if ((fi > 0))
10111018 then (fi > fx)
10121019 else false)
10131020 then aC(makeString(["amount to receive is less than ", toString(fi)], ""))
10141021 else fx
10151022 let fy = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
10161023 if ((fy == fy))
10171024 then {
10181025 let fz = [ScriptTransfer(dj.caller, dr, eh)]
10191026 let fs = if ((dy > 0))
10201027 then [ScriptTransfer(aF, dy, eh)]
10211028 else nil
10221029 $Tuple2(((cT ++ fz) ++ fs), dr)
10231030 }
10241031 else throw("Strict value is not equal to itself.")
10251032 }
10261033 else throw("Strict value is not equal to itself.")
10271034 }
10281035 else throw("Strict value is not equal to itself.")
10291036 }
10301037 else throw("Strict value is not equal to itself.")
10311038 }
10321039
10331040
10341041
10351042 @Callable(dj)
10361043 func get () = {
10371044 let cE = di(dj)
10381045 let fE = cE._1
10391046 let cl = cE._2
10401047 let dl = cE._3
10411048 let bT = cE._4
10421049 let cm = cE._5
10431050 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10441051 if ((fF == fF))
10451052 then cm
10461053 else throw("Strict value is not equal to itself.")
10471054 }
10481055
10491056
10501057
10511058 @Callable(dj)
10521059 func getNoLess (fG,fH) = {
10531060 let cE = di(dj)
10541061 let ck = cE._1
10551062 let cl = cE._2
10561063 let dl = cE._3
10571064 let bT = cE._4
10581065 let cm = cE._5
10591066 if ((fG > ck))
10601067 then throw(((("noLessThenAmtAsset failed: " + toString(ck)) + " < ") + toString(fG)))
10611068 else if ((fH > cl))
10621069 then throw(((("noLessThenPriceAsset failed: " + toString(cl)) + " < ") + toString(fH)))
10631070 else {
10641071 let fF = invoke(aE, "burn", [dl], [AttachedPayment(bT, dl)])
10651072 if ((fF == fF))
10661073 then cm
10671074 else throw("Strict value is not equal to itself.")
10681075 }
10691076 }
10701077
10711078
10721079
10731080 @Callable(dj)
10741081 func unstakeAndGet (dr) = {
10751082 let fI = if ((size(dj.payments) != 0))
10761083 then throw("No payments are expected")
10771084 else true
10781085 if ((fI == fI))
10791086 then {
10801087 let bI = aL()
10811088 let bV = fromBase58String(bI[q])
10821089 let fC = invoke(bd, "unstake", [toBase58String(bV), dr], nil)
10831090 if ((fC == fC))
10841091 then {
10851092 let cE = bR(toBase58String(dj.transactionId), toBase58String(bV), dr, dj.caller)
10861093 let bY = parseIntValue(cE._9)
10871094 let cm = cE._10
10881095 let fJ = if (if (aJ())
10891096 then true
10901097 else (bY == n))
10911098 then throw(("Get operation is blocked by admin. Status = " + toString(bY)))
10921099 else true
10931100 if ((fJ == fJ))
10941101 then {
10951102 let fF = invoke(aE, "burn", [dr], [AttachedPayment(bV, dr)])
10961103 if ((fF == fF))
10971104 then cm
10981105 else throw("Strict value is not equal to itself.")
10991106 }
11001107 else throw("Strict value is not equal to itself.")
11011108 }
11021109 else throw("Strict value is not equal to itself.")
11031110 }
11041111 else throw("Strict value is not equal to itself.")
11051112 }
11061113
11071114
11081115
11091116 @Callable(dj)
11101117 func unstakeAndGetNoLess (fB,fK,fH) = {
11111118 let fv = if (aJ())
11121119 then true
11131120 else (aW == n)
11141121 let ei = [if (!(fv))
11151122 then true
11161123 else throw("get operation is blocked by admin"), if ((size(dj.payments) == 0))
11171124 then true
11181125 else throw("no payments are expected")]
11191126 if ((ei == ei))
11201127 then {
11211128 let fC = invoke(bd, "unstake", [toBase58String(aX), fB], nil)
11221129 if ((fC == fC))
11231130 then {
11241131 let cE = bR(toBase58String(dj.transactionId), toBase58String(aX), fB, dj.caller)
11251132 let ck = cE._1
11261133 let cl = cE._2
11271134 let cm = cE._10
11281135 let fL = [if ((ck >= fK))
11291136 then true
11301137 else throw(makeString(["amount asset amount to receive is less than ", toString(fK)], "")), if ((cl >= fH))
11311138 then true
11321139 else throw(makeString(["price asset amount to receive is less than ", toString(fH)], ""))]
11331140 if ((fL == fL))
11341141 then {
11351142 let fF = invoke(aE, "burn", [fB], [AttachedPayment(aX, fB)])
11361143 if ((fF == fF))
11371144 then cm
11381145 else throw("Strict value is not equal to itself.")
11391146 }
11401147 else throw("Strict value is not equal to itself.")
11411148 }
11421149 else throw("Strict value is not equal to itself.")
11431150 }
11441151 else throw("Strict value is not equal to itself.")
11451152 }
11461153
11471154
11481155
11491156 @Callable(dj)
11501157 func activate (fM,fN) = if ((toString(dj.caller) != toString(aE)))
11511158 then throw("permissions denied")
11521159 else $Tuple2([StringEntry(ae(), fM), StringEntry(af(), fN)], "success")
11531160
11541161
11551162
11561163 @Callable(dj)
11571164 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aL())
11581165
11591166
11601167
11611168 @Callable(dj)
11621169 func getAccBalanceWrapperREADONLY (bv) = $Tuple2(nil, bu(bv))
11631170
11641171
11651172
11661173 @Callable(dj)
11671174 func calcPricesWrapperREADONLY (bC,bD,bH) = {
11681175 let bQ = bG(bC, bD, bH)
11691176 $Tuple2(nil, [toString(bQ[0]), toString(bQ[1]), toString(bQ[2])])
11701177 }
11711178
11721179
11731180
11741181 @Callable(dj)
11751182 func toX18WrapperREADONLY (E,F) = $Tuple2(nil, toString(D(E, F)))
11761183
11771184
11781185
11791186 @Callable(dj)
11801187 func fromX18WrapperREADONLY (I,J) = $Tuple2(nil, H(parseBigIntValue(I), J))
11811188
11821189
11831190
11841191 @Callable(dj)
11851192 func calcPriceBigIntWrapperREADONLY (bx,by) = $Tuple2(nil, toString(bw(parseBigIntValue(bx), parseBigIntValue(by))))
11861193
11871194
11881195
11891196 @Callable(dj)
11901197 func estimatePutOperationWrapperREADONLY (bS,co,cp,cq,cr,cs,ab,ct,cu) = $Tuple2(nil, cn(bS, co, cp, cq, cr, cs, ab, ct, cu))
11911198
11921199
11931200
11941201 @Callable(dj)
11951202 func estimateGetOperationWrapperREADONLY (bS,bT,bU,ab) = {
11961203 let cE = bR(bS, bT, bU, addressFromStringValue(ab))
11971204 $Tuple2(nil, $Tuple10(cE._1, cE._2, cE._3, cE._4, cE._5, cE._6, cE._7, toString(cE._8), cE._9, cE._10))
11981205 }
11991206
12001207
12011208
12021209 @Callable(dj)
12031210 func statsREADONLY () = {
12041211 let bI = aL()
12051212 let bV = fromBase58String(bI[q])
12061213 let cW = bI[r]
12071214 let cX = bI[s]
12081215 let cx = bI[v]
12091216 let cy = bI[w]
12101217 let bJ = parseIntValue(bI[t])
12111218 let bK = parseIntValue(bI[u])
12121219 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12131220 let cY = bu(cW)
12141221 let cZ = bu(cX)
12151222 let fP = if ((fO == 0))
12161223 then [e, e, e]
12171224 else bG(cY, cZ, fO)
12181225 let cf = 0
12191226 let fQ = H(fP[1], b)
12201227 let fR = H(fP[2], b)
12211228 let fS = value(getInteger(aE, aq(toString(this))))
12221229 $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))
12231230 }
12241231
12251232
12261233
12271234 @Callable(dj)
12281235 func evaluatePutByAmountAssetREADONLY (cp) = {
12291236 let bI = aL()
12301237 let bV = fromBase58String(bI[q])
12311238 let cv = bI[r]
12321239 let bW = fromBase58String(cv)
12331240 let cw = bI[s]
12341241 let bX = fromBase58String(cw)
12351242 let bJ = parseIntValue(bI[t])
12361243 let bK = parseIntValue(bI[u])
12371244 let bY = bI[p]
12381245 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12391246 let cY = bu(cv)
12401247 let cZ = bu(cw)
12411248 let bE = D(cY, bJ)
12421249 let bF = D(cZ, bK)
12431250 let ce = if ((fO == 0))
12441251 then e
12451252 else bw(bF, bE)
12461253 let cB = D(cp, bJ)
12471254 let cC = fraction(cB, ce, d)
12481255 let cr = H(cC, bK)
12491256 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12501257 let cM = dp._1
12511258 let fT = dp._3
12521259 let ca = dp._4
12531260 let cc = dp._5
12541261 let bZ = dp._6
12551262 $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))
12561263 }
12571264
12581265
12591266
12601267 @Callable(dj)
12611268 func evaluatePutByPriceAssetREADONLY (cr) = {
12621269 let bI = aL()
12631270 let bV = fromBase58String(bI[q])
12641271 let cv = bI[r]
12651272 let bW = fromBase58String(cv)
12661273 let cw = bI[s]
12671274 let bX = fromBase58String(cw)
12681275 let bJ = parseIntValue(bI[t])
12691276 let bK = parseIntValue(bI[u])
12701277 let bY = bI[p]
12711278 let fO = valueOrErrorMessage(assetInfo(bV), (("Asset " + toBase58String(bV)) + " doesn't exist")).quantity
12721279 let fU = bu(cv)
12731280 let fV = bu(cw)
12741281 let fW = D(fU, bJ)
12751282 let fX = D(fV, bK)
12761283 let ce = if ((fO == 0))
12771284 then e
12781285 else bw(fX, fW)
12791286 let cC = D(cr, bK)
12801287 let cB = fraction(cC, d, ce)
12811288 let cp = H(cB, bJ)
12821289 let dp = cn("", 500000, cp, bW, cr, bX, "", true, false)
12831290 let cM = dp._1
12841291 let fT = dp._3
12851292 let ca = dp._4
12861293 let cc = dp._5
12871294 let bZ = dp._6
12881295 $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))
12891296 }
12901297
12911298
12921299
12931300 @Callable(dj)
12941301 func evaluateGetREADONLY (fY,fZ) = {
12951302 let cE = bR("", fY, fZ, this)
12961303 let ck = cE._1
12971304 let cl = cE._2
12981305 let ca = cE._5
12991306 let cc = cE._6
13001307 let bZ = cE._7
13011308 let cf = cE._8
13021309 let bY = parseIntValue(cE._9)
13031310 $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))
13041311 }
13051312
13061313
13071314 @Verifier(ga)
13081315 func gb () = {
13091316 let gc = {
13101317 let du = ez()
13111318 if ($isInstanceOf(du, "ByteVector"))
13121319 then {
13131320 let eD = du
13141321 eD
13151322 }
13161323 else if ($isInstanceOf(du, "Unit"))
13171324 then ga.senderPublicKey
13181325 else throw("Match error")
13191326 }
13201327 let du = ga
13211328 if ($isInstanceOf(du, "Order"))
13221329 then {
13231330 let cV = du
13241331 let gd = aK()
13251332 let av = cU(cV)
13261333 let aw = sigVerify(cV.bodyBytes, cV.proofs[0], cV.senderPublicKey)
13271334 let ax = sigVerify(cV.bodyBytes, cV.proofs[1], gd)
13281335 if (if (if (av)
13291336 then aw
13301337 else false)
13311338 then ax
13321339 else false)
13331340 then true
13341341 else au(av, aw, ax)
13351342 }
13361343 else if ($isInstanceOf(du, "SetScriptTransaction"))
13371344 then {
13381345 let eA = du
13391346 let ge = blake2b256(value(eA.script))
13401347 let gf = fromBase64String(value(getString(aE, as())))
13411348 let gg = scriptHash(this)
13421349 if (if ((gf == ge))
13431350 then (gg != ge)
13441351 else false)
13451352 then true
13461353 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13471354 }
13481355 else sigVerify(ga.bodyBytes, ga.proofs[0], gc)
13491356 }
13501357

github/deemru/w8io/873ac7e 
127.36 ms