tx · 2TJUj2YAiu1o4meX1SUia5HeEvyVfFJko1LCXzW6Neun

3MsAsECgvs3yQbezGUFsRxBH6NGuEZSLV2f:  -0.09800000 Waves

2023.03.01 11:04 [2470738] smart account 3MsAsECgvs3yQbezGUFsRxBH6NGuEZSLV2f > SELF 0.00000000 Waves

{ "type": 13, "id": "2TJUj2YAiu1o4meX1SUia5HeEvyVfFJko1LCXzW6Neun", "fee": 9800000, "feeAssetId": null, "timestamp": 1677657837024, "version": 2, "chainId": 84, "sender": "3MsAsECgvs3yQbezGUFsRxBH6NGuEZSLV2f", "senderPublicKey": "CfhnsiVkRfv8ce2p2fPcdKK41WoVn8g8WRq1UJJKuUY8", "proofs": [ "3DEYYeoqqurJDMwjxbrM8hJXESxCaA8DE1mPVrKw14P5fhrx786DRyNQb2HrEFCrgfJQ9gMmfnBgoYr3tE6oN2we" ], "script": "base64:BgKxAQgCEgUKAwEEARIHCgUBBAEIARIDCgEIEgMKAQgSABIECgIBBBIECgIBBBIDCgEBEgASBAoCCAESABIECgIIARIECgIIARIECgIBARIDCgEBEgUKAwEBARIFCgMBCAESBAoCAQgSBAoCAQgSBAoCCAgSBAoCCAgSBAoCCAESABIDCgEIEgUKAwEBARIECgIIARIECgIBARIECgIICBILCgkIAQECAQIIBAQSBgoECAgBCIIBAAZzY2FsZTgAgMLXLwAMc2NhbGU4QmlnSW50CQC2AgEAgMLXLwAHc2NhbGUxOAkAtgIBAICAkLu61q3wDQAKemVyb0JpZ0ludAkAtgIBAAAABGJpZzAJALYCAQAAAARiaWcxCQC2AgEAAQAEYmlnMgkAtgIBAAIABGJpZzMJALYCAQADAARiaWc0CQC2AgEABAAKc2xpcHBhZ2U0RAkAtgIBCQBlAgUGc2NhbGU4CQBpAgkAaAIFBnNjYWxlOAABBQZzY2FsZTgAC3dhdmVzU3RyaW5nAgVXQVZFUwAFQW11bHQCAzEwMAAFRGNvbnYCATEAA1NFUAICX18ABUVNUFRZAgAAClBvb2xBY3RpdmUAAQAKUG9vbFB1dERpcwACAA5Qb29sTWF0Y2hlckRpcwADAAxQb29sU2h1dGRvd24ABAAOaWR4UG9vbEFkZHJlc3MAAQAJaWR4UG9vbFN0AAIACWlkeExQQXNJZAADAAlpZHhBbUFzSWQABAAJaWR4UHJBc0lkAAUAC2lkeEFtdEFzRGNtAAYADWlkeFByaWNlQXNEY20ABwALaWR4SUFtdEFzSWQACAANaWR4SVByaWNlQXNJZAAJAA9pZHhGYWN0U3Rha0NudHIAAQASaWR4RmFjdG9yeVJlc3RDbnRyAAYAEGlkeEZhY3RTbGlwcENudHIABwARaWR4RmFjdEd3eFJld0NudHIACgAKZmVlRGVmYXVsdAkAawMACgUGc2NhbGU4AJBOAQJ0MQIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQC8AgMJALYCAQUHb3JpZ1ZhbAUHc2NhbGUxOAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQh0MUJpZ0ludAIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQC8AgMFB29yaWdWYWwFB3NjYWxlMTgFDW9yaWdTY2FsZU11bHQBAmYxAgN2YWwPcmVzdWx0U2NhbGVNdWx0CQCgAwEJALwCAwUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUHc2NhbGUxOAEMZnJvbVgxOFJvdW5kAwN2YWwPcmVzdWx0U2NhbGVNdWx0BXJvdW5kCQCgAwEJAL0CBAUDdmFsCQC2AgEFD3Jlc3VsdFNjYWxlTXVsdAUHc2NhbGUxOAUFcm91bmQBAnQyAgdvcmlnVmFsDW9yaWdTY2FsZU11bHQJALwCAwUHb3JpZ1ZhbAUHc2NhbGUxOAkAtgIBBQ1vcmlnU2NhbGVNdWx0AQJmMgIDdmFsD3Jlc3VsdFNjYWxlTXVsdAkAvAIDBQN2YWwJALYCAQUPcmVzdWx0U2NhbGVNdWx0BQdzY2FsZTE4AQJ0cwMDYW10CHJlc1NjYWxlCGN1clNjYWxlCQBrAwUDYW10BQhyZXNTY2FsZQUIY3VyU2NhbGUBA2FicwEDdmFsAwkAvwICBQp6ZXJvQmlnSW50BQN2YWwJAL4CAQUDdmFsBQN2YWwBCWFic0JpZ0ludAEDdmFsAwkAvwICBQp6ZXJvQmlnSW50BQN2YWwJAL4CAQUDdmFsBQN2YWwBAmZjAAITJXNfX2ZhY3RvcnlDb250cmFjdAEDbXBrAAIUJXNfX21hbmFnZXJQdWJsaWNLZXkBBHBtcGsAAhslc19fcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkBAnBsAAIRJXMlc19fcHJpY2VfX2xhc3QBAnBoAgFoAXQJALkJAgkAzAgCAhglcyVzJWQlZF9fcHJpY2VfX2hpc3RvcnkJAMwIAgkApAMBBQFoCQDMCAIJAKQDAQUBdAUDbmlsBQNTRVABA3BhdQICdWEEdHhJZAkArAICCQCsAgIJAKwCAgILJXMlcyVzX19QX18FAnVhAgJfXwUEdHhJZAEDZ2F1AgJ1YQR0eElkCQCsAgIJAKwCAgkArAICAgslcyVzJXNfX0dfXwUCdWECAl9fBQR0eElkAQJhYQACDyVzX19hbW91bnRBc3NldAECcGEAAg4lc19fcHJpY2VBc3NldAEDYW1wAAIHJXNfX2FtcAEDYWRhAAINJXNfX2FkZG9uQWRkcgAGa2V5RmVlAgclc19fZmVlAANmZWUJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUGa2V5RmVlBQpmZWVEZWZhdWx0AAZrZXlETHAJALkJAgkAzAgCAgIlcwkAzAgCAgNkTHAFA25pbAUDU0VQABVrZXlETHBSZWZyZXNoZWRIZWlnaHQJALkJAgkAzAgCAgIlcwkAzAgCAhJkTHBSZWZyZXNoZWRIZWlnaHQFA25pbAUDU0VQABJrZXlETHBSZWZyZXNoRGVsYXkJALkJAgkAzAgCAgIlcwkAzAgCAg9yZWZyZXNoRExwRGVsYXkFA25pbAUDU0VQABZkTHBSZWZyZXNoRGVsYXlEZWZhdWx0AB4AD2RMcFJlZnJlc2hEZWxheQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBRJrZXlETHBSZWZyZXNoRGVsYXkFFmRMcFJlZnJlc2hEZWxheURlZmF1bHQBBGZjZmcAAhElc19fZmFjdG9yeUNvbmZpZwEEbXRwawACGCVzJXNfX21hdGNoZXJfX3B1YmxpY0tleQECcGMCBmlBbXRBcwVpUHJBcwkArAICCQCsAgIJAKwCAgkArAICAgglZCVkJXNfXwUGaUFtdEFzAgJfXwUFaVByQXMCCF9fY29uZmlnAQNtYmEBBWJBU3RyCQCsAgICKCVzJXMlc19fbWFwcGluZ3NfX2Jhc2VBc3NldDJpbnRlcm5hbElkX18FBWJBU3RyAQNhcHMAAgwlc19fc2h1dGRvd24BHGtleUFsbG93ZWRMcFN0YWJsZVNjcmlwdEhhc2gAAh0lc19fYWxsb3dlZExwU3RhYmxlU2NyaXB0SGFzaAEWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwACFyVzX19mZWVDb2xsZWN0b3JBZGRyZXNzAQ90aHJvd09yZGVyRXJyb3IECm9yZGVyVmFsaWQOb3JkZXJWYWxpZEluZm8Lc2VuZGVyVmFsaWQMbWF0Y2hlclZhbGlkCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICJG9yZGVyIHZhbGlkYXRpb24gZmFpbGVkOiBvcmRlclZhbGlkPQkApQMBBQpvcmRlclZhbGlkAgIgKAUOb3JkZXJWYWxpZEluZm8CASkCDSBzZW5kZXJWYWxpZD0JAKUDAQULc2VuZGVyVmFsaWQCDiBtYXRjaGVyVmFsaWQ9CQClAwEFDG1hdGNoZXJWYWxpZAEEc3RyZgIEYWRkcgNrZXkJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQRhZGRyBQNrZXkJALkJAgkAzAgCAgptYW5kYXRvcnkgCQDMCAIJAKUIAQUEYWRkcgkAzAgCAgEuCQDMCAIFA2tleQkAzAgCAgwgbm90IGRlZmluZWQFA25pbAIAAQRpbnRmAgRhZGRyA2tleQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBGFkZHIFA2tleQkAuQkCCQDMCAICCm1hbmRhdG9yeSAJAMwIAgkApQgBBQRhZGRyCQDMCAICAS4JAMwIAgUDa2V5CQDMCAICDCBub3QgZGVmaW5lZAUDbmlsAgABCHRocm93RXJyAQNtc2cJAAIBCQC5CQIJAMwIAgIPbHBfc3RhYmxlLnJpZGU6CQDMCAIFA21zZwUDbmlsAgEgAQZmbXRFcnIBA21zZwkAuQkCCQDMCAICD2xwX3N0YWJsZS5yaWRlOgkAzAgCBQNtc2cFA25pbAIBIAADZmNhCQERQGV4dHJOYXRpdmUoMTA2MikBCQEEc3RyZgIFBHRoaXMJAQJmYwAABWluRmVlCgABQAkA/AcEBQNmY2ECEGdldEluRmVlUkVBRE9OTFkJAMwIAgkApQgBBQR0aGlzBQNuaWwFA25pbAMJAAECBQFAAgNJbnQFAUAJAAIBCQCsAgIJAAMBBQFAAhggY291bGRuJ3QgYmUgY2FzdCB0byBJbnQABm91dEZlZQoAAUAJAPwHBAUDZmNhAhFnZXRPdXRGZWVSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACA0ludAUBQAkAAgEJAKwCAgkAAwEFAUACGCBjb3VsZG4ndCBiZSBjYXN0IHRvIEludAABQQkBBHN0cmYCBQR0aGlzCQEDYW1wAAEDaWdzAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQNmY2EJAQNhcHMABwECbXAACQDZBAEJAQRzdHJmAgUDZmNhCQEEbXRwawAAE2ZlZUNvbGxlY3RvckFkZHJlc3MJARFAZXh0ck5hdGl2ZSgxMDYyKQEJAQRzdHJmAgUDZmNhCQEWa2V5RmVlQ29sbGVjdG9yQWRkcmVzcwABA2dwYwAEBWFtdEFzCQEEc3RyZgIFBHRoaXMJAQJhYQAEB3ByaWNlQXMJAQRzdHJmAgUEdGhpcwkBAnBhAAQIaVByaWNlQXMJAQRpbnRmAgUDZmNhCQEDbWJhAQUHcHJpY2VBcwQGaUFtdEFzCQEEaW50ZgIFA2ZjYQkBA21iYQEFBWFtdEFzCQC1CQIJAQRzdHJmAgUDZmNhCQECcGMCCQCkAwEFBmlBbXRBcwkApAMBBQhpUHJpY2VBcwUDU0VQAQxwYXJzZUFzc2V0SWQBBWlucHV0AwkAAAIFBWlucHV0BQt3YXZlc1N0cmluZwUEdW5pdAkA2QQBBQVpbnB1dAEPYXNzZXRJZFRvU3RyaW5nAQVpbnB1dAMJAAACBQVpbnB1dAUEdW5pdAULd2F2ZXNTdHJpbmcJANgEAQkBBXZhbHVlAQUFaW5wdXQBD3BhcnNlUG9vbENvbmZpZwEKcG9vbENvbmZpZwkAmwoJCQERQGV4dHJOYXRpdmUoMTA2MikBCQCRAwIFCnBvb2xDb25maWcFDmlkeFBvb2xBZGRyZXNzCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUJaWR4UG9vbFN0CQDZBAEJAJEDAgUKcG9vbENvbmZpZwUJaWR4TFBBc0lkCQEMcGFyc2VBc3NldElkAQkAkQMCBQpwb29sQ29uZmlnBQlpZHhBbUFzSWQJAQxwYXJzZUFzc2V0SWQBCQCRAwIFCnBvb2xDb25maWcFCWlkeFByQXNJZAkBDXBhcnNlSW50VmFsdWUBCQCRAwIFCnBvb2xDb25maWcFC2lkeEFtdEFzRGNtCQENcGFyc2VJbnRWYWx1ZQEJAJEDAgUKcG9vbENvbmZpZwUNaWR4UHJpY2VBc0RjbQkA2QQBCQCRAwIFCnBvb2xDb25maWcFC2lkeElBbXRBc0lkCQDZBAEJAJEDAgUKcG9vbENvbmZpZwUNaWR4SVByaWNlQXNJZAAQcG9vbENvbmZpZ1BhcnNlZAkBD3BhcnNlUG9vbENvbmZpZwEJAQNncGMAAAskdDA3OTY1ODE5NAUQcG9vbENvbmZpZ1BhcnNlZAAOY2ZnUG9vbEFkZHJlc3MIBQskdDA3OTY1ODE5NAJfMQANY2ZnUG9vbFN0YXR1cwgFCyR0MDc5NjU4MTk0Al8yAAxjZmdMcEFzc2V0SWQIBQskdDA3OTY1ODE5NAJfMwAQY2ZnQW1vdW50QXNzZXRJZAgFCyR0MDc5NjU4MTk0Al80AA9jZmdQcmljZUFzc2V0SWQIBQskdDA3OTY1ODE5NAJfNQAWY2ZnQW1vdW50QXNzZXREZWNpbWFscwgFCyR0MDc5NjU4MTk0Al82ABVjZmdQcmljZUFzc2V0RGVjaW1hbHMIBQskdDA3OTY1ODE5NAJfNwASY2ZnSW5BbW91bnRBc3NlZElkCAULJHQwNzk2NTgxOTQCXzgAEWNmZ0luUHJpY2VBc3NldElkCAULJHQwNzk2NTgxOTQCXzkBA2dmYwAJALUJAgkBBHN0cmYCBQNmY2EJAQRmY2ZnAAUDU0VQAA1mYWN0b3J5Q29uZmlnCQEDZ2ZjAAAPc3Rha2luZ0NvbnRyYWN0CQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQ1mYWN0b3J5Q29uZmlnBQ9pZHhGYWN0U3Rha0NudHICIEludmFsaWQgc3Rha2luZyBjb250cmFjdCBhZGRyZXNzAA9zbGlwYWdlQ29udHJhY3QJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFDWZhY3RvcnlDb25maWcFEGlkeEZhY3RTbGlwcENudHICIEludmFsaWQgc2xpcGFnZSBjb250cmFjdCBhZGRyZXNzAAtnd3hDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUNZmFjdG9yeUNvbmZpZwURaWR4RmFjdEd3eFJld0NudHICHEludmFsaWQgZ3d4IGNvbnRyYWN0IGFkZHJlc3MADHJlc3RDb250cmFjdAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUNZmFjdG9yeUNvbmZpZwUSaWR4RmFjdG9yeVJlc3RDbnRyAhxJbnZhbGlkIGd3eCBjb250cmFjdCBhZGRyZXNzARFkYXRhUHV0QWN0aW9uSW5mbwoNaW5BbXRBc3NldEFtdA9pblByaWNlQXNzZXRBbXQIb3V0THBBbXQFcHJpY2UKc2xpcEJ5VXNlcgxzbGlwcGFnZVJlYWwIdHhIZWlnaHQLdHhUaW1lc3RhbXAMc2xpcGFnZUFtQW10DHNsaXBhZ2VQckFtdAkAuQkCCQDMCAICFCVkJWQlZCVkJWQlZCVkJWQlZCVkCQDMCAIJAKQDAQUNaW5BbXRBc3NldEFtdAkAzAgCCQCkAwEFD2luUHJpY2VBc3NldEFtdAkAzAgCCQCkAwEFCG91dExwQW10CQDMCAIJAKQDAQUFcHJpY2UJAMwIAgkApAMBBQpzbGlwQnlVc2VyCQDMCAIJAKQDAQUMc2xpcHBhZ2VSZWFsCQDMCAIJAKQDAQUIdHhIZWlnaHQJAMwIAgkApAMBBQt0eFRpbWVzdGFtcAkAzAgCCQCkAwEFDHNsaXBhZ2VBbUFtdAkAzAgCCQCkAwEFDHNsaXBhZ2VQckFtdAUDbmlsBQNTRVABEWRhdGFHZXRBY3Rpb25JbmZvBg5vdXRBbXRBc3NldEFtdBBvdXRQcmljZUFzc2V0QW10B2luTHBBbXQFcHJpY2UIdHhIZWlnaHQLdHhUaW1lc3RhbXAJALkJAgkAzAgCAgwlZCVkJWQlZCVkJWQJAMwIAgkApAMBBQ5vdXRBbXRBc3NldEFtdAkAzAgCCQCkAwEFEG91dFByaWNlQXNzZXRBbXQJAMwIAgkApAMBBQdpbkxwQW10CQDMCAIJAKQDAQUFcHJpY2UJAMwIAgkApAMBBQh0eEhlaWdodAkAzAgCCQCkAwEFC3R4VGltZXN0YW1wBQNuaWwFA1NFUAENZ2V0QWNjQmFsYW5jZQEHYXNzZXRJZAMJAAACBQdhc3NldElkAgVXQVZFUwgJAO8HAQUEdGhpcwlhdmFpbGFibGUJAPAHAgUEdGhpcwkA2QQBBQdhc3NldElkAQRjcGJpAghwckFtdFgxOAhhbUFtdFgxOAkAvAIDBQhwckFtdFgxOAUHc2NhbGUxOAUIYW1BbXRYMTgBBWNwYmlyAwhwckFtdFgxOAhhbUFtdFgxOAVyb3VuZAkAvQIEBQhwckFtdFgxOAUHc2NhbGUxOAUIYW1BbXRYMTgFBXJvdW5kAQN2YWQDAkExAkEyCHNsaXBwYWdlBARkaWZmCQC8AgMJALgCAgUCQTEFAkEyBQxzY2FsZThCaWdJbnQFAkEyBARwYXNzCQC/AgIJALgCAgUIc2xpcHBhZ2UJAQNhYnMBBQRkaWZmBQp6ZXJvQmlnSW50AwkBASEBBQRwYXNzCQACAQkArAICAgpCaWcgc2xwZzogCQCmAwEFBGRpZmYJAJQKAgUEcGFzcwkAmQMBCQDMCAIFAkExCQDMCAIFAkEyBQNuaWwBAnZkAwJEMQJEMARzbHBnBARkaWZmCQC8AgMFAkQwBQxzY2FsZThCaWdJbnQFAkQxBARmYWlsCQC/AgIFBHNscGcFBGRpZmYDAwUEZmFpbAYJAL8CAgUCRDAFAkQxCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkApgMBBQJEMAIBIAkApgMBBQJEMQIBIAkApgMBBQRkaWZmAgEgCQCmAwEFBHNscGcFBGZhaWwBA3BjcAQKYW1Bc3NldERjbQpwckFzc2V0RGNtBWFtQW10BXByQW10BAthbXRBc0FtdFgxOAkBAnQxAgUFYW1BbXQFCmFtQXNzZXREY20ECnByQXNBbXRYMTgJAQJ0MQIFBXByQW10BQpwckFzc2V0RGNtCQEEY3BiaQIFCnByQXNBbXRYMTgFC2FtdEFzQW10WDE4AQpjYWxjUHJpY2VzAwVhbUFtdAVwckFtdAVscEFtdAQIYW10QXNEY20FFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMEB3ByQXNEY20FFWNmZ1ByaWNlQXNzZXREZWNpbWFscwQIcHJpY2VYMTgJAQNwY3AEBQhhbXRBc0RjbQUHcHJBc0RjbQUFYW1BbXQFBXByQW10BAhhbUFtdFgxOAkBAnQxAgUFYW1BbXQFCGFtdEFzRGNtBAhwckFtdFgxOAkBAnQxAgUFcHJBbXQFB3ByQXNEY20ECGxwQW10WDE4CQECdDECBQVscEFtdAUGc2NhbGU4BA1scFBySW5BbUFzWDE4CQEEY3BiaQIFCGFtQW10WDE4BQhscEFtdFgxOAQNbHBQckluUHJBc1gxOAkBBGNwYmkCBQhwckFtdFgxOAUIbHBBbXRYMTgJAMwIAgUIcHJpY2VYMTgJAMwIAgUNbHBQckluQW1Bc1gxOAkAzAgCBQ1scFBySW5QckFzWDE4BQNuaWwBD2NhbGN1bGF0ZVByaWNlcwMFYW1BbXQFcHJBbXQFbHBBbXQEAXAJAQpjYWxjUHJpY2VzAwUFYW1BbXQFBXByQW10BQVscEFtdAkAzAgCCQECZjECCQCRAwIFAXAAAAUGc2NhbGU4CQDMCAIJAQJmMQIJAJEDAgUBcAABBQZzY2FsZTgJAMwIAgkBAmYxAgkAkQMCBQFwAAIFBnNjYWxlOAUDbmlsAQd0YWtlRmVlAgZhbW91bnQDZmVlBAlmZWVBbW91bnQDCQAAAgUDZmVlAAAAAAkAawMFBmFtb3VudAUDZmVlBQZzY2FsZTgJAJQKAgkAZQIFBmFtb3VudAUJZmVlQW1vdW50BQlmZWVBbW91bnQBBGdldEQBAnhwBAN4cDAJAJEDAgUCeHAAAAQDeHAxCQCRAwIFAnhwAAEEAXMJALcCAgUDeHAwBQN4cDEDCQAAAgUBcwUEYmlnMAUEYmlnMAQBYQkBDXBhcnNlSW50VmFsdWUBBQFBBANhbm4JAGgCBQFhAAIEAXAJALwCAwUDeHAwBQN4cDEFBGJpZzEEC3hwMF94cDFfbl9uCQC8AgMFAXAFBGJpZzQFBGJpZzEEBWFubl9zCQC8AgMJALYCAQUDYW5uBQFzBQRiaWcxBAVhbm5fMQkAtgIBCQBlAgUDYW5uAAEKAQljYWxjRE5leHQBAWQEAmRkCQC8AgMFAWQFAWQFBGJpZzEEA2RkZAkAvAIDBQJkZAUBZAUEYmlnMQQCZHAJALwCAwUDZGRkBQRiaWcxBQt4cDBfeHAxX25fbgkAvAIDCQC3AgIFBWFubl9zCQC8AgMFAmRwBQRiaWcyBQRiaWcxBQFkCQC3AgIJALwCAwUFYW5uXzEFAWQFBGJpZzEJALwCAwUEYmlnMwUCZHAFBGJpZzEKAQRjYWxjAgNhY2MBaQMIBQNhY2MCXzIFA2FjYwQBZAgFA2FjYwJfMQQFZE5leHQJAQljYWxjRE5leHQBBQFkBAhkRGlmZlJhdwkAuAICBQVkTmV4dAkBBXZhbHVlAQUBZAQFZERpZmYDCQC/AgIFBGJpZzAFCGREaWZmUmF3CQC+AgEFCGREaWZmUmF3BQhkRGlmZlJhdwMJAMACAgUEYmlnMQUFZERpZmYJAJQKAgUFZE5leHQGCQCUCgIFBWROZXh0BwQDYXJyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOCQDMCAIADwkAzAgCABAJAMwIAgARBQNuaWwEDSR0MDEyNzAzMTI3NTEKAAIkbAUDYXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQFzBwoBBSRmMF8xAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQEEY2FsYwIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMTgJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIEAWQIBQ0kdDAxMjcwMzEyNzUxAl8xBAVmb3VuZAgFDSR0MDEyNzAzMTI3NTECXzIDBQVmb3VuZAUBZAkAAgEJAKwCAgIZRCBjYWxjdWxhdGlvbiBlcnJvciwgRCA9IAkApgMBBQFkAQNlZ28EBnR4SWQ1OApwbXRBc3NldElkCHBtdExwQW10C3VzZXJBZGRyZXNzBARscElkBQxjZmdMcEFzc2V0SWQEBGFtSWQJANgEAQkBBXZhbHVlAQUQY2ZnQW1vdW50QXNzZXRJZAQEcHJJZAkA2AQBCQEFdmFsdWUBBQ9jZmdQcmljZUFzc2V0SWQEBWFtRGNtBRZjZmdBbW91bnRBc3NldERlY2ltYWxzBAVwckRjbQUVY2ZnUHJpY2VBc3NldERlY2ltYWxzBANzdHMJAKQDAQUNY2ZnUG9vbFN0YXR1cwQHbHBFbWlzcwgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQRscElkAgtXcm9uZyBMUCBpZAhxdWFudGl0eQMJAQIhPQIJANgEAQUEbHBJZAUKcG10QXNzZXRJZAkAAgECD1dyb25nIHBtdCBhc3NldAQJYW1CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQEDGFtQmFsYW5jZVgxOAkBAnQxAgUJYW1CYWxhbmNlBQVhbURjbQQJcHJCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQEDHByQmFsYW5jZVgxOAkBAnQxAgUJcHJCYWxhbmNlBQVwckRjbQQLY3VyUHJpY2VYMTgJAQRjcGJpAgUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgECGN1clByaWNlCQECZjECBQtjdXJQcmljZVgxOAUGc2NhbGU4BAtwbXRMcEFtdFgxOAkBAnQxAgUIcG10THBBbXQFBnNjYWxlOAQKbHBFbWlzc1gxOAkBAnQxAgUHbHBFbWlzcwUGc2NhbGU4BAtvdXRBbUFtdFgxOAkAvAIDBQxhbUJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQpscEVtaXNzWDE4BAtvdXRQckFtdFgxOAkAvAIDBQxwckJhbGFuY2VYMTgFC3BtdExwQW10WDE4BQpscEVtaXNzWDE4BAhvdXRBbUFtdAkBDGZyb21YMThSb3VuZAMFC291dEFtQW10WDE4BQVhbURjbQUFRkxPT1IECG91dFByQW10CQEMZnJvbVgxOFJvdW5kAwULb3V0UHJBbXRYMTgFBXByRGNtBQVGTE9PUgQFc3RhdGUDCQAAAgUGdHhJZDU4AgAFA25pbAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUIb3V0QW1BbXQDCQAAAgUEYW1JZAIFV0FWRVMFBHVuaXQJANkEAQUEYW1JZAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwUIb3V0UHJBbXQDCQAAAgUEcHJJZAIFV0FWRVMFBHVuaXQJANkEAQUEcHJJZAkAzAgCCQELU3RyaW5nRW50cnkCCQEDZ2F1AgkApQgBBQt1c2VyQWRkcmVzcwUGdHhJZDU4CQERZGF0YUdldEFjdGlvbkluZm8GBQhvdXRBbUFtdAUIb3V0UHJBbXQFCHBtdExwQW10BQhjdXJQcmljZQUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUIY3VyUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFCGN1clByaWNlBQNuaWwJAJwKCgUIb3V0QW1BbXQFCG91dFByQW10BQRhbUlkBQRwcklkBQlhbUJhbGFuY2UFCXByQmFsYW5jZQUHbHBFbWlzcwULY3VyUHJpY2VYMTgFA3N0cwUFc3RhdGUBA2Vwbw0GdHhJZDU4CHNsaXBwYWdlB2luQW1BbXQGaW5BbUlkB2luUHJBbXQGaW5QcklkC3VzZXJBZGRyZXNzBmlzRXZhbAZlbWl0THAKaXNPbmVBc3NldBB2YWxpZGF0ZVNsaXBwYWdlBnBtdEFtdAVwbXRJZAQEbHBJZAUMY2ZnTHBBc3NldElkBAdhbUlkU3RyCQDYBAEJAQV2YWx1ZQEFEGNmZ0Ftb3VudEFzc2V0SWQEB3BySWRTdHIJANgEAQkBBXZhbHVlAQUPY2ZnUHJpY2VBc3NldElkBAlpbkFtSWRTdHIFEmNmZ0luQW1vdW50QXNzZWRJZAQJaW5QcklkU3RyBRFjZmdJblByaWNlQXNzZXRJZAQGYW10RGNtBRZjZmdBbW91bnRBc3NldERlY2ltYWxzBAhwcmljZURjbQUVY2ZnUHJpY2VBc3NldERlY2ltYWxzBANzdHMJAKQDAQUNY2ZnUG9vbFN0YXR1cwQEbHBFbQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQRscElkAghXciBscCBhcwhxdWFudGl0eQQJYW1CYWxhbmNlAwUGaXNFdmFsCQENZ2V0QWNjQmFsYW5jZQEFB2FtSWRTdHIDAwUKaXNPbmVBc3NldAkAAAIFBXBtdElkBQdhbUlkU3RyBwkAZQIJAQ1nZXRBY2NCYWxhbmNlAQUHYW1JZFN0cgUGcG10QW10AwUKaXNPbmVBc3NldAkBDWdldEFjY0JhbGFuY2UBBQdhbUlkU3RyCQBlAgkBDWdldEFjY0JhbGFuY2UBBQdhbUlkU3RyBQdpbkFtQW10BAlwckJhbGFuY2UDBQZpc0V2YWwJAQ1nZXRBY2NCYWxhbmNlAQUHcHJJZFN0cgMDBQppc09uZUFzc2V0CQAAAgUFcG10SWQFB3BySWRTdHIHCQBlAgkBDWdldEFjY0JhbGFuY2UBBQdwcklkU3RyBQZwbXRBbXQDBQppc09uZUFzc2V0CQENZ2V0QWNjQmFsYW5jZQEFB3BySWRTdHIJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB3BySWRTdHIFB2luUHJBbXQED2luQW1Bc3NldEFtdFgxOAkBAnQxAgUHaW5BbUFtdAUGYW10RGNtBA9pblByQXNzZXRBbXRYMTgJAQJ0MQIFB2luUHJBbXQFCHByaWNlRGNtBAx1c2VyUHJpY2VYMTgJAQRjcGJpAgUPaW5QckFzc2V0QW10WDE4BQ9pbkFtQXNzZXRBbXRYMTgEDGFtQmFsYW5jZVgxOAkBAnQxAgUJYW1CYWxhbmNlBQZhbXREY20EDHByQmFsYW5jZVgxOAkBAnQxAgUJcHJCYWxhbmNlBQhwcmljZURjbQQCRDAJAQRnZXREAQkAzAgCBQxhbUJhbGFuY2VYMTgJAMwIAgUMcHJCYWxhbmNlWDE4BQNuaWwEAXIDCQAAAgUEbHBFbQAABAJEMQkBBGdldEQBCQDMCAIJALcCAgUMYW1CYWxhbmNlWDE4BQ9pbkFtQXNzZXRBbXRYMTgJAMwIAgkAtwICBQxwckJhbGFuY2VYMTgFD2luUHJBc3NldEFtdFgxOAUDbmlsBAZjaGVja0QDCQC/AgIFAkQxBQJEMAYJAAIBAhxEMSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIEQwAwkAAAIFBmNoZWNrRAUGY2hlY2tEBAtjdXJQcmljZVgxOAUKemVyb0JpZ0ludAQLc2xpcHBhZ2VYMTgFCnplcm9CaWdJbnQECGxwQW10WDE4BQJEMQkAlwoFCQECZjECBQhscEFtdFgxOAUGc2NhbGU4CQECZjECBQ9pbkFtQXNzZXRBbXRYMTgFBmFtdERjbQkBAmYxAgUPaW5QckFzc2V0QW10WDE4BQhwcmljZURjbQkBBGNwYmkCCQC3AgIFDHByQmFsYW5jZVgxOAUPaW5QckFzc2V0QW10WDE4CQC3AgIFDGFtQmFsYW5jZVgxOAUPaW5BbUFzc2V0QW10WDE4BQtzbGlwcGFnZVgxOAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgQLY3VyUHJpY2VYMTgJAQRjcGJpAgUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgED3NsaXBwYWdlUmVhbFgxOAkAvAIDCQEDYWJzAQkAuAICBQtjdXJQcmljZVgxOAUMdXNlclByaWNlWDE4BQdzY2FsZTE4BQtjdXJQcmljZVgxOAQLc2xpcHBhZ2VYMTgJAQJ0MQIFCHNsaXBwYWdlBQZzY2FsZTgDAwMFEHZhbGlkYXRlU2xpcHBhZ2UJAQIhPQIFC2N1clByaWNlWDE4BQp6ZXJvQmlnSW50BwkAvwICBQ9zbGlwcGFnZVJlYWxYMTgFC3NsaXBwYWdlWDE4BwkAAgEJAKwCAgkArAICCQCsAgICD1ByaWNlIHNsaXBwYWdlIAkApgMBBQ9zbGlwcGFnZVJlYWxYMTgCAyA+IAkApgMBBQtzbGlwcGFnZVgxOAQNbHBFbWlzc2lvblgxOAkBAnQxAgUEbHBFbQUGc2NhbGU4BApwclZpYUFtWDE4CQC9AgQFD2luQW1Bc3NldEFtdFgxOAkBBWNwYmlyAwUMcHJCYWxhbmNlWDE4BQxhbUJhbGFuY2VYMTgFB0NFSUxJTkcFB3NjYWxlMTgFB0NFSUxJTkcECmFtVmlhUHJYMTgJAL0CBAUPaW5QckFzc2V0QW10WDE4BQdzY2FsZTE4CQEFY3BiaXIDBQxwckJhbGFuY2VYMTgFDGFtQmFsYW5jZVgxOAUFRkxPT1IFB0NFSUxJTkcEDGV4cGVjdGVkQW10cwMJAL8CAgUKcHJWaWFBbVgxOAUPaW5QckFzc2V0QW10WDE4CQCUCgIFCmFtVmlhUHJYMTgFD2luUHJBc3NldEFtdFgxOAkAlAoCBQ9pbkFtQXNzZXRBbXRYMTgFCnByVmlhQW1YMTgEEWV4cEFtdEFzc2V0QW10WDE4CAUMZXhwZWN0ZWRBbXRzAl8xBBNleHBQcmljZUFzc2V0QW10WDE4CAUMZXhwZWN0ZWRBbXRzAl8yBAJEMQkBBGdldEQBCQDMCAIJALcCAgUMYW1CYWxhbmNlWDE4BRFleHBBbXRBc3NldEFtdFgxOAkAzAgCCQC3AgIFDHByQmFsYW5jZVgxOAUTZXhwUHJpY2VBc3NldEFtdFgxOAUDbmlsBAZjaGVja0QDCQC/AgIFAkQxBQJEMAYJAAIBAhxEMSBzaG91bGQgYmUgZ3JlYXRlciB0aGFuIEQwAwkAAAIFBmNoZWNrRAUGY2hlY2tEBAhscEFtdFgxOAkAvAIDBQ1scEVtaXNzaW9uWDE4CQC4AgIFAkQxBQJEMAUCRDAJAJcKBQkBDGZyb21YMThSb3VuZAMFCGxwQW10WDE4BQZzY2FsZTgFBUZMT09SCQEMZnJvbVgxOFJvdW5kAwURZXhwQW10QXNzZXRBbXRYMTgFBmFtdERjbQUHQ0VJTElORwkBDGZyb21YMThSb3VuZAMFE2V4cFByaWNlQXNzZXRBbXRYMTgFCHByaWNlRGNtBQdDRUlMSU5HBQtjdXJQcmljZVgxOAULc2xpcHBhZ2VYMTgJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4ECWNhbGNMcEFtdAgFAXICXzEEDmNhbGNBbUFzc2V0UG10CAUBcgJfMgQOY2FsY1ByQXNzZXRQbXQIBQFyAl8zBAhjdXJQcmljZQkBAmYxAggFAXICXzQFBnNjYWxlOAQMc2xpcHBhZ2VDYWxjCQECZjECCAUBcgJfNQUGc2NhbGU4AwkAZwIAAAUJY2FsY0xwQW10CQACAQIHTFAgPD0gMAQJZW1pdExwQW10AwkBASEBBQZlbWl0THAAAAUJY2FsY0xwQW10BAZhbURpZmYJAGUCBQdpbkFtQW10BQ5jYWxjQW1Bc3NldFBtdAQGcHJEaWZmCQBlAgUHaW5QckFtdAUOY2FsY1ByQXNzZXRQbXQEDSR0MDIwNTkwMjA5MzUDAwUKaXNPbmVBc3NldAkAAAIFBXBtdElkBQdhbUlkU3RyBwkAlAoCBQZwbXRBbXQAAAMDBQppc09uZUFzc2V0CQAAAgUFcG10SWQFB3BySWRTdHIHCQCUCgIAAAUGcG10QW10CQCUCgIFDmNhbGNBbUFzc2V0UG10BQ5jYWxjUHJBc3NldFBtdAQKd3JpdGVBbUFtdAgFDSR0MDIwNTkwMjA5MzUCXzEECndyaXRlUHJBbXQIBQ0kdDAyMDU5MDIwOTM1Al8yBAtjb21tb25TdGF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUIY3VyUHJpY2UJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFCGN1clByaWNlCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNwYXUCBQt1c2VyQWRkcmVzcwUGdHhJZDU4CQERZGF0YVB1dEFjdGlvbkluZm8KBQp3cml0ZUFtQW10BQp3cml0ZVByQW10BQllbWl0THBBbXQFCGN1clByaWNlBQhzbGlwcGFnZQUMc2xpcHBhZ2VDYWxjBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQZhbURpZmYFBnByRGlmZgUDbmlsCQCfCg0FCWNhbGNMcEFtdAUJZW1pdExwQW10BQhjdXJQcmljZQUJYW1CYWxhbmNlBQlwckJhbGFuY2UFBGxwRW0FBGxwSWQFA3N0cwULY29tbW9uU3RhdGUFBmFtRGlmZgUGcHJEaWZmBQZpbkFtSWQFBmluUHJJZAEFZ2V0WUQDAnhwAWkBRAQBbgUEYmlnMgQBeAkAkQMCBQJ4cAMJAAACBQFpAAAAAQAABAphUHJlY2lzaW9uCQCnAwEFBUFtdWx0BAFhCQC5AgIJAKcDAQUBQQUKYVByZWNpc2lvbgQBcwUBeAQDYW5uCQC5AgIFAWEFAW4EAWMJALoCAgkAuQICCQC5AgIJALoCAgkAuQICBQFEBQFECQC5AgIFAXgFAW4FAUQFCmFQcmVjaXNpb24JALkCAgUDYW5uBQFuBAFiCQC4AgIJALcCAgUBcwkAugICCQC5AgIFAUQFCmFQcmVjaXNpb24FA2FubgUBRAoBBGNhbGMCA2FjYwNjdXIEDSR0MDIyMTMwMjIxNTAFA2FjYwQBeQgFDSR0MDIyMTMwMjIxNTACXzEEBWZvdW5kCAUNJHQwMjIxMzAyMjE1MAJfMgMJAQIhPQIFBWZvdW5kBQR1bml0BQNhY2MEBXlOZXh0CQC6AgIJALcCAgkAuQICBQF5BQF5BQFjCQC3AgIJALkCAgUEYmlnMgUBeQUBYgQFeURpZmYJAQlhYnNCaWdJbnQBCQC4AgIFBXlOZXh0CQEFdmFsdWUBBQF5AwkAwAICBQRiaWcxBQV5RGlmZgkAlAoCBQV5TmV4dAUDY3VyCQCUCgIFBXlOZXh0BQR1bml0BANhcnIJAMwIAgAACQDMCAIAAQkAzAgCAAIJAMwIAgADCQDMCAIABAkAzAgCAAUJAMwIAgAGCQDMCAIABwkAzAgCAAgJAMwIAgAJCQDMCAIACgkAzAgCAAsJAMwIAgAMCQDMCAIADQkAzAgCAA4FA25pbAQNJHQwMjI0NTcyMjUwNAoAAiRsBQNhcnIKAAIkcwkAkAMBBQIkbAoABSRhY2MwCQCUCgIFAUQFBHVuaXQKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBGNhbGMCBQIkYQkAkQMCBQIkbAUCJGkKAQUkZjBfMgICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkAAgECFExpc3Qgc2l6ZSBleGNlZWRzIDE1CQEFJGYwXzICCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECCQEFJGYwXzECBQUkYWNjMAAAAAEAAgADAAQABQAGAAcACAAJAAoACwAMAA0ADgAPBAF5CAUNJHQwMjI0NTcyMjUwNAJfMQQFZm91bmQIBQ0kdDAyMjQ1NzIyNTA0Al8yAwkBAiE9AgUFZm91bmQFBHVuaXQFAXkJAAIBCQCsAgICGVkgY2FsY3VsYXRpb24gZXJyb3IsIFkgPSAJAKYDAQUBeQEHY2FsY0RMcAMNYW1vdW50QmFsYW5jZQxwcmljZUJhbGFuY2UKbHBFbWlzc2lvbgQKdXBkYXRlZERMcAkAvAIDCQEEZ2V0RAEJAMwIAgkBCHQxQmlnSW50AgUNYW1vdW50QmFsYW5jZQkAtgIBBRZjZmdBbW91bnRBc3NldERlY2ltYWxzCQDMCAIJAQh0MUJpZ0ludAIFDHByaWNlQmFsYW5jZQkAtgIBBRVjZmdQcmljZUFzc2V0RGVjaW1hbHMFA25pbAUHc2NhbGUxOAUKbHBFbWlzc2lvbgMJAAACBQpscEVtaXNzaW9uBQRiaWcwBQRiaWcwBQp1cGRhdGVkRExwAQ5jYWxjQ3VycmVudERMcAMQYW1vdW50QXNzZXREZWx0YQ9wcmljZUFzc2V0RGVsdGEUbHBBc3NldEVtaXNzaW9uRGVsdGEEEmFtb3VudEFzc2V0QmFsYW5jZQkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFEGNmZ0Ftb3VudEFzc2V0SWQFEGFtb3VudEFzc2V0RGVsdGEEEXByaWNlQXNzZXRCYWxhbmNlCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBQ9wcmljZUFzc2V0RGVsdGEED2xwQXNzZXRFbWlzc2lvbgkAuAICCQC2AgEICQEFdmFsdWUBCQDsBwEFDGNmZ0xwQXNzZXRJZAhxdWFudGl0eQUUbHBBc3NldEVtaXNzaW9uRGVsdGEECmN1cnJlbnRETHAJAQdjYWxjRExwAwUSYW1vdW50QXNzZXRCYWxhbmNlBRFwcmljZUFzc2V0QmFsYW5jZQUPbHBBc3NldEVtaXNzaW9uBQpjdXJyZW50RExwARJyZWZyZXNoRExwSW50ZXJuYWwDF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEUbHBBc3NldEVtaXNzaW9uRGVsdGEEEmFtb3VudEFzc2V0QmFsYW5jZQkAZAIJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFEGNmZ0Ftb3VudEFzc2V0SWQFF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhBBFwcmljZUFzc2V0QmFsYW5jZQkAZAIJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFD2NmZ1ByaWNlQXNzZXRJZAUWcHJpY2VBc3NldEJhbGFuY2VEZWx0YQQPbHBBc3NldEVtaXNzaW9uCQBkAggJAQV2YWx1ZQEJAOwHAQUMY2ZnTHBBc3NldElkCHF1YW50aXR5BRRscEFzc2V0RW1pc3Npb25EZWx0YQQKdXBkYXRlZERMcAkBB2NhbGNETHADCQC2AgEFEmFtb3VudEFzc2V0QmFsYW5jZQkAtgIBBRFwcmljZUFzc2V0QmFsYW5jZQkAtgIBBQ9scEFzc2V0RW1pc3Npb24EB2FjdGlvbnMJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtleURMcFJlZnJlc2hlZEhlaWdodAUGaGVpZ2h0CQDMCAIJAQtTdHJpbmdFbnRyeQIFBmtleURMcAkApgMBBQp1cGRhdGVkRExwBQNuaWwJAJQKAgUHYWN0aW9ucwUKdXBkYXRlZERMcAESdmFsaWRhdGVVcGRhdGVkRExwAgZvbGRETHAKdXBkYXRlZERMcAMJAMACAgUKdXBkYXRlZERMcAUGb2xkRExwBgkBCHRocm93RXJyAQIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAEbdmFsaWRhdGVNYXRjaGVyT3JkZXJBbGxvd2VkAQVvcmRlcgQSYW1vdW50QXNzZXRCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEJAQ9hc3NldElkVG9TdHJpbmcBBRBjZmdBbW91bnRBc3NldElkBBFwcmljZUFzc2V0QmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBBFhbW91bnRBc3NldEFtb3VudAgFBW9yZGVyBmFtb3VudAQQcHJpY2VBc3NldEFtb3VudAkAbgQIBQVvcmRlcgZhbW91bnQIBQVvcmRlcgVwcmljZQUGc2NhbGU4BQVGTE9PUgQNJHQwMjQ3MDIyNDkxNAMJAAACCAUFb3JkZXIJb3JkZXJUeXBlBQNCdXkJAJQKAgURYW1vdW50QXNzZXRBbW91bnQJAQEtAQUQcHJpY2VBc3NldEFtb3VudAkAlAoCCQEBLQEFEWFtb3VudEFzc2V0QW1vdW50BRBwcmljZUFzc2V0QW1vdW50BBdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQgFDSR0MDI0NzAyMjQ5MTQCXzEEFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDAyNDcwMjI0OTE0Al8yAwMDCQEDaWdzAAYJAAACBQ1jZmdQb29sU3RhdHVzBQ5Qb29sTWF0Y2hlckRpcwYJAAACBQ1jZmdQb29sU3RhdHVzBQxQb29sU2h1dGRvd24JAAIBAg1BZG1pbiBibG9ja2VkAwMJAQIhPQIICAUFb3JkZXIJYXNzZXRQYWlyC2Ftb3VudEFzc2V0BRBjZmdBbW91bnRBc3NldElkBgkBAiE9AggIBQVvcmRlcglhc3NldFBhaXIKcHJpY2VBc3NldAUPY2ZnUHJpY2VBc3NldElkCQACAQIJV3IgYXNzZXRzBANkTHAJAKcDAQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQZrZXlETHACATAEDSR0MDI1MjU2MjUzNTYJARJyZWZyZXNoRExwSW50ZXJuYWwDBRdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQUWcHJpY2VBc3NldEJhbGFuY2VEZWx0YQAABA11bnVzZWRBY3Rpb25zCAUNJHQwMjUyNTYyNTM1NgJfMQQGZExwTmV3CAUNJHQwMjUyNTYyNTM1NgJfMgQMaXNPcmRlclZhbGlkCQDAAgIFBmRMcE5ldwUDZExwBARpbmZvCQC5CQIJAMwIAgIEZExwPQkAzAgCCQCmAwEFA2RMcAkAzAgCAgggZExwTmV3PQkAzAgCCQCmAwEFBmRMcE5ldwkAzAgCAhQgYW1vdW50QXNzZXRCYWxhbmNlPQkAzAgCCQCkAwEFEmFtb3VudEFzc2V0QmFsYW5jZQkAzAgCAhMgcHJpY2VBc3NldEJhbGFuY2U9CQDMCAIJAKQDAQURcHJpY2VBc3NldEJhbGFuY2UJAMwIAgIZIGFtb3VudEFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhCQDMCAICGCBwcmljZUFzc2V0QmFsYW5jZURlbHRhPQkAzAgCCQCkAwEFFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEJAMwIAgIIIGhlaWdodD0JAMwIAgkApAMBBQZoZWlnaHQFA25pbAIACQCUCgIFDGlzT3JkZXJWYWxpZAUEaW5mbwECY2cBAWkDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAEJAAIBAgoxIHBtbnQgZXhwBANwbXQJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAQKcG10QXNzZXRJZAkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAZwbXRBbXQIBQNwbXQGYW1vdW50BAFyCQEDZWdvBAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkCQDYBAEFCnBtdEFzc2V0SWQFBnBtdEFtdAgFAWkGY2FsbGVyBAhvdXRBbUFtdAgFAXICXzEECG91dFByQW10CAUBcgJfMgQDc3RzCQENcGFyc2VJbnRWYWx1ZQEIBQFyAl85BAVzdGF0ZQgFAXIDXzEwAwMJAQNpZ3MABgkAAAIFA3N0cwUMUG9vbFNodXRkb3duCQACAQkArAICAg9BZG1pbiBibG9ja2VkOiAJAKQDAQUDc3RzCQCXCgUFCG91dEFtQW10BQhvdXRQckFtdAUGcG10QW10BQpwbXRBc3NldElkBQVzdGF0ZQECY3AKBmNhbGxlcgR0eElkB2FtQXNQbXQHcHJBc1BtdAhzbGlwcGFnZQZlbWl0THAKaXNPbmVBc3NldBB2YWxpZGF0ZVNsaXBwYWdlBnBtdEFtdAVwbXRJZAQBcgkBA2Vwbw0FBHR4SWQFCHNsaXBwYWdlCAkBBXZhbHVlAQUHYW1Bc1BtdAZhbW91bnQICQEFdmFsdWUBBQdhbUFzUG10B2Fzc2V0SWQICQEFdmFsdWUBBQdwckFzUG10BmFtb3VudAgJAQV2YWx1ZQEFB3ByQXNQbXQHYXNzZXRJZAUGY2FsbGVyCQAAAgUEdHhJZAIABQZlbWl0THAFCmlzT25lQXNzZXQFEHZhbGlkYXRlU2xpcHBhZ2UFBnBtdEFtdAUFcG10SWQEA3N0cwkBDXBhcnNlSW50VmFsdWUBCAUBcgJfOAMDAwkBA2lncwAGCQAAAgUDc3RzBQpQb29sUHV0RGlzBgkAAAIFA3N0cwUMUG9vbFNodXRkb3duCQACAQkArAICAghCbG9ja2VkOgkApAMBBQNzdHMFAXIBDWNhbGNQdXRPbmVUa24FCXBtdEFtdFJhdwpwbXRBc3NldElkC3VzZXJBZGRyZXNzBHR4SWQLd2l0aFRha2VGZWUEBGFtSWQJANgEAQkBBXZhbHVlAQUQY2ZnQW1vdW50QXNzZXRJZAQEcHJJZAkA2AQBCQEFdmFsdWUBBQ9jZmdQcmljZUFzc2V0SWQEBGxwSWQFDGNmZ0xwQXNzZXRJZAQGYW10RGNtBRZjZmdBbW91bnRBc3NldERlY2ltYWxzBAhwcmljZURjbQUVY2ZnUHJpY2VBc3NldERlY2ltYWxzBA9scEFzc2V0RW1pc3Npb24JALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBBQRscElkAhBpbnZhbGlkIGxwIGFzc2V0CHF1YW50aXR5BA1jaGVjaEVtaXNzaW9uAwkAvwICBQ9scEFzc2V0RW1pc3Npb24FBGJpZzAGCQACAQIiaW5pdGlhbCBkZXBvc2l0IHJlcXVpcmVzIGFsbCBjb2lucwMJAAACBQ1jaGVjaEVtaXNzaW9uBQ1jaGVjaEVtaXNzaW9uBAlhbUJhbGFuY2UJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAQJcHJCYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQEDSR0MDI4MDEyMjg0NzQDCQAAAgUEdHhJZAIACQCUCgIFCWFtQmFsYW5jZQUJcHJCYWxhbmNlAwkAAAIFCnBtdEFzc2V0SWQFBGFtSWQDCQBmAgUJcG10QW10UmF3BQlhbUJhbGFuY2UJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIJAGUCBQlhbUJhbGFuY2UFCXBtdEFtdFJhdwUJcHJCYWxhbmNlAwkAAAIFCnBtdEFzc2V0SWQFBHBySWQDCQBmAgUJcG10QW10UmF3BQlwckJhbGFuY2UJAAIBAhZpbnZhbGlkIHBheW1lbnQgYW1vdW50CQCUCgIFCWFtQmFsYW5jZQkAZQIFCXByQmFsYW5jZQUJcG10QW10UmF3CQACAQIQd3JvbmcgcG10QXNzZXRJZAQMYW1CYWxhbmNlT2xkCAUNJHQwMjgwMTIyODQ3NAJfMQQMcHJCYWxhbmNlT2xkCAUNJHQwMjgwMTIyODQ3NAJfMgQNJHQwMjg0ODAyODY1NgMJAAACBQpwbXRBc3NldElkBQRhbUlkCQCUCgIFCXBtdEFtdFJhdwAAAwkAAAIFCnBtdEFzc2V0SWQFBHBySWQJAJQKAgAABQlwbXRBbXRSYXcJAAIBAg9pbnZhbGlkIHBheW1lbnQEC2FtQW1vdW50UmF3CAUNJHQwMjg0ODAyODY1NgJfMQQLcHJBbW91bnRSYXcIBQ0kdDAyODQ4MDI4NjU2Al8yBA0kdDAyODY2MDI4OTE0AwULd2l0aFRha2VGZWUJAJUKAwgJAQd0YWtlRmVlAgULYW1BbW91bnRSYXcFBWluRmVlAl8xCAkBB3Rha2VGZWUCBQtwckFtb3VudFJhdwUFaW5GZWUCXzEICQEHdGFrZUZlZQIFCXBtdEFtdFJhdwUFaW5GZWUCXzIJAJUKAwULYW1BbW91bnRSYXcFC3ByQW1vdW50UmF3AAAECGFtQW1vdW50CAUNJHQwMjg2NjAyODkxNAJfMQQIcHJBbW91bnQIBQ0kdDAyODY2MDI4OTE0Al8yBAlmZWVBbW91bnQIBQ0kdDAyODY2MDI4OTE0Al8zBAxhbUJhbGFuY2VOZXcJAGQCBQxhbUJhbGFuY2VPbGQFCGFtQW1vdW50BAxwckJhbGFuY2VOZXcJAGQCBQxwckJhbGFuY2VPbGQFCHByQW1vdW50BAJEMAkBBGdldEQBCQDMCAIJAQJ0MQIFDGFtQmFsYW5jZU9sZAUWY2ZnQW1vdW50QXNzZXREZWNpbWFscwkAzAgCCQECdDECBQxwckJhbGFuY2VPbGQFFWNmZ1ByaWNlQXNzZXREZWNpbWFscwUDbmlsBAJEMQkBBGdldEQBCQDMCAIJAQJ0MQIFDGFtQmFsYW5jZU5ldwUWY2ZnQW1vdW50QXNzZXREZWNpbWFscwkAzAgCCQECdDECBQxwckJhbGFuY2VOZXcFFWNmZ1ByaWNlQXNzZXREZWNpbWFscwUDbmlsBAZjaGVja0QDCQC/AgIFAkQxBQJEMAYJAQV0aHJvdwADCQAAAgUGY2hlY2tEBQZjaGVja0QECGxwQW1vdW50CQC9AgQFD2xwQXNzZXRFbWlzc2lvbgkAuAICBQJEMQUCRDAFAkQwBQVGTE9PUgQIY3VyUHJpY2UJAQJmMQIJAQRjcGJpAgkBAnQxAgUMcHJCYWxhbmNlTmV3BQhwcmljZURjbQkBAnQxAgUMYW1CYWxhbmNlTmV3BQZhbXREY20FBnNjYWxlOAQLY29tbW9uU3RhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwbAAFCGN1clByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQECcGgCBQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wBQhjdXJQcmljZQkAzAgCCQELU3RyaW5nRW50cnkCCQEDcGF1AgULdXNlckFkZHJlc3MFBHR4SWQJARFkYXRhUHV0QWN0aW9uSW5mbwoFC2FtQW1vdW50UmF3BQtwckFtb3VudFJhdwkAoAMBBQhscEFtb3VudAUIY3VyUHJpY2UAAAAABQZoZWlnaHQIBQlsYXN0QmxvY2sJdGltZXN0YW1wAAAAAAUDbmlsBA5wb29sUHJvcG9ydGlvbgkAawMFDHByQmFsYW5jZU9sZAUGc2NhbGU4BQxhbUJhbGFuY2VPbGQED2Ftb3VudEFzc2V0UGFydAkAawMFCXBtdEFtdFJhdwUGc2NhbGU4CQBkAgUOcG9vbFByb3BvcnRpb24FBnNjYWxlOAQOcHJpY2VBc3NldFBhcnQJAGUCBQlwbXRBbXRSYXcFD2Ftb3VudEFzc2V0UGFydAQJbHBBbXRCb3RoCQC8AgMFD2xwQXNzZXRFbWlzc2lvbgkAtgIBBQ5wcmljZUFzc2V0UGFydAkAtgIBBQxwckJhbGFuY2VPbGQEBWJvbnVzCQCgAwEJALwCAwkAuAICBQhscEFtb3VudAUJbHBBbXRCb3RoBQxzY2FsZThCaWdJbnQFCWxwQW10Qm90aAkAlgoECQCgAwEFCGxwQW1vdW50BQtjb21tb25TdGF0ZQUJZmVlQW1vdW50BQVib251cwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgETZ2V0T25lVGtuVjJJbnRlcm5hbAYKb3V0QXNzZXRJZAxtaW5PdXRBbW91bnQIcGF5bWVudHMGY2FsbGVyDG9yaWdpbkNhbGxlcg10cmFuc2FjdGlvbklkBARscElkCQDYBAEJAQV2YWx1ZQEFDGNmZ0xwQXNzZXRJZAQEYW1JZAkA2AQBCQEFdmFsdWUBBRBjZmdBbW91bnRBc3NldElkBARwcklkCQDYBAEJAQV2YWx1ZQEFD2NmZ1ByaWNlQXNzZXRJZAQKYW1EZWNpbWFscwUWY2ZnQW1vdW50QXNzZXREZWNpbWFscwQKcHJEZWNpbWFscwUVY2ZnUHJpY2VBc3NldERlY2ltYWxzBApwb29sU3RhdHVzBQ1jZmdQb29sU3RhdHVzBAt1c2VyQWRkcmVzcwMJAAACBQZjYWxsZXIFDHJlc3RDb250cmFjdAUMb3JpZ2luQ2FsbGVyBQZjYWxsZXIEA3BtdAkBBXZhbHVlAQkAkQMCBQhwYXltZW50cwAABApwbXRBc3NldElkCQEFdmFsdWUBCAUDcG10B2Fzc2V0SWQEBnBtdEFtdAgFA3BtdAZhbW91bnQECmN1cnJlbnRETHAJAQ5jYWxjQ3VycmVudERMcAMFBGJpZzAFBGJpZzAFBGJpZzADCQAAAgUKY3VycmVudERMcAUKY3VycmVudERMcAQGdHhJZDU4CQDYBAEFDXRyYW5zYWN0aW9uSWQDCQECIT0CBQRscElkCQDYBAEFCnBtdEFzc2V0SWQJAAIBAghXcm9uZyBMUAQJYW1CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQECXByQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBA0kdDAzMTAyNjMxMTM3CgABQAkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFCm91dEFzc2V0SWQJAMwIAgUGcG10QW10BQNuaWwFA25pbAMJAAECBQFAAgooSW50LCBJbnQpBQFACQACAQkArAICCQADAQUBQAIfIGNvdWxkbid0IGJlIGNhc3QgdG8gKEludCwgSW50KQMJAAACBQ0kdDAzMTAyNjMxMTM3BQ0kdDAzMTAyNjMxMTM3BAlmZWVBbW91bnQIBQ0kdDAzMTAyNjMxMTM3Al8yBAh0b3RhbEdldAgFDSR0MDMxMDI2MzExMzcCXzEEC3RvdGFsQW1vdW50AwMJAGYCBQxtaW5PdXRBbW91bnQAAAkAZgIFDG1pbk91dEFtb3VudAUIdG90YWxHZXQHCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIfYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFDG1pbk91dEFtb3VudAUDbmlsAgAFCHRvdGFsR2V0BA0kdDAzMTMyNzMxNjM0AwkAAAIFCm91dEFzc2V0SWQFBGFtSWQJAJYKBAULdG90YWxBbW91bnQAAAkAZQIJAGUCBQlhbUJhbGFuY2UFC3RvdGFsQW1vdW50BQlmZWVBbW91bnQFCXByQmFsYW5jZQMJAAACBQpvdXRBc3NldElkBQRwcklkCQCWCgQAAAULdG90YWxBbW91bnQFCWFtQmFsYW5jZQkAZQIJAGUCBQlwckJhbGFuY2UFC3RvdGFsQW1vdW50BQlmZWVBbW91bnQJAAIBAhRpbnZhbGlkIG91dCBhc3NldCBpZAQFb3V0QW0IBQ0kdDAzMTMyNzMxNjM0Al8xBAVvdXRQcggFDSR0MDMxMzI3MzE2MzQCXzIEDGFtQmFsYW5jZU5ldwgFDSR0MDMxMzI3MzE2MzQCXzMEDHByQmFsYW5jZU5ldwgFDSR0MDMxMzI3MzE2MzQCXzQECGN1clByWDE4CQEEY3BiaQIJAQJ0MQIFDHByQmFsYW5jZU5ldwUKcHJEZWNpbWFscwkBAnQxAgUMYW1CYWxhbmNlTmV3BQphbURlY2ltYWxzBAVjdXJQcgkBAmYxAgUIY3VyUHJYMTgFBnNjYWxlOAQRb3V0QXNzZXRJZE9yV2F2ZXMDCQAAAgUKb3V0QXNzZXRJZAIFV0FWRVMFBHVuaXQJANkEAQUKb3V0QXNzZXRJZAQQc2VuZEZlZVRvTWF0Y2hlcgMJAGYCBQlmZWVBbW91bnQAAAkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBRNmZWVDb2xsZWN0b3JBZGRyZXNzBQlmZWVBbW91bnQFEW91dEFzc2V0SWRPcldhdmVzBQNuaWwFA25pbAQFc3RhdGUJAM4IAgkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQt1c2VyQWRkcmVzcwULdG90YWxBbW91bnQFEW91dEFzc2V0SWRPcldhdmVzCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQNnYXUCCQClCAEFC3VzZXJBZGRyZXNzBQZ0eElkNTgJARFkYXRhR2V0QWN0aW9uSW5mbwYFBW91dEFtBQVvdXRQcgUGcG10QW10BQVjdXJQcgUGaGVpZ2h0CAUJbGFzdEJsb2NrCXRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBAnBsAAUFY3VyUHIJAMwIAgkBDEludGVnZXJFbnRyeQIJAQJwaAIFBmhlaWdodAgFCWxhc3RCbG9jawl0aW1lc3RhbXAFBWN1clByBQNuaWwFEHNlbmRGZWVUb01hdGNoZXIDCQAAAgUFc3RhdGUFBXN0YXRlBARidXJuCQD8BwQFA2ZjYQIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUEYnVybgUEYnVybgQNJHQwMzI0MTkzMjc2OQQQZmVlQW1vdW50Rm9yQ2FsYwMJAAACBQR0aGlzBRNmZWVDb2xsZWN0b3JBZGRyZXNzAAAFCWZlZUFtb3VudAQQb3V0SW5BbW91bnRBc3NldAMJAAACCQEMcGFyc2VBc3NldElkAQUKb3V0QXNzZXRJZAUQY2ZnQW1vdW50QXNzZXRJZAYHAwUQb3V0SW5BbW91bnRBc3NldAkAlAoCCQEBLQEJAGQCBQh0b3RhbEdldAUQZmVlQW1vdW50Rm9yQ2FsYwAACQCUCgIAAAkBAS0BCQBkAgUIdG90YWxHZXQFEGZlZUFtb3VudEZvckNhbGMEF2Ftb3VudEFzc2V0QmFsYW5jZURlbHRhCAUNJHQwMzI0MTkzMjc2OQJfMQQWcHJpY2VBc3NldEJhbGFuY2VEZWx0YQgFDSR0MDMyNDE5MzI3NjkCXzIEDSR0MDMyNzcyMzI4ODAJARJyZWZyZXNoRExwSW50ZXJuYWwDBRdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQUWcHJpY2VBc3NldEJhbGFuY2VEZWx0YQAABBFyZWZyZXNoRExwQWN0aW9ucwgFDSR0MDMyNzcyMzI4ODACXzEECnVwZGF0ZWRETHAIBQ0kdDAzMjc3MjMyODgwAl8yBBFpc1VwZGF0ZWRETHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZERMcAIFCmN1cnJlbnRETHAFCnVwZGF0ZWRETHADCQAAAgURaXNVcGRhdGVkRExwVmFsaWQFEWlzVXBkYXRlZERMcFZhbGlkCQCUCgIJAM4IAgUFc3RhdGUFEXJlZnJlc2hETHBBY3Rpb25zBQt0b3RhbEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgEBbQAEByRtYXRjaDAJAKIIAQkBA21wawADCQABAgUHJG1hdGNoMAIGU3RyaW5nBAFzBQckbWF0Y2gwCQDZBAEFAXMDCQABAgUHJG1hdGNoMAIEVW5pdAUEdW5pdAkAAgECC01hdGNoIGVycm9yAQJwbQAEByRtYXRjaDAJAKIIAQkBBHBtcGsAAwkAAQIFByRtYXRjaDACBlN0cmluZwQBcwUHJG1hdGNoMAkA2QQBBQFzAwkAAQIFByRtYXRjaDACBFVuaXQFBHVuaXQJAAIBAgtNYXRjaCBlcnJvcgACcGQJAAIBAhFQZXJtaXNzaW9uIGRlbmllZAEJaXNNYW5hZ2VyAQFpBAckbWF0Y2gwCQEBbQADCQABAgUHJG1hdGNoMAIKQnl0ZVZlY3RvcgQCcGsFByRtYXRjaDAJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrAwkAAQIFByRtYXRjaDACBFVuaXQJAAACCAUBaQZjYWxsZXIFBHRoaXMJAAIBAgtNYXRjaCBlcnJvcgECbW0BAWkEByRtYXRjaDAJAQFtAAMJAAECBQckbWF0Y2gwAgpCeXRlVmVjdG9yBAJwawUHJG1hdGNoMAMJAAACCAUBaQ9jYWxsZXJQdWJsaWNLZXkFAnBrBgUCcGQDCQABAgUHJG1hdGNoMAIEVW5pdAMJAAACCAUBaQZjYWxsZXIFBHRoaXMGBQJwZAkAAgECC01hdGNoIGVycm9yAQRnZXRZAwlpc1JldmVyc2UBRBNwb29sQW1vdW50SW5CYWxhbmNlBApwb29sQ29uZmlnCQEDZ3BjAAQEYW1JZAkAkQMCBQpwb29sQ29uZmlnBQlpZHhBbUFzSWQEBHBySWQJAJEDAgUKcG9vbENvbmZpZwUJaWR4UHJBc0lkBAFuBQRiaWcyBAphUHJlY2lzaW9uCQCnAwEFBUFtdWx0BAFhCQC5AgIJAKcDAQUBQQUKYVByZWNpc2lvbgQCeHADCQAAAgUJaXNSZXZlcnNlBwkAzAgCCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBRNwb29sQW1vdW50SW5CYWxhbmNlCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQNuaWwJAMwIAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUTcG9vbEFtb3VudEluQmFsYW5jZQkAzAgCCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAUDbmlsBAF4CQCRAwIFAnhwAAAEAXMFAXgEA2FubgkAuQICBQFhBQFuBAFjCQC6AgIJALkCAgkAuQICCQC6AgIJALkCAgUBRAUBRAkAuQICBQF4BQFuBQFEBQphUHJlY2lzaW9uCQC5AgIFA2FubgUBbgQBYgkAuAICCQC3AgIFAXMJALoCAgkAuQICBQFEBQphUHJlY2lzaW9uBQNhbm4FAUQKAQRjYWxjAgNhY2MDY3VyBA0kdDAzNDMyNzM0MzQ3BQNhY2MEAXkIBQ0kdDAzNDMyNzM0MzQ3Al8xBAVmb3VuZAgFDSR0MDM0MzI3MzQzNDcCXzIDCQECIT0CBQVmb3VuZAUEdW5pdAUDYWNjBAV5TmV4dAkAugICCQC3AgIJALkCAgUBeQUBeQUBYwkAtwICCQC5AgIFBGJpZzIFAXkFAWIEBXlEaWZmCQEJYWJzQmlnSW50AQkAuAICBQV5TmV4dAkBBXZhbHVlAQUBeQMJAMACAgUEYmlnMQUFeURpZmYJAJQKAgUFeU5leHQFA2N1cgkAlAoCBQV5TmV4dAUEdW5pdAQDYXJyCQDMCAIAAAkAzAgCAAEJAMwIAgACCQDMCAIAAwkAzAgCAAQJAMwIAgAFCQDMCAIABgkAzAgCAAcJAMwIAgAICQDMCAIACQkAzAgCAAoJAMwIAgALCQDMCAIADAkAzAgCAA0JAMwIAgAOBQNuaWwEDSR0MDM0Njc4MzQ3MjUKAAIkbAUDYXJyCgACJHMJAJADAQUCJGwKAAUkYWNjMAkAlAoCBQFEBQR1bml0CgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQRjYWxjAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAxNQkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwQBeQgFDSR0MDM0Njc4MzQ3MjUCXzEEBWZvdW5kCAUNJHQwMzQ2NzgzNDcyNQJfMgMJAQIhPQIFBWZvdW5kBQR1bml0BQF5CQACAQkArAICAhlZIGNhbGN1bGF0aW9uIGVycm9yLCBZID0gCQCmAwEFAXkeAWkBIWNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBSRUFET05MWQMNY2xlYW5BbW91bnRJbglpc1JldmVyc2UNZmVlUG9vbEFtb3VudAQNJHQwMzQ5NjYzNTM5MAMJAAACBQlpc1JldmVyc2UHBAhhc3NldE91dAkBBHN0cmYCBQR0aGlzCQECcGEABBNwb29sQW1vdW50SW5CYWxhbmNlCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEEc3RyZgIFBHRoaXMJAQJhYQAJALYCAQUNY2xlYW5BbW91bnRJbgkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQJAQRzdHJmAgUEdGhpcwkBAmFhAAQTcG9vbEFtb3VudEluQmFsYW5jZQkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQkBBHN0cmYCBQR0aGlzCQECcGEACQC2AgEFDWNsZWFuQW1vdW50SW4JAJQKAgUIYXNzZXRPdXQFE3Bvb2xBbW91bnRJbkJhbGFuY2UECGFzc2V0T3V0CAUNJHQwMzQ5NjYzNTM5MAJfMQQTcG9vbEFtb3VudEluQmFsYW5jZQgFDSR0MDM0OTY2MzUzOTACXzIECnBvb2xDb25maWcJAQNncGMABARhbUlkCQCRAwIFCnBvb2xDb25maWcFCWlkeEFtQXNJZAQEcHJJZAkAkQMCBQpwb29sQ29uZmlnBQlpZHhQckFzSWQEAnhwCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQNuaWwEAUQJAQRnZXREAQUCeHAEAXkJAQRnZXRZAwUJaXNSZXZlcnNlBQFECQC2AgEFDWNsZWFuQW1vdW50SW4EAmR5CQC4AgIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFCGFzc2V0T3V0BQF5CQC2AgEAAQQLdG90YWxHZXRSYXcJAJYDAQkAzAgCAAAJAMwIAgkAoAMBBQJkeQUDbmlsBAVuZXdYcAMJAAACBQlpc1JldmVyc2UHCQDMCAIJALcCAgkAtwICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEYW1JZAkAtgIBBQ1jbGVhbkFtb3VudEluCQC2AgEFDWZlZVBvb2xBbW91bnQJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUCZHkFA25pbAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBQJkeQkAzAgCCQC3AgIJALcCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBHBySWQJALYCAQUNY2xlYW5BbW91bnRJbgkAtgIBBQ1mZWVQb29sQW1vdW50BQNuaWwEBG5ld0QJAQRnZXREAQUFbmV3WHAEBmNoZWNrRAMJAMACAgUEbmV3RAUBRAYJAAIBCQC5CQIJAMwIAgIUbmV3IEQgaXMgZmV3ZXIgZXJyb3IJAMwIAgkApgMBBQFECQDMCAIJAKYDAQUEbmV3RAUDbmlsAgJfXwMJAAACBQZjaGVja0QFBmNoZWNrRAkAlAoCBQNuaWwFC3RvdGFsR2V0UmF3CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBJmNhbGN1bGF0ZUFtb3VudE91dEZvclN3YXBBbmRTZW5kVG9rZW5zBQ1jbGVhbkFtb3VudEluCWlzUmV2ZXJzZQxhbW91bnRPdXRNaW4JYWRkcmVzc1RvDWZlZVBvb2xBbW91bnQEC3N3YXBDb250YWN0CgABQAkA/AcEBQNmY2ECF2dldFN3YXBDb250cmFjdFJFQURPTkxZBQNuaWwFA25pbAMJAAECBQFAAgZTdHJpbmcFAUAJAAIBCQCsAgIJAAMBBQFAAhsgY291bGRuJ3QgYmUgY2FzdCB0byBTdHJpbmcEBmNoZWNrcwkAzAgCAwkAZwIICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50BQ1jbGVhbkFtb3VudEluBgkBCHRocm93RXJyAQIMV3JvbmcgYW1vdW50CQDMCAIDCQAAAggFAWkGY2FsbGVyCQERQGV4dHJOYXRpdmUoMTA2MikBBQtzd2FwQ29udGFjdAYJAQh0aHJvd0VycgECEVBlcm1pc3Npb24gZGVuaWVkBQNuaWwDCQAAAgUGY2hlY2tzBQZjaGVja3MEA3BtdAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABAdhc3NldEluCQEPYXNzZXRJZFRvU3RyaW5nAQgFA3BtdAdhc3NldElkBA0kdDAzNjgyNjM3MjIwAwkAAAIFCWlzUmV2ZXJzZQcECGFzc2V0T3V0CQEEc3RyZgIFBHRoaXMJAQJwYQAEE3Bvb2xBbW91bnRJbkJhbGFuY2UJAGUCCQENZ2V0QWNjQmFsYW5jZQEFB2Fzc2V0SW4ICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQCUCgIFCGFzc2V0T3V0BRNwb29sQW1vdW50SW5CYWxhbmNlBAhhc3NldE91dAkBBHN0cmYCBQR0aGlzCQECYWEABBNwb29sQW1vdW50SW5CYWxhbmNlCQBlAgkBDWdldEFjY0JhbGFuY2UBBQdhc3NldEluCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAkAlAoCBQhhc3NldE91dAUTcG9vbEFtb3VudEluQmFsYW5jZQQIYXNzZXRPdXQIBQ0kdDAzNjgyNjM3MjIwAl8xBBNwb29sQW1vdW50SW5CYWxhbmNlCAUNJHQwMzY4MjYzNzIyMAJfMgQKcG9vbENvbmZpZwkBA2dwYwAEBGFtSWQJAJEDAgUKcG9vbENvbmZpZwUJaWR4QW1Bc0lkBARwcklkCQCRAwIFCnBvb2xDb25maWcFCWlkeFByQXNJZAQCeHADCQAAAgUJaXNSZXZlcnNlBwkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQC2AgEICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQNuaWwJAMwIAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAUDbmlsBAFECQEEZ2V0RAEFAnhwBAF5CQEEZ2V0WQMFCWlzUmV2ZXJzZQUBRAkAtgIBAAAEAmR5CQC4AgIJALgCAgkAtgIBCQENZ2V0QWNjQmFsYW5jZQEFCGFzc2V0T3V0BQF5CQC2AgEAAQQLdG90YWxHZXRSYXcJAJYDAQkAzAgCAAAJAMwIAgkAoAMBBQJkeQUDbmlsBAhjaGVja01pbgMJAGcCBQt0b3RhbEdldFJhdwUMYW1vdW50T3V0TWluBgkAAgECLEV4Y2hhbmdlIHJlc3VsdCBpcyBmZXdlciBjb2lucyB0aGFuIGV4cGVjdGVkAwkAAAIFCGNoZWNrTWluBQhjaGVja01pbgQFbmV3WHADCQAAAgUJaXNSZXZlcnNlBwkAzAgCCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQC2AgEFDWZlZVBvb2xBbW91bnQJAMwIAgkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQUEcHJJZAUCZHkFA25pbAkAzAgCCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkBQJkeQkAzAgCCQC3AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkCQC2AgEFDWZlZVBvb2xBbW91bnQFA25pbAQEbmV3RAkBBGdldEQBBQVuZXdYcAQGY2hlY2tEAwkAwAICBQRuZXdEBQFEBgkAAgECFG5ldyBEIGlzIGZld2VyIGVycm9yAwkAAAIFBmNoZWNrRAUGY2hlY2tECQCUCgIJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwkBEUBleHRyTmF0aXZlKDEwNjIpAQUJYWRkcmVzc1RvBQt0b3RhbEdldFJhdwkBDHBhcnNlQXNzZXRJZAEFCGFzc2V0T3V0BQNuaWwFC3RvdGFsR2V0UmF3CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2NvbnN0cnVjdG9yAQJmYwQBYwkBAm1tAQUBaQMJAAACBQFjBQFjCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJmYwAFAmZjBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKc2V0TWFuYWdlcgEXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkEAWMJAQJtbQEFAWkDCQAAAgUBYwUBYwQCY20JANkEAQUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkDCQAAAgUCY20FAmNtCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQRwbXBrAAUXcGVuZGluZ01hbmFnZXJQdWJsaWNLZXkFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQ5jb25maXJtTWFuYWdlcgAEAXAJAQJwbQAEA2hwbQMJAQlpc0RlZmluZWQBBQFwBgkAAgECEk5vIHBlbmRpbmcgbWFuYWdlcgMJAAACBQNocG0FA2hwbQQDY3BtAwkAAAIIBQFpD2NhbGxlclB1YmxpY0tleQkBBXZhbHVlAQUBcAYJAAIBAhtZb3UgYXJlIG5vdCBwZW5kaW5nIG1hbmFnZXIDCQAAAgUDY3BtBQNjcG0JAMwIAgkBC1N0cmluZ0VudHJ5AgkBA21wawAJANgEAQkBBXZhbHVlAQUBcAkAzAgCCQELRGVsZXRlRW50cnkBCQEEcG1wawAFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQNwdXQCBHNsaXAJYXV0b1N0YWtlBAdmYWN0Q2ZnCQEDZ2ZjAAQLc3Rha2luZ0NudHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB2ZhY3RDZmcFD2lkeEZhY3RTdGFrQ250cgIKV3Igc3QgYWRkcgQIc2xpcENudHIJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFB2ZhY3RDZmcFEGlkeEZhY3RTbGlwcENudHICCldyIHNsIGFkZHIDCQBmAgAABQRzbGlwCQACAQIOV3Jvbmcgc2xpcHBhZ2UDCQECIT0CCQCQAwEIBQFpCHBheW1lbnRzAAIJAAIBAgwyIHBtbnRzIGV4cGQECmFtQXNzZXRQbXQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECnByQXNzZXRQbXQJALYCAQgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAQZhbW91bnQEEmFtb3VudEFzc2V0QmFsYW5jZQkAuAICCQC2AgEJAQ1nZXRBY2NCYWxhbmNlAQkBD2Fzc2V0SWRUb1N0cmluZwEFEGNmZ0Ftb3VudEFzc2V0SWQFCmFtQXNzZXRQbXQDCQAAAgUSYW1vdW50QXNzZXRCYWxhbmNlBRJhbW91bnRBc3NldEJhbGFuY2UEEXByaWNlQXNzZXRCYWxhbmNlCQC4AgIJALYCAQkBDWdldEFjY0JhbGFuY2UBCQEPYXNzZXRJZFRvU3RyaW5nAQUPY2ZnUHJpY2VBc3NldElkBQpwckFzc2V0UG10AwkAAAIFEXByaWNlQXNzZXRCYWxhbmNlBRFwcmljZUFzc2V0QmFsYW5jZQQPbHBBc3NldEVtaXNzaW9uCQC2AgEICQEFdmFsdWUBCQDsBwEFDGNmZ0xwQXNzZXRJZAhxdWFudGl0eQMJAAACBQ9scEFzc2V0RW1pc3Npb24FD2xwQXNzZXRFbWlzc2lvbgQKY3VycmVudERMcAkBDmNhbGNDdXJyZW50RExwAwUKYW1Bc3NldFBtdAUKcHJBc3NldFBtdAkAtgIBAAADCQAAAgUKY3VycmVudERMcAUKY3VycmVudERMcAQBZQkBAmNwCgkApQgBCAUBaQZjYWxsZXIJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkBD0F0dGFjaGVkUGF5bWVudAIICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAgJAQV2YWx1ZQEJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQJAJEDAggFAWkIcGF5bWVudHMAAQUEc2xpcAYHBgAAAgAECWVtaXRMcEFtdAgFAWUCXzIECWxwQXNzZXRJZAgFAWUCXzcEBXN0YXRlCAUBZQJfOQQGYW1EaWZmCAUBZQNfMTAEBnByRGlmZggFAWUDXzExBARhbUlkCAUBZQNfMTIEBHBySWQIBQFlA18xMwQBcgkA/AcEBQNmY2ECBGVtaXQJAMwIAgUJZW1pdExwQW10BQNuaWwFA25pbAMJAAACBQFyBQFyBAJlbAQHJG1hdGNoMAUBcgMJAAECBQckbWF0Y2gwAgdBZGRyZXNzBAZsZWdhY3kFByRtYXRjaDAJAPwHBAUGbGVnYWN5AgRlbWl0CQDMCAIFCWVtaXRMcEFtdAUDbmlsBQNuaWwFBHVuaXQDCQAAAgUCZWwFAmVsBAJzYQMJAGYCBQZhbURpZmYAAAkA/AcEBQhzbGlwQ250cgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGFtSWQFBmFtRGlmZgUDbmlsBQNuaWwDCQAAAgUCc2EFAnNhBAJzcAMJAGYCBQZwckRpZmYAAAkA/AcEBQhzbGlwQ250cgIDcHV0BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBHBySWQFBnByRGlmZgUDbmlsBQNuaWwDCQAAAgUCc3AFAnNwBAhscFRybnNmcgMFCWF1dG9TdGFrZQQCc3MJAPwHBAULc3Rha2luZ0NudHICBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWxwQXNzZXRJZAUJZW1pdExwQW10BQNuaWwDCQAAAgUCc3MFAnNzBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwgFAWkGY2FsbGVyBQllbWl0THBBbXQFCWxwQXNzZXRJZAUDbmlsBA0kdDA0MTgzOTQxOTgxCQEScmVmcmVzaERMcEludGVybmFsAwAAAAAAAAQRcmVmcmVzaERMcEFjdGlvbnMIBQ0kdDA0MTgzOTQxOTgxAl8xBAp1cGRhdGVkRExwCAUNJHQwNDE4Mzk0MTk4MQJfMgQFY2hlY2sDCQDAAgIFCnVwZGF0ZWRETHAFCmN1cnJlbnRETHAGCQEIdGhyb3dFcnIBCQC5CQIJAMwIAgIidXBkYXRlZCBETHAgbG93ZXIgdGhhbiBjdXJyZW50IERMcAkAzAgCCQCmAwEFEmFtb3VudEFzc2V0QmFsYW5jZQkAzAgCCQCmAwEFEXByaWNlQXNzZXRCYWxhbmNlCQDMCAIJAKYDAQUPbHBBc3NldEVtaXNzaW9uCQDMCAIJAKYDAQUKY3VycmVudERMcAkAzAgCCQCmAwEFCnVwZGF0ZWRETHAJAMwIAgkApAMBBQZhbURpZmYJAMwIAgkApAMBBQZwckRpZmYFA25pbAIBIAMJAAACBQVjaGVjawUFY2hlY2sEFGxwQXNzZXRFbWlzc2lvbkFmdGVyCAkBBXZhbHVlAQkA7AcBBQxjZmdMcEFzc2V0SWQIcXVhbnRpdHkDCQAAAgUUbHBBc3NldEVtaXNzaW9uQWZ0ZXIFFGxwQXNzZXRFbWlzc2lvbkFmdGVyCQDOCAIJAM4IAgUFc3RhdGUFCGxwVHJuc2ZyBRFyZWZyZXNoRExwQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQtwdXRPbmVUa25WMgIMbWluT3V0QW1vdW50CWF1dG9TdGFrZQQgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQKAAFACQD8BwQFA2ZjYQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBBQFAAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBA1pc1B1dERpc2FibGVkAwMDCQEDaWdzAAYJAAACBQ1jZmdQb29sU3RhdHVzBQpQb29sUHV0RGlzBgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgYFIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBAZjaGVja3MJAMwIAgMDCQEBIQEFDWlzUHV0RGlzYWJsZWQGCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECIXB1dCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBARhbUlkCQDYBAEJAQV2YWx1ZQEFEGNmZ0Ftb3VudEFzc2V0SWQEBHBySWQJANgEAQkBBXZhbHVlAQUPY2ZnUHJpY2VBc3NldElkBARscElkBQxjZmdMcEFzc2V0SWQECmFtRGVjaW1hbHMFFmNmZ0Ftb3VudEFzc2V0RGVjaW1hbHMECnByRGVjaW1hbHMFFWNmZ1ByaWNlQXNzZXREZWNpbWFscwQLdXNlckFkZHJlc3MDCQAAAggFAWkGY2FsbGVyBQR0aGlzCAUBaQxvcmlnaW5DYWxsZXIIBQFpBmNhbGxlcgQDcG10CQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAECnBtdEFzc2V0SWQJANgEAQkBBXZhbHVlAQgFA3BtdAdhc3NldElkBAZwbXRBbXQIBQNwbXQGYW1vdW50BApjdXJyZW50RExwAwkAAAIIBQNwbXQHYXNzZXRJZAUQY2ZnQW1vdW50QXNzZXRJZAkBDmNhbGNDdXJyZW50RExwAwkAtgIBBQZwbXRBbXQJALYCAQAACQC2AgEAAAkBDmNhbGNDdXJyZW50RExwAwkAtgIBAAAJALYCAQUGcG10QW10CQC2AgEAAAMJAAACBQpjdXJyZW50RExwBQpjdXJyZW50RExwBA0kdDA0MzYyMjQzNzgwCQENY2FsY1B1dE9uZVRrbgUFBnBtdEFtdAUKcG10QXNzZXRJZAkApQgBBQt1c2VyQWRkcmVzcwkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBgMJAAACBQ0kdDA0MzYyMjQzNzgwBQ0kdDA0MzYyMjQzNzgwBAlmZWVBbW91bnQIBQ0kdDA0MzYyMjQzNzgwAl8zBAVzdGF0ZQgFDSR0MDQzNjIyNDM3ODACXzIEB2VzdGltTFAIBQ0kdDA0MzYyMjQzNzgwAl8xBAllbWl0THBBbXQDAwkAZgIFDG1pbk91dEFtb3VudAAACQBmAgUMbWluT3V0QW1vdW50BQdlc3RpbUxQBwkBCHRocm93RXJyAQkAuQkCCQDMCAICH2Ftb3VudCB0byByZWNlaXZlIGlzIGxlc3MgdGhhbiAJAMwIAgkApAMBBQxtaW5PdXRBbW91bnQFA25pbAIABQdlc3RpbUxQBAFlCQD8BwQFA2ZjYQIEZW1pdAkAzAgCBQllbWl0THBBbXQFA25pbAUDbmlsAwkAAAIFAWUFAWUEAmVsBAckbWF0Y2gwBQFlAwkAAQIFByRtYXRjaDACB0FkZHJlc3MEBmxlZ2FjeQUHJG1hdGNoMAkA/AcEBQZsZWdhY3kCBGVtaXQJAMwIAgUJZW1pdExwQW10BQNuaWwFA25pbAUEdW5pdAMJAAACBQJlbAUCZWwECGxwVHJuc2ZyAwUJYXV0b1N0YWtlBAJzcwkA/AcEBQ9zdGFraW5nQ29udHJhY3QCBXN0YWtlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFBGxwSWQFCWVtaXRMcEFtdAUDbmlsAwkAAAIFAnNzBQJzcwUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMIBQFpBmNhbGxlcgUJZW1pdExwQW10BQRscElkBQNuaWwEEHNlbmRGZWVUb01hdGNoZXIDCQBmAgUJZmVlQW1vdW50AAAJAMwIAgkBDlNjcmlwdFRyYW5zZmVyAwUTZmVlQ29sbGVjdG9yQWRkcmVzcwUJZmVlQW1vdW50CQDZBAEFCnBtdEFzc2V0SWQFA25pbAUDbmlsBA0kdDA0NDU5NTQ0OTQ0AwkAAAIFBHRoaXMFE2ZlZUNvbGxlY3RvckFkZHJlc3MJAJQKAgAAAAAEFHBheW1lbnRJbkFtb3VudEFzc2V0AwkAAAIIBQNwbXQHYXNzZXRJZAUQY2ZnQW1vdW50QXNzZXRJZAYHAwUUcGF5bWVudEluQW1vdW50QXNzZXQJAJQKAgkBAS0BBQlmZWVBbW91bnQAAAkAlAoCAAAJAQEtAQUJZmVlQW1vdW50BBdhbW91bnRBc3NldEJhbGFuY2VEZWx0YQgFDSR0MDQ0NTk1NDQ5NDQCXzEEFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEIBQ0kdDA0NDU5NTQ0OTQ0Al8yBA0kdDA0NDk0NzQ1MDU1CQEScmVmcmVzaERMcEludGVybmFsAwUXYW1vdW50QXNzZXRCYWxhbmNlRGVsdGEFFnByaWNlQXNzZXRCYWxhbmNlRGVsdGEAAAQRcmVmcmVzaERMcEFjdGlvbnMIBQ0kdDA0NDk0NzQ1MDU1Al8xBAp1cGRhdGVkRExwCAUNJHQwNDQ5NDc0NTA1NQJfMgQRaXNVcGRhdGVkRExwVmFsaWQJARJ2YWxpZGF0ZVVwZGF0ZWRETHACBQpjdXJyZW50RExwBQp1cGRhdGVkRExwAwkAAAIFEWlzVXBkYXRlZERMcFZhbGlkBRFpc1VwZGF0ZWRETHBWYWxpZAkAlAoCCQDOCAIJAM4IAgkAzggCBQVzdGF0ZQUIbHBUcm5zZnIFEHNlbmRGZWVUb01hdGNoZXIFEXJlZnJlc2hETHBBY3Rpb25zBQllbWl0THBBbXQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcHV0Rm9yRnJlZQEHbWF4U2xwZwMJAGYCAAAFB21heFNscGcJAAIBAgpXcm9uZyBzbHBnAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwACCQACAQIMMiBwbW50cyBleHBkBAZlc3RQdXQJAQJjcAoJAKUIAQgFAWkGY2FsbGVyCQDYBAEIBQFpDXRyYW5zYWN0aW9uSWQJAQ9BdHRhY2hlZFBheW1lbnQCCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQICQEFdmFsdWUBCQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50CQCRAwIIBQFpCHBheW1lbnRzAAEFB21heFNscGcHBwYAAAIABAVzdGF0ZQgFBmVzdFB1dAJfOQQKYW1Bc3NldFBtdAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAQKcHJBc3NldFBtdAkAtgIBCAkBBXZhbHVlAQkAkQMCCAUBaQhwYXltZW50cwABBmFtb3VudAQKY3VycmVudERMcAkBDmNhbGNDdXJyZW50RExwAwUKYW1Bc3NldFBtdAUKcHJBc3NldFBtdAkAtgIBAAADCQAAAgUKY3VycmVudERMcAUKY3VycmVudERMcAQNJHQwNDYwODU0NjE1MAkBEnJlZnJlc2hETHBJbnRlcm5hbAMAAAAAAAAEEXJlZnJlc2hETHBBY3Rpb25zCAUNJHQwNDYwODU0NjE1MAJfMQQKdXBkYXRlZERMcAgFDSR0MDQ2MDg1NDYxNTACXzIEEWlzVXBkYXRlZERMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkRExwAgUKY3VycmVudERMcAUKdXBkYXRlZERMcAMJAAACBRFpc1VwZGF0ZWRETHBWYWxpZAURaXNVcGRhdGVkRExwVmFsaWQJAM4IAgUFc3RhdGUFEXJlZnJlc2hETHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBA2dldAAECmN1cnJlbnRETHAJAQ5jYWxjQ3VycmVudERMcAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUKY3VycmVudERMcAUKY3VycmVudERMcAQBcgkBAmNnAQUBaQQJb3V0QW10QW10CAUBcgJfMQQIb3V0UHJBbXQIBQFyAl8yBAZwbXRBbXQIBQFyAl8zBApwbXRBc3NldElkCAUBcgJfNAQFc3RhdGUIBQFyAl81BAFiCQD8BwQFA2ZjYQIEYnVybgkAzAgCBQZwbXRBbXQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgUKcG10QXNzZXRJZAUGcG10QW10BQNuaWwDCQAAAgUBYgUBYgQNJHQwNDczMjM0NzQwNQkBEnJlZnJlc2hETHBJbnRlcm5hbAMJAQEtAQUJb3V0QW10QW10CQEBLQEFCG91dFByQW10AAAEEXJlZnJlc2hETHBBY3Rpb25zCAUNJHQwNDczMjM0NzQwNQJfMQQKdXBkYXRlZERMcAgFDSR0MDQ3MzIzNDc0MDUCXzIEEWlzVXBkYXRlZERMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkRExwAgUKY3VycmVudERMcAUKdXBkYXRlZERMcAMJAAACBRFpc1VwZGF0ZWRETHBWYWxpZAURaXNVcGRhdGVkRExwVmFsaWQJAM4IAgUFc3RhdGUFEXJlZnJlc2hETHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBC2dldE9uZVRrblYyAgpvdXRBc3NldElkDG1pbk91dEFtb3VudAQgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQKAAFACQD8BwQFA2ZjYQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBBQFAAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBA1pc0dldERpc2FibGVkAwMJAQNpZ3MABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgYFIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBAZjaGVja3MJAMwIAgMDCQEBIQEFDWlzR2V0RGlzYWJsZWQGCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAQYJAQh0aHJvd0VycgECHmV4YWN0bHkgMSBwYXltZW50IGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBA0kdDA0ODAyMzQ4MTc4CQETZ2V0T25lVGtuVjJJbnRlcm5hbAYFCm91dEFzc2V0SWQFDG1pbk91dEFtb3VudAgFAWkIcGF5bWVudHMIBQFpBmNhbGxlcggFAWkMb3JpZ2luQ2FsbGVyCAUBaQ10cmFuc2FjdGlvbklkBAVzdGF0ZQgFDSR0MDQ4MDIzNDgxNzgCXzEEC3RvdGFsQW1vdW50CAUNJHQwNDgwMjM0ODE3OAJfMgkAlAoCBQVzdGF0ZQULdG90YWxBbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcmVmcmVzaERMcAAEGGxhc3RSZWZyZXNoZWRCbG9ja0hlaWdodAkBC3ZhbHVlT3JFbHNlAgkAnwgBBRVrZXlETHBSZWZyZXNoZWRIZWlnaHQAAAQdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQDCQBnAgkAZQIFBmhlaWdodAUYbGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0BQ9kTHBSZWZyZXNoRGVsYXkFBHVuaXQJAQh0aHJvd0VycgEJALkJAgkAzAgCCQCkAwEFD2RMcFJlZnJlc2hEZWxheQkAzAgCAi8gYmxvY2tzIGhhdmUgbm90IHBhc3NlZCBzaW5jZSB0aGUgcHJldmlvdXMgY2FsbAUDbmlsAgADCQAAAgUdY2hlY2tMYXN0UmVmcmVzaGVkQmxvY2tIZWlnaHQFHWNoZWNrTGFzdFJlZnJlc2hlZEJsb2NrSGVpZ2h0BANkTHAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAqAMBCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFBmtleURMcAIBMAkBBmZtdEVycgECC2ludmFsaWQgZExwBA0kdDA0ODcwMjQ4NzY2CQEScmVmcmVzaERMcEludGVybmFsAwAAAAAAAAQQZExwVXBkYXRlQWN0aW9ucwgFDSR0MDQ4NzAyNDg3NjYCXzEECnVwZGF0ZWRETHAIBQ0kdDA0ODcwMjQ4NzY2Al8yBAdhY3Rpb25zAwkBAiE9AgUDZExwBQp1cGRhdGVkRExwBRBkTHBVcGRhdGVBY3Rpb25zCQEIdGhyb3dFcnIBAhJub3RoaW5nIHRvIHJlZnJlc2gJAJQKAgUHYWN0aW9ucwkApgMBBQp1cGRhdGVkRExwCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBE2dldE9uZVRrblYyUkVBRE9OTFkCCm91dEFzc2V0SWQNbHBBc3NldEFtb3VudAQEYW1JZAkA2AQBCQEFdmFsdWUBBRBjZmdBbW91bnRBc3NldElkBARwcklkCQDYBAEJAQV2YWx1ZQEFD2NmZ1ByaWNlQXNzZXRJZAQEbHBJZAkA2AQBCQEFdmFsdWUBBQxjZmdMcEFzc2V0SWQEAnhwCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRhbUlkCQDMCAIJALYCAQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBQNuaWwECmxwRW1pc3Npb24JALYCAQgJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkA7AcBCQDZBAEFBGxwSWQCEGludmFsaWQgbHAgYXNzZXQIcXVhbnRpdHkEAkQwCQEEZ2V0RAEFAnhwBAJEMQkAuAICBQJEMAkAvAIDCQC2AgEFDWxwQXNzZXRBbW91bnQFAkQwBQpscEVtaXNzaW9uBAVpbmRleAMJAAACBQpvdXRBc3NldElkBQRhbUlkAAADCQAAAgUKb3V0QXNzZXRJZAUEcHJJZAABCQACAQIUaW52YWxpZCBvdXQgYXNzZXQgaWQEBG5ld1kJAQVnZXRZRAMFAnhwBQVpbmRleAUCRDEEAmR5CQC4AgIJAJEDAgUCeHAFBWluZGV4BQRuZXdZBAt0b3RhbEdldFJhdwkAlgMBCQDMCAIAAAkAzAgCCQCgAwEJALgCAgUCZHkFBGJpZzEFA25pbAQNJHQwNDk3NzY0OTgzMQkBB3Rha2VGZWUCBQt0b3RhbEdldFJhdwUGb3V0RmVlBAh0b3RhbEdldAgFDSR0MDQ5Nzc2NDk4MzECXzEECWZlZUFtb3VudAgFDSR0MDQ5Nzc2NDk4MzECXzIJAJQKAgUDbmlsCQCUCgIFCHRvdGFsR2V0BQlmZWVBbW91bnQBaQEcZ2V0T25lVGtuVjJXaXRoQm9udXNSRUFET05MWQIKb3V0QXNzZXRJZA1scEFzc2V0QW1vdW50BARhbUlkCQDYBAEJAQV2YWx1ZQEFEGNmZ0Ftb3VudEFzc2V0SWQEBHBySWQJANgEAQkBBXZhbHVlAQUPY2ZnUHJpY2VBc3NldElkBARscElkCQDYBAEJAQV2YWx1ZQEFDGNmZ0xwQXNzZXRJZAQJYW1CYWxhbmNlCQENZ2V0QWNjQmFsYW5jZQEFBGFtSWQECXByQmFsYW5jZQkBDWdldEFjY0JhbGFuY2UBBQRwcklkBA0kdDA1MDIwNjUwMzIxCgABQAkA/AcEBQR0aGlzAhNnZXRPbmVUa25WMlJFQURPTkxZCQDMCAIFCm91dEFzc2V0SWQJAMwIAgUNbHBBc3NldEFtb3VudAUDbmlsBQNuaWwDCQABAgUBQAIKKEludCwgSW50KQUBQAkAAgEJAKwCAgkAAwEFAUACHyBjb3VsZG4ndCBiZSBjYXN0IHRvIChJbnQsIEludCkECHRvdGFsR2V0CAUNJHQwNTAyMDY1MDMyMQJfMQQJZmVlQW1vdW50CAUNJHQwNTAyMDY1MDMyMQJfMgQBcgkBA2VnbwQCAAUEbHBJZAUNbHBBc3NldEFtb3VudAUEdGhpcwQIb3V0QW1BbXQIBQFyAl8xBAhvdXRQckFtdAgFAXICXzIEDnN1bU9mR2V0QXNzZXRzCQBkAgUIb3V0QW1BbXQFCG91dFByQW10BAVib251cwMJAAACBQ5zdW1PZkdldEFzc2V0cwAAAwkAAAIFCHRvdGFsR2V0AAAAAAkAAgECF2JvbnVzIGNhbGN1bGF0aW9uIGVycm9yCQBrAwkAZQIFCHRvdGFsR2V0BQ5zdW1PZkdldEFzc2V0cwUGc2NhbGU4BQ5zdW1PZkdldEFzc2V0cwkAlAoCBQNuaWwJAJUKAwUIdG90YWxHZXQFCWZlZUFtb3VudAUFYm9udXMBaQEJZ2V0Tm9MZXNzAhJub0xlc3NUaGVuQW10QXNzZXQUbm9MZXNzVGhlblByaWNlQXNzZXQEAXIJAQJjZwEFAWkECG91dEFtQW10CAUBcgJfMQQIb3V0UHJBbXQIBQFyAl8yBAZwbXRBbXQIBQFyAl8zBApwbXRBc3NldElkCAUBcgJfNAQFc3RhdGUIBQFyAl81AwkAZgIFEm5vTGVzc1RoZW5BbXRBc3NldAUIb3V0QW1BbXQJAAIBCQCsAgIJAKwCAgkArAICAglGYWlsZWQ6ICAJAKQDAQUIb3V0QW1BbXQCAyA8IAkApAMBBRJub0xlc3NUaGVuQW10QXNzZXQDCQBmAgUUbm9MZXNzVGhlblByaWNlQXNzZXQFCG91dFByQW10CQACAQkArAICCQCsAgIJAKwCAgIIRmFpbGVkOiAJAKQDAQUIb3V0UHJBbXQCAyA8IAkApAMBBRRub0xlc3NUaGVuUHJpY2VBc3NldAQKY3VycmVudERMcAkBDmNhbGNDdXJyZW50RExwAwkAtgIBAAAJALYCAQAACQC2AgEAAAMJAAACBQpjdXJyZW50RExwBQpjdXJyZW50RExwBBRidXJuTFBBc3NldE9uRmFjdG9yeQkA/AcEBQNmY2ECBGJ1cm4JAMwIAgUGcG10QW10BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCnBtdEFzc2V0SWQFBnBtdEFtdAUDbmlsAwkAAAIFFGJ1cm5MUEFzc2V0T25GYWN0b3J5BRRidXJuTFBBc3NldE9uRmFjdG9yeQQNJHQwNTE0ODc1MTU2OAkBEnJlZnJlc2hETHBJbnRlcm5hbAMJAQEtAQUIb3V0QW1BbXQJAQEtAQUIb3V0UHJBbXQAAAQRcmVmcmVzaERMcEFjdGlvbnMIBQ0kdDA1MTQ4NzUxNTY4Al8xBAp1cGRhdGVkRExwCAUNJHQwNTE0ODc1MTU2OAJfMgQRaXNVcGRhdGVkRExwVmFsaWQJARJ2YWxpZGF0ZVVwZGF0ZWRETHACBQpjdXJyZW50RExwBQp1cGRhdGVkRExwAwkAAAIFEWlzVXBkYXRlZERMcFZhbGlkBRFpc1VwZGF0ZWRETHBWYWxpZAkAzggCBQVzdGF0ZQURcmVmcmVzaERMcEFjdGlvbnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENdW5zdGFrZUFuZEdldAEGYW1vdW50BA1jaGVja1BheW1lbnRzAwkBAiE9AgkAkAMBCAUBaQhwYXltZW50cwAACQACAQINTm8gcG1udHMgZXhwZAYDCQAAAgUNY2hlY2tQYXltZW50cwUNY2hlY2tQYXltZW50cwQKZmFjdG9yeUNmZwkBA2dmYwAECWxwQXNzZXRJZAUMY2ZnTHBBc3NldElkBAdzdGFraW5nCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkAkQMCBQpmYWN0b3J5Q2ZnBQ9pZHhGYWN0U3Rha0NudHICCldyIHN0IGFkZHIECmN1cnJlbnRETHAJAQ5jYWxjQ3VycmVudERMcAMJALYCAQAACQC2AgEAAAkAtgIBAAADCQAAAgUKY3VycmVudERMcAUKY3VycmVudERMcAQKdW5zdGFrZUludgkA/AcEBQdzdGFraW5nAgd1bnN0YWtlCQDMCAIJANgEAQUJbHBBc3NldElkCQDMCAIFBmFtb3VudAUDbmlsBQNuaWwDCQAAAgUKdW5zdGFrZUludgUKdW5zdGFrZUludgQBcgkBA2VnbwQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBBQlscEFzc2V0SWQFBmFtb3VudAgFAWkGY2FsbGVyBAhvdXRBbUFtdAgFAXICXzEECG91dFByQW10CAUBcgJfMgQDc3RzCQENcGFyc2VJbnRWYWx1ZQEIBQFyAl85BAVzdGF0ZQgFAXIDXzEwBAF2AwMJAQNpZ3MABgkAAAIFA3N0cwUMUG9vbFNodXRkb3duCQACAQkArAICAglCbG9ja2VkOiAJAKQDAQUDc3RzBgMJAAACBQF2BQF2BAVidXJuQQkA/AcEBQNmY2ECBGJ1cm4JAMwIAgUGYW1vdW50BQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIFCWxwQXNzZXRJZAUGYW1vdW50BQNuaWwDCQAAAgUFYnVybkEFBWJ1cm5BBA0kdDA1MjU5NTUyNjc2CQEScmVmcmVzaERMcEludGVybmFsAwkBAS0BBQhvdXRBbUFtdAkBAS0BBQhvdXRQckFtdAAABBFyZWZyZXNoRExwQWN0aW9ucwgFDSR0MDUyNTk1NTI2NzYCXzEECnVwZGF0ZWRETHAIBQ0kdDA1MjU5NTUyNjc2Al8yBBFpc1VwZGF0ZWRETHBWYWxpZAkBEnZhbGlkYXRlVXBkYXRlZERMcAIFCmN1cnJlbnRETHAFCnVwZGF0ZWRETHADCQAAAgURaXNVcGRhdGVkRExwVmFsaWQFEWlzVXBkYXRlZERMcFZhbGlkCQDOCAIFBXN0YXRlBRFyZWZyZXNoRExwQWN0aW9ucwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARN1bnN0YWtlQW5kR2V0Tm9MZXNzAw11bnN0YWtlQW1vdW50FW5vTGVzc1RoZW5BbW91bnRBc3NldBRub0xlc3NUaGVuUHJpY2VBc3NldAQNaXNHZXREaXNhYmxlZAMJAQNpZ3MABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgQGY2hlY2tzCQDMCAIDCQEBIQEFDWlzR2V0RGlzYWJsZWQGCQACAQIhZ2V0IG9wZXJhdGlvbiBpcyBibG9ja2VkIGJ5IGFkbWluCQDMCAIDCQAAAgkAkAMBCAUBaQhwYXltZW50cwAABgkAAgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApjdXJyZW50RExwCQEOY2FsY0N1cnJlbnRETHADCQC2AgEAAAkAtgIBAAAJALYCAQAAAwkAAAIFCmN1cnJlbnRETHAFCmN1cnJlbnRETHAECnVuc3Rha2VJbnYJAPwHBAUPc3Rha2luZ0NvbnRyYWN0Agd1bnN0YWtlCQDMCAIJANgEAQUMY2ZnTHBBc3NldElkCQDMCAIFDXVuc3Rha2VBbW91bnQFA25pbAUDbmlsAwkAAAIFCnVuc3Rha2VJbnYFCnVuc3Rha2VJbnYEA3JlcwkBA2VnbwQJANgEAQgFAWkNdHJhbnNhY3Rpb25JZAkA2AQBBQxjZmdMcEFzc2V0SWQFDXVuc3Rha2VBbW91bnQIBQFpBmNhbGxlcgQIb3V0QW1BbXQIBQNyZXMCXzEECG91dFByQW10CAUDcmVzAl8yBAVzdGF0ZQgFA3JlcwNfMTAEDGNoZWNrQW1vdW50cwkAzAgCAwkAZwIFCG91dEFtQW10BRVub0xlc3NUaGVuQW1vdW50QXNzZXQGCQACAQkAuQkCCQDMCAICLGFtb3VudCBhc3NldCBhbW91bnQgdG8gcmVjZWl2ZSBpcyBsZXNzIHRoYW4gCQDMCAIJAKQDAQUVbm9MZXNzVGhlbkFtb3VudEFzc2V0BQNuaWwCAAkAzAgCAwkAZwIFCG91dFByQW10BRRub0xlc3NUaGVuUHJpY2VBc3NldAYJAAIBCQC5CQIJAMwIAgIrcHJpY2UgYXNzZXQgYW1vdW50IHRvIHJlY2VpdmUgaXMgbGVzcyB0aGFuIAkAzAgCCQCkAwEFFG5vTGVzc1RoZW5QcmljZUFzc2V0BQNuaWwCAAUDbmlsAwkAAAIFDGNoZWNrQW1vdW50cwUMY2hlY2tBbW91bnRzBBRidXJuTFBBc3NldE9uRmFjdG9yeQkA/AcEBQNmY2ECBGJ1cm4JAMwIAgUNdW5zdGFrZUFtb3VudAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQxjZmdMcEFzc2V0SWQFDXVuc3Rha2VBbW91bnQFA25pbAMJAAACBRRidXJuTFBBc3NldE9uRmFjdG9yeQUUYnVybkxQQXNzZXRPbkZhY3RvcnkEDSR0MDUzOTI3NTQwMDgJARJyZWZyZXNoRExwSW50ZXJuYWwDCQEBLQEFCG91dEFtQW10CQEBLQEFCG91dFByQW10AAAEEXJlZnJlc2hETHBBY3Rpb25zCAUNJHQwNTM5Mjc1NDAwOAJfMQQKdXBkYXRlZERMcAgFDSR0MDUzOTI3NTQwMDgCXzIEEWlzVXBkYXRlZERMcFZhbGlkCQESdmFsaWRhdGVVcGRhdGVkRExwAgUKY3VycmVudERMcAUKdXBkYXRlZERMcAMJAAACBRFpc1VwZGF0ZWRETHBWYWxpZAURaXNVcGRhdGVkRExwVmFsaWQJAM4IAgUFc3RhdGUFEXJlZnJlc2hETHBBY3Rpb25zCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXVuc3Rha2VBbmRHZXRPbmVUa25WMgMNdW5zdGFrZUFtb3VudApvdXRBc3NldElkDG1pbk91dEFtb3VudAQgaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWQKAAFACQD8BwQFA2ZjYQIoaXNQb29sT25lVG9rZW5PcGVyYXRpb25zRGlzYWJsZWRSRUFET05MWQkAzAgCCQClCAEFBHRoaXMFA25pbAUDbmlsAwkAAQIFAUACB0Jvb2xlYW4FAUAJAAIBCQCsAgIJAAMBBQFAAhwgY291bGRuJ3QgYmUgY2FzdCB0byBCb29sZWFuBA1pc0dldERpc2FibGVkAwMJAQNpZ3MABgkAAAIFDWNmZ1Bvb2xTdGF0dXMFDFBvb2xTaHV0ZG93bgYFIGlzUG9vbE9uZVRva2VuT3BlcmF0aW9uc0Rpc2FibGVkBAZjaGVja3MJAMwIAgMDCQEBIQEFDWlzR2V0RGlzYWJsZWQGCQEJaXNNYW5hZ2VyAQUBaQYJAQh0aHJvd0VycgECIWdldCBvcGVyYXRpb24gaXMgYmxvY2tlZCBieSBhZG1pbgkAzAgCAwkAAAIJAJADAQgFAWkIcGF5bWVudHMAAAYJAQh0aHJvd0VycgECGG5vIHBheW1lbnRzIGFyZSBleHBlY3RlZAUDbmlsAwkAAAIFBmNoZWNrcwUGY2hlY2tzBApmYWN0b3J5Q2ZnCQEDZ2ZjAAQJbHBBc3NldElkBQxjZmdMcEFzc2V0SWQEB3N0YWtpbmcJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQCRAwIFCmZhY3RvcnlDZmcFD2lkeEZhY3RTdGFrQ250cgIKV3Igc3QgYWRkcgQLdXNlckFkZHJlc3MIBQFpBmNhbGxlcgQXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MFBHRoaXMECnVuc3Rha2VJbnYJAPwHBAUHc3Rha2luZwIPdW5zdGFrZUlOVEVSTkFMCQDMCAIFCWxwQXNzZXRJZAkAzAgCBQ11bnN0YWtlQW1vdW50CQDMCAIIBQt1c2VyQWRkcmVzcwVieXRlcwkAzAgCCAUXbHBBc3NldFJlY2lwaWVudEFkZHJlc3MFYnl0ZXMFA25pbAUDbmlsAwkAAAIFCnVuc3Rha2VJbnYFCnVuc3Rha2VJbnYEDSR0MDU1MDMwNTUyMTgJARNnZXRPbmVUa25WMkludGVybmFsBgUKb3V0QXNzZXRJZAUMbWluT3V0QW1vdW50CQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCBQlscEFzc2V0SWQFDXVuc3Rha2VBbW91bnQFA25pbAgFAWkGY2FsbGVyCAUBaQxvcmlnaW5DYWxsZXIIBQFpDXRyYW5zYWN0aW9uSWQEBXN0YXRlCAUNJHQwNTUwMzA1NTIxOAJfMQQLdG90YWxBbW91bnQIBQ0kdDA1NTAzMDU1MjE4Al8yCQCUCgIFBXN0YXRlBQt0b3RhbEFtb3VudAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARxwdXRPbmVUa25WMldpdGhCb251c1JFQURPTkxZAhBwYXltZW50QW1vdW50UmF3DnBheW1lbnRBc3NldElkBA0kdDA1NTM0NjU1NDQ5CQENY2FsY1B1dE9uZVRrbgUFEHBheW1lbnRBbW91bnRSYXcFDnBheW1lbnRBc3NldElkAgACAAYECGxwQW1vdW50CAUNJHQwNTUzNDY1NTQ0OQJfMQQFc3RhdGUIBQ0kdDA1NTM0NjU1NDQ5Al8yBAlmZWVBbW91bnQIBQ0kdDA1NTM0NjU1NDQ5Al8zBAVib251cwgFDSR0MDU1MzQ2NTU0NDkCXzQJAJQKAgUDbmlsCQCVCgMFCGxwQW1vdW50BQlmZWVBbW91bnQFBWJvbnVzAWkBIXB1dE9uZVRrblYyV2l0aG91dFRha2VGZWVSRUFET05MWQIQcGF5bWVudEFtb3VudFJhdw5wYXltZW50QXNzZXRJZAQNJHQwNTU1OTc1NTcwMQkBDWNhbGNQdXRPbmVUa24FBRBwYXltZW50QW1vdW50UmF3BQ5wYXltZW50QXNzZXRJZAIAAgAHBAhscEFtb3VudAgFDSR0MDU1NTk3NTU3MDECXzEEBXN0YXRlCAUNJHQwNTU1OTc1NTcwMQJfMgQJZmVlQW1vdW50CAUNJHQwNTU1OTc1NTcwMQJfMwQFYm9udXMIBQ0kdDA1NTU5NzU1NzAxAl80CQCUCgIFA25pbAkAlQoDBQhscEFtb3VudAUJZmVlQW1vdW50BQVib251cwFpAQhhY3RpdmF0ZQIIYW10QXNTdHIHcHJBc1N0cgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyCQClCAEFA2ZjYQkAAgECBmRlbmllZAkAlAoCCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJhYQAFCGFtdEFzU3RyCQDMCAIJAQtTdHJpbmdFbnRyeQIJAQJwYQAFB3ByQXNTdHIFA25pbAIHc3VjY2VzcwFpAQRzZXRTAgFrAXYDCQECIT0CCQClCAEIBQFpBmNhbGxlcgkBBHN0cmYCBQR0aGlzCQEDYWRhAAUCcGQJAMwIAgkBC1N0cmluZ0VudHJ5AgUBawUBdgUDbmlsAWkBBHNldEkCAWsBdgMJAQIhPQIJAKUIAQgFAWkGY2FsbGVyCQEEc3RyZgIFBHRoaXMJAQNhZGEABQJwZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUBawUBdgUDbmlsAWkBHGdldFBvb2xDb25maWdXcmFwcGVyUkVBRE9OTFkACQCUCgIFA25pbAkBA2dwYwABaQEcZ2V0QWNjQmFsYW5jZVdyYXBwZXJSRUFET05MWQEHYXNzZXRJZAkAlAoCBQNuaWwJAQ1nZXRBY2NCYWxhbmNlAQUHYXNzZXRJZAFpARljYWxjUHJpY2VzV3JhcHBlclJFQURPTkxZAwVhbUFtdAVwckFtdAVscEFtdAQCcHIJAQpjYWxjUHJpY2VzAwUFYW1BbXQFBXByQW10BQVscEFtdAkAlAoCBQNuaWwJAMwIAgkApgMBCQCRAwIFAnByAAAJAMwIAgkApgMBCQCRAwIFAnByAAEJAMwIAgkApgMBCQCRAwIFAnByAAIFA25pbAFpARZmcm9tWDE4V3JhcHBlclJFQURPTkxZAgN2YWwMcmVzU2NhbGVNdWx0CQCUCgIFA25pbAkBAmYxAgkApwMBBQN2YWwFDHJlc1NjYWxlTXVsdAFpARR0b1gxOFdyYXBwZXJSRUFET05MWQIHb3JpZ1ZhbA1vcmlnU2NhbGVNdWx0CQCUCgIFA25pbAkApgMBCQECdDECBQdvcmlnVmFsBQ1vcmlnU2NhbGVNdWx0AWkBHmNhbGNQcmljZUJpZ0ludFdyYXBwZXJSRUFET05MWQIIcHJBbXRYMTgIYW1BbXRYMTgJAJQKAgUDbmlsCQCmAwEJAQRjcGJpAgkApwMBBQhwckFtdFgxOAkApwMBBQhhbUFtdFgxOAFpASNlc3RpbWF0ZVB1dE9wZXJhdGlvbldyYXBwZXJSRUFET05MWQkGdHhJZDU4CHNsaXBwYWdlB2luQW1BbXQGaW5BbUlkB2luUHJBbXQGaW5QcklkB3VzckFkZHIGaXNFdmFsBmVtaXRMcAkAlAoCBQNuaWwJAQNlcG8NBQZ0eElkNTgFCHNsaXBwYWdlBQdpbkFtQW10BQZpbkFtSWQFB2luUHJBbXQFBmluUHJJZAUHdXNyQWRkcgUGaXNFdmFsBQZlbWl0THAGBwAAAgABaQEjZXN0aW1hdGVHZXRPcGVyYXRpb25XcmFwcGVyUkVBRE9OTFkEBnR4SWQ1OAdwbXRBc0lkCHBtdExwQW10B3VzckFkZHIEAXIJAQNlZ28EBQZ0eElkNTgFB3BtdEFzSWQFCHBtdExwQW10CQERQGV4dHJOYXRpdmUoMTA2MikBBQd1c3JBZGRyCQCUCgIFA25pbAkAnAoKCAUBcgJfMQgFAXICXzIIBQFyAl8zCAUBcgJfNAgFAXICXzUIBQFyAl82CAUBcgJfNwkApgMBCAUBcgJfOAgFAXICXzkIBQFyA18xMAECdHgBBnZlcmlmeQAED3RhcmdldFB1YmxpY0tleQQHJG1hdGNoMAkBAW0AAwkAAQIFByRtYXRjaDACCkJ5dGVWZWN0b3IEAnBrBQckbWF0Y2gwBQJwawMJAAECBQckbWF0Y2gwAgRVbml0CAUCdHgPc2VuZGVyUHVibGljS2V5CQACAQILTWF0Y2ggZXJyb3IEByRtYXRjaDAFAnR4AwkAAQIFByRtYXRjaDACBU9yZGVyBAVvcmRlcgUHJG1hdGNoMAQKbWF0Y2hlclB1YgkBAm1wAAQNJHQwNTg0OTM1ODU2MgkBG3ZhbGlkYXRlTWF0Y2hlck9yZGVyQWxsb3dlZAEFBW9yZGVyBApvcmRlclZhbGlkCAUNJHQwNTg0OTM1ODU2MgJfMQQOb3JkZXJWYWxpZEluZm8IBQ0kdDA1ODQ5MzU4NTYyAl8yBAtzZW5kZXJWYWxpZAkA9AMDCAUFb3JkZXIJYm9keUJ5dGVzCQCRAwIIBQVvcmRlcgZwcm9vZnMAAAgFBW9yZGVyD3NlbmRlclB1YmxpY0tleQQMbWF0Y2hlclZhbGlkCQD0AwMIBQVvcmRlcglib2R5Qnl0ZXMJAJEDAggFBW9yZGVyBnByb29mcwABBQptYXRjaGVyUHViAwMDBQpvcmRlclZhbGlkBQtzZW5kZXJWYWxpZAcFDG1hdGNoZXJWYWxpZAcGCQEPdGhyb3dPcmRlckVycm9yBAUKb3JkZXJWYWxpZAUOb3JkZXJWYWxpZEluZm8FC3NlbmRlclZhbGlkBQxtYXRjaGVyVmFsaWQDCQABAgUHJG1hdGNoMAIUU2V0U2NyaXB0VHJhbnNhY3Rpb24EAXMFByRtYXRjaDADCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXkGBAduZXdIYXNoCQD2AwEJAQV2YWx1ZQEIBQFzBnNjcmlwdAQLYWxsb3dlZEhhc2gJANsEAQkBBXZhbHVlAQkAnQgCBQNmY2EJARxrZXlBbGxvd2VkTHBTdGFibGVTY3JpcHRIYXNoAAQLY3VycmVudEhhc2gJAPEHAQUEdGhpcwMJAAACBQthbGxvd2VkSGFzaAUHbmV3SGFzaAkBAiE9AgULY3VycmVudEhhc2gFB25ld0hhc2gHCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAABQ90YXJnZXRQdWJsaWNLZXlMzmd0", "height": 2470738, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: none Next: none Full:
OldNewDifferences
1-# no script
1+{-# STDLIB_VERSION 6 #-}
2+{-# SCRIPT_TYPE ACCOUNT #-}
3+{-# CONTENT_TYPE DAPP #-}
4+let a = 100000000
5+
6+let b = toBigInt(100000000)
7+
8+let c = toBigInt(1000000000000000000)
9+
10+let d = toBigInt(0)
11+
12+let e = toBigInt(0)
13+
14+let f = toBigInt(1)
15+
16+let g = toBigInt(2)
17+
18+let h = toBigInt(3)
19+
20+let i = toBigInt(4)
21+
22+let j = toBigInt((a - ((a * 1) / a)))
23+
24+let k = "WAVES"
25+
26+let l = "100"
27+
28+let m = "1"
29+
30+let n = "__"
31+
32+let o = ""
33+
34+let p = 1
35+
36+let q = 2
37+
38+let r = 3
39+
40+let s = 4
41+
42+let t = 1
43+
44+let u = 2
45+
46+let v = 3
47+
48+let w = 4
49+
50+let x = 5
51+
52+let y = 6
53+
54+let z = 7
55+
56+let A = 8
57+
58+let B = 9
59+
60+let C = 1
61+
62+let D = 6
63+
64+let E = 7
65+
66+let F = 10
67+
68+let G = fraction(10, a, 10000)
69+
70+func H (I,J) = fraction(toBigInt(I), c, toBigInt(J))
71+
72+
73+func K (I,J) = fraction(I, c, J)
74+
75+
76+func L (M,N) = toInt(fraction(M, toBigInt(N), c))
77+
78+
79+func O (M,N,P) = toInt(fraction(M, toBigInt(N), c, P))
80+
81+
82+func Q (I,J) = fraction(I, c, toBigInt(J))
83+
84+
85+func R (M,N) = fraction(M, toBigInt(N), c)
86+
87+
88+func S (T,U,V) = fraction(T, U, V)
89+
90+
91+func W (M) = if ((d > M))
92+ then -(M)
93+ else M
94+
95+
96+func X (M) = if ((d > M))
97+ then -(M)
98+ else M
99+
100+
101+func Y () = "%s__factoryContract"
102+
103+
104+func Z () = "%s__managerPublicKey"
105+
106+
107+func aa () = "%s__pendingManagerPublicKey"
108+
109+
110+func ab () = "%s%s__price__last"
111+
112+
113+func ac (ad,ae) = makeString(["%s%s%d%d__price__history", toString(ad), toString(ae)], n)
114+
115+
116+func af (ag,ah) = ((("%s%s%s__P__" + ag) + "__") + ah)
117+
118+
119+func ai (ag,ah) = ((("%s%s%s__G__" + ag) + "__") + ah)
120+
121+
122+func aj () = "%s__amountAsset"
123+
124+
125+func ak () = "%s__priceAsset"
126+
127+
128+func al () = "%s__amp"
129+
130+
131+func am () = "%s__addonAddr"
132+
133+
134+let an = "%s__fee"
135+
136+let ao = valueOrElse(getInteger(this, an), G)
137+
138+let ap = makeString(["%s", "dLp"], n)
139+
140+let aq = makeString(["%s", "dLpRefreshedHeight"], n)
141+
142+let ar = makeString(["%s", "refreshDLpDelay"], n)
143+
144+let as = 30
145+
146+let at = valueOrElse(getInteger(this, ar), as)
147+
148+func au () = "%s__factoryConfig"
149+
150+
151+func av () = "%s%s__matcher__publicKey"
152+
153+
154+func aw (ax,ay) = (((("%d%d%s__" + ax) + "__") + ay) + "__config")
155+
156+
157+func az (aA) = ("%s%s%s__mappings__baseAsset2internalId__" + aA)
158+
159+
160+func aB () = "%s__shutdown"
161+
162+
163+func aC () = "%s__allowedLpStableScriptHash"
164+
165+
166+func aD () = "%s__feeCollectorAddress"
167+
168+
169+func aE (aF,aG,aH,aI) = throw((((((((("order validation failed: orderValid=" + toString(aF)) + " (") + aG) + ")") + " senderValid=") + toString(aH)) + " matcherValid=") + toString(aI)))
170+
171+
172+func aJ (aK,aL) = valueOrErrorMessage(getString(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
173+
174+
175+func aM (aK,aL) = valueOrErrorMessage(getInteger(aK, aL), makeString(["mandatory ", toString(aK), ".", aL, " not defined"], ""))
176+
177+
178+func aN (aO) = throw(makeString(["lp_stable.ride:", aO], " "))
179+
180+
181+func aP (aO) = makeString(["lp_stable.ride:", aO], " ")
182+
183+
184+let aQ = addressFromStringValue(aJ(this, Y()))
185+
186+let aR = {
187+ let aS = invoke(aQ, "getInFeeREADONLY", [toString(this)], nil)
188+ if ($isInstanceOf(aS, "Int"))
189+ then aS
190+ else throw(($getType(aS) + " couldn't be cast to Int"))
191+ }
192+
193+let aT = {
194+ let aS = invoke(aQ, "getOutFeeREADONLY", [toString(this)], nil)
195+ if ($isInstanceOf(aS, "Int"))
196+ then aS
197+ else throw(($getType(aS) + " couldn't be cast to Int"))
198+ }
199+
200+let aU = aJ(this, al())
201+
202+func aV () = valueOrElse(getBoolean(aQ, aB()), false)
203+
204+
205+func aW () = fromBase58String(aJ(aQ, av()))
206+
207+
208+let aX = addressFromStringValue(aJ(aQ, aD()))
209+
210+func aY () = {
211+ let aZ = aJ(this, aj())
212+ let ba = aJ(this, ak())
213+ let bb = aM(aQ, az(ba))
214+ let ax = aM(aQ, az(aZ))
215+ split(aJ(aQ, aw(toString(ax), toString(bb))), n)
216+ }
217+
218+
219+func bc (bd) = if ((bd == k))
220+ then unit
221+ else fromBase58String(bd)
222+
223+
224+func be (bd) = if ((bd == unit))
225+ then k
226+ else toBase58String(value(bd))
227+
228+
229+func bf (bg) = $Tuple9(addressFromStringValue(bg[t]), parseIntValue(bg[u]), fromBase58String(bg[v]), bc(bg[w]), bc(bg[x]), parseIntValue(bg[y]), parseIntValue(bg[z]), fromBase58String(bg[A]), fromBase58String(bg[B]))
230+
231+
232+let bh = bf(aY())
233+
234+let bi = bh
235+
236+let bj = bi._1
237+
238+let bk = bi._2
239+
240+let bl = bi._3
241+
242+let bm = bi._4
243+
244+let bn = bi._5
245+
246+let bo = bi._6
247+
248+let bp = bi._7
249+
250+let bq = bi._8
251+
252+let br = bi._9
253+
254+func bs () = split(aJ(aQ, au()), n)
255+
256+
257+let bt = bs()
258+
259+let bu = valueOrErrorMessage(addressFromString(bt[C]), "Invalid staking contract address")
260+
261+let bv = valueOrErrorMessage(addressFromString(bt[E]), "Invalid slipage contract address")
262+
263+let bw = valueOrErrorMessage(addressFromString(bt[F]), "Invalid gwx contract address")
264+
265+let bx = valueOrErrorMessage(addressFromString(bt[D]), "Invalid gwx contract address")
266+
267+func by (bz,bA,bB,bC,bD,bE,bF,bG,bH,bI) = makeString(["%d%d%d%d%d%d%d%d%d%d", toString(bz), toString(bA), toString(bB), toString(bC), toString(bD), toString(bE), toString(bF), toString(bG), toString(bH), toString(bI)], n)
268+
269+
270+func bJ (bK,bL,bM,bC,bF,bG) = makeString(["%d%d%d%d%d%d", toString(bK), toString(bL), toString(bM), toString(bC), toString(bF), toString(bG)], n)
271+
272+
273+func bN (bO) = if ((bO == "WAVES"))
274+ then wavesBalance(this).available
275+ else assetBalance(this, fromBase58String(bO))
276+
277+
278+func bP (bQ,bR) = fraction(bQ, c, bR)
279+
280+
281+func bS (bQ,bR,P) = fraction(bQ, c, bR, P)
282+
283+
284+func bT (bU,bV,bW) = {
285+ let bX = fraction((bU - bV), b, bV)
286+ let bY = ((bW - W(bX)) > d)
287+ if (!(bY))
288+ then throw(("Big slpg: " + toString(bX)))
289+ else $Tuple2(bY, min([bU, bV]))
290+ }
291+
292+
293+func bZ (ca,cb,cc) = {
294+ let bX = fraction(cb, b, ca)
295+ let cd = (cc > bX)
296+ if (if (cd)
297+ then true
298+ else (cb > ca))
299+ then throw(((((((toString(cb) + " ") + toString(ca)) + " ") + toString(bX)) + " ") + toString(cc)))
300+ else cd
301+ }
302+
303+
304+func ce (cf,cg,ch,ci) = {
305+ let cj = H(ch, cf)
306+ let ck = H(ci, cg)
307+ bP(ck, cj)
308+ }
309+
310+
311+func cl (ch,ci,cm) = {
312+ let cn = bo
313+ let co = bp
314+ let cp = ce(cn, co, ch, ci)
315+ let bR = H(ch, cn)
316+ let bQ = H(ci, co)
317+ let cq = H(cm, a)
318+ let cr = bP(bR, cq)
319+ let cs = bP(bQ, cq)
320+[cp, cr, cs]
321+ }
322+
323+
324+func ct (ch,ci,cm) = {
325+ let cu = cl(ch, ci, cm)
326+[L(cu[0], a), L(cu[1], a), L(cu[2], a)]
327+ }
328+
329+
330+func cv (cw,ao) = {
331+ let cx = if ((ao == 0))
332+ then 0
333+ else fraction(cw, ao, a)
334+ $Tuple2((cw - cx), cx)
335+ }
336+
337+
338+func cy (cz) = {
339+ let cA = cz[0]
340+ let cB = cz[1]
341+ let cC = (cA + cB)
342+ if ((cC == e))
343+ then e
344+ else {
345+ let cD = parseIntValue(aU)
346+ let cE = (cD * 2)
347+ let cu = fraction(cA, cB, f)
348+ let cF = fraction(cu, i, f)
349+ let cG = fraction(toBigInt(cE), cC, f)
350+ let cH = toBigInt((cE - 1))
351+ func cI (cJ) = {
352+ let cK = fraction(cJ, cJ, f)
353+ let cL = fraction(cK, cJ, f)
354+ let cM = fraction(cL, f, cF)
355+ fraction((cG + fraction(cM, g, f)), cJ, (fraction(cH, cJ, f) + fraction(h, cM, f)))
356+ }
357+
358+ func cN (cO,cP) = if (cO._2)
359+ then cO
360+ else {
361+ let cJ = cO._1
362+ let cQ = cI(cJ)
363+ let cR = (cQ - value(cJ))
364+ let cS = if ((e > cR))
365+ then -(cR)
366+ else cR
367+ if ((f >= cS))
368+ then $Tuple2(cQ, true)
369+ else $Tuple2(cQ, false)
370+ }
371+
372+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17]
373+ let cU = {
374+ let cV = cT
375+ let cW = size(cV)
376+ let cX = $Tuple2(cC, false)
377+ func cY (cZ,da) = if ((da >= cW))
378+ then cZ
379+ else cN(cZ, cV[da])
380+
381+ func db (cZ,da) = if ((da >= cW))
382+ then cZ
383+ else throw("List size exceeds 18")
384+
385+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18)
386+ }
387+ let cJ = cU._1
388+ let dc = cU._2
389+ if (dc)
390+ then cJ
391+ else throw(("D calculation error, D = " + toString(cJ)))
392+ }
393+ }
394+
395+
396+func dd (de,df,dg,dh) = {
397+ let di = bl
398+ let dj = toBase58String(value(bm))
399+ let dk = toBase58String(value(bn))
400+ let dl = bo
401+ let dm = bp
402+ let dn = toString(bk)
403+ let do = valueOrErrorMessage(assetInfo(di), "Wrong LP id").quantity
404+ if ((toBase58String(di) != df))
405+ then throw("Wrong pmt asset")
406+ else {
407+ let dp = bN(dj)
408+ let dq = H(dp, dl)
409+ let dr = bN(dk)
410+ let ds = H(dr, dm)
411+ let dt = bP(ds, dq)
412+ let du = L(dt, a)
413+ let dv = H(dg, a)
414+ let dw = H(do, a)
415+ let dx = fraction(dq, dv, dw)
416+ let dy = fraction(ds, dv, dw)
417+ let dz = O(dx, dl, FLOOR)
418+ let dA = O(dy, dm, FLOOR)
419+ let dB = if ((de == ""))
420+ then nil
421+ else [ScriptTransfer(dh, dz, if ((dj == "WAVES"))
422+ then unit
423+ else fromBase58String(dj)), ScriptTransfer(dh, dA, if ((dk == "WAVES"))
424+ then unit
425+ else fromBase58String(dk)), StringEntry(ai(toString(dh), de), bJ(dz, dA, dg, du, height, lastBlock.timestamp)), IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du)]
426+ $Tuple10(dz, dA, dj, dk, dp, dr, do, dt, dn, dB)
427+ }
428+ }
429+
430+
431+func dC (de,bW,dD,dE,dF,dG,dh,dH,dI,dJ,dK,dL,dM) = {
432+ let di = bl
433+ let dN = toBase58String(value(bm))
434+ let dO = toBase58String(value(bn))
435+ let dP = bq
436+ let dQ = br
437+ let dR = bo
438+ let dS = bp
439+ let dn = toString(bk)
440+ let dT = valueOrErrorMessage(assetInfo(di), "Wr lp as").quantity
441+ let dp = if (dH)
442+ then bN(dN)
443+ else if (if (dJ)
444+ then (dM == dN)
445+ else false)
446+ then (bN(dN) - dL)
447+ else if (dJ)
448+ then bN(dN)
449+ else (bN(dN) - dD)
450+ let dr = if (dH)
451+ then bN(dO)
452+ else if (if (dJ)
453+ then (dM == dO)
454+ else false)
455+ then (bN(dO) - dL)
456+ else if (dJ)
457+ then bN(dO)
458+ else (bN(dO) - dF)
459+ let dU = H(dD, dR)
460+ let dV = H(dF, dS)
461+ let dW = bP(dV, dU)
462+ let dq = H(dp, dR)
463+ let ds = H(dr, dS)
464+ let cb = cy([dq, ds])
465+ let dX = if ((dT == 0))
466+ then {
467+ let ca = cy([(dq + dU), (ds + dV)])
468+ let dY = if ((ca > cb))
469+ then true
470+ else throw("D1 should be greater than D0")
471+ if ((dY == dY))
472+ then {
473+ let dt = d
474+ let dZ = d
475+ let cq = ca
476+ $Tuple5(L(cq, a), L(dU, dR), L(dV, dS), bP((ds + dV), (dq + dU)), dZ)
477+ }
478+ else throw("Strict value is not equal to itself.")
479+ }
480+ else {
481+ let dt = bP(ds, dq)
482+ let ea = fraction(W((dt - dW)), c, dt)
483+ let dZ = H(bW, a)
484+ if (if (if (dK)
485+ then (dt != d)
486+ else false)
487+ then (ea > dZ)
488+ else false)
489+ then throw(((("Price slippage " + toString(ea)) + " > ") + toString(dZ)))
490+ else {
491+ let eb = H(dT, a)
492+ let ec = fraction(dU, bS(ds, dq, CEILING), c, CEILING)
493+ let ed = fraction(dV, c, bS(ds, dq, FLOOR), CEILING)
494+ let ee = if ((ec > dV))
495+ then $Tuple2(ed, dV)
496+ else $Tuple2(dU, ec)
497+ let ef = ee._1
498+ let eg = ee._2
499+ let ca = cy([(dq + ef), (ds + eg)])
500+ let dY = if ((ca > cb))
501+ then true
502+ else throw("D1 should be greater than D0")
503+ if ((dY == dY))
504+ then {
505+ let cq = fraction(eb, (ca - cb), cb)
506+ $Tuple5(O(cq, a, FLOOR), O(ef, dR, CEILING), O(eg, dS, CEILING), dt, dZ)
507+ }
508+ else throw("Strict value is not equal to itself.")
509+ }
510+ }
511+ let eh = dX._1
512+ let ei = dX._2
513+ let ej = dX._3
514+ let du = L(dX._4, a)
515+ let ek = L(dX._5, a)
516+ if ((0 >= eh))
517+ then throw("LP <= 0")
518+ else {
519+ let el = if (!(dI))
520+ then 0
521+ else eh
522+ let em = (dD - ei)
523+ let en = (dF - ej)
524+ let eo = if (if (dJ)
525+ then (dM == dN)
526+ else false)
527+ then $Tuple2(dL, 0)
528+ else if (if (dJ)
529+ then (dM == dO)
530+ else false)
531+ then $Tuple2(0, dL)
532+ else $Tuple2(ei, ej)
533+ let ep = eo._1
534+ let eq = eo._2
535+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, de), by(ep, eq, el, du, bW, ek, height, lastBlock.timestamp, em, en))]
536+ $Tuple13(eh, el, du, dp, dr, dT, di, dn, er, em, en, dE, dG)
537+ }
538+ }
539+
540+
541+func es (cz,cP,et) = {
542+ let eu = g
543+ let ev = cz[if ((cP == 0))
544+ then 1
545+ else 0]
546+ let ew = parseBigIntValue(l)
547+ let cD = (parseBigIntValue(aU) * ew)
548+ let cC = ev
549+ let cE = (cD * eu)
550+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
551+ let ey = ((cC + ((et * ew) / cE)) - et)
552+ func cN (cO,ez) = {
553+ let eA = cO
554+ let eB = eA._1
555+ let dc = eA._2
556+ if ((dc != unit))
557+ then cO
558+ else {
559+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
560+ let eD = X((eC - value(eB)))
561+ if ((f >= eD))
562+ then $Tuple2(eC, ez)
563+ else $Tuple2(eC, unit)
564+ }
565+ }
566+
567+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
568+ let eE = {
569+ let cV = cT
570+ let cW = size(cV)
571+ let cX = $Tuple2(et, unit)
572+ func cY (cZ,da) = if ((da >= cW))
573+ then cZ
574+ else cN(cZ, cV[da])
575+
576+ func db (cZ,da) = if ((da >= cW))
577+ then cZ
578+ else throw("List size exceeds 15")
579+
580+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
581+ }
582+ let eB = eE._1
583+ let dc = eE._2
584+ if ((dc != unit))
585+ then eB
586+ else throw(("Y calculation error, Y = " + toString(eB)))
587+ }
588+
589+
590+func eF (eG,eH,eI) = {
591+ let eJ = fraction(cy([K(eG, toBigInt(bo)), K(eH, toBigInt(bp))]), c, eI)
592+ if ((eI == e))
593+ then e
594+ else eJ
595+ }
596+
597+
598+func eK (eL,eM,eN) = {
599+ let eO = (toBigInt(bN(be(bm))) - eL)
600+ let eP = (toBigInt(bN(be(bn))) - eM)
601+ let eQ = (toBigInt(value(assetInfo(bl)).quantity) - eN)
602+ let eR = eF(eO, eP, eQ)
603+ eR
604+ }
605+
606+
607+func eS (eT,eU,eN) = {
608+ let eO = (bN(be(bm)) + eT)
609+ let eP = (bN(be(bn)) + eU)
610+ let eQ = (value(assetInfo(bl)).quantity + eN)
611+ let eJ = eF(toBigInt(eO), toBigInt(eP), toBigInt(eQ))
612+ let eV = [IntegerEntry(aq, height), StringEntry(ap, toString(eJ))]
613+ $Tuple2(eV, eJ)
614+ }
615+
616+
617+func eW (eX,eJ) = if ((eJ >= eX))
618+ then true
619+ else aN("updated DLp lower than current DLp")
620+
621+
622+func eY (eZ) = {
623+ let eO = bN(be(bm))
624+ let eP = bN(be(bn))
625+ let fa = eZ.amount
626+ let fb = fraction(eZ.amount, eZ.price, a, FLOOR)
627+ let fc = if ((eZ.orderType == Buy))
628+ then $Tuple2(fa, -(fb))
629+ else $Tuple2(-(fa), fb)
630+ let eT = fc._1
631+ let eU = fc._2
632+ if (if (if (aV())
633+ then true
634+ else (bk == r))
635+ then true
636+ else (bk == s))
637+ then throw("Admin blocked")
638+ else if (if ((eZ.assetPair.amountAsset != bm))
639+ then true
640+ else (eZ.assetPair.priceAsset != bn))
641+ then throw("Wr assets")
642+ else {
643+ let fd = parseBigIntValue(valueOrElse(getString(this, ap), "0"))
644+ let fe = eS(eT, eU, 0)
645+ let ff = fe._1
646+ let fg = fe._2
647+ let fh = (fg >= fd)
648+ let fi = makeString(["dLp=", toString(fd), " dLpNew=", toString(fg), " amountAssetBalance=", toString(eO), " priceAssetBalance=", toString(eP), " amountAssetBalanceDelta=", toString(eT), " priceAssetBalanceDelta=", toString(eU), " height=", toString(height)], "")
649+ $Tuple2(fh, fi)
650+ }
651+ }
652+
653+
654+func fj (cP) = if ((size(cP.payments) != 1))
655+ then throw("1 pmnt exp")
656+ else {
657+ let fk = value(cP.payments[0])
658+ let df = value(fk.assetId)
659+ let dL = fk.amount
660+ let dX = dd(toBase58String(cP.transactionId), toBase58String(df), dL, cP.caller)
661+ let dz = dX._1
662+ let dA = dX._2
663+ let dn = parseIntValue(dX._9)
664+ let dB = dX._10
665+ if (if (aV())
666+ then true
667+ else (dn == s))
668+ then throw(("Admin blocked: " + toString(dn)))
669+ else $Tuple5(dz, dA, dL, df, dB)
670+ }
671+
672+
673+func fl (fm,ah,fn,fo,bW,dI,dJ,dK,dL,dM) = {
674+ let dX = dC(ah, bW, value(fn).amount, value(fn).assetId, value(fo).amount, value(fo).assetId, fm, (ah == ""), dI, dJ, dK, dL, dM)
675+ let dn = parseIntValue(dX._8)
676+ if (if (if (aV())
677+ then true
678+ else (dn == q))
679+ then true
680+ else (dn == s))
681+ then throw(("Blocked:" + toString(dn)))
682+ else dX
683+ }
684+
685+
686+func fp (fq,df,dh,ah,fr) = {
687+ let dj = toBase58String(value(bm))
688+ let dk = toBase58String(value(bn))
689+ let di = bl
690+ let dR = bo
691+ let dS = bp
692+ let eQ = toBigInt(valueOrErrorMessage(assetInfo(di), "invalid lp asset").quantity)
693+ let fs = if ((eQ > e))
694+ then true
695+ else throw("initial deposit requires all coins")
696+ if ((fs == fs))
697+ then {
698+ let dp = bN(dj)
699+ let dr = bN(dk)
700+ let ft = if ((ah == ""))
701+ then $Tuple2(dp, dr)
702+ else if ((df == dj))
703+ then if ((fq > dp))
704+ then throw("invalid payment amount")
705+ else $Tuple2((dp - fq), dr)
706+ else if ((df == dk))
707+ then if ((fq > dr))
708+ then throw("invalid payment amount")
709+ else $Tuple2(dp, (dr - fq))
710+ else throw("wrong pmtAssetId")
711+ let fu = ft._1
712+ let fv = ft._2
713+ let fw = if ((df == dj))
714+ then $Tuple2(fq, 0)
715+ else if ((df == dk))
716+ then $Tuple2(0, fq)
717+ else throw("invalid payment")
718+ let fx = fw._1
719+ let fy = fw._2
720+ let fz = if (fr)
721+ then $Tuple3(cv(fx, aR)._1, cv(fy, aR)._1, cv(fq, aR)._2)
722+ else $Tuple3(fx, fy, 0)
723+ let fA = fz._1
724+ let fB = fz._2
725+ let cx = fz._3
726+ let fC = (fu + fA)
727+ let fD = (fv + fB)
728+ let cb = cy([H(fu, bo), H(fv, bp)])
729+ let ca = cy([H(fC, bo), H(fD, bp)])
730+ let dY = if ((ca > cb))
731+ then true
732+ else throw()
733+ if ((dY == dY))
734+ then {
735+ let fE = fraction(eQ, (ca - cb), cb, FLOOR)
736+ let du = L(bP(H(fD, dS), H(fC, dR)), a)
737+ let er = [IntegerEntry(ab(), du), IntegerEntry(ac(height, lastBlock.timestamp), du), StringEntry(af(dh, ah), by(fx, fy, toInt(fE), du, 0, 0, height, lastBlock.timestamp, 0, 0))]
738+ let fF = fraction(fv, a, fu)
739+ let fG = fraction(fq, a, (fF + a))
740+ let fH = (fq - fG)
741+ let fI = fraction(eQ, toBigInt(fH), toBigInt(fv))
742+ let fJ = toInt(fraction((fE - fI), b, fI))
743+ $Tuple4(toInt(fE), er, cx, fJ)
744+ }
745+ else throw("Strict value is not equal to itself.")
746+ }
747+ else throw("Strict value is not equal to itself.")
748+ }
749+
750+
751+func fK (fL,fM,fN,fm,fO,fP) = {
752+ let di = toBase58String(value(bl))
753+ let dj = toBase58String(value(bm))
754+ let dk = toBase58String(value(bn))
755+ let fQ = bo
756+ let fR = bp
757+ let fS = bk
758+ let dh = if ((fm == bx))
759+ then fO
760+ else fm
761+ let fk = value(fN[0])
762+ let df = value(fk.assetId)
763+ let dL = fk.amount
764+ let eR = eK(e, e, e)
765+ if ((eR == eR))
766+ then {
767+ let de = toBase58String(fP)
768+ if ((di != toBase58String(df)))
769+ then throw("Wrong LP")
770+ else {
771+ let dp = bN(dj)
772+ let dr = bN(dk)
773+ let fT = {
774+ let aS = invoke(this, "getOneTknV2READONLY", [fL, dL], nil)
775+ if ($isInstanceOf(aS, "(Int, Int)"))
776+ then aS
777+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
778+ }
779+ if ((fT == fT))
780+ then {
781+ let cx = fT._2
782+ let fU = fT._1
783+ let fV = if (if ((fM > 0))
784+ then (fM > fU)
785+ else false)
786+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
787+ else fU
788+ let fW = if ((fL == dj))
789+ then $Tuple4(fV, 0, ((dp - fV) - cx), dr)
790+ else if ((fL == dk))
791+ then $Tuple4(0, fV, dp, ((dr - fV) - cx))
792+ else throw("invalid out asset id")
793+ let fX = fW._1
794+ let fY = fW._2
795+ let fC = fW._3
796+ let fD = fW._4
797+ let fZ = bP(H(fD, fR), H(fC, fQ))
798+ let ga = L(fZ, a)
799+ let gb = if ((fL == "WAVES"))
800+ then unit
801+ else fromBase58String(fL)
802+ let gc = if ((cx > 0))
803+ then [ScriptTransfer(aX, cx, gb)]
804+ else nil
805+ let dB = ([ScriptTransfer(dh, fV, gb), StringEntry(ai(toString(dh), de), bJ(fX, fY, dL, ga, height, lastBlock.timestamp)), IntegerEntry(ab(), ga), IntegerEntry(ac(height, lastBlock.timestamp), ga)] ++ gc)
806+ if ((dB == dB))
807+ then {
808+ let gd = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
809+ if ((gd == gd))
810+ then {
811+ let ge = {
812+ let gf = if ((this == aX))
813+ then 0
814+ else cx
815+ let gg = if ((bc(fL) == bm))
816+ then true
817+ else false
818+ if (gg)
819+ then $Tuple2(-((fU + gf)), 0)
820+ else $Tuple2(0, -((fU + gf)))
821+ }
822+ let eT = ge._1
823+ let eU = ge._2
824+ let gh = eS(eT, eU, 0)
825+ let gi = gh._1
826+ let eJ = gh._2
827+ let gj = eW(eR, eJ)
828+ if ((gj == gj))
829+ then $Tuple2((dB ++ gi), fV)
830+ else throw("Strict value is not equal to itself.")
831+ }
832+ else throw("Strict value is not equal to itself.")
833+ }
834+ else throw("Strict value is not equal to itself.")
835+ }
836+ else throw("Strict value is not equal to itself.")
837+ }
838+ }
839+ else throw("Strict value is not equal to itself.")
840+ }
841+
842+
843+func gk () = {
844+ let gl = getString(Z())
845+ if ($isInstanceOf(gl, "String"))
846+ then {
847+ let cC = gl
848+ fromBase58String(cC)
849+ }
850+ else if ($isInstanceOf(gl, "Unit"))
851+ then unit
852+ else throw("Match error")
853+ }
854+
855+
856+func gm () = {
857+ let gl = getString(aa())
858+ if ($isInstanceOf(gl, "String"))
859+ then {
860+ let cC = gl
861+ fromBase58String(cC)
862+ }
863+ else if ($isInstanceOf(gl, "Unit"))
864+ then unit
865+ else throw("Match error")
866+ }
867+
868+
869+let gn = throw("Permission denied")
870+
871+func go (cP) = {
872+ let gl = gk()
873+ if ($isInstanceOf(gl, "ByteVector"))
874+ then {
875+ let gp = gl
876+ (cP.callerPublicKey == gp)
877+ }
878+ else if ($isInstanceOf(gl, "Unit"))
879+ then (cP.caller == this)
880+ else throw("Match error")
881+ }
882+
883+
884+func gq (cP) = {
885+ let gl = gk()
886+ if ($isInstanceOf(gl, "ByteVector"))
887+ then {
888+ let gp = gl
889+ if ((cP.callerPublicKey == gp))
890+ then true
891+ else gn
892+ }
893+ else if ($isInstanceOf(gl, "Unit"))
894+ then if ((cP.caller == this))
895+ then true
896+ else gn
897+ else throw("Match error")
898+ }
899+
900+
901+func gr (gs,et,gt) = {
902+ let bg = aY()
903+ let dj = bg[w]
904+ let dk = bg[x]
905+ let eu = g
906+ let ew = parseBigIntValue(l)
907+ let cD = (parseBigIntValue(aU) * ew)
908+ let cz = if ((gs == false))
909+ then [(toBigInt(bN(dj)) + gt), toBigInt(bN(dk))]
910+ else [(toBigInt(bN(dk)) + gt), toBigInt(bN(dj))]
911+ let ev = cz[0]
912+ let cC = ev
913+ let cE = (cD * eu)
914+ let ex = (((((et * et) / (ev * eu)) * et) * ew) / (cE * eu))
915+ let ey = ((cC + ((et * ew) / cE)) - et)
916+ func cN (cO,ez) = {
917+ let gu = cO
918+ let eB = gu._1
919+ let dc = gu._2
920+ if ((dc != unit))
921+ then cO
922+ else {
923+ let eC = (((eB * eB) + ex) / ((g * eB) + ey))
924+ let eD = X((eC - value(eB)))
925+ if ((f >= eD))
926+ then $Tuple2(eC, ez)
927+ else $Tuple2(eC, unit)
928+ }
929+ }
930+
931+ let cT = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
932+ let gv = {
933+ let cV = cT
934+ let cW = size(cV)
935+ let cX = $Tuple2(et, unit)
936+ func cY (cZ,da) = if ((da >= cW))
937+ then cZ
938+ else cN(cZ, cV[da])
939+
940+ func db (cZ,da) = if ((da >= cW))
941+ then cZ
942+ else throw("List size exceeds 15")
943+
944+ db(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cY(cX, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15)
945+ }
946+ let eB = gv._1
947+ let dc = gv._2
948+ if ((dc != unit))
949+ then eB
950+ else throw(("Y calculation error, Y = " + toString(eB)))
951+ }
952+
953+
954+@Callable(cP)
955+func calculateAmountOutForSwapREADONLY (gw,gs,gx) = {
956+ let gy = if ((gs == false))
957+ then {
958+ let gz = aJ(this, ak())
959+ let gt = (toBigInt(bN(aJ(this, aj()))) + toBigInt(gw))
960+ $Tuple2(gz, gt)
961+ }
962+ else {
963+ let gz = aJ(this, aj())
964+ let gt = (toBigInt(bN(aJ(this, ak()))) + toBigInt(gw))
965+ $Tuple2(gz, gt)
966+ }
967+ let gz = gy._1
968+ let gt = gy._2
969+ let bg = aY()
970+ let dj = bg[w]
971+ let dk = bg[x]
972+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
973+ let et = cy(cz)
974+ let eB = gr(gs, et, toBigInt(gw))
975+ let gA = ((toBigInt(bN(gz)) - eB) - toBigInt(1))
976+ let gB = max([0, toInt(gA)])
977+ let gC = if ((gs == false))
978+ then [((toBigInt(bN(dj)) + toBigInt(gw)) + toBigInt(gx)), (toBigInt(bN(dk)) - gA)]
979+ else [(toBigInt(bN(dj)) - gA), ((toBigInt(bN(dk)) + toBigInt(gw)) + toBigInt(gx))]
980+ let gD = cy(gC)
981+ let dY = if ((gD >= et))
982+ then true
983+ else throw(makeString(["new D is fewer error", toString(et), toString(gD)], "__"))
984+ if ((dY == dY))
985+ then $Tuple2(nil, gB)
986+ else throw("Strict value is not equal to itself.")
987+ }
988+
989+
990+
991+@Callable(cP)
992+func calculateAmountOutForSwapAndSendTokens (gw,gs,gE,gF,gx) = {
993+ let gG = {
994+ let aS = invoke(aQ, "getSwapContractREADONLY", nil, nil)
995+ if ($isInstanceOf(aS, "String"))
996+ then aS
997+ else throw(($getType(aS) + " couldn't be cast to String"))
998+ }
999+ let gH = [if ((value(cP.payments[0]).amount >= gw))
1000+ then true
1001+ else aN("Wrong amount"), if ((cP.caller == addressFromStringValue(gG)))
1002+ then true
1003+ else aN("Permission denied")]
1004+ if ((gH == gH))
1005+ then {
1006+ let fk = value(cP.payments[0])
1007+ let gI = be(fk.assetId)
1008+ let gJ = if ((gs == false))
1009+ then {
1010+ let gz = aJ(this, ak())
1011+ let gt = (bN(gI) - value(cP.payments[0]).amount)
1012+ $Tuple2(gz, gt)
1013+ }
1014+ else {
1015+ let gz = aJ(this, aj())
1016+ let gt = (bN(gI) - value(cP.payments[0]).amount)
1017+ $Tuple2(gz, gt)
1018+ }
1019+ let gz = gJ._1
1020+ let gt = gJ._2
1021+ let bg = aY()
1022+ let dj = bg[w]
1023+ let dk = bg[x]
1024+ let cz = if ((gs == false))
1025+ then [(toBigInt(bN(dj)) - toBigInt(value(cP.payments[0]).amount)), toBigInt(bN(dk))]
1026+ else [toBigInt(bN(dj)), (toBigInt(bN(dk)) - toBigInt(value(cP.payments[0]).amount))]
1027+ let et = cy(cz)
1028+ let eB = gr(gs, et, toBigInt(0))
1029+ let gA = ((toBigInt(bN(gz)) - eB) - toBigInt(1))
1030+ let gB = max([0, toInt(gA)])
1031+ let gK = if ((gB >= gE))
1032+ then true
1033+ else throw("Exchange result is fewer coins than expected")
1034+ if ((gK == gK))
1035+ then {
1036+ let gC = if ((gs == false))
1037+ then [(toBigInt(bN(dj)) + toBigInt(gx)), (toBigInt(bN(dk)) - gA)]
1038+ else [(toBigInt(bN(dj)) - gA), (toBigInt(bN(dk)) + toBigInt(gx))]
1039+ let gD = cy(gC)
1040+ let dY = if ((gD >= et))
1041+ then true
1042+ else throw("new D is fewer error")
1043+ if ((dY == dY))
1044+ then $Tuple2([ScriptTransfer(addressFromStringValue(gF), gB, bc(gz))], gB)
1045+ else throw("Strict value is not equal to itself.")
1046+ }
1047+ else throw("Strict value is not equal to itself.")
1048+ }
1049+ else throw("Strict value is not equal to itself.")
1050+ }
1051+
1052+
1053+
1054+@Callable(cP)
1055+func constructor (Y) = {
1056+ let ex = gq(cP)
1057+ if ((ex == ex))
1058+ then [StringEntry(Y(), Y)]
1059+ else throw("Strict value is not equal to itself.")
1060+ }
1061+
1062+
1063+
1064+@Callable(cP)
1065+func setManager (gL) = {
1066+ let ex = gq(cP)
1067+ if ((ex == ex))
1068+ then {
1069+ let gM = fromBase58String(gL)
1070+ if ((gM == gM))
1071+ then [StringEntry(aa(), gL)]
1072+ else throw("Strict value is not equal to itself.")
1073+ }
1074+ else throw("Strict value is not equal to itself.")
1075+ }
1076+
1077+
1078+
1079+@Callable(cP)
1080+func confirmManager () = {
1081+ let cu = gm()
1082+ let gN = if (isDefined(cu))
1083+ then true
1084+ else throw("No pending manager")
1085+ if ((gN == gN))
1086+ then {
1087+ let gO = if ((cP.callerPublicKey == value(cu)))
1088+ then true
1089+ else throw("You are not pending manager")
1090+ if ((gO == gO))
1091+ then [StringEntry(Z(), toBase58String(value(cu))), DeleteEntry(aa())]
1092+ else throw("Strict value is not equal to itself.")
1093+ }
1094+ else throw("Strict value is not equal to itself.")
1095+ }
1096+
1097+
1098+
1099+@Callable(cP)
1100+func put (gP,gQ) = {
1101+ let gR = bs()
1102+ let gS = valueOrErrorMessage(addressFromString(gR[C]), "Wr st addr")
1103+ let gT = valueOrErrorMessage(addressFromString(gR[E]), "Wr sl addr")
1104+ if ((0 > gP))
1105+ then throw("Wrong slippage")
1106+ else if ((size(cP.payments) != 2))
1107+ then throw("2 pmnts expd")
1108+ else {
1109+ let gU = toBigInt(value(cP.payments[0]).amount)
1110+ let gV = toBigInt(value(cP.payments[1]).amount)
1111+ let eO = (toBigInt(bN(be(bm))) - gU)
1112+ if ((eO == eO))
1113+ then {
1114+ let eP = (toBigInt(bN(be(bn))) - gV)
1115+ if ((eP == eP))
1116+ then {
1117+ let eQ = toBigInt(value(assetInfo(bl)).quantity)
1118+ if ((eQ == eQ))
1119+ then {
1120+ let eR = eK(gU, gV, toBigInt(0))
1121+ if ((eR == eR))
1122+ then {
1123+ let gW = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], gP, true, false, true, 0, "")
1124+ let el = gW._2
1125+ let gX = gW._7
1126+ let dB = gW._9
1127+ let em = gW._10
1128+ let en = gW._11
1129+ let dj = gW._12
1130+ let dk = gW._13
1131+ let dX = invoke(aQ, "emit", [el], nil)
1132+ if ((dX == dX))
1133+ then {
1134+ let gY = {
1135+ let gl = dX
1136+ if ($isInstanceOf(gl, "Address"))
1137+ then {
1138+ let gZ = gl
1139+ invoke(gZ, "emit", [el], nil)
1140+ }
1141+ else unit
1142+ }
1143+ if ((gY == gY))
1144+ then {
1145+ let ha = if ((em > 0))
1146+ then invoke(gT, "put", nil, [AttachedPayment(dj, em)])
1147+ else nil
1148+ if ((ha == ha))
1149+ then {
1150+ let hb = if ((en > 0))
1151+ then invoke(gT, "put", nil, [AttachedPayment(dk, en)])
1152+ else nil
1153+ if ((hb == hb))
1154+ then {
1155+ let hc = if (gQ)
1156+ then {
1157+ let hd = invoke(gS, "stake", nil, [AttachedPayment(gX, el)])
1158+ if ((hd == hd))
1159+ then nil
1160+ else throw("Strict value is not equal to itself.")
1161+ }
1162+ else [ScriptTransfer(cP.caller, el, gX)]
1163+ let he = eS(0, 0, 0)
1164+ let gi = he._1
1165+ let eJ = he._2
1166+ let hf = if ((eJ >= eR))
1167+ then true
1168+ else aN(makeString(["updated DLp lower than current DLp", toString(eO), toString(eP), toString(eQ), toString(eR), toString(eJ), toString(em), toString(en)], " "))
1169+ if ((hf == hf))
1170+ then {
1171+ let hg = value(assetInfo(bl)).quantity
1172+ if ((hg == hg))
1173+ then ((dB ++ hc) ++ gi)
1174+ else throw("Strict value is not equal to itself.")
1175+ }
1176+ else throw("Strict value is not equal to itself.")
1177+ }
1178+ else throw("Strict value is not equal to itself.")
1179+ }
1180+ else throw("Strict value is not equal to itself.")
1181+ }
1182+ else throw("Strict value is not equal to itself.")
1183+ }
1184+ else throw("Strict value is not equal to itself.")
1185+ }
1186+ else throw("Strict value is not equal to itself.")
1187+ }
1188+ else throw("Strict value is not equal to itself.")
1189+ }
1190+ else throw("Strict value is not equal to itself.")
1191+ }
1192+ else throw("Strict value is not equal to itself.")
1193+ }
1194+ }
1195+
1196+
1197+
1198+@Callable(cP)
1199+func putOneTknV2 (fM,gQ) = {
1200+ let hh = {
1201+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1202+ if ($isInstanceOf(aS, "Boolean"))
1203+ then aS
1204+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
1205+ }
1206+ let hi = if (if (if (aV())
1207+ then true
1208+ else (bk == q))
1209+ then true
1210+ else (bk == s))
1211+ then true
1212+ else hh
1213+ let gH = [if (if (!(hi))
1214+ then true
1215+ else go(cP))
1216+ then true
1217+ else aN("put operation is blocked by admin"), if ((size(cP.payments) == 1))
1218+ then true
1219+ else aN("exactly 1 payment are expected")]
1220+ if ((gH == gH))
1221+ then {
1222+ let dj = toBase58String(value(bm))
1223+ let dk = toBase58String(value(bn))
1224+ let di = bl
1225+ let fQ = bo
1226+ let fR = bp
1227+ let dh = if ((cP.caller == this))
1228+ then cP.originCaller
1229+ else cP.caller
1230+ let fk = value(cP.payments[0])
1231+ let df = toBase58String(value(fk.assetId))
1232+ let dL = fk.amount
1233+ let eR = if ((fk.assetId == bm))
1234+ then eK(toBigInt(dL), toBigInt(0), toBigInt(0))
1235+ else eK(toBigInt(0), toBigInt(dL), toBigInt(0))
1236+ if ((eR == eR))
1237+ then {
1238+ let hj = fp(dL, df, toString(dh), toBase58String(cP.transactionId), true)
1239+ if ((hj == hj))
1240+ then {
1241+ let cx = hj._3
1242+ let dB = hj._2
1243+ let hk = hj._1
1244+ let el = if (if ((fM > 0))
1245+ then (fM > hk)
1246+ else false)
1247+ then aN(makeString(["amount to receive is less than ", toString(fM)], ""))
1248+ else hk
1249+ let gW = invoke(aQ, "emit", [el], nil)
1250+ if ((gW == gW))
1251+ then {
1252+ let gY = {
1253+ let gl = gW
1254+ if ($isInstanceOf(gl, "Address"))
1255+ then {
1256+ let gZ = gl
1257+ invoke(gZ, "emit", [el], nil)
1258+ }
1259+ else unit
1260+ }
1261+ if ((gY == gY))
1262+ then {
1263+ let hc = if (gQ)
1264+ then {
1265+ let hd = invoke(bu, "stake", nil, [AttachedPayment(di, el)])
1266+ if ((hd == hd))
1267+ then nil
1268+ else throw("Strict value is not equal to itself.")
1269+ }
1270+ else [ScriptTransfer(cP.caller, el, di)]
1271+ let gc = if ((cx > 0))
1272+ then [ScriptTransfer(aX, cx, fromBase58String(df))]
1273+ else nil
1274+ let hl = if ((this == aX))
1275+ then $Tuple2(0, 0)
1276+ else {
1277+ let hm = if ((fk.assetId == bm))
1278+ then true
1279+ else false
1280+ if (hm)
1281+ then $Tuple2(-(cx), 0)
1282+ else $Tuple2(0, -(cx))
1283+ }
1284+ let eT = hl._1
1285+ let eU = hl._2
1286+ let hn = eS(eT, eU, 0)
1287+ let gi = hn._1
1288+ let eJ = hn._2
1289+ let gj = eW(eR, eJ)
1290+ if ((gj == gj))
1291+ then $Tuple2((((dB ++ hc) ++ gc) ++ gi), el)
1292+ else throw("Strict value is not equal to itself.")
1293+ }
1294+ else throw("Strict value is not equal to itself.")
1295+ }
1296+ else throw("Strict value is not equal to itself.")
1297+ }
1298+ else throw("Strict value is not equal to itself.")
1299+ }
1300+ else throw("Strict value is not equal to itself.")
1301+ }
1302+ else throw("Strict value is not equal to itself.")
1303+ }
1304+
1305+
1306+
1307+@Callable(cP)
1308+func putForFree (ho) = if ((0 > ho))
1309+ then throw("Wrong slpg")
1310+ else if ((size(cP.payments) != 2))
1311+ then throw("2 pmnts expd")
1312+ else {
1313+ let hp = fl(toString(cP.caller), toBase58String(cP.transactionId), AttachedPayment(value(cP.payments[0]).assetId, value(cP.payments[0]).amount), cP.payments[1], ho, false, false, true, 0, "")
1314+ let dB = hp._9
1315+ let gU = toBigInt(value(cP.payments[0]).amount)
1316+ let gV = toBigInt(value(cP.payments[1]).amount)
1317+ let eR = eK(gU, gV, toBigInt(0))
1318+ if ((eR == eR))
1319+ then {
1320+ let hq = eS(0, 0, 0)
1321+ let gi = hq._1
1322+ let eJ = hq._2
1323+ let gj = eW(eR, eJ)
1324+ if ((gj == gj))
1325+ then (dB ++ gi)
1326+ else throw("Strict value is not equal to itself.")
1327+ }
1328+ else throw("Strict value is not equal to itself.")
1329+ }
1330+
1331+
1332+
1333+@Callable(cP)
1334+func get () = {
1335+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1336+ if ((eR == eR))
1337+ then {
1338+ let dX = fj(cP)
1339+ let hr = dX._1
1340+ let dA = dX._2
1341+ let dL = dX._3
1342+ let df = dX._4
1343+ let dB = dX._5
1344+ let ey = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1345+ if ((ey == ey))
1346+ then {
1347+ let hs = eS(-(hr), -(dA), 0)
1348+ let gi = hs._1
1349+ let eJ = hs._2
1350+ let gj = eW(eR, eJ)
1351+ if ((gj == gj))
1352+ then (dB ++ gi)
1353+ else throw("Strict value is not equal to itself.")
1354+ }
1355+ else throw("Strict value is not equal to itself.")
1356+ }
1357+ else throw("Strict value is not equal to itself.")
1358+ }
1359+
1360+
1361+
1362+@Callable(cP)
1363+func getOneTknV2 (fL,fM) = {
1364+ let hh = {
1365+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1366+ if ($isInstanceOf(aS, "Boolean"))
1367+ then aS
1368+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
1369+ }
1370+ let ht = if (if (aV())
1371+ then true
1372+ else (bk == s))
1373+ then true
1374+ else hh
1375+ let gH = [if (if (!(ht))
1376+ then true
1377+ else go(cP))
1378+ then true
1379+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 1))
1380+ then true
1381+ else aN("exactly 1 payment are expected")]
1382+ if ((gH == gH))
1383+ then {
1384+ let hu = fK(fL, fM, cP.payments, cP.caller, cP.originCaller, cP.transactionId)
1385+ let dB = hu._1
1386+ let fV = hu._2
1387+ $Tuple2(dB, fV)
1388+ }
1389+ else throw("Strict value is not equal to itself.")
1390+ }
1391+
1392+
1393+
1394+@Callable(cP)
1395+func refreshDLp () = {
1396+ let hv = valueOrElse(getInteger(aq), 0)
1397+ let hw = if (((height - hv) >= at))
1398+ then unit
1399+ else aN(makeString([toString(at), " blocks have not passed since the previous call"], ""))
1400+ if ((hw == hw))
1401+ then {
1402+ let fd = valueOrErrorMessage(parseBigInt(valueOrElse(getString(this, ap), "0")), aP("invalid dLp"))
1403+ let hx = eS(0, 0, 0)
1404+ let hy = hx._1
1405+ let eJ = hx._2
1406+ let eV = if ((fd != eJ))
1407+ then hy
1408+ else aN("nothing to refresh")
1409+ $Tuple2(eV, toString(eJ))
1410+ }
1411+ else throw("Strict value is not equal to itself.")
1412+ }
1413+
1414+
1415+
1416+@Callable(cP)
1417+func getOneTknV2READONLY (fL,hz) = {
1418+ let dj = toBase58String(value(bm))
1419+ let dk = toBase58String(value(bn))
1420+ let di = toBase58String(value(bl))
1421+ let cz = [toBigInt(bN(dj)), toBigInt(bN(dk))]
1422+ let eI = toBigInt(valueOrErrorMessage(assetInfo(fromBase58String(di)), "invalid lp asset").quantity)
1423+ let cb = cy(cz)
1424+ let ca = (cb - fraction(toBigInt(hz), cb, eI))
1425+ let hA = if ((fL == dj))
1426+ then 0
1427+ else if ((fL == dk))
1428+ then 1
1429+ else throw("invalid out asset id")
1430+ let hB = es(cz, hA, ca)
1431+ let gA = (cz[hA] - hB)
1432+ let gB = max([0, toInt((gA - f))])
1433+ let hC = cv(gB, aT)
1434+ let fU = hC._1
1435+ let cx = hC._2
1436+ $Tuple2(nil, $Tuple2(fU, cx))
1437+ }
1438+
1439+
1440+
1441+@Callable(cP)
1442+func getOneTknV2WithBonusREADONLY (fL,hz) = {
1443+ let dj = toBase58String(value(bm))
1444+ let dk = toBase58String(value(bn))
1445+ let di = toBase58String(value(bl))
1446+ let dp = bN(dj)
1447+ let dr = bN(dk)
1448+ let hD = {
1449+ let aS = invoke(this, "getOneTknV2READONLY", [fL, hz], nil)
1450+ if ($isInstanceOf(aS, "(Int, Int)"))
1451+ then aS
1452+ else throw(($getType(aS) + " couldn't be cast to (Int, Int)"))
1453+ }
1454+ let fU = hD._1
1455+ let cx = hD._2
1456+ let dX = dd("", di, hz, this)
1457+ let dz = dX._1
1458+ let dA = dX._2
1459+ let hE = (dz + dA)
1460+ let fJ = if ((hE == 0))
1461+ then if ((fU == 0))
1462+ then 0
1463+ else throw("bonus calculation error")
1464+ else fraction((fU - hE), a, hE)
1465+ $Tuple2(nil, $Tuple3(fU, cx, fJ))
1466+ }
1467+
1468+
1469+
1470+@Callable(cP)
1471+func getNoLess (hF,hG) = {
1472+ let dX = fj(cP)
1473+ let dz = dX._1
1474+ let dA = dX._2
1475+ let dL = dX._3
1476+ let df = dX._4
1477+ let dB = dX._5
1478+ if ((hF > dz))
1479+ then throw(((("Failed: " + toString(dz)) + " < ") + toString(hF)))
1480+ else if ((hG > dA))
1481+ then throw(((("Failed: " + toString(dA)) + " < ") + toString(hG)))
1482+ else {
1483+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1484+ if ((eR == eR))
1485+ then {
1486+ let hH = invoke(aQ, "burn", [dL], [AttachedPayment(df, dL)])
1487+ if ((hH == hH))
1488+ then {
1489+ let hI = eS(-(dz), -(dA), 0)
1490+ let gi = hI._1
1491+ let eJ = hI._2
1492+ let gj = eW(eR, eJ)
1493+ if ((gj == gj))
1494+ then (dB ++ gi)
1495+ else throw("Strict value is not equal to itself.")
1496+ }
1497+ else throw("Strict value is not equal to itself.")
1498+ }
1499+ else throw("Strict value is not equal to itself.")
1500+ }
1501+ }
1502+
1503+
1504+
1505+@Callable(cP)
1506+func unstakeAndGet (cw) = {
1507+ let hJ = if ((size(cP.payments) != 0))
1508+ then throw("No pmnts expd")
1509+ else true
1510+ if ((hJ == hJ))
1511+ then {
1512+ let hK = bs()
1513+ let gX = bl
1514+ let hL = valueOrErrorMessage(addressFromString(hK[C]), "Wr st addr")
1515+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1516+ if ((eR == eR))
1517+ then {
1518+ let hM = invoke(hL, "unstake", [toBase58String(gX), cw], nil)
1519+ if ((hM == hM))
1520+ then {
1521+ let dX = dd(toBase58String(cP.transactionId), toBase58String(gX), cw, cP.caller)
1522+ let dz = dX._1
1523+ let dA = dX._2
1524+ let dn = parseIntValue(dX._9)
1525+ let dB = dX._10
1526+ let hN = if (if (aV())
1527+ then true
1528+ else (dn == s))
1529+ then throw(("Blocked: " + toString(dn)))
1530+ else true
1531+ if ((hN == hN))
1532+ then {
1533+ let hO = invoke(aQ, "burn", [cw], [AttachedPayment(gX, cw)])
1534+ if ((hO == hO))
1535+ then {
1536+ let hP = eS(-(dz), -(dA), 0)
1537+ let gi = hP._1
1538+ let eJ = hP._2
1539+ let gj = eW(eR, eJ)
1540+ if ((gj == gj))
1541+ then (dB ++ gi)
1542+ else throw("Strict value is not equal to itself.")
1543+ }
1544+ else throw("Strict value is not equal to itself.")
1545+ }
1546+ else throw("Strict value is not equal to itself.")
1547+ }
1548+ else throw("Strict value is not equal to itself.")
1549+ }
1550+ else throw("Strict value is not equal to itself.")
1551+ }
1552+ else throw("Strict value is not equal to itself.")
1553+ }
1554+
1555+
1556+
1557+@Callable(cP)
1558+func unstakeAndGetNoLess (hQ,hR,hG) = {
1559+ let ht = if (aV())
1560+ then true
1561+ else (bk == s)
1562+ let gH = [if (!(ht))
1563+ then true
1564+ else throw("get operation is blocked by admin"), if ((size(cP.payments) == 0))
1565+ then true
1566+ else throw("no payments are expected")]
1567+ if ((gH == gH))
1568+ then {
1569+ let eR = eK(toBigInt(0), toBigInt(0), toBigInt(0))
1570+ if ((eR == eR))
1571+ then {
1572+ let hM = invoke(bu, "unstake", [toBase58String(bl), hQ], nil)
1573+ if ((hM == hM))
1574+ then {
1575+ let hS = dd(toBase58String(cP.transactionId), toBase58String(bl), hQ, cP.caller)
1576+ let dz = hS._1
1577+ let dA = hS._2
1578+ let dB = hS._10
1579+ let hT = [if ((dz >= hR))
1580+ then true
1581+ else throw(makeString(["amount asset amount to receive is less than ", toString(hR)], "")), if ((dA >= hG))
1582+ then true
1583+ else throw(makeString(["price asset amount to receive is less than ", toString(hG)], ""))]
1584+ if ((hT == hT))
1585+ then {
1586+ let hH = invoke(aQ, "burn", [hQ], [AttachedPayment(bl, hQ)])
1587+ if ((hH == hH))
1588+ then {
1589+ let hU = eS(-(dz), -(dA), 0)
1590+ let gi = hU._1
1591+ let eJ = hU._2
1592+ let gj = eW(eR, eJ)
1593+ if ((gj == gj))
1594+ then (dB ++ gi)
1595+ else throw("Strict value is not equal to itself.")
1596+ }
1597+ else throw("Strict value is not equal to itself.")
1598+ }
1599+ else throw("Strict value is not equal to itself.")
1600+ }
1601+ else throw("Strict value is not equal to itself.")
1602+ }
1603+ else throw("Strict value is not equal to itself.")
1604+ }
1605+ else throw("Strict value is not equal to itself.")
1606+ }
1607+
1608+
1609+
1610+@Callable(cP)
1611+func unstakeAndGetOneTknV2 (hQ,fL,fM) = {
1612+ let hh = {
1613+ let aS = invoke(aQ, "isPoolOneTokenOperationsDisabledREADONLY", [toString(this)], nil)
1614+ if ($isInstanceOf(aS, "Boolean"))
1615+ then aS
1616+ else throw(($getType(aS) + " couldn't be cast to Boolean"))
1617+ }
1618+ let ht = if (if (aV())
1619+ then true
1620+ else (bk == s))
1621+ then true
1622+ else hh
1623+ let gH = [if (if (!(ht))
1624+ then true
1625+ else go(cP))
1626+ then true
1627+ else aN("get operation is blocked by admin"), if ((size(cP.payments) == 0))
1628+ then true
1629+ else aN("no payments are expected")]
1630+ if ((gH == gH))
1631+ then {
1632+ let hK = bs()
1633+ let gX = bl
1634+ let hL = valueOrErrorMessage(addressFromString(hK[C]), "Wr st addr")
1635+ let dh = cP.caller
1636+ let hV = this
1637+ let hM = invoke(hL, "unstakeINTERNAL", [gX, hQ, dh.bytes, hV.bytes], nil)
1638+ if ((hM == hM))
1639+ then {
1640+ let hW = fK(fL, fM, [AttachedPayment(gX, hQ)], cP.caller, cP.originCaller, cP.transactionId)
1641+ let dB = hW._1
1642+ let fV = hW._2
1643+ $Tuple2(dB, fV)
1644+ }
1645+ else throw("Strict value is not equal to itself.")
1646+ }
1647+ else throw("Strict value is not equal to itself.")
1648+ }
1649+
1650+
1651+
1652+@Callable(cP)
1653+func putOneTknV2WithBonusREADONLY (hX,hY) = {
1654+ let hZ = fp(hX, hY, "", "", true)
1655+ let fE = hZ._1
1656+ let dB = hZ._2
1657+ let cx = hZ._3
1658+ let fJ = hZ._4
1659+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
1660+ }
1661+
1662+
1663+
1664+@Callable(cP)
1665+func putOneTknV2WithoutTakeFeeREADONLY (hX,hY) = {
1666+ let ia = fp(hX, hY, "", "", false)
1667+ let fE = ia._1
1668+ let dB = ia._2
1669+ let cx = ia._3
1670+ let fJ = ia._4
1671+ $Tuple2(nil, $Tuple3(fE, cx, fJ))
1672+ }
1673+
1674+
1675+
1676+@Callable(cP)
1677+func activate (ib,ic) = if ((toString(cP.caller) != toString(aQ)))
1678+ then throw("denied")
1679+ else $Tuple2([StringEntry(aj(), ib), StringEntry(ak(), ic)], "success")
1680+
1681+
1682+
1683+@Callable(cP)
1684+func setS (id,hN) = if ((toString(cP.caller) != aJ(this, am())))
1685+ then gn
1686+ else [StringEntry(id, hN)]
1687+
1688+
1689+
1690+@Callable(cP)
1691+func setI (id,hN) = if ((toString(cP.caller) != aJ(this, am())))
1692+ then gn
1693+ else [IntegerEntry(id, hN)]
1694+
1695+
1696+
1697+@Callable(cP)
1698+func getPoolConfigWrapperREADONLY () = $Tuple2(nil, aY())
1699+
1700+
1701+
1702+@Callable(cP)
1703+func getAccBalanceWrapperREADONLY (bO) = $Tuple2(nil, bN(bO))
1704+
1705+
1706+
1707+@Callable(cP)
1708+func calcPricesWrapperREADONLY (ch,ci,cm) = {
1709+ let ie = cl(ch, ci, cm)
1710+ $Tuple2(nil, [toString(ie[0]), toString(ie[1]), toString(ie[2])])
1711+ }
1712+
1713+
1714+
1715+@Callable(cP)
1716+func fromX18WrapperREADONLY (M,if) = $Tuple2(nil, L(parseBigIntValue(M), if))
1717+
1718+
1719+
1720+@Callable(cP)
1721+func toX18WrapperREADONLY (I,J) = $Tuple2(nil, toString(H(I, J)))
1722+
1723+
1724+
1725+@Callable(cP)
1726+func calcPriceBigIntWrapperREADONLY (bQ,bR) = $Tuple2(nil, toString(bP(parseBigIntValue(bQ), parseBigIntValue(bR))))
1727+
1728+
1729+
1730+@Callable(cP)
1731+func estimatePutOperationWrapperREADONLY (de,bW,dD,dE,dF,dG,ig,dH,dI) = $Tuple2(nil, dC(de, bW, dD, dE, dF, dG, ig, dH, dI, true, false, 0, ""))
1732+
1733+
1734+
1735+@Callable(cP)
1736+func estimateGetOperationWrapperREADONLY (de,ih,dg,ig) = {
1737+ let dX = dd(de, ih, dg, addressFromStringValue(ig))
1738+ $Tuple2(nil, $Tuple10(dX._1, dX._2, dX._3, dX._4, dX._5, dX._6, dX._7, toString(dX._8), dX._9, dX._10))
1739+ }
1740+
1741+
1742+@Verifier(ii)
1743+func ij () = {
1744+ let ik = {
1745+ let gl = gk()
1746+ if ($isInstanceOf(gl, "ByteVector"))
1747+ then {
1748+ let gp = gl
1749+ gp
1750+ }
1751+ else if ($isInstanceOf(gl, "Unit"))
1752+ then ii.senderPublicKey
1753+ else throw("Match error")
1754+ }
1755+ let gl = ii
1756+ if ($isInstanceOf(gl, "Order"))
1757+ then {
1758+ let eZ = gl
1759+ let il = aW()
1760+ let im = eY(eZ)
1761+ let aF = im._1
1762+ let aG = im._2
1763+ let aH = sigVerify(eZ.bodyBytes, eZ.proofs[0], eZ.senderPublicKey)
1764+ let aI = sigVerify(eZ.bodyBytes, eZ.proofs[1], il)
1765+ if (if (if (aF)
1766+ then aH
1767+ else false)
1768+ then aI
1769+ else false)
1770+ then true
1771+ else aE(aF, aG, aH, aI)
1772+ }
1773+ else if ($isInstanceOf(gl, "SetScriptTransaction"))
1774+ then {
1775+ let cC = gl
1776+ if (sigVerify(ii.bodyBytes, ii.proofs[0], ik))
1777+ then true
1778+ else {
1779+ let in = blake2b256(value(cC.script))
1780+ let io = fromBase64String(value(getString(aQ, aC())))
1781+ let ip = scriptHash(this)
1782+ if ((io == in))
1783+ then (ip != in)
1784+ else false
1785+ }
1786+ }
1787+ else sigVerify(ii.bodyBytes, ii.proofs[0], ik)
1788+ }
1789+

github/deemru/w8io/873ac7e 
82.65 ms