QWxiZXJ0IEVpbnN0ZWluIHdhcyBib3JuIG9uIE1hcmNoIDE0LCAxODc5IGluIFVsbSwgR2VybWFueS4sIEFzIGl0IHR1cm5lZCBvdXQsIEFsYmVydCBwcmVmZXJyZWQgdG8gbGVhcm4gb24gaGlzIG93biBhbmQgaGFkIHRhdWdodCBoaW1zZWxmIGFkdmFuY2VkIG1hdGhlbWF0aWNzIGFuZCBzY2llbmNlIGJ5IHRoZSB0aW1lIGhlIHdhcyBhIHRlZW5hZ2VyLiBBbm90aGVyIGludGVyZXN0aW5nIGZhY3QgaXMgdGhhdCBiZXR3ZWVuIHRoZSBhZ2VzIG9mIHNpeCB0byB0aGlydGVlbiwgaGUgc3R1ZGllZCB0aGUgdmlvbGluLglBbGJlcnQgRWluc3RlaW4gQmlvZ3JhcGh5IC0gSW4gdGhpcyB2aWRlbywgbGVhcm4gYWJvdXQgdGhlIGxpZmUgb2YgdGhlIE5vYmVsIFByaXplIHdpbm5lciwgQWxiZXJ0IEVpbnN0ZWluLg0KRWluc3RlaW4ncyBoaWdoIHNjaG9vbCB0cmFuc2NyaXB0IEFsYmVydCBFaW5zdGVpbiB3YXMgYm9ybiBpbiBVbG0sIGluIHRoZSBLaW5nZG9tIG9mIFf8cnR0ZW1iZXJnIGluIHRoZSBHZXJtYW4gRW1waXJlIG9uIDE0IE1hcmNoIDE4NzkuIDguLCBXaXRoIGEgZmV3IGZyaWVuZHMgaGUgbWV0IGluIEJlcm4sIEVpbnN0ZWluIHN0YXJ0ZWQgYSBzbWFsbCBkaXNjdXNzaW9uIGdyb3VwLCBzZWxmLW1vY2tpbmdseSBuYW1lZCAiVGhlIE9seW1waWEgQWNhZGVteSIsIHdoaWNoIG1ldCByZWd1bGFybHkgdG8gZGlzY3VzcyBzY2llbmNlIGFuZCBwaGlsb3NvcGh5LiBUaGVpciByZWFkaW5ncyBpbmNsdWRlZCB0aGUgd29ya3Mgb2YgSGVucmkgUG9pbmNhcuksIEVybnN0IE1hY2gsIGFuZCBEYXZpZCBIdW1lLCB3aGljaCBpbmZsdWVuY2VkIGhpcyBzY2llbnRpZmljIGFuZCBwaGlsb3NvcGhpY2FsIG91dGxvb2suCUFsYmVydCBFaW5zdGVpbiBiaW9ncmFwaHkgaW5jbHVkZXMgZmFjdHMsIGludmVudGlvbnMsIGxpZmUsIGFjY29tcGxpc2htZW50cywgY2hpbGRob29kICYgdGltZWxpbmUgb2YgQWxiZXJ0IEVpbnN0ZWluLg0KQWxiZXJ0IEVpbnN0ZWluICwgTmllbHMgQm9ociwgUGh5c2ljczogV2F2ZSBTdHJ1Y3R1cmUgb2YgTWF0dGVyIChXU00pIGV4cGxhaW5zIEJvaHIgYW5kIEVpbnN0ZWluJ3MgRGlzY3Vzc2lvbiBvbiBFcGlzdGVtb2xvZ3kgb2YgUGh5c2ljcy4JV2l0aCBmcmllbmRzIGhlIG1ldCBpbiBCZXJuLCBFaW5zdGVpbiBmb3JtZWQgYSB3ZWVrbHkgZGlzY3Vzc2lvbiBjbHViIG9uLiBzY2llbmNlIGFuZCBwaGlsb3NvcGh5LCB3aGljaCBoZSBqb2tpbmdseSBuYW1lZCAiVGhlIE9seW1waWEgQWNhZGVteS4iLg0KQWxiZXJ0IEVpbnN0ZWluIHdhcyBib3JuIGludG8gYSBKZXdpc2ggZmFtaWx5IGluIFVsbSwgV/xydHRlbWJlcmcsIEdlcm1hbnkuIEhlIGlzIGJlc3Qga25vd24gZm9yIGhpcyB0aGVvcnkgb2YgcmVsYXRpdml0eSBhbmQgc3BlY2lmaWNhbGx5IHRoZSBlcXVhdGlvbiBFID0gbWMyLCB3aGljaCBpbmRpY2F0ZXMgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIG1hc3MgYW5kIGVuZXJneSAob3IgbWFzcy1lbmVyZ3kgZXF1aXZhbGVuY2UpLiwgSW4gMTk0NiwgRWluc3RlaW4gY29sbGFib3JhdGVkIHdpdGggUmFiYmkgSXNyYWVsIEdvbGRzdGVpbiwgTWlkZGxlc2V4IGhlaXIgQy4gUnVnZ2xlcyBTbWl0aCwgYW5kIGFjdGl2aXN0IGF0dG9ybmV5IEdlb3JnZSBBbHBlcnQgb24gdGhlIEFsYmVydCBFaW5zdGVpbiBGb3VuZGF0aW9uIGZvciBIaWdoZXIgTGVhcm5pbmcsIEluYy4gd2hpY2ggd2FzIGZvcm1lZCB0byBjcmVhdGUgYSBKZXdpc2gtc3BvbnNvcmVkIHNlY3VsYXIgdW5pdmVyc2l0eSwgb3BlbiB0byBhbGwgc3R1ZGVudHMsIG9uIHRoZSBncm91bmRzIG9mIHRoZSBmb3JtZXIgTWlkZGxlc2V4IENvbGxlZ2UgaW4gV2FsdGhhbSwgTWFzc2FjaHVzZXR0cy4gTWlkZGxlc2V4IHdhcyBjaG9zZW4gaW4gcGFydCBiZWNhdXNlIGl0IHdhcyBhY2Nlc3NpYmxlIGZyb20gYm90aCBCb3N0b24gYW5kIE5ldyBZb3JrIENpdHksIEpld2lzaCBjdWx0dXJhbCBjZW50ZXJzIG9mIHRoZSBVU0EuCUVpbnN0ZWluIHdhcyBib3JuIGluIEdlcm1hbnkgb24gTWFyY2ggMTQsIDE4NzkuQXMgYSBraWQgaGUgaGFkIHRyb3VibGUgbGVhcm5pbmcgdG8gc3BlYWsuDQpHZXJtYW4tQW1lcmljYW4gcGh5c2ljaXN0IHdobywgaW4gMTkwNSwgcHVibGlzaGVkIHRocmVlIHBhcGVycywgZWFjaCBvZiB3aGljaCBoYWQgYSBwcm9mb3VuZCBlZmZlY3Qgb24gdGhlIGRldmVsb3BtZW50IG9mIHBoeXNpY3MuCSJXaHkgaXMgaXQgdGhhdCBub2JvZHkgdW5kZXJzdGFuZHMgbWUgYW5kIGV2ZXJ5Ym9keSBsaWtlcyBtZSAiICcgQWxiZXJ0IEVpbnN0ZWluIFdlbGwsIHRoaXMgdmVyeSBxdW90ZSBmcm9tIHRoZSBtYW4gaGltc2VsZiwuDQpJbnRlcnZpZXcgd2l0aCBBbGJlcnQgRWluc3RlaW4uCUFsYmVydCBFaW5zdGVpbiB3YXMgYm9ybiBpbnRvIGEgSmV3aXNoIGZhbWlseSBpbiBVbG0sIFcgbHJ0dGVtYmVyZywgR2VybWFueS4NCkVpbnN0ZWluJ3MgR29kIEFsYmVydCBFaW5zdGVpbidzIFF1ZXN0IEFzIGEgU2NpZW50aXN0IGFuZCBBcyBhIEpldyB0byBSZXBsYWNlIGEgRm9yc2FrZW4gR29kLiBGaXJzdCBnaXZlbiBpbiAxOTc5LCB0aGUgYXdhcmQgaXMgcHJlc2VudGVkIHRvIHBlb3BsZSB3aG8gaGF2ZSAicmVuZGVyZWQgb3V0c3RhbmRpbmcgc2VydmljZXMiIGluIGNvbm5lY3Rpb24gd2l0aCBFaW5zdGVpbi4JQWxiZXJ0IGdyYWR1YXRlZCBpbiAxOTAwIHdpdGggYSBkZWdyZWUgaW4gcGh5c2ljcy4sIEFsYmVydCBFaW5zdGVpbidzIG1vc3Qgbm90ZWQgY29udHJpYnV0aW9uIHRvIHRoZSB3b3JsZCBpcyBoaXMgdGhlb3J5IG9mIHJlbGF0aXZpdHkuIEJ5IDE5MDIsIEVpbnN0ZWluIHdhcyB3b3JraW5nIG9uIGNvbWJpbmluZyB0aW1lIGFuZCBzcGFjZSwgbWF0dGVyIGFuZCBlbmVyZ3kuLCBzZWNvbmRhcnkgc2Nob29sIGF0IEFhcmF1IHBsYW5uaW5nIHRvIHVzZSB0aGlzIHJvdXRlIHRvIGVudGVyIHRoZSBFVEggaW4uIFdoaWxlIGF0IEFhcmF1IGhlIHdyb3RlIGFuIGVzc2F5IChmb3Igd2hpY2ggd2FzIG9ubHkgZ2l2ZW4gYS4NCkJyaWVmIGFuZCBTdHJhaWdodGZvcndhcmQgR3VpZGU6IFdobyBXYXMgQWxiZXJ0IEVpbnN0ZWluIC4sIFRoaXMgbGVkIHRvIGhpbSBnb2luZyBiYWNrIHRvIHNlY29uZGFyeSBzY2hvb2wgaW4gQWFyYXUsIFN3aXR6ZXJsYW5kLCB3aGljaCBoZSBncmFkdWF0ZWQgaW4gMTg5Ni4JQWxiZXJ0IEVpbnN0ZWluIHdhcyBiZXN0IGtub3duIGZvciBoaXMgdGhlb3J5IG9mIHJlbGF0aXZpdHksIEU9bWMuLCBBbGJlcnQgRWluc3RlaW4gd2FzIGJvcm4gaW4gR2VybWFueSBpbiB0aGUgbGF0ZSAxODAwJ3MuLCBXaGVuIGhlIHdhcyBpbiBzY2hvb2wgdGhlcmUgaGUgd2FzIGFsd2F5cyBnZXR0aW5nIGludG8gdHJvdWJsZS4gSGUgd2FzIGNvbnN0YW50bHkgcGxheWluZyBwcmFua3Mgb24gaGlzIHRlYWNoZXJzIGFuZCBjbGFzc21hdGVzIGluIHNjaG9vbC4NCkFsYmVydCBFaW5zdGVpbiBpcyB1bml2ZXJzYWxseSByZWNvZ25pemVkIGFzIHRoZSBncmVhdGVzdCBwaHlzaWNpc3Qgb2Ygb3VyIGFnZS4sIHRoZW9yeSBvZiByZWxhdGl2aXR5LCBFaW5zdGVpbidzIG90aGVyIHdvcmsgd291bGQgaGF2ZSBtYWRlIGhpbSB0aGUgc2Vjb25kIGdyZWF0ZXN0IHBoeXNpY2lzdCBvZiBoaXMgdGltZS4gdGhlb3J5IG9mIHJlbGF0aXZpdHksIEVpbnN0ZWluJ3Mgb3RoZXIgd29yayB3b3VsZCBoYXZlIG1hZGUgaGltIHRoZSBzZWNvbmQgZ3JlYXRlc3QgcGh5c2ljaXN0IG9mIGhpcyB0aW1lLglBbGwgZnJlZSBlc3NheXMgc3VibWl0dGVkIGFuZCBncmFkZWQgYnkgaGlnaCBzY2hvb2wgYW5kIGNvbGxlZ2Ugc3R1ZGVudHMuDQpUaGUgR3JlYXQgU2NpZW50aXN0IEFsYmVydCBFaW5zdGVpbiB3YXMgYm9ybiBvbiAxNHRoIG1hcmNoIDE4NzkgaW4gVWxtLCBLaW5nZG9tIG9mIFd1cnR0ZW1iZXJnIEdlcm1hbiBFbXBpcmUuCVdoYXQgaXMgdGhlIGludmVudGlvbiBvZiAoaGFzIGJlZW4gaW52ZW50ZWQgYnkpIEFsYmVydCBFaW5zdGVpbiAoMTQgTWFyY2ggMTg3OSAxOCBBcHJpbCAxOTU1KSwgdGhlIEdlcm1hbiB0aGVvcmV0aWNhbCBwaHlzaWNpc3Qgd2hvIGRpc2NvdmVyZWQgdGhlIHRoZW9yeSBvZiBnZW5lcmFsIHJlbGF0aXZpdHksIGVmZmVjdGluZyBhIHJldm9sdXRpb24gaW4gcGh5c2ljcyAuIHNwZWNpYWwgcmVsYXRpdml0eSAodGhlIHBoeXNpY2FsIHRoZW9yeSBvZiB0aGUgcmVsYXRpb24gYmV0d2VlbiBzcGFjZSBhbmQgdGltZSkuDQpBbHRob3VnaCBoaXMgcHJvZmVzc29ycyBkaWQgbm90IHRoaW5rIGhpZ2hseSBvZiBoaW0sIEVpbnN0ZWluIGdyYWR1YXRlZCBmcm9tIHNjaG9vbCBpbiAxOTAwIGJ5IHN0dWR5aW5nIHRoZSBub3RlcyBvZiBhIGNsYXNzbWF0ZS4JQWxiZXJ0IEVpbnN0ZWluIHdhcyBib3JuIG9uIE1hcmNoIDE0LCAxODc5LCBpbiBVbG0sIEdlcm1hbnksIGJ1dCBoZSBncmV3LiwgaW50ZXJlc3RlZCBpbiBhbmQgYmV0dGVyIHN1aXRlZCBmb3IgcGh5c2ljcyB0aGFuIG1hdGhlbWF0aWNzIEVpbnN0ZWluIHBhc3NlZCBoaXMgZXhhbWluYXRpb24gdG8gZ3JhZHVhdGUgZnJvbSB0aGUgRklUIGluIDE5MDAsIGJ1dC4NCkVpbnN0ZWluIHdhcyBub3cgYWJsZSB0byBtb3ZlIHRvIFByYWd1ZSB3aXRoIGhpcyB3aWZlIGFuZCB0d28gc29ucywgSGFucyBBbGJlcnQgYW5kIEVkdWFyZC4gRmluYWxseSwgYWZ0ZXIgYmVpbmcgcHJvbW90ZWQgdG8gYSBwcm9mZXNzb3IsIEVpbnN0ZWluIGFuZCBoaXMgZmFtaWx5IHdlcmUgYWJsZSB0byBlbmpveSBhIGdvb2Qgc3RhbmRhcmQgb2YgbGl2aW5nLCBidXQgdGhlIGpvYidzIG1haW4gYWR2YW50YWdlIHdhcyB0aGF0IGl0IGFsbG93ZWQgRWluc3RlaW4gdG8gaGF2ZSBhY2Nlc3MgdG8gYW4gZW5vcm1vdXMgbGlicmFyeS4sIEluIDE5MDAgaGUgZ3JhZHVhdGVkIGZyb20gdGhlIEluc3RpdHV0ZSBhbmQgdGhlbiBhY2hpZXZlZCBjaXRpemVuc2hpcCB0byBTd2l0emVybGFuZC4JU3VtbWFyeSBGaWZ0eS1mb3VyIGxvdmUgbGV0dGVycyBwb3J0cmF5IHRoZSBjYXJpbmcgcmVsYXRpb25zaGlwIGJldHdlZW4gQWxiZXJ0IEVpbnN0ZWluIGFuZCBoaXMgZmlyc3Qgd2lmZSBieSBzaG93aW5nIGhvdyBNYXJpYyBhY3RlZCBhcyB0aGUgZ2VuaXVzJ3MgaW50ZWxsZWN0dWFsIGNvbmZpZGFudCBkdXJpbmcgaGlzIGlzb2xhdGVkIHllYXJzIGF0IFByaW5jZXRvbi4gQW1hem9uLmNvbSBkZXNjcmlwdGlvbjogUHJvZHVjdCBEZXNjcmlwdGlvbjogSW4gMTkwMywgZGVzcGl0ZSB0aGUgdmVoZW1lbnQgb2JqZWN0aW9ucyBvZiBoaXMgcGFyZW50cywgQWxiZXJ0IEVpbnN0ZWluIG1hcnJpZWQgTWlsZXZhIE1hcmljLCB0aGUgY29tcGFuaW9uLCBjb2xsZWFndWUgYW5kIGNvbmZpZGFudGUgd2hvc2UgaW5mbHVlbmNlIG9uIGhpcyBtb3N0IGNyZWF0aXZlIHllYXJzIGhhcyBnaXZlbiByaXNlIHRvIG11Y2ggc3BlY3VsYXRpb24uDQoyMDExIEFsYmVydCBFaW5zdGVpbiBDb2xsZWdlIG9mIE1lZGljaW5lIG9mIFllc2hpdmEgVW5pdmVyc2l0eS4gVGhlIHJlc2VhcmNoLCB3aGljaCBhcHBlYXJzIGluIHRoZSBKYW51YXJ5IDIgYWR2YW5jZSBvbmxpbmUgaXNzdWUgb2YgVGhlIEpvdXJuYWwgb2YgQ2xpbmljYWwgSW52ZXN0aWdhdGlvbiwgY291bGQgbGVhZCB0byBuZXcgc3RyYXRlZ2llcyBmb3IgdHJlYXRpbmcgUGFya2luc29uJ3MgYW5kIG90aGVyIG5ldXJvZGVnZW5lcmF0aXZlIGRpc2Vhc2VzLglUaGlzIGJvb2sgZXhwbG9yZXMgdGhlIGxpZmUgYW5kIHdvcmsgb2YgQWxiZXJ0IEVpbnN0ZWluICwgdGhlIE5vYmVsIFByaXplLXdpbm5pbmcgc2NpZW50aXN0Lg0KVGhlIExpZmUgYW5kIFdvcmtzIG9mIEFsYmVydCBFaW5zdGVpbiBlc3NheXMgd3JpdHRlbiBieSBzdHVkZW50cy4sIEVkaXRlZCBhbmQgYXBwcm92ZWQgYnkgb3VyIGludGVybmFsIGVkaXRpbmcgc3RhZmYuCVRoZSBXUCBlbnRyeSBtZXJlbHkgc2F5cyAiRWluc3RlaW4gZ3JhZHVhdGVkIGluIDE5MDAgZnJvbSBFVEggd2l0aCBhIGRlZ3JlZSBpbiBwaHlzaWNzLiIuIFRoZSBlbnRyeSdzIHNvdXJjZSBmb290bm90ZSBsaW5rcyB0byBhIGJpb2dyYXBoaWNhbCBzaXRlIHdoaWNoIHN0YXRlcyBpcyBubyBtb3JlIGhlbHBmdWw6IGhlICIuZW5yb2xsZWQgYXQgdGhlIFN3aXNzIEZlZGVyYWwgUG9seXRlY2huaWMgU2Nob29sIGluIFp1cmljaC4NCkJpb2dyYXBoeSBBbGJlcnQgRWluc3RlaW4sIGEgR2VybWFuLUFtZXJpY2FuIHBoeXNpY2lzdCwgd2FzIGJvcm4gaW4gVWxtIChX/HJ0dGVtYmVyZywgR2VybWFueSkgb24gTWFyY2ggMTQsIDE4NzksIGFuZCBzcGVudCBoaXMgeW91dGggaW4gTXVuaWNoLCB3aGVyZSBoaXMgZmFtaWx5IG93bmVkIGEgc21hbGwgZWxlY3RyaWMgbWFjaGluZXJ5IHNob3AuIEhlIGRpZG4ndCB0YWxrIHVudGlsIHRoZSBhZ2Ugb2YgMywgYnV0IGV2ZW4gYXMgYSB5b3V0aCBoZSBzaG93ZWQgYSBicmlsamFudCBjdXJpb3NpdHkgYWJvdXQgbmF0dXJlIGFuZCBhIGdyZWF0IHVuZGVyc3RhbmRpbmYgb2YgZGlmZmljdWx0IG1hdGhlbWF0aWNhbCBjb25jZXB0cy4JQWxiZXJ0IEVpbnN0ZWluIFF1b3RlcyBRdW90YXRpb25zIG9uIFBoaWxvc29waHksIFBoeXNpY3MsIFJlbGlnaW9uLCBTY2llbmNlLCBNZXRhcGh5c2ljcywgSHVtYW5pdHksIFdhciwgUGVhY2UsIEVkdWNhdGlvbiwgS25vd2xlZGdlLCBNb3JhbGl0eSBhbmQgRnJlZWRvbS4NClRoZXNlIHR3byAid29uZGVycyIgJyB0aGUgZW5jb3VudGVyIHdpdGggYSBjb21wYXNzIGFuZCBhIGdlb21ldHJ5IGJvb2sgaGF2ZSBzdHJvbmdseSBpbmZsdWVuY2VkIGhpcyBmdXJ0aGVyIHdheSBvZiBsaWZlLgktIEV4Y2hhbmdlIG9mIGxldHRlcnMgaW4gMTkzMiwgd2hpY2ggcG9zdHVsYXRlZCBib3RoIGJpb2xvZ2ljYWwgYW5kIHNvY2lhbCBmYWN0b3JzIGVuY291cmFnaW5nIHdhciBhbmQgYWdncmVzc2lvbi4NCkFsYmVydCBFaW5zdGVpbiAnTW9yYWwgRGVjYXknLCBPdXQgb2YgTXkgTGF0ZXIgWWVhcnMgKDE5MzcsIDE5OTUpLCA5LiwgRm9yIGV4YW1wbGUsIGl0IGlzIGZvdW5kIHdpdGhvdXQgY2l0YXRpb24gaW4gQWxiZXJ0IEVpbnN0ZWluICwgSmVycnkgTWF5ZXIgYW5kIEpvaG4gUC4JQWxiZXJ0IEVpbnN0ZWluIE9ubGluZTogVGhlIGNvbGxlY3RlZCBwYXBlcnMgb2YgQWxiZXJ0IEVpbnN0ZWluIGFuZCBJbmZvcm1hdGlvbiBhYm91dCBBbGJlcnQgRWluc3RlaW4uLCBUaGUgd3JpdHRlbiB3b3JrcyBvZiBBbGJlcnQgRWluc3RlaW4ga25vd24gYXMgVGhlIFdvcmxkIGFzIEkgc2VlIGl0Lg0KVG9vIGZldyBvZiBteSBjb21wYXRyaW90cyB0cnVseSByZWNvZ25pemUgdGhhdCB3aGlsZSB0aGVvcmV0aWNhbCBwaHlzaWNzIG1heSBoYXZlIGJlZW4gd2hhdCBBbGJlcnQgRWluc3RlaW4gaXMgYmVzdCBrbm93biBmb3IsIGhlIHdhcyBhbHNvIGFuIGluY3JlZGlibGUgcGhpbG9zb3BoZXIgYW5kIHdpc2UgbWFuLiBBIGhhcHB5IG1hbiBpcyB0b28gc2F0aXNmaWVkIHdpdGggdGhlIHByZXNlbnQgdG8gZHdlbGwgdG9vIG11Y2ggb24gdGhlIGZ1dHVyZS4Jb24gTWFyY2ggMjIsIDIwMTAsIDM6MDkgUE0gRHIuIEtha3UsIEkgYWxzbyBoYXZlIGdyZWF0IHJlc3BlY3QgZm9yIEFsYmVydCBFaW5zdGVpbiBhbmQgaGlzIG1pbmQgYmVuZGluZyBjYXBhY2l0eSBmb3Igb3V0IHNpZGUgb2YgdGhlIGJveCB0aGlua2luZy4gSXQgd2FzIG15IHJlc3BlY3QgZm9yIEVpbnN0ZWluJ3MgY3JlYXRpdmUgdGhpbmtpbmcgYWJpbGl0eSBhbmQgdGhhdCBvZiBtYW55IG90aGVyIGdyZWF0IGNyZWF0aXZlIHRoaW5rZXJzIHRoYXQgaW5zcGlyZWQgbWUgdG8gc2VlayBvdXQgY3JlYXRpdmUgdGhpbmtpbmcgbWV0aG9kcyB0aGF0IHRoZSByZXN0IG9mIHVzIGNvdWxkIGFwcGx5IHRvIHVubGVhc2ggb3VyIGNyZWF0aXZlIHRoaW5raW5nIGFiaWxpdGllcy4NClRoZSBpbnNpZ2h0IG9mIEFsYmVydCBFaW5zdGVpbiBpbnRvIHRoZSBUaGVvcnkgb2YgcmVsYXRpdml0eSBvY2N1cnJlZCB3aGVuIGhlIGNyZWF0ZWQgYSB2aXN1YWwgaW1hZ2Ugb2YgY2hhc2luZyBhZnRlciBhbmQgbWF0Y2hpbmcgdGhlIHNwZWVkIG9mIGEgYmVhbSBsaWdodCAoS29zc2x5biBhbmQgS29lbmlnLCAxOTkyKS4gTGF0ZXIgaGUgdHVybmVkIHRoaXMgdmlzdWFsIGltYWdlIGludG8gIndvcmRzIGFuZCBzeW1ib2xzLiIuCVRoaXMgaXMgZGVmaW5pdGVseSBhbiBpbXByb3ZlbWVudCBpbiBzb21lIHJlc3BlY3RzIChteSBwcm9zZSB3YXMgbm90IGJlYXV0aWZ1bCA6KSwgYnV0IGl0J3MgYWxzbyBwb3RlbnRpYWxseSBtaXNsZWFkaW5nLCBiZWNhdXNlIGl0IGNvdWxkIGJlIGludGVycHJldGVkIGFzIHNheWluZyAiTU0gc2hvd3M6IHdoZXJlIHRoZXJlIGlzIG5vIG1lZGl1bSwgdGhlcmUgaXMgbm8gbGlnaHQiLiBJJ3ZlIHRyaWVkIHRvIGltcHJvdmUgb24gdGhlIG9yaWdpbmFsIHdvcmRpbmcsIHdoaWxlIGF2b2lkaW5nIHRoZSBtaXNpbnRlcnByZXRhdGlvbiwgd2l0aCAibGlnaHQgd2F2ZXMgY291bGQgbm90IGJlIHRyYXZlbGxpbmcgdGhyb3VnaCBhIG1lZGl1bSIuDQpBbGJlcnQgRWluc3RlaW4gbm90IG9ubHkgY2hhbmdlZCB0aGUgc2NpZW50aWZpYyBjb21tdW5pdHkgZm9yZXZlciwgYnV0IGNoYW5nZWQgZXZlcnlkYXkgbGlmZSBhcyB3ZSBrbm93IGl0LiBCb251cy5jb20gKEJlYWttYW4gYW5kIEphY2spLCB0aGUgUEJTIHdlYnNpdGUsIGFuZCBKb2UncyByb29tIGhhdmUgc2V2ZXJhbCBhY3Rpdml0aWVzIHJlbGF0ZWQgdG8gRWluc3RlaW4gYW5kIGhpcyB0aGVvcmllcyB0aGF0IGhhdmUgc29sdmVkIGNlbnR1cmllcyBvbGQgcHJvYmxlbXMgaW4gcGh5c2ljcyBhbmQgcm9ja2VkIGV2ZW4gbm9uIHBoeXNpY2lzdHMnIHZpZXcgb2YgdGhlIHdvcmxkLiwgQWxiZXJ0IEVpbnN0ZWluIG5vdCBvbmx5IGNoYW5nZWQgdGhlIHNjaWVudGlmaWMgY29tbXVuaXR5IGZvcmV2ZXIsIGJ1dCBjaGFuZ2VkIGV2ZXJ5ZGF5IGxpZmUgYXMgd2Uga25vdyBpdC4gQm9udXMuY29tIChCZWFrbWFuIGFuZCBKYWNrKSwgdGhlIFBCUyB3ZWJzaXRlLCBhbmQgSm9lJ3Mgcm9vbSBoYXZlIHNldmVyYWwgYWN0aXZpdGllcyByZWxhdGVkIHRvIEVpbnN0ZWluIGFuZCBoaXMgdGhlb3JpZXMgdGhhdCBoYXZlIHNvbHZlZCBjZW50dXJpZXMgb2xkIHByb2JsZW1zIGluIHBoeXNpY3MgYW5kIHJvY2tlZCBldmVuIG5vbiBwaHlzaWNpc3RzJyB2aWV3IG9mIHRoZSB3b3JsZC4JQSBodW5kcmVkIHRpbWVzIGV2ZXJ5IGRheSBJIHJlbWluZCBteXNlbGYgdGhhdCBteSBpbm5lciBhbmQgb3V0ZXIgbGlmZSBhcmUgYmFzZWQgb24gdGhlIGxhYm9ycyBvZiBvdGhlciBtZW4sIGxpdmluZyBhbmQgZGVhZCwgYW5kIHRoYXQgSSBtdXN0IGV4ZXJ0IG15c2VsZiBpbiBvcmRlciB0byBnaXZlIGluIHRoZSBzYW1lIG1lYXN1cmUgYXMgSSBoYXZlIHJlY2VpdmVkIGFuZCBhbSBzdGlsbCByZWNlaXZpbmcuLiBBbGJlcnQgRWluc3RlaW4gKDE0IE1hcmNoIDE4NzkgLSAxOCBBcHJpbCAxOTU1KSBHZXJtYW4tYm9ybiBTd2lzcy1BbWVyaWNhbiBwaHlzaWNpc3QuDQpzaWduIHVwIHRvIHRoZSBGcmVlICdUaGUgUG93ZXInIHJlcG9ydHMuIFRoaXMgbGFyZ2VyIGludGVsbGlnZW5jZSBmaWVsZCBpcyBtb25pdG9yZWQgYnkgc3VjaCBleHBlcmltZW50cyBhcyB0aGUgR2xvYmFsIENvbnNjaW91c25lc3MgUHJvamVjdCBydW4gYXQgUHJpbmNldG9uIFVuaXZlcnNpdHkuYW5kIGlmIGVub3VnaCBwZW9wbGUgZmVlbCBwb3NpdGl2ZSBlbW90aW9ucyBzdWNoIGFzIGxvdmUgYW5kIHBlYWNlLCBpdCBiZWNvbWVzIGVhc2llciBmb3IgZXZlcnlvbmUsIGxpa2UgdGhlIDEwMHRoIG1vbmtleSB0aGVvcnkgKG9yIHRoZSBob2xvZ3JhcGhpYyBtaW5kIHRoZW9yeSkuCUluIHRoZSBtaWRkbGUgMTkyMHMsIEVpbnN0ZWluIGFuZCBhbm90aGVyIGdpYW50IG9mIG1vZGVybiBwaHlzaWNzLCBMZW8gU3ppbGFyZCwgY29sbGFib3JhdGVkIHRvIGludmVudCBhIG5vdmVsIG1ldGhvZCBvZiByZWZyaWdlcmF0aW9uIHdoaWNoIHdhcyBhIGhpdCBhdCB0cmFkZSBzaG93cyBidXQgbGFja2VkIGZpbmFuY2lhbCBiYWNraW5nLiBPdGhlciBlc3NheXMgY292ZXIgdGhlIGlkZWEgb2YgJ2dyYXZpdGF0aW9uYWwgbGVuc2luZywgY29uZmlybWF0aW9uIG9mIHdoaWNoIGJyb3VnaHQgRWluc3RlaW4gd29ybGQgcmVub3duIGFmdGVyIHRoZSBFZGRpbmd0b24gZWNsaXBzZSBleHBlZGl0aW9uIG9mIDE5MTkuDQpSZWxldmFuY3kgU2NvcmU6IDU0IEFsYmVydCBFaW5zdGVpbiBzYWlkIHRoYXQgImlmIGF0IGZpcnN0IHRoZSBpZGVhIGlzIG5vdCBhYnN1cmQsIHRoZW4gdGhlcmUgaXMgbm8gaG9wZSBmb3IgaXQuIi4gSW4gdGhpcyB2ZWluLCBoZXJlJ3MgYSBsaXN0IG9mIHNvbWUgb2YgbXkgZmF2b3VyaXRlIGlkZWFzIGFuZCBpbm5vdmF0aW9ucyBmcm9tIHRoZSBwYXN0IDE4IG1vbnRocywgdG9nZXRoZXIgd2l0aCBhIGZldyBjb21tZW50cyBhbmQuUkVBREwuLCBJbWFnaW5hdGlvbiBhbmQgaW5ub3ZhdGlvbiBhcmUgb3VyIGdyZWF0ZXN0IHdlYXBvbnMuLCBMYWNrIG9mIHVzaW5nIHRoZW0gaXMgdGhlIG9ubHkgdGhpbmcgc3Ryb25nIGVub3VnaCB0byBzdG9wIGFueSBvZiB1cyBmcm9tIGFjaGlldmluZyBvdXIgZ29hbHMuIEZhY3R1YWxseSwgd2UgY2FuIGVhY2ggZ2V0IG1vcmUgZG9uZSBpbiBsZXNzIHRpbWUgaWYgd2Ugc2ltcGx5IHRha2Ugbm90ZSBvbiBlc3RhYmxpc2hpbmcgV0hFUkUgd2UgYXJlIGdvaW5nLlJFQURMLglBbGJlcnQgRWluc3RlaW4gaGFkIGEgcGFydCBpbiBhbGVydGluZyB0aGUgVW5pdGVkIFN0YXRlcyBnb3Zlcm5tZW50IHRvIHRoZSBwb3NzaWJpbGl0eSBvZiBidWlsZGluZyBhbiBhdG9taWMgYm9tYiwgYnV0IGhpcyB0aGVvcnkgb2YgcmVsYXRpdml0eSBpcyBub3QgcmVxdWlyZWQgaW4gZGlzY3Vzc2luZyBmaXNzaW9uLiBUaGUgdGhlb3J5IG9mIGZpc3Npb24gaXMgd2hhdCBwaHlzaWNpc3RzIGNhbGwgYSBub24tcmVsYXRpdmlzdGljIHRoZW9yeSwgbWVhbmluZyB0aGF0IHJlbGF0aXZpc3RpYyBlZmZlY3RzIGFyZSB0b28gc21hbGwgdG8gYWZmZWN0IHRoZSBkeW5hbWljcyBvZiB0aGUgZmlzc2lvbiBwcm9jZXNzIHNpZ25pZmljYW50bHkuIC4gLVJvYmVydCBTZXJiZXIsIE1hbmhhdHRhbiBwcm9qZWN0IHNjaWVudGlzdC4sIEl0J3MgbXVsdGlwbGUgc3R5bGlzaCBpbm5vdmF0aW9uIGFuZCB0ZWNobm9sb2dpZXMgYXJlIGZhci1vZmYgaHVtYW4gdW5kZXJzdGFuZGluZyBldmVuIHVudGlsIHJlY2VudGx5LiBJIGFtIGluIGNvbnRlbnRpb3VzIHdpdGggbXlzZWxmIHRoYXQgdGhlIGdlbmUgKEROQSkgb2YgVGVzZWxhIGlzIG1vc3QgcHJvYmFibHkgc29tZXRoaW5nIGRpZmZlcmVudCBmcm9tIE1BTktJTkQuDQp3aXRoIFNpciBJc2FhYyBOZXd0b24gYW5kIEFsYmVydCBFaW5zdGVpbiBmb3IgdGhlIGZ1bmRhbWVudGFsIG5hdHVyZSBvZiBoaXMgY29udHJpYnV0aW9ucy4JQW5kIGlmIHlvdSBwYXkgYXR0ZW50aW9uIHRvIGhpcyB3b3JrIGFuZCBoaXMgbW9zdCBmYW1vdXMgc3RhdGVtZW50cyBhYm91dCBpdCwgeW91IG1pZ2h0IGp1c3QgdGhpbmsgaGUgd2FzIHRhbGtpbmcgYWJvdXQgdXMsLg0KRHVyaW5nIGhpcyB0aW1lIGluIEJlcmxpbiBoZSB3YXMgd29ya2luZyBvbiBudW1lcm91cyB0ZWNobmljYWwgaW52ZW50aW9ucy4JNy41IEFsdGVybmF0aXZlIDJBOiBBbGJlcnQgRWluc3RlaW4gc2hvdWxkIGhhdmUgbWFpbiBjcmVkaXQgZm9yIEdlbmVyYWwgUmVsYXRpdml0eS4gMi43LjYgQWx0ZXJuYXRpdmUgMkI6IERhdmlkIEhpbGJlcnQgc2hvdWxkIGhhdmUgbWFpbiBjcmVkaXQgZm9yIEdlbmVyYWwgUmVsYXRpdml0eS4sIEluIEZlYiAyMDExLCB0aGUgdGFsayBwYWdlIG9mIEFsYmVydCBFaW5zdGVpbiBmaWxsZWQgdXAgd2l0aCBhIGRpc2N1c3Npb24gb2YgYW4gYWxsZWdlZCByZWxhdGl2aXR5IHByaW9yaXR5IGRpc3B1dGUuIE1haW5zdHJlYW0gaGlzdG9yaWFucyBzYXkgdGhpcyBoYXMgYmVlbiBwdXQgdG8gcmVzdDsgb3RoZXJzIGhvdGx5IGRpc2FncmVlLCBhcyBiZWNhbWUgdmVyeSBldmlkZW50Lg0KVGhlIEFsYmVydCBFaW5zdGVpbiBBd2FyZCAoc29tZXRpbWVzIGNhbGxlZCB0aGUgQWxiZXJ0IEVpbnN0ZWluIE1lZGFsIGJlY2F1c2UgaXQgaXMgYWNjb21wYW5pZWQgd2l0aCBhIGdvbGQgbWVkYWwgaXMgYW4gYXdhcmQgaW4gVGhlb3JldGljYWwgcGh5c2ljcywgdGhhdCB3YXMgZXN0YWJsaXNoZWQgVGhlIEFsYmVydCBFaW5zdGVpbiBQZWFjZSBQcml6ZSBpcyBnaXZlbiB5ZWFybHkgYnkgdGhlIENoaWNhZ28gLWJhc2VkIEFsYmVydCBFaW5zdGVpbiBQZWFjZSBQcml6ZSBGb3VuZGF0aW9uLiBUaGUgV2FsaGFsbGEgSGFsbCBvZiBGYW1lIGFuZCBIb25vciBpcyBhIG5lby1jbGFzc2ljYWwgSGFsbCBvZiBmYW1lIGxvY2F0ZWQgb24gdGhlIERhbnViZSBSaXZlciAxMCBrbSBlYXN0IG9mIFJlZ2Vuc2J1cmcsIGluIEJhdmFyaWEgMTAyLglFaW5zdGVpbidzIGhpZ2ggc2Nob29sIHRyYW5zY3JpcHQgQWxiZXJ0IEVpbnN0ZWluIHdhcyBib3JuIGluIFVsbSwgaW4gdGhlIEtpbmdkb20gb2YgV/xydHRlbWJlcmcgaW4gdGhlIEdlcm1hbiBFbXBpcmUgb24gMTQgTWFyY2ggMTg3OS4gOC4sIEVpbnN0ZWluIGxhdGVyIGdhdmUgaGlzIGltcHJlc3Npb25zIG9mIHRoZSBKYXBhbmVzZSBpbiBhIGxldHRlciB0byBoaXMgc29uczogMzkgOjMwNyAiT2YgYWxsIHRoZSBwZW9wbGUgSSBoYXZlIG1ldCwgSSBsaWtlIHRoZSBKYXBhbmVzZSBtb3N0LCBhcyB0aGV5IGFyZSBtb2Rlc3QsIGludGVsbGlnZW50LCBjb25zaWRlcmF0ZSwgYW5kIGhhdmUgYSBmZWVsIGZvciBhcnQuIiAzOSA6MzA4LiBPbiBoaXMgcmV0dXJuIHZveWFnZSwgaGUgYWxzbyB2aXNpdGVkIFBhbGVzdGluZSBmb3IgMTIgZGF5cyBpbiB3aGF0IHdvdWxkIGJlY29tZSBoaXMgb25seSB2aXNpdCB0byB0aGF0IHJlZ2lvbi4NCkFsYmVydCBFaW5zdGVpbiB3YXMgYm9ybiBpbiBVbG0sIGluIHRoZSBLaW5nZG9tIG9mIFcgbHJ0dGVtYmVyZyBpbiB0aGUgR2VybWFuIEVtcGlyZSBvbiAxNC4sIEVpbnN0ZWluIGxhdGVyIGdhdmUgaGlzIGltcHJlc3Npb25zIG9mIHRoZSBKYXBhbmVzZSBpbiBhIGxldHRlciB0by4JVGhlIEFsYmVydCBFaW5zdGVpbiBNZWRhbCBpcyBhbiBhd2FyZCBwcmVzZW50ZWQgYnkgdGhlIEFsYmVydCBFaW5zdGVpbiBTb2NpZXR5IGluIEJlcm4sIFN3aXR6ZXJsYW5kLg0KQWxiZXJ0IEVpbnN0ZWluIHdhcyBib3JuIGludG8gYSBKZXdpc2ggZmFtaWx5IGluIFVsbSwgV/xydHRlbWJlcmcsIEdlcm1hbnkuIFlvdXRoIGFuZCBzY2hvb2xpbmcgWW91bmcgQWxiZXJ0IGJlZm9yZSB0aGUgRWluc3RlaW5zIG1vdmVkIGZyb20gR2VybWFueSB0byBJdGFseS4JQXJvdW5kIDE4ODYgQWxiZXJ0IEVpbnN0ZWluIGJlZ2FuIGhpcyBzY2hvb2wgY2FyZWVyIGluIE11bmljaC4NCldoYXQgQmVyZ3NvbiBiZWxpZXZlZCwgdGhlIHBoeXNpY2lzdCBBbGJlcnQgRWluc3RlaW4gZGVtb25zdHJhdGVkIGluIGhpcy4JUGVyc29uYWxseSwgSSB3b3VsZCBwdXQgaGltIG9uIHRoZSBwb2RpdW0gYWxvbmcgd2l0aCB0aGVzZSBvdGhlciBzY2llbmNlIHBvcHVsYXJpc2VyczpBbGJlcnQgRWluc3RlaW4sIFJpY2hhcmQgUC4gRmV5bm1hbiBhbmQgQ2FybCBTYWdhbi4gKEFsc28sIE5BU0EncyBzaGluaW5nIGdsb3J5IG9mIHRoZSAxOTYwJ3MgYW5kIHByZS10d2VudGlldGgvdHdlbnR5LWZpcnN0IGNlbnR1cnkgc2NpZW50aXN0cykuDQpBbmQgd2UncmUgZmFydGhlciB0aGFuIGV2ZXIsIGl0IHNlZW1zLCBmcm9tIGEgbW9tZW50b3VzbHkgZGlmZmljdWx0IHRydXRoIHRoYXQgQWxiZXJ0IEVpbnN0ZWluIHV0dGVyZWQgZHVyaW5nIGl0cyBmaXJzdCB5ZWFycywgd2hlbiB0aGUgVS5TLiBnb3Zlcm5tZW50IHN0aWxsIGhlbGQgYSBtb25vcG9seSBvbiB0aGUgc3BsaXQgYXRvbS4gJ1RoaXMgYmFzaWMgcG93ZXIgb2YgdGhlIHVuaXZlcnNlIGNhbm5vdCBiZSBmaXR0ZWQgaW50byB0aGUgb3V0bW9kZWQgY29uY2VwdCBvZiBuYXJyb3cgbmF0aW9uYWxpc21zLCBoZSB3cm90ZS4JRWluc3RlaW4ncyBhbnN3ZXIgdG8gYSBjb25mZXJlZSBhdCBhIG1lZXRpbmcgYXQuDQpXYWx0IERpc25leSBhbmQgQWxiZXJ0IEVpbnN0ZWluIHdlcmUgdHdvIGdyZWF0IG1lbiB3aG8gYXBwbGllZCB0aGVpci4gY3JlYXRpdmUgaW1hZ2luYXRpdmUgcG93ZXIgdG8gY2hhbmdlIHRoZWlyIGxpdmVzIGFuZCB0aGUgd29ybGQuCUFsYmVydCBFaW5zdGVpbiBleHBsYWluaW5nIGVuZXJneSBhbmQgbWFzczouIEFsYmVydCBFaW5zdGVpbmVuZXJneUdvZG1hc3NxdW90ZXNSZWxpZ2lvbnNwaXJpdHVhbGl0eSBUd2VldCBBbGwgcmVsaWdpb25zLCBhcnRzIGFuZCBzY2llbmNlcyBhcmUgYnJhbmNoZXMgb2YgdGhlIHNhbWUgdHJlZS4NCkFsYmVydCBFaW5zdGVpbidzIGNsYXJpdHkgb24gdGhlIHRlcm1zIGNvbGQgYW5kIGRhcmtuZXNzIHdlcmUgaW1wb3J0YW50IGRpc3RpbmN0aW9ucyBhbmQgb25lcyB0aGF0IGNhbm5vdCBiZSBpZ25vcmVkLiAuIFRoZXkgYWZmZWN0IGhvdyB3ZSB2aWV3IHRob3NlIHRlcm1zIGFuZCBob3cgd2UgZGVhbCB3aXRoIHRoZW0uCUFsYmVydCBFaW5zdGVpbiBrbmV3IHRoZSB2YWx1ZSBvZiB0aGUgdW5jb25zY2lvdXMgbWluZC4NClRoZXJlIGlzIG5vIGdlbml1cyBpbiB0aGUgd29ybGQgYXMgcmV2ZXJlZCBhbmQgYXMgbG92ZWQgYXMgQWxiZXJ0IEVpbnN0ZWluLiwgQWxiZXJ0IEVpbnN0ZWluIGhpbXNlbGYgYWRtaXR0ZWQgdGhhdCB0aGUgcmVhc29uIGhlIHdhcyBzbyBzbWFydCB3YXMgYmVjYXVzZSBoZSBwbGF5ZWQgdGhlIHZpb2xpbi4gT25lIGZyaWVuZCwgRy5KLiBXaXRocm93LCBjb25maWRlZCB0aGF0IHRoZSB3YXkgRWluc3RlaW4gZGVhbHQgd2l0aCBwcm9ibGVtcyBhbmQgZXF1YXRpb25zIHdhcyBieSBpbXByb3Zpc2luZyBvbiB0aGUgdmlvbGluIC4JKEJ1dCBUaW1lIGRvZXMgbm90IGV4aXN0IGFzIGEgJ3RoaW5nIGluIGl0c2VsZicgbGlrZSBOZXd0b24gdGhvdWdodCEpIExldCB1cyBub3cgY29uc2lkZXIgQWxiZXJ0IEVpbnN0ZWluJ3MgYW5hbHlzaXMgb2YgTmV3dG9uJ3MgTWVjaGFuaWNzICh3aGljaCBpcyBsdWNpZCBhbmQgbG9naWNhbCBhcyByZWZsZWN0cyB0aGUgZ3JlYXRuZXNzIG9mIEFsYmVydCBFaW5zdGVpbikgVGhlIGZpcnN0IGF0dGVtcHQgdG8gbGF5IGEgdW5pZm9ybSB0aGVvcmV0aWNhbCBmb3VuZGF0aW9uIHdhcyB0aGUgd29yayBvZiBOZXd0b24uIEluIGhpcyBzeXN0ZW0gZXZlcnl0aGluZyBpcyByZWR1Y2VkIHRvIHRoZSBmb2xsb3dpbmcgY29uY2VwdHM6LiwgKEFsYmVydCBFaW5zdGVpbiwgMTk1NCkgQWxiZXJ0IEVpbnN0ZWluIGNvbnNpZGVyZWQgbWF0dGVyIHRvIGJlIHNwYXRpYWxseSBleHRlbmRlZCAoYW5kIHJlcHJlc2VudGVkIGJ5IFNwaGVyaWNhbCBGb3JjZSBGaWVsZHMpIHRodXMgaGUgZGlkIG5vdCBiZWxpZXZlIGluIHRoZSBleGlzdGVuY2Ugb2YgYSBmdW5kYW1lbnRhbCBTcGFjZSBvciBUaW1lIHRoYXQgd2FzIHNlcGFyYXRlIGZyb20gTWF0dGVyLiBBcyB3aXRoIExlaWJuaXogYW5kIE1hY2gsIEFsYmVydCBFaW5zdGVpbiBiZWxpZXZlZCB0aGF0IGFsbCBtb3Rpb24gb2YgbWF0dGVyIGluIFNwYWNlIGNvdWxkIGluc3RlYWQgYmUgdW5kZXJzdG9vZCBhcyBtb3Rpb24gb2YgbWF0dGVyIHJlbGF0aXZlIHRvIG90aGVyIG1hdHRlciwgdGh1cyB0aGUgY29uY2VwdCBvZiBhbiBhYnNvbHV0ZSBTcGFjZSBiZWNhbWUgdW5uZWNlc3NhcnkgSW4gTmV3dG9uaWFuIHBoeXNpY3MgdGhlIGVsZW1lbnRhcnkgdGhlb3JldGljYWwgY29uY2VwdCBvbiB3aGljaCB0aGUgdGhlb3JldGljYWwgZGVzY3JpcHRpb24gb2YgbWF0ZXJpYWwgYm9kaWVzIGlzIGJhc2VkIGlzIHRoZSBtYXRlcmlhbCBwb2ludCwgb3IgcGFydGljbGUuDQpBbGJlcnQgRWluc3RlaW4gSSBhbSBlbm91Z2ggb2YgYW4gYXJ0aXN0IHRvIGRyYXcgZnJlZWx5IHVwb24gbXkgaW1hZ2luYXRpb24uLCAtIEFsYmVydCBFaW5zdGVpbiBJbWFnaW5hdGlvbiBpcyBtb3JlIGltcG9ydGFudCB0aGFuIGtub3dsZWRnZSwgZm9yIGtub3dsZWRnZSBpcyBsaW1pdGVkIHdoaWxlIGltYWdpbmF0aW9uIGVtYnJhY2VzIHRoZSBlbnRpcmUgd29ybGQuIC0gQWxiZXJ0IEVpbnN0ZWluIEluIG9yZGVyIHRvIGJlIGFuIGltbWFjdWxhdGUgbWVtYmVyIG9mIGEgZmxvY2sgb2Ygc2hlZXAsIG9uZSBtdXN0IGFib3ZlIGFsbCBiZSBhIHNoZWVwIG9uZXNlbGYuCWluIHRoZSBIYW5kIGJ5IFBhdWwgR2FicmllbCBUZXNsYSBhbmQgQWxiZXJ0IEVpbnN0ZWluIGNhbWUgdmlhLg0Kd2hlbiB5b3UgYWRtaXJlIENoYXJsaWUgQ2hhcGxpbiBhbmQgQWxiZXJ0IEVpbnN0ZWluICwgd2hlbiB5b3UgZm9sbG93IHRoZSBkZW1vY3JhY3kgb2YgdGhlLglTdXNobWl0YSBEdXR0YSAiSSdtIG5vdCBhbiBhdGhlaXN0IGFuZCBJIGRvbid0IHRoaW5rIEkgY2FuIGNhbGwgbXlzZWxmIGEgcGFudGhlaXN0Lg0KTmVhcmx5IGEgY2VudHVyeSBhZ28sIEFsYmVydCBFaW5zdGVpbiBzdWdnZXN0ZWQgdGhhdCB0aW1lIHNob3VsZCBtb3ZlLglUaGUgZXhwZXJpbWVudHMgd2lsbCBjZWxlYnJhdGUgdGhlIDEwMHRoIGFubml2ZXJzYXJ5IG9mIEFsYmVydCBFaW5zdGVpbidzIGRpc2NvdmVyaWVzLg0Kc3RhdGUgb2YgbWF0dGVyIHdhcyBmaXJzdCB0aGVvcml6ZWQgYnkgQWxiZXJ0IEVpbnN0ZWluLgliZXR3ZWVuIEFsYmVydCBFaW5zdGVpbiBhbmQgUGFibG8gUGljYXNzbyBpbiB0aGlzIGNsZXZlciBhbmQgaHVtb3JvdXMgcGxheSBzZXQgaW4gdGhlIGZhbWVkIExhcGluIEFnaWxlIGJhciBpbiB0aGUgTW9udG1hcnRyZSBzZWN0aW9uIG9mIFBhcmlzLiBiZXR3ZWVuIEFsYmVydCBFaW5zdGVpbiBhbmQgUGFibG8gUGljYXNzbyBpbiB0aGlzIGNsZXZlciBhbmQgaHVtb3JvdXMgcGxheSBzZXQgaW4gdGhlIGZhbWVkIExhcGluIEFnaWxlIGJhciBpbiB0aGUgTW9udG1hcnRyZSBzZWN0aW9uIG9mIFBhcmlzLg0KaGUgd2FzIHRyeWluZyB0byB0aGluayBvZiB3aG8gdGhlIHRoaXJkIHBlcnNvbiAoYmVzaWRlcyBBbGJlcnQgRWluc3RlaW4gYW5kIGhpbXNlbGYpIHdhcy4JSXQgaGFzIHNpbmNlIGJlZW4gdXNlZCB0byByZWZlciB0byBvdGhlciB5ZWFycywgZXNwZWNpYWxseSB0byAxOTA1LCB3aGVuIEFsYmVydCBFaW5zdGVpbiBtYWRlIGVxdWFsbHkgcmV2b2x1dGlvbmFyeSBkaXNjb3ZlcmllcyBjb25jZXJuaW5nIHRoZSBwaG90b2VsZWN0cmljIGVmZmVjdCwgQnJvd25pYW4gbW90aW9uIGFuZCB0aGUgc3BlY2lhbCB0aGVvcnkgb2YgcmVsYXRpdml0eS4gYW5udXMgdGVycmliaWxpcyBkcmVhZGZ1bCB5ZWFyIFVzZWQgdG8gZGVzY3JpYmUgMTM0OCwgdGhlIHllYXIgdGhlIEJsYWNrIERlYXRoIGJlZ2FuIHRvIGFmZmxpY3QgRXVyb3BlLg0KU2luY2UgMTk3NCwgdGhlIHNjaWVudGlzdCBoYXMgd29ya2VkIG9uIG1hcnJ5aW5nIHRoZSB0d28gY29ybmVyc3RvbmVzIG9mIG1vZGVybiBwaHlzaWNzIC0tIEFsYmVydCBFaW5zdGVpbidzIEdlbmVyYWwgVGhlb3J5IG9mIFJlbGF0aXZpdHksIHdoaWNoIGNvbmNlcm5zIGdyYXZpdHkgYW5kIGxhcmdlLXNjYWxlIHBoZW5vbWVuYSwgYW5kIHF1YW50dW0gdGhlb3J5LCB3aGljaCBjb3ZlcnMgc3ViYXRvbWljIHBhcnRpY2xlcy4gSGlzIGxhdGVzdCBjb21tZW50cyBzdWdnZXN0IGhlIGhhcyBicm9rZW4gYXdheSBmcm9tIHByZXZpb3VzIHZpZXdzIGhlIGhhcyBleHByZXNzZWQgb24gcmVsaWdpb24uCU1hdHRlciAoV1NNKSBleHBsYWlucyBBbGJlcnQgRWluc3RlaW4ncyBMaWdodCBRdWFudGEgJ1Bob3RvbicgLyBQaG90b2VsZWN0cmljIEVmZmVjdCBvZiBRdWFudHVtIFRoZW9yeS4NClRoYW5rcyB0byBhIGdlbmVyb3VzIGdyYW50LCB0aGUgSGVicmV3IFVuaXZlcnNpdHkgb2YgSmVydXNhbGVtIGlzIGJlZ2lubmluZyB0byBkaWdpdGl6ZSB0aGVpciBFaW5zdGVpbiBjb2xsZWN0aW9uLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGV2ZXJ5b25lLCBldmVyeXdoZXJlLglNYW55IHBlb3BsZSdzIGxhc3Qgd29yZHMgYXJlIG5vdCBoZWFyZCBvciBhcmUgbm90IGNhcHR1cmVkIGZvciBwb3N0ZXJpdHkuIERBR3d5biAwMDo0MiwgMjMgT2N0b2JlciAyMDA3IChVVEMpIEknZCBhcmd1ZSBpdCBpcyB0cnVlIChpbiB0aGUgV2lraXBlZGlhIHNlbnNlIG9mIHRoZSB3b3JkKSBhbmQgaXQncyBub3QgdXNlbGVzcyBpbmZvcm1hdGlvbml0J3MgaW50ZXJlc3RpbmcuDQpsb2NhdGlvbiBhbmQgYXR0YWNoIHdpdGggYSBzdHJpbmcgYXMgeW91IGRpc2N1c3MgZWFjaCB0aW1lIEFsYmVydCBFaW5zdGVpbiBtb3ZlZC4JdmlldyBvcmlnaW5hbCBBbGJlcnQgRWluc3RlaW4gQmVzdCBRdW90ZXMgb24gU3VjY2Vzcy4gQWxiZXJ0IEVpbnN0ZWluIFF1b3RlcyBvbiBTdWNjZXNzLiBRdWVzdGlvbiBieSBBbm91ayA6IFdoYXQgYXJlIHlvdXIgdGhvdWdodHMgb24gdGhpcyBBbGJlcnQgRWluc3RlaW4gcXVvdGUgLg0KSW5kaWdvIEJvb2tzICYgTXVzaWMgaXMgYSBDYW5hZGlhbiBib29rc2VsbGVyIGNvbW1pdHRlZCB0byBwcm92aWRpbmcgYSBzdHJlc3MtZnJlZSBhcHByb2FjaCB0byBzYXRpc2Z5aW5nIHRoZSBib29rbG92ZXIuCVRoZSB0YWxrIHdpbGwgaW50cm9kdWNlIHRoZSBjb25jZXB0IG9mIGhhcm1zIHJlZHVjdGlvbiB3aXRoIGEgZm9jdXMgb24gaGVwYXRpdGlzIEMgYW5kIGhvdyBjb21tdW5pdHktYmFzZWQgc2NyZWVuaW5ncyBoYXZlIGFmZmVjdGVkIHRoZSBjdXJyZW50IHNpdHVhdGlvbi4gQ2l0eSBoYXMgYSBoaWdoZXIgcHJldmFsZW5jZSBvZiBoZXBhdGl0aXMgQyB0aGFuIHRoZSBlbnRpcmUgVW5pdGVkIFN0YXRlcyBvdmVyYWxsLg0KVGhlIHdvcmtzIG9mIEFsYmVydCBFaW5zdGVpbiBjYXVzZWQgYW4gdXBoZWF2YWwgdGhyb3VnaG91dCB0aGUgc2NpZW5jZSB3b3JsZCBieSBkaXNwZW5zaW5nIHdpdGggTmV3dG9uJ3MgJ2Nsb2Nrd29yayB1bml2ZXJzZSBhbmQgdmlzdWFsaXppbmcgYSByZWxhdGl2aXN0aWMgdW5pdmVyc2Ugd2hlcmUgdGltZSBhbmQgc3BhY2UgYmVjb21lIG9uZS4gSSBoYXZlIHRhdWdodCBzY2llbmNlIGFuZCBtYXRoZW1hdGljcyBmb3IgdHdlbnR5IHllYXJzLCBidXQgcmFyZWx5IHNlaXplIHRoZSBvcHBvcnR1bml0eSB0byBpbnRyb2R1Y2UgRWluc3RlaW4ncyB3b3JsZCB0byBteSBzdHVkZW50cy4JVGhlIG1vc3QgY29tcHJlaGVuc2l2ZSBjb2xsZWN0aW9uIG9mIEFsYmVydCBFaW5zdGVpbiBxdW90ZXMgb25saW5lLiwgSSBhbSBub3QgaW50ZXJlc3RlZCBpbiB0aGlzIG9yIHRoYXQgcGhlbm9tZW5vbiwgaW4gdGhlIHNwZWN0cnVtIG9mIHRoaXMgb3IgdGhhdCBlbGVtZW50LiBJIHdhbnQgdG8ga25vdyBIaXMgdGhvdWdodHM7IHRoZSByZXN0IGFyZSBkZXRhaWxzLiIgLSBBbGJlcnQgRWluc3RlaW4uDQpUaGUgZm9sbG93aW5nIGFydGljbGUgYnkgQWxiZXJ0IEVpbnN0ZWluIGFwcGVhcmVkIGluIHRoZSBOZXcgWW9yayBUaW1lcyBNYWdhemluZSBvbiBOb3ZlbWJlciA5LCAxOTMwIHBwIDEtLiBJdCBoYXMgYmVlbiByZXByaW50ZWQgaW4gSWRlYXMgYW5kIE9waW5pb25zLCBDcm93biBQdWJsaXNoZXJzLCBJbmMuIDE5NTQsIHBwIDM2IC0gNDAuLCBBIGxpdHRsZSBjb25zaWRlcmF0aW9uIHdpbGwgc3VmZmljZSB0byBzaG93IHVzIHRoYXQgdGhlIG1vc3QgdmFyeWluZyBlbW90aW9ucyBwcmVzaWRlIG92ZXIgdGhlIGJpcnRoIG9mIHJlbGlnaW91cyB0aG91Z2h0IGFuZCBleHBlcmllbmNlLiBXaXRoIHByaW1pdGl2ZSBtYW4gaXQgaXMgYWJvdmUgYWxsIGZlYXIgdGhhdCBldm9rZXMgcmVsaWdpb3VzIG5vdGlvbnMgLSBmZWFyIG9mIGh1bmdlciwgd2lsZCBiZWFzdHMsIHNpY2tuZXNzLCBkZWF0aC4JRWluc3RlaW4ncyBoaWdoIHNjaG9vbCB0cmFuc2NyaXB0IEFsYmVydCBFaW5zdGVpbiB3YXMgYm9ybiBpbiBVbG0sIGluIHRoZSBLaW5nZG9tIG9mIFf8cnR0ZW1iZXJnIGluIHRoZSBHZXJtYW4gRW1waXJlIG9uIDE0IE1hcmNoIDE4NzkuIDguLCBeIFNjaGlscHAgKEVkLiksIFAuIEEuICgxOTc5KSwgQWxiZXJ0IEVpbnN0ZWluIEF1dG9iaW9ncmFwaGljYWwgTm90ZXMsIE9wZW4gQ291cnQgUHVibGlzaGluZyBDb21wYW55LCBwcC4gODkgLiBeIER1ZGxleSBIZXJzY2hiYWNoLCAiRWluc3RlaW4gYXMgYSBTdHVkZW50IiwgRGVwYXJ0bWVudCBvZiBDaGVtaXN0cnkgYW5kIENoZW1pY2FsIEJpb2xvZ3ksIEhhcnZhcmQgVW5pdmVyc2l0eSwgQ2FtYnJpZGdlLCBNQSwgVVNBLCBwYWdlIDMsIHdlYjogSGFydmFyZENoZW0tRWluc3RlaW4tUERGOiBNYXggVGFsbXVkIHZpc2l0ZWQgb24gVGh1cnNkYXlzIGZvciBzaXggeWVhcnMuDQpFaW5zdGVpbiBhY2NlcHRlZCB0aGUgcG9zaXRpb24sIGFuZCBpbiBhIHNob3cgb2Ygc3VwcG9ydCB0byB0aGUgbmV3IGRlbW9jcmFjeSwgRWluc3RlaW4gcmVhY3F1aXJlZCBHZXJtYW4gY2l0aXplbnNoaXAuIEluIHRoZSB5ZWFycyBhZnRlciB0aGUgd2FyLCBFaW5zdGVpbiB3YXMgdmVyeSB2b2NhbCBpbiBoaXMgc3VwcG9ydCBmb3IgR2VybWFueS4JZGljZSB3aXRoIHRoZSB1bml2ZXJzZSwmIHF1b3Q7IGdldHMgcXVvdGVkIGZvciB2YXN0bHkgZGlmZmVyZW50IHB1cnBvc2VzLiwgSSB3YW50ZWQgdG8gdW5kZXJzdGFuZCB3aGF0IEVpbnN0ZWluIG1lYW50IGFzIGEgcGh5c2ljaXN0IHdoZW4gaGUgc2FpZCB0aGF0Lg0KVGhlIGZpbG0gZm9vdGFnZSBzaG93aW5nIHdoYXQgYXBwZWFycyB0byBiZSBhIHdvbWFuIG9uIGEgY2VsbCBwaG9uZSBmcm9tIENoYXJsaWUgQ2hhcGxpbidzIDE5MjggbW92aWUsIFRoZSBDaXJjdXMsIGlzIGNhdXNpbmcgYSBsb3Qgb2YgcGVvcGxlIHRvIGFzayBxdWVzdGlvbnMuCUVpbnN0ZWluJ3MgQ29zbW9zIGhhcyAxOTYgcmF0aW5ncyBhbmQgMzggcmV2aWV3cy4sIEdhcnkgc2FpZDogWWVzLCBpdCdzIHRha2VuIG1lIHRoaXMgbG9uZyB0byBnZXQgcm91bmQgdG8gcmVhZGluZyBpdC4sIEkgYm91Z2h0IGl0IGFzIGNoZWFwLCBkYW1hZ2VkIHN0b2NrIGFyb3VuZCAyMDA1LiBZZXN0ZXJkYXkgSSBzbGlkIGl0IG9mZiB0aGUgc2hlbGYsIGJsZXcgb2ZmIHRoZSBkdXN0IGFuZCBzdGFydGVkIHJlYWRpbmcuDQpBbGJlcnQgRWluc3RlaW4gTWlkZGxlIFNjaG9vbCBzdGFmZiByZWNvZ25pemVzLiB0aGF0IGZ1bGwgcGFydGljaXBhdGlvbiBpbiBhbGwgcHJvbW90aW9uIGNlcmVtb25pZXMgaXMgYSBwcml2aWxlZ2UgdG8gYmUgZWFybmVkLglMaXN0IG9mIGFsbCB0aGUgcXVlc3Rpb25zIGFuZCBhbnN3ZXJzLg0KQSBmZXcgd2Vla3MgYWdvLCBJIHZpc2l0ZWQgdGhlIHNjaG9vbCB3aGVyZSBBbGJlcnQgRWluc3RlaW4gZ290IGhpcyBmaXJzdCBzdGVhZHkgam9iLiwgSGUgd2FzIGFuIEF1c2hpbGZzbGVocmVyLCBhbiBhc3Npc3RhbnQgbGVjdHVyZXIuCWZvbGxvd2luZyBhcnRpY2xlIGFwcGVhcmVkIGluIHRoZSBOZXcgWW9yayBUaW1lcyBNYWdhemluZSBvbiBOb3ZlbWJlciA5LC4gZm9sbG93aW5nIGFydGljbGUgYXBwZWFyZWQgaW4gdGhlIE5ldyBZb3JrIFRpbWVzIE1hZ2F6aW5lIG9uIE5vdmVtYmVyIDksLiwgQSBsaXR0bGUgY29uc2lkZXJhdGlvbiB3aWxsIHN1ZmZpY2UgdG8gc2hvdyB1cyB0aGF0IHRoZSBtb3N0LiB2YXJ5aW5nIGVtb3Rpb25zIHByZXNpZGUgb3ZlciB0aGUgYmlydGggb2YgcmVsaWdpb3VzIHRob3VnaHQgYW5kLg0KQWxiZXJ0IEVpbnN0ZWluIGxlZCBhbiBpbnRlcmVzdGluZyBsaWZlLCBmcm9tIGhpcyBiZWdpbm5pbmdzIGFzIGEgbWF0aGVtYXRpY2FsIHByb2RpZ3ksIHRvIGhpcyBoZXlkYXkgd2hlbiBoZSBwb3B1bGFyaXplZCBwaHlzaWNzLCB0byBoaXMgb2xkIGFnZSB3aGVyZSBoaXMgc3RhdHVzIGFzIGEgbGl2aW5nIGxlZ2VuZCBhZmZvcmRlZCBoaW0gbWFueSBvcHBvcnR1bml0aWVzLiBGb2xzaW5nIGRvZXMgYSBncmVhdCBqb2IgZGV0YWlsaW5nIEVpbnN0ZWluIHRoZSBtYW4gaW4gZWFjaCBvZiB0aGVzZSBzZWN0aW9ucy4JSW4gU2VwdGVtYmVyIDE5MTUsIEVpbnN0ZWluIG1ldCBSb21haW4gUm9sbGFuZCBpbiBTd2l0emVybGFuZC4sIFRoaXMgc3BlZWNoIHdhcyBtZXQgd2l0aCBlbnRodXNpYXNtIGJ5IHBhY2lmaXN0cywgYW5kIEVpbnN0ZWluIHF1aWNrbHkgYmVjYW1lIGFuIGludGVybmF0aW9uYWwgaGVybyBpbiB0aGUgZXllcyBvZiB0aGUgcGVhY2UgbW92ZW1lbnQuIFRoZXJlIHdlcmUgaG93ZXZlciBhbHNvIGNyaXRpY2FsIGNvbW1lbnRzLCBzdWNoIGFzIHRoZSByZW1hcmsgbWFkZSBieSBSb21haW4gUm9sbGFuZDogIkVpbnN0ZWluIHNlZW1zIHRvIG92ZXJsb29rIHRoZSBmYWN0IHRoYXQgdGhlIHRlY2huaXF1ZSBvZiB3YXIgaGFzIGNoYW5nZWQgc2luY2UgMTkxNCwgYW5kIGlzIHN0aWxsIGNoYW5naW5nLg0KNi4gNyBMZXQncyBoYXZlIGEgcG9sbCBvbiBIaWxiZXJ0ICYgUG9pbmNhcmUhLiA2LiA3LjEgQWx0ZXJuYXRpdmUgMUE6IEFsYmVydCBFaW5zdGVpbiBzaG91bGQgaGF2ZSBtYWluIGNyZWRpdCBmb3IgU3BlY2lhbCBSZWxhdGl2aXR5LiA2LjIuNy4yIEFsdGVybmF0aXZlIDFCOiBIZW5yaSBQb2luY2FyZSBzaG91bGQgaGF2ZSBtYWluIGNyZWRpdCBmb3IgU3BlY2lhbCBSZWxhdGl2aXR5LglTaGFycCBmb3VuZGVkIHRoZSBBbGJlcnQgRWluc3RlaW4gSW5zdGl0dXRpb24gaW4gMTk4MywgZGVkaWNhdGVkIHRvIGFkdmFuY2luZyB0aGUgc3R1ZHkgYW5kIHV0aWxpemF0aW9uIG9mIG5vbnZpb2xlbnQgY29uZmxpY3QgaW4gZGVmZW5zZSBvZiBmcmVlZG9tLCBqdXN0aWNlLCBhbmQgZGVtb2NyYWN5LiBMb25nIGNvbnNpZGVyZWQgdGhlIGZvcmVtb3N0IGF1dGhvcml0eSBpbiBoaXMgZmllbGQsIFNoYXJwIGhhcyBpbnNwaXJlZCBnZW5lcmF0aW9ucyBvZiBwcm9ncmVzc2l2ZSBwZWFjZSwgbGFib3IsIGZlbWluaXN0LCBlbnZpcm9ubWVudGFsLCBhbmQgc29jaWFsIGp1c3RpY2UgYWN0aXZpc3RzIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBhcm91bmQgdGhlIHdvcmxkLg0KSSBpbnRlbmQgdG8gaW5zZXJ0IG1hdGVyaWFsIGludG8gdGhlIEFsYmVydCBFaW5zdGVpbiBlbnRyeSBuZWFyIHRoZSBleGlzdGluZyBjbGFpbSB0aGF0IEFsYmVydCBFaW5zdGVpbiB3YXMgYSB6aW9uaXN0LiBJIGludGVuZCB0byBlbGFib3JhdGUgZnVydGhlciwgY2l0aW5nIHRoZSB2b2x1bWUgb2YgaGlzIHdyaXRpbmdzIHRpdGxlZCBBYm91dCBaaW9uaXNtOi4JTGlrZSB0aGlzOiBMaWtlIEJlIHRoZSBmaXJzdCB0byBsaWtlIHRoaXMgcG9zdCBUYWdnZWQgd2l0aDogYWxiZXJ0IGVpbnN0ZWluLCBhbGJlcnQgZWluc3RlaW4gZmFtb3VzIHF1b3RlcywgYWxiZXJ0IGVpbnN0ZWluIG1vc3QgZmFtb3VzIHF1b3RlLCBhbGJlcnQgZWluc3RlaW4gbW9zdCBmYW1vdXMgcXVvdGVzLCBhbGJlcnQgZWluc3RlaW4gbW9zdCBwb3B1bGFyIHF1b3RlLCBlaW5zdGVpbiwgZmFtb3VzIHF1b3RlcyBieSBlaW5zdGVpbiBhYm91dCBsb3ZlLCBtb3N0IGZhbW91cyBxdW90ZSBieSBlaW5zdGVpbiwgbW9zdCBmYW1vdXMgcXVvdGUgYnkgZWluc3RlaW4gYWJvdXQgbGlmZSwgbW9zdCBmYW1vdXMgcXVvdGVzIGJ5IGFsYmVydCBlaW5zdGVpbiwgbW9zdCBwb3B1bGFyIHF1b3RlIGJ5IGFsYmVydCBlaW5zdGVpbiAxIGNvbW1lbnQuIE1vc3QgRmFtb3VzIFdpbGxpYW0gU2hha2VzcGVhcmUgUXVvdGVzIGluIFdpbGxpYW0gU2hha2VzcGVhcmUgUXVvdGUuIEZyaWVkcmljaCBOaWV0enNjaGUgTW9zdCBGYW1vdXMgUXVvdGUgaW4gUXVvdGVzIGJ5IEZyaWVkcmljaCBOaWV0enNjaGUgTC4NCkVpbnN0ZWluIHF1b3RlOiBUaGUgbW9zdCBiZWF1dGlmdWwgdGhpbmcgd2UgY2FuIGV4cGVyaWVuY2UgaXMgdGhlLglUaGVyZSBhcmUgbm8gYXV0aG9yaXRpZXMgdG8gZm9sbG93IGJsaW5kbHk6IEZhY3RzIGFyZSB2YWxpZCBpZiB0aGV5IGNhbiBiZSByZWFsaXplZCBpbiB0aGUgc3Bpcml0dWFsIHJlYWxtIG9yIGNhbiBiZSByZXByb2R1Y2VkIGluIGV4cGVyaW1lbnRhbCBzY2llbmNlLiBBIHJlbWFya2FibGUgY2hhcmFjdGVyaXN0aWMgb2YgRWluc3RlaW4ncyBhbmQgdGhlIERhbGFpIExhbWEncyB3cml0aW5ncyBhbmQgc3BlZWNoZXMgaXMgdGhhdCB3b3JkcyBjb21lIGZyb20gdGhlaXIgb3duIG1pbmRzIGFuZCBleHBlcmllbmNlcy4NCkEgZ3JvdXAgb2YgZXhwZXJpZW5jZWQgd3JpdGVycyB3aWxsIHByb2R1Y2UgYW55IHRlcm0gcGFwZXIgeW91IHJlcXVlc3QgaW4gYSBtYXR0ZXIgb2YgaG91cnMuIFJlc2VhcmNoIExpbmtzIFRvcCA1MCBFc3NheSBTaXRlcyBDb250YWN0IFVzIE9yZGVyIHlvdXIgY3VzdG9tIHRlcm0gcGFwZXIgZm9yIG9ubHkgJDEyLjk1IGEgcGFnZSEuLCBBbGJlcnQgRWluc3RlaW46IE1hbiBvZiBWaXNpb24gQWxiZXJ0IEVpbnN0ZWluLCBwZXJoYXBzIHRoZSBncmVhdGVzdCBtaW5kIGV2ZXIgdG8gaGF2ZSB3YWxrZWQgdGhlIGZhY2Ugb2YgdGhlIGVhcnRoLCB3YXMgYm9ybiBvbiBNYXJjaCAxNCwgMTg3OSBpbiBVbG0sIEdlcm1hbnkuIEFzIGEgYm95LCBoZSBoYXRlZCBzY2hvb2wsIGFuZCBmZWx0IHRoYXQgdGhlIHJlZ2ltZW50ZWQgYW5kIHJlcGV0aXRpdmUgbmF0dXJlIG9mIHNjaG9vbGluZyBpbiBHZXJtYW55IGF0IHRoYXQgdGltZSBoYWQgYW55IHByb21pc2Ugb2YgaGVscGluZyBoaXMgZnV0dXJlLglSaWNoYXJkIEIuIExpcHRvbiwgTS5ELiB0aGUgTG90dGkgYW5kIEJlcm5hcmQgQmVuc29uIEZhY3VsdHkgU2Nob2xhciBpbiBBbHpoZWltZXIncyBEaXNlYXNlIGFuZCBwcm9mZXNzb3IgYW5kIHZpY2UgY2hhaXIgb2YgVGhlIFNhdWwgUi4gS29yZXkgRGVwYXJ0bWVudCBvZiBOZXVyb2xvZ3ksIHdpbGwgY29udGludWUgdG8gbGVhZCBhbiBpbnRlcmRpc2NpcGxpbmFyeSB0ZWFtIG9mIHJlc2VhcmNoZXJzIGFuZCBoZWFsdGggY2FyZSBwcm9mZXNzaW9uYWxzIHdvcmtpbmcgdG8gZGlzY292ZXIgZGVtZW50aWEncyBjYXVzZXMgYW5kIHBvdGVudGlhbCB0aGVyYXBpZXMuICdXZSBhcmUgZ3JhdGVmdWwgZm9yIHRoZSBsb25nc3RhbmRpbmcgc3VwcG9ydCBvZiB0aGlzIHJlc2VhcmNoIHByb2dyYW0gZnJvbSB0aGUgTklBIGFuZCBFaW5zdGVpbiwgc2FpZCBEci4gTGlwdG9uLCB3aG8gaGFzIGJlZW4gdGhlIGRpcmVjdG9yIG9mIEVBUyBzaW5jZSAxOTkyLg0KQWxiZXJ0IEVpbnN0ZWluIHdhcyBwcm9iYWJseSB0aGUgZ3JlYXRlc3QgcGh5c2ljaXN0IG9mIHRoZSAyMHRoIGNlbnR1cnkuLCBSb25pIEdyb3N6LCBjdXJhdG9yIG9mIHRoZSBBbGJlcnQgRWluc3RlaW4gQXJjaGl2ZXMgb2YgdGhlIEhlYnJldyBVbml2ZXJzaXR5IGluIEplcnVzYWxlbSwgdGVsbHMgR2VsZiwgIlRoZXJlIGlzIG5vIHByb29mIG9mIEVpbnN0ZWluIGV2ZXIgaGF2aW5nIHNhaWQgb3Igd3JpdHRlbiBpdC4iLiBXaGlsZSBHcm9zeiBub3RlcyB0aGF0IGl0IGlzIGV4dHJlbWVseSBkaWZmaWN1bHQgdG8gZGlzcHJvdmUgYSBxdW90ZSwgaGUgImNvdWxkIG5vdCByZW1lbWJlciBldmVuIG9uZSByZWZlcmVuY2UgdG8gYmVlcyBpbiBFaW5zdGVpbidzIHdyaXRpbmdzLiIuCUVpbnN0ZWluJ3MgaGlnaCBzY2hvb2wgdHJhbnNjcmlwdCBBbGJlcnQgRWluc3RlaW4gd2FzIGJvcm4gaW4gVWxtLCBpbiB0aGUgS2luZ2RvbSBvZiBX/HJ0dGVtYmVyZyBpbiB0aGUgR2VybWFuIEVtcGlyZSBvbiAxNCBNYXJjaCAxODc5LiA4LiwgRWluc3RlaW4gY29sbGFib3JhdGVkIHdpdGggb3RoZXJzIHRvIHByb2R1Y2UgYSBtb2RlbCBvZiBhIHdvcm1ob2xlLg0Kb2YgdGhlIGZ1dHVyZSB3b3VsZCBiZSBhYmxlIHRvIGRpc2NvdmVyIHdoYXQgbWFkZSBFaW5zdGVpbiBzbyBpbnRlbGxpZ2VudC4JSXQgaXMgd29ydGggdG8gY29udGludWUgdG8gcmVhZCBvbiBhcyBBbGJlcnQgRWluc3RlaW4gd2FzIGJvdGggYSBTY2llbnRpc3QgYXMgd2VsbCBhcyBhIEJyaXRpc2ggUHJvY2VzcyBvciBQZXJlbm5pYWwgUGhpbG9zb3BoZXIgYW5kIG1hdGhlbWF0aWNpYW4gbGlrZSBXaGl0ZWhlYWQuIEZyYW5rbHkgcHV0LCBhIFNjaWVudGlzdCBtdXN0IGJlIGEgcHJlY2lzZSBwcm9jZXNzIG9yIHBlcmVubmlhbCBwaGlsb3NvcGhlciBpbiBvcmRlciB0byBhbmFseXNlIGFuZCBzeW50aGVzaXplIGhpcyBpbnZlbnRpb24gb3Igbm92ZWx0eS4sIEJvdGggR290YW1hIEJ1ZGRoYSBhbmQgQWxiZXJ0IEVpbnN0ZWluIGRpc2NvdmVyIHRoZSBkeW5hbWljIFVuaXR5IG9mIFJlYWxpdHkgb2YgdGhlIG5lY2Vzc2FyeSBpbnRlcmNvbm5lY3Rpb24gb2YgYWxsIG15cmlhZCB0aGluZ3MgaW4gdGhlIHVuaXZlcnNlLiAuIC4gJ0h1bWFuIGJlaW5nIGlzIHBhcnQgb2YgdGhlIHdob2xlIGNhbGxlZCBieSB1cyB1bml2ZXJzZSwgYSBwYXJ0IGxpbWl0ZWQgaW4gdGltZSBhbmQgc3BhY2UuDQpmdXJ0aGVyIG1vcmUgaW5jcmVhc2UgdGhlIGNvbXBhbnkgcyBjb21wZXRpdGl2ZW5lc3MgYW5kIHF1YWxpdHkgb2YgaXRzIHByb2R1Y2UuDQo=