tx · CKegv3nBeZXNT8TaH5TS7f6RFSrBSmHpfcoQAf9CH8i2

3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS:  -0.04200000 Waves

2023.07.17 13:04 [2669712] smart account 3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS > SELF 0.00000000 Waves

{ "type": 13, "id": "CKegv3nBeZXNT8TaH5TS7f6RFSrBSmHpfcoQAf9CH8i2", "fee": 4200000, "feeAssetId": null, "timestamp": 1689588284092, "version": 2, "chainId": 84, "sender": "3MvRWw2FPEimFCTGtK7qY9uAJbM7XJ4ZfJS", "senderPublicKey": "HP8sssVq1866F7CaPQJwgFrt6fsqhQjKwM84cL1wjD2a", "proofs": [ "4TTWeMvgz2e6PsWDGaUxjJvKytqjvZNZQNvBnFXZ8NC7ax1B2cXdPujpZ4ADzjeqUE8uhDdMtAqw7dUQPTkts1jj" ], "script": "base64:BgKMAQgCEgMKAQgSBAoCCAgSBQoDCBgYEgUKAwgBCBIECgIIARIGCgQBCAgBEgUKAwEICBILCgkICAgICAgICAgSAwoBCBIDCgEIEgUKAwgIARIGCgQIAQgIEg0KCwgIAQQRGBgRAQEYEgkKBwgIAQQIARgSDQoLCAgBBBgYGBgYARgSCwoJCAgBAQEBAQEEbgAHU0ZfUE9PTAICU0YAB1dYX1BPT0wCAldYAA9DQVBfRkVFX05PX0xPQU4CCWNhcE5vTG9hbgAMQ0FQX0ZFRV9MT0FOAgdjYXBMb2FuABRTVE9QTE9TU19GRUVfTk9fTE9BTgIOc3RvcExvc3NOb0xvYW4ADVNUT1BMT1NTX0xPQU4CDHN0b3BMb3NzTG9hbgAITE9BTl9GRUUCBGxvYW4AC05PX0xPQU5fRkVFAgZub0xvYW4ABk5PX0ZFRQIFbm9GZWUABlNDQUxFOACAwtcvAAdTQ0FMRTEwAIDIr6AlAAdTQ0FMRTE2CQC2AgEAgICE/qbe4REACkZFRV9TQ0FMRTYAwIQ9ABRrU0ZQb29sQUFzc2V0QmFsYW5jZQIPQV9hc3NldF9iYWxhbmNlABRrU0ZQb29sQkFzc2V0QmFsYW5jZQIPQl9hc3NldF9iYWxhbmNlAA9rU0ZQb29sQUFzc2V0SWQCCkFfYXNzZXRfaWQAD2tTRlBvb2xCQXNzZXRJZAIKQl9hc3NldF9pZAAOa1NGUG9vbFNoYXJlSWQCDnNoYXJlX2Fzc2V0X2lkABJrU0ZQb29sU2hhcmVTdXBwbHkCEnNoYXJlX2Fzc2V0X3N1cHBseQAKa1NGUG9vbEZlZQIKY29tbWlzc2lvbgANa1VzZXJQb3NpdGlvbgIOX3VzZXJfcG9zaXRpb24AEWtVc2VyUG9zaXRpb25Qb29sAhNfdXNlcl9wb3NpdGlvbl9wb29sABFrVXNlckJvcnJvd0Ftb3VudAIcX3VzZXJfcG9zaXRpb25fYm9ycm93X2Ftb3VudAASa1VzZXJCb3Jyb3dBc3NldElkAh5fdXNlcl9wb3NpdGlvbl9ib3Jyb3dfYXNzZXRfaWQAEGtVc2VyUG9zaXRpb25OdW0CFV91c2VyX3Bvc2l0aW9uX251bWJlcgAVa1VzZXJQb3NpdGlvbkludGVyZXN0AhdfdXNlcl9wb3NpdGlvbl9pbnRlcmVzdAAKa1Bvb2xUb3RhbAILX3Bvb2xfdG90YWwADmtQb29sVG90YWxMb2FuAhBfcG9vbF90b3RhbF9sb2FuABFrUG9vbEludGVyZXN0TG9hbgITX3Bvb2xfaW50ZXJlc3RfbG9hbgATa1Bvb2xJbnRlcmVzdE5vTG9hbgIWX3Bvb2xfaW50ZXJlc3Rfbm9fbG9hbgAOa1Bvb2xDYW5Cb3Jyb3cCEF9wb29sX2Nhbl9ib3Jyb3cAFWtBeGx5SW5GZWVXaXRob3V0TG9hbgIWX2F4bHlfZmVlX3dpdGhvdXRfbG9hbgASa0F4bHlJbkZlZVdpdGhMb2FuAhNfYXhseV9mZWVfd2l0aF9sb2FuABFrQXhseU5vTG9hbkNhcEZlZQIXX2F4bHlfZmVlX2NhcF93aXRoX2xvYW4AE2tBeGx5V2l0aExvYW5DYXBGZWUCFV9heGx5X2ZlZV9jYXBfbm9fbG9hbgAWa0F4bHlTdG9wTG9zc05vTG9hbkZlZQIcX2F4bHlfZmVlX3N0b3Bsb3NzX3dpdGhfbG9hbgAUa0F4bHlTdG9wTG9zc0xvYW5GZWUCGl9heGx5X2ZlZV9zdG9wbG9zc19ub19sb2FuAAprUmVxdWVzdElkAgtfcmVxdWVzdF9pZAAMa1JlcXVlc3RJdGVyAg1yZXF1ZXN0c19pdGVyAAVrUG9vbAIFcG9vbF8ACmtTaGFyZVBvb2wCDl9wb29sX3NoYXJlX2lkAA5rUG9vbENhcENoYW5nZQIQX3Bvb2xfY2FwX2NoYW5nZQAPa1Rva2VuTGFzdFByaWNlAgpsYXN0X3ByaWNlAA5rUHJpY2VJbk9yYWNsZQIHX3R3YXA1QgANa1VzZXJTdG9wTG9zcwIKX3N0b3BfbG9zcwAJa01vbmV5Qm94Ag5heGx5X21vbmV5X2JveAAOa1NGRmFybWluZ0FkZHICE3N3b3BmaV9mYXJtaW5nX2FkZHIADGtMZW5kU2VydmljZQIRbGVuZF9zZXJ2aWNlX2FkZHIADGtBZG1pbkNhbGxQSwISYWRtaW5fY2FsbF9wdWJfa2V5AAxrUHJpY2VPcmFjbGUCDHByaWNlX29yYWNsZQALa0V4Q29udHJhY3QCEWV4Y2hhbmdlX2NvbnRyYWN0AA9rV3hTd2FwQ29udHJhY3QCEHd4X3N3YXBfY29udHJhY3QAB2tTd29wSWQCB3N3b3BfaWQABWtXeElkAgV3eF9pZAAIbW9uZXlCb3gJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUJa01vbmV5Qm94AhhObyBheGx5IG1vbmV5Qm94IGFkZHJlc3MACmV4Q29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwULa0V4Q29udHJhY3QCHE5vIGV4Y2hhbmdlIGNvbnRyYWN0IGFkZHJlc3MAD3ByaWNlT3JhY2xlQWRkcgkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrUHJpY2VPcmFjbGUCF05vIHByaWNlIG9yYWNsZSBhZGRyZXNzAA53eFN3YXBDb250cmFjdAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ9rV3hTd2FwQ29udHJhY3QCEk5vIHd4IHN3YXAgYWRkcmVzcwAGU1dPUElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQdrU3dvcElkAgpObyBzd29wIGlkAARXWElECQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQVrV3hJZAIITm8gd3ggaWQBDmdldExlbmRTcnZBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQxrTGVuZFNlcnZpY2UCG0Nhbid0IGdldCBsZW5kIHNlcnZpY2UgYWRkcgEQZ2V0QWRtaW5DYWxsQWRkcgAJAKcIAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwUMa0FkbWluQ2FsbFBLAhRDYW4ndCBnZXQgYWRtaW4gYWRkcgELaXNBZG1pbkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyCQEQZ2V0QWRtaW5DYWxsQWRkcgAFBHVuaXQJAAIBAiFPbmx5IGFkbWluIGNhbiBjYWxsIHRoaXMgZnVuY3Rpb24BCmlzU2VsZkNhbGwBAWkDCQAAAggFAWkGY2FsbGVyBQR0aGlzBQR1bml0CQACAQIrT25seSBjb250cmFjdCBpdHNlbGYgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEKaXNMYW5kQ2FsbAEBaQMJAAACCAUBaQZjYWxsZXIJAQ5nZXRMZW5kU3J2QWRkcgAFBHVuaXQJAAIBAilPbmx5IGxhbmQgY29udHJhY3QgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbgEOYWNjb3VudEJhbGFuY2UBB2Fzc2V0SWQEByRtYXRjaDAFB2Fzc2V0SWQDCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCaWQFByRtYXRjaDAJAPAHAgUEdGhpcwUCaWQDCQABAgUHJG1hdGNoMAIEVW5pdAQFd2F2ZXMFByRtYXRjaDAICQDvBwEFBHRoaXMJYXZhaWxhYmxlCQACAQILTWF0Y2ggZXJyb3IBEWdldFNGUG9vbEJhbGFuY2VzAQhwb29sQWRkcgkAlAoCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFFGtTRlBvb2xBQXNzZXRCYWxhbmNlAh5DYW4ndCBnZXQgcG9vbCBBIGFzc2V0IGJhbGFuY2UJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhwb29sQWRkcgUUa1NGUG9vbEJBc3NldEJhbGFuY2UCHkNhbid0IGdldCBwb29sIEIgYXNzZXQgYmFsYW5jZQERZ2V0V1hQb29sQmFsYW5jZXMDCHBvb2xBZGRyA2FJZANiSWQJAJQKAgoAAUAJAPwHBAUIcG9vbEFkZHICHGdldEFjY0JhbGFuY2VXcmFwcGVyUkVBRE9OTFkJAMwIAgUDYUlkBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQKAAFACQD8BwQFCHBvb2xBZGRyAhxnZXRBY2NCYWxhbmNlV3JhcHBlclJFQURPTkxZCQDMCAIFA2JJZAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AQ9nZXRQb29sQmFsYW5jZXMECHBvb2xBZGRyBHR5cGUDYUlkA2JJZAMJAAACBQR0eXBlBQdTRl9QT09MCQERZ2V0U0ZQb29sQmFsYW5jZXMBBQhwb29sQWRkcgMJAAACBQR0eXBlBQdXWF9QT09MCQERZ2V0V1hQb29sQmFsYW5jZXMDBQhwb29sQWRkcgUDYUlkBQNiSWQJAAIBAg9Xcm9uZyBwb29sIHR5cGUBDWdldFNGUG9vbERhdGEBCHBvb2xBZGRyBAskdDA2MTkxNjI0MAkBEWdldFNGUG9vbEJhbGFuY2VzAQUIcG9vbEFkZHIDCQAAAgULJHQwNjE5MTYyNDAFCyR0MDYxOTE2MjQwBARiYWxCCAULJHQwNjE5MTYyNDACXzIEBGJhbEEIBQskdDA2MTkxNjI0MAJfMQkAlwoFCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHIFD2tTRlBvb2xBQXNzZXRJZAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCHBvb2xBZGRyBQ9rU0ZQb29sQkFzc2V0SWQCGUNhbid0IGdldCBwb29sIEIgYXNzZXQgaWQFBGJhbEEFBGJhbEIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhwb29sQWRkcgUOa1NGUG9vbFNoYXJlSWQCGENhbid0IGdldCBzaGFyZSBhc3NldCBpZAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgENZ2V0V1hQb29sRGF0YQEIcG9vbEFkZHIEA2NmZwoAAUAJAPwHBAUIcG9vbEFkZHICHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkFA25pbAUDbmlsAwkAAQIFAUACCUxpc3RbQW55XQUBQAkAAgEJAKwCAgkAAwEFAUACHiBjb3VsZG4ndCBiZSBjYXN0IHRvIExpc3RbQW55XQMJAAACBQNjZmcFA2NmZwQDYUlkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAEAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQSBhc3NldCBpZAQDYklkCQETdmFsdWVPckVycm9yTWVzc2FnZQIKAAFACQCRAwIFA2NmZwAFAwkAAQIFAUACBlN0cmluZwUBQAUEdW5pdAIZQ2FuJ3QgZ2V0IHBvb2wgQiBhc3NldCBpZAQHc2hhcmVJZAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCgABQAkAkQMCBQNjZmcAAwMJAAECBQFAAgZTdHJpbmcFAUAFBHVuaXQCGkNhbid0IGdldCBwb29sIExQIGFzc2V0IGlkBAskdDA2OTM3Njk5NgkBEWdldFdYUG9vbEJhbGFuY2VzAwUIcG9vbEFkZHIFA2FJZAUDYklkAwkAAAIFCyR0MDY5Mzc2OTk2BQskdDA2OTM3Njk5NgQEYmFsQggFCyR0MDY5Mzc2OTk2Al8yBARiYWxBCAULJHQwNjkzNzY5OTYCXzEJAJcKBQUDYUlkBQNiSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BC2dldFBvb2xEYXRhAghwb29sQWRkcgR0eXBlAwkAAAIFBHR5cGUFB1NGX1BPT0wJAQ1nZXRTRlBvb2xEYXRhAQUIcG9vbEFkZHIDCQAAAgUEdHlwZQUHV1hfUE9PTAkBDWdldFdYUG9vbERhdGEBBQhwb29sQWRkcgkAAgECD1dyb25nIHBvb2wgdHlwZQEOZ2V0U2hhcmVTdXBwbHkDCHBvb2xBZGRyBHR5cGUHc2hhcmVJZAMJAAACBQR0eXBlBQdTRl9QT09MCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUIcG9vbEFkZHIFEmtTRlBvb2xTaGFyZVN1cHBseQIcQ2FuJ3QgZ2V0IHNoYXJlIGFzc2V0IHN1cHBseQMJAAACBQR0eXBlBQdXWF9QT09MCAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQDsBwEJANkEAQUHc2hhcmVJZAINV3JvbmcgU2hhcmVJZAhxdWFudGl0eQkAAgECD1dyb25nIHBvb2wgdHlwZQERZ2V0UG9vbFRvdGFsU2hhcmUBBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQprUG9vbFRvdGFsAAABGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBHBvb2wJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgAAARhnZXROZXdVc2VyUG9zaXRpb25OdW1iZXIBBHVzZXIJAGQCCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEdXNlcgUQa1VzZXJQb3NpdGlvbk51bQAAAAEBCmdldEF4bHlGZWUCBHBvb2wHZmVlVHlwZQMJAAACBQdmZWVUeXBlBQxDQVBfRkVFX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa0F4bHlXaXRoTG9hbkNhcEZlZQMJAAACBQdmZWVUeXBlBQ9DQVBfRkVFX05PX0xPQU4JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAURa0F4bHlOb0xvYW5DYXBGZWUDCQAAAgUHZmVlVHlwZQUITE9BTl9GRUUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUSa0F4bHlJbkZlZVdpdGhMb2FuAwkAAAIFB2ZlZVR5cGUFC05PX0xPQU5fRkVFCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIFBHBvb2wFFWtBeGx5SW5GZWVXaXRob3V0TG9hbgMJAAACBQdmZWVUeXBlBQZOT19GRUUAAAkAAgECDldyb25nIGZlZSB0eXBlARBnZXRTRkZhcm1pbmdBZGRyAAkBB0FkZHJlc3MBCQDZBAEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzBQ5rU0ZGYXJtaW5nQWRkcgIdQ2FuJ3QgZ2V0IHN3b3BmaSBmYXJtaW5nIGFkZHIBEGdldFdYRmFybWluZ0FkZHIBCHBvb2xBZGRyBAlmQ29udHJhY3QJAQdBZGRyZXNzAQkA2QQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUIcG9vbEFkZHICEyVzX19mYWN0b3J5Q29udHJhY3QCIkNhbid0IGdldCBXWCBmYWN0b3J5IGNvbnRyYWN0IGFkZHIECmZhY3Ryb3lDZmcJALUJAgkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFCWZDb250cmFjdAIRJXNfX2ZhY3RvcnlDb25maWcCGENhbid0IGdldCBXWCBmYWN0b3J5IGNmZwICX18JAQdBZGRyZXNzAQkA2QQBCQCRAwIFCmZhY3Ryb3lDZmcAAQEMYXNzZXRJZFRvU3RyAQdhc3NldElkBAckbWF0Y2gwBQdhc3NldElkAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAmlkBQckbWF0Y2gwCQDYBAEFAmlkAwkAAQIFByRtYXRjaDACBFVuaXQEBXdhdmVzBQckbWF0Y2gwAgVXQVZFUwkAAgECDE5vdCBBc3NldCBpZAEOYXNzZXRJZEZyb21TdHIBB2Fzc2V0SWQDCQAAAgUHYXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUHYXNzZXRJZAEQZ2V0QXNzZXREZWNpbWFscwEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwAIBAckbWF0Y2gwCQDsBwEJANkEAQUHYXNzZXRJZAMJAAECBQckbWF0Y2gwAgVBc3NldAQFYXNzZXQFByRtYXRjaDAIBQVhc3NldAhkZWNpbWFscwkAAgECEENhbid0IGZpbmQgYXNzZXQBEWdldEFzc2V0UHJlY2l0aW9uAQdhc3NldElkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHYXNzZXRJZAAAAAAFBERPV04BDmdldEFzc2V0c1ByaWNlAQhhc3NldElkcwoBCWdldFByaWNlcwIBYQdhc3NldElkBAphc3NldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUJAM0IAgUBYQUKYXNzZXRQcmljZQoAAiRsBQhhc3NldElkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyA1MAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQAFQAWABcAGAAZABoAGwAcAB0AHgAfACAAIQAiACMAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIBDWdldFNoYXJlUHJpY2UBB3NoYXJlSWQEBHBvb2wJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wCIENhbid0IGZpbmQgcG9vbCBhZGRyIGJ5IHNoYXJlIGlkBAhwb29sQWRkcgkBB0FkZHJlc3MBCQDZBAEFBHBvb2wEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBAwkdDA5OTg4MTAwNTMJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQDYUlkCAUMJHQwOTk4ODEwMDUzAl8xBANiSWQIBQwkdDA5OTg4MTAwNTMCXzIECGFCYWxhbmNlCAUMJHQwOTk4ODEwMDUzAl8zBAhiQmFsYW5jZQgFDCR0MDk5ODgxMDA1MwJfNAQHZFByaWNlQQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFA2FJZAUOa1ByaWNlSW5PcmFjbGUEB2RQcmljZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNiSWQFDmtQcmljZUluT3JhY2xlBAtzaGFyZVN1cHBseQkBDmdldFNoYXJlU3VwcGx5AwUIcG9vbEFkZHIFBXBUeXBlBQdzaGFyZUlkBApBUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUDYUlkAAAAAAUERE9XTgQKQlByZWNpc2lvbgkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFA2JJZAAAAAAFBERPV04EDnNoYXJlUHJlY2lzaW9uCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQUHc2hhcmVJZAAAAAAFBERPV04EA3N1bQkAZAIJAGsDBQhhQmFsYW5jZQUHZFByaWNlQQUKQVByZWNpc2lvbgkAawMFCGJCYWxhbmNlBQdkUHJpY2VCBQpCUHJlY2lzaW9uCQBrAwUDc3VtBQ5zaGFyZVByZWNpc2lvbgULc2hhcmVTdXBwbHkBDmdldFNoYXJlUHJpY2VzAQhzaGFyZUlkcwoBCWdldFByaWNlcwIBYQdzaGFyZUlkCQDNCAIFAWEJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAoAAiRsBQhzaGFyZUlkcwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAFA25pbAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEJZ2V0UHJpY2VzAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQBDmdldEN1cnNFbnRyaWVzBANhSWQDYklkB3NoYXJlSWQId0Ftb3VudHMEDGFzc2V0c1ByaWNlcwkBDmdldEFzc2V0c1ByaWNlAQkAzAgCBQNhSWQJAMwIAgUDYklkBQNuaWwECnNoYXJlUHJpY2UJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAQGcHJpY2VzCQDOCAIJAMwIAgkApAMBCQCRAwIFDGFzc2V0c1ByaWNlcwAACQDMCAIJAKQDAQkAkQMCBQxhc3NldHNQcmljZXMAAQkAzAgCCQCkAwEFCnNoYXJlUHJpY2UFA25pbAUId0Ftb3VudHMJAMwIAgkBC1N0cmluZ0VudHJ5AgUPa1Rva2VuTGFzdFByaWNlCQC5CQIFBnByaWNlcwIBLAUDbmlsARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBXBUeXBlCHBvb2xBZGRyBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgMJAAACBQVwVHlwZQUHU0ZfUE9PTAQEcmVwbAoAAUAJAPwHBAUIcG9vbEFkZHICDGNhbGxGdW5jdGlvbgkAzAgCAiBjYWxjTFBSZXBsZW5pc2hUd29Ub2tlbnNSRUFET05MWQkAzAgCCQDMCAIJAKQDAQUEcG10QQkAzAgCCQCkAwEFBHBtdEIFA25pbAUDbmlsBQNuaWwDCQABAgUBQAIJTGlzdFtBbnldBQFACQACAQkArAICCQADAQUBQAIeIGNvdWxkbid0IGJlIGNhc3QgdG8gTGlzdFtBbnldAwkAAAIFBHJlcGwFBHJlcGwJAJcKBQoAAUAJAJEDAgUEcmVwbAADAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAoAAUAJAJEDAgUEcmVwbAAEAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAoAAUAJAJEDAgUEcmVwbAABAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAkBDGFzc2V0SWRUb1N0cgEJAJEDAgUEcmVwbAACCgABQAkAkQMCBQRyZXBsAAADCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBA0kdDAxMTU3MzExODIzCQCUCgIJALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICIGV2YWx1YXRlUHV0QnlBbW91bnRBc3NldFJFQURPTkxZCQDMCAIFBHBtdEEFA25pbAUDbmlsAwkAAQIFAUACBlN0cmluZwUBQAkAAgEJAKwCAgkAAwEFAUACGyBjb3VsZG4ndCBiZSBjYXN0IHRvIFN0cmluZwICX18JALUJAgoAAUAJAPwHBAUIcG9vbEFkZHICH2V2YWx1YXRlUHV0QnlQcmljZUFzc2V0UkVBRE9OTFkJAMwIAgUEcG10QgUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQ0kdDAxMTU3MzExODIzBQ0kdDAxMTU3MzExODIzBApldmFsUHV0SW5CCAUNJHQwMTE1NzMxMTgyMwJfMgQKZXZhbFB1dEluQQgFDSR0MDExNTczMTE4MjMCXzEEBWxwSW5BCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKZXZhbFB1dEluQQABBAVscEluQgkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIAAQMJAGYCBQVscEluQgUFbHBJbkEEA3BtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkEACAkAlwoFBQRwbXRBBQNwbXQJAGUCBQRwbXRCBQNwbXQFA2JJZAUFbHBJbkIEA3BtdAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCmV2YWxQdXRJbkIABwkAlwoFBQNwbXQFBHBtdEIJAGUCBQRwbXRBBQNwbXQFA2FJZAUFbHBJbkEJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYIcG9vbEFkZHIFcFR5cGUEcG10QQNhSWQEcG10QgNiSWQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQNhSWQFBHBtdEEJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQ5hc3NldElkRnJvbVN0cgEFA2JJZAUEcG10QgUDbmlsAwkAAAIFBXBUeXBlBQdTRl9QT09MCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIWcmVwbGVuaXNoV2l0aFR3b1Rva2VucwkAzAgCCQDMCAICBWZhbHNlCQDMCAICATAFA25pbAUDbmlsBQhwYXltZW50cwkA/AcEBQhwb29sQWRkcgIDcHV0CQDMCAIAwIQ9CQDMCAIHBQNuaWwFCHBheW1lbnRzARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQIcG9vbEFkZHIFcFR5cGUDcG10BXBtdElkBAhwYXltZW50cwkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUFcG10SWQFA3BtdAUDbmlsAwkAAAIFBXBUeXBlBQdTRl9QT09MCQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIVcmVwbGVuaXNoV2l0aE9uZVRva2VuCQDMCAIJAMwIAgIBMAkAzAgCAgVmYWxzZQkAzAgCAgEwBQNuaWwFA25pbAUIcGF5bWVudHMJAPwHBAUIcG9vbEFkZHICCXB1dE9uZVRrbgkAzAgCAAAJAMwIAgcFA25pbAUIcGF5bWVudHMBB3N0YWtlTFAEBHBvb2wFcFR5cGUHc2hhcmVJZAZhbW91bnQECHBheW1lbnRzCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQDZBAEFB3NoYXJlSWQFBmFtb3VudAUDbmlsAwkAAAIFBXBUeXBlBQdTRl9QT09MCQD8BwQJARBnZXRTRkZhcm1pbmdBZGRyAAIPbG9ja1NoYXJlVG9rZW5zCQDMCAIFBHBvb2wJAMwIAgAABQNuaWwFCHBheW1lbnRzCQD8BwQJARBnZXRXWEZhcm1pbmdBZGRyAQkBEUBleHRyTmF0aXZlKDEwNjIpAQUEcG9vbAIFc3Rha2UFA25pbAUIcGF5bWVudHMBCXVuc3Rha2VMUAQEcG9vbAVwVHlwZQdzaGFyZUlkBmFtb3VudAQNJHQwMTMzMDgxMzY2NQMJAAACBQVwVHlwZQUHU0ZfUE9PTAkAlQoDCQEQZ2V0U0ZGYXJtaW5nQWRkcgACE3dpdGhkcmF3U2hhcmVUb2tlbnMJAMwIAgUEcG9vbAkAzAgCBQZhbW91bnQFA25pbAMJAAACBQVwVHlwZQUHV1hfUE9PTAkAlQoDCQEQZ2V0V1hGYXJtaW5nQWRkcgEJAQdBZGRyZXNzAQkA2QQBBQRwb29sAgd1bnN0YWtlCQDMCAIFB3NoYXJlSWQJAMwIAgUGYW1vdW50BQNuaWwJAAIBAg9Xcm9uZyBwb29sIHR5cGUECGZhcm1BZGRyCAUNJHQwMTMzMDgxMzY2NQJfMQQFZk5hbWUIBQ0kdDAxMzMwODEzNjY1Al8yBAZwYXJhbXMIBQ0kdDAxMzMwODEzNjY1Al8zBANpbnYJAPwHBAUIZmFybUFkZHIFBWZOYW1lBQZwYXJhbXMFA25pbAMJAAACBQNpbnYFA2ludgUGYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARFjYWxjQW1vdW50VG9QYXlTRgcEcG9vbAhhc3NldElkQQhhc3NldElkQgRiYWxBBGJhbEIQYW1vdW50VG9rZW5Ub0dldA9hc3NldFRva2VuVG9HZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQJZmVlU2NhbGU2AMCEPQQDZmVlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQhwb29sQWRkcgUKa1NGUG9vbEZlZQQMYW1udEdldE5vRmVlCQBuBAUQYW1vdW50VG9rZW5Ub0dldAUJZmVlU2NhbGU2CQBlAgUJZmVlU2NhbGU2BQNmZWUFB0NFSUxJTkcEDSR0MDE0MDg3MTQzOTMDCQAAAgUPYXNzZXRUb2tlblRvR2V0BQhhc3NldElkQQQLYW1vdW50VG9QYXkJAG4EBQxhbW50R2V0Tm9GZWUFBGJhbEIJAGUCBQRiYWxBBQxhbW50R2V0Tm9GZWUFB0NFSUxJTkcJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRCBAthbW91bnRUb1BheQkAbgQFDGFtbnRHZXROb0ZlZQUEYmFsQQkAZQIFBGJhbEIFDGFtbnRHZXROb0ZlZQUHQ0VJTElORwkAlAoCBQthbW91bnRUb1BheQUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CAUNJHQwMTQwODcxNDM5MwJfMQQKYXNzZXRUb1BheQgFDSR0MDE0MDg3MTQzOTMCXzIJAJQKAgUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkBEWNhbGNBbW91bnRUb1BheVdYBwRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAQFcHJGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Ag8lc19fcHJvdG9jb2xGZWUEBHBGZWUJARFAZXh0ck5hdGl2ZSgxMDUwKQIFDnd4U3dhcENvbnRyYWN0Agslc19fcG9vbEZlZQQIZmVlU2NhbGUJALYCAQCAwtcvBA0kdDAxNDczMjE1MDQwAwkAAAIFD2Fzc2V0VG9rZW5Ub0dldAUIYXNzZXRJZEEEC2Ftb3VudFRvUGF5CQBrAwUQYW1vdW50VG9rZW5Ub0dldAUEYmFsQgkAZQIFBGJhbEEFEGFtb3VudFRva2VuVG9HZXQJAJQKAgULYW1vdW50VG9QYXkFCGFzc2V0SWRCBAthbW91bnRUb1BheQkAawMFEGFtb3VudFRva2VuVG9HZXQFBGJhbEEJAGUCBQRiYWxCBRBhbW91bnRUb2tlblRvR2V0CQCUCgIFC2Ftb3VudFRvUGF5BQhhc3NldElkQQQLYW1vdW50VG9QYXkIBQ0kdDAxNDczMjE1MDQwAl8xBAphc3NldFRvUGF5CAUNJHQwMTQ3MzIxNTA0MAJfMgQSYW1vdW50VG9QYXlXaXRoRmVlCQCgAwEJAL0CBAkAtgIBBQthbW91bnRUb1BheQUIZmVlU2NhbGUJALgCAgUIZmVlU2NhbGUJALYCAQkAZAIFBXByRmVlBQRwRmVlBQdDRUlMSU5HCQCUCgIFCmFzc2V0VG9QYXkFEmFtb3VudFRvUGF5V2l0aEZlZQEQZXhjaGFuZ2VEaXJlY3RseQgEdHlwZQRwb29sCGFzc2V0SWRBCGFzc2V0SWRCBGJhbEEEYmFsQhBhbW91bnRUb2tlblRvR2V0D2Fzc2V0VG9rZW5Ub0dldAMJAAACBQR0eXBlBQdTRl9QT09MBA0kdDAxNTM4NTE1NTA3CQERY2FsY0Ftb3VudFRvUGF5U0YHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE1Mzg1MTU1MDcCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTUzODUxNTUwNwJfMgkA/AcECQERQGV4dHJOYXRpdmUoMTA2MikBBQRwb29sAgxjYWxsRnVuY3Rpb24JAMwIAgIIZXhjaGFuZ2UJAMwIAgkAzAgCCQCkAwEFEGFtb3VudFRva2VuVG9HZXQFA25pbAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQphc3NldFRvUGF5BQthbW91bnRUb1BheQUDbmlsBA0kdDAxNTY4MjE1ODA0CQERY2FsY0Ftb3VudFRvUGF5V1gHBQRwb29sBQhhc3NldElkQQUIYXNzZXRJZEIFBGJhbEEFBGJhbEIFEGFtb3VudFRva2VuVG9HZXQFD2Fzc2V0VG9rZW5Ub0dldAQKYXNzZXRUb1BheQgFDSR0MDE1NjgyMTU4MDQCXzEEC2Ftb3VudFRvUGF5CAUNJHQwMTU2ODIxNTgwNAJfMgkA/AcEBQ53eFN3YXBDb250cmFjdAIEc3dhcAkAzAgCBRBhbW91bnRUb2tlblRvR2V0CQDMCAIFD2Fzc2V0VG9rZW5Ub0dldAkAzAgCCQClCAEFBHRoaXMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQUKYXNzZXRUb1BheQULYW1vdW50VG9QYXkFA25pbAEaY2FsY1dpdGhkcmF3TFBGcm9tUG9vbFZpcnQECHBvb2xBZGRyBXBUeXBlB3NoYXJlSWQPdXNlckNhbldpdGhkcmF3BA0kdDAxNjA2NjE2NDUzAwkAAAIFBXBUeXBlBQdTRl9QT09MBANpbnYKAAFACQD8BwQFCHBvb2xBZGRyAgxjYWxsRnVuY3Rpb24JAMwIAgIQd2l0aGRyYXdSRUFET05MWQkAzAgCCQDMCAIJAKQDAQUPdXNlckNhbldpdGhkcmF3BQNuaWwFA25pbAUDbmlsAwkAAQIFAUACCihJbnQsIEludCkFAUAJAAIBCQCsAgIJAAMBBQFAAh8gY291bGRuJ3QgYmUgY2FzdCB0byAoSW50LCBJbnQpAwkAAAIFA2ludgUDaW52CQCUCgIIBQNpbnYCXzEIBQNpbnYCXzIJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4EA2ludgkAtQkCCgABQAkA/AcEBQhwb29sQWRkcgITZXZhbHVhdGVHZXRSRUFET05MWQkAzAgCBQdzaGFyZUlkCQDMCAIFD3VzZXJDYW5XaXRoZHJhdwUDbmlsBQNuaWwDCQABAgUBQAIGU3RyaW5nBQFACQACAQkArAICCQADAQUBQAIbIGNvdWxkbid0IGJlIGNhc3QgdG8gU3RyaW5nAgJfXwMJAAACBQNpbnYFA2ludgkAlAoCCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUDaW52AAEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQNpbnYAAgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQHYW1vdW50QQgFDSR0MDE2MDY2MTY0NTMCXzEEB2Ftb3VudEIIBQ0kdDAxNjA2NjE2NDUzAl8yCQCUCgIFB2Ftb3VudEEFB2Ftb3VudEIBC2NsYWltRmFybWVkAgR0eXBlBHBvb2wDCQAAAgUEdHlwZQUHU0ZfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQZTV09QSUQDCQAAAgUJYmFsQmVmb3JlBQliYWxCZWZvcmUEA2ludgkA/AcECQEQZ2V0U0ZGYXJtaW5nQWRkcgACBWNsYWltCQDMCAIFBHBvb2wFA25pbAUDbmlsAwkAAAIFA2ludgUDaW52BAhiYWxBZnRlcgkBDmFjY291bnRCYWxhbmNlAQUGU1dPUElECQCUCgIJAGUCBQhiYWxBZnRlcgUJYmFsQmVmb3JlBQZTV09QSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQAAAgUEdHlwZQUHV1hfUE9PTAQJYmFsQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBBQRXWElEAwkAAAIFCWJhbEJlZm9yZQUJYmFsQmVmb3JlBANpbnYJAPwHBAkBEGdldFdYRmFybWluZ0FkZHIBCQEHQWRkcmVzcwEJANkEAQUEcG9vbAIHY2xhaW1XWAkAzAgCBQRwb29sBQNuaWwFA25pbAMJAAACBQNpbnYFA2ludgQIYmFsQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEFBFdYSUQJAJQKAgkAZQIFCGJhbEFmdGVyBQliYWxCZWZvcmUFBFdYSUQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAg9Xcm9uZyBwb29sIHR5cGUBD3JlcGxlbmlzaEJ5VHlwZQoFcFR5cGUEcG9vbAdmZWVUeXBlBHBtdEEDYUlkBHBtdEIDYklkBGJhbEEEYmFsQgRMUElkBA9scEJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJANkEAQUETFBJZAMJAAACBQ9scEJhbGFuY2VCZWZvcmUFD2xwQmFsYW5jZUJlZm9yZQQIcG9vbEFkZHIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFBHBvb2wEDSR0MDE3NDM5MTc4NTUDAwkAZgIFBHBtdEEAAAkAZgIFBHBtdEIAAAcEDSR0MDE3NTA1MTc2MjEJARhjYWxjUmVwbGVuaXNoQnlUd29Ub2tlbnMIBQVwVHlwZQUIcG9vbEFkZHIFBHBtdEEFA2FJZAUEcG10QgUDYklkBQRiYWxBBQRiYWxCBAZwbXRJbkEIBQ0kdDAxNzUwNTE3NjIxAl8xBAZwbXRJbkIIBQ0kdDAxNzUwNTE3NjIxAl8yBAZjaGFuZ2UIBQ0kdDAxNzUwNTE3NjIxAl8zBAhjaGFuZ2VJZAgFDSR0MDE3NTA1MTc2MjECXzQEA2ludgkBGHJlcGxlbmlzaFR3b1Rva2Vuc0J5VHlwZQYFCHBvb2xBZGRyBQVwVHlwZQUGcG10SW5BBQNhSWQFBnBtdEluQgUDYklkAwkAAAIFA2ludgUDaW52CQCUCgIFBmNoYW5nZQUIY2hhbmdlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4DCQBmAgUEcG10QQAACQCUCgIFBHBtdEEFA2FJZAMJAGYCBQRwbXRCAAAJAJQKAgUEcG10QgUDYklkCQACAQIQcG10cyBtdXN0IGJlID4gMAQGY2hhbmdlCAUNJHQwMTc0MzkxNzg1NQJfMQQIY2hhbmdlSWQIBQ0kdDAxNzQzOTE3ODU1Al8yBANpbnYDCQBmAgUGY2hhbmdlAAAJARdyZXBsZW5pc2hPbmVUb2tlbkJ5VHlwZQQFCHBvb2xBZGRyBQVwVHlwZQUGY2hhbmdlBQhjaGFuZ2VJZAUDbmlsAwkAAAIFA2ludgUDaW52BA5scEJhbGFuY2VBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkA2QQBBQRMUElkBAt0b3RhbFN0YWtlZAkAZQIFDmxwQmFsYW5jZUFmdGVyBQ9scEJhbGFuY2VCZWZvcmUEDWF4bHlGZWVBbW91bnQJAGsDBQt0b3RhbFN0YWtlZAkBCmdldEF4bHlGZWUCBQRwb29sBQdmZWVUeXBlBQpGRUVfU0NBTEU2BBF1c2VyU2hhcmVGb3JTdGFrZQkAZQIFC3RvdGFsU3Rha2VkBQ1heGx5RmVlQW1vdW50AwkAZwIAAAURdXNlclNoYXJlRm9yU3Rha2UJAAIBAihhbW91bnQgb2Ygc3Rha2VkIHNoYXJldG9rZW5zIG11c3QgYmUgPiAwBAVpbnZMUAkBB3N0YWtlTFAEBQRwb29sBQVwVHlwZQUETFBJZAURdXNlclNoYXJlRm9yU3Rha2UDCQAAAgUFaW52TFAFBWludkxQCQCUCgIFEXVzZXJTaGFyZUZvclN0YWtlBQ1heGx5RmVlQW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARByZXBsZW5pc2hFbnRyaWVzCARwb29sBHVzZXIMc3Rha2VkQW1vdW50DWF4bHlGZWVBbW91bnQGcG9zTnVtB3NoYXJlSWQEdHlwZQh3aXRoTG9hbgQLdG90YWxBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wED3RvdGFsQW1vdW50TG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBA0kdDAxODcxMzE4OTUxAwUId2l0aExvYW4JAJQKAgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAZAIFD3RvdGFsQW1vdW50TG9hbgUMc3Rha2VkQW1vdW50CQCUCgIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgUEcG9vbAUTa1Bvb2xJbnRlcmVzdE5vTG9hbgUPdG90YWxBbW91bnRMb2FuBA9jdXJQb29sSW50ZXJlc3QIBQ0kdDAxODcxMzE4OTUxAl8xBBN0b3RhbFN0YWtlZFdpdGhMb2FuCAUNJHQwMTg3MTMxODk1MQJfMgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBkAgULdG90YWxBbW91bnQFDHN0YWtlZEFtb3VudAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgUTdG90YWxTdGFrZWRXaXRoTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBQ1rVXNlclBvc2l0aW9uBQxzdGFrZWRBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfCQCkAwEFBnBvc051bQUVa1VzZXJQb3NpdGlvbkludGVyZXN0BQ9jdXJQb29sSW50ZXJlc3QJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwkApAMBBQZwb3NOdW0FEWtVc2VyUG9zaXRpb25Qb29sBQRwb29sCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHVzZXIFEGtVc2VyUG9zaXRpb25OdW0FBnBvc051bQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhtb25leUJveAUNYXhseUZlZUFtb3VudAkA2QQBBQdzaGFyZUlkBQNuaWwBDmV4Y2hhbmdlS2VlcGVyCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldAlhbW91bnRzSW4JYWRkcmVzc2VzD2Fzc2V0c1RvUmVjZWl2ZQtlc3RSZWNlaXZlZBFzbGlwcGFnZVRvbGVyYW5jZQttaW5SZWNlaXZlZAdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgRzd2FwCQDMCAIFCWFtb3VudHNJbgkAzAgCBQlhZGRyZXNzZXMJAMwIAgUPYXNzZXRzVG9SZWNlaXZlCQDMCAIFC2VzdFJlY2VpdmVkCQDMCAIFEXNsaXBwYWdlVG9sZXJhbmNlCQDMCAIFC21pblJlY2VpdmVkCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ5leGNoYW5nZVB1enpsZQYHdG9Ub2tlbglwbXRBbW91bnQIcG10QXNzZXQJcm91dGVzU3RyDG1pblRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0AgpwdXp6bGVTd2FwCQDMCAIFCXJvdXRlc1N0cgkAzAgCBQxtaW5Ub1JlY2VpdmUJAMwIAgUHb3B0aW9ucwUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQhwbXRBc3NldAUJcG10QW1vdW50BQNuaWwDCQAAAgUDaW52BQNpbnYJAGUCCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQd0b1Rva2VuBRJ0b2tlbkJhbGFuY2VCZWZvcmUJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BDmV4Y2hhbmdlU3dvcEZpCgd0b1Rva2VuCXBtdEFtb3VudAhwbXRBc3NldApleGNoYW5nZXJzDmV4Y2hhbmdlcnNUeXBlBWFyZ3MxBWFyZ3MyEXJvdXRpbmdBc3NldHNLZXlzEm1pbkFtb3VudFRvUmVjZWl2ZQdvcHRpb25zBBJ0b2tlbkJhbGFuY2VCZWZvcmUJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFB3RvVG9rZW4DCQAAAgUSdG9rZW5CYWxhbmNlQmVmb3JlBRJ0b2tlbkJhbGFuY2VCZWZvcmUEA2ludgkA/AcEBQpleENvbnRyYWN0Agpzd29wZmlTd2FwCQDMCAIFCmV4Y2hhbmdlcnMJAMwIAgUOZXhjaGFuZ2Vyc1R5cGUJAMwIAgUFYXJnczEJAMwIAgUFYXJnczIJAMwIAgURcm91dGluZ0Fzc2V0c0tleXMJAMwIAgUSbWluQW1vdW50VG9SZWNlaXZlCQDMCAIFB29wdGlvbnMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUIcG10QXNzZXQFCXBtdEFtb3VudAUDbmlsAwkAAAIFA2ludgUDaW52CQBlAgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUHdG9Ub2tlbgUSdG9rZW5CYWxhbmNlQmVmb3JlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQpjYXBpdGFsaXplBARwb29sBXBUeXBlB3Rva2VuSWQLdG9rZW5BbW91bnQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQNJHQwMjEzMDIyMTM2OAkBC2dldFBvb2xEYXRhAgUIcG9vbEFkZHIFBXBUeXBlBANBSWQIBQ0kdDAyMTMwMjIxMzY4Al8xBANCSWQIBQ0kdDAyMTMwMjIxMzY4Al8yBARiYWxBCAUNJHQwMjEzMDIyMTM2OAJfMwQEYmFsQggFDSR0MDIxMzAyMjEzNjgCXzQEB3NoYXJlSWQIBQ0kdDAyMTMwMjIxMzY4Al81AwMJAQIhPQIFB3Rva2VuSWQFA0FJZAkBAiE9AgUHdG9rZW5JZAUDQklkBwkAAgECC1dyb25nIGFzc2V0BA0kdDAyMTQ1MzIxNTMzAwkAAAIFB3Rva2VuSWQFA0FJZAkAlAoCBQt0b2tlbkFtb3VudAAACQCUCgIAAAULdG9rZW5BbW91bnQEBHBtdEEIBQ0kdDAyMTQ1MzIxNTMzAl8xBARwbXRCCAUNJHQwMjE0NTMyMTUzMwJfMgQNJHQwMjE1MzYyMTY0MAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQZOT19GRUUFBHBtdEEFA0FJZAUEcG10QgUDQklkBQRiYWxBBQRiYWxCBQdzaGFyZUlkBAxzdGFrZWRBbW91bnQIBQ0kdDAyMTUzNjIxNjQwAl8xBAJuZggFDSR0MDIxNTM2MjE2NDACXzIEE2N1clBvb2xJbnRlcmVzdExvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgAABBVjdXJQb29sSW50ZXJlc3ROb0xvYW4JAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuAAAEEHRvdGFsU2hhcmVBbW91bnQJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wEGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgkBGWdldFBvb2xUb3RhbFNoYXJlV2l0aExvYW4BBQRwb29sBAtsb2FuUGVyY2VudAkAawMFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgUGU0NBTEU4BRB0b3RhbFNoYXJlQW1vdW50BApzdGFrZWRMb2FuCQBrAwUMc3Rha2VkQW1vdW50BQtsb2FuUGVyY2VudAUGU0NBTEU4BAxzdGFrZWROb0xvYW4JAGUCBQxzdGFrZWRBbW91bnQFCnN0YWtlZExvYW4ED25ld0ludGVyZXN0TG9hbgMJAGYCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAkAZAIFE2N1clBvb2xJbnRlcmVzdExvYW4JAGsDBQpzdGFrZWRMb2FuBQdTQ0FMRTEwBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4AAAQRbmV3SW50ZXJlc3ROb0xvYW4DCQBmAgkAZQIFEHRvdGFsU2hhcmVBbW91bnQFGHRvdGFsU2hhcmVBbW91bnRXaXRoTG9hbgAACQBkAgUVY3VyUG9vbEludGVyZXN0Tm9Mb2FuCQBrAwUMc3Rha2VkTm9Mb2FuBQdTQ0FMRTEwCQBlAgUQdG90YWxTaGFyZUFtb3VudAUYdG90YWxTaGFyZUFtb3VudFdpdGhMb2FuAAAEC2F4bHlGZWVMb2FuCQBrAwUKc3Rha2VkTG9hbgkBCmdldEF4bHlGZWUCBQRwb29sBQxDQVBfRkVFX0xPQU4FCkZFRV9TQ0FMRTYEDWF4bHlGZWVOb0xvYW4JAGsDBQxzdGFrZWROb0xvYW4JAQpnZXRBeGx5RmVlAgUEcG9vbAUPQ0FQX0ZFRV9OT19MT0FOBQpGRUVfU0NBTEU2BAdheGx5RmVlCQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQJAGQCBQtheGx5RmVlTG9hbgUNYXhseUZlZU5vTG9hbgMJAAACBQdheGx5RmVlBQdheGx5RmVlCQDOCAIJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAURa1Bvb2xJbnRlcmVzdExvYW4FD25ld0ludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuBRFuZXdJbnRlcmVzdE5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgkAZAIFEHRvdGFsU2hhcmVBbW91bnQFDHN0YWtlZEFtb3VudAUHYXhseUZlZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJAGQCBRh0b3RhbFNoYXJlQW1vdW50V2l0aExvYW4FCnN0YWtlZExvYW4FC2F4bHlGZWVMb2FuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCG1vbmV5Qm94CQBkAgULYXhseUZlZUxvYW4FDWF4bHlGZWVOb0xvYW4JANkEAQUHc2hhcmVJZAUDbmlsCQEOZ2V0Q3Vyc0VudHJpZXMEBQNBSWQFA0JJZAUHc2hhcmVJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuARJ3aXRoZHJhd0Ftb3VudENhbGMEBHBvb2wPdXNlckNhbldpdGhkcmF3BGRlYnQLYm9ycm93QXNzZXQECHBvb2xBZGRyCQEHQWRkcmVzcwEJANkEAQUEcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAgxVbmtub3duIHBvb2wEDSR0MDIzNDEyMjM0ODgJAQtnZXRQb29sRGF0YQIFCHBvb2xBZGRyBQVwVHlwZQQIYXNzZXRJZEEIBQ0kdDAyMzQxMjIzNDg4Al8xBAhhc3NldElkQggFDSR0MDIzNDEyMjM0ODgCXzIEBGJhbEEIBQ0kdDAyMzQxMjIzNDg4Al8zBARiYWxCCAUNJHQwMjM0MTIyMzQ4OAJfNAQHc2hhcmVJZAgFDSR0MDIzNDEyMjM0ODgCXzUEC2NCYWxBQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQMJAAACBQtjQmFsQUJlZm9yZQULY0JhbEFCZWZvcmUEC2NCYWxCQmVmb3JlCQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtjQmFsQkJlZm9yZQULY0JhbEJCZWZvcmUEA2ludgMJAAACBQVwVHlwZQUHU0ZfUE9PTAkA/AcEBQhwb29sQWRkcgIMY2FsbEZ1bmN0aW9uCQDMCAICCHdpdGhkcmF3CQDMCAIJAMwIAgkApAMBBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAUDbmlsBQNuaWwEA2ludgkBCXVuc3Rha2VMUAQFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcDCQAAAgUDaW52BQNpbnYJAPwHBAUIcG9vbEFkZHICA2dldAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEOYXNzZXRJZEZyb21TdHIBBQdzaGFyZUlkBQ91c2VyQ2FuV2l0aGRyYXcFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgMJAAACBQNpbnYFA2ludgQKY0JhbEFBZnRlcgkBDmFjY291bnRCYWxhbmNlAQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEECmNCYWxCQWZ0ZXIJAQ5hY2NvdW50QmFsYW5jZQEJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBA0kdDAyNDA1MTI0MTQwCQCUCgIJAGUCBQpjQmFsQUFmdGVyBQtjQmFsQUJlZm9yZQkAZQIFCmNCYWxCQWZ0ZXIFC2NCYWxCQmVmb3JlBA10b2tlbnNBbW91bnRBCAUNJHQwMjQwNTEyNDE0MAJfMQQNdG9rZW5zQW1vdW50QggFDSR0MDI0MDUxMjQxNDACXzIEDSR0MDI0MTQzMjQ5OTcDCQBmAgUEZGVidAAABA1hbW91bnRUb0dldEV4AwMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAGYCBQRkZWJ0BQ10b2tlbnNBbW91bnRBBwkAZQIFBGRlYnQFDXRva2Vuc0Ftb3VudEEDAwkAAAIFC2JvcnJvd0Fzc2V0BQhhc3NldElkQgkAZgIFBGRlYnQFDXRva2Vuc0Ftb3VudEIHCQBlAgUEZGVidAUNdG9rZW5zQW1vdW50QgAABAVleEludgMJAGYCBQ1hbW91bnRUb0dldEV4AAAJARBleGNoYW5nZURpcmVjdGx5CAUFcFR5cGUFBHBvb2wFCGFzc2V0SWRBBQhhc3NldElkQgkAZQIFBGJhbEEFDXRva2Vuc0Ftb3VudEEJAGUCBQRiYWxCBQ10b2tlbnNBbW91bnRCBQ1hbW91bnRUb0dldEV4BQtib3Jyb3dBc3NldAUDbmlsAwkAAAIFBWV4SW52BQVleEludgQPY0JhbEFBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQQQPY0JhbEJBZnRlclJlcGF5CQEOYWNjb3VudEJhbGFuY2UBCQEOYXNzZXRJZEZyb21TdHIBBQhhc3NldElkQgMJAAACBQtib3Jyb3dBc3NldAUIYXNzZXRJZEEJAJQKAgkAZQIJAGUCBQ9jQmFsQUFmdGVyUmVwYXkFC2NCYWxBQmVmb3JlBQRkZWJ0CQBlAgUPY0JhbEJBZnRlclJlcGF5BQtjQmFsQkJlZm9yZQkAlAoCCQBlAgUPY0JhbEFBZnRlclJlcGF5BQtjQmFsQUJlZm9yZQkAZQIJAGUCBQ9jQmFsQkFmdGVyUmVwYXkFC2NCYWxCQmVmb3JlBQRkZWJ0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQCUCgIFDXRva2Vuc0Ftb3VudEEFDXRva2Vuc0Ftb3VudEIEB3RvVXNlckEIBQ0kdDAyNDE0MzI0OTk3Al8xBAd0b1VzZXJCCAUNJHQwMjQxNDMyNDk5NwJfMgkAmQoHBQd0b1VzZXJBBQhhc3NldElkQQUHdG9Vc2VyQgUIYXNzZXRJZEIFCmNCYWxBQWZ0ZXIFCmNCYWxCQWZ0ZXIFB3NoYXJlSWQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQEdXNlcgRwb29sBXBvc0lkCGJvcnJvd2VkBAdwQW1vdW50CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBQ1rVXNlclBvc2l0aW9uAhBVbmtub3duIHBvc2l0aW9uBAx1c2VySW50ZXJlc3QJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUVa1VzZXJQb3NpdGlvbkludGVyZXN0BAxwb29sSW50ZXJlc3QDBQhib3Jyb3dlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRNrUG9vbEludGVyZXN0Tm9Mb2FuCQBkAgUHcEFtb3VudAkAawMFB3BBbW91bnQJAGUCBQxwb29sSW50ZXJlc3QFDHVzZXJJbnRlcmVzdAUHU0NBTEUxMAEOd2l0aGRyYXdUb1VzZXIEBHVzZXIEcG9vbAVwb3NJZAhzdG9wTG9zcwQHcEFtb3VudAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgIQVW5rbm93biBwb3NpdGlvbgQMYm9ycm93QW1vdW50CQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAURa1VzZXJCb3Jyb3dBbW91bnQAAAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUFcG9zSWQJAGYCBQxib3Jyb3dBbW91bnQAAAQOcG9vbFRvdGFsU2hhcmUJARFnZXRQb29sVG90YWxTaGFyZQEFBHBvb2wECHVzZXJBZGRyCQEHQWRkcmVzcwEJANkEAQUEdXNlcgQLYm9ycm93QXNzZXQJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQCAAQEZGVidAMJAGYCBQxib3Jyb3dBbW91bnQAAAoAAUAJAPwHBAkBDmdldExlbmRTcnZBZGRyAAIMZ2V0QXNzZXREZWJ0CQDMCAIHCQDMCAIJAKwCAgkArAICBQR1c2VyAgFfBQVwb3NJZAkAzAgCBQtib3Jyb3dBc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50AAAEDSR0MDI2Mzg1MjY1MzgJARJ3aXRoZHJhd0Ftb3VudENhbGMEBQRwb29sBQ91c2VyQ2FuV2l0aGRyYXcFBGRlYnQFC2JvcnJvd0Fzc2V0AwkAAAIFDSR0MDI2Mzg1MjY1MzgFDSR0MDI2Mzg1MjY1MzgEB3NoYXJlSWQIBQ0kdDAyNjM4NTI2NTM4Al83BApjQmFsQkFmdGVyCAUNJHQwMjYzODUyNjUzOAJfNgQKY0JhbEFBZnRlcggFDSR0MDI2Mzg1MjY1MzgCXzUECGFzc2V0SWRCCAUNJHQwMjYzODUyNjUzOAJfNAQNdG9Vc2VyQW1vdW50QggFDSR0MDI2Mzg1MjY1MzgCXzMECGFzc2V0SWRBCAUNJHQwMjYzODUyNjUzOAJfMgQNdG9Vc2VyQW1vdW50QQgFDSR0MDI2Mzg1MjY1MzgCXzEEC2Nsb3NlRGJ0SW52AwkAZgIFBGRlYnQAAAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAghyZXBheUZvcgkAzAgCCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBDmFzc2V0SWRGcm9tU3RyAQULYm9ycm93QXNzZXQFBGRlYnQFA25pbAAAAwkAAAIFC2Nsb3NlRGJ0SW52BQtjbG9zZURidEludgkAzggCCQDMCAIJAQtEZWxldGVFbnRyeQEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQprUG9vbFRvdGFsCQBlAgUOcG9vbFRvdGFsU2hhcmUFD3VzZXJDYW5XaXRoZHJhdwkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQh1c2VyQWRkcgUNdG9Vc2VyQW1vdW50QQkBDmFzc2V0SWRGcm9tU3RyAQUIYXNzZXRJZEEJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUIdXNlckFkZHIFDXRvVXNlckFtb3VudEIJAQ5hc3NldElkRnJvbVN0cgEFCGFzc2V0SWRCBQNuaWwJAQ5nZXRDdXJzRW50cmllcwQFCGFzc2V0SWRBBQhhc3NldElkQgUHc2hhcmVJZAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQxwYXJzZVJlcXVlc3QBCXJlcXVlc3RJZAQHcmVxdWVzdAkAtQkCCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQJAKwCAgITTm8gcmVxdWVzdCB3aXRoIGlkIAUJcmVxdWVzdElkAgEsBAR1c2VyCQCRAwIFB3JlcXVlc3QAAAQEcG9vbAkAkQMCBQdyZXF1ZXN0AAEEBHBtdEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAIEA0FJZAkAkQMCBQdyZXF1ZXN0AAMEBHBtdEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAQEA0JJZAkAkQMCBQdyZXF1ZXN0AAUEBGJhbEEJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAYEBGJhbEIJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAcEB3NoYXJlSWQJAJEDAgUHcmVxdWVzdAAIBAdid0Fzc2V0CQCRAwIFB3JlcXVlc3QACQQIYndBbW91bnQJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQdyZXF1ZXN0AAoJAJ0KCwUEdXNlcgUEcG9vbAUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQFB2J3QXNzZXQFCGJ3QW1vdW50ARBjYWxjQm9ycm93QW1vdW50BgRwbXRBBHBtdEIDYUlkA2JJZAhsZXZlcmFnZQhib3Jyb3dJZAQHZFByaWNlQQkBEUBleHRyTmF0aXZlKDEwNTApAgUPcHJpY2VPcmFjbGVBZGRyCQCsAgIFA2FJZAUOa1ByaWNlSW5PcmFjbGUEB2RQcmljZUIJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQNiSWQFDmtQcmljZUluT3JhY2xlBAZkZWNQckEJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNhSWQAAAAABQRET1dOBAZkZWNQckIJAGwGAAoAAAkBEGdldEFzc2V0RGVjaW1hbHMBBQNiSWQAAAAABQRET1dOBAxwYXlkSW5Eb2xsYXIJAGQCCQBrAwUHZFByaWNlQQUEcG10QQUGZGVjUHJBCQBrAwUHZFByaWNlQgUEcG10QgUGZGVjUHJCBA0kdDAyODE4MjI4Mjc5AwkAAAIFCGJvcnJvd0lkBQNhSWQJAJQKAgUHZFByaWNlQQUGZGVjUHJBCQCUCgIFB2RQcmljZUIFBmRlY1ByQgQLYm9ycm93UHJpY2UIBQ0kdDAyODE4MjI4Mjc5Al8xBAtib3Jyb3dEZWNQcggFDSR0MDI4MTgyMjgyNzkCXzIJAGsDCQBrAwUMcGF5ZEluRG9sbGFyCQBlAgUIbGV2ZXJhZ2UAZABkBQtib3Jyb3dEZWNQcgULYm9ycm93UHJpY2UBEnBhcnNlUmVwbGVuaXNoUG10cwMEcG10cwNBSWQDQklkAwkAAAIJAJADAQUEcG10cwACAwkBAiE9AgkBDGFzc2V0SWRUb1N0cgEICQCRAwIFBHBtdHMAAAdhc3NldElkBQNBSWQJAAIBAhVXcm9uZyBwYXltZW50IGFzc2V0IEEDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAgUEcG10cwABB2Fzc2V0SWQFA0JJZAkAAgECFVdyb25nIHBheW1lbnQgYXNzZXQgQgkAlgoECAkAkQMCBQRwbXRzAAAGYW1vdW50BQNBSWQICQCRAwIFBHBtdHMAAQZhbW91bnQFA0JJZAMJAAACCQCQAwEFBHBtdHMAAQMJAAACCQEMYXNzZXRJZFRvU3RyAQgJAJEDAgUEcG10cwAAB2Fzc2V0SWQFA0FJZAkAlgoECAkAkQMCBQRwbXRzAAAGYW1vdW50BQNBSWQAAAUDQklkAwkAAAIJAQxhc3NldElkVG9TdHIBCAkAkQMCBQRwbXRzAAAHYXNzZXRJZAUDQklkCQCWCgQAAAUDQUlkCAkAkQMCBQRwbXRzAAAGYW1vdW50BQNCSWQJAAIBAg1Xcm9uZyBwYXltZW50CQACAQIcT25lIG9yIHR3byBwYXltZW50cyBleHBlY3RlZAEPY2FsY1ByaWNlSW1wYWN0BARiYWxBBGJhbEIHbmV3QmFsQQduZXdCYWxCBANwcmkJAGgCCQBlAgUGU0NBTEU4CQBrAwkAawMFBGJhbEIFBlNDQUxFOAUEYmFsQQUGU0NBTEU4CQBrAwUHbmV3QmFsQgUGU0NBTEU4BQduZXdCYWxBAGQDCQBmAgAABQNwcmkJAGgCBQNwcmkA////////////AQUDcHJpEAFpARpnZXRTaGFyZUFzc2V0UHJpY2VSRUFET05MWQEHc2hhcmVJZAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAkAlAoCBQNuaWwFC3NoYXJlUHJpY2VzAWkBImdldFVzZXJQb3NpdGlvblNoYXJlQW1vdW50UkVBRE9OTFkCBHVzZXIGcG9zTnVtBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlclBvc2l0aW9uUG9vbAIQVW5rbm93biBwb3NpdGlvbgQMYm9ycm93QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAQPdXNlckNhbldpdGhkcmF3CQEYdXNlckNhbldpdGhkcmF3U2hhcmVDYWxjBAUEdXNlcgUEcG9vbAUGcG9zTnVtCQBmAgUMYm9ycm93QW1vdW50AAAJAJQKAgUDbmlsBQ91c2VyQ2FuV2l0aGRyYXcBaQEgZ2V0VXNlclBvc2l0aW9uSW5Eb2xsYXJzUkVBRE9OTFkDBHVzZXIFcG9vbHMGcG9zTnVtCgEHdXNlclBvcwIBYQRwb29sBA0kdDAyOTk3ODMwMDEyBQFhBAh0b3RhbFBvcwgFDSR0MDI5OTc4MzAwMTICXzEEB3Bvc0RlYnQIBQ0kdDAyOTk3ODMwMDEyAl8yBAVpbmRleAgFDSR0MDI5OTc4MzAwMTICXzMEBXBUeXBlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAISUG9vbCBpcyBub3QgaW5pdGVkBA0kdDAzMDEwNDMwMTk0CQELZ2V0UG9vbERhdGECCQEHQWRkcmVzcwEJANkEAQUEcG9vbAUFcFR5cGUEA0FJZAgFDSR0MDMwMTA0MzAxOTQCXzEEA0JJZAgFDSR0MDMwMTA0MzAxOTQCXzIEBGJhbEEIBQ0kdDAzMDEwNDMwMTk0Al8zBARiYWxCCAUNJHQwMzAxMDQzMDE5NAJfNAQHc2hhcmVJZAgFDSR0MDMwMTA0MzAxOTQCXzUEDGJvcnJvd0Ftb3VudAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwkAkQMCBQZwb3NOdW0FBWluZGV4BRFrVXNlckJvcnJvd0Ftb3VudAAABA91c2VyQ2FuV2l0aGRyYXcJARh1c2VyQ2FuV2l0aGRyYXdTaGFyZUNhbGMEBQR1c2VyBQRwb29sCQCRAwIFBnBvc051bQUFaW5kZXgJAGYCBQxib3Jyb3dBbW91bnQAAAQLc2hhcmVQcmljZXMJAQ1nZXRTaGFyZVByaWNlAQUHc2hhcmVJZAQKZGVjUHJTaGFyZQkAbAYACgAACQEQZ2V0QXNzZXREZWNpbWFscwEFB3NoYXJlSWQAAAAABQRET1dOBAZzaGFyZUQJAGsDBQ91c2VyQ2FuV2l0aGRyYXcFC3NoYXJlUHJpY2VzBQpkZWNQclNoYXJlAwkAAAIFDGJvcnJvd0Ftb3VudAAACQCVCgMJAM0IAgUIdG90YWxQb3MFBnNoYXJlRAkAzQgCBQdwb3NEZWJ0AAAJAGQCBQVpbmRleAABBAtib3Jyb3dBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAJEDAgUGcG9zTnVtBQVpbmRleAUSa1VzZXJCb3Jyb3dBc3NldElkBARkZWJ0CgABQAkA/AcECQEOZ2V0TGVuZFNydkFkZHIAAgxnZXRBc3NldERlYnQJAMwIAgcJAMwIAgkArAICCQCsAgIFBHVzZXICAV8JAJEDAgUGcG9zTnVtBQVpbmRleAkAzAgCBQtib3Jyb3dBc3NldAUDbmlsBQNuaWwDCQABAgUBQAIDSW50BQFACQACAQkArAICCQADAQUBQAIYIGNvdWxkbid0IGJlIGNhc3QgdG8gSW50BBBib3Jyb3dBc3NldFByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgULYm9ycm93QXNzZXQFDmtQcmljZUluT3JhY2xlBA1kZWNQckJvcnJvd0lkCQBsBgAKAAAJARBnZXRBc3NldERlY2ltYWxzAQULYm9ycm93QXNzZXQAAAAABQRET1dOBAVkZWJ0RAkAawMFBGRlYnQFEGJvcnJvd0Fzc2V0UHJpY2UFDWRlY1ByQm9ycm93SWQJAJUKAwkAzQgCBQh0b3RhbFBvcwUGc2hhcmVECQDNCAIFB3Bvc0RlYnQFBWRlYnRECQBkAgUFaW5kZXgAAQQNJHQwMzEyMTQzMTI2OQoAAiRsBQVwb29scwoAAiRzCQCQAwEFAiRsCgAFJGFjYzAJAJUKAwUDbmlsBQNuaWwAAAoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEHdXNlclBvcwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBANwb3MIBQ0kdDAzMTIxNDMxMjY5Al8xBARkZWJ0CAUNJHQwMzEyMTQzMTI2OQJfMgkAlAoCBQNuaWwJAJQKAgUDcG9zBQRkZWJ0AWkBCXJlcGxlbmlzaAMEcG9vbAhsZXZlcmFnZQhib3Jyb3dJZAMDCQBmAgBkBQhsZXZlcmFnZQYJAGYCBQhsZXZlcmFnZQCsAgkAAgECH0xldmVyYWdlIGNhbid0IGJlIDwxMDAgYW5kID4zMDADAwkBASEBCQERQGV4dHJOYXRpdmUoMTA1MSkCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FuQm9ycm93CQBmAgUIbGV2ZXJhZ2UAZAcJAAIBAh1Zb3UgY2FuJ3QgYm9ycm93IGluIHRoaXMgcG9vbAQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDMxNzA5MzE3OTkJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzE3MDkzMTc5OQJfMQQDQklkCAUNJHQwMzE3MDkzMTc5OQJfMgQEYmFsQQgFDSR0MDMxNzA5MzE3OTkCXzMEBGJhbEIIBQ0kdDAzMTcwOTMxNzk5Al80BAdzaGFyZUlkCAUNJHQwMzE3MDkzMTc5OQJfNQQNJHQwMzE4MDIzMTg4MwkBEnBhcnNlUmVwbGVuaXNoUG10cwMIBQFpCHBheW1lbnRzBQNBSWQFA0JJZAQEcG10QQgFDSR0MDMxODAyMzE4ODMCXzEECXBtdEFzc2V0QQgFDSR0MDMxODAyMzE4ODMCXzIEBHBtdEIIBQ0kdDAzMTgwMjMxODgzAl8zBAlwbXRBc3NldEIIBQ0kdDAzMTgwMjMxODgzAl80BAR1c2VyCQClCAEIBQFpBmNhbGxlcgQJbmV3UG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQUEdXNlcgMJAGYCBQhsZXZlcmFnZQBkBAxib3Jyb3dBbW91bnQJARBjYWxjQm9ycm93QW1vdW50BgUEcG10QQUEcG10QgUJcG10QXNzZXRBBQlwbXRBc3NldEIFCGxldmVyYWdlBQhib3Jyb3dJZAQHcmVxdWVzdAkAuQkCCQDMCAIFBHVzZXIJAMwIAgUEcG9vbAkAzAgCCQCkAwEFBHBtdEEJAMwIAgUJcG10QXNzZXRBCQDMCAIJAKQDAQUEcG10QgkAzAgCBQlwbXRBc3NldEIJAMwIAgkApAMBBQRiYWxBCQDMCAIJAKQDAQUEYmFsQgkAzAgCBQdzaGFyZUlkCQDMCAIFCGJvcnJvd0lkCQDMCAIJAKQDAQUMYm9ycm93QW1vdW50BQNuaWwCASwEDG5ld1JlcXVlc3RJZAoAAUAJAPwHBAUEdGhpcwIQY3JlYXRlTmV3UmVxdWVzdAkAzAgCBQdyZXF1ZXN0BQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQDCQAAAgUMbmV3UmVxdWVzdElkBQxuZXdSZXF1ZXN0SWQEBGFyZ3MJAMwIAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUJbmV3UG9zTnVtCQDMCAIFB3NoYXJlSWQJAMwIAgUIYm9ycm93SWQJAMwIAgUMYm9ycm93QW1vdW50CQDMCAIJAKUIAQUEdGhpcwkAzAgCAhFyZXBsZW5pc2hGcm9tTGFuZAkAzAgCCQCkAwEJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgUMbmV3UmVxdWVzdElkAhhDYW4ndCBjcmVhdGUgbmV3IHJlcXVlc3QFA25pbAQDaW52CQD9BwQJAQ5nZXRMZW5kU3J2QWRkcgACDWZsYXNoUG9zaXRpb24FBGFyZ3MFA25pbAMJAAACBQNpbnYFA2ludgQKdXNlclN0YWtlZAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUJbmV3UG9zTnVtBQ1rVXNlclBvc2l0aW9uBA0kdDAzMjg5NjMyOTkwCQEPZ2V0UG9vbEJhbGFuY2VzBAkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBQNBSWQFA0JJZAMJAAACBQ0kdDAzMjg5NjMyOTkwBQ0kdDAzMjg5NjMyOTkwBAduZXdCYWxCCAUNJHQwMzI4OTYzMjk5MAJfMgQHbmV3QmFsQQgFDSR0MDMyODk2MzI5OTACXzEECHBySW1wYWN0CQEPY2FsY1ByaWNlSW1wYWN0BAUEYmFsQQUEYmFsQgUHbmV3QmFsQQUHbmV3QmFsQgQNJHQwMzMwNjAzMzE3NQkBGmNhbGNXaXRoZHJhd0xQRnJvbVBvb2xWaXJ0BAkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQp1c2VyU3Rha2VkBAh3QW1vdW50QQgFDSR0MDMzMDYwMzMxNzUCXzEECHdBbW91bnRCCAUNJHQwMzMwNjAzMzE3NQJfMgkAlAoCBQNuaWwJAMwIAgUIcHJJbXBhY3QJAMwIAgUId0Ftb3VudEEJAMwIAgUId0Ftb3VudEIFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQNJHQwMzMyMjgzMzM0MAkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQtOT19MT0FOX0ZFRQUEcG10QQUDQUlkBQRwbXRCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzMzIyODMzMzQwAl8xBAdheGx5RmVlCAUNJHQwMzMyMjgzMzM0MAJfMgQNJHQwMzMzNDYzMzQ0MAkBD2dldFBvb2xCYWxhbmNlcwQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUDQUlkBQNCSWQDCQAAAgUNJHQwMzMzNDYzMzQ0MAUNJHQwMzMzNDYzMzQ0MAQHbmV3QmFsQggFDSR0MDMzMzQ2MzM0NDACXzIEB25ld0JhbEEIBQ0kdDAzMzM0NjMzNDQwAl8xBAhwckltcGFjdAkBD2NhbGNQcmljZUltcGFjdAQFBGJhbEEFBGJhbEIFB25ld0JhbEEFB25ld0JhbEIEDSR0MDMzNTEwMzM2MjUJARpjYWxjV2l0aGRyYXdMUEZyb21Qb29sVmlydAQJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQUHc2hhcmVJZAUKdXNlclN0YWtlZAQId0Ftb3VudEEIBQ0kdDAzMzUxMDMzNjI1Al8xBAh3QW1vdW50QggFDSR0MDMzNTEwMzM2MjUCXzIJAJQKAgkAzggCCQEQcmVwbGVuaXNoRW50cmllcwgFBHBvb2wFBHVzZXIFCnVzZXJTdGFrZWQFB2F4bHlGZWUFCW5ld1Bvc051bQUHc2hhcmVJZAUFcFR5cGUHCQEOZ2V0Q3Vyc0VudHJpZXMEBQNBSWQFA0JJZAUHc2hhcmVJZAkAzAgCCQCkAwEFCHdBbW91bnRBCQDMCAIJAKQDAQUId0Ftb3VudEIFA25pbAkAzAgCBQhwckltcGFjdAkAzAgCBQh3QW1vdW50QQkAzAgCBQh3QW1vdW50QgUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCHdpdGhkcmF3AgRwb29sBXBvc0lkCQEOd2l0aGRyYXdUb1VzZXIECQClCAEIBQFpBmNhbGxlcgUEcG9vbAkApAMBBQVwb3NJZAcBaQEUY3JlYXRlVXBkYXRlU3RvcExvc3MEBXBvc0lkBnBvb2xJZAdhc3NldElkBXByaWNlBBB0b2tlbk9yYWNsZVByaWNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQ9wcmljZU9yYWNsZUFkZHIJAKwCAgUHYXNzZXRJZAUOa1ByaWNlSW5PcmFjbGUDCQEBIQEJAQlpc0RlZmluZWQBCQCaCAIFBHRoaXMJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQZwb29sSWQCAV8JAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkBQ1rVXNlclBvc2l0aW9uCQACAQIaVGhlcmUgYXJlIG5vIHVzZXIgcG9zaXRpb24DCQBnAgAABQVwcmljZQkAAgECHFByaWNlIG11c3QgYmUgZ3JlYXRlciB0aGFuIDADCQBmAgUFcHJpY2UFEHRva2VuT3JhY2xlUHJpY2UJAAIBAitQcmljZSBtdXN0IGJlIGxlc3MgdGhhbiBjdXJyZW50IHRva2VuIHByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MFBXByaWNlBQNuaWwBaQEOZGVsZXRlU3RvcExvc3MDBXBvc0lkBnBvb2xJZAdhc3NldElkAwkBASEBCQEJaXNEZWZpbmVkAQkAmggCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MJAAIBAghObyBlbnRyeQkAzAgCCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKUIAQgFAWkGY2FsbGVyAgFfCQCkAwEFBXBvc0lkAgFfBQZwb29sSWQCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MFA25pbAFpAQRpbml0CQxtb25leUJveEFkZHINc2ZGYXJtaW5nQWRkcghsZW5kQWRkcg9wcmljZU9yYWNsZUFkZHIQa2VlcGVyRXhDb250cmFjdA53eFN3YXBDb250cmFjdAtzd29wQXNzZXRJZAl3eEFzc2V0SWQLYWRtaW5QdWJLZXkDCQEJaXNEZWZpbmVkAQkAoggBBQlrTW9uZXlCb3gJAAIBAg5BbHJlYWR5IGluaXRlZAkAzAgCCQELU3RyaW5nRW50cnkCBQlrTW9uZXlCb3gFDG1vbmV5Qm94QWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQ5rU0ZGYXJtaW5nQWRkcgUNc2ZGYXJtaW5nQWRkcgkAzAgCCQELU3RyaW5nRW50cnkCBQxrTGVuZFNlcnZpY2UFCGxlbmRBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFDGtQcmljZU9yYWNsZQUPcHJpY2VPcmFjbGVBZGRyCQDMCAIJAQtTdHJpbmdFbnRyeQIFC2tFeENvbnRyYWN0BRBrZWVwZXJFeENvbnRyYWN0CQDMCAIJAQtTdHJpbmdFbnRyeQIFD2tXeFN3YXBDb250cmFjdAUOd3hTd2FwQ29udHJhY3QJAMwIAgkBC1N0cmluZ0VudHJ5AgUHa1N3b3BJZAULc3dvcEFzc2V0SWQJAMwIAgkBC1N0cmluZ0VudHJ5AgUFa1d4SWQFCXd4QXNzZXRJZAkAzAgCCQELU3RyaW5nRW50cnkCBQxrQWRtaW5DYWxsUEsFC2FkbWluUHViS2V5BQNuaWwBaQEQY3JlYXRlTmV3UmVxdWVzdAEGcGFyYW1zCQELdmFsdWVPckVsc2UCCQEKaXNTZWxmQ2FsbAEFAWkEDG5ld1JlcXVlc3RJZAkAZAIJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUMa1JlcXVlc3RJdGVyAAAAAQkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAKwCAgkApAMBBQxuZXdSZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFBnBhcmFtcwkAzAgCCQEMSW50ZWdlckVudHJ5AgUMa1JlcXVlc3RJdGVyBQxuZXdSZXF1ZXN0SWQFA25pbAUMbmV3UmVxdWVzdElkAWkBEXJlcGxlbmlzaEZyb21MYW5kAQlyZXF1ZXN0SWQJAQt2YWx1ZU9yRWxzZQIJAQppc0xhbmRDYWxsAQUBaQQNJHQwMzYxNTEzNjI1NQkBDHBhcnNlUmVxdWVzdAEFCXJlcXVlc3RJZAQEdXNlcggFDSR0MDM2MTUxMzYyNTUCXzEEBHBvb2wIBQ0kdDAzNjE1MTM2MjU1Al8yBARwbXRBCAUNJHQwMzYxNTEzNjI1NQJfMwQDQUlkCAUNJHQwMzYxNTEzNjI1NQJfNAQEcG10QggFDSR0MDM2MTUxMzYyNTUCXzUEA0JJZAgFDSR0MDM2MTUxMzYyNTUCXzYEBGJhbEEIBQ0kdDAzNjE1MTM2MjU1Al83BARiYWxCCAUNJHQwMzYxNTEzNjI1NQJfOAQHc2hhcmVJZAgFDSR0MDM2MTUxMzYyNTUCXzkEB2J3QXNzZXQIBQ0kdDAzNjE1MTM2MjU1A18xMAQIYndBbW91bnQIBQ0kdDAzNjE1MTM2MjU1A18xMQMJAQIhPQIJAJADAQgFAWkIcGF5bWVudHMAAQkAAgECEldyb25nIHBheW1lbnQgc2l6ZQMDCQECIT0CCQEMYXNzZXRJZFRvU3RyAQgJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkBQdid0Fzc2V0BgkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQFCGJ3QW1vdW50CQACAQINV3JvbmcgcGF5bWVudAQNJHQwMzY0NDUzNjU2OQMJAAACBQNBSWQFB2J3QXNzZXQJAJQKAgkAZAIFBHBtdEEICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQRwbXRCCQCUCgIFBHBtdEEJAGQCBQRwbXRCCAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQHcG10QWxsQQgFDSR0MDM2NDQ1MzY1NjkCXzEEB3BtdEFsbEIIBQ0kdDAzNjQ0NTM2NTY5Al8yBAVwVHlwZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCdCAIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wCDFVua25vd24gcG9vbAQNJHQwMzY2NTEzNjc2NgkBD3JlcGxlbmlzaEJ5VHlwZQoFBXBUeXBlBQRwb29sBQhMT0FOX0ZFRQUHcG10QWxsQQUDQUlkBQdwbXRBbGxCBQNCSWQFBGJhbEEFBGJhbEIFB3NoYXJlSWQECnVzZXJTdGFrZWQIBQ0kdDAzNjY1MTM2NzY2Al8xBAdheGx5RmVlCAUNJHQwMzY2NTEzNjc2NgJfMgQGcG9zTnVtCQEYZ2V0TmV3VXNlclBvc2l0aW9uTnVtYmVyAQUEdXNlcgQNYm9ycm93RW50cmllcwkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRFrVXNlckJvcnJvd0Ftb3VudAUIYndBbW91bnQJAMwIAgkBC1N0cmluZ0VudHJ5AgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8JAKQDAQUGcG9zTnVtBRJrVXNlckJvcnJvd0Fzc2V0SWQFB2J3QXNzZXQFA25pbAQHZW50cmllcwkBEHJlcGxlbmlzaEVudHJpZXMIBQRwb29sBQR1c2VyBQp1c2VyU3Rha2VkBQdheGx5RmVlBQZwb3NOdW0FB3NoYXJlSWQFBXBUeXBlBgQNJHQwMzcxMjYzNzI0MQkBGmNhbGNXaXRoZHJhd0xQRnJvbVBvb2xWaXJ0BAkBB0FkZHJlc3MBCQDZBAEFBHBvb2wFBXBUeXBlBQdzaGFyZUlkBQp1c2VyU3Rha2VkBAh3QW1vdW50QQgFDSR0MDM3MTI2MzcyNDECXzEECHdBbW91bnRCCAUNJHQwMzcxMjYzNzI0MQJfMgkAlAoCCQDNCAIJAM4IAgkAzggCBQdlbnRyaWVzCQEOZ2V0Q3Vyc0VudHJpZXMEBQNBSWQFA0JJZAUHc2hhcmVJZAkAzAgCCQCkAwEFCHdBbW91bnRBCQDMCAIJAKQDAQUId0Ftb3VudEIFA25pbAUNYm9ycm93RW50cmllcwkBC0RlbGV0ZUVudHJ5AQkArAICBQlyZXF1ZXN0SWQFCmtSZXF1ZXN0SWQFCnVzZXJTdGFrZWQBaQEJbGlxdWlkYXRlAwR1c2VyBXBvc0lkD2xpcXVpZGF0ZUFtb3VudAkBC3ZhbHVlT3JFbHNlAgkBCmlzTGFuZENhbGwBBQFpBARwb29sCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJ0IAgUEdGhpcwkArAICCQCsAgIJAKwCAgUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyUG9zaXRpb25Qb29sAgtubyBwb3NpdGlvbgQFcFR5cGUJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQR0aGlzCQCsAgIFBWtQb29sBQRwb29sAhJQb29sIGlzIG5vdCBpbml0ZWQEDSR0MDM3NzM2Mzc4MjYJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQRwb29sBQVwVHlwZQQDQUlkCAUNJHQwMzc3MzYzNzgyNgJfMQQDQklkCAUNJHQwMzc3MzYzNzgyNgJfMgQEYmFsQQgFDSR0MDM3NzM2Mzc4MjYCXzMEBGJhbEIIBQ0kdDAzNzczNjM3ODI2Al80BAdzaGFyZUlkCAUNJHQwMzc3MzYzNzgyNgJfNQQGYW1vdW50CQEJdW5zdGFrZUxQBAUEcG9vbAUFcFR5cGUFB3NoYXJlSWQFD2xpcXVpZGF0ZUFtb3VudAQMYm9ycm93QW1vdW50CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFEWtVc2VyQm9ycm93QW1vdW50BAtib3Jyb3dBc3NldAkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHBvb2wCAV8FBHVzZXICAV8FBXBvc0lkBRJrVXNlckJvcnJvd0Fzc2V0SWQED3VzZXJDYW5XaXRoZHJhdwkBGHVzZXJDYW5XaXRoZHJhd1NoYXJlQ2FsYwQFBHVzZXIFBHBvb2wFBXBvc0lkCQBmAgUMYm9ycm93QW1vdW50AAADCQAAAgUMYm9ycm93QW1vdW50AAAJAAIBAitZb3UgY2FuJ3QgbGlxdWlkYXRlIHBvc2l0aW9uIHdpdGhvdXQgYm9ycm93CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgUEcG9vbAIBXwUEdXNlcgIBXwUFcG9zSWQFFWtVc2VyUG9zaXRpb25JbnRlcmVzdAkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkArAICBQRwb29sBRFrUG9vbEludGVyZXN0TG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbFRvdGFsTG9hbgkAZQIJARlnZXRQb29sVG90YWxTaGFyZVdpdGhMb2FuAQUEcG9vbAUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFCmtQb29sVG90YWwJAGUCCQERZ2V0UG9vbFRvdGFsU2hhcmUBBQRwb29sBQ9saXF1aWRhdGVBbW91bnQJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQRwb29sAgFfBQR1c2VyAgFfBQVwb3NJZAUNa1VzZXJQb3NpdGlvbgkAZQIFD3VzZXJDYW5XaXRoZHJhdwUPbGlxdWlkYXRlQW1vdW50CQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUGYW1vdW50CQDZBAEFB3NoYXJlSWQFA25pbAFpAQhzdG9wTG9zcwQEdXNlcgVwb3NJZARwb29sB2Fzc2V0SWQJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEEHRva2VuT3JhY2xlUHJpY2UJARFAZXh0ck5hdGl2ZSgxMDUwKQIFD3ByaWNlT3JhY2xlQWRkcgkArAICBQdhc3NldElkBQ5rUHJpY2VJbk9yYWNsZQMJAQEhAQkBCWlzRGVmaW5lZAEJAJoIAgUEdGhpcwkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICBQR1c2VyAgFfCQCkAwEFBXBvc0lkAgFfBQRwb29sAgFfBQdhc3NldElkBQ1rVXNlclN0b3BMb3NzCQACAQIITm8gZW50cnkJAM0IAgkBDndpdGhkcmF3VG9Vc2VyBAkApQgBCAUBaQZjYWxsZXIFBHBvb2wJAKQDAQUFcG9zSWQGCQELRGVsZXRlRW50cnkBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIFBHVzZXICAV8JAKQDAQUFcG9zSWQCAV8FBHBvb2wCAV8FB2Fzc2V0SWQFDWtVc2VyU3RvcExvc3MBaQESY2FwaXRhbGl6ZUV4S2VlcGVyCwRwb29sCXRva2VuVG9JZBBhbW91bnRUb0V4Y2hhbmdlBWNsYWltCWFtb3VudHNJbglhZGRyZXNzZXMPYXNzZXRzVG9SZWNlaXZlC2VzdFJlY2VpdmVkEXNsaXBwYWdlVG9sZXJhbmNlC21pblJlY2VpdmVkB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEBHR5cGUJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wEDSR0MDM5NjE5Mzk4MTMDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDAzOTYxOTM5ODEzAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDAzOTYxOTM5ODEzAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZUtlZXBlcgoFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlhbW91bnRzSW4FCWFkZHJlc3NlcwUPYXNzZXRzVG9SZWNlaXZlBQtlc3RSZWNlaXZlZAURc2xpcHBhZ2VUb2xlcmFuY2UFC21pblJlY2VpdmVkBQdvcHRpb25zBAZjaGFuZ2UJAGUCBQ1jbGFpbWVkQW1vdW50BRBhbW91bnRUb0V4Y2hhbmdlBAtjaGFuZ2VFbnRyeQMJAGYCBQZjaGFuZ2UAAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQkAZAIFBmNoYW5nZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlAAAFA25pbAUDbmlsCQDOCAIJAQpjYXBpdGFsaXplBAUEcG9vbAUEdHlwZQUJdG9rZW5Ub0lkBQ9leGNoYW5nZWRBbW91bnQFC2NoYW5nZUVudHJ5AWkBEmNhcGl0YWxpemVFeFB1enpsZQcEcG9vbAl0b2tlblRvSWQQYW1vdW50VG9FeGNoYW5nZQVjbGFpbQlyb3V0ZXNTdHIMbWluVG9SZWNlaXZlB29wdGlvbnMJAQt2YWx1ZU9yRWxzZQIJAQtpc0FkbWluQ2FsbAEFAWkEBHR5cGUJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMJAKwCAgUFa1Bvb2wFBHBvb2wEDSR0MDQwNTI4NDA3MjIDBQVjbGFpbQkBC2NsYWltRmFybWVkAgUEdHlwZQUEcG9vbAQMY2xhaW1lZEFzc2V0AwkAAAIFBHR5cGUFB1NGX1BPT0wFBlNXT1BJRAUEV1hJRAkAlAoCBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQEDWNsYWltZWRBbW91bnQIBQ0kdDA0MDUyODQwNzIyAl8xBAxjbGFpbWVkQXNzZXQIBQ0kdDA0MDUyODQwNzIyAl8yBA9leGNoYW5nZWRBbW91bnQJAQ5leGNoYW5nZVB1enpsZQYFCXRva2VuVG9JZAUQYW1vdW50VG9FeGNoYW5nZQUMY2xhaW1lZEFzc2V0BQlyb3V0ZXNTdHIFDG1pblRvUmVjZWl2ZQUHb3B0aW9ucwQGY2hhbmdlCQBlAgUNY2xhaW1lZEFtb3VudAUQYW1vdW50VG9FeGNoYW5nZQQLY2hhbmdlRW50cnkDCQBmAgUGY2hhbmdlAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UJAGQCBQZjaGFuZ2UJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkArAICBQRwb29sBQ5rUG9vbENhcENoYW5nZQAABQNuaWwFA25pbAkAzggCCQEKY2FwaXRhbGl6ZQQFBHBvb2wFBHR5cGUFCXRva2VuVG9JZAUPZXhjaGFuZ2VkQW1vdW50BQtjaGFuZ2VFbnRyeQFpARJjYXBpdGFsaXplRXhTd29wRmkLBHBvb2wJdG9rZW5Ub0lkEGFtb3VudFRvRXhjaGFuZ2UFY2xhaW0KZXhjaGFuZ2Vycw5leGNoYW5nZXJzVHlwZQVhcmdzMQVhcmdzMhFyb3V0aW5nQXNzZXRzS2V5cxJtaW5BbW91bnRUb1JlY2VpdmUHb3B0aW9ucwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQQEdHlwZQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwkArAICBQVrUG9vbAUEcG9vbAQNJHQwNDE1MDQ0MTY5OAMFBWNsYWltCQELY2xhaW1GYXJtZWQCBQR0eXBlBQRwb29sBAxjbGFpbWVkQXNzZXQDCQAAAgUEdHlwZQUHU0ZfUE9PTAUGU1dPUElEBQRXWElECQCUCgIFEGFtb3VudFRvRXhjaGFuZ2UFDGNsYWltZWRBc3NldAQNY2xhaW1lZEFtb3VudAgFDSR0MDQxNTA0NDE2OTgCXzEEDGNsYWltZWRBc3NldAgFDSR0MDQxNTA0NDE2OTgCXzIED2V4Y2hhbmdlZEFtb3VudAkBDmV4Y2hhbmdlU3dvcEZpCgUJdG9rZW5Ub0lkBRBhbW91bnRUb0V4Y2hhbmdlBQxjbGFpbWVkQXNzZXQFCmV4Y2hhbmdlcnMFDmV4Y2hhbmdlcnNUeXBlBQVhcmdzMQUFYXJnczIFEXJvdXRpbmdBc3NldHNLZXlzBRJtaW5BbW91bnRUb1JlY2VpdmUFB29wdGlvbnMEBmNoYW5nZQkAZQIFDWNsYWltZWRBbW91bnQFEGFtb3VudFRvRXhjaGFuZ2UEC2NoYW5nZUVudHJ5AwkAZgIFBmNoYW5nZQAACQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFBHBvb2wFDmtQb29sQ2FwQ2hhbmdlCQBkAgUGY2hhbmdlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgUEcG9vbAUOa1Bvb2xDYXBDaGFuZ2UAAAUDbmlsBQNuaWwJAM4IAgkBCmNhcGl0YWxpemUEBQRwb29sBQR0eXBlBQl0b2tlblRvSWQFD2V4Y2hhbmdlZEFtb3VudAULY2hhbmdlRW50cnkBaQELaW5pdE5ld1Bvb2wJBHR5cGUIcG9vbEFkZHILaW5GZWVOb0xvYW4JaW5GZWVMb2FuDGNhcEZlZU5vTG9hbg5jYXBGZWVXaXRoTG9hbhFzdG9wbG9zc0ZlZU5vTG9hbhNzdG9wbG9zc0ZlZVdpdGhMb2FuCWNhbkJvcnJvdwkBC3ZhbHVlT3JFbHNlAgkBC2lzQWRtaW5DYWxsAQUBaQMDCQECIT0CBQR0eXBlBQdTRl9QT09MCQECIT0CBQR0eXBlBQdXWF9QT09MBwkAAgECCldyb25nIHR5cGUEDSR0MDQyNDM5NDI1MzMJAQtnZXRQb29sRGF0YQIJAQdBZGRyZXNzAQkA2QQBBQhwb29sQWRkcgUEdHlwZQQDYUlkCAUNJHQwNDI0Mzk0MjUzMwJfMQQDYklkCAUNJHQwNDI0Mzk0MjUzMwJfMgQEYUJhbAgFDSR0MDQyNDM5NDI1MzMCXzMEBGJCYWwIBQ0kdDA0MjQzOTQyNTMzAl80BAdzaGFyZUlkCAUNJHQwNDI0Mzk0MjUzMwJfNQkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUVa0F4bHlJbkZlZVdpdGhvdXRMb2FuBQtpbkZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUSa0F4bHlJbkZlZVdpdGhMb2FuBQlpbkZlZUxvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtBeGx5Tm9Mb2FuQ2FwRmVlBQxjYXBGZWVOb0xvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tBeGx5V2l0aExvYW5DYXBGZWUFDmNhcEZlZVdpdGhMb2FuCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQCsAgIFCHBvb2xBZGRyBRZrQXhseVN0b3BMb3NzTm9Mb2FuRmVlBRFzdG9wbG9zc0ZlZU5vTG9hbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkArAICBQhwb29sQWRkcgUUa0F4bHlTdG9wTG9zc0xvYW5GZWUFE3N0b3Bsb3NzRmVlV2l0aExvYW4JAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFEWtQb29sSW50ZXJlc3RMb2FuAAAJAMwIAgkBDEludGVnZXJFbnRyeQIJAKwCAgUIcG9vbEFkZHIFE2tQb29sSW50ZXJlc3ROb0xvYW4AAAkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFBWtQb29sBQhwb29sQWRkcgUEdHlwZQkAzAgCCQELU3RyaW5nRW50cnkCCQCsAgIFB3NoYXJlSWQFCmtTaGFyZVBvb2wFCHBvb2xBZGRyCQDMCAIJAQxCb29sZWFuRW50cnkCCQCsAgIFCHBvb2xBZGRyBQ5rUG9vbENhbkJvcnJvdwUJY2FuQm9ycm93BQNuaWwBAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5b1AxWA==", "height": 2669712, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: JBuqH64sDbEgp5ujCnL39kaS2G1hNJy1k4DCmr2MsK7z Next: 4bMJ1pGGg6VNhmSb5F74VxHTeVTT8WcKGE7h5qPyovJP Diff:
OldNewDifferences
11871187
11881188
11891189 @Callable(al)
1190-func capitalizeExKeeper (aM,aA,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1190+func capitalizeExKeeper (aM,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1191+ let aA = getStringValue(this, (N + aM))
11911192 let fV = if (fU)
11921193 then cB(aA, aM)
11931194 else {
12091210
12101211
12111212 @Callable(al)
1212-func capitalizeExPuzzle (aM,aA,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1213+func capitalizeExPuzzle (aM,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1214+ let aA = getStringValue(this, (N + aM))
12131215 let ga = if (fU)
12141216 then cB(aA, aM)
12151217 else {
12311233
12321234
12331235 @Callable(al)
1234-func capitalizeExSwopFi (aM,aA,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1236+func capitalizeExSwopFi (aM,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1237+ let aA = getStringValue(this, (N + aM))
12351238 let gb = if (fU)
12361239 then cB(aA, aM)
12371240 else {
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)
1190-func capitalizeExKeeper (aM,aA,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1190+func capitalizeExKeeper (aM,fS,fT,fU,df,dg,dh,di,dj,dk,dl) = valueOrElse(ak(al), {
1191+ let aA = getStringValue(this, (N + aM))
11911192 let fV = if (fU)
11921193 then cB(aA, aM)
11931194 else {
11941195 let fW = if ((aA == a))
11951196 then ag
11961197 else ah
11971198 $Tuple2(fT, fW)
11981199 }
11991200 let fX = fV._1
12001201 let fW = fV._2
12011202 let fY = db(fS, fT, fW, df, dg, dh, di, dj, dk, dl)
12021203 let cL = (fX - fT)
12031204 let fZ = if ((cL > 0))
12041205 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12051206 else nil
12061207 (dx(aM, aA, fS, fY) ++ fZ)
12071208 })
12081209
12091210
12101211
12111212 @Callable(al)
1212-func capitalizeExPuzzle (aM,aA,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1213+func capitalizeExPuzzle (aM,fS,fT,fU,do,dp,dl) = valueOrElse(ak(al), {
1214+ let aA = getStringValue(this, (N + aM))
12131215 let ga = if (fU)
12141216 then cB(aA, aM)
12151217 else {
12161218 let fW = if ((aA == a))
12171219 then ag
12181220 else ah
12191221 $Tuple2(fT, fW)
12201222 }
12211223 let fX = ga._1
12221224 let fW = ga._2
12231225 let fY = dn(fS, fT, fW, do, dp, dl)
12241226 let cL = (fX - fT)
12251227 let fZ = if ((cL > 0))
12261228 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12271229 else nil
12281230 (dx(aM, aA, fS, fY) ++ fZ)
12291231 })
12301232
12311233
12321234
12331235 @Callable(al)
1234-func capitalizeExSwopFi (aM,aA,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1236+func capitalizeExSwopFi (aM,fS,fT,fU,dr,ds,dt,du,dv,dw,dl) = valueOrElse(ak(al), {
1237+ let aA = getStringValue(this, (N + aM))
12351238 let gb = if (fU)
12361239 then cB(aA, aM)
12371240 else {
12381241 let fW = if ((aA == a))
12391242 then ag
12401243 else ah
12411244 $Tuple2(fT, fW)
12421245 }
12431246 let fX = gb._1
12441247 let fW = gb._2
12451248 let fY = dq(fS, fT, fW, dr, ds, dt, du, dv, dw, dl)
12461249 let cL = (fX - fT)
12471250 let fZ = if ((cL > 0))
12481251 then [IntegerEntry((aM + P), (cL + valueOrElse(getInteger(this, (aM + P)), 0)))]
12491252 else nil
12501253 (dx(aM, aA, fS, fY) ++ fZ)
12511254 })
12521255
12531256
12541257
12551258 @Callable(al)
12561259 func initNewPool (aA,au,gc,gd,ge,gf,gg,gh,gi) = valueOrElse(ak(al), if (if ((aA != a))
12571260 then (aA != b)
12581261 else false)
12591262 then throw("Wrong type")
12601263 else {
12611264 let gj = aJ(Address(fromBase58String(au)), aA)
12621265 let aw = gj._1
12631266 let ax = gj._2
12641267 let gk = gj._3
12651268 let gl = gj._4
12661269 let aH = gj._5
12671270 [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)]
12681271 })
12691272
12701273
12711274 @Verifier(gm)
12721275 func gn () = sigVerify(gm.bodyBytes, gm.proofs[0], gm.senderPublicKey)
12731276

github/deemru/w8io/026f985 
128.56 ms