tx · ERHgEcrNpBrf17boA6ErXWWoHzfzorvUfkyo7R8gp7xn

3MqvpsUpcaFXP5TcBUGxshpD4nRDSMEkYn6:  -0.07500000 Waves

2023.07.12 18:47 [2662877] smart account 3MqvpsUpcaFXP5TcBUGxshpD4nRDSMEkYn6 > SELF 0.00000000 Waves

{ "type": 13, "id": "ERHgEcrNpBrf17boA6ErXWWoHzfzorvUfkyo7R8gp7xn", "fee": 7500000, "feeAssetId": null, "timestamp": 1689176885560, "version": 2, "chainId": 84, "sender": "3MqvpsUpcaFXP5TcBUGxshpD4nRDSMEkYn6", "senderPublicKey": "9bdt1eKejUnTYnGPv3nSedCkRobiQ3EAzWkr4diiX1uN", "proofs": [ "2o3b6yq18acXdjA7DJ29MZV4GgrnBEbZdgckSpBTf7hGe1q68VNC1jyopWbJbydmUQak9VgWShRY8KFqcZPwC21D" ], "script": "base64:BgKUAQgCEgASABIAEgASAwoBARIVChMBAQEBAQEBAQEBAQEBAQEICAEBEhgKFgEBAQEBAQEICAgBAQEBAQEBAQEBAQESBwoFAQEBCAgSBAoCAQgSBQoDAQEIEgcKBQEBAQQIEgUKAwgBCBIDCgEIEgMKAQgSABIAEgMKAQgSBQoDCAEIEgMKAQESABIDCgEIEgASBAoCCAi/AQAMa19iYXNlT3JhY2xlAgxrX2Jhc2VPcmFjbGUADWtfcXVvdGVPcmFjbGUCDWtfcXVvdGVPcmFjbGUACWtfYmFsYW5jZQIJa19iYWxhbmNlAAprX3NlcXVlbmNlAgprX3NlcXVlbmNlAA5rX3Bvc2l0aW9uU2l6ZQIOa19wb3NpdGlvblNpemUAEGtfcG9zaXRpb25NYXJnaW4CEGtfcG9zaXRpb25NYXJnaW4AFmtfcG9zaXRpb25PcGVuTm90aW9uYWwCFmtfcG9zaXRpb25PcGVuTm90aW9uYWwALmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CEmtfcG9zaXRpb25GcmFjdGlvbgASa19wb3NpdGlvblNlcXVlbmNlAhJrX3Bvc2l0aW9uU2VxdWVuY2UADWtfcG9zaXRpb25GZWUCDWtfcG9zaXRpb25GZWUAHmtfcG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAITa19wb3NpdGlvblRpbWVzdGFtcAANa19pbml0aWFsaXplZAINa19pbml0aWFsaXplZAAIa19wYXVzZWQCCGtfcGF1c2VkAAtrX2Nsb3NlT25seQILa19jbG9zZU9ubHkABWtfZmVlAgVrX2ZlZQANa19yb2xsb3ZlckZlZQIOa19yb2xsb3Zlcl9mZWUAD2tfZnVuZGluZ1BlcmlvZAIPa19mdW5kaW5nUGVyaW9kABFrX2luaXRNYXJnaW5SYXRpbwIRa19pbml0TWFyZ2luUmF0aW8AFGtfbWluSW5pdE1hcmdpblJhdGlvAhRrX21pbkluaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8AGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8CFmtfcGFydExpcXVpZGF0aW9uUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QAEGtfbWF4UHJpY2VTcHJlYWQCEGtfbWF4UHJpY2VTcHJlYWQAEWtfbWF4T3Blbk5vdGlvbmFsAhFrX21heE9wZW5Ob3Rpb25hbAAVa19mZWVUb1N0YWtlcnNQZXJjZW50AhVrX2ZlZVRvU3Rha2Vyc1BlcmNlbnQAEGtfbWF4T3JhY2xlRGVsYXkCEGtfbWF4T3JhY2xlRGVsYXkADWtfZnVuZGluZ01vZGUCDWtfZnVuZGluZ01vZGUADGtfb3JhY2xlTW9kZQIMa19vcmFjbGVNb2RlAA5rX3Bvc2l0aW9uTW9kZQIOa19wb3NpdGlvbk1vZGUAGGtfbWluTGlxdWlkYXRpb25Ob3Rpb25hbAIYa19taW5MaXF1aWRhdGlvbk5vdGlvbmFsACVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhtrX2xhdGVzdExvbmdQcmVtaXVtRnJhY3Rpb24AJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAhxrX2xhdGVzdFNob3J0UHJlbWl1bUZyYWN0aW9uABJrX25leHRGdW5kaW5nQmxvY2sCHmtfbmV4dEZ1bmRpbmdCbG9ja01pblRpbWVzdGFtcAARa19sb25nRnVuZGluZ1JhdGUCEWtfbG9uZ0Z1bmRpbmdSYXRlABJrX3Nob3J0RnVuZGluZ1JhdGUCEmtfc2hvcnRGdW5kaW5nUmF0ZQATa19xdW90ZUFzc2V0UmVzZXJ2ZQIIa19xdEFzdFIAEmtfYmFzZUFzc2V0UmVzZXJ2ZQIIa19ic0FzdFIAEmtfcXVvdGVBc3NldFdlaWdodAIIa19xdEFzdFcAEWtfYmFzZUFzc2V0V2VpZ2h0AghrX2JzQXN0VwATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAIWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAATa19vcGVuSW50ZXJlc3RTaG9ydAITa19vcGVuSW50ZXJlc3RTaG9ydAASa19vcGVuSW50ZXJlc3RMb25nAhJrX29wZW5JbnRlcmVzdExvbmcACGtfbGFzdFR4AghrX2xhc3RUeAAUa19jb29yZGluYXRvckFkZHJlc3MCFGtfY29vcmRpbmF0b3JBZGRyZXNzAA9rX3ZhdWx0X2FkZHJlc3MCD2tfdmF1bHRfYWRkcmVzcwAPa19hZG1pbl9hZGRyZXNzAg9rX2FkbWluX2FkZHJlc3MADWtfcXVvdGVfYXNzZXQCDWtfcXVvdGVfYXNzZXQAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MAEGtfb3JkZXJzX2FkZHJlc3MCEGtfb3JkZXJzX2FkZHJlc3MAEmtfcmVmZXJyYWxfYWRkcmVzcwISa19yZWZlcnJhbF9hZGRyZXNzABVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCFWtfbmZ0X21hbmFnZXJfYWRkcmVzcwEOdG9Db21wb3NpdGVLZXkCBF9rZXkIX2FkZHJlc3MJAKwCAgkArAICBQRfa2V5AgFfBQhfYWRkcmVzcwELY29vcmRpbmF0b3IACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgUEdGhpcwUUa19jb29yZGluYXRvckFkZHJlc3MCE0Nvb3JkaW5hdG9yIG5vdCBzZXQBDGFkbWluQWRkcmVzcwAJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19hZG1pbl9hZGRyZXNzAQpxdW90ZUFzc2V0AAkA2QQBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABQ1rX3F1b3RlX2Fzc2V0AQ5zdGFraW5nQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRFrX3N0YWtpbmdfYWRkcmVzcwIPU3Rha2luZyBub3Qgc2V0AQx2YXVsdEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa192YXVsdF9hZGRyZXNzAg1WYXVsdCBub3Qgc2V0AQxtaW5lckFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19taW5lcl9hZGRyZXNzAg1NaW5lciBub3Qgc2V0AQ1vcmRlcnNBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEGtfb3JkZXJzX2FkZHJlc3MCDk9yZGVycyBub3Qgc2V0AQ9yZWZlcnJhbEFkZHJlc3MACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUSa19yZWZlcnJhbF9hZGRyZXNzAhBSZWZlcnJhbCBub3Qgc2V0ARFuZnRNYW5hZ2VyQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRVrX25mdF9tYW5hZ2VyX2FkZHJlc3MCE05GVCBNYW5hZ2VyIG5vdCBzZXQADWtfdG9rZW5fcGFyYW0CDWtfdG9rZW5fcGFyYW0ADGtfdG9rZW5fdHlwZQIMa190b2tlbl90eXBlABhGRUVfUkVEVUNUSU9OX1RPS0VOX1RZUEUCDWZlZV9yZWR1Y3Rpb24ACERJUl9MT05HAAEACURJUl9TSE9SVAACAAdTRUNPTkRTAOgHAA9ERUNJTUFMX05VTUJFUlMABgAMREVDSU1BTF9VTklUCQBoAgABCQBoAgkAaAIJAGgCCQBoAgkAaAIACgAKAAoACgAKAAoAD01JTlVURVNfSU5fWUVBUgkAaAIAoIogBQxERUNJTUFMX1VOSVQAB09ORV9EQVkJAGgCAICjBQUMREVDSU1BTF9VTklUAA9QTkxfT1BUSU9OX1NQT1QAAQARUE5MX09QVElPTl9PUkFDTEUAAgASRlVORElOR19BU1lNTUVUUklDAAEAEUZVTkRJTkdfU1lNTUVUUklDAAIADE9SQUNMRV9QTEFJTgABAApPUkFDTEVfSklUAAIAD1BPU0lUSU9OX0RJUkVDVAABAA5QT1NJVElPTl9PUkRFUgACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BBWJkaXZkAgJfeAJfeQkAvQIEBQJfeAkAtgIBBQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEFYm11bGQCAl94Al95CQC9AgQFAl94BQJfeQkAtgIBBQxERUNJTUFMX1VOSVQFCEhBTEZFVkVOAQNhYnMBAl94AwkAZgIFAl94AAAFAl94CQEBLQEFAl94AQR2bWF4AgJfeAJfeQMJAGcCBQJfeAUCX3kFAl94BQJfeQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQVpbnRPcgIBawNkZWYJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwUBawUDZGVmAQRzdHJBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAnQgCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQRpbnRBAghfYWRkcmVzcwRfa2V5BAN2YWwJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkAmggCBQhfYWRkcmVzcwUEX2tleQkArAICAhFObyB2YWx1ZSBmb3Iga2V5IAUEX2tleQUDdmFsAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBCWNiYWxhbmNlMAAJAQVpbnRPcgIFCWtfYmFsYW5jZQAAAQNmZWUACQEDaW50AQUFa19mZWUBD3JvbGxvdmVyRmVlUmF0ZQAJAQNpbnQBBQ1rX3JvbGxvdmVyRmVlAQ9pbml0TWFyZ2luUmF0aW8ACQEDaW50AQURa19pbml0TWFyZ2luUmF0aW8BEm1pbkluaXRNYXJnaW5SYXRpbwAJAQVpbnRPcgIFFGtfbWluSW5pdE1hcmdpblJhdGlvBQxERUNJTUFMX1VOSVQBBnF0QXN0UgAJAQNpbnQBBRNrX3F1b3RlQXNzZXRSZXNlcnZlAQdxdEFzdFIwAAkBBWludE9yAgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQAAAQZic0FzdFIACQEDaW50AQUSa19iYXNlQXNzZXRSZXNlcnZlAQdic0FzdFIwAAkBBWludE9yAgUSa19iYXNlQXNzZXRSZXNlcnZlAAABBnF0QXN0VwAJAQVpbnRPcgIFEmtfcXVvdGVBc3NldFdlaWdodAUMREVDSU1BTF9VTklUAQZic0FzdFcACQEFaW50T3ICBRFrX2Jhc2VBc3NldFdlaWdodAUMREVDSU1BTF9VTklUARF0b3RhbFBvc2l0aW9uU2l6ZQAJAQNpbnQBBRNrX3RvdGFsUG9zaXRpb25TaXplARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARFvcGVuSW50ZXJlc3RTaG9ydAAJAQNpbnQBBRNrX29wZW5JbnRlcmVzdFNob3J0ARBvcGVuSW50ZXJlc3RMb25nAAkBA2ludAEFEmtfb3BlbkludGVyZXN0TG9uZwEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAAJAQNpbnQBBRJrX25leHRGdW5kaW5nQmxvY2sBEGZ1bmRpbmdQZXJpb2RSYXcACQEDaW50AQUPa19mdW5kaW5nUGVyaW9kARRmdW5kaW5nUGVyaW9kRGVjaW1hbAAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFDERFQ0lNQUxfVU5JVAEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBoAgkBEGZ1bmRpbmdQZXJpb2RSYXcABQdTRUNPTkRTARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAkBA2ludAEFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwETbGlxdWlkYXRpb25GZWVSYXRpbwAJAQNpbnQBBRVrX2xpcXVpZGF0aW9uRmVlUmF0aW8BF3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvAAkBA2ludAEFGWtfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8BC3NwcmVhZExpbWl0AAkBA2ludAEFDWtfc3ByZWFkTGltaXQBDm1heFByaWNlSW1wYWN0AAkBA2ludAEFEGtfbWF4UHJpY2VJbXBhY3QBDm1heFByaWNlU3ByZWFkAAkBA2ludAEFEGtfbWF4UHJpY2VTcHJlYWQBD21heE9wZW5Ob3Rpb25hbAAJAQNpbnQBBRFrX21heE9wZW5Ob3Rpb25hbAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplAQxsYXN0U2VxdWVuY2UACQEFaW50T3ICBQprX3NlcXVlbmNlAAABE2ZlZVRvU3Rha2Vyc1BlcmNlbnQACQEDaW50AQUVa19mZWVUb1N0YWtlcnNQZXJjZW50AQ5tYXhPcmFjbGVEZWxheQAJAQNpbnQBBRBrX21heE9yYWNsZURlbGF5AQtmdW5kaW5nTW9kZQAJAQVpbnRPcgIFDWtfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwEKb3JhY2xlTW9kZQAJAQVpbnRPcgIFDGtfb3JhY2xlTW9kZQUMT1JBQ0xFX1BMQUlOAQxwb3NpdGlvbk1vZGUACQEFaW50T3ICBQ5rX3Bvc2l0aW9uTW9kZQUPUE9TSVRJT05fRElSRUNUAR1taW5QYXJ0aWFsTGlxdWlkYXRpb25Ob3Rpb25hbAAJAQVpbnRPcgIFGGtfbWluTGlxdWlkYXRpb25Ob3Rpb25hbAkAaAIACgUMREVDSU1BTF9VTklUAQ1sYXN0VGltZXN0YW1wAAgFCWxhc3RCbG9jawl0aW1lc3RhbXABD2dldEFjdHVhbENhbGxlcgEBaQkBC3ZhbHVlT3JFbHNlAgkAnQgCCQENb3JkZXJzQWRkcmVzcwACCGtfc2VuZGVyCQClCAEIBQFpBmNhbGxlcgEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMMX21hcmdpblJhdGlvEF9iYXNlTWFyZ2luUmF0aW8UX2xhcmdlclRoYW5PckVxdWFsVG8EFHJlbWFpbmluZ01hcmdpblJhdGlvCQBlAgUMX21hcmdpblJhdGlvBRBfYmFzZU1hcmdpblJhdGlvAwMFFF9sYXJnZXJUaGFuT3JFcXVhbFRvCQBmAgAABRRyZW1haW5pbmdNYXJnaW5SYXRpbwcJAAIBCQCsAgIJAKwCAgkArAICAhBJbnZhbGlkIG1hcmdpbjogCQCkAwEFDF9tYXJnaW5SYXRpbwIDIDwgCQCkAwEFEF9iYXNlTWFyZ2luUmF0aW8DAwkBASEBBRRfbGFyZ2VyVGhhbk9yRXF1YWxUbwkAZwIFFHJlbWFpbmluZ01hcmdpblJhdGlvAAAHCQACAQkArAICCQCsAgIJAKwCAgIQSW52YWxpZCBtYXJnaW46IAkApAMBBQxfbWFyZ2luUmF0aW8CAyA+IAkApAMBBRBfYmFzZU1hcmdpblJhdGlvBgEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAixTaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIF9wb3NpdGlvblNpemUgPT0gMAMJAGYCBQ1fcG9zaXRpb25TaXplAAAJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAQtnZXRQb3NpdGlvbgIHX3RyYWRlcgpfZGlyZWN0aW9uBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUKX2RpcmVjdGlvbgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQQHJG1hdGNoMAUPcG9zaXRpb25TaXplT3B0AwkAAQIFByRtYXRjaDACA0ludAQMcG9zaXRpb25TaXplBQckbWF0Y2gwCQCXCgUFDHBvc2l0aW9uU2l6ZQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgULcG9zaXRpb25LZXkJARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFFmtfcG9zaXRpb25PcGVuTm90aW9uYWwFC3Bvc2l0aW9uS2V5CQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQkAlwoFAAAAAAAAAAAAAAEMZ2V0RGlyZWN0aW9uAQ1fcG9zaXRpb25TaXplAwkAZgIAAAUNX3Bvc2l0aW9uU2l6ZQUJRElSX1NIT1JUBQhESVJfTE9ORwEOZ2V0UG9zaXRpb25GZWUCB190cmFkZXIKX2RpcmVjdGlvbgQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24EDnBvc2l0aW9uRmVlT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFC3Bvc2l0aW9uS2V5BAckbWF0Y2gwBQ5wb3NpdGlvbkZlZU9wdAMJAAECBQckbWF0Y2gwAgNJbnQEC3Bvc2l0aW9uRmVlBQckbWF0Y2gwBQtwb3NpdGlvbkZlZQkBA2ZlZQABE3JlcXVpcmVPcGVuUG9zaXRpb24CB190cmFkZXIKX2RpcmVjdGlvbgMJAAACCAkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBDWdldE9yYWNsZURhdGEBA2tleQQNb3JhY2xlRGF0YVN0cgkAnQgCBQR0aGlzBQNrZXkDAwkBCWlzRGVmaW5lZAEFDW9yYWNsZURhdGFTdHIJAQIhPQIJAQV2YWx1ZQEFDW9yYWNsZURhdGFTdHICAAcECm9yYWNsZURhdGEJALUJAgkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgIBLAQNb3JhY2xlQWRkcmVzcwkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJAJEDAgUKb3JhY2xlRGF0YQAACQCsAgICG0ludmFsaWQgb3JhY2xlIGFkZHJlc3MgaW46IAkBBXZhbHVlAQUNb3JhY2xlRGF0YVN0cgQIcHJpY2VLZXkJAJEDAgUKb3JhY2xlRGF0YQABBAhibG9ja0tleQkAkQMCBQpvcmFjbGVEYXRhAAIEB29wZW5LZXkJAJEDAgUKb3JhY2xlRGF0YQADCQCWCgQFDW9yYWNsZUFkZHJlc3MFCHByaWNlS2V5BQhibG9ja0tleQUHb3BlbktleQUEdW5pdAELaW5pdGlhbGl6ZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFDWtfaW5pdGlhbGl6ZWQHAQZwYXVzZWQACQELdmFsdWVPckVsc2UCCQCbCAIFBHRoaXMFCGtfcGF1c2VkBwEJY2xvc2VPbmx5AAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQtrX2Nsb3NlT25seQcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCVCgMFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50AQ1jYWxjSW52YXJpYW50AgdfcXRBc3RSB19ic0FzdFIEB2JxdEFzdFIJALYCAQUHX3F0QXN0UgQHYmJzQXN0UgkAtgIBBQdfYnNBc3RSCQEFYm11bGQCBQdicXRBc3RSBQdiYnNBc3RSAQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEGHF1b3RlQXNzZXRBbW91bnRBZGp1c3RlZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUHX3F0QXN0VwQBawkBDWNhbGNJbnZhcmlhbnQCBQdfcXRBc3RSBQdfYnNBc3RSBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyAwUGX2lzQWRkCQBkAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkCQBlAgUHX3F0QXN0UgUYcXVvdGVBc3NldEFtb3VudEFkanVzdGVkBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAKADAQkBBWJkaXZkAgUBawkAtgIBBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBBhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQNhYnMBCQBlAgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBQdfYnNBc3RSBBVhbW91bnRCYXNlQXNzZXRCb3VnaHQDBQZfaXNBZGQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwkBAS0BBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMEDSR0MDE2NTg1MTY3NTUJAQ11cGRhdGVSZXNlcnZlAwUGX2lzQWRkBRhxdW90ZUFzc2V0QW1vdW50QWRqdXN0ZWQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxNjU4NTE2NzU1Al8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTY1ODUxNjc1NQJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxNjU4NTE2NzU1Al8zBAtwcmljZUJlZm9yZQkBBGRpdmQCCQEEbXVsZAIFB19xdEFzdFIFB19xdEFzdFcJAQRtdWxkAgUHX2JzQXN0UgUHX2JzQXN0VwQLbWFya2V0UHJpY2UJAQRkaXZkAgURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQJcHJpY2VEaWZmCQEDYWJzAQkAZQIFC3ByaWNlQmVmb3JlBQttYXJrZXRQcmljZQQLcHJpY2VJbXBhY3QJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgULcHJpY2VCZWZvcmUJAGQCBQtwcmljZUJlZm9yZQUJcHJpY2VEaWZmBBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QAAwkAZgIFC3ByaWNlSW1wYWN0BRNtYXhQcmljZUltcGFjdFZhbHVlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICAg1QcmljZSBpbXBhY3QgCQCkAwEFC3ByaWNlSW1wYWN0AhQgPiBtYXggcHJpY2UgaW1wYWN0IAkApAMBBRNtYXhQcmljZUltcGFjdFZhbHVlAhUgYmVmb3JlIHF1b3RlIGFzc2V0OiAJAKQDAQUHX3F0QXN0UgIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQUHX2JzQXN0UgIhIHF1b3RlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEV9xdW90ZUFzc2V0QW1vdW50Ag8gcHJpY2UgYmVmb3JlOiAJAKQDAQULcHJpY2VCZWZvcmUCDiBtYXJrZXRQcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCWCgQFFWFtb3VudEJhc2VBc3NldEJvdWdodAUXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEFFmJhc2VBc3NldFJlc2VydmVBZnRlcjEFF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxAQ9jYWxjUm9sbG92ZXJGZWUCEl9vbGRQb3NpdGlvbk1hcmdpbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAQPcG9zaXRpb25NaW51dGVzCQBoAgkAaQIJAGkCCQBlAgkBDWxhc3RUaW1lc3RhbXAABSBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcADoBwA8BQxERUNJTUFMX1VOSVQEC3JvbGxvdmVyRmVlCQEEZGl2ZAIJAQRtdWxkAgkBBG11bGQCBRJfb2xkUG9zaXRpb25NYXJnaW4FD3Bvc2l0aW9uTWludXRlcwkBD3JvbGxvdmVyRmVlUmF0ZQAFD01JTlVURVNfSU5fWUVBUgULcm9sbG92ZXJGZWUBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiBfb2xkUG9zaXRpb25MYXN0VXBkYXRlZFRpbWVzdGFtcAxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAtyb2xsb3ZlckZlZQkBD2NhbGNSb2xsb3ZlckZlZQIFEl9vbGRQb3NpdGlvbk1hcmdpbgUgX29sZFBvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAEDHNpZ25lZE1hcmdpbgkAZAIJAGUCCQBlAgUMX21hcmdpbkRlbHRhBQtyb2xsb3ZlckZlZQUOZnVuZGluZ1BheW1lbnQFEl9vbGRQb3NpdGlvbk1hcmdpbgQNJHQwMTk0MjIxOTU0OQMJAGYCAAAFDHNpZ25lZE1hcmdpbgkAlAoCAAAJAQNhYnMBBQxzaWduZWRNYXJnaW4JAJQKAgkBA2FicwEFDHNpZ25lZE1hcmdpbgAABAxyZW1haW5NYXJnaW4IBQ0kdDAxOTQyMjE5NTQ5Al8xBAdiYWREZWJ0CAUNJHQwMTk0MjIxOTU0OQJfMgkAlgoEBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFDmZ1bmRpbmdQYXltZW50BQtyb2xsb3ZlckZlZQEWc3dhcE91dHB1dFdpdGhSZXNlcnZlcwcGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QSX3F1b3RlQXNzZXRSZXNlcnZlEV9xdW90ZUFzc2V0V2VpZ2h0EV9iYXNlQXNzZXRSZXNlcnZlEF9iYXNlQXNzZXRXZWlnaHQEC3ByaWNlQmVmb3JlCQEEZGl2ZAIJAQRtdWxkAgUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfcXVvdGVBc3NldFdlaWdodAkBBG11bGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAMJAAACBRBfYmFzZUFzc2V0QW1vdW50AAAJAAIBAhlJbnZhbGlkIGJhc2UgYXNzZXQgYW1vdW50BAFrCQENY2FsY0ludmFyaWFudAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUEGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgMFBl9pc0FkZAkAZAIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50CQBlAgURX2Jhc2VBc3NldFJlc2VydmUFEF9iYXNlQXNzZXRBbW91bnQED3F1b3RlQXNzZXRBZnRlcgkAoAMBCQEFYmRpdmQCBQFrCQC2AgEFGGJhc2VBc3NldFBvb2xBbW91bnRBZnRlcgQPcXVvdGVBc3NldERlbHRhCQEDYWJzAQkAZQIFD3F1b3RlQXNzZXRBZnRlcgUSX3F1b3RlQXNzZXRSZXNlcnZlBA5xdW90ZUFzc2V0U29sZAkBBG11bGQCBQ9xdW90ZUFzc2V0RGVsdGEFEV9xdW90ZUFzc2V0V2VpZ2h0BBNtYXhQcmljZUltcGFjdFZhbHVlCQEObWF4UHJpY2VJbXBhY3QABA0kdDAyMDgxMTIwOTczCQENdXBkYXRlUmVzZXJ2ZQMJAQEhAQUGX2lzQWRkBQ9xdW90ZUFzc2V0RGVsdGEFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMjA4MTEyMDk3MwJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDIwODExMjA5NzMCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMjA4MTEyMDk3MwJfMwQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEJAGUCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMFBl9pc0FkZAkBA2FicwEFEF9iYXNlQXNzZXRBbW91bnQAAAkAZQIJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAMJAQEhAQUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAABQtwcmljZUltcGFjdAEKc3dhcE91dHB1dAMGX2lzQWRkEF9iYXNlQXNzZXRBbW91bnQUX2NoZWNrTWF4UHJpY2VJbXBhY3QJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwUGX2lzQWRkBRBfYmFzZUFzc2V0QW1vdW50BRRfY2hlY2tNYXhQcmljZUltcGFjdAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwABE2dldE9yYWNsZVByaWNlVmFsdWUDBm9yYWNsZQhwcmljZUtleQhibG9ja0tleQQJbGFzdFZhbHVlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhwcmljZUtleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIHByaWNlLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIcHJpY2VLZXkDCQECIT0CBQhibG9ja0tleQIABAxjdXJyZW50QmxvY2sFBmhlaWdodAQPbGFzdE9yYWNsZUJsb2NrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUGb3JhY2xlBQhibG9ja0tleQkArAICCQCsAgIJAKwCAgIiQ2FuIG5vdCBnZXQgb3JhY2xlIGJsb2NrLiBPcmFjbGU6IAkApQgBBQZvcmFjbGUCBiBrZXk6IAUIYmxvY2tLZXkDCQBmAgkAZQIFDGN1cnJlbnRCbG9jawUPbGFzdE9yYWNsZUJsb2NrCQEObWF4T3JhY2xlRGVsYXkACQACAQkArAICCQCsAgIJAKwCAgImT3JhY2xlIHN0YWxlIGRhdGEuIExhc3Qgb3JhY2xlIGJsb2NrOiAJAKQDAQUPbGFzdE9yYWNsZUJsb2NrAhAgY3VycmVudCBibG9jazogCQCkAwEFDGN1cnJlbnRCbG9jawUJbGFzdFZhbHVlBQlsYXN0VmFsdWUBDmdldE9yYWNsZVByaWNlAAQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQPYmFzZU9yYWNsZVByaWNlCQETZ2V0T3JhY2xlUHJpY2VWYWx1ZQMIBQpiYXNlT3JhY2xlAl8xCAUKYmFzZU9yYWNsZQJfMggFCmJhc2VPcmFjbGUCXzMEC3F1b3RlT3JhY2xlCQENZ2V0T3JhY2xlRGF0YQEFDWtfcXVvdGVPcmFjbGUEEHF1b3RlT3JhY2xlUHJpY2UDCQEJaXNEZWZpbmVkAQULcXVvdGVPcmFjbGUEDHF1b3RlT3JhY2xlVgkBBXZhbHVlAQULcXVvdGVPcmFjbGUJARNnZXRPcmFjbGVQcmljZVZhbHVlAwgFDHF1b3RlT3JhY2xlVgJfMQgFDHF1b3RlT3JhY2xlVgJfMggFDHF1b3RlT3JhY2xlVgJfMwUMREVDSU1BTF9VTklUCQEEZGl2ZAIFD2Jhc2VPcmFjbGVQcmljZQUQcXVvdGVPcmFjbGVQcmljZQEOaXNNYXJrZXRDbG9zZWQABApiYXNlT3JhY2xlCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAQ1nZXRPcmFjbGVEYXRhAQUMa19iYXNlT3JhY2xlAhlObyBiYXNlIGFzc2V0IG9yYWNsZSBkYXRhBAZvcmFjbGUIBQpiYXNlT3JhY2xlAl8xBAdvcGVuS2V5CAUKYmFzZU9yYWNsZQJfNAMJAQIhPQIFB29wZW5LZXkCAAQGaXNPcGVuCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJsIAgUGb3JhY2xlBQdvcGVuS2V5CQCsAgIJAKwCAgkArAICAitDYW4gbm90IGdldCBvcmFjbGUgaXMgb3Blbi9jbG9zZWQuIE9yYWNsZTogCQClCAEFBm9yYWNsZQIGIGtleTogBQdvcGVuS2V5CQEBIQEFBmlzT3BlbgcBDGFic1ByaWNlRGlmZgUMX29yYWNsZVByaWNlEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQdfcXRBc3RXB19ic0FzdFcECnByaWNlQWZ0ZXIJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcEDGF2ZXJhZ2VQcmljZQkBBGRpdmQCCQBkAgUMX29yYWNsZVByaWNlBQpwcmljZUFmdGVyCQBoAgACBQxERUNJTUFMX1VOSVQEDGFic1ByaWNlRGlmZgkBBGRpdmQCCQEDYWJzAQkAZQIFDF9vcmFjbGVQcmljZQUKcHJpY2VBZnRlcgUMYXZlcmFnZVByaWNlBQxhYnNQcmljZURpZmYBGXJlcXVpcmVOb3RPdmVyU3ByZWFkTGltaXQCEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfYmFzZUFzc2V0UmVzZXJ2ZQQLb3JhY2xlUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEB19xdEFzdFcJAQZxdEFzdFcABAdfYnNBc3RXCQEGYnNBc3RXAAQSYWJzUHJpY2VEaWZmQmVmb3JlCQEMYWJzUHJpY2VEaWZmBQULb3JhY2xlUHJpY2UJAQZxdEFzdFIACQEGYnNBc3RSAAUHX3F0QXN0VwUHX2JzQXN0VwQRYWJzUHJpY2VEaWZmQWZ0ZXIJAQxhYnNQcmljZURpZmYFBQtvcmFjbGVQcmljZQUSX3F1b3RlQXNzZXRSZXNlcnZlBRFfYmFzZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0VwUHX2JzQXN0VwMDCQBmAgURYWJzUHJpY2VEaWZmQWZ0ZXIJAQ5tYXhQcmljZVNwcmVhZAAJAGYCBRFhYnNQcmljZURpZmZBZnRlcgUSYWJzUHJpY2VEaWZmQmVmb3JlBwkAAgEJAKwCAgkArAICCQCsAgICDVByaWNlIHNwcmVhZCAJAKQDAQURYWJzUHJpY2VEaWZmQWZ0ZXICFCA+IG1heCBwcmljZSBzcHJlYWQgCQCkAwEJAQ5tYXhQcmljZVNwcmVhZAAGAR1yZXF1aXJlTm90T3Zlck1heE9wZW5Ob3Rpb25hbAIRX2xvbmdPcGVuTm90aW9uYWwSX3Nob3J0T3Blbk5vdGlvbmFsBBBfbWF4T3Blbk5vdGlvbmFsCQEPbWF4T3Blbk5vdGlvbmFsAAMJAGYCBRFfbG9uZ09wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICE0xvbmcgb3BlbiBub3Rpb25hbCAJAKQDAQURX2xvbmdPcGVuTm90aW9uYWwCFSA+IG1heCBvcGVuIG5vdGlvbmFsIAkApAMBBRBfbWF4T3Blbk5vdGlvbmFsAwkAZgIFEl9zaG9ydE9wZW5Ob3Rpb25hbAUQX21heE9wZW5Ob3Rpb25hbAkAAgEJAKwCAgkArAICCQCsAgICFFNob3J0IG9wZW4gbm90aW9uYWwgCQCkAwEFEl9zaG9ydE9wZW5Ob3Rpb25hbAIVID4gbWF4IG9wZW4gbm90aW9uYWwgCQCkAwEFEF9tYXhPcGVuTm90aW9uYWwGASFyZXF1aXJlU2VuZGVyQ2FuV29ya1dpdGhQb3NpdGlvbnMBB19jYWxsZXIDCQAAAgkBDHBvc2l0aW9uTW9kZQAFDlBPU0lUSU9OX09SREVSCQAAAgUHX2NhbGxlcgkBDW9yZGVyc0FkZHJlc3MABgEMZ2V0U3BvdFByaWNlAAQSX3F1b3RlQXNzZXRSZXNlcnZlCQEGcXRBc3RSAAQRX2Jhc2VBc3NldFJlc2VydmUJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAJAQRkaXZkAgkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFB19xdEFzdFcJAQRtdWxkAgURX2Jhc2VBc3NldFJlc2VydmUFB19ic0FzdFcBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABAtvcmFjbGVQcmljZQkBDmdldE9yYWNsZVByaWNlAAQMY3VycmVudFByaWNlCQEMZ2V0U3BvdFByaWNlAAkAZgIJAQRkaXZkAgkBA2FicwEJAGUCBQtvcmFjbGVQcmljZQUMY3VycmVudFByaWNlBQtvcmFjbGVQcmljZQkBC3NwcmVhZExpbWl0AAEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYNX3Bvc2l0aW9uU2l6ZQdfb3B0aW9uEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0BA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ1fcG9zaXRpb25TaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsAwkAAAIFB19vcHRpb24FD1BOTF9PUFRJT05fU1BPVAQTb3V0UG9zaXRpb25Ob3Rpb25hbAgJARZzd2FwT3V0cHV0V2l0aFJlc2VydmVzBwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBRJfcXVvdGVBc3NldFJlc2VydmUFEV9xdW90ZUFzc2V0V2VpZ2h0BRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldFdlaWdodAJfMQUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJAQ5nZXRPcmFjbGVQcmljZQAFEHBvc2l0aW9uTm90aW9uYWwBK2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sQnlWYWx1ZXMHDV9wb3NpdGlvblNpemUVX3Bvc2l0aW9uT3Blbk5vdGlvbmFsEl9xdW90ZUFzc2V0UmVzZXJ2ZRFfcXVvdGVBc3NldFdlaWdodBFfYmFzZUFzc2V0UmVzZXJ2ZRBfYmFzZUFzc2V0V2VpZ2h0B19vcHRpb24DCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQACAQIVSW52YWxpZCBwb3NpdGlvbiBzaXplBAdpc1Nob3J0CQBmAgAABQ1fcG9zaXRpb25TaXplBBBwb3NpdGlvbk5vdGlvbmFsCQEfZ2V0UG9zaXRpb25BZGp1c3RlZE9wZW5Ob3Rpb25hbAYFDV9wb3NpdGlvblNpemUFB19vcHRpb24FEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX3F1b3RlQXNzZXRXZWlnaHQFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0V2VpZ2h0BA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAUQcG9zaXRpb25Ob3Rpb25hbAkAZQIFEHBvc2l0aW9uTm90aW9uYWwFFV9wb3NpdGlvbk9wZW5Ob3Rpb25hbAkAlAoCBRBwb3NpdGlvbk5vdGlvbmFsBQ11bnJlYWxpemVkUG5sASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAMHX3RyYWRlcgpfZGlyZWN0aW9uB19vcHRpb24EDSR0MDI5MTE0MjkyNTQJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24EDHBvc2l0aW9uU2l6ZQgFDSR0MDI5MTE0MjkyNTQCXzEEDnBvc2l0aW9uTWFyZ2luCAUNJHQwMjkxMTQyOTI1NAJfMgQUcG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAyOTExNDI5MjU0Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDI5MTE0MjkyNTQCXzQJAStnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubEJ5VmFsdWVzBwUMcG9zaXRpb25TaXplBRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkBBnF0QXN0UgAJAQZxdEFzdFcACQEGYnNBc3RSAAkBBmJzQXN0VwAFB19vcHRpb24BD2NhbGNNYXJnaW5SYXRpbwMNX3JlbWFpbk1hcmdpbghfYmFkRGVidBFfcG9zaXRpb25Ob3Rpb25hbAkBBGRpdmQCCQBlAgUNX3JlbWFpbk1hcmdpbgUIX2JhZERlYnQFEV9wb3NpdGlvbk5vdGlvbmFsARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwdfdHJhZGVyCl9kaXJlY3Rpb24HX29wdGlvbgQNJHQwMjk3ODYyOTkzOQkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQMcG9zaXRpb25TaXplCAUNJHQwMjk3ODYyOTkzOQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAyOTc4NjI5OTM5Al8yBANwb24IBQ0kdDAyOTc4NjI5OTM5Al8zBBZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGCAUNJHQwMjk3ODYyOTkzOQJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDAyOTc4NjI5OTM5Al81BA0kdDAyOTk0NTMwMDUwCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQdfb3B0aW9uBBBwb3NpdGlvbk5vdGlvbmFsCAUNJHQwMjk5NDUzMDA1MAJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDI5OTQ1MzAwNTACXzIEDSR0MDMwMDU1MzAyNjcJATBjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50QW5kUm9sbG92ZXJGZWUFBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRZwb3NpdGlvbkxhc3RVcGRhdGVkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMzAwNTUzMDI2NwJfMQQHYmFkRGVidAgFDSR0MDMwMDU1MzAyNjcCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAgdfdHJhZGVyCl9kaXJlY3Rpb24JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UARtnZXRQYXJ0aWFsTGlxdWlkYXRpb25BbW91bnQCB190cmFkZXINX3Bvc2l0aW9uU2l6ZQQMbWF4aW11bVJhdGlvCQEEdm1heAIJARdwYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwAJAGUCBQxERUNJTUFMX1VOSVQJAQRkaXZkAgkBDmdldE1hcmdpblJhdGlvAgUHX3RyYWRlcgkBDGdldERpcmVjdGlvbgEFDV9wb3NpdGlvblNpemUJARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAQYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplBQxtYXhpbXVtUmF0aW8ECnN3YXBSZXN1bHQJAQpzd2FwT3V0cHV0AwkAZgIFDV9wb3NpdGlvblNpemUAAAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplBwQcbWF4RXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFCnN3YXBSZXN1bHQCXzEEC3ByaWNlSW1wYWN0CAUKc3dhcFJlc3VsdAJfNwMJAGYCCQEObWF4UHJpY2VJbXBhY3QABQtwcmljZUltcGFjdAUYbWF4RXhjaGFuZ2VkUG9zaXRpb25TaXplCQEEbXVsZAIJAQNhYnMBBQ1fcG9zaXRpb25TaXplCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AARVpbnRlcm5hbENsb3NlUG9zaXRpb24IB190cmFkZXIKX2RpcmVjdGlvbgVfc2l6ZQRfZmVlFF9taW5RdW90ZUFzc2V0QW1vdW50DF9hZGRUb01hcmdpbhRfY2hlY2tNYXhQcmljZUltcGFjdApfbGlxdWlkYXRlBA0kdDAzMTQzMDMxNTk4CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBA9vbGRQb3NpdGlvblNpemUIBQ0kdDAzMTQzMDMxNTk4Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDMxNDMwMzE1OTgCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzE0MzAzMTU5OAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAzMTQzMDMxNTk4Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDMxNDMwMzE1OTgCXzUEDmlzTG9uZ1Bvc2l0aW9uCQBmAgUPb2xkUG9zaXRpb25TaXplAAAEEmFic09sZFBvc2l0aW9uU2l6ZQkBA2FicwEFD29sZFBvc2l0aW9uU2l6ZQMDCQBnAgUSYWJzT2xkUG9zaXRpb25TaXplBQVfc2l6ZQkAZgIFBV9zaXplAAAHBA5pc1BhcnRpYWxDbG9zZQkAZgIFEmFic09sZFBvc2l0aW9uU2l6ZQUFX3NpemUEDSR0MDMxODkwMzIzNDEJAQpzd2FwT3V0cHV0AwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAABQVfc2l6ZQUUX2NoZWNrTWF4UHJpY2VJbXBhY3QEGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQIBQ0kdDAzMTg5MDMyMzQxAl8xBBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzE4OTAzMjM0MQJfMgQVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzE4OTAzMjM0MQJfMwQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDMxODkwMzIzNDECXzQEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAkBAS0BBQVfc2l6ZQUFX3NpemUEDSR0MDMyNTU2MzI3ODAJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDMyNTU2MzI3ODACXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzMjU1NjMyNzgwAl8yBA1yZWFsaXplZFJhdGlvCQEEZGl2ZAIJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUFEmFic09sZFBvc2l0aW9uU2l6ZQQLcmVhbGl6ZWRQbmwJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUNcmVhbGl6ZWRSYXRpbwQNJHQwMzMxMjEzMzM2NwkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQScmVtYWluTWFyZ2luQmVmb3JlCAUNJHQwMzMxMjEzMzM2NwJfMQQCeDEIBQ0kdDAzMzEyMTMzMzY3Al8yBAJ4MggFDSR0MDMzMTIxMzMzNjcCXzMEC3JvbGxvdmVyRmVlCAUNJHQwMzMxMjEzMzM2NwJfNAQPcG9zaXRpb25CYWREZWJ0CAkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAULcmVhbGl6ZWRQbmwCXzIEEHJlYWxpemVkQ2xvc2VGZWUJAQRtdWxkAgkBBG11bGQCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQ1yZWFsaXplZFJhdGlvBQRfZmVlBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplBA0kdDAzNDc3MzM1MTU5AwkAAAIFD25ld1Bvc2l0aW9uU2l6ZQAACQCUCgIAAAAACQCUCgIJAQNhYnMBBRJyZW1haW5PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPbmV3UG9zaXRpb25TaXplBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDM0NzczMzUxNTkCXzEEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzQ3NzMzNTE1OQJfMgQRb3Blbk5vdGlvbmFsRGVsdGEJAGUCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwEC21hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkBBG11bGQCCQBkAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFEnVucmVhbGl6ZWRQbmxBZnRlcgULbWFyZ2luUmF0aW8FEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAQRtdWxkAgkAZQIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFC21hcmdpblJhdGlvBRJ1bnJlYWxpemVkUG5sQWZ0ZXIEEW1hcmdpblRvVHJhZGVyUmF3CQBlAgkAZQIFEnJlbWFpbk1hcmdpbkJlZm9yZQkAZAIFHm5ld1Bvc2l0aW9uTWFyZ2luV2l0aFNhbWVSYXRpbwUSdW5yZWFsaXplZFBubEFmdGVyBRByZWFsaXplZENsb3NlRmVlBA5tYXJnaW5Ub1RyYWRlcgMJAGYCAAAFEW1hcmdpblRvVHJhZGVyUmF3AwUKX2xpcXVpZGF0ZQAACQACAQI3SW52YWxpZCBpbnRlcm5hbENsb3NlUG9zaXRpb24gcGFyYW1zOiB1bmFibGUgdG8gcGF5IGZlZQURbWFyZ2luVG9UcmFkZXJSYXcEEW5ld1Bvc2l0aW9uTWFyZ2luAwUMX2FkZFRvTWFyZ2luCQBkAgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvBQ5tYXJnaW5Ub1RyYWRlcgUebmV3UG9zaXRpb25NYXJnaW5XaXRoU2FtZVJhdGlvAwMJAQIhPQIFFF9taW5RdW90ZUFzc2V0QW1vdW50AAAJAGYCBRRfbWluUXVvdGVBc3NldEFtb3VudAUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAcJAAIBCQCsAgIJAKwCAgkArAICAg1MaW1pdCBlcnJvcjogCQCkAwEFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQCAyA8IAkApAMBBRRfbWluUXVvdGVBc3NldEFtb3VudAkAowoRBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYFD3Bvc2l0aW9uQmFkRGVidAULcmVhbGl6ZWRQbmwDAwUMX2FkZFRvTWFyZ2luBQ5pc1BhcnRpYWxDbG9zZQcAAAUObWFyZ2luVG9UcmFkZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFEW9wZW5Ob3Rpb25hbERlbHRhCQBlAgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQADBQ5pc0xvbmdQb3NpdGlvbgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQ5pc0xvbmdQb3NpdGlvbgkBA2FicwEFFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQAACQBlAgkBEG9wZW5JbnRlcmVzdExvbmcAAwUOaXNMb25nUG9zaXRpb24FEW9wZW5Ob3Rpb25hbERlbHRhAAAJAGUCCQERb3BlbkludGVyZXN0U2hvcnQAAwkBASEBBQ5pc0xvbmdQb3NpdGlvbgURb3Blbk5vdGlvbmFsRGVsdGEAAAkAZAIFEHJlYWxpemVkQ2xvc2VGZWUFC3JvbGxvdmVyRmVlBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CQACAQkArAICCQCsAgIJAKwCAgI9SW52YWxpZCBpbnRlcm5hbENsb3NlUG9zaXRpb24gcGFyYW1zOiBpbnZhbGlkIHBvc2l0aW9uIHNpemU6IAkApAMBBQVfc2l6ZQIGIG1heDogCQCkAwEFEmFic09sZFBvc2l0aW9uU2l6ZQETZ2V0VGVybWluYWxBbW1TdGF0ZQAEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAACQCUCgIJAQZxdEFzdFIACQEGYnNBc3RSAAQJZGlyZWN0aW9uCQBmAgUNX3Bvc2l0aW9uU2l6ZQAABA0kdDAzODQwNjM4NTg1CQEKc3dhcE91dHB1dAMFCWRpcmVjdGlvbgkBA2FicwEFDV9wb3NpdGlvblNpemUHBBVjdXJyZW50TmV0TWFya2V0VmFsdWUIBQ0kdDAzODQwNjM4NTg1Al8xBBl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlCAUNJHQwMzg0MDYzODU4NQJfMgQYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCAUNJHQwMzg0MDYzODU4NQJfMwkAlAoCBRl0ZXJtaW5hbFF1b3RlQXNzZXRSZXNlcnZlBRh0ZXJtaW5hbEJhc2VBc3NldFJlc2VydmUBE2dldFF1b3RlQXNzZXRXZWlnaHQEEGJhc2VBc3NldFJlc2VydmURdG90YWxQb3NpdGlvblNpemURcXVvdGVBc3NldFJlc2VydmULdGFyZ2V0UHJpY2UEAWIJALYCAQUQYmFzZUFzc2V0UmVzZXJ2ZQQCc3oJALYCAQURdG90YWxQb3NpdGlvblNpemUEAXEJALYCAQURcXVvdGVBc3NldFJlc2VydmUEAXAJALYCAQULdGFyZ2V0UHJpY2UEAWsJAQVibXVsZAIFAXEFAWIEBG5ld0IJALcCAgUBYgUCc3oEBG5ld1EJAQViZGl2ZAIFAWsFBG5ld0IEAXoJAQViZGl2ZAIFBG5ld1EFBG5ld0IEBnJlc3VsdAkBBWJkaXZkAgUBcAUBegkAoAMBBQZyZXN1bHQBFGdldFN5bmNUZXJtaW5hbFByaWNlAw5fdGVybWluYWxQcmljZQdfcXRBc3RSB19ic0FzdFIEDV9wb3NpdGlvblNpemUJARF0b3RhbFBvc2l0aW9uU2l6ZQADCQAAAgUNX3Bvc2l0aW9uU2l6ZQAABAluZXdRdEFzdFcJAQRkaXZkAgkBBG11bGQCBQ5fdGVybWluYWxQcmljZQUHX2JzQXN0UgUHX3F0QXN0UgkAlQoDBQluZXdRdEFzdFcFDERFQ0lNQUxfVU5JVAAABAlkaXJlY3Rpb24JAGYCBQ1fcG9zaXRpb25TaXplAAAEFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQgJAQpzd2FwT3V0cHV0AwUJZGlyZWN0aW9uCQEDYWJzAQUNX3Bvc2l0aW9uU2l6ZQcCXzEECW5ld1F0QXN0VwkBE2dldFF1b3RlQXNzZXRXZWlnaHQEBQdfYnNBc3RSBQ1fcG9zaXRpb25TaXplBQdfcXRBc3RSBQ5fdGVybWluYWxQcmljZQQJbmV3QnNBc3RXBQxERUNJTUFMX1VOSVQEDW1hcmdpblRvVmF1bHQICQErZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmxCeVZhbHVlcwcFDV9wb3NpdGlvblNpemUFFWN1cnJlbnROZXRNYXJrZXRWYWx1ZQUHX3F0QXN0UgUJbmV3UXRBc3RXBQdfYnNBc3RSBQluZXdCc0FzdFcFD1BOTF9PUFRJT05fU1BPVAJfMgkAlQoDBQluZXdRdEFzdFcFCW5ld0JzQXN0VwUNbWFyZ2luVG9WYXVsdAEKZ2V0RnVuZGluZwAED3VuZGVybHlpbmdQcmljZQkBDmdldE9yYWNsZVByaWNlAAQJc3BvdFByaWNlCQEMZ2V0U3BvdFByaWNlAAQHcHJlbWl1bQkAZQIFCXNwb3RQcmljZQUPdW5kZXJseWluZ1ByaWNlAwMJAQ5pc01hcmtldENsb3NlZAAGAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAABwkAlQoDAAAAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZAwkAAAIJAQtmdW5kaW5nTW9kZQAFEkZVTkRJTkdfQVNZTU1FVFJJQwQTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJARV0b3RhbExvbmdQb3NpdGlvblNpemUACQCVCgMFFHNob3J0UHJlbWl1bUZyYWN0aW9uBRNsb25nUHJlbWl1bUZyYWN0aW9uAAAEGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAEGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkBA2FicwEJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUABA5wcmVtaXVtVG9WYXVsdAkAZQIFGXNob3J0VG90YWxQcmVtaXVtRnJhY3Rpb24FGGxvbmdUb3RhbFByZW1pdW1GcmFjdGlvbgkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FDnByZW1pdW1Ub1ZhdWx0BBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUHcHJlbWl1bQkBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAUHT05FX0RBWQMJAAACCQELZnVuZGluZ01vZGUABRJGVU5ESU5HX0FTWU1NRVRSSUMEFHNob3J0UHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkAlQoDBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgAABBhsb25nVG90YWxQcmVtaXVtRnJhY3Rpb24JAQNhYnMBCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUABBlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQEDYWJzAQkBBG11bGQCBRNsb25nUHJlbWl1bUZyYWN0aW9uCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAEDnByZW1pdW1Ub1ZhdWx0CQBlAgUYbG9uZ1RvdGFsUHJlbWl1bUZyYWN0aW9uBRlzaG9ydFRvdGFsUHJlbWl1bUZyYWN0aW9uCQCVCgMFE2xvbmdQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24FDnByZW1pdW1Ub1ZhdWx0AQ5nZXRBZGp1c3RlZEZlZQILX2FydGlmYWN0SWQQX2Jhc2VGZWVEaXNjb3VudAQKYmFzZUZlZVJhdwkBA2ZlZQAEB2Jhc2VGZWUJAQRtdWxkAgUKYmFzZUZlZVJhdwUQX2Jhc2VGZWVEaXNjb3VudAQNJHQwNDMyNDk0Mzc0NAMJAQIhPQIFC19hcnRpZmFjdElkAgAEDGFydGlmYWN0S2luZAkBBHN0ckECCQERbmZ0TWFuYWdlckFkZHJlc3MACQEOdG9Db21wb3NpdGVLZXkCBQxrX3Rva2VuX3R5cGUFC19hcnRpZmFjdElkAwkAAAIFDGFydGlmYWN0S2luZAUYRkVFX1JFRFVDVElPTl9UT0tFTl9UWVBFBAlyZWR1Y3Rpb24JAQRpbnRBAgkBEW5mdE1hbmFnZXJBZGRyZXNzAAkBDnRvQ29tcG9zaXRlS2V5AgUNa190b2tlbl9wYXJhbQULX2FydGlmYWN0SWQEC2FkanVzdGVkRmVlCQEEbXVsZAIFB2Jhc2VGZWUFCXJlZHVjdGlvbgkAlAoCBQthZGp1c3RlZEZlZQYJAAIBAhlJbnZhbGlkIGF0dGFjaGVkIGFydGlmYWN0CQCUCgIFB2Jhc2VGZWUHBAthZGp1c3RlZEZlZQgFDSR0MDQzMjQ5NDM3NDQCXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDQzMjQ5NDM3NDQCXzIJAJQKAgULYWRqdXN0ZWRGZWUFDGJ1cm5BcnRpZmFjdAEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgdfdHJhZGVyC19hcnRpZmFjdElkBBBkb0dldEZlZURpc2NvdW50CQD8BwQJAQxtaW5lckFkZHJlc3MAAhJjb21wdXRlRmVlRGlzY291bnQJAMwIAgUHX3RyYWRlcgUDbmlsBQNuaWwDCQAAAgUQZG9HZXRGZWVEaXNjb3VudAUQZG9HZXRGZWVEaXNjb3VudAQLZmVlRGlzY291bnQEByRtYXRjaDAFEGRvR2V0RmVlRGlzY291bnQDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQIhSW52YWxpZCBjb21wdXRlRmVlRGlzY291bnQgcmVzdWx0BA0kdDA0NDA5MDQ0MTY0CQEOZ2V0QWRqdXN0ZWRGZWUCBQtfYXJ0aWZhY3RJZAULZmVlRGlzY291bnQEC2FkanVzdGVkRmVlCAUNJHQwNDQwOTA0NDE2NAJfMQQMYnVybkFydGlmYWN0CAUNJHQwNDQwOTA0NDE2NAJfMgkAlAoCBQthZGp1c3RlZEZlZQUMYnVybkFydGlmYWN0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAQ1nZXRBcnRpZmFjdElkAQFpBAphcnRpZmFjdElkAwkAZgIJAJADAQgFAWkIcGF5bWVudHMAAQkA2AQBCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAISSW52YWxpZCBhcnRpZmFjdElkAgAFCmFydGlmYWN0SWQBDWRpc3RyaWJ1dGVGZWUBCl9mZWVBbW91bnQEDGZlZVRvU3Rha2VycwkBBG11bGQCBQpfZmVlQW1vdW50CQETZmVlVG9TdGFrZXJzUGVyY2VudAAECmZlZVRvVmF1bHQJAGUCBQpfZmVlQW1vdW50BQxmZWVUb1N0YWtlcnMJAJQKAgUMZmVlVG9TdGFrZXJzBQpmZWVUb1ZhdWx0AQ51cGRhdGVTZXR0aW5ncxEQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdBhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8PX21heFByaWNlU3ByZWFkEF9tYXhPcGVuTm90aW9uYWwUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQPX21heE9yYWNsZURlbGF5DF9yb2xsb3ZlckZlZQxfZnVuZGluZ01vZGULX29yYWNsZU1vZGUTX21pbkluaXRNYXJnaW5SYXRpbw1fcG9zaXRpb25Nb2RlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2luaXRNYXJnaW5SYXRpbwUQX2luaXRNYXJnaW5SYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa19taW5Jbml0TWFyZ2luUmF0aW8FE19taW5Jbml0TWFyZ2luUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFGGtfbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwUEX21tcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUVa19saXF1aWRhdGlvbkZlZVJhdGlvBRRfbGlxdWlkYXRpb25GZWVSYXRpbwkAzAgCCQEMSW50ZWdlckVudHJ5AgUPa19mdW5kaW5nUGVyaW9kBQ5fZnVuZGluZ1BlcmlvZAkAzAgCCQEMSW50ZWdlckVudHJ5AgUFa19mZWUFBF9mZWUJAMwIAgkBDEludGVnZXJFbnRyeQIFDWtfc3ByZWFkTGltaXQFDF9zcHJlYWRMaW1pdAkAzAgCCQEMSW50ZWdlckVudHJ5AgUQa19tYXhQcmljZUltcGFjdAUPX21heFByaWNlSW1wYWN0CQDMCAIJAQxJbnRlZ2VyRW50cnkCBRlrX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VTcHJlYWQFD19tYXhQcmljZVNwcmVhZAkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19tYXhPcGVuTm90aW9uYWwFEF9tYXhPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfZmVlVG9TdGFrZXJzUGVyY2VudAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4T3JhY2xlRGVsYXkFD19tYXhPcmFjbGVEZWxheQkAzAgCCQEMSW50ZWdlckVudHJ5AgUNa19yb2xsb3ZlckZlZQUMX3JvbGxvdmVyRmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX2Z1bmRpbmdNb2RlBQxfZnVuZGluZ01vZGUJAMwIAgkBDEludGVnZXJFbnRyeQIFDGtfb3JhY2xlTW9kZQULX29yYWNsZU1vZGUJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfcG9zaXRpb25Nb2RlBQ1fcG9zaXRpb25Nb2RlBQNuaWwBDXVwZGF0ZUZ1bmRpbmcFEV9uZXh0RnVuZGluZ0Jsb2NrJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbiVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sb25nRnVuZGluZ1JhdGURX3Nob3J0RnVuZGluZ1JhdGUJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfbmV4dEZ1bmRpbmdCbG9jawURX25leHRGdW5kaW5nQmxvY2sJAMwIAgkBDEludGVnZXJFbnRyeQIFJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJF9sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgUma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FJV9sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfbG9uZ0Z1bmRpbmdSYXRlBRBfbG9uZ0Z1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX3Nob3J0RnVuZGluZ1JhdGUFEV9zaG9ydEZ1bmRpbmdSYXRlBQNuaWwBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXIDDl9pc05ld1Bvc2l0aW9uB190cmFkZXIKX2RpcmVjdGlvbgQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCl9kaXJlY3Rpb24DBQ5faXNOZXdQb3NpdGlvbgQPY3VycmVudFNlcXVlbmNlCQEMbGFzdFNlcXVlbmNlAAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQtwb3NpdGlvbktleQkAZAIFD2N1cnJlbnRTZXF1ZW5jZQABCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQprX3NlcXVlbmNlCQBkAgUPY3VycmVudFNlcXVlbmNlAAEFA25pbAUDbmlsARF1cGRhdGVQb3NpdGlvbkZlZQQOX2lzTmV3UG9zaXRpb24HX3RyYWRlcgpfZGlyZWN0aW9uBF9mZWUEC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uAwUOX2lzTmV3UG9zaXRpb24JAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFC3Bvc2l0aW9uS2V5BQRfZmVlBQNuaWwFA25pbAEOdXBkYXRlUG9zaXRpb24GB190cmFkZXIFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uEF9sYXRlc3RUaW1lc3RhbXAECWRpcmVjdGlvbgkBDGdldERpcmVjdGlvbgEFBV9zaXplBAtwb3NpdGlvbktleQkArAICCQCsAgIFB190cmFkZXICAV8JAKQDAQUJZGlyZWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FC3Bvc2l0aW9uS2V5BSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQUQX2xhdGVzdFRpbWVzdGFtcAUDbmlsARF1cGRhdGVBbW1SZXNlcnZlcwIHX3F0QXN0UgdfYnNBc3RSAwMJAGYCAAAFB19xdEFzdFIGCQBmAgAABQdfYnNBc3RSCQACAQIhSW52YWxpZCBhbW91bnQgdG8gdXBkYXRlIHJlc2VydmVzAwMJAQIhPQIFB19xdEFzdFIJAQdxdEFzdFIwAAYJAQIhPQIFB19ic0FzdFIJAQdic0FzdFIwAAkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwFA25pbAEQdXBkYXRlQW1tV2VpZ2h0cwIHX3F0QXN0VwdfYnNBc3RXAwMJAQIhPQIFB19xdEFzdFcJAQZxdEFzdFcABgkBAiE9AgUHX2JzQXN0VwkBBmJzQXN0VwAJAMwIAgkBDEludGVnZXJFbnRyeQIFEmtfcXVvdGVBc3NldFdlaWdodAUHX3F0QXN0VwkAzAgCCQEMSW50ZWdlckVudHJ5AgURa19iYXNlQXNzZXRXZWlnaHQFB19ic0FzdFcFA25pbAUDbmlsAQl1cGRhdGVBbW0IB19xdEFzdFIHX2JzQXN0UhdfdG90YWxQb3NpdGlvblNpemVBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZRZfdG90YWxMb25nT3Blbk5vdGlvbmFsF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwADCQECIT0CCQBlAgUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQACAQkArAICCQCsAgIJAKwCAgkArAICCQCsAgICGEludmFsaWQgQU1NIHN0YXRlIGRhdGE6IAkApAMBBRZfdG90YWxMb25nUG9zaXRpb25TaXplAgQgLSAgCQCkAwEFF190b3RhbFNob3J0UG9zaXRpb25TaXplAgQgIT0gCQCkAwEFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDOCAIJARF1cGRhdGVBbW1SZXNlcnZlcwIFB19xdEFzdFIFB19ic0FzdFIJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfdG90YWxQb3NpdGlvblNpemUFF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsBRVfb3BlbkludGVyZXN0Tm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFF2tfdG90YWxMb25nUG9zaXRpb25TaXplBRZfdG90YWxMb25nUG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUFF190b3RhbFNob3J0UG9zaXRpb25TaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX29wZW5JbnRlcmVzdExvbmcFFl90b3RhbExvbmdPcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIFE2tfb3BlbkludGVyZXN0U2hvcnQFF190b3RhbFNob3J0T3Blbk5vdGlvbmFsBQNuaWwBDmRlbGV0ZVBvc2l0aW9uAgdfdHJhZGVyCl9kaXJlY3Rpb24EC3Bvc2l0aW9uS2V5CQCsAgIJAKwCAgUHX3RyYWRlcgIBXwkApAMBBQpfZGlyZWN0aW9uCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQtwb3NpdGlvbktleQkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBR5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRUaW1lc3RhbXAFC3Bvc2l0aW9uS2V5BQNuaWwBCHdpdGhkcmF3AghfYWRkcmVzcwdfYW1vdW50BAdiYWxhbmNlCQDwBwIFBHRoaXMJAQpxdW90ZUFzc2V0AAMJAGYCBQdfYW1vdW50BQdiYWxhbmNlCQACAQkArAICCQCsAgIJAKwCAgITVW5hYmxlIHRvIHdpdGhkcmF3IAkApAMBBQdfYW1vdW50AhcgZnJvbSBjb250cmFjdCBiYWxhbmNlIAkApAMBBQdiYWxhbmNlCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMFCF9hZGRyZXNzBQdfYW1vdW50CQEKcXVvdGVBc3NldAAFA25pbAENdXBkYXRlQmFsYW5jZQEIX2JhbGFuY2UDCQBmAgAABQhfYmFsYW5jZQkAAgECB0JhbGFuY2UDAwkAAAIJAQljYmFsYW5jZTAAAAAGCQECIT0CCQEJY2JhbGFuY2UwAAUIX2JhbGFuY2UJAMwIAgkBDEludGVnZXJFbnRyeQIFCWtfYmFsYW5jZQUIX2JhbGFuY2UFA25pbAUDbmlsAQt0cmFuc2ZlckZlZQEBaQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDCQEOc3Rha2luZ0FkZHJlc3MABQFpCQEKcXVvdGVBc3NldAAFA25pbAEOZG9CdXJuQXJ0aWZhY3QCDV9idXJuQXJ0aWZhY3QBaQMFDV9idXJuQXJ0aWZhY3QJAMwIAgkBBEJ1cm4CCQETdmFsdWVPckVycm9yTWVzc2FnZQIICQCRAwIIBQFpCHBheW1lbnRzAAEHYXNzZXRJZAIQSW52YWxpZCBhcnRpZmFjdAABBQNuaWwFA25pbBcBaQEFcGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECFEludmFsaWQgcGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAYFA25pbAFpAQd1bnBhdXNlAAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAhZJbnZhbGlkIHVucGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxzZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECG0ludmFsaWQgc2V0Q2xvc2VPbmx5IHBhcmFtcwkAzAgCCQEMQm9vbGVhbkVudHJ5AgULa19jbG9zZU9ubHkGBQNuaWwBaQEOdW5zZXRDbG9zZU9ubHkAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECHUludmFsaWQgdW5zZXRDbG9zZU9ubHkgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQtrX2Nsb3NlT25seQcFA25pbAFpAQ9jaGFuZ2VMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQAAAgURX3F1b3RlQXNzZXRBbW91bnQAAAkAAgECHkludmFsaWQgY2hhbmdlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAdfcXRBc3RXCQEGcXRBc3RXAAQHX2JzQXN0VwkBBmJzQXN0VwAEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUHX3F0QXN0UgUHX3F0QXN0VwkBBG11bGQCBQdfYnNBc3RSBQdfYnNBc3RXBAtxdEFzdFJBZnRlcgkAZAIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBRiYXNlQXNzZXRBbW91bnRUb0FkZAkAZQIJAQRkaXZkAgkBBG11bGQCBQtxdEFzdFJBZnRlcgUHX3F0QXN0VwUFcHJpY2UFB19ic0FzdFIEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQEDSR0MDUzMDQ5NTMyMDAJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgQTbmV3UXVvdGVBc3NldFdlaWdodAgFDSR0MDUzMDQ5NTMyMDACXzEEEm5ld0Jhc2VBc3NldFdlaWdodAgFDSR0MDUzMDQ5NTMyMDACXzIEDW1hcmdpblRvVmF1bHQIBQ0kdDA1MzA0OTUzMjAwAl8zBA1kb0V4Y2hhbmdlUG5MAwkBAiE9AgUNbWFyZ2luVG9WYXVsdAAABA1kb0V4Y2hhbmdlUG5MCQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgUNbWFyZ2luVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUNZG9FeGNoYW5nZVBuTAUNZG9FeGNoYW5nZVBuTAkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQtxdEFzdFJBZnRlcgULYnNBc3RSQWZ0ZXIJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDmNoYW5nZVNldHRpbmdzExBfaW5pdE1hcmdpblJhdGlvBF9tbXIUX2xpcXVpZGF0aW9uRmVlUmF0aW8OX2Z1bmRpbmdQZXJpb2QEX2ZlZQxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQtfb3JhY2xlTW9kZQ9fYmFzZU9yYWNsZURhdGEQX3F1b3RlT3JhY2xlRGF0YRNfbWluSW5pdE1hcmdpblJhdGlvDV9wb3NpdGlvbk1vZGUDAwMDAwMDAwMDAwMDAwMDAwMDAwMDCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBmAgUQX2luaXRNYXJnaW5SYXRpbwUMREVDSU1BTF9VTklUBgkAZwIAAAUTX21pbkluaXRNYXJnaW5SYXRpbwYJAGYCBRBfaW5pdE1hcmdpblJhdGlvBRNfbWluSW5pdE1hcmdpblJhdGlvBgkAZwIAAAUEX21tcgYJAGcCAAAFFF9saXF1aWRhdGlvbkZlZVJhdGlvBgkAZwIAAAUEX2ZlZQYJAGcCAAAFDF9zcHJlYWRMaW1pdAYJAGcCAAAFD19tYXhQcmljZUltcGFjdAYJAGcCAAAFGF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbwYJAGcCAAAFD19tYXhQcmljZVNwcmVhZAYJAGcCAAAFEF9tYXhPcGVuTm90aW9uYWwGCQBnAgAABRRfZmVlVG9TdGFrZXJzUGVyY2VudAYJAGYCBRRfZmVlVG9TdGFrZXJzUGVyY2VudAUMREVDSU1BTF9VTklUBgkAZgIAAAUPX21heE9yYWNsZURlbGF5BgkAZwIAAAUMX3JvbGxvdmVyRmVlBgMJAQIhPQIFDF9mdW5kaW5nTW9kZQURRlVORElOR19TWU1NRVRSSUMJAQIhPQIFDF9mdW5kaW5nTW9kZQUSRlVORElOR19BU1lNTUVUUklDBwYDCQECIT0CBQtfb3JhY2xlTW9kZQUMT1JBQ0xFX1BMQUlOCQECIT0CBQtfb3JhY2xlTW9kZQUKT1JBQ0xFX0pJVAcGAwkBAiE9AgUNX3Bvc2l0aW9uTW9kZQUPUE9TSVRJT05fRElSRUNUCQECIT0CBQ1fcG9zaXRpb25Nb2RlBQ5QT1NJVElPTl9PUkRFUgcGCQEBIQEJAQtpbml0aWFsaXplZAAGCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIdSW52YWxpZCBjaGFuZ2VTZXR0aW5ncyBwYXJhbXMJAM4IAgkBDnVwZGF0ZVNldHRpbmdzEQUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAUYX3BhcnRpYWxMaXF1aWRhdGlvblJhdGlvBQ9fbWF4UHJpY2VTcHJlYWQFEF9tYXhPcGVuTm90aW9uYWwFFF9mZWVUb1N0YWtlcnNQZXJjZW50BQ9fbWF4T3JhY2xlRGVsYXkFDF9yb2xsb3ZlckZlZQUMX2Z1bmRpbmdNb2RlBQtfb3JhY2xlTW9kZQUTX21pbkluaXRNYXJnaW5SYXRpbwUNX3Bvc2l0aW9uTW9kZQkAzAgCCQELU3RyaW5nRW50cnkCBQxrX2Jhc2VPcmFjbGUFD19iYXNlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX3F1b3RlT3JhY2xlBRBfcXVvdGVPcmFjbGVEYXRhBQNuaWwBaQEKaW5pdGlhbGl6ZRYHX3F0QXN0UgdfYnNBc3RSDl9mdW5kaW5nUGVyaW9kEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbwRfZmVlD19iYXNlT3JhY2xlRGF0YRBfcXVvdGVPcmFjbGVEYXRhDF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0GF9wYXJ0aWFsTGlxdWlkYXRpb25SYXRpbw9fbWF4UHJpY2VTcHJlYWQQX21heE9wZW5Ob3Rpb25hbBRfZmVlVG9TdGFrZXJzUGVyY2VudA9fbWF4T3JhY2xlRGVsYXkMX3JvbGxvdmVyRmVlDF9mdW5kaW5nTW9kZQtfb3JhY2xlTW9kZRNfbWluSW5pdE1hcmdpblJhdGlvDV9wb3NpdGlvbk1vZGUDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMJAGcCAAAFB19xdEFzdFIGCQBnAgAABQdfYnNBc3RSBgkAZwIAAAUOX2Z1bmRpbmdQZXJpb2QGCQBnAgAABRBfaW5pdE1hcmdpblJhdGlvBgkAZgIFEF9pbml0TWFyZ2luUmF0aW8FDERFQ0lNQUxfVU5JVAYJAGcCAAAFE19taW5Jbml0TWFyZ2luUmF0aW8GCQBmAgUQX2luaXRNYXJnaW5SYXRpbwUTX21pbkluaXRNYXJnaW5SYXRpbwYJAGcCAAAFBF9tbXIGCQBnAgAABRRfbGlxdWlkYXRpb25GZWVSYXRpbwYJAGcCAAAFBF9mZWUGCQBnAgAABQxfc3ByZWFkTGltaXQGCQBnAgAABQ9fbWF4UHJpY2VJbXBhY3QGCQBnAgAABRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8GCQBnAgAABQ9fbWF4UHJpY2VTcHJlYWQGCQBnAgAABRBfbWF4T3Blbk5vdGlvbmFsBgkAZwIAAAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQGCQBmAgUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFDERFQ0lNQUxfVU5JVAYJAGYCAAAFD19tYXhPcmFjbGVEZWxheQYJAGcCAAAFDF9yb2xsb3ZlckZlZQYDCQECIT0CBQxfZnVuZGluZ01vZGUFEUZVTkRJTkdfU1lNTUVUUklDCQECIT0CBQxfZnVuZGluZ01vZGUFEkZVTkRJTkdfQVNZTU1FVFJJQwcGAwkBAiE9AgULX29yYWNsZU1vZGUFDE9SQUNMRV9QTEFJTgkBAiE9AgULX29yYWNsZU1vZGUFCk9SQUNMRV9KSVQHBgMJAQIhPQIFDV9wb3NpdGlvbk1vZGUFD1BPU0lUSU9OX0RJUkVDVAkBAiE9AgUNX3Bvc2l0aW9uTW9kZQUOUE9TSVRJT05fT1JERVIHBgkBC2luaXRpYWxpemVkAAYJAQIhPQIIBQFpBmNhbGxlcgUEdGhpcwkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0IBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAAACQEOdXBkYXRlU2V0dGluZ3MRBRBfaW5pdE1hcmdpblJhdGlvBQRfbW1yBRRfbGlxdWlkYXRpb25GZWVSYXRpbwUOX2Z1bmRpbmdQZXJpb2QFBF9mZWUFDF9zcHJlYWRMaW1pdAUPX21heFByaWNlSW1wYWN0BRhfcGFydGlhbExpcXVpZGF0aW9uUmF0aW8FD19tYXhQcmljZVNwcmVhZAUQX21heE9wZW5Ob3Rpb25hbAUUX2ZlZVRvU3Rha2Vyc1BlcmNlbnQFD19tYXhPcmFjbGVEZWxheQUMX3JvbGxvdmVyRmVlBQxfZnVuZGluZ01vZGUFC19vcmFjbGVNb2RlBRNfbWluSW5pdE1hcmdpblJhdGlvBQ1fcG9zaXRpb25Nb2RlCQENdXBkYXRlRnVuZGluZwUJAGQCCQENbGFzdFRpbWVzdGFtcAAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQxrX2Jhc2VPcmFjbGUFD19iYXNlT3JhY2xlRGF0YQkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX3F1b3RlT3JhY2xlBRBfcXVvdGVPcmFjbGVEYXRhCQDMCAIJAQtTdHJpbmdFbnRyeQIFFGtfY29vcmRpbmF0b3JBZGRyZXNzCQClCAEJARFAZXh0ck5hdGl2ZSgxMDYyKQEFDF9jb29yZGluYXRvcgUDbmlsAWkBEGluY3JlYXNlUG9zaXRpb24FCl9kaXJlY3Rpb24JX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQIX3JlZkxpbmsMX3ByaWNlVXBkYXRlBAx1cGRhdGVPcmFjbGUJAPwHBAUEdGhpcwIMdXBkYXRlT3JhY2xlCQDMCAIFDF9wcmljZVVwZGF0ZQUDbmlsBQNuaWwDCQAAAgUMdXBkYXRlT3JhY2xlBQx1cGRhdGVPcmFjbGUEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQKX3Jhd0Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQESbWluSW5pdE1hcmdpblJhdGlvAAcGCQEBIQEJASFyZXF1aXJlU2VuZGVyQ2FuV29ya1dpdGhQb3NpdGlvbnMBCAUBaQZjYWxsZXIGCQEGcGF1c2VkAAYJAQljbG9zZU9ubHkABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECI0ludmFsaWQgaW5jcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDA2MDQ2MzYwNjEyCQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgkBDWdldEFydGlmYWN0SWQBBQFpBAthZGp1c3RlZEZlZQgFDSR0MDYwNDYzNjA2MTICXzEEDGJ1cm5BcnRpZmFjdAgFDSR0MDYwNDYzNjA2MTICXzIEB19hbW91bnQJAQRkaXZkAgUKX3Jhd0Ftb3VudAkAZAIJAQRtdWxkAgULYWRqdXN0ZWRGZWUFCV9sZXZlcmFnZQUMREVDSU1BTF9VTklUBBNkaXN0cmlidXRlRmVlQW1vdW50CQBlAgUKX3Jhd0Ftb3VudAUHX2Ftb3VudAQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACFWFjY2VwdFBheW1lbnRXaXRoTGluawkAzAgCBQdfdHJhZGVyCQDMCAIFCF9yZWZMaW5rBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUTZGlzdHJpYnV0ZUZlZUFtb3VudAUDbmlsAwkAAAIFDnJlZmVycmVyRmVlQW55BQ5yZWZlcnJlckZlZUFueQQLcmVmZXJyZXJGZWUEByRtYXRjaDAFDnJlZmVycmVyRmVlQW55AwkAAQIFByRtYXRjaDACA0ludAQBeAUHJG1hdGNoMAUBeAkAAgECE0ludmFsaWQgcmVmZXJyZXJGZWUECWZlZUFtb3VudAkAZQIFE2Rpc3RyaWJ1dGVGZWVBbW91bnQFC3JlZmVycmVyRmVlBA0kdDA2MTEwODYxMjg4CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA2MTEwODYxMjg4Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDYxMTA4NjEyODgCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjExMDg2MTI4OAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA2MTEwODYxMjg4Al80BBRvbGRQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDYxMTA4NjEyODgCXzUEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDA2MTU3NzY0NzEwAwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwNjIwODY2MjI1OQkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDYyMDg2NjIyNTkCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2MjA4NjYyMjU5Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2MjA4NjYyMjU5Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjIwODY2MjI1OQJfNAMDCQECIT0CBRNfbWluQmFzZUFzc2V0QW1vdW50AAAJAGYCBRNfbWluQmFzZUFzc2V0QW1vdW50CQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BwkAAgEJAKwCAgkArAICCQCsAgICDUxpbWl0IGVycm9yOiAJAKQDAQkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAIDIDwgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARBvcGVuSW50ZXJlc3RMb25nAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAUMb3Blbk5vdGlvbmFsAAAEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAZAIJARFvcGVuSW50ZXJlc3RTaG9ydAADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUFDG9wZW5Ob3Rpb25hbAAABA0kdDA2MjgwNTYzMDgwCQEwY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudEFuZFJvbGxvdmVyRmVlBQUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFFG9sZFBvc2l0aW9uVGltZXN0YW1wBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2MjgwNTYzMDgwAl8xBAJ4MQgFDSR0MDYyODA1NjMwODACXzIEAngyCAUNJHQwNjI4MDU2MzA4MAJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA2MjgwNTYzMDgwAl80AwkBASEBCQEZcmVxdWlyZU5vdE92ZXJTcHJlYWRMaW1pdAIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgkAAgECFU92ZXIgbWF4IHNwcmVhZCBsaW1pdAMJAQEhAQkBHXJlcXVpcmVOb3RPdmVyTWF4T3Blbk5vdGlvbmFsAgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkAAgECFk92ZXIgbWF4IG9wZW4gbm90aW9uYWwJAKAKDgUPbmV3UG9zaXRpb25TaXplBQxyZW1haW5NYXJnaW4JAGQCBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQkBDWxhc3RUaW1lc3RhbXAABRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIFC3JvbGxvdmVyRmVlBAxvcGVuTm90aW9uYWwJAQRtdWxkAgUHX2Ftb3VudAUJX2xldmVyYWdlBA0kdDA2NDM5ODY0NTI2CQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDCQClCAEIBQFpBmNhbGxlcgUKX2RpcmVjdGlvbgUPUE5MX09QVElPTl9TUE9UBBNvbGRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwNjQzOTg2NDUyNgJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDY0Mzk4NjQ1MjYCXzIDCQBmAgUTb2xkUG9zaXRpb25Ob3Rpb25hbAUMb3Blbk5vdGlvbmFsCQACAQIuVXNlIGRlY3JlYXNlUG9zaXRpb24gdG8gZGVjcmVhc2UgcG9zaXRpb24gc2l6ZQkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDA2MTU3NzY0NzEwAl8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDYxNTc3NjQ3MTACXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNjE1Nzc2NDcxMAJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDA2MTU3NzY0NzEwAl80BBRuZXdQb3NpdGlvblRpbWVzdGFtcAgFDSR0MDYxNTc3NjQ3MTACXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDYxNTc3NjQ3MTACXzYEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA2MTU3NzY0NzEwAl83BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNjE1Nzc2NDcxMAJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDYxNTc3NjQ3MTACXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNjE1Nzc2NDcxMANfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDYxNTc3NjQ3MTADXzExBBp0b3RhbExvbmdPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDYxNTc3NjQ3MTADXzEyBBt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIIBQ0kdDA2MTU3NzY0NzEwA18xMwQLcm9sbG92ZXJGZWUIBQ0kdDA2MTU3NzY0NzEwA18xNAQNJHQwNjQ3MTY2NDc4NwkBDWRpc3RyaWJ1dGVGZWUBCQBkAgUJZmVlQW1vdW50BQtyb2xsb3ZlckZlZQQMZmVlVG9TdGFrZXJzCAUNJHQwNjQ3MTY2NDc4NwJfMQQKZmVlVG9WYXVsdAgFDSR0MDY0NzE2NjQ3ODcCXzIEBXN0YWtlAwkAZwIFB19hbW91bnQFC3JvbGxvdmVyRmVlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAglhZGRMb2NrZWQFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQACQBlAgUHX2Ftb3VudAULcm9sbG92ZXJGZWUFA25pbAkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgkAZQIFC3JvbGxvdmVyRmVlBQdfYW1vdW50BQNuaWwFA25pbAMJAAACBQVzdGFrZQUFc3Rha2UEDGRlcG9zaXRWYXVsdAkA/AcECQEMdmF1bHRBZGRyZXNzAAIHYWRkRnJlZQUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFCmZlZVRvVmF1bHQFA25pbAMJAAACBQxkZXBvc2l0VmF1bHQFDGRlcG9zaXRWYXVsdAQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIFB190cmFkZXIJAMwIAgUJZmVlQW1vdW50BQNuaWwFA25pbAMJAAACBQlub3RpZnlGZWUFCW5vdGlmeUZlZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQDOCAIJAM4IAgkAzggCCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGBRRuZXdQb3NpdGlvblRpbWVzdGFtcAkBH2luY3JlbWVudFBvc2l0aW9uU2VxdWVuY2VOdW1iZXIDBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyBQpfZGlyZWN0aW9uCQERdXBkYXRlUG9zaXRpb25GZWUEBQ1pc05ld1Bvc2l0aW9uBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQthZGp1c3RlZEZlZQkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGUCCQBkAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUJAQ5kb0J1cm5BcnRpZmFjdAIFDGJ1cm5BcnRpZmFjdAUBaQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlhZGRNYXJnaW4CCl9kaXJlY3Rpb24MX3ByaWNlVXBkYXRlBAx1cGRhdGVPcmFjbGUJAPwHBAUEdGhpcwIMdXBkYXRlT3JhY2xlCQDMCAIFDF9wcmljZVVwZGF0ZQUDbmlsBQNuaWwDCQAAAgUMdXBkYXRlT3JhY2xlBQx1cGRhdGVPcmFjbGUEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQClCAEIBQFpBmNhbGxlcgQHX2Ftb3VudAgJAJEDAggFAWkIcGF5bWVudHMAAAZhbW91bnQECF9hc3NldElkCAkAkQMCCAUBaQhwYXltZW50cwAAB2Fzc2V0SWQEC19hc3NldElkU3RyCQDYBAEJAQV2YWx1ZQEFCF9hc3NldElkBAxpc1F1b3RlQXNzZXQJAAACBQhfYXNzZXRJZAkBCnF1b3RlQXNzZXQAAwMDAwMJAQEhAQUMaXNRdW90ZUFzc2V0BgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIJAKUIAQgFAWkGY2FsbGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQEOaXNNYXJrZXRDbG9zZWQACQACAQIcSW52YWxpZCBhZGRNYXJnaW4gcGFyYW1ldGVycwQNJHQwNjcxMjk2NzMwOQkBC2dldFBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgQPb2xkUG9zaXRpb25TaXplCAUNJHQwNjcxMjk2NzMwOQJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDA2NzEyOTY3MzA5Al8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDY3MTI5NjczMDkCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNjcxMjk2NzMwOQJfNAQUb2xkUG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA2NzEyOTY3MzA5Al81BAVzdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIJYWRkTG9ja2VkBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUHX2Ftb3VudAUDbmlsAwkAAAIFBXN0YWtlBQVzdGFrZQQNJHQwNjc0NDk2NzY3NQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAUHX2Ftb3VudAQMcmVtYWluTWFyZ2luCAUNJHQwNjc0NDk2NzY3NQJfMQQHYmFkRGVidAgFDSR0MDY3NDQ5Njc2NzUCXzIEC3JvbGxvdmVyRmVlCAUNJHQwNjc0NDk2NzY3NQJfMwQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBA5jaGVja01pbk1hcmdpbgkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBQttYXJnaW5SYXRpbwkBEm1pbkluaXRNYXJnaW5SYXRpbwAHAwkAAAIFDmNoZWNrTWluTWFyZ2luBQ5jaGVja01pbk1hcmdpbgQWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwMJAGYCBQtyb2xsb3ZlckZlZQAABA0kdDA2NzkzMTY3OTkwCQENZGlzdHJpYnV0ZUZlZQEFC3JvbGxvdmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA2NzkzMTY3OTkwAl8xBApmZWVUb1ZhdWx0CAUNJHQwNjc5MzE2Nzk5MAJfMgQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUMZmVlVG9TdGFrZXJzBQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBAtsb2NrQmFkRGVidAkA/AcECQEMdmF1bHRBZGRyZXNzAAIVZXhjaGFuZ2VGcmVlQW5kTG9ja2VkCQDMCAIJAQEtAQUKZmVlVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgULbG9ja0JhZERlYnQFC2xvY2tCYWREZWJ0CQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzBRZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzCQDOCAIJAM4IAgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPb2xkUG9zaXRpb25TaXplCQBkAgkAZQIFEW9sZFBvc2l0aW9uTWFyZ2luBQtyb2xsb3ZlckZlZQUHX2Ftb3VudAUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50BQtyb2xsb3ZlckZlZQUWZG9UcmFuc2ZlckZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQxyZW1vdmVNYXJnaW4DB19hbW91bnQKX2RpcmVjdGlvbgxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBBBlbnN1cmVDYWxsZWRPbmNlCQD8BwQFBHRoaXMCEGVuc3VyZUNhbGxlZE9uY2UFA25pbAUDbmlsAwkAAAIFEGVuc3VyZUNhbGxlZE9uY2UFEGVuc3VyZUNhbGxlZE9uY2UEB190cmFkZXIJAKUIAQgFAWkGY2FsbGVyAwMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQABgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDY5NDkxNjk2NzEJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24ED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDY5NDkxNjk2NzECXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwNjk0OTE2OTY3MQJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDA2OTQ5MTY5NjcxAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDY5NDkxNjk2NzECXzQEFG9sZFBvc2l0aW9uVGltZXN0YW1wCAUNJHQwNjk0OTE2OTY3MQJfNQQNJHQwNjk2Nzc2OTkyNgkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBRRvbGRQb3NpdGlvblRpbWVzdGFtcAkBAS0BBQdfYW1vdW50BAxyZW1haW5NYXJnaW4IBQ0kdDA2OTY3NzY5OTI2Al8xBAdiYWREZWJ0CAUNJHQwNjk2Nzc2OTkyNgJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA2OTY3NzY5OTI2Al8zBAtyb2xsb3ZlckZlZQgFDSR0MDY5Njc3Njk5MjYCXzQDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEDSR0MDcwMzEyNzAzNzEJAQ1kaXN0cmlidXRlRmVlAQULcm9sbG92ZXJGZWUEDGZlZVRvU3Rha2VycwgFDSR0MDcwMzEyNzAzNzECXzEECmZlZVRvVmF1bHQIBQ0kdDA3MDMxMjcwMzcxAl8yBBZkb1RyYW5zZmVyRmVlVG9TdGFrZXJzAwkAZgIFC3JvbGxvdmVyRmVlAAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQpmZWVUb1ZhdWx0BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQJAQt0cmFuc2ZlckZlZQEFDGZlZVRvU3Rha2VycwkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMEB3Vuc3Rha2UJAPwHBAkBDHZhdWx0QWRkcmVzcwACDndpdGhkcmF3TG9ja2VkCQDMCAIJAGQCBQdfYW1vdW50BQxmZWVUb1N0YWtlcnMFA25pbAUDbmlsAwkAAAIFB3Vuc3Rha2UFB3Vuc3Rha2UJAM4IAgkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgYFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luBRdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9vbGRQb3NpdGlvblNpemUJAQ1sYXN0VGltZXN0YW1wAAkBCHdpdGhkcmF3AggFAWkGY2FsbGVyBQdfYW1vdW50CQENdXBkYXRlQmFsYW5jZQEJAGUCCQBlAgkBCGNiYWxhbmNlAAUHX2Ftb3VudAULcm9sbG92ZXJGZWUFFmRvVHJhbnNmZXJGZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgUFX3NpemUKX2RpcmVjdGlvbhRfbWluUXVvdGVBc3NldEFtb3VudAxfYWRkVG9NYXJnaW4MX3ByaWNlVXBkYXRlBAx1cGRhdGVPcmFjbGUJAPwHBAUEdGhpcwIMdXBkYXRlT3JhY2xlCQDMCAIFDF9wcmljZVVwZGF0ZQUDbmlsBQNuaWwDCQAAAgUMdXBkYXRlT3JhY2xlBQx1cGRhdGVPcmFjbGUEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQQZW5zdXJlQ2FsbGVkT25jZQkA/AcEBQR0aGlzAhBlbnN1cmVDYWxsZWRPbmNlBQNuaWwFA25pbAMJAAACBRBlbnN1cmVDYWxsZWRPbmNlBRBlbnN1cmVDYWxsZWRPbmNlBAdfdHJhZGVyCQEPZ2V0QWN0dWFsQ2FsbGVyAQUBaQQOX3RyYWRlckFkZHJlc3MJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBBQdfdHJhZGVyAg5JbnZhbGlkIGNhbGxlcgQLcG9zaXRpb25GZWUJAQ5nZXRQb3NpdGlvbkZlZQIFB190cmFkZXIFCl9kaXJlY3Rpb24DAwMDAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBgkBASEBCQELaW5pdGlhbGl6ZWQABgkBBnBhdXNlZAAGCQBnAgAABQVfc2l6ZQYJAGYCAAAFFF9taW5RdW90ZUFzc2V0QW1vdW50BgkBDmlzTWFya2V0Q2xvc2VkAAkAAgECIEludmFsaWQgY2xvc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBBRvbGRQb3NpdGlvblRpbWVzdGFtcAgJAQtnZXRQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24CXzUEDSR0MDcyNzA2NzMzMDkJARVpbnRlcm5hbENsb3NlUG9zaXRpb24IBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQVfc2l6ZQULcG9zaXRpb25GZWUFFF9taW5RdW90ZUFzc2V0QW1vdW50BQxfYWRkVG9NYXJnaW4GBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNzI3MDY3MzMwOQJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA3MjcwNjczMzA5Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDcyNzA2NzMzMDkCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzI3MDY3MzMwOQJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzI3MDY3MzMwOQJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA3MjcwNjczMzA5Al82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDcyNzA2NzMzMDkCXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MjcwNjczMzA5Al84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3MjcwNjczMzA5Al85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzI3MDY3MzMwOQNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3MjcwNjczMzA5A18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3MjcwNjczMzA5A18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzI3MDY3MzMwOQNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzI3MDY3MzMwOQNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDcyNzA2NzMzMDkDXzE1BAtyZWFsaXplZEZlZQgFDSR0MDcyNzA2NzMzMDkDXzE2AwkAZgIFD3Bvc2l0aW9uQmFkRGVidAAACQACAQIqSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnM6IGJhZCBkZWJ0AwkAZwIFFG9sZFBvc2l0aW9uVGltZXN0YW1wCQENbGFzdFRpbWVzdGFtcAAJAAIBAlNJbnZhbGlkIGNsb3NlUG9zaXRpb24gcGFyYW1ldGVyczogd2FpdCBhdCBsZWFzdCAxIGJsb2NrIGJlZm9yZSBjbG9zaW5nIHRoZSBwb3NpdGlvbgQOaXNQYXJ0aWFsQ2xvc2UJAQIhPQIFD25ld1Bvc2l0aW9uU2l6ZQAABA53aXRoZHJhd0Ftb3VudAkAZAIFDm1hcmdpblRvVHJhZGVyBQtyZWFsaXplZEZlZQQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFDndpdGhkcmF3QW1vdW50BA1hbW1OZXdCYWxhbmNlAwkAZgIAAAUKYW1tQmFsYW5jZQAABQphbW1CYWxhbmNlBAd1bnN0YWtlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAg53aXRoZHJhd0xvY2tlZAkAzAgCBQ53aXRoZHJhd0Ftb3VudAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQOcmVmZXJyZXJGZWVBbnkJAPwHBAkBD3JlZmVycmFsQWRkcmVzcwACDWFjY2VwdFBheW1lbnQJAMwIAgUHX3RyYWRlcgUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFC3JlYWxpemVkRmVlBQNuaWwDCQAAAgUOcmVmZXJyZXJGZWVBbnkFDnJlZmVycmVyRmVlQW55BAtyZWZlcnJlckZlZQQHJG1hdGNoMAUOcmVmZXJyZXJGZWVBbnkDCQABAgUHJG1hdGNoMAIDSW50BAF4BQckbWF0Y2gwBQF4CQACAQITSW52YWxpZCByZWZlcnJlckZlZQQNJHQwNzQyODE3NDM1NAkBDWRpc3RyaWJ1dGVGZWUBCQBlAgULcmVhbGl6ZWRGZWUFC3JlZmVycmVyRmVlBAxmZWVUb1N0YWtlcnMIBQ0kdDA3NDI4MTc0MzU0Al8xBApmZWVUb1ZhdWx0CAUNJHQwNzQyODE3NDM1NAJfMgQMZGVwb3NpdFZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFDGRlcG9zaXRWYXVsdAUMZGVwb3NpdFZhdWx0BAlub3RpZnlGZWUJAPwHBAkBDG1pbmVyQWRkcmVzcwACCm5vdGlmeUZlZXMJAMwIAgUHX3RyYWRlcgkAzAgCBQtyZWFsaXplZEZlZQUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAM4IAgMFDmlzUGFydGlhbENsb3NlCQEOdXBkYXRlUG9zaXRpb24GBQdfdHJhZGVyBQ9uZXdQb3NpdGlvblNpemUFEW5ld1Bvc2l0aW9uTWFyZ2luBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUUbmV3UG9zaXRpb25Mc3RVcGRDUEYJAQ1sYXN0VGltZXN0YW1wAAkBDmRlbGV0ZVBvc2l0aW9uAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBCXVwZGF0ZUFtbQgFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgUadG90YWxMb25nT3BlbkludGVyZXN0QWZ0ZXIFG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcgMJAGYCBQ5tYXJnaW5Ub1RyYWRlcgAACQEId2l0aGRyYXcCBQ5fdHJhZGVyQWRkcmVzcwUObWFyZ2luVG9UcmFkZXIFA25pbAkBDXVwZGF0ZUJhbGFuY2UBBQ1hbW1OZXdCYWxhbmNlCQELdHJhbnNmZXJGZWUBBQxmZWVUb1N0YWtlcnMJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEJbGlxdWlkYXRlAwdfdHJhZGVyCl9kaXJlY3Rpb24MX3ByaWNlVXBkYXRlBAx1cGRhdGVPcmFjbGUJAPwHBAUEdGhpcwIMdXBkYXRlT3JhY2xlCQDMCAIFDF9wcmljZVVwZGF0ZQUDbmlsBQNuaWwDCQAAAgUMdXBkYXRlT3JhY2xlBQx1cGRhdGVPcmFjbGUEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQPc3BvdE1hcmdpblJhdGlvCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgMFB190cmFkZXIFCl9kaXJlY3Rpb24FD1BOTF9PUFRJT05fU1BPVAQWbGlxdWlkYXRpb25NYXJnaW5SYXRpbwMJARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQRb3JhY2xlTWFyZ2luUmF0aW8JARZnZXRNYXJnaW5SYXRpb0J5T3B0aW9uAwUHX3RyYWRlcgUKX2RpcmVjdGlvbgURUE5MX09QVElPTl9PUkFDTEUJAQR2bWF4AgUPc3BvdE1hcmdpblJhdGlvBRFvcmFjbGVNYXJnaW5SYXRpbwUPc3BvdE1hcmdpblJhdGlvAwMDAwMJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DBRZsaXF1aWRhdGlvbk1hcmdpblJhdGlvCQEWbWFpbnRlbmFuY2VNYXJnaW5SYXRpbwAHBgkBASEBCQETcmVxdWlyZU9wZW5Qb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24GCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAYJAQ5pc01hcmtldENsb3NlZAAJAAIBAhNVbmFibGUgdG8gbGlxdWlkYXRlBA9vbGRQb3NpdGlvblNpemUICQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uAl8xBA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQ9vbGRQb3NpdGlvblNpemUEFGlzUGFydGlhbExpcXVpZGF0aW9uAwMDCQBmAgUPc3BvdE1hcmdpblJhdGlvCQETbGlxdWlkYXRpb25GZWVSYXRpbwAJAGYCCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8AAAAHCQBmAgUMREVDSU1BTF9VTklUCQEXcGFydGlhbExpcXVpZGF0aW9uUmF0aW8ABwkAZgIJAQRtdWxkAgUPcG9zaXRpb25TaXplQWJzCQEMZ2V0U3BvdFByaWNlAAkBHW1pblBhcnRpYWxMaXF1aWRhdGlvbk5vdGlvbmFsAAcEDSR0MDc3MDI4Nzc0MTUDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgQPbGlxdWlkYXRpb25TaXplCQEDYWJzAQkBG2dldFBhcnRpYWxMaXF1aWRhdGlvbkFtb3VudAIFB190cmFkZXIFD29sZFBvc2l0aW9uU2l6ZQQQbGlxdWlkYXRpb25SYXRpbwkBBGRpdmQCBQ9saXF1aWRhdGlvblNpemUFD3Bvc2l0aW9uU2l6ZUFicwQTbGlxdWlkYXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9saXF1aWRhdGlvblNpemUJAQxnZXRTcG90UHJpY2UACQCUCgIFEGxpcXVpZGF0aW9uUmF0aW8FD2xpcXVpZGF0aW9uU2l6ZQkAlAoCAAAFD3Bvc2l0aW9uU2l6ZUFicwQQbGlxdWlkYXRpb25SYXRpbwgFDSR0MDc3MDI4Nzc0MTUCXzEED2xpcXVpZGF0aW9uU2l6ZQgFDSR0MDc3MDI4Nzc0MTUCXzIEDSR0MDc3NDIxNzgwNzcJARVpbnRlcm5hbENsb3NlUG9zaXRpb24IBQdfdHJhZGVyBQpfZGlyZWN0aW9uAwUUaXNQYXJ0aWFsTGlxdWlkYXRpb24FD2xpcXVpZGF0aW9uU2l6ZQUPcG9zaXRpb25TaXplQWJzCQETbGlxdWlkYXRpb25GZWVSYXRpbwAAAAYHBgQPbmV3UG9zaXRpb25TaXplCAUNJHQwNzc0MjE3ODA3NwJfMQQRbmV3UG9zaXRpb25NYXJnaW4IBQ0kdDA3NzQyMTc4MDc3Al8yBBduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDc3NDIxNzgwNzcCXzMEFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwNzc0MjE3ODA3NwJfNAQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNzc0MjE3ODA3NwJfNQQLcmVhbGl6ZWRQbmwIBQ0kdDA3NzQyMTc4MDc3Al82BA5tYXJnaW5Ub1RyYWRlcggFDSR0MDc3NDIxNzgwNzcCXzcEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NzQyMTc4MDc3Al84BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDA3NzQyMTc4MDc3Al85BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwNzc0MjE3ODA3NwNfMTAEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA3NzQyMTc4MDc3A18xMQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDA3NzQyMTc4MDc3A18xMgQPdG90YWxTaG9ydEFmdGVyCAUNJHQwNzc0MjE3ODA3NwNfMTMEGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyCAUNJHQwNzc0MjE3ODA3NwNfMTQEG3RvdGFsU2hvcnRPcGVuSW50ZXJlc3RBZnRlcggFDSR0MDc3NDIxNzgwNzcDXzE1BBJsaXF1aWRhdGlvblBlbmFsdHkIBQ0kdDA3NzQyMTc4MDc3A18xNgQPZmVlVG9MaXF1aWRhdG9yCQBpAgUSbGlxdWlkYXRpb25QZW5hbHR5AAIECmZlZVRvVmF1bHQJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNbmV3QW1tQmFsYW5jZQMJAGYCAAAFCmFtbUJhbGFuY2UAAAUKYW1tQmFsYW5jZQQLbG9ja0JhZERlYnQDCQBmAgUPcG9zaXRpb25CYWREZWJ0AAAEC2xvY2tCYWREZWJ0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkAZAIFD3Bvc2l0aW9uQmFkRGVidAUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQtsb2NrQmFkRGVidAULbG9ja0JhZERlYnQFA25pbAkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgUDbmlsAwkAAAIFC2xvY2tCYWREZWJ0BQtsb2NrQmFkRGVidAQHdW5zdGFrZQkA/AcECQEMdmF1bHRBZGRyZXNzAAIOd2l0aGRyYXdMb2NrZWQJAMwIAgUSbGlxdWlkYXRpb25QZW5hbHR5BQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJAQx2YXVsdEFkZHJlc3MAAgdhZGRGcmVlBQNuaWwJAMwIAgkBD0F0dGFjaGVkUGF5bWVudAIJAQpxdW90ZUFzc2V0AAUKZmVlVG9WYXVsdAUDbmlsAwkAAAIFEGRlcG9zaXRJbnN1cmFuY2UFEGRlcG9zaXRJbnN1cmFuY2UEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCBQdfdHJhZGVyCQDMCAIFF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsBQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIDBRRpc1BhcnRpYWxMaXF1aWRhdGlvbgkBDnVwZGF0ZVBvc2l0aW9uBgUHX3RyYWRlcgUPbmV3UG9zaXRpb25TaXplBRFuZXdQb3NpdGlvbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTHN0VXBkQ1BGCQENbGFzdFRpbWVzdGFtcAAJAQ5kZWxldGVQb3NpdGlvbgIFB190cmFkZXIFCl9kaXJlY3Rpb24JAQl1cGRhdGVBbW0IBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIFGnRvdGFsTG9uZ09wZW5JbnRlcmVzdEFmdGVyBRt0b3RhbFNob3J0T3BlbkludGVyZXN0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUPZmVlVG9MaXF1aWRhdG9yCQENdXBkYXRlQmFsYW5jZQEFDW5ld0FtbUJhbGFuY2UJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4JAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEKcGF5RnVuZGluZwEMX3ByaWNlVXBkYXRlBAx1cGRhdGVPcmFjbGUJAPwHBAUEdGhpcwIMdXBkYXRlT3JhY2xlCQDMCAIFDF9wcmljZVVwZGF0ZQUDbmlsBQNuaWwDCQAAAgUMdXBkYXRlT3JhY2xlBQx1cGRhdGVPcmFjbGUEBHN5bmMJAPwHBAUEdGhpcwIZc3luY1Rlcm1pbmFsUHJpY2VUb09yYWNsZQUDbmlsBQNuaWwDCQAAAgUEc3luYwUEc3luYwQVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEZbmV4dEZ1bmRpbmdCbG9ja1RpbWVzdGFtcAADAwMJAGYCBRVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJAQ1sYXN0VGltZXN0YW1wAAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQkArAICCQCsAgIJAKwCAgIhSW52YWxpZCBmdW5kaW5nIGJsb2NrIHRpbWVzdGFtcDogCQCkAwEJAQ1sYXN0VGltZXN0YW1wAAIDIDwgCQCkAwEFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQPdW5kZXJseWluZ1ByaWNlCQEOZ2V0T3JhY2xlUHJpY2UABA0kdDA4MDI5NTgwMzczCQEKZ2V0RnVuZGluZwAEFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwODAyOTU4MDM3MwJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDgwMjk1ODAzNzMCXzIEDnByZW1pdW1Ub1ZhdWx0CAUNJHQwODAyOTU4MDM3MwJfMwQTZG9QYXlGdW5kaW5nVG9WYXVsdAMJAGYCBQ5wcmVtaXVtVG9WYXVsdAAABBNkb1BheUZ1bmRpbmdUb1ZhdWx0CQD8BwQJAQx2YXVsdEFkZHJlc3MAAhVleGNoYW5nZUZyZWVBbmRMb2NrZWQJAMwIAgkBAS0BBQ5wcmVtaXVtVG9WYXVsdAUDbmlsBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUTZG9QYXlGdW5kaW5nVG9WYXVsdAUTZG9QYXlGdW5kaW5nVG9WYXVsdAkBDXVwZGF0ZUZ1bmRpbmcFCQBkAgUVZnVuZGluZ0Jsb2NrVGltZXN0YW1wCQEUZnVuZGluZ1BlcmlvZFNlY29uZHMACQBkAgkBI2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUTbG9uZ1ByZW1pdW1GcmFjdGlvbgkAZAIJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ABRRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UJAQRkaXZkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FD3VuZGVybHlpbmdQcmljZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQx1cGRhdGVPcmFjbGUBDF9wcmljZVVwZGF0ZQMJAAACCQEKb3JhY2xlTW9kZQAFDE9SQUNMRV9QTEFJTgUDbmlsBAxwcmljZVVwZGF0ZXMJALwJAgUMX3ByaWNlVXBkYXRlAgI6OgQKYmFzZU9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQENZ2V0T3JhY2xlRGF0YQEFDGtfYmFzZU9yYWNsZQIZTm8gYmFzZSBhc3NldCBvcmFjbGUgZGF0YQQRYmFzZU9yYWNsZUFkZHJlc3MIBQpiYXNlT3JhY2xlAl8xBBJkb1VwZGF0ZUJhc2VPcmFjbGUJAPwHBAURYmFzZU9yYWNsZUFkZHJlc3MCCnVwZGF0ZURhdGEJAMwIAgkAkQMCBQxwcmljZVVwZGF0ZXMAAAUDbmlsBQNuaWwDCQAAAgUSZG9VcGRhdGVCYXNlT3JhY2xlBRJkb1VwZGF0ZUJhc2VPcmFjbGUEC3F1b3RlT3JhY2xlCQENZ2V0T3JhY2xlRGF0YQEFDWtfcXVvdGVPcmFjbGUEE2RvVXBkYXRlUXVvdGVPcmFjbGUDCQEJaXNEZWZpbmVkAQULcXVvdGVPcmFjbGUEDHF1b3RlT3JhY2xlVgkBBXZhbHVlAQULcXVvdGVPcmFjbGUEEnF1b3RlT3JhY2xlQWRkcmVzcwgFDHF1b3RlT3JhY2xlVgJfMQQTZG9VcGRhdGVRdW90ZU9yYWNsZQkA/AcEBRJxdW90ZU9yYWNsZUFkZHJlc3MCCnVwZGF0ZURhdGEJAMwIAgkAkQMCBQxwcmljZVVwZGF0ZXMAAQUDbmlsBQNuaWwDCQAAAgUTZG9VcGRhdGVRdW90ZU9yYWNsZQUTZG9VcGRhdGVRdW90ZU9yYWNsZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuBQNuaWwDCQAAAgUTZG9VcGRhdGVRdW90ZU9yYWNsZQUTZG9VcGRhdGVRdW90ZU9yYWNsZQUDbmlsCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUABAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEDSR0MDgyMTkwODI1NTYJARRnZXRTeW5jVGVybWluYWxQcmljZQMJAQ5nZXRPcmFjbGVQcmljZQAFB19xdEFzdFIFB19ic0FzdFIEE25ld1F1b3RlQXNzZXRXZWlnaHQIBQ0kdDA4MjE5MDgyNTU2Al8xBBJuZXdCYXNlQXNzZXRXZWlnaHQIBQ0kdDA4MjE5MDgyNTU2Al8yBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwODIxOTA4MjU1NgJfMwQQbWFyZ2luVG9WYXVsdEFkagMDCQBmAgAABQ1tYXJnaW5Ub1ZhdWx0CQBmAgkBA2FicwEFDW1hcmdpblRvVmF1bHQJAQhjYmFsYW5jZQAHCQEBLQEJAQhjYmFsYW5jZQAFDW1hcmdpblRvVmF1bHQEDWRvRXhjaGFuZ2VQbkwDCQECIT0CBRBtYXJnaW5Ub1ZhdWx0QWRqAAAEDWRvRXhjaGFuZ2VQbkwJAPwHBAkBDHZhdWx0QWRkcmVzcwACFWV4Y2hhbmdlRnJlZUFuZExvY2tlZAkAzAgCBRBtYXJnaW5Ub1ZhdWx0QWRqBQNuaWwFA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQ1kb0V4Y2hhbmdlUG5MBQ1kb0V4Y2hhbmdlUG5MCQDOCAIJAQ11cGRhdGVCYWxhbmNlAQkAZAIJAQhjYmFsYW5jZQAFEG1hcmdpblRvVmF1bHRBZGoJARB1cGRhdGVBbW1XZWlnaHRzAgUTbmV3UXVvdGVBc3NldFdlaWdodAUSbmV3QmFzZUFzc2V0V2VpZ2h0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGVuc3VyZUNhbGxlZE9uY2UAAwkBAiE9AggFAWkGY2FsbGVyBQR0aGlzCQACAQIiSW52YWxpZCBzYXZlQ3VycmVudFR4SWQgcGFyYW1ldGVycwQEdHhJZAkA2AQBCAUBaQ10cmFuc2FjdGlvbklkBAZsYXN0VHgJAQt2YWx1ZU9yRWxzZQIJAJ0IAgUEdGhpcwUIa19sYXN0VHgCAAMJAQIhPQIFBmxhc3RUeAUEdHhJZAkAzAgCCQELU3RyaW5nRW50cnkCBQhrX2xhc3RUeAUEdHhJZAUDbmlsCQACAQIpQ2FuIG5vdCBjYWxsIHZBTU0gbWV0aG9kcyB0d2ljZSBpbiBvbmUgdHgBaQEPbWlncmF0ZVBvc2l0aW9uAQdfdHJhZGVyBA9wb3NpdGlvblNpemVPcHQJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIDAwkBCWlzRGVmaW5lZAEFD3Bvc2l0aW9uU2l6ZU9wdAkBCWlzRGVmaW5lZAEJAKYIAQUHX3RyYWRlcgcEBXBTaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUHX3RyYWRlcgQHcE1hcmdpbgkBEUBleHRyTmF0aXZlKDEwNTApAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgQJcE5vdGlvbmFsCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyBAlwRnJhY3Rpb24JARFAZXh0ck5hdGl2ZSgxMDUwKQIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIECnBUaW1lc3RhbXAJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQdfdHJhZGVyCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAQEcEZlZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBQ1rX3Bvc2l0aW9uRmVlBQdfdHJhZGVyCQEDZmVlAAQJcFNlcXVlbmNlCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRJrX3Bvc2l0aW9uU2VxdWVuY2UFB190cmFkZXIECnBEaXJlY3Rpb24JAQxnZXREaXJlY3Rpb24BBQVwU2l6ZQQLcG9zaXRpb25LZXkJAKwCAgkArAICBQdfdHJhZGVyAgFfCQCkAwEFCnBEaXJlY3Rpb24JAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUOa19wb3NpdGlvblNpemUFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUQa19wb3NpdGlvbk1hcmdpbgUHX3RyYWRlcgkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQdfdHJhZGVyCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDWtfcG9zaXRpb25GZWUFB190cmFkZXIJAMwIAgkBC0RlbGV0ZUVudHJ5AQkBDnRvQ29tcG9zaXRlS2V5AgUSa19wb3NpdGlvblNlcXVlbmNlBQdfdHJhZGVyCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQULcG9zaXRpb25LZXkFBXBTaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQtwb3NpdGlvbktleQUHcE1hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAULcG9zaXRpb25LZXkFCXBOb3Rpb25hbAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgULcG9zaXRpb25LZXkFCXBGcmFjdGlvbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUea19wb3NpdGlvbkxhc3RVcGRhdGVkVGltZXN0YW1wBQtwb3NpdGlvbktleQUKcFRpbWVzdGFtcAkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUNa19wb3NpdGlvbkZlZQULcG9zaXRpb25LZXkFBHBGZWUJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFEmtfcG9zaXRpb25TZXF1ZW5jZQULcG9zaXRpb25LZXkFCXBTZXF1ZW5jZQUDbmlsCQACAQkArAICAhdOb3RoaW5nIHRvIG1pZ3JhdGUgZm9yIAUHX3RyYWRlcgFpASd2aWV3X2NhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQDB190cmFkZXIKX2RpcmVjdGlvbgxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA0kdDA4NjM1MDg2NDg2CQELZ2V0UG9zaXRpb24CBQdfdHJhZGVyBQpfZGlyZWN0aW9uBAxwb3NpdGlvblNpemUIBQ0kdDA4NjM1MDg2NDg2Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDg2MzUwODY0ODYCXzIEA3BvbggFDSR0MDg2MzUwODY0ODYCXzMEEXBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwODYzNTA4NjQ4NgJfNAQRcG9zaXRpb25UaW1lc3RhbXAIBQ0kdDA4NjM1MDg2NDg2Al81BA0kdDA4NjQ4OTg2NjAyCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwDBQdfdHJhZGVyBQpfZGlyZWN0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDA4NjQ4OTg2NjAyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwODY0ODk4NjYwMgJfMgQNJHQwODY2MDU4NjgyOQkBMGNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnRBbmRSb2xsb3ZlckZlZQUFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBRFwb3NpdGlvblRpbWVzdGFtcAUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwODY2MDU4NjgyOQJfMQQHYmFkRGVidAgFDSR0MDg2NjA1ODY4MjkCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwODY2MDU4NjgyOQJfMwQLcm9sbG92ZXJGZWUIBQ0kdDA4NjYwNTg2ODI5Al80BA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAECXNwb3RQcmljZQkBDGdldFNwb3RQcmljZQAJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkBAXMBBQxyZW1haW5NYXJnaW4JAQFzAQUOZnVuZGluZ1BheW1lbnQJAQFzAQkBDmdldE1hcmdpblJhdGlvAgUHX3RyYWRlcgUKX2RpcmVjdGlvbgkBAXMBBQ11bnJlYWxpemVkUG5sCQEBcwEFB2JhZERlYnQJAQFzAQUQcG9zaXRpb25Ob3Rpb25hbAkBAXMBBQtyb2xsb3ZlckZlZQkBAXMBBQ91bmRlcmx5aW5nUHJpY2UJAQFzAQUJc3BvdFByaWNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBFXZpZXdfZ2V0UGVnQWRqdXN0Q29zdAEGX3ByaWNlBAdfcXRBc3RSCQEGcXRBc3RSAAQHX2JzQXN0UgkBBmJzQXN0UgAEBnJlc3VsdAkBFGdldFN5bmNUZXJtaW5hbFByaWNlAwUGX3ByaWNlBQdfcXRBc3RSBQdfYnNBc3RSCQACAQkApAMBCAUGcmVzdWx0Al8zAWkBGHZpZXdfZ2V0VGVybWluYWxBbW1QcmljZQAEDSR0MDg3NjgyODc3NjMJARNnZXRUZXJtaW5hbEFtbVN0YXRlAAQZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQgFDSR0MDg3NjgyODc3NjMCXzEEGHRlcm1pbmFsQmFzZUFzc2V0UmVzZXJ2ZQgFDSR0MDg3NjgyODc3NjMCXzIEBXByaWNlCQEEZGl2ZAIJAQRtdWxkAgUZdGVybWluYWxRdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0VwAJAQRtdWxkAgUYdGVybWluYWxCYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RXAAkAAgEJAKQDAQUFcHJpY2UBaQEPdmlld19nZXRGdW5kaW5nAQxfcHJpY2VVcGRhdGUEDHVwZGF0ZU9yYWNsZQkA/AcEBQR0aGlzAgx1cGRhdGVPcmFjbGUJAMwIAgUMX3ByaWNlVXBkYXRlBQNuaWwFA25pbAMJAAACBQx1cGRhdGVPcmFjbGUFDHVwZGF0ZU9yYWNsZQQEc3luYwkA/AcEBQR0aGlzAhlzeW5jVGVybWluYWxQcmljZVRvT3JhY2xlBQNuaWwFA25pbAMJAAACBQRzeW5jBQRzeW5jBA91bmRlcmx5aW5nUHJpY2UJAQ5nZXRPcmFjbGVQcmljZQAEDSR0MDg4NDE1ODg0OTMJAQpnZXRGdW5kaW5nAAQUc2hvcnRQcmVtaXVtRnJhY3Rpb24IBQ0kdDA4ODQxNTg4NDkzAl8xBBNsb25nUHJlbWl1bUZyYWN0aW9uCAUNJHQwODg0MTU4ODQ5MwJfMgQOcHJlbWl1bVRvVmF1bHQIBQ0kdDA4ODQxNTg4NDkzAl8zBAtsb25nRnVuZGluZwkBBGRpdmQCBRNsb25nUHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UEDHNob3J0RnVuZGluZwkBBGRpdmQCBRRzaG9ydFByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQACAQkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFC2xvbmdGdW5kaW5nCQEBcwEFDHNob3J0RnVuZGluZwkBAXMBCQEMZ2V0U3BvdFByaWNlAAkBAXMBCQEOZ2V0T3JhY2xlUHJpY2UACQEBcwEFDnByZW1pdW1Ub1ZhdWx0CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBEGNvbXB1dGVTcG90UHJpY2UABARzeW5jCQD8BwQFBHRoaXMCGXN5bmNUZXJtaW5hbFByaWNlVG9PcmFjbGUFA25pbAUDbmlsAwkAAAIFBHN5bmMFBHN5bmMEBnJlc3VsdAkBDGdldFNwb3RQcmljZQAJAJQKAgUDbmlsBQZyZXN1bHQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQEfY29tcHV0ZUZlZUZvclRyYWRlcldpdGhBcnRpZmFjdAIHX3RyYWRlcgtfYXJ0aWZhY3RJZAQGcmVzdWx0CQEYZ2V0Rm9yVHJhZGVyV2l0aEFydGlmYWN0AgUHX3RyYWRlcgULX2FydGlmYWN0SWQJAJQKAgUDbmlsBQZyZXN1bHQBAnR4AQZ2ZXJpZnkABA5jb29yZGluYXRvclN0cgkAnQgCBQR0aGlzBRRrX2Nvb3JkaW5hdG9yQWRkcmVzcwMJAQlpc0RlZmluZWQBBQ5jb29yZGluYXRvclN0cgQFYWRtaW4JAJ0IAgkBEUBleHRyTmF0aXZlKDEwNjIpAQkBBXZhbHVlAQUOY29vcmRpbmF0b3JTdHIFD2tfYWRtaW5fYWRkcmVzcwMJAQlpc0RlZmluZWQBBQVhZG1pbgkBC3ZhbHVlT3JFbHNlAgkAmwgCCQERQGV4dHJOYXRpdmUoMTA2MikBCQEFdmFsdWUBBQVhZG1pbgkArAICCQCsAgIJAKwCAgIHc3RhdHVzXwkApQgBBQR0aGlzAgFfCQDYBAEIBQJ0eAJpZAcJAAIBAi51bmFibGUgdG8gdmVyaWZ5OiBhZG1pbiBub3Qgc2V0IGluIGNvb3JkaW5hdG9yCQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACAUCdHgPc2VuZGVyUHVibGljS2V5YECwJg==", "height": 2662877, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: GwEgQXkPnFb69CkDRTZ4oFjaTPctAKTeRXeJXo5W6T6a Next: 5v8SfJyaaVRCquDrh5b8GNDzgBgYmdyUeD8tmDizqPkf Diff:
OldNewDifferences
10851085
10861086
10871087 @Callable(bN)
1088-func changeSettings (gv,gw,gx,gy,eG,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,hy,hz,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gy))
1088+func changeSettings (gv,gw,gx,gy,eG,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,hy,hz,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gy))
10891089 then true
10901090 else (0 >= gv))
10911091 then true
10931093 then true
10941094 else (0 >= gI))
10951095 then true
1096- else (gI > ay))
1097- then true
1098- else (gv >= gI))
1096+ else (gv > gI))
10991097 then true
11001098 else (0 >= gw))
11011099 then true
11421140
11431141
11441142 @Callable(bN)
1145-func initialize (cz,cA,gy,gv,gw,gx,eG,hy,hz,hA,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
1143+func initialize (cz,cA,gy,gv,gw,gx,eG,hy,hz,hA,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
11461144 then true
11471145 else (0 >= cA))
11481146 then true
11531151 else (gv > ay))
11541152 then true
11551153 else (0 >= gI))
1156- then true
1157- else (gI > ay))
11581154 then true
11591155 else (gv > gI))
11601156 then true
Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_baseOracle"
55
66 let b = "k_quoteOracle"
77
88 let c = "k_balance"
99
1010 let d = "k_sequence"
1111
1212 let e = "k_positionSize"
1313
1414 let f = "k_positionMargin"
1515
1616 let g = "k_positionOpenNotional"
1717
1818 let h = "k_positionFraction"
1919
2020 let i = "k_positionSequence"
2121
2222 let j = "k_positionFee"
2323
2424 let k = "k_positionTimestamp"
2525
2626 let l = "k_initialized"
2727
2828 let m = "k_paused"
2929
3030 let n = "k_closeOnly"
3131
3232 let o = "k_fee"
3333
3434 let p = "k_rollover_fee"
3535
3636 let q = "k_fundingPeriod"
3737
3838 let r = "k_initMarginRatio"
3939
4040 let s = "k_minInitMarginRatio"
4141
4242 let t = "k_mmr"
4343
4444 let u = "k_liquidationFeeRatio"
4545
4646 let v = "k_partLiquidationRatio"
4747
4848 let w = "k_spreadLimit"
4949
5050 let x = "k_maxPriceImpact"
5151
5252 let y = "k_maxPriceSpread"
5353
5454 let z = "k_maxOpenNotional"
5555
5656 let A = "k_feeToStakersPercent"
5757
5858 let B = "k_maxOracleDelay"
5959
6060 let C = "k_fundingMode"
6161
6262 let D = "k_oracleMode"
6363
6464 let E = "k_positionMode"
6565
6666 let F = "k_minLiquidationNotional"
6767
6868 let G = "k_latestLongPremiumFraction"
6969
7070 let H = "k_latestShortPremiumFraction"
7171
7272 let I = "k_nextFundingBlockMinTimestamp"
7373
7474 let J = "k_longFundingRate"
7575
7676 let K = "k_shortFundingRate"
7777
7878 let L = "k_qtAstR"
7979
8080 let M = "k_bsAstR"
8181
8282 let N = "k_qtAstW"
8383
8484 let O = "k_bsAstW"
8585
8686 let P = "k_totalPositionSize"
8787
8888 let Q = "k_totalLongPositionSize"
8989
9090 let R = "k_totalShortPositionSize"
9191
9292 let S = "k_openInterestNotional"
9393
9494 let T = "k_openInterestShort"
9595
9696 let U = "k_openInterestLong"
9797
9898 let V = "k_lastTx"
9999
100100 let W = "k_coordinatorAddress"
101101
102102 let X = "k_vault_address"
103103
104104 let Y = "k_admin_address"
105105
106106 let Z = "k_quote_asset"
107107
108108 let aa = "k_staking_address"
109109
110110 let ab = "k_miner_address"
111111
112112 let ac = "k_orders_address"
113113
114114 let ad = "k_referral_address"
115115
116116 let ae = "k_nft_manager_address"
117117
118118 func af (ag,ah) = ((ag + "_") + ah)
119119
120120
121121 func ai () = valueOrErrorMessage(addressFromString(getStringValue(this, W)), "Coordinator not set")
122122
123123
124124 func aj () = addressFromString(getStringValue(ai(), Y))
125125
126126
127127 func ak () = fromBase58String(getStringValue(ai(), Z))
128128
129129
130130 func al () = valueOrErrorMessage(addressFromString(getStringValue(ai(), aa)), "Staking not set")
131131
132132
133133 func am () = valueOrErrorMessage(addressFromString(getStringValue(ai(), X)), "Vault not set")
134134
135135
136136 func an () = valueOrErrorMessage(addressFromString(getStringValue(ai(), ab)), "Miner not set")
137137
138138
139139 func ao () = valueOrErrorMessage(addressFromString(getStringValue(ai(), ac)), "Orders not set")
140140
141141
142142 func ap () = valueOrErrorMessage(addressFromString(getStringValue(ai(), ad)), "Referral not set")
143143
144144
145145 func aq () = valueOrErrorMessage(addressFromString(getStringValue(ai(), ae)), "NFT Manager not set")
146146
147147
148148 let ar = "k_token_param"
149149
150150 let as = "k_token_type"
151151
152152 let at = "fee_reduction"
153153
154154 let au = 1
155155
156156 let av = 2
157157
158158 let aw = 1000
159159
160160 let ax = 6
161161
162162 let ay = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
163163
164164 let az = (525600 * ay)
165165
166166 let aA = (86400 * ay)
167167
168168 let aB = 1
169169
170170 let aC = 2
171171
172172 let aD = 1
173173
174174 let aE = 2
175175
176176 let aF = 1
177177
178178 let aG = 2
179179
180180 let aH = 1
181181
182182 let aI = 2
183183
184184 func aJ (aK) = (toString(aK) + ",")
185185
186186
187187 func aL (aK,aM) = fraction(aK, ay, aM, HALFEVEN)
188188
189189
190190 func aN (aK,aM) = fraction(aK, aM, ay, HALFEVEN)
191191
192192
193193 func aO (aK,aM) = fraction(aK, toBigInt(ay), aM, HALFEVEN)
194194
195195
196196 func aP (aK,aM) = fraction(aK, aM, toBigInt(ay), HALFEVEN)
197197
198198
199199 func aQ (aK) = if ((aK > 0))
200200 then aK
201201 else -(aK)
202202
203203
204204 func aR (aK,aM) = if ((aK >= aM))
205205 then aK
206206 else aM
207207
208208
209209 func aS (aT) = valueOrErrorMessage(getInteger(this, aT), ("no value for " + aT))
210210
211211
212212 func aU (aT,aV) = valueOrElse(getInteger(this, aT), aV)
213213
214214
215215 func aW (ah,ag) = {
216216 let aX = valueOrErrorMessage(getString(ah, ag), ("No value for key " + ag))
217217 aX
218218 }
219219
220220
221221 func aY (ah,ag) = {
222222 let aX = valueOrErrorMessage(getInteger(ah, ag), ("No value for key " + ag))
223223 aX
224224 }
225225
226226
227227 func aZ () = aS(c)
228228
229229
230230 func ba () = aU(c, 0)
231231
232232
233233 func bb () = aS(o)
234234
235235
236236 func bc () = aS(p)
237237
238238
239239 func bd () = aS(r)
240240
241241
242242 func be () = aU(s, ay)
243243
244244
245245 func bf () = aS(L)
246246
247247
248248 func bg () = aU(L, 0)
249249
250250
251251 func bh () = aS(M)
252252
253253
254254 func bi () = aU(M, 0)
255255
256256
257257 func bj () = aU(N, ay)
258258
259259
260260 func bk () = aU(O, ay)
261261
262262
263263 func bl () = aS(P)
264264
265265
266266 func bm () = aS(S)
267267
268268
269269 func bn () = aS(T)
270270
271271
272272 func bo () = aS(U)
273273
274274
275275 func bp () = aS(I)
276276
277277
278278 func bq () = aS(q)
279279
280280
281281 func br () = (bq() * ay)
282282
283283
284284 func bs () = (bq() * aw)
285285
286286
287287 func bt () = aS(t)
288288
289289
290290 func bu () = aS(u)
291291
292292
293293 func bv () = aS(v)
294294
295295
296296 func bw () = aS(w)
297297
298298
299299 func bx () = aS(x)
300300
301301
302302 func by () = aS(y)
303303
304304
305305 func bz () = aS(z)
306306
307307
308308 func bA () = aS(G)
309309
310310
311311 func bB () = aS(H)
312312
313313
314314 func bC () = aS(R)
315315
316316
317317 func bD () = aS(Q)
318318
319319
320320 func bE () = aU(d, 0)
321321
322322
323323 func bF () = aS(A)
324324
325325
326326 func bG () = aS(B)
327327
328328
329329 func bH () = aU(C, aD)
330330
331331
332332 func bI () = aU(D, aF)
333333
334334
335335 func bJ () = aU(E, aH)
336336
337337
338338 func bK () = aU(F, (10 * ay))
339339
340340
341341 func bL () = lastBlock.timestamp
342342
343343
344344 func bM (bN) = valueOrElse(getString(ao(), "k_sender"), toString(bN.caller))
345345
346346
347347 func bO (bP,bQ,bR) = {
348348 let bS = (bP - bQ)
349349 if (if (bR)
350350 then (0 > bS)
351351 else false)
352352 then throw(((("Invalid margin: " + toString(bP)) + " < ") + toString(bQ)))
353353 else if (if (!(bR))
354354 then (bS >= 0)
355355 else false)
356356 then throw(((("Invalid margin: " + toString(bP)) + " > ") + toString(bQ)))
357357 else true
358358 }
359359
360360
361361 func bT (bU) = if ((bU == 0))
362362 then throw("Should not be called with _positionSize == 0")
363363 else if ((bU > 0))
364364 then bA()
365365 else bB()
366366
367367
368368 func bV (bW,bX) = {
369369 let bY = ((bW + "_") + toString(bX))
370370 let bZ = getInteger(this, af(e, bY))
371371 let ca = bZ
372372 if ($isInstanceOf(ca, "Int"))
373373 then {
374374 let cb = ca
375375 $Tuple5(cb, getIntegerValue(this, af(f, bY)), getIntegerValue(this, af(g, bY)), getIntegerValue(this, af(h, bY)), getIntegerValue(this, af(k, bY)))
376376 }
377377 else $Tuple5(0, 0, 0, 0, 0)
378378 }
379379
380380
381381 func cc (bU) = if ((0 > bU))
382382 then av
383383 else au
384384
385385
386386 func cd (bW,bX) = {
387387 let bY = ((bW + "_") + toString(bX))
388388 let ce = getInteger(this, af(j, bY))
389389 let ca = ce
390390 if ($isInstanceOf(ca, "Int"))
391391 then {
392392 let cf = ca
393393 cf
394394 }
395395 else bb()
396396 }
397397
398398
399399 func cg (bW,bX) = if ((bV(bW, bX)._1 == 0))
400400 then throw("No open position")
401401 else true
402402
403403
404404 func ch (ci) = {
405405 let cj = getString(this, ci)
406406 if (if (isDefined(cj))
407407 then (value(cj) != "")
408408 else false)
409409 then {
410410 let ck = split(value(cj), ",")
411411 let cl = valueOrErrorMessage(addressFromString(ck[0]), ("Invalid oracle address in: " + value(cj)))
412412 let cm = ck[1]
413413 let cn = ck[2]
414414 let co = ck[3]
415415 $Tuple4(cl, cm, cn, co)
416416 }
417417 else unit
418418 }
419419
420420
421421 func cp () = valueOrElse(getBoolean(this, l), false)
422422
423423
424424 func cq () = valueOrElse(getBoolean(this, m), false)
425425
426426
427427 func cr () = valueOrElse(getBoolean(this, n), false)
428428
429429
430430 func cs (ct,cu,cv) = if (ct)
431431 then {
432432 let cw = (bh() - cv)
433433 if ((0 >= cw))
434434 then throw("Tx lead to base asset reserve <= 0, revert")
435435 else $Tuple3((bf() + cu), cw, (bl() + cv))
436436 }
437437 else {
438438 let cx = (bf() - cu)
439439 if ((0 >= cx))
440440 then throw("Tx lead to base quote reserve <= 0, revert")
441441 else $Tuple3(cx, (bh() + cv), (bl() - cv))
442442 }
443443
444444
445445 func cy (cz,cA) = {
446446 let cB = toBigInt(cz)
447447 let cC = toBigInt(cA)
448448 aP(cB, cC)
449449 }
450450
451451
452452 func cD (ct,cu) = {
453453 let cz = bf()
454454 let cA = bh()
455455 let cE = bj()
456456 let cF = bk()
457457 let cG = aL(cu, cE)
458458 let aT = cy(cz, cA)
459459 let cH = if (ct)
460460 then (cz + cG)
461461 else (cz - cG)
462462 let cI = toInt(aO(aT, toBigInt(cH)))
463463 let cJ = aQ((cI - cA))
464464 let cK = if (ct)
465465 then cJ
466466 else -(cJ)
467467 let cL = cs(ct, cG, cJ)
468468 let cM = cL._1
469469 let cN = cL._2
470470 let cO = cL._3
471471 let cP = aL(aN(cz, cE), aN(cA, cF))
472472 let cQ = aL(cu, cJ)
473473 let cR = aQ((cP - cQ))
474474 let cS = (ay - aL(cP, (cP + cR)))
475475 let cT = bx()
476476 if ((cS > cT))
477477 then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(cz)) + " before base asset: ") + toString(cA)) + " quote asset amount to exchange: ") + toString(cu)) + " price before: ") + toString(cP)) + " marketPrice: ") + toString(cQ)))
478478 else $Tuple4(cK, cM, cN, cO)
479479 }
480480
481481
482482 func cU (cV,cW) = {
483483 let cX = ((((bL() - cW) / 1000) / 60) * ay)
484484 let cY = aL(aN(aN(cV, cX), bc()), az)
485485 cY
486486 }
487487
488488
489489 func cZ (da,cV,db,cW,dc) = {
490490 let dd = if ((da != 0))
491491 then {
492492 let de = bT(da)
493493 aN((de - db), da)
494494 }
495495 else 0
496496 let cY = cU(cV, cW)
497497 let df = (((dc - cY) - dd) + cV)
498498 let dg = if ((0 > df))
499499 then $Tuple2(0, aQ(df))
500500 else $Tuple2(aQ(df), 0)
501501 let dh = dg._1
502502 let di = dg._2
503503 $Tuple4(dh, di, dd, cY)
504504 }
505505
506506
507507 func dj (ct,cv,dk,dl,dm,dn,do) = {
508508 let cP = aL(aN(dl, dm), aN(dn, do))
509509 if ((cv == 0))
510510 then throw("Invalid base asset amount")
511511 else {
512512 let aT = cy(dl, dn)
513513 let dp = if (ct)
514514 then (dn + cv)
515515 else (dn - cv)
516516 let dq = toInt(aO(aT, toBigInt(dp)))
517517 let dr = aQ((dq - dl))
518518 let ds = aN(dr, dm)
519519 let cT = bx()
520520 let dt = cs(!(ct), dr, cv)
521521 let cM = dt._1
522522 let cN = dt._2
523523 let cO = dt._3
524524 let cQ = aL(ds, cv)
525525 let cR = aQ((cP - cQ))
526526 let cS = (ay - aL(cP, (cP + cR)))
527527 if (if ((cS > cT))
528528 then dk
529529 else false)
530530 then throw(((((((((((((("Price impact " + toString(cS)) + " > max price impact ") + toString(cT)) + " before quote asset: ") + toString(dl)) + " before base asset: ") + toString(dn)) + " base asset amount to exchange: ") + toString(cv)) + " price before: ") + toString(cP)) + " market price: ") + toString(cQ)))
531531 else $Tuple7(ds, cM, cN, cO, (bD() - (if (ct)
532532 then aQ(cv)
533533 else 0)), (bC() - (if (!(ct))
534534 then aQ(cv)
535535 else 0)), cS)
536536 }
537537 }
538538
539539
540540 func du (ct,cv,dk) = dj(ct, cv, dk, bf(), bj(), bh(), bk())
541541
542542
543543 func dv (dw,cm,cn) = {
544544 let dx = valueOrErrorMessage(getInteger(dw, cm), ((("Can not get oracle price. Oracle: " + toString(dw)) + " key: ") + cm))
545545 if ((cn != ""))
546546 then {
547547 let dy = height
548548 let dz = valueOrErrorMessage(getInteger(dw, cn), ((("Can not get oracle block. Oracle: " + toString(dw)) + " key: ") + cn))
549549 if (((dy - dz) > bG()))
550550 then throw(((("Oracle stale data. Last oracle block: " + toString(dz)) + " current block: ") + toString(dy)))
551551 else dx
552552 }
553553 else dx
554554 }
555555
556556
557557 func dA () = {
558558 let dB = valueOrErrorMessage(ch(a), "No base asset oracle data")
559559 let dC = dv(dB._1, dB._2, dB._3)
560560 let dD = ch(b)
561561 let dE = if (isDefined(dD))
562562 then {
563563 let dF = value(dD)
564564 dv(dF._1, dF._2, dF._3)
565565 }
566566 else ay
567567 aL(dC, dE)
568568 }
569569
570570
571571 func dG () = {
572572 let dB = valueOrErrorMessage(ch(a), "No base asset oracle data")
573573 let dw = dB._1
574574 let co = dB._4
575575 if ((co != ""))
576576 then {
577577 let dH = valueOrErrorMessage(getBoolean(dw, co), ((("Can not get oracle is open/closed. Oracle: " + toString(dw)) + " key: ") + co))
578578 !(dH)
579579 }
580580 else false
581581 }
582582
583583
584584 func dI (dJ,dl,dn,cE,cF) = {
585585 let dK = aL(aN(dl, cE), aN(dn, cF))
586586 let dL = aL((dJ + dK), (2 * ay))
587587 let dI = aL(aQ((dJ - dK)), dL)
588588 dI
589589 }
590590
591591
592592 func dM (dl,dn) = {
593593 let dN = dA()
594594 let cE = bj()
595595 let cF = bk()
596596 let dO = dI(dN, bf(), bh(), cE, cF)
597597 let dP = dI(dN, dl, dn, cE, cF)
598598 if (if ((dP > by()))
599599 then (dP > dO)
600600 else false)
601601 then throw(((("Price spread " + toString(dP)) + " > max price spread ") + toString(by())))
602602 else true
603603 }
604604
605605
606606 func dQ (dR,dS) = {
607607 let dT = bz()
608608 if ((dR > dT))
609609 then throw(((("Long open notional " + toString(dR)) + " > max open notional ") + toString(dT)))
610610 else if ((dS > dT))
611611 then throw(((("Short open notional " + toString(dS)) + " > max open notional ") + toString(dT)))
612612 else true
613613 }
614614
615615
616616 func dU (dV) = if ((bJ() == aI))
617617 then (dV == ao())
618618 else true
619619
620620
621621 func dW () = {
622622 let dl = bf()
623623 let dn = bh()
624624 let cE = bj()
625625 let cF = bk()
626626 aL(aN(dl, cE), aN(dn, cF))
627627 }
628628
629629
630630 func dX () = {
631631 let dN = dA()
632632 let dY = dW()
633633 (aL(aQ((dN - dY)), dN) > bw())
634634 }
635635
636636
637637 func dZ (bU,ea,dl,dm,dn,do) = {
638638 let eb = aQ(bU)
639639 let ec = (0 > bU)
640640 let ed = if ((ea == aB))
641641 then {
642642 let ee = dj(!(ec), eb, false, dl, dm, dn, do)._1
643643 ee
644644 }
645645 else aN(eb, dA())
646646 ed
647647 }
648648
649649
650650 func ef (bU,eg,dl,dm,dn,do,ea) = if ((bU == 0))
651651 then throw("Invalid position size")
652652 else {
653653 let ec = (0 > bU)
654654 let ed = dZ(bU, ea, dl, dm, dn, do)
655655 let eh = if (ec)
656656 then (eg - ed)
657657 else (ed - eg)
658658 $Tuple2(ed, eh)
659659 }
660660
661661
662662 func ei (bW,bX,ea) = {
663663 let ej = bV(bW, bX)
664664 let cb = ej._1
665665 let ek = ej._2
666666 let el = ej._3
667667 let em = ej._4
668668 ef(cb, el, bf(), bj(), bh(), bk(), ea)
669669 }
670670
671671
672672 func en (eo,ep,eq) = aL((eo - ep), eq)
673673
674674
675675 func er (bW,bX,ea) = {
676676 let es = bV(bW, bX)
677677 let cb = es._1
678678 let ek = es._2
679679 let et = es._3
680680 let eu = es._4
681681 let ev = es._5
682682 let ew = ei(bW, bX, ea)
683683 let ed = ew._1
684684 let eh = ew._2
685685 let ex = cZ(cb, ek, eu, ev, eh)
686686 let dh = ex._1
687687 let di = ex._2
688688 en(dh, di, ed)
689689 }
690690
691691
692692 func ey (bW,bX) = er(bW, bX, aB)
693693
694694
695695 func ez (bW,bU) = {
696696 let eA = aR(bv(), (ay - aL(ey(bW, cc(bU)), bt())))
697697 let eB = aN(aQ(bU), eA)
698698 let eC = du((bU > 0), eB, false)
699699 let eD = eC._1
700700 let cS = eC._7
701701 if ((bx() > cS))
702702 then eB
703703 else aN(aQ(bU), bv())
704704 }
705705
706706
707707 func eE (bW,bX,eF,eG,eH,eI,dk,eJ) = {
708708 let eK = bV(bW, bX)
709709 let eL = eK._1
710710 let eM = eK._2
711711 let eN = eK._3
712712 let eO = eK._4
713713 let eP = eK._5
714714 let eQ = (eL > 0)
715715 let eR = aQ(eL)
716716 if (if ((eR >= eF))
717717 then (eF > 0)
718718 else false)
719719 then {
720720 let eS = (eR > eF)
721721 let eT = du((eL > 0), eF, dk)
722722 let eU = eT._1
723723 let cH = eT._2
724724 let cI = eT._3
725725 let eV = eT._4
726726 let eW = if ((eL > 0))
727727 then -(eF)
728728 else eF
729729 let eX = ei(bW, bX, aB)
730730 let eY = eX._1
731731 let eh = eX._2
732732 let eZ = aL(aQ(eW), eR)
733733 let fa = aN(eh, eZ)
734734 let fb = cZ(eL, eM, eO, eP, eh)
735735 let fc = fb._1
736736 let fd = fb._2
737737 let fe = fb._3
738738 let cY = fb._4
739739 let ff = cZ(eL, eM, eO, eP, fa)._2
740740 let fg = aN(aN(eY, eZ), eG)
741741 let fh = (eh - fa)
742742 let fi = if ((eL > 0))
743743 then ((eY - eU) - fh)
744744 else ((fh + eY) - eU)
745745 let fj = (eL + eW)
746746 let fk = if ((fj == 0))
747747 then $Tuple2(0, 0)
748748 else $Tuple2(aQ(fi), bT(fj))
749749 let fl = fk._1
750750 let fm = fk._2
751751 let fn = (eN - fl)
752752 let fo = er(bW, bX, aB)
753753 let fp = if ((eL > 0))
754754 then (aN((fl + fh), fo) - fh)
755755 else (aN((fl - fh), fo) - fh)
756756 let fq = ((fc - (fp + fh)) - fg)
757757 let fr = if ((0 > fq))
758758 then if (eJ)
759759 then 0
760760 else throw("Invalid internalClosePosition params: unable to pay fee")
761761 else fq
762762 let fs = if (eI)
763763 then (fp + fr)
764764 else fp
765765 if (if ((eH != 0))
766766 then (eH > eU)
767767 else false)
768768 then throw(((("Limit error: " + toString(eU)) + " < ") + toString(eH)))
769769 else $Tuple17(fj, fs, fl, fm, ff, fa, if (if (eI)
770770 then eS
771771 else false)
772772 then 0
773773 else fr, cH, cI, eV, (bm() - fn), (bD() - (if (eQ)
774774 then aQ(eW)
775775 else 0)), (bC() - (if (!(eQ))
776776 then aQ(eW)
777777 else 0)), (bo() - (if (eQ)
778778 then fn
779779 else 0)), (bn() - (if (!(eQ))
780780 then fn
781781 else 0)), (fg + cY), eU)
782782 }
783783 else throw(((("Invalid internalClosePosition params: invalid position size: " + toString(eF)) + " max: ") + toString(eR)))
784784 }
785785
786786
787787 func ft () = {
788788 let bU = bl()
789789 if ((bU == 0))
790790 then $Tuple2(bf(), bh())
791791 else {
792792 let fu = (bU > 0)
793793 let fv = du(fu, aQ(bU), false)
794794 let fw = fv._1
795795 let fx = fv._2
796796 let fy = fv._3
797797 $Tuple2(fx, fy)
798798 }
799799 }
800800
801801
802802 func fz (fA,bl,fB,fC) = {
803803 let fD = toBigInt(fA)
804804 let fE = toBigInt(bl)
805805 let fF = toBigInt(fB)
806806 let fG = toBigInt(fC)
807807 let aT = aP(fF, fD)
808808 let fH = (fD + fE)
809809 let fI = aO(aT, fH)
810810 let fJ = aO(fI, fH)
811811 let fK = aO(fG, fJ)
812812 toInt(fK)
813813 }
814814
815815
816816 func fL (fM,cz,cA) = {
817817 let bU = bl()
818818 if ((bU == 0))
819819 then {
820820 let fN = aL(aN(fM, cA), cz)
821821 $Tuple3(fN, ay, 0)
822822 }
823823 else {
824824 let fu = (bU > 0)
825825 let fw = du(fu, aQ(bU), false)._1
826826 let fN = fz(cA, bU, cz, fM)
827827 let fO = ay
828828 let fP = ef(bU, fw, cz, fN, cA, fO, aB)._2
829829 $Tuple3(fN, fO, fP)
830830 }
831831 }
832832
833833
834834 func fQ () = {
835835 let fR = dA()
836836 let fS = dW()
837837 let fT = (fS - fR)
838838 if (if (dG())
839839 then true
840840 else if ((bH() == aD))
841841 then if ((bC() == 0))
842842 then true
843843 else (bD() == 0)
844844 else false)
845845 then $Tuple3(0, 0, 0)
846846 else if ((0 > fT))
847847 then {
848848 let fU = aL(aN(fT, br()), aA)
849849 if ((bH() == aD))
850850 then {
851851 let fV = aL(aN(fU, bC()), bD())
852852 $Tuple3(fU, fV, 0)
853853 }
854854 else {
855855 let fW = aQ(aN(fU, bC()))
856856 let fX = aQ(aN(fU, bD()))
857857 let fY = (fW - fX)
858858 $Tuple3(fU, fU, fY)
859859 }
860860 }
861861 else {
862862 let fV = aL(aN(fT, br()), aA)
863863 if ((bH() == aD))
864864 then {
865865 let fU = aL(aN(fV, bD()), bC())
866866 $Tuple3(fU, fV, 0)
867867 }
868868 else {
869869 let fX = aQ(aN(fV, bD()))
870870 let fW = aQ(aN(fV, bC()))
871871 let fY = (fX - fW)
872872 $Tuple3(fV, fV, fY)
873873 }
874874 }
875875 }
876876
877877
878878 func fZ (ga,gb) = {
879879 let gc = bb()
880880 let gd = aN(gc, gb)
881881 let ge = if ((ga != ""))
882882 then {
883883 let gf = aW(aq(), af(as, ga))
884884 if ((gf == at))
885885 then {
886886 let gg = aY(aq(), af(ar, ga))
887887 let gh = aN(gd, gg)
888888 $Tuple2(gh, true)
889889 }
890890 else throw("Invalid attached artifact")
891891 }
892892 else $Tuple2(gd, false)
893893 let gh = ge._1
894894 let gi = ge._2
895895 $Tuple2(gh, gi)
896896 }
897897
898898
899899 func gj (bW,ga) = {
900900 let gk = invoke(an(), "computeFeeDiscount", [bW], nil)
901901 if ((gk == gk))
902902 then {
903903 let gl = {
904904 let ca = gk
905905 if ($isInstanceOf(ca, "Int"))
906906 then {
907907 let gm = ca
908908 gm
909909 }
910910 else throw("Invalid computeFeeDiscount result")
911911 }
912912 let gn = fZ(ga, gl)
913913 let gh = gn._1
914914 let gi = gn._2
915915 $Tuple2(gh, gi)
916916 }
917917 else throw("Strict value is not equal to itself.")
918918 }
919919
920920
921921 func go (bN) = {
922922 let gp = if ((size(bN.payments) > 1))
923923 then toBase58String(valueOrErrorMessage(bN.payments[1].assetId, "Invalid artifactId"))
924924 else ""
925925 gp
926926 }
927927
928928
929929 func gq (gr) = {
930930 let gs = aN(gr, bF())
931931 let gt = (gr - gs)
932932 $Tuple2(gs, gt)
933933 }
934934
935935
936936 func gu (gv,gw,gx,gy,eG,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,gI,gJ) = [IntegerEntry(r, gv), IntegerEntry(s, gI), IntegerEntry(t, gw), IntegerEntry(u, gx), IntegerEntry(q, gy), IntegerEntry(o, eG), IntegerEntry(w, gz), IntegerEntry(x, gA), IntegerEntry(v, gB), IntegerEntry(y, gC), IntegerEntry(z, dT), IntegerEntry(A, gD), IntegerEntry(B, gE), IntegerEntry(p, gF), IntegerEntry(C, gG), IntegerEntry(D, gH), IntegerEntry(E, gJ)]
937937
938938
939939 func gK (gL,gM,gN,gO,gP) = [IntegerEntry(I, gL), IntegerEntry(G, gM), IntegerEntry(H, gN), IntegerEntry(J, gO), IntegerEntry(K, gP)]
940940
941941
942942 func gQ (gR,bW,bX) = {
943943 let bY = ((bW + "_") + toString(bX))
944944 if (gR)
945945 then {
946946 let gS = bE()
947947 [IntegerEntry(af(i, bY), (gS + 1)), IntegerEntry(d, (gS + 1))]
948948 }
949949 else nil
950950 }
951951
952952
953953 func gT (gR,bW,bX,eG) = {
954954 let bY = ((bW + "_") + toString(bX))
955955 if (gR)
956956 then [IntegerEntry(af(j, bY), eG)]
957957 else nil
958958 }
959959
960960
961961 func gU (bW,eF,gV,gW,de,gX) = {
962962 let fu = cc(eF)
963963 let bY = ((bW + "_") + toString(fu))
964964 [IntegerEntry(af(e, bY), eF), IntegerEntry(af(f, bY), gV), IntegerEntry(af(g, bY), gW), IntegerEntry(af(h, bY), de), IntegerEntry(af(k, bY), gX)]
965965 }
966966
967967
968968 func gY (cz,cA) = if (if ((0 > cz))
969969 then true
970970 else (0 > cA))
971971 then throw("Invalid amount to update reserves")
972972 else if (if ((cz != bg()))
973973 then true
974974 else (cA != bi()))
975975 then [IntegerEntry(L, cz), IntegerEntry(M, cA)]
976976 else nil
977977
978978
979979 func gZ (cE,cF) = if (if ((cE != bj()))
980980 then true
981981 else (cF != bk()))
982982 then [IntegerEntry(N, cE), IntegerEntry(O, cF)]
983983 else nil
984984
985985
986986 func ha (cz,cA,hb,hc,hd,he,hf,hg) = {
987987 let cE = bj()
988988 let cF = bk()
989989 if (((hd - he) != hb))
990990 then throw(((((("Invalid AMM state data: " + toString(hd)) + " - ") + toString(he)) + " != ") + toString(hb)))
991991 else (gY(cz, cA) ++ [IntegerEntry(P, hb), IntegerEntry(S, hc), IntegerEntry(Q, hd), IntegerEntry(R, he), IntegerEntry(U, hf), IntegerEntry(T, hg)])
992992 }
993993
994994
995995 func hh (bW,bX) = {
996996 let bY = ((bW + "_") + toString(bX))
997997 [DeleteEntry(af(e, bY)), DeleteEntry(af(f, bY)), DeleteEntry(af(g, bY)), DeleteEntry(af(h, bY)), DeleteEntry(af(j, bY)), DeleteEntry(af(k, bY))]
998998 }
999999
10001000
10011001 func hi (ah,hj) = {
10021002 let hk = assetBalance(this, ak())
10031003 if ((hj > hk))
10041004 then throw(((("Unable to withdraw " + toString(hj)) + " from contract balance ") + toString(hk)))
10051005 else [ScriptTransfer(ah, hj, ak())]
10061006 }
10071007
10081008
10091009 func hl (hm) = if ((0 > hm))
10101010 then throw("Balance")
10111011 else if (if ((ba() == 0))
10121012 then true
10131013 else (ba() != hm))
10141014 then [IntegerEntry(c, hm)]
10151015 else nil
10161016
10171017
10181018 func hn (bN) = [ScriptTransfer(al(), bN, ak())]
10191019
10201020
10211021 func ho (hp,bN) = if (hp)
10221022 then [Burn(valueOrErrorMessage(bN.payments[1].assetId, "Invalid artifact"), 1)]
10231023 else nil
10241024
10251025
10261026 @Callable(bN)
10271027 func pause () = if ((bN.caller != aj()))
10281028 then throw("Invalid pause params")
10291029 else [BooleanEntry(m, true)]
10301030
10311031
10321032
10331033 @Callable(bN)
10341034 func unpause () = if ((bN.caller != aj()))
10351035 then throw("Invalid unpause params")
10361036 else [BooleanEntry(m, false)]
10371037
10381038
10391039
10401040 @Callable(bN)
10411041 func setCloseOnly () = if ((bN.caller != aj()))
10421042 then throw("Invalid setCloseOnly params")
10431043 else [BooleanEntry(n, true)]
10441044
10451045
10461046
10471047 @Callable(bN)
10481048 func unsetCloseOnly () = if ((bN.caller != aj()))
10491049 then throw("Invalid unsetCloseOnly params")
10501050 else [BooleanEntry(n, false)]
10511051
10521052
10531053
10541054 @Callable(bN)
10551055 func changeLiquidity (cu) = if (if ((bN.caller != aj()))
10561056 then true
10571057 else (cu == 0))
10581058 then throw("Invalid changeLiquidity params")
10591059 else {
10601060 let cz = bf()
10611061 let cA = bh()
10621062 let cE = bj()
10631063 let cF = bk()
10641064 let hq = aL(aN(cz, cE), aN(cA, cF))
10651065 let hr = (cz + cu)
10661066 let hs = (aL(aN(hr, cE), hq) - cA)
10671067 let ht = (cA + hs)
10681068 let hu = fL(dA(), hr, ht)
10691069 let hv = hu._1
10701070 let hw = hu._2
10711071 let fP = hu._3
10721072 let hx = if ((fP != 0))
10731073 then {
10741074 let hx = invoke(am(), "exchangeFreeAndLocked", [fP], nil)
10751075 if ((hx == hx))
10761076 then nil
10771077 else throw("Strict value is not equal to itself.")
10781078 }
10791079 else nil
10801080 if ((hx == hx))
10811081 then (gY(hr, ht) ++ gZ(hv, hw))
10821082 else throw("Strict value is not equal to itself.")
10831083 }
10841084
10851085
10861086
10871087 @Callable(bN)
1088-func changeSettings (gv,gw,gx,gy,eG,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,hy,hz,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gy))
1088+func changeSettings (gv,gw,gx,gy,eG,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,hy,hz,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= gy))
10891089 then true
10901090 else (0 >= gv))
10911091 then true
10921092 else (gv > ay))
10931093 then true
10941094 else (0 >= gI))
10951095 then true
1096- else (gI > ay))
1097- then true
1098- else (gv >= gI))
1096+ else (gv > gI))
10991097 then true
11001098 else (0 >= gw))
11011099 then true
11021100 else (0 >= gx))
11031101 then true
11041102 else (0 >= eG))
11051103 then true
11061104 else (0 >= gz))
11071105 then true
11081106 else (0 >= gA))
11091107 then true
11101108 else (0 >= gB))
11111109 then true
11121110 else (0 >= gC))
11131111 then true
11141112 else (0 >= dT))
11151113 then true
11161114 else (0 >= gD))
11171115 then true
11181116 else (gD > ay))
11191117 then true
11201118 else (0 > gE))
11211119 then true
11221120 else (0 >= gF))
11231121 then true
11241122 else if ((gG != aE))
11251123 then (gG != aD)
11261124 else false)
11271125 then true
11281126 else if ((gH != aF))
11291127 then (gH != aG)
11301128 else false)
11311129 then true
11321130 else if ((gJ != aH))
11331131 then (gJ != aI)
11341132 else false)
11351133 then true
11361134 else !(cp()))
11371135 then true
11381136 else (bN.caller != aj()))
11391137 then throw("Invalid changeSettings params")
11401138 else (gu(gv, gw, gx, gy, eG, gz, gA, gB, gC, dT, gD, gE, gF, gG, gH, gI, gJ) ++ [StringEntry(a, hy), StringEntry(b, hz)])
11411139
11421140
11431141
11441142 @Callable(bN)
1145-func initialize (cz,cA,gy,gv,gw,gx,eG,hy,hz,hA,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
1143+func initialize (cz,cA,gy,gv,gw,gx,eG,hy,hz,hA,gz,gA,gB,gC,dT,gD,gE,gF,gG,gH,gI,gJ) = if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if (if ((0 >= cz))
11461144 then true
11471145 else (0 >= cA))
11481146 then true
11491147 else (0 >= gy))
11501148 then true
11511149 else (0 >= gv))
11521150 then true
11531151 else (gv > ay))
11541152 then true
11551153 else (0 >= gI))
1156- then true
1157- else (gI > ay))
11581154 then true
11591155 else (gv > gI))
11601156 then true
11611157 else (0 >= gw))
11621158 then true
11631159 else (0 >= gx))
11641160 then true
11651161 else (0 >= eG))
11661162 then true
11671163 else (0 >= gz))
11681164 then true
11691165 else (0 >= gA))
11701166 then true
11711167 else (0 >= gB))
11721168 then true
11731169 else (0 >= gC))
11741170 then true
11751171 else (0 >= dT))
11761172 then true
11771173 else (0 >= gD))
11781174 then true
11791175 else (gD > ay))
11801176 then true
11811177 else (0 > gE))
11821178 then true
11831179 else (0 >= gF))
11841180 then true
11851181 else if ((gG != aE))
11861182 then (gG != aD)
11871183 else false)
11881184 then true
11891185 else if ((gH != aF))
11901186 then (gH != aG)
11911187 else false)
11921188 then true
11931189 else if ((gJ != aH))
11941190 then (gJ != aI)
11951191 else false)
11961192 then true
11971193 else cp())
11981194 then true
11991195 else (bN.caller != this))
12001196 then throw("Invalid initialize parameters")
12011197 else ((((ha(cz, cA, 0, 0, 0, 0, 0, 0) ++ gu(gv, gw, gx, gy, eG, gz, gA, gB, gC, dT, gD, gE, gF, gG, gH, gI, gJ)) ++ gK((bL() + gy), 0, 0, 0, 0)) ++ hl(0)) ++ [BooleanEntry(l, true), StringEntry(a, hy), StringEntry(b, hz), StringEntry(W, toString(addressFromStringValue(hA)))])
12021198
12031199
12041200
12051201 @Callable(bN)
12061202 func increasePosition (bX,hB,hC,hD,hE) = {
12071203 let hF = invoke(this, "updateOracle", [hE], nil)
12081204 if ((hF == hF))
12091205 then {
12101206 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
12111207 if ((hG == hG))
12121208 then {
12131209 let hH = invoke(this, "ensureCalledOnce", nil, nil)
12141210 if ((hH == hH))
12151211 then {
12161212 let bW = bM(bN)
12171213 let hI = bN.payments[0].amount
12181214 let hJ = bN.payments[0].assetId
12191215 let hK = toBase58String(value(hJ))
12201216 let hL = (hJ == ak())
12211217 if (if (if (if (if (if (if (if (if (if (if ((bX != au))
12221218 then (bX != av)
12231219 else false)
12241220 then true
12251221 else (0 >= hI))
12261222 then true
12271223 else !(cp()))
12281224 then true
12291225 else !(hL))
12301226 then true
12311227 else !(bO(aL(ay, hB), bd(), true)))
12321228 then true
12331229 else !(bO(aL(ay, hB), be(), false)))
12341230 then true
12351231 else !(dU(bN.caller)))
12361232 then true
12371233 else cq())
12381234 then true
12391235 else cr())
12401236 then true
12411237 else dG())
12421238 then throw("Invalid increasePosition parameters")
12431239 else {
12441240 let hM = gj(bW, go(bN))
12451241 let gh = hM._1
12461242 let gi = hM._2
12471243 let hj = aL(hI, (aN(gh, hB) + ay))
12481244 let hN = (hI - hj)
12491245 let hO = invoke(ap(), "acceptPaymentWithLink", [bW, hD], [AttachedPayment(ak(), hN)])
12501246 if ((hO == hO))
12511247 then {
12521248 let hP = {
12531249 let ca = hO
12541250 if ($isInstanceOf(ca, "Int"))
12551251 then {
12561252 let gm = ca
12571253 gm
12581254 }
12591255 else throw("Invalid referrerFee")
12601256 }
12611257 let hQ = (hN - hP)
12621258 let hR = bV(bW, bX)
12631259 let eL = hR._1
12641260 let eM = hR._2
12651261 let eN = hR._3
12661262 let eO = hR._4
12671263 let eP = hR._5
12681264 let hS = (eL == 0)
12691265 let hT = if ((eL > 0))
12701266 then (bX == au)
12711267 else (bX == av)
12721268 let hU = if (!(hS))
12731269 then hT
12741270 else false
12751271 let hV = (bX == au)
12761272 let hW = if (if (hS)
12771273 then true
12781274 else hU)
12791275 then {
12801276 let hX = aN(hj, hB)
12811277 let hY = cD(hV, hX)
12821278 let cK = hY._1
12831279 let cH = hY._2
12841280 let cI = hY._3
12851281 let eV = hY._4
12861282 if (if ((hC != 0))
12871283 then (hC > aQ(cK))
12881284 else false)
12891285 then throw(((("Limit error: " + toString(aQ(cK))) + " < ") + toString(hC)))
12901286 else {
12911287 let fj = (eL + cK)
12921288 let hZ = (bo() + (if ((fj > 0))
12931289 then hX
12941290 else 0))
12951291 let ia = (bn() + (if ((0 > fj))
12961292 then hX
12971293 else 0))
12981294 let ib = cZ(eL, eM, eO, eP, hj)
12991295 let dh = ib._1
13001296 let fd = ib._2
13011297 let fe = ib._3
13021298 let cY = ib._4
13031299 if (!(dM(cH, cI)))
13041300 then throw("Over max spread limit")
13051301 else if (!(dQ(hZ, ia)))
13061302 then throw("Over max open notional")
13071303 else $Tuple14(fj, dh, (eN + hX), bT(fj), bL(), cI, cH, eV, (bm() + hX), (bD() + (if ((fj > 0))
13081304 then aQ(cK)
13091305 else 0)), (bC() + (if ((0 > fj))
13101306 then aQ(cK)
13111307 else 0)), hZ, ia, cY)
13121308 }
13131309 }
13141310 else {
13151311 let hX = aN(hj, hB)
13161312 let ic = ei(toString(bN.caller), bX, aB)
13171313 let eY = ic._1
13181314 let eh = ic._2
13191315 if ((eY > hX))
13201316 then throw("Use decreasePosition to decrease position size")
13211317 else throw("Close position first")
13221318 }
13231319 let fj = hW._1
13241320 let id = hW._2
13251321 let fl = hW._3
13261322 let ie = hW._4
13271323 let if = hW._5
13281324 let cI = hW._6
13291325 let cH = hW._7
13301326 let eV = hW._8
13311327 let ig = hW._9
13321328 let ih = hW._10
13331329 let ii = hW._11
13341330 let hZ = hW._12
13351331 let ia = hW._13
13361332 let cY = hW._14
13371333 let ij = gq((hQ + cY))
13381334 let gs = ij._1
13391335 let gt = ij._2
13401336 let ik = if ((hj >= cY))
13411337 then invoke(am(), "addLocked", nil, [AttachedPayment(ak(), (hj - cY))])
13421338 else invoke(am(), "withdrawLocked", [(cY - hj)], nil)
13431339 if ((ik == ik))
13441340 then {
13451341 let il = invoke(am(), "addFree", nil, [AttachedPayment(ak(), gt)])
13461342 if ((il == il))
13471343 then {
13481344 let im = invoke(an(), "notifyFees", [bW, hQ], nil)
13491345 if ((im == im))
13501346 then {
13511347 let in = invoke(an(), "notifyNotional", [bW, fl], nil)
13521348 if ((in == in))
13531349 then ((((((gU(bW, fj, id, fl, ie, if) ++ gQ(hS, bW, bX)) ++ gT(hS, bW, bX, gh)) ++ ha(cH, cI, eV, ig, ih, ii, hZ, ia)) ++ hn(gs)) ++ hl(((aZ() + hj) - cY))) ++ ho(gi, bN))
13541350 else throw("Strict value is not equal to itself.")
13551351 }
13561352 else throw("Strict value is not equal to itself.")
13571353 }
13581354 else throw("Strict value is not equal to itself.")
13591355 }
13601356 else throw("Strict value is not equal to itself.")
13611357 }
13621358 else throw("Strict value is not equal to itself.")
13631359 }
13641360 }
13651361 else throw("Strict value is not equal to itself.")
13661362 }
13671363 else throw("Strict value is not equal to itself.")
13681364 }
13691365 else throw("Strict value is not equal to itself.")
13701366 }
13711367
13721368
13731369
13741370 @Callable(bN)
13751371 func addMargin (bX,hE) = {
13761372 let hF = invoke(this, "updateOracle", [hE], nil)
13771373 if ((hF == hF))
13781374 then {
13791375 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
13801376 if ((hG == hG))
13811377 then {
13821378 let hH = invoke(this, "ensureCalledOnce", nil, nil)
13831379 if ((hH == hH))
13841380 then {
13851381 let bW = toString(bN.caller)
13861382 let hj = bN.payments[0].amount
13871383 let hJ = bN.payments[0].assetId
13881384 let hK = toBase58String(value(hJ))
13891385 let hL = (hJ == ak())
13901386 if (if (if (if (if (!(hL))
13911387 then true
13921388 else !(cg(toString(bN.caller), bX)))
13931389 then true
13941390 else !(cp()))
13951391 then true
13961392 else cq())
13971393 then true
13981394 else dG())
13991395 then throw("Invalid addMargin parameters")
14001396 else {
14011397 let io = bV(bW, bX)
14021398 let eL = io._1
14031399 let eM = io._2
14041400 let eN = io._3
14051401 let eO = io._4
14061402 let eP = io._5
14071403 let ik = invoke(am(), "addLocked", nil, [AttachedPayment(ak(), hj)])
14081404 if ((ik == ik))
14091405 then {
14101406 let ip = cZ(eL, eM, eO, eP, hj)
14111407 let dh = ip._1
14121408 let di = ip._2
14131409 let cY = ip._3
14141410 let fo = en(dh, di, eN)
14151411 let iq = bO(fo, be(), false)
14161412 if ((iq == iq))
14171413 then {
14181414 let ir = if ((cY > 0))
14191415 then {
14201416 let is = gq(cY)
14211417 let gs = is._1
14221418 let gt = is._2
14231419 let it = invoke(am(), "withdrawLocked", [gs], nil)
14241420 if ((it == it))
14251421 then {
14261422 let iu = invoke(am(), "exchangeFreeAndLocked", [-(gt)], nil)
14271423 if ((iu == iu))
14281424 then hn(gs)
14291425 else throw("Strict value is not equal to itself.")
14301426 }
14311427 else throw("Strict value is not equal to itself.")
14321428 }
14331429 else nil
14341430 if ((ir == ir))
14351431 then ((gU(bW, eL, ((eM - cY) + hj), eN, eO, bL()) ++ hl(((aZ() + hj) - cY))) ++ ir)
14361432 else throw("Strict value is not equal to itself.")
14371433 }
14381434 else throw("Strict value is not equal to itself.")
14391435 }
14401436 else throw("Strict value is not equal to itself.")
14411437 }
14421438 }
14431439 else throw("Strict value is not equal to itself.")
14441440 }
14451441 else throw("Strict value is not equal to itself.")
14461442 }
14471443 else throw("Strict value is not equal to itself.")
14481444 }
14491445
14501446
14511447
14521448 @Callable(bN)
14531449 func removeMargin (hj,bX,hE) = {
14541450 let hF = invoke(this, "updateOracle", [hE], nil)
14551451 if ((hF == hF))
14561452 then {
14571453 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
14581454 if ((hG == hG))
14591455 then {
14601456 let hH = invoke(this, "ensureCalledOnce", nil, nil)
14611457 if ((hH == hH))
14621458 then {
14631459 let bW = toString(bN.caller)
14641460 if (if (if (if (if ((0 >= hj))
14651461 then true
14661462 else !(cg(bW, bX)))
14671463 then true
14681464 else !(cp()))
14691465 then true
14701466 else cq())
14711467 then true
14721468 else dG())
14731469 then throw("Invalid removeMargin parameters")
14741470 else {
14751471 let iv = bV(bW, bX)
14761472 let eL = iv._1
14771473 let eM = iv._2
14781474 let eN = iv._3
14791475 let eO = iv._4
14801476 let eP = iv._5
14811477 let iw = cZ(eL, eM, eO, eP, -(hj))
14821478 let dh = iw._1
14831479 let di = iw._2
14841480 let dd = iw._3
14851481 let cY = iw._4
14861482 if ((di != 0))
14871483 then throw("Invalid removed margin amount")
14881484 else {
14891485 let fo = en(dh, di, eN)
14901486 if (!(bO(fo, bd(), true)))
14911487 then throw(((("Too much margin removed: " + toString(fo)) + " < ") + toString(bd())))
14921488 else {
14931489 let ix = gq(cY)
14941490 let gs = ix._1
14951491 let gt = ix._2
14961492 let ir = if ((cY > 0))
14971493 then {
14981494 let iu = invoke(am(), "exchangeFreeAndLocked", [-(gt)], nil)
14991495 if ((iu == iu))
15001496 then hn(gs)
15011497 else throw("Strict value is not equal to itself.")
15021498 }
15031499 else nil
15041500 if ((ir == ir))
15051501 then {
15061502 let it = invoke(am(), "withdrawLocked", [(hj + gs)], nil)
15071503 if ((it == it))
15081504 then (((gU(bW, eL, dh, eN, bT(eL), bL()) ++ hi(bN.caller, hj)) ++ hl(((aZ() - hj) - cY))) ++ ir)
15091505 else throw("Strict value is not equal to itself.")
15101506 }
15111507 else throw("Strict value is not equal to itself.")
15121508 }
15131509 }
15141510 }
15151511 }
15161512 else throw("Strict value is not equal to itself.")
15171513 }
15181514 else throw("Strict value is not equal to itself.")
15191515 }
15201516 else throw("Strict value is not equal to itself.")
15211517 }
15221518
15231519
15241520
15251521 @Callable(bN)
15261522 func closePosition (eF,bX,eH,eI,hE) = {
15271523 let hF = invoke(this, "updateOracle", [hE], nil)
15281524 if ((hF == hF))
15291525 then {
15301526 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
15311527 if ((hG == hG))
15321528 then {
15331529 let hH = invoke(this, "ensureCalledOnce", nil, nil)
15341530 if ((hH == hH))
15351531 then {
15361532 let bW = bM(bN)
15371533 let iy = valueOrErrorMessage(addressFromString(bW), "Invalid caller")
15381534 let cf = cd(bW, bX)
15391535 if (if (if (if (if (if (!(cg(bW, bX)))
15401536 then true
15411537 else !(cp()))
15421538 then true
15431539 else cq())
15441540 then true
15451541 else (0 >= eF))
15461542 then true
15471543 else (0 > eH))
15481544 then true
15491545 else dG())
15501546 then throw("Invalid closePosition parameters")
15511547 else {
15521548 let eP = bV(bW, bX)._5
15531549 let iz = eE(bW, bX, eF, cf, eH, eI, true, true)
15541550 let fj = iz._1
15551551 let fs = iz._2
15561552 let fl = iz._3
15571553 let fm = iz._4
15581554 let ff = iz._5
15591555 let fa = iz._6
15601556 let fr = iz._7
15611557 let cH = iz._8
15621558 let cI = iz._9
15631559 let eV = iz._10
15641560 let ig = iz._11
15651561 let ih = iz._12
15661562 let ii = iz._13
15671563 let hZ = iz._14
15681564 let ia = iz._15
15691565 let iA = iz._16
15701566 if ((ff > 0))
15711567 then throw("Invalid closePosition parameters: bad debt")
15721568 else if ((eP >= bL()))
15731569 then throw("Invalid closePosition parameters: wait at least 1 block before closing the position")
15741570 else {
15751571 let eS = (fj != 0)
15761572 let iB = (fr + iA)
15771573 let iC = (aZ() - iB)
15781574 let iD = if ((0 > iC))
15791575 then 0
15801576 else iC
15811577 let it = invoke(am(), "withdrawLocked", [iB], nil)
15821578 if ((it == it))
15831579 then {
15841580 let hO = invoke(ap(), "acceptPayment", [bW], [AttachedPayment(ak(), iA)])
15851581 if ((hO == hO))
15861582 then {
15871583 let hP = {
15881584 let ca = hO
15891585 if ($isInstanceOf(ca, "Int"))
15901586 then {
15911587 let gm = ca
15921588 gm
15931589 }
15941590 else throw("Invalid referrerFee")
15951591 }
15961592 let iE = gq((iA - hP))
15971593 let gs = iE._1
15981594 let gt = iE._2
15991595 let il = invoke(am(), "addFree", nil, [AttachedPayment(ak(), gt)])
16001596 if ((il == il))
16011597 then {
16021598 let im = invoke(an(), "notifyFees", [bW, iA], nil)
16031599 if ((im == im))
16041600 then {
16051601 let in = invoke(an(), "notifyNotional", [bW, fl], nil)
16061602 if ((in == in))
16071603 then (((((if (eS)
16081604 then gU(bW, fj, fs, fl, fm, bL())
16091605 else hh(bW, bX)) ++ ha(cH, cI, eV, ig, ih, ii, hZ, ia)) ++ (if ((fr > 0))
16101606 then hi(iy, fr)
16111607 else nil)) ++ hl(iD)) ++ hn(gs))
16121608 else throw("Strict value is not equal to itself.")
16131609 }
16141610 else throw("Strict value is not equal to itself.")
16151611 }
16161612 else throw("Strict value is not equal to itself.")
16171613 }
16181614 else throw("Strict value is not equal to itself.")
16191615 }
16201616 else throw("Strict value is not equal to itself.")
16211617 }
16221618 }
16231619 }
16241620 else throw("Strict value is not equal to itself.")
16251621 }
16261622 else throw("Strict value is not equal to itself.")
16271623 }
16281624 else throw("Strict value is not equal to itself.")
16291625 }
16301626
16311627
16321628
16331629 @Callable(bN)
16341630 func liquidate (bW,bX,hE) = {
16351631 let hF = invoke(this, "updateOracle", [hE], nil)
16361632 if ((hF == hF))
16371633 then {
16381634 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
16391635 if ((hG == hG))
16401636 then {
16411637 let iF = er(bW, bX, aB)
16421638 let iG = if (dX())
16431639 then {
16441640 let iH = er(bW, bX, aC)
16451641 aR(iF, iH)
16461642 }
16471643 else iF
16481644 if (if (if (if (if (!(bO(iG, bt(), false)))
16491645 then true
16501646 else !(cg(bW, bX)))
16511647 then true
16521648 else !(cp()))
16531649 then true
16541650 else cq())
16551651 then true
16561652 else dG())
16571653 then throw("Unable to liquidate")
16581654 else {
16591655 let eL = bV(bW, bX)._1
16601656 let eb = aQ(eL)
16611657 let iI = if (if (if ((iF > bu()))
16621658 then (bv() > 0)
16631659 else false)
16641660 then (ay > bv())
16651661 else false)
16661662 then (aN(eb, dW()) > bK())
16671663 else false
16681664 let iJ = if (iI)
16691665 then {
16701666 let iK = aQ(ez(bW, eL))
16711667 let iL = aL(iK, eb)
16721668 let iM = aN(iK, dW())
16731669 $Tuple2(iL, iK)
16741670 }
16751671 else $Tuple2(0, eb)
16761672 let iL = iJ._1
16771673 let iK = iJ._2
16781674 let iN = eE(bW, bX, if (iI)
16791675 then iK
16801676 else eb, bu(), 0, true, false, true)
16811677 let fj = iN._1
16821678 let fs = iN._2
16831679 let fl = iN._3
16841680 let fm = iN._4
16851681 let ff = iN._5
16861682 let fa = iN._6
16871683 let fr = iN._7
16881684 let cH = iN._8
16891685 let cI = iN._9
16901686 let eV = iN._10
16911687 let ig = iN._11
16921688 let ih = iN._12
16931689 let ii = iN._13
16941690 let hZ = iN._14
16951691 let ia = iN._15
16961692 let iO = iN._16
16971693 let iP = (iO / 2)
16981694 let gt = (iO - iP)
16991695 let iC = (aZ() - iO)
17001696 let iQ = if ((0 > iC))
17011697 then 0
17021698 else iC
17031699 let iu = if ((ff > 0))
17041700 then {
17051701 let iu = invoke(am(), "exchangeFreeAndLocked", [(ff + iO)], nil)
17061702 if ((iu == iu))
17071703 then nil
17081704 else throw("Strict value is not equal to itself.")
17091705 }
17101706 else nil
17111707 if ((iu == iu))
17121708 then {
17131709 let it = invoke(am(), "withdrawLocked", [iO], nil)
17141710 if ((it == it))
17151711 then {
17161712 let iR = invoke(am(), "addFree", nil, [AttachedPayment(ak(), gt)])
17171713 if ((iR == iR))
17181714 then {
17191715 let in = invoke(an(), "notifyNotional", [bW, fl], nil)
17201716 if ((in == in))
17211717 then ((((if (iI)
17221718 then gU(bW, fj, fs, fl, fm, bL())
17231719 else hh(bW, bX)) ++ ha(cH, cI, eV, ig, ih, ii, hZ, ia)) ++ hi(bN.caller, iP)) ++ hl(iQ))
17241720 else throw("Strict value is not equal to itself.")
17251721 }
17261722 else throw("Strict value is not equal to itself.")
17271723 }
17281724 else throw("Strict value is not equal to itself.")
17291725 }
17301726 else throw("Strict value is not equal to itself.")
17311727 }
17321728 }
17331729 else throw("Strict value is not equal to itself.")
17341730 }
17351731 else throw("Strict value is not equal to itself.")
17361732 }
17371733
17381734
17391735
17401736 @Callable(bN)
17411737 func payFunding (hE) = {
17421738 let hF = invoke(this, "updateOracle", [hE], nil)
17431739 if ((hF == hF))
17441740 then {
17451741 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
17461742 if ((hG == hG))
17471743 then {
17481744 let iS = bp()
17491745 if (if (if ((iS > bL()))
17501746 then true
17511747 else !(cp()))
17521748 then true
17531749 else cq())
17541750 then throw(((("Invalid funding block timestamp: " + toString(bL())) + " < ") + toString(iS)))
17551751 else {
17561752 let fR = dA()
17571753 let iT = fQ()
17581754 let fU = iT._1
17591755 let fV = iT._2
17601756 let fY = iT._3
17611757 let iU = if ((fY > 0))
17621758 then {
17631759 let iU = invoke(am(), "exchangeFreeAndLocked", [-(fY)], nil)
17641760 if ((iU == iU))
17651761 then nil
17661762 else throw("Strict value is not equal to itself.")
17671763 }
17681764 else nil
17691765 if ((iU == iU))
17701766 then gK((iS + bs()), (bA() + fV), (bB() + fU), aL(fV, fR), aL(fU, fR))
17711767 else throw("Strict value is not equal to itself.")
17721768 }
17731769 }
17741770 else throw("Strict value is not equal to itself.")
17751771 }
17761772 else throw("Strict value is not equal to itself.")
17771773 }
17781774
17791775
17801776
17811777 @Callable(bN)
17821778 func updateOracle (hE) = if ((bI() == aF))
17831779 then nil
17841780 else {
17851781 let iV = split_4C(hE, "::")
17861782 let dB = valueOrErrorMessage(ch(a), "No base asset oracle data")
17871783 let iW = dB._1
17881784 let iX = invoke(iW, "updateData", [iV[0]], nil)
17891785 if ((iX == iX))
17901786 then {
17911787 let dD = ch(b)
17921788 let iY = if (isDefined(dD))
17931789 then {
17941790 let dF = value(dD)
17951791 let iZ = dF._1
17961792 let iY = invoke(iZ, "updateData", [iV[1]], nil)
17971793 if ((iY == iY))
17981794 then nil
17991795 else throw("Strict value is not equal to itself.")
18001796 }
18011797 else nil
18021798 if ((iY == iY))
18031799 then nil
18041800 else throw("Strict value is not equal to itself.")
18051801 }
18061802 else throw("Strict value is not equal to itself.")
18071803 }
18081804
18091805
18101806
18111807 @Callable(bN)
18121808 func syncTerminalPriceToOracle () = {
18131809 let cz = bf()
18141810 let cA = bh()
18151811 let ja = fL(dA(), cz, cA)
18161812 let hv = ja._1
18171813 let hw = ja._2
18181814 let fP = ja._3
18191815 let jb = if (if ((0 > fP))
18201816 then (aQ(fP) > aZ())
18211817 else false)
18221818 then -(aZ())
18231819 else fP
18241820 let hx = if ((jb != 0))
18251821 then {
18261822 let hx = invoke(am(), "exchangeFreeAndLocked", [jb], nil)
18271823 if ((hx == hx))
18281824 then nil
18291825 else throw("Strict value is not equal to itself.")
18301826 }
18311827 else nil
18321828 if ((hx == hx))
18331829 then (hl((aZ() + jb)) ++ gZ(hv, hw))
18341830 else throw("Strict value is not equal to itself.")
18351831 }
18361832
18371833
18381834
18391835 @Callable(bN)
18401836 func ensureCalledOnce () = if ((bN.caller != this))
18411837 then throw("Invalid saveCurrentTxId parameters")
18421838 else {
18431839 let jc = toBase58String(bN.transactionId)
18441840 let jd = valueOrElse(getString(this, V), "")
18451841 if ((jd != jc))
18461842 then [StringEntry(V, jc)]
18471843 else throw("Can not call vAMM methods twice in one tx")
18481844 }
18491845
18501846
18511847
18521848 @Callable(bN)
18531849 func migratePosition (bW) = {
18541850 let bZ = getInteger(this, af(e, bW))
18551851 if (if (isDefined(bZ))
18561852 then isDefined(addressFromString(bW))
18571853 else false)
18581854 then {
18591855 let je = getIntegerValue(this, af(e, bW))
18601856 let jf = getIntegerValue(this, af(f, bW))
18611857 let jg = getIntegerValue(this, af(g, bW))
18621858 let jh = getIntegerValue(this, af(h, bW))
18631859 let ji = valueOrElse(getInteger(this, af(k, bW)), lastBlock.timestamp)
18641860 let jj = valueOrElse(getInteger(this, af(j, bW)), bb())
18651861 let jk = getIntegerValue(this, af(i, bW))
18661862 let jl = cc(je)
18671863 let bY = ((bW + "_") + toString(jl))
18681864 [DeleteEntry(af(e, bW)), DeleteEntry(af(f, bW)), DeleteEntry(af(g, bW)), DeleteEntry(af(h, bW)), DeleteEntry(af(k, bW)), DeleteEntry(af(j, bW)), DeleteEntry(af(i, bW)), IntegerEntry(af(e, bY), je), IntegerEntry(af(f, bY), jf), IntegerEntry(af(g, bY), jg), IntegerEntry(af(h, bY), jh), IntegerEntry(af(k, bY), ji), IntegerEntry(af(j, bY), jj), IntegerEntry(af(i, bY), jk)]
18691865 }
18701866 else throw(("Nothing to migrate for " + bW))
18711867 }
18721868
18731869
18741870
18751871 @Callable(bN)
18761872 func view_calcRemainMarginWithFundingPayment (bW,bX,hE) = {
18771873 let hF = invoke(this, "updateOracle", [hE], nil)
18781874 if ((hF == hF))
18791875 then {
18801876 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
18811877 if ((hG == hG))
18821878 then {
18831879 let jm = bV(bW, bX)
18841880 let cb = jm._1
18851881 let ek = jm._2
18861882 let et = jm._3
18871883 let em = jm._4
18881884 let ev = jm._5
18891885 let jn = ei(bW, bX, aB)
18901886 let ed = jn._1
18911887 let eh = jn._2
18921888 let jo = cZ(cb, ek, em, ev, eh)
18931889 let dh = jo._1
18941890 let di = jo._2
18951891 let dd = jo._3
18961892 let cY = jo._4
18971893 let fR = dA()
18981894 let fS = dW()
18991895 throw(((((((((aJ(dh) + aJ(dd)) + aJ(ey(bW, bX))) + aJ(eh)) + aJ(di)) + aJ(ed)) + aJ(cY)) + aJ(fR)) + aJ(fS)))
19001896 }
19011897 else throw("Strict value is not equal to itself.")
19021898 }
19031899 else throw("Strict value is not equal to itself.")
19041900 }
19051901
19061902
19071903
19081904 @Callable(bN)
19091905 func view_getPegAdjustCost (jp) = {
19101906 let cz = bf()
19111907 let cA = bh()
19121908 let fK = fL(jp, cz, cA)
19131909 throw(toString(fK._3))
19141910 }
19151911
19161912
19171913
19181914 @Callable(bN)
19191915 func view_getTerminalAmmPrice () = {
19201916 let jq = ft()
19211917 let fx = jq._1
19221918 let fy = jq._2
19231919 let hq = aL(aN(fx, bj()), aN(fy, bk()))
19241920 throw(toString(hq))
19251921 }
19261922
19271923
19281924
19291925 @Callable(bN)
19301926 func view_getFunding (hE) = {
19311927 let hF = invoke(this, "updateOracle", [hE], nil)
19321928 if ((hF == hF))
19331929 then {
19341930 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
19351931 if ((hG == hG))
19361932 then {
19371933 let fR = dA()
19381934 let jr = fQ()
19391935 let fU = jr._1
19401936 let fV = jr._2
19411937 let fY = jr._3
19421938 let js = aL(fV, fR)
19431939 let jt = aL(fU, fR)
19441940 throw(((((aJ(js) + aJ(jt)) + aJ(dW())) + aJ(dA())) + aJ(fY)))
19451941 }
19461942 else throw("Strict value is not equal to itself.")
19471943 }
19481944 else throw("Strict value is not equal to itself.")
19491945 }
19501946
19511947
19521948
19531949 @Callable(bN)
19541950 func computeSpotPrice () = {
19551951 let hG = invoke(this, "syncTerminalPriceToOracle", nil, nil)
19561952 if ((hG == hG))
19571953 then {
19581954 let fK = dW()
19591955 $Tuple2(nil, fK)
19601956 }
19611957 else throw("Strict value is not equal to itself.")
19621958 }
19631959
19641960
19651961
19661962 @Callable(bN)
19671963 func computeFeeForTraderWithArtifact (bW,ga) = {
19681964 let fK = gj(bW, ga)
19691965 $Tuple2(nil, fK)
19701966 }
19711967
19721968
19731969 @Verifier(ju)
19741970 func jv () = {
19751971 let jw = getString(this, W)
19761972 if (isDefined(jw))
19771973 then {
19781974 let jx = getString(addressFromStringValue(value(jw)), Y)
19791975 if (isDefined(jx))
19801976 then valueOrElse(getBoolean(addressFromStringValue(value(jx)), ((("status_" + toString(this)) + "_") + toBase58String(ju.id))), false)
19811977 else throw("unable to verify: admin not set in coordinator")
19821978 }
19831979 else sigVerify(ju.bodyBytes, ju.proofs[0], ju.senderPublicKey)
19841980 }
19851981

github/deemru/w8io/873ac7e 
183.63 ms