PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC40LjU6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgU2NvdHQgTWNOdXR0LCAyMSBKdWwgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgTHludXhXb3JrcyBLZXJuZWwgRG93bmxvYWRhYmxlIEltYWdlcyAoS0RJcykuCiAgQm90aCBMeW54T1MgYW5kIEJsdWVDYXQgbGludXggS0RJcyBhcmUgc3VwcG9ydGVkLgoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAyNSBKdWwgMjAwMzoKICB1c2UgbW9yZSByZWxpYWJsZSByZXNldCBmb3IgT01BUC85MjVUCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDI1IEp1bCAyMDAzOgogIGZpeCB0eXBvIGluIG1wYzh4eC5oCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDI0IEp1bCAyMDAzOgogIEZpeGVzIGZvciBjbWRfbmFuZC5jOgogIC0gRml4ZWQgbnVsbCBkZXJlZmVyZWNlIHdoaWNoIGNvdWxkIHJlc3VsdCBpbiBpbmNvcnJlY3QgRUNDIHZhbHVlcy4KICAtIEFkZGVkIHN1cHBvcnQgZm9yIGRldmljZXMgd2l0aCBubyBSZWFkeS9CdXN5IHNpZ25hbCBob29rZWQgdXAuCiAgLSBBZGRlZCBPTUFQMTUxMCByZWFkL3dyaXRlIHByb3RlY3QgaGFuZGxpbmcuCiAgLSBGaXhlZCBuYW5kLmgncyBFQ0NQT1MuIEEgY29uZmxpY3QgZXhpc3RlZCB3aXRoIFBPUzUgYW5kIGJhZGJsb2NrCiAgICBmb3Igbm9uLUpGRlMyLgogIC0gU3dpdGNoZWQgZGVmYXVsdCBFQ0MgdG8gYmUgSkZGUzIuCgoqIEFsbG93IGNyYzMyIHRvIGJlIHVzZWQgYXQgYWRkcmVzcyAweDAwMAoKKiBQcm92aWRlIGNvbnNpc3RlbnQgaW50ZXJmYWNlIHRvIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zIHRvIGFjY2VzcwogIHRoZSAnZ2xvYmFsX2RhdGEnIHN0cnVjdHVyZQogIFByb3ZpZGUgYSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgbW9yZSB1c2VmdWwgdG8gdXNlcnMvZGV2ZWxvcGVycy4KCiogTWFrZSBJY2VDdWJlIE1HVDUxMDAgRkVDIGRyaXZlciB3b3JrCgoqIEltcGxlbWVudCBuZXcgbWVjaGFuaXNtIHRvIGV4cG9ydCBVLUJvb3QncyBmdW5jdGlvbnMgdG8gc3RhbmRhbG9uZQogIGFwcGxpY2F0aW9uczogaW5zdGVhZCBvZiB1c2luZyAoUFBDLXNwZWNpZmljKSBzeXN0ZW0gY2FsbHMgd2Ugbm93CiAgdXNlIGEganVtcCB0YWJsZTsgcGxlYXNlIHNlZSBkb2MvUkVBRE1FLnN0YW5kYWxvbmUgZm9yIGRldGFpbHMKCiogUGF0Y2ggYnkgRGF2ZSBXZXN0d29vZCwgMjQgSnVsIDIwMDM6CiAgYWRkZWQgc3VwcG9ydCBmb3IgVW5pdHkgT1MgKGEgcHJvcHJpZXRhcnkgT1MpCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDIzIEp1bCAyMDAzOgogIGFkZCAiaW1scyIgY29tbWFuZCB0byBwcmludCBmbGFzaCB0YWJsZSBvZiBjb250ZW50cwoKKiBGaXggY29sZCBib290IGRldGVjdGlvbiBmb3IgbG9nIGJ1ZmZlciByZXNldAoKKiBSZXR1cm4gZXJyb3IgZm9yIGludmFsaWQgbGVuZ3RoIHNwZWNpZmllcnMgd2l0aCAiY3AuWCIgZXRjLgoKKiBGaXggc3RhcnR1cCBwcm9ibGVtIG9uIE1JUFMKCiogQWxsb3cgZm9yIENPTkZJR19TUExBU0hfU0NSRUVOIGV2ZW4gd2hlbiBubyBleHBsaWNpdAogIGJpdG1hcCBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQKCiogUGF0Y2ggYnkgQmlsbCBIYXJnZW4sIDE4IEp1bCAyMDAzOgogIC0gZml4IGVuZGluYW5lc3MgcHJvYmxlbSBpbiBjcHUvbXBjODI0eC9kcml2ZXJzL2kyYy9pMmMxLmMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDE4IEp1bCAyMDAzOgogIC0gZml4IG1lbW9yeSBjb25maWd1cmF0aW9uIGZvciBNSVA0MDVUCiAgLSBmaXggcHJpbnRvdXQgb2YgYmF1ZHJhdGUgZm9yICJsb2FkYiA8bG9hZGFkZHI+IDxiYXVkcmF0ZT4iCgoqIENsZWFudXAgb2YgVFFNODJ4eCBjb25maWd1cmF0aW9uczsgdXNlICJvZmZpY2lhbCIgYm9hcmQgdHlwZXMKICB0byBtYWtlIHNlbGVjdGlvbiBlYXNpZXIuCgoqIFBhdGNoIGJ5IE1hcnRpbiBLcmF1c2UsIDE3IEp1bCAyMDAzOgogIGFkZCBkZWxheSB0byBnZXQgSTJDIHdvcmtpbmcgd2l0aCAiaW1tIiBjb21tYW5kIGFuZCBzM2MyNHgwX2kyYy5jCgoqIFBhdGNoIGJ5IFJpY2hhcmQgV29vZHJ1ZmYsIDE3IEp1bHkgMDM6CiAgLSBGaXhlZCBidWcgaW4gT01BUDE1MTAgYmF1ZCByYXRlIGRpdmlzb3Igc2V0dGluZ3MuIAoKKiBQYXRjaCBieSBOeWUgTGl1LCAxNiBKdWx5IDIwMDM6CiAgTVBDODYwRkFEUyBmaXhlczoKICAtIGFkZCBNUEM4NnhBRFMgc3VwcG9ydCAodXNlcyBNUEM4NnhBRFMuaCkKICAtIGFkZCA4NjZQL1QgY29yZSBzdXBwb3J0IChhbHNvIE1QQzg1OVQvTVBDODU5RFNML01QQzg1MlQpCiAgICBvIFBMUFJDUiBjaGFuZ2VzCiAgICBvIEJSRyBjaGFuZ2VzIChFWFRBTC9YVEFMIHJlc3RyaWN0ZWQgdG8gMTBNSHopCiAgICBvIGRvbid0IHRydXN0IGdjbGsoKSBzb2Z0d2FyZSBtZWFzdXJlbWVudCBieSBkZWZhdWx0LCBkZXBlbmQgb24KICAgICAgQ09ORklHXzh4eF9HQ0xLX0ZSRVEKICAtIGFkZCBEUkFNIFNJTU0gbm90IGluc3RhbGxlZCBkZXRlY3Rpb24KICAtIHVzZSBtb3JlICJjb3JyZWN0IiBTRFJBTSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZQogIC0gYWxsb3cgZGlmZmVyZW50IFNEUkFNIHNpemVzICg4eHhBRFMgaGFzIDhNKQogIC0gZGVmYXVsdCBERVIgaXMgMAogIC0gcmVtb3ZlIHVudXNlZCBNQU1SIGRlZmluZXMgZnJvbSBGQURTODYwVC5oIChhbGwgZG9uZSBpbiBmYWRzLmMpCiAgLSByZW5hbWUgTUFNUi9NQk1SIGRlZmluZXMgdG8gYmUgbW9yZSBjb25zaXN0ZW50LiBTaG91bGQgZXZlbnR1YWxseQogICAgYmUgbWVyZ2VkIGludG8gTXhNUiB0byBiZXR0ZXIgcmVmbGVjdCB0aGUgUG93ZXJRVUlDQyBkYXRhc2hlZXQuCgoqIFBhdGNoIGJ5IFl1bGkgQmFyY29oZW4sIDE2IEp1bCAyMDAzOgogIHN1cHBvcnQgbmV3IE1vdG9yb2xhIFBRMkZBRFMtWlUgZXZhbHVhdGlvbiBib2FyZCB3aGljaCByZXBsYWNlZAogIE1QQzgyNjBBRFMgYW5kIE1QQzgyNjZBRFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC40Ogo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBJY2VDdWJlIGJvYXJkICh3aXRoIE1HVDUxMDAgYW5kIE1QQzUyMDAgQ1BVcykKCiogQWRkIHN1cHBvcnQgZm9yIE1HVDUxMDAgYW5kIE1QQzUyMDAgcHJvY2Vzc29ycwoKKiBQYXRjaCBieSBMdXR6IERlbm5pZywgMTUgSnVsIDIwMDM6CiAgdXBkYXRlIGZvciBSMzYwTVBJIGJvYXJkCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMzoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBQYXRjaGVzIGJ5IEtzaGl0aWosIDA0IEp1bCAyMDAzCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBhcm05MjV0IGNwdSBjb3JlCiAgLSBhZGRlZCBzdXBwb3J0IGZvciBUSSBPTUFQIDE1MTAgSW5ub3ZhdG9yIEJvYXJkCgoqIFBhdGNoZXMgYnkgTWFydGluIEtyYXVzZSwgMTQgSnVsIDIwMDM6CiAgLSBhZGQgSTJDIHN1cHBvcnQgZm9yIHMzYzI0MDAgc3lzdGVtcyAodHJhYiBib2FyZCkKICAtIChyZS0pIGFkZCAicGluZyIgdG8gY29tbWFuZCB0YWJsZQoKKiBGaXggaGFuZGxpbmcgb2YgInNsb3ciIFBPU1Qgcm91dGluZXMKCiogUGF0Y2hlcyBieSBZdWxpIEJhcmNvaGVuLCAxMyBKdWwgMjAwMzoKICAtIENvcnJlY3QgZmxhc2ggYW5kIEpGRlMyIHN1cHBvcnQgZm9yIE1QQzgyNjBBRFMKICAtIGZpeCBQVlIgdmFsdWVzIGFuZCBjbG9jayBnZW5lcmF0aW9uIGZvciBQb3dlclFVSUNDIElJIGZhbWlseQogICAgKDgyNzAvODI3NS84MjgwKQoKKiBQYXRjaCBieSBCZXJuaGFyZCBLdWhuLCAwOCBKdWwgMjAwMzoKICAtIGFkZCBzdXBwb3J0IGZvciBNNjhLIHRhcmdldHMKCiogUGF0Y2ggYnkgS2VuIENob3UsIDMgSnVsOgogIC0gRml4IFBDSSBjb25maWcgdGFibGUgZm9yIEEzMDAwCiAgLSBGaXggaW9iYXNlIGZvciBuYXRzZW1pLmMKICAgIChQQ0lfQkFTRV9BRERSRVNTXzAgaXMgdGhlIElPIGJhc2UgcmVnaXN0ZXIgZm9yIERQODM4MTUpCgoqIEFsbG93IHRvIGVuYWJsZSAic2xvdyIgUE9TVCByb3V0aW5lcyBieSBrZXkgcHJlc3Mgb24gcG93ZXItb24KKiBGaXggdGVtcGVyYXR1cmUgZGVwZW5kZW5kIHN3aXRjaGluZyBvZiBMQ0QgYmFja2xpZ2h0IG9uIExXTU9OCiogVHdlYWsgb3V0cHV0IGZvcm1hdCBmb3IgTFdNT04KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMSBKdWwgMjAwMzoKICAtIEZpeCBidWcgaW4gQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUuCiAgLSBBUjQwNSBjb25maWcgdXBkYXRlZC4KICAtIE9DUlRDL09SU0c6IGJzcCBjb21tYW5kIGFkZGVkLgogIC0gQVNINDA1IGJzcCB1cGRhdGUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjQuMjoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBBZGQgc3VwcG9ydCBmb3IgTlNDVSBib2FyZAoKKiBBZGQgc3VwcG9ydCBmb3IgVFFNODIzTSwgVFFNODUwTSwgVFFNODU1TSBhbmQgVFFNODYwTSBtb2R1bGVzCgoqIEFkZCBzdXBwb3J0IGZvciBBbTI5TFYxNjBNTCwgQW0yOUxWMzIwTUwsIGFuZCBBbTI5TFY2NDBNTAogIG1pcnJvciBiaXQgZmxhc2ggb24gVFFNOHh4TSBtb2R1bGVzCgoqIFBhdGNoIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAzMCBKdW4gMjAwMzoKICBnZXQgcmlkIG9mIE1LX0NNRF9FTlRSWSBtYWNybzsgdXBkYXRlIGRvYy9SRUFETUUuY29tbWFuZAoKKiBQYXRjaCBieSBTZWIgSmFtZXMsIDMwIEp1biAyMDAzOgogIEltcHJvdmUgZG9jdW1lbnRhdGlvbiBvZiBJMkMgY29uZmlndXJhdGlvbiBpbiBSRUFETUUKCiogRml4IHByb2JsZW1zIHdpdGggcHJldmlvdXMgbG9nIGJ1ZmZlciAiZml4ZXMiCgoqIEZpeCBtaW5vciBoZWxwIHRleHQgaXNzdWVzCgoqICJsb2cgYXBwZW5kIiBkaWQgbm90IGFwcGVuZCBhIG5ld2xpbmUKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEZpeCBzb21lIG1pc3NpbmcgY29tbWFuZHMsIGNsZWFudXAgaGVhZGVyIGZpbGVzCiAgKGF1dG9zY3JpcHQsIGJtcCwgYnNwLCBmYXQsIG1tYywgbmFuZCwgcG9ydGlvLCAuLi4pCgoqIFJld3JpdGUgY29tbWFuZCBsb29rdXAgYW5kIGhlbHAgY29tbWFuZCAoZml4IHByb2JsZW1zIHdpdGggYnViYmxlCiAgc29ydCB3aGVuIHNvcnRpbmcgY29tbWFuZCBuYW1lIGxpc3QpLiBNaW5vciBjbGVhbnVwIGhlcmUgYW5kIHRoZXJlLgoKKiBNZXJnZSBmcm9tICJzdGFibGUgYnJhbmNoIiwgdGFnIExBQkVMXzIwMDNfMDZfMjhfMTgwMC1zdGFibGU6CiAgLSBBbGxvdyB0byBjYWxsIHN5c21vbiBmdW5jdGlvbiBpbnRlcmFjdGl2ZWx5CiAgLSBQSUMgb24gTFdNT04gYm9hcmQgbmVlZHMgZGVsYXkgYWZ0ZXIgcG93ZXItb24KICAtIEFkZCBtaXNzaW5nIFJTUiBkZWZpbml0aW9ucyBmb3IgTVBDOHh4CiAgLSBJbXByb3ZlIGxvZyBidWZmZXIgaGFuZGxpbmc6IGd1YXJhbnRlZSBjbGVhbiByZXNldCBhZnRlciBwb3dlci1vbgogIC0gQWRkIHN1cHBvcnQgZm9yIEVYQklUR0VOIGJvYXJkCiAgLSBBZGQgc3VwcG9ydCBmb3IgU0w4MjQ1IGJvYXJkCgoqIENvZGUgY2xlYW51cDoKICAtIHJlbW92ZSB0cmFpbGluZyB3aGl0ZSBzcGFjZSwgdHJhaWxpbmcgZW1wdHkgbGluZXMsIEMrKyBjb21tZW50cywgZXRjLgogIC0gc3BsaXQgY21kX2Jvb3QuYyAoc2VwYXJhdGUgY21kX2JkaW5mby5jIGFuZCBjbWRfbG9hZC5jKQoKKiBQYXRjaGVzIGJ5IEtlbm5ldGggSm9oYW5zc29uLCAyNSBKdW4gMjAwMzoKICAtIG1ham9yIHJld29yayBvZiBjb21tYW5kIHN0cnVjdHVyZQogICAgKHdvcmsgZG9uZSBtb3N0bHkgYnkgTWljaGFsIENlbmRyb3dza2kgYW5kIEpvYWtpbSBLcmlzdGlhbnNlbikKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuNC4wOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAyNiBKdW4gMjAwMzoKICAtIGNzYjIyNiBjb25maWd1cmF0aW9uIHVwZGF0ZWQKICAtIGNyZWRpdHMgZm9yIGxvZ29kbCBwb3J0IHVwZGF0ZWQKICAtIGlubm9rb20gY29uZmlndXJhdGlvbiB1cGRhdGVkCiAgLSBsb2dvZGwgdHJlZSB1cGRhdGUsIHN0aWxsIHdpdGggY29kaW5nIHN0eWxlIGluY29uc2lzdGVuY2llcwogIC0gYWRkZWQgT0NNIGZvciBwcGM0MDUgd2FybmluZyB0byBSRUFETUUKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDI1IEp1biAyMDAzOgogIHVwZGF0ZSBOZXRWaWEgd2l0aCBWMiBib2FyZCBzdXBwb3J0CgoqIEhlYWRlciBmaWxlIGNsZWFudXAgZm9yIEFSTQoKKiBQYXRjaCBieSBNdXJyYXkgSmVuc2VuLCAyNCBKdW4gMjAwMzoKICAtIG1ha2Ugc3VyZSB0byB1c2Ugb25seSBVLWJvb3QgcHJvdmlkZWQgaGVhZGVyIGZpbGVzCiAgLSBmaXggcHJvYmxlbXMgd2l0aCAiLnJvZGF0YS5zdHIxLjQiIHNlY3Rpb24gYXMgdXNlZCBieSBHQ0MtMy54CgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjQgSnVuIDIwMDM6CiAgLSBVcGRhdGUgZXNkIEFTSDQwNSBib2FyZCBmaWxlcy4KICAtIFVwZGF0ZSBlc2QgREFTQV9TSU0gY29uZmlnIGZpbGUuCiAgLSBBZGQgcGluZyBjb21tYW5kIHRvIHNvbWUgZXNkIGJvYXJkcy4KCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMjMgSnVuIDIwMDM6CiAgVXBkYXRlIGZvciBNUEM4MjYwQURTIGJvYXJkCgoqIFBhdGNoIGJ5IE11cnJheSBKZW5zZW4sIDIzIEp1biAyMDAzOgogIC0gY2xlYW51cCBvZiBHQ0MgMy54IGNvbXBpbGVyIHdhcm5pbmdzCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCA0IEp1biAyMDAzOgogIGFkZCBsYXJnZSBtZW1vcnkgc3VwcG9ydCBmb3IgTVBDODI2NkFEUyBib2FyZAoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRW5hYmxlZCBzdGFuZGFyZCB1LWJvb3QgZGV2aWNlIGFic3RyYWN0aW9uIGZvciBBUk0KICAtIEVuYWJsZWQgY29uc29sZSBkZXZpY2UgZm9yIEFSTQogIC0gSW5pdGlsaXplZCBiaV9iYXVkcmF0ZSBmb3IgQVJNCgoqIFBhdGNoIGJ5IEJpbGwgSGFyZ2VuLCAyMyBBcHIgMjAwMzoKICBmaXggYnl0ZSBvcmRlciBmb3IgODI0eCBJMkMgYWRkcmVzc2VzICh3cml0ZSBvcCkKCiogUGF0Y2ggYnkgTXVycmF5IEplbnNlbiwgMjAgSnVuIDIwMDM6CiAgLSBoeW1vZCB1cGRhdGUKICAtIGNsZWFudXAgKGVzcGVjaWFsbHkgZm9yIGdjYy0zLnggY29tcGlsZXJzKQoKKiBQYXRjaCBieSBUb20gR3VpbGxpYW1zLCAyMCBKdW4gMjAwMzoKICBhZGRlZCBDT05GSUdfNzUwRlggc3VwcG9ydCBmb3IgSUJNIDc1MEZYIHByb2Nlc3NvcnMKCiogUGF0Y2ggYnkgRGV2aW4gQ3J1bWIsIDAyIEFwciAyMDAzOgogIEZpeCBjbG9jayBkaXZpZGVyIHJvdW5kaW5nIHByb2JsZW0gaW4gZHJpdmVycy9zZXJpYWwuYwoKKiBQYXRjaCBieSBSaWNoYXJkIFdvb2RydWZmLCAxOSBKdW5lIDAzOgogIC0gRml4ZWQgc21jOTFjMTExIGRyaXZlciB0byBzeW5jIHdpdGggdGhlIHUtYm9vdCBlbnZpcm9ubWVudAogICAgKGRyaXZlci9zbWM5MWMxMTEuYykuCiAgLSBBZGRlZCBldGhfaW5pdCBlcnJvciByZXR1cm4gY2hlY2sgaW4gTmV0TG9vcCAobmV0L25ldC5jKS4KCiogUGF0Y2ggYnkgS2VuIENob3UsIDE5IEp1bmUgMjAwMzoKICBBZGRlZCBzdXBwb3J0IGZvciBBMzAwMCBTQkMgYm9hcmQgKEFydGlzIE1pY3Jvc3lzdGVtcyBJbmMuKQoKKiBQYXRjaGVzIGJ5IE11cnJheSBKZW5zZW4sIDE3IEp1biAyMDAzOgogIC0gSHltb2QgYm9hcmQgZGF0YWJhc2UgbW9kczogYWRkICJ3aG8iIGZpZWxkIGFuZCBuZXcgeGlsaW54IGNoaXAgdHlwZXMKICAtIHByb3ZpZGUgbmV3ICJpbml0X2NtZF90aW1lb3V0KCkiIGZ1bmN0aW9uIHNvIGNvZGUgZXh0ZXJuYWwgdG8KICAgICJjb21tb24vbWFpbi5jIiBjYW4gdXNlIHRoZSAicmVzZXRfY21kX3RpbWVvdXQoKSIgZnVuY3Rpb24gYmVmb3JlCiAgICBlbnRlcmluZyB0aGUgbWFpbiBsb29wCiAgLSBhZGQgRFRUIHN1cHBvcnQgZm9yIGFkbTEwMjEgKG5ldyBmaWxlIGR0dC9hZG0xMDIxLmM7IGNvbmZpZwogICAgc2xpZ2h0bHkgZGlmZmVyZW50LiBzZWUgaW5jbHVkZS9jb25maWdzL2h5bW9kLmggZm9yIGFuIGV4YW1wbGUKICAgIChyZXF1aXJlcyBDT05GSUdfRFRUX0FETTEwMjEsIENPTkZJR19EVFRfU0VOU09SUywgYW5kCiAgICBDRkdfRFRUX0FETTEwMjEgZGVmaW5lZCkKICAtIGFkZCBuZXcgImVlcHJvbV9wcm9iZSgpIiBmdW5jdGlvbiB3aGljaCBoYXMgc2ltaWxhciBhcmdzIGFuZAogICAgYmVoYXZlcyBpbiBhIHNpbWlsYXIgd2F5IHRvICJlZXByb21fcmVhZCgpIiBldGMuCiAgLSBhZGQgODI2MCBGQ0MgZXRoZXJuZXQgbG9vcGJhY2sgY29kZSAobmV3ICJldGhfbG9vcGJhY2tfdGVzdCgpIgogICAgZnVuY3Rpb24gd2hpY2ggaXMgZW5hYmxlZCBieSBkZWZpbmluZyBDT05GSUdfRVRIRVJfTE9PUEJBQ0tfVEVTVCkKICAtIGdkYnRvb2xzIGNvcHlyaWdodCB1cGRhdGUKICAtIGVuc3VyZSB0aGF0IHNldF9tc3IoKSBleGVjdXRlcyB0aGUgInN5bmMiIGFuZCAiaXN5bmMiIGluc3RydWN0aW9ucwogICAgYWZ0ZXIgdGhlICJtdG1zciIgaW5zdHJ1Y3Rpb24gaW4gY3B1L21wYzgyNjAvaW50ZXJydXB0cy5jCiAgLSA4MjYwIEkvTyBwb3J0cyBmaXg6IE9wZW4gRHJhaW4gc2hvdWxkIGJlIHNldCBsYXN0IHdoZW4gY29uZmlndXJpbmcKICAtIGFkZCBTSVUgSVJRIGRlZmluZXMgZm9yIDgyNjAKICAtIGFsbG93IExEU0NSSVBUIG92ZXJyaWRlIGFuZCBPQkpDRkxBR1MgaW5pdGlhbGl6YXRpb246IGNoYW5nZSB0bwogICAgY29uZmlnLm1rIHRvIGFsbG93IGJvYXJkIGNvbmZpZ3VyYXRpb25zIHRvIG92ZXJyaWRlIHRoZSBHTlUKICAgIGxpbmtlciBzY3JpcHQsIHNlbGVjdGVkIHZpYSB0aGUgTERTQ1JJUFQsIG1ha2UgdmFyaWFibGUsIGFuZCB0bwogICAgZ2l2ZSBhbiBpbml0aWFsIHZhbHVlIHRvIHRoZSBPQkpDRkxBR1MgbWFrZSB2YXJpYWJsZQogIC0gODI2MCBpMmMgZW5oYW5jZW1lbnQ6CiAgICBvIGNvcnJlY3RseSBleHRlbmRzIHRoZSB0aW1lb3V0IGRlcGVuZGluZyBvbiB0aGUgc2l6ZSBvZiBhbGwKICAgICAgcXVldWVkIG1lc3NhZ2VzIGZvciBib3RoIHRyYW5zbWl0IGFuZCByZWNlaXZlCiAgICBvIHdpbGwgbm90IGNvbnRpbnVlIHdpdGggcmVjZWl2ZSBpZiB0cmFuc21pdCB0aW1lcyBvdXQKICAgIG8gZW5zdXJlcyB0aGF0IHRoZSBlcnJvciBjYWxsYmFjayBpcyBkb25lIGZvciBhbGwgcXVldWVkIHR4CiAgICAgIGFuZCByeCBtZXNzYWdlcwogICAgbyBjb3JyZWN0bHkgZGV0ZWN0cyBib3RoIHR4IGFuZCByeCB0aW1lb3V0cywgb25seSBkZWxpdmVycyBvbmUgdG8KICAgICAgdGhlIGNhbGxiYWNrLCBhbmQgZG9lcyBub3Qgb3ZlcndyaXRlIGFuIGVhcmxpZXIgZXJyb3IKICAgIG8gbG9naWMgaW4gaTJjX3Byb2JlIG5vdyBjb3JyZWN0CiAgLSBhZGQgInZwcmludGYoKSIgZnVuY3Rpb24gc28gdGhhdCAicGFuaWMoKSIgZnVuY3Rpb24gY2FuIGJlCiAgICB0ZWNobmljYWxseSBjb3JyZWN0CiAgLSBtYW55IEh5bW9kIGJvYXJkIGNoYW5nZXMKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDE0IEp1biAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIExvZ290cm9uaWMgREwgZGF0YWxvZ2dlciBib2FyZAogIC0gY2xlYW51cCBzZXJpYWwgbGluZSBhZnRlciBrZXJtaXQgYmluYXJ5IGRvd25sb2FkCiAgLSBhZGQgZGVidWdYIG1hY3JvIChkZWJ1ZyBsZXZlbCBzdXBwb3J0KQogIC0gdXBkYXRlIG1hY2gtdHlwZXMuaCB0byBsYXRlc3QgYXJtLmxpbnV4Lm9yZy51ayBtYXN0ZXIgbGlzdC4KCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDEyIEp1biAyMDAzOgogIC0gcmV3cml0ZSBvZiB0aGUgUzNDMjRYMCByZWdpc3RlciBkZWZpbml0aW9ucyBzdHVmZgogIC0gImRyaXZlciIgZm9yIHRoZSBidWlsdC1pbiBTM0MyNFgwIFJUQwoKKiBQYXRjaGVzIGJ5IFl1bGkgQmFyY29oZW4sIDEyIEp1biAyMDAzOgogIC0gQWRkIE1JSSBzdXBwb3J0IGFuZCBFdGhlcm5ldCBQSFkgaW5pdGlhbGl6YXRpb24gZm9yIE1QQzgyNjBBRFMgYm9hcmQKICAtIEZpeCBpbmNvcnJlY3QgU0lVTUNSIGluaXRpYWxpc2F0aW9uIGNhdXNlZCBieSB3cm9uZyBIYXJkIFJlc2V0CiAgICBjb25maWd1cmF0aW9uIHdvcmQgc3VwcGxpZWQgYnkgRlBHQSBvbiBzb21lIE1QQzgyNjBBRFMgYm9hcmRzCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAxMCBKdW4gMjAwMzoKICBVbmlmeSBzdGF0dXMgTEVEIGludGVyZmFjZQoKKiBBZGQgc3VwcG9ydCBmb3IgRFMxMjg4NyBSVEM7IGFkZCBSVEMgc3VwcG9ydCBmb3IgQVRDIGJvYXJkCgoqIFBhdGNoIGJ5IE5pY29sYXMgTGFjcmVzc29ubmllcmUsIDExIEp1biAyMDAzOgogIE1vZGlmaWNhdGlvbnMgZm9yIEF0bWVsIEFUOTFSTTkyMDBESyBBUk05MjBUIGJhc2VkIGRldmVsb3BtZW50IGtpdAogIC0gQWRkIEF0bWVsIERhdGFGbGFzaCBzdXBwb3J0IGZvciByZWFkaW5nIGFuZCB3cml0aW5nLgogIC0gQWRkIHBvc3NpYmlsaXR5IHRvIGJvb3QgYSBMaW51eCBmcm9tIERhdGFGbGFzaCB3aXRoIEJPT1RNIGNvbW1hbmQuCiAgLSBBZGQgRmxhc2ggZGV0ZWN0aW9uIG9uIEF0bWVsIEFUOTFSTTkyMDBESwogICAgKGJldHdlZW4gQXRtZWwgQVQ0OUJWMTYxNCBhbmQgQVQ0OUJWMTYxNEEgZmxhc2hlcykKICAtIFJlcGxhY2Ugb2xkIEV0aGVybmV0IFBIWSBsYXllciBmdW5jdGlvbnMKICAtIENoYW5nZSBsaW5rIGFkZHJlc3MKCiogUGF0Y2ggYnkgRnJhbmsgU21pdGgsIDkgSnVuIDIwMDM6CiAgdXNlIENSSVRfRVhDRVBUSU9OIGZvciBtYWNoaW5lIGNoZWNrIG9uIDR4eAoKKiBQYXRjaCBieSBEZXRsZXYgWnVuZGVsLCAxMyBKdW4gMjAwMzoKICBhZGRlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgImNhcmluZm8iIGNvbW1hbmQgaW4gY21kX2ltbWFwLmMKCiogRml4IENPTkZJR19ORVRfTVVMVEkgc3VwcG9ydCBpbiBpbmNsdWRlL25ldC5oCgoqIFBhdGNoZXMgYnkgS3lsZSBIYXJyaXMsIDEzIE1hciAyMDAzOgogIC0gQWRkIEZBVCBwYXJ0aXRpb24gc3VwcG9ydAogIC0gQWRkIGNvbW1hbmQgc3VwcG9ydCBmb3IgRkFUCiAgLSBBZGQgY29tbWFuZCBzdXBwb3J0IGZvciBNTUMKICAtLS0tCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIHZpZGVvCiAgLSBBZGQgSW50ZWwgUFhBIHN1cHBvcnQgZm9yIE1NQwogIC0tLS0KICAtIEVuYWJsZSBNTUMgYW5kIEZBVCBmb3IgbHViYm9jayBib2FyZAogIC0gT3RoZXIgbWlzYyBjaGFuZ2VzIGZvciBsdWJib2NrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgQXByaWwgMDIsIDIwMDM6CiAgZml4IGZvciBTTVNDOTExMTEgZHJpdmVyCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNCBKdW4gMjAwMzoKICBtYWtlIHBwYzQwNSBldGhlcm5ldCBkcml2ZXIgY29tcGF0aWJsZSB3aXRoIENPTkZJR19ORVRfTVVMVEkgb3B0aW9uCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMDUgSnVuIDIwMDM6CiAgLSBQUEM0eHg6IEZpeCBidWcgZm9yIGluaXRpYWwgc3RhY2sgaW4gZGF0YSBjYWNoZSBhcyBwb2ludGVkIG91dCBieQogICAgVGhvbWFzIFNjaGFlZmVyICh0c2NoYWVmZXJAZ2lnYS1zdHJlYW0uZGUpLiBOb3cgaW5pdGFsIHN0YWNrIGluCiAgICBkYXRhIGNhY2hlIGNhbiBiZSB1c2VkIGV2ZW4gaWYgdGhlIGNoaXAgc2VsZWN0IGlzIGluIHVzZS4KICAtIENGR19SWF9FVEhfQlVGRkVSIGFkZGVkIHRvIHNldCB0aGUgZXRoZXJuZXQgcmVjZWl2ZSBidWZmZXIgY291bnQKICAgIChzZWUgUkVBRE1FIGZvciBmdXJ0aGVyIGRlc2NyaXB0aW9uKS4KICAtIENoYW5nZWQgY29uZmlnIGZpbGVzIG9mIENPTkZJR19FRVBSTzEwMCBib2FyZHMgdG8gdXNlIHRoZQogICAgQ0ZHX1JYX0VUSF9CVUZGRVIgZGVmaW5lLgoKKiBBZGQgc3VwcG9ydCBmb3IgUk1VIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBUUU04NjJMIGF0IDEwMC81MCBNSHoKCiogUGF0Y2ggYnkgUGFudGVsaXMgQW50b25pb3UsIDAyIEp1biAyMDAzOgogIG1ham9yIHJlY29uc3RydWN0aW9uIG9mIG5ldHdvcmtpbmcgY29kZTsKICBhZGQgInBpbmciIHN1cHBvcnQgKG91dGdvaW5nIG9ubHkhKQoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMDQgSnVuZSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciB0aGUgTUlQNDA1VCBib2FyZAoKKiBQYXRjaGVzIGJ5IFVkaSBGaW5rZWxzdGVpbiwgMiBKdW5lIDIwMDM6CiAgLSBBZGRlZCBzdXBwb3J0IGZvciBjdXN0b20ga2V5Ym9hcmRzLCBpbml0aWFsaXplZCBieSBkZWZpbmluZyBhCiAgICBib2FyZC1zcGVjaWZpYyBkcnZfa2V5Ym9hcmRfaW5pdCBhcyB3ZWxsIGFzIGRlZmluaW5nIENPTkZJR19LRVlCT0FSRCAuCiAgLSBBZGRlZCBzdXBwb3J0IGZvciB0aGUgUkJDODIzIGJvYXJkLgogIC0gY3B1L21wYzh4eC9sY2QuYyBub3cgYXV0b21hdGljYWxseSBjYWxjdWxhdGVzIHRoZQogICAgSG9yaXpvbnRhbCBQaXhlbCBDb3VudCBmaWVsZC4KCiogRml4IGFsaWdubWVudCBwcm9ibGVtIGluIEJPT1RQIChkaGNwX2xlYXNldGltZSBvcHRpb24pCiAgW3BvaW50ZWQgb3V0IGJ5IE5pY29sYXMgTGFjcmVzc29ubmnocmUsIDIgSnVuIDIwMDNdCgoqIFBhdGNoIGJ5IE1hcmsgUmFrZXMsIDE0IE1heSAyMDAzOgogIGFkZCBzdXBwb3J0IGZvciBJbnRlbCBlMTAwMCBnaWcgY2FyZHMuCgoqIFBhdGNoIGJ5IE55ZSBMaXUsIDMgSnVuIDIwMDM6CiAgZml4IGNyaXRpY2FsIHR5cG8gaW4gTUFNUiBkZWZpbml0aW9uIChpbmNsdWRlL21wYzh4eC5oKQoKKiBGaXggcmVxdWlyZW1lbnQgdG8gYWxpZ24gVS1Cb290IGltYWdlIG9uIDE2IGtCIGJvdW5kYXJpZXMgb24gUFBDLgoKKiBQYXRjaCBieSBLbGF1cyBIZXlkZWNrLCAyIEp1biAyMDAzCiAgTWlub3IgY2hhbmdlcyBmb3IgS1VQNEsgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjkgTWF5IDIwMDM6CiAgRml4ZWQgcmFycCBib290IG1ldGhvZCBmb3IgSUEzMiBhbmQgb3RoZXIgbGl0dGxlLWVuZGlhbiBDUFVzLgoKKiBQYXRjaCBieSBNYXJjIFNpbmdlciwgMjggTWF5IDIwMDM6CiAgQWRkZWQgcG9ydCBJL08gY29tbWFuZHMuCgoqIFBhdGNoIGJ5IE1hdHRoZXcgTWNDbGludG9jaywgMjggTWF5IDIwMDMKICAtIGNwdS9tcGM4MjR4L3N0YXJ0LlM6IGZpeCByZWxvY2F0aW9uIGNvZGUgd2hlbiBib290aW5nIGZyb20gUkFNCiAgLSBtaW5vciBwYXRjaGVzIGZvciB1dHg4MjQ1CgoqIFBhdGNoIGJ5IERhbmllbCBFbmdzdHL2bSwgMjggTWF5IDIwMDM6CiAgeDg2IHVwZGF0ZQoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCA5IE1heSAyMDAzICsgMjcgTWF5IDIwMDM6CiAgYWRkIG5hbmQgZmxhc2ggc3VwcG9ydCB0byBTWE5JODU1VCBjb25maWd1cmF0aW9uCiAgZml4L2V4dGVuZCBuYW5kIGZsYXNoIHN1cHBvcnQ6CiAgLSBmaXggJ25hbmQgZXJhc2UnIGNvbW1hbmQgc28gZG9lcyBub3QgZXJhc2UgYmFkIGJsb2NrcwogIC0gZml4ICduYW5kIHdyaXRlJyBjb21tYW5kIHNvIGRvZXMgbm90IHdyaXRlIHRvIGJhZCBibG9ja3MKICAtIGZpeCBuYW5kX3Byb2JlKCkgc28gaGFuZGxlcyBubyBmbGFzaCBkZXRlY3RlZCBwcm9wZXJseQogIC0gYWRkIGRvYy9SRUFETUUubmFuZAogIC0gYWRkIC5qZmZzMiBhbmQgLm9vYiBvcHRpb25zIHRvIG5hbmQgcmVhZC93cml0ZQogIC0gYWRkICduYW5kIGJhZCcgY29tbWFuZCB0byBsaXN0IGJhZCBibG9ja3MKICAtIGFkZCAnY2xlYW4nIG9wdGlvbiB0byAnbmFuZCBlcmFzZScgdG8gd3JpdGUgSkZGUzIgY2xlYW4gbWFya2VycwogIC0gbWFrZSBOQU5EIHJlYWQvd3JpdGUgZmFzdGVyCgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAyMyBNYXkgMjAwMzoKICBVcGRhdGUgZm9yIE1QQzgyNjZBRFMgYm9hcmQKCiogR2V0IChtb3N0bHkpIHJpZCBvZiBDRkdfTU9OSVRPUl9MRU4gZGVmaW5pdGlvbjsgY29tcHV0ZSByZWFsIGxlbmd0aAogIGluc3RlYWQgQ0ZHX01PTklUT1JfTEVOIGlzIG5vdyBvbmx5IHVzZWQgdG8gZGV0ZXJtaW5lICBfYXRfY29tcGlsZV8KICBfdGltZV8gICghKSBpZiB0aGUgZW52aXJvbm1lbnQgaXMgZW1iZWRkZWQgd2l0aGluIHRoZSBVLUJvb3QgaW1hZ2UsCiAgb3IgaW4gYSBzZXBhcmF0ZSBmbGFzaCBzZWN0b3IuCgoqIENsZWFudXAgQ0ZHX0RFUiAjZGVmaW5lcyBpbiBjb25maWcgZmlsZXMgKHdkIG1haW50YWluZWQgb25seSkKCiogRml4IGRhdGEgYWJvcnQgZXhjZXB0aW9uIGhhbmRsaW5nIGZvciBhcm05MjB0IENQVQoKKiBGaXggYWxpZ25tZW50IHByb2JsZW1zIHdpdGggZmxhc2ggZHJpdmVyIGZvciBUUkFCIGJvYXJkCgoqIFBhdGNoIGJ5IERvbmFsZCBXaGl0ZSwgMjEgTWF5IDIwMDM6CiAgZml4IGNhbGN1bGF0aW9uIG9mIGJhc2UgYWRkcmVzcyBpbiBwY2lfaG9zZV9jb25maWdfZGV2aWNlKCkKCiogRml4IGJ1ZyBpbiBjb21tYW5kIGxpbmUgcGFyc2luZzogImNtZDE7Y21kMiIgaXMgc3VwcG9zZWQgdG8gYWx3YXlzCiAgZXhlY3V0ZSAiY21kMiIsIGV2ZW4gaWYgImNtZDEiIGZhaWxzLiBOb3RlIHRoYXQgdGhpcyBpcyBkaWZmZXJlbnQKICB0byAicnVuIHZhcjEgdmFyMiIgd2hlcmUgdGhlIGNvbnRlbnRzIG9mICJ2YXIyIiB3aWxsIE5PVCBiZQogIGV4ZWN1dGVkIHdoZW4gYSBjb21tYW5kIGluICJ2YXIxIiBmYWlscy4KCiogQWRkIHplcm8tY29weSByYW1kaXNrIHN1cHBvcnQgKHJlcXVpcmVzIGNvcnJlc3BvbmRpbmcga2VybmVsIHN1cHBvcnQhKQoKKiBQYXRjaCBieSBLeWxlIEhhcnJpcywgMjAgTWF5IDIwMDM6CiAgSW4gcHJlcGFyYXRpb24gZm9yIGFuIGl4cCBwb3J0LCByZW5hbWUgY3B1L3hzY2FsZSBhbmQgYXJjaC14c2NhbGUKICBpbnRvIGNwdS9weGEgYW5kIGFyY2gtcHhhLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIzIE1heSAyMDAzOgogIC0gSUJNIFBQQzQwNUVQIHBvcnQgYWRkZWQuCiAgLSBDT05GSUdfVUFSVDFfQ09OU09MRSBhZGRlZC4gSWYgZGVmaW5lZCBpbnRlcm5hbCBVQVJUMSAoYW5kIG5vdAogICAgVUFSVDApIGlzIHVzZWQgYXMgZGVmYXVsdCBVLUJvb3QgY29uc29sZS4gUFBDNHh4IG9ubHkhCiAgLSBlc2QgQVNINDA1IGJvYXJkIGFkZGVkIChQUEM0MDVFUCBiYXNlZCkuCiAgLSBCVUJJTkdBNDA1RVAgYm9hcmQgYWRkZWQgKFBQQzQwNUVQIGJhc2VkIC0gSUJNIEV2YWwgQm9hcmQpLgogIC0gZXNkIENQQ0k0MDVBQiBib2FyZCBhZGRlZC4KICAtIGVzZCBQTUM0MDUgYm9hcmQgYWRkZWQuCiAgLSBVcGRhdGUgb2Ygc29tZSBlc2QgYm9hcmRzLgoKKiBQYXRjaCBieSBEZW5pcyBQZXRlciwgMTkgTWFpIDIwMDM6CiAgYWRkIHN1cHBvcnQgZm9yIHRoZSBNSVA0MDUtMyBib2FyZAoKKiBQYXRjaCBieSBEYXZlIEVsbGlzLCAyMiBNYXkgMjAwMzoKICBGaXggcHJvYmxlbSB3aXRoIG9ubHkgcGFydGlhbGx5IGNsZWFyZWQgLmJzcyBzZWdtZW50CgoqIFBhdGNoIGJ5IFJ1bmUgVG9yZ2Vyc2VuLCAxMiBNYXkgMjAwMzoKICBnZXQgUENJIHRvIHdvcmsgb24gYSBNUEM4MjY2QURTIGJvYXJkOyBpbmNvcnBvcmF0ZSBjaGFuZ2UgdG8KICBjcHUvbXBjODI2MC9wY2kuYyB0byBlbmFibGUgb3ZlcnJpZGVzIG9mIFBDSSBtZW1vcnkgcGFyYW1ldGVycwoKKiBQYXRjaCBieSBOeWUgTGl1LCAxIE1heSAyMDAzOgogIG1pbm9yIHBhdGNoZXMgZm9yIHRoZSBGQURTOHh4CgoqIFBhdGNoIGJ5IFRob21hcyBTY2jkZmVyLCAyOCBBcHIgMjAwMzoKICBGaXggU1BEIGhhbmRsaW5nIGZvciAyNTYgRUNDIERJTU0gb24gV2FsbnV0CgoqIEFkZCBzdXBwb3J0IGZvciBhcmJpdHJhcnkgYml0bWFwcyBmb3IgVFJBQidzICBWRkQgY29tbWFuZDsKICBhbGxvdyB0byBwYXNzIGJvb3QgYml0bWFwIGFkZHJlc3NlcyBpbiBlbnZpcm9ubWVudCB2YXJpYWJsZXM7CiAgYWxsb3cgZm9yIHplcm8gYm9vdCBkZWxheQoKKiBQYXRjaCBieSBDaHJpc3RpYW4gR2Vp32luZ2VyLCAxOSBNYXkgMjAwMjoKICBPbiBUUkFCOiB3YWl0IHVudGlsIHRoZSBkdW1teSBieXRlIGhhcyBiZWVuIGNvbXBsZXRlbHkgc2VudAoKKiBQYXRjaCBieSBEYXZpZCBVcGRlZ3JhZmYsIDIyIEFwciAyMDAzOgogIHVwZGF0ZSBmb3IgQ3JheUwxIGJvYXJkCgoqIFBhdGNoIGJ5IFBhbnRlbGlzIEFudG9uaW91LCAyMSBBcHIgMjAwMzoKICBhZGQgYm9vdCBzdXBwb3J0IGZvciBBUlRPUyAoYSBwcm9wcmlldGFyeSBPUykKCiogUGF0Y2ggYnkgU3RldmVuIFNjaG9seiwgMTEgQXByIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFJUQyBEUzEzMzgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyNCBKYW4gMjAwMzoKICBGaXggY291bnRpbmcgb2YgZXh0ZW5kZWQgcGFydGl0aW9ucyBpbiBkaXNrYm9vdCBjb21tYW5kCgoqIFBhdGNoIGJ5IENocmlzdG9waGUgTGluZGhlaW1lciwgMjAgTWF5IDIwMDM6CiAgYWxsb3cgdGhlIHVzZSBvZiBDRkdfTE9BRFMgd2hlbiBDRkdfTk9fRkxBU0ggaXMgc2V0CgoqIEZpeCBTRFJBTSB0aW1pbmcgb24gUHVycGxlIGJvYXJkCgoqIEFkZCBzdXBwb3J0IGZvciBDb21wYWN0Rmxhc2ggb24gQVRDIGJvYXJkCiAgKGluY2x1ZGVzIHN1cHBvcnQgZm9yIEludGVsIDgyMzY1IGFuZCBjb21wYXRpYmxlIFBDIENhcmQgY29udHJvbGxlcnMsCiAgYW5kIFllbnRhLWNvbXBhdGlibGUgUENJLXRvLUNhcmRCdXMgY29udHJvbGxlcnMpCgoqIFBhdGNoIGJ5IE1hdGhpanMgSGFhcm1hbiwgMDggTWF5IDIwMDM6CiAgQWRkIGxhbjkxYzk2IGRyaXZlciAodGVzdGVkIG9uIEx1YmJvY2sgYW5kIGN1c3RvbSBQWEEyNTAgYm9hcmQgb25seSkKCiogRml4IHByb2JsZW0gd2l0aCB1c2FnZSBvZiAidHJ1ZSIgKHVuZGVmaW5lZCBpbiBjdXJyZW50IHZlcnNpb25zIG9mIGJmZC5oKQoKKiBBZGQgc3VwcG9ydCBmb3IgUHJvbWVzcyBBVEMgYm9hcmQKCiogUGF0Y2ggYnkgS2VpdGggT3V0d2F0ZXIsIDI4IEFwciAyMDAzOgogIC0gTWlzY2VsbGFuZW91cyBjb3JyZWN0aW9ucyBhbmQgYWRkaXRpb25zIHRvIEdFTjg2MFQgYm9hcmQgc3BlY2lmaWMgY29kZS4KICAtIEFkZGVkIEdFTjg2MF9TQyB2YXJpYW50IHRvIEdFTjg2MFQuCiAgLSBNaXNjZWxsYW5lb3VzIGNvcnJlY3Rpb25zIHRvIEdFTjg2MFQgZG9jdW1lbnRhdGlvbi4KICAtIENvcnJlY3QgZHVwbGljYXRlIGVudHJ5IGluIFUtQm9vdCBDUkVESVRTIGZpbGUuCiAgLSBBZGQgR0VOODYwVF9TQyBlbnRyeSBpbiBNQUlOVEFJTkVSUyBmaWxlLgogIC0gVXBkYXRlIENSRURJVFMgZmlsZSB3aXRoIEdFTjg2MFRfU0MgaW5mby4KCiogVXBkYXRlIFNtaXRocyBBZXJvc3BhY2UgYWRkcmVzc2VzIGluIE1BSU5UQUlORVJTIGZpbGUKCiogRml4IGVycm9yIGhhbmRsaW5nIGluIGh1c2gncyB2ZXJzaW9uIG9mICJydW4iIGNvbW1hbmQKCiogTFdNT04gZXh0ZW5zaW9uczoKICAtIFNwbGFzaHNjcmVlbiBzdXBwb3J0CiAgLSBtb2RlbSBzdXBwb3J0CiAgLSBzeXNtb24gc3VwcG9ydAogIC0gdGVtcGVyYXR1cmUgZGVwZW5kZW5kIGVuYWJsaW5nIG9mIExDRAoKKiBBbGxvdyBib290aW5nIGZyb20gb2xkICJQUENCb290IiBkaXNrIHBhcnRpdGlvbnMKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTgyNTUgQm9hcmQgLyBNUEM4MjU1IENQVQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjE6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogTWFrZSBzdXJlIEJsb2NrIExvY2sgQml0cyBnZXQgY2xlYXJlZCBpbiBSMzYwTVBJIGZsYXNoIGRyaXZlcgoKKiBNUEM4MjMgTENEIGRyaXZlcjogRmlsbCBjb2xvciBtYXAgYmFja3dhcmRzLCB0byBhbGxvdyBmb3Igc3RlYWR5CiAgZGlzcGxheSB3aGVuIExpbnV4IHRha2VzIG92ZXIKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMgKHRoaXMgdGltZSBmb3IgcmVhbCkuCgoqIEFkZCBzdXBwb3J0IGZvciAiYm1wIGluZm8iIGFuZCAiYm1wIGRpc3BsYXkiIGNvbW1hbmRzIHRvIGxvYWQKICBiaXRtYXAgaW1hZ2VzOyB0aGlzIGNhbiBiZSB1c2VkIChmb3IgZXhhbXBsZSBpbiBhICJwcmVib290IgogIGNvbW1hbmQpIHRvIGRpc3BsYXkgYSBzcGxhc2ggc2NyZWVuIHZlcnkgcXVpY2tseSBhZnRlciBwb3dlcm9uLgoKKiBBZGQgc3VwcG9ydCBmb3IgMTMzIE1IeiBjbG9jayBvbiBJTkNBLUlQIGJvYXJkCgoqIFBhdGNoIGJ5IEx1dHogRGVubmlnLCAxMCBBcHIgMjAwMzoKICBVcGRhdGUgZm9yIFIzNjBNUEkgYm9hcmQKCiogQWRkIG5ldyBtZWFuaW5nIHRvICJhdXRvc3RhcnQiIGVudmlyb25tZW50IHZhcmlhYmxlOgogIElmIHNldCB0byAibm8iLCBhIHN0YW5kYWxvbmUgaW1hZ2UgcGFzc2VkIHRvIHRoZQogICJib290bSIgY29tbWFuZCB3aWxsIGJlIGNvcGllZCB0byB0aGUgbG9hZCBhZGRyZXNzCiAgKGFuZCBldmVudHVhbGx5IHVuY29tcHJlc3NlZCksIGJ1dCBOT1QgYmUgc3RhcnRlZC4KICBUaGlzIGNhbiBiZSB1c2VkIHRvIGxvYWQgYW5kIHVuY29tcHJlc3MgYXJiaXRyYXJ5CiAgZGF0YS4KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBBcHIgMjAwMzoKICBDaGFuZ2VkIERIQ1AgY2xpZW50IHRvIHVzZSBJUCBhZGRyZXNzIGZyb20gc2VydmVyIG9wdGlvbiBmaWVsZCAjNTQKICBmcm9tIHRoZSBPRkZFUiBwYWNrZXQgaW4gdGhlIHNlcnZlciBvcHRpb24gZmllbGQgIzU0IGluIHRoZSBSRVFVRVNUCiAgcGFja2V0LiBUaGlzIGZpeGVzIGEgcHJvYmxlbSB1c2luZyBhIFdpbmRvd3MgMjAwMCBESENQIHNlcnZlciwKICB3aGVyZSB0aGUgREhDUC1zZXJ2ZXIgaXMgbm90IHRoZSBURlRQLXNlcnZlci4KCiogU2V0IG1heCBicmlnaHRuZXNzIGZvciBNTjExMjM2IGRpc3BsYXlzIG9uIFRSQUIgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIFRRTTg2MkwgbW9kdWxlcwoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpDaGFuZ2VzIGZvciBVLUJvb3QgMC4zLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiogUGF0Y2ggYnkgQXJ1biBEaGFyYW5rYXIsIDQgQXByIDIwMDM6CiAgQWRkIElETUEgZXhhbXBsZSBjb2RlICh0ZXN0ZWQgb24gODI2MCBvbmx5KQoKKiBBZGQgc3VwcG9ydCBmb3IgUHVycGxlIEJvYXJkIChNSVBTNjQgNUtjKQoKKiBBZGQgc3VwcG9ydCBmb3IgTUlQUzY0IDVLYyBDUFVzCgoqIEZpeCBtaXNzaW5nIHNldHRpbmcgb2YgImxvYWRhZGRyIiBhbmQgImJvb3RmaWxlIiBvbiBBUk0gYW5kIE1JUFMKCiogUGF0Y2ggYnkgRGVuaXMgUGV0ZXIsIDA0IEFwciAyMDAzOgogIC0gdXBkYXRlIE1JUDQwNS00IGJvYXJkCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgNCBBcHIgMjAwMzoKICAtIFUtQm9vdCB2ZXJzaW9uIGVudmlyb25tZW50IHZhcmlhYmxlICJ2ZXIiIGFkZGVkCiAgICAoQ09ORklHX1ZFUlNJT05fVkFSSUFCTEUpLgogIC0gQ2hhbmdlZCBQUEM0MDVHUHIgdmVyc2lvbiBmcm9tIEEgdG8gQi4KICAtIENoYW5nZWQgQ1BDSTQwNSB0byB1c2UgQ1RTIGluc3RlYWQgb2YgRFNSIG9uIFBQQzQwNSBVQVJUMS4KCiogUGF0Y2hlcyBieSBEZW5pcyBQZXRlciwgMDMgQXByaWwgMjAwMzoKICAtIGZpeCBQQ0kgSVJRcyBvbiBNUEwgYm9hcmRzCiAgLSBmaXggdHdvIG1vcmUgdW4tcmVsb2NhdGVkIHBvaW50ZXIgcHJvYmxlbXMKCiogRml4IGJlaGF2aW91ciBvZiAicnVuIiBjb21tYW5kOgogIC0gcHJpbnQgZXJyb3IgbWVzc2FnZSBpdiB2YXJpYWJsZSBkb2VzIG5vdCBleGlzdAogIC0gdGVybWluYXRlIHByb2Nlc3Npbmcgb2YgYXJndW1lbnRzIGluIGNhc2Ugb2YgZXJyb3IKCiogUGF0Y2hlcyBieSBQZXRlciBGaWd1bGksIDEwIE1hciAyMDAzCiAgLSBBZGQgc3VwcG9ydCBmb3IgQlRVQVJUIG9uIFBYQSBwbGF0Zm9ybQogIC0gQWRkIHN1cHBvcnQgZm9yIFdFUCBFUDI1MCAoUFhBKSBib2FyZAoKKiBGaXggZmxhc2ggcHJvYmxlbXMgb24gSU5DQS1JUDsgYWRkIHRvb2wgdG8gYWxsb3cgYnJ1bmluZyBpbWFnZXMgIHRvCiAgZmxhc2ggdXNpbmcgYSBCREkyMDAwCgoqIEltcGxlbWVudCBmaXggZm9yIEkyQyBFZGdlIENvbmRpdGlvbnMgcHJvYmxlbSBmb3IgYWxsIGJvYXJkcyB0aGF0CiAgdXNlIHRoZSBiaXQtYmFuZ2luZyBkcml2ZXIgKGNvbW1vbi9zb2Z0X2kyYy5jKQoKKiBQYXRjaCBieSBNYXJ0aW4gV2luaXN0b2VyZmVyLCAyMyBNYXIgMjAwMwogIC0gQWRkIHBvcnQgdG8gTVBDNTU1LzU1NiBtaWNyb2NvbnRyb2xsZXJzCiAgLSBBZGQgc3VwcG9ydCBmb3IgY21pIGN1c3RvbWVyIGJvYXJkIHdpdGgKICAgIEludGVsIDI4RjEyOEozQSwgMjhGMzIwSjNBIG9yIDI4RjY0MEozQSBmbGFzaC4KCiogUGF0Y2ggYnkgUmljayBCcm9uc29uLCAyOCBNYXIgMjAwMzoKICAtIGZpeCBjb21tb24vY21kX25hbmQuYwoKKiBQYXRjaCBieSBBcnVuIERoYXJhbmthciwgMjQgTWFyIDIwMDM6CiAgLSBhZGQgdGhyZWFkcyAvIHNjaGVkdWxlciBleGFtcGxlIGNvZGUKCiogQWRkIHBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAzMSBNYXIgMjAwMzoKICAtIGFkZCBjdHJsLWMgc3VwcG9ydCBmb3Iga2VybWl0IGRvd25sb2FkCiAgLSBhbGlnbiBiZGluZm8gb3V0cHV0IG9uIEFSTQogIC0gY3NiMjI2IGJvYXJkOiBicmluZyBpbiBzeW5jIHdpdGggaW5ub2tvbS9tZW1zZXR1cC5TCiAgLSBjc2IyMjYgYm9hcmQ6IGZpeCBNRFJFRlIgaGFuZGxpbmcKICAtIG1pc2MgZG9jIGZpeGVzIC8gZXh0ZW5zaW9ucwogIC0gaW5ub2tvbSBib2FyZDogY2xlYW51cCwgTURSRUZSIGZpeCBpbiBtZW1zZXR1cC5TLCBjb25maWcgdXBkYXRlCiAgLSBhZGQgQk9PVF9QUk9HUkVTUyB0byBhcm1saW51eC5jCgoqIEFkZCBDUFUgSUQsIHZlcnNpb24sIGFuZCBjbG9jayBzcGVlZCBmb3IgSU5DQS1JUAoKKiBQYXRjaGVzIGJ5IERhdmUgRWxsaXMsIDE4IE1hciAyMDAzIGZvciBTWE5JODU1VCBib2FyZDoKICAtIGZpeCBTUkFNIGFuZCBTRFJBTSBtZW1vcnkgc2l6aW5nCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0CiAgLSBhZGQgTUFDIGFkZHJlc3MgZm9yIHNlY29uZCAoU0NDMSkgZXRoZXJuZXQgcG9ydAoKKiBVcGRhdGUgZGVmYXVsdCBlbnZpcm9ubWVudCBmb3IgVFFNODI2MCBib2FyZAoKKiBQYXRjaCBieSBSaWNrIEJyb25zb24sIDE2IE1hciAyMDAzOgogIC0gQWRkIE5BTkQgZmxhc2ggc3VwcG9ydCBmb3IgcmVhZGluZywgd3JpdGluZywgYW5kIGVyYXNpbmcgTkFORAogICAgZmxhc2ggKGNlcnRhaW4gZm9ybXMgb2Ygd2hpY2ggYXJlIGNhbGxlZCBTbWFydE1lZGlhKS4KICAtIEFkZCBzdXBwb3J0IGZvciBBdG1lbCBBVDkxUk05MjAwREsgQVJNOTIwVCBiYXNlZCBkZXZlbG9wbWVudCBraXQuCgoqIFBhdGNoZXMgYnkgUm9iZXJ0IFNjaHdlYmVsLCAxOSBNYXIgMjAwMzoKICAtIHVzZSBhcm0tbGludXgtZ2NjIGFzIGRlZmF1bHQgY29tcGlsZXIgZm9yIEFSTQogIC0gZml4IGkyYyBmaXh1cCBjb2RlCiAgLSBmaXggbWlzc2luZyBiYXVkcmF0ZSBzZXR0aW5nCiAgLSBhZGRlZCAkbG9hZGFkZHIgLyBDRkdfTE9BRF9BRERSIHN1cHBvcnQgdG8gbG9hZGIKICAtIG1vdmVkICJpZ25vcmluZyB0cmFpbGluZyBjaGFyYWN0ZXJzIiBfYmVmb3JlXyB1LWJvb3Qgd2FudHMgdG8KICAgIHByaW50IG91dCBkaWFnbm9zdGljcyBtZXNzYWdlczsgcmVtb3ZlcyBib2d1cyBjaGFyYWN0ZXJzIGF0IHRoZQogICAgZW5kIG9mIHRyYW5zbWlzc2lvbgoKKiBQYXRjaCBieSBKb2huIFpoYW4sIDE4IE1hciAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBTaW5vVmVlIE1pY3Jvc3lzdGVtcyBTQzh4eCBib2FyZHMKCiogUGF0Y2ggYnkgUm9sZiBPZmZlcm1hbm5zLCAyMSBNYXIgMjAwMzoKICBwb3J0ZWQgdGhlIGRucDExMTAgcmVsYXRlZCBjaGFuZ2VzIGZyb20gdGhlIGN1cnJlbnQgYXJtYm9vdCBjdnMgdG8KICBjdXJyZW50IHUtYm9vdCBjdnMuIHNtYzkxMTExIGRvZXMgbm90IHdvcmsuIHByb2JsZW0gbWFya2VkIGluCiAgc21jOTExMTEuYywgZ3JlcCBmb3IgIkZJWE1FIi4KCiogUGF0Y2ggYnkgQnJpYW4gQXVsZCwgMjUgTWFyIDIwMDM6CiAgQWRkIHN1cHBvcnQgZm9yIFNUTSBmbGFzaCBjaGlwcyBvbiBlYm9ueSBib2FyZAoKKiBBZGQgUENJIHN1cHBvcnQgZm9yIE1QQzgyNTAgQm9hcmRzIChQTTgyNSBtb2R1bGUpCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMjUgTWFyIDIwMDM6CiAgLSBQQ0k0MDUgdXBkYXRlLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDIwIE1hciAyMDAzOgogIC0gQ1BDSTQwNTIgdXBkYXRlIChzdXBwb3J0IGZvciByZXZpc2lvbiAzKS4KICAtIFNldCBlZGdlIGNvbmRpdGlvbmluZyBjaXJjdWl0cnkgb24gUFBDNDA1R1ByIGZvciBjb21wYXRpYmlsaXR5CiAgICB0byBleGlzdGluZyBQUEM0MDVHUCBkZXNpZ25zLgogIC0gQ2xpcCB1ZGl2IHRvIDUgYml0cyBvbiBQUEM0MDUgKHNlcmlhbC5jKS4KCiogRXh0ZW5kIElOQ0FJUCBib2FyZCBzdXBwb3J0OgogIC0gYWRkIGF1dG9tYXRpYyBSQU0gc2l6ZSBkZXRlY3Rpb24KICAtIGFkZCAiYmRpbmZvIiBjb21tYW5kCiAgLSBwYXNzIGZsYXNoIGFkZHJlc3MgYW5kIHNpemUgdG8gTGludXgga2VybmVsCiAgLSBzd2l0Y2ggdG8gMTUwIE1IeiBjbG9jawoKKiBBdm9pZCBmbGlja2VyIG9uIHRoZSBUUkFCJ3MgVkZEIGJ5IHN5bmNocm9uaXppbmcgdGhlIGVuYWJsZSB3aXRoCiAgdGhlIEhTWU5DL1ZTWU5DLiBSZXF1aXJlcyBuZXcgQ1BMRCBjb2RlIChWZXJzaW9uIDEwMSBmb3IgUmV2LiAxMDAKICBib2FyZHMsIHZlcnNpb24gMTUzIGZvciBSZXYuIDIwMCBib2FyZHMpLgoKKiBQYXRjaCBieSBWbGFkaW1pciBHdXJldmljaCwgMTIgTWFyIDIwMDM6CiAgRml4IHJlbG9jYXRpb24gcHJvYmxlbSBvZiBzdGF0aWNhbGx5IGluaXRpYWxpemVkIHN0cmluZyBwb2ludGVycwogIGluIGNvbW1vbi9jbWRfcGNpLmMKCiogUGF0Y2ggYnkgS2FpLVV3ZSBCbPZtLCAxMiBNYXIgMjAwMzoKICBDbGVhbnVwICYgYnVnIGZpeGVzIGZvciBKRkZTMiBjb2RlOgogIC0gdGhlIG1lbW9yeSBtYW5nZW1lbnQgd2FzIGJyb2tlbi4gSXQgY2F1c2VkIGhhdm9jIG9uIG1hbGxvYyBieQogICAgd3JpdGluZyBiZXlvbmQgdGhlIGJsb2NrIGJvdW5kYXJpZXMuCiAgLSB0aGUgbGVuZ3RoIGNhbGN1bGF0aW9uIGZvciBmaWxlcyB3YXMgd3JvbmcsIHNvbWV0aW1lcyByZXN1bHRpbmcKICAgIGluIHNob3J0IGZpbGUgcmVhZHMuCiAgLSBkYXRhIGNvcHlpbmcgbm93IG9wdGlvbmFsbHkgdGFrZXMgZnJhZ21lbnQgdmVyc2lvbiBudW1iZXJzIGludG8KICAgIGFjY291bnQsIHRvIGF2b2lkIGNvcHlpbmcgZnJvbSBvbGRlciBkYXRhLgogIFNlZSBkb2MvUkVBRE1FLkpGRlMyIGZvciBkZXRhaWxzLgoKKiBQYXRjaCBieSBKb3NlZiBXYWduZXIsIDEyIE1hciAyMDAzOgogIC0gMTYvMzIgTUIgYW5kIDUwLzgwIE1IeiBzdXBwb3J0IHdpdGggYXV0by1kZXRlY3Rpb24gZm9yIElQODYwCiAgLSBFVEgwNSBhbmQgQkVEQlVHIHN1cHBvcnQgZm9yIENVODI0CiAgLSBhZGRlZCBzdXBwb3J0IGZvciBNaWNyb1N5cyBDUEM0NQogIC0gbmV3IEJPT1RST00vRkxBU0gwIGFuZCBET0MgYmFzZSBmb3IgUE04MjYKCiogUGF0Y2ggYnkgUm9iZXJ0IFNjaHdlYmVsLCAxMiBNYXIgMjAwMzoKICBGaXggdGhlIGNocGFydCBjb21tYW5kIG9uIGlubm9rb20gYm9hcmQKCiogTmFtZSBjbGVhbnVwOgogIG12IGluY2x1ZGUvYXNtLWkzODYvcHBjYm9vdC1pMzg2LmggaW5jbHVkZS9hc20taTM4Ni91LWJvb3QtaTM4Ni5oCiAgcy9QUENCb290L1UtQm9vdC8gaW4gc29tZSBmaWxlcwogIHMvcEltYWdlL3VJbWFnZS8gIGluIHNvbWUgZmlsZXMKCiogUGF0Y2ggYnkgRGV0bGV2IFp1bmRlbCwgMTUgSmFuIDIwMDM6CiAgRml4ICcnIGNvbW1hbmQgbGluZSBxdW90aW5nCgoqIFBhdGNoIGJ5IFRoZSBMRU9YIHRlYW0sIDE5IEphbiAyMDAzOgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBFTFBUODYwIGJvYXJkCiAgLSBhZGQgc3VwcG9ydCBmb3IgRGFsbGFzIGRzMTY0eCBSVEMKCiogUGF0Y2hlcyBieSBEYXZpZCBN/GxsZXIsIDMxIEphbiAyMDAzOgogIC0gbWluaW1hbCBzZXR1cCBmb3IgQ2FyZEJ1cyBicmlkZ2VzCiAgLSBhZGQgRUVQUk9NIHJlYWQvd3JpdGUgc3VwcG9ydCBpbiB0aGUgQ1M4OTAwIGRyaXZlcgogIC0gYWRkIHN1cHBvcnQgZm9yIHRoZSBidWlsdGluIEkyQyBjb250cm9sbGVyIGluIHRoZSBTYW1zdW5nIHMzYzI0eDAgY2hpcHMKICAtIGFkZCBzdXBwb3J0IGZvciBNUEwncyBWQ01BOSAoU2Ftc3VuZyBzM2MyNDEwIGJhc2VkKSBib2FyZAoKKiBQYXRjaCBieSBTdGV2ZW4gU2Nob2x6LCAwNCBGZWIgMjAwMzoKICBhZGQgc3VwcG9ydCBmb3IgUlRDIERTMTMwNwoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgNSBGZWIgMjAwMzoKICBmaXggUExQUkNSL1NDQ1IgaW5pdCBzZXF1ZW5jZSBvbiA4eHggdG8gYWxsb3cgZm9yCiAgY2hhbmdlcyBvZiBFQkRGIGJ5IHNvZnR3YXJlCgoqIFBhdGNoIGJ5IFZsYWRpbWlyIEd1cmV2aWNoLCAwNyBGZWIgMjAwMzoKICAiQVBJLWNvbXBhdGliaWxpdHkgcGF0Y2giIGZvciA0eHggSTJDIGRyaXZlcgoKKiBUUkFCIGZpeGVzIC8gZXh0ZW5zaW9uczoKICAtIFJlc3RvcmUgVkZEIGJyaWdodG5lc3MgYXMgc2F2ZWQgaW4gZW52aXJvbm1lbnQKICAtIGFkZCBzdXBwb3J0IGZvciBGdWppdHN1IGZsYXNoZXMKICAtIG1ha2Ugc3VyZSBib3RoIGJ1enplcnMgYXJlIHR1cm5lZCBvZmYgKGRyaXZlIGxvdyBsZXZlbCkKCiogUGF0Y2hlcyBieSBSb2JlcnQgU2Nod2ViZWwsIDA2IE1hciAyMDAzOgogIC0gZml4IGJ1ZyBpbiBCT09UUCBjb2RlIChtdXN0IHVzZSBOZXRDb3B5SVApCiAgLSB1cGRhdGUgb2YgQ1NCMjI2IHBvcnQKICAtIGNsZWFyIEJTUyBzZWdtZW50IG9uIFhTY2FsZQogIC0gYWRkZWQgc3VwcG9ydCBmb3IgaTJjX2luaXRfYm9hcmQoKSBmdW5jdGlvbgogIC0gdXBkYXRlIHRvIHRoZSBJbm5va29tIHBsYXR0Zm9ybQoKKiBFeHRlbmQgc3VwcG9ydCBmb3IgcmVkdW5kYW5kIGVudmlyb25tZW50cyBmb3IgY29uZmlndXJhdGlvbnMgd2hlcmUKICBlbnZpcm9ubWVudCBzaXplIDwgc2VjdG9yIHNpemUKCiogUGF0Y2ggYnkgUnVuZSBUb3JnZXJzZW4sIDEzIEZlYiAyMDAzOgogIEFkZCBzdXBwb3J0IGZvciBNb3Rvcm9sYSBNUEM4MjY2QURTIGJvYXJkCgoqIFBhdGNoIGJ5IEt5bGUgSGFycmlzLCAxOSBGZWIgMjAwMzoKICBwYXRjaGVzIGZvciB0aGUgSW50ZWwgbHViYm9jayBib2FyZDoKICBtZW1zZXR1cC5TIC0gZ2VuZXJhbCBjbGVhbnVwIChiYXNlZCBvbiBSb2JlcnQncyBjc2IyMjYgY29kZSkKICBmbGFzaC5jIC0gb3ZlcmhhdWwsIGFjdHVhbGx5IHdvcmtzIG5vdwogIGx1YmJvY2suYyAtIGZpeCBpbml0IGZ1bmNzIHRvIHJldHVybiBwcm9wZXIgdmFsdWUKCiogUGF0Y2ggYnkgS2VubmV0aCBKb2hhbnNzb24sIDI2IEZlYiAyMDAzOgogIC0gRml4ZWQgb2ZmIGJ5IG9uZSBpbiBSRlRBIGNhbGN1bGF0aW9uLgogIC0gTm8gbmVlZCB0byBhYm9ydCB3aGVuIExERiBpcyBsb3dlciB0aGFuIHdlIGNhbiBwcm9ncmFtIGl0J3Mgb25seQogICAgbWluaW11bSB0aW1pbmcgc28gY2xhbXAgaXQgdG8gd2hhdCB3ZSBjYW4gZG8uCiAgLSBUYWtlcyBmdW5jdGlvbiBwb2ludGVyIHRvIGZ1bmN0aW9uIGZvciByZWFkaW5nIHRoZSBzcGRfbnZyYW0uIFVzZWZ1bGwKICAgIGZvciBmYWtpbmcgZGF0YSBvciBoYXJkY29kZSBhIG1vZHVsZSB3aXRob3V0IHRoZSBudnJhbS4KICAtIGZpeCBvdGhlciB1c2VyIGZvciBhYm92ZSBjaGFuZ2UKICAtIGZpeCBzb21lIGNvbW1lbnRzLgoKKiBQYXRjaGVzIGJ5IEJyaWFuIFdhaXRlLCAyNiBGZWIgMjAwMzoKICAtIGZpeCBwb3J0IGZvciBldmI2NDI2MCBib2FyZAogIC0gZml4IFBDSSBmb3IgZXZiNjQyNjAgYm9hcmQKICAtIGZpeCBQQ0kgc2NhbgoKKiBQYXRjaCBieSBSZWluaGFyZCBNZXllciwgMSBNYXIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgRU1LIFRPUDg2MCBNb2R1bGUKCiogUGF0Y2ggYnkgWXVsaSBCYXJjb2hlbiwgMDIgTWFyIDIwMDM6CiAgQWRkIFNQRCBFRVBST00gc3VwcG9ydCBmb3IgTVBDODI2MEFEUyBib2FyZAoKKiBQYXRjaCBieSBSb2JlcnQgU2Nod2ViZWwsIDIxIEphbiAyMDAzOgogIC0gQWRkIHN1cHBvcnQgZm9yIElubm9rb20gYm9hcmQKICAtIERvbid0IGNvbXBsYWluIGlmICJpbnN0YWxsIiBmYWlscwogIC0gUkVBRE1FIGNsZWFudXAgKHJlbW92ZSBkdXBsaWNhdGVkIGxpbmVzKQogIC0gVXBkYXRlIFBYQSBoZWFkZXIgZmlsZXMKCiogQWRkIGRvY3VtZW50YXRpb24gZm9yIGV4aXN0aW5nIFBPU1QgY29kZSAoZG9jL1JFQURNRS5QT1NUKQoKKiBQYXRjaCBieSBMYXVkbmV5IFJlbiwgMTUgSmFuIDIwMDM6CiAgRml4IGhhbmRsaW5nIG9mIHJlZHVuZGFuZCBlbnZpcm9ubWVudCBpbiAidG9vbHMvZW52Y3JjLmMiCgoqIFBhdGNoIGJ5IERldGxldiBadW5kZWwsIDI4IEZlYiAyMDAzOgogIEFkZCBiZWRidWcgc3VwcG9ydCBmb3IgODI0eCBzeXN0ZW1zCgoqIEFkZCBzdXBwb3J0IGZvciAxNiBNQiBmbGFzaCBjb25maWd1cmF0aW9uIG9mIFRSQUIgYm9hcmQKCiogUGF0Y2ggYnkgRXJ3aW4gUm9sLCAyNyBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgUlRFTVMKCiogQWRkIGltYWdlIGluZm9ybWF0aW9uIHRvIFJFQURNRQoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDE4IEZlYiAyMDAzOgogIENQQ0lJU0VSNCBjb25maWd1cmF0aW9uIHVwZGF0ZWQuCgoqIFBhdGNoIGJ5IFN0ZWZhbiBSb2VzZSwgMTcgRmViIDIwMDM6CiAgRml4ZWQgYnVnIGluIGV4dC4gc2VyaWFsIGNsb2NrIHNldHVwIG9uIFBQQzQwNSAoc2luY2UgUFBDNDQwIHBvcnQpLgoKKiBQYXRjaCBieSBTdGVmYW4gUm9lc2UsIDEzIEZlYiAyMDAzOgogIEFkZCAicGNpZGVsYXkiIGVudmlyb25tZW50IHZhcmlhYmxlIChpbiBtcywgZW5hYmxlZCB2aWEKICBDT05GSUdfUENJX0JPT1RERUxBWSkuCiAgUENJIHNwZWMgMi4yIGRlZmluZXMsIHRoYXQgYSBwY2kgdGFyZ2V0IGhhcyAyXjI1IHBjaSBjbG9ja3MgYWZ0ZXIKICBSU1QjIHRvIHJlc3BvbmQgdG8gY29uZmlndXJhdGlvbiBjeWNsZXMgKDMzTUh6IC0+IDFzKS4KCiogRml4IGR1YWwgUENNQ0lBIHNsb3Qgc3VwcG9ydCAod2hlbiBydW5uaW5nIHdpdGgganVzdCBvbmUKICBzbG90IHBvcHVsYXRlZCkKCiogQWRkIFZGRCB0eXBlIGRldGVjdGlvbiB0byB0cmFiIGJvYXJkCgoqIGV4dGVuZCBkcml2ZXJzL2NzODkwMC5jIGRyaXZlciB0byBzeW5jaHJvbml6ZSAgZXRoYWRkciAgZW52aXJvbm1lbnQKICB2YXJpYWJsZSB3aXRoIHZhbHVlIGluIHRoZSBFRVBST00KCiogUGF0Y2ggYnkgU3RlZmFuIFJvZXNlLCAxMCBGZWIgMjAwMzoKICBBZGQgc3VwcG9ydCBmb3IgNE1CIGFuZCAxMjhNQiBvbmJvYXJkIFNEUkFNIChjcHUvcHBjNHh4L3NkcmFtLmMpCgoqIEFkZCBzdXBwb3J0IGZvciBNSVBTMzIgNEtjIENQVXMKCiogQWRkIHN1cHBvcnQgZm9yIElOQ0EtSVAgQm9hcmQKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4yOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBkdWFsIGV0aGVybmV0IHN1cHBvcnQgb24gUE04MjYKCiogQWRkIHN1cHBvcnQgZm9yIExYVDk3MSBQSFkgb24gUE04MjYKCiogUGF0Y2ggYnkgVG9yZCBBbmRlcnNzb24sIDE2IEphbiAyMDAzOgogIEZpeCBmbGFzaCBzZWN0b3IgY291bnQgZm9yIFRRTTh4eEwKCiogRml4IEkyQyBFRVBST00gcHJvYmxlbSBvbiBJQ1U4NjIgYm9hcmQgKHdvdWxkIG9ubHkgd3JpdGUgdGhlIGZpcnN0CiAgMTYgYnl0ZXMgb3V0IG9mIGVhY2ggMzIgYnl0ZSBibG9jaykKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2hhbmdlcyBmb3IgVS1Cb290IDAuMi4xOgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqIEFkZCBzdXBwb3J0IGZvciBWMzcgYm9hcmQKICAocGF0Y2ggYnkgSvNuIEJlbmVkaWt0c3NvbiwgMTEgRGVjIDIwMDIpCgoqIFVwZGF0ZSBiYXVkcmF0ZSBpbiBiZF9pbmZvIHdoZW4gaXQgZ2V0cyBjaGFuZ2VkCgoqIEFkZCB3YXRjaGRvZyB0cmlnZ2VyIHBvaW50cyB3aGlsZSB3YWl0aW5nIGZvciBzZXJpYWwgcG9ydAogIChzbyBmYXIgb25seSA4eHggLS0gbmVlZGVkIG9uIExXTU9OIHdpdGggMTAwbXMgd2F0Y2hkb2cpCgoqIEltcHJvdmUgY29tbWFuZCBsaW5lIHRvb2wgdG8gYWNjZXNzIHRoZSBVLUJvb3QncyBlbnZpcm9ubWVudAogIChmaWd1cmF0aW9uIG9mIHRoZSB1dGlsaXR5LCB1c2luZyBhIGNvbmZpZyBmaWxlKQoKKiBBZGQgc2luZ2xlIHF1b3RlIHN1cHBvcnQgZm9yIChvbGQpIGNvbW1hbmQgbGluZSBwYXJzZXIKCiogU3dpdGNoIExXTU9OIGJvYXJkIGRlZmF1bHQgY29uZmlnIGZyb20gRlJBTSB0byBFRVBST007CiAgaW4gUE9TVCwgRUVQUk9NIHNob3dzIHVwIG9uIDggYWRkcmVzc2VzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNoYW5nZXMgZm9yIFUtQm9vdCAwLjIuMDoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKKiBVc2UgMS1ieXRlLXJlYWQgaW5zdGVhZCBvZiAtd3JpdGUgZm9yIGlwcm9iZSgpIGZ1bmN0aW9uCiAgQWRkIGkyYyBjb21tYW5kcyB0byBQTTgyNiBjb25maWcKCiogZXh0ZW5kIEkyQyBQT1NUIGNvZGU6IGNoZWNrIGZvciBsaXN0IG9uIGtub3duIGFkZHJlc3NlcwoKKiBJbXByb3ZlIGxvZyBidWZmZXIgY29kZTsgdXNlICJsb2dsZXZlbCIgdG8gZGVjaWRlIHdoaWNoIG1lc3NhZ2VzCiAgdG8gbG9nIG9uIHRoZSBjb25zb2xlLCB0b28gKGxpa2UgaW4gTGludXgpOyBnZXQgcmlkIG9mICJsb2dzdGFydCIKCiogQWRkIGNvbW1hbmQgbGluZSB0b29sIHRvIGFjY2VzcyB0aGUgVS1Cb290J3MgZW52aXJvbm1lbnQKICAoYm9hcmQtc3BlY2lmaWMgZm9yIFRSQUIgbm93LCB0byBiZSBmaXhlZCBsYXRlcikKCiogUGF0Y2ggYnkgSGFucy1Kb2VyZyBGcmllZGVuLCAwNiBEZWMgMjAwMgogIEZpeCBtaXNjIHByb2JsZW1zIHdpdGggQW1pZ2FPbmUgc3VwcG9ydAoKKiBQYXRjaCBieSBDaHJpcyBIYWxsaW5hbiwgMyBEZWMgMjAwMjoKICBtaW5vciBjbGVhbnVwIHRvIHRoZSBNUEM4MjQ1IEVQSUMgZHJpdmVyCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQgLCAyOCBOb3YgMjAwMgogIEFkZCBzdXBwb3J0IGZvciBleHRlcm5hbCAoU0lVKSBpbnRlcnJ1cHRzIG9uIE1QQzh4eAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjggTm92IDIwMDIKICBGaXggbmVzdGVkIHN5c2NhbGxzIGJ1ZyBpbiBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucwoKKiBQYXRjaCBieSBEYXZpZCBN/GxsZXIsIDI3IE5vdiAyMDAyOgogIGZpeCBvdXRwdXQgb2YgInBjaWluZm8iIGNvbW1hbmQgZm9yIENhcmRCdXMgYnJpZGdlIGRldmljZXMuCgoqIEZpeCBidWcgaW4gVFFNODI2MCBib2FyZCBkZXRlY3Rpb24gLSBib2FyZHMgZ290IHN0dWNrIHdoZW4gYm9hcmQgSUQKICB3YXMgbm90IHJlYWRhYmxlCgoqIEFkZCBMRUQgaW5kaWNhdGlvbiBmb3IgSURFIGFjdGl2aXR5IG9uIEtVUDRLIGJvYXJkCgoqIEZpeCBzdGFydHVwIHByb2JsZW1zIHdpdGggVkZEIGRpc3BsYXkgb24gVFJBQgoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAyMCBOb3YgMjAwMgogIEFkZCBkcml2ZXIgZm9yIEVwc29uIFNFRDEzODA2IGdyYXBoaWMgY29udHJvbGxlci4KICBBZGQgc3VwcG9ydCBmb3IgQk1QIGxvZ29zIGluIGNmYl9jb25zb2xlIGRyaXZlci4KCiogQWRkZWQgc3VwcG9ydCBmb3IgYm90aCBQQ01DSUEgc2xvdHMgKGF0IHRoZSBzYW1lIHRpbWUhKSBvbiBNUEM4eHgKCiogUGF0Y2ggYnkgUm9kIEJveWNlLCAyMSBOb3YgMjAwMjoKICBmaXggUENNQ0lBIG9uIE1CWDh4eCBib2FyZAoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0ICwgMjEgTm92IDIwMDIKICBBZGQgQ0ZHX0NQTV9QT1NUX1dPUkRfQUREUiB0byBtYWtlIHRoZSBvZmZzZXQgb2YgdGhlCiAgYm9vdG1vZGUgd29yZCBpbiBEUFJBTSBjb25maWd1cmFibGUKCiogUGF0Y2ggYnkgRGFuaWVsIEVuZ3N0cvZtLCAxOCBOb3YgMjAwMjoKICBGaXhlcyBmb3IgeDg2IHBvcnQgKG1vc3RseSBzdHJpbmdzIGlzc3VlcykKCiogUGF0Y2ggYnkgS2VuIENob3UsIDE4IE5vdiAyMDAyOgogIEZpeCBmb3IgbmF0c2VtaSBOSUMgY2FyZHMgKERQODM4MTUpCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDE5IE5vdiAyMDAyOgogIGZpeCBhIGJ1ZyBmb3IgdGhlIE1JSSBjb25maWd1cmF0aW9uLCBhbmQgc29tZSB3YXJuaW5ncwoKKiBQYXRjaCBieSBUaG9tYXMgRnJpZWRlbiwgMTMgTm92IDIwMDI6CiAgQWRkIGNvZGUgZm9yIEFtaWdhT25lIGJvYXJkCiAgKHByZWxpbWluYXJ5IG1lcmdlIHRvIFUtQm9vdCwgc3RpbGwgV0lQKQoKKiBQYXRjaCBieSBKb24gRGlla2VtYSwgMTIgTm92IDIwMDI6CiAgLSBBZGRpbmcgVVJMIGZvciBJRUVFIE9VSSBsb29rdXAKICAtIE1ha2luZyB0aGUgYXV0b2Jvb3QgI2RlZmluZXMgZGVwZW5kZW50IG9uIENPTkZJR19BVVRPQk9PVF9LRVlFRAogICAgYmVpbmcgZGVmaW5lZC4KICAtIEluIHRoZSBDT05GSUdfRVhUUkFfRU5WX1NFVFRJTkdTICNkZWZpbmUsIHRoZSByb290LW9uLWluaXRyZCBhbmQKICAgIHJvb3Qtb24tbmZzIG1hY3JvcyBhcmUgZGVzaWduZWQgdG8gc3dpdGNoIGhvdyB0aGUgZGVmYXVsdCBib290CiAgICBtZXRob2QgZ2V0cyBkZWZpbmVkLgoKKiBQYXRjaCBieSBEYW5pZWwgRW5nc3Ry9m0sIDEzIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBpMzg2IGFyY2hpdGVjdHVyZSBhbmQgQU1EIFNDNTIwIGJvYXJkCgoqIFBhdGNoIGJ5IFBpZXJyZSBBdWJlcnQsIDEyIE5vdiAyMDAyOgogIEFkZCBzdXBwb3J0IGZvciBET1MgZmlsZXN5c3RlbSBhbmQgYm9vdGluZyBmcm9tIERPUyBmbG9wcHkgZGlzawoKKiBQYXRjaCBieSBKaW0gU2FuZG96LCAwNyBOb3YgMjAwMjoKICBJbmNyZWFzZSBudW1iZXIgb2YgbmV0d29yayBSWCBidWZmZXJzIChQS1RCVUZTUlggaW4KICAiaW5jbHVkZS9uZXQuaCIpIGZvciBFRVBSTzEwMCBiYXNlZCBib2FyZHMgKGVzcGVjaWFsbHkgU1A4MjQwKQogIHdoaWNoIHNob3dlZCAiUmVjZWl2ZXIgaXMgbm90IHJlYWR5IiBlcnJvcnMgd2hlbiBVLUJvb3Qgd2FzCiAgcHJvY2Vzc2luZyB0aGUgcmVjZWl2ZSBidWZmZXJzIHNsb3dlciB0aGFuIHRoZSBuZXR3b3JrIGNvbnRyb2xsZXIKICB3YXMgZmlsbGluZyB0aGVtLgoKKiBQYXRjaCBieSBBbmRyZWFzIE9iZXJyaXR0ZXIsIDA5IE5vdiAyMDAyOgogIENoYW5nZSBiZWhhdmlvdXIgb2YgTmV0TG9vcCgpOiByZXR1cm4gLTEgZm9yIGVycm9ycywgZmlsZXNpemUKICBvdGhlcndpc2U7IHJldHVybiBjb2RlIDAgaXMgdmFsaWQgYW4gbWVhbnMgbm8gZmlsZSBsb2FkZWQgLSBpbiB0aGlzCiAgY2FzZSB0aGUgZW52aXJvbm1lbnQgc3RpbGwgZ2V0cyB1cGRhdGVkIQoKKiBQYXRjaGVzIGJ5IEpvbiBEaWVrZW1hLCA5IE5vdiAyMDAyOgogIC0gaW1wcm92ZSBBREMvREFDIGNsb2NraW5nIG9uIHRoZSBTQUNTbmcgYm9hcmQgdG8gYWxpZ24KICAgIHRoZSBmYWlsaW5nIGVkZ2VzIG9mIExSQ0xLIGFuZCBTQ0xLCiAgLSBzYmM4MjYwIGNvbmZpZ3VyYXRpb24gdHdlYWtzCiAgLSBhZGQgc3RhdHVzIExFRCBzdXBwb3J0IGZvciA4Mnh4IHN5c3RlbXMKICAtIHdpcmUgc3NwaS9zc3BvIGNvbW1hbmRzIGludG8gY29tbWFuZCBoYW5kbGVyOyBpbXByb3ZlZCBlcnJvcgogICAgaGFuZGxlcmluZwogIC0gYWRkIHRpbWVzdGFtcCBzdXBwb3J0IGFuZCBhbHRlcm5hdGUgbWVtb3J5IHRlc3QgdG8gdGhlCiAgICBTQUNTbmcgY29uZmlndXJhdGlvbgoKKiBQYXRjaCBieSBWaW5jZSBIdXNvdnNreSwgNyBOb3YgMjAwMjoKICBBZGQgIi1uIiB0byBsaW5rZXIgb3B0aW9ucyB0byBnZXQgcmlkIG9mICJOb3QgZW5vdWdoIHJvb20gZm9yCiAgcHJvZ3JhbSBoZWFkZXJzIiBwcm9ibGVtCgoqIFBhdGNoIGJ5IERhdmlkIE38bGxlciwgMDUgTm92IDIwMDIKICBSZW5hbWUgQ09ORklHX1BMTF9JTlBVVF9GUkVRIHRvIENPTkZJR19TWVNfQ0xLX0ZSRVEKICBzbyB3ZSBjYW4gdXNlIGFuIGFscmVhZHkgZXhpc3RpbmcgbmFtZQoKKiBQYXRjaCBieSBQaWVycmUgQXViZXJ0LCAwNSBOb3YgMjAwMgogIEhhcmR3YXJlIHJlbGF0aWVkIGltcHJvdm1lbnRzIGluIEZEQyBib290IGNvZGUKCiogUGF0Y2ggYnkgSG9sZ2VyIFNjaHVyaWcsIDUgTm92IDIwMDI6CiAgTWFrZSB0aGUgUFhBIHJlYWxseSBjaGFuZ2UgaXQncyBmcmVxdWVuY3kKCiogUGF0Y2ggYnkgUGllcnJlIEF1YmVydCwgMDUgTm92IDIwMDIKICBBZGQgc3VwcG9ydCBmb3Igc2xhdmUgc2VyaWFsIFNwYXJ0YW4gMiBGUEdBcwoKKiBGaXggdW5pbml0aWFsaXplZCBtZW1vcnkgKE1BQyAgYWRkcmVzcykgIGluICA4eHggIFNDQy9GRUMgIGV0aGVybmV0CiAgZHJpdmVycwoKKiBBZGQgc3VwcG9ydCBmb3IgbG9nIGJ1ZmZlciB3aGljaCBjYW4gYmUgcGFzc2VkIHRvIExpbnV4IGtlcm5lbCdzCiAgc3lzbG9nIG1lY2hhbmlzbTsgdXNlZCBlc3BlY2lhbGx5IGZvciBQT1NUIHJlc3VsdHMuCgoqIFBhdGNoIGJ5IEtsYXVzIEhleWRlY2ssIDMxIE9jdCAyMDAyOgogIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIGt1cDRrIGJvYXJkCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMDQgTm92IDIwMDI6CiAgLSB1c2Ugd2F0Y2hkb2cgdG8gcmVzZXQgUFhBMjUwIHN5c3RlbXMKICAtIGFkZGVkIHByb2dyZXNzIGNhbGxiYWNrcyB0byAoc29tZSBvZiB0aGUpIEFSTSBjb2RlCiAgLSB1cGRhdGUgZm9yIENvZ2VudCBDU0IyMjYgYm9hcmQKCiogQWRkIHN1cHBvcnQgZm9yIEZQUzg2MCBib2FyZAoKKiBQYXRjaCBieSBHdWlsbGF1bWUgQWxleGFuZHJlLCwgMDQgTm92IDIwMDI6CiAgSW1wcm92ZSBQQ0kgYWNjZXNzIG9uIDMyLWJpdHMgQ29tcGFjdCBQQ0kgYnVzCgoqIEZpeCBtZGVsYXkoKSBvbiBUUkFCIC0gdGhpcyB3YXMgc3RpbGwgdGhlIGRlYnVnZ2luZyB2ZXJzaW9uIHdpdGgKICBzZWNvbmRzIGluc3RlYWQgb2YgbXMuCgoqIFBhdGNoIGJ5IFJvYmVydCBTY2h3ZWJlbCwgMSBOb3YgMjAwMjoKICBYU2NhbGUgcmVsYXRlZCBjbGVhbnVwIChhZmZlY3RzIGFsbCBBUk0gYm9hcmRzKQoKKiBDbGVhbnVwIG9mIG5hbWVzIGFuZCBSRUFETUUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5vdGVzIGZvciBVLUJvb3QgMC4xLjA6Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClRoaXMgaXMgdGhlIGluaXRpYWwgdmVyc2lvbiBvZiAiRGFzIFUtQm9vdCIsIHRoZSBVbml2ZXJzYWwgQm9vdCBMb2FkZXIuCgpJdCBpcyBiYXNlZCBvbiB2ZXJzaW9uIDIuMC4wICh0aGUgIkhhbGxvd2VlbiBSZWxlYXNlIikgb2YgUFBDQm9vdC4KRm9yIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoaXN0b3J5IG9mIHRoZSBwcm9qZWN0IHBsZWFzZSBzZWUgdGhlClBQQ0Jvb3QgcHJvamVjdCBwYWdlIGF0IGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcHBjYm9vdAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=