tx · HaiBskgPKyZLcUEpPtqzVjcJrcngs6noncMJU4CN9fMJ

3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA:  -0.03700000 Waves

2022.12.27 10:44 [2378400] smart account 3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA > SELF 0.00000000 Waves

{ "type": 13, "id": "HaiBskgPKyZLcUEpPtqzVjcJrcngs6noncMJU4CN9fMJ", "fee": 3700000, "feeAssetId": null, "timestamp": 1672127121313, "version": 1, "sender": "3MzKSdTH2jFbypLsoNfrH7QgkzSbx3EYwCA", "senderPublicKey": "35yd3qw1gxKDxKwGAykHN9fANbXNWwseaUwbWDj24o3x", "proofs": [ "Wq2phbKFa6TWmtXrXZ6Dfk5r5Y9YV8ByNn8frGMo3tdMrsWQGydXesRMLB648YaWYMj9H3mKiY8npfjVVThmHYd" ], "script": "base64:BgKwKQgCEgMKAQgSAwoBCBIAEgQKAgEEEgQKAgEEEgMKAQESABIECgIIARIAEgQKAggBEgQKAggBEgQKAgEBEgMKAQESBQoDAQEBEgUKAwEIARIECgIBCBIECgIBCBIECgIICBIECgIICBIECgIIARIAEgMKAQgSBQoDAQEBEgQKAggBEgQKAgEBEgQKAggIEgsKCQgBAQIBAggEBBIGCgQICAEIEgAiBnNjYWxlOCIMc2NhbGU4QmlnSW50IgdzY2FsZTE4Igp6ZXJvQmlnSW50IgRiaWcwIgRiaWcxIgRiaWcyIgRiaWczIgRiaWc0IgpzbGlwcGFnZTREIgt3YXZlc1N0cmluZyIFQW11bHQiBURjb252IgNTRVAiBUVNUFRZIgpQb29sQWN0aXZlIgpQb29sUHV0RGlzIg5Qb29sTWF0Y2hlckRpcyIMUG9vbFNodXRkb3duIg5pZHhQb29sQWRkcmVzcyIJaWR4UG9vbFN0IglpZHhMUEFzSWQiCWlkeEFtQXNJZCIJaWR4UHJBc0lkIgtpZHhBbXRBc0RjbSINaWR4UHJpY2VBc0RjbSILaWR4SUFtdEFzSWQiDWlkeElQcmljZUFzSWQiD2lkeEZhY3RTdGFrQ250ciISaWR4RmFjdG9yeVJlc3RDbnRyIhBpZHhGYWN0U2xpcHBDbnRyIhFpZHhGYWN0R3d4UmV3Q250ciIKZmVlRGVmYXVsdCICdDEiB29yaWdWYWwiDW9yaWdTY2FsZU11bHQiAmYxIgN2YWwiD3Jlc3VsdFNjYWxlTXVsdCIMZnJvbVgxOFJvdW5kIgVyb3VuZCICdHMiA2FtdCIIcmVzU2NhbGUiCGN1clNjYWxlIgNhYnMiCWFic0JpZ0ludCICZmMiA21wayIEcG1wayICcGwiAnBoIgFoIgF0IgNwYXUiAnVhIgR0eElkIgNnYXUiAmFhIgJwYSIDYW1wIgNhZGEiBmtleUZlZSIDZmVlIgZrZXlETHAiFWtleURMcFJlZnJlc2hlZEhlaWdodCISa2V5RExwUmVmcmVzaERlbGF5IhZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0Ig9kTHBSZWZyZXNoRGVsYXkiBGZjZmciBG10cGsiAnBjIgZpQW10QXMiBWlQckFzIgNtYmEiBWJBU3RyIgNhcHMiHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2giFmtleUZlZUNvbGxlY3RvckFkZHJlc3MiA3RvZSIDb3JWIgZzZW5kclYiBm1hdGNoViIEc3RyZiIEYWRkciIDa2V5IgRpbnRmIgh0aHJvd0VyciIDbXNnIgZmbXRFcnIiA2ZjYSIBQSIDaWdzIgJtcCITZmVlQ29sbGVjdG9yQWRkcmVzcyIDZ3BjIgVhbXRBcyIHcHJpY2VBcyIIaVByaWNlQXMiDHBhcnNlQXNzZXRJZCIFaW5wdXQiD2Fzc2V0SWRUb1N0cmluZyIPcGFyc2VQb29sQ29uZmlnIgpwb29sQ29uZmlnIhBwb29sQ29uZmlnUGFyc2VkIgskdDA3MzgzNzYxMiIOY2ZnUG9vbEFkZHJlc3MiDWNmZ1Bvb2xTdGF0dXMiDGNmZ0xwQXNzZXRJZCIQY2ZnQW1vdW50QXNzZXRJZCIPY2ZnUHJpY2VBc3NldElkIhZjZmdBbW91bnRBc3NldERlY2ltYWxzIhVjZmdQcmljZUFzc2V0RGVjaW1hbHMiEmNmZ0luQW1vdW50QXNzZWRJZCIRY2ZnSW5QcmljZUFzc2V0SWQiA2dmYyINZmFjdG9yeUNvbmZpZyIPc3Rha2luZ0NvbnRyYWN0Ig9zbGlwYWdlQ29udHJhY3QiC2d3eENvbnRyYWN0IgxyZXN0Q29udHJhY3QiEWRhdGFQdXRBY3Rpb25JbmZvIg1pbkFtdEFzc2V0QW10Ig9pblByaWNlQXNzZXRBbXQiCG91dExwQW10IgVwcmljZSIKc2xpcEJ5VXNlciIMc2xpcHBhZ2VSZWFsIgh0eEhlaWdodCILdHhUaW1lc3RhbXAiDHNsaXBhZ2VBbUFtdCIMc2xpcGFnZVByQW10IhFkYXRhR2V0QWN0aW9uSW5mbyIOb3V0QW10QXNzZXRBbXQiEG91dFByaWNlQXNzZXRBbXQiB2luTHBBbXQiDWdldEFjY0JhbGFuY2UiB2Fzc2V0SWQiBGNwYmkiCHByQW10WDE4IghhbUFtdFgxOCIFY3BiaXIiA3ZhZCICQTEiAkEyIghzbGlwcGFnZSIEZGlmZiIEcGFzcyICdmQiAkQxIgJEMCIEc2xwZyIEZmFpbCIDcGNwIgphbUFzc2V0RGNtIgpwckFzc2V0RGNtIgVhbUFtdCIFcHJBbXQiC2FtdEFzQW10WDE4IgpwckFzQW10WDE4IgpjYWxjUHJpY2VzIgVscEFtdCIIYW10QXNEY20iB3ByQXNEY20iCHByaWNlWDE4IghscEFtdFgxOCINbHBQckluQW1Bc1gxOCINbHBQckluUHJBc1gxOCIPY2FsY3VsYXRlUHJpY2VzIgFwIgd0YWtlRmVlIgZhbW91bnQiCWZlZUFtb3VudCIDZWdvIgZ0eElkNTgiCnBtdEFzc2V0SWQiCHBtdExwQW10Igt1c2VyQWRkcmVzcyIEbHBJZCIEYW1JZCIEcHJJZCIFYW1EY20iBXByRGNtIgNzdHMiB2xwRW1pc3MiCWFtQmFsYW5jZSIMYW1CYWxhbmNlWDE4IglwckJhbGFuY2UiDHByQmFsYW5jZVgxOCILY3VyUHJpY2VYMTgiCGN1clByaWNlIgtwbXRMcEFtdFgxOCIKbHBFbWlzc1gxOCILb3V0QW1BbXRYMTgiC291dFByQW10WDE4IghvdXRBbUFtdCIIb3V0UHJBbXQiBXN0YXRlIgNlcG8iB2luQW1BbXQiBmluQW1JZCIHaW5QckFtdCIGaW5QcklkIgZpc0V2YWwiBmVtaXRMcCIKaXNPbmVBc3NldCIQdmFsaWRhdGVTbGlwcGFnZSIGcG10QW10IgVwbXRJZCIHYW1JZFN0ciIHcHJJZFN0ciIJaW5BbUlkU3RyIglpblBySWRTdHIiBmFtdERjbSIIcHJpY2VEY20iBGxwRW0iD2luQW1Bc3NldEFtdFgxOCIPaW5QckFzc2V0QW10WDE4Igx1c2VyUHJpY2VYMTgiAXIiC3NsaXBwYWdlWDE4Ig9zbGlwcGFnZVJlYWxYMTgiDWxwRW1pc3Npb25YMTgiCnByVmlhQW1YMTgiCmFtVmlhUHJYMTgiDGV4cGVjdGVkQW10cyIRZXhwQW10QXNzZXRBbXRYMTgiE2V4cFByaWNlQXNzZXRBbXRYMTgiCWNhbGNMcEFtdCIOY2FsY0FtQXNzZXRQbXQiDmNhbGNQckFzc2V0UG10IgxzbGlwcGFnZUNhbGMiCWVtaXRMcEFtdCIGYW1EaWZmIgZwckRpZmYiDSR0MDE4MjIwMTg1NjUiCndyaXRlQW1BbXQiCndyaXRlUHJBbXQiC2NvbW1vblN0YXRlIgRnZXREIgJ4cCIDeHAwIgN4cDEiAXMiAWEiA2FubiILeHAwX3hwMV9uX24iBWFubl9zIgVhbm5fMSIJY2FsY0ROZXh0IgFkIgJkZCIDZGRkIgJkcCIEY2FsYyIDYWNjIgFpIgVkTmV4dCIIZERpZmZSYXciBWREaWZmIgNhcnIiDSR0MDIwNDkzMjA1NDEiAiRsIgIkcyIFJGFjYzAiBSRmMF8xIgIkYSICJGkiBSRmMF8yIgVmb3VuZCIHZ2V0RE9sZCIBbiIKYVByZWNpc2lvbiIQYW5uX3NfYVByZWNpc2lvbiIOYW5uX2FQcmVjaXNpb24iAm4xIgNjdXIiDSR0MDIxMTcwMjExOTAiDSR0MDIxNjExMjE2NTgiBWdldFlEIgFEIgF4IgFjIgFiIg0kdDAyMjE1ODIyMTc4IgF5IgV5TmV4dCIFeURpZmYiDSR0MDIyNDg1MjI1MzIiB2NhbGNETHAiDWFtb3VudEJhbGFuY2UiDHByaWNlQmFsYW5jZSIKbHBFbWlzc2lvbiIKdXBkYXRlZERMcCIOY2FsY0N1cnJlbnRETHAiEGFtb3VudEFzc2V0RGVsdGEiD3ByaWNlQXNzZXREZWx0YSIUbHBBc3NldEVtaXNzaW9uRGVsdGEiEmFtb3VudEFzc2V0QmFsYW5jZSIRcHJpY2VBc3NldEJhbGFuY2UiD2xwQXNzZXRFbWlzc2lvbiIKY3VycmVudERMcCIScmVmcmVzaERMcEludGVybmFsIhdhbW91bnRBc3NldEJhbGFuY2VEZWx0YSIWcHJpY2VBc3NldEJhbGFuY2VEZWx0YSIHYWN0aW9ucyISdmFsaWRhdGVVcGRhdGVkRExwIgZvbGRETHAiG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZCIFb3JkZXIiEWFtb3VudEFzc2V0QW1vdW50IhBwcmljZUFzc2V0QW1vdW50Ig0kdDAyNDQ3MTI0NjgzIgNkTHAiDSR0MDI1MDEzMjUxMTMiDXVudXNlZEFjdGlvbnMiBmRMcE5ldyIMaXNPcmRlclZhbGlkIgJjZyIDcG10IgJjcCIGY2FsbGVyIgdhbUFzUG10IgdwckFzUG10Ig1jYWxjUHV0T25lVGtuIglwbXRBbXRSYXciC3dpdGhUYWtlRmVlIg1jaGVjaEVtaXNzaW9uIg0kdDAyNzM3OTI3ODQxIgxhbUJhbGFuY2VPbGQiDHByQmFsYW5jZU9sZCINJHQwMjc4NDcyODAyMyILYW1BbW91bnRSYXciC3ByQW1vdW50UmF3Ig0kdDAyODAyNzI4MjY2IghhbUFtb3VudCIIcHJBbW91bnQiDGFtQmFsYW5jZU5ldyIMcHJCYWxhbmNlTmV3IgZjaGVja0QiCGxwQW1vdW50Ig5wb29sUHJvcG9ydGlvbiIPYW1vdW50QXNzZXRQYXJ0Ig5wcmljZUFzc2V0UGFydCIJbHBBbXRCb3RoIgVib251cyITZ2V0T25lVGtuVjJJbnRlcm5hbCIKb3V0QXNzZXRJZCIMbWluT3V0QW1vdW50IghwYXltZW50cyIMb3JpZ2luQ2FsbGVyIg10cmFuc2FjdGlvbklkIgphbURlY2ltYWxzIgpwckRlY2ltYWxzIgpwb29sU3RhdHVzIg0kdDAzMDMxNjMwNDI3IgFAIgh0b3RhbEdldCILdG90YWxBbW91bnQiDSR0MDMwNjE3MzA5MjQiBW91dEFtIgVvdXRQciIIY3VyUHJYMTgiBWN1clByIhFvdXRBc3NldElkT3JXYXZlcyIQc2VuZEZlZVRvTWF0Y2hlciIEYnVybiINJHQwMzE3MDkzMjA1OSIQZmVlQW1vdW50Rm9yQ2FsYyIQb3V0SW5BbW91bnRBc3NldCINJHQwMzIwNjIzMjE3MCIRcmVmcmVzaERMcEFjdGlvbnMiEWlzVXBkYXRlZERMcFZhbGlkIgFtIgckbWF0Y2gwIgJwbSICcGQiCWlzTWFuYWdlciICcGsiAm1tIhdwZW5kaW5nTWFuYWdlclB1YmxpY0tleSICY20iA2hwbSIDY3BtIgRzbGlwIglhdXRvU3Rha2UiB2ZhY3RDZmciC3N0YWtpbmdDbnRyIghzbGlwQ250ciIKYW1Bc3NldFBtdCIKcHJBc3NldFBtdCIBZSIJbHBBc3NldElkIgJlbCIGbGVnYWN5IgJzYSICc3AiCGxwVHJuc2ZyIgJzcyINJHQwMzYzMTkzNjQ2MSIFY2hlY2siFGxwQXNzZXRFbWlzc2lvbkFmdGVyIiBpc1Bvb2xPbmVUb2tlbk9wZXJhdGlvbnNEaXNhYmxlZCINaXNQdXREaXNhYmxlZCIGY2hlY2tzIg0kdDAzODQzMzM4NTkxIgdlc3RpbUxQIg0kdDAzOTQwNjM5NzU1IhRwYXltZW50SW5BbW91bnRBc3NldCINJHQwMzk3NTgzOTg2NiIHbWF4U2xwZyIGZXN0UHV0Ig0kdDA0MDg5NjQwOTYxIglvdXRBbXRBbXQiDSR0MDQyMTM0NDIyMTYiDWlzR2V0RGlzYWJsZWQiDSR0MDQyODM0NDI5ODkiGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodCIdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQiDSR0MDQzNTEzNDM1NzciEGRMcFVwZGF0ZUFjdGlvbnMiDWxwQXNzZXRBbW91bnQiBWluZGV4IgRuZXdZIgJkeSILdG90YWxHZXRSYXciDSR0MDQ0NTA3NDQ1NTYiDSR0MDQ0OTMxNDUwNDYiDnN1bU9mR2V0QXNzZXRzIhJub0xlc3NUaGVuQW10QXNzZXQiFG5vTGVzc1RoZW5QcmljZUFzc2V0IgNhYWIiA3BhYiIDbGFlIgRsYWVhIhRidXJuTFBBc3NldE9uRmFjdG9yeSINJHQwNDY1ODU0NjY2NiINY2hlY2tQYXltZW50cyIKZmFjdG9yeUNmZyIHc3Rha2luZyIKdW5zdGFrZUludiIBdiIFYnVybkEiDSR0MDQ3NjkwNDc3NzEiDXVuc3Rha2VBbW91bnQiFW5vTGVzc1RoZW5BbW91bnRBc3NldCIDcmVzIgxjaGVja0Ftb3VudHMiDSR0MDQ5MDE5NDkxMDAiDSR0MDQ5OTk1NTAxODMiEHBheW1lbnRBbW91bnRSYXciDnBheW1lbnRBc3NldElkIg0kdDA1MDMxMTUwNDE0Ig0kdDA1MDU2MjUwNjY2IghhbXRBc1N0ciIHcHJBc1N0ciIBayICcHIiDHJlc1NjYWxlTXVsdCIHdXNyQWRkciIHcG10QXNJZCICdHgiBnZlcmlmeSIPdGFyZ2V0UHVibGljS2V5IgptYXRjaGVyUHViIgpvcmRlclZhbGlkIgtzZW5kZXJWYWxpZCIMbWF0Y2hlclZhbGlkIgduZXdIYXNoIgthbGxvd2VkSGFzaCILY3VycmVudEhhc2h9AAFhAIDC1y8AAWIJALYCAQCAwtcvAAFjCQC2AgEAgICQu7rWrfANAAFkCQC2AgEAAAABZQkAtgIBAAAAAWYJALYCAQABAAFnCQC2AgEAAgABaAkAtgIBAAMAAWkJALYCAQAE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BQJhTQkBAmFzAAACYVEJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQJhRgIFAmFNCQECYUEAAQJhUgAEAmFTCQECYUYCBQR0aGlzCQECYWcABAJhVAkBAmFGAgUEdGhpcwkBAmFoAAQCYVUJAQJhSQIFAmFNCQECYXcBBQJhVAQCYXUJAQJhSQIFAmFNCQECYXcBBQJhUwkAtQkCCQECYUYCBQJhTQkBAmF0AgkApAMBBQJhdQkApAMBBQJhVQUBbgECYVYBAmFXAwkAAAIFAmFXBQFrBQR1bml0CQDZBAEFAmFXAQJhWAECYVcDCQAAAgUCYVcFBHVuaXQFAWsJANgEAQkBBXZhbHVlAQUCYVcBAmFZAQJhWgkAmwoJCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFAmFaBQF0CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVoFAXUJANkEAQkAkQMCBQJhWgUBdgkBAmFWAQkAkQMCBQJhWgUBdwkBAmFWAQkAkQMCBQJhWgUBeAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFAmFaBQF5CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUCYVoFAXoJANkEAQkAkQMCBQJhWgUBQQkA2QQBCQCRAwIFAmFaBQFCAAJiYQkBAmFZAQkBAmFSAAACYmIFAmJhAAJiYwgFAmJiAl8xAAJiZAgFAmJiAl8yAAJiZQgFAmJiAl8zAAJiZggFAmJiAl80AAJiZwgFAmJiAl81AAJiaAgFAmJiAl82AAJiaQgFAmJiAl83AAJiaggFAmJiAl84AAJiawgFAmJiAl85AQJibAAJALUJAgkBAmFGAgUCYU0JAQJhcgAFAW4AAmJtCQECYmwAAAJibgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYm0FAUMCIEludmFsaWQgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzAAJibwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYm0FAUUCIEludmFsaWQgc2xpcGFnZSBjb250cmFjdCBhZGRyZXNzAAJicAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCYm0FAUYCHEludmFsaWQgZ3d4IGNvbnRyYWN0IGFkZHJlc3MAAmJxCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJibQUBRAIcSW52YWxpZCBnd3ggY29udHJhY3QgYWRkcmVzcwECYnIKAmJzAmJ0AmJ1AmJ2AmJ3AmJ4AmJ5AmJ6AmJBAmJCCQC5CQIJAMwIAgIUJWQlZCVkJWQlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJicwkAzAgCCQCkAwEFAmJ0CQDMCAIJAKQDAQUCYnUJAMwIAgkApAMBBQJidgkAzAgCCQCkAwEFAmJ3CQDMCAIJAKQDAQUCYngJAMwIAgkApAMBBQJieQkAzAgCCQCkAwEFAmJ6CQDMCAIJAKQDAQUCYkEJAMwIAgkApAMBBQJiQgUDbmlsBQFuAQJiQwYCYkQCYkUCYkYCYnYCYnkCYnoJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQJiRAkAzAgCCQCkAwEFAmJFCQDMCAIJAKQDAQUCYkYJAMwIAgkApAMBBQJidgkAzAgCCQCkAwEFAmJ5CQDMCAIJAKQDAQUCYnoFA25pbAUBbgECYkcBAmJIAwkAAAIFAmJIAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQJiSAECYkkCAmJKAmJLCQC8AgMFAmJKBQFjBQJiSwECYkwDAmJKAmJLAU8JAL0CBAUCYkoFAWMFAmJLBQFPAQJiTQMCYk4CYk8CYlAEAmJRCQC8AgMJALgCAgUCYk4FAmJPBQFiBQJiTwQCYlIJAL8CAgkAuAICBQJiUAkBAVQBBQJiUQUBZAMJAQEhAQUCYlIJAAIBCQCsAgICCkJpZyBzbHBnOiAJAKYDAQUCYlEJAJQKAgUCYlIJAJkDAQkAzAgCBQJiTgkAzAgCBQJiTwUDbmlsAQJiUwMCYlQCYlUCYlYEAmJRCQC8AgMFAmJVBQFiBQJiVAQCYlcJAL8CAgUCYlYFAmJRAwMFAmJXBgkAvwICBQJiVQUCYlQJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCmAwEFAmJVAgEgCQCmAwEFAmJUAgEgCQCmAwEFAmJRAgEgCQCmAwEFAmJWBQJiVwECYlgEAmJZAmJaAmNhAmNiBAJjYwkBAUgCBQJjYQUCYlkEAmNkCQEBSAIFAmNiBQJiWgkBAmJJAgUCY2QFAmNjAQJjZQMCY2ECY2ICY2YEAmNnBQJiaAQCY2gFAmJpBAJjaQkBAmJYBAUCY2cFAmNoBQJjYQUCY2IEAmJLCQEBSAIFAmNhBQJjZwQCYkoJAQFIAgUCY2IFAmNoBAJjagkBAUgCBQJjZgUBYQQCY2sJAQJiSQIFAmJLBQJjagQCY2wJAQJiSQIFAmJKBQJjagkAzAgCBQJjaQkAzAgCBQJjawkAzAgCBQJjbAUDbmlsAQJjbQMCY2ECY2ICY2YEAmNuCQECY2UDBQJjYQUCY2IFAmNmCQDMCAIJAQFLAgkAkQMCBQJjbgAABQFhCQDMCAIJAQFLAgkAkQMCBQJjbgABBQFhCQDMCAIJAQFLAgkAkQMCBQJjbgACBQFhBQNuaWwBAmNvAQJjcAQCY3EJAGsDBQJjcAUCYWwFAWEJAJQKAgkAZQIFAmNwBQJjcQUCY3EBAmNyBAJjcwJjdAJjdQJjdgQCY3cFAmJlBAJjeAkA2AQBCQEFdmFsdWUBBQJiZgQCY3kJANgEAQkBBXZhbHVlAQUCYmcEAmN6BQJiaAQCY0EFAmJpBAJjQgkApAMBBQJiZAQCY0MICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3cCC1dyb25nIExQIGlkCHF1YW50aXR5AwkBAiE9AgkA2AQBBQJjdwUCY3QJAAIBAg9Xcm9uZyBwbXQgYXNzZXQEAmNECQECYkcBBQJjeAQCY0UJAQFIAgUCY0QFAmN6BAJjRgkBAmJHAQUCY3kEAmNHCQEBSAIFAmNGBQJjQQQCY0gJAQJiSQIFAmNHBQJjRQQCY0kJAQFLAgUCY0gFAWEEAmNKCQEBSAIFAmN1BQFhBAJjSwkBAUgCBQJjQwUBYQQCY0wJALwCAwUCY0UFAmNKBQJjSwQCY00JALwCAwUCY0cFAmNKBQJjSwQCY04JAQFOAwUCY0wFAmN6BQVGTE9PUgQCY08JAQFOAwUCY00FAmNBBQVGTE9PUgQCY1ADCQAAAgUCY3MCAAUDbmlsCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFAmN2BQJjTgMJAAACBQJjeAIFV0FWRVMFBHVuaXQJANkEAQUCY3gJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCY3YFAmNPAwkAAAIFAmN5AgVXQVZFUwUEdW5pdAkA2QQBBQJjeQkAzAgCCQELU3RyaW5nRW50cnkCCQECYWYCCQClCAEFAmN2BQJjcwkBAmJDBgUCY04FAmNPBQJjdQUCY0kFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0kJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0kFA25pbAkAnAoKBQJjTgUCY08FAmN4BQJjeQUCY0QFAmNGBQJjQwUCY0gFAmNCBQJjUAECY1ENAmNzAmJQAmNSAmNTAmNUAmNVAmN2AmNWAmNXAmNYAmNZAmNaAmRhBAJjdwUCYmUEAmRiCQDYBAEJAQV2YWx1ZQEFAmJmBAJkYwkA2AQBCQEFdmFsdWUBBQJiZwQCZGQFAmJqBAJkZQUCYmsEAmRmBQJiaAQCZGcFAmJpBAJjQgkApAMBBQJiZAQCZGgICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3cCCFdyIGxwIGFzCHF1YW50aXR5BAJjRAMFAmNWCQECYkcBBQJkYgMDBQJjWAkAAAIFAmRhBQJkYgcJAGUCCQECYkcBBQJkYgUCY1oDBQJjWAkBAmJHAQUCZGIJAGUCCQECYkcBBQJkYgUCY1IEAmNGAwUCY1YJAQJiRwEFAmRjAwMFAmNYCQAAAgUCZGEFAmRjBwkAZQIJAQJiRwEFAmRjBQJjWgMFAmNYCQECYkcBBQJkYwkAZQIJAQJiRwEFAmRjBQJjVAQCZGkJAQFIAgUCY1IFAmRmBAJkagkBAUgCBQJjVAUCZGcEAmRrCQECYkkCBQJkagUCZGkEAmNFCQEBSAIFAmNEBQJkZgQCY0cJAQFIAgUCY0YFAmRnBAJkbAMJAAACBQJkaAAABAJjSAUBZAQCZG0FAWQEAmNqCQB2BgkAuQICBQJkaQUCZGoAAAkAtgIBAAUAAQAABQRET1dOCQCXCgUJAQFLAgUCY2oFAWEJAQFLAgUCZGkFAmRmCQEBSwIFAmRqBQJkZwkBAmJJAgkAtwICBQJjRwUCZGoJALcCAgUCY0UFAmRpBQJkbQQCY0gJAQJiSQIFAmNHBQJjRQQCZG4JALwCAwkBAVQBCQC4AgIFAmNIBQJkawUBYwUCY0gEAmRtCQEBSAIFAmJQBQFhAwMDBQJjWQkBAiE9AgUCY0gFAWQHCQC/AgIFAmRuBQJkbQcJAAIBCQCsAgIJAKwCAgkArAICAg9QcmljZSBzbGlwcGFnZSAJAKYDAQUCZG4CAyA+IAkApgMBBQJkbQQCZG8JAQFIAgUCZGgFAWEEAmRwCQC9AgQFAmRpCQECYkwDBQJjRwUCY0UFBUZMT09SBQFjBQVGTE9PUgQCZHEJAL0CBAUCZGoFAWMJAQJiTAMFAmNHBQJjRQUFRkxPT1IFBUZMT09SBAJkcgMJAL8CAgUCZHAFAmRqCQCUCgIFAmRxBQJkagkAlAoCBQJkaQUCZHAEAmRzCAUCZHICXzEEAmR0CAUCZHICXzIEAmNqCQC9AgQFAmRvBQJkdAUCY0cFBUZMT09SCQCXCgUJAQFOAwUCY2oFAWEFBUZMT09SCQEBTgMFAmRzBQJkZgUHQ0VJTElORwkBAU4DBQJkdAUCZGcFB0NFSUxJTkcFAmNIBQJkbQQCZHUIBQJkbAJfMQQCZHYIBQJkbAJfMgQCZHcIBQJkbAJfMwQCY0kJAQFLAggFAmRsAl80BQFhBAJkeAkBAUsCCAUCZGwCXzUFAWEDCQBnAgAABQJkdQkAAgECB0xQIDw9IDAEAmR5AwkBASEBBQJjVwAABQJkdQQCZHoJAGUCBQJjUgUCZHYEAmRBCQBlAgUCY1QFAmR3BAJkQgMDBQJjWAkAAAIFAmRhBQJkYgcJAJQKAgUCY1oAAAMDBQJjWAkAAAIFAmRhBQJkYwcJAJQKAgAABQJjWgkAlAoCBQJkdgUCZHcEAmRDCAUCZEICXzEEAmRECAUCZEICXzIEAmRFCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWQAFAmNJCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEBWgIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFAmNJCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYwIFAmN2BQJjcwkBAmJyCgUCZEMFAmREBQJkeQUCY0kFAmJQBQJkeAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCZHoFAmRBBQNuaWwJAJ8KDQUCZHUFAmR5BQJjSQUCY0QFAmNGBQJkaAUCY3cFAmNCBQJkRQUCZHoFAmRBBQJjUwUCY1UBAmRGAQJkRwQCZEgJAJEDAgUCZEcAAAQCZEkJAJEDAgUCZEcAAQQCZEoJALcCAgUCZEgFAmRJAwkAAAIFAmRKBQFlBQFlBAJkSwkBDXBhcnNlSW50VmFsdWUBBQJhTgQCZEwJAGgCBQJkSwACBAJjbgkAvAIDBQJkSAUCZEkFAWYEAmRNCQC8AgMFAmNuBQFpBQFmBAJkTgkAvAIDCQC2AgEFAmRMBQJkSgUBZgQCZE8JALYCAQkAZQIFAmRMAAEKAQJkUAECZFEEAmRSCQC8AgMFAmRRBQJkUQUBZgQCZFMJALwCAwUCZFIFAmRRBQFmBAJkVAkAvAIDBQJkUwUBZgUCZE0JAL0CBAkAtwICBQJkTgkAvAIDBQJkVAUBZwUBZgUCZFEJALcCAgkAvAIDBQJkTwUCZFEFAWYJALwCAwUBaAUCZFQFAWYFB0NFSUxJTkcKAQJkVQICZFYCZFcDCAUCZFYCXzIFAmRWBAJkUQgFAmRWAl8xBAJkWAkBAmRQAQUCZFEEAmRZCQCgAwEJALgCAgUCZFgJAQV2YWx1ZQEFAmRRBAJkWgMJAGYCAAAFAmRZCQEBLQEFAmRZBQJkWQMJAGcCAAEFAmRaCQCUCgIFAmRYBgkAlAoCBQJkWAcEAmVhCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEAmViCgACZWMFAmVhCgACZWQJAJADAQUCZWMKAAJlZQkAlAoCBQJkSgcKAQJlZgICZWcCZWgDCQBnAgUCZWgFAmVkBQJlZwkBAmRVAgUCZWcJAJEDAgUCZWMFAmVoCgECZWkCAmVnAmVoAwkAZwIFAmVoBQJlZAUCZWcJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVpAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgUCZWUAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZFEIBQJlYgJfMQQCZWoIBQJlYgJfMgMFAmVqBQJkUQkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQJkUQECZWsBAmRHBAJlbAUBZwQCZEgJAJEDAgUCZEcAAAQCZEkJAJEDAgUCZEcAAQQCZW0JAKcDAQUBbAQCZEsJALkCAgkApwMBBQJhTgUCZW0EAmRKCQC3AgIFAmRIBQJkSQMJAAACBQJkSgUBZQUBZQQCZEwJALkCAgUCZEsFAmVsBAJkTQkAuQICCQC5AgIJALkCAgUCZEgFAmRJBQJlbAUCZWwEAmVuCQC6AgIJALkCAgUCZEwFAmRKBQJlbQQCZW8JALgCAgUCZEwFAmVtBAJlcAkAtwICBQJlbAUBZgoBAmRVAgJkVgJlcQQCZXIFAmRWBAJkUQgFAmVyAl8xBAJlaggFAmVyAl8yAwkBAiE9AgUCZWoFBHVuaXQFAmRWBAJkVAkAugICCQC5AgIJALkCAgUCZFEFAmRRBQJkUQUCZE0EAmRYCQC6AgIJALkCAgkAtwICBQJlbgkAuQICBQJkVAUCZWwFAmRRCQC3AgIJALoCAgkAuQICBQJlbwUCZFEFAmVtCQC5AgIFAmVwBQJkVAQCZFoJAQFVAQkAuAICBQJkWAkBBXZhbHVlAQUCZFEDCQDAAgIFAWYFAmRaCQCUCgIFAmRYBQJlcQkAlAoCBQJkWAUEdW5pdAQCZWEJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQCZXMKAAJlYwUCZWEKAAJlZAkAkAMBBQJlYwoAAmVlCQCUCgIFAmRKBQR1bml0CgECZWYCAmVnAmVoAwkAZwIFAmVoBQJlZAUCZWcJAQJkVQIFAmVnCQCRAwIFAmVjBQJlaAoBAmVpAgJlZwJlaAMJAGcCBQJlaAUCZWQFAmVnCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTUJAQJlaQIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIJAQJlZgIFAmVlAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8EAmRRCAUCZXMCXzEEAmVqCAUCZXMCXzIDCQECIT0CBQJlagUEdW5pdAUCZFEJAAIBCQCsAgICGUQgY2FsY3VsYXRpb24gZXJyb3IsIEQgPSAJAKYDAQUCZFEBAmV0AwJkRwJkVwJldQQCZWwFAWcEAmV2CQCRAwIFAmRHAwkAAAIFAmRXAAAAAQAABAJlbQkApwMBBQFsBAJkSwkAuQICCQCnAwEFAmFOBQJlbQQCZEoFAmV2BAJkTAkAuQICBQJkSwUCZWwEAmV3CQC6AgIJALkCAgkAuQICCQC6AgIJALkCAgUCZXUFAmV1CQC5AgIFAmV2BQJlbAUCZXUFAmVtCQC5AgIFAmRMBQJlbAQCZXgJALgCAgkAtwICBQJkSgkAugICCQC5AgIFAmV1BQJlbQUCZEwFAmV1CgECZFUCAmRWAmVxBAJleQUCZFYEAmV6CAUCZXkCXzEEAmVqCAUCZXkCXzIDCQECIT0CBQJlagUEdW5pdAUCZFYEAmVBCQC6AgIJALcCAgkAuQICBQJlegUCZXoFAmV3CQC3AgIJALkCAgUBZwUCZXoFAmV4BAJlQgkBAVUBCQC4AgIFAmVBCQEFdmFsdWUBBQJlegMJAMACAgUBZgUCZUIJAJQKAgUCZUEFAmVxCQCUCgIFAmVBBQR1bml0BAJlYQkAzAgCAAAJAMwIAgABCQDMCAIAAgkAzAgCAAMJAMwIAgAECQDMCAIABQkAzAgCAAYJAMwIAgAHCQDMCAIACAkAzAgCAAkJAMwIAgAKCQDMCAIACwkAzAgCAAwJAMwIAgANCQDMCAIADgUDbmlsBAJlQwoAAmVjBQJlYQoAAmVkCQCQAwEFAmVjCgACZWUJAJQKAgUCZXUFBHVuaXQKAQJlZgICZWcCZWgDCQBnAgUCZWgFAmVkBQJlZwkBAmRVAgUCZWcJAJEDAgUCZWMFAmVoCgECZWkCAmVnAmVoAwkAZwIFAmVoBQJlZAUCZWcJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBAmVpAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgkBAmVmAgUCZWUAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQCZXoIBQJlQwJfMQQCZWoIBQJlQwJfMgMJAQIhPQIFAmVqBQR1bml0BQJlegkAAgEJAKwCAgIZWSBjYWxjdWxhdGlvbiBlcnJvciwgWSA9IAkApgMBBQJlegECZUQDAmVFAmVGAmVHBAJlSAkAvAIDCQECZEYBCQDMCAIFAmVFCQDMCAIFAmVGBQNuaWwFAWMFAmVHAwkAAAIFAmVHBQFlBQFlBQJlSAECZUkDAmVKAmVLAmVMBAJlTQkAuAICCQC2AgEJAQJiRwEJAQJhWAEFAmJmBQJlSgQCZU4JALgCAgkAtgIBCQECYkcBCQECYVgBBQJiZwUCZUsEAmVPCQC4AgIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYmUIcXVhbnRpdHkFAmVMBAJlUAkBAmVEAwUCZU0FAmVOBQJlTwUCZVABAmVRAwJlUgJlUwJlTAQCZU0JAGQCCQECYkcBCQECYVgBBQJiZgUCZVIEAmVOCQBkAgkBAmJHAQkBAmFYAQUCYmcFAmVTBAJlTwkAZAIICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5BQJlTAQCZUgJAQJlRAMJALYCAQUCZU0JALYCAQUCZU4JALYCAQUCZU8EAmVUCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJhbgUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFAmFtCQCmAwEFAmVIBQNuaWwJAJQKAgUCZVQFAmVIAQJlVQICZVYCZUgDCQDAAgIFAmVIBQJlVgYJAQJhSgECInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHABAmVXAQJlWAQCZVkIBQJlWAZhbW91bnQEAmVaCQBuBAgFAmVYBmFtb3VudAgFAmVYBXByaWNlBQFhBQVGTE9PUgQCZmEDCQAAAggFAmVYCW9yZGVyVHlwZQUDQnV5CQCUCgIFAmVZCQEBLQEFAmVaCQCUCgIJAQEtAQUCZVkFAmVaBAJlUggFAmZhAl8xBAJlUwgFAmZhAl8yAwMDCQECYU8ABgkAAAIFAmJkBQFyBgkAAAIFAmJkBQFzCQACAQINQWRtaW4gYmxvY2tlZAMDCQECIT0CCAgFAmVYCWFzc2V0UGFpcgthbW91bnRBc3NldAUCYmYGCQECIT0CCAgFAmVYCWFzc2V0UGFpcgpwcmljZUFzc2V0BQJiZwkAAgECCVdyIGFzc2V0cwQCZmIJAKcDAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUCYW0EAmZjCQECZVEDBQJlUgUCZVMAAAQCZmQIBQJmYwJfMQQCZmUIBQJmYwJfMgQCZmYJAMACAgUCZmUFAmZiBQJmZgECZmcBAmRXAwkBAiE9AgkAkAMBCAUCZFcIcGF5bWVudHMAAQkAAgECCjEgcG1udCBleHAEAmZoCQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwAABAJjdAkBBXZhbHVlAQgFAmZoB2Fzc2V0SWQEAmNaCAUCZmgGYW1vdW50BAJkbAkBAmNyBAkA2AQBCAUCZFcNdHJhbnNhY3Rpb25JZAkA2AQBBQJjdAUCY1oIBQJkVwZjYWxsZXIEAmNOCAUCZGwCXzEEAmNPCAUCZGwCXzIEAmNCCQENcGFyc2VJbnRWYWx1ZQEIBQJkbAJfOQQCY1AIBQJkbANfMTADAwkBAmFPAAYJAAACBQJjQgUBcwkAAgEJAKwCAgIPQWRtaW4gYmxvY2tlZDogCQCkAwEFAmNCCQCXCgUFAmNOBQJjTwUCY1oFAmN0BQJjUAECZmkKAmZqAmFlAmZrAmZsAmJQAmNXAmNYAmNZAmNaAmRhBAJkbAkBAmNRDQUCYWUFAmJQCAkBBXZhbHVlAQUCZmsGYW1vdW50CAkBBXZhbHVlAQUCZmsHYXNzZXRJZAgJAQV2YWx1ZQEFAmZsBmFtb3VudAgJAQV2YWx1ZQEFAmZsB2Fzc2V0SWQFAmZqCQAAAgUCYWUCAAUCY1cFAmNYBQJjWQUCY1oFAmRhBAJjQgkBDXBhcnNlSW50VmFsdWUBCAUCZGwCXzgDAwMJAQJhTwAGCQAAAgUCY0IFAXEGCQAAAgUCY0IFAXMJAAIBCQCsAgICCEJsb2NrZWQ6CQCkAwEFAmNCBQJkbAECZm0FAmZuAmN0AmN2AmFlAmZvBAJjeAkA2AQBCQEFdmFsdWUBBQJiZgQCY3kJANgEAQkBBXZhbHVlAQUCYmcEAmN3BQJiZQQCZGYFAmJoBAJkZwUCYmkEAmVPCQC2AgEICQETdmFsdWVPckVycm9yTWVzc2FnZQIJAOwHAQUCY3cCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmZwAwkAvwICBQJlTwUBZQYJAAIBAiJpbml0aWFsIGRlcG9zaXQgcmVxdWlyZXMgYWxsIGNvaW5zAwkAAAIFAmZwBQJmcAQCY0QJAQJiRwEFAmN4BAJjRgkBAmJHAQUCY3kEAmZxAwkAAAIFAmFlAgAJAJQKAgUCY0QFAmNGAwkAAAIFAmN0BQJjeAMJAGYCBQJmbgUCY0QJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIJAGUCBQJjRAUCZm4FAmNGAwkAAAIFAmN0BQJjeQMJAGYCBQJmbgUCY0YJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIFAmNECQBlAgUCY0YFAmZuCQACAQIQd3JvbmcgcG10QXNzZXRJZAQCZnIIBQJmcQJfMQQCZnMIBQJmcQJfMgQCZnQDCQAAAgUCY3QFAmN4CQCUCgIFAmZuAAADCQAAAgUCY3QFAmN5CQCUCgIAAAUCZm4JAAIBAg9pbnZhbGlkIHBheW1lbnQEAmZ1CAUCZnQCXzEEAmZ2CAUCZnQCXzIEAmZ3AwUCZm8JAJUKAwgJAQJjbwEFAmZ1Al8xCAkBAmNvAQUCZnYCXzEICQECY28BBQJmbgJfMgkAlQoDBQJmdQUCZnYAAAQCZngIBQJmdwJfMQQCZnkIBQJmdwJfMgQCY3EIBQJmdwJfMwQCZnoJAGQCBQJmcgUCZngEAmZBCQBkAgUCZnMFAmZ5BAJiVQkBAmRGAQkAzAgCCQC2AgEFAmZyCQDMCAIJALYCAQUCZnMFA25pbAQCYlQJAQJkRgEJAMwIAgkAtgIBBQJmegkAzAgCCQC2AgEFAmZBBQNuaWwEAmZCAwkAvwICBQJiVAUCYlUGCQEFdGhyb3cAAwkAAAIFAmZCBQJmQgQCZkMJAL0CBAUCZU8JALgCAgUCYlQFAmJVBQJiVQUFRkxPT1IEAmNJCQEBSwIJAQJiSQIJAQFIAgUCZkEFAmRnCQEBSAIFAmZ6BQJkZgUBYQQCZEUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFZAAUCY0kJAMwIAgkBDEludGVnZXJFbnRyeQIJAQFaAgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAUCY0kJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAmFjAgUCY3YFAmFlCQECYnIKBQJmdQUCZnYJAKADAQUCZkMFAmNJAAAAAAUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAAAAAAFA25pbAQCZkQJAGsDBQJmcwUBYQUCZnIEAmZFCQBrAwUCZm4FAWEJAGQCBQJmRAUBYQQCZkYJAGUCBQJmbgUCZkUEAmZHCQC8AgMFAmVPCQC2AgEFAmZGCQC2AgEFAmZzBAJmSAkAoAMBCQC8AgMJALgCAgUCZkMFAmZHBQFiBQJmRwkAlgoECQCgAwEFAmZDBQJkRQUCY3EFAmZICQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQJmSQYCZkoCZksCZkwCZmoCZk0CZk4EAmN3CQDYBAEJAQV2YWx1ZQEFAmJlBAJjeAkA2AQBCQEFdmFsdWUBBQJiZgQCY3kJANgEAQkBBXZhbHVlAQUCYmcEAmZPBQJiaAQCZlAFAmJpBAJmUQUCYmQEAmN2AwkAAAIFAmZqBQJicQUCZk0FAmZqBAJmaAkBBXZhbHVlAQkAkQMCBQJmTAAABAJjdAkBBXZhbHVlAQgFAmZoB2Fzc2V0SWQEAmNaCAUCZmgGYW1vdW50BAJlUAkBAmVJAwUBZQUBZQUBZQMJAAACBQJlUAUCZVAEAmNzCQDYBAEFAmZOAwkBAiE9AgUCY3cJANgEAQUCY3QJAAIBAghXcm9uZyBMUAQCY0QJAQJiRwEFAmN4BAJjRgkBAmJHAQUCY3kEAmZSCgACZlMJAPwHBAUEdGhpcwITZ2V0T25lVGtuVjJSRUFET05MWQkAzAgCBQJmSgkAzAgCBQJjWgUDbmlsBQNuaWwDCQABAgUCZlMCCihJbnQsIEludCkFAmZTCQACAQkArAICCQADAQUCZlMCHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkDCQAAAgUCZlIFAmZSBAJjcQgFAmZSAl8yBAJmVAgFAmZSAl8xBAJmVQMDCQBmAgUCZksAAAkAZgIFAmZLBQJmVAcJAQJhSgEJALkJAgkAzAgCAh9hbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUCZksFA25pbAIABQJmVAQCZlYDCQAAAgUCZkoFAmN4CQCWCgQFAmZVAAAJAGUCCQBlAgUCY0QFAmZVBQJjcQUCY0YDCQAAAgUCZkoFAmN5CQCWCgQAAAUCZlUFAmNECQBlAgkAZQIFAmNGBQJmVQUCY3EJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQCZlcIBQJmVgJfMQQCZlgIBQJmVgJfMgQCZnoIBQJmVgJfMwQCZkEIBQJmVgJfNAQCZlkJAQJiSQIJAQFIAgUCZkEFAmZQCQEBSAIFAmZ6BQJmTwQCZloJAQFLAgUCZlkFAWEEAmdhAwkAAAIFAmZKAgVXQVZFUwUEdW5pdAkA2QQBBQJmSgQCZ2IDCQBmAgUCY3EAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJhUQUCY3EFAmdhBQNuaWwFA25pbAQCY1AJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQJjdgUCZlUFAmdhCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZgIJAKUIAQUCY3YFAmNzCQECYkMGBQJmVwUCZlgFAmNaBQJmWgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVkABQJmWgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAVoCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQJmWgUDbmlsBQJnYgMJAAACBQJjUAUCY1AEAmdjCQD8BwQFAmFNAgRidXJuCQDMCAIFAmNaBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN0BQJjWgUDbmlsAwkAAAIFAmdjBQJnYwQCZ2QEAmdlAwkAAAIFBHRoaXMFAmFRAAAFAmNxBAJnZgMJAAACCQECYVYBBQJmSgUCYmYGBwMFAmdmCQCUCgIJAQEtAQkAZAIFAmZUBQJnZQAACQCUCgIAAAkBAS0BCQBkAgUCZlQFAmdlBAJlUggFAmdkAl8xBAJlUwgFAmdkAl8yBAJnZwkBAmVRAwUCZVIFAmVTAAAEAmdoCAUCZ2cCXzEEAmVICAUCZ2cCXzIEAmdpCQECZVUCBQJlUAUCZUgDCQAAAgUCZ2kFAmdpCQCUCgIJAM4IAgUCY1AFAmdoBQJmVQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgECZ2oABAJnawkAoggBCQEBVwADCQABAgUCZ2sCBlN0cmluZwQCZEoFAmdrCQDZBAEFAmRKAwkAAQIFAmdrAgRVbml0BQR1bml0CQACAQILTWF0Y2ggZXJyb3IBAmdsAAQCZ2sJAKIIAQkBAVgAAwkAAQIFAmdrAgZTdHJpbmcEAmRKBQJnawkA2QQBBQJkSgMJAAECBQJnawIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAAJnbQkAAgECEVBlcm1pc3Npb24gZGVuaWVkAQJnbgECZFcEAmdrCQECZ2oAAwkAAQIFAmdrAgpCeXRlVmVjdG9yBAJnbwUCZ2sJAAACCAUCZFcPY2FsbGVyUHVibGljS2V5BQJnbwMJAAECBQJnawIEVW5pdAkAAAIIBQJkVwZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECZ3ABAmRXBAJnawkBAmdqAAMJAAECBQJnawIKQnl0ZVZlY3RvcgQCZ28FAmdrAwkAAAIIBQJkVw9jYWxsZXJQdWJsaWNLZXkFAmdvBgUCZ20DCQABAgUCZ2sCBFVuaXQDCQAAAggFAmRXBmNhbGxlcgUEdGhpcwYFAmdtCQACAQILTWF0Y2ggZXJyb3IdAmRXAQtjb25zdHJ1Y3RvcgEBVgQCZXcJAQJncAEFAmRXAwkAAAIFAmV3BQJldwkAzAgCCQELU3RyaW5nRW50cnkCCQEBVgAFAVYFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVwEKc2V0TWFuYWdlcgECZ3EEAmV3CQECZ3ABBQJkVwMJAAACBQJldwUCZXcEAmdyCQDZBAEFAmdxAwkAAAIFAmdyBQJncgkAzAgCCQELU3RyaW5nRW50cnkCCQEBWAAFAmdxBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBDmNvbmZpcm1NYW5hZ2VyAAQCY24JAQJnbAAEAmdzAwkBCWlzRGVmaW5lZAEFAmNuBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQJncwUCZ3MEAmd0AwkAAAIIBQJkVw9jYWxsZXJQdWJsaWNLZXkJAQV2YWx1ZQEFAmNuBgkAAgECG1lvdSBhcmUgbm90IHBlbmRpbmcgbWFuYWdlcgMJAAACBQJndAUCZ3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkBAVcACQDYBAEJAQV2YWx1ZQEFAmNuCQDMCAIJAQtEZWxldGVFbnRyeQEJAQFYAAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRXAQNwdXQCAmd1Amd2BAJndwkBAmJsAAQCZ3gJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmd3BQFDAgpXciBzdCBhZGRyBAJneQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUCZ3cFAUUCCldyIHNsIGFkZHIDCQBmAgAABQJndQkAAgECDldyb25nIHNsaXBwYWdlAwkBAiE9AgkAkAMBCAUCZFcIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCZ3oJALYCAQgJAQV2YWx1ZQEJAJEDAggFAmRXCHBheW1lbnRzAAAGYW1vdW50BAJnQQkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFcIcGF5bWVudHMAAQZhbW91bnQEAmVNCQC4AgIJALYCAQkBAmJHAQkBAmFYAQUCYmYFAmd6AwkAAAIFAmVNBQJlTQQCZU4JALgCAgkAtgIBCQECYkcBCQECYVgBBQJiZwUCZ0EDCQAAAgUCZU4FAmVOBAJlTwkAtgIBCAkBBXZhbHVlAQkA7AcBBQJiZQhxdWFudGl0eQMJAAACBQJlTwUCZU8EAmVQCQECZUkDBQJnegUCZ0EJALYCAQAAAwkAAAIFAmVQBQJlUAQCZ0IJAQJmaQoJAKUIAQgFAmRXBmNhbGxlcgkA2AQBCAUCZFcNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwAABmFtb3VudAkAkQMCCAUCZFcIcGF5bWVudHMAAQUCZ3UGBwYAAAIABAJkeQgFAmdCAl8yBAJnQwgFAmdCAl83BAJjUAgFAmdCAl85BAJkeggFAmdCA18xMAQCZEEIBQJnQgNfMTEEAmN4CAUCZ0IDXzEyBAJjeQgFAmdCA18xMwQCZGwJAPwHBAUCYU0CBGVtaXQJAMwIAgUCZHkFA25pbAUDbmlsAwkAAAIFAmRsBQJkbAQCZ0QEAmdrBQJkbAMJAAECBQJnawIHQWRkcmVzcwQCZ0UFAmdrCQD8BwQFAmdFAgRlbWl0CQDMCAIFAmR5BQNuaWwFA25pbAUEdW5pdAMJAAACBQJnRAUCZ0QEAmdGAwkAZgIFAmR6AAAJAPwHBAUCZ3kCA3B1dAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjeAUCZHoFA25pbAUDbmlsAwkAAAIFAmdGBQJnRgQCZ0cDCQBmAgUCZEEAAAkA/AcEBQJneQIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFAmN5BQJkQQUDbmlsBQNuaWwDCQAAAgUCZ0cFAmdHBAJnSAMFAmd2BAJnSQkA/AcEBQJneAIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCZ0MFAmR5BQNuaWwDCQAAAgUCZ0kFAmdJBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRXBmNhbGxlcgUCZHkFAmdDBQNuaWwEAmdKCQECZVEDAAAAAAAABAJnaAgFAmdKAl8xBAJlSAgFAmdKAl8yBAJnSwMJAMACAgUCZUgFAmVQBgkBAmFKAQkAuQkCCQDMCAICInVwZGF0ZWQgRExwIGxvd2VyIHRoYW4gY3VycmVudCBETHAJAMwIAgkApgMBBQJlTQkAzAgCCQCmAwEFAmVOCQDMCAIJAKYDAQUCZU8JAMwIAgkApgMBBQJlUAkAzAgCCQCmAwEFAmVICQDMCAIJAKQDAQUCZHoJAMwIAgkApAMBBQJkQQUDbmlsAgEgAwkAAAIFAmdLBQJnSwQCZ0wICQEFdmFsdWUBCQDsBwEFAmJlCHF1YW50aXR5AwkAAAIFAmdMBQJnTAkAzggCCQDOCAIFAmNQBQJnSAUCZ2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBC3B1dE9uZVRrblYyAgJmSwJndgQCZ00KAAJmUwkA/AcEBQJhTQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZTAgdCb29sZWFuBQJmUwkAAgEJAKwCAgkAAwEFAmZTAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnTgMDAwkBAmFPAAYJAAACBQJiZAUBcQYJAAACBQJiZAUBcwYFAmdNBAJnTwkAzAgCAwMJAQEhAQUCZ04GCQECZ24BBQJkVwYJAQJhSgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRXCHBheW1lbnRzAAEGCQECYUoBAh5leGFjdGx5IDEgcGF5bWVudCBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnTwUCZ08EAmN4CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeQkA2AQBCQEFdmFsdWUBBQJiZwQCY3cFAmJlBAJmTwUCYmgEAmZQBQJiaQQCY3YDCQAAAggFAmRXBmNhbGxlcgUEdGhpcwgFAmRXDG9yaWdpbkNhbGxlcggFAmRXBmNhbGxlcgQCZmgJAQV2YWx1ZQEJAJEDAggFAmRXCHBheW1lbnRzAAAEAmN0CQDYBAEJAQV2YWx1ZQEIBQJmaAdhc3NldElkBAJjWggFAmZoBmFtb3VudAQCZVADCQAAAggFAmZoB2Fzc2V0SWQFAmJmCQECZUkDCQC2AgEFAmNaCQC2AgEAAAkAtgIBAAAJAQJlSQMJALYCAQAACQC2AgEFAmNaCQC2AgEAAAMJAAACBQJlUAUCZVAEAmdQCQECZm0FBQJjWgUCY3QJAKUIAQUCY3YJANgEAQgFAmRXDXRyYW5zYWN0aW9uSWQGAwkAAAIFAmdQBQJnUAQCY3EIBQJnUAJfMwQCY1AIBQJnUAJfMgQCZ1EIBQJnUAJfMQQCZHkDAwkAZgIFAmZLAAAJAGYCBQJmSwUCZ1EHCQECYUoBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmZLBQNuaWwCAAUCZ1EEAmdCCQD8BwQFAmFNAgRlbWl0CQDMCAIFAmR5BQNuaWwFA25pbAMJAAACBQJnQgUCZ0IEAmdEBAJnawUCZ0IDCQABAgUCZ2sCB0FkZHJlc3MEAmdFBQJnawkA/AcEBQJnRQIEZW1pdAkAzAgCBQJkeQUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZ0QFAmdEBAJnSAMFAmd2BAJnSQkA/AcEBQJibgIFc3Rha2UFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3cFAmR5BQNuaWwDCQAAAgUCZ0kFAmdJBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAmRXBmNhbGxlcgUCZHkFAmN3BQNuaWwEAmdiAwkAZgIFAmNxAAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUCYVEFAmNxCQDZBAEFAmN0BQNuaWwFA25pbAQCZ1IDCQAAAgUEdGhpcwUCYVEJAJQKAgAAAAAEAmdTAwkAAAIIBQJmaAdhc3NldElkBQJiZgYHAwUCZ1MJAJQKAgkBAS0BBQJjcQAACQCUCgIAAAkBAS0BBQJjcQQCZVIIBQJnUgJfMQQCZVMIBQJnUgJfMgQCZ1QJAQJlUQMFAmVSBQJlUwAABAJnaAgFAmdUAl8xBAJlSAgFAmdUAl8yBAJnaQkBAmVVAgUCZVAFAmVIAwkAAAIFAmdpBQJnaQkAlAoCCQDOCAIJAM4IAgkAzggCBQJjUAUCZ0gFAmdiBQJnaAUCZHkJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBCnB1dEZvckZyZWUBAmdVAwkAZgIAAAUCZ1UJAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUCZFcIcGF5bWVudHMAAgkAAgECDDIgcG1udHMgZXhwZAQCZ1YJAQJmaQoJAKUIAQgFAmRXBmNhbGxlcgkA2AQBCAUCZFcNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwAABmFtb3VudAkAkQMCCAUCZFcIcGF5bWVudHMAAQUCZ1UHBwYAAAIABAJjUAgFAmdWAl85BAJnegkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFcIcGF5bWVudHMAAAZhbW91bnQEAmdBCQC2AgEICQEFdmFsdWUBCQCRAwIIBQJkVwhwYXltZW50cwABBmFtb3VudAQCZVAJAQJlSQMFAmd6BQJnQQkAtgIBAAADCQAAAgUCZVAFAmVQBAJnVwkBAmVRAwAAAAAAAAQCZ2gIBQJnVwJfMQQCZUgIBQJnVwJfMgQCZ2kJAQJlVQIFAmVQBQJlSAMJAAACBQJnaQUCZ2kJAM4IAgUCY1AFAmdoCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRXAQNnZXQABAJlUAkBAmVJAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQJlUAUCZVAEAmRsCQECZmcBBQJkVwQCZ1gIBQJkbAJfMQQCY08IBQJkbAJfMgQCY1oIBQJkbAJfMwQCY3QIBQJkbAJfNAQCY1AIBQJkbAJfNQQCZXgJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCY1oFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCY3QFAmNaBQNuaWwDCQAAAgUCZXgFAmV4BAJnWQkBAmVRAwkBAS0BBQJnWAkBAS0BBQJjTwAABAJnaAgFAmdZAl8xBAJlSAgFAmdZAl8yBAJnaQkBAmVVAgUCZVAFAmVIAwkAAAIFAmdpBQJnaQkAzggCBQJjUAUCZ2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBC2dldE9uZVRrblYyAgJmSgJmSwQCZ00KAAJmUwkA/AcEBQJhTQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAmZTAgdCb29sZWFuBQJmUwkAAgEJAKwCAgkAAwEFAmZTAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBAJnWgMDCQECYU8ABgkAAAIFAmJkBQFzBgUCZ00EAmdPCQDMCAIDAwkBASEBBQJnWgYJAQJnbgEFAmRXBgkBAmFKAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZFcIcGF5bWVudHMAAQYJAQJhSgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFAmdPBQJnTwQCaGEJAQJmSQYFAmZKBQJmSwgFAmRXCHBheW1lbnRzCAUCZFcGY2FsbGVyCAUCZFcMb3JpZ2luQ2FsbGVyCAUCZFcNdHJhbnNhY3Rpb25JZAQCY1AIBQJoYQJfMQQCZlUIBQJoYQJfMgkAlAoCBQJjUAUCZlUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBCnJlZnJlc2hETHAABAJoYgkBC3ZhbHVlT3JFbHNlAgkAnwgBBQJhbgAABAJoYwMJAGcCCQBlAgUGaGVpZ2h0BQJoYgUCYXEFBHVuaXQJAQJhSgEJALkJAgkAzAgCCQCkAwEFAmFxCQDMCAICLyBibG9ja3MgaGF2ZSBub3QgcGFzc2VkIHNpbmNlIHRoZSBwcmV2aW91cyBjYWxsBQNuaWwCAAMJAAACBQJoYwUCaGMEAmZiCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKgDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQJhbQIBMAkBAmFMAQILaW52YWxpZCBkTHAEAmhkCQECZVEDAAAAAAAABAJoZQgFAmhkAl8xBAJlSAgFAmhkAl8yBAJlVAMJAQIhPQIFAmZiBQJlSAUCaGUJAQJhSgECEm5vdGhpbmcgdG8gcmVmcmVzaAkAlAoCBQJlVAkApgMBBQJlSAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVwETZ2V0T25lVGtuVjJSRUFET05MWQICZkoCaGYEAmN4CQDYBAEJAQV2YWx1ZQEFAmJmBAJjeQkA2AQBCQEFdmFsdWUBBQJiZwQCY3cJANgEAQkBBXZhbHVlAQUCYmUEAmRHCQDMCAIJALYCAQkBAmJHAQUCY3gJAMwIAgkAtgIBCQECYkcBBQJjeQUDbmlsBAJlRwkAtgIBCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUCY3cCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAmJVCQECZEYBBQJkRwQCYlQJALgCAgUCYlUJALwCAwkAtgIBBQJoZgUCYlUFAmVHBAJoZwMJAAACBQJmSgUCY3gAAAMJAAACBQJmSgUCY3kAAQkAAgECFGludmFsaWQgb3V0IGFzc2V0IGlkBAJoaAkBAmV0AwUCZEcFAmhnBQJiVAQCaGkJALgCAgkAkQMCBQJkRwUCaGcFAmhoBAJoagkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCaGkFAWYFA25pbAQCaGsJAQJjbwEFAmhqBAJmVAgFAmhrAl8xBAJjcQgFAmhrAl8yCQCUCgIFA25pbAkAlAoCBQJmVAUCY3ECZFcBHGdldE9uZVRrblYyV2l0aEJvbnVzUkVBRE9OTFkCAmZKAmhmBAJjeAkA2AQBCQEFdmFsdWUBBQJiZgQCY3kJANgEAQkBBXZhbHVlAQUCYmcEAmN3CQDYBAEJAQV2YWx1ZQEFAmJlBAJjRAkBAmJHAQUCY3gEAmNGCQECYkcBBQJjeQQCaGwKAAJmUwkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFAmZKCQDMCAIFAmhmBQNuaWwFA25pbAMJAAECBQJmUwIKKEludCwgSW50KQUCZlMJAAIBCQCsAgIJAAMBBQJmUwIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQQCZlQIBQJobAJfMQQCY3EIBQJobAJfMgQCZGwJAQJjcgQCAAUCY3cFAmhmBQR0aGlzBAJjTggFAmRsAl8xBAJjTwgFAmRsAl8yBAJobQkAZAIFAmNOBQJjTwQCZkgDCQAAAgUCaG0AAAMJAAACBQJmVAAAAAAJAAIBAhdib251cyBjYWxjdWxhdGlvbiBlcnJvcgkAawMJAGUCBQJmVAUCaG0FAWEFAmhtCQCUCgIFA25pbAkAlQoDBQJmVAUCY3EFAmZIAmRXAQlnZXROb0xlc3MCAmhuAmhvBAJocAkAtgIBCQECYkcBCQECYVgBBQJiZgMJAAACBQJocAUCaHAEAmhxCQC2AgEJAQJiRwEJAQJhWAEFAmJnAwkAAAIFAmhxBQJocQQCaHIJALYCAQgJAQV2YWx1ZQEJAOwHAQUCYmUIcXVhbnRpdHkDCQAAAgUCaHIFAmhyBAJocwkAuAICBQJocgkAtgIBCAkBBXZhbHVlAQkAkQMCCAUCZFcIcGF5bWVudHMAAAZhbW91bnQDCQAAAgUCaHMFAmhzBAJkbAkBAmZnAQUCZFcEAmNOCAUCZGwCXzEEAmNPCAUCZGwCXzIEAmNaCAUCZGwCXzMEAmN0CAUCZGwCXzQEAmNQCAUCZGwCXzUDCQBmAgUCaG4FAmNOCQACAQkArAICCQCsAgIJAKwCAgIJRmFpbGVkOiAgCQCkAwEFAmNOAgMgPCAJAKQDAQUCaG4DCQBmAgUCaG8FAmNPCQACAQkArAICCQCsAgIJAKwCAgIIRmFpbGVkOiAJAKQDAQUCY08CAyA8IAkApAMBBQJobwQCZVAJAQJlSQMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUCZVAFAmVQBAJodAkA/AcEBQJhTQIEYnVybgkAzAgCBQJjWgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJjdAUCY1oFA25pbAMJAAACBQJodAUCaHQEAmh1CQECZVEDCQEBLQEFAmNOCQEBLQEFAmNPAAAEAmdoCAUCaHUCXzEEAmVICAUCaHUCXzIEAmdpCQECZVUCBQJlUAUCZUgDCQAAAgUCZ2kFAmdpCQDOCAIFAmNQBQJnaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVwENdW5zdGFrZUFuZEdldAECY3AEAmh2AwkBAiE9AgkAkAMBCAUCZFcIcGF5bWVudHMAAAkAAgECDU5vIHBtbnRzIGV4cGQGAwkAAAIFAmh2BQJodgQCaHcJAQJibAAEAmdDBQJiZQQCaHgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFAmh3BQFDAgpXciBzdCBhZGRyBAJlUAkBAmVJAwkAtgIBAAAJALYCAQAACQC2AgEAAAQCaHkJAPwHBAUCaHgCB3Vuc3Rha2UJAMwIAgkA2AQBBQJnQwkAzAgCBQJjcAUDbmlsBQNuaWwDCQAAAgUCaHkFAmh5BAJkbAkBAmNyBAkA2AQBCAUCZFcNdHJhbnNhY3Rpb25JZAkA2AQBBQJnQwUCY3AIBQJkVwZjYWxsZXIEAmNOCAUCZGwCXzEEAmNPCAUCZGwCXzIEAmNCCQENcGFyc2VJbnRWYWx1ZQEIBQJkbAJfOQQCY1AIBQJkbANfMTAEAmh6AwMJAQJhTwAGCQAAAgUCY0IFAXMJAAIBCQCsAgICCUJsb2NrZWQ6IAkApAMBBQJjQgYDCQAAAgUCaHoFAmh6BAJoQQkA/AcEBQJhTQIEYnVybgkAzAgCBQJjcAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnQwUCY3AFA25pbAMJAAACBQJoQQUCaEEEAmhCCQECZVEDCQEBLQEFAmNOCQEBLQEFAmNPAAAEAmdoCAUCaEICXzEEAmVICAUCaEICXzIEAmdpCQECZVUCBQJlUAUCZUgDCQAAAgUCZ2kFAmdpCQDOCAIFAmNQBQJnaAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgJkVwETdW5zdGFrZUFuZEdldE5vTGVzcwMCaEMCaEQCaG8EAmdaAwkBAmFPAAYJAAACBQJiZAUBcwQCZ08JAMwIAgMJAQEhAQUCZ1oGCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUCZFcIcGF5bWVudHMAAAYJAAIBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnTwUCZ08EAmVQCQECZUkDCQC2AgEAAAkAtgIBAAAJALYCAQAABAJoeQkA/AcEBQJibgIHdW5zdGFrZQkAzAgCCQDYBAEFAmJlCQDMCAIFAmhDBQNuaWwFA25pbAMJAAACBQJoeQUCaHkEAmhFCQECY3IECQDYBAEIBQJkVw10cmFuc2FjdGlvbklkCQDYBAEFAmJlBQJoQwgFAmRXBmNhbGxlcgQCY04IBQJoRQJfMQQCY08IBQJoRQJfMgQCY1AIBQJoRQNfMTAEAmhGCQDMCAIDCQBnAgUCY04FAmhEBgkAAgEJALkJAgkAzAgCAixhbW91bnQgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhEBQNuaWwCAAkAzAgCAwkAZwIFAmNPBQJobwYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFAmhvBQNuaWwCAAUDbmlsAwkAAAIFAmhGBQJoRgQCaHQJAPwHBAUCYU0CBGJ1cm4JAMwIAgUCaEMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUCYmUFAmhDBQNuaWwDCQAAAgUCaHQFAmh0BAJoRwkBAmVRAwkBAS0BBQJjTgkBAS0BBQJjTwAABAJnaAgFAmhHAl8xBAJlSAgFAmhHAl8yBAJnaQkBAmVVAgUCZVAFAmVIAwkAAAIFAmdpBQJnaQkAzggCBQJjUAUCZ2gJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4CZFcBFXVuc3Rha2VBbmRHZXRPbmVUa25WMgMCaEMCZkoCZksEAmdNCgACZlMJAPwHBAUCYU0CKGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQJmUwIHQm9vbGVhbgUCZlMJAAIBCQCsAgIJAAMBBQJmUwIcIGNvdWxkbid0IGJlIGNhc3QgdG8gQm9vbGVhbgQCZ1oDAwkBAmFPAAYJAAACBQJiZAUBcwYFAmdNBAJnTwkAzAgCAwMJAQEhAQUCZ1oGCQECZ24BBQJkVwYJAQJhSgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAmRXCHBheW1lbnRzAAAGCQECYUoBAhhubyBwYXltZW50cyBhcmUgZXhwZWN0ZWQFA25pbAMJAAACBQJnTwUCZ08EAmh3CQECYmwABAJnQwUCYmUEAmh4CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQJodwUBQwIKV3Igc3QgYWRkcgQCaHkJAPwHBAUCaHgCB3Vuc3Rha2UJAMwIAgkA2AQBBQJnQwkAzAgCBQJoQwUDbmlsBQNuaWwDCQAAAgUCaHkFAmh5BAJoSAkBAmZJBgUCZkoFAmZLCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQJnQwUCaEMFA25pbAgFAmRXBmNhbGxlcggFAmRXDG9yaWdpbkNhbGxlcggFAmRXDXRyYW5zYWN0aW9uSWQEAmNQCAUCaEgCXzEEAmZVCAUCaEgCXzIJAJQKAgUCY1AFAmZVCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAmRXARxwdXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAgJoSQJoSgQCaEsJAQJmbQUFAmhJBQJoSgIAAgAGBAJmQwgFAmhLAl8xBAJjUAgFAmhLAl8yBAJjcQgFAmhLAl8zBAJmSAgFAmhLAl80CQCUCgIFA25pbAkAlQoDBQJmQwUCY3EFAmZIAmRXASFwdXRPbmVUa25WMldpdGhvdXRUYWtlRmVlUkVBRE9OTFkCAmhJAmhKBAJoTAkBAmZtBQUCaEkFAmhKAgACAAcEAmZDCAUCaEwCXzEEAmNQCAUCaEwCXzIEAmNxCAUCaEwCXzMEAmZICAUCaEwCXzQJAJQKAgUDbmlsCQCVCgMFAmZDBQJjcQUCZkgCZFcBCGFjdGl2YXRlAgJoTQJoTgMJAQIhPQIJAKUIAQgFAmRXBmNhbGxlcgkApQgBBQJhTQkAAgECBmRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhZwAFAmhNCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhaAAFAmhOBQNuaWwCB3N1Y2Nlc3MCZFcBBHNldFMCAmhPAmh6AwkBAiE9AgkApQgBCAUCZFcGY2FsbGVyCQECYUYCBQR0aGlzCQECYWoABQJnbQkAzAgCCQELU3RyaW5nRW50cnkCBQJoTwUCaHoFA25pbAJkVwEEc2V0SQICaE8CaHoDCQECIT0CCQClCAEIBQJkVwZjYWxsZXIJAQJhRgIFBHRoaXMJAQJhagAFAmdtCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQJoTwUCaHoFA25pbAJkVwEcZ2V0UG9vbENvbmZpZ1dyYXBwZXJSRUFET05MWQAJAJQKAgUDbmlsCQECYVIAAmRXARxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZAQJiSAkAlAoCBQNuaWwJAQJiRwEFAmJIAmRXARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwJjYQJjYgJjZgQCaFAJAQJjZQMFAmNhBQJjYgUCY2YJAJQKAgUDbmlsCQDMCAIJAKYDAQkAkQMCBQJoUAAACQDMCAIJAKYDAQkAkQMCBQJoUAABCQDMCAIJAKYDAQkAkQMCBQJoUAACBQNuaWwCZFcBFmZyb21YMThXcmFwcGVyUkVBRE9OTFkCAUwCaFEJAJQKAgUDbmlsCQEBSwIJAKcDAQUBTAUCaFECZFcBFHRvWDE4V3JhcHBlclJFQURPTkxZAgFJAUoJAJQKAgUDbmlsCQCmAwEJAQFIAgUBSQUBSgJkVwEeY2FsY1ByaWNlQmlnSW50V3JhcHBlclJFQURPTkxZAgJiSgJiSwkAlAoCBQNuaWwJAKYDAQkBAmJJAgkApwMBBQJiSgkApwMBBQJiSwJkVwEjZXN0aW1hdGVQdXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkJAmNzAmJQAmNSAmNTAmNUAmNVAmhSAmNWAmNXCQCUCgIFA25pbAkBAmNRDQUCY3MFAmJQBQJjUgUCY1MFAmNUBQJjVQUCaFIFAmNWBQJjVwYHAAACAAJkVwEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEAmNzAmhTAmN1AmhSBAJkbAkBAmNyBAUCY3MFAmhTBQJjdQkBEUBleHRyTmF0aXZlKDEwNjIpAQUCaFIJAJQKAgUDbmlsCQCcCgoIBQJkbAJfMQgFAmRsAl8yCAUCZGwCXzMIBQJkbAJfNAgFAmRsAl81CAUCZGwCXzYIBQJkbAJfNwkApgMBCAUCZGwCXzgIBQJkbAJfOQgFAmRsA18xMAJkVwEOZ2V0RmVlUkVBRE9OTFkACQCUCgIFA25pbAUCYWwBAmhUAQJoVQAEAmhWBAJnawkBAmdqAAMJAAECBQJnawIKQnl0ZVZlY3RvcgQCZ28FAmdrBQJnbwMJAAECBQJnawIEVW5pdAgFAmhUD3NlbmRlclB1YmxpY0tleQkAAgECC01hdGNoIGVycm9yBAJnawUCaFQDCQABAgUCZ2sCBU9yZGVyBAJlWAUCZ2sEAmhXCQECYVAABAJoWAkBAmVXAQUCZVgEAmhZCQD0AwMIBQJlWAlib2R5Qnl0ZXMJAJEDAggFAmVYBnByb29mcwAACAUCZVgPc2VuZGVyUHVibGljS2V5BAJoWgkA9AMDCAUCZVgJYm9keUJ5dGVzCQCRAwIIBQJlWAZwcm9vZnMAAQUCaFcDAwMFAmhYBQJoWQcFAmhaBwYJAQJhQgMFAmhYBQJoWQUCaFoDCQABAgUCZ2sCFFNldFNjcmlwdFRyYW5zYWN0aW9uBAJkSgUCZ2sEAmlhCQD2AwEJAQV2YWx1ZQEIBQJkSgZzY3JpcHQEAmliCQDbBAEJAQV2YWx1ZQEJAJ0IAgUCYU0JAQJhegAEAmljCQDxBwEFBHRoaXMDAwkAAAIFAmliBQJpYQkBAiE9AgUCaWMFAmlhBwYJAPQDAwgFAmhUCWJvZHlCeXRlcwkAkQMCCAUCaFQGcHJvb2ZzAAAFAmhWCQD0AwMIBQJoVAlib2R5Qnl0ZXMJAJEDAggFAmhUBnByb29mcwAABQJoVgS0dwo=", "chainId": 84, "height": 2378400, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: HLerwqfaNgHV8geLXFSPmhYaZrxx7dXzDPy8omU7ZjrP Next: 41GSXkQS1k26ek8jmwxp7GVyEBNegdbapokmoEGNpKTE Diff:
OldNewDifferences
397397 then throw(((("Price slippage " + toString(dn)) + " > ") + toString(dm)))
398398 else {
399399 let do = H(dh, a)
400- let dp = fraction(di, bL(cG, cE, CEILING), c, FLOOR)
400+ let dp = fraction(di, bL(cG, cE, FLOOR), c, FLOOR)
401401 let dq = fraction(dj, c, bL(cG, cE, FLOOR), FLOOR)
402402 let dr = if ((dp > dj))
403403 then $Tuple2(dq, dj)
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = 100000000
55
66 let b = toBigInt(100000000)
77
88 let c = toBigInt(1000000000000000000)
99
1010 let d = toBigInt(0)
1111
1212 let e = toBigInt(0)
1313
1414 let f = toBigInt(1)
1515
1616 let g = toBigInt(2)
1717
1818 let h = toBigInt(3)
1919
2020 let i = toBigInt(4)
2121
2222 let j = toBigInt((a - ((a * 1) / a)))
2323
2424 let k = "WAVES"
2525
2626 let l = "100"
2727
2828 let m = "1"
2929
3030 let n = "__"
3131
3232 let o = ""
3333
3434 let p = 1
3535
3636 let q = 2
3737
3838 let r = 3
3939
4040 let s = 4
4141
4242 let t = 1
4343
4444 let u = 2
4545
4646 let v = 3
4747
4848 let w = 4
4949
5050 let x = 5
5151
5252 let y = 6
5353
5454 let z = 7
5555
5656 let A = 8
5757
5858 let B = 9
5959
6060 let C = 1
6161
6262 let D = 6
6363
6464 let E = 7
6565
6666 let F = 10
6767
6868 let G = fraction(10, a, 10000)
6969
7070 func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
7171
7272
7373 func K (L,M) = toInt(fraction(L, toBigInt(M), c))
7474
7575
7676 func N (L,M,O) = toInt(fraction(L, toBigInt(M), c, O))
7777
7878
7979 func P (Q,R,S) = fraction(Q, R, S)
8080
8181
8282 func T (L) = if ((d > L))
8383 then -(L)
8484 else L
8585
8686
8787 func U (L) = if ((d > L))
8888 then -(L)
8989 else L
9090
9191
9292 func V () = "%s__factoryContract"
9393
9494
9595 func W () = "%s__managerPublicKey"
9696
9797
9898 func X () = "%s__pendingManagerPublicKey"
9999
100100
101101 func Y () = "%s%s__price__last"
102102
103103
104104 func Z (aa,ab) = makeString(["%s%s%d%d__price__history", toString(aa), toString(ab)], n)
105105
106106
107107 func ac (ad,ae) = ((("%s%s%s__P__" + ad) + "__") + ae)
108108
109109
110110 func af (ad,ae) = ((("%s%s%s__G__" + ad) + "__") + ae)
111111
112112
113113 func ag () = "%s__amountAsset"
114114
115115
116116 func ah () = "%s__priceAsset"
117117
118118
119119 func ai () = "%s__amp"
120120
121121
122122 func aj () = "%s__addonAddr"
123123
124124
125125 let ak = "%s__fee"
126126
127127 let al = valueOrElse(getInteger(this, ak), G)
128128
129129 let am = makeString(["%s", "dLp"], n)
130130
131131 let an = makeString(["%s", "dLpRefreshedHeight"], n)
132132
133133 let ao = makeString(["%s", "refreshDLpDelay"], n)
134134
135135 let ap = 1
136136
137137 let aq = valueOrElse(getInteger(this, ao), ap)
138138
139139 func ar () = "%s__factoryConfig"
140140
141141
142142 func as () = "%s%s__matcher__publicKey"
143143
144144
145145 func at (au,av) = (((("%d%d%s__" + au) + "__") + av) + "__config")
146146
147147
148148 func aw (ax) = ("%s%s%s__mappings__baseAsset2internalId__" + ax)
149149
150150
151151 func ay () = "%s__shutdown"
152152
153153
154154 func az () = "%s__allowedLpStableScriptHash"
155155
156156
157157 func aA () = "%s__feeCollectorAddress"
158158
159159
160160 func aB (aC,aD,aE) = throw(((((("Failed: ordValid=" + toString(aC)) + " sndrValid=") + toString(aD)) + " mtchrValid=") + toString(aE)))
161161
162162
163163 func aF (aG,aH) = valueOrErrorMessage(getString(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
164164
165165
166166 func aI (aG,aH) = valueOrErrorMessage(getInteger(aG, aH), makeString(["mandatory ", toString(aG), ".", aH, " not defined"], ""))
167167
168168
169169 func aJ (aK) = throw(makeString(["lp_stable.ride:", aK], " "))
170170
171171
172172 func aL (aK) = makeString(["lp_stable.ride:", aK], " ")
173173
174174
175175 let aM = addressFromStringValue(aF(this, V()))
176176
177177 let aN = aF(this, ai())
178178
179179 func aO () = valueOrElse(getBoolean(aM, ay()), false)
180180
181181
182182 func aP () = fromBase58String(aF(aM, as()))
183183
184184
185185 let aQ = addressFromStringValue(aF(aM, aA()))
186186
187187 func aR () = {
188188 let aS = aF(this, ag())
189189 let aT = aF(this, ah())
190190 let aU = aI(aM, aw(aT))
191191 let au = aI(aM, aw(aS))
192192 split(aF(aM, at(toString(au), toString(aU))), n)
193193 }
194194
195195
196196 func aV (aW) = if ((aW == k))
197197 then unit
198198 else fromBase58String(aW)
199199
200200
201201 func aX (aW) = if ((aW == unit))
202202 then k
203203 else toBase58String(value(aW))
204204
205205
206206 func aY (aZ) = $Tuple9(addressFromStringValue(aZ[t]), parseIntValue(aZ[u]), fromBase58String(aZ[v]), aV(aZ[w]), aV(aZ[x]), parseIntValue(aZ[y]), parseIntValue(aZ[z]), fromBase58String(aZ[A]), fromBase58String(aZ[B]))
207207
208208
209209 let ba = aY(aR())
210210
211211 let bb = ba
212212
213213 let bc = bb._1
214214
215215 let bd = bb._2
216216
217217 let be = bb._3
218218
219219 let bf = bb._4
220220
221221 let bg = bb._5
222222
223223 let bh = bb._6
224224
225225 let bi = bb._7
226226
227227 let bj = bb._8
228228
229229 let bk = bb._9
230230
231231 func bl () = split(aF(aM, ar()), n)
232232
233233
234234 let bm = bl()
235235
236236 let bn = valueOrErrorMessage(addressFromString(bm[C]), "Invalid staking contract address")
237237
238238 let bo = valueOrErrorMessage(addressFromString(bm[E]), "Invalid slipage contract address")
239239
240240 let bp = valueOrErrorMessage(addressFromString(bm[F]), "Invalid gwx contract address")
241241
242242 let bq = valueOrErrorMessage(addressFromString(bm[D]), "Invalid gwx contract address")
243243
244244 func br (bs,bt,bu,bv,bw,bx,by,bz,bA,bB) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bs), toString(bt), toString(bu), toString(bv), toString(bw), toString(bx), toString(by), toString(bz), toString(bA), toString(bB)], n)
245245
246246
247247 func bC (bD,bE,bF,bv,by,bz) = makeString(["%d%d%d%d%d%d", toString(bD), toString(bE), toString(bF), toString(bv), toString(by), toString(bz)], n)
248248
249249
250250 func bG (bH) = if ((bH == "WAVES"))
251251 then wavesBalance(this).available
252252 else assetBalance(this, fromBase58String(bH))
253253
254254
255255 func bI (bJ,bK) = fraction(bJ, c, bK)
256256
257257
258258 func bL (bJ,bK,O) = fraction(bJ, c, bK, O)
259259
260260
261261 func bM (bN,bO,bP) = {
262262 let bQ = fraction((bN - bO), b, bO)
263263 let bR = ((bP - T(bQ)) > d)
264264 if (!(bR))
265265 then throw(("Big slpg: " + toString(bQ)))
266266 else $Tuple2(bR, min([bN, bO]))
267267 }
268268
269269
270270 func bS (bT,bU,bV) = {
271271 let bQ = fraction(bU, b, bT)
272272 let bW = (bV > bQ)
273273 if (if (bW)
274274 then true
275275 else (bU > bT))
276276 then throw(((((((toString(bU) + " ") + toString(bT)) + " ") + toString(bQ)) + " ") + toString(bV)))
277277 else bW
278278 }
279279
280280
281281 func bX (bY,bZ,ca,cb) = {
282282 let cc = H(ca, bY)
283283 let cd = H(cb, bZ)
284284 bI(cd, cc)
285285 }
286286
287287
288288 func ce (ca,cb,cf) = {
289289 let cg = bh
290290 let ch = bi
291291 let ci = bX(cg, ch, ca, cb)
292292 let bK = H(ca, cg)
293293 let bJ = H(cb, ch)
294294 let cj = H(cf, a)
295295 let ck = bI(bK, cj)
296296 let cl = bI(bJ, cj)
297297 [ci, ck, cl]
298298 }
299299
300300
301301 func cm (ca,cb,cf) = {
302302 let cn = ce(ca, cb, cf)
303303 [K(cn[0], a), K(cn[1], a), K(cn[2], a)]
304304 }
305305
306306
307307 func co (cp) = {
308308 let cq = fraction(cp, al, a)
309309 $Tuple2((cp - cq), cq)
310310 }
311311
312312
313313 func cr (cs,ct,cu,cv) = {
314314 let cw = be
315315 let cx = toBase58String(value(bf))
316316 let cy = toBase58String(value(bg))
317317 let cz = bh
318318 let cA = bi
319319 let cB = toString(bd)
320320 let cC = valueOrErrorMessage(assetInfo(cw), "Wrong LP id").quantity
321321 if ((toBase58String(cw) != ct))
322322 then throw("Wrong pmt asset")
323323 else {
324324 let cD = bG(cx)
325325 let cE = H(cD, cz)
326326 let cF = bG(cy)
327327 let cG = H(cF, cA)
328328 let cH = bI(cG, cE)
329329 let cI = K(cH, a)
330330 let cJ = H(cu, a)
331331 let cK = H(cC, a)
332332 let cL = fraction(cE, cJ, cK)
333333 let cM = fraction(cG, cJ, cK)
334334 let cN = N(cL, cz, FLOOR)
335335 let cO = N(cM, cA, FLOOR)
336336 let cP = if ((cs == ""))
337337 then nil
338338 else [ScriptTransfer(cv, cN, if ((cx == "WAVES"))
339339 then unit
340340 else fromBase58String(cx)), ScriptTransfer(cv, cO, if ((cy == "WAVES"))
341341 then unit
342342 else fromBase58String(cy)), StringEntry(af(toString(cv), cs), bC(cN, cO, cu, cI, height, lastBlock.timestamp)), IntegerEntry(Y(), cI), IntegerEntry(Z(height, lastBlock.timestamp), cI)]
343343 $Tuple10(cN, cO, cx, cy, cD, cF, cC, cH, cB, cP)
344344 }
345345 }
346346
347347
348348 func cQ (cs,bP,cR,cS,cT,cU,cv,cV,cW,cX,cY,cZ,da) = {
349349 let cw = be
350350 let db = toBase58String(value(bf))
351351 let dc = toBase58String(value(bg))
352352 let dd = bj
353353 let de = bk
354354 let df = bh
355355 let dg = bi
356356 let cB = toString(bd)
357357 let dh = valueOrErrorMessage(assetInfo(cw), "Wr lp as").quantity
358358 let cD = if (cV)
359359 then bG(db)
360360 else if (if (cX)
361361 then (da == db)
362362 else false)
363363 then (bG(db) - cZ)
364364 else if (cX)
365365 then bG(db)
366366 else (bG(db) - cR)
367367 let cF = if (cV)
368368 then bG(dc)
369369 else if (if (cX)
370370 then (da == dc)
371371 else false)
372372 then (bG(dc) - cZ)
373373 else if (cX)
374374 then bG(dc)
375375 else (bG(dc) - cT)
376376 let di = H(cR, df)
377377 let dj = H(cT, dg)
378378 let dk = bI(dj, di)
379379 let cE = H(cD, df)
380380 let cG = H(cF, dg)
381381 let dl = if ((dh == 0))
382382 then {
383383 let cH = d
384384 let dm = d
385385 let cj = pow((di * dj), 0, toBigInt(5), 1, 0, DOWN)
386386 $Tuple5(K(cj, a), K(di, df), K(dj, dg), bI((cG + dj), (cE + di)), dm)
387387 }
388388 else {
389389 let cH = bI(cG, cE)
390390 let dn = fraction(T((cH - dk)), c, cH)
391391 let dm = H(bP, a)
392392 if (if (if (cY)
393393 then (cH != d)
394394 else false)
395395 then (dn > dm)
396396 else false)
397397 then throw(((("Price slippage " + toString(dn)) + " > ") + toString(dm)))
398398 else {
399399 let do = H(dh, a)
400- let dp = fraction(di, bL(cG, cE, CEILING), c, FLOOR)
400+ let dp = fraction(di, bL(cG, cE, FLOOR), c, FLOOR)
401401 let dq = fraction(dj, c, bL(cG, cE, FLOOR), FLOOR)
402402 let dr = if ((dp > dj))
403403 then $Tuple2(dq, dj)
404404 else $Tuple2(di, dp)
405405 let ds = dr._1
406406 let dt = dr._2
407407 let cj = fraction(do, dt, cG, FLOOR)
408408 $Tuple5(N(cj, a, FLOOR), N(ds, df, CEILING), N(dt, dg, CEILING), cH, dm)
409409 }
410410 }
411411 let du = dl._1
412412 let dv = dl._2
413413 let dw = dl._3
414414 let cI = K(dl._4, a)
415415 let dx = K(dl._5, a)
416416 if ((0 >= du))
417417 then throw("LP <= 0")
418418 else {
419419 let dy = if (!(cW))
420420 then 0
421421 else du
422422 let dz = (cR - dv)
423423 let dA = (cT - dw)
424424 let dB = if (if (cX)
425425 then (da == db)
426426 else false)
427427 then $Tuple2(cZ, 0)
428428 else if (if (cX)
429429 then (da == dc)
430430 else false)
431431 then $Tuple2(0, cZ)
432432 else $Tuple2(dv, dw)
433433 let dC = dB._1
434434 let dD = dB._2
435435 let dE = [IntegerEntry(Y(), cI), IntegerEntry(Z(height, lastBlock.timestamp), cI), StringEntry(ac(cv, cs), br(dC, dD, dy, cI, bP, dx, height, lastBlock.timestamp, dz, dA))]
436436 $Tuple13(du, dy, cI, cD, cF, dh, cw, cB, dE, dz, dA, cS, cU)
437437 }
438438 }
439439
440440
441441 func dF (dG) = {
442442 let dH = dG[0]
443443 let dI = dG[1]
444444 let dJ = (dH + dI)
445445 if ((dJ == e))
446446 then e
447447 else {
448448 let dK = parseIntValue(aN)
449449 let dL = (dK * 2)
450450 let cn = fraction(dH, dI, f)
451451 let dM = fraction(cn, i, f)
452452 let dN = fraction(toBigInt(dL), dJ, f)
453453 let dO = toBigInt((dL - 1))
454454 func dP (dQ) = {
455455 let dR = fraction(dQ, dQ, f)
456456 let dS = fraction(dR, dQ, f)
457457 let dT = fraction(dS, f, dM)
458458 fraction((dN + fraction(dT, g, f)), dQ, (fraction(dO, dQ, f) + fraction(h, dT, f)), CEILING)
459459 }
460460
461461 func dU (dV,dW) = if (dV._2)
462462 then dV
463463 else {
464464 let dQ = dV._1
465465 let dX = dP(dQ)
466466 let dY = toInt((dX - value(dQ)))
467467 let dZ = if ((0 > dY))
468468 then -(dY)
469469 else dY
470470 if ((1 >= dZ))
471471 then $Tuple2(dX, true)
472472 else $Tuple2(dX, false)
473473 }
474474
475475 let ea = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
476476 let eb = {
477477 let ec = ea
478478 let ed = size(ec)
479479 let ee = $Tuple2(dJ, false)
480480 func ef (eg,eh) = if ((eh >= ed))
481481 then eg
482482 else dU(eg, ec[eh])
483483
484484 func ei (eg,eh) = if ((eh >= ed))
485485 then eg
486486 else throw("List size exceeds 15")
487487
488488 ei(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ee, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
489489 }
490490 let dQ = eb._1
491491 let ej = eb._2
492492 if (ej)
493493 then dQ
494494 else throw(("D calculation error, D = " + toString(dQ)))
495495 }
496496 }
497497
498498
499499 func ek (dG) = {
500500 let el = g
501501 let dH = dG[0]
502502 let dI = dG[1]
503503 let em = parseBigIntValue(l)
504504 let dK = (parseBigIntValue(aN) * em)
505505 let dJ = (dH + dI)
506506 if ((dJ == e))
507507 then e
508508 else {
509509 let dL = (dK * el)
510510 let dM = (((dH * dI) * el) * el)
511511 let en = ((dL * dJ) / em)
512512 let eo = (dL - em)
513513 let ep = (el + f)
514514 func dU (dV,eq) = {
515515 let er = dV
516516 let dQ = er._1
517517 let ej = er._2
518518 if ((ej != unit))
519519 then dV
520520 else {
521521 let dT = (((dQ * dQ) * dQ) / dM)
522522 let dX = (((en + (dT * el)) * dQ) / (((eo * dQ) / em) + (ep * dT)))
523523 let dZ = U((dX - value(dQ)))
524524 if ((f >= dZ))
525525 then $Tuple2(dX, eq)
526526 else $Tuple2(dX, unit)
527527 }
528528 }
529529
530530 let ea = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
531531 let es = {
532532 let ec = ea
533533 let ed = size(ec)
534534 let ee = $Tuple2(dJ, unit)
535535 func ef (eg,eh) = if ((eh >= ed))
536536 then eg
537537 else dU(eg, ec[eh])
538538
539539 func ei (eg,eh) = if ((eh >= ed))
540540 then eg
541541 else throw("List size exceeds 15")
542542
543543 ei(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ee, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
544544 }
545545 let dQ = es._1
546546 let ej = es._2
547547 if ((ej != unit))
548548 then dQ
549549 else throw(("D calculation error, D = " + toString(dQ)))
550550 }
551551 }
552552
553553
554554 func et (dG,dW,eu) = {
555555 let el = g
556556 let ev = dG[if ((dW == 0))
557557 then 1
558558 else 0]
559559 let em = parseBigIntValue(l)
560560 let dK = (parseBigIntValue(aN) * em)
561561 let dJ = ev
562562 let dL = (dK * el)
563563 let ew = (((((eu * eu) / (ev * el)) * eu) * em) / (dL * el))
564564 let ex = ((dJ + ((eu * em) / dL)) - eu)
565565 func dU (dV,eq) = {
566566 let ey = dV
567567 let ez = ey._1
568568 let ej = ey._2
569569 if ((ej != unit))
570570 then dV
571571 else {
572572 let eA = (((ez * ez) + ew) / ((g * ez) + ex))
573573 let eB = U((eA - value(ez)))
574574 if ((f >= eB))
575575 then $Tuple2(eA, eq)
576576 else $Tuple2(eA, unit)
577577 }
578578 }
579579
580580 let ea = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
581581 let eC = {
582582 let ec = ea
583583 let ed = size(ec)
584584 let ee = $Tuple2(eu, unit)
585585 func ef (eg,eh) = if ((eh >= ed))
586586 then eg
587587 else dU(eg, ec[eh])
588588
589589 func ei (eg,eh) = if ((eh >= ed))
590590 then eg
591591 else throw("List size exceeds 15")
592592
593593 ei(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ef(ee, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
594594 }
595595 let ez = eC._1
596596 let ej = eC._2
597597 if ((ej != unit))
598598 then ez
599599 else throw(("Y calculation error, Y = " + toString(ez)))
600600 }
601601
602602
603603 func eD (eE,eF,eG) = {
604604 let eH = fraction(dF([eE, eF]), c, eG)
605605 if ((eG == e))
606606 then e
607607 else eH
608608 }
609609
610610
611611 func eI (eJ,eK,eL) = {
612612 let eM = (toBigInt(bG(aX(bf))) - eJ)
613613 let eN = (toBigInt(bG(aX(bg))) - eK)
614614 let eO = (toBigInt(value(assetInfo(be)).quantity) - eL)
615615 let eP = eD(eM, eN, eO)
616616 eP
617617 }
618618
619619
620620 func eQ (eR,eS,eL) = {
621621 let eM = (bG(aX(bf)) + eR)
622622 let eN = (bG(aX(bg)) + eS)
623623 let eO = (value(assetInfo(be)).quantity + eL)
624624 let eH = eD(toBigInt(eM), toBigInt(eN), toBigInt(eO))
625625 let eT = [IntegerEntry(an, height), StringEntry(am, toString(eH))]
626626 $Tuple2(eT, eH)
627627 }
628628
629629
630630 func eU (eV,eH) = if ((eH >= eV))
631631 then true
632632 else aJ("updated DLp lower than current DLp")
633633
634634
635635 func eW (eX) = {
636636 let eY = eX.amount
637637 let eZ = fraction(eX.amount, eX.price, a, FLOOR)
638638 let fa = if ((eX.orderType == Buy))
639639 then $Tuple2(eY, -(eZ))
640640 else $Tuple2(-(eY), eZ)
641641 let eR = fa._1
642642 let eS = fa._2
643643 if (if (if (aO())
644644 then true
645645 else (bd == r))
646646 then true
647647 else (bd == s))
648648 then throw("Admin blocked")
649649 else if (if ((eX.assetPair.amountAsset != bf))
650650 then true
651651 else (eX.assetPair.priceAsset != bg))
652652 then throw("Wr assets")
653653 else {
654654 let fb = parseBigIntValue(getStringValue(this, am))
655655 let fc = eQ(eR, eS, 0)
656656 let fd = fc._1
657657 let fe = fc._2
658658 let ff = (fe >= fb)
659659 ff
660660 }
661661 }
662662
663663
664664 func fg (dW) = if ((size(dW.payments) != 1))
665665 then throw("1 pmnt exp")
666666 else {
667667 let fh = value(dW.payments[0])
668668 let ct = value(fh.assetId)
669669 let cZ = fh.amount
670670 let dl = cr(toBase58String(dW.transactionId), toBase58String(ct), cZ, dW.caller)
671671 let cN = dl._1
672672 let cO = dl._2
673673 let cB = parseIntValue(dl._9)
674674 let cP = dl._10
675675 if (if (aO())
676676 then true
677677 else (cB == s))
678678 then throw(("Admin blocked: " + toString(cB)))
679679 else $Tuple5(cN, cO, cZ, ct, cP)
680680 }
681681
682682
683683 func fi (fj,ae,fk,fl,bP,cW,cX,cY,cZ,da) = {
684684 let dl = cQ(ae, bP, value(fk).amount, value(fk).assetId, value(fl).amount, value(fl).assetId, fj, (ae == ""), cW, cX, cY, cZ, da)
685685 let cB = parseIntValue(dl._8)
686686 if (if (if (aO())
687687 then true
688688 else (cB == q))
689689 then true
690690 else (cB == s))
691691 then throw(("Blocked:" + toString(cB)))
692692 else dl
693693 }
694694
695695
696696 func fm (fn,ct,cv,ae,fo) = {
697697 let cx = toBase58String(value(bf))
698698 let cy = toBase58String(value(bg))
699699 let cw = be
700700 let df = bh
701701 let dg = bi
702702 let eO = toBigInt(valueOrErrorMessage(assetInfo(cw), "invalid lp asset").quantity)
703703 let fp = if ((eO > e))
704704 then true
705705 else throw("initial deposit requires all coins")
706706 if ((fp == fp))
707707 then {
708708 let cD = bG(cx)
709709 let cF = bG(cy)
710710 let fq = if ((ae == ""))
711711 then $Tuple2(cD, cF)
712712 else if ((ct == cx))
713713 then if ((fn > cD))
714714 then throw("invalid payment amount")
715715 else $Tuple2((cD - fn), cF)
716716 else if ((ct == cy))
717717 then if ((fn > cF))
718718 then throw("invalid payment amount")
719719 else $Tuple2(cD, (cF - fn))
720720 else throw("wrong pmtAssetId")
721721 let fr = fq._1
722722 let fs = fq._2
723723 let ft = if ((ct == cx))
724724 then $Tuple2(fn, 0)
725725 else if ((ct == cy))
726726 then $Tuple2(0, fn)
727727 else throw("invalid payment")
728728 let fu = ft._1
729729 let fv = ft._2
730730 let fw = if (fo)
731731 then $Tuple3(co(fu)._1, co(fv)._1, co(fn)._2)
732732 else $Tuple3(fu, fv, 0)
733733 let fx = fw._1
734734 let fy = fw._2
735735 let cq = fw._3
736736 let fz = (fr + fx)
737737 let fA = (fs + fy)
738738 let bU = dF([toBigInt(fr), toBigInt(fs)])
739739 let bT = dF([toBigInt(fz), toBigInt(fA)])
740740 let fB = if ((bT > bU))
741741 then true
742742 else throw()
743743 if ((fB == fB))
744744 then {
745745 let fC = fraction(eO, (bT - bU), bU, FLOOR)
746746 let cI = K(bI(H(fA, dg), H(fz, df)), a)
747747 let dE = [IntegerEntry(Y(), cI), IntegerEntry(Z(height, lastBlock.timestamp), cI), StringEntry(ac(cv, ae), br(fu, fv, toInt(fC), cI, 0, 0, height, lastBlock.timestamp, 0, 0))]
748748 let fD = fraction(fs, a, fr)
749749 let fE = fraction(fn, a, (fD + a))
750750 let fF = (fn - fE)
751751 let fG = fraction(eO, toBigInt(fF), toBigInt(fs))
752752 let fH = toInt(fraction((fC - fG), b, fG))
753753 $Tuple4(toInt(fC), dE, cq, fH)
754754 }
755755 else throw("Strict value is not equal to itself.")
756756 }
757757 else throw("Strict value is not equal to itself.")
758758 }
759759
760760
761761 func fI (fJ,fK,fL,fj,fM,fN) = {
762762 let cw = toBase58String(value(be))
763763 let cx = toBase58String(value(bf))
764764 let cy = toBase58String(value(bg))
765765 let fO = bh
766766 let fP = bi
767767 let fQ = bd
768768 let cv = if ((fj == bq))
769769 then fM
770770 else fj
771771 let fh = value(fL[0])
772772 let ct = value(fh.assetId)
773773 let cZ = fh.amount
774774 let eP = eI(e, e, e)
775775 if ((eP == eP))
776776 then {
777777 let cs = toBase58String(fN)
778778 if ((cw != toBase58String(ct)))
779779 then throw("Wrong LP")
780780 else {
781781 let cD = bG(cx)
782782 let cF = bG(cy)
783783 let fR = {
784784 let fS = invoke(this, "getOneTknV2READONLY", [fJ, cZ], nil)
785785 if ($isInstanceOf(fS, "(Int, Int)"))
786786 then fS
787787 else throw(($getType(fS) + " couldn't be cast to (Int, Int)"))
788788 }
789789 if ((fR == fR))
790790 then {
791791 let cq = fR._2
792792 let fT = fR._1
793793 let fU = if (if ((fK > 0))
794794 then (fK > fT)
795795 else false)
796796 then aJ(makeString(["amount to receive is less than ", toString(fK)], ""))
797797 else fT
798798 let fV = if ((fJ == cx))
799799 then $Tuple4(fU, 0, ((cD - fU) - cq), cF)
800800 else if ((fJ == cy))
801801 then $Tuple4(0, fU, cD, ((cF - fU) - cq))
802802 else throw("invalid out asset id")
803803 let fW = fV._1
804804 let fX = fV._2
805805 let fz = fV._3
806806 let fA = fV._4
807807 let fY = bI(H(fA, fP), H(fz, fO))
808808 let fZ = K(fY, a)
809809 let ga = if ((fJ == "WAVES"))
810810 then unit
811811 else fromBase58String(fJ)
812812 let gb = if ((cq > 0))
813813 then [ScriptTransfer(aQ, cq, ga)]
814814 else nil
815815 let cP = ([ScriptTransfer(cv, fU, ga), StringEntry(af(toString(cv), cs), bC(fW, fX, cZ, fZ, height, lastBlock.timestamp)), IntegerEntry(Y(), fZ), IntegerEntry(Z(height, lastBlock.timestamp), fZ)] ++ gb)
816816 if ((cP == cP))
817817 then {
818818 let gc = invoke(aM, "burn", [cZ], [AttachedPayment(ct, cZ)])
819819 if ((gc == gc))
820820 then {
821821 let gd = {
822822 let ge = if ((this == aQ))
823823 then 0
824824 else cq
825825 let gf = if ((aV(fJ) == bf))
826826 then true
827827 else false
828828 if (gf)
829829 then $Tuple2(-((fT + ge)), 0)
830830 else $Tuple2(0, -((fT + ge)))
831831 }
832832 let eR = gd._1
833833 let eS = gd._2
834834 let gg = eQ(eR, eS, 0)
835835 let gh = gg._1
836836 let eH = gg._2
837837 let gi = eU(eP, eH)
838838 if ((gi == gi))
839839 then $Tuple2((cP ++ gh), fU)
840840 else throw("Strict value is not equal to itself.")
841841 }
842842 else throw("Strict value is not equal to itself.")
843843 }
844844 else throw("Strict value is not equal to itself.")
845845 }
846846 else throw("Strict value is not equal to itself.")
847847 }
848848 }
849849 else throw("Strict value is not equal to itself.")
850850 }
851851
852852
853853 func gj () = {
854854 let gk = getString(W())
855855 if ($isInstanceOf(gk, "String"))
856856 then {
857857 let dJ = gk
858858 fromBase58String(dJ)
859859 }
860860 else if ($isInstanceOf(gk, "Unit"))
861861 then unit
862862 else throw("Match error")
863863 }
864864
865865
866866 func gl () = {
867867 let gk = getString(X())
868868 if ($isInstanceOf(gk, "String"))
869869 then {
870870 let dJ = gk
871871 fromBase58String(dJ)
872872 }
873873 else if ($isInstanceOf(gk, "Unit"))
874874 then unit
875875 else throw("Match error")
876876 }
877877
878878
879879 let gm = throw("Permission denied")
880880
881881 func gn (dW) = {
882882 let gk = gj()
883883 if ($isInstanceOf(gk, "ByteVector"))
884884 then {
885885 let go = gk
886886 (dW.callerPublicKey == go)
887887 }
888888 else if ($isInstanceOf(gk, "Unit"))
889889 then (dW.caller == this)
890890 else throw("Match error")
891891 }
892892
893893
894894 func gp (dW) = {
895895 let gk = gj()
896896 if ($isInstanceOf(gk, "ByteVector"))
897897 then {
898898 let go = gk
899899 if ((dW.callerPublicKey == go))
900900 then true
901901 else gm
902902 }
903903 else if ($isInstanceOf(gk, "Unit"))
904904 then if ((dW.caller == this))
905905 then true
906906 else gm
907907 else throw("Match error")
908908 }
909909
910910
911911 @Callable(dW)
912912 func constructor (V) = {
913913 let ew = gp(dW)
914914 if ((ew == ew))
915915 then [StringEntry(V(), V)]
916916 else throw("Strict value is not equal to itself.")
917917 }
918918
919919
920920
921921 @Callable(dW)
922922 func setManager (gq) = {
923923 let ew = gp(dW)
924924 if ((ew == ew))
925925 then {
926926 let gr = fromBase58String(gq)
927927 if ((gr == gr))
928928 then [StringEntry(X(), gq)]
929929 else throw("Strict value is not equal to itself.")
930930 }
931931 else throw("Strict value is not equal to itself.")
932932 }
933933
934934
935935
936936 @Callable(dW)
937937 func confirmManager () = {
938938 let cn = gl()
939939 let gs = if (isDefined(cn))
940940 then true
941941 else throw("No pending manager")
942942 if ((gs == gs))
943943 then {
944944 let gt = if ((dW.callerPublicKey == value(cn)))
945945 then true
946946 else throw("You are not pending manager")
947947 if ((gt == gt))
948948 then [StringEntry(W(), toBase58String(value(cn))), DeleteEntry(X())]
949949 else throw("Strict value is not equal to itself.")
950950 }
951951 else throw("Strict value is not equal to itself.")
952952 }
953953
954954
955955
956956 @Callable(dW)
957957 func put (gu,gv) = {
958958 let gw = bl()
959959 let gx = valueOrErrorMessage(addressFromString(gw[C]), "Wr st addr")
960960 let gy = valueOrErrorMessage(addressFromString(gw[E]), "Wr sl addr")
961961 if ((0 > gu))
962962 then throw("Wrong slippage")
963963 else if ((size(dW.payments) != 2))
964964 then throw("2 pmnts expd")
965965 else {
966966 let gz = toBigInt(value(dW.payments[0]).amount)
967967 let gA = toBigInt(value(dW.payments[1]).amount)
968968 let eM = (toBigInt(bG(aX(bf))) - gz)
969969 if ((eM == eM))
970970 then {
971971 let eN = (toBigInt(bG(aX(bg))) - gA)
972972 if ((eN == eN))
973973 then {
974974 let eO = toBigInt(value(assetInfo(be)).quantity)
975975 if ((eO == eO))
976976 then {
977977 let eP = eI(gz, gA, toBigInt(0))
978978 if ((eP == eP))
979979 then {
980980 let gB = fi(toString(dW.caller), toBase58String(dW.transactionId), AttachedPayment(value(dW.payments[0]).assetId, value(dW.payments[0]).amount), dW.payments[1], gu, true, false, true, 0, "")
981981 let dy = gB._2
982982 let gC = gB._7
983983 let cP = gB._9
984984 let dz = gB._10
985985 let dA = gB._11
986986 let cx = gB._12
987987 let cy = gB._13
988988 let dl = invoke(aM, "emit", [dy], nil)
989989 if ((dl == dl))
990990 then {
991991 let gD = {
992992 let gk = dl
993993 if ($isInstanceOf(gk, "Address"))
994994 then {
995995 let gE = gk
996996 invoke(gE, "emit", [dy], nil)
997997 }
998998 else unit
999999 }
10001000 if ((gD == gD))
10011001 then {
10021002 let gF = if ((dz > 0))
10031003 then invoke(gy, "put", nil, [AttachedPayment(cx, dz)])
10041004 else nil
10051005 if ((gF == gF))
10061006 then {
10071007 let gG = if ((dA > 0))
10081008 then invoke(gy, "put", nil, [AttachedPayment(cy, dA)])
10091009 else nil
10101010 if ((gG == gG))
10111011 then {
10121012 let gH = if (gv)
10131013 then {
10141014 let gI = invoke(gx, "stake", nil, [AttachedPayment(gC, dy)])
10151015 if ((gI == gI))
10161016 then nil
10171017 else throw("Strict value is not equal to itself.")
10181018 }
10191019 else [ScriptTransfer(dW.caller, dy, gC)]
10201020 let gJ = eQ(0, 0, 0)
10211021 let gh = gJ._1
10221022 let eH = gJ._2
10231023 let gK = if ((eH >= eP))
10241024 then true
10251025 else aJ(makeString(["updated DLp lower than current DLp", toString(eM), toString(eN), toString(eO), toString(eP), toString(eH), toString(dz), toString(dA)], " "))
10261026 if ((gK == gK))
10271027 then {
10281028 let gL = value(assetInfo(be)).quantity
10291029 if ((gL == gL))
10301030 then ((cP ++ gH) ++ gh)
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 else throw("Strict value is not equal to itself.")
10401040 }
10411041 else throw("Strict value is not equal to itself.")
10421042 }
10431043 else throw("Strict value is not equal to itself.")
10441044 }
10451045 else throw("Strict value is not equal to itself.")
10461046 }
10471047 else throw("Strict value is not equal to itself.")
10481048 }
10491049 else throw("Strict value is not equal to itself.")
10501050 }
10511051 }
10521052
10531053
10541054
10551055 @Callable(dW)
10561056 func putOneTknV2 (fK,gv) = {
10571057 let gM = {
10581058 let fS = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
10591059 if ($isInstanceOf(fS, "Boolean"))
10601060 then fS
10611061 else throw(($getType(fS) + " couldn't be cast to Boolean"))
10621062 }
10631063 let gN = if (if (if (aO())
10641064 then true
10651065 else (bd == q))
10661066 then true
10671067 else (bd == s))
10681068 then true
10691069 else gM
10701070 let gO = [if (if (!(gN))
10711071 then true
10721072 else gn(dW))
10731073 then true
10741074 else aJ("put operation is blocked by admin"), if ((size(dW.payments) == 1))
10751075 then true
10761076 else aJ("exactly 1 payment are expected")]
10771077 if ((gO == gO))
10781078 then {
10791079 let cx = toBase58String(value(bf))
10801080 let cy = toBase58String(value(bg))
10811081 let cw = be
10821082 let fO = bh
10831083 let fP = bi
10841084 let cv = if ((dW.caller == this))
10851085 then dW.originCaller
10861086 else dW.caller
10871087 let fh = value(dW.payments[0])
10881088 let ct = toBase58String(value(fh.assetId))
10891089 let cZ = fh.amount
10901090 let eP = if ((fh.assetId == bf))
10911091 then eI(toBigInt(cZ), toBigInt(0), toBigInt(0))
10921092 else eI(toBigInt(0), toBigInt(cZ), toBigInt(0))
10931093 if ((eP == eP))
10941094 then {
10951095 let gP = fm(cZ, ct, toString(cv), toBase58String(dW.transactionId), true)
10961096 if ((gP == gP))
10971097 then {
10981098 let cq = gP._3
10991099 let cP = gP._2
11001100 let gQ = gP._1
11011101 let dy = if (if ((fK > 0))
11021102 then (fK > gQ)
11031103 else false)
11041104 then aJ(makeString(["amount to receive is less than ", toString(fK)], ""))
11051105 else gQ
11061106 let gB = invoke(aM, "emit", [dy], nil)
11071107 if ((gB == gB))
11081108 then {
11091109 let gD = {
11101110 let gk = gB
11111111 if ($isInstanceOf(gk, "Address"))
11121112 then {
11131113 let gE = gk
11141114 invoke(gE, "emit", [dy], nil)
11151115 }
11161116 else unit
11171117 }
11181118 if ((gD == gD))
11191119 then {
11201120 let gH = if (gv)
11211121 then {
11221122 let gI = invoke(bn, "stake", nil, [AttachedPayment(cw, dy)])
11231123 if ((gI == gI))
11241124 then nil
11251125 else throw("Strict value is not equal to itself.")
11261126 }
11271127 else [ScriptTransfer(dW.caller, dy, cw)]
11281128 let gb = if ((cq > 0))
11291129 then [ScriptTransfer(aQ, cq, fromBase58String(ct))]
11301130 else nil
11311131 let gR = if ((this == aQ))
11321132 then $Tuple2(0, 0)
11331133 else {
11341134 let gS = if ((fh.assetId == bf))
11351135 then true
11361136 else false
11371137 if (gS)
11381138 then $Tuple2(-(cq), 0)
11391139 else $Tuple2(0, -(cq))
11401140 }
11411141 let eR = gR._1
11421142 let eS = gR._2
11431143 let gT = eQ(eR, eS, 0)
11441144 let gh = gT._1
11451145 let eH = gT._2
11461146 let gi = eU(eP, eH)
11471147 if ((gi == gi))
11481148 then $Tuple2((((cP ++ gH) ++ gb) ++ gh), dy)
11491149 else throw("Strict value is not equal to itself.")
11501150 }
11511151 else throw("Strict value is not equal to itself.")
11521152 }
11531153 else throw("Strict value is not equal to itself.")
11541154 }
11551155 else throw("Strict value is not equal to itself.")
11561156 }
11571157 else throw("Strict value is not equal to itself.")
11581158 }
11591159 else throw("Strict value is not equal to itself.")
11601160 }
11611161
11621162
11631163
11641164 @Callable(dW)
11651165 func putForFree (gU) = if ((0 > gU))
11661166 then throw("Wrong slpg")
11671167 else if ((size(dW.payments) != 2))
11681168 then throw("2 pmnts expd")
11691169 else {
11701170 let gV = fi(toString(dW.caller), toBase58String(dW.transactionId), AttachedPayment(value(dW.payments[0]).assetId, value(dW.payments[0]).amount), dW.payments[1], gU, false, false, true, 0, "")
11711171 let cP = gV._9
11721172 let gz = toBigInt(value(dW.payments[0]).amount)
11731173 let gA = toBigInt(value(dW.payments[1]).amount)
11741174 let eP = eI(gz, gA, toBigInt(0))
11751175 if ((eP == eP))
11761176 then {
11771177 let gW = eQ(0, 0, 0)
11781178 let gh = gW._1
11791179 let eH = gW._2
11801180 let gi = eU(eP, eH)
11811181 if ((gi == gi))
11821182 then (cP ++ gh)
11831183 else throw("Strict value is not equal to itself.")
11841184 }
11851185 else throw("Strict value is not equal to itself.")
11861186 }
11871187
11881188
11891189
11901190 @Callable(dW)
11911191 func get () = {
11921192 let eP = eI(toBigInt(0), toBigInt(0), toBigInt(0))
11931193 if ((eP == eP))
11941194 then {
11951195 let dl = fg(dW)
11961196 let gX = dl._1
11971197 let cO = dl._2
11981198 let cZ = dl._3
11991199 let ct = dl._4
12001200 let cP = dl._5
12011201 let ex = invoke(aM, "burn", [cZ], [AttachedPayment(ct, cZ)])
12021202 if ((ex == ex))
12031203 then {
12041204 let gY = eQ(-(gX), -(cO), 0)
12051205 let gh = gY._1
12061206 let eH = gY._2
12071207 let gi = eU(eP, eH)
12081208 if ((gi == gi))
12091209 then (cP ++ gh)
12101210 else throw("Strict value is not equal to itself.")
12111211 }
12121212 else throw("Strict value is not equal to itself.")
12131213 }
12141214 else throw("Strict value is not equal to itself.")
12151215 }
12161216
12171217
12181218
12191219 @Callable(dW)
12201220 func getOneTknV2 (fJ,fK) = {
12211221 let gM = {
12221222 let fS = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
12231223 if ($isInstanceOf(fS, "Boolean"))
12241224 then fS
12251225 else throw(($getType(fS) + " couldn't be cast to Boolean"))
12261226 }
12271227 let gZ = if (if (aO())
12281228 then true
12291229 else (bd == s))
12301230 then true
12311231 else gM
12321232 let gO = [if (if (!(gZ))
12331233 then true
12341234 else gn(dW))
12351235 then true
12361236 else aJ("get operation is blocked by admin"), if ((size(dW.payments) == 1))
12371237 then true
12381238 else aJ("exactly 1 payment are expected")]
12391239 if ((gO == gO))
12401240 then {
12411241 let ha = fI(fJ, fK, dW.payments, dW.caller, dW.originCaller, dW.transactionId)
12421242 let cP = ha._1
12431243 let fU = ha._2
12441244 $Tuple2(cP, fU)
12451245 }
12461246 else throw("Strict value is not equal to itself.")
12471247 }
12481248
12491249
12501250
12511251 @Callable(dW)
12521252 func refreshDLp () = {
12531253 let hb = valueOrElse(getInteger(an), 0)
12541254 let hc = if (((height - hb) >= aq))
12551255 then unit
12561256 else aJ(makeString([toString(aq), " blocks have not passed since the previous call"], ""))
12571257 if ((hc == hc))
12581258 then {
12591259 let fb = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, am), "0")), aL("invalid dLp"))
12601260 let hd = eQ(0, 0, 0)
12611261 let he = hd._1
12621262 let eH = hd._2
12631263 let eT = if ((fb != eH))
12641264 then he
12651265 else aJ("nothing to refresh")
12661266 $Tuple2(eT, toString(eH))
12671267 }
12681268 else throw("Strict value is not equal to itself.")
12691269 }
12701270
12711271
12721272
12731273 @Callable(dW)
12741274 func getOneTknV2READONLY (fJ,hf) = {
12751275 let cx = toBase58String(value(bf))
12761276 let cy = toBase58String(value(bg))
12771277 let cw = toBase58String(value(be))
12781278 let dG = [toBigInt(bG(cx)), toBigInt(bG(cy))]
12791279 let eG = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(cw)), "invalid lp asset").quantity)
12801280 let bU = dF(dG)
12811281 let bT = (bU - fraction(toBigInt(hf), bU, eG))
12821282 let hg = if ((fJ == cx))
12831283 then 0
12841284 else if ((fJ == cy))
12851285 then 1
12861286 else throw("invalid out asset id")
12871287 let hh = et(dG, hg, bT)
12881288 let hi = (dG[hg] - hh)
12891289 let hj = max([0, toInt((hi - f))])
12901290 let hk = co(hj)
12911291 let fT = hk._1
12921292 let cq = hk._2
12931293 $Tuple2(nil, $Tuple2(fT, cq))
12941294 }
12951295
12961296
12971297
12981298 @Callable(dW)
12991299 func getOneTknV2WithBonusREADONLY (fJ,hf) = {
13001300 let cx = toBase58String(value(bf))
13011301 let cy = toBase58String(value(bg))
13021302 let cw = toBase58String(value(be))
13031303 let cD = bG(cx)
13041304 let cF = bG(cy)
13051305 let hl = {
13061306 let fS = invoke(this, "getOneTknV2READONLY", [fJ, hf], nil)
13071307 if ($isInstanceOf(fS, "(Int, Int)"))
13081308 then fS
13091309 else throw(($getType(fS) + " couldn't be cast to (Int, Int)"))
13101310 }
13111311 let fT = hl._1
13121312 let cq = hl._2
13131313 let dl = cr("", cw, hf, this)
13141314 let cN = dl._1
13151315 let cO = dl._2
13161316 let hm = (cN + cO)
13171317 let fH = if ((hm == 0))
13181318 then if ((fT == 0))
13191319 then 0
13201320 else throw("bonus calculation error")
13211321 else fraction((fT - hm), a, hm)
13221322 $Tuple2(nil, $Tuple3(fT, cq, fH))
13231323 }
13241324
13251325
13261326
13271327 @Callable(dW)
13281328 func getNoLess (hn,ho) = {
13291329 let hp = toBigInt(bG(aX(bf)))
13301330 if ((hp == hp))
13311331 then {
13321332 let hq = toBigInt(bG(aX(bg)))
13331333 if ((hq == hq))
13341334 then {
13351335 let hr = toBigInt(value(assetInfo(be)).quantity)
13361336 if ((hr == hr))
13371337 then {
13381338 let hs = (hr - toBigInt(value(dW.payments[0]).amount))
13391339 if ((hs == hs))
13401340 then {
13411341 let dl = fg(dW)
13421342 let cN = dl._1
13431343 let cO = dl._2
13441344 let cZ = dl._3
13451345 let ct = dl._4
13461346 let cP = dl._5
13471347 if ((hn > cN))
13481348 then throw(((("Failed: " + toString(cN)) + " < ") + toString(hn)))
13491349 else if ((ho > cO))
13501350 then throw(((("Failed: " + toString(cO)) + " < ") + toString(ho)))
13511351 else {
13521352 let eP = eI(toBigInt(0), toBigInt(0), toBigInt(0))
13531353 if ((eP == eP))
13541354 then {
13551355 let ht = invoke(aM, "burn", [cZ], [AttachedPayment(ct, cZ)])
13561356 if ((ht == ht))
13571357 then {
13581358 let hu = eQ(-(cN), -(cO), 0)
13591359 let gh = hu._1
13601360 let eH = hu._2
13611361 let gi = eU(eP, eH)
13621362 if ((gi == gi))
13631363 then (cP ++ gh)
13641364 else throw("Strict value is not equal to itself.")
13651365 }
13661366 else throw("Strict value is not equal to itself.")
13671367 }
13681368 else throw("Strict value is not equal to itself.")
13691369 }
13701370 }
13711371 else throw("Strict value is not equal to itself.")
13721372 }
13731373 else throw("Strict value is not equal to itself.")
13741374 }
13751375 else throw("Strict value is not equal to itself.")
13761376 }
13771377 else throw("Strict value is not equal to itself.")
13781378 }
13791379
13801380
13811381
13821382 @Callable(dW)
13831383 func unstakeAndGet (cp) = {
13841384 let hv = if ((size(dW.payments) != 0))
13851385 then throw("No pmnts expd")
13861386 else true
13871387 if ((hv == hv))
13881388 then {
13891389 let hw = bl()
13901390 let gC = be
13911391 let hx = valueOrErrorMessage(addressFromString(hw[C]), "Wr st addr")
13921392 let eP = eI(toBigInt(0), toBigInt(0), toBigInt(0))
13931393 let hy = invoke(hx, "unstake", [toBase58String(gC), cp], nil)
13941394 if ((hy == hy))
13951395 then {
13961396 let dl = cr(toBase58String(dW.transactionId), toBase58String(gC), cp, dW.caller)
13971397 let cN = dl._1
13981398 let cO = dl._2
13991399 let cB = parseIntValue(dl._9)
14001400 let cP = dl._10
14011401 let hz = if (if (aO())
14021402 then true
14031403 else (cB == s))
14041404 then throw(("Blocked: " + toString(cB)))
14051405 else true
14061406 if ((hz == hz))
14071407 then {
14081408 let hA = invoke(aM, "burn", [cp], [AttachedPayment(gC, cp)])
14091409 if ((hA == hA))
14101410 then {
14111411 let hB = eQ(-(cN), -(cO), 0)
14121412 let gh = hB._1
14131413 let eH = hB._2
14141414 let gi = eU(eP, eH)
14151415 if ((gi == gi))
14161416 then (cP ++ gh)
14171417 else throw("Strict value is not equal to itself.")
14181418 }
14191419 else throw("Strict value is not equal to itself.")
14201420 }
14211421 else throw("Strict value is not equal to itself.")
14221422 }
14231423 else throw("Strict value is not equal to itself.")
14241424 }
14251425 else throw("Strict value is not equal to itself.")
14261426 }
14271427
14281428
14291429
14301430 @Callable(dW)
14311431 func unstakeAndGetNoLess (hC,hD,ho) = {
14321432 let gZ = if (aO())
14331433 then true
14341434 else (bd == s)
14351435 let gO = [if (!(gZ))
14361436 then true
14371437 else throw("get operation is blocked by admin"), if ((size(dW.payments) == 0))
14381438 then true
14391439 else throw("no payments are expected")]
14401440 if ((gO == gO))
14411441 then {
14421442 let eP = eI(toBigInt(0), toBigInt(0), toBigInt(0))
14431443 let hy = invoke(bn, "unstake", [toBase58String(be), hC], nil)
14441444 if ((hy == hy))
14451445 then {
14461446 let hE = cr(toBase58String(dW.transactionId), toBase58String(be), hC, dW.caller)
14471447 let cN = hE._1
14481448 let cO = hE._2
14491449 let cP = hE._10
14501450 let hF = [if ((cN >= hD))
14511451 then true
14521452 else throw(makeString(["amount asset amount to receive is less than ", toString(hD)], "")), if ((cO >= ho))
14531453 then true
14541454 else throw(makeString(["price asset amount to receive is less than ", toString(ho)], ""))]
14551455 if ((hF == hF))
14561456 then {
14571457 let ht = invoke(aM, "burn", [hC], [AttachedPayment(be, hC)])
14581458 if ((ht == ht))
14591459 then {
14601460 let hG = eQ(-(cN), -(cO), 0)
14611461 let gh = hG._1
14621462 let eH = hG._2
14631463 let gi = eU(eP, eH)
14641464 if ((gi == gi))
14651465 then (cP ++ gh)
14661466 else throw("Strict value is not equal to itself.")
14671467 }
14681468 else throw("Strict value is not equal to itself.")
14691469 }
14701470 else throw("Strict value is not equal to itself.")
14711471 }
14721472 else throw("Strict value is not equal to itself.")
14731473 }
14741474 else throw("Strict value is not equal to itself.")
14751475 }
14761476
14771477
14781478
14791479 @Callable(dW)
14801480 func unstakeAndGetOneTknV2 (hC,fJ,fK) = {
14811481 let gM = {
14821482 let fS = invoke(aM, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
14831483 if ($isInstanceOf(fS, "Boolean"))
14841484 then fS
14851485 else throw(($getType(fS) + " couldn't be cast to Boolean"))
14861486 }
14871487 let gZ = if (if (aO())
14881488 then true
14891489 else (bd == s))
14901490 then true
14911491 else gM
14921492 let gO = [if (if (!(gZ))
14931493 then true
14941494 else gn(dW))
14951495 then true
14961496 else aJ("get operation is blocked by admin"), if ((size(dW.payments) == 0))
14971497 then true
14981498 else aJ("no payments are expected")]
14991499 if ((gO == gO))
15001500 then {
15011501 let hw = bl()
15021502 let gC = be
15031503 let hx = valueOrErrorMessage(addressFromString(hw[C]), "Wr st addr")
15041504 let hy = invoke(hx, "unstake", [toBase58String(gC), hC], nil)
15051505 if ((hy == hy))
15061506 then {
15071507 let hH = fI(fJ, fK, [AttachedPayment(gC, hC)], dW.caller, dW.originCaller, dW.transactionId)
15081508 let cP = hH._1
15091509 let fU = hH._2
15101510 $Tuple2(cP, fU)
15111511 }
15121512 else throw("Strict value is not equal to itself.")
15131513 }
15141514 else throw("Strict value is not equal to itself.")
15151515 }
15161516
15171517
15181518
15191519 @Callable(dW)
15201520 func putOneTknV2WithBonusREADONLY (hI,hJ) = {
15211521 let hK = fm(hI, hJ, "", "", true)
15221522 let fC = hK._1
15231523 let cP = hK._2
15241524 let cq = hK._3
15251525 let fH = hK._4
15261526 $Tuple2(nil, $Tuple3(fC, cq, fH))
15271527 }
15281528
15291529
15301530
15311531 @Callable(dW)
15321532 func putOneTknV2WithoutTakeFeeREADONLY (hI,hJ) = {
15331533 let hL = fm(hI, hJ, "", "", false)
15341534 let fC = hL._1
15351535 let cP = hL._2
15361536 let cq = hL._3
15371537 let fH = hL._4
15381538 $Tuple2(nil, $Tuple3(fC, cq, fH))
15391539 }
15401540
15411541
15421542
15431543 @Callable(dW)
15441544 func activate (hM,hN) = if ((toString(dW.caller) != toString(aM)))
15451545 then throw("denied")
15461546 else $Tuple2([StringEntry(ag(), hM), StringEntry(ah(), hN)], "success")
15471547
15481548
15491549
15501550 @Callable(dW)
15511551 func setS (hO,hz) = if ((toString(dW.caller) != aF(this, aj())))
15521552 then gm
15531553 else [StringEntry(hO, hz)]
15541554
15551555
15561556
15571557 @Callable(dW)
15581558 func setI (hO,hz) = if ((toString(dW.caller) != aF(this, aj())))
15591559 then gm
15601560 else [IntegerEntry(hO, hz)]
15611561
15621562
15631563
15641564 @Callable(dW)
15651565 func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aR())
15661566
15671567
15681568
15691569 @Callable(dW)
15701570 func getAccBalanceWrapperREADONLY (bH) = $Tuple2(nil, bG(bH))
15711571
15721572
15731573
15741574 @Callable(dW)
15751575 func calcPricesWrapperREADONLY (ca,cb,cf) = {
15761576 let hP = ce(ca, cb, cf)
15771577 $Tuple2(nil, [toString(hP[0]), toString(hP[1]), toString(hP[2])])
15781578 }
15791579
15801580
15811581
15821582 @Callable(dW)
15831583 func fromX18WrapperREADONLY (L,hQ) = $Tuple2(nil, K(parseBigIntValue(L), hQ))
15841584
15851585
15861586
15871587 @Callable(dW)
15881588 func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
15891589
15901590
15911591
15921592 @Callable(dW)
15931593 func calcPriceBigIntWrapperREADONLY (bJ,bK) = $Tuple2(nil, toString(bI(parseBigIntValue(bJ), parseBigIntValue(bK))))
15941594
15951595
15961596
15971597 @Callable(dW)
15981598 func estimatePutOperationWrapperREADONLY (cs,bP,cR,cS,cT,cU,hR,cV,cW) = $Tuple2(nil, cQ(cs, bP, cR, cS, cT, cU, hR, cV, cW, true, false, 0, ""))
15991599
16001600
16011601
16021602 @Callable(dW)
16031603 func estimateGetOperationWrapperREADONLY (cs,hS,cu,hR) = {
16041604 let dl = cr(cs, hS, cu, addressFromStringValue(hR))
16051605 $Tuple2(nil, $Tuple10(dl._1, dl._2, dl._3, dl._4, dl._5, dl._6, dl._7, toString(dl._8), dl._9, dl._10))
16061606 }
16071607
16081608
16091609
16101610 @Callable(dW)
16111611 func getFeeREADONLY () = $Tuple2(nil, al)
16121612
16131613
16141614 @Verifier(hT)
16151615 func hU () = {
16161616 let hV = {
16171617 let gk = gj()
16181618 if ($isInstanceOf(gk, "ByteVector"))
16191619 then {
16201620 let go = gk
16211621 go
16221622 }
16231623 else if ($isInstanceOf(gk, "Unit"))
16241624 then hT.senderPublicKey
16251625 else throw("Match error")
16261626 }
16271627 let gk = hT
16281628 if ($isInstanceOf(gk, "Order"))
16291629 then {
16301630 let eX = gk
16311631 let hW = aP()
16321632 let hX = eW(eX)
16331633 let hY = sigVerify(eX.bodyBytes, eX.proofs[0], eX.senderPublicKey)
16341634 let hZ = sigVerify(eX.bodyBytes, eX.proofs[1], hW)
16351635 if (if (if (hX)
16361636 then hY
16371637 else false)
16381638 then hZ
16391639 else false)
16401640 then true
16411641 else aB(hX, hY, hZ)
16421642 }
16431643 else if ($isInstanceOf(gk, "SetScriptTransaction"))
16441644 then {
16451645 let dJ = gk
16461646 let ia = blake2b256(value(dJ.script))
16471647 let ib = fromBase64String(value(getString(aM, az())))
16481648 let ic = scriptHash(this)
16491649 if (if ((ib == ia))
16501650 then (ic != ia)
16511651 else false)
16521652 then true
16531653 else sigVerify(hT.bodyBytes, hT.proofs[0], hV)
16541654 }
16551655 else sigVerify(hT.bodyBytes, hT.proofs[0], hV)
16561656 }
16571657

github/deemru/w8io/026f985 
168.69 ms