PGgyPlRoZSA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGw8L2NvZGU+IGZ1bmN0aW9uPC9oMj4KCjxoND5TeW5vcHNpczwvaDQ+CjxwcmU+ICAgIAogICAgI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwogICAgI2luY2x1ZGUgJmx0O3VwY19jb2xsZWN0aXZlLmgmZ3Q7CiAgICB2b2lkIHVwY19hbGxfZ2F0aGVyX2FsbChzaGFyZWQgdm9pZCAqIHJlc3RyaWN0IGRzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlZCBjb25zdCB2b2lkICogcmVzdHJpY3Qgc3JjLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGNfZmxhZ190IGZsYWdzKTsKPC9wcmU+CjxwPgo8aDQ+RGVzY3JpcHRpb248L2g0Pgo8cD4KVGhlIDxjb2RlPnVwY19hbGxfZ2F0aGVyX2FsbCA8L2NvZGU+ICBmdW5jdGlvbiAKY29waWVzIGEgYmxvY2sgb2YgbWVtb3J5IGZyb20gb25lIHNoYXJlZAptZW1vcnkgYXJlYSB3aXRoIGFmZmluaXR5IHRvIHRoZSBpdGggdGhyZWFkIHRvIHRoZSBpdGggYmxvY2sgb2YgYSBzaGFyZWQKbWVtb3J5IGFyZWEgb24gZWFjaCB0aHJlYWQuIFRoZSBudW1iZXIgb2YgYnl0ZXMgaW4gZWFjaCBibG9jayBpcyA8Y29kZT5uYnl0ZXM8L2NvZGU+Lgo8cD48Y29kZT5uYnl0ZXM8L2NvZGU+IG11c3QgYmUgc3RyaWN0bHkgZ3JlYXRlciB0aGFuIDAuCjxwPlRoZSB1cGNfYWxsX2dhdGhlcl9hbGwgZnVuY3Rpb24gdHJlYXRzIHRoZSA8Y29kZT5zcmM8L2NvZGU+IHBvaW50ZXIgYXMgaWYgaXQgcG9pbnRlZCB0byBhCnNoYXJlZCBtZW1vcnkgYXJlYSBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIG9uIGVhY2ggdGhyZWFkIGFuZCB0aGVyZWZvcmUgaGFkIHR5cGU6CjxwcmU+CnNoYXJlZCBbbmJ5dGVzXSBjaGFyW25ieXRlcyAqIFRIUkVBRFNdCjwvcHJlPgo8cD5hbmQgaXQgdHJlYXRzIHRoZSA8Y29kZT5kc3Q8L2NvZGU+ICBwb2ludGVyIGFzIGlmIGl0IHBvaW50ZWQgdG8gYSBzaGFyZWQgbWVtb3J5IGFyZWEgd2l0aAp0aGUgdHlwZToKc2hhcmVkIFtuYnl0ZXMgKiBUSFJFQURTXSBjaGFyW25ieXRlcyAqIFRIUkVBRFMgKiBUSFJFQURTXQo8cD5UaGUgdGFyZ2V0cyBvZiB0aGUgPGNvZGU+c3JjPC9jb2RlPiBhbmQgPGNvZGU+ZHN0PC9jb2RlPiBwb2ludGVycyBtdXN0IGhhdmUgYWZmaW5pdHkgdG8gdGhyZWFkIDAuCjxwPlRoZSA8Y29kZT5zcmM8L2NvZGU+IGFuZCA8Y29kZT5kc3Q8L2NvZGU+ICBwb2ludGVycyBhcmUgdHJlYXRlZCBhcyBpZiB0aGV5IGhhdmUgcGhhc2UgMC4KPHA+VGhlIGVmZmVjdCBpcyBlcXVpdmFsZW50IHRvIGNvcHlpbmcgdGhlIGl0aCBibG9jayBvZiA8Y29kZT5uYnl0ZXM8L2NvZGU+IGJ5dGVzIHBvaW50ZWQgdG8KYnkgPGNvZGU+c3JjPC9jb2RlPiB0byB0aGUgaXRoIGJsb2NrIG9mIDxjb2RlPm5ieXRlczwvY29kZT4gYnl0ZXMgcG9pbnRlZCB0byBieSA8Y29kZT5kc3Q8L2NvZGU+IHRoYXQgaGFzIGFmZmluaXR5CnRvIGVhY2ggdGhyZWFkLgoKCgo8cD4KPHVsPgo8bGk+IEVYQU1QTEUgMSA8Y29kZT51cGNfYWxsX2dhdGhlcl9hbGwgPC9jb2RlPiBmb3IgdGhlIHN0YXRpYyBUSFJFQURTIHRyYW5zbGF0aW9uIGVudmlyb25tZW50Lgo8cHJlPgojaW5jbHVkZSAmbHQ7dXBjLmgmZ3Q7CiNpbmNsdWRlICZsdDt1cGNfY29sbGVjdGl2ZS5oJmd0OwojZGVmaW5lIE5FTEVNUyAxMApzaGFyZWQgW05FTEVNU10gaW50IEFbTkVMRU1TKlRIUkVBRFNdOwpzaGFyZWQgW05FTEVNUypUSFJFQURTXSBpbnQgQltUSFJFQURTXVtORUxFTVMqVEhSRUFEU107Ci8vIEluaXRpYWxpemUgQS4KdXBjX2JhcnJpZXI7CnVwY19hbGxfZ2F0aGVyX2FsbCggQiwgQSwgc2l6ZW9mKGludCkqTkVMRU1TLApVUENfSU5fTk9TWU5DIHwgVVBDX09VVF9OT1NZTkMgKTsKdXBjX2JhcnJpZXI7CjwvcHJlPgo8bGk+RVhBTVBMRSAyIDxjb2RlPnVwY19hbGxfZ2F0aGVyX2FsbCA8L2NvZGU+IGFsbCBmb3IgdGhlIGR5bmFtaWMgVEhSRUFEUyB0cmFuc2xhdGlvbgplbnZpcm9ubWVudC4KPHByZT4KI2luY2x1ZGUgJmx0O3VwYy5oJmd0OwojaW5jbHVkZSAmbHQ7dXBjX2NvbGxlY3RpdmUuaCZndDsKI2RlZmluZSBORUxFTVMgMTAKc2hhcmVkIFtORUxFTVNdIGludCBBW05FTEVNUypUSFJFQURTXTsKc2hhcmVkIGludCAqQmRhdGE7CnNoYXJlZCBbXSBpbnQgKm15QjsKQmRhdGEgPSB1cGNfYWxsX2FsbG9jKFRIUkVBRFMqVEhSRUFEUywgTkVMRU1TKnNpemVvZihpbnQpKTsKbXlCID0gKHNoYXJlZCBbXSBpbnQgKikmQmRhdGFbTVlUSFJFQURdOwovLyBCZGF0YSBjb250YWlucyBUSFJFQURTKlRIUkVBRFMqTkVMRU1TIGVsZW1lbnRzLgovLyBteUIgaXMgTVlUSFJFQUTVcyByb3cgb2YgQmRhdGEuCi8vIEluaXRpYWxpemUgQS4KdXBjX2FsbF9nYXRoZXJfYWxsKCBCZGF0YSwgQSwgTkVMRU1TKnNpemVvZihpbnQpLApVUENfSU5fQUxMU1lOQyB8IFVQQ19PVVRfQUxMU1lOQyApOwo8L3ByZT4KPGxpPgo8bGk+CjwvdWw+CjxwPiZuYnNwCjxwPiZuYnNwCjxwPjxhIGhyZWY9InRlcm1zLmh0bWwiPlRlcm1zLCBkZWZpbml0aW9ucywgYW5kIHN5bWJvbHM8L2E+PGJyPgo8cD48YSBocmVmPSJpbmRleC5odG1sIj5CYWNrIHRvIGluZGV4IG9mIGFsbCBVUEMgZnVuY3Rpb25zPC9hPgo=