tx · CC6i1UfHxpLJ8LysdnJY5VWkhStDUZyyUneuNfmzpKCk

3NBH3LGg2DsaEtyBr495XEdaFuiLYSNyr3k:  -0.05100000 Waves

2022.08.17 00:04 [2187540] smart account 3NBH3LGg2DsaEtyBr495XEdaFuiLYSNyr3k > SELF 0.00000000 Waves

{ "type": 13, "id": "CC6i1UfHxpLJ8LysdnJY5VWkhStDUZyyUneuNfmzpKCk", "fee": 5100000, "feeAssetId": null, "timestamp": 1660683939371, "version": 2, "chainId": 84, "sender": "3NBH3LGg2DsaEtyBr495XEdaFuiLYSNyr3k", "senderPublicKey": "6rHNfG82m33YnDLzeMuCFn5XNvbNwGhR4ovSFhgJvbxP", "proofs": [ "5tcc4S5gu1KiJqLjoZeL4BoNueA15FFvUwwCMarYe2choQQBzv66Lmc1cUGPmce35tkrCZ5y4tsVzoEPqaDxiwdm" ], "script": "base64:BgJZCAISABIAEgMKAQESAwoBARIJCgcBAQEBAQEBEg4KDAEBAQEBAQEICAgBARIFCgMBAQESBQoDAQEBEgASAwoBARIAEgMKAQgSABIDCgEIEgMKAQgSBAoCCAF3AAlrX29yYV9rZXkCCWtfb3JhX2tleQAPa19vcmFfYmxvY2tfa2V5Ag9rX29yYV9ibG9ja19rZXkABWtfb3JhAgVrX29yYQAJa19iYWxhbmNlAglrX2JhbGFuY2UADmtfcG9zaXRpb25TaXplAg5rX3Bvc2l0aW9uU2l6ZQAQa19wb3NpdGlvbk1hcmdpbgIQa19wb3NpdGlvbk1hcmdpbgAWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAIWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAAua19wb3NpdGlvbkxhc3RVcGRhdGVkQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgISa19wb3NpdGlvbkZyYWN0aW9uAA1rX2luaXRpYWxpemVkAg1rX2luaXRpYWxpemVkAAhrX3BhdXNlZAIIa19wYXVzZWQABWtfZmVlAgVrX2ZlZQAPa19mdW5kaW5nUGVyaW9kAg9rX2Z1bmRpbmdQZXJpb2QAEWtfaW5pdE1hcmdpblJhdGlvAhFrX2luaXRNYXJnaW5SYXRpbwAYa19tYWludGVuYW5jZU1hcmdpblJhdGlvAgVrX21tcgAVa19saXF1aWRhdGlvbkZlZVJhdGlvAhVrX2xpcXVpZGF0aW9uRmVlUmF0aW8ADWtfc3ByZWFkTGltaXQCDWtfc3ByZWFkTGltaXQAEGtfbWF4UHJpY2VJbXBhY3QCEGtfbWF4UHJpY2VJbXBhY3QADWtfbGFzdERhdGFTdHICDWtfbGFzdERhdGFTdHIADmtfbGFzdE1pbnV0ZUlkAg5rX2xhc3RNaW51dGVJZAAda190d2FwRGF0YUxhc3RDdW11bGF0aXZlUHJpY2UCHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlABNrX3R3YXBEYXRhTGFzdFByaWNlAhNrX3R3YXBEYXRhTGFzdFByaWNlABprX3R3YXBEYXRhUHJldmlvdXNNaW51dGVJZAIaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQAJWtfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CG2tfbGF0ZXN0TG9uZ1ByZW1pdW1GcmFjdGlvbgAma19sYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24CHGtfbGF0ZXN0U2hvcnRQcmVtaXVtRnJhY3Rpb24AEmtfbmV4dEZ1bmRpbmdCbG9jawIea19uZXh0RnVuZGluZ0Jsb2NrTWluVGltZXN0YW1wABFrX2xvbmdGdW5kaW5nUmF0ZQIRa19sb25nRnVuZGluZ1JhdGUAEmtfc2hvcnRGdW5kaW5nUmF0ZQISa19zaG9ydEZ1bmRpbmdSYXRlABNrX3F1b3RlQXNzZXRSZXNlcnZlAghrX3F0QXN0UgASa19iYXNlQXNzZXRSZXNlcnZlAghrX2JzQXN0UgATa190b3RhbFBvc2l0aW9uU2l6ZQITa190b3RhbFBvc2l0aW9uU2l6ZQAXa190b3RhbExvbmdQb3NpdGlvblNpemUCF2tfdG90YWxMb25nUG9zaXRpb25TaXplABhrX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAUa19jdW11bGF0aXZlTm90aW9uYWwCFGtfY3VtdWxhdGl2ZU5vdGlvbmFsABZrX29wZW5JbnRlcmVzdE5vdGlvbmFsAhZrX29wZW5JbnRlcmVzdE5vdGlvbmFsABRrX2Nvb3JkaW5hdG9yQWRkcmVzcwIUa19jb29yZGluYXRvckFkZHJlc3MAE2tfaW5zdXJhbmNlX2FkZHJlc3MCE2tfaW5zdXJhbmNlX2FkZHJlc3MAD2tfYWRtaW5fYWRkcmVzcwIPa19hZG1pbl9hZGRyZXNzABJrX2FkbWluX3B1YmxpY19rZXkCEmtfYWRtaW5fcHVibGljX2tleQANa19xdW90ZV9hc3NldAINa19xdW90ZV9hc3NldAAPa19xdW90ZV9zdGFraW5nAg9rX3F1b3RlX3N0YWtpbmcAEWtfc3Rha2luZ19hZGRyZXNzAhFrX3N0YWtpbmdfYWRkcmVzcwAPa19taW5lcl9hZGRyZXNzAg9rX21pbmVyX2FkZHJlc3MBC2Nvb3JkaW5hdG9yAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFFGtfY29vcmRpbmF0b3JBZGRyZXNzAhNDb29yZGluYXRvciBub3Qgc2V0AQxhZG1pbkFkZHJlc3MACQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfYWRtaW5fYWRkcmVzcwEOYWRtaW5QdWJsaWNLZXkACQDZBAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEmtfYWRtaW5fcHVibGljX2tleQEKcXVvdGVBc3NldAAJANkEAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUNa19xdW90ZV9hc3NldAERcXVvdGVBc3NldFN0YWtpbmcACQETdmFsdWVPckVycm9yTWVzc2FnZQIJAKYIAQkBEUBleHRyTmF0aXZlKDEwNTMpAgkBC2Nvb3JkaW5hdG9yAAUPa19xdW90ZV9zdGFraW5nAhtRdW90ZSBhc3NldCBzdGFraW5nIG5vdCBzZXQBDnN0YWtpbmdBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFEWtfc3Rha2luZ19hZGRyZXNzAhFJbnN1cmFuY2Ugbm90IHNldAEQaW5zdXJhbmNlQWRkcmVzcwAJARN2YWx1ZU9yRXJyb3JNZXNzYWdlAgkApggBCQERQGV4dHJOYXRpdmUoMTA1MykCCQELY29vcmRpbmF0b3IABRNrX2luc3VyYW5jZV9hZGRyZXNzAhFJbnN1cmFuY2Ugbm90IHNldAEMbWluZXJBZGRyZXNzAAkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIJAQtjb29yZGluYXRvcgAFD2tfbWluZXJfYWRkcmVzcwIRSW5zdXJhbmNlIG5vdCBzZXQACERJUl9MT05HAAEACURJUl9TSE9SVAACAA1UV0FQX0lOVEVSVkFMAA8AD09SQUNMRV9JTlRFUlZBTAAPAAdTRUNPTkRTAOgHAAxERUNJTUFMX1VOSVQJAGgCAAEJAGgCCQBoAgkAaAIJAGgCCQBoAgAKAAoACgAKAAoACgAHT05FX0RBWQkAaAIAgKMFBQxERUNJTUFMX1VOSVQACEFMTF9GRUVTAGQAD1BOTF9PUFRJT05fU1BPVAABABFQTkxfT1BUSU9OX09SQUNMRQACAQFzAQJfeAkArAICCQCkAwEFAl94AgEsAQRkaXZkAgJfeAJfeQkAbgQFAl94BQxERUNJTUFMX1VOSVQFAl95BQhIQUxGRVZFTgEEbXVsZAICX3gCX3kJAG4EBQJfeAUCX3kFDERFQ0lNQUxfVU5JVAUISEFMRkVWRU4BA2FicwECX3gDCQBmAgUCX3gAAAUCX3gJAQEtAQUCX3gBBHZtYXgCAl94Al95AwkAZwIFAl94BQJfeQUCX3gFAl95AQ50b0NvbXBvc2l0ZUtleQIEX2tleQhfYWRkcmVzcwkArAICCQCsAgIFBF9rZXkCAV8FCF9hZGRyZXNzAQlsaXN0VG9TdHIBBV9saXN0CgEFX2pvaW4CC2FjY3VtdWxhdG9yA3ZhbAkArAICCQCsAgIFC2FjY3VtdWxhdG9yBQN2YWwCASwECm5ld0xpc3RTdHIKAAIkbAUFX2xpc3QKAAIkcwkAkAMBBQIkbAoABSRhY2MwAgAKAQUkZjBfMQICJGECJGkDCQBnAgUCJGkFAiRzBQIkYQkBBV9qb2luAgUCJGEJAJEDAgUCJGwFAiRpCgEFJGYwXzICAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAAIBAhRMaXN0IHNpemUgZXhjZWVkcyAyMAkBBSRmMF8yAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgkBBSRmMF8xAgUFJGFjYzAAAAABAAIAAwAEAAUABgAHAAgACQAKAAsADAANAA4ADwAQABEAEgATABQEC25ld0xpc3RTdHJVCQCzAgIFCm5ld0xpc3RTdHIAAQQLbmV3TGlzdFN0clIDCQAAAgkArwICBQtuZXdMaXN0U3RyVQABAgEsCQCwAgIFC25ld0xpc3RTdHJVAAEFC25ld0xpc3RTdHJVBQtuZXdMaXN0U3RyUgEJc3RyVG9MaXN0AQRfc3RyCQC1CQIFBF9zdHICASwBC3B1c2hUb1F1ZXVlAwVfbGlzdAhfbWF4U2l6ZQZfdmFsdWUDCQBmAgkAkAMBBQVfbGlzdAUIX21heFNpemUJAM0IAgkA0QgCBQVfbGlzdAAABQZfdmFsdWUJAM0IAgUFX2xpc3QFBl92YWx1ZQEDaW50AQFrCQETdmFsdWVPckVycm9yTWVzc2FnZQIJAJoIAgUEdGhpcwUBawkArAICAg1ubyB2YWx1ZSBmb3IgBQFrAQhjYmFsYW5jZQAJAQNpbnQBBQlrX2JhbGFuY2UBA2ZlZQAJAQNpbnQBBQVrX2ZlZQEPaW5pdE1hcmdpblJhdGlvAAkBA2ludAEFEWtfaW5pdE1hcmdpblJhdGlvAQZxdEFzdFIACQEDaW50AQUTa19xdW90ZUFzc2V0UmVzZXJ2ZQEGYnNBc3RSAAkBA2ludAEFEmtfYmFzZUFzc2V0UmVzZXJ2ZQERdG90YWxQb3NpdGlvblNpemUACQEDaW50AQUTa190b3RhbFBvc2l0aW9uU2l6ZQESY3VtdWxhdGl2ZU5vdGlvbmFsAAkBA2ludAEFFGtfY3VtdWxhdGl2ZU5vdGlvbmFsARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAJAQNpbnQBBRZrX29wZW5JbnRlcmVzdE5vdGlvbmFsARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAkBA2ludAEFEmtfbmV4dEZ1bmRpbmdCbG9jawEQZnVuZGluZ1BlcmlvZFJhdwAJAQNpbnQBBQ9rX2Z1bmRpbmdQZXJpb2QBFGZ1bmRpbmdQZXJpb2REZWNpbWFsAAkAaAIJARBmdW5kaW5nUGVyaW9kUmF3AAUMREVDSU1BTF9VTklUARRmdW5kaW5nUGVyaW9kU2Vjb25kcwAJAGgCCQEQZnVuZGluZ1BlcmlvZFJhdwAFB1NFQ09ORFMBFm1haW50ZW5hbmNlTWFyZ2luUmF0aW8ACQEDaW50AQUYa19tYWludGVuYW5jZU1hcmdpblJhdGlvARNsaXF1aWRhdGlvbkZlZVJhdGlvAAkBA2ludAEFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwELc3ByZWFkTGltaXQACQEDaW50AQUNa19zcHJlYWRMaW1pdAEObWF4UHJpY2VJbXBhY3QACQEDaW50AQUQa19tYXhQcmljZUltcGFjdAEjbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24ACQEDaW50AQUla19sYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAkBA2ludAEFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBA2ludAEFGGtfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQEVdG90YWxMb25nUG9zaXRpb25TaXplAAkBA2ludAEFF2tfdG90YWxMb25nUG9zaXRpb25TaXplARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwxfbWFyZ2luUmF0aW8QX2Jhc2VNYXJnaW5SYXRpbxRfbGFyZ2VyVGhhbk9yRXF1YWxUbwQUcmVtYWluaW5nTWFyZ2luUmF0aW8JAGUCBQxfbWFyZ2luUmF0aW8FEF9iYXNlTWFyZ2luUmF0aW8DAwUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGYCAAAFFHJlbWFpbmluZ01hcmdpblJhdGlvBwkAAgECDkludmFsaWQgbWFyZ2luAwMJAQEhAQUUX2xhcmdlclRoYW5PckVxdWFsVG8JAGcCBRRyZW1haW5pbmdNYXJnaW5SYXRpbwAABwkAAgECDkludmFsaWQgbWFyZ2luBgEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgENX3Bvc2l0aW9uU2l6ZQMJAAACBQ1fcG9zaXRpb25TaXplAAAJAAIBAixTaG91bGQgbm90IGJlIGNhbGxlZCB3aXRoIF9wb3NpdGlvblNpemUgPT0gMAMJAGYCBQ1fcG9zaXRpb25TaXplAAAJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAJASRsYXRlc3RTaG9ydEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24AAQtnZXRQb3NpdGlvbgEHX3RyYWRlcgQPcG9zaXRpb25TaXplT3B0CQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQdfdHJhZGVyBAckbWF0Y2gwBQ9wb3NpdGlvblNpemVPcHQDCQABAgUHJG1hdGNoMAIDSW50BAxwb3NpdGlvblNpemUFByRtYXRjaDAJAJYKBAUMcG9zaXRpb25TaXplCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQdfdHJhZGVyCQERQGV4dHJOYXRpdmUoMTA1MCkCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQdfdHJhZGVyCQCWCgQAAAAAAAAAAAETcmVxdWlyZU9wZW5Qb3NpdGlvbgEHX3RyYWRlcgMJAAACCAkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgJfMQAACQACAQIQTm8gb3BlbiBwb3NpdGlvbgYBC2luaXRpYWxpemVkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQ1rX2luaXRpYWxpemVkBwEGcGF1c2VkAAkBC3ZhbHVlT3JFbHNlAgkAmwgCBQR0aGlzBQhrX3BhdXNlZAcBDXVwZGF0ZVJlc2VydmUDBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudBBfYmFzZUFzc2V0QW1vdW50AwUGX2lzQWRkBAduZXdCYXNlCQBlAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQDCQBnAgAABQduZXdCYXNlCQACAQIqVHggbGVhZCB0byBiYXNlIGFzc2V0IHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCWCgQJAGQCCQEGcXRBc3RSAAURX3F1b3RlQXNzZXRBbW91bnQFB25ld0Jhc2UJAGQCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50CQBkAgkBEmN1bXVsYXRpdmVOb3Rpb25hbAAFEV9xdW90ZUFzc2V0QW1vdW50BAhuZXdRdW90ZQkAZQIJAQZxdEFzdFIABRFfcXVvdGVBc3NldEFtb3VudAMJAGcCAAAFCG5ld1F1b3RlCQACAQIqVHggbGVhZCB0byBiYXNlIHF1b3RlIHJlc2VydmUgPD0gMCwgcmV2ZXJ0CQCWCgQFCG5ld1F1b3RlCQBkAgkBBmJzQXN0UgAFEF9iYXNlQXNzZXRBbW91bnQJAGUCCQERdG90YWxQb3NpdGlvblNpemUABRBfYmFzZUFzc2V0QW1vdW50CQBlAgkBEmN1bXVsYXRpdmVOb3Rpb25hbAAFEV9xdW90ZUFzc2V0QW1vdW50AQlzd2FwSW5wdXQCBl9pc0FkZBFfcXVvdGVBc3NldEFtb3VudAQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAFrCQEEbXVsZAIFB19xdEFzdFIFB19ic0FzdFIEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIDBQZfaXNBZGQJAGQCBQdfcXRBc3RSBRFfcXVvdGVBc3NldEFtb3VudAkAZQIFB19xdEFzdFIFEV9xdW90ZUFzc2V0QW1vdW50BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIJAQRkaXZkAgUBawUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgQYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzCQEDYWJzAQkAZQIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUHX2JzQXN0UgQVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AwUGX2lzQWRkBRhhbW91bnRCYXNlQXNzZXRCb3VnaHRBYnMJAQEtAQUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBA0kdDAxMTgzNzEyMDMwCQENdXBkYXRlUmVzZXJ2ZQMFBl9pc0FkZAURX3F1b3RlQXNzZXRBbW91bnQFGGFtb3VudEJhc2VBc3NldEJvdWdodEFicwQXcXVvdGVBc3NldFJlc2VydmVBZnRlcjEIBQ0kdDAxMTgzNzEyMDMwAl8xBBZiYXNlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTE4MzcxMjAzMAJfMgQXdG90YWxQb3NpdGlvblNpemVBZnRlcjEIBQ0kdDAxMTgzNzEyMDMwAl8zBBhjdW11bGF0aXZlTm90aW9uYWxBZnRlcjEIBQ0kdDAxMTgzNzEyMDMwAl80BAtwcmljZUJlZm9yZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBAttYXJrZXRQcmljZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUYYW1vdW50QmFzZUFzc2V0Qm91Z2h0QWJzBAlwcmljZURpZmYJAQNhYnMBCQBlAgULcHJpY2VCZWZvcmUFC21hcmtldFByaWNlBAtwcmljZUltcGFjdAkAZQIFDERFQ0lNQUxfVU5JVAkBBGRpdmQCBQtwcmljZUJlZm9yZQkAZAIFC3ByaWNlQmVmb3JlBQlwcmljZURpZmYEE21heFByaWNlSW1wYWN0VmFsdWUJAQ5tYXhQcmljZUltcGFjdAADCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgICDVByaWNlIGltcGFjdCAJAKQDAQULcHJpY2VJbXBhY3QCFCA+IG1heCBwcmljZSBpbXBhY3QgCQCkAwEFE21heFByaWNlSW1wYWN0VmFsdWUCFSBiZWZvcmUgcXVvdGUgYXNzZXQ6IAkApAMBBQdfcXRBc3RSAhQgYmVmb3JlIGJhc2UgYXNzZXQ6IAkApAMBBQdfYnNBc3RSAiEgcXVvdGUgYXNzZXQgYW1vdW50IHRvIGV4Y2hhbmdlOiAJAKQDAQURX3F1b3RlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIOIG1hcmtldFByaWNlOiAJAKQDAQULbWFya2V0UHJpY2UJAJcKBQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0BRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEFGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQQX29sZFBvc2l0aW9uU2l6ZRJfb2xkUG9zaXRpb25NYXJnaW4lX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgxfbWFyZ2luRGVsdGEEDmZ1bmRpbmdQYXltZW50AwkBAiE9AgUQX29sZFBvc2l0aW9uU2l6ZQAABCBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBRBfb2xkUG9zaXRpb25TaXplCQEEbXVsZAIJAGUCBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUlX29sZFBvc2l0aW9uQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUQX29sZFBvc2l0aW9uU2l6ZQAABAxzaWduZWRNYXJnaW4JAGQCCQBlAgUMX21hcmdpbkRlbHRhBQ5mdW5kaW5nUGF5bWVudAUSX29sZFBvc2l0aW9uTWFyZ2luBA0kdDAxMzUyMTEzNjQ4AwkAZgIAAAUMc2lnbmVkTWFyZ2luCQCUCgIAAAkBA2FicwEFDHNpZ25lZE1hcmdpbgkAlAoCCQEDYWJzAQUMc2lnbmVkTWFyZ2luAAAEDHJlbWFpbk1hcmdpbggFDSR0MDEzNTIxMTM2NDgCXzEEB2JhZERlYnQIBQ0kdDAxMzUyMTEzNjQ4Al8yCQCVCgMFDHJlbWFpbk1hcmdpbgUHYmFkRGVidAUOZnVuZGluZ1BheW1lbnQBCnN3YXBPdXRwdXQDBl9pc0FkZBBfYmFzZUFzc2V0QW1vdW50FF9jaGVja01heFByaWNlSW1wYWN0BBJfcXVvdGVBc3NldFJlc2VydmUJAQZxdEFzdFIABBFfYmFzZUFzc2V0UmVzZXJ2ZQkBBmJzQXN0UgAEC3ByaWNlQmVmb3JlCQEEZGl2ZAIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQURX2Jhc2VBc3NldFJlc2VydmUDCQAAAgUQX2Jhc2VBc3NldEFtb3VudAAACQACAQIZSW52YWxpZCBiYXNlIGFzc2V0IGFtb3VudAQBawkBBG11bGQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlBBhiYXNlQXNzZXRQb29sQW1vdW50QWZ0ZXIDBQZfaXNBZGQJAGQCBRFfYmFzZUFzc2V0UmVzZXJ2ZQUQX2Jhc2VBc3NldEFtb3VudAkAZQIFEV9iYXNlQXNzZXRSZXNlcnZlBRBfYmFzZUFzc2V0QW1vdW50BA9xdW90ZUFzc2V0QWZ0ZXIJAQRkaXZkAgUBawUYYmFzZUFzc2V0UG9vbEFtb3VudEFmdGVyBA5xdW90ZUFzc2V0U29sZAkBA2FicwEJAGUCBQ9xdW90ZUFzc2V0QWZ0ZXIFEl9xdW90ZUFzc2V0UmVzZXJ2ZQQTbWF4UHJpY2VJbXBhY3RWYWx1ZQkBDm1heFByaWNlSW1wYWN0AAQNJHQwMTQ2MzIxNDgyNQkBDXVwZGF0ZVJlc2VydmUDCQEBIQEFBl9pc0FkZAUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQEF3F1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIxCAUNJHQwMTQ2MzIxNDgyNQJfMQQWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQgFDSR0MDE0NjMyMTQ4MjUCXzIEF3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIxCAUNJHQwMTQ2MzIxNDgyNQJfMwQYY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIxCAUNJHQwMTQ2MzIxNDgyNQJfNAQLbWFya2V0UHJpY2UJAQRkaXZkAgUOcXVvdGVBc3NldFNvbGQFEF9iYXNlQXNzZXRBbW91bnQECXByaWNlRGlmZgkBA2FicwEJAGUCBQtwcmljZUJlZm9yZQULbWFya2V0UHJpY2UEC3ByaWNlSW1wYWN0CQBlAgUMREVDSU1BTF9VTklUCQEEZGl2ZAIFC3ByaWNlQmVmb3JlCQBkAgULcHJpY2VCZWZvcmUFCXByaWNlRGlmZgMDCQBmAgULcHJpY2VJbXBhY3QFE21heFByaWNlSW1wYWN0VmFsdWUFFF9jaGVja01heFByaWNlSW1wYWN0BwkAAgEJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgINUHJpY2UgaW1wYWN0IAkApAMBBQtwcmljZUltcGFjdAIUID4gbWF4IHByaWNlIGltcGFjdCAJAKQDAQUTbWF4UHJpY2VJbXBhY3RWYWx1ZQIVIGJlZm9yZSBxdW90ZSBhc3NldDogCQCkAwEFEl9xdW90ZUFzc2V0UmVzZXJ2ZQIUIGJlZm9yZSBiYXNlIGFzc2V0OiAJAKQDAQURX2Jhc2VBc3NldFJlc2VydmUCICBiYXNlIGFzc2V0IGFtb3VudCB0byBleGNoYW5nZTogCQCkAwEFEF9iYXNlQXNzZXRBbW91bnQCDyBwcmljZSBiZWZvcmU6IAkApAMBBQtwcmljZUJlZm9yZQIPIG1hcmtldCBwcmljZTogCQCkAwEFC21hcmtldFByaWNlCQCZCgcFDnF1b3RlQXNzZXRTb2xkBRdxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyMQUWYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyMQUXdG90YWxQb3NpdGlvblNpemVBZnRlcjEFGGN1bXVsYXRpdmVOb3Rpb25hbEFmdGVyMQkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwUGX2lzQWRkCQEDYWJzAQUQX2Jhc2VBc3NldEFtb3VudAAACQBlAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkBASEBBQZfaXNBZGQJAQNhYnMBBRBfYmFzZUFzc2V0QW1vdW50AAABEmdldE9yYWNsZVR3YXBQcmljZQAEBm9yYWNsZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCmCAEJARFAZXh0ck5hdGl2ZSgxMDUzKQIFBHRoaXMFBWtfb3JhAgAECHByaWNlS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQlrX29yYV9rZXkECGJsb2NrS2V5CQERQGV4dHJOYXRpdmUoMTA1MykCBQR0aGlzBQ9rX29yYV9ibG9ja19rZXkECWxhc3RWYWx1ZQkBE3ZhbHVlT3JFcnJvck1lc3NhZ2UCCQCaCAIFBm9yYWNsZQUIcHJpY2VLZXkJAKwCAgkArAICCQCsAgICIkNhbiBub3QgZ2V0IG9yYWNsZSBwcmljZS4gT3JhY2xlOiAJAKUIAQUGb3JhY2xlAgYga2V5OiAFCHByaWNlS2V5BQlsYXN0VmFsdWUBDGdldFNwb3RQcmljZQAEEl9xdW90ZUFzc2V0UmVzZXJ2ZQkBBnF0QXN0UgAEEV9iYXNlQXNzZXRSZXNlcnZlCQEGYnNBc3RSAAkBBGRpdmQCBRJfcXVvdGVBc3NldFJlc2VydmUFEV9iYXNlQXNzZXRSZXNlcnZlARZpc092ZXJGbHVjdHVhdGlvbkxpbWl0AAQLb3JhY2xlUHJpY2UJARJnZXRPcmFjbGVUd2FwUHJpY2UABAxjdXJyZW50UHJpY2UJAQxnZXRTcG90UHJpY2UACQBmAgkBBGRpdmQCCQEDYWJzAQkAZQIFC29yYWNsZVByaWNlBQxjdXJyZW50UHJpY2UFC29yYWNsZVByaWNlCQELc3ByZWFkTGltaXQAASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIHX3RyYWRlcgdfb3B0aW9uBA0kdDAxNzI5MzE3NDIxCQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAxNzI5MzE3NDIxAl8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDE3MjkzMTc0MjECXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMTcyOTMxNzQyMQJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAxNzI5MzE3NDIxAl80BA9wb3NpdGlvblNpemVBYnMJAQNhYnMBBQxwb3NpdGlvblNpemUDCQAAAgUPcG9zaXRpb25TaXplQWJzAAAJAAIBAhVJbnZhbGlkIHBvc2l0aW9uIHNpemUEB2lzU2hvcnQJAGYCAAAFDHBvc2l0aW9uU2l6ZQQQcG9zaXRpb25Ob3Rpb25hbAMJAAACBQdfb3B0aW9uBQ9QTkxfT1BUSU9OX1NQT1QEDSR0MDE3NjY4MTc3OTIJAQpzd2FwT3V0cHV0AwkBASEBBQdpc1Nob3J0BQ9wb3NpdGlvblNpemVBYnMHBBNvdXRQb3NpdGlvbk5vdGlvbmFsCAUNJHQwMTc2NjgxNzc5MgJfMQQCeDEIBQ0kdDAxNzY2ODE3NzkyAl8yBAJ4MggFDSR0MDE3NjY4MTc3OTICXzMEAngzCAUNJHQwMTc2NjgxNzc5MgJfNAUTb3V0UG9zaXRpb25Ob3Rpb25hbAkBBG11bGQCBQ9wb3NpdGlvblNpemVBYnMJARJnZXRPcmFjbGVUd2FwUHJpY2UABA11bnJlYWxpemVkUG5sAwUHaXNTaG9ydAkAZQIFFHBvc2l0aW9uT3Blbk5vdGlvbmFsBRBwb3NpdGlvbk5vdGlvbmFsCQBlAgUQcG9zaXRpb25Ob3Rpb25hbAUUcG9zaXRpb25PcGVuTm90aW9uYWwJAJQKAgUQcG9zaXRpb25Ob3Rpb25hbAUNdW5yZWFsaXplZFBubAEPY2FsY01hcmdpblJhdGlvAw1fcmVtYWluTWFyZ2luCF9iYWREZWJ0EV9wb3NpdGlvbk5vdGlvbmFsCQEEZGl2ZAIJAGUCBQ1fcmVtYWluTWFyZ2luBQhfYmFkRGVidAURX3Bvc2l0aW9uTm90aW9uYWwBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CB190cmFkZXIHX29wdGlvbgQNJHQwMTg0NjIxODU3MwkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwMTg0NjIxODU3MwJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDAxODQ2MjE4NTczAl8yBANwb24IBQ0kdDAxODQ2MjE4NTczAl8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDE4NDYyMTg1NzMCXzQEDSR0MDE4NTc5MTg2NzIJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFB19vcHRpb24EEHBvc2l0aW9uTm90aW9uYWwIBQ0kdDAxODU3OTE4NjcyAl8xBA11bnJlYWxpemVkUG5sCAUNJHQwMTg1NzkxODY3MgJfMgQNJHQwMTg2NzcxODg0MwkBImNhbGNSZW1haW5NYXJnaW5XaXRoRnVuZGluZ1BheW1lbnQEBQxwb3NpdGlvblNpemUFDnBvc2l0aW9uTWFyZ2luBRFwb3NpdGlvbkxzdFVwZENQRgUNdW5yZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMTg2NzcxODg0MwJfMQQHYmFkRGVidAgFDSR0MDE4Njc3MTg4NDMCXzIJAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFEHBvc2l0aW9uTm90aW9uYWwBDmdldE1hcmdpblJhdGlvAQdfdHJhZGVyCQEWZ2V0TWFyZ2luUmF0aW9CeU9wdGlvbgIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAEVaW50ZXJuYWxDbG9zZVBvc2l0aW9uAgdfdHJhZGVyFF9jaGVja01heFByaWNlSW1wYWN0BA0kdDAxOTE5MDE5MzE4CQELZ2V0UG9zaXRpb24BBQdfdHJhZGVyBAxwb3NpdGlvblNpemUIBQ0kdDAxOTE5MDE5MzE4Al8xBA5wb3NpdGlvbk1hcmdpbggFDSR0MDE5MTkwMTkzMTgCXzIEFHBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMTkxOTAxOTMxOAJfMwQRcG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDAxOTE5MDE5MzE4Al80BA0kdDAxOTMyNDE5NDExCQEjZ2V0UG9zaXRpb25Ob3Rpb25hbEFuZFVucmVhbGl6ZWRQbmwCBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEAngxCAUNJHQwMTkzMjQxOTQxMQJfMQQNdW5yZWFsaXplZFBubAgFDSR0MDE5MzI0MTk0MTECXzIEDSR0MDE5NDE2MTk1ODQJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUMcG9zaXRpb25TaXplBQ5wb3NpdGlvbk1hcmdpbgURcG9zaXRpb25Mc3RVcGRDUEYFDXVucmVhbGl6ZWRQbmwEDHJlbWFpbk1hcmdpbggFDSR0MDE5NDE2MTk1ODQCXzEEB2JhZERlYnQIBQ0kdDAxOTQxNjE5NTg0Al8yBBVleGNoYW5nZWRQb3NpdGlvblNpemUJAQEtAQUMcG9zaXRpb25TaXplBAtyZWFsaXplZFBubAUNdW5yZWFsaXplZFBubAQNbWFyZ2luVG9WYXVsdAkBAS0BBQxyZW1haW5NYXJnaW4EDSR0MDE5NzExMjAwMjIJAQpzd2FwT3V0cHV0AwkAZgIFDHBvc2l0aW9uU2l6ZQAACQEDYWJzAQUMcG9zaXRpb25TaXplBRRfY2hlY2tNYXhQcmljZUltcGFjdAQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAgFDSR0MDE5NzExMjAwMjICXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAxOTcxMTIwMDIyAl8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAxOTcxMTIwMDIyAl8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMTk3MTEyMDAyMgJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAxOTcxMTIwMDIyAl81BA50b3RhbExvbmdBZnRlcggFDSR0MDE5NzExMjAwMjICXzYED3RvdGFsU2hvcnRBZnRlcggFDSR0MDE5NzExMjAwMjICXzcEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIJAGUCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABRRwb3NpdGlvbk9wZW5Ob3Rpb25hbAkAngoMBRVleGNoYW5nZWRQb3NpdGlvblNpemUFB2JhZERlYnQFC3JlYWxpemVkUG5sBQ1tYXJnaW5Ub1ZhdWx0BRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBRlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50BQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyARBnZXRUd2FwU3BvdFByaWNlAAQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQNc3RhcnRNaW51dGVJZAkAZQIFCG1pbnV0ZUlkBQ1UV0FQX0lOVEVSVkFMBAdsaXN0U3RyCQELdmFsdWVPckVsc2UCCQCdCAIFBHRoaXMFDWtfbGFzdERhdGFTdHICAAQEbGlzdAkAtQkCBQdsaXN0U3RyAgEsCgEIZmlsdGVyRm4CC2FjY3VtdWxhdG9yBG5leHQDCQBnAgUNc3RhcnRNaW51dGVJZAkBDXBhcnNlSW50VmFsdWUBBQRuZXh0CQDNCAIFC2FjY3VtdWxhdG9yCQENcGFyc2VJbnRWYWx1ZQEFBG5leHQFC2FjY3VtdWxhdG9yBAVsaXN0RgoAAiRsBQRsaXN0CgACJHMJAJADAQUCJGwKAAUkYWNjMAUDbmlsCgEFJGYwXzECAiRhAiRpAwkAZwIFAiRpBQIkcwUCJGEJAQhmaWx0ZXJGbgIFAiRhCQCRAwIFAiRsBQIkaQoBBSRmMF8yAgIkYQIkaQMJAGcCBQIkaQUCJHMFAiRhCQACAQIUTGlzdCBzaXplIGV4Y2VlZHMgMjAJAQUkZjBfMgIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIJAQUkZjBfMQIFBSRhY2MwAAAAAQACAAMABAAFAAYABwAIAAkACgALAAwADQAOAA8AEAARABIAEwAUBAhtYXhJbmRleAMJAGYCCQCQAwEFBWxpc3RGAAAJAJYDAQUFbGlzdEYJAQ1wYXJzZUludFZhbHVlAQkAkQMCBQRsaXN0AAAEDGxhc3RNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAABBZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQxsYXN0TWludXRlSWQAAAQMZW5kTGFzdFByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBRNrX3R3YXBEYXRhTGFzdFByaWNlAgFfCQCkAwEFDGxhc3RNaW51dGVJZAAABBJub3dDdW11bGF0aXZlUHJpY2UJAGQCBRZlbmRMYXN0Q3VtdWxhdGl2ZVByaWNlCQBoAgkAZQIFCG1pbnV0ZUlkBQxsYXN0TWludXRlSWQFDGVuZExhc3RQcmljZQQYc3RhcnRMYXN0Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABA5zdGFydExhc3RQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBQhtYXhJbmRleAAABBRzdGFydEN1bXVsYXRpdmVQcmljZQkAZAIFGHN0YXJ0TGFzdEN1bXVsYXRpdmVQcmljZQkAaAIJAGUCBQ1zdGFydE1pbnV0ZUlkBQhtYXhJbmRleAUOc3RhcnRMYXN0UHJpY2UJAGkCCQBlAgUSbm93Q3VtdWxhdGl2ZVByaWNlBRRzdGFydEN1bXVsYXRpdmVQcmljZQUNVFdBUF9JTlRFUlZBTAEOdXBkYXRlU2V0dGluZ3MHEF9pbml0TWFyZ2luUmF0aW8EX21tchRfbGlxdWlkYXRpb25GZWVSYXRpbw5fZnVuZGluZ1BlcmlvZARfZmVlDF9zcHJlYWRMaW1pdA9fbWF4UHJpY2VJbXBhY3QJAMwIAgkBDEludGVnZXJFbnRyeQIFEWtfaW5pdE1hcmdpblJhdGlvBRBfaW5pdE1hcmdpblJhdGlvCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRhrX21haW50ZW5hbmNlTWFyZ2luUmF0aW8FBF9tbXIJAMwIAgkBDEludGVnZXJFbnRyeQIFFWtfbGlxdWlkYXRpb25GZWVSYXRpbwUUX2xpcXVpZGF0aW9uRmVlUmF0aW8JAMwIAgkBDEludGVnZXJFbnRyeQIFD2tfZnVuZGluZ1BlcmlvZAUOX2Z1bmRpbmdQZXJpb2QJAMwIAgkBDEludGVnZXJFbnRyeQIFBWtfZmVlBQRfZmVlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBQ1rX3NwcmVhZExpbWl0BQxfc3ByZWFkTGltaXQJAMwIAgkBDEludGVnZXJFbnRyeQIFEGtfbWF4UHJpY2VJbXBhY3QFD19tYXhQcmljZUltcGFjdAUDbmlsAQ11cGRhdGVGdW5kaW5nBRFfbmV4dEZ1bmRpbmdCbG9jayRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24lX2xhdGVzdFNob3J0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbhBfbG9uZ0Z1bmRpbmdSYXRlEV9zaG9ydEZ1bmRpbmdSYXRlCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRJrX25leHRGdW5kaW5nQmxvY2sFEV9uZXh0RnVuZGluZ0Jsb2NrCQDMCAIJAQxJbnRlZ2VyRW50cnkCBSVrX2xhdGVzdExvbmdDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSRfbGF0ZXN0TG9uZ0N1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24JAMwIAgkBDEludGVnZXJFbnRyeQIFJmtfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBSVfbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRFrX2xvbmdGdW5kaW5nUmF0ZQUQX2xvbmdGdW5kaW5nUmF0ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19zaG9ydEZ1bmRpbmdSYXRlBRFfc2hvcnRGdW5kaW5nUmF0ZQUDbmlsAQ51cGRhdGVQb3NpdGlvbgUIX2FkZHJlc3MFX3NpemUHX21hcmdpbg1fb3Blbk5vdGlvbmFsIF9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBQ5rX3Bvc2l0aW9uU2l6ZQUIX2FkZHJlc3MFBV9zaXplCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwUHX21hcmdpbgkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUWa19wb3NpdGlvbk9wZW5Ob3Rpb25hbAUIX2FkZHJlc3MFDV9vcGVuTm90aW9uYWwJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFLmtfcG9zaXRpb25MYXN0VXBkYXRlZEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24FCF9hZGRyZXNzBSBfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgUDbmlsAQphcHBlbmRUd2FwAQVwcmljZQQIbWludXRlSWQJAGkCCQBpAggFCWxhc3RCbG9jawl0aW1lc3RhbXAA6AcAPAQQcHJldmlvdXNNaW51dGVJZAkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzBQ5rX2xhc3RNaW51dGVJZAAAAwkAZgIFEHByZXZpb3VzTWludXRlSWQFCG1pbnV0ZUlkCQACAQIRVFdBUCBvdXQtb2Ytb3JkZXIEDGxhc3RNaW51dGVJZAMJAAACBRBwcmV2aW91c01pbnV0ZUlkAAAFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkAwkAZgIFCG1pbnV0ZUlkBRBwcmV2aW91c01pbnV0ZUlkBBNwcmV2Q3VtdWxhdGl2ZVByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAKwCAgkArAICBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkAAAECXByZXZQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQCsAgIJAKwCAgUTa190d2FwRGF0YUxhc3RQcmljZQIBXwkApAMBBRBwcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFDGxhc3RNaW51dGVJZAUJcHJldlByaWNlBARsaXN0CQELcHVzaFRvUXVldWUDCQEJc3RyVG9MaXN0AQkBC3ZhbHVlT3JFbHNlAgkAnQgCBQR0aGlzBQ1rX2xhc3REYXRhU3RyAgAFDVRXQVBfSU5URVJWQUwJAKQDAQUIbWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIJAQ50b0NvbXBvc2l0ZUtleQIFHWtfdHdhcERhdGFMYXN0Q3VtdWxhdGl2ZVByaWNlCQCkAwEFCG1pbnV0ZUlkBRNsYXN0Q3VtdWxhdGl2ZVByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBRNrX3R3YXBEYXRhTGFzdFByaWNlCQCkAwEFCG1pbnV0ZUlkBQVwcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQFEHByZXZpb3VzTWludXRlSWQJAMwIAgkBDEludGVnZXJFbnRyeQIFDmtfbGFzdE1pbnV0ZUlkBQhtaW51dGVJZAkAzAgCCQELU3RyaW5nRW50cnkCBQ1rX2xhc3REYXRhU3RyCQEJbGlzdFRvU3RyAQUEbGlzdAUDbmlsBBh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAQt2YWx1ZU9yRWxzZQIJAJoIAgUEdGhpcwkBDnRvQ29tcG9zaXRlS2V5AgUaa190d2FwRGF0YVByZXZpb3VzTWludXRlSWQJAKQDAQUIbWludXRlSWQAAAQTcHJldkN1bXVsYXRpdmVQcmljZQkBC3ZhbHVlT3JFbHNlAgkAmggCBQR0aGlzCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBRh0d2FwRGF0YVByZXZpb3VzTWludXRlSWQAAAQJcHJldlByaWNlCQELdmFsdWVPckVsc2UCCQCaCAIFBHRoaXMJAQ50b0NvbXBvc2l0ZUtleQIFE2tfdHdhcERhdGFMYXN0UHJpY2UJAKQDAQUYdHdhcERhdGFQcmV2aW91c01pbnV0ZUlkBQVwcmljZQQTbGFzdEN1bXVsYXRpdmVQcmljZQkAZAIFE3ByZXZDdW11bGF0aXZlUHJpY2UJAGgCCQBlAgUIbWludXRlSWQFGHR3YXBEYXRhUHJldmlvdXNNaW51dGVJZAUJcHJldlByaWNlCQDMCAIJAQxJbnRlZ2VyRW50cnkCCQEOdG9Db21wb3NpdGVLZXkCBR1rX3R3YXBEYXRhTGFzdEN1bXVsYXRpdmVQcmljZQkApAMBBQhtaW51dGVJZAUTbGFzdEN1bXVsYXRpdmVQcmljZQkAzAgCCQEMSW50ZWdlckVudHJ5AgkBDnRvQ29tcG9zaXRlS2V5AgUTa190d2FwRGF0YUxhc3RQcmljZQkApAMBBQhtaW51dGVJZAUFcHJpY2UFA25pbAERdXBkYXRlQW1tUmVzZXJ2ZXMCB19xdEFzdFIHX2JzQXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUTa19xdW90ZUFzc2V0UmVzZXJ2ZQUHX3F0QXN0UgkAzAgCCQEMSW50ZWdlckVudHJ5AgUSa19iYXNlQXNzZXRSZXNlcnZlBQdfYnNBc3RSBQNuaWwBCXVwZGF0ZUFtbQcHX3F0QXN0UgdfYnNBc3RSF190b3RhbFBvc2l0aW9uU2l6ZUFmdGVyGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlchVfb3BlbkludGVyZXN0Tm90aW9uYWwWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQMJAQIhPQIJAGUCBRZfdG90YWxMb25nUG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAAIBCQCsAgIJAKwCAgkArAICCQCsAgIJAKwCAgIYSW52YWxpZCBBTU0gc3RhdGUgZGF0YTogCQCkAwEFFl90b3RhbExvbmdQb3NpdGlvblNpemUCBCArICAJAKQDAQUXX3RvdGFsU2hvcnRQb3NpdGlvblNpemUCBCAhPSAJAKQDAQUXX3RvdGFsUG9zaXRpb25TaXplQWZ0ZXIJAM4IAgkAzggCCQERdXBkYXRlQW1tUmVzZXJ2ZXMCBQdfcXRBc3RSBQdfYnNBc3RSCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRNrX3RvdGFsUG9zaXRpb25TaXplBRdfdG90YWxQb3NpdGlvblNpemVBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUUa19jdW11bGF0aXZlTm90aW9uYWwFGF9jdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAzAgCCQEMSW50ZWdlckVudHJ5AgUWa19vcGVuSW50ZXJlc3ROb3Rpb25hbAUVX29wZW5JbnRlcmVzdE5vdGlvbmFsCQDMCAIJAQxJbnRlZ2VyRW50cnkCBRdrX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQUWX3RvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUYa190b3RhbFNob3J0UG9zaXRpb25TaXplBRdfdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQUDbmlsCQEKYXBwZW5kVHdhcAEJAQRkaXZkAgUHX3F0QXN0UgUHX2JzQXN0UgEOZGVsZXRlUG9zaXRpb24BCF9hZGRyZXNzCQDMCAIJAQtEZWxldGVFbnRyeQEJAQ50b0NvbXBvc2l0ZUtleQIFDmtfcG9zaXRpb25TaXplBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRBrX3Bvc2l0aW9uTWFyZ2luBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBRZrX3Bvc2l0aW9uT3Blbk5vdGlvbmFsBQhfYWRkcmVzcwkAzAgCCQELRGVsZXRlRW50cnkBCQEOdG9Db21wb3NpdGVLZXkCBS5rX3Bvc2l0aW9uTGFzdFVwZGF0ZWRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uBQhfYWRkcmVzcwUDbmlsAQh3aXRoZHJhdwIIX2FkZHJlc3MHX2Ftb3VudAQHYmFsYW5jZQkA8AcCBQR0aGlzCQEKcXVvdGVBc3NldAADCQBmAgUHX2Ftb3VudAUHYmFsYW5jZQkAAgEJAKwCAgkArAICCQCsAgICE1VuYWJsZSB0byB3aXRoZHJhdyAJAKQDAQUHX2Ftb3VudAIXIGZyb20gY29udHJhY3QgYmFsYW5jZSAJAKQDAQUHYmFsYW5jZQkAzAgCCQEOU2NyaXB0VHJhbnNmZXIDBQhfYWRkcmVzcwUHX2Ftb3VudAkBCnF1b3RlQXNzZXQABQNuaWwBDXVwZGF0ZUJhbGFuY2UBAWkDCQBmAgAABQFpCQACAQIHQmFsYW5jZQkAzAgCCQEMSW50ZWdlckVudHJ5AgUJa19iYWxhbmNlBQFpBQNuaWwBC3RyYW5zZmVyRmVlAQFpCQDMCAIJAQ5TY3JpcHRUcmFuc2ZlcgMJAQ5zdGFraW5nQWRkcmVzcwAFAWkJAQpxdW90ZUFzc2V0AAUDbmlsEAFpAQVwYXVzZQADCQECIT0CCAUBaQZjYWxsZXIJAQxhZG1pbkFkZHJlc3MACQACAQIaSW52YWxpZCB0b2dnbGVQYXVzZSBwYXJhbXMJAMwIAgkBDEJvb2xlYW5FbnRyeQIFCGtfcGF1c2VkBgUDbmlsAWkBB3VucGF1c2UAAwkBAiE9AggFAWkGY2FsbGVyCQEMYWRtaW5BZGRyZXNzAAkAAgECGkludmFsaWQgdG9nZ2xlUGF1c2UgcGFyYW1zCQDMCAIJAQxCb29sZWFuRW50cnkCBQhrX3BhdXNlZAcFA25pbAFpAQxhZGRMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECG0ludmFsaWQgYWRkTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBRiYXNlQXNzZXRBbW91bnRUb0FkZAkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBkAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBkAgUHX2JzQXN0UgUUYmFzZUFzc2V0QW1vdW50VG9BZGQJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ9yZW1vdmVMaXF1aWRpdHkBEV9xdW90ZUFzc2V0QW1vdW50AwMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAGCQBnAgAABRFfcXVvdGVBc3NldEFtb3VudAkAAgECHkludmFsaWQgcmVtb3ZlTGlxdWlkaXR5IHBhcmFtcwQHX3F0QXN0UgkBBnF0QXN0UgAEB19ic0FzdFIJAQZic0FzdFIABAVwcmljZQkBBGRpdmQCBQdfcXRBc3RSBQdfYnNBc3RSBBdiYXNlQXNzZXRBbW91bnRUb1JlbW92ZQkBBGRpdmQCBRFfcXVvdGVBc3NldEFtb3VudAUFcHJpY2UEC3F0QXN0UkFmdGVyCQBlAgUHX3F0QXN0UgURX3F1b3RlQXNzZXRBbW91bnQEC2JzQXN0UkFmdGVyCQBlAgUHX2JzQXN0UgUXYmFzZUFzc2V0QW1vdW50VG9SZW1vdmUJARF1cGRhdGVBbW1SZXNlcnZlcwIFC3F0QXN0UkFmdGVyBQtic0FzdFJBZnRlcgFpAQ5jaGFuZ2VTZXR0aW5ncwcQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvDl9mdW5kaW5nUGVyaW9kBF9mZWUMX3NwcmVhZExpbWl0D19tYXhQcmljZUltcGFjdAMJAQIhPQIIBQFpBmNhbGxlcgkBDGFkbWluQWRkcmVzcwAJAAIBAh1JbnZhbGlkIGNoYW5nZVNldHRpbmdzIHBhcmFtcwkBDnVwZGF0ZVNldHRpbmdzBwUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAFpAQppbml0aWFsaXplDAdfcXRBc3RSB19ic0FzdFIOX2Z1bmRpbmdQZXJpb2QQX2luaXRNYXJnaW5SYXRpbwRfbW1yFF9saXF1aWRhdGlvbkZlZVJhdGlvBF9mZWUHX29yYWNsZQpfb3JhY2xlS2V5DF9jb29yZGluYXRvcgxfc3ByZWFkTGltaXQPX21heFByaWNlSW1wYWN0AwMDAwMDAwMDAwkAZwIAAAUHX3F0QXN0UgYJAGcCAAAFB19ic0FzdFIGCQBnAgAABQ5fZnVuZGluZ1BlcmlvZAYJAGcCAAAFEF9pbml0TWFyZ2luUmF0aW8GCQBnAgAABQRfbW1yBgkAZwIAAAUUX2xpcXVpZGF0aW9uRmVlUmF0aW8GCQBnAgAABQRfZmVlBgkAZwIAAAUMX3NwcmVhZExpbWl0BgkAZwIAAAUPX21heFByaWNlSW1wYWN0BgkBC2luaXRpYWxpemVkAAkAAgECHUludmFsaWQgaW5pdGlhbGl6ZSBwYXJhbWV0ZXJzCQDOCAIJAM4IAgkAzggCCQDOCAIJAQl1cGRhdGVBbW0HBQdfcXRBc3RSBQdfYnNBc3RSAAAAAAAAAAAAAAkBDnVwZGF0ZVNldHRpbmdzBwUQX2luaXRNYXJnaW5SYXRpbwUEX21tcgUUX2xpcXVpZGF0aW9uRmVlUmF0aW8FDl9mdW5kaW5nUGVyaW9kBQRfZmVlBQxfc3ByZWFkTGltaXQFD19tYXhQcmljZUltcGFjdAkBDXVwZGF0ZUZ1bmRpbmcFCQBkAggFCWxhc3RCbG9jawl0aW1lc3RhbXAFDl9mdW5kaW5nUGVyaW9kAAAAAAAAAAAJAQ11cGRhdGVCYWxhbmNlAQAACQDMCAIJAQxCb29sZWFuRW50cnkCBQ1rX2luaXRpYWxpemVkBgkAzAgCCQELU3RyaW5nRW50cnkCBQVrX29yYQUHX29yYWNsZQkAzAgCCQELU3RyaW5nRW50cnkCBQlrX29yYV9rZXkFCl9vcmFjbGVLZXkJAMwIAgkBC1N0cmluZ0VudHJ5AgUUa19jb29yZGluYXRvckFkZHJlc3MFDF9jb29yZGluYXRvcgUDbmlsAWkBEGRlY3JlYXNlUG9zaXRpb24DB19hbW91bnQJX2xldmVyYWdlE19taW5CYXNlQXNzZXRBbW91bnQDAwMDAwkAZwIAAAUHX2Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQEhAQkBFnJlcXVpcmVNb3JlTWFyZ2luUmF0aW8DCQEEZGl2ZAIFDERFQ0lNQUxfVU5JVAUJX2xldmVyYWdlCQEPaW5pdE1hcmdpblJhdGlvAAYGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEGcGF1c2VkAAkAAgECI0ludmFsaWQgZGVjcmVhc2VQb3NpdGlvbiBwYXJhbWV0ZXJzBA0kdDAzMDkzMTMxMDgzCQELZ2V0UG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgQPb2xkUG9zaXRpb25TaXplCAUNJHQwMzA5MzEzMTA4MwJfMQQRb2xkUG9zaXRpb25NYXJnaW4IBQ0kdDAzMDkzMTMxMDgzAl8yBBdvbGRQb3NpdGlvbk9wZW5Ob3Rpb25hbAgFDSR0MDMwOTMxMzEwODMCXzMEFG9sZFBvc2l0aW9uTHN0VXBkQ1BGCAUNJHQwMzA5MzEzMTA4MwJfNAQKX2RpcmVjdGlvbgMJAGYCBQ9vbGRQb3NpdGlvblNpemUAAAUJRElSX1NIT1JUBQhESVJfTE9ORwQFaXNBZGQJAAACBQpfZGlyZWN0aW9uBQhESVJfTE9ORwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzEyNTYzMTM3MgkBI2dldFBvc2l0aW9uTm90aW9uYWxBbmRVbnJlYWxpemVkUG5sAgkApQgBCAUBaQZjYWxsZXIFD1BOTF9PUFRJT05fU1BPVAQTb2xkUG9zaXRpb25Ob3Rpb25hbAgFDSR0MDMxMjU2MzEzNzICXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDAzMTI1NjMxMzcyAl8yBA0kdDAzMTM3ODMzOTI3AwkAZgIFE29sZFBvc2l0aW9uTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAQNJHQwMzE3NTUzMTk3NAkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWV4Y2hhbmdlZFBvc2l0aW9uU2l6ZQgFDSR0MDMxNzU1MzE5NzQCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMTc1NTMxOTc0Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMTc1NTMxOTc0Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzE3NTUzMTk3NAJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzMTc1NTMxOTc0Al81BBhleGNoYW5nZWRQb3NpdGlvblNpemVBYnMJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUDAwkBAiE9AgUTX21pbkJhc2VBc3NldEFtb3VudAAACQBmAgUTX21pbkJhc2VBc3NldEFtb3VudAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzBwkAAgEJAKwCAgkArAICCQCsAgICJVRvbyBsaXR0bGUgYmFzZSBhc3NldCBleGNoYW5nZWQsIGdvdCAJAKQDAQUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzAgogZXhwZWN0ZWQgCQCkAwEFE19taW5CYXNlQXNzZXRBbW91bnQEC3JlYWxpemVkUG5sCQEEZGl2ZAIJAQRtdWxkAgUNdW5yZWFsaXplZFBubAUYZXhjaGFuZ2VkUG9zaXRpb25TaXplQWJzCQEDYWJzAQUPb2xkUG9zaXRpb25TaXplBA0kdDAzMjQxMTMyNjU2CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQtyZWFsaXplZFBubAQMcmVtYWluTWFyZ2luCAUNJHQwMzI0MTEzMjY1NgJfMQQHYmFkRGVidAgFDSR0MDMyNDExMzI2NTYCXzIEDmZ1bmRpbmdQYXltZW50CAUNJHQwMzI0MTEzMjY1NgJfMwQZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAUMb3Blbk5vdGlvbmFsBBJ1bnJlYWxpemVkUG5sQWZ0ZXIJAGUCBQ11bnJlYWxpemVkUG5sBQtyZWFsaXplZFBubAQScmVtYWluT3Blbk5vdGlvbmFsAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQBlAgkAZQIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQFEnVucmVhbGl6ZWRQbmxBZnRlcgkAZQIJAGQCBRJ1bnJlYWxpemVkUG5sQWZ0ZXIFE29sZFBvc2l0aW9uTm90aW9uYWwFGWV4Y2hhbmdlZFF1b3RlQXNzZXRBbW91bnQED25ld1Bvc2l0aW9uU2l6ZQkAZAIFD29sZFBvc2l0aW9uU2l6ZQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplCQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQEDYWJzAQUScmVtYWluT3Blbk5vdGlvbmFsCQEfbGF0ZXN0Q3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgEFD25ld1Bvc2l0aW9uU2l6ZQUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgkAZQIJARRvcGVuSW50ZXJlc3ROb3Rpb25hbAAFDG9wZW5Ob3Rpb25hbAkAZQIJARV0b3RhbExvbmdQb3NpdGlvblNpemUAAwkAZgIFD25ld1Bvc2l0aW9uU2l6ZQAACQEDYWJzAQUVZXhjaGFuZ2VkUG9zaXRpb25TaXplAAAJAGUCCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQADCQBmAgAABQ9uZXdQb3NpdGlvblNpemUJAQNhYnMBBRVleGNoYW5nZWRQb3NpdGlvblNpemUAAAkAAgECFENsb3NlIHBvc2l0aW9uIGZpcnN0BA9uZXdQb3NpdGlvblNpemUIBQ0kdDAzMTM3ODMzOTI3Al8xBBduZXdQb3NpdGlvblJlbWFpbk1hcmdpbggFDSR0MDMxMzc4MzM5MjcCXzIEF25ld1Bvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwMzEzNzgzMzkyNwJfMwQUbmV3UG9zaXRpb25MYXRlc3RDUEYIBQ0kdDAzMTM3ODMzOTI3Al80BBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzMTM3ODMzOTI3Al81BBZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyCAUNJHQwMzEzNzgzMzkyNwJfNgQWdG90YWxQb3NpdGlvblNpemVBZnRlcggFDSR0MDMxMzc4MzM5MjcCXzcEF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyCAUNJHQwMzEzNzgzMzkyNwJfOAQZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcggFDSR0MDMxMzc4MzM5MjcCXzkEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwMzEzNzgzMzkyNwNfMTAED3RvdGFsU2hvcnRBZnRlcggFDSR0MDMxMzc4MzM5MjcDXzExBA5ub3RpZnlOb3Rpb25hbAkA/AcECQEMbWluZXJBZGRyZXNzAAIObm90aWZ5Tm90aW9uYWwJAMwIAgkApQgBCAUBaQZjYWxsZXIJAMwIAgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFA25pbAUDbmlsAwkAAAIFDm5vdGlmeU5vdGlvbmFsBQ5ub3RpZnlOb3Rpb25hbAkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpARBpbmNyZWFzZVBvc2l0aW9uAwpfZGlyZWN0aW9uCV9sZXZlcmFnZRNfbWluQmFzZUFzc2V0QW1vdW50BApfcmF3QW1vdW50CAkAkQMCCAUBaQhwYXltZW50cwAABmFtb3VudAMDAwMDAwMJAQIhPQIFCl9kaXJlY3Rpb24FCERJUl9MT05HCQECIT0CBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQHBgkAZwIAAAUKX3Jhd0Ftb3VudAYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQIhPQIICQCRAwIIBQFpCHBheW1lbnRzAAAHYXNzZXRJZAkBCnF1b3RlQXNzZXQABgkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMJAQRkaXZkAgUMREVDSU1BTF9VTklUBQlfbGV2ZXJhZ2UJAQ9pbml0TWFyZ2luUmF0aW8ABgYJAQZwYXVzZWQACQACAQIjSW52YWxpZCBpbmNyZWFzZVBvc2l0aW9uIHBhcmFtZXRlcnMECWZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50CQEDZmVlAAQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFCWZlZUFtb3VudAQNJHQwMzUwNDUzNTE5NwkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDM1MDQ1MzUxOTcCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzUwNDUzNTE5NwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNTA0NTM1MTk3Al8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM1MDQ1MzUxOTcCXzQEDWlzTmV3UG9zaXRpb24JAAACBQ9vbGRQb3NpdGlvblNpemUAAAQPaXNTYW1lRGlyZWN0aW9uAwkAZgIFD29sZFBvc2l0aW9uU2l6ZQAACQAAAgUKX2RpcmVjdGlvbgUIRElSX0xPTkcJAAACBQpfZGlyZWN0aW9uBQlESVJfU0hPUlQEDmV4cGFuZEV4aXN0aW5nAwkBASEBBQ1pc05ld1Bvc2l0aW9uBQ9pc1NhbWVEaXJlY3Rpb24HBAVpc0FkZAkAAAIFCl9kaXJlY3Rpb24FCERJUl9MT05HBA0kdDAzNTQ4NjM3ODc1AwMFDWlzTmV3UG9zaXRpb24GBQ5leHBhbmRFeGlzdGluZwQMb3Blbk5vdGlvbmFsCQEEbXVsZAIFB19hbW91bnQFCV9sZXZlcmFnZQQNJHQwMzU5MTAzNjExNgkBCXN3YXBJbnB1dAIFBWlzQWRkBQxvcGVuTm90aW9uYWwEFWFtb3VudEJhc2VBc3NldEJvdWdodAgFDSR0MDM1OTEwMzYxMTYCXzEEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTkxMDM2MTE2Al8yBBViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTkxMDM2MTE2Al8zBBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzU5MTAzNjExNgJfNAQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzNTkxMDM2MTE2Al81AwMJAQIhPQIFE19taW5CYXNlQXNzZXRBbW91bnQAAAkAZgIFE19taW5CYXNlQXNzZXRBbW91bnQJAQNhYnMBBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQHCQACAQkArAICCQCsAgIJAKwCAgINTGltaXQgZXJyb3I6IAkApAMBCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AgMgPCAJAKQDAQUTX21pbkJhc2VBc3NldEFtb3VudAQPbmV3UG9zaXRpb25TaXplCQBkAgUPb2xkUG9zaXRpb25TaXplBRVhbW91bnRCYXNlQXNzZXRCb3VnaHQEGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQJAQRkaXZkAgUMb3Blbk5vdGlvbmFsBQlfbGV2ZXJhZ2UEDSR0MDM2NDk3MzY3MzYJASJjYWxjUmVtYWluTWFyZ2luV2l0aEZ1bmRpbmdQYXltZW50BAUPb2xkUG9zaXRpb25TaXplBRFvbGRQb3NpdGlvbk1hcmdpbgUUb2xkUG9zaXRpb25Mc3RVcGRDUEYFGWluY3JlYXNlTWFyZ2luUmVxdWlyZW1lbnQEDHJlbWFpbk1hcmdpbggFDSR0MDM2NDk3MzY3MzYCXzEEAngxCAUNJHQwMzY0OTczNjczNgJfMgQCeDIIBQ0kdDAzNjQ5NzM2NzM2Al8zCQCdCgsFD25ld1Bvc2l0aW9uU2l6ZQUMcmVtYWluTWFyZ2luCQBkAgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwFDG9wZW5Ob3Rpb25hbAkBH2xhdGVzdEN1bXVsYXRpdmVQcmVtaXVtRnJhY3Rpb24BBQ9uZXdQb3NpdGlvblNpemUFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIJAGQCCQEUb3BlbkludGVyZXN0Tm90aW9uYWwABQxvcGVuTm90aW9uYWwJAGQCCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAMJAGYCBQ9uZXdQb3NpdGlvblNpemUAAAkBA2FicwEFFWFtb3VudEJhc2VBc3NldEJvdWdodAAACQBkAgkBFnRvdGFsU2hvcnRQb3NpdGlvblNpemUAAwkAZgIAAAUPbmV3UG9zaXRpb25TaXplCQEDYWJzAQUVYW1vdW50QmFzZUFzc2V0Qm91Z2h0AAAEDG9wZW5Ob3Rpb25hbAkBBG11bGQCBQdfYW1vdW50BQlfbGV2ZXJhZ2UEDSR0MDM3NTY4Mzc2ODQJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIJAKUIAQgFAWkGY2FsbGVyBQ9QTkxfT1BUSU9OX1NQT1QEE29sZFBvc2l0aW9uTm90aW9uYWwIBQ0kdDAzNzU2ODM3Njg0Al8xBA11bnJlYWxpemVkUG5sCAUNJHQwMzc1NjgzNzY4NAJfMgMJAGYCBRNvbGRQb3NpdGlvbk5vdGlvbmFsBQxvcGVuTm90aW9uYWwJAAIBAi5Vc2UgZGVjcmVhc2VQb3NpdGlvbiB0byBkZWNyZWFzZSBwb3NpdGlvbiBzaXplCQACAQIUQ2xvc2UgcG9zaXRpb24gZmlyc3QED25ld1Bvc2l0aW9uU2l6ZQgFDSR0MDM1NDg2Mzc4NzUCXzEEF25ld1Bvc2l0aW9uUmVtYWluTWFyZ2luCAUNJHQwMzU0ODYzNzg3NQJfMgQXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzNTQ4NjM3ODc1Al8zBBRuZXdQb3NpdGlvbkxhdGVzdENQRggFDSR0MDM1NDg2Mzc4NzUCXzQEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDM1NDg2Mzc4NzUCXzUEFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIIBQ0kdDAzNTQ4NjM3ODc1Al82BBZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyCAUNJHQwMzU0ODYzNzg3NQJfNwQXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIIBQ0kdDAzNTQ4NjM3ODc1Al84BBlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyCAUNJHQwMzU0ODYzNzg3NQJfOQQOdG90YWxMb25nQWZ0ZXIIBQ0kdDAzNTQ4NjM3ODc1A18xMAQPdG90YWxTaG9ydEFmdGVyCAUNJHQwMzU0ODYzNzg3NQNfMTEEDGZlZVRvU3Rha2VycwkAaQIFCWZlZUFtb3VudAACBA5mZWVUb0luc3VyYW5jZQkAZQIFCWZlZUFtb3VudAUMZmVlVG9TdGFrZXJzBAVzdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg5sb2NrTmV1dHJpbm9TUAkAzAgCCQClCAEJAQ5zdGFraW5nQWRkcmVzcwAJAMwIAgUIQUxMX0ZFRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDmZlZVRvSW5zdXJhbmNlBQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUEDm5vdGlmeU5vdGlvbmFsCQD8BwQJAQxtaW5lckFkZHJlc3MAAg5ub3RpZnlOb3Rpb25hbAkAzAgCCQClCAEIBQFpBmNhbGxlcgkAzAgCBRduZXdQb3NpdGlvbk9wZW5Ob3Rpb25hbAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPbmV3UG9zaXRpb25TaXplBRduZXdQb3NpdGlvblJlbWFpbk1hcmdpbgUXbmV3UG9zaXRpb25PcGVuTm90aW9uYWwFFG5ld1Bvc2l0aW9uTGF0ZXN0Q1BGCQEJdXBkYXRlQW1tBwUWcXVvdGVBc3NldFJlc2VydmVBZnRlcgUVYmFzZUFzc2V0UmVzZXJ2ZUFmdGVyBRZ0b3RhbFBvc2l0aW9uU2l6ZUFmdGVyBRdjdW11bGF0aXZlTm90aW9uYWxBZnRlcgUZb3BlbkludGVyZXN0Tm90aW9uYWxBZnRlcgUOdG90YWxMb25nQWZ0ZXIFD3RvdGFsU2hvcnRBZnRlcgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCWFkZE1hcmdpbgAECl9yYXdBbW91bnQICQCRAwIIBQFpCHBheW1lbnRzAAAGYW1vdW50AwMDAwkBAiE9AggJAJEDAggFAWkIcGF5bWVudHMAAAdhc3NldElkCQEKcXVvdGVBc3NldAAGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECHEludmFsaWQgYWRkTWFyZ2luIHBhcmFtZXRlcnMECWZlZUFtb3VudAkBBG11bGQCBQpfcmF3QW1vdW50CQEDZmVlAAQHX2Ftb3VudAkAZQIFCl9yYXdBbW91bnQFCWZlZUFtb3VudAQNJHQwMzk0MzEzOTU4MwkBC2dldFBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIED29sZFBvc2l0aW9uU2l6ZQgFDSR0MDM5NDMxMzk1ODMCXzEEEW9sZFBvc2l0aW9uTWFyZ2luCAUNJHQwMzk0MzEzOTU4MwJfMgQXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwIBQ0kdDAzOTQzMTM5NTgzAl8zBBRvbGRQb3NpdGlvbkxzdFVwZENQRggFDSR0MDM5NDMxMzk1ODMCXzQEDGZlZVRvU3Rha2VycwkAaQIFCWZlZUFtb3VudAACBA5mZWVUb0luc3VyYW5jZQkAZQIFCWZlZUFtb3VudAUMZmVlVG9TdGFrZXJzBAVzdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg5sb2NrTmV1dHJpbm9TUAkAzAgCCQClCAEJAQ5zdGFraW5nQWRkcmVzcwAJAMwIAgUIQUxMX0ZFRVMFA25pbAkAzAgCCQEPQXR0YWNoZWRQYXltZW50AgkBCnF1b3RlQXNzZXQABQdfYW1vdW50BQNuaWwDCQAAAgUFc3Rha2UFBXN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDmZlZVRvSW5zdXJhbmNlBQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQJbm90aWZ5RmVlCQD8BwQJAQxtaW5lckFkZHJlc3MAAgpub3RpZnlGZWVzCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIFCWZlZUFtb3VudAUDbmlsBQNuaWwDCQAAAgUJbm90aWZ5RmVlBQlub3RpZnlGZWUJAM4IAgkAzggCCQEOdXBkYXRlUG9zaXRpb24FCQClCAEIBQFpBmNhbGxlcgUPb2xkUG9zaXRpb25TaXplCQBkAgURb2xkUG9zaXRpb25NYXJnaW4FB19hbW91bnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsBRRvbGRQb3NpdGlvbkxzdFVwZENQRgkBC3RyYW5zZmVyRmVlAQUMZmVlVG9TdGFrZXJzCQENdXBkYXRlQmFsYW5jZQEJAGQCCQEIY2JhbGFuY2UABQdfYW1vdW50CQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBDHJlbW92ZU1hcmdpbgEHX2Ftb3VudAMDAwMJAGcCAAAFB19hbW91bnQGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQkApQgBCAUBaQZjYWxsZXIGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgECH0ludmFsaWQgcmVtb3ZlTWFyZ2luIHBhcmFtZXRlcnMEDSR0MDQwNjMyNDA3ODQJAQtnZXRQb3NpdGlvbgEJAKUIAQgFAWkGY2FsbGVyBA9vbGRQb3NpdGlvblNpemUIBQ0kdDA0MDYzMjQwNzg0Al8xBBFvbGRQb3NpdGlvbk1hcmdpbggFDSR0MDQwNjMyNDA3ODQCXzIEF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsCAUNJHQwNDA2MzI0MDc4NAJfMwQUb2xkUG9zaXRpb25Mc3RVcGRDUEYIBQ0kdDA0MDYzMjQwNzg0Al80BAttYXJnaW5EZWx0YQkBAS0BBQdfYW1vdW50BA0kdDA0MDgyMTQxMDAwCQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFD29sZFBvc2l0aW9uU2l6ZQURb2xkUG9zaXRpb25NYXJnaW4FFG9sZFBvc2l0aW9uTHN0VXBkQ1BGBQttYXJnaW5EZWx0YQQMcmVtYWluTWFyZ2luCAUNJHQwNDA4MjE0MTAwMAJfMQQHYmFkRGVidAgFDSR0MDQwODIxNDEwMDACXzIDCQECIT0CBQdiYWREZWJ0AAAJAAIBAh1JbnZhbGlkIHJlbW92ZWQgbWFyZ2luIGFtb3VudAQLbWFyZ2luUmF0aW8JAQ9jYWxjTWFyZ2luUmF0aW8DBQxyZW1haW5NYXJnaW4FB2JhZERlYnQFF29sZFBvc2l0aW9uT3Blbk5vdGlvbmFsAwkBASEBCQEWcmVxdWlyZU1vcmVNYXJnaW5SYXRpbwMFC21hcmdpblJhdGlvCQEPaW5pdE1hcmdpblJhdGlvAAYJAAIBCQCsAgIJAKwCAgkArAICAhlUb28gbXVjaCBtYXJnaW4gcmVtb3ZlZDogCQCkAwEFC21hcmdpblJhdGlvAgMgPCAJAKQDAQkBD2luaXRNYXJnaW5SYXRpbwAEB3Vuc3Rha2UJAPwHBAkBEXF1b3RlQXNzZXRTdGFraW5nAAIOdW5sb2NrTmV1dHJpbm8JAMwIAgUHX2Ftb3VudAkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQkAzggCCQDOCAIJAQ51cGRhdGVQb3NpdGlvbgUJAKUIAQgFAWkGY2FsbGVyBQ9vbGRQb3NpdGlvblNpemUFDHJlbWFpbk1hcmdpbgUXb2xkUG9zaXRpb25PcGVuTm90aW9uYWwJAR9sYXRlc3RDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAQUPb2xkUG9zaXRpb25TaXplCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BaQENY2xvc2VQb3NpdGlvbgADAwMJAQEhAQkBE3JlcXVpcmVPcGVuUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQIgSW52YWxpZCBjbG9zZVBvc2l0aW9uIHBhcmFtZXRlcnMEDSR0MDQyMDk2NDI0ODYJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CCQClCAEIBQFpBmNhbGxlcgYEAngxCAUNJHQwNDIwOTY0MjQ4NgJfMQQPcG9zaXRpb25CYWREZWJ0CAUNJHQwNDIwOTY0MjQ4NgJfMgQLcmVhbGl6ZWRQbmwIBQ0kdDA0MjA5NjQyNDg2Al8zBA1tYXJnaW5Ub1ZhdWx0CAUNJHQwNDIwOTY0MjQ4NgJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQyMDk2NDI0ODYCXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQyMDk2NDI0ODYCXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0MjA5NjQyNDg2Al83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQyMDk2NDI0ODYCXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0MjA5NjQyNDg2Al85BAJ4MggFDSR0MDQyMDk2NDI0ODYDXzEwBA50b3RhbExvbmdBZnRlcggFDSR0MDQyMDk2NDI0ODYDXzExBA90b3RhbFNob3J0QWZ0ZXIIBQ0kdDA0MjA5NjQyNDg2A18xMgMJAGYCBQ9wb3NpdGlvbkJhZERlYnQAAAkAAgECJlVuYWJsZSB0byBjbG9zZSBwb3NpdGlvbiB3aXRoIGJhZCBkZWJ0BA53aXRoZHJhd0Ftb3VudAkBA2FicwEFDW1hcmdpblRvVmF1bHQECmFtbUJhbGFuY2UJAGUCCQEIY2JhbGFuY2UABQ53aXRoZHJhd0Ftb3VudAQNJHQwNDI2OTU0MjgzNwMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDWFtbU5ld0JhbGFuY2UIBQ0kdDA0MjY5NTQyODM3Al8xBBBnZXRGcm9tSW5zdXJhbmNlCAUNJHQwNDI2OTU0MjgzNwJfMgQBeAMJAGYCBRBnZXRGcm9tSW5zdXJhbmNlAAAEEXdpdGhkcmF3SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIId2l0aGRyYXcJAMwIAgUQZ2V0RnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIJAGUCBQ53aXRoZHJhd0Ftb3VudAUQZ2V0RnJvbUluc3VyYW5jZQkAzAgCCQDYBAEJAQpxdW90ZUFzc2V0AAUDbmlsBQNuaWwDCQAAAgUHdW5zdGFrZQUHdW5zdGFrZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIJAKUIAQgFAWkGY2FsbGVyCQDMCAIAAAUDbmlsBQNuaWwDCQAAAgUObm90aWZ5Tm90aW9uYWwFDm5vdGlmeU5vdGlvbmFsCQDOCAIJAM4IAgkAzggCCQEOZGVsZXRlUG9zaXRpb24BCQClCAEIBQFpBmNhbGxlcgkBCXVwZGF0ZUFtbQcFFnF1b3RlQXNzZXRSZXNlcnZlQWZ0ZXIFFWJhc2VBc3NldFJlc2VydmVBZnRlcgUWdG90YWxQb3NpdGlvblNpemVBZnRlcgUXY3VtdWxhdGl2ZU5vdGlvbmFsQWZ0ZXIFGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIFDnRvdGFsTG9uZ0FmdGVyBQ90b3RhbFNob3J0QWZ0ZXIJAQh3aXRoZHJhdwIIBQFpBmNhbGxlcgUOd2l0aGRyYXdBbW91bnQJAQ11cGRhdGVCYWxhbmNlAQUNYW1tTmV3QmFsYW5jZQkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgkAAgECJFN0cmljdCB2YWx1ZSBpcyBub3QgZXF1YWwgdG8gaXRzZWxmLgFpAQlsaXF1aWRhdGUBB190cmFkZXIED3Nwb3RNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBQ9QTkxfT1BUSU9OX1NQT1QEC21hcmdpblJhdGlvAwkBFmlzT3ZlckZsdWN0dWF0aW9uTGltaXQABBFvcmFjbGVNYXJnaW5SYXRpbwkBFmdldE1hcmdpblJhdGlvQnlPcHRpb24CBQdfdHJhZGVyBRFQTkxfT1BUSU9OX09SQUNMRQkBBHZtYXgCBQ9zcG90TWFyZ2luUmF0aW8FEW9yYWNsZU1hcmdpblJhdGlvBQ9zcG90TWFyZ2luUmF0aW8DAwMDCQEBIQEJARZyZXF1aXJlTW9yZU1hcmdpblJhdGlvAwULbWFyZ2luUmF0aW8JARZtYWludGVuYW5jZU1hcmdpblJhdGlvAAcGCQEBIQEJARNyZXF1aXJlT3BlblBvc2l0aW9uAQUHX3RyYWRlcgYJAQEhAQkBC2luaXRpYWxpemVkAAYJAQZwYXVzZWQACQACAQITVW5hYmxlIHRvIGxpcXVpZGF0ZQQNJHQwNDQ1Mjc0NDk1MAkBFWludGVybmFsQ2xvc2VQb3NpdGlvbgIFB190cmFkZXIHBAJ4MQgFDSR0MDQ0NTI3NDQ5NTACXzEEB2JhZERlYnQIBQ0kdDA0NDUyNzQ0OTUwAl8yBAJ4MggFDSR0MDQ0NTI3NDQ5NTACXzMEAngzCAUNJHQwNDQ1Mjc0NDk1MAJfNAQWcXVvdGVBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ0NTI3NDQ5NTACXzUEFWJhc2VBc3NldFJlc2VydmVBZnRlcggFDSR0MDQ0NTI3NDQ5NTACXzYEFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIIBQ0kdDA0NDUyNzQ0OTUwAl83BBdjdW11bGF0aXZlTm90aW9uYWxBZnRlcggFDSR0MDQ0NTI3NDQ5NTACXzgEGW9wZW5JbnRlcmVzdE5vdGlvbmFsQWZ0ZXIIBQ0kdDA0NDUyNzQ0OTUwAl85BBlleGNoYW5nZWRRdW90ZUFzc2V0QW1vdW50CAUNJHQwNDQ1Mjc0NDk1MANfMTAEDnRvdGFsTG9uZ0FmdGVyCAUNJHQwNDQ1Mjc0NDk1MANfMTEED3RvdGFsU2hvcnRBZnRlcggFDSR0MDQ0NTI3NDQ5NTADXzEyBBJsaXF1aWRhdGlvblBlbmFsdHkJAQRtdWxkAgUZZXhjaGFuZ2VkUXVvdGVBc3NldEFtb3VudAkBE2xpcXVpZGF0aW9uRmVlUmF0aW8ABA9mZWVUb0xpcXVpZGF0b3IJAGkCBRJsaXF1aWRhdGlvblBlbmFsdHkAAgQOZmVlVG9JbnN1cmFuY2UJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFD2ZlZVRvTGlxdWlkYXRvcgQKYW1tQmFsYW5jZQkAZQIJAQhjYmFsYW5jZQAFEmxpcXVpZGF0aW9uUGVuYWx0eQQNJHQwNDUzNDg0NTQ4MwMJAGYCAAAFCmFtbUJhbGFuY2UJAJQKAgAACQEDYWJzAQUKYW1tQmFsYW5jZQkAlAoCBQphbW1CYWxhbmNlAAAEDW5ld0FtbUJhbGFuY2UIBQ0kdDA0NTM0ODQ1NDgzAl8xBBF0YWtlRnJvbUluc3VyYW5jZQgFDSR0MDQ1MzQ4NDU0ODMCXzIEAXgDCQBmAgURdGFrZUZyb21JbnN1cmFuY2UAAAQRd2l0aGRyYXdJbnN1cmFuY2UJAPwHBAkBEGluc3VyYW5jZUFkZHJlc3MAAgh3aXRoZHJhdwkAzAgCBRF0YWtlRnJvbUluc3VyYW5jZQUDbmlsBQNuaWwDCQAAAgURd2l0aGRyYXdJbnN1cmFuY2UFEXdpdGhkcmF3SW5zdXJhbmNlBQNuaWwJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4FA25pbAMJAAACBQF4BQF4BAd1bnN0YWtlCQD8BwQJARFxdW90ZUFzc2V0U3Rha2luZwACDnVubG9ja05ldXRyaW5vCQDMCAIJAGUCBRJsaXF1aWRhdGlvblBlbmFsdHkFEXRha2VGcm9tSW5zdXJhbmNlCQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlBBBkZXBvc2l0SW5zdXJhbmNlCQD8BwQJARBpbnN1cmFuY2VBZGRyZXNzAAIHZGVwb3NpdAUDbmlsCQDMCAIJAQ9BdHRhY2hlZFBheW1lbnQCCQEKcXVvdGVBc3NldAAFDmZlZVRvSW5zdXJhbmNlBQNuaWwDCQAAAgUQZGVwb3NpdEluc3VyYW5jZQUQZGVwb3NpdEluc3VyYW5jZQQObm90aWZ5Tm90aW9uYWwJAPwHBAkBDG1pbmVyQWRkcmVzcwACDm5vdGlmeU5vdGlvbmFsCQDMCAIFB190cmFkZXIJAMwIAgAABQNuaWwFA25pbAMJAAACBQ5ub3RpZnlOb3Rpb25hbAUObm90aWZ5Tm90aW9uYWwJAM4IAgkAzggCCQDOCAIJAQ5kZWxldGVQb3NpdGlvbgEFB190cmFkZXIJAQl1cGRhdGVBbW0HBRZxdW90ZUFzc2V0UmVzZXJ2ZUFmdGVyBRViYXNlQXNzZXRSZXNlcnZlQWZ0ZXIFFnRvdGFsUG9zaXRpb25TaXplQWZ0ZXIFF2N1bXVsYXRpdmVOb3Rpb25hbEFmdGVyBRlvcGVuSW50ZXJlc3ROb3Rpb25hbEFmdGVyBQ50b3RhbExvbmdBZnRlcgUPdG90YWxTaG9ydEFmdGVyCQEId2l0aGRyYXcCCAUBaQZjYWxsZXIFD2ZlZVRvTGlxdWlkYXRvcgkBDXVwZGF0ZUJhbGFuY2UBBQ1uZXdBbW1CYWxhbmNlCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuCQACAQIkU3RyaWN0IHZhbHVlIGlzIG5vdCBlcXVhbCB0byBpdHNlbGYuAWkBCnBheUZ1bmRpbmcABBVmdW5kaW5nQmxvY2tUaW1lc3RhbXAJARluZXh0RnVuZGluZ0Jsb2NrVGltZXN0YW1wAAMDAwkAZgIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAgFCWxhc3RCbG9jawl0aW1lc3RhbXAGCQEBIQEJAQtpbml0aWFsaXplZAAGCQEGcGF1c2VkAAkAAgEJAKwCAgkArAICCQCsAgICIUludmFsaWQgZnVuZGluZyBibG9jayB0aW1lc3RhbXA6IAkApAMBCAUJbGFzdEJsb2NrCXRpbWVzdGFtcAIDIDwgCQCkAwEFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAQPdW5kZXJseWluZ1ByaWNlCQESZ2V0T3JhY2xlVHdhcFByaWNlAAQNc3BvdFR3YXBQcmljZQkBEGdldFR3YXBTcG90UHJpY2UABAdwcmVtaXVtCQBlAgUNc3BvdFR3YXBQcmljZQUPdW5kZXJseWluZ1ByaWNlBA0kdDA0Njk3NzQ4MzEyAwMJAAACCQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAAAAYJAAACCQEVdG90YWxMb25nUG9zaXRpb25TaXplAAAACQCUCgIAAAAAAwkAZgIAAAUHcHJlbWl1bQQUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBNsb25nUHJlbWl1bUZyYWN0aW9uCQEEZGl2ZAIJAQRtdWxkAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JARZ0b3RhbFNob3J0UG9zaXRpb25TaXplAAkBFXRvdGFsTG9uZ1Bvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24EE2xvbmdQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgkBBG11bGQCBQdwcmVtaXVtCQEUZnVuZGluZ1BlcmlvZERlY2ltYWwABQdPTkVfREFZBBRzaG9ydFByZW1pdW1GcmFjdGlvbgkBBGRpdmQCCQEEbXVsZAIFE2xvbmdQcmVtaXVtRnJhY3Rpb24JARV0b3RhbExvbmdQb3NpdGlvblNpemUACQEWdG90YWxTaG9ydFBvc2l0aW9uU2l6ZQAJAJQKAgUUc2hvcnRQcmVtaXVtRnJhY3Rpb24FE2xvbmdQcmVtaXVtRnJhY3Rpb24EFHNob3J0UHJlbWl1bUZyYWN0aW9uCAUNJHQwNDY5Nzc0ODMxMgJfMQQTbG9uZ1ByZW1pdW1GcmFjdGlvbggFDSR0MDQ2OTc3NDgzMTICXzIJAQ11cGRhdGVGdW5kaW5nBQkAZAIFFWZ1bmRpbmdCbG9ja1RpbWVzdGFtcAkBFGZ1bmRpbmdQZXJpb2RTZWNvbmRzAAkAZAIJASNsYXRlc3RMb25nQ3VtdWxhdGl2ZVByZW1pdW1GcmFjdGlvbgAFE2xvbmdQcmVtaXVtRnJhY3Rpb24JAGQCCQEkbGF0ZXN0U2hvcnRDdW11bGF0aXZlUHJlbWl1bUZyYWN0aW9uAAUUc2hvcnRQcmVtaXVtRnJhY3Rpb24JAQRkaXZkAgUTbG9uZ1ByZW1pdW1GcmFjdGlvbgUPdW5kZXJseWluZ1ByaWNlCQEEZGl2ZAIFFHNob3J0UHJlbWl1bUZyYWN0aW9uBQ91bmRlcmx5aW5nUHJpY2UBaQEFdl9nZXQBB190cmFkZXIEDSR0MDQ4Njg3NDg3NDcJARVpbnRlcm5hbENsb3NlUG9zaXRpb24CBQdfdHJhZGVyBwQCeDEIBQ0kdDA0ODY4NzQ4NzQ3Al8xBAJ4MggFDSR0MDQ4Njg3NDg3NDcCXzIEAngzCAUNJHQwNDg2ODc0ODc0NwJfMwQCeDQIBQ0kdDA0ODY4NzQ4NzQ3Al80CQACAQkArAICCQCsAgIJAKwCAgkBAXMBBQJ4MgkBAXMBBQJ4MwkBAXMBBQJ4NAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyAWkBJ3ZpZXdfY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAEHX3RyYWRlcgQNJHQwNDg4OTQ0OTAwNQkBC2dldFBvc2l0aW9uAQUHX3RyYWRlcgQMcG9zaXRpb25TaXplCAUNJHQwNDg4OTQ0OTAwNQJfMQQOcG9zaXRpb25NYXJnaW4IBQ0kdDA0ODg5NDQ5MDA1Al8yBANwb24IBQ0kdDA0ODg5NDQ5MDA1Al8zBBFwb3NpdGlvbkxzdFVwZENQRggFDSR0MDQ4ODk0NDkwMDUCXzQEDSR0MDQ5MDEwNDkxMTEJASNnZXRQb3NpdGlvbk5vdGlvbmFsQW5kVW5yZWFsaXplZFBubAIFB190cmFkZXIFD1BOTF9PUFRJT05fU1BPVAQQcG9zaXRpb25Ob3Rpb25hbAgFDSR0MDQ5MDEwNDkxMTECXzEEDXVucmVhbGl6ZWRQbmwIBQ0kdDA0OTAxMDQ5MTExAl8yBA0kdDA0OTExNjQ5Mjk4CQEiY2FsY1JlbWFpbk1hcmdpbldpdGhGdW5kaW5nUGF5bWVudAQFDHBvc2l0aW9uU2l6ZQUOcG9zaXRpb25NYXJnaW4FEXBvc2l0aW9uTHN0VXBkQ1BGBQ11bnJlYWxpemVkUG5sBAxyZW1haW5NYXJnaW4IBQ0kdDA0OTExNjQ5Mjk4Al8xBAdiYWREZWJ0CAUNJHQwNDkxMTY0OTI5OAJfMgQOZnVuZGluZ1BheW1lbnQIBQ0kdDA0OTExNjQ5Mjk4Al8zCQACAQkArAICCQCsAgIJAKwCAgkArAICCQEBcwEFDHJlbWFpbk1hcmdpbgkBAXMBBQ5mdW5kaW5nUGF5bWVudAkBAXMBCQEOZ2V0TWFyZ2luUmF0aW8BBQdfdHJhZGVyCQEBcwEFDXVucmVhbGl6ZWRQbmwJAQFzAQUHYmFkRGVidAFpAQ5mb3JjZU1vdmVBc3NldAIHX3RyYWRlcgdfYW1vdW50AwMJAQIhPQIJAKcIAQkBDmFkbWluUHVibGljS2V5AAgFAWkGY2FsbGVyBgkAZgIAAAUHX2Ftb3VudAkAAgECIUludmFsaWQgZm9yY2VNb3ZlQXNzZXQgcGFyYW1ldGVycwQHdW5zdGFrZQkA/AcECQERcXVvdGVBc3NldFN0YWtpbmcAAg51bmxvY2tOZXV0cmlubwkAzAgCBQdfYW1vdW50CQDMCAIJANgEAQkBCnF1b3RlQXNzZXQABQNuaWwFA25pbAMJAAACBQd1bnN0YWtlBQd1bnN0YWtlCQDOCAIJAQh3aXRoZHJhdwIJARFAZXh0ck5hdGl2ZSgxMDYyKQEFB190cmFkZXIFB19hbW91bnQJAQ11cGRhdGVCYWxhbmNlAQkAZQIJAQhjYmFsYW5jZQAFB19hbW91bnQJAAIBAiRTdHJpY3QgdmFsdWUgaXMgbm90IGVxdWFsIHRvIGl0c2VsZi4BAnR4AQZ2ZXJpZnkACQD0AwMIBQJ0eAlib2R5Qnl0ZXMJAJEDAggFAnR4BnByb29mcwAACQEOYWRtaW5QdWJsaWNLZXkAwTjzEQ==", "height": 2187540, "applicationStatus": "succeeded", "spentComplexity": 0 } View: original | compacted Prev: 3AoK9So1owfXP6XzU44uLeZRduwiJgSHAfQyh3j159Nb Next: 52McbP1R4hyYxvcjBqWimb7VFWxYtwZz9VcZgUHfqUT Full:
OldNewDifferences
11 {-# STDLIB_VERSION 6 #-}
22 {-# SCRIPT_TYPE ACCOUNT #-}
33 {-# CONTENT_TYPE DAPP #-}
44 let a = "k_ora_key"
55
66 let b = "k_ora_block_key"
77
88 let c = "k_ora"
99
1010 let d = "k_balance"
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_initialized"
2121
2222 let j = "k_paused"
2323
2424 let k = "k_fee"
2525
2626 let l = "k_fundingPeriod"
2727
2828 let m = "k_initMarginRatio"
2929
3030 let n = "k_mmr"
3131
3232 let o = "k_liquidationFeeRatio"
3333
3434 let p = "k_spreadLimit"
3535
3636 let q = "k_maxPriceImpact"
3737
3838 let r = "k_lastDataStr"
3939
4040 let s = "k_lastMinuteId"
4141
4242 let t = "k_twapDataLastCumulativePrice"
4343
4444 let u = "k_twapDataLastPrice"
4545
4646 let v = "k_twapDataPreviousMinuteId"
4747
4848 let w = "k_latestLongPremiumFraction"
4949
5050 let x = "k_latestShortPremiumFraction"
5151
5252 let y = "k_nextFundingBlockMinTimestamp"
5353
5454 let z = "k_longFundingRate"
5555
5656 let A = "k_shortFundingRate"
5757
5858 let B = "k_qtAstR"
5959
6060 let C = "k_bsAstR"
6161
6262 let D = "k_totalPositionSize"
6363
6464 let E = "k_totalLongPositionSize"
6565
6666 let F = "k_totalShortPositionSize"
6767
6868 let G = "k_cumulativeNotional"
6969
7070 let H = "k_openInterestNotional"
7171
7272 let I = "k_coordinatorAddress"
7373
7474 let J = "k_insurance_address"
7575
7676 let K = "k_admin_address"
7777
7878 let L = "k_admin_public_key"
7979
8080 let M = "k_quote_asset"
8181
8282 let N = "k_quote_staking"
8383
8484 let O = "k_staking_address"
8585
8686 let P = "k_miner_address"
8787
8888 func Q () = valueOrErrorMessage(addressFromString(getStringValue(this, I)), "Coordinator not set")
8989
9090
9191 func R () = addressFromString(getStringValue(Q(), K))
9292
9393
9494 func S () = fromBase58String(getStringValue(Q(), L))
9595
9696
9797 func T () = fromBase58String(getStringValue(Q(), M))
9898
9999
100100 func U () = valueOrErrorMessage(addressFromString(getStringValue(Q(), N)), "Quote asset staking not set")
101101
102102
103103 func V () = valueOrErrorMessage(addressFromString(getStringValue(Q(), O)), "Insurance not set")
104104
105105
106106 func W () = valueOrErrorMessage(addressFromString(getStringValue(Q(), J)), "Insurance not set")
107107
108108
109109 func X () = valueOrErrorMessage(addressFromString(getStringValue(Q(), P)), "Insurance not set")
110110
111111
112112 let Y = 1
113113
114114 let Z = 2
115115
116116 let aa = 15
117117
118118 let ab = 15
119119
120120 let ac = 1000
121121
122122 let ad = (1 * (((((10 * 10) * 10) * 10) * 10) * 10))
123123
124124 let ae = (86400 * ad)
125125
126126 let af = 100
127127
128128 let ag = 1
129129
130130 let ah = 2
131131
132132 func ai (aj) = (toString(aj) + ",")
133133
134134
135135 func ak (aj,al) = fraction(aj, ad, al, HALFEVEN)
136136
137137
138138 func am (aj,al) = fraction(aj, al, ad, HALFEVEN)
139139
140140
141141 func an (aj) = if ((aj > 0))
142142 then aj
143143 else -(aj)
144144
145145
146146 func ao (aj,al) = if ((aj >= al))
147147 then aj
148148 else al
149149
150150
151151 func ap (aq,ar) = ((aq + "_") + ar)
152152
153153
154154 func as (at) = {
155155 func au (av,aw) = ((av + aw) + ",")
156156
157157 let ax = {
158158 let ay = at
159159 let az = size(ay)
160160 let aA = ""
161161 func aB (aC,aD) = if ((aD >= az))
162162 then aC
163163 else au(aC, ay[aD])
164164
165165 func aE (aC,aD) = if ((aD >= az))
166166 then aC
167167 else throw("List size exceeds 20")
168168
169169 aE(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
170170 }
171171 let aF = dropRight(ax, 1)
172172 let aG = if ((take(aF, 1) == ","))
173173 then drop(aF, 1)
174174 else aF
175175 aG
176176 }
177177
178178
179179 func aH (aI) = split(aI, ",")
180180
181181
182182 func aJ (at,aK,aL) = if ((size(at) > aK))
183183 then (removeByIndex(at, 0) :+ aL)
184184 else (at :+ aL)
185185
186186
187187 func aM (aN) = valueOrErrorMessage(getInteger(this, aN), ("no value for " + aN))
188188
189189
190190 func aO () = aM(d)
191191
192192
193193 func aP () = aM(k)
194194
195195
196196 func aQ () = aM(m)
197197
198198
199199 func aR () = aM(B)
200200
201201
202202 func aS () = aM(C)
203203
204204
205205 func aT () = aM(D)
206206
207207
208208 func aU () = aM(G)
209209
210210
211211 func aV () = aM(H)
212212
213213
214214 func aW () = aM(y)
215215
216216
217217 func aX () = aM(l)
218218
219219
220220 func aY () = (aX() * ad)
221221
222222
223223 func aZ () = (aX() * ac)
224224
225225
226226 func ba () = aM(n)
227227
228228
229229 func bb () = aM(o)
230230
231231
232232 func bc () = aM(p)
233233
234234
235235 func bd () = aM(q)
236236
237237
238238 func be () = aM(w)
239239
240240
241241 func bf () = aM(x)
242242
243243
244244 func bg () = aM(F)
245245
246246
247247 func bh () = aM(E)
248248
249249
250250 func bi (bj,bk,bl) = {
251251 let bm = (bj - bk)
252252 if (if (bl)
253253 then (0 > bm)
254254 else false)
255255 then throw("Invalid margin")
256256 else if (if (!(bl))
257257 then (bm >= 0)
258258 else false)
259259 then throw("Invalid margin")
260260 else true
261261 }
262262
263263
264264 func bn (bo) = if ((bo == 0))
265265 then throw("Should not be called with _positionSize == 0")
266266 else if ((bo > 0))
267267 then be()
268268 else bf()
269269
270270
271271 func bp (bq) = {
272272 let br = getInteger(this, ap(e, bq))
273273 let bs = br
274274 if ($isInstanceOf(bs, "Int"))
275275 then {
276276 let bt = bs
277277 $Tuple4(bt, getIntegerValue(this, ap(f, bq)), getIntegerValue(this, ap(g, bq)), getIntegerValue(this, ap(h, bq)))
278278 }
279279 else $Tuple4(0, 0, 0, 0)
280280 }
281281
282282
283283 func bu (bq) = if ((bp(bq)._1 == 0))
284284 then throw("No open position")
285285 else true
286286
287287
288288 func bv () = valueOrElse(getBoolean(this, i), false)
289289
290290
291291 func bw () = valueOrElse(getBoolean(this, j), false)
292292
293293
294294 func bx (by,bz,bA) = if (by)
295295 then {
296296 let bB = (aS() - bA)
297297 if ((0 >= bB))
298298 then throw("Tx lead to base asset reserve <= 0, revert")
299299 else $Tuple4((aR() + bz), bB, (aT() + bA), (aU() + bz))
300300 }
301301 else {
302302 let bC = (aR() - bz)
303303 if ((0 >= bC))
304304 then throw("Tx lead to base quote reserve <= 0, revert")
305305 else $Tuple4(bC, (aS() + bA), (aT() - bA), (aU() - bz))
306306 }
307307
308308
309309 func bD (by,bz) = {
310310 let bE = aR()
311311 let bF = aS()
312312 let aN = am(bE, bF)
313313 let bG = if (by)
314314 then (bE + bz)
315315 else (bE - bz)
316316 let bH = ak(aN, bG)
317317 let bI = an((bH - bF))
318318 let bJ = if (by)
319319 then bI
320320 else -(bI)
321321 let bK = bx(by, bz, bI)
322322 let bL = bK._1
323323 let bM = bK._2
324324 let bN = bK._3
325325 let bO = bK._4
326326 let bP = ak(bE, bF)
327327 let bQ = ak(bz, bI)
328328 let bR = an((bP - bQ))
329329 let bS = (ad - ak(bP, (bP + bR)))
330330 let bT = bd()
331331 if ((bS > bT))
332332 then throw(((((((((((((("Price impact " + toString(bS)) + " > max price impact ") + toString(bT)) + " before quote asset: ") + toString(bE)) + " before base asset: ") + toString(bF)) + " quote asset amount to exchange: ") + toString(bz)) + " price before: ") + toString(bP)) + " marketPrice: ") + toString(bQ)))
333333 else $Tuple5(bJ, bL, bM, bN, bO)
334334 }
335335
336336
337337 func bU (bV,bW,bX,bY) = {
338338 let bZ = if ((bV != 0))
339339 then {
340340 let ca = bn(bV)
341341 am((ca - bX), bV)
342342 }
343343 else 0
344344 let cb = ((bY - bZ) + bW)
345345 let cc = if ((0 > cb))
346346 then $Tuple2(0, an(cb))
347347 else $Tuple2(an(cb), 0)
348348 let cd = cc._1
349349 let ce = cc._2
350350 $Tuple3(cd, ce, bZ)
351351 }
352352
353353
354354 func cf (by,bA,cg) = {
355355 let ch = aR()
356356 let ci = aS()
357357 let bP = ak(ch, ci)
358358 if ((bA == 0))
359359 then throw("Invalid base asset amount")
360360 else {
361361 let aN = am(ch, ci)
362362 let cj = if (by)
363363 then (ci + bA)
364364 else (ci - bA)
365365 let ck = ak(aN, cj)
366366 let cl = an((ck - ch))
367367 let bT = bd()
368368 let cm = bx(!(by), cl, bA)
369369 let bL = cm._1
370370 let bM = cm._2
371371 let bN = cm._3
372372 let bO = cm._4
373373 let bQ = ak(cl, bA)
374374 let bR = an((bP - bQ))
375375 let bS = (ad - ak(bP, (bP + bR)))
376376 if (if ((bS > bT))
377377 then cg
378378 else false)
379379 then throw(((((((((((((("Price impact " + toString(bS)) + " > max price impact ") + toString(bT)) + " before quote asset: ") + toString(ch)) + " before base asset: ") + toString(ci)) + " base asset amount to exchange: ") + toString(bA)) + " price before: ") + toString(bP)) + " market price: ") + toString(bQ)))
380380 else $Tuple7(cl, bL, bM, bN, bO, (bh() - (if (by)
381381 then an(bA)
382382 else 0)), (bg() - (if (!(by))
383383 then an(bA)
384384 else 0)))
385385 }
386386 }
387387
388388
389389 func cn () = {
390390 let co = valueOrErrorMessage(addressFromString(getStringValue(this, c)), "")
391391 let cp = getStringValue(this, a)
392392 let cq = getStringValue(this, b)
393393 let cr = valueOrErrorMessage(getInteger(co, cp), ((("Can not get oracle price. Oracle: " + toString(co)) + " key: ") + cp))
394394 cr
395395 }
396396
397397
398398 func cs () = {
399399 let ch = aR()
400400 let ci = aS()
401401 ak(ch, ci)
402402 }
403403
404404
405405 func ct () = {
406406 let cu = cn()
407407 let cv = cs()
408408 (ak(an((cu - cv)), cu) > bc())
409409 }
410410
411411
412412 func cw (bq,cx) = {
413413 let cy = bp(bq)
414414 let bt = cy._1
415415 let cz = cy._2
416416 let cA = cy._3
417417 let cB = cy._4
418418 let cC = an(bt)
419419 if ((cC == 0))
420420 then throw("Invalid position size")
421421 else {
422422 let cD = (0 > bt)
423423 let cE = if ((cx == ag))
424424 then {
425425 let cF = cf(!(cD), cC, false)
426426 let cG = cF._1
427427 let cH = cF._2
428428 let cI = cF._3
429429 let cJ = cF._4
430430 cG
431431 }
432432 else am(cC, cn())
433433 let cK = if (cD)
434434 then (cA - cE)
435435 else (cE - cA)
436436 $Tuple2(cE, cK)
437437 }
438438 }
439439
440440
441441 func cL (cM,cN,cO) = ak((cM - cN), cO)
442442
443443
444444 func cP (bq,cx) = {
445445 let cQ = bp(bq)
446446 let bt = cQ._1
447447 let cz = cQ._2
448448 let cR = cQ._3
449449 let cB = cQ._4
450450 let cS = cw(bq, cx)
451451 let cE = cS._1
452452 let cK = cS._2
453453 let cT = bU(bt, cz, cB, cK)
454454 let cd = cT._1
455455 let ce = cT._2
456456 cL(cd, ce, cE)
457457 }
458458
459459
460460 func cU (bq) = cP(bq, ag)
461461
462462
463463 func cV (bq,cg) = {
464464 let cW = bp(bq)
465465 let bt = cW._1
466466 let cz = cW._2
467467 let cA = cW._3
468468 let cB = cW._4
469469 let cX = cw(bq, ag)
470470 let cH = cX._1
471471 let cK = cX._2
472472 let cY = bU(bt, cz, cB, cK)
473473 let cd = cY._1
474474 let ce = cY._2
475475 let cZ = -(bt)
476476 let da = cK
477477 let db = -(cd)
478478 let dc = cf((bt > 0), an(bt), cg)
479479 let dd = dc._1
480480 let bG = dc._2
481481 let bH = dc._3
482482 let de = dc._4
483483 let df = dc._5
484484 let dg = dc._6
485485 let dh = dc._7
486486 let di = (aV() - cA)
487487 $Tuple12(cZ, ce, da, db, bG, bH, de, df, di, dd, dg, dh)
488488 }
489489
490490
491491 func dj () = {
492492 let dk = ((lastBlock.timestamp / 1000) / 60)
493493 let dl = (dk - aa)
494494 let dm = valueOrElse(getString(this, r), "")
495495 let dn = split(dm, ",")
496496 func do (av,dp) = if ((dl >= parseIntValue(dp)))
497497 then (av :+ parseIntValue(dp))
498498 else av
499499
500500 let dq = {
501501 let ay = dn
502502 let az = size(ay)
503503 let aA = nil
504504 func aB (aC,aD) = if ((aD >= az))
505505 then aC
506506 else do(aC, ay[aD])
507507
508508 func aE (aC,aD) = if ((aD >= az))
509509 then aC
510510 else throw("List size exceeds 20")
511511
512512 aE(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aB(aA, 0), 1), 2), 3), 4), 5), 6), 7), 8), 9), 10), 11), 12), 13), 14), 15), 16), 17), 18), 19), 20)
513513 }
514514 let dr = if ((size(dq) > 0))
515515 then max(dq)
516516 else parseIntValue(dn[0])
517517 let ds = valueOrElse(getInteger(this, s), 0)
518518 let dt = valueOrElse(getInteger(this, ((t + "_") + toString(ds))), 0)
519519 let du = valueOrElse(getInteger(this, ((u + "_") + toString(ds))), 0)
520520 let dv = (dt + ((dk - ds) * du))
521521 let dw = valueOrElse(getInteger(this, ((t + "_") + toString(dr))), 0)
522522 let dx = valueOrElse(getInteger(this, ((u + "_") + toString(dr))), 0)
523523 let dy = (dw + ((dl - dr) * dx))
524524 ((dv - dy) / aa)
525525 }
526526
527527
528528 func dz (dA,dB,dC,dD,dE,dF,dG) = [IntegerEntry(m, dA), IntegerEntry(n, dB), IntegerEntry(o, dC), IntegerEntry(l, dD), IntegerEntry(k, dE), IntegerEntry(p, dF), IntegerEntry(q, dG)]
529529
530530
531531 func dH (dI,dJ,dK,dL,dM) = [IntegerEntry(y, dI), IntegerEntry(w, dJ), IntegerEntry(x, dK), IntegerEntry(z, dL), IntegerEntry(A, dM)]
532532
533533
534534 func dN (ar,dO,dP,dQ,ca) = [IntegerEntry(ap(e, ar), dO), IntegerEntry(ap(f, ar), dP), IntegerEntry(ap(g, ar), dQ), IntegerEntry(ap(h, ar), ca)]
535535
536536
537537 func dR (dS) = {
538538 let dk = ((lastBlock.timestamp / 1000) / 60)
539539 let dT = valueOrElse(getInteger(this, s), 0)
540540 if ((dT > dk))
541541 then throw("TWAP out-of-order")
542542 else {
543543 let ds = if ((dT == 0))
544544 then dk
545545 else dT
546546 if ((dk > dT))
547547 then {
548548 let dU = valueOrElse(getInteger(this, ((t + "_") + toString(dT))), 0)
549549 let dV = valueOrElse(getInteger(this, ((u + "_") + toString(dT))), dS)
550550 let dW = (dU + ((dk - ds) * dV))
551551 let dn = aJ(aH(valueOrElse(getString(this, r), "")), aa, toString(dk))
552552 [IntegerEntry(ap(t, toString(dk)), dW), IntegerEntry(ap(u, toString(dk)), dS), IntegerEntry(ap(v, toString(dk)), dT), IntegerEntry(s, dk), StringEntry(r, as(dn))]
553553 }
554554 else {
555555 let dX = valueOrElse(getInteger(this, ap(v, toString(dk))), 0)
556556 let dU = valueOrElse(getInteger(this, ap(t, toString(dX))), 0)
557557 let dV = valueOrElse(getInteger(this, ap(u, toString(dX))), dS)
558558 let dW = (dU + ((dk - dX) * dV))
559559 [IntegerEntry(ap(t, toString(dk)), dW), IntegerEntry(ap(u, toString(dk)), dS)]
560560 }
561561 }
562562 }
563563
564564
565565 func dY (bE,bF) = [IntegerEntry(B, bE), IntegerEntry(C, bF)]
566566
567567
568568 func dZ (bE,bF,ea,eb,ec,ed,ee) = if (((ed - ee) != ea))
569569 then throw(((((("Invalid AMM state data: " + toString(ed)) + " + ") + toString(ee)) + " != ") + toString(ea)))
570570 else ((dY(bE, bF) ++ [IntegerEntry(D, ea), IntegerEntry(G, eb), IntegerEntry(H, ec), IntegerEntry(E, ed), IntegerEntry(F, ee)]) ++ dR(ak(bE, bF)))
571571
572572
573573 func ef (ar) = [DeleteEntry(ap(e, ar)), DeleteEntry(ap(f, ar)), DeleteEntry(ap(g, ar)), DeleteEntry(ap(h, ar))]
574574
575575
576576 func eg (ar,eh) = {
577577 let ei = assetBalance(this, T())
578578 if ((eh > ei))
579579 then throw(((("Unable to withdraw " + toString(eh)) + " from contract balance ") + toString(ei)))
580580 else [ScriptTransfer(ar, eh, T())]
581581 }
582582
583583
584584 func ej (ek) = if ((0 > ek))
585585 then throw("Balance")
586586 else [IntegerEntry(d, ek)]
587587
588588
589589 func el (ek) = [ScriptTransfer(V(), ek, T())]
590590
591591
592592 @Callable(ek)
593593 func pause () = if ((ek.caller != R()))
594594 then throw("Invalid togglePause params")
595595 else [BooleanEntry(j, true)]
596596
597597
598598
599599 @Callable(ek)
600600 func unpause () = if ((ek.caller != R()))
601601 then throw("Invalid togglePause params")
602602 else [BooleanEntry(j, false)]
603603
604604
605605
606606 @Callable(ek)
607607 func addLiquidity (bz) = if (if ((ek.caller != R()))
608608 then true
609609 else (0 >= bz))
610610 then throw("Invalid addLiquidity params")
611611 else {
612612 let bE = aR()
613613 let bF = aS()
614614 let dS = ak(bE, bF)
615615 let em = ak(bz, dS)
616616 let en = (bE + bz)
617617 let eo = (bF + em)
618618 dY(en, eo)
619619 }
620620
621621
622622
623623 @Callable(ek)
624624 func removeLiquidity (bz) = if (if ((ek.caller != R()))
625625 then true
626626 else (0 >= bz))
627627 then throw("Invalid removeLiquidity params")
628628 else {
629629 let bE = aR()
630630 let bF = aS()
631631 let dS = ak(bE, bF)
632632 let ep = ak(bz, dS)
633633 let en = (bE - bz)
634634 let eo = (bF - ep)
635635 dY(en, eo)
636636 }
637637
638638
639639
640640 @Callable(ek)
641641 func changeSettings (dA,dB,dC,dD,dE,dF,dG) = if ((ek.caller != R()))
642642 then throw("Invalid changeSettings params")
643643 else dz(dA, dB, dC, dD, dE, dF, dG)
644644
645645
646646
647647 @Callable(ek)
648648 func initialize (bE,bF,dD,dA,dB,dC,dE,eq,er,es,dF,dG) = if (if (if (if (if (if (if (if (if (if ((0 >= bE))
649649 then true
650650 else (0 >= bF))
651651 then true
652652 else (0 >= dD))
653653 then true
654654 else (0 >= dA))
655655 then true
656656 else (0 >= dB))
657657 then true
658658 else (0 >= dC))
659659 then true
660660 else (0 >= dE))
661661 then true
662662 else (0 >= dF))
663663 then true
664664 else (0 >= dG))
665665 then true
666666 else bv())
667667 then throw("Invalid initialize parameters")
668668 else ((((dZ(bE, bF, 0, 0, 0, 0, 0) ++ dz(dA, dB, dC, dD, dE, dF, dG)) ++ dH((lastBlock.timestamp + dD), 0, 0, 0, 0)) ++ ej(0)) ++ [BooleanEntry(i, true), StringEntry(c, eq), StringEntry(a, er), StringEntry(I, es)])
669669
670670
671671
672672 @Callable(ek)
673673 func decreasePosition (eh,et,eu) = if (if (if (if (if ((0 >= eh))
674674 then true
675675 else !(bv()))
676676 then true
677677 else !(bi(ak(ad, et), aQ(), true)))
678678 then true
679679 else !(bu(toString(ek.caller))))
680680 then true
681681 else bw())
682682 then throw("Invalid decreasePosition parameters")
683683 else {
684684 let ev = bp(toString(ek.caller))
685685 let ew = ev._1
686686 let ex = ev._2
687687 let ey = ev._3
688688 let ez = ev._4
689689 let eA = if ((ew > 0))
690690 then Z
691691 else Y
692692 let eB = (eA == Y)
693693 let eC = am(eh, et)
694694 let eD = cw(toString(ek.caller), ag)
695695 let eE = eD._1
696696 let cK = eD._2
697697 let eF = if ((eE > eC))
698698 then {
699699 let eG = bD(eB, eC)
700700 let cZ = eG._1
701701 let bG = eG._2
702702 let bH = eG._3
703703 let de = eG._4
704704 let df = eG._5
705705 let eH = an(cZ)
706706 if (if ((eu != 0))
707707 then (eu > eH)
708708 else false)
709709 then throw(((("Too little base asset exchanged, got " + toString(eH)) + " expected ") + toString(eu)))
710710 else {
711711 let da = ak(am(cK, eH), an(ew))
712712 let eI = bU(ew, ex, ez, da)
713713 let cd = eI._1
714714 let ce = eI._2
715715 let bZ = eI._3
716716 let dd = eC
717717 let eJ = (cK - da)
718718 let eK = if ((ew > 0))
719719 then ((eE - dd) - eJ)
720720 else ((eJ + eE) - dd)
721721 let eL = (ew + cZ)
722722 $Tuple11(eL, cd, an(eK), bn(eL), bH, bG, de, df, (aV() - eC), (bh() - (if ((eL > 0))
723723 then an(cZ)
724724 else 0)), (bg() - (if ((0 > eL))
725725 then an(cZ)
726726 else 0)))
727727 }
728728 }
729729 else throw("Close position first")
730730 let eL = eF._1
731731 let eM = eF._2
732732 let eN = eF._3
733733 let eO = eF._4
734734 let bH = eF._5
735735 let bG = eF._6
736736 let de = eF._7
737737 let df = eF._8
738738 let di = eF._9
739739 let dg = eF._10
740740 let dh = eF._11
741741 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), eN], nil)
742742 if ((eP == eP))
743743 then (dN(toString(ek.caller), eL, eM, eN, eO) ++ dZ(bG, bH, de, df, di, dg, dh))
744744 else throw("Strict value is not equal to itself.")
745745 }
746746
747747
748748
749749 @Callable(ek)
750750 func increasePosition (eA,et,eu) = {
751751 let eQ = ek.payments[0].amount
752752 if (if (if (if (if (if (if ((eA != Y))
753753 then (eA != Z)
754754 else false)
755755 then true
756756 else (0 >= eQ))
757757 then true
758758 else !(bv()))
759759 then true
760760 else (ek.payments[0].assetId != T()))
761761 then true
762762 else !(bi(ak(ad, et), aQ(), true)))
763763 then true
764764 else bw())
765765 then throw("Invalid increasePosition parameters")
766766 else {
767767 let eR = am(eQ, aP())
768768 let eh = (eQ - eR)
769769 let eS = bp(toString(ek.caller))
770770 let ew = eS._1
771771 let ex = eS._2
772772 let ey = eS._3
773773 let ez = eS._4
774774 let eT = (ew == 0)
775775 let eU = if ((ew > 0))
776776 then (eA == Y)
777777 else (eA == Z)
778778 let eV = if (!(eT))
779779 then eU
780780 else false
781781 let eB = (eA == Y)
782782 let eW = if (if (eT)
783783 then true
784784 else eV)
785785 then {
786786 let eC = am(eh, et)
787787 let eX = bD(eB, eC)
788788 let bJ = eX._1
789789 let bG = eX._2
790790 let bH = eX._3
791791 let de = eX._4
792792 let df = eX._5
793793 if (if ((eu != 0))
794794 then (eu > an(bJ))
795795 else false)
796796 then throw(((("Limit error: " + toString(an(bJ))) + " < ") + toString(eu)))
797797 else {
798798 let eL = (ew + bJ)
799799 let eY = ak(eC, et)
800800 let eZ = bU(ew, ex, ez, eY)
801801 let cd = eZ._1
802802 let cH = eZ._2
803803 let cI = eZ._3
804804 $Tuple11(eL, cd, (ey + eC), bn(eL), bH, bG, de, df, (aV() + eC), (bh() + (if ((eL > 0))
805805 then an(bJ)
806806 else 0)), (bg() + (if ((0 > eL))
807807 then an(bJ)
808808 else 0)))
809809 }
810810 }
811811 else {
812812 let eC = am(eh, et)
813813 let fa = cw(toString(ek.caller), ag)
814814 let eE = fa._1
815815 let cK = fa._2
816816 if ((eE > eC))
817817 then throw("Use decreasePosition to decrease position size")
818818 else throw("Close position first")
819819 }
820820 let eL = eW._1
821821 let eM = eW._2
822822 let eN = eW._3
823823 let eO = eW._4
824824 let bH = eW._5
825825 let bG = eW._6
826826 let de = eW._7
827827 let df = eW._8
828828 let di = eW._9
829829 let dg = eW._10
830830 let dh = eW._11
831831 let fb = (eR / 2)
832832 let fc = (eR - fb)
833833 let fd = invoke(U(), "lockNeutrinoSP", [toString(V()), af], [AttachedPayment(T(), eh)])
834834 if ((fd == fd))
835835 then {
836836 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
837837 if ((fe == fe))
838838 then {
839839 let ff = invoke(X(), "notifyFees", [toString(ek.caller), eR], nil)
840840 if ((ff == ff))
841841 then {
842842 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), eN], nil)
843843 if ((eP == eP))
844844 then (((dN(toString(ek.caller), eL, eM, eN, eO) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ el(fb)) ++ ej((aO() + eh)))
845845 else throw("Strict value is not equal to itself.")
846846 }
847847 else throw("Strict value is not equal to itself.")
848848 }
849849 else throw("Strict value is not equal to itself.")
850850 }
851851 else throw("Strict value is not equal to itself.")
852852 }
853853 }
854854
855855
856856
857857 @Callable(ek)
858858 func addMargin () = {
859859 let eQ = ek.payments[0].amount
860860 if (if (if (if ((ek.payments[0].assetId != T()))
861861 then true
862862 else !(bu(toString(ek.caller))))
863863 then true
864864 else !(bv()))
865865 then true
866866 else bw())
867867 then throw("Invalid addMargin parameters")
868868 else {
869869 let eR = am(eQ, aP())
870870 let eh = (eQ - eR)
871871 let fg = bp(toString(ek.caller))
872872 let ew = fg._1
873873 let ex = fg._2
874874 let ey = fg._3
875875 let ez = fg._4
876876 let fb = (eR / 2)
877877 let fc = (eR - fb)
878878 let fd = invoke(U(), "lockNeutrinoSP", [toString(V()), af], [AttachedPayment(T(), eh)])
879879 if ((fd == fd))
880880 then {
881881 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
882882 if ((fe == fe))
883883 then {
884884 let ff = invoke(X(), "notifyFees", [toString(ek.caller), eR], nil)
885885 if ((ff == ff))
886886 then ((dN(toString(ek.caller), ew, (ex + eh), ey, ez) ++ el(fb)) ++ ej((aO() + eh)))
887887 else throw("Strict value is not equal to itself.")
888888 }
889889 else throw("Strict value is not equal to itself.")
890890 }
891891 else throw("Strict value is not equal to itself.")
892892 }
893893 }
894894
895895
896896
897897 @Callable(ek)
898898 func removeMargin (eh) = if (if (if (if ((0 >= eh))
899899 then true
900900 else !(bu(toString(ek.caller))))
901901 then true
902902 else !(bv()))
903903 then true
904904 else bw())
905905 then throw("Invalid removeMargin parameters")
906906 else {
907907 let fh = bp(toString(ek.caller))
908908 let ew = fh._1
909909 let ex = fh._2
910910 let ey = fh._3
911911 let ez = fh._4
912912 let fi = -(eh)
913913 let fj = bU(ew, ex, ez, fi)
914914 let cd = fj._1
915915 let ce = fj._2
916916 if ((ce != 0))
917917 then throw("Invalid removed margin amount")
918918 else {
919919 let fk = cL(cd, ce, ey)
920920 if (!(bi(fk, aQ(), true)))
921921 then throw(((("Too much margin removed: " + toString(fk)) + " < ") + toString(aQ())))
922922 else {
923923 let fl = invoke(U(), "unlockNeutrino", [eh, toBase58String(T())], nil)
924924 if ((fl == fl))
925925 then ((dN(toString(ek.caller), ew, cd, ey, bn(ew)) ++ eg(ek.caller, eh)) ++ ej((aO() - eh)))
926926 else throw("Strict value is not equal to itself.")
927927 }
928928 }
929929 }
930930
931931
932932
933933 @Callable(ek)
934934 func closePosition () = if (if (if (!(bu(toString(ek.caller))))
935935 then true
936936 else !(bv()))
937937 then true
938938 else bw())
939939 then throw("Invalid closePosition parameters")
940940 else {
941941 let fm = cV(toString(ek.caller), true)
942942 let cH = fm._1
943943 let fn = fm._2
944944 let da = fm._3
945945 let db = fm._4
946946 let bG = fm._5
947947 let bH = fm._6
948948 let de = fm._7
949949 let df = fm._8
950950 let di = fm._9
951951 let cI = fm._10
952952 let dg = fm._11
953953 let dh = fm._12
954954 if ((fn > 0))
955955 then throw("Unable to close position with bad debt")
956956 else {
957957 let fo = an(db)
958958 let fp = (aO() - fo)
959959 let fq = if ((0 > fp))
960960 then $Tuple2(0, an(fp))
961961 else $Tuple2(fp, 0)
962962 let fr = fq._1
963963 let fs = fq._2
964964 let ft = if ((fs > 0))
965965 then {
966966 let fu = invoke(W(), "withdraw", [fs], nil)
967967 if ((fu == fu))
968968 then nil
969969 else throw("Strict value is not equal to itself.")
970970 }
971971 else nil
972972 if ((ft == ft))
973973 then {
974974 let fl = invoke(U(), "unlockNeutrino", [(fo - fs), toBase58String(T())], nil)
975975 if ((fl == fl))
976976 then {
977977 let eP = invoke(X(), "notifyNotional", [toString(ek.caller), 0], nil)
978978 if ((eP == eP))
979979 then (((ef(toString(ek.caller)) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ eg(ek.caller, fo)) ++ ej(fr))
980980 else throw("Strict value is not equal to itself.")
981981 }
982982 else throw("Strict value is not equal to itself.")
983983 }
984984 else throw("Strict value is not equal to itself.")
985985 }
986986 }
987987
988988
989989
990990 @Callable(ek)
991991 func liquidate (bq) = {
992992 let fv = cP(bq, ag)
993993 let fk = if (ct())
994994 then {
995995 let fw = cP(bq, ah)
996996 ao(fv, fw)
997997 }
998998 else fv
999999 if (if (if (if (!(bi(fk, ba(), false)))
10001000 then true
10011001 else !(bu(bq)))
10021002 then true
10031003 else !(bv()))
10041004 then true
10051005 else bw())
10061006 then throw("Unable to liquidate")
10071007 else {
10081008 let fx = cV(bq, false)
10091009 let cH = fx._1
10101010 let ce = fx._2
10111011 let cI = fx._3
10121012 let cJ = fx._4
10131013 let bG = fx._5
10141014 let bH = fx._6
10151015 let de = fx._7
10161016 let df = fx._8
10171017 let di = fx._9
10181018 let dd = fx._10
10191019 let dg = fx._11
10201020 let dh = fx._12
10211021 let fy = am(dd, bb())
10221022 let fz = (fy / 2)
10231023 let fc = (fy - fz)
10241024 let fp = (aO() - fy)
10251025 let fA = if ((0 > fp))
10261026 then $Tuple2(0, an(fp))
10271027 else $Tuple2(fp, 0)
10281028 let fB = fA._1
10291029 let fC = fA._2
10301030 let ft = if ((fC > 0))
10311031 then {
10321032 let fu = invoke(W(), "withdraw", [fC], nil)
10331033 if ((fu == fu))
10341034 then nil
10351035 else throw("Strict value is not equal to itself.")
10361036 }
10371037 else nil
10381038 if ((ft == ft))
10391039 then {
10401040 let fl = invoke(U(), "unlockNeutrino", [(fy - fC), toBase58String(T())], nil)
10411041 if ((fl == fl))
10421042 then {
10431043 let fe = invoke(W(), "deposit", nil, [AttachedPayment(T(), fc)])
10441044 if ((fe == fe))
10451045 then {
10461046 let eP = invoke(X(), "notifyNotional", [bq, 0], nil)
10471047 if ((eP == eP))
10481048 then (((ef(bq) ++ dZ(bG, bH, de, df, di, dg, dh)) ++ eg(ek.caller, fz)) ++ ej(fB))
10491049 else throw("Strict value is not equal to itself.")
10501050 }
10511051 else throw("Strict value is not equal to itself.")
10521052 }
10531053 else throw("Strict value is not equal to itself.")
10541054 }
10551055 else throw("Strict value is not equal to itself.")
10561056 }
10571057 }
10581058
10591059
10601060
10611061 @Callable(ek)
10621062 func payFunding () = {
10631063 let fD = aW()
10641064 if (if (if ((fD > lastBlock.timestamp))
10651065 then true
10661066 else !(bv()))
10671067 then true
10681068 else bw())
10691069 then throw(((("Invalid funding block timestamp: " + toString(lastBlock.timestamp)) + " < ") + toString(fD)))
10701070 else {
10711071 let fE = cn()
10721072 let fF = dj()
10731073 let fG = (fF - fE)
10741074 let fH = if (if ((bg() == 0))
10751075 then true
10761076 else (bh() == 0))
10771077 then $Tuple2(0, 0)
10781078 else if ((0 > fG))
10791079 then {
10801080 let fI = ak(am(fG, aY()), ae)
10811081 let fJ = ak(am(fI, bg()), bh())
10821082 $Tuple2(fI, fJ)
10831083 }
10841084 else {
10851085 let fJ = ak(am(fG, aY()), ae)
10861086 let fI = ak(am(fJ, bh()), bg())
10871087 $Tuple2(fI, fJ)
10881088 }
10891089 let fI = fH._1
10901090 let fJ = fH._2
10911091 dH((fD + aZ()), (be() + fJ), (bf() + fI), ak(fJ, fE), ak(fI, fE))
10921092 }
10931093 }
10941094
10951095
10961096
10971097 @Callable(ek)
10981098 func v_get (bq) = {
10991099 let fK = cV(bq, false)
11001100 let cH = fK._1
11011101 let cI = fK._2
11021102 let cJ = fK._3
11031103 let fL = fK._4
11041104 throw((((ai(cI) + ai(cJ)) + ai(fL)) + ai(cU(bq))))
11051105 }
11061106
11071107
11081108
11091109 @Callable(ek)
11101110 func view_calcRemainMarginWithFundingPayment (bq) = {
11111111 let fM = bp(bq)
11121112 let bt = fM._1
11131113 let cz = fM._2
11141114 let cR = fM._3
11151115 let cB = fM._4
11161116 let fN = cw(bq, ag)
11171117 let cE = fN._1
11181118 let cK = fN._2
11191119 let fO = bU(bt, cz, cB, cK)
11201120 let cd = fO._1
11211121 let ce = fO._2
11221122 let bZ = fO._3
11231123 throw(((((ai(cd) + ai(bZ)) + ai(cU(bq))) + ai(cK)) + ai(ce)))
11241124 }
11251125
11261126
11271127
11281128 @Callable(ek)
11291129 func forceMoveAsset (bq,eh) = if (if ((addressFromPublicKey(S()) != ek.caller))
11301130 then true
11311131 else (0 > eh))
11321132 then throw("Invalid forceMoveAsset parameters")
11331133 else {
11341134 let fl = invoke(U(), "unlockNeutrino", [eh, toBase58String(T())], nil)
11351135 if ((fl == fl))
11361136 then (eg(addressFromStringValue(bq), eh) ++ ej((aO() - eh)))
11371137 else throw("Strict value is not equal to itself.")
11381138 }
11391139
11401140
11411141 @Verifier(fP)
11421142 func fQ () = sigVerify(fP.bodyBytes, fP.proofs[0], S())
11431143

github/deemru/w8io/873ac7e 
86.48 ms