Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClNvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAoKqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEzIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBG9nJkZXJ1bmcgZGVyIGFuZ2V3YW5kdGVuIEZvcnNjaHVuZyBlLlYuCiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KCiAxLiAgICBJTlRST0RVQ1RJT04KVGhlIEZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkICgiRkRLIEFBQyBDb2RlYyIpIGlzIHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cwp0aGUgTVBFRyBBZHZhbmNlZCBBdWRpbyBDb2RpbmcgKCJBQUMiKSBlbmNvZGluZyBhbmQgZGVjb2Rpbmcgc2NoZW1lIGZvciBkaWdpdGFsIGF1ZGlvLgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCgpBQUMncyBIRS1BQUMgYW5kIEhFLUFBQyB2MiB2ZXJzaW9ucyBhcmUgcmVnYXJkZWQgYXMgdG9kYXkncyBtb3N0IGVmZmljaWVudCBnZW5lcmFsIHBlcmNlcHR1YWwKYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQppbmRlcGVuZGVudCBzdHVkaWVzIGFuZCBpcyB3aWRlbHkgZGVwbG95ZWQuIEFBQyBoYXMgYmVlbiBzdGFuZGFyZGl6ZWQgYnkgSVNPIGFuZCBJRUMgYXMgcGFydApvZiB0aGUgTVBFRyBzcGVjaWZpY2F0aW9ucy4KClBhdGVudCBsaWNlbnNlcyBmb3IgbmVjZXNzYXJ5IHBhdGVudCBjbGFpbXMgZm9yIHRoZSBGREsgQUFDIENvZGVjIChpbmNsdWRpbmcgdGhvc2Ugb2YgRnJhdW5ob2ZlcikKbWF5IGJlIG9idGFpbmVkIHRocm91Z2ggVmlhIExpY2Vuc2luZyAod3d3LnZpYWxpY2Vuc2luZy5jb20pIG9yIHRocm91Z2ggdGhlIHJlc3BlY3RpdmUgcGF0ZW50IG93bmVycwppbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCnRoZSBJU08vSUVDIE1QRUcgYXVkaW8gc3RhbmRhcmRzLiBQbGVhc2Ugbm90ZSB0aGF0IG1vc3QgbWFudWZhY3R1cmVycyBvZiBBbmRyb2lkIGRldmljZXMgYWxyZWFkeSBsaWNlbnNlCnRoZXNlIHBhdGVudCBjbGFpbXMgdGhyb3VnaCBWaWEgTGljZW5zaW5nIG9yIGRpcmVjdGx5IGZyb20gdGhlIHBhdGVudCBvd25lcnMsIGFuZCB0aGVyZWZvcmUgRkRLIEFBQyBDb2RlYwpzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCgpDb21tZXJjaWFsbHktbGljZW5zZWQgQUFDIHNvZnR3YXJlIGxpYnJhcmllcywgaW5jbHVkaW5nIGZsb2F0aW5nLXBvaW50IHZlcnNpb25zIHdpdGggZW5oYW5jZWQgc291bmQgcXVhbGl0eSwKYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAphcHBsaWNhdGlvbnMgaW5mb3JtYXRpb24gYW5kIGRvY3VtZW50YXRpb24uCgoyLiAgICBDT1BZUklHSFQgTElDRU5TRQoKUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCB3aXRob3V0CnBheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKCllvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gcmVkaXN0cmlidXRpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjIG9yCnlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCgpZb3UgbXVzdCByZXRhaW4gdGhlIGNvbXBsZXRlIHRleHQgb2YgdGhpcyBzb2Z0d2FyZSBsaWNlbnNlIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCllvdSBtdXN0IG1ha2UgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGNvcGllcyBvZiB0aGUgY29tcGxldGUgc291cmNlIGNvZGUgb2YgdGhlIEZESyBBQUMgQ29kZWMgYW5kIHlvdXIKbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIHJlY2lwaWVudHMgb2YgY29waWVzIGluIGJpbmFyeSBmb3JtLgoKVGhlIG5hbWUgb2YgRnJhdW5ob2ZlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIGxpYnJhcnkgd2l0aG91dApwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCgpZb3UgbWF5IG5vdCBjaGFyZ2UgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBmb3IgYW55b25lIHRvIHVzZSwgY29weSBvciBkaXN0cmlidXRlIHRoZSBGREsgQUFDIENvZGVjCnNvZnR3YXJlIG9yIHlvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvLgoKWW91ciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYyBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgc29mdHdhcmUKYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIEZvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgRkRLIEFBQyBDb2RlYywgdGhlIHRlcm0KIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCiJUaGlyZC1QYXJ0eSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZC4iCgozLiAgICBOTyBQQVRFTlQgTElDRU5TRQoKTk8gRVhQUkVTUyBPUiBJTVBMSUVEIExJQ0VOU0VTIFRPIEFOWSBQQVRFTlQgQ0xBSU1TLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBwYXRlbnRzIG9mIEZyYXVuaG9mZXIsCkFSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCnJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZS4KCllvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZApieSBhcHByb3ByaWF0ZSBwYXRlbnQgbGljZW5zZXMuCgo0LiAgICBESVNDTEFJTUVSCgpUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYnkgRnJhdW5ob2ZlciBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRvcnMKIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcwpvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUgpDT05UUklCVVRPUlMgQkUgTElBQkxFIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCmluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCm9yIGJ1c2luZXNzIGludGVycnVwdGlvbiwgaG93ZXZlciBjYXVzZWQgYW5kIG9uIGFueSB0aGVvcnkgb2YgbGlhYmlsaXR5LCB3aGV0aGVyIGluIGNvbnRyYWN0LCBzdHJpY3QKbGlhYmlsaXR5LCBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGFyaXNpbmcgaW4gYW55IHdheSBvdXQgb2YgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBldmVuIGlmCmFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgoKNS4gICAgQ09OVEFDVCBJTkZPUk1BVElPTgoKRnJhdW5ob2ZlciBJbnN0aXR1dGUgZm9yIEludGVncmF0ZWQgQ2lyY3VpdHMgSUlTCkF0dGVudGlvbjogQXVkaW8gYW5kIE11bHRpbWVkaWEgRGVwYXJ0bWVudHMgLSBGREsgQUFDIExMCkFtIFdvbGZzbWFudGVsIDMzCjkxMDU4IEVybGFuZ2VuLCBHZXJtYW55Cgp3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCmFtbS1pbmZvQGlpcy5mcmF1bmhvZmVyLmRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiEKICBcZmlsZQogIFxicmllZiAgRnJhbWluZyBnZW5lcmF0b3IgcHJvdG90eXBlcyBhbmQgc3RydWN0cyAgCiovCiNpZm5kZWYgX0ZSQU1fR0VOX0gKI2RlZmluZSBfRlJBTV9HRU5fSAoKI2luY2x1ZGUgInNicl9kZWYuaCIgLyogZm9yIE1BWF9FTlZFTE9QRVMgYW5kIE1BWF9OT0lTRV9FTlZFTE9QRVMgaW4gc3RydWN0IEZSQU1FX0lORk8gYW5kIENPREVDX1RZUEUgKi8KCiNkZWZpbmUgTUFYX0VOVkVMT1BFU19WQVJWQVIgTUFYX0VOVkVMT1BFUyAvKiE8IHdvcnN0IGNhc2UgbnVtYmVyIG9mIGVudmVsb3BlcyBpbiBhIFZBUlZBUiBmcmFtZSAqLwojZGVmaW5lIE1BWF9FTlZFTE9QRVNfRklYVkFSX1ZBUkZJWCA0IC8qITwgd29yc3QgY2FzZSBudW1iZXIgb2YgZW52ZWxvcGVzIGluIFZBUkZJWCBhbmQgRklYVkFSIGZyYW1lcyAqLwojZGVmaW5lIE1BWF9OVU1fUkVMIDMgLyohPCBtYXhpbXVtIG51bWJlciBvZiByZWxhdGl2ZSBib3JkZXJzIGluIGFueSBWQVIgZnJhbWUgKi8KCi8qIFNCUiBmcmFtZSBjbGFzcyBkZWZpbml0aW9ucyAqLwp0eXBlZGVmIGVudW0gewogIEZJWEZJWCA9IDAsIC8qITwgYnNfZnJhbWVfY2xhc3M6IGxlYWRpbmcgYW5kIHRyYWlsaW5nIGZyYW1lIGJvcmRlcnMgYXJlIGZpeGVkICovCiAgRklYVkFSLCAgICAgLyohPCBic19mcmFtZV9jbGFzczogbGVhZGluZyBmcmFtZSBib3JkZXIgaXMgZml4ZWQsIHRyYWlsaW5nIGZyYW1lIGJvcmRlciBpcyB2YXJpYWJsZSAqLwogIFZBUkZJWCwgICAgIC8qITwgYnNfZnJhbWVfY2xhc3M6IGxlYWRpbmcgZnJhbWUgYm9yZGVyIGlzIHZhcmlhYmxlLCB0cmFpbGluZyBmcmFtZSBib3JkZXIgaXMgZml4ZWQgKi8KICBWQVJWQVIgICAgICAvKiE8IGJzX2ZyYW1lX2NsYXNzOiBsZWFkaW5nIGFuZCB0cmFpbGluZyBmcmFtZSBib3JkZXJzIGFyZSB2YXJpYWJsZSAqLwogICxGSVhGSVhvbmx5ICAvKiE8IGJzX2ZyYW1lX2NsYXNzOiBsZWFkaW5nIGJvcmRlciBmaXhlZCAoMCksIHRyYWlsaW5nIGJvcmRlciBmaXhlZCAobnJUaW1lU2xvdHMpIGFuZCBlbmNhc2VkIGJvcmRlcnMgYXJlIGR5bmFtaWNhbGx5IGRlcml2ZWQgZnJvbSB0aGUgdHJhblBvcyAqLwp9RlJBTUVfQ0xBU1M7CgoKLyogaGVscGVyIGNvbnN0YW50cyAqLwojZGVmaW5lIERDICAgICAgNDcxMSAgICAgICAgLyohPCBoZWxwZXIgY29uc3RhbnQ6IGRvbid0IGNhcmUgKi8KI2RlZmluZSBFTVBUWSAgICgtOTkpICAgICAgIC8qITwgaGVscGVyIGNvbnN0YW50OiBlbXB0eSAqLwoKCi8qIHN5c3RlbSBjb25zdGFudHM6IEFBQytTQlIsIERSTSBGcmFtZS1MZW5ndGggKi8KI2RlZmluZSBGUkFNRV9NSURETEVfU0xPVF8xOTIwICA0CiNkZWZpbmUgTlVNQkVSX1RJTUVfU0xPVFNfMTkyMCAgMTUKCiNkZWZpbmUgTERfUFJFVFJBTl9PRkYgICAgICAgICAgIDMKI2RlZmluZSBGUkFNRV9NSURETEVfU0xPVF81MTJMRCAgMAojZGVmaW5lIE5VTUJFUl9USU1FX1NMT1RTXzUxMkxEICA4CiNkZWZpbmUgVFJBTlNJRU5UX09GRlNFVF9MRCAgICAgIDAKCgoKLyoKc3lzdGVtIGNvbnN0YW50czogQUFDK1NCUiBvciBhYWNQUk8gKGh5YnJpZCBmb3JtYXQpLCBTdGFuZGFyZCBGcmFtZS1MZW5ndGgsIE11bHRpLVJhdGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCk51bWJlciBvZiBzbG90cyAobnVtYmVyVGltZVNsb3RzKTogMTYgIChOVU1CRVJfVElNRV9TTE9UU18yMDQ4KQpEZXRlY3Rvci1vZmZzZXQgKGZyYW1lTWlkZGxlU2xvdCk6ICA0Ck92ZXJsYXAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIDMKQnVmZmVyLW9mZnNldCAgICAgICAgICAgICAgICAgICAgOiAgOCAgKEJVRkZFUl9GUkFNRV9TVEFSVF8yMDQ4ID0gMCkKCgogICAgICAgICAgICAgICAgICAgICAgICB8PC0tLS0tLS0tLS0tLXRyYW5Qb3MtLS0tLS0tLS0tPnwKICAgICAgICAgICAgICAgIHxjfGR8ZXxmfDB8MXwyfDN8NHw1fDZ8N3w4fDl8YXxifGN8ZHxlfGZ8CiAgICAgICAgRml4Rml4ICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAgICAgICBGaXhWYXIgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjwtIC0+OgogICAgICAgIFZhckZpeCAgOjwtIC0+OiAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgVmFyVmFyICA6PC0gLT46ICAgICAgICAgICAgICAgICAgICAgICAgIDo8LSAtPjoKICAgICAgICAgICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgYSBiIGMgZCBlIGYgMCAxIDIgMwouLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgoKfC18LXwtfC18LXwtfC18LUItfC18LXwtfC18LXwtfC18LXwtfC18LXwtfC18LXwtQi18LXwtfC18LXwtfC18LXwtfC18LXwtfC18LXwtfC18CgpmcmFtZS1nZW5lcmF0b3I6MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxNiAgICAgICAgICAgICAgMjQgICAgICAgICAgICAgIDMyCmFuYWx5c2lzLWJ1ZmZlcjo4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI0ICAgICAgICAgICAgICAzMiAgICAgICAgICAgICAgNDAKKi8KI2RlZmluZSBGUkFNRV9NSURETEVfU0xPVF8yMDQ4ICA0CiNkZWZpbmUgTlVNQkVSX1RJTUVfU0xPVFNfMjA0OCAgMTYKCgovKgpzeXN0ZW0gY29uc3RhbnRzOiBtcDNQUk8sIE11bHRpLVJhdGUgJiBTaW5nbGUtUmF0ZQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpOdW1iZXIgb2Ygc2xvdHMgKG51bWJlclRpbWVTbG90cyk6ICA5ICAgIChOVU1CRVJfVElNRV9TTE9UU18xMTUyKQpEZXRlY3Rvci1vZmZzZXQgKGZyYW1lTWlkZGxlU2xvdCk6ICA0ICAgIChGUkFNRV9NSURETEVfU0xPVF8xMTUyKQpPdmVybGFwICAgICAgICAgICAgICAgICAgICAgICAgICA6ICAzCkJ1ZmZlci1vZmZzZXQgICAgICAgICAgICAgICAgICAgIDogIDQuNSAgKEJVRkZFUl9GUkFNRV9TVEFSVF8xMTUyID0gMCkKCgogICAgICAgICAgICAgICAgICAgICAgICAgfDwtLS0tdHJhblBvcy0tLS0+fAogICAgICAgICAgICAgICAgIHw1fDZ8N3w4fDB8MXwyfDN8NHw1fDZ8N3w4fAogICAgICAgICBGaXhGaXggIHwgICAgICAgICAgICAgICAgIHwKICAgICAgICAgRml4VmFyICB8ICAgICAgICAgICAgICAgICA6PC0gLT46CiAgICAgICAgIFZhckZpeCAgOjwtIC0+OiAgICAgICAgICAgfAogICAgICAgICBWYXJWYXIgIDo8LSAtPjogICAgICAgICAgIDo8LSAtPjoKICAgICAgICAgICAgICAgICAwIDEgMiAzIDQgNSA2IDcgOCAwIDEgMiAzCiAgICAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCgogICAgICAgIC18LXwtfC18LUItfC18LXwtfC18LXwtfC18LUItfC18LXwtfC18LXwtfC18LXwKCmZyYW1lLWdlbmVyYXRvcjogMCAgICAgICAgICAgICAgICAgOSAgICAgICAxMyAgICAgICAgMTgKYW5hbHlzaXMtYnVmZmVyOiA0LjUgICAgICAgICAgICAgICAxMy41ICAgICAgICAgICAgICAyMi41CiovCiNkZWZpbmUgRlJBTUVfTUlERExFX1NMT1RfMTE1MiAgNAojZGVmaW5lIE5VTUJFUl9USU1FX1NMT1RTXzExNTIgIDkKCgovKiBzeXN0ZW0gY29uc3RhbnRzOiBMYXllcjIrU0JSICovCiNkZWZpbmUgRlJBTUVfTUlERExFX1NMT1RfMjMwNCAgOAojZGVmaW5lIE5VTUJFUl9USU1FX1NMT1RTXzIzMDQgIDE4CgoKLyohCiAgXHN0cnVjdCBTQlJfR1JJRAogIFxicmllZiAgc2JyX2dyaWQoKSBzaWduYWxzIHRvIGJlIGNvbnZlcnRlZCB0byBiaXRzdHJlYW0gZWxlbWVudHMKCiAgVGhlIHZhcmlhYmxlcyBob2xkIHRoZSBzaWduYWxzIChlLmcuIGxlbmd0aHMgYW5kIG51bWJlcnMpIGluICJjbGVhciB0ZXh0IgoqLwoKdHlwZWRlZiBzdHJ1Y3QKewogIC8qIHN5c3RlbSBjb25zdGFudHMgKi8KICBJTlQgYnVmZmVyRnJhbWVTdGFydDsgICAgIC8qITwgZnJhbWUgZ2VuZXJhdG9yIHZzIGFuYWx5c2lzIGJ1ZmZlciB0aW1lIGFsaWdubWVudCAoY3VycmVudGx5IHNldCB0byAwLCBvZmZzZXQgYWRkZWQgZWxzZXdoZXJlKSAqLwogIElOVCBudW1iZXJUaW1lU2xvdHM7ICAgICAgLyohPCBudW1iZXIgb2YgU0JSIHRpbWVzbG90cyBwZXIgZnJhbWUgKi8KCiAgLyogd2lsbCBiZSBhZGp1c3RlZCBmb3IgZXZlcnkgZnJhbWUgKi8KICBGUkFNRV9DTEFTUyBmcmFtZUNsYXNzOyAgIC8qITwgU0JSIGZyYW1lIGNsYXNzICAqLwogIElOVCBic19udW1fZW52OyAgICAgICAgICAgLyohPCBic19udW1fZW52LCBudW1iZXIgb2YgZW52ZWxvcGVzIGZvciBGSVhGSVggKi8KICBJTlQgYnNfYWJzX2JvcmQ7ICAgICAgICAgIC8qITwgYnNfYWJzX2JvcmQsIGFic29sdXRlIGJvcmRlciBmb3IgVkFSRklYIGFuZCBGSVhWQVIgKi8KICBJTlQgbjsgICAgICAgICAgICAgICAgICAgIC8qITwgbnVtYmVyIG9mIHJlbGF0aXZlIGJvcmRlcnMgZm9yIFZBUkZJWCBhbmQgRklYVkFSICAgKi8KICBJTlQgcDsgICAgICAgICAgICAgICAgICAgIC8qITwgcG9pbnRlci10by10cmFuc2llbnQtYm9yZGVyICAqLwogIElOVCBic19yZWxfYm9yZFtNQVhfTlVNX1JFTF07ICAgICAgICAgLyohPCBic19yZWxfYm9yZCwgcmVsYXRpdmUgYm9yZGVycyBmb3IgYWxsIFZBUiAqLwogIElOVCB2X2ZbTUFYX0VOVkVMT1BFU19GSVhWQVJfVkFSRklYXTsgLyohPCBlbnZlbG9wZSBmcmVxdWVuY3kgcmVzb2x1dGlvbnMgZm9yIEZJWFZBUiBhbmQgVkFSRklYICAqLwoKICBJTlQgYnNfYWJzX2JvcmRfMDsgICAgICAgIC8qITwgYnNfYWJzX2JvcmRfMCwgbGVhZGluZyBhYnNvbHV0ZSBib3JkZXIgZm9yIFZBUlZBUiAqLwogIElOVCBic19hYnNfYm9yZF8xOyAgICAgICAgLyohPCBic19hYnNfYm9yZF8xLCB0cmFpbGluZyBhYnNvbHV0ZSBib3JkZXIgZm9yIFZBUlZBUiAqLwogIElOVCBic19udW1fcmVsXzA7ICAgICAgICAgLyohPCBic19udW1fcmVsXzAsIG51bWJlciBvZiByZWxhdGl2ZSBib3JkZXJzIGFzc29jaWF0ZWQgd2l0aCBsZWFkaW5nIGFic29sdXRlIGJvcmRlciBmb3IgVkFSVkFSICovCiAgSU5UIGJzX251bV9yZWxfMTsgICAgICAgICAvKiE8IGJzX251bV9yZWxfMSwgbnVtYmVyIG9mIHJlbGF0aXZlIGJvcmRlcnMgYXNzb2NpYXRlZCB3aXRoIHRyYWlsaW5nIGFic29sdXRlIGJvcmRlciBmb3IgVkFSVkFSICovCiAgSU5UIGJzX3JlbF9ib3JkXzBbTUFYX05VTV9SRUxdOyAgICAgICAvKiE8IGJzX3JlbF9ib3JkXzAsIHJlbGF0aXZlIGJvcmRlcnMgYXNzb2NpYXRlZCB3aXRoIGxlYWRpbmcgYWJzb2x1dGUgYm9yZGVyIGZvciBWQVJWQVIgKi8KICBJTlQgYnNfcmVsX2JvcmRfMVtNQVhfTlVNX1JFTF07ICAgICAgIC8qITwgYnNfcmVsX2JvcmRfMSwgcmVsYXRpdmUgYm9yZGVycyBhc3NvY2lhdGVkIHdpdGggdHJhaWxpbmcgYWJzb2x1dGUgYm9yZGVyIGZvciBWQVJWQVIgKi8KICBJTlQgdl9mTFJbTUFYX0VOVkVMT1BFU19WQVJWQVJdOyAgICAgIC8qITwgZW52ZWxvcGUgZnJlcXVlbmN5IHJlc29sdXRpb25zIGZvciBWQVJWQVIgICovCgp9ClNCUl9HUklEOwp0eXBlZGVmIFNCUl9HUklEICpIQU5ETEVfU0JSX0dSSUQ7CgoKCi8qIQogIFxzdHJ1Y3QgU0JSX0ZSQU1FX0lORk8KICBcYnJpZWYgIHRpbWUvZnJlcXVlbmN5IGdyaWQgZGVzY3JpcHRpb24gZm9yIG9uZSBmcmFtZQoqLwp0eXBlZGVmIHN0cnVjdAp7CiAgSU5UIG5FbnZlbG9wZXM7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgbnVtYmVyIG9mIGVudmVsb3BlcyAqLwogIElOVCBib3JkZXJzW01BWF9FTlZFTE9QRVMrMV07ICAgICAgICAgICAvKiE8IGVudmVsb3BlIGJvcmRlcnMgaW4gU0JSIHRpbWVzbG90cyAqLwogIEZSRVFfUkVTIGZyZXFSZXNbTUFYX0VOVkVMT1BFU107ICAgICAgICAvKiE8IGZyZXF1ZW5jeSByZXNvbHV0aW9uIG9mIGVhY2ggZW52ZWxvcGUgKi8KICBJTlQgc2hvcnRFbnY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBudW1iZXIgb2YgYW4gZW52ZWxvcGUgdG8gYmUgc2hvcnRlbmVkIChzdGFydGluZyBhdCAxKSBvciAwIGZvciBubyBzaG9ydGVuZWQgZW52ZWxvcGUgKi8KICBJTlQgbk5vaXNlRW52ZWxvcGVzOyAgICAgICAgICAgICAgICAgICAgLyohPCBudW1iZXIgb2Ygbm9pc2UgZmxvb3JzICovCiAgSU5UIGJvcmRlcnNOb2lzZVtNQVhfTk9JU0VfRU5WRUxPUEVTKzFdOy8qITwgbm9pc2UgZmxvb3IgYm9yZGVycyBpbiBTQlIgdGltZXNsb3RzICovCn0KU0JSX0ZSQU1FX0lORk87Ci8qIFdBUk5JTkc6IFdoZW4gcmVhcnJhbmdpbmcgdGhlIGVsZW1lbnRzIG9mIHRoaXMgc3RydWN0IGtlZXAgaW4gbWluZCB0aGF0IHRoZSBzdGF0aWMKICogaW5pdGlhbGl6YXRpb25zIGluIHRoZSBjb3JyZXNwb25kaW5nIEMtZmlsZSBoYXZlIHRvIGJlIHJlYXJyYW5nZWQgYXMgd2VsbCEKICogc25kIDIwMDIvMDEvMjMKICovCnR5cGVkZWYgU0JSX0ZSQU1FX0lORk8gKkhBTkRMRV9TQlJfRlJBTUVfSU5GTzsKCgovKiEKICBcc3RydWN0IFNCUl9FTlZFTE9QRV9GUkFNRQogIFxicmllZiAgZnJhbWUgZ2VuZXJhdG9yIG1haW4gc3RydWN0CgogIENvbnRhaW5zIHR1bmluZyBwYXJhbWV0ZXJzLCB0aW1lL2ZyZXF1ZW5jeSBncmlkIGRlc2NyaXB0aW9uLCBzYnJfZ3JpZCgpIGJpdHN0cmVhbSBlbGVtZW50cywgYW5kIGdlbmVyYXRvciBpbnRlcm5hbCBzaWduYWxzCiovCnR5cGVkZWYgc3RydWN0CnsKICAvKiBzeXN0ZW0gY29uc3RhbnRzICovCiAgSU5UIGZyYW1lTWlkZGxlU2xvdDsgICAgICAvKiE8IHRyYW5zaWVudCBkZXRlY3RvciBvZmZzZXQgaW4gU0JSIHRpbWVzbG90cyAqLwoKICAvKiBiYXNpYyB0dW5pbmcgcGFyYW1ldGVycyAqLwogIElOVCBzdGF0aWNGcmFtaW5nOyAgICAgICAgLyohPCAxOiBydW4gc3RhdGljIGZyYW1pbmcgaW4gdGltZSwgaS5lLiBleGNsdXNpdmUgdXNlIG9mIGJzX2ZyYW1lX2NsYXNzID0gRklYRklYICovCiAgSU5UIG51bUVudlN0YXRpYzsgICAgICAgICAvKiE8IG51bWJlciBvZiBlbnZlbG9wZXMgcGVyIGZyYW1lIGZvciBzdGF0aWMgZnJhbWluZyAqLwogIElOVCBmcmVxX3Jlc19maXhmaXg7ICAgICAgLyohPCBlbnZlbG9wZSBmcmVxdWVuY3kgcmVzb2x1dGlvbiB0byB1c2UgZm9yIGJzX2ZyYW1lX2NsYXNzID0gRklYRklYICovCgogIC8qIGV4cGVydCB0dW5pbmcgcGFyYW1ldGVycyAqLwogIGNvbnN0IGludCAqdl90dW5pbmdTZWdtOyAgLyohPCBzZWdtZW50IGxlbmd0aHMgdG8gdXNlIGFyb3VuZCB0cmFuc2llbnQgKi8KICBjb25zdCBpbnQgKnZfdHVuaW5nRnJlcTsgIC8qITwgZnJlcXVlbmN5IHJlc29sdXRpb25zIHRvIHVzZSBhcm91bmQgdHJhbnNpZW50ICovCiAgSU5UIGRtaW47ICAgICAgICAgICAgICAgICAvKiE8IG1pbmltdW0gbGVuZ3RoIG9mIGRlcGVuZGVudCBzZWdtZW50cyAqLwogIElOVCBkbWF4OyAgICAgICAgICAgICAgICAgLyohPCBtYXhpbXVtIGxlbmd0aCBvZiBkZXBlbmRlbnQgc2VnbWVudHMgKi8KICBJTlQgYWxsb3dTcHJlYWQ7ICAgICAgICAgIC8qITwgMTogYWxsb3cgaXNvbGF0ZWQgdHJhbnNpZW50IHRvIGluZmx1ZW5jZSBncmlkIG9mIDMgY29uc2VjdXRpdmUgZnJhbWVzICovCgogIC8qIGludGVybmFsbHkgdXNlZCBzaWduYWxzICovCiAgRlJBTUVfQ0xBU1MgZnJhbWVDbGFzc09sZDsgICAgICAgICAgICAgICAgLyohPCBmcmFtZSBjbGFzcyB1c2VkIGZvciBwcmV2aW91cyBmcmFtZSAqLwogIElOVCBzcHJlYWRGbGFnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgMTogdXNlIFZBUlZBUiBpbnN0ZWFkIG9mIFZBUkZJWCB0byBmb2xsb3cgdXAgb2xkIHRyYW5zaWVudCAqLwoKICBJTlQgdl9ib3JkWzIgKiBNQVhfRU5WRUxPUEVTX1ZBUlZBUiArIDFdOyAvKiE8IGJvcmRlcnMgZm9yIGN1cnJlbnQgZnJhbWUgYW5kIHByZWxpbWluYXJ5IGJvcmRlcnMgZm9yIG5leHQgZnJhbWUgKGZpeGVkIGJvcmRlcnMgZXhjbHVkZWQpICovCiAgSU5UIGxlbmd0aF92X2JvcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBoZWxwZXIgdmFyaWFibGU6IGxlbmd0aCBvZiB2X2JvcmQgKi8KICBJTlQgdl9mcmVxWzIgKiBNQVhfRU5WRUxPUEVTX1ZBUlZBUiArIDFdOyAvKiE8IGZyZXF1ZW5jeSByZXNvbHV0aW9ucyBmb3IgY3VycmVudCBmcmFtZSBhbmQgcHJlbGltaW5hcnkgcmVzb2x1dGlvbnMgZm9yIG5leHQgZnJhbWUgKi8KICBJTlQgbGVuZ3RoX3ZfZnJlcTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGhlbHBlciB2YXJpYWJsZTogbGVuZ3RoIG9mIHZfZnJlcSAqLwoKICBJTlQgdl9ib3JkRm9sbG93W01BWF9FTlZFTE9QRVNfVkFSVkFSXTsgICAvKiE8IHByZWxpbWluYXJ5IGJvcmRlcnMgZm9yIGN1cnJlbnQgZnJhbWUgKGNhbGN1bGF0ZWQgZHVyaW5nIHByZXZpb3VzIGZyYW1lKSAqLwogIElOVCBsZW5ndGhfdl9ib3JkRm9sbG93OyAgICAgICAgICAgICAgICAgIC8qITwgaGVscGVyIHZhcmlhYmxlOiBsZW5ndGggb2Ygdl9ib3JkRm9sbG93ICovCiAgSU5UIGlfdHJhbkZvbGxvdzsgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBwb2ludHMgdG8gdHJhbnNpZW50IGJvcmRlciBpbiB2X2JvcmRGb2xsb3cgKG1heSBiZSBuZWdhdGl2ZSwgc2VlIGtlZXBGb3JGb2xsb3dVcCgpKSAqLwogIElOVCBpX2ZpbGxGb2xsb3c7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgcG9pbnRzIHRvIGZpcnN0IGZpbGwgYm9yZGVyIGluIHZfYm9yZEZvbGxvdyAqLwogIElOVCB2X2ZyZXFGb2xsb3dbTUFYX0VOVkVMT1BFU19WQVJWQVJdOyAgIC8qITwgcHJlbGltaW5hcnkgZnJlcXVlbmN5IHJlc29sdXRpb25zIGZvciBjdXJyZW50IGZyYW1lIChjYWxjdWxhdGVkIGR1cmluZyBwcmV2aW91cyBmcmFtZSkgKi8KICBJTlQgbGVuZ3RoX3ZfZnJlcUZvbGxvdzsgICAgICAgICAgICAgICAgICAvKiE8IGhlbHBlciB2YXJpYWJsZTogbGVuZ3RoIG9mIHZfZnJlcUZvbGxvdyAqLwoKCiAgLyogZXh0ZXJuYWxseSBuZWVkZWQgc2lnbmFscyAqLwogIFNCUl9HUklEICAgICAgICAgU2JyR3JpZDsgICAgICAgICAvKiE8IHNicl9ncmlkKCkgc2lnbmFscyB0byBiZSBjb252ZXJ0ZWQgdG8gYml0c3RyZWFtIGVsZW1lbnRzICovCiAgU0JSX0ZSQU1FX0lORk8gICBTYnJGcmFtZUluZm87ICAgIC8qITwgdGltZS9mcmVxdWVuY3kgZ3JpZCBkZXNjcmlwdGlvbiBmb3Igb25lIGZyYW1lICovCn0KU0JSX0VOVkVMT1BFX0ZSQU1FOwp0eXBlZGVmIFNCUl9FTlZFTE9QRV9GUkFNRSAqSEFORExFX1NCUl9FTlZFTE9QRV9GUkFNRTsKCgoKdm9pZApGREtzYnJFbmNfaW5pdEZyYW1lSW5mb0dlbmVyYXRvciAoSEFORExFX1NCUl9FTlZFTE9QRV9GUkFNRSAgaFNickVudkZyYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBhbGxvd1NwcmVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBJTlQgbnVtRW52U3RhdGljLAogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCBzdGF0aWNGcmFtaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgIElOVCB0aW1lU2xvdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgSU5UIGZyZXFfcmVzX2ZpeGZpeAogICAgICAgICAgICAgICAgICAgICAgICAgICxpbnQgbGRHcmlkCiAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKCkhBTkRMRV9TQlJfRlJBTUVfSU5GTwpGREtzYnJFbmNfZnJhbWVJbmZvR2VuZXJhdG9yIChIQU5ETEVfU0JSX0VOVkVMT1BFX0ZSQU1FIGhTYnJFbnZGcmFtZSwKICAgICAgICAgICAgICAgICAgICBVQ0hBUiAqdl90cmFuc2llbnRfaW5mbywKICAgICAgICAgICAgICAgICAgICBVQ0hBUiAqdl90cmFuc2llbnRfaW5mb19wcmUsCiAgICAgICAgICAgICAgICAgICAgaW50IGxkR3JpZCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKnZfdHVuaW5nKTsKCiNlbmRpZgo=