LyoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogICBDb3B5cmlnaHQgKEMpIDE5OTctMjAwMCwgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcwoqICAgQ29ycG9yYXRpb24gYW5kIG90aGVycy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogIEZJTEUgTkFNRSA6IHB1dGlsLmgKKgoqICAgRGF0ZSAgICAgICAgTmFtZSAgICAgICAgRGVzY3JpcHRpb24KKiAgIDA1LzE0Lzk4ICAgIG5vcyAgICAgICAgIENyZWF0aW9uIChjb250ZW50IG1vdmVkIGhlcmUgZnJvbSB1dHlwZXMuaCkuCiogICAwNi8xNy85OSAgICBlcm0gICAgICAgICBBZGRlZCBJRUVFXzc1NAoqICAgMDcvMjIvOTggICAgc3RlcGhlbiAgICAgQWRkZWQgSUVFRXJlbWFpbmRlciwgbWF4LCBtaW4sIHRydW5jCiogICAwOC8xMy85OCAgICBzdGVwaGVuICAgICBBZGRlZCBpc05lZ2F0aXZlSW5maW5pdHksIGlzUG9zaXRpdmVJbmZpbml0eQoqICAgMDgvMjQvOTggICAgc3RlcGhlbiAgICAgQWRkZWQgbG9uZ0JpdHNGcm9tRG91YmxlCiogICAwMy8wMi85OSAgICBzdGVwaGVuICAgICBSZW1vdmVkIG9wZW5GaWxlKCkuICBBZGRlZCBBUzQwMCBzdXBwb3J0LgoqICAgMDQvMTUvOTkgICAgc3RlcGhlbiAgICAgQ29udmVydGVkIHRvIEMKKiAgIDExLzE1Lzk5ICAgIGhlbGVuYSAgICAgIEludGVncmF0ZWQgUy8zOTAgY2hhbmdlcyBmb3IgSUVFRSBzdXBwb3J0LgoqICAgMDEvMTEvMDAgICAgaGVsZW5hICAgICAgQWRkZWQgdV9nZXRWZXJzaW9uLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiovCgojaWZuZGVmIFBVVElMX0gKI2RlZmluZSBQVVRJTF9ICgojaW5jbHVkZSAidW5pY29kZS91dHlwZXMuaCIKCi8qIERlZmluZSB0aGlzIGlmIHlvdXIgcGxhdGZvcm0gc3VwcG9ydHMgSUVFRSA3NTQgZmxvYXRpbmcgcG9pbnQgKi8KI2RlZmluZSBJRUVFXzc1NCAgICAgICAKCi8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLyogUGxhdGZvcm0gdXRpbGl0aWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCgovKioKICogUGxhdGZvcm0gdXRpbGl0aWVzIGlzb2xhdGVzIHRoZSBwbGF0Zm9ybSBkZXBlbmRlbmNpZXMgb2YgdGhlCiAqIGxpYmFyYXJ5LiAgRm9yIGVhY2ggcGxhdGZvcm0gd2hpY2ggdGhpcyBjb2RlIGlzIHBvcnRlZCB0bywgdGhlc2UKICogZnVuY3Rpb25zIG1heSBoYXZlIHRvIGJlIHJlLWltcGxlbWVudGVkLiAgKi8KCi8qIEZsb2F0aW5nIHBvaW50IHV0aWxpdGllcyAKICogQGRyYWZ0CiAqLwpVX0NBUEkgYm9vbF90ICBVX0VYUE9SVDIgIHVwcnZfaXNOYU4oZG91YmxlKTsKVV9DQVBJIGJvb2xfdCAgVV9FWFBPUlQyIHVwcnZfaXNJbmZpbml0ZShkb3VibGUpOwpVX0NBUEkgYm9vbF90ICAgVV9FWFBPUlQyIHVwcnZfaXNQb3NpdGl2ZUluZmluaXR5KGRvdWJsZSk7ClVfQ0FQSSBib29sX3QgICBVX0VYUE9SVDIgdXBydl9pc05lZ2F0aXZlSW5maW5pdHkoZG91YmxlKTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2dldE5hTih2b2lkKTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2dldEluZmluaXR5KHZvaWQpOwoKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2Zsb29yKGRvdWJsZSB4KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2NlaWwoZG91YmxlIHgpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfZmFicyhkb3VibGUgeCk7ClVfQ0FQSSBkb3VibGUgICBVX0VYUE9SVDIgdXBydl9tb2RmKGRvdWJsZSB4LCBkb3VibGUqIHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfZm1vZChkb3VibGUgeCwgZG91YmxlIHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfcG93MTAoaW50MzJfdCB4KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X0lFRUVyZW1haW5kZXIoZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2ZtYXgoZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGRvdWJsZSAgIFVfRVhQT1JUMiB1cHJ2X2ZtaW4oZG91YmxlIHgsIGRvdWJsZSB5KTsKVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X21heChpbnQzMl90IHgsIGludDMyX3QgeSk7ClVfQ0FQSSBpbnQzMl90ICBVX0VYUE9SVDIgdXBydl9taW4oaW50MzJfdCB4LCBpbnQzMl90IHkpOwpVX0NBUEkgZG91YmxlICAgVV9FWFBPUlQyIHVwcnZfdHJ1bmMoZG91YmxlIGQpOwpVX0NBUEkgdm9pZCAgICAgVV9FWFBPUlQyIHVwcnZfbG9uZ0JpdHNGcm9tRG91YmxlKGRvdWJsZSBkLCBpbnQzMl90ICpoaSwgdWludDMyX3QgKmxvKTsKI2lmIFVfSVNfQklHX0VORElBTgojICAgZGVmaW5lIHVwcnZfaXNOZWdhdGl2ZShudW1iZXIpICgqKChzaWduZWQgY2hhciAqKSYobnVtYmVyKSk8MCkKI2Vsc2UKIyAgIGRlZmluZSB1cHJ2X2lzTmVnYXRpdmUobnVtYmVyKSAoKigoc2lnbmVkIGNoYXIgKikmKG51bWJlcikrc2l6ZW9mKG51bWJlciktMSk8MCkKI2VuZGlmCgovKiBDb252ZXJzaW9uIGZyb20gYSBkaWdpdCB0byB0aGUgY2hhcmFjdGVyIHdpdGggcmFkaXggYmFzZSBmcm9tIDItMTkgKi8KI2RlZmluZSBUX0NTdHJpbmdfaXRvc09mZnNldChhKSAoKGEpPD05PygnMCcrKGEpKTooJ0EnKyhhKS0xMCkpCgovKgogKiBSZXR1cm4gdGhlIGZsb29yIG9mIHRoZSBsb2cgYmFzZSAxMCBvZiBhIGdpdmVuIGRvdWJsZS4KICogVGhpcyBtZXRob2QgY29tcGVuc2F0ZXMgZm9yIGluYWNjdXJhY2llcyB3aGljaCBhcmlzZSBuYXR1cmFsbHkgd2hlbgogKiBjb21wdXRpbmcgbG9ncywgYW5kIGFsd2F5cyBnaXZlcyB0aGUgY29ycmVjdCB2YWx1ZS4gIFRoZSBwYXJhbWV0ZXIKICogbXVzdCBiZSBwb3NpdGl2ZSBhbmQgZmluaXRlLgogKiAoVGhhbmtzIHRvIEFsYW4gTGl1IGZvciBzdXBwbHlpbmcgdGhpcyBmdW5jdGlvbi4pCiAqLwovKioKICogUmV0dXJucyB0aGUgY29tbW9uIGxvZyBvZiB0aGUgZG91YmxlIHZhbHVlIGQuCiAqCiAqIEBwYXJhbSBkIHRoZSBkb3VibGUgdmFsdWUgdG8gYXBwbHkgdGhlIGNvbW1vbiBsb2cgZnVuY3Rpb24gZm9yLgogKiBAcmV0dXJuIHRoZSBsb2cgb2YgdmFsdWUgZC4KICogQGRyYWZ0CiAqLwpVX0NBUEkgaW50MTZfdCAgVV9FWFBPUlQyIHVwcnZfbG9nMTAoZG91YmxlIGQpOwoKLyoqCiAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgaW4gYSBkb3VibGUgbnVtYmVyIHguCiAqCiAqIEBwYXJhbSB4IHRoZSBkb3VibGUgbnVtYmVyCiAqIEBkcmFmdAogKi8KVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X2RpZ2l0c0FmdGVyRGVjaW1hbChkb3VibGUgeCk7CgovKioKICogVGltZSB6b25lIHV0aWxpdGllcwogKgogKiBXcmFwcGVycyBmb3IgQyBydW50aW1lIGxpYnJhcnkgZnVuY3Rpb25zIHJlbGF0aW5nIHRvIHRpbWV6b25lcy4KICogVGhlIHRfdHpzZXQoKSBmdW5jdGlvbiAoc2ltaWxhciB0byB0enNldCkgdXNlcyB0aGUgY3VycmVudCBzZXR0aW5nIAogKiBvZiB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgVFogdG8gYXNzaWduIHZhbHVlcyB0byB0aHJlZSBnbG9iYWwgCiAqIHZhcmlhYmxlczogZGF5bGlnaHQsIHRpbWV6b25lLCBhbmQgdHpuYW1lLiBUaGVzZSB2YXJpYWJsZXMgaGF2ZSB0aGUgCiAqIGZvbGxvd2luZyBtZWFuaW5ncywgYW5kIGFyZSBkZWNsYXJlZCBpbiAmbHQ7dGltZS5oPi4KICoKICogICBkYXlsaWdodCAgIE5vbnplcm8gaWYgZGF5bGlnaHQtc2F2aW5nLXRpbWUgem9uZSAoRFNUKSBpcyBzcGVjaWZpZWQKICogICAgICAgICAgICAgIGluIFRaOyBvdGhlcndpc2UsIDAuIERlZmF1bHQgdmFsdWUgaXMgMS4KICogICB0aW1lem9uZSAgIERpZmZlcmVuY2UgaW4gc2Vjb25kcyBiZXR3ZWVuIGNvb3JkaW5hdGVkIHVuaXZlcnNhbAogKiAgICAgICAgICAgICAgdGltZSBhbmQgbG9jYWwgdGltZS4gRS5nLiwgLTI4LDgwMCBmb3IgUFNUIChHTVQtOGhycykKICogICB0em5hbWUoMCkgIFRocmVlLWxldHRlciB0aW1lLXpvbmUgbmFtZSBkZXJpdmVkIGZyb20gVFogZW52aXJvbm1lbnQKICogICAgICAgICAgICAgIHZhcmlhYmxlLiBFLmcuLCAiUFNUIi4KICogICB0em5hbWUoMSkgIFRocmVlLWxldHRlciBEU1Qgem9uZSBuYW1lIGRlcml2ZWQgZnJvbSBUWiBlbnZpcm9ubWVudAogKiAgICAgICAgICAgICAgdmFyaWFibGUuICBFLmcuLCAiUERUIi4gSWYgRFNUIHpvbmUgaXMgb21pdHRlZCBmcm9tIFRaLAogKiAgICAgICAgICAgICAgdHpuYW1lKDEpIGlzIGFuIGVtcHR5IHN0cmluZy4KICoKICogTm90ZXM6IEZvciBleGFtcGxlLCB0byBzZXQgdGhlIFRaIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGNvcnJlc3BvbmQKICogdG8gdGhlIGN1cnJlbnQgdGltZSB6b25lIGluIEdlcm1hbnksIHlvdSBjYW4gdXNlIG9uZSBvZiB0aGUKICogZm9sbG93aW5nIHN0YXRlbWVudHM6CiAqCiAqICAgc2V0IFRaPUdTVDFHRFQKICogICBzZXQgVFo9R1NUKzFHRFQKICoKICogSWYgdGhlIFRaIHZhbHVlIGlzIG5vdCBzZXQsIHRfdHpzZXQoKSBhdHRlbXB0cyB0byB1c2UgdGhlIHRpbWUgem9uZQogKiBpbmZvcm1hdGlvbiBzcGVjaWZpZWQgYnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFVuZGVyIFdpbmRvd3MgTlQKICogYW5kIFdpbmRvd3MgOTUsIHRoaXMgaW5mb3JtYXRpb24gaXMgc3BlY2lmaWVkIGluIHRoZSBDb250cm9sIFBhbmVsknMKICogRGF0ZS9UaW1lIGFwcGxpY2F0aW9uLgogKiBAZHJhZnQKICovClVfQ0FQSSB2b2lkICAgICBVX0VYUE9SVDIgdXBydl90enNldCh2b2lkKTsKVV9DQVBJIGludDMyX3QgIFVfRVhQT1JUMiB1cHJ2X3RpbWV6b25lKHZvaWQpOwpVX0NBUEkgY2hhciogICAgVV9FWFBPUlQyIHVwcnZfdHpuYW1lKGludCBpbmRleCk7CgovKioKICogR2V0IFVUQyAoR01UKSB0aW1lIG1lYXN1cmVkIGluIHNlY29uZHMgc2luY2UgMDowMCBvbiAxLzEvNzAuIAogKiBAZHJhZnQKICovClVfQ0FQSSBpbnQzMl90ICBVX0VYUE9SVDIgdXBydl9nZXRVVEN0aW1lKHZvaWQpOwoKLyoqCiAqIFJldHVybiB0aGUgZGF0YSBkaXJlY3RvcnkgZm9yIHRoaXMgcGxhdGZvcm0uIAogKiBAZHJhZnQKICovClVfQ0FQSSBjb25zdCBjaGFyKiBVX0VYUE9SVDIgdV9nZXREYXRhRGlyZWN0b3J5KHZvaWQpOwoKLyoqIAogKiBTZXQgdGhlIGRhdGEgZGlyZWN0b3J5LiAKICogQGRyYWZ0CiAqLwpVX0NBUEkgdm9pZCBVX0VYUE9SVDIgdV9zZXREYXRhRGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpcmVjdG9yeSk7CgovKioKICogUmV0dXJuIHRoZSBkZWZhdWx0IGNvZGVwYWdlIGZvciB0aGlzIHBsYXRmb3JtIGFuZCBsb2NhbGUgCiAqIEBkcmFmdAogKi8KVV9DQVBJIGNvbnN0IGNoYXIqICBVX0VYUE9SVDIgdXBydl9nZXREZWZhdWx0Q29kZXBhZ2Uodm9pZCk7CgovKioKICogUmV0dXJuIHRoZSBkZWZhdWx0IGxvY2FsZSBJRCBzdHJpbmcgYnkgcXVlcnlpbmcgdGhzIHN5c3RlbSwgb3IKICogICAgIHplcm8gaWYgb25lIGNhbm5vdCBiZSBmb3VuZC4gCiAqIEBkcmFmdAogKi8KVV9DQVBJIGNvbnN0IGNoYXIqICBVX0VYUE9SVDIgdXBydl9nZXREZWZhdWx0TG9jYWxlSUQodm9pZCk7CgovKgogKiBGaW5kcyB0aGUgbGVhc3QgZG91YmxlIGdyZWF0ZXIgdGhhbiBkIChpZiBwb3NpdGl2ZSA9PSB0cnVlKSwKICogb3IgdGhlIGdyZWF0ZXN0IGRvdWJsZSBsZXNzIHRoYW4gZCAoaWYgcG9zaXRpdmUgPT0gZmFsc2UpLgogKgogKiBUaGlzIGlzIGEgc3BlY2lhbCBwdXJwb3NlIGZ1bmN0aW9uIGRlZmluZWQgYnkgdGhlIENob2ljZUZvcm1hdCBBUEkKICogZG9jdW1lbnRhdGlvbi4KICogSXQgaXMgbm90IGEgZ2VuZXJhbCBwdXJwb3NlIGZ1bmN0aW9uIGFuZCBub3QgZGVmaW5lZCBmb3IgTmFOIG9yIEluZmluaXR5CiAqIEBkcmFmdAogKi8KVV9DQVBJIGRvdWJsZSAgICAgICAgICAgVV9FWFBPUlQyIHVwcnZfbmV4dERvdWJsZShkb3VibGUgZCwgYm9vbF90IHBvc2l0aXZlKTsKCi8qKgogKiBGaWxlc3lzdGVtIGZpbGUgYW5kIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCiAqIEV4YW1wbGU6ICcvJyBhbmQgJzonIG9uIFVuaXgsICdcXCcgYW5kICc7JyBvbiBXaW5kb3dzLgogKiBAZHJhZnQKICovCiNpZmRlZiBYUF9NQUMKIyAgIGRlZmluZSBVX0ZJTEVfU0VQX0NIQVIgJzonCiMgICBkZWZpbmUgVV9QQVRIX1NFUF9DSEFSICc7JwojICAgZGVmaW5lIFVfRklMRV9TRVBfU1RSSU5HICI6IgojICAgZGVmaW5lIFVfUEFUSF9TRVBfU1RSSU5HICI7IgojZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKE9TMikKIyAgIGRlZmluZSBVX0ZJTEVfU0VQX0NIQVIgJ1xcJwojICAgZGVmaW5lIFVfUEFUSF9TRVBfQ0hBUiAnOycKIyAgIGRlZmluZSBVX0ZJTEVfU0VQX1NUUklORyAiXFwiCiMgICBkZWZpbmUgVV9QQVRIX1NFUF9TVFJJTkcgIjsiCiNlbHNlCiMgICBkZWZpbmUgVV9GSUxFX1NFUF9DSEFSICcvJwojICAgZGVmaW5lIFVfUEFUSF9TRVBfQ0hBUiAnOicKIyAgIGRlZmluZSBVX0ZJTEVfU0VQX1NUUklORyAiLyIKIyAgIGRlZmluZSBVX1BBVEhfU0VQX1NUUklORyAiOiIKI2VuZGlmCgovKioKICogQ29udmVydCBjaGFyIGNoYXJhY3RlcnMgdG8gVUNoYXIgY2hhcmFjdGVycy4KICogVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGlzIHVzZWZ1bCBvbmx5IGZvciAiaW52YXJpYW50IGNoYXJhY3RlcnMiCiAqIHRoYXQgYXJlIGVuY29kZWQgaW4gdGhlIHBsYXRmb3JtIGRlZmF1bHQgZW5jb2RpbmcuCiAqIFRoZXkgYXJlIGEgc21hbGwsIGNvbnN0YW50IHN1YnNldCBvZiB0aGUgZW5jb2RpbmcgYW5kIGluY2x1ZGUKICoganVzdCB0aGUgbGF0aW4gbGV0dGVycywgZGlnaXRzLCBhbmQgc29tZSBwdW5jdHVhdGlvbi4KICogRm9yIGRldGFpbHMsIHNlZSB1dHlwZXMuaCAuCiAqCiAqIEBwYXJhbSBjcyBJbnB1dCBzdHJpbmcsIHBvaW50cyB0byA8Y29kZT5sZW5ndGg8L2NvZGU+CiAqICAgICAgICAgICBjaGFyYWN0ZXIgYnl0ZXMgZnJvbSBhIHN1YnNldCBvZiB0aGUgcGxhdGZvcm0gZW5jb2RpbmcuCiAqIEBwYXJhbSB1cyBPdXRwdXQgc3RyaW5nLCBwb2ludHMgdG8gbWVtb3J5IGZvciA8Y29kZT5sZW5ndGg8L2NvZGU+CiAqICAgICAgICAgICBVbmljb2RlIGNoYXJhY3RlcnMuCiAqIEBwYXJhbSBsZW5ndGggVGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIGNvbnZlcnQ7IHRoaXMgbWF5CiAqICAgICAgICAgICAgICAgaW5jbHVkZSB0aGUgdGVybWluYXRpbmcgPGNvZGU+TlVMPC9jb2RlPi4KICogQHN0YWJsZQogKi8KVV9DQVBJIHZvaWQgVV9FWFBPUlQyCnVfY2hhcnNUb1VDaGFycyhjb25zdCBjaGFyICpjcywgVUNoYXIgKnVzLCBVVGV4dE9mZnNldCBsZW5ndGgpOwoKLyoqCiAqIENvbnZlcnQgVUNoYXIgY2hhcmFjdGVycyB0byBjaGFyIGNoYXJhY3RlcnMuCiAqIFRoaXMgdXRpbGl0eSBmdW5jdGlvbiBpcyB1c2VmdWwgb25seSBmb3IgImludmFyaWFudCBjaGFyYWN0ZXJzIgogKiB0aGF0IGNhbiBiZSBlbmNvZGVkIGluIHRoZSBwbGF0Zm9ybSBkZWZhdWx0IGVuY29kaW5nLgogKiBUaGV5IGFyZSBhIHNtYWxsLCBjb25zdGFudCBzdWJzZXQgb2YgdGhlIGVuY29kaW5nIGFuZCBpbmNsdWRlCiAqIGp1c3QgdGhlIGxhdGluIGxldHRlcnMsIGRpZ2l0cywgYW5kIHNvbWUgcHVuY3R1YXRpb24uCiAqIEZvciBkZXRhaWxzLCBzZWUgdXR5cGVzLmggLgogKgogKiBAcGFyYW0gdXMgSW5wdXQgc3RyaW5nLCBwb2ludHMgdG8gPGNvZGU+bGVuZ3RoPC9jb2RlPgogKiAgICAgICAgICAgVW5pY29kZSBjaGFyYWN0ZXJzIHRoYXQgY2FuIGJlIGVuY29kZWQgd2l0aCB0aGUKICogICAgICAgICAgIGNvZGVwYWdlLWludmFyaWFudCBzdWJzZXQgb2YgdGhlIHBsYXRmb3JtIGVuY29kaW5nLgogKiBAcGFyYW0gY3MgT3V0cHV0IHN0cmluZywgcG9pbnRzIHRvIG1lbW9yeSBmb3IgPGNvZGU+bGVuZ3RoPC9jb2RlPgogKiAgICAgICAgICAgY2hhcmFjdGVyIGJ5dGVzLgogKiBAcGFyYW0gbGVuZ3RoIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyB0byBjb252ZXJ0OyB0aGlzIG1heQogKiAgICAgICAgICAgICAgIGluY2x1ZGUgdGhlIHRlcm1pbmF0aW5nIDxjb2RlPk5VTDwvY29kZT4uCiAqIEBzdGFibGUKICovClVfQ0FQSSB2b2lkIFVfRVhQT1JUMgp1X1VDaGFyc1RvQ2hhcnMoY29uc3QgVUNoYXIgKnVzLCBjaGFyICpjcywgVVRleHRPZmZzZXQgbGVuZ3RoKTsKCi8qKgogKiBHZXRzIHRoZSBJQ1UgcmVsZWFzZSB2ZXJzaW9uLiAgVGhlIHZlcnNpb24gYXJyYXkgc3RvcmVzIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uCiAqIGZvciBJQ1UuICBGb3IgZXhhbXBsZSwgcmVsZWFzZSAiMS4zLjMxLjIiIGlzIHRoZW4gcmVwcmVzZW50ZWQgYXMgMHgwMTAzMUYwMi4KICogQHBhcmFtIHZlcnNpb25BcnJheSB0aGUgdmVyc2lvbiAjIGluZm9ybWF0aW9uLCB0aGUgcmVzdWx0IHdpbGwgYmUgZmlsbGVkIGluCiAqIEBzdGFibGUKICovCgpVX0NBUEkgdm9pZCBVX0VYUE9SVDIKdV9nZXRWZXJzaW9uKFVWZXJzaW9uSW5mbyB2ZXJzaW9uQXJyYXkpOwoKI2VuZGlmCg==