SW50cm8KPT09PT0KClRoaXMgZG9jdW1lbnQgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhIGxpc3Qgb2YgdGhlIG1pbmltdW0gbGV2ZWxzIG9mCnNvZnR3YXJlIG5lY2Vzc2FyeSB0byBydW4gdGhlIDIuNiBrZXJuZWxzLCBhcyB3ZWxsIGFzIHByb3ZpZGUgYnJpZWYKaW5zdHJ1Y3Rpb25zIHJlZ2FyZGluZyBhbnkgb3RoZXIgIkdvdGNoYXMiIHVzZXJzIG1heSBlbmNvdW50ZXIgd2hlbgp0cnlpbmcgbGlmZSBvbiB0aGUgQmxlZWRpbmcgRWRnZS4gIElmIHVwZ3JhZGluZyBmcm9tIGEgcHJlLTIuNC54Cmtlcm5lbCwgcGxlYXNlIGNvbnN1bHQgdGhlIENoYW5nZXMgZmlsZSBpbmNsdWRlZCB3aXRoIDIuNC54IGtlcm5lbHMgZm9yCmFkZGl0aW9uYWwgaW5mb3JtYXRpb247IG1vc3Qgb2YgdGhhdCBpbmZvcm1hdGlvbiB3aWxsIG5vdCBiZSByZXBlYXRlZApoZXJlLiAgQmFzaWNhbGx5LCB0aGlzIGRvY3VtZW50IGFzc3VtZXMgdGhhdCB5b3VyIHN5c3RlbSBpcyBhbHJlYWR5CmZ1bmN0aW9uYWwgYW5kIHJ1bm5pbmcgYXQgbGVhc3QgMi40Lngga2VybmVscy4KClRoaXMgZG9jdW1lbnQgaXMgb3JpZ2luYWxseSBiYXNlZCBvbiBteSAiQ2hhbmdlcyIgZmlsZSBmb3IgMi4wLngga2VybmVscwphbmQgdGhlcmVmb3JlIG93ZXMgY3JlZGl0IHRvIHRoZSBzYW1lIHBlb3BsZSBhcyB0aGF0IGZpbGUgKEphcmVkIE1hdWNoLApBeGVsIEJvbGR0LCBBbGVzc2FuZHJvIFNpZ2FsYSwgYW5kIGNvdW50bGVzcyBvdGhlciB1c2VycyBhbGwgb3ZlciB0aGUKJ25ldCkuCgpUaGUgbGF0ZXN0IHJldmlzaW9uIG9mIHRoaXMgZG9jdW1lbnQsIGluIHZhcmlvdXMgZm9ybWF0cywgY2FuIGFsd2F5cwpiZSBmb3VuZCBhdCA8aHR0cDovL2N5YmVyYnV6ei5nYXRlY2guZWR1L2thYm9vbS9saW51eC9DaGFuZ2VzLTIuNC8+LgoKRmVlbCBmcmVlIHRvIHRyYW5zbGF0ZSB0aGlzIGRvY3VtZW50LiAgSWYgeW91IGRvIHNvLCBwbGVhc2Ugc2VuZCBtZSBhClVSTCB0byB5b3VyIHRyYW5zbGF0aW9uIGZvciBpbmNsdXNpb24gaW4gZnV0dXJlIHJldmlzaW9ucyBvZiB0aGlzCmRvY3VtZW50LgoKU21vdHJpdGUgZmlsZSA8aHR0cDovL29ibG9tLnJuYy5ydS9saW51eC9rZXJuZWwvQ2hhbmdlcy5ydT4sIHlhdmx5YXVzaGlzeWEKcnVzc2tpbSBwZXJldm9kb20gZGFubm9nbyBkb2N1bWVudGEuCgpWaXNpdGUgPGh0dHA6Ly93d3cyLmFkaS51YW0uZXMvfmVuZGVyL3RlY25pY28vPiBwYXJhIG9idGVuZXIgbGEgdHJhZHVjY2nzbgphbCBlc3Bh8W9sIGRlIGVzdGUgZG9jdW1lbnRvIGVuIHZhcmlvcyBmb3JtYXRvcy4KCkVpbmUgZGV1dHNjaGUgVmVyc2lvbiBkaWVzZXIgRGF0ZWkgZmluZGVuIFNpZSB1bnRlcgo8aHR0cDovL3d3dy5zdGVmYW4td2ludGVyLmRlL0NoYW5nZXMtMi40LjAudHh0Pi4KCkxhc3QgdXBkYXRlZDogT2N0b2JlciAyOXRoLCAyMDAyCgpDaHJpcyBSaWNrZXIgKGthYm9vbUBnYXRlY2guZWR1IG9yIGNocmlzLnJpY2tlckBnZW5ldGljcy51dGFoLmVkdSkuCgpDdXJyZW50IE1pbmltYWwgUmVxdWlyZW1lbnRzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KClVwZ3JhZGUgdG8gYXQgKmxlYXN0KiB0aGVzZSBzb2Z0d2FyZSByZXZpc2lvbnMgYmVmb3JlIHRoaW5raW5nIHlvdSd2ZQplbmNvdW50ZXJlZCBhIGJ1ZyEgIElmIHlvdSdyZSB1bnN1cmUgd2hhdCB2ZXJzaW9uIHlvdSdyZSBjdXJyZW50bHkKcnVubmluZywgdGhlIHN1Z2dlc3RlZCBjb21tYW5kIHNob3VsZCB0ZWxsIHlvdS4KCkFnYWluLCBrZWVwIGluIG1pbmQgdGhhdCB0aGlzIGxpc3QgYXNzdW1lcyB5b3UgYXJlIGFscmVhZHkKZnVuY3Rpb25hbGx5IHJ1bm5pbmcgYSBMaW51eCAyLjQga2VybmVsLiAgQWxzbywgbm90IGFsbCB0b29scyBhcmUKbmVjZXNzYXJ5IG9uIGFsbCBzeXN0ZW1zOyBvYnZpb3VzbHksIGlmIHlvdSBkb24ndCBoYXZlIGFueSBJU0ROCmhhcmR3YXJlLCBmb3IgZXhhbXBsZSwgeW91IHByb2JhYmx5IG5lZWRuJ3QgY29uY2VybiB5b3Vyc2VsZiB3aXRoCmlzZG40ay11dGlscy4KCm8gIEdudSBDICAgICAgICAgICAgICAgICAgMi45NS4zICAgICAgICAgICAgICAgICAgIyBnY2MgLS12ZXJzaW9uCm8gIEdudSBtYWtlICAgICAgICAgICAgICAgMy43OS4xICAgICAgICAgICAgICAgICAgIyBtYWtlIC0tdmVyc2lvbgpvICBiaW51dGlscyAgICAgICAgICAgICAgIDIuMTIgICAgICAgICAgICAgICAgICAgICMgbGQgLXYKbyAgdXRpbC1saW51eCAgICAgICAgICAgICAyLjEwbyAgICAgICAgICAgICAgICAgICAjIGZkZm9ybWF0IC0tdmVyc2lvbgpvICBtb2R1bGUtaW5pdC10b29scyAgICAgIDAuOS4xMCAgICAgICAgICAgICAgICAgICMgZGVwbW9kIC1WCm8gIGUyZnNwcm9ncyAgICAgICAgICAgICAgMS4yOSAgICAgICAgICAgICAgICAgICAgIyB0dW5lMmZzCm8gIGpmc3V0aWxzICAgICAgICAgICAgICAgMS4xLjMgICAgICAgICAgICAgICAgICAgIyBmc2NrLmpmcyAtVgpvICByZWlzZXJmc3Byb2dzICAgICAgICAgIDMuNi4zICAgICAgICAgICAgICAgICAgICMgcmVpc2VyZnNjayAtViAyPiYxfGdyZXAgcmVpc2VyZnNwcm9ncwpvICB4ZnNwcm9ncyAgICAgICAgICAgICAgIDIuNi4wICAgICAgICAgICAgICAgICAgICMgeGZzX2RiIC1WCm8gIHBjbWNpYXV0aWxzICAgICAgICAgICAgMDA0Cm8gIHBjbWNpYS1jcyAgICAgICAgICAgICAgMy4xLjIxICAgICAgICAgICAgICAgICAgIyBjYXJkbWdyIC1WCm8gIHF1b3RhLXRvb2xzICAgICAgICAgICAgMy4wOSAgICAgICAgICAgICAgICAgICAgIyBxdW90YSAtVgpvICBQUFAgICAgICAgICAgICAgICAgICAgIDIuNC4wICAgICAgICAgICAgICAgICAgICMgcHBwZCAtLXZlcnNpb24KbyAgaXNkbjRrLXV0aWxzICAgICAgICAgICAzLjFwcmUxICAgICAgICAgICAgICAgICAjIGlzZG5jdHJsIDI+JjF8Z3JlcCB2ZXJzaW9uCm8gIG5mcy11dGlscyAgICAgICAgICAgICAgMS4wLjUgICAgICAgICAgICAgICAgICAgIyBzaG93bW91bnQgLS12ZXJzaW9uCm8gIHByb2NwcyAgICAgICAgICAgICAgICAgMy4yLjAgICAgICAgICAgICAgICAgICAgIyBwcyAtLXZlcnNpb24KbyAgb3Byb2ZpbGUgICAgICAgICAgICAgICAwLjkgICAgICAgICAgICAgICAgICAgICAjIG9wcm9maWxlZCAtLXZlcnNpb24KbyAgdWRldiAgICAgICAgICAgICAgICAgICAwNTggICAgICAgICAgICAgICAgICAgICAjIHVkZXZpbmZvIC1WCgpLZXJuZWwgY29tcGlsYXRpb24KPT09PT09PT09PT09PT09PT09CgpHQ0MKLS0tCgpUaGUgZ2NjIHZlcnNpb24gcmVxdWlyZW1lbnRzIG1heSB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBDUFUgaW4geW91cgpjb21wdXRlci4gVGhlIG5leHQgcGFyYWdyYXBoIGFwcGxpZXMgdG8gdXNlcnMgb2YgeDg2IENQVXMsIGJ1dCBub3QKbmVjZXNzYXJpbHkgdG8gdXNlcnMgb2Ygb3RoZXIgQ1BVcy4gVXNlcnMgb2Ygb3RoZXIgQ1BVcyBzaG91bGQgb2J0YWluCmluZm9ybWF0aW9uIGFib3V0IHRoZWlyIGdjYyB2ZXJzaW9uIHJlcXVpcmVtZW50cyBmcm9tIGFub3RoZXIgc291cmNlLgoKVGhlIHJlY29tbWVuZGVkIGNvbXBpbGVyIGZvciB0aGUga2VybmVsIGlzIGdjYyAyLjk1LnggKHggPj0gMyksIGFuZCBpdApzaG91bGQgYmUgdXNlZCB3aGVuIHlvdSBuZWVkIGFic29sdXRlIHN0YWJpbGl0eS4gWW91IG1heSB1c2UgZ2NjIDMuMC54Cmluc3RlYWQgaWYgeW91IHdpc2gsIGFsdGhvdWdoIGl0IG1heSBjYXVzZSBwcm9ibGVtcy4gTGF0ZXIgdmVyc2lvbnMgb2YgZ2NjIApoYXZlIG5vdCByZWNlaXZlZCBtdWNoIHRlc3RpbmcgZm9yIExpbnV4IGtlcm5lbCBjb21waWxhdGlvbiwgYW5kIHRoZXJlIGFyZSAKYWxtb3N0IGNlcnRhaW5seSBidWdzIChtYWlubHksIGJ1dCBub3QgZXhjbHVzaXZlbHksIGluIHRoZSBrZXJuZWwpIHRoYXQKd2lsbCBuZWVkIHRvIGJlIGZpeGVkIGluIG9yZGVyIHRvIHVzZSB0aGVzZSBjb21waWxlcnMuIEluIGFueSBjYXNlLCB1c2luZwpwZ2NjIGluc3RlYWQgb2YgcGxhaW4gZ2NjIGlzIGp1c3QgYXNraW5nIGZvciB0cm91YmxlLgoKVGhlIFJlZCBIYXQgZ2NjIDIuOTYgY29tcGlsZXIgc3VidHJlZSBjYW4gYWxzbyBiZSB1c2VkIHRvIGJ1aWxkIHRoaXMgdHJlZS4KWW91IHNob3VsZCBlbnN1cmUgeW91IHVzZSBnY2MtMi45Ni03NCBvciBsYXRlci4gZ2NjLTIuOTYtNTQgd2lsbCBub3QgYnVpbGQKdGhlIGtlcm5lbCBjb3JyZWN0bHkuCgpJbiBhZGRpdGlvbiwgcGxlYXNlIHBheSBhdHRlbnRpb24gdG8gY29tcGlsZXIgb3B0aW1pemF0aW9uLiAgQW55dGhpbmcKZ3JlYXRlciB0aGFuIC1PMiBtYXkgbm90IGJlIHdpc2UuICBTaW1pbGFybHksIGlmIHlvdSBjaG9vc2UgdG8gdXNlIGdjYy0yLjk1LngKb3IgZGVyaXZhdGl2ZXMsIGJlIHN1cmUgbm90IHRvIHVzZSAtZnN0cmljdC1hbGlhc2luZyAod2hpY2gsIGRlcGVuZGluZyBvbgp5b3VyIHZlcnNpb24gb2YgZ2NjIDIuOTUueCwgbWF5IG5lY2Vzc2l0YXRlIHVzaW5nIC1mbm8tc3RyaWN0LWFsaWFzaW5nKS4KCk1ha2UKLS0tLQoKWW91IHdpbGwgbmVlZCBHbnUgbWFrZSAzLjc5LjEgb3IgbGF0ZXIgdG8gYnVpbGQgdGhlIGtlcm5lbC4KCkJpbnV0aWxzCi0tLS0tLS0tCgpMaW51eCBvbiBJQS0zMiBoYXMgcmVjZW50bHkgc3dpdGNoZWQgZnJvbSB1c2luZyBhczg2IHRvIHVzaW5nIGdhcyBmb3IKYXNzZW1ibGluZyB0aGUgMTYtYml0IGJvb3QgY29kZSwgcmVtb3ZpbmcgdGhlIG5lZWQgZm9yIGFzODYgdG8gY29tcGlsZQp5b3VyIGtlcm5lbC4gIFRoaXMgY2hhbmdlIGRvZXMsIGhvd2V2ZXIsIG1lYW4gdGhhdCB5b3UgbmVlZCBhIHJlY2VudApyZWxlYXNlIG9mIGJpbnV0aWxzLgoKU3lzdGVtIHV0aWxpdGllcwo9PT09PT09PT09PT09PT09CgpBcmNoaXRlY3R1cmFsIGNoYW5nZXMKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpEZXZGUyBoYXMgYmVlbiBvYnNvbGV0ZWQgaW4gZmF2b3VyIG9mIHVkZXYKKGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMva2VybmVsL2hvdHBsdWcvKQoKMzItYml0IFVJRCBzdXBwb3J0IGlzIG5vdyBpbiBwbGFjZS4gIEhhdmUgZnVuIQoKTGludXggZG9jdW1lbnRhdGlvbiBmb3IgZnVuY3Rpb25zIGlzIHRyYW5zaXRpb25pbmcgdG8gaW5saW5lCmRvY3VtZW50YXRpb24gdmlhIHNwZWNpYWxseS1mb3JtYXR0ZWQgY29tbWVudHMgbmVhciB0aGVpcgpkZWZpbml0aW9ucyBpbiB0aGUgc291cmNlLiAgVGhlc2UgY29tbWVudHMgY2FuIGJlIGNvbWJpbmVkIHdpdGggdGhlClNHTUwgdGVtcGxhdGVzIGluIHRoZSBEb2N1bWVudGF0aW9uL0RvY0Jvb2sgZGlyZWN0b3J5IHRvIG1ha2UgRG9jQm9vawpmaWxlcywgd2hpY2ggY2FuIHRoZW4gYmUgY29udmVydGVkIGJ5IERvY0Jvb2sgc3R5bGVzaGVldHMgdG8gUG9zdFNjcmlwdCwKSFRNTCwgUERGIGZpbGVzLCBhbmQgc2V2ZXJhbCBvdGhlciBmb3JtYXRzLiAgSW4gb3JkZXIgdG8gY29udmVydCBmcm9tCkRvY0Jvb2sgZm9ybWF0IHRvIGEgZm9ybWF0IG9mIHlvdXIgY2hvaWNlLCB5b3UnbGwgbmVlZCB0byBpbnN0YWxsIEphZGUgYXMKd2VsbCBhcyB0aGUgZGVzaXJlZCBEb2NCb29rIHN0eWxlc2hlZXRzLgoKVXRpbC1saW51eAotLS0tLS0tLS0tCgpOZXcgdmVyc2lvbnMgb2YgdXRpbC1saW51eCBwcm92aWRlICpmZGlzayBzdXBwb3J0IGZvciBsYXJnZXIgZGlza3MsCnN1cHBvcnQgbmV3IG9wdGlvbnMgdG8gbW91bnQsIHJlY29nbml6ZSBtb3JlIHN1cHBvcnRlZCBwYXJ0aXRpb24KdHlwZXMsIGhhdmUgYSBmZGZvcm1hdCB3aGljaCB3b3JrcyB3aXRoIDIuNCBrZXJuZWxzLCBhbmQgc2ltaWxhciBnb29kaWVzLgpZb3UnbGwgcHJvYmFibHkgd2FudCB0byB1cGdyYWRlLgoKS3N5bW9vcHMKLS0tLS0tLS0KCklmIHRoZSB1bnRoaW5rYWJsZSBoYXBwZW5zIGFuZCB5b3VyIGtlcm5lbCBvb3BzZXMsIHlvdSdsbCBuZWVkIGEgMi40CnZlcnNpb24gb2Yga3N5bW9vcHMgdG8gZGVjb2RlIHRoZSByZXBvcnQ7IHNlZSBSRVBPUlRJTkctQlVHUyBpbiB0aGUKcm9vdCBvZiB0aGUgTGludXggc291cmNlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKTW9kdWxlLUluaXQtVG9vbHMKLS0tLS0tLS0tLS0tLS0tLS0KCkEgbmV3IG1vZHVsZSBsb2FkZXIgaXMgbm93IGluIHRoZSBrZXJuZWwgdGhhdCByZXF1aXJlcyBtb2R1bGUtaW5pdC10b29scwp0byB1c2UuICBJdCBpcyBiYWNrd2FyZCBjb21wYXRpYmxlIHdpdGggdGhlIDIuNC54IHNlcmllcyBrZXJuZWxzLgoKTWtpbml0cmQKLS0tLS0tLS0KClRoZXNlIGNoYW5nZXMgdG8gdGhlIC9saWIvbW9kdWxlcyBmaWxlIHRyZWUgbGF5b3V0IGFsc28gcmVxdWlyZSB0aGF0Cm1raW5pdHJkIGJlIHVwZ3JhZGVkLgoKRTJmc3Byb2dzCi0tLS0tLS0tLQoKVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGUyZnNwcm9ncyBmaXhlcyBzZXZlcmFsIGJ1Z3MgaW4gZnNjayBhbmQKZGVidWdmcy4gIE9idmlvdXNseSwgaXQncyBhIGdvb2QgaWRlYSB0byB1cGdyYWRlLgoKSkZTdXRpbHMKLS0tLS0tLS0KClRoZSBqZnN1dGlscyBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1dGlsaXRpZXMgZm9yIHRoZSBmaWxlIHN5c3RlbS4KVGhlIGZvbGxvd2luZyB1dGlsaXRpZXMgYXJlIGF2YWlsYWJsZToKbyBmc2NrLmpmcyAtIGluaXRpYXRlIHJlcGxheSBvZiB0aGUgdHJhbnNhY3Rpb24gbG9nLCBhbmQgY2hlY2sKICBhbmQgcmVwYWlyIGEgSkZTIGZvcm1hdHRlZCBwYXJ0aXRpb24uCm8gbWtmcy5qZnMgLSBjcmVhdGUgYSBKRlMgZm9ybWF0dGVkIHBhcnRpdGlvbi4KbyBvdGhlciBmaWxlIHN5c3RlbSB1dGlsaXRpZXMgYXJlIGFsc28gYXZhaWxhYmxlIGluIHRoaXMgcGFja2FnZS4KClJlaXNlcmZzcHJvZ3MKLS0tLS0tLS0tLS0tLQoKVGhlIHJlaXNlcmZzcHJvZ3MgcGFja2FnZSBzaG91bGQgYmUgdXNlZCBmb3IgcmVpc2VyZnMtMy42LngKKExpbnV4IGtlcm5lbHMgMi40LngpLiBJdCBpcyBhIGNvbWJpbmVkIHBhY2thZ2UgYW5kIGNvbnRhaW5zIHdvcmtpbmcKdmVyc2lvbnMgb2YgbWtyZWlzZXJmcywgcmVzaXplX3JlaXNlcmZzLCBkZWJ1Z3JlaXNlcmZzIGFuZApyZWlzZXJmc2NrLiBUaGVzZSB1dGlscyB3b3JrIG9uIGJvdGggaTM4NiBhbmQgYWxwaGEgcGxhdGZvcm1zLgoKWGZzcHJvZ3MKLS0tLS0tLS0KClRoZSBsYXRlc3QgdmVyc2lvbiBvZiB4ZnNwcm9ncyBjb250YWlucyBta2ZzLnhmcywgeGZzX2RiLCBhbmQgdGhlCnhmc19yZXBhaXIgdXRpbGl0aWVzLCBhbW9uZyBvdGhlcnMsIGZvciB0aGUgWEZTIGZpbGVzeXN0ZW0uICBJdCBpcwphcmNoaXRlY3R1cmUgaW5kZXBlbmRlbnQgYW5kIGFueSB2ZXJzaW9uIGZyb20gMi4wLjAgb253YXJkIHNob3VsZAp3b3JrIGNvcnJlY3RseSB3aXRoIHRoaXMgdmVyc2lvbiBvZiB0aGUgWEZTIGtlcm5lbCBjb2RlICgyLjYuMCBvcgpsYXRlciBpcyByZWNvbW1lbmRlZCwgZHVlIHRvIHNvbWUgc2lnbmlmaWNhbnQgaW1wcm92ZW1lbnRzKS4KClBDTUNJQXV0aWxzCi0tLS0tLS0tLS0tCgpQQ01DSUF1dGlscyByZXBsYWNlcyBwY21jaWEtY3MgKHNlZSBiZWxvdykuIEl0IHByb3Blcmx5IHNldHMgdXAKUENNQ0lBIHNvY2tldHMgYXQgc3lzdGVtIHN0YXJ0dXAgYW5kIGxvYWRzIHRoZSBhcHByb3ByaWF0ZSBtb2R1bGVzCmZvciAxNi1iaXQgUENNQ0lBIGRldmljZXMgaWYgdGhlIGtlcm5lbCBpcyBtb2R1bGFyaXplZCBhbmQgdGhlIGhvdHBsdWcKc3Vic3lzdGVtIGlzIHVzZWQuCgpQY21jaWEtY3MKLS0tLS0tLS0tCgpQQ01DSUEgKFBDIENhcmQpIHN1cHBvcnQgaXMgbm93IHBhcnRpYWxseSBpbXBsZW1lbnRlZCBpbiB0aGUgbWFpbgprZXJuZWwgc291cmNlLiBUaGUgInBjbWNpYXV0aWxzIiBwYWNrYWdlIChzZWUgYWJvdmUpIHJlcGxhY2VzIHBjbWNpYS1jcwpmb3IgbmV3ZXN0IGtlcm5lbHMuCgpRdW90YS10b29scwotLS0tLS0tLS0tLQoKU3VwcG9ydCBmb3IgMzIgYml0IHVpZCdzIGFuZCBnaWQncyBpcyByZXF1aXJlZCBpZiB5b3Ugd2FudCB0byB1c2UKdGhlIG5ld2VyIHZlcnNpb24gMiBxdW90YSBmb3JtYXQuICBRdW90YS10b29scyB2ZXJzaW9uIDMuMDcgYW5kCm5ld2VyIGhhcyB0aGlzIHN1cHBvcnQuICBVc2UgdGhlIHJlY29tbWVuZGVkIHZlcnNpb24gb3IgbmV3ZXIKZnJvbSB0aGUgdGFibGUgYWJvdmUuCgpJbnRlbCBJQTMyIG1pY3JvY29kZQotLS0tLS0tLS0tLS0tLS0tLS0tLQoKQSBkcml2ZXIgaGFzIGJlZW4gYWRkZWQgdG8gYWxsb3cgdXBkYXRpbmcgb2YgSW50ZWwgSUEzMiBtaWNyb2NvZGUsCmFjY2Vzc2libGUgYXMgYm90aCBhIGRldmZzIHJlZ3VsYXIgZmlsZSBhbmQgYXMgYSBub3JtYWwgKG1pc2MpCmNoYXJhY3RlciBkZXZpY2UuICBJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmcyB5b3UgbWF5IG5lZWQgdG86Cgpta2RpciAvZGV2L2NwdQpta25vZCAvZGV2L2NwdS9taWNyb2NvZGUgYyAxMCAxODQKY2htb2QgMDY0NCAvZGV2L2NwdS9taWNyb2NvZGUKCmFzIHJvb3QgYmVmb3JlIHlvdSBjYW4gdXNlIHRoaXMuICBZb3UnbGwgcHJvYmFibHkgYWxzbyB3YW50IHRvCmdldCB0aGUgdXNlci1zcGFjZSBtaWNyb2NvZGVfY3RsIHV0aWxpdHkgdG8gdXNlIHdpdGggdGhpcy4KClBvd2VydHdlYWsKLS0tLS0tLS0tLQoKSWYgeW91IGFyZSBydW5uaW5nIHYwLjEuMTcgb3IgZWFybGllciwgeW91IHNob3VsZCB1cGdyYWRlIHRvCnZlcnNpb24gdjAuOTkuMCBvciBoaWdoZXIuIFJ1bm5pbmcgb2xkIHZlcnNpb25zIG1heSBjYXVzZSBwcm9ibGVtcwp3aXRoIHByb2dyYW1zIHVzaW5nIHNoYXJlZCBtZW1vcnkuCgp1ZGV2Ci0tLS0KdWRldiBpcyBhIHVzZXJzcGFjZSBhcHBsaWNhdGlvbiBmb3IgcG9wdWxhdGluZyAvZGV2IGR5bmFtaWNhbGx5IHdpdGgKb25seSBlbnRyaWVzIGZvciBkZXZpY2VzIGFjdHVhbGx5IHByZXNlbnQuIHVkZXYgcmVwbGFjZXMgZGV2ZnMuCgpOZXR3b3JraW5nCj09PT09PT09PT0KCkdlbmVyYWwgY2hhbmdlcwotLS0tLS0tLS0tLS0tLS0KCklmIHlvdSBoYXZlIGFkdmFuY2VkIG5ldHdvcmsgY29uZmlndXJhdGlvbiBuZWVkcywgeW91IHNob3VsZCBwcm9iYWJseQpjb25zaWRlciB1c2luZyB0aGUgbmV0d29yayB0b29scyBmcm9tIGlwLXJvdXRlMi4KClBhY2tldCBGaWx0ZXIgLyBOQVQKLS0tLS0tLS0tLS0tLS0tLS0tLQpUaGUgcGFja2V0IGZpbHRlcmluZyBhbmQgTkFUIGNvZGUgdXNlcyB0aGUgc2FtZSB0b29scyBsaWtlIHRoZSBwcmV2aW91cyAyLjQueAprZXJuZWwgc2VyaWVzIChpcHRhYmxlcykuICBJdCBzdGlsbCBpbmNsdWRlcyBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eSBtb2R1bGVzCmZvciAyLjIueC1zdHlsZSBpcGNoYWlucyBhbmQgMi4wLngtc3R5bGUgaXBmd2FkbS4KClBQUAotLS0KClRoZSBQUFAgZHJpdmVyIGhhcyBiZWVuIHJlc3RydWN0dXJlZCB0byBzdXBwb3J0IG11bHRpbGluayBhbmQgdG8KZW5hYmxlIGl0IHRvIG9wZXJhdGUgb3ZlciBkaXZlcnNlIG1lZGlhIGxheWVycy4gIElmIHlvdSB1c2UgUFBQLAp1cGdyYWRlIHBwcGQgdG8gYXQgbGVhc3QgMi40LjAuCgpJZiB5b3UgYXJlIG5vdCB1c2luZyBkZXZmcywgeW91IG11c3QgaGF2ZSB0aGUgZGV2aWNlIGZpbGUgL2Rldi9wcHAKd2hpY2ggY2FuIGJlIG1hZGUgYnk6Cgpta25vZCAvZGV2L3BwcCBjIDEwOCAwCgphcyByb290LgoKSWYgeW91IHVzZSBkZXZmc2QgYW5kIGJ1aWxkIHBwcCBzdXBwb3J0IGFzIG1vZHVsZXMsIHlvdSB3aWxsIG5lZWQKdGhlIGZvbGxvd2luZyBpbiB5b3VyIC9ldGMvZGV2ZnNkLmNvbmYgZmlsZToKCkxPT0tVUAlQUFAJTU9ETE9BRAoKSXNkbjRrLXV0aWxzCi0tLS0tLS0tLS0tLQoKRHVlIHRvIGNoYW5nZXMgaW4gdGhlIGxlbmd0aCBvZiB0aGUgcGhvbmUgbnVtYmVyIGZpZWxkLCBpc2RuNGstdXRpbHMKbmVlZHMgdG8gYmUgcmVjb21waWxlZCBvciAocHJlZmVyYWJseSkgdXBncmFkZWQuCgpORlMtdXRpbHMKLS0tLS0tLS0tCgpJbiAyLjQgYW5kIGVhcmxpZXIga2VybmVscywgdGhlIG5mcyBzZXJ2ZXIgbmVlZGVkIHRvIGtub3cgYWJvdXQgYW55CmNsaWVudCB0aGF0IGV4cGVjdGVkIHRvIGJlIGFibGUgdG8gYWNjZXNzIGZpbGVzIHZpYSBORlMuICBUaGlzCmluZm9ybWF0aW9uIHdvdWxkIGJlIGdpdmVuIHRvIHRoZSBrZXJuZWwgYnkgIm1vdW50ZCIgd2hlbiB0aGUgY2xpZW50Cm1vdW50ZWQgdGhlIGZpbGVzeXN0ZW0sIG9yIGJ5ICJleHBvcnRmcyIgYXQgc3lzdGVtIHN0YXJ0dXAuICBleHBvcnRmcwp3b3VsZCB0YWtlIGluZm9ybWF0aW9uIGFib3V0IGFjdGl2ZSBjbGllbnRzIGZyb20gL3Zhci9saWIvbmZzL3JtdGFiLgoKVGhpcyBhcHByb2FjaCBpcyBxdWl0ZSBmcmFnaWxlIGFzIGl0IGRlcGVuZHMgb24gcm10YWIgYmVpbmcgY29ycmVjdAp3aGljaCBpcyBub3QgYWx3YXlzIGVhc3ksIHBhcnRpY3VsYXJseSB3aGVuIHRyeWluZyB0byBpbXBsZW1lbnQKZmFpbC1vdmVyLiAgRXZlbiB3aGVuIHRoZSBzeXN0ZW0gaXMgd29ya2luZyB3ZWxsLCBybXRhYiBzdWZmZXJzIGZyb20KZ2V0dGluZyBsb3RzIG9mIG9sZCBlbnRyaWVzIHRoYXQgbmV2ZXIgZ2V0IHJlbW92ZWQuCgpXaXRoIDIuNiB3ZSBoYXZlIHRoZSBvcHRpb24gb2YgaGF2aW5nIHRoZSBrZXJuZWwgdGVsbCBtb3VudGQgd2hlbiBpdApnZXRzIGEgcmVxdWVzdCBmcm9tIGFuIHVua25vd24gaG9zdCwgYW5kIG1vdW50ZCBjYW4gZ2l2ZSBhcHByb3ByaWF0ZQpleHBvcnQgaW5mb3JtYXRpb24gdG8gdGhlIGtlcm5lbC4gIFRoaXMgcmVtb3ZlcyB0aGUgZGVwZW5kZW5jeSBvbgpybXRhYiBhbmQgbWVhbnMgdGhhdCB0aGUga2VybmVsIG9ubHkgbmVlZHMgdG8ga25vdyBhYm91dCBjdXJyZW50bHkKYWN0aXZlIGNsaWVudHMuCgpUbyBlbmFibGUgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eSwgeW91IG5lZWQgdG86CgogIG1vdW50IC10IG5mc2QgbmZzZCAvcHJvYy9mcy9uZnMKCmJlZm9yZSBydW5uaW5nIGV4cG9ydGZzIG9yIG1vdW50ZC4gIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYWxsIE5GUwpzZXJ2aWNlcyBiZSBwcm90ZWN0ZWQgZnJvbSB0aGUgaW50ZXJuZXQtYXQtbGFyZ2UgYnkgYSBmaXJld2FsbCB3aGVyZQp0aGF0IGlzIHBvc3NpYmxlLgoKR2V0dGluZyB1cGRhdGVkIHNvZnR3YXJlCj09PT09PT09PT09PT09PT09PT09PT09PQoKS2VybmVsIGNvbXBpbGF0aW9uCioqKioqKioqKioqKioqKioqKgoKZ2NjIDIuOTUuMwotLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvZ2NjL2djYy0yLjk1LjMudGFyLmd6PgoKTWFrZQotLS0tCm8gIDxmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvbWFrZS8+CgpCaW51dGlscwotLS0tLS0tLQpvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L2RldmVsL2JpbnV0aWxzLz4KClN5c3RlbSB1dGlsaXRpZXMKKioqKioqKioqKioqKioqKgoKVXRpbC1saW51eAotLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvdXRpbC1saW51eC8+CgpLc3ltb29wcwotLS0tLS0tLQpvICA8ZnRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9rc3ltb29wcy92Mi40Lz4KCk1vZHVsZS1Jbml0LVRvb2xzCi0tLS0tLS0tLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9ydXN0eS9tb2R1bGVzLz4KCk1raW5pdHJkCi0tLS0tLS0tCm8gIDxmdHA6Ly9yYXdoaWRlLnJlZGhhdC5jb20vcHViL3Jhd2hpZGUvU1JQTVMvU1JQTVMvPgoKRTJmc3Byb2dzCi0tLS0tLS0tLQpvICA8aHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9lMmZzcHJvZ3MvZTJmc3Byb2dzLTEuMjkudGFyLmd6PgoKSkZTdXRpbHMKLS0tLS0tLS0KbyAgPGh0dHA6Ly9qZnMuc291cmNlZm9yZ2UubmV0Lz4KClJlaXNlcmZzcHJvZ3MKLS0tLS0tLS0tLS0tLQpvICA8aHR0cDovL3d3dy5uYW1lc3lzLmNvbS9wdWIvcmVpc2VyZnNwcm9ncy9yZWlzZXJmc3Byb2dzLTMuNi4zLnRhci5nej4KClhmc3Byb2dzCi0tLS0tLS0tCm8gIDxmdHA6Ly9vc3Muc2dpLmNvbS9wcm9qZWN0cy94ZnMvZG93bmxvYWQvPgoKUGNtY2lhdXRpbHMKLS0tLS0tLS0tLS0KbyAgPGZ0cDovL2Z0cC5rZXJuZWwub3JnL3B1Yi9saW51eC91dGlscy9rZXJuZWwvcGNtY2lhLz4KClBjbWNpYS1jcwotLS0tLS0tLS0KbyAgPGh0dHA6Ly9wY21jaWEtY3Muc291cmNlZm9yZ2UubmV0Lz4KClF1b3RhLXRvb2xzCi0tLS0tLS0tLS0KbyAgPGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGludXhxdW90YS8+CgpEb2NCb29rIFN0eWxlc2hlZXRzCi0tLS0tLS0tLS0tLS0tLS0tLS0KbyAgPGh0dHA6Ly9ud2Fsc2guY29tL2RvY2Jvb2svZHNzc2wvPgoKWE1MVE8gWFNMVCBGcm9udGVuZAotLS0tLS0tLS0tLS0tLS0tLS0tCm8gIDxodHRwOi8vY3liZXJlbGsubmV0L3RpbS94bWx0by8+CgpJbnRlbCBQNiBtaWNyb2NvZGUKLS0tLS0tLS0tLS0tLS0tLS0tCm8gIDxodHRwOi8vd3d3LnVyYmFubXl0aC5vcmcvbWljcm9jb2RlLz4KClBvd2VydHdlYWsKLS0tLS0tLS0tLQpvICA8aHR0cDovL3Bvd2VydHdlYWsuc291cmNlZm9yZ2UubmV0Lz4KCnVkZXYKLS0tLQpvIDxodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL2tlcm5lbC9ob3RwbHVnL3VkZXYuaHRtbD4KCk5ldHdvcmtpbmcKKioqKioqKioqKgoKUFBQCi0tLQpvICA8ZnRwOi8vZnRwLnNhbWJhLm9yZy9wdWIvcHBwL3BwcC0yLjQuMC50YXIuZ3o+CgpJc2RuNGstdXRpbHMKLS0tLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAuaXNkbjRsaW51eC5kZS9wdWIvaXNkbjRsaW51eC91dGlscy9pc2RuNGstdXRpbHMudjMuMXByZTEudGFyLmd6PgoKTkZTLXV0aWxzCi0tLS0tLS0tLQpvICA8aHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9MTQ+CgpJcHRhYmxlcwotLS0tLS0tLQpvICA8aHR0cDovL3d3dy5pcHRhYmxlcy5vcmcvZG93bmxvYWRzLmh0bWw+CgpJcC1yb3V0ZTIKLS0tLS0tLS0tCm8gIDxmdHA6Ly9mdHAudHV4Lm9yZy9wdWIvbmV0L2lwLXJvdXRpbmcvaXByb3V0ZTItMi4yLjQtbm93LXNzOTkxMDIzLnRhci5nej4KCk9Qcm9maWxlCi0tLS0tLS0tCm8gIDxodHRwOi8vb3Byb2ZpbGUuc2YubmV0L2Rvd25sb2FkLz4KCk5GUy1VdGlscwotLS0tLS0tLS0KbyAgPGh0dHA6Ly9uZnMuc291cmNlZm9yZ2UubmV0Lz4KCg==