PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIHNpbmNlIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDI1IE1hciAyMDAzOgogIC0gUENJNDA1IHVwZGF0ZS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAyMCBNYXIgMjAwMzoKICAtIENQQ0k0MDUyIHVwZGF0ZSAoc3VwcG9ydCBmb3IgcmV2aXNpb24gMykuCiAgLSBTZXQgZWRnZSBjb25kaXRpb25pbmcgY2lyY3VpdHJ5IG9uIFBQQzQwNUdQciBmb3IgY29tcGF0aWJpbGl0eQogICAgdG8gZXhpc3RpbmcgUFBDNDA1R1AgZGVzaWducy4KICAtIENsaXAgdWRpdiB0byA1IGJpdHMgb24gUFBDNDA1IChzZXJpYWwuYykuCgoqIEF2b2lkIGZsaWNrZXIgb24gdGhlIFRSQUIncyBWRkQgYnkgc3luY2hyb25pemluZyB0aGUgZW5hYmxlIHdpdGgKICB0aGUgSFNZTkMvVlNZTkMuIFJlcXVpcmVzIG5ldyBDUExEIGNvZGUgKFZlcnNpb24gMTAxIGZvciBSZXYuIDEwMAogIGJvYXJkcywgdmVyc2lvbiAxNTMgZm9yIFJldi4gMjAwIGJvYXJkcykuCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAxMiBNYXIgMjAwMzoKICBGaXggcmVsb2NhdGlvbiBwcm9ibGVtIG9mIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQgc3RyaW5nIHBvaW50ZXJzCiAgaW4gY29tbW9uL2NtZF9wY2kuYwoKKiBQYXRjaCBieSBLYWktVXdlIEJs9m0sIDEyIE1hciAyMDAzOgogIENsZWFudXAgJiBidWcgZml4ZXMgZm9yIEpGRlMyIGNvZGU6CiAgLSB0aGUgbWVtb3J5IG1hbmdlbWVudCB3YXMgYnJva2VuLiBJdCBjYXVzZWQgaGF2b2Mgb24gbWFsbG9jIGJ5CiAgICB3cml0aW5nIGJleW9uZCB0aGUgYmxvY2sgYm91bmRhcmllcy4KICAtIHRoZSBsZW5ndGggY2FsY3VsYXRpb24gZm9yIGZpbGVzIHdhcyB3cm9uZywgc29tZXRpbWVzIHJlc3VsdGluZwogICAgaW4gc2hvcnQgZmlsZSByZWFkcy4KICAtIGRhdGEgY29weWluZyBub3cgb3B0aW9uYWxseSB0YWtlcyBmcmFnbWVudCB2ZXJzaW9uIG51bWJlcnMgaW50bwogICAgYWNjb3VudCwgdG8gYXZvaWQgY29weWluZyBmcm9tIG9sZGVyIGRhdGEuCiAgU2VlIGRvYy9SRUFETUUuSkZGUzIgZm9yIGRldGFpbHMuCgoqIFBhdGNoIGJ5IEpvc2VmIFdhZ25lciwgMTIgTWFyIDIwMDM6CiAgLSAxNi8zMiBNQiBhbmQgNTAvODAgTUh6IHN1cHBvcnQgd2l0aCBhdXRvLWRldGVjdGlvbiBmb3IgSVA4NjAKICAtIEVUSDA1IGFuZCBCRURCVUcgc3VwcG9ydCBmb3IgQ1U4MjQKICAtIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3JvU3lzIENQQzQ1CiAgLSBuZXcgQk9PVFJPTS9GTEFTSDAgYW5kIERPQyBiYXNlIGZvciBQTTgyNgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEyIE1hciAyMDAzOgogIEZpeCB0aGUgY2hwYXJ0IGNvbW1hbmQgb24gaW5ub2tvbSBib2FyZAoKKiBOYW1lIGNsZWFudXA6CiAgbXYgaW5jbHVkZS9hc20taTM4Ni9wcGNib290LWkzODYuaCBpbmNsdWRlL2FzbS1pMzg2L3UtYm9vdC1pMzg2LmgKICBzL1BQQ0Jvb3QvVS1Cb290LyBpbiBzb21lIGZpbGVzCiAgcy9wSW1hZ2UvdUltYWdlLyAgaW4gc29tZSBmaWxlcwoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxNSBKYW4gMjAwMzoKICBGaXggJycgY29tbWFuZCBsaW5lIHF1b3RpbmcKCiogUGF0Y2ggYnkgVGhlIExFT1ggdGVhbSwgMTkgSmFuIDIwMDM6CiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIEVMUFQ4NjAgYm9hcmQKICAtIGFkZCBzdXBwb3J0IGZvciBEYWxsYXMgZHMxNjR4IFJUQwoKKiBQYXRjaGVzIGJ5IERhdmlkIE38bGxlciwgMzEgSmFuIDIwMDM6CiAgLSBtaW5pbWFsIHNldHVwIGZvciBDYXJkQnVzIGJyaWRnZXMKICAtIGFkZCBFRVBST00gcmVhZC93cml0ZSBzdXBwb3J0IGluIHRoZSBDUzg5MDAgZHJpdmVyCiAgLSBhZGQgc3VwcG9ydCBmb3IgdGhlIGJ1aWx0aW4gSTJDIGNvbnRyb2xsZXIgaW4gdGhlIFNhbXN1bmcgczNjMjR4MCBjaGlwcwogIC0gYWRkIHN1cHBvcnQgZm9yIE1QTCdzIFZDTUE5IChTYW1zdW5nIHMzYzI0MTAgYmFzZWQpIGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZXZlbiBTY2hvbHosIDA0IEZlYiAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBSVEMgRFMxMzA3CgoqIFBhdGNoIGJ5IFJlaW5oYXJkIE1leWVyLCA1IEZlYiAyMDAzOgogIGZpeCBQTFBSQ1IvU0NDUiBpbml0IHNlcXVlbmNlIG9uIDh4eCB0byBhbGxvdyBmb3IKICBjaGFuZ2VzIG9mIEVCREYgYnkgc29mdHdhcmUKCiogUGF0Y2ggYnkgVmxhZGltaXIgR3VyZXZpY2gsIDA3IEZlYiAyMDAzOgogICJBUEktY29tcGF0aWJpbGl0eSBwYXRjaCIgZm9yIDR4eCBJMkMgZHJpdmVyCgoqIFRSQUIgZml4ZXMgLyBleHRlbnNpb25zOgogIC0gUmVzdG9yZSBWRkQgYnJpZ2h0bmVzcyBhcyBzYXZlZCBpbiBlbnZpcm9ubWVudAogIC0gYWRkIHN1cHBvcnQgZm9yIEZHdWppdHN1IGZsYXNoZXMKICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgogIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCiAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgogIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQoKKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdwogIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgogIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgogIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQogICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCiAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKICAtIGZpeCBzb21lIGNvbW1lbnRzLgoKKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgc2NhbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6CiAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgogIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwogIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQogIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQoKKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CiAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgogIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCgoqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKCiogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgogIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6CiAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgogIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKICBDT05GSUdfUENJX0JPT1RERUxBWSkuCiAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KCiogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKICBzbG90IHBvcHVsYXRlZCkKCiogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCgoqIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZSAgZXRoYWRkciAgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgZHVhbCBldGhlcm5ldCBzdXBwb3J0IG9uIFBNODI2CgoqIEFkZCBzdXBwb3J0IGZvciBMWFQ5NzEgUEhZIG9uIFBNODI2CgoqIFBhdGNoIGJ5IFRvcmQgQW5kZXJzc29uLCAxNiBKYW4gMjAwMzoKICBGaXggZmxhc2ggc2VjdG9yIGNvdW50IGZvciBUUU04eHhMCgoqIEZpeCBJMkMgRUVQUk9NIHByb2JsZW0gb24gSUNVODYyIGJvYXJkICh3b3VsZCBvbmx5IHdyaXRlIHRoZSBmaXJzdAogIDE2IGJ5dGVzIG91dCBvZiBlYWNoIDMyIGJ5dGUgYmxvY2spCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMToKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgVjM3IGJvYXJkCiAgKHBhdGNoIGJ5IErzbiBCZW5lZGlrdHNzb24sIDExIERlYyAyMDAyKQoKKiBVcGRhdGUgYmF1ZHJhdGUgaW4gYmRfaW5mbyB3aGVuIGl0IGdldHMgY2hhbmdlZAoKKiBBZGQgd2F0Y2hkb2cgdHJpZ2dlciBwb2ludHMgd2hpbGUgd2FpdGluZyBmb3Igc2VyaWFsIHBvcnQKICAoc28gZmFyIG9ubHkgOHh4IC0tIG5lZWRlZCBvbiBMV01PTiB3aXRoIDEwMG1zIHdhdGNoZG9nKQoKKiBJbXByb3ZlIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoZmlndXJhdGlvbiBvZiB0aGUgdXRpbGl0eSwgdXNpbmcgYSBjb25maWcgZmlsZSkKCiogQWRkIHNpbmdsZSBxdW90ZSBzdXBwb3J0IGZvciAob2xkKSBjb21tYW5kIGxpbmUgcGFyc2VyCgoqIFN3aXRjaCBMV01PTiBib2FyZCBkZWZhdWx0IGNvbmZpZyBmcm9tIEZSQU0gdG8gRUVQUk9NOwogIGluIFBPU1QsIEVFUFJPTSBzaG93cyB1cCBvbiA4IGFkZHJlc3NlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4yLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogVXNlIDEtYnl0ZS1yZWFkIGluc3RlYWQgb2YgLXdyaXRlIGZvciBpcHJvYmUoKSBmdW5jdGlvbgogIEFkZCBpMmMgY29tbWFuZHMgdG8gUE04MjYgY29uZmlnCgoqIGV4dGVuZCBJMkMgUE9TVCBjb2RlOiBjaGVjayBmb3IgbGlzdCBvbiBrbm93biBhZGRyZXNzZXMKCiogSW1wcm92ZSBsb2cgYnVmZmVyIGNvZGU7IHVzZSAibG9nbGV2ZWwiIHRvIGRlY2lkZSB3aGljaCBtZXNzYWdlcwogIHRvIGxvZyBvbiB0aGUgY29uc29sZSwgdG9vIChsaWtlIGluIExpbnV4KTsgZ2V0IHJpZCBvZiAibG9nc3RhcnQiCgoqIEFkZCBjb21tYW5kIGxpbmUgdG9vbCB0byBhY2Nlc3MgdGhlIFUtQm9vdCdzIGVudmlyb25tZW50CiAgKGJvYXJkLXNwZWNpZmljIGZvciBUUkFCIG5vdywgdG8gYmUgZml4ZWQgbGF0ZXIpCgoqIFBhdGNoIGJ5IEhhbnMtSm9lcmcgRnJpZWRlbiwgMDYgRGVjIDIwMDIKICBGaXggbWlzYyBwcm9ibGVtcyB3aXRoIEFtaWdhT25lIHN1cHBvcnQKCiogUGF0Y2ggYnkgQ2hyaXMgSGFsbGluYW4sIDMgRGVjIDIwMDI6CiAgbWlub3IgY2xlYW51cCB0byB0aGUgTVBDODI0NSBFUElDIGRyaXZlcgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3IgZXh0ZXJuYWwgKFNJVSkgaW50ZXJydXB0cyBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDI4IE5vdiAyMDAyCiAgRml4IG5lc3RlZCBzeXNjYWxscyBidWcgaW4gc3RhbmRhbG9uZSBhcHBsaWNhdGlvbnMKCiogUGF0Y2ggYnkgRGF2aWQgTfxsbGVyLCAyNyBOb3YgMjAwMjoKICBmaXggb3V0cHV0IG9mICJwY2lpbmZvIiBjb21tYW5kIGZvciBDYXJkQnVzIGJyaWRnZSBkZXZpY2VzLgoKKiBGaXggYnVnIGluIFRRTTgyNjAgYm9hcmQgZGV0ZWN0aW9uIC0gYm9hcmRzIGdvdCBzdHVjayB3aGVuIGJvYXJkIElECiAgd2FzIG5vdCByZWFkYWJsZQoKKiBBZGQgTEVEIGluZGljYXRpb24gZm9yIElERSBhY3Rpdml0eSBvbiBLVVA0SyBib2FyZAoKKiBGaXggc3RhcnR1cCBwcm9ibGVtcyB3aXRoIFZGRCBkaXNwbGF5IG9uIFRSQUIKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMjAgTm92IDIwMDIKICBBZGQgZHJpdmVyIGZvciBFcHNvbiBTRUQxMzgwNiBncmFwaGljIGNvbnRyb2xsZXIuCiAgQWRkIHN1cHBvcnQgZm9yIEJNUCBsb2dvcyBpbiBjZmJfY29uc29sZSBkcml2ZXIuCgoqIEFkZGVkIHN1cHBvcnQgZm9yIGJvdGggUENNQ0lBIHNsb3RzIChhdCB0aGUgc2FtZSB0aW1lISkgb24gTVBDOHh4CgoqIFBhdGNoIGJ5IFJvZCBCb3ljZSwgMjEgTm92IDIwMDI6CiAgZml4IFBDTUNJQSBvbiBNQlg4eHggYm9hcmQKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCAsIDIxIE5vdiAyMDAyCiAgQWRkIENGR19DUE1fUE9TVF9XT1JEX0FERFIgdG8gbWFrZSB0aGUgb2Zmc2V0IG9mIHRoZQogIGJvb3Rtb2RlIHdvcmQgaW4gRFBSQU0gY29uZmlndXJhYmxlCgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMTggTm92IDIwMDI6CiAgRml4ZXMgZm9yIHg4NiBwb3J0IChtb3N0bHkgc3RyaW5ncyBpc3N1ZXMpCgoqIFBhdGNoIGJ5IEtlbiBDaG91LCAxOCBOb3YgMjAwMjoKICBGaXggZm9yIG5hdHNlbWkgTklDIGNhcmRzIChEUDgzODE1KQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxOSBOb3YgMjAwMjoKICBmaXggYSBidWcgZm9yIHRoZSBNSUkgY29uZmlndXJhdGlvbiwgYW5kIHNvbWUgd2FybmluZ3MKCiogUGF0Y2ggYnkgVGhvbWFzIEZyaWVkZW4sIDEzIE5vdiAyMDAyOgogIEFkZCBjb2RlIGZvciBBbWlnYU9uZSBib2FyZAogIChwcmVsaW1pbmFyeSBtZXJnZSB0byBVLUJvb3QsIHN0aWxsIFdJUCkKCiogUGF0Y2ggYnkgSm9uIERpZWtlbWEsIDEyIE5vdiAyMDAyOgogIC0gQWRkaW5nIFVSTCBmb3IgSUVFRSBPVUkgbG9va3VwCiAgLSBNYWtpbmcgdGhlIGF1dG9ib290ICNkZWZpbmVzIGRlcGVuZGVudCBvbiBDT05GSUdfQVVUT0JPT1RfS0VZRUQKICAgIGJlaW5nIGRlZmluZWQuCiAgLSBJbiB0aGUgQ09ORklHX0VYVFJBX0VOVl9TRVRUSU5HUyAjZGVmaW5lLCB0aGUgcm9vdC1vbi1pbml0cmQgYW5kCiAgICByb290LW9uLW5mcyBtYWNyb3MgYXJlIGRlc2lnbmVkIHRvIHN3aXRjaCBob3cgdGhlIGRlZmF1bHQgYm9vdAogICAgbWV0aG9kIGdldHMgZGVmaW5lZC4KCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxMyBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgaTM4NiBhcmNoaXRlY3R1cmUgYW5kIEFNRCBTQzUyMCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAxMiBOb3YgMjAwMjoKICBBZGQgc3VwcG9ydCBmb3IgRE9TIGZpbGVzeXN0ZW0gYW5kIGJvb3RpbmcgZnJvbSBET1MgZmxvcHB5IGRpc2sKCiogUGF0Y2ggYnkgSmltIFNhbmRveiwgMDcgTm92IDIwMDI6CiAgSW5jcmVhc2UgbnVtYmVyIG9mIG5ldHdvcmsgUlggYnVmZmVycyAoUEtUQlVGU1JYIGluCiAgImluY2x1ZGUvbmV0LmgiKSBmb3IgRUVQUk8xMDAgYmFzZWQgYm9hcmRzIChlc3BlY2lhbGx5IFNQODI0MCkKICB3aGljaCBzaG93ZWQgIlJlY2VpdmVyIGlzIG5vdCByZWFkeSIgZXJyb3JzIHdoZW4gVS1Cb290IHdhcwogIHByb2Nlc3NpbmcgdGhlIHJlY2VpdmUgYnVmZmVycyBzbG93ZXIgdGhhbiB0aGUgbmV0d29yayBjb250cm9sbGVyCiAgd2FzIGZpbGxpbmcgdGhlbS4KCiogUGF0Y2ggYnkgQW5kcmVhcyBPYmVycml0dGVyLCAwOSBOb3YgMjAwMjoKICBDaGFuZ2UgYmVoYXZpb3VyIG9mIE5ldExvb3AoKTogcmV0dXJuIC0xIGZvciBlcnJvcnMsIGZpbGVzaXplCiAgb3RoZXJ3aXNlOyByZXR1cm4gY29kZSAwIGlzIHZhbGlkIGFuIG1lYW5zIG5vIGZpbGUgbG9hZGVkIC0gaW4gdGhpcwogIGNhc2UgdGhlIGVudmlyb25tZW50IHN0aWxsIGdldHMgdXBkYXRlZCEKCiogUGF0Y2hlcyBieSBKb24gRGlla2VtYSwgOSBOb3YgMjAwMjoKICAtIGltcHJvdmUgQURDL0RBQyBjbG9ja2luZyBvbiB0aGUgU0FDU25nIGJvYXJkIHRvIGFsaWduCiAgICB0aGUgZmFpbGluZyBlZGdlcyBvZiBMUkNMSyBhbmQgU0NMSwogIC0gc2JjODI2MCBjb25maWd1cmF0aW9uIHR3ZWFrcwogIC0gYWRkIHN0YXR1cyBMRUQgc3VwcG9ydCBmb3IgODJ4eCBzeXN0ZW1zCiAgLSB3aXJlIHNzcGkvc3NwbyBjb21tYW5kcyBpbnRvIGNvbW1hbmQgaGFuZGxlcjsgaW1wcm92ZWQgZXJyb3IKICAgIGhhbmRsZXJpbmcKICAtIGFkZCB0aW1lc3RhbXAgc3VwcG9ydCBhbmQgYWx0ZXJuYXRlIG1lbW9yeSB0ZXN0IHRvIHRoZQogICAgU0FDU25nIGNvbmZpZ3VyYXRpb24KCiogUGF0Y2ggYnkgVmluY2UgSHVzb3Zza3ksIDcgTm92IDIwMDI6CiAgQWRkICItbiIgdG8gbGlua2VyIG9wdGlvbnMgdG8gZ2V0IHJpZCBvZiAiTm90IGVub3VnaCByb29tIGZvcgogIHByb2dyYW0gaGVhZGVycyIgcHJvYmxlbQoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDA1IE5vdiAyMDAyCiAgUmVuYW1lIENPTkZJR19QTExfSU5QVVRfRlJFUSB0byBDT05GSUdfU1lTX0NMS19GUkVRCiAgc28gd2UgY2FuIHVzZSBhbiBhbHJlYWR5IGV4aXN0aW5nIG5hbWUKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBIYXJkd2FyZSByZWxhdGllZCBpbXByb3ZtZW50cyBpbiBGREMgYm9vdCBjb2RlCgoqIFBhdGNoIGJ5IEhvbGdlciBTY2h1cmlnLCA1IE5vdiAyMDAyOgogIE1ha2UgdGhlIFBYQSByZWFsbHkgY2hhbmdlIGl0J3MgZnJlcXVlbmN5CgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDA1IE5vdiAyMDAyCiAgQWRkIHN1cHBvcnQgZm9yIHNsYXZlIHNlcmlhbCBTcGFydGFuIDIgRlBHQXMKCiogRml4IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IChNQUMgIGFkZHJlc3MpICBpbiAgOHh4ICBTQ0MvRkVDICBldGhlcm5ldAogIGRyaXZlcnMKCiogQWRkIHN1cHBvcnQgZm9yIGxvZyBidWZmZXIgd2hpY2ggY2FuIGJlIHBhc3NlZCB0byBMaW51eCBrZXJuZWwncwogIHN5c2xvZyBtZWNoYW5pc207IHVzZWQgZXNwZWNpYWxseSBmb3IgUE9TVCByZXN1bHRzLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAzMSBPY3QgMjAwMjoKICBBZGQgaW5pdGlhbCBzdXBwb3J0IGZvciBrdXA0ayBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDA0IE5vdiAyMDAyOgogIC0gdXNlIHdhdGNoZG9nIHRvIHJlc2V0IFBYQTI1MCBzeXN0ZW1zCiAgLSBhZGRlZCBwcm9ncmVzcyBjYWxsYmFja3MgdG8gKHNvbWUgb2YgdGhlKSBBUk0gY29kZQogIC0gdXBkYXRlIGZvciBDb2dlbnQgQ1NCMjI2IGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBGUFM4NjAgYm9hcmQKCiogUGF0Y2ggYnkgR3VpbGxhdW1lIEFsZXhhbmRyZSwsIDA0IE5vdiAyMDAyOgogIEltcHJvdmUgUENJIGFjY2VzcyBvbiAzMi1iaXRzIENvbXBhY3QgUENJIGJ1cwoKKiBGaXggbWRlbGF5KCkgb24gVFJBQiAtIHRoaXMgd2FzIHN0aWxsIHRoZSBkZWJ1Z2dpbmcgdmVyc2lvbiB3aXRoCiAgc2Vjb25kcyBpbnN0ZWFkIG9mIG1zLgoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDEgTm92IDIwMDI6CiAgWFNjYWxlIHJlbGF0ZWQgY2xlYW51cCAoYWZmZWN0cyBhbGwgQVJNIGJvYXJkcykKCiogQ2xlYW51cCBvZiBuYW1lcyBhbmQgUkVBRE1FLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpOb3RlcyBmb3IgVS1Cb290IDAuMS4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpUaGlzIGlzIHRoZSBpbml0aWFsIHZlcnNpb24gb2YgIkRhcyBVLUJvb3QiLCB0aGUgVW5pdmVyc2FsIEJvb3QgTG9hZGVyLgoKSXQgaXMgYmFzZWQgb24gdmVyc2lvbiAyLjAuMCAodGhlICJIYWxsb3dlZW4gUmVsZWFzZSIpIG9mIFBQQ0Jvb3QuCkZvciBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGlzdG9yeSBvZiB0aGUgcHJvamVjdCBwbGVhc2Ugc2VlIHRoZQpQUENCb290IHByb2plY3QgcGFnZSBhdCBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL3BwY2Jvb3QKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K