tx · JBuqH64sDbEgp5ujCnL39kaS2G1hNJy1k4DCmr2MsK7z

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04200000 Waves

2023.07.10 17:05 [2659903] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "JBuqH64sDbEgp5ujCnL39kaS2G1hNJy1k4DCmr2MsK7z", "fee": 4200000, "feeAssetId": null, "timestamp": 1688997933422, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "3mxuv6DaL9rxUygsw1MtG4a8wXXoYTjF36gb7anJksLQU8uDF3CHhhBnEsXSemCG2fpZ6Y42gUrc3sr3fwutMR6x" ], "script": "base64:BgKPAQgCEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBILCgkICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg4KDAgICAEEERgYEQEBGBIKCggICAgBBAgBGBIOCgwICAgBBBgYGBgYARgSCwoJCAgBAQEBAQEEbgAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAAdTQ0FMRTE2CQC2AgEAgICE/qbe4REACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkABJrU0ZQb29sU2hhcmVTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAKa1NGUG9vbEZlZQIKY29tbWlzc2lvbgANa1VzZXJQb3NpdGlvbgIOX3VzZXJfcG9zaXRpb24AEWtVc2VyUG9zaXRpb25Qb29sAhNfdXNlcl9wb3NpdGlvbl9wb29sABFrVXNlckJvcnJvd0Ftb3VudAIcX3VzZXJfcG9zaXRpb25fYm9ycm93X2Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAh5fdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYXNzZXRfaWQAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhdfdXNlcl9wb3NpdGlvbl9pbnRlcmVzdAAKa1Bvb2xUb3RhbAILX3Bvb2xfdG90YWwADmtQb29sVG90YWxMb2FuAhBfcG9vbF90b3RhbF9sb2FuABFrUG9vbEludGVyZXN0TG9hbgITX3Bvb2xfaW50ZXJlc3RfbG9hbgATa1Bvb2xJbnRlcmVzdE5vTG9hbgIWX3Bvb2xfaW50ZXJlc3Rfbm9fbG9hbgAOa1Bvb2xDYW5Cb3Jyb3cCEF9wb29sX2Nhbl9ib3Jyb3cAFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIWX2F4bHlfZmVlX3dpdGhvdXRfbG9hbgASa0F4bHlJbkZlZVdpdGhMb2FuAhNfYXhseV9mZWVfd2l0aF9sb2FuABFrQXhseU5vTG9hbkNhcEZlZQIXX2F4bHlfZmVlX2NhcF93aXRoX2xvYW4AE2tBeGx5V2l0aExvYW5DYXBGZWUCFV9heGx5X2ZlZV9jYXBfbm9fbG9hbgAWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQIcX2F4bHlfZmVlX3N0b3Bsb3NzX3dpdGhfbG9hbgAUa0F4bHlTdG9wTG9zc0xvYW5GZWUCGl9heGx5X2ZlZV9zdG9wbG9zc19ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAPa1Rva2VuTGFzdFByaWNlAgpsYXN0X3ByaWNlAA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdrU3dvcElkAgpObyBzd29wIGlkAARXWElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrV3hJZAIITm8gd3ggaWQBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEQZ2V0QWRtaW5DYWxsQWRkcgAJAKcIAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0FkbWluQ2FsbFBLAhRDYW4ndCBnZXQgYWRtaW4gYWRkcgELaXNBZG1pbkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEQZ2V0QWRtaW5DYWxsQWRkcgAFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJAQ5nZXRMZW5kU3J2QWRkcgAFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBEWdldFNGUG9vbEJhbGFuY2VzAQhwb29sQWRkcgkAlAoCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQERZ2V0V1hQb29sQmFsYW5jZXMDCHBvb2xBZGRyA2FJZANiSWQJAJQKAgoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYUlkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQ9nZXRQb29sQmFsYW5jZXMECHBvb2xBZGRyBHR5cGUDYUlkA2JJZAMJAAACBQR0eXBlBQdTRl9QT09MCQERZ2V0U0ZQb29sQmFsYW5jZXMBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQERZ2V0V1hQb29sQmFsYW5jZXMDBQhwb29sQWRkcgUDYUlkBQNiSWQJAAIBAg9Xcm9uZyBwb29sIHR5cGUBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyBAskdDA1OTM2NTk4NQkBEWdldFNGUG9vbEJhbGFuY2VzAQUIcG9vbEFkZHIDCQAAAgULJHQwNTkzNjU5ODUFCyR0MDU5MzY1OTg1BARiYWxCCAULJHQwNTkzNjU5ODUCXzIEBGJhbEEIBQskdDA1OTM2NTk4NQJfMQkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQFBGJhbEEFBGJhbEIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBAskdDA2NjYwNjcxOQkBEWdldFdYUG9vbEJhbGFuY2VzAwUIcG9vbEFkZHIFA2FJZAUDYklkAwkAAAIFCyR0MDY2NjA2NzE5BQskdDA2NjYwNjcxOQQEYmFsQggFCyR0MDY2NjA2NzE5Al8yBARiYWxBCAULJHQwNjY2MDY3MTkCXzEJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECDE5vdCBBc3NldCBpZAEOYXNzZXRJZEZyb21TdHIBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2l0aW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BDmdldEFzc2V0c1ByaWNlAQhhc3NldElkcwoBCWdldFByaWNlcwIBYQdhc3NldElkBAphc3NldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDWdldFNoYXJlUHJpY2UBB3NoYXJlSWQEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wCIENhbid0IGZpbmQgcG9vbCBhZGRyIGJ5IHNoYXJlIGlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBAskdDA5NzExOTc3NgkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANhSWQIBQskdDA5NzExOTc3NgJfMQQDYklkCAULJHQwOTcxMTk3NzYCXzIECGFCYWxhbmNlCAULJHQwOTcxMTk3NzYCXzMECGJCYWxhbmNlCAULJHQwOTcxMTk3NzYCXzQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQLc2hhcmVTdXBwbHkJAQ5nZXRTaGFyZVN1cHBseQMFCHBvb2xBZGRyBQVwVHlwZQUHc2hhcmVJZAQKQVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2FJZAAAAAAFBERPV04ECkJQcmVjaXNpb24JAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBA5zaGFyZVByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBANzdW0JAGQCCQBrAwUIYUJhbGFuY2UFB2RQcmljZUEFCkFQcmVjaXNpb24JAGsDBQhiQmFsYW5jZQUHZFByaWNlQgUKQlByZWNpc2lvbgkAawMFA3N1bQUOc2hhcmVQcmVjaXNpb24FC3NoYXJlU3VwcGx5AQ5nZXRTaGFyZVByaWNlcwEIc2hhcmVJZHMKAQlnZXRQcmljZXMCAWEHc2hhcmVJZAkAzQgCBQFhCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQKAAIkbAUIc2hhcmVJZHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwBQNuaWwKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBCWdldFByaWNlcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUAQ5nZXRDdXJzRW50cmllcwQDYUlkA2JJZAdzaGFyZUlkCHdBbW91bnRzBAxhc3NldHNQcmljZXMJAQ5nZXRBc3NldHNQcmljZQEJAMwIAgUDYUlkCQDMCAIFA2JJZAUDbmlsBApzaGFyZVByaWNlCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQEBnByaWNlcwkAzggCCQDMCAIJAKQDAQkAkQMCBQxhc3NldHNQcmljZXMAAAkAzAgCCQCkAwEJAJEDAgUMYXNzZXRzUHJpY2VzAAEJAMwIAgkApAMBBQpzaGFyZVByaWNlBQNuaWwFCHdBbW91bnRzCQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tUb2tlbkxhc3RQcmljZQkAuQkCBQZwcmljZXMCASwFA25pbAEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAVwVHlwZQhwb29sQWRkcgRwbXRBA2FJZARwbXRCA2JJZARiYWxBBGJhbEIDCQAAAgUFcFR5cGUFB1NGX1BPT0wEBHJlcGwKAAFACQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIgY2FsY0xQUmVwbGVuaXNoVHdvVG9rZW5zUkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFBHBtdEEJAMwIAgkApAMBBQRwbXRCBQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQRyZXBsBQRyZXBsCQCXCgUKAAFACQCRAwIFBHJlcGwAAwMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwABAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQCRAwIFBHJlcGwAAQMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQJAQxhc3NldElkVG9TdHIBCQCRAwIFBHJlcGwAAgoAAUAJAJEDAgUEcmVwbAAAAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMTEyOTYxMTU0NgkAlAoCCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAiBldmFsdWF0ZVB1dEJ5QW1vdW50QXNzZXRSRUFET05MWQkAzAgCBQRwbXRBBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcCAl9fCQC1CQIKAAFACQD8BwQFCHBvb2xBZGRyAh9ldmFsdWF0ZVB1dEJ5UHJpY2VBc3NldFJFQURPTkxZCQDMCAIFBHBtdEIFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUNJHQwMTEyOTYxMTU0NgUNJHQwMTEyOTYxMTU0NgQKZXZhbFB1dEluQggFDSR0MDExMjk2MTE1NDYCXzIECmV2YWxQdXRJbkEIBQ0kdDAxMTI5NjExNTQ2Al8xBAVscEluQQkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEAAQQFbHBJbkIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAEDCQBmAgUFbHBJbkIFBWxwSW5BBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5BAAgJAJcKBQUEcG10QQUDcG10CQBlAgUEcG10QgUDcG10BQNiSWQFBWxwSW5CBANwbXQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQpldmFsUHV0SW5CAAcJAJcKBQUDcG10BQRwbXRCCQBlAgUEcG10QQUDcG10BQNhSWQFBWxwSW5BCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARhyZXBsZW5pc2hUd29Ub2tlbnNCeVR5cGUGCHBvb2xBZGRyBXBUeXBlBHBtdEEDYUlkBHBtdEIDYklkBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUDYUlkBQRwbXRBCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQNiSWQFBHBtdEIFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFnJlcGxlbmlzaFdpdGhUd29Ub2tlbnMJAMwIAgkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMJAPwHBAUIcG9vbEFkZHICA3B1dAkAzAgCAMCEPQkAzAgCBwUDbmlsBQhwYXltZW50cwEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUECHBvb2xBZGRyBXBUeXBlA3BtdAVwbXRJZAQIcGF5bWVudHMJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFBXBtdElkBQNwbXQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICFXJlcGxlbmlzaFdpdGhPbmVUb2tlbgkAzAgCCQDMCAICATAJAMwIAgIFZmFsc2UJAMwIAgIBMAUDbmlsBQNuaWwFCHBheW1lbnRzCQD8BwQFCHBvb2xBZGRyAglwdXRPbmVUa24JAMwIAgAACQDMCAIHBQNuaWwFCHBheW1lbnRzAQdzdGFrZUxQBARwb29sBXBUeXBlB3NoYXJlSWQGYW1vdW50BAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkA2QQBBQdzaGFyZUlkBQZhbW91bnQFA25pbAMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACD2xvY2tTaGFyZVRva2VucwkAzAgCBQRwb29sCQDMCAIAAAUDbmlsBQhwYXltZW50cwkA/AcECQEQZ2V0V1hGYXJtaW5nQWRkcgEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wCBXN0YWtlBQNuaWwFCHBheW1lbnRzAQl1bnN0YWtlTFAEBHBvb2wFcFR5cGUHc2hhcmVJZAZhbW91bnQEDSR0MDEzMDMxMTMzODgDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAJUKAwkBEGdldFNGRmFybWluZ0FkZHIAAhN3aXRoZHJhd1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgUGYW1vdW50BQNuaWwDCQAAAgUFcFR5cGUFB1dYX1BPT0wJAJUKAwkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHdW5zdGFrZQkAzAgCBQdzaGFyZUlkCQDMCAIFBmFtb3VudAUDbmlsCQACAQIPV3JvbmcgcG9vbCB0eXBlBAhmYXJtQWRkcggFDSR0MDEzMDMxMTMzODgCXzEEBWZOYW1lCAUNJHQwMTMwMzExMzM4OAJfMgQGcGFyYW1zCAUNJHQwMTMwMzExMzM4OAJfMwQDaW52CQD8BwQFCGZhcm1BZGRyBQVmTmFtZQUGcGFyYW1zBQNuaWwDCQAAAgUDaW52BQNpbnYFBmFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgERY2FsY0Ftb3VudFRvUGF5U0YHBHBvb2wIYXNzZXRJZEEIYXNzZXRJZEIEYmFsQQRiYWxCEGFtb3VudFRva2VuVG9HZXQPYXNzZXRUb2tlblRvR2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wECWZlZVNjYWxlNgDAhD0EA2ZlZQkBEUBleHRyTmF0aXZlKDEwNTApAgUIcG9vbEFkZHIFCmtTRlBvb2xGZWUEDGFtbnRHZXROb0ZlZQkAbgQFEGFtb3VudFRva2VuVG9HZXQFCWZlZVNjYWxlNgkAZQIFCWZlZVNjYWxlNgUDZmVlBQdDRUlMSU5HBA0kdDAxMzgxMDE0MTE2AwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBuBAUMYW1udEdldE5vRmVlBQRiYWxCCQBlAgUEYmFsQQUMYW1udEdldE5vRmVlBQdDRUlMSU5HCQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAG4EBQxhbW50R2V0Tm9GZWUFBGJhbEEJAGUCBQRiYWxCBQxhbW50R2V0Tm9GZWUFB0NFSUxJTkcJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRBBAthbW91bnRUb1BheQgFDSR0MDEzODEwMTQxMTYCXzEECmFzc2V0VG9QYXkIBQ0kdDAxMzgxMDE0MTE2Al8yCQCUCgIFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5ARFjYWxjQW1vdW50VG9QYXlXWAcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQEBXByRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAIPJXNfX3Byb3RvY29sRmVlBARwRmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ53eFN3YXBDb250cmFjdAILJXNfX3Bvb2xGZWUECGZlZVNjYWxlCQC2AgEAgMLXLwQNJHQwMTQ0NTUxNDc2MwMJAAACBQ9hc3NldFRva2VuVG9HZXQFCGFzc2V0SWRBBAthbW91bnRUb1BheQkAawMFEGFtb3VudFRva2VuVG9HZXQFBGJhbEIJAGUCBQRiYWxBBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQgQLYW1vdW50VG9QYXkJAGsDBRBhbW91bnRUb2tlblRvR2V0BQRiYWxBCQBlAgUEYmFsQgUQYW1vdW50VG9rZW5Ub0dldAkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CAUNJHQwMTQ0NTUxNDc2MwJfMQQKYXNzZXRUb1BheQgFDSR0MDE0NDU1MTQ3NjMCXzIEEmFtb3VudFRvUGF5V2l0aEZlZQkAoAMBCQC9AgQJALYCAQULYW1vdW50VG9QYXkFCGZlZVNjYWxlCQC4AgIFCGZlZVNjYWxlCQC2AgEJAGQCBQVwckZlZQUEcEZlZQUHQ0VJTElORwkAlAoCBQphc3NldFRvUGF5BRJhbW91bnRUb1BheVdpdGhGZWUBEGV4Y2hhbmdlRGlyZWN0bHkIBHR5cGUEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAQNJHQwMTUxMDgxNTIzMAkBEWNhbGNBbW91bnRUb1BheVNGBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNTEwODE1MjMwAl8xBAthbW91bnRUb1BheQgFDSR0MDE1MTA4MTUyMzACXzIJAPwHBAkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIMY2FsbEZ1bmN0aW9uCQDMCAICCGV4Y2hhbmdlCQDMCAIJAMwIAgkApAMBBRBhbW91bnRUb2tlblRvR2V0BQNuaWwFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAQNJHQwMTU0MDUxNTUyNwkBEWNhbGNBbW91bnRUb1BheVdYBwUEcG9vbAUIYXNzZXRJZEEFCGFzc2V0SWRCBQRiYWxBBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0BQ9hc3NldFRva2VuVG9HZXQECmFzc2V0VG9QYXkIBQ0kdDAxNTQwNTE1NTI3Al8xBAthbW91bnRUb1BheQgFDSR0MDE1NDA1MTU1MjcCXzIJAPwHBAUOd3hTd2FwQ29udHJhY3QCBHN3YXAJAMwIAgUQYW1vdW50VG9rZW5Ub0dldAkAzAgCBQ9hc3NldFRva2VuVG9HZXQJAMwIAgkApQgBBQR0aGlzBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFCmFzc2V0VG9QYXkFC2Ftb3VudFRvUGF5BQNuaWwBGmNhbGNXaXRoZHJhd0xQRnJvbVBvb2xWaXJ0BAhwb29sQWRkcgVwVHlwZQdzaGFyZUlkD3VzZXJDYW5XaXRoZHJhdwQNJHQwMTU3ODkxNjE3NgMJAAACBQVwVHlwZQUHU0ZfUE9PTAQDaW52CgABQAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICEHdpdGhkcmF3UkVBRE9OTFkJAMwIAgkAzAgCCQCkAwEFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQNpbnYFA2ludgkAlAoCCAUDaW52Al8xCAUDaW52Al8yCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBANpbnYJALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICE2V2YWx1YXRlR2V0UkVBRE9OTFkJAMwIAgUHc2hhcmVJZAkAzAgCBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18DCQAAAgUDaW52BQNpbnYJAJQKAgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFA2ludgABCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaW52AAIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EB2Ftb3VudEEIBQ0kdDAxNTc4OTE2MTc2Al8xBAdhbW91bnRCCAUNJHQwMTU3ODkxNjE3NgJfMgkAlAoCBQdhbW91bnRBBQdhbW91bnRCAQtjbGFpbUZhcm1lZAIEdHlwZQRwb29sAwkAAAIFBHR5cGUFB1NGX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFNGRmFybWluZ0FkZHIAAgVjbGFpbQkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBlNXT1BJRAkAlAoCCQBlAgUIYmFsQWZ0ZXIFCWJhbEJlZm9yZQUGU1dPUElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAAAIFBHR5cGUFB1dYX1BPT0wECWJhbEJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQUEV1hJRAMJAAACBQliYWxCZWZvcmUFCWJhbEJlZm9yZQQDaW52CQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBB0FkZHJlc3MBCQDZBAEFBHBvb2wCB2NsYWltV1gJAMwIAgUEcG9vbAUDbmlsBQNuaWwDCQAAAgUDaW52BQNpbnYECGJhbEFmdGVyCQEOYWNjb3VudEJhbGFuY2UBBQRXWElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQRXWElECQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIPV3JvbmcgcG9vbCB0eXBlAQ9yZXBsZW5pc2hCeVR5cGUKBXBUeXBlBHBvb2wHZmVlVHlwZQRwbXRBA2FJZARwbXRCA2JJZARiYWxBBGJhbEIETFBJZAQPbHBCYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQDZBAEFBExQSWQDCQAAAgUPbHBCYWxhbmNlQmVmb3JlBQ9scEJhbGFuY2VCZWZvcmUECHBvb2xBZGRyCQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sBA0kdDAxNzE2MjE3NTc4AwMJAGYCBQRwbXRBAAAJAGYCBQRwbXRCAAAHBA0kdDAxNzIyODE3MzQ0CQEYY2FsY1JlcGxlbmlzaEJ5VHdvVG9rZW5zCAUFcFR5cGUFCHBvb2xBZGRyBQRwbXRBBQNhSWQFBHBtdEIFA2JJZAUEYmFsQQUEYmFsQgQGcG10SW5BCAUNJHQwMTcyMjgxNzM0NAJfMQQGcG10SW5CCAUNJHQwMTcyMjgxNzM0NAJfMgQGY2hhbmdlCAUNJHQwMTcyMjgxNzM0NAJfMwQIY2hhbmdlSWQIBQ0kdDAxNzIyODE3MzQ0Al80BANpbnYJARhyZXBsZW5pc2hUd29Ub2tlbnNCeVR5cGUGBQhwb29sQWRkcgUFcFR5cGUFBnBtdEluQQUDYUlkBQZwbXRJbkIFA2JJZAMJAAACBQNpbnYFA2ludgkAlAoCBQZjaGFuZ2UFCGNoYW5nZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAwkAZgIFBHBtdEEAAAkAlAoCBQRwbXRBBQNhSWQDCQBmAgUEcG10QgAACQCUCgIFBHBtdEIFA2JJZAkAAgECEHBtdHMgbXVzdCBiZSA+IDAEBmNoYW5nZQgFDSR0MDE3MTYyMTc1NzgCXzEECGNoYW5nZUlkCAUNJHQwMTcxNjIxNzU3OAJfMgQDaW52AwkAZgIFBmNoYW5nZQAACQEXcmVwbGVuaXNoT25lVG9rZW5CeVR5cGUEBQhwb29sQWRkcgUFcFR5cGUFBmNoYW5nZQUIY2hhbmdlSWQFA25pbAMJAAACBQNpbnYFA2ludgQObHBCYWxhbmNlQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAQLdG90YWxTdGFrZWQJAGUCBQ5scEJhbGFuY2VBZnRlcgUPbHBCYWxhbmNlQmVmb3JlBA1heGx5RmVlQW1vdW50CQBrAwULdG90YWxTdGFrZWQJAQpnZXRBeGx5RmVlAgUEcG9vbAUHZmVlVHlwZQUKRkVFX1NDQUxFNgQRdXNlclNoYXJlRm9yU3Rha2UJAGUCBQt0b3RhbFN0YWtlZAUNYXhseUZlZUFtb3VudAMJAGcCAAAFEXVzZXJTaGFyZUZvclN0YWtlCQACAQIoYW1vdW50IG9mIHN0YWtlZCBzaGFyZXRva2VucyBtdXN0IGJlID4gMAQFaW52TFAJAQdzdGFrZUxQBAUEcG9vbAUFcFR5cGUFBExQSWQFEXVzZXJTaGFyZUZvclN0YWtlAwkAAAIFBWludkxQBQVpbnZMUAkAlAoCBRF1c2VyU2hhcmVGb3JTdGFrZQUNYXhseUZlZUFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEQcmVwbGVuaXNoRW50cmllcwgEcG9vbAR1c2VyDHN0YWtlZEFtb3VudA1heGx5RmVlQW1vdW50BnBvc051bQdzaGFyZUlkBHR5cGUId2l0aExvYW4EC3RvdGFsQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBA90b3RhbEFtb3VudExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQNJHQwMTg0MzYxODY3NAMFCHdpdGhMb2FuCQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAGQCBQ90b3RhbEFtb3VudExvYW4FDHN0YWtlZEFtb3VudAkAlAoCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFE2tQb29sSW50ZXJlc3ROb0xvYW4FD3RvdGFsQW1vdW50TG9hbgQPY3VyUG9vbEludGVyZXN0CAUNJHQwMTg0MzYxODY3NAJfMQQTdG90YWxTdGFrZWRXaXRoTG9hbggFDSR0MDE4NDM2MTg2NzQCXzIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZAIFC3RvdGFsQW1vdW50BQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4FE3RvdGFsU3Rha2VkV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUNa1VzZXJQb3NpdGlvbgUMc3Rha2VkQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkApAMBBQZwb3NOdW0FFWtVc2VyUG9zaXRpb25JbnRlcmVzdAUPY3VyUG9vbEludGVyZXN0CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlclBvc2l0aW9uUG9vbAUEcG9vbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQR1c2VyBRBrVXNlclBvc2l0aW9uTnVtBQZwb3NOdW0JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIbW9uZXlCb3gFDWF4bHlGZWVBbW91bnQJANkEAQUHc2hhcmVJZAUDbmlsAQ5leGNoYW5nZUtlZXBlcgoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJYW1vdW50c0luCWFkZHJlc3Nlcw9hc3NldHNUb1JlY2VpdmULZXN0UmVjZWl2ZWQRc2xpcHBhZ2VUb2xlcmFuY2ULbWluUmVjZWl2ZWQHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIEc3dhcAkAzAgCBQlhbW91bnRzSW4JAMwIAgUJYWRkcmVzc2VzCQDMCAIFD2Fzc2V0c1RvUmVjZWl2ZQkAzAgCBQtlc3RSZWNlaXZlZAkAzAgCBRFzbGlwcGFnZVRvbGVyYW5jZQkAzAgCBQttaW5SZWNlaXZlZAkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEOZXhjaGFuZ2VQdXp6bGUGB3RvVG9rZW4JcG10QW1vdW50CHBtdEFzc2V0CXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKcHV6emxlU3dhcAkAzAgCBQlyb3V0ZXNTdHIJAMwIAgUMbWluVG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVN3b3BGaQoHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQKZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwQSdG9rZW5CYWxhbmNlQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuAwkAAAIFEnRva2VuQmFsYW5jZUJlZm9yZQUSdG9rZW5CYWxhbmNlQmVmb3JlBANpbnYJAPwHBAUKZXhDb250cmFjdAIKc3dvcGZpU3dhcAkAzAgCBQpleGNoYW5nZXJzCQDMCAIFDmV4Y2hhbmdlcnNUeXBlCQDMCAIFBWFyZ3MxCQDMCAIFBWFyZ3MyCQDMCAIFEXJvdXRpbmdBc3NldHNLZXlzCQDMCAIFEm1pbkFtb3VudFRvUmVjZWl2ZQkAzAgCBQdvcHRpb25zBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCHBtdEFzc2V0BQlwbXRBbW91bnQFA25pbAMJAAACBQNpbnYFA2ludgkAZQIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4FEnRva2VuQmFsYW5jZUJlZm9yZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEKY2FwaXRhbGl6ZQQEcG9vbAVwVHlwZQd0b2tlbklkC3Rva2VuQW1vdW50BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEDSR0MDIxMDI1MjEwOTEJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDQUlkCAUNJHQwMjEwMjUyMTA5MQJfMQQDQklkCAUNJHQwMjEwMjUyMTA5MQJfMgQEYmFsQQgFDSR0MDIxMDI1MjEwOTECXzMEBGJhbEIIBQ0kdDAyMTAyNTIxMDkxAl80BAdzaGFyZUlkCAUNJHQwMjEwMjUyMTA5MQJfNQMDCQECIT0CBQd0b2tlbklkBQNBSWQJAQIhPQIFB3Rva2VuSWQFA0JJZAcJAAIBAgtXcm9uZyBhc3NldAQNJHQwMjExNzYyMTI1NgMJAAACBQd0b2tlbklkBQNBSWQJAJQKAgULdG9rZW5BbW91bnQAAAkAlAoCAAAFC3Rva2VuQW1vdW50BARwbXRBCAUNJHQwMjExNzYyMTI1NgJfMQQEcG10QggFDSR0MDIxMTc2MjEyNTYCXzIEDSR0MDIxMjU5MjEzNjMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUGTk9fRkVFBQRwbXRBBQNBSWQFBHBtdEIFA0JJZAUEYmFsQQUEYmFsQgUHc2hhcmVJZAQMc3Rha2VkQW1vdW50CAUNJHQwMjEyNTkyMTM2MwJfMQQCbmYIBQ0kdDAyMTI1OTIxMzYzAl8yBBNjdXJQb29sSW50ZXJlc3RMb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4AAAQVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgAABBB0b3RhbFNoYXJlQW1vdW50CQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBBh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4JARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAQLbG9hblBlcmNlbnQJAGsDBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FBlNDQUxFOAUQdG90YWxTaGFyZUFtb3VudAQKc3Rha2VkTG9hbgkAawMFDHN0YWtlZEFtb3VudAULbG9hblBlcmNlbnQFBlNDQUxFOAQMc3Rha2VkTm9Mb2FuCQBlAgUMc3Rha2VkQW1vdW50BQpzdGFrZWRMb2FuBA9uZXdJbnRlcmVzdExvYW4DCQBmAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAJAGQCBRNjdXJQb29sSW50ZXJlc3RMb2FuCQBrAwUKc3Rha2VkTG9hbgUHU0NBTEUxMAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEEW5ld0ludGVyZXN0Tm9Mb2FuAwkAZgIJAGUCBRB0b3RhbFNoYXJlQW1vdW50BRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFFWN1clBvb2xJbnRlcmVzdE5vTG9hbgkAawMFDHN0YWtlZE5vTG9hbgUHU0NBTEUxMAkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAABAtheGx5RmVlTG9hbgkAawMFCnN0YWtlZExvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUMQ0FQX0ZFRV9MT0FOBQpGRUVfU0NBTEU2BA1heGx5RmVlTm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuCQEKZ2V0QXhseUZlZQIFBHBvb2wFD0NBUF9GRUVfTk9fTE9BTgUKRkVFX1NDQUxFNgQHYXhseUZlZQkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkCQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4DCQAAAgUHYXhseUZlZQUHYXhseUZlZQkAzggCCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFEWtQb29sSW50ZXJlc3RMb2FuBQ9uZXdJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgURbmV3SW50ZXJlc3ROb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIJAGQCBRB0b3RhbFNoYXJlQW1vdW50BQxzdGFrZWRBbW91bnQFB2F4bHlGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQBkAgUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuBQpzdGFrZWRMb2FuBQtheGx5RmVlTG9hbgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAkAZAIFC2F4bHlGZWVMb2FuBQ1heGx5RmVlTm9Mb2FuCQDZBAEFB3NoYXJlSWQFA25pbAkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgESd2l0aGRyYXdBbW91bnRDYWxjBARwb29sD3VzZXJDYW5XaXRoZHJhdwRkZWJ0C2JvcnJvd0Fzc2V0BAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAIMVW5rbm93biBwb29sBA0kdDAyMzEzNTIzMjExCQELZ2V0UG9vbERhdGECBQhwb29sQWRkcgUFcFR5cGUECGFzc2V0SWRBCAUNJHQwMjMxMzUyMzIxMQJfMQQIYXNzZXRJZEIIBQ0kdDAyMzEzNTIzMjExAl8yBARiYWxBCAUNJHQwMjMxMzUyMzIxMQJfMwQEYmFsQggFDSR0MDIzMTM1MjMyMTECXzQEB3NoYXJlSWQIBQ0kdDAyMzEzNTIzMjExAl81BAtjQmFsQUJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEDCQAAAgULY0JhbEFCZWZvcmUFC2NCYWxBQmVmb3JlBAtjQmFsQkJlZm9yZQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULY0JhbEJCZWZvcmUFC2NCYWxCQmVmb3JlBANpbnYDCQAAAgUFcFR5cGUFB1NGX1BPT0wJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAgh3aXRoZHJhdwkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsBANpbnYJAQl1bnN0YWtlTFAEBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3AwkAAAIFA2ludgUDaW52CQD8BwQFCHBvb2xBZGRyAgNnZXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUHc2hhcmVJZAUPdXNlckNhbldpdGhkcmF3BQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUDaW52BQNpbnYECmNCYWxBQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBBApjQmFsQkFmdGVyCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgQNJHQwMjM3NzQyMzg2MwkAlAoCCQBlAgUKY0JhbEFBZnRlcgULY0JhbEFCZWZvcmUJAGUCBQpjQmFsQkFmdGVyBQtjQmFsQkJlZm9yZQQNdG9rZW5zQW1vdW50QQgFDSR0MDIzNzc0MjM4NjMCXzEEDXRva2Vuc0Ftb3VudEIIBQ0kdDAyMzc3NDIzODYzAl8yBA0kdDAyMzg2NjI0NzIwAwkAZgIFBGRlYnQAAAQNYW1vdW50VG9HZXRFeAMDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQBmAgUEZGVidAUNdG9rZW5zQW1vdW50QQcJAGUCBQRkZWJ0BQ10b2tlbnNBbW91bnRBAwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEIJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRCBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEIAAAQFZXhJbnYDCQBmAgUNYW1vdW50VG9HZXRFeAAACQEQZXhjaGFuZ2VEaXJlY3RseQgFBXBUeXBlBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIJAGUCBQRiYWxBBQ10b2tlbnNBbW91bnRBCQBlAgUEYmFsQgUNdG9rZW5zQW1vdW50QgUNYW1vdW50VG9HZXRFeAULYm9ycm93QXNzZXQFA25pbAMJAAACBQVleEludgUFZXhJbnYED2NCYWxBQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEED2NCYWxCQWZ0ZXJSZXBheQkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEIDCQAAAgULYm9ycm93QXNzZXQFCGFzc2V0SWRBCQCUCgIJAGUCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQUEZGVidAkAZQIFD2NCYWxCQWZ0ZXJSZXBheQULY0JhbEJCZWZvcmUJAJQKAgkAZQIFD2NCYWxBQWZ0ZXJSZXBheQULY0JhbEFCZWZvcmUJAGUCCQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQUEZGVidAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAlAoCBQ10b2tlbnNBbW91bnRBBQ10b2tlbnNBbW91bnRCBAd0b1VzZXJBCAUNJHQwMjM4NjYyNDcyMAJfMQQHdG9Vc2VyQggFDSR0MDIzODY2MjQ3MjACXzIJAJkKBwUHdG9Vc2VyQQUIYXNzZXRJZEEFB3RvVXNlckIFCGFzc2V0SWRCBQpjQmFsQUFmdGVyBQpjQmFsQkFmdGVyBQdzaGFyZUlkCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBHVzZXIEcG9vbAVwb3NJZAhib3Jyb3dlZAQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMdXNlckludGVyZXN0CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAQMcG9vbEludGVyZXN0AwUIYm9ycm93ZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgkAZAIFB3BBbW91bnQJAGsDBQdwQW1vdW50CQBlAgUMcG9vbEludGVyZXN0BQx1c2VySW50ZXJlc3QFB1NDQUxFMTABDndpdGhkcmF3VG9Vc2VyBAR1c2VyBHBvb2wFcG9zSWQIc3RvcExvc3MEB3BBbW91bnQJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24CEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50AAAED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAAEDnBvb2xUb3RhbFNoYXJlCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBAh1c2VyQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHVzZXIEC2JvcnJvd0Fzc2V0CQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkAgAEBGRlYnQDCQBmAgUMYm9ycm93QW1vdW50AAAKAAFACQD8BwQJAQ5nZXRMZW5kU3J2QWRkcgACDGdldEFzc2V0RGVidAkAzAgCBwkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAAABA0kdDAyNjEwODI2MjYxCQESd2l0aGRyYXdBbW91bnRDYWxjBAUEcG9vbAUPdXNlckNhbldpdGhkcmF3BQRkZWJ0BQtib3Jyb3dBc3NldAMJAAACBQ0kdDAyNjEwODI2MjYxBQ0kdDAyNjEwODI2MjYxBAdzaGFyZUlkCAUNJHQwMjYxMDgyNjI2MQJfNwQKY0JhbEJBZnRlcggFDSR0MDI2MTA4MjYyNjECXzYECmNCYWxBQWZ0ZXIIBQ0kdDAyNjEwODI2MjYxAl81BAhhc3NldElkQggFDSR0MDI2MTA4MjYyNjECXzQEDXRvVXNlckFtb3VudEIIBQ0kdDAyNjEwODI2MjYxAl8zBAhhc3NldElkQQgFDSR0MDI2MTA4MjYyNjECXzIEDXRvVXNlckFtb3VudEEIBQ0kdDAyNjEwODI2MjYxAl8xBAtjbG9zZURidEludgMJAGYCBQRkZWJ0AAAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIIcmVwYXlGb3IJAMwIAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFC2JvcnJvd0Fzc2V0BQRkZWJ0BQNuaWwAAAMJAAACBQtjbG9zZURidEludgULY2xvc2VEYnRJbnYJAM4IAgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUKa1Bvb2xUb3RhbAkAZQIFDnBvb2xUb3RhbFNoYXJlBQ91c2VyQ2FuV2l0aGRyYXcJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRBCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCHVzZXJBZGRyBQ10b1VzZXJBbW91bnRCCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMEBQhhc3NldElkQQUIYXNzZXRJZEIFB3NoYXJlSWQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEMcGFyc2VSZXF1ZXN0AQlyZXF1ZXN0SWQEB3JlcXVlc3QJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkCQCsAgICE05vIHJlcXVlc3Qgd2l0aCBpZCAFCXJlcXVlc3RJZAIBLAQEdXNlcgkAkQMCBQdyZXF1ZXN0AAAEBHBvb2wJAJEDAgUHcmVxdWVzdAABBARwbXRBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAACBANBSWQJAJEDAgUHcmVxdWVzdAADBARwbXRCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAEBANCSWQJAJEDAgUHcmVxdWVzdAAFBARiYWxBCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAGBARiYWxCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAHBAdzaGFyZUlkCQCRAwIFB3JlcXVlc3QACAQHYndBc3NldAkAkQMCBQdyZXF1ZXN0AAkECGJ3QW1vdW50CQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUHcmVxdWVzdAAKCQCdCgsFBHVzZXIFBHBvb2wFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBQdid0Fzc2V0BQhid0Ftb3VudAEQY2FsY0JvcnJvd0Ftb3VudAYEcG10QQRwbXRCA2FJZANiSWQIbGV2ZXJhZ2UIYm9ycm93SWQEB2RQcmljZUEJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNhSWQFDmtQcmljZUluT3JhY2xlBAdkUHJpY2VCCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUDYklkBQ5rUHJpY2VJbk9yYWNsZQQGZGVjUHJBCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYUlkAAAAAAUERE9XTgQGZGVjUHJCCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYklkAAAAAAUERE9XTgQMcGF5ZEluRG9sbGFyCQBkAgkAawMFB2RQcmljZUEFBHBtdEEFBmRlY1ByQQkAawMFB2RQcmljZUIFBHBtdEIFBmRlY1ByQgQNJHQwMjc5MDUyODAwMgMJAAACBQhib3Jyb3dJZAUDYUlkCQCUCgIFB2RQcmljZUEFBmRlY1ByQQkAlAoCBQdkUHJpY2VCBQZkZWNQckIEC2JvcnJvd1ByaWNlCAUNJHQwMjc5MDUyODAwMgJfMQQLYm9ycm93RGVjUHIIBQ0kdDAyNzkwNTI4MDAyAl8yCQBrAwkAawMFDHBheWRJbkRvbGxhcgkAZQIFCGxldmVyYWdlAGQAZAULYm9ycm93RGVjUHIFC2JvcnJvd1ByaWNlARJwYXJzZVJlcGxlbmlzaFBtdHMDBHBtdHMDQUlkA0JJZAMJAAACCQCQAwEFBHBtdHMAAgMJAQIhPQIJAQxhc3NldElkVG9TdHIBCAkAkQMCBQRwbXRzAAAHYXNzZXRJZAUDQUlkCQACAQIVV3JvbmcgcGF5bWVudCBhc3NldCBBAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAQdhc3NldElkBQNCSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEIJAJYKBAgJAJEDAgUEcG10cwAABmFtb3VudAUDQUlkCAkAkQMCBQRwbXRzAAEGYW1vdW50BQNCSWQDCQAAAgkAkAMBBQRwbXRzAAEDCQAAAgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAAdhc3NldElkBQNBSWQJAJYKBAgJAJEDAgUEcG10cwAABmFtb3VudAUDQUlkAAAFA0JJZAMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAgUEcG10cwAAB2Fzc2V0SWQFA0JJZAkAlgoEAAAFA0FJZAgJAJEDAgUEcG10cwAABmFtb3VudAUDQklkCQACAQINV3JvbmcgcGF5bWVudAkAAgECHE9uZSBvciB0d28gcGF5bWVudHMgZXhwZWN0ZWQBD2NhbGNQcmljZUltcGFjdAQEYmFsQQRiYWxCB25ld0JhbEEHbmV3QmFsQgQDcHJpCQBoAgkAZQIFBlNDQUxFOAkAawMJAGsDBQRiYWxCBQZTQ0FMRTgFBGJhbEEFBlNDQUxFOAkAawMFB25ld0JhbEIFBlNDQUxFOAUHbmV3QmFsQQBkAwkAZgIAAAUDcHJpCQBoAgUDcHJpAP///////////wEFA3ByaRABaQEaZ2V0U2hhcmVBc3NldFByaWNlUkVBRE9OTFkBB3NoYXJlSWQEC3NoYXJlUHJpY2VzCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQJAJQKAgUDbmlsBQtzaGFyZVByaWNlcwFpASJnZXRVc2VyUG9zaXRpb25TaGFyZUFtb3VudFJFQURPTkxZAgR1c2VyBnBvc051bQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBnBvc051bQURa1VzZXJQb3NpdGlvblBvb2wCEFVua25vd24gcG9zaXRpb24EDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBnBvc051bQkAZgIFDGJvcnJvd0Ftb3VudAAACQCUCgIFA25pbAUPdXNlckNhbldpdGhkcmF3AWkBIGdldFVzZXJQb3NpdGlvbkluRG9sbGFyc1JFQURPTkxZAwR1c2VyBXBvb2xzBnBvc051bQoBB3VzZXJQb3MCAWEEcG9vbAQNJHQwMjk3MDEyOTczNQUBYQQIdG90YWxQb3MIBQ0kdDAyOTcwMTI5NzM1Al8xBAdwb3NEZWJ0CAUNJHQwMjk3MDEyOTczNQJfMgQFaW5kZXgIBQ0kdDAyOTcwMTI5NzM1Al8zBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCElBvb2wgaXMgbm90IGluaXRlZAQNJHQwMjk4MjcyOTkxNwkBC2dldFBvb2xEYXRhAgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBANBSWQIBQ0kdDAyOTgyNzI5OTE3Al8xBANCSWQIBQ0kdDAyOTgyNzI5OTE3Al8yBARiYWxBCAUNJHQwMjk4MjcyOTkxNwJfMwQEYmFsQggFDSR0MDI5ODI3Mjk5MTcCXzQEB3NoYXJlSWQIBQ0kdDAyOTgyNzI5OTE3Al81BAxib3Jyb3dBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAJEDAgUGcG9zTnVtBQVpbmRleAURa1VzZXJCb3Jyb3dBbW91bnQAAAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAkAkQMCBQZwb3NOdW0FBWluZGV4CQBmAgUMYm9ycm93QW1vdW50AAAEC3NoYXJlUHJpY2VzCQENZ2V0U2hhcmVQcmljZQEFB3NoYXJlSWQECmRlY1ByU2hhcmUJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQdzaGFyZUlkAAAAAAUERE9XTgQGc2hhcmVECQBrAwUPdXNlckNhbldpdGhkcmF3BQtzaGFyZVByaWNlcwUKZGVjUHJTaGFyZQMJAAACBQxib3Jyb3dBbW91bnQAAAkAlQoDCQDNCAIFCHRvdGFsUG9zBQZzaGFyZUQJAM0IAgUHcG9zRGVidAAACQBkAgUFaW5kZXgAAQQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgFEmtVc2VyQm9ycm93QXNzZXRJZAQEZGVidAoAAUAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIMZ2V0QXNzZXREZWJ0CQDMCAIHCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfCQCRAwIFBnBvc051bQUFaW5kZXgJAMwIAgULYm9ycm93QXNzZXQFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAQQYm9ycm93QXNzZXRQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFC2JvcnJvd0Fzc2V0BQ5rUHJpY2VJbk9yYWNsZQQNZGVjUHJCb3Jyb3dJZAkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFC2JvcnJvd0Fzc2V0AAAAAAUERE9XTgQFZGVidEQJAGsDBQRkZWJ0BRBib3Jyb3dBc3NldFByaWNlBQ1kZWNQckJvcnJvd0lkCQCVCgMJAM0IAgUIdG90YWxQb3MFBnNoYXJlRAkAzQgCBQdwb3NEZWJ0BQVkZWJ0RAkAZAIFBWluZGV4AAEEDSR0MDMwOTM3MzA5OTIKAAIkbAUFcG9vbHMKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCVCgMFA25pbAUDbmlsAAAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBB3VzZXJQb3MCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDIwCQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPABAAEQASABMAFAQDcG9zCAUNJHQwMzA5MzczMDk5MgJfMQQEZGVidAgFDSR0MDMwOTM3MzA5OTICXzIJAJQKAgUDbmlsCQCUCgIFA3BvcwUEZGVidAFpAQlyZXBsZW5pc2gDBHBvb2wIbGV2ZXJhZ2UIYm9ycm93SWQDAwkAZgIAZAUIbGV2ZXJhZ2UGCQBmAgUIbGV2ZXJhZ2UArAIJAAIBAh9MZXZlcmFnZSBjYW4ndCBiZSA8MTAwIGFuZCA+MzAwAwMJAQEhAQkBEUBleHRyTmF0aXZlKDEwNTEpAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhbkJvcnJvdwkAZgIFCGxldmVyYWdlAGQHCQACAQIdWW91IGNhbid0IGJvcnJvdyBpbiB0aGlzIHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMTQzMjMxNTIyCQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMxNDMyMzE1MjICXzEEA0JJZAgFDSR0MDMxNDMyMzE1MjICXzIEBGJhbEEIBQ0kdDAzMTQzMjMxNTIyAl8zBARiYWxCCAUNJHQwMzE0MzIzMTUyMgJfNAQHc2hhcmVJZAgFDSR0MDMxNDMyMzE1MjICXzUEDSR0MDMxNTI1MzE2MDYJARJwYXJzZVJlcGxlbmlzaFBtdHMDCAUBaQhwYXltZW50cwUDQUlkBQNCSWQEBHBtdEEIBQ0kdDAzMTUyNTMxNjA2Al8xBAlwbXRBc3NldEEIBQ0kdDAzMTUyNTMxNjA2Al8yBARwbXRCCAUNJHQwMzE1MjUzMTYwNgJfMwQJcG10QXNzZXRCCAUNJHQwMzE1MjUzMTYwNgJfNAQEdXNlcgkApQgBCAUBaQZjYWxsZXIECW5ld1Bvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIDCQBmAgUIbGV2ZXJhZ2UAZAQMYm9ycm93QW1vdW50CQEQY2FsY0JvcnJvd0Ftb3VudAYFBHBtdEEFBHBtdEIFCXBtdEFzc2V0QQUJcG10QXNzZXRCBQhsZXZlcmFnZQUIYm9ycm93SWQEB3JlcXVlc3QJALkJAgkAzAgCBQR1c2VyCQDMCAIFBHBvb2wJAMwIAgkApAMBBQRwbXRBCQDMCAIFCXBtdEFzc2V0QQkAzAgCCQCkAwEFBHBtdEIJAMwIAgUJcG10QXNzZXRCCQDMCAIJAKQDAQUEYmFsQQkAzAgCCQCkAwEFBGJhbEIJAMwIAgUHc2hhcmVJZAkAzAgCBQhib3Jyb3dJZAkAzAgCCQCkAwEFDGJvcnJvd0Ftb3VudAUDbmlsAgEsBAxuZXdSZXF1ZXN0SWQKAAFACQD8BwQFBHRoaXMCEGNyZWF0ZU5ld1JlcXVlc3QJAMwIAgUHcmVxdWVzdAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AwkAAAIFDG5ld1JlcXVlc3RJZAUMbmV3UmVxdWVzdElkBARhcmdzCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIFDGJvcnJvd0Ftb3VudAkAzAgCCQClCAEFBHRoaXMJAMwIAgIRcmVwbGVuaXNoRnJvbUxhbmQJAMwIAgkApAMBCQETdmFsdWVPckVycm9yTWVzc2FnZQIFDG5ld1JlcXVlc3RJZAIYQ2FuJ3QgY3JlYXRlIG5ldyByZXF1ZXN0BQNuaWwEA2ludgkA/QcECQEOZ2V0TGVuZFNydkFkZHIAAg1mbGFzaFBvc2l0aW9uBQRhcmdzBQNuaWwDCQAAAgUDaW52BQNpbnYECnVzZXJTdGFrZWQJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFCW5ld1Bvc051bQUNa1VzZXJQb3NpdGlvbgQNJHQwMzI2MTkzMjcxMwkBD2dldFBvb2xCYWxhbmNlcwQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUDQUlkBQNCSWQDCQAAAgUNJHQwMzI2MTkzMjcxMwUNJHQwMzI2MTkzMjcxMwQHbmV3QmFsQggFDSR0MDMyNjE5MzI3MTMCXzIEB25ld0JhbEEIBQ0kdDAzMjYxOTMyNzEzAl8xBAhwckltcGFjdAkBD2NhbGNQcmljZUltcGFjdAQFBGJhbEEFBGJhbEIFB25ld0JhbEEFB25ld0JhbEIEDSR0MDMyNzgzMzI4OTgJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzMjc4MzMyODk4Al8xBAh3QW1vdW50QggFDSR0MDMyNzgzMzI4OTgCXzIJAJQKAgUDbmlsCQDMCAIFCHBySW1wYWN0CQDMCAIFCHdBbW91bnRBCQDMCAIFCHdBbW91bnRCBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EDSR0MDMyOTUxMzMwNjMJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAULTk9fTE9BTl9GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzI5NTEzMzA2MwJfMQQHYXhseUZlZQgFDSR0MDMyOTUxMzMwNjMCXzIEDSR0MDMzMDY5MzMxNjMJAQ9nZXRQb29sQmFsYW5jZXMECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFA0FJZAUDQklkAwkAAAIFDSR0MDMzMDY5MzMxNjMFDSR0MDMzMDY5MzMxNjMEB25ld0JhbEIIBQ0kdDAzMzA2OTMzMTYzAl8yBAduZXdCYWxBCAUNJHQwMzMwNjkzMzE2MwJfMQQIcHJJbXBhY3QJAQ9jYWxjUHJpY2VJbXBhY3QEBQRiYWxBBQRiYWxCBQduZXdCYWxBBQduZXdCYWxCBA0kdDAzMzIzMzMzMzQ4CQEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFCnVzZXJTdGFrZWQECHdBbW91bnRBCAUNJHQwMzMyMzMzMzM0OAJfMQQId0Ftb3VudEIIBQ0kdDAzMzIzMzMzMzQ4Al8yCQCUCgIJAM4IAgkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQluZXdQb3NOdW0FB3NoYXJlSWQFBXBUeXBlBwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwJAMwIAgUIcHJJbXBhY3QJAMwIAgUId0Ftb3VudEEJAMwIAgUId0Ftb3VudEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQh3aXRoZHJhdwIEcG9vbAVwb3NJZAkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQHAWkBFGNyZWF0ZVVwZGF0ZVN0b3BMb3NzBAVwb3NJZAZwb29sSWQHYXNzZXRJZAVwcmljZQQQdG9rZW5PcmFjbGVQcmljZQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFB2Fzc2V0SWQFDmtQcmljZUluT3JhY2xlAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUGcG9vbElkAgFfCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAAgECGlRoZXJlIGFyZSBubyB1c2VyIHBvc2l0aW9uAwkAZwIAAAUFcHJpY2UJAAIBAhxQcmljZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwAwkAZgIFBXByaWNlBRB0b2tlbk9yYWNsZVByaWNlCQACAQIrUHJpY2UgbXVzdCBiZSBsZXNzIHRoYW4gY3VycmVudCB0b2tlbiBwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQVwcmljZQUDbmlsAWkBDmRlbGV0ZVN0b3BMb3NzAwVwb3NJZAZwb29sSWQHYXNzZXRJZAMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAMwIAgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQClCAEIBQFpBmNhbGxlcgIBXwkApAMBBQVwb3NJZAIBXwUGcG9vbElkAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzBQNuaWwBaQEEaW5pdAkMbW9uZXlCb3hBZGRyDXNmRmFybWluZ0FkZHIIbGVuZEFkZHIPcHJpY2VPcmFjbGVBZGRyEGtlZXBlckV4Q29udHJhY3QOd3hTd2FwQ29udHJhY3QLc3dvcEFzc2V0SWQJd3hBc3NldElkC2FkbWluUHViS2V5AwkBCWlzRGVmaW5lZAEJAKIIAQUJa01vbmV5Qm94CQACAQIOQWxyZWFkeSBpbml0ZWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUJa01vbmV5Qm94BQxtb25leUJveEFkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUOa1NGRmFybWluZ0FkZHIFDXNmRmFybWluZ0FkZHIJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0xlbmRTZXJ2aWNlBQhsZW5kQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQxrUHJpY2VPcmFjbGUFD3ByaWNlT3JhY2xlQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQtrRXhDb250cmFjdAUQa2VlcGVyRXhDb250cmFjdAkAzAgCCQELU3RyaW5nRW50cnkCBQ9rV3hTd2FwQ29udHJhY3QFDnd4U3dhcENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFB2tTd29wSWQFC3N3b3BBc3NldElkCQDMCAIJAQtTdHJpbmdFbnRyeQIFBWtXeElkBQl3eEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUMa0FkbWluQ2FsbFBLBQthZG1pblB1YktleQUDbmlsAWkBEGNyZWF0ZU5ld1JlcXVlc3QBBnBhcmFtcwkBC3ZhbHVlT3JFbHNlAgkBCmlzU2VsZkNhbGwBBQFpBAxuZXdSZXF1ZXN0SWQJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMFDGtSZXF1ZXN0SXRlcgAAAAEJAJQKAgkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIJAKQDAQUMbmV3UmVxdWVzdElkBQprUmVxdWVzdElkBQZwYXJhbXMJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtSZXF1ZXN0SXRlcgUMbmV3UmVxdWVzdElkBQNuaWwFDG5ld1JlcXVlc3RJZAFpARFyZXBsZW5pc2hGcm9tTGFuZAEJcmVxdWVzdElkCQELdmFsdWVPckVsc2UCCQEKaXNMYW5kQ2FsbAEFAWkEDSR0MDM1ODc0MzU5NzgJAQxwYXJzZVJlcXVlc3QBBQlyZXF1ZXN0SWQEBHVzZXIIBQ0kdDAzNTg3NDM1OTc4Al8xBARwb29sCAUNJHQwMzU4NzQzNTk3OAJfMgQEcG10QQgFDSR0MDM1ODc0MzU5NzgCXzMEA0FJZAgFDSR0MDM1ODc0MzU5NzgCXzQEBHBtdEIIBQ0kdDAzNTg3NDM1OTc4Al81BANCSWQIBQ0kdDAzNTg3NDM1OTc4Al82BARiYWxBCAUNJHQwMzU4NzQzNTk3OAJfNwQEYmFsQggFDSR0MDM1ODc0MzU5NzgCXzgEB3NoYXJlSWQIBQ0kdDAzNTg3NDM1OTc4Al85BAdid0Fzc2V0CAUNJHQwMzU4NzQzNTk3OANfMTAECGJ3QW1vdW50CAUNJHQwMzU4NzQzNTk3OANfMTEDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAhJXcm9uZyBwYXltZW50IHNpemUDAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAUHYndBc3NldAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQhid0Ftb3VudAkAAgECDVdyb25nIHBheW1lbnQEDSR0MDM2MTY4MzYyOTIDCQAAAgUDQUlkBQdid0Fzc2V0CQCUCgIJAGQCBQRwbXRBCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUEcG10QgkAlAoCBQRwbXRBCQBkAgUEcG10QggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQEB3BtdEFsbEEIBQ0kdDAzNjE2ODM2MjkyAl8xBAdwbXRBbGxCCAUNJHQwMzYxNjgzNjI5MgJfMgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDM2Mzc0MzY0ODkJAQ9yZXBsZW5pc2hCeVR5cGUKBQVwVHlwZQUEcG9vbAUITE9BTl9GRUUFB3BtdEFsbEEFA0FJZAUHcG10QWxsQgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAp1c2VyU3Rha2VkCAUNJHQwMzYzNzQzNjQ4OQJfMQQHYXhseUZlZQgFDSR0MDM2Mzc0MzY0ODkCXzIEBnBvc051bQkBGGdldE5ld1VzZXJQb3NpdGlvbk51bWJlcgEFBHVzZXIEDWJvcnJvd0VudHJpZXMJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQURa1VzZXJCb3Jyb3dBbW91bnQFCGJ3QW1vdW50CQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUSa1VzZXJCb3Jyb3dBc3NldElkBQdid0Fzc2V0BQNuaWwEB2VudHJpZXMJARByZXBsZW5pc2hFbnRyaWVzCAUEcG9vbAUEdXNlcgUKdXNlclN0YWtlZAUHYXhseUZlZQUGcG9zTnVtBQdzaGFyZUlkBQVwVHlwZQYEDSR0MDM2ODQ5MzY5NjQJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzNjg0OTM2OTY0Al8xBAh3QW1vdW50QggFDSR0MDM2ODQ5MzY5NjQCXzIJAJQKAgkAzQgCCQDOCAIJAM4IAgUHZW50cmllcwkBDmdldEN1cnNFbnRyaWVzBAUDQUlkBQNCSWQFB3NoYXJlSWQJAMwIAgkApAMBBQh3QW1vdW50QQkAzAgCCQCkAwEFCHdBbW91bnRCBQNuaWwFDWJvcnJvd0VudHJpZXMJAQtEZWxldGVFbnRyeQEJAKwCAgUJcmVxdWVzdElkBQprUmVxdWVzdElkBQp1c2VyU3Rha2VkAWkBCWxpcXVpZGF0ZQMEdXNlcgVwb3NJZA9saXF1aWRhdGVBbW91bnQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQEcG9vbAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgkArAICCQCsAgIFBHVzZXICAV8FBXBvc0lkBRFrVXNlclBvc2l0aW9uUG9vbAILbm8gcG9zaXRpb24EBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzNzQ1ODM3NTQ4CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDM3NDU4Mzc1NDgCXzEEA0JJZAgFDSR0MDM3NDU4Mzc1NDgCXzIEBGJhbEEIBQ0kdDAzNzQ1ODM3NTQ4Al8zBARiYWxCCAUNJHQwMzc0NTgzNzU0OAJfNAQHc2hhcmVJZAgFDSR0MDM3NDU4Mzc1NDgCXzUEBmFtb3VudAkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ9saXF1aWRhdGVBbW91bnQEDGJvcnJvd0Ftb3VudAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRFrVXNlckJvcnJvd0Ftb3VudAQLYm9ycm93QXNzZXQJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUSa1VzZXJCb3Jyb3dBc3NldElkBA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sBQVwb3NJZAkAZgIFDGJvcnJvd0Ftb3VudAAAAwkAAAIFDGJvcnJvd0Ftb3VudAAACQACAQIrWW91IGNhbid0IGxpcXVpZGF0ZSBwb3NpdGlvbiB3aXRob3V0IGJvcnJvdwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRVrVXNlclBvc2l0aW9uSW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xUb3RhbExvYW4JAGUCCQEZZ2V0UG9vbFRvdGFsU2hhcmVXaXRoTG9hbgEFBHBvb2wFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkBEWdldFBvb2xUb3RhbFNoYXJlAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFDWtVc2VyUG9zaXRpb24JAGUCBQ91c2VyQ2FuV2l0aGRyYXcFD2xpcXVpZGF0ZUFtb3VudAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCAUBaQZjYWxsZXIFBmFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBaQEIc3RvcExvc3MEBHVzZXIFcG9zSWQEcG9vbAdhc3NldElkCQELdmFsdWVPckVsc2UCCQELaXNBZG1pbkNhbGwBBQFpBBB0b2tlbk9yYWNsZVByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQVwb3NJZAIBXwUEcG9vbAIBXwUHYXNzZXRJZAUNa1VzZXJTdG9wTG9zcwkAAgECCE5vIGVudHJ5CQDNCAIJAQ53aXRoZHJhd1RvVXNlcgQJAKUIAQgFAWkGY2FsbGVyBQRwb29sCQCkAwEFBXBvc0lkBgkBC0RlbGV0ZUVudHJ5AQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzAWkBEmNhcGl0YWxpemVFeEtlZXBlcgwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDM5MzExMzk1MDUDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTMxMTM5NTA1Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTMxMTM5NTA1Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQgEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCXJvdXRlc1N0cgxtaW5Ub1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQNJHQwNDAxOTA0MDM4NAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQwMTkwNDAzODQCXzEEDGNsYWltZWRBc3NldAgFDSR0MDQwMTkwNDAzODQCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlUHV6emxlBgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCXJvdXRlc1N0cgUMbWluVG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFN3b3BGaQwEcG9vbAR0eXBlCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCmV4Y2hhbmdlcnMOZXhjaGFuZ2Vyc1R5cGUFYXJnczEFYXJnczIRcm91dGluZ0Fzc2V0c0tleXMSbWluQW1vdW50VG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEDSR0MDQxMTM1NDEzMjkDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MTEzNTQxMzI5Al8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MTEzNTQxMzI5Al8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVN3b3BGaQoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQpleGNoYW5nZXJzBQ5leGNoYW5nZXJzVHlwZQUFYXJnczEFBWFyZ3MyBRFyb3V0aW5nQXNzZXRzS2V5cwUSbWluQW1vdW50VG9SZWNlaXZlBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBC2luaXROZXdQb29sCQR0eXBlCHBvb2xBZGRyC2luRmVlTm9Mb2FuCWluRmVlTG9hbgxjYXBGZWVOb0xvYW4OY2FwRmVlV2l0aExvYW4Rc3RvcGxvc3NGZWVOb0xvYW4Tc3RvcGxvc3NGZWVXaXRoTG9hbgljYW5Cb3Jyb3cJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkDAwkBAiE9AgUEdHlwZQUHU0ZfUE9PTAkBAiE9AgUEdHlwZQUHV1hfUE9PTAcJAAIBAgpXcm9uZyB0eXBlBA0kdDA0MjA3MDQyMTY0CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUIcG9vbEFkZHIFBHR5cGUEA2FJZAgFDSR0MDQyMDcwNDIxNjQCXzEEA2JJZAgFDSR0MDQyMDcwNDIxNjQCXzIEBGFCYWwIBQ0kdDA0MjA3MDQyMTY0Al8zBARiQmFsCAUNJHQwNDIwNzA0MjE2NAJfNAQHc2hhcmVJZAgFDSR0MDQyMDcwNDIxNjQCXzUJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgULaW5GZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEmtBeGx5SW5GZWVXaXRoTG9hbgUJaW5GZWVMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrQXhseU5vTG9hbkNhcEZlZQUMY2FwRmVlTm9Mb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrQXhseVdpdGhMb2FuQ2FwRmVlBQ5jYXBGZWVXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQURc3RvcGxvc3NGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFFGtBeGx5U3RvcExvc3NMb2FuRmVlBRNzdG9wbG9zc0ZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRFrUG9vbEludGVyZXN0TG9hbgAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQVrUG9vbAUIcG9vbEFkZHIFBHR5cGUJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICBQdzaGFyZUlkBQprU2hhcmVQb29sBQhwb29sQWRkcgkAzAgCCQEMQm9vbGVhbkVudHJ5AgkArAICBQhwb29sQWRkcgUOa1Bvb2xDYW5Cb3Jyb3cFCWNhbkJvcnJvdwUDbmlsAQJ0eAEGdmVyaWZ5AAkA9AMDCAUCdHgJYm9keUJ5dGVzCQCRAwIIBQJ0eAZwcm9vZnMAAAgFAnR4D3NlbmRlclB1YmxpY0tlecyC8gY=", "height": 2659903, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 4uCgi9fCunMPoQfmBHk13j8x7aQY2QPNforZqdh9Grmf Next: CKegv3nBeZXNT8TaH5TS7f6RFSrBSmHpfcoQAf9CH8i2 Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "SF"
55
66 let b = "WX"
77
88 let c = "capNoLoan"
99
1010 let d = "capLoan"
1111
1212 let e = "stopLossNoLoan"
1313
1414 let f = "stopLossLoan"
1515
1616 let g = "loan"
1717
1818 let h = "noLoan"
1919
2020 let i = "noFee"
2121
2222 let j = 100000000
2323
2424 let k = 10000000000
2525
2626 let l = toBigInt(10000000000000000)
2727
2828 let m = 1000000
2929
3030 let n = "A_asset_balance"
3131
3232 let o = "B_asset_balance"
3333
3434 let p = "A_asset_id"
3535
3636 let q = "B_asset_id"
3737
3838 let r = "share_asset_id"
3939
4040 let s = "share_asset_supply"
4141
4242 let t = "commission"
4343
4444 let u = "_user_position"
4545
4646 let v = "_user_position_pool"
4747
4848 let w = "_user_position_borrow_amount"
4949
5050 let x = "_user_position_borrow_asset_id"
5151
5252 let y = "_user_position_number"
5353
5454 let z = "_user_position_interest"
5555
5656 let A = "_pool_total"
5757
5858 let B = "_pool_total_loan"
5959
6060 let C = "_pool_interest_loan"
6161
6262 let D = "_pool_interest_no_loan"
6363
6464 let E = "_pool_can_borrow"
6565
6666 let F = "_axly_fee_without_loan"
6767
6868 let G = "_axly_fee_with_loan"
6969
7070 let H = "_axly_fee_cap_with_loan"
7171
7272 let I = "_axly_fee_cap_no_loan"
7373
7474 let J = "_axly_fee_stoploss_with_loan"
7575
7676 let K = "_axly_fee_stoploss_no_loan"
7777
7878 let L = "_request_id"
7979
8080 let M = "requests_iter"
8181
8282 let N = "pool_"
8383
8484 let O = "_pool_share_id"
8585
8686 let P = "_pool_cap_change"
8787
8888 let Q = "last_price"
8989
9090 let R = "_twap5B"
9191
9292 let S = "_stop_loss"
9393
9494 let T = "axly_money_box"
9595
9696 let U = "swopfi_farming_addr"
9797
9898 let V = "lend_service_addr"
9999
100100 let W = "admin_call_pub_key"
101101
102102 let X = "price_oracle"
103103
104104 let Y = "exchange_contract"
105105
106106 let Z = "wx_swap_contract"
107107
108108 let aa = "swop_id"
109109
110110 let ab = "wx_id"
111111
112112 let ac = Address(fromBase58String(valueOrErrorMessage(getString(this, T), "No axly moneyBox address")))
113113
114114 let ad = Address(fromBase58String(valueOrErrorMessage(getString(this, Y), "No exchange contract address")))
115115
116116 let ae = Address(fromBase58String(valueOrErrorMessage(getString(this, X), "No price oracle address")))
117117
118118 let af = Address(fromBase58String(valueOrErrorMessage(getString(this, Z), "No wx swap address")))
119119
120120 let ag = fromBase58String(valueOrErrorMessage(getString(this, aa), "No swop id"))
121121
122122 let ah = fromBase58String(valueOrErrorMessage(getString(this, ab), "No wx id"))
123123
124124 func ai () = Address(fromBase58String(valueOrErrorMessage(getString(this, V), "Can't get lend service addr")))
125125
126126
127127 func aj () = addressFromPublicKey(fromBase58String(valueOrErrorMessage(getString(this, W), "Can't get admin addr")))
128128
129129
130130 func ak (al) = if ((al.caller == aj()))
131131 then unit
132132 else throw("Only admin can call this function")
133133
134134
135135 func am (al) = if ((al.caller == this))
136136 then unit
137137 else throw("Only contract itself can call this function")
138138
139139
140140 func an (al) = if ((al.caller == ai()))
141141 then unit
142142 else throw("Only land contract can call this function")
143143
144144
145145 func ao (ap) = {
146146 let aq = ap
147147 if ($isInstanceOf(aq, "ByteVector"))
148148 then {
149149 let ar = aq
150150 assetBalance(this, ar)
151151 }
152152 else if ($isInstanceOf(aq, "Unit"))
153153 then {
154154 let as = aq
155155 wavesBalance(this).available
156156 }
157157 else throw("Match error")
158158 }
159159
160160
161161 func at (au) = $Tuple2(valueOrErrorMessage(getInteger(au, n), "Can't get pool A asset balance"), valueOrErrorMessage(getInteger(au, o), "Can't get pool B asset balance"))
162162
163163
164164 func av (au,aw,ax) = $Tuple2({
165165 let ay = invoke(au, "getAccBalanceWrapperREADONLY", [aw], nil)
166166 if ($isInstanceOf(ay, "Int"))
167167 then ay
168168 else throw(($getType(ay) + " couldn't be cast to Int"))
169169 }, {
170170 let ay = invoke(au, "getAccBalanceWrapperREADONLY", [ax], nil)
171171 if ($isInstanceOf(ay, "Int"))
172172 then ay
173173 else throw(($getType(ay) + " couldn't be cast to Int"))
174174 })
175175
176176
177177 func az (au,aA,aw,ax) = if ((aA == a))
178178 then at(au)
179179 else if ((aA == b))
180180 then av(au, aw, ax)
181181 else throw("Wrong pool type")
182182
183183
184184 func aB (au) = {
185185 let aC = at(au)
186186 if ((aC == aC))
187187 then {
188188 let aD = aC._2
189189 let aE = aC._1
190190 $Tuple5(valueOrErrorMessage(getString(au, p), "Can't get pool A asset id"), valueOrErrorMessage(getString(au, q), "Can't get pool B asset id"), aE, aD, valueOrErrorMessage(getString(au, r), "Can't get share asset id"))
191191 }
192192 else throw("Strict value is not equal to itself.")
193193 }
194194
195195
196196 func aF (au) = {
197197 let aG = {
198198 let ay = invoke(au, "getPoolConfigWrapperREADONLY", nil, nil)
199199 if ($isInstanceOf(ay, "List[Any]"))
200200 then ay
201201 else throw(($getType(ay) + " couldn't be cast to List[Any]"))
202202 }
203203 if ((aG == aG))
204204 then {
205205 let aw = valueOrErrorMessage({
206206 let ay = aG[4]
207207 if ($isInstanceOf(ay, "String"))
208208 then ay
209209 else unit
210210 }, "Can't get pool A asset id")
211211 let ax = valueOrErrorMessage({
212212 let ay = aG[5]
213213 if ($isInstanceOf(ay, "String"))
214214 then ay
215215 else unit
216216 }, "Can't get pool B asset id")
217217 let aH = valueOrErrorMessage({
218218 let ay = aG[3]
219219 if ($isInstanceOf(ay, "String"))
220220 then ay
221221 else unit
222222 }, "Can't get pool LP asset id")
223223 let aI = av(au, aw, ax)
224224 if ((aI == aI))
225225 then {
226226 let aD = aI._2
227227 let aE = aI._1
228228 $Tuple5(aw, ax, aE, aD, aH)
229229 }
230230 else throw("Strict value is not equal to itself.")
231231 }
232232 else throw("Strict value is not equal to itself.")
233233 }
234234
235235
236236 func aJ (au,aA) = if ((aA == a))
237237 then aB(au)
238238 else if ((aA == b))
239239 then aF(au)
240240 else throw("Wrong pool type")
241241
242242
243243 func aK (au,aA,aH) = if ((aA == a))
244244 then valueOrErrorMessage(getInteger(au, s), "Can't get share asset supply")
245245 else if ((aA == b))
246246 then valueOrErrorMessage(assetInfo(fromBase58String(aH)), "Wrong ShareId").quantity
247247 else throw("Wrong pool type")
248248
249249
250250 func aL (aM) = valueOrElse(getInteger(this, (aM + A)), 0)
251251
252252
253253 func aN (aM) = valueOrElse(getInteger(this, (aM + B)), 0)
254254
255255
256256 func aO (aP) = (valueOrElse(getInteger(this, (aP + y)), 0) + 1)
257257
258258
259259 func aQ (aM,aR) = if ((aR == d))
260260 then getIntegerValue(this, (aM + I))
261261 else if ((aR == c))
262262 then getIntegerValue(this, (aM + H))
263263 else if ((aR == g))
264264 then getIntegerValue(this, (aM + G))
265265 else if ((aR == h))
266266 then getIntegerValue(this, (aM + F))
267267 else if ((aR == i))
268268 then 0
269269 else throw("Wrong fee type")
270270
271271
272272 func aS () = Address(fromBase58String(valueOrErrorMessage(getString(this, U), "Can't get swopfi farming addr")))
273273
274274
275275 func aT (au) = {
276276 let aU = Address(fromBase58String(valueOrErrorMessage(getString(au, "%s__factoryContract"), "Can't get WX factory contract addr")))
277277 let aV = split(valueOrErrorMessage(getString(aU, "%s__factoryConfig"), "Can't get WX factory cfg"), "__")
278278 Address(fromBase58String(aV[1]))
279279 }
280280
281281
282282 func aW (ap) = {
283283 let aq = ap
284284 if ($isInstanceOf(aq, "ByteVector"))
285285 then {
286286 let ar = aq
287287 toBase58String(ar)
288288 }
289289 else if ($isInstanceOf(aq, "Unit"))
290290 then {
291291 let as = aq
292292 "WAVES"
293293 }
294294 else throw("Not Asset id")
295295 }
296296
297297
298298 func aX (ap) = if ((ap == "WAVES"))
299299 then unit
300300 else fromBase58String(ap)
301301
302302
303303 func aY (ap) = if ((ap == "WAVES"))
304304 then 8
305305 else {
306306 let aq = assetInfo(fromBase58String(ap))
307307 if ($isInstanceOf(aq, "Asset"))
308308 then {
309309 let aZ = aq
310310 aZ.decimals
311311 }
312312 else throw("Can't find asset")
313313 }
314314
315315
316316 func ba (ap) = pow(10, 0, aY(ap), 0, 0, DOWN)
317317
318318
319319 func bb (bc) = {
320320 func bd (be,ap) = {
321321 let bf = getIntegerValue(ae, (ap + R))
322322 (be :+ bf)
323323 }
324324
325325 let bg = bc
326326 let bh = size(bg)
327327 let bi = nil
328328 func bj (bk,bl) = if ((bl >= bh))
329329 then bk
330330 else bd(bk, bg[bl])
331331
332332 func bm (bk,bl) = if ((bl >= bh))
333333 then bk
334334 else throw("List size exceeds 50")
335335
336336 bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20), 21), 22), 23), 24), 25), 26), 27), 28), 29), 30), 31), 32), 33), 34), 35), 36), 37), 38), 39), 40), 41), 42), 43), 44), 45), 46), 47), 48), 49), 50)
337337 }
338338
339339
340340 func bn (aH) = {
341341 let aM = valueOrErrorMessage(getString(this, (aH + O)), "Can't find pool addr by share id")
342342 let au = Address(fromBase58String(aM))
343343 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
344344 let bp = aJ(au, bo)
345345 let aw = bp._1
346346 let ax = bp._2
347347 let bq = bp._3
348348 let br = bp._4
349349 let bs = getIntegerValue(ae, (aw + R))
350350 let bt = getIntegerValue(ae, (ax + R))
351351 let bu = aK(au, bo, aH)
352352 let bv = pow(10, 0, aY(aw), 0, 0, DOWN)
353353 let bw = pow(10, 0, aY(ax), 0, 0, DOWN)
354354 let bx = pow(10, 0, aY(aH), 0, 0, DOWN)
355355 let by = (fraction(bq, bs, bv) + fraction(br, bt, bw))
356356 fraction(by, bx, bu)
357357 }
358358
359359
360360 func bz (bA) = {
361361 func bd (be,aH) = (be :+ bn(aH))
362362
363363 let bg = bA
364364 let bh = size(bg)
365365 let bi = nil
366366 func bj (bk,bl) = if ((bl >= bh))
367367 then bk
368368 else bd(bk, bg[bl])
369369
370370 func bm (bk,bl) = if ((bl >= bh))
371371 then bk
372372 else throw("List size exceeds 20")
373373
374374 bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
375375 }
376376
377377
378378 func bB (aw,ax,aH,bC) = {
379379 let bD = bb([aw, ax])
380380 let bE = bn(aH)
381381 let bF = ([toString(bD[0]), toString(bD[1]), toString(bE)] ++ bC)
382382 [StringEntry(Q, makeString(bF, ","))]
383383 }
384384
385385
386386 func bG (bo,au,bH,aw,bI,ax,aE,aD) = if ((bo == a))
387387 then {
388388 let bJ = {
389389 let ay = invoke(au, "callFunction", ["calcLPReplenishTwoTokensREADONLY", [toString(bH), toString(bI)]], nil)
390390 if ($isInstanceOf(ay, "List[Any]"))
391391 then ay
392392 else throw(($getType(ay) + " couldn't be cast to List[Any]"))
393393 }
394394 if ((bJ == bJ))
395395 then $Tuple5({
396396 let ay = bJ[3]
397397 if ($isInstanceOf(ay, "Int"))
398398 then ay
399399 else throw(($getType(ay) + " couldn't be cast to Int"))
400400 }, {
401401 let ay = bJ[4]
402402 if ($isInstanceOf(ay, "Int"))
403403 then ay
404404 else throw(($getType(ay) + " couldn't be cast to Int"))
405405 }, {
406406 let ay = bJ[1]
407407 if ($isInstanceOf(ay, "Int"))
408408 then ay
409409 else throw(($getType(ay) + " couldn't be cast to Int"))
410410 }, aW(bJ[2]), {
411411 let ay = bJ[0]
412412 if ($isInstanceOf(ay, "Int"))
413413 then ay
414414 else throw(($getType(ay) + " couldn't be cast to Int"))
415415 })
416416 else throw("Strict value is not equal to itself.")
417417 }
418418 else {
419419 let bK = $Tuple2(split({
420420 let ay = invoke(au, "evaluatePutByAmountAssetREADONLY", [bH], nil)
421421 if ($isInstanceOf(ay, "String"))
422422 then ay
423423 else throw(($getType(ay) + " couldn't be cast to String"))
424424 }, "__"), split({
425425 let ay = invoke(au, "evaluatePutByPriceAssetREADONLY", [bI], nil)
426426 if ($isInstanceOf(ay, "String"))
427427 then ay
428428 else throw(($getType(ay) + " couldn't be cast to String"))
429429 }, "__"))
430430 if ((bK == bK))
431431 then {
432432 let bL = bK._2
433433 let bM = bK._1
434434 let bN = parseIntValue(bM[1])
435435 let bO = parseIntValue(bL[1])
436436 if ((bO > bN))
437437 then {
438438 let bP = parseIntValue(bM[8])
439439 $Tuple5(bH, bP, (bI - bP), ax, bO)
440440 }
441441 else {
442442 let bP = parseIntValue(bL[7])
443443 $Tuple5(bP, bI, (bH - bP), aw, bN)
444444 }
445445 }
446446 else throw("Strict value is not equal to itself.")
447447 }
448448
449449
450450 func bQ (au,bo,bH,aw,bI,ax) = {
451451 let bR = [AttachedPayment(aX(aw), bH), AttachedPayment(aX(ax), bI)]
452452 if ((bo == a))
453453 then invoke(au, "callFunction", ["replenishWithTwoTokens", ["false", "0"]], bR)
454454 else invoke(au, "put", [1000000, false], bR)
455455 }
456456
457457
458458 func bS (au,bo,bP,bT) = {
459459 let bR = [AttachedPayment(aX(bT), bP)]
460460 if ((bo == a))
461461 then invoke(au, "callFunction", ["replenishWithOneToken", ["0", "false", "0"]], bR)
462462 else invoke(au, "putOneTkn", [0, false], bR)
463463 }
464464
465465
466466 func bU (aM,bo,aH,bV) = {
467467 let bR = [AttachedPayment(fromBase58String(aH), bV)]
468468 if ((bo == a))
469469 then invoke(aS(), "lockShareTokens", [aM, 0], bR)
470470 else invoke(aT(addressFromStringValue(aM)), "stake", nil, bR)
471471 }
472472
473473
474474 func bW (aM,bo,aH,bV) = {
475475 let bX = if ((bo == a))
476476 then $Tuple3(aS(), "withdrawShareTokens", [aM, bV])
477477 else if ((bo == b))
478478 then $Tuple3(aT(Address(fromBase58String(aM))), "unstake", [aH, bV])
479479 else throw("Wrong pool type")
480480 let bY = bX._1
481481 let bZ = bX._2
482482 let ca = bX._3
483483 let cb = invoke(bY, bZ, ca, nil)
484484 if ((cb == cb))
485485 then bV
486486 else throw("Strict value is not equal to itself.")
487487 }
488488
489489
490490 func cc (aM,cd,ce,aE,aD,cf,cg) = {
491491 let au = Address(fromBase58String(aM))
492492 let ch = 1000000
493493 let ci = getIntegerValue(au, t)
494494 let cj = fraction(cf, ch, (ch - ci), CEILING)
495495 let ck = if ((cg == cd))
496496 then {
497497 let cl = fraction(cj, aD, (aE - cj), CEILING)
498498 $Tuple2(cl, ce)
499499 }
500500 else {
501501 let cl = fraction(cj, aE, (aD - cj), CEILING)
502502 $Tuple2(cl, cd)
503503 }
504504 let cl = ck._1
505505 let cm = ck._2
506506 $Tuple2(cm, cl)
507507 }
508508
509509
510510 func cn (aM,cd,ce,aE,aD,cf,cg) = {
511511 let co = getIntegerValue(af, "%s__protocolFee")
512512 let cp = getIntegerValue(af, "%s__poolFee")
513513 let cq = toBigInt(100000000)
514514 let cr = if ((cg == cd))
515515 then {
516516 let cl = fraction(cf, aD, (aE - cf))
517517 $Tuple2(cl, ce)
518518 }
519519 else {
520520 let cl = fraction(cf, aE, (aD - cf))
521521 $Tuple2(cl, cd)
522522 }
523523 let cl = cr._1
524524 let cm = cr._2
525525 let cs = toInt(fraction(toBigInt(cl), cq, (cq - toBigInt((co + cp))), CEILING))
526526 $Tuple2(cm, cs)
527527 }
528528
529529
530530 func ct (aA,aM,cd,ce,aE,aD,cf,cg) = if ((aA == a))
531531 then {
532532 let cu = cc(aM, cd, ce, aE, aD, cf, cg)
533533 let cm = cu._1
534534 let cl = cu._2
535535 invoke(addressFromStringValue(aM), "callFunction", ["exchange", [toString(cf)]], [AttachedPayment(aX(cm), cl)])
536536 }
537537 else {
538538 let cv = cn(aM, cd, ce, aE, aD, cf, cg)
539539 let cm = cv._1
540540 let cl = cv._2
541541 invoke(af, "swap", [cf, cg, toString(this)], [AttachedPayment(aX(cm), cl)])
542542 }
543543
544544
545545 func cw (au,bo,aH,cx) = {
546546 let cy = if ((bo == a))
547547 then {
548548 let cb = {
549549 let ay = invoke(au, "callFunction", ["withdrawREADONLY", [toString(cx)]], nil)
550550 if ($isInstanceOf(ay, "(Int, Int)"))
551551 then ay
552552 else throw(($getType(ay) + " couldn't be cast to (Int, Int)"))
553553 }
554554 if ((cb == cb))
555555 then $Tuple2(cb._1, cb._2)
556556 else throw("Strict value is not equal to itself.")
557557 }
558558 else {
559559 let cb = split({
560560 let ay = invoke(au, "evaluateGetREADONLY", [aH, cx], nil)
561561 if ($isInstanceOf(ay, "String"))
562562 then ay
563563 else throw(($getType(ay) + " couldn't be cast to String"))
564564 }, "__")
565565 if ((cb == cb))
566566 then $Tuple2(parseIntValue(cb[1]), parseIntValue(cb[2]))
567567 else throw("Strict value is not equal to itself.")
568568 }
569569 let cz = cy._1
570570 let cA = cy._2
571571 $Tuple2(cz, cA)
572572 }
573573
574574
575575 func cB (aA,aM) = if ((aA == a))
576576 then {
577577 let cC = ao(ag)
578578 if ((cC == cC))
579579 then {
580580 let cb = invoke(aS(), "claim", [aM], nil)
581581 if ((cb == cb))
582582 then {
583583 let cD = ao(ag)
584584 $Tuple2((cD - cC), ag)
585585 }
586586 else throw("Strict value is not equal to itself.")
587587 }
588588 else throw("Strict value is not equal to itself.")
589589 }
590590 else if ((aA == b))
591591 then {
592592 let cC = ao(ah)
593593 if ((cC == cC))
594594 then {
595595 let cb = invoke(aT(Address(fromBase58String(aM))), "claimWX", [aM], nil)
596596 if ((cb == cb))
597597 then {
598598 let cD = ao(ah)
599599 $Tuple2((cD - cC), ah)
600600 }
601601 else throw("Strict value is not equal to itself.")
602602 }
603603 else throw("Strict value is not equal to itself.")
604604 }
605605 else throw("Wrong pool type")
606606
607607
608608 func cE (bo,aM,aR,bH,aw,bI,ax,aE,aD,cF) = {
609609 let cG = ao(fromBase58String(cF))
610610 if ((cG == cG))
611611 then {
612612 let au = addressFromStringValue(aM)
613613 let cH = if (if ((bH > 0))
614614 then (bI > 0)
615615 else false)
616616 then {
617617 let cI = bG(bo, au, bH, aw, bI, ax, aE, aD)
618618 let cJ = cI._1
619619 let cK = cI._2
620620 let cL = cI._3
621621 let cM = cI._4
622622 let cb = bQ(au, bo, cJ, aw, cK, ax)
623623 if ((cb == cb))
624624 then $Tuple2(cL, cM)
625625 else throw("Strict value is not equal to itself.")
626626 }
627627 else if ((bH > 0))
628628 then $Tuple2(bH, aw)
629629 else if ((bI > 0))
630630 then $Tuple2(bI, ax)
631631 else throw("pmts must be > 0")
632632 let cL = cH._1
633633 let cM = cH._2
634634 let cb = if ((cL > 0))
635635 then bS(au, bo, cL, cM)
636636 else nil
637637 if ((cb == cb))
638638 then {
639639 let cN = ao(fromBase58String(cF))
640640 let cO = (cN - cG)
641641 let cP = fraction(cO, aQ(aM, aR), m)
642642 let cQ = (cO - cP)
643643 if ((0 >= cQ))
644644 then throw("amount of staked sharetokens must be > 0")
645645 else {
646646 let cR = bU(aM, bo, cF, cQ)
647647 if ((cR == cR))
648648 then $Tuple2(cQ, cP)
649649 else throw("Strict value is not equal to itself.")
650650 }
651651 }
652652 else throw("Strict value is not equal to itself.")
653653 }
654654 else throw("Strict value is not equal to itself.")
655655 }
656656
657657
658658 func cS (aM,aP,cT,cP,cU,aH,aA,cV) = {
659659 let cW = aL(aM)
660660 let cX = aN(aM)
661661 let cY = if (cV)
662662 then $Tuple2(getIntegerValue(this, (aM + C)), (cX + cT))
663663 else $Tuple2(getIntegerValue(this, (aM + D)), cX)
664664 let cZ = cY._1
665665 let da = cY._2
666666 [IntegerEntry((aM + A), (cW + cT)), IntegerEntry((aM + B), da), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + u), cT), IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + z), cZ), StringEntry((((aP + "_") + toString(cU)) + v), aM), IntegerEntry((aP + y), cU), ScriptTransfer(ac, cP, fromBase58String(aH))]
667667 }
668668
669669
670670 func db (dc,dd,de,df,dg,dh,di,dj,dk,dl) = {
671671 let dm = ao(aX(dc))
672672 if ((dm == dm))
673673 then {
674674 let cb = invoke(ad, "swap", [df, dg, dh, di, dj, dk, dl], [AttachedPayment(de, dd)])
675675 if ((cb == cb))
676676 then (ao(aX(dc)) - dm)
677677 else throw("Strict value is not equal to itself.")
678678 }
679679 else throw("Strict value is not equal to itself.")
680680 }
681681
682682
683683 func dn (dc,dd,de,do,dp,dl) = {
684684 let dm = ao(aX(dc))
685685 if ((dm == dm))
686686 then {
687687 let cb = invoke(ad, "puzzleSwap", [do, dp, dl], [AttachedPayment(de, dd)])
688688 if ((cb == cb))
689689 then (ao(aX(dc)) - dm)
690690 else throw("Strict value is not equal to itself.")
691691 }
692692 else throw("Strict value is not equal to itself.")
693693 }
694694
695695
696696 func dq (dc,dd,de,dr,ds,dt,du,dv,dw,dl) = {
697697 let dm = ao(aX(dc))
698698 if ((dm == dm))
699699 then {
700700 let cb = invoke(ad, "swopfiSwap", [dr, ds, dt, du, dv, dw, dl], [AttachedPayment(de, dd)])
701701 if ((cb == cb))
702702 then (ao(aX(dc)) - dm)
703703 else throw("Strict value is not equal to itself.")
704704 }
705705 else throw("Strict value is not equal to itself.")
706706 }
707707
708708
709709 func dx (aM,bo,dy,dz) = {
710710 let au = Address(fromBase58String(aM))
711711 let dA = aJ(au, bo)
712712 let dB = dA._1
713713 let dC = dA._2
714714 let aE = dA._3
715715 let aD = dA._4
716716 let aH = dA._5
717717 if (if ((dy != dB))
718718 then (dy != dC)
719719 else false)
720720 then throw("Wrong asset")
721721 else {
722722 let dD = if ((dy == dB))
723723 then $Tuple2(dz, 0)
724724 else $Tuple2(0, dz)
725725 let bH = dD._1
726726 let bI = dD._2
727727 let dE = cE(bo, aM, i, bH, dB, bI, dC, aE, aD, aH)
728728 let cT = dE._1
729729 let dF = dE._2
730730 let dG = valueOrElse(getInteger(this, (aM + C)), 0)
731731 let dH = valueOrElse(getInteger(this, (aM + D)), 0)
732732 let dI = aL(aM)
733733 let dJ = aN(aM)
734734 let dK = fraction(dJ, j, dI)
735735 let dL = fraction(cT, dK, j)
736736 let dM = (cT - dL)
737737 let dN = if ((dJ > 0))
738738 then (dG + fraction(dL, k, dJ))
739739 else 0
740740 let dO = if (((dI - dJ) > 0))
741741 then (dH + fraction(dM, k, (dI - dJ)))
742742 else 0
743743 let dP = fraction(dL, aQ(aM, d), m)
744744 let dQ = fraction(dM, aQ(aM, c), m)
745745 let dR = bW(aM, bo, aH, (dP + dQ))
746746 if ((dR == dR))
747747 then ([IntegerEntry((aM + C), dN), IntegerEntry((aM + D), dO), IntegerEntry((aM + A), ((dI + cT) - dR)), IntegerEntry((aM + B), ((dJ + dL) - dP)), ScriptTransfer(ac, (dP + dQ), fromBase58String(aH))] ++ bB(dB, dC, aH, nil))
748748 else throw("Strict value is not equal to itself.")
749749 }
750750 }
751751
752752
753753 func dS (aM,cx,dT,dU) = {
754754 let au = Address(fromBase58String(aM))
755755 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
756756 let dV = aJ(au, bo)
757757 let cd = dV._1
758758 let ce = dV._2
759759 let aE = dV._3
760760 let aD = dV._4
761761 let aH = dV._5
762762 let dW = ao(aX(cd))
763763 if ((dW == dW))
764764 then {
765765 let dX = ao(aX(ce))
766766 if ((dX == dX))
767767 then {
768768 let cb = if ((bo == a))
769769 then invoke(au, "callFunction", ["withdraw", [toString(cx)]], nil)
770770 else {
771771 let cb = bW(aM, bo, aH, cx)
772772 if ((cb == cb))
773773 then invoke(au, "get", nil, [AttachedPayment(aX(aH), cx)])
774774 else throw("Strict value is not equal to itself.")
775775 }
776776 if ((cb == cb))
777777 then {
778778 let dY = ao(aX(cd))
779779 let dZ = ao(aX(ce))
780780 let ea = $Tuple2((dY - dW), (dZ - dX))
781781 let eb = ea._1
782782 let ec = ea._2
783783 let ed = if ((dT > 0))
784784 then {
785785 let ee = if (if ((dU == cd))
786786 then (dT > eb)
787787 else false)
788788 then (dT - eb)
789789 else if (if ((dU == ce))
790790 then (dT > ec)
791791 else false)
792792 then (dT - ec)
793793 else 0
794794 let ef = if ((ee > 0))
795795 then ct(bo, aM, cd, ce, (aE - eb), (aD - ec), ee, dU)
796796 else nil
797797 if ((ef == ef))
798798 then {
799799 let eg = ao(aX(cd))
800800 let eh = ao(aX(ce))
801801 if ((dU == cd))
802802 then $Tuple2(((eg - dW) - dT), (eh - dX))
803803 else $Tuple2((eg - dW), ((eh - dX) - dT))
804804 }
805805 else throw("Strict value is not equal to itself.")
806806 }
807807 else $Tuple2(eb, ec)
808808 let ei = ed._1
809809 let ej = ed._2
810810 $Tuple7(ei, cd, ej, ce, dY, dZ, aH)
811811 }
812812 else throw("Strict value is not equal to itself.")
813813 }
814814 else throw("Strict value is not equal to itself.")
815815 }
816816 else throw("Strict value is not equal to itself.")
817817 }
818818
819819
820820 func ek (aP,aM,el,em) = {
821821 let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
822822 let eo = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + z))
823823 let ep = if (em)
824824 then getIntegerValue(this, (aM + C))
825825 else getIntegerValue(this, (aM + D))
826826 (en + fraction(en, (ep - eo), k))
827827 }
828828
829829
830830 func eq (aP,aM,el,er) = {
831831 let en = valueOrErrorMessage(getInteger(this, (((((aM + "_") + aP) + "_") + el) + u)), "Unknown position")
832832 let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + el) + w)), 0)
833833 let cx = ek(aP, aM, el, (es > 0))
834834 let et = aL(aM)
835835 let eu = Address(fromBase58String(aP))
836836 let dU = valueOrElse(getString(this, (((((aM + "_") + aP) + "_") + el) + x)), "")
837837 let dT = if ((es > 0))
838838 then {
839839 let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + el), dU], nil)
840840 if ($isInstanceOf(ay, "Int"))
841841 then ay
842842 else throw(($getType(ay) + " couldn't be cast to Int"))
843843 }
844844 else 0
845845 let ev = dS(aM, cx, dT, dU)
846846 if ((ev == ev))
847847 then {
848848 let aH = ev._7
849849 let dZ = ev._6
850850 let dY = ev._5
851851 let ce = ev._4
852852 let ew = ev._3
853853 let cd = ev._2
854854 let ex = ev._1
855855 let ey = if ((dT > 0))
856856 then invoke(ai(), "repayFor", [((aP + "_") + el)], [AttachedPayment(aX(dU), dT)])
857857 else 0
858858 if ((ey == ey))
859859 then ([DeleteEntry((((((aM + "_") + aP) + "_") + el) + u)), DeleteEntry((((((aM + "_") + aP) + "_") + el) + z)), IntegerEntry((aM + A), (et - cx)), ScriptTransfer(eu, ex, aX(cd)), ScriptTransfer(eu, ew, aX(ce))] ++ bB(cd, ce, aH, nil))
860860 else throw("Strict value is not equal to itself.")
861861 }
862862 else throw("Strict value is not equal to itself.")
863863 }
864864
865865
866866 func ez (eA) = {
867867 let eB = split(valueOrErrorMessage(getString(this, (eA + L)), ("No request with id " + eA)), ",")
868868 let aP = eB[0]
869869 let aM = eB[1]
870870 let bH = parseIntValue(eB[2])
871871 let dB = eB[3]
872872 let bI = parseIntValue(eB[4])
873873 let dC = eB[5]
874874 let aE = parseIntValue(eB[6])
875875 let aD = parseIntValue(eB[7])
876876 let aH = eB[8]
877877 let eC = eB[9]
878878 let eD = parseIntValue(eB[10])
879879 $Tuple11(aP, aM, bH, dB, bI, dC, aE, aD, aH, eC, eD)
880880 }
881881
882882
883883 func eE (bH,bI,aw,ax,eF,eG) = {
884884 let bs = getIntegerValue(ae, (aw + R))
885885 let bt = getIntegerValue(ae, (ax + R))
886886 let eH = pow(10, 0, aY(aw), 0, 0, DOWN)
887887 let eI = pow(10, 0, aY(ax), 0, 0, DOWN)
888888 let eJ = (fraction(bs, bH, eH) + fraction(bt, bI, eI))
889889 let eK = if ((eG == aw))
890890 then $Tuple2(bs, eH)
891891 else $Tuple2(bt, eI)
892892 let eL = eK._1
893893 let eM = eK._2
894894 fraction(fraction(eJ, (eF - 100), 100), eM, eL)
895895 }
896896
897897
898898 func eN (eO,dB,dC) = if ((size(eO) == 2))
899899 then if ((aW(eO[0].assetId) != dB))
900900 then throw("Wrong payment asset A")
901901 else if ((aW(eO[1].assetId) != dC))
902902 then throw("Wrong payment asset B")
903903 else $Tuple4(eO[0].amount, dB, eO[1].amount, dC)
904904 else if ((size(eO) == 1))
905905 then if ((aW(eO[0].assetId) == dB))
906906 then $Tuple4(eO[0].amount, dB, 0, dC)
907907 else if ((aW(eO[0].assetId) == dC))
908908 then $Tuple4(0, dB, eO[0].amount, dC)
909909 else throw("Wrong payment")
910910 else throw("One or two payments expected")
911911
912912
913913 func eP (aE,aD,eQ,eR) = {
914914 let eS = ((j - fraction(fraction(aD, j, aE), j, fraction(eR, j, eQ))) * 100)
915915 if ((0 > eS))
916916 then (eS * -1)
917917 else eS
918918 }
919919
920920
921921 @Callable(al)
922922 func getShareAssetPriceREADONLY (aH) = {
923923 let eT = bn(aH)
924924 $Tuple2(nil, eT)
925925 }
926926
927927
928928
929929 @Callable(al)
930930 func getUserPositionShareAmountREADONLY (aP,cU) = {
931931 let aM = valueOrErrorMessage(getString(this, (((aP + "_") + cU) + v)), "Unknown position")
932932 let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + cU) + w))
933933 let cx = ek(aP, aM, cU, (es > 0))
934934 $Tuple2(nil, cx)
935935 }
936936
937937
938938
939939 @Callable(al)
940940 func getUserPositionInDollarsREADONLY (aP,eU,cU) = {
941941 func eV (be,aM) = {
942942 let eW = be
943943 let eX = eW._1
944944 let eY = eW._2
945945 let eZ = eW._3
946946 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
947947 let fa = aJ(Address(fromBase58String(aM)), bo)
948948 let dB = fa._1
949949 let dC = fa._2
950950 let aE = fa._3
951951 let aD = fa._4
952952 let aH = fa._5
953953 let es = valueOrElse(getInteger(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + w)), 0)
954954 let cx = ek(aP, aM, cU[eZ], (es > 0))
955955 let eT = bn(aH)
956956 let fb = pow(10, 0, aY(aH), 0, 0, DOWN)
957957 let fc = fraction(cx, eT, fb)
958958 if ((es == 0))
959959 then $Tuple3((eX :+ fc), (eY :+ 0), (eZ + 1))
960960 else {
961961 let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + cU[eZ]) + x))
962962 let dT = {
963963 let ay = invoke(ai(), "getAssetDebt", [false, ((aP + "_") + cU[eZ]), dU], nil)
964964 if ($isInstanceOf(ay, "Int"))
965965 then ay
966966 else throw(($getType(ay) + " couldn't be cast to Int"))
967967 }
968968 let fd = getIntegerValue(ae, (dU + R))
969969 let fe = pow(10, 0, aY(dU), 0, 0, DOWN)
970970 let ff = fraction(dT, fd, fe)
971971 $Tuple3((eX :+ fc), (eY :+ ff), (eZ + 1))
972972 }
973973 }
974974
975975 let fg = {
976976 let bg = eU
977977 let bh = size(bg)
978978 let bi = $Tuple3(nil, nil, 0)
979979 func bj (bk,bl) = if ((bl >= bh))
980980 then bk
981981 else eV(bk, bg[bl])
982982
983983 func bm (bk,bl) = if ((bl >= bh))
984984 then bk
985985 else throw("List size exceeds 20")
986986
987987 bm(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bj(bi, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
988988 }
989989 let fh = fg._1
990990 let dT = fg._2
991991 $Tuple2(nil, $Tuple2(fh, dT))
992992 }
993993
994994
995995
996996 @Callable(al)
997997 func replenish (aM,eF,eG) = if (if ((100 > eF))
998998 then true
999999 else (eF > 300))
10001000 then throw("Leverage can't be <100 and >300")
10011001 else if (if (!(getBooleanValue(this, (aM + E))))
10021002 then (eF > 100)
10031003 else false)
10041004 then throw("You can't borrow in this pool")
10051005 else {
10061006 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
10071007 let fi = aJ(Address(fromBase58String(aM)), bo)
10081008 let dB = fi._1
10091009 let dC = fi._2
10101010 let aE = fi._3
10111011 let aD = fi._4
10121012 let aH = fi._5
10131013 let fj = eN(al.payments, dB, dC)
10141014 let bH = fj._1
10151015 let fk = fj._2
10161016 let bI = fj._3
10171017 let fl = fj._4
10181018 let aP = toString(al.caller)
10191019 let fm = aO(aP)
10201020 if ((eF > 100))
10211021 then {
10221022 let es = eE(bH, bI, fk, fl, eF, eG)
10231023 let eB = makeString([aP, aM, toString(bH), fk, toString(bI), fl, toString(aE), toString(aD), aH, eG, toString(es)], ",")
10241024 let fn = {
10251025 let ay = invoke(this, "createNewRequest", [eB], nil)
10261026 if ($isInstanceOf(ay, "Int"))
10271027 then ay
10281028 else throw(($getType(ay) + " couldn't be cast to Int"))
10291029 }
10301030 if ((fn == fn))
10311031 then {
10321032 let fo = [((aP + "_") + toString(fm)), aH, eG, es, toString(this), "replenishFromLand", toString(valueOrErrorMessage(fn, "Can't create new request"))]
10331033 let cb = reentrantInvoke(ai(), "flashPosition", fo, nil)
10341034 if ((cb == cb))
10351035 then {
10361036 let fp = getIntegerValue(this, (((((aM + "_") + aP) + "_") + toString(fm)) + u))
10371037 let fq = az(Address(fromBase58String(aM)), bo, dB, dC)
10381038 if ((fq == fq))
10391039 then {
10401040 let eR = fq._2
10411041 let eQ = fq._1
10421042 let fr = eP(aE, aD, eQ, eR)
10431043 let fs = cw(Address(fromBase58String(aM)), bo, aH, fp)
10441044 let ft = fs._1
10451045 let fu = fs._2
10461046 $Tuple2(nil, [fr, ft, fu])
10471047 }
10481048 else throw("Strict value is not equal to itself.")
10491049 }
10501050 else throw("Strict value is not equal to itself.")
10511051 }
10521052 else throw("Strict value is not equal to itself.")
10531053 }
10541054 else {
10551055 let fv = cE(bo, aM, h, bH, dB, bI, dC, aE, aD, aH)
10561056 let fp = fv._1
10571057 let dR = fv._2
10581058 let fw = az(Address(fromBase58String(aM)), bo, dB, dC)
10591059 if ((fw == fw))
10601060 then {
10611061 let eR = fw._2
10621062 let eQ = fw._1
10631063 let fr = eP(aE, aD, eQ, eR)
10641064 let fx = cw(Address(fromBase58String(aM)), bo, aH, fp)
10651065 let ft = fx._1
10661066 let fu = fx._2
10671067 $Tuple2((cS(aM, aP, fp, dR, fm, aH, bo, false) ++ bB(dB, dC, aH, [toString(ft), toString(fu)])), [fr, ft, fu])
10681068 }
10691069 else throw("Strict value is not equal to itself.")
10701070 }
10711071 }
10721072
10731073
10741074
10751075 @Callable(al)
10761076 func withdraw (aM,el) = eq(toString(al.caller), aM, toString(el), false)
10771077
10781078
10791079
10801080 @Callable(al)
10811081 func createUpdateStopLoss (el,fy,ap,fz) = {
10821082 let fA = getIntegerValue(ae, (ap + R))
10831083 if (!(isDefined(getInteger(this, (((((fy + "_") + toString(al.caller)) + "_") + toString(el)) + u)))))
10841084 then throw("There are no user position")
10851085 else if ((0 >= fz))
10861086 then throw("Price must be greater than 0")
10871087 else if ((fz > fA))
10881088 then throw("Price must be less than current token price")
10891089 else [IntegerEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S), fz)]
10901090 }
10911091
10921092
10931093
10941094 @Callable(al)
10951095 func deleteStopLoss (el,fy,ap) = if (!(isDefined(getInteger(this, (((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S)))))
10961096 then throw("No entry")
10971097 else [DeleteEntry((((((((toString(al.caller) + "_") + toString(el)) + "_") + fy) + "_") + ap) + S))]
10981098
10991099
11001100
11011101 @Callable(al)
11021102 func init (fB,fC,fD,ae,fE,af,fF,fG,fH) = if (isDefined(getString(T)))
11031103 then throw("Already inited")
11041104 else [StringEntry(T, fB), StringEntry(U, fC), StringEntry(V, fD), StringEntry(X, ae), StringEntry(Y, fE), StringEntry(Z, af), StringEntry(aa, fF), StringEntry(ab, fG), StringEntry(W, fH)]
11051105
11061106
11071107
11081108 @Callable(al)
11091109 func createNewRequest (ca) = valueOrElse(am(al), {
11101110 let fn = (valueOrElse(getInteger(this, M), 0) + 1)
11111111 $Tuple2([StringEntry((toString(fn) + L), ca), IntegerEntry(M, fn)], fn)
11121112 })
11131113
11141114
11151115
11161116 @Callable(al)
11171117 func replenishFromLand (eA) = valueOrElse(an(al), {
11181118 let fI = ez(eA)
11191119 let aP = fI._1
11201120 let aM = fI._2
11211121 let bH = fI._3
11221122 let dB = fI._4
11231123 let bI = fI._5
11241124 let dC = fI._6
11251125 let aE = fI._7
11261126 let aD = fI._8
11271127 let aH = fI._9
11281128 let eC = fI._10
11291129 let eD = fI._11
11301130 if ((size(al.payments) != 1))
11311131 then throw("Wrong payment size")
11321132 else if (if ((aW(al.payments[0].assetId) != eC))
11331133 then true
11341134 else (al.payments[0].amount != eD))
11351135 then throw("Wrong payment")
11361136 else {
11371137 let fJ = if ((dB == eC))
11381138 then $Tuple2((bH + al.payments[0].amount), bI)
11391139 else $Tuple2(bH, (bI + al.payments[0].amount))
11401140 let fK = fJ._1
11411141 let fL = fJ._2
11421142 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Unknown pool")
11431143 let fM = cE(bo, aM, g, fK, dB, fL, dC, aE, aD, aH)
11441144 let fp = fM._1
11451145 let dR = fM._2
11461146 let cU = aO(aP)
11471147 let fN = [IntegerEntry((((((aM + "_") + aP) + "_") + toString(cU)) + w), eD), StringEntry((((((aM + "_") + aP) + "_") + toString(cU)) + x), eC)]
11481148 let fO = cS(aM, aP, fp, dR, cU, aH, bo, true)
11491149 let fP = cw(Address(fromBase58String(aM)), bo, aH, fp)
11501150 let ft = fP._1
11511151 let fu = fP._2
11521152 $Tuple2((((fO ++ bB(dB, dC, aH, [toString(ft), toString(fu)])) ++ fN) :+ DeleteEntry((eA + L))), fp)
11531153 }
11541154 })
11551155
11561156
11571157
11581158 @Callable(al)
11591159 func liquidate (aP,el,fQ) = valueOrElse(an(al), {
11601160 let aM = valueOrErrorMessage(getString(this, (((aP + "_") + el) + v)), "no position")
11611161 let bo = valueOrErrorMessage(getString(this, (N + aM)), "Pool is not inited")
11621162 let fR = aJ(Address(fromBase58String(aM)), bo)
11631163 let dB = fR._1
11641164 let dC = fR._2
11651165 let aE = fR._3
11661166 let aD = fR._4
11671167 let aH = fR._5
11681168 let bV = bW(aM, bo, aH, fQ)
11691169 let es = getIntegerValue(this, (((((aM + "_") + aP) + "_") + el) + w))
11701170 let dU = getStringValue(this, (((((aM + "_") + aP) + "_") + el) + x))
11711171 let cx = ek(aP, aM, el, (es > 0))
11721172 if ((es == 0))
11731173 then throw("You can't liquidate position without borrow")
11741174 else [IntegerEntry((((((aM + "_") + aP) + "_") + el) + z), getIntegerValue(this, (aM + C))), IntegerEntry((aM + B), (aN(aM) - fQ)), IntegerEntry((aM + A), (aL(aM) - fQ)), IntegerEntry((((((aM + "_") + aP) + "_") + el) + u), (cx - fQ)), ScriptTransfer(al.caller, bV, fromBase58String(aH))]
11751175 })
11761176
11771177
11781178
11791179 @Callable(al)
11801180 func stopLoss (aP,el,aM,ap) = valueOrElse(ak(al), {
11811181 let fA = getIntegerValue(ae, (ap + R))
11821182 if (!(isDefined(getInteger(this, (((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))))
11831183 then throw("No entry")
11841184 else (eq(toString(al.caller), aM, toString(el), true) :+ DeleteEntry((((((((aP + "_") + toString(el)) + "_") + aM) + "_") + ap) + S)))
11851185 })
11861186
11871187
11881188
11891189 @Callable(al)
11901190 func capitalizeExKeeper (aM,aA,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
11911191 let fV = if (fU)
11921192 then cB(aA, aM)
11931193 else {
11941194 let fW = if ((aA == a))
11951195 then ag
11961196 else ah
11971197 $Tuple2(fT, fW)
11981198 }
11991199 let fX = fV._1
12001200 let fW = fV._2
12011201 let fY = db(fS, fT, fW, df, dg, dh, di, dj, dk, dl)
12021202 let cL = (fX - fT)
12031203 let fZ = if ((cL > 0))
12041204 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12051205 else nil
12061206 (dx(aM, aA, fS, fY) ++ fZ)
12071207 })
12081208
12091209
12101210
12111211 @Callable(al)
12121212 func capitalizeExPuzzle (aM,aA,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
12131213 let ga = if (fU)
12141214 then cB(aA, aM)
12151215 else {
12161216 let fW = if ((aA == a))
12171217 then ag
12181218 else ah
12191219 $Tuple2(fT, fW)
12201220 }
12211221 let fX = ga._1
12221222 let fW = ga._2
12231223 let fY = dn(fS, fT, fW, do, dp, dl)
12241224 let cL = (fX - fT)
12251225 let fZ = if ((cL > 0))
12261226 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12271227 else nil
12281228 (dx(aM, aA, fS, fY) ++ fZ)
12291229 })
12301230
12311231
12321232
12331233 @Callable(al)
12341234 func capitalizeExSwopFi (aM,aA,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
12351235 let gb = if (fU)
12361236 then cB(aA, aM)
12371237 else {
12381238 let fW = if ((aA == a))
12391239 then ag
12401240 else ah
12411241 $Tuple2(fT, fW)
12421242 }
12431243 let fX = gb._1
12441244 let fW = gb._2
12451245 let fY = dq(fS, fT, fW, dr, ds, dt, du, dv, dw, dl)
12461246 let cL = (fX - fT)
12471247 let fZ = if ((cL > 0))
12481248 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12491249 else nil
12501250 (dx(aM, aA, fS, fY) ++ fZ)
12511251 })
12521252
12531253
12541254
12551255 @Callable(al)
12561256 func initNewPool (aA,au,gc,gd,ge,gf,gg,gh,gi) = valueOrElse(ak(al), if (if ((aA != a))
12571257 then (aA != b)
12581258 else false)
12591259 then throw("Wrong type")
12601260 else {
12611261 let gj = aJ(Address(fromBase58String(au)), aA)
12621262 let aw = gj._1
12631263 let ax = gj._2
12641264 let gk = gj._3
12651265 let gl = gj._4
12661266 let aH = gj._5
12671267 [IntegerEntry((au + F), gc), IntegerEntry((au + G), gd), IntegerEntry((au + H), ge), IntegerEntry((au + I), gf), IntegerEntry((au + J), gg), IntegerEntry((au + K), gh), IntegerEntry((au + C), 0), IntegerEntry((au + D), 0), StringEntry((N + au), aA), StringEntry((aH + O), au), BooleanEntry((au + E), gi)]
12681268 })
12691269
12701270
12711271 @Verifier(gm)
12721272 func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], gm.senderPublicKey)
12731273

github/deemru/w8io/169f3d6 
93.77 ms