PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMS4wLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgTWFydGluIEtyYXVzZSwgMDkgT2N0IDIwMDM6CiAgRml4ZXMgZm9yIFRSQUIgYm9hcmQKICAtIC9ib2FyZC90cmFiL3JzNDg1LmM6IGNvcnJlY3QgYmF1ZHJhdGUKICAtIC9ib2FyZC90cmFiL2NtZF90cmFiLmM6IGJ1ZyBmaXggZm9yIHByb2JsZW0gd2l0aCB0aW1lciBvdmVyZmxvdyBpbiAKICAgIHVkZWxheSgpOyBmaXggc29tZSB0aW1pbmcgcHJvYmxlbXMgd2l0aCBhZGMgY29udHJvbGxlcgogIC0gL2JvYXJkL3RyYWIvdHJhYl9ma3QuYzogYWRkIG5ldyBjb21tYW5kczogZ2FpbiwgZWVwcm9tIGFuZCBwb3dlcjsKICAgIG1vZGlmeSBjb21tYW5kczogdG91Y2ggYW5kIGJ1enplcgoKKiBEaXNhYmxlIENPTkZJR19TVVBQT1JUX1ZGQVQgd2hlbiB1c2VkIHdpdGggQ09ORklHX0FVVE9fVVBEQVRFCiAgKHF1aWNrICYgZGlydHkgd29ya2Fyb3VuZCBmb3Igcm9ndWUgcG9pbnRlciBwcm9ibGVtIGluIGdldF92ZmF0bmFtZSgpKTsKICBVc2UgZGlyZWN0IGZ1bmN0aW9uIGNhbGxzIGZvciBhdXRvX3VwZGF0ZSBpbnN0ZWFkIG9mIGh1c2ggY29tbWFuZHMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAwNCBPY3QgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBBbHRlcmEgTmlvcy0zMiBDUFUKICAtIGFkZCBzdXBwb3J0IGZvciBOaW9zIEN5Y2xvbmUgRGV2ZWxvcG1lbnQgS2l0IChESy0xQzIwKQoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAyOSBTZXAgMjAwMzoKICAtIEEgc2Vjb25kIHBhcmFtZXRlciBmb3IgYm9vdG0gb3ZlcndyaXRlcyB0aGUgbG9hZCBhZGRyZXNzIGZvcgogICAgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcy4KICAtIGJvb3RtIHNldHMgZW52aXJvbm1lbnQgdmFyaWFibGUgImZpbGVzaXplIiB0byB0aGUgcmVzdWx0aW5nCiAgICAodW5jb21wcmVzc2VkKSBkYXRhIGxlbmd0aCBmb3IgIlN0YW5kYWxvbmUgQXBwbGljYXRpb24iIGltYWdlcwogICAgd2hlbiBhdXRvc3RhcnQgaXMgc2V0IHRvICJubyIuIE5vdyB5b3UgY2FuIGRvIHNvbWV0aGluZyBsaWtlCglpZiBib290bSAkZnBnYWRhdGEgJHNvbWVfZnJlZV9yYW0gOyB0aGVuCgkJZnBnYSBsb2FkIDAgJHNvbWVfZnJlZV9yYW0gJGZpbGVzaXplCglmaQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMjUgU2VwdCAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1IFJldi4gQyBib2FyZAoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCAyNSBTZXAgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgWmVwaHlyIEVuZ2luZWVyaW5nIFpQQy4xOTAwIGJvYXJkCgoqIFBhdGNoIGJ5IEFuZGVycyBMYXJzZW4sIDIzIFNlcCAyMDAzOgogIGFkZCBDTURfUE9SVElPIHRvIENGR19DTURfTk9OU1REIChjb21tYW5kcyBpbiBxdWVzdGlvbiBhcmUgb25seQogIGltcGxlbWVudGVkIGZvciB0aGUgeDg2IGFyY2hpdGVjdHVyZSkKCiogUGF0Y2ggYnkgU2FuZ21vb24gS2ltLCAyMyBTZXAgMjAwMzoKICBmaXggcGxsX3BjaV90b19tZW1fbXVsdGlwbGllciB0YWJsZSBmb3IgTVBDODI0NQoKKiBQYXRjaCBieSBBbmRlcnMgTGFyc2VuLCAyMiBTZXAgMjAwMzoKICBlbmFibGUgdGltZWQgYXV0b2Jvb3Qgb24gUFhBCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMjIgU2VwIDIwMDM6CiAgLSBhZGQgJChDRkxBR1MpIHRvICItcHJpbnQtbGliZ2NjLWZpbGVuYW1lIiBzbyBjb21waWxlciBkcml2ZXIKICAgIHJldHVybnMgY29ycmVjdCBsaWJnY2MgZmlsZSBwYXRoCiAgLSAibGF0ZW5jeSIgcmVkdWN0aW9uIG9mIGJ1c3ktbG9vcCB3YWl0aW5nIHRvIGltcHJvdmUgIlUtQm9vdCIgYm9vdAogICAgdGltZSBvbiBzM2MyNHgwIHN5c3RlbXMKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDE5IFNlcCAyMDAzOgogIC0gQWRkIENGR19GQVVMVF9FQ0hPX0xJTktfRE9XTiBvcHRpb24gdG8gZWNobyB0aGUgaW52ZXJ0ZWQgRXRoZXJuZXQKICAgIGxpbmsgc3RhdGUgdG8gdGhlIGZhdWx0IExFRC4KICAtIEluIE5ldExvb3AsIG1ha2UgdGhlIEZhdWx0IExFRCByZWZsZWN0IHRoZSBsaW5rIHN0YXR1cy4gIFRoZSBsaW5rCiAgICBzdGF0dXMgZ2V0cyB1cGRhdGVkIG9uIGVudHJ5LCBhbmQgb24gdGltZW91dHMuCiAgICAgCiogUGF0Y2ggYnkgQW5kZXJzIExhcnNlbiwgMTggU2VwIDIwMDM6CiAgYWxsb3cgbWtpbWFnZSB0byBidWlsZCBhbmQgcnVuIG9uIEN5Z3dpbi1ob3N0ZWQgc3lzdGVtcwoKKiBQYXRjaCBieSBGcmFuayBN/GxsZXIsIDE4IFNlcCAyMDAzOgogIHVzZSBiaV9pbnRmcmVxIGluc3RlYWQgb2YgYmlfYnVzZnJlcSB0byBjb21wdXRlIGZlY19taWlfc3BlZWQgaW4KICBjcHUvbXBjOHh4L2ZlYy5jCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxNiBTZXAgMjAwMzoKICBhZGQgdG9vbCB0byBjb21wdXRlIGZpbGVkcyBpbiB0aGUgUExQUkNSIHJlZ2lzdGVyIGZvciBNUEM4NngKCiogVXNlIElIX1RZUEVfRklMRVNZU1RFTSBmb3IgVFJBQiAiZGlzayIgaW1hZ2VzLgoKKiBGaXggYnVpbGQgcHJvYmxlbXMgdW5kZXIgRnJlZUJTRAoKKiBBZGQgZ2VuZXJpYyBmaWxlc3lzdGVtIGltYWdlIHR5cGUKCiogTWFrZSBmYXRsb2FkIHNldCBmaWxlc2l6ZSBlbnZpcm9ubWVudCB2YXJpYWJsZQoKKiBlbmFibGUgYmFzaWMgLyBtZWRpdW0gLyBoaWdoLWVuZCBjb25maWd1cmF0aW9ucyBmb3IgUFBDaGFtZWxlb25FVkIKICBib2FyZDsgZml4IE5BTkQgY29kZQoKKiBlbmFibGUgVEZUUCBjbGllbnQgY29kZSB0byBzcGVjaWZ5IHRvIHRoZSBzZXJ2ZXIgdGhlIGRlc2lyZWQKICB0aW1lb3V0IHZhbHVlIChzZWUgUkZDLTIzNDkpCgoqIEltcHJvdmUgU0RSQU0gc2V0dXAgZm9yIFRSQUIgYm9hcmQKCiogU3VwcHJlc3MgYWxsIG91dHB1dCB3aXRoIHNwbGFzaHNjcmVlbiBjb25maWd1cmVkIG9ubHkgaWYgInNwbGFzaGltYWdlIgogIGlzIHNldAoKKiBGaXggcHJvYmxlbXMgd2l0aCBJMkMgc3VwcG9ydCBmb3IgbXBjNTIwMAoKKiBBZGFwdCBUUkFCIGNvbmZpZ3VyYXRpb24gYW5kIGF1dG9fdXBkYXRlIHRvIG5ldyBtZW1vcnkgbGF5b3V0CgoqIEFkZCBjb25maWd1cmF0aW9uIGZvciB3dGsgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIHRoZSBTaGFycCBMUTA2NVQ5RFI1MVUgTENEIGRpc3BsYXkKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gRml4ZXMgZm9yIE1QQzgyNjYgZGVmYXVsdCBjb25maWcKICAtIEFsbG93IGV0aF9sb29wYmFja190ZXN0KCkgb24gODI2MCB0byB1c2UgYSBzdWJzZXQgb2YgdGhlIEZDQydzCgoqIFBhdGNoZXMgYnkgSm9uIERpZWtlbWEsIDE3IFNlcCAyMDAzOgogIC0gdXBkYXRlIFJFQURNRSAoU0hPV19CT09UX1BST0dSRVNTIHZhbHVlcyBmb3IgY21kX25hbmQuYyBhbmQKICAgIGVudl9jb21tb24uYykKICAtIHNiYzgyNjAgdHdlYWtzCiAgLSBhZGp1c3QgImhlbHAiIG91dHB1dAoKKiBQYXRjaGVzIGJ5IEFuZGVycyBMYXJzZW4sIDE3IFNlcCAyMDAzOgogIC0gZml4IHNwZWxsaW5nIGVycm9ycwogIC0gc2V0IEdEX0ZMR19ERVZJTklUIGZsYWcgb25seSBhZnRlciBkZXZpY2UgZnVuY3Rpb24gcG9pbnRlcnMKICAgIGFyZSB2YWxpZAogIC0gQWxsb3cgQ0ZHX0FMVF9NRU1URVNUIG9uIHN5c3RlbXMgd2hlcmUgYWRkcmVzcyB6ZXJvIGlzbid0CiAgICB3cml0ZWFibGUKICAtIGVuYWJsZSAzLnJkIFVBUlQgKFNULVVBUlQpIG9uIFBYQShYU2NhbGUpIENQVXMKICAtIHRyaWdnZXIgd2F0Y2hkb2cgd2hpbGUgd2FpdGluZyBpbiBzZXJpYWwgZHJpdmVyCgoqIEFkZCBhdXRvLXVwZGF0ZSBjb2RlIGZvciBUUkFCIGJvYXJkIHVzaW5nIFVTQiBtZW1vcnkgc3RpY2tzLAogIHN1cHBvcnQgbmV3IGNvbmZpZ3VyYXRpb24gd2l0aCBtb3JlIG1lbW9yeQoKKiBkaXNhYmxlIE1QQzUyMDAgYnVzIHBpcGVsaW5pbmcgYXMgd29ya2Fyb3VuZCBmb3IgYnVzIGNvbnRlbnRpb24KCiogTW9kaWZ5IFhMQiBhcmJpdGVyIHByaW9yaXRpZXMgb24gTVBDNTIwMCBzbyBhbGwgZGV2aWNlcyB1c2Ugc2FtZQogIHByaW9yaXR5OyBjb25maWd1cmUgY3JpdGljYWwgaW50ZXJydXB0cyB0byBiZSBoYW5kbGVkIGxpa2UgZXh0ZXJuYWwKICBpbnRlcnJ1cHRzCgoqIE1ha2UgSVBCIGNsb2NrIG9uIE1HVDUxMDAvTVBDNTIwMCBjb25maWd1cmFibGUgaW4gYm9hcmQgY29uZmlnIGZpbGU7CiAgZ28gYmFjayB0byA2NiBNSHogZm9yIHN0YWJpbGl0eQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCAxNSBTZXAgMjAwMzoKICAtIGFkZCBkZXNjcmlwdGlvbiBmb3IgbWlzc2luZyBDRkdfQ01EXyogZW50cmllcyBpbiB0aGUgUkVBRE1FIGZpbGUKICAtIHNhY3NuZyB0d2Vha3MKCiogUGF0Y2ggYnkgR2xlYiBOYXRhcG92LCAxNCBTZXAgMjAwMzoKICBlbmFibGUgd2F0Y2hkb2cgc3VwcG9ydCBmb3IgYWxsIE1QQzgyNHggYm9hcmRzIHRoYXQgaGF2ZSBhIHdhdGNoZG9nCgoqIE9uIE1QQzUyMDAsIHJlc3RyaWN0IEZFQyB0byBhIG1heGltdW0gb2YgMTAgTWJwcyB0byB3b3JrIGFyb3VuZCB0aGUKICAiTm9uLW9jdGV0IEFsaWduZWQgRnJhbWUiIGVycm9ycyB3ZSBzZWUgYXQgMTAwIE1icHMKCiogUGF0Y2ggYnkgU2hhcmFkIEd1cHRhLCAxNCBTZXAgMjAwMzoKICBmaXggU1BSIG51bWJlcnMgZm9yIHVwcGVyIEJBVCByZWdpc3RlciAoW0lEXUJBVFs0LTddW1VMXSkKCiogUGF0Y2ggYnkgbGxhbmRyZSwgMTEgU2VwIDIwMDM6CiAgdXBkYXRlIGNvbmZpZ3VyYXRpb24gZm9yIFBQQ2hhbWVsZW9uRVZCIGJvYXJkCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMTMgU2VwIDIwMDM6CiAgdmFyaW91cyBjaGFuZ2VzIHRvIFZDTUE5IGJvYXJkIHNwZWNpZmljIGZpbGVzCgoqIEFkZCBJMkMgc3VwcG9ydCBmb3IgTUdUNTEwMCAvIE1QQzUyMDAKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDExIFNlcCAyMDAzOgogIENoYW5nZWQgZGVmYXVsdCBtZW1vcnkgb3B0aW9uIG9uIE1QQzgyNjZBRFMgdG8gTk9UIGJlIFBhZ2UgQmFzZWQKICBJbnRlcmxlYXZlLCBzaW5jZSB0aGlzIGRvZXNuJ3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCB0aGUgc3RhbmRhcmQKICAxNk1CIERJTU0KCiogUGF0Y2ggYnkgR2VvcmdlIEcuIERhdmlzLCAxMiBTZXAgMjAwMzoKICBmaXggTWFrZWZpbGUgc2V0dGluZ3MgZm9yIHNrOTggZHJpdmVyCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTIgU2VwIDIwMDM6CiAgLSBuZXcgYm9hcmRzIGFkZGVkOiBEUDQwNSwgSFVCNDA1LCBQTFU0MDUsIFZPSDQwNQogIC0gc29tZSBlc2QgYm9hcmRzIHVwZGF0ZWQKICAtIGNwdS9wcGM0eHgvc2RyYW0uYzogZGlzYWJsZSBtZW1vcnkgY29udHJvbGxlciBiZWZvcmUgc2V0dGluZwogICAgZmlyc3QgdmFsdWVzCiAgLSBjcHUvcHBjNHh4LzQwNV9wY2kuYzogc2V0IHZlbmRvciBpZCBvbiBQUEM0MDVFUCBzeXN0ZW1zCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDExIFNlcCAyMDAzOgogIGFkZCBidXJuLWluIHRlc3RzIGZvciBUUkFCIGJvYXJkCgoqIEVuYWJsZSBpbnN0cnVjdGlvbiBjYWNoZSBvbiBNUEM1MjAwIGJvYXJkCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAxMSBTZXAgMjAwMzoKICAtIGZpeCBVU0IgZGF0YSBwb2ludGVyIGFzc2lnbm1lbnQgZm9yIGJ1bGsgb25seSB0cmFuc2Zlci4KICAtIHByZXZlbnQgdG8gZGlzcGxheSBlcmFzZWQgZGlyZWN0b3JpZXMgaW4gRkFUIGZpbGVzeXN0ZW0uCgoqIENoYW5nZSBvdXRwdXQgZm9ybWF0IGZvciBOQU5EIGZsYXNoIC0gbWFrZSBpdCBsb29rIGxpa2UgZm9yIG90aGVyCiAgbWVtb3J5LCB0b28KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC44Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cgo8PDw8PDw8IENIQU5HRUxPRwo8PDw8PDw8IENIQU5HRUxPRwo8PDw8PDw8IENIQU5HRUxPRwoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQKCj09PT09PT0KPT09PT09PQo9PT09PT09CiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgOSBTZXAgMjAwMzoKICBhZGQgRkFUIHN1cHBvcnQgZm9yIElERSwgU0NTSSBhbmQgVVNCCgoqIFBhdGNoZXMgYnkgR2xlYiBOYXRhcG92LCAyIFNlcCAyMDAzOgogIC0gY2xlYW51cCBvZiBQT1NUIGNvZGUgZm9yIHVuc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKICAtIE1QQzgyNHggbG9ja3Mgd2F5MCBvZiBkYXRhIGNhY2hlIGZvciB1c2UgYXMgaW5pdGlhbCBSQU07CiAgICB0aGlzIHBhdGNoIHVubG9ja3MgaXQgYWZ0ZXIgcmVsb2NhdGlvbiB0byBSQU0gYW5kIGludmFsaWRhdGVzCiAgICB0aGUgbG9ja2VkIGVudHJpZXMuCgoqIFBhdGNoIGJ5IEdsZWIgTmF0YXBvdiwgMzAgQXVnIDIwMDM6CiAgbmV3IEkyQyBkcml2ZXIgZm9yIG1wYzEwNyBicmlkZ2UuIE5vdyB3b3JrcyBmcm9tIGZsYXNoLgoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAxMSBBdWcgMjAwMzoKICAtIEpGRlMyOiBmaXggdHlwbyBpbiBjb21tb24vY21kX2pmZnMyLmMKICAtIEpGRlMyOiBmaXggQ0ZHX0pGRlMyX1NPUlRfRlJBR01FTlRTIG9wdGlvbgogIC0gSkZGUzI6IHJlbW92ZSBub2RlIHZlcnNpb24gMCB3YXJuaW5nCiAgLSBKRkZTMjogYWNjZXB0IEpGRlMyIFBBRERJTkcgbm9kZXMKICAtIFNYTkk4NTVUOiBhZGQgQU0yOUxWODAwIHN1cHBvcnQKICAtIFNYTkk4NTVUOiBtb3ZlIGVudmlyb25tZW50IGZyb20gRUVQUk9NIHRvIGZsYXNoCiAgLSBTWE5JODU1VDogYm9vdCBmcm9tIEpGRlMyIGluIE5PUiBvciBOQU5EIGZsYXNoCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAxMSBBdWcgMjAwMzoKICBmaXhlcyBmb3IgSTJDIG9uIE1QQzgyNDAKICAtIGZpeCBpMmNfd3JpdGUgcm91dGluZQogIC0gZml4IGlwcm9iZSBjb21tYW5kCiAgLSBlbGltaW5hdGVzIHVzZSBvZiBnbG9iYWwgdmFyaWFibGVzLCBwbHVzIGRlYWQgY29kZSwgY2xlYW51cC4KCiogQWRkIHN1cHBvcnQgZm9yIFVTQiBNYXNzIFN0b3JhZ2UgRGV2aWNlcyAoQkJCKQogICh0ZXN0ZWQgd2l0aCBVU0IgbWVtb3J5IHN0aWNrcyBvbmx5KQoKKiBBdm9pZCBmbGlja2VyIG9uIFRSQUIncyBWRkQKCj4+Pj4+Pj4gMS4xMzAKKiBBZGQgc3VwcG9ydCBmb3IgU0s5OHh4IGRyaXZlcgoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBTdXBwb3J0IEljZUN1YmUgYm9hcmQgY29uZmlndXJhdGlvbnMgd2l0aCAxIHggQU1EIEFNMjlMVjA2NSAoOCBNQikKICBvciAxIHggQU0yOUxWNjUyICh0d28gTFYwNjUgaW4gb25lIGNoaXAgPSAxNiBNQik7CiAgUnVuIElQQiBhdCAxMzMgTWh6OyBhZGp1c3QgdGhlIE1JSSBjbG9jayBmcmVxdWVuY3kgYWNjb3JkaW5nbHkKCiogU2V0IEJSR19DTEsgb24gUE04MjUvODI2IHRvIDY0TUh6IChWQ09fT1VUIC8gNCwgaW5zdGVhZCBvZiAxNiAgTUh6KQogIHRvIGFsbG93IGZvciBtb3JlIGFjY3VyYXRlIGJhdWRyYXRlIHNldHRpbmdzCiAgKGVycm9yIG5vdyAwLjclIGF0IDExNSBrYnBzLCBpbnN0ZWFkIG9mIDMuNSUgYmVmb3JlKQoKKiBQYXRjaCBieSBBbmRyZWFzIE1vaHIsIDQgU2VwIDIwMDM6CiAgRml4IGEgbG90IG9mIHNwZWxsaW5nIGVycm9ycwoKKiBBZGQgc3VwcG9ydCBmb3IgUFBDaGFtZWxlb24gRXZhbCBCb2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgUDNHNCBib2FyZAoKKiBGaXggcHJvYmxlbSB3aXRoIE1HVDUxMDAgRkVDIGRyaXZlcjogYWRkICJlYXJseSIgTUFDIGFkZHJlc3MKICBpbml0aWFsaXphdGlvbgoKKiBQYXRjaCBieSBZdWxpIEJhcmNvaGVuLCA3IEF1ZyAyMDAzOgogIGNoZWNrIEJDU1IgdG8gZGV0ZWN0IGlmIHRoZSBib2FyZCBpcyBjb25maWd1cmVkIGluIFBDSSBtb2RlCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuNzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBSYWdodSBLcmlzaG5hcHJhc2FkLCA3IEF1ZyAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBBZGRlciBJSSBNUEM4NTJUIG1vZHVsZQoKKiBQYXRjaCBieSBHZW9yZ2UgRy4gRGF2aXMsIDE5IEF1ZyAyMDAzOgogIGZpeCBUSSBJbm5vdmF0b3IvT01BUDE1MTAgcGluIGNvbmZpZ3MKCiogUGF0Y2hlcyBieSBLc2hpdGlqLCAxOCBBdWcgMjAwMwogIC0gYWRkIHN1cHBvcnQgZm9yIGFybTkyNmVqcyBjcHUgY29yZQogIC0gYWRkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTYxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTQgQXVnIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIGJ6aXAyIHVuY29tcHJlc3Npb24KCiogQWRkIEdDQyBsaWJyYXJ5IHRvIGV4YW1wbGVzL01ha2VmaWxlIHNvIEdDQyB1dGlsaXR5IGZ1bmN0aW9ucyB3aWxsCiAgYmUgcmVzb2x2ZWQsIHRvbwoKPj4+Pj4+PiAxLjExOAoqIEFkZCBJMkMgYW5kIFJUQyBzdXBwb3J0IGZvciBSTVUgYm9hcmQgdXNpbmcgc29mdHdhcmUgSTJDIGRyaXZlcgogIChiZWNhdXNlIG9mIGJldHRlciByZXNwb25zZSB0byBpcHJvYmUgY29tbWFuZCk7IGZpeCBwcm9ibGVtIHdpdGgKICAicmVzZXQiIGNvbW1hbmQKCiogUGF0Y2ggYnkgTWF0dGhpYXMgRnVjaHMsIDI4IEF1ZyAyMDAzOgogIEFkZGVkIENPTkZJR19CT09UUF9ETlMyIGFuZCBDT05GSUdfQk9PVFBfU0VORF9IT1NUTkFNRSB0bwogIENPTkZJR19CT09UUF9NQUtTIChzZWUgUkVBRE1FKS4KCj4+Pj4+Pj4gMS4xMTIKKiBGaXggSUNVODYyIGVudmlyb25tZW50IHByb2JsZW0KCiogRml4IFJBTSBzaXplIGRldGVjdGlvbiBmb3IgUk1VIGJvYXJkCgoqIEltcGxlbWVudCAicmVzZXQiIGZvciBNR1Q1MTAwL01QQzUyMDAgc3lzdGVtcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjY6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBFdGhlcm5ldCBhdXRvbmVnb3RpYXRpb24gb24gSU5DQS1JUCB3b3JrIGZvciBhbGwgY2xvY2sgcmF0ZXM7CiAgYWxsb3cgc2VsZWN0aW9uIG9mIGNsb2NrIGZyZXF1ZW5jeSBhcyAibWFrZSIgdGFyZ2V0CgoqIEltcGxlbWVudCBtZW1vcnkgYXV0b3NpemluZyBjb2RlIGZvciBJY2VDdWJlIGJvYXJkcwoKKiBDb25maWd1cmUgbmV0d29yayBwb3J0IG9uIElOQ0EtSVAgZm9yIGF1dG9uZWdvdGlhdGlvbgoKKiBGaXggb3ZlcmZsb3cgcHJvYmxlbSBpbiBuZXR3b3JrIHRpbWVvdXQgY29kZQoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCA4IEF1ZyAyMDAzOgogIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMCAoY3JjMzJfbm9fY29tcCwgdG9vKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC41Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFVwZGF0ZSBmb3IgVFFNIGJvYXJkIGRlZmF1bHRzOgogIGRpc2FibGUgY2xvY2tzX2luX21oeiwgZW5hYmxlIGJvb3QgY291bnQgbGltaXQKCiogUmVtb3ZlZCB0b29scy9nZGIgZnJvbSAibWFrZSBhbGwiIHRhcmdldC4gIEFkZGVkIG1ha2UgdGFyZ2V0ICJnZGJ0b29scyIKICBpbiB0b3BsZXZlbCBkaXJlY3RvcnkgaW5zdGVhZC4gIFJlbW92ZWQgYXN0ZXN0LmMgZnJvbSB0b29scy9nZGIgYmVjYXVzZQogIGl0IGlzIG5vIGxvbmdlciByZWxldmFudC4KCiogRml4IFBDSSBzdXBwb3J0IGZvciBNUEM1MjAwIC8gSWNlQ3ViZSBCb2FyZAoKKiBNYXAgSVNQMTM2MiBVU0IgT1RHIGNvbnRyb2xsZXIgZm9yIE5TQ1UgYm9hcmQKCiogUGF0Y2ggYnkgQnJhZCBQYXJrZXIsIDAyIEF1ZyAyMDAzOgogIGZpeCBzYzUyMF9jZHAgcHJvYmxlbXMKCiogSW1wbGVtZW50IEJvb3QgQ3ljbGUgRGV0ZWN0aW9uIChSZXEuIDIuMyBvZiBPU0RMIENHTCBSZXFpcmVtZW50cykKCiogQWxsb3cgZXJhc2UgY29tbWFuZCB0byBjcm9zcyBmbGFzaCBiYW5rIGJvdW5kYXJpZXMKCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDE2IEp1bHkgMjAwMzoKICBNUEM4NjBGQURTIGZpeGVzOgogIC0gYWRkIE1QQzg2eEFEUyBzdXBwb3J0ICh1c2VzIE1QQzg2eEFEUy5oKQogIC0gYWRkIDg2NlAvVCBjb3JlIHN1cHBvcnQgKGFsc28gTVBDODU5VC9NUEM4NTlEU0wvTVBDODUyVCkKICAgIG8gUExQUkNSIGNoYW5nZXMKICAgIG8gQlJHIGNoYW5nZXMgKEVYVEFML1hUQUwgcmVzdHJpY3RlZCB0byAxME1IeikKICAgIG8gZG9uJ3QgdHJ1c3QgZ2NsaygpIHNvZnR3YXJlIG1lYXN1cmVtZW50IGJ5IGRlZmF1bHQsIGRlcGVuZCBvbgogICAgICBDT05GSUdfOHh4X0dDTEtfRlJFUQogIC0gYWRkIERSQU0gU0lNTSBub3QgaW5zdGFsbGVkIGRldGVjdGlvbgogIC0gdXNlIG1vcmUgImNvcnJlY3QiIFNEUkFNIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlCiAgLSBhbGxvdyBkaWZmZXJlbnQgU0RSQU0gc2l6ZXMgKDh4eEFEUyBoYXMgOE0pCiAgLSBkZWZhdWx0IERFUiBpcyAwCiAgLSByZW1vdmUgdW51c2VkIE1BTVIgZGVmaW5lcyBmcm9tIEZBRFM4NjBULmggKGFsbCBkb25lIGluIGZhZHMuYykKICAtIHJlbmFtZSBNQU1SL01CTVIgZGVmaW5lcyB0byBiZSBtb3JlIGNvbnNpc3RlbnQuIFNob3VsZCBldmVudHVhbGx5CiAgICBiZSBtZXJnZWQgaW50byBNeE1SIHRvIGJldHRlciByZWZsZWN0IHRoZSBQb3dlclFVSUNDIGRhdGFzaGVldC4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMTYgSnVsIDIwMDM6CiAgc3VwcG9ydCBuZXcgTW90b3JvbGEgUFEyRkFEUy1aVSBldmFsdWF0aW9uIGJvYXJkIHdoaWNoIHJlcGxhY2VkCiAgTVBDODI2MEFEUyBhbmQgTVBDODI2NkFEUwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjQ6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogQWRkIHN1cHBvcnQgZm9yIEljZUN1YmUgYm9hcmQgKHdpdGggTUdUNTEwMCBhbmQgTVBDNTIwMCBDUFVzKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUdUNTEwMCBhbmQgTVBDNTIwMCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxNSBKdWwgMjAwMzoKICB1cGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4zOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgS3NoaXRpaiwgMDQgSnVsIDIwMDMKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGFybTkyNXQgY3B1IGNvcmUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIFRJIE9NQVAgMTUxMCBJbm5vdmF0b3IgQm9hcmQKCiogUGF0Y2hlcyBieSBNYXJ0aW4gS3JhdXNlLCAxNCBKdWwgMjAwMzoKICAtIGFkZCBJMkMgc3VwcG9ydCBmb3IgczNjMjQwMCBzeXN0ZW1zICh0cmFiIGJvYXJkKQogIC0gKHJlLSkgYWRkICJwaW5nIiB0byBjb21tYW5kIHRhYmxlCgoqIEZpeCBoYW5kbGluZyBvZiAic2xvdyIgUE9TVCByb3V0aW5lcwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEzIEp1bCAyMDAzOgogIC0gQ29ycmVjdCBmbGFzaCBhbmQgSkZGUzIgc3VwcG9ydCBmb3IgTVBDODI2MEFEUwogIC0gZml4IFBWUiB2YWx1ZXMgYW5kIGNsb2NrIGdlbmVyYXRpb24gZm9yIFBvd2VyUVVJQ0MgSUkgZmFtaWx5CiAgICAoODI3MC84Mjc1LzgyODApCgoqIFBhdGNoIGJ5IEJlcm5oYXJkIEt1aG4sIDA4IEp1bCAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIE02OEsgdGFyZ2V0cwoKKiBQYXRjaCBieSBLZW4gQ2hvdSwgMyBKdWw6CiAgLSBGaXggUENJIGNvbmZpZyB0YWJsZSBmb3IgQTMwMDAKICAtIEZpeCBpb2Jhc2UgZm9yIG5hdHNlbWkuYwogICAgKFBDSV9CQVNFX0FERFJFU1NfMCBpcyB0aGUgSU8gYmFzZSByZWdpc3RlciBmb3IgRFA4MzgxNSkKCiogQWxsb3cgdG8gZW5hYmxlICJzbG93IiBQT1NUIHJvdXRpbmVzIGJ5IGtleSBwcmVzcyBvbiBwb3dlci1vbgoqIEZpeCB0ZW1wZXJhdHVyZSBkZXBlbmRlbmQgc3dpdGNoaW5nIG9mIExDRCBiYWNrbGlnaHQgb24gTFdNT04KKiBUd2VhayBvdXRwdXQgZm9ybWF0IGZvciBMV01PTgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDExIEp1bCAyMDAzOgogIC0gRml4IGJ1ZyBpbiBDT05GSUdfVkVSU0lPTl9WQVJJQUJMRS4KICAtIEFSNDA1IGNvbmZpZyB1cGRhdGVkLgogIC0gT0NSVEMvT1JTRzogYnNwIGNvbW1hbmQgYWRkZWQuCiAgLSBBU0g0MDUgYnNwIHVwZGF0ZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBOU0NVIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjNNLCBUUU04NTBNLCBUUU04NTVNIGFuZCBUUU04NjBNIG1vZHVsZXMKCiogQWRkIHN1cHBvcnQgZm9yIEFtMjlMVjE2ME1MLCBBbTI5TFYzMjBNTCwgYW5kIEFtMjlMVjY0ME1MCiAgbWlycm9yIGJpdCBmbGFzaCBvbiBUUU04eHhNIG1vZHVsZXMKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDMwIEp1biAyMDAzOgogIGdldCByaWQgb2YgTUtfQ01EX0VOVFJZIG1hY3JvOyB1cGRhdGUgZG9jL1JFQURNRS5jb21tYW5kCgoqIFBhdGNoIGJ5IFNlYiBKYW1lcywgMzAgSnVuIDIwMDM6CiAgSW1wcm92ZSBkb2N1bWVudGF0aW9uIG9mIEkyQyBjb25maWd1cmF0aW9uIGluIFJFQURNRQoKKiBGaXggcHJvYmxlbXMgd2l0aCBwcmV2aW91cyBsb2cgYnVmZmVyICJmaXhlcyIKCiogRml4IG1pbm9yIGhlbHAgdGV4dCBpc3N1ZXMKCiogImxvZyBhcHBlbmQiIGRpZCBub3QgYXBwZW5kIGEgbmV3bGluZQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogRml4IHNvbWUgbWlzc2luZyBjb21tYW5kcywgY2xlYW51cCBoZWFkZXIgZmlsZXMKICAoYXV0b3NjcmlwdCwgYm1wLCBic3AsIGZhdCwgbW1jLCBuYW5kLCBwb3J0aW8sIC4uLikKCiogUmV3cml0ZSBjb21tYW5kIGxvb2t1cCBhbmQgaGVscCBjb21tYW5kIChmaXggcHJvYmxlbXMgd2l0aCBidWJibGUKICBzb3J0IHdoZW4gc29ydGluZyBjb21tYW5kIG5hbWUgbGlzdCkuIE1pbm9yIGNsZWFudXAgaGVyZSBhbmQgdGhlcmUuCgoqIE1lcmdlIGZyb20gInN0YWJsZSBicmFuY2giLCB0YWcgTEFCRUxfMjAwM18wNl8yOF8xODAwLXN0YWJsZToKICAtIEFsbG93IHRvIGNhbGwgc3lzbW9uIGZ1bmN0aW9uIGludGVyYWN0aXZlbHkKICAtIFBJQyBvbiBMV01PTiBib2FyZCBuZWVkcyBkZWxheSBhZnRlciBwb3dlci1vbgogIC0gQWRkIG1pc3NpbmcgUlNSIGRlZmluaXRpb25zIGZvciBNUEM4eHgKICAtIEltcHJvdmUgbG9nIGJ1ZmZlciBoYW5kbGluZzogZ3VhcmFudGVlIGNsZWFuIHJlc2V0IGFmdGVyIHBvd2VyLW9uCiAgLSBBZGQgc3VwcG9ydCBmb3IgRVhCSVRHRU4gYm9hcmQgKGFrYSAiZ2VuaWUiKQogIC0gQWRkIHN1cHBvcnQgZm9yIFNMODI0NSBib2FyZAoKKiBDb2RlIGNsZWFudXA6CiAgLSByZW1vdmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UsIHRyYWlsaW5nIGVtcHR5IGxpbmVzLCBDKysgY29tbWVudHMsIGV0Yy4KICAtIHNwbGl0IGNtZF9ib290LmMgKHNlcGFyYXRlIGNtZF9iZGluZm8uYyBhbmQgY21kX2xvYWQuYykKCiogUGF0Y2hlcyBieSBLZW5uZXRoIEpvaGFuc3NvbiwgMjUgSnVuIDIwMDM6CiAgLSBtYWpvciByZXdvcmsgb2YgY29tbWFuZCBzdHJ1Y3R1cmUKICAgICh3b3JrIGRvbmUgbW9zdGx5IGJ5IE1pY2hhbCBDZW5kcm93c2tpIGFuZCBKb2FraW0gS3Jpc3RpYW5zZW4pCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMjYgSnVuIDIwMDM6CiAgLSBjc2IyMjYgY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBjcmVkaXRzIGZvciBsb2dvZGwgcG9ydCB1cGRhdGVkCiAgLSBpbm5va29tIGNvbmZpZ3VyYXRpb24gdXBkYXRlZAogIC0gbG9nb2RsIHRyZWUgdXBkYXRlLCBzdGlsbCB3aXRoIGNvZGluZyBzdHlsZSBpbmNvbnNpc3RlbmNpZXMKICAtIGFkZGVkIE9DTSBmb3IgcHBjNDA1IHdhcm5pbmcgdG8gUkVBRE1FCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyNSBKdW4gMjAwMzoKICB1cGRhdGUgTmV0VmlhIHdpdGggVjIgYm9hcmQgc3VwcG9ydAoKKiBIZWFkZXIgZmlsZSBjbGVhbnVwIGZvciBBUk0KCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjQgSnVuIDIwMDM6CiAgLSBtYWtlIHN1cmUgdG8gdXNlIG9ubHkgVS1ib290IHByb3ZpZGVkIGhlYWRlciBmaWxlcwogIC0gZml4IHByb2JsZW1zIHdpdGggIi5yb2RhdGEuc3RyMS40IiBzZWN0aW9uIGFzIHVzZWQgYnkgR0NDLTMueAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI0IEp1biAyMDAzOgogIC0gVXBkYXRlIGVzZCBBU0g0MDUgYm9hcmQgZmlsZXMuCiAgLSBVcGRhdGUgZXNkIERBU0FfU0lNIGNvbmZpZyBmaWxlLgogIC0gQWRkIHBpbmcgY29tbWFuZCB0byBzb21lIGVzZCBib2FyZHMuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDIzIEp1biAyMDAzOgogIFVwZGF0ZSBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyMyBKdW4gMjAwMzoKICAtIGNsZWFudXAgb2YgR0NDIDMueCBjb21waWxlciB3YXJuaW5ncwoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgNCBKdW4gMjAwMzoKICBhZGQgbGFyZ2UgbWVtb3J5IHN1cHBvcnQgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEVuYWJsZWQgc3RhbmRhcmQgdS1ib290IGRldmljZSBhYnN0cmFjdGlvbiBmb3IgQVJNCiAgLSBFbmFibGVkIGNvbnNvbGUgZGV2aWNlIGZvciBBUk0KICAtIEluaXRpbGl6ZWQgYmlfYmF1ZHJhdGUgZm9yIEFSTQoKKiBQYXRjaCBieSBCaWxsIEhhcmdlbiwgMjMgQXByIDIwMDM6CiAgZml4IGJ5dGUgb3JkZXIgZm9yIDgyNHggSTJDIGFkZHJlc3NlcyAod3JpdGUgb3ApCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIwIEp1biAyMDAzOgogIC0gaHltb2QgdXBkYXRlCiAgLSBjbGVhbnVwIChlc3BlY2lhbGx5IGZvciBnY2MtMy54IGNvbXBpbGVycykKCiogUGF0Y2ggYnkgVG9tIEd1aWxsaWFtcywgMjAgSnVuIDIwMDM6CiAgYWRkZWQgQ09ORklHXzc1MEZYIHN1cHBvcnQgZm9yIElCTSA3NTBGWCBwcm9jZXNzb3JzCgoqIFBhdGNoIGJ5IERldmluIENydW1iLCAwMiBBcHIgMjAwMzoKICBGaXggY2xvY2sgZGl2aWRlciByb3VuZGluZyBwcm9ibGVtIGluIGRyaXZlcnMvc2VyaWFsLmMKCiogUGF0Y2ggYnkgUmljaGFyZCBXb29kcnVmZiwgMTkgSnVuZSAwMzoKICAtIEZpeGVkIHNtYzkxYzExMSBkcml2ZXIgdG8gc3luYyB3aXRoIHRoZSB1LWJvb3QgZW52aXJvbm1lbnQKICAgIChkcml2ZXIvc21jOTFjMTExLmMpLgogIC0gQWRkZWQgZXRoX2luaXQgZXJyb3IgcmV0dXJuIGNoZWNrIGluIE5ldExvb3AgKG5ldC9uZXQuYykuCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOSBKdW5lIDIwMDM6CiAgQWRkZWQgc3VwcG9ydCBmb3IgQTMwMDAgU0JDIGJvYXJkIChBcnRpcyBNaWNyb3N5c3RlbXMgSW5jLikKCiogUGF0Y2hlcyBieSBNdXJyYXkgSmVuc2VuLCAxNyBKdW4gMjAwMzoKICAtIEh5bW9kIGJvYXJkIGRhdGFiYXNlIG1vZHM6IGFkZCAid2hvIiBmaWVsZCBhbmQgbmV3IHhpbGlueCBjaGlwIHR5cGVzCiAgLSBwcm92aWRlIG5ldyAiaW5pdF9jbWRfdGltZW91dCgpIiBmdW5jdGlvbiBzbyBjb2RlIGV4dGVybmFsIHRvCiAgICAiY29tbW9uL21haW4uYyIgY2FuIHVzZSB0aGUgInJlc2V0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIGJlZm9yZQogICAgZW50ZXJpbmcgdGhlIG1haW4gbG9vcAogIC0gYWRkIERUVCBzdXBwb3J0IGZvciBhZG0xMDIxIChuZXcgZmlsZSBkdHQvYWRtMTAyMS5jOyBjb25maWcKICAgIHNsaWdodGx5IGRpZmZlcmVudC4gc2VlIGluY2x1ZGUvY29uZmlncy9oeW1vZC5oIGZvciBhbiBleGFtcGxlCiAgICAocmVxdWlyZXMgQ09ORklHX0RUVF9BRE0xMDIxLCBDT05GSUdfRFRUX1NFTlNPUlMsIGFuZAogICAgQ0ZHX0RUVF9BRE0xMDIxIGRlZmluZWQpCiAgLSBhZGQgbmV3ICJlZXByb21fcHJvYmUoKSIgZnVuY3Rpb24gd2hpY2ggaGFzIHNpbWlsYXIgYXJncyBhbmQKICAgIGJlaGF2ZXMgaW4gYSBzaW1pbGFyIHdheSB0byAiZWVwcm9tX3JlYWQoKSIgZXRjLgogIC0gYWRkIDgyNjAgRkNDIGV0aGVybmV0IGxvb3BiYWNrIGNvZGUgKG5ldyAiZXRoX2xvb3BiYWNrX3Rlc3QoKSIKICAgIGZ1bmN0aW9uIHdoaWNoIGlzIGVuYWJsZWQgYnkgZGVmaW5pbmcgQ09ORklHX0VUSEVSX0xPT1BCQUNLX1RFU1QpCiAgLSBnZGJ0b29scyBjb3B5cmlnaHQgdXBkYXRlCiAgLSBlbnN1cmUgdGhhdCBzZXRfbXNyKCkgZXhlY3V0ZXMgdGhlICJzeW5jIiBhbmQgImlzeW5jIiBpbnN0cnVjdGlvbnMKICAgIGFmdGVyIHRoZSAibXRtc3IiIGluc3RydWN0aW9uIGluIGNwdS9tcGM4MjYwL2ludGVycnVwdHMuYwogIC0gODI2MCBJL08gcG9ydHMgZml4OiBPcGVuIERyYWluIHNob3VsZCBiZSBzZXQgbGFzdCB3aGVuIGNvbmZpZ3VyaW5nCiAgLSBhZGQgU0lVIElSUSBkZWZpbmVzIGZvciA4MjYwCiAgLSBhbGxvdyBMRFNDUklQVCBvdmVycmlkZSBhbmQgT0JKQ0ZMQUdTIGluaXRpYWxpemF0aW9uOiBjaGFuZ2UgdG8KICAgIGNvbmZpZy5tayB0byBhbGxvdyBib2FyZCBjb25maWd1cmF0aW9ucyB0byBvdmVycmlkZSB0aGUgR05VCiAgICBsaW5rZXIgc2NyaXB0LCBzZWxlY3RlZCB2aWEgdGhlIExEU0NSSVBULCBtYWtlIHZhcmlhYmxlLCBhbmQgdG8KICAgIGdpdmUgYW4gaW5pdGlhbCB2YWx1ZSB0byB0aGUgT0JKQ0ZMQUdTIG1ha2UgdmFyaWFibGUKICAtIDgyNjAgaTJjIGVuaGFuY2VtZW50OgogICAgbyBjb3JyZWN0bHkgZXh0ZW5kcyB0aGUgdGltZW91dCBkZXBlbmRpbmcgb24gdGhlIHNpemUgb2YgYWxsCiAgICAgIHF1ZXVlZCBtZXNzYWdlcyBmb3IgYm90aCB0cmFuc21pdCBhbmQgcmVjZWl2ZQogICAgbyB3aWxsIG5vdCBjb250aW51ZSB3aXRoIHJlY2VpdmUgaWYgdHJhbnNtaXQgdGltZXMgb3V0CiAgICBvIGVuc3VyZXMgdGhhdCB0aGUgZXJyb3IgY2FsbGJhY2sgaXMgZG9uZSBmb3IgYWxsIHF1ZXVlZCB0eAogICAgICBhbmQgcnggbWVzc2FnZXMKICAgIG8gY29ycmVjdGx5IGRldGVjdHMgYm90aCB0eCBhbmQgcnggdGltZW91dHMsIG9ubHkgZGVsaXZlcnMgb25lIHRvCiAgICAgIHRoZSBjYWxsYmFjaywgYW5kIGRvZXMgbm90IG92ZXJ3cml0ZSBhbiBlYXJsaWVyIGVycm9yCiAgICBvIGxvZ2ljIGluIGkyY19wcm9iZSBub3cgY29ycmVjdAogIC0gYWRkICJ2cHJpbnRmKCkiIGZ1bmN0aW9uIHNvIHRoYXQgInBhbmljKCkiIGZ1bmN0aW9uIGNhbiBiZQogICAgdGVjaG5pY2FsbHkgY29ycmVjdAogIC0gbWFueSBIeW1vZCBib2FyZCBjaGFuZ2VzCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxNCBKdW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBMb2dvdHJvbmljIERMIGRhdGFsb2dnZXIgYm9hcmQKICAtIGNsZWFudXAgc2VyaWFsIGxpbmUgYWZ0ZXIga2VybWl0IGJpbmFyeSBkb3dubG9hZAogIC0gYWRkIGRlYnVnWCBtYWNybyAoZGVidWcgbGV2ZWwgc3VwcG9ydCkKICAtIHVwZGF0ZSBtYWNoLXR5cGVzLmggdG8gbGF0ZXN0IGFybS5saW51eC5vcmcudWsgbWFzdGVyIGxpc3QuCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAxMiBKdW4gMjAwMzoKICAtIHJld3JpdGUgb2YgdGhlIFMzQzI0WDAgcmVnaXN0ZXIgZGVmaW5pdGlvbnMgc3R1ZmYKICAtICJkcml2ZXIiIGZvciB0aGUgYnVpbHQtaW4gUzNDMjRYMCBSVEMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMiBKdW4gMjAwMzoKICAtIEFkZCBNSUkgc3VwcG9ydCBhbmQgRXRoZXJuZXQgUEhZIGluaXRpYWxpemF0aW9uIGZvciBNUEM4MjYwQURTIGJvYXJkCiAgLSBGaXggaW5jb3JyZWN0IFNJVU1DUiBpbml0aWFsaXNhdGlvbiBjYXVzZWQgYnkgd3JvbmcgSGFyZCBSZXNldAogICAgY29uZmlndXJhdGlvbiB3b3JkIHN1cHBsaWVkIGJ5IEZQR0Egb24gc29tZSBNUEM4MjYwQURTIGJvYXJkcwoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMTAgSnVuIDIwMDM6CiAgVW5pZnkgc3RhdHVzIExFRCBpbnRlcmZhY2UKCiogQWRkIHN1cHBvcnQgZm9yIERTMTI4ODcgUlRDOyBhZGQgUlRDIHN1cHBvcnQgZm9yIEFUQyBib2FyZAoKKiBQYXRjaCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5pZXJlLCAxMSBKdW4gMjAwMzoKICBNb2RpZmljYXRpb25zIGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQKICAtIEFkZCBBdG1lbCBEYXRhRmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KICAtIEFkZCBwb3NzaWJpbGl0eSB0byBib290IGEgTGludXggZnJvbSBEYXRhRmxhc2ggd2l0aCBCT09UTSBjb21tYW5kLgogIC0gQWRkIEZsYXNoIGRldGVjdGlvbiBvbiBBdG1lbCBBVDkxUk05MjAwREsKICAgIChiZXR3ZWVuIEF0bWVsIEFUNDlCVjE2MTQgYW5kIEFUNDlCVjE2MTRBIGZsYXNoZXMpCiAgLSBSZXBsYWNlIG9sZCBFdGhlcm5ldCBQSFkgbGF5ZXIgZnVuY3Rpb25zCiAgLSBDaGFuZ2UgbGluayBhZGRyZXNzCgoqIFBhdGNoIGJ5IEZyYW5rIFNtaXRoLCA5IEp1biAyMDAzOgogIHVzZSBDUklUX0VYQ0VQVElPTiBmb3IgbWFjaGluZSBjaGVjayBvbiA0eHgKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTMgSnVuIDIwMDM6CiAgYWRkZWQgaW1wbGVtZW50YXRpb24gb2YgdGhlICJjYXJpbmZvIiBjb21tYW5kIGluIGNtZF9pbW1hcC5jCgoqIEZpeCBDT05GSUdfTkVUX01VTFRJIHN1cHBvcnQgaW4gaW5jbHVkZS9uZXQuaAoKKiBQYXRjaGVzIGJ5IEt5bGUgSGFycmlzLCAxMyBNYXIgMjAwMzoKICAtIEFkZCBGQVQgcGFydGl0aW9uIHN1cHBvcnQKICAtIEFkZCBjb21tYW5kIHN1cHBvcnQgZm9yIEZBVAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgTU1DCiAgLS0tLQogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciB2aWRlbwogIC0gQWRkIEludGVsIFBYQSBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBFbmFibGUgTU1DIGFuZCBGQVQgZm9yIGx1YmJvY2sgYm9hcmQKICAtIE90aGVyIG1pc2MgY2hhbmdlcyBmb3IgbHViYm9jayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIEFwcmlsIDAyLCAyMDAzOgogIGZpeCBmb3IgU01TQzkxMTExIGRyaXZlcgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDQgSnVuIDIwMDM6CiAgbWFrZSBwcGM0MDUgZXRoZXJuZXQgZHJpdmVyIGNvbXBhdGlibGUgd2l0aCBDT05GSUdfTkVUX01VTFRJIG9wdGlvbgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDA1IEp1biAyMDAzOgogIC0gUFBDNHh4OiBGaXggYnVnIGZvciBpbml0aWFsIHN0YWNrIGluIGRhdGEgY2FjaGUgYXMgcG9pbnRlZCBvdXQgYnkKICAgIFRob21hcyBTY2hhZWZlciAodHNjaGFlZmVyQGdpZ2Etc3RyZWFtLmRlKS4gTm93IGluaXRhbCBzdGFjayBpbgogICAgZGF0YSBjYWNoZSBjYW4gYmUgdXNlZCBldmVuIGlmIHRoZSBjaGlwIHNlbGVjdCBpcyBpbiB1c2UuCiAgLSBDRkdfUlhfRVRIX0JVRkZFUiBhZGRlZCB0byBzZXQgdGhlIGV0aGVybmV0IHJlY2VpdmUgYnVmZmVyIGNvdW50CiAgICAoc2VlIFJFQURNRSBmb3IgZnVydGhlciBkZXNjcmlwdGlvbikuCiAgLSBDaGFuZ2VkIGNvbmZpZyBmaWxlcyBvZiBDT05GSUdfRUVQUk8xMDAgYm9hcmRzIHRvIHVzZSB0aGUKICAgIENGR19SWF9FVEhfQlVGRkVSIGRlZmluZS4KCiogQWRkIHN1cHBvcnQgZm9yIFJNVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODYyTCBhdCAxMDAvNTAgTUh6CgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAwMiBKdW4gMjAwMzoKICBtYWpvciByZWNvbnN0cnVjdGlvbiBvZiBuZXR3b3JraW5nIGNvZGU7CiAgYWRkICJwaW5nIiBzdXBwb3J0IChvdXRnb2luZyBvbmx5ISkKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEp1bmUgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgdGhlIE1JUDQwNVQgYm9hcmQKCiogUGF0Y2hlcyBieSBVZGkgRmlua2Vsc3RlaW4sIDIgSnVuZSAyMDAzOgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIGtleWJvYXJkcywgaW5pdGlhbGl6ZWQgYnkgZGVmaW5pbmcgYQogICAgYm9hcmQtc3BlY2lmaWMgZHJ2X2tleWJvYXJkX2luaXQgYXMgd2VsbCBhcyBkZWZpbmluZyBDT05GSUdfS0VZQk9BUkQgLgogIC0gQWRkZWQgc3VwcG9ydCBmb3IgdGhlIFJCQzgyMyBib2FyZC4KICAtIGNwdS9tcGM4eHgvbGNkLmMgbm93IGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlcyB0aGUKICAgIEhvcml6b250YWwgUGl4ZWwgQ291bnQgZmllbGQuCgoqIEZpeCBhbGlnbm1lbnQgcHJvYmxlbSBpbiBCT09UUCAoZGhjcF9sZWFzZXRpbWUgb3B0aW9uKQogIFtwb2ludGVkIG91dCBieSBOaWNvbGFzIExhY3Jlc3Nvbm5p6HJlLCAyIEp1biAyMDAzXQoKKiBQYXRjaCBieSBNYXJrIFJha2VzLCAxNCBNYXkgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgSW50ZWwgZTEwMDAgZ2lnIGNhcmRzLgoKKiBQYXRjaCBieSBOeWUgTGl1LCAzIEp1biAyMDAzOgogIGZpeCBjcml0aWNhbCB0eXBvIGluIE1BTVIgZGVmaW5pdGlvbiAoaW5jbHVkZS9tcGM4eHguaCkKCiogRml4IHJlcXVpcmVtZW50IHRvIGFsaWduIFUtQm9vdCBpbWFnZSBvbiAxNiBrQiBib3VuZGFyaWVzIG9uIFBQQy4KCiogUGF0Y2ggYnkgS2xhdXMgSGV5ZGVjaywgMiBKdW4gMjAwMwogIE1pbm9yIGNoYW5nZXMgZm9yIEtVUDRLIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI5IE1heSAyMDAzOgogIEZpeGVkIHJhcnAgYm9vdCBtZXRob2QgZm9yIElBMzIgYW5kIG90aGVyIGxpdHRsZS1lbmRpYW4gQ1BVcy4KCiogUGF0Y2ggYnkgTWFyYyBTaW5nZXIsIDI4IE1heSAyMDAzOgogIEFkZGVkIHBvcnQgSS9PIGNvbW1hbmRzLgoKKiBQYXRjaCBieSBNYXR0aGV3IE1jQ2xpbnRvY2ssIDI4IE1heSAyMDAzCiAgLSBjcHUvbXBjODI0eC9zdGFydC5TOiBmaXggcmVsb2NhdGlvbiBjb2RlIHdoZW4gYm9vdGluZyBmcm9tIFJBTQogIC0gbWlub3IgcGF0Y2hlcyBmb3IgdXR4ODI0NQoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDI4IE1heSAyMDAzOgogIHg4NiB1cGRhdGUKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgOSBNYXkgMjAwMyArIDI3IE1heSAyMDAzOgogIGFkZCBuYW5kIGZsYXNoIHN1cHBvcnQgdG8gU1hOSTg1NVQgY29uZmlndXJhdGlvbgogIGZpeC9leHRlbmQgbmFuZCBmbGFzaCBzdXBwb3J0OgogIC0gZml4ICduYW5kIGVyYXNlJyBjb21tYW5kIHNvIGRvZXMgbm90IGVyYXNlIGJhZCBibG9ja3MKICAtIGZpeCAnbmFuZCB3cml0ZScgY29tbWFuZCBzbyBkb2VzIG5vdCB3cml0ZSB0byBiYWQgYmxvY2tzCiAgLSBmaXggbmFuZF9wcm9iZSgpIHNvIGhhbmRsZXMgbm8gZmxhc2ggZGV0ZWN0ZWQgcHJvcGVybHkKICAtIGFkZCBkb2MvUkVBRE1FLm5hbmQKICAtIGFkZCAuamZmczIgYW5kIC5vb2Igb3B0aW9ucyB0byBuYW5kIHJlYWQvd3JpdGUKICAtIGFkZCAnbmFuZCBiYWQnIGNvbW1hbmQgdG8gbGlzdCBiYWQgYmxvY2tzCiAgLSBhZGQgJ2NsZWFuJyBvcHRpb24gdG8gJ25hbmQgZXJhc2UnIHRvIHdyaXRlIEpGRlMyIGNsZWFuIG1hcmtlcnMKICAtIG1ha2UgTkFORCByZWFkL3dyaXRlIGZhc3RlcgoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMjMgTWF5IDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjY2QURTIGJvYXJkCgoqIEdldCAobW9zdGx5KSByaWQgb2YgQ0ZHX01PTklUT1JfTEVOIGRlZmluaXRpb247IGNvbXB1dGUgcmVhbCBsZW5ndGgKICBpbnN0ZWFkIENGR19NT05JVE9SX0xFTiBpcyBub3cgb25seSB1c2VkIHRvIGRldGVybWluZSAgX2F0X2NvbXBpbGVfCiAgX3RpbWVfICAoISkgaWYgdGhlIGVudmlyb25tZW50IGlzIGVtYmVkZGVkIHdpdGhpbiB0aGUgVS1Cb290IGltYWdlLAogIG9yIGluIGEgc2VwYXJhdGUgZmxhc2ggc2VjdG9yLgoKKiBDbGVhbnVwIENGR19ERVIgI2RlZmluZXMgaW4gY29uZmlnIGZpbGVzICh3ZCBtYWludGFpbmVkIG9ubHkpCgoqIEZpeCBkYXRhIGFib3J0IGV4Y2VwdGlvbiBoYW5kbGluZyBmb3IgYXJtOTIwdCBDUFUKCiogRml4IGFsaWdubWVudCBwcm9ibGVtcyB3aXRoIGZsYXNoIGRyaXZlciBmb3IgVFJBQiBib2FyZAoKKiBQYXRjaCBieSBEb25hbGQgV2hpdGUsIDIxIE1heSAyMDAzOgogIGZpeCBjYWxjdWxhdGlvbiBvZiBiYXNlIGFkZHJlc3MgaW4gcGNpX2hvc2VfY29uZmlnX2RldmljZSgpCgoqIEZpeCBidWcgaW4gY29tbWFuZCBsaW5lIHBhcnNpbmc6ICJjbWQxO2NtZDIiIGlzIHN1cHBvc2VkIHRvIGFsd2F5cwogIGV4ZWN1dGUgImNtZDIiLCBldmVuIGlmICJjbWQxIiBmYWlscy4gTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50CiAgdG8gInJ1biB2YXIxIHZhcjIiIHdoZXJlIHRoZSBjb250ZW50cyBvZiAidmFyMiIgd2lsbCBOT1QgYmUKICBleGVjdXRlZCB3aGVuIGEgY29tbWFuZCBpbiAidmFyMSIgZmFpbHMuCgoqIEFkZCB6ZXJvLWNvcHkgcmFtZGlzayBzdXBwb3J0IChyZXF1aXJlcyBjb3JyZXNwb25kaW5nIGtlcm5lbCBzdXBwb3J0ISkKCiogUGF0Y2ggYnkgS3lsZSBIYXJyaXMsIDIwIE1heSAyMDAzOgogIEluIHByZXBhcmF0aW9uIGZvciBhbiBpeHAgcG9ydCwgcmVuYW1lIGNwdS94c2NhbGUgYW5kIGFyY2gteHNjYWxlCiAgaW50byBjcHUvcHhhIGFuZCBhcmNoLXB4YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMyBNYXkgMjAwMzoKICAtIElCTSBQUEM0MDVFUCBwb3J0IGFkZGVkLgogIC0gQ09ORklHX1VBUlQxX0NPTlNPTEUgYWRkZWQuIElmIGRlZmluZWQgaW50ZXJuYWwgVUFSVDEgKGFuZCBub3QKICAgIFVBUlQwKSBpcyB1c2VkIGFzIGRlZmF1bHQgVS1Cb290IGNvbnNvbGUuIFBQQzR4eCBvbmx5IQogIC0gZXNkIEFTSDQwNSBib2FyZCBhZGRlZCAoUFBDNDA1RVAgYmFzZWQpLgogIC0gQlVCSU5HQTQwNUVQIGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCAtIElCTSBFdmFsIEJvYXJkKS4KICAtIGVzZCBDUENJNDA1QUIgYm9hcmQgYWRkZWQuCiAgLSBlc2QgUE1DNDA1IGJvYXJkIGFkZGVkLgogIC0gVXBkYXRlIG9mIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE5IE1haSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1LTMgYm9hcmQKCiogUGF0Y2ggYnkgRGF2ZSBFbGxpcywgMjIgTWF5IDIwMDM6CiAgRml4IHByb2JsZW0gd2l0aCBvbmx5IHBhcnRpYWxseSBjbGVhcmVkIC5ic3Mgc2VnbWVudAoKKiBQYXRjaCBieSBSdW5lIFRvcmdlcnNlbiwgMTIgTWF5IDIwMDM6CiAgZ2V0IFBDSSB0byB3b3JrIG9uIGEgTVBDODI2NkFEUyBib2FyZDsgaW5jb3Jwb3JhdGUgY2hhbmdlIHRvCiAgY3B1L21wYzgyNjAvcGNpLmMgdG8gZW5hYmxlIG92ZXJyaWRlcyBvZiBQQ0kgbWVtb3J5IHBhcmFtZXRlcnMKCiogUGF0Y2ggYnkgTnllIExpdSwgMSBNYXkgMjAwMzoKICBtaW5vciBwYXRjaGVzIGZvciB0aGUgRkFEUzh4eAoKKiBQYXRjaCBieSBUaG9tYXMgU2No5GZlciwgMjggQXByIDIwMDM6CiAgRml4IFNQRCBoYW5kbGluZyBmb3IgMjU2IEVDQyBESU1NIG9uIFdhbG51dAoKKiBBZGQgc3VwcG9ydCBmb3IgYXJiaXRyYXJ5IGJpdG1hcHMgZm9yIFRSQUIncyAgVkZEIGNvbW1hbmQ7CiAgYWxsb3cgdG8gcGFzcyBib290IGJpdG1hcCBhZGRyZXNzZXMgaW4gZW52aXJvbm1lbnQgdmFyaWFibGVzOwogIGFsbG93IGZvciB6ZXJvIGJvb3QgZGVsYXkKCiogUGF0Y2ggYnkgQ2hyaXN0aWFuIEdlad9pbmdlciwgMTkgTWF5IDIwMDI6CiAgT24gVFJBQjogd2FpdCB1bnRpbCB0aGUgZHVtbXkgYnl0ZSBoYXMgYmVlbiBjb21wbGV0ZWx5IHNlbnQKCiogUGF0Y2ggYnkgRGF2aWQgVXBkZWdyYWZmLCAyMiBBcHIgMjAwMzoKICB1cGRhdGUgZm9yIENyYXlMMSBib2FyZAoKKiBQYXRjaCBieSBQYW50ZWxpcyBBbnRvbmlvdSwgMjEgQXByIDIwMDM6CiAgYWRkIGJvb3Qgc3VwcG9ydCBmb3IgQVJUT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDExIEFwciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzM4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjQgSmFuIDIwMDM6CiAgRml4IGNvdW50aW5nIG9mIGV4dGVuZGVkIHBhcnRpdGlvbnMgaW4gZGlza2Jvb3QgY29tbWFuZAoKKiBQYXRjaCBieSBDaHJpc3RvcGhlIExpbmRoZWltZXIsIDIwIE1heSAyMDAzOgogIGFsbG93IHRoZSB1c2Ugb2YgQ0ZHX0xPQURTIHdoZW4gQ0ZHX05PX0ZMQVNIIGlzIHNldAoKKiBGaXggU0RSQU0gdGltaW5nIG9uIFB1cnBsZSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgQ29tcGFjdEZsYXNoIG9uIEFUQyBib2FyZAogIChpbmNsdWRlcyBzdXBwb3J0IGZvciBJbnRlbCA4MjM2NSBhbmQgY29tcGF0aWJsZSBQQyBDYXJkIGNvbnRyb2xsZXJzLAogIGFuZCBZZW50YS1jb21wYXRpYmxlIFBDSS10by1DYXJkQnVzIGNvbnRyb2xsZXJzKQoKKiBQYXRjaCBieSBNYXRoaWpzIEhhYXJtYW4sIDA4IE1heSAyMDAzOgogIEFkZCBsYW45MWM5NiBkcml2ZXIgKHRlc3RlZCBvbiBMdWJib2NrIGFuZCBjdXN0b20gUFhBMjUwIGJvYXJkIG9ubHkpCgoqIEZpeCBwcm9ibGVtIHdpdGggdXNhZ2Ugb2YgInRydWUiICh1bmRlZmluZWQgaW4gY3VycmVudCB2ZXJzaW9ucyBvZiBiZmQuaCkKCiogQWRkIHN1cHBvcnQgZm9yIFByb21lc3MgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IEtlaXRoIE91dHdhdGVyLCAyOCBBcHIgMjAwMzoKICAtIE1pc2NlbGxhbmVvdXMgY29ycmVjdGlvbnMgYW5kIGFkZGl0aW9ucyB0byBHRU44NjBUIGJvYXJkIHNwZWNpZmljIGNvZGUuCiAgLSBBZGRlZCBHRU44NjBfU0MgdmFyaWFudCB0byBHRU44NjBULgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyB0byBHRU44NjBUIGRvY3VtZW50YXRpb24uCiAgLSBDb3JyZWN0IGR1cGxpY2F0ZSBlbnRyeSBpbiBVLUJvb3QgQ1JFRElUUyBmaWxlLgogIC0gQWRkIEdFTjg2MFRfU0MgZW50cnkgaW4gTUFJTlRBSU5FUlMgZmlsZS4KICAtIFVwZGF0ZSBDUkVESVRTIGZpbGUgd2l0aCBHRU44NjBUX1NDIGluZm8uCgoqIFVwZGF0ZSBTbWl0aHMgQWVyb3NwYWNlIGFkZHJlc3NlcyBpbiBNQUlOVEFJTkVSUyBmaWxlCgoqIEZpeCBlcnJvciBoYW5kbGluZyBpbiBodXNoJ3MgdmVyc2lvbiBvZiAicnVuIiBjb21tYW5kCgoqIExXTU9OIGV4dGVuc2lvbnM6CiAgLSBTcGxhc2hzY3JlZW4gc3VwcG9ydAogIC0gbW9kZW0gc3VwcG9ydAogIC0gc3lzbW9uIHN1cHBvcnQKICAtIHRlbXBlcmF0dXJlIGRlcGVuZGVuZCBlbmFibGluZyBvZiBMQ0QKCiogQWxsb3cgYm9vdGluZyBmcm9tIG9sZCAiUFBDQm9vdCIgZGlzayBwYXJ0aXRpb25zCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04MjU1IEJvYXJkIC8gTVBDODI1NSBDUFUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIE1ha2Ugc3VyZSBCbG9jayBMb2NrIEJpdHMgZ2V0IGNsZWFyZWQgaW4gUjM2ME1QSSBmbGFzaCBkcml2ZXIKCiogTVBDODIzIExDRCBkcml2ZXI6IEZpbGwgY29sb3IgbWFwIGJhY2t3YXJkcywgdG8gYWxsb3cgZm9yIHN0ZWFkeQogIGRpc3BsYXkgd2hlbiBMaW51eCB0YWtlcyBvdmVyCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TICh0aGlzIHRpbWUgZm9yIHJlYWwpLgoKKiBBZGQgc3VwcG9ydCBmb3IgImJtcCBpbmZvIiBhbmQgImJtcCBkaXNwbGF5IiBjb21tYW5kcyB0byBsb2FkCiAgYml0bWFwIGltYWdlczsgdGhpcyBjYW4gYmUgdXNlZCAoZm9yIGV4YW1wbGUgaW4gYSAicHJlYm9vdCIKICBjb21tYW5kKSB0byBkaXNwbGF5IGEgc3BsYXNoIHNjcmVlbiB2ZXJ5IHF1aWNrbHkgYWZ0ZXIgcG93ZXJvbi4KCiogQWRkIHN1cHBvcnQgZm9yIDEzMyBNSHogY2xvY2sgb24gSU5DQS1JUCBib2FyZAoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTAgQXByIDIwMDM6CiAgVXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgoqIEFkZCBuZXcgbWVhbmluZyB0byAiYXV0b3N0YXJ0IiBlbnZpcm9ubWVudCB2YXJpYWJsZToKICBJZiBzZXQgdG8gIm5vIiwgYSBzdGFuZGFsb25lIGltYWdlIHBhc3NlZCB0byB0aGUKICAiYm9vdG0iIGNvbW1hbmQgd2lsbCBiZSBjb3BpZWQgdG8gdGhlIGxvYWQgYWRkcmVzcwogIChhbmQgZXZlbnR1YWxseSB1bmNvbXByZXNzZWQpLCBidXQgTk9UIGJlIHN0YXJ0ZWQuCiAgVGhpcyBjYW4gYmUgdXNlZCB0byBsb2FkIGFuZCB1bmNvbXByZXNzIGFyYml0cmFyeQogIGRhdGEuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgQXByIDIwMDM6CiAgQ2hhbmdlZCBESENQIGNsaWVudCB0byB1c2UgSVAgYWRkcmVzcyBmcm9tIHNlcnZlciBvcHRpb24gZmllbGQgIzU0CiAgZnJvbSB0aGUgT0ZGRVIgcGFja2V0IGluIHRoZSBzZXJ2ZXIgb3B0aW9uIGZpZWxkICM1NCBpbiB0aGUgUkVRVUVTVAogIHBhY2tldC4gVGhpcyBmaXhlcyBhIHByb2JsZW0gdXNpbmcgYSBXaW5kb3dzIDIwMDAgREhDUCBzZXJ2ZXIsCiAgd2hlcmUgdGhlIERIQ1Atc2VydmVyIGlzIG5vdCB0aGUgVEZUUC1zZXJ2ZXIuCgoqIFNldCBtYXggYnJpZ2h0bmVzcyBmb3IgTU4xMTIzNiBkaXNwbGF5cyBvbiBUUkFCIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIG1vZHVsZXMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMy4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoIGJ5IEFydW4gRGhhcmFua2FyLCA0IEFwciAyMDAzOgogIEFkZCBJRE1BIGV4YW1wbGUgY29kZSAodGVzdGVkIG9uIDgyNjAgb25seSkKCiogQWRkIHN1cHBvcnQgZm9yIFB1cnBsZSBCb2FyZCAoTUlQUzY0IDVLYykKCiogQWRkIHN1cHBvcnQgZm9yIE1JUFM2NCA1S2MgQ1BVcwoKKiBGaXggbWlzc2luZyBzZXR0aW5nIG9mICJsb2FkYWRkciIgYW5kICJib290ZmlsZSIgb24gQVJNIGFuZCBNSVBTCgoqIFBhdGNoIGJ5IERlbmlzIFBldGVyLCAwNCBBcHIgMjAwMzoKICAtIHVwZGF0ZSBNSVA0MDUtNCBib2FyZAoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDQgQXByIDIwMDM6CiAgLSBVLUJvb3QgdmVyc2lvbiBlbnZpcm9ubWVudCB2YXJpYWJsZSAidmVyIiBhZGRlZAogICAgKENPTkZJR19WRVJTSU9OX1ZBUklBQkxFKS4KICAtIENoYW5nZWQgUFBDNDA1R1ByIHZlcnNpb24gZnJvbSBBIHRvIEIuCiAgLSBDaGFuZ2VkIENQQ0k0MDUgdG8gdXNlIENUUyBpbnN0ZWFkIG9mIERTUiBvbiBQUEM0MDUgVUFSVDEuCgoqIFBhdGNoZXMgYnkgRGVuaXMgUGV0ZXIsIDAzIEFwcmlsIDIwMDM6CiAgLSBmaXggUENJIElSUXMgb24gTVBMIGJvYXJkcwogIC0gZml4IHR3byBtb3JlIHVuLXJlbG9jYXRlZCBwb2ludGVyIHByb2JsZW1zCgoqIEZpeCBiZWhhdmlvdXIgb2YgInJ1biIgY29tbWFuZDoKICAtIHByaW50IGVycm9yIG1lc3NhZ2UgaXYgdmFyaWFibGUgZG9lcyBub3QgZXhpc3QKICAtIHRlcm1pbmF0ZSBwcm9jZXNzaW5nIG9mIGFyZ3VtZW50cyBpbiBjYXNlIG9mIGVycm9yCgoqIFBhdGNoZXMgYnkgUGV0ZXIgRmlndWxpLCAxMCBNYXIgMjAwMwogIC0gQWRkIHN1cHBvcnQgZm9yIEJUVUFSVCBvbiBQWEEgcGxhdGZvcm0KICAtIEFkZCBzdXBwb3J0IGZvciBXRVAgRVAyNTAgKFBYQSkgYm9hcmQKCiogRml4IGZsYXNoIHByb2JsZW1zIG9uIElOQ0EtSVA7IGFkZCB0b29sIHRvIGFsbG93IGJydW5pbmcgaW1hZ2VzICB0bwogIGZsYXNoIHVzaW5nIGEgQkRJMjAwMAoKKiBJbXBsZW1lbnQgZml4IGZvciBJMkMgRWRnZSBDb25kaXRpb25zIHByb2JsZW0gZm9yIGFsbCBib2FyZHMgdGhhdAogIHVzZSB0aGUgYml0LWJhbmdpbmcgZHJpdmVyIChjb21tb24vc29mdF9pMmMuYykKCiogUGF0Y2ggYnkgTWFydGluIFdpbmlzdG9lcmZlciwgMjMgTWFyIDIwMDMKICAtIEFkZCBwb3J0IHRvIE1QQzU1NS81NTYgbWljcm9jb250cm9sbGVycwogIC0gQWRkIHN1cHBvcnQgZm9yIGNtaSBjdXN0b21lciBib2FyZCB3aXRoCiAgICBJbnRlbCAyOEYxMjhKM0EsIDI4RjMyMEozQSBvciAyOEY2NDBKM0EgZmxhc2guCgoqIFBhdGNoIGJ5IFJpY2sgQnJvbnNvbiwgMjggTWFyIDIwMDM6CiAgLSBmaXggY29tbW9uL2NtZF9uYW5kLmMKCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDI0IE1hciAyMDAzOgogIC0gYWRkIHRocmVhZHMgLyBzY2hlZHVsZXIgZXhhbXBsZSBjb2RlCgoqIEFkZCBwYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMzEgTWFyIDIwMDM6CiAgLSBhZGQgY3RybC1jIHN1cHBvcnQgZm9yIGtlcm1pdCBkb3dubG9hZAogIC0gYWxpZ24gYmRpbmZvIG91dHB1dCBvbiBBUk0KICAtIGNzYjIyNiBib2FyZDogYnJpbmcgaW4gc3luYyB3aXRoIGlubm9rb20vbWVtc2V0dXAuUwogIC0gY3NiMjI2IGJvYXJkOiBmaXggTURSRUZSIGhhbmRsaW5nCiAgLSBtaXNjIGRvYyBmaXhlcyAvIGV4dGVuc2lvbnMKICAtIGlubm9rb20gYm9hcmQ6IGNsZWFudXAsIE1EUkVGUiBmaXggaW4gbWVtc2V0dXAuUywgY29uZmlnIHVwZGF0ZQogIC0gYWRkIEJPT1RfUFJPR1JFU1MgdG8gYXJtbGludXguYwoKKiBBZGQgQ1BVIElELCB2ZXJzaW9uLCBhbmQgY2xvY2sgc3BlZWQgZm9yIElOQ0EtSVAKCiogUGF0Y2hlcyBieSBEYXZlIEVsbGlzLCAxOCBNYXIgMjAwMyBmb3IgU1hOSTg1NVQgYm9hcmQ6CiAgLSBmaXggU1JBTSBhbmQgU0RSQU0gbWVtb3J5IHNpemluZwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydAogIC0gYWRkIE1BQyBhZGRyZXNzIGZvciBzZWNvbmQgKFNDQzEpIGV0aGVybmV0IHBvcnQKCiogVXBkYXRlIGRlZmF1bHQgZW52aXJvbm1lbnQgZm9yIFRRTTgyNjAgYm9hcmQKCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAxNiBNYXIgMjAwMzoKICAtIEFkZCBOQU5EIGZsYXNoIHN1cHBvcnQgZm9yIHJlYWRpbmcsIHdyaXRpbmcsIGFuZCBlcmFzaW5nIE5BTkQKICAgIGZsYXNoIChjZXJ0YWluIGZvcm1zIG9mIHdoaWNoIGFyZSBjYWxsZWQgU21hcnRNZWRpYSkuCiAgLSBBZGQgc3VwcG9ydCBmb3IgQXRtZWwgQVQ5MVJNOTIwMERLIEFSTTkyMFQgYmFzZWQgZGV2ZWxvcG1lbnQga2l0LgoKKiBQYXRjaGVzIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTkgTWFyIDIwMDM6CiAgLSB1c2UgYXJtLWxpbnV4LWdjYyBhcyBkZWZhdWx0IGNvbXBpbGVyIGZvciBBUk0KICAtIGZpeCBpMmMgZml4dXAgY29kZQogIC0gZml4IG1pc3NpbmcgYmF1ZHJhdGUgc2V0dGluZwogIC0gYWRkZWQgJGxvYWRhZGRyIC8gQ0ZHX0xPQURfQUREUiBzdXBwb3J0IHRvIGxvYWRiCiAgLSBtb3ZlZCAiaWdub3JpbmcgdHJhaWxpbmcgY2hhcmFjdGVycyIgX2JlZm9yZV8gdS1ib290IHdhbnRzIHRvCiAgICBwcmludCBvdXQgZGlhZ25vc3RpY3MgbWVzc2FnZXM7IHJlbW92ZXMgYm9ndXMgY2hhcmFjdGVycyBhdCB0aGUKICAgIGVuZCBvZiB0cmFuc21pc3Npb24KCiogUGF0Y2ggYnkgSm9obiBaaGFuLCAxOCBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgU2lub1ZlZSBNaWNyb3N5c3RlbXMgU0M4eHggYm9hcmRzCgoqIFBhdGNoIGJ5IFJvbGYgT2ZmZXJtYW5ucywgMjEgTWFyIDIwMDM6CiAgcG9ydGVkIHRoZSBkbnAxMTEwIHJlbGF0ZWQgY2hhbmdlcyBmcm9tIHRoZSBjdXJyZW50IGFybWJvb3QgY3ZzIHRvCiAgY3VycmVudCB1LWJvb3QgY3ZzLiBzbWM5MTExMSBkb2VzIG5vdCB3b3JrLiBwcm9ibGVtIG1hcmtlZCBpbgogIHNtYzkxMTExLmMsIGdyZXAgZm9yICJGSVhNRSIuCgoqIFBhdGNoIGJ5IEJyaWFuIEF1bGQsIDI1IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTVE0gZmxhc2ggY2hpcHMgb24gZWJvbnkgYm9hcmQKCiogQWRkIFBDSSBzdXBwb3J0IGZvciBNUEM4MjUwIEJvYXJkcyAoUE04MjUgbW9kdWxlKQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgogIC0gUENJNDA1IHVwZGF0ZS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCiAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQogICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCgoqIEV4dGVuZCBJTkNBSVAgYm9hcmQgc3VwcG9ydDoKICAtIGFkZCBhdXRvbWF0aWMgUkFNIHNpemUgZGV0ZWN0aW9uCiAgLSBhZGQgImJkaW5mbyIgY29tbWFuZAogIC0gcGFzcyBmbGFzaCBhZGRyZXNzIGFuZCBzaXplIHRvIExpbnV4IGtlcm5lbAogIC0gc3dpdGNoIHRvIDE1MCBNSHogY2xvY2sKCiogQXZvaWQgZmxpY2tlciBvbiB0aGUgVFJBQidzIFZGRCBieSBzeW5jaHJvbml6aW5nIHRoZSBlbmFibGUgd2l0aAogIHRoZSBIU1lOQy9WU1lOQy4gUmVxdWlyZXMgbmV3IENQTEQgY29kZSAoVmVyc2lvbiAxMDEgZm9yIFJldi4gMTAwCiAgYm9hcmRzLCB2ZXJzaW9uIDE1MyBmb3IgUmV2LiAyMDAgYm9hcmRzKS4KCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDEyIE1hciAyMDAzOgogIEZpeCByZWxvY2F0aW9uIHByb2JsZW0gb2Ygc3RhdGljYWxseSBpbml0aWFsaXplZCBzdHJpbmcgcG9pbnRlcnMKICBpbiBjb21tb24vY21kX3BjaS5jCgoqIFBhdGNoIGJ5IEthaS1Vd2UgQmz2bSwgMTIgTWFyIDIwMDM6CiAgQ2xlYW51cCAmIGJ1ZyBmaXhlcyBmb3IgSkZGUzIgY29kZToKICAtIHRoZSBtZW1vcnkgbWFuZ2VtZW50IHdhcyBicm9rZW4uIEl0IGNhdXNlZCBoYXZvYyBvbiBtYWxsb2MgYnkKICAgIHdyaXRpbmcgYmV5b25kIHRoZSBibG9jayBib3VuZGFyaWVzLgogIC0gdGhlIGxlbmd0aCBjYWxjdWxhdGlvbiBmb3IgZmlsZXMgd2FzIHdyb25nLCBzb21ldGltZXMgcmVzdWx0aW5nCiAgICBpbiBzaG9ydCBmaWxlIHJlYWRzLgogIC0gZGF0YSBjb3B5aW5nIG5vdyBvcHRpb25hbGx5IHRha2VzIGZyYWdtZW50IHZlcnNpb24gbnVtYmVycyBpbnRvCiAgICBhY2NvdW50LCB0byBhdm9pZCBjb3B5aW5nIGZyb20gb2xkZXIgZGF0YS4KICBTZWUgZG9jL1JFQURNRS5KRkZTMiBmb3IgZGV0YWlscy4KCiogUGF0Y2ggYnkgSm9zZWYgV2FnbmVyLCAxMiBNYXIgMjAwMzoKICAtIDE2LzMyIE1CIGFuZCA1MC84MCBNSHogc3VwcG9ydCB3aXRoIGF1dG8tZGV0ZWN0aW9uIGZvciBJUDg2MAogIC0gRVRIMDUgYW5kIEJFREJVRyBzdXBwb3J0IGZvciBDVTgyNAogIC0gYWRkZWQgc3VwcG9ydCBmb3IgTWljcm9TeXMgQ1BDNDUKICAtIG5ldyBCT09UUk9NL0ZMQVNIMCBhbmQgRE9DIGJhc2UgZm9yIFBNODI2CgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMTIgTWFyIDIwMDM6CiAgRml4IHRoZSBjaHBhcnQgY29tbWFuZCBvbiBpbm5va29tIGJvYXJkCgoqIE5hbWUgY2xlYW51cDoKICBtdiBpbmNsdWRlL2FzbS1pMzg2L3BwY2Jvb3QtaTM4Ni5oIGluY2x1ZGUvYXNtLWkzODYvdS1ib290LWkzODYuaAogIHMvUFBDQm9vdC9VLUJvb3QvIGluIHNvbWUgZmlsZXMKICBzL3BJbWFnZS91SW1hZ2UvICBpbiBzb21lIGZpbGVzCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDE1IEphbiAyMDAzOgogIEZpeCAnJyBjb21tYW5kIGxpbmUgcXVvdGluZwoKKiBQYXRjaCBieSBUaGUgTEVPWCB0ZWFtLCAxOSBKYW4gMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgRUxQVDg2MCBib2FyZAogIC0gYWRkIHN1cHBvcnQgZm9yIERhbGxhcyBkczE2NHggUlRDCgoqIFBhdGNoZXMgYnkgRGF2aWQgTfxsbGVyLCAzMSBKYW4gMjAwMzoKICAtIG1pbmltYWwgc2V0dXAgZm9yIENhcmRCdXMgYnJpZGdlcwogIC0gYWRkIEVFUFJPTSByZWFkL3dyaXRlIHN1cHBvcnQgaW4gdGhlIENTODkwMCBkcml2ZXIKICAtIGFkZCBzdXBwb3J0IGZvciB0aGUgYnVpbHRpbiBJMkMgY29udHJvbGxlciBpbiB0aGUgU2Ftc3VuZyBzM2MyNHgwIGNoaXBzCiAgLSBhZGQgc3VwcG9ydCBmb3IgTVBMJ3MgVkNNQTkgKFNhbXN1bmcgczNjMjQxMCBiYXNlZCkgYm9hcmQKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMDQgRmViIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMDcKCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDUgRmViIDIwMDM6CiAgZml4IFBMUFJDUi9TQ0NSIGluaXQgc2VxdWVuY2Ugb24gOHh4IHRvIGFsbG93IGZvcgogIGNoYW5nZXMgb2YgRUJERiBieSBzb2Z0d2FyZQoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMDcgRmViIDIwMDM6CiAgIkFQSS1jb21wYXRpYmlsaXR5IHBhdGNoIiBmb3IgNHh4IEkyQyBkcml2ZXIKCiogVFJBQiBmaXhlcyAvIGV4dGVuc2lvbnM6CiAgLSBSZXN0b3JlIFZGRCBicmlnaHRuZXNzIGFzIHNhdmVkIGluIGVudmlyb25tZW50CiAgLSBhZGQgc3VwcG9ydCBmb3IgRnVqaXRzdSBmbGFzaGVzCiAgLSBtYWtlIHN1cmUgYm90aCBidXp6ZXJzIGFyZSB0dXJuZWQgb2ZmIChkcml2ZSBsb3cgbGV2ZWwpCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAwNiBNYXIgMjAwMzoKICAtIGZpeCBidWcgaW4gQk9PVFAgY29kZSAobXVzdCB1c2UgTmV0Q29weUlQKQogIC0gdXBkYXRlIG9mIENTQjIyNiBwb3J0CiAgLSBjbGVhciBCU1Mgc2VnbWVudCBvbiBYU2NhbGUKICAtIGFkZGVkIHN1cHBvcnQgZm9yIGkyY19pbml0X2JvYXJkKCkgZnVuY3Rpb24KICAtIHVwZGF0ZSB0byB0aGUgSW5ub2tvbSBwbGF0dGZvcm0KCiogRXh0ZW5kIHN1cHBvcnQgZm9yIHJlZHVuZGFuZCBlbnZpcm9ubWVudHMgZm9yIGNvbmZpZ3VyYXRpb25zIHdoZXJlCiAgZW52aXJvbm1lbnQgc2l6ZSA8IHNlY3RvciBzaXplCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTW90b3JvbGEgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMTkgRmViIDIwMDM6CiAgcGF0Y2hlcyBmb3IgdGhlIEludGVsIGx1YmJvY2sgYm9hcmQ6CiAgbWVtc2V0dXAuUyAtIGdlbmVyYWwgY2xlYW51cCAoYmFzZWQgb24gUm9iZXJ0J3MgY3NiMjI2IGNvZGUpCiAgZmxhc2guYyAtIG92ZXJoYXVsLCBhY3R1YWxseSB3b3JrcyBub3cKICBsdWJib2NrLmMgLSBmaXggaW5pdCBmdW5jcyB0byByZXR1cm4gcHJvcGVyIHZhbHVlCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNiBGZWIgMjAwMzoKICAtIEZpeGVkIG9mZiBieSBvbmUgaW4gUkZUQSBjYWxjdWxhdGlvbi4KICAtIE5vIG5lZWQgdG8gYWJvcnQgd2hlbiBMREYgaXMgbG93ZXIgdGhhbiB3ZSBjYW4gcHJvZ3JhbSBpdCdzIG9ubHkKICAgIG1pbmltdW0gdGltaW5nIHNvIGNsYW1wIGl0IHRvIHdoYXQgd2UgY2FuIGRvLgogIC0gVGFrZXMgZnVuY3Rpb24gcG9pbnRlciB0byBmdW5jdGlvbiBmb3IgcmVhZGluZyB0aGUgc3BkX252cmFtLiBVc2VmdWxsCiAgICBmb3IgZmFraW5nIGRhdGEgb3IgaGFyZGNvZGUgYSBtb2R1bGUgd2l0aG91dCB0aGUgbnZyYW0uCiAgLSBmaXggb3RoZXIgdXNlciBmb3IgYWJvdmUgY2hhbmdlCiAgLSBmaXggc29tZSBjb21tZW50cy4KCiogUGF0Y2hlcyBieSBCcmlhbiBXYWl0ZSwgMjYgRmViIDIwMDM6CiAgLSBmaXggcG9ydCBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgZm9yIGV2YjY0MjYwIGJvYXJkCiAgLSBmaXggUENJIHNjYW4KCiogUGF0Y2ggYnkgUmVpbmhhcmQgTWV5ZXIsIDEgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIEVNSyBUT1A4NjAgTW9kdWxlCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDAyIE1hciAyMDAzOgogIEFkZCBTUEQgRUVQUk9NIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMgYm9hcmQKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAyMSBKYW4gMjAwMzoKICAtIEFkZCBzdXBwb3J0IGZvciBJbm5va29tIGJvYXJkCiAgLSBEb24ndCBjb21wbGFpbiBpZiAiaW5zdGFsbCIgZmFpbHMKICAtIFJFQURNRSBjbGVhbnVwIChyZW1vdmUgZHVwbGljYXRlZCBsaW5lcykKICAtIFVwZGF0ZSBQWEEgaGVhZGVyIGZpbGVzCgoqIEFkZCBkb2N1bWVudGF0aW9uIGZvciBleGlzdGluZyBQT1NUIGNvZGUgKGRvYy9SRUFETUUuUE9TVCkKCiogUGF0Y2ggYnkgTGF1ZG5leSBSZW4sIDE1IEphbiAyMDAzOgogIEZpeCBoYW5kbGluZyBvZiByZWR1bmRhbmQgZW52aXJvbm1lbnQgaW4gInRvb2xzL2VudmNyYy5jIgoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAyOCBGZWIgMjAwMzoKICBBZGQgYmVkYnVnIHN1cHBvcnQgZm9yIDgyNHggc3lzdGVtcwoKKiBBZGQgc3VwcG9ydCBmb3IgMTYgTUIgZmxhc2ggY29uZmlndXJhdGlvbiBvZiBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IEVyd2luIFJvbCwgMjcgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJURU1TCgoqIEFkZCBpbWFnZSBpbmZvcm1hdGlvbiB0byBSRUFETUUKCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxOCBGZWIgMjAwMzoKICBDUENJSVNFUjQgY29uZmlndXJhdGlvbiB1cGRhdGVkLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE3IEZlYiAyMDAzOgogIEZpeGVkIGJ1ZyBpbiBleHQuIHNlcmlhbCBjbG9jayBzZXR1cCBvbiBQUEM0MDUgKHNpbmNlIFBQQzQ0MCBwb3J0KS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMyBGZWIgMjAwMzoKICBBZGQgInBjaWRlbGF5IiBlbnZpcm9ubWVudCB2YXJpYWJsZSAoaW4gbXMsIGVuYWJsZWQgdmlhCiAgQ09ORklHX1BDSV9CT09UREVMQVkpLgogIFBDSSBzcGVjIDIuMiBkZWZpbmVzLCB0aGF0IGEgcGNpIHRhcmdldCBoYXMgMl4yNSBwY2kgY2xvY2tzIGFmdGVyCiAgUlNUIyB0byByZXNwb25kIHRvIGNvbmZpZ3VyYXRpb24gY3ljbGVzICgzM01IeiAtPiAxcykuCgoqIEZpeCBkdWFsIFBDTUNJQSBzbG90IHN1cHBvcnQgKHdoZW4gcnVubmluZyB3aXRoIGp1c3Qgb25lCiAgc2xvdCBwb3B1bGF0ZWQpCgoqIEFkZCBWRkQgdHlwZSBkZXRlY3Rpb24gdG8gdHJhYiBib2FyZAoKKiBleHRlbmQgZHJpdmVycy9jczg5MDAuYyBkcml2ZXIgdG8gc3luY2hyb25pemUgIGV0aGFkZHIgIGVudmlyb25tZW50CiAgdmFyaWFibGUgd2l0aCB2YWx1ZSBpbiB0aGUgRUVQUk9NCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTAgRmViIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIDRNQiBhbmQgMTI4TUIgb25ib2FyZCBTRFJBTSAoY3B1L3BwYzR4eC9zZHJhbS5jKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzMyIDRLYyBDUFVzCgoqIEFkZCBzdXBwb3J0IGZvciBJTkNBLUlQIEJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K