IC8qKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBAZmlsZSAgICBzdG0zMmxfZGlzY292ZXJ5X2xjZC5oDQogICogQGF1dGhvciAgTWljcm9jb250cm9sbGVyIERpdmlzaW9uDQogICogQHZlcnNpb24gVjEuMC4zDQogICogQGRhdGUgICAgTWF5LTIwMTMNCiAgKiBAYnJpZWYgICBUaGlzIGZpbGUgY29udGFpbnMgYWxsIHRoZSBmdW5jdGlvbnMgcHJvdG90eXBlcyBmb3IgdGhlIGdsYXNzIExDRA0KICAqICAgICAgICAgIGZpcm13YXJlIGRyaXZlci4NCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQogICogQGNvcHkNCiAgKg0KICAqIFRIRSBQUkVTRU5UIEZJUk1XQVJFIFdISUNIIElTIEZPUiBHVUlEQU5DRSBPTkxZIEFJTVMgQVQgUFJPVklESU5HIENVU1RPTUVSUw0KICAqIFdJVEggQ09ESU5HIElORk9STUFUSU9OIFJFR0FSRElORyBUSEVJUiBQUk9EVUNUUyBJTiBPUkRFUiBGT1IgVEhFTSBUTyBTQVZFDQogICogVElNRS4gQVMgQSBSRVNVTFQsIFNUTUlDUk9FTEVDVFJPTklDUyBTSEFMTCBOT1QgQkUgSEVMRCBMSUFCTEUgRk9SIEFOWQ0KICAqIERJUkVDVCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU1TIEFSSVNJTkcNCiAgKiBGUk9NIFRIRSBDT05URU5UIE9GIFNVQ0ggRklSTVdBUkUgQU5EL09SIFRIRSBVU0UgTUFERSBCWSBDVVNUT01FUlMgT0YgVEhFDQogICogQ09ESU5HIElORk9STUFUSU9OIENPTlRBSU5FRCBIRVJFSU4gSU4gQ09OTkVDVElPTiBXSVRIIFRIRUlSIFBST0RVQ1RTLg0KICAqDQogICogPGgyPjxjZW50ZXI+JmNvcHk7IENPUFlSSUdIVCAyMDExIFNUTWljcm9lbGVjdHJvbmljczwvY2VudGVyPjwvaDI+DQogICovIA0KDQovKiBEZWZpbmUgdG8gcHJldmVudCByZWN1cnNpdmUgaW5jbHVzaW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KI2lmbmRlZiBfX3N0bTMybF9kaXNjb3ZlcnlfbGNkDQojZGVmaW5lIF9fc3RtMzJsX2Rpc2NvdmVyeV9sY2QNCg0KLyogSW5jbHVkZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8NCiNpbmNsdWRlICJzdG0zMmwxeHguaCIgICANCiNpbmNsdWRlICJkaXNjb3Zlcl9ib2FyZC5oIg0KDQovKiBEZWZpbmUgZm9yIHNjcm9sbGluZyBzZW50ZW5jZXMqLw0KI2RlZmluZSBTQ1JPTExfU1BFRUQgIAk3NQ0KI2RlZmluZSBTQ1JPTExfU1BFRURfTCAgNjAwDQojZGVmaW5lIFNDUk9MTF9OVU0gICAgCTENCg0KLyogRGVmaW5lIGZvciBjaGFyYWN0ZXIgJy4nICovDQojZGVmaW5lICBQT0lOVF9PRkYgRkFMU0UNCiNkZWZpbmUgIFBPSU5UX09OIFRSVUUNCg0KLyogRGVmaW5lIGZvciBjYXJhY3RlciAiOiIgKi8NCiNkZWZpbmUgIENPTFVNTl9PRkYgRkFMU0UNCiNkZWZpbmUgIENPTFVNTl9PTiBUUlVFDQoNCiNkZWZpbmUgRE9UIDB4ODAwMCAvKiBmb3IgYWRkIGRlY2ltYWwgcG9pbnQgaW4gc3RyaW5nICovDQojZGVmaW5lIERPVUJMRV9ET1QgMHg0MDAwIC8qIGZvciBhZGQgZGVjaW1hbCBwb2ludCBpbiBzdHJpbmcgKi8NCg0KDQovKiAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTENEIE1BUFBJTkcNCiAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoJICAgIEENCiAgICAgXyAgLS0tLS0tLS0tLQ0KQ09MIHxffCB8XCAgIHxKICAvfA0KICAgICAgIEZ8IEggIHwgIEsgfEINCiAgICAgXyAgfCAgXCB8IC8gIHwNCkNPTCB8X3wgLS1HLS0gLS1NLS0NCiAgICAgICAgfCAgIC98IFwgIHwNCiAgICAgICBFfCAgUSB8ICBOIHxDDQogICAgIF8gIHwgLyAgfFAgIFx8ICAgDQpEUCAgfF98IC0tLS0tLS0tLS0tICANCgkgICAgRCAgICAgICAgIA0KDQogQW4gTENEIGNoYXJhY3RlciBjb2RpbmcgaXMgYmFzZWQgb24gdGhlIGZvbGxvd2luZyBtYXRyaXg6DQogICAgICB7IEUgLCBEICwgUCAsIE4gICB9DQogICAgICB7IE0gLCBDICwgQ09MICwgRFB9DQogICAgICB7IEIgLCBBICwgSyAsIEogICB9DQogICAgICB7IEcgLCBGICwgUSAsIEggICB9DQoNCiBUaGUgY2hhcmFjdGVyICdBJyBmb3IgZXhhbXBsZSBpczoNCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KTFNCICAgeyAxICwgMCAsIDAgLCAwICAgfQ0KICAgICAgeyAxICwgMSAsIDAgLCAwICAgfQ0KICAgICAgeyAxICwgMSAsIDAgLCAwICAgfQ0KTVNCICAgeyAxICwgMSAsIDAgLCAwICAgfQ0KICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICAnQScgPSAgRiAgICBFICAgMCAgIDAgaGV4YQ0KDQoqLw0KLyogTWFjcm9zIHVzZWQgZm9yIHNldC9yZXNldCBiYXIgTENEIGJhciAqLw0KI2RlZmluZSBCQVIwX09OICB0X2JhclsxXSB8PSA4DQojZGVmaW5lIEJBUjBfT0ZGIHRfYmFyWzFdICY9IH44DQojZGVmaW5lIEJBUjFfT04gIHRfYmFyWzBdIHw9IDgNCiNkZWZpbmUgQkFSMV9PRkYgdF9iYXJbMF0gJj0gfjgNCiNkZWZpbmUgQkFSMl9PTiAgdF9iYXJbMV0gfD0gMg0KI2RlZmluZSBCQVIyX09GRiB0X2JhclsxXSAmPSB+Mg0KI2RlZmluZSBCQVIzX09OIHRfYmFyWzBdICB8PSAyIA0KI2RlZmluZSBCQVIzX09GRiB0X2JhclswXSAmPSB+MiANCg0KLyogY29kZSBmb3IgJ7UnIGNoYXJhY3RlciAqLw0KI2RlZmluZSBDX1VNQVAgMHg2MDg0DQoNCi8qIGNvZGUgZm9yICdtJyBjaGFyYWN0ZXIgKi8NCiNkZWZpbmUgQ19tTWFwIDB4YjIxMA0KDQovKiBjb2RlIGZvciAnbicgY2hhcmFjdGVyICovDQojZGVmaW5lIENfbk1hcCAweDIyMTANCg0KLyogY29uc3RhbnQgY29kZSBmb3IgJyonIGNoYXJhY3RlciAqLw0KI2RlZmluZSBzdGFyIDB4QTBERA0KDQovKiBjb25zdGFudCBjb2RlIGZvciAnLScgY2hhcmFjdGVyICovDQojZGVmaW5lIENfbWludXMgMHhBMDAwDQoNCi8qIGNvbnN0YW50IGNvZGUgZm9yICcvJyAqLw0KI2RlZmluZSBDX3NsYXRjaCAgMHgwMGMwDQoNCi8qIGNvbnN0YW50IGNvZGUgZm9yILAgKi8NCiNkZWZpbmUgQ19wZXJjZW50XzEgMHhlYzAwDQoNCi8qIGNvbnN0YW50IGNvZGUgIGZvciBzbWFsbCBvICovDQojZGVmaW5lIENfcGVyY2VudF8yIDB4YjMwMA0KDQojZGVmaW5lIENfZnVsbCAweGZmZGQNCg0Kdm9pZCBMQ0RfYmFyKHZvaWQpOw0Kdm9pZCBMQ0RfR0xBU1NfSW5pdCh2b2lkKTsNCnZvaWQgTENEX0dMQVNTX1dyaXRlQ2hhcih1aW50OF90KiBjaCwgYm9vbCBwb2ludCwgYm9vbCBjb2x1bW4sdWludDhfdCBwb3NpdGlvbik7DQp2b2lkIExDRF9HTEFTU19EaXNwbGF5U3RyaW5nKHVpbnQ4X3QqIHB0cik7DQp2b2lkIExDRF9HTEFTU19EaXNwbGF5U3RyRGVjaSh1aW50MTZfdCogcHRyKTsNCnZvaWQgTENEX0dMQVNTX0NsZWFyQ2hhcih1aW50OF90IHBvc2l0aW9uKTsNCnZvaWQgTENEX0dMQVNTX0NsZWFyKHZvaWQpOw0Kdm9pZCBMQ0RfR0xBU1NfU2Nyb2xsU2VudGVuY2UodWludDhfdCogcHRyLCB1aW50MTZfdCBuU2Nyb2xsLCB1aW50MTZfdCBTY3JvbGxTcGVlZCk7DQp2b2lkIExDRF9HTEFTU19Xcml0ZVRpbWUoY2hhciBhLCB1aW50OF90IHBvc2ksIGJvb2wgY29sdW1uKTsNCnZvaWQgTENEX0dMQVNTX0NvbmZpZ3VyZV9HUElPKHZvaWQpOw0KDQojZW5kaWYgLyogc3RtMzJsX2Rpc2NvdmVyeV9sY2QqLw0KDQovKioqKioqKioqKioqKioqKioqKiAoQykgQ09QWVJJR0hUIDIwMTEgU1RNaWNyb2VsZWN0cm9uaWNzICoqKioqRU5EIE9GIEZJTEUqKioqLw0K