SW50ZWwoUikgUGxhdGZvcm0gSW5ub3ZhdGlvbiBGcmFtZXdvcmsgZm9yIEVGSQ0KRUZJIERldmVsb3BtZW50IEtpdCBJSSAoRURLIElJKSANClJvb3QgUGFja2FnZSAxLjAwDQoyMDA2LTExLTA4DQoNCkludGVsIGlzIGEgdHJhZGVtYXJrIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIEludGVsIENvcnBvcmF0aW9uIG9yIGl0cyANCnN1YnNpZGlhcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgY291bnRyaWVzLg0KKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuDQpDb3B5cmlnaHQgKGMpIDIwMDYsIEludGVsIENvcnBvcmF0aW9uDQoNClRoaXMgZG9jdW1lbnQgcHJvdmlkZXMgdXBkYXRlcyB0byBkb2N1bWVudGF0aW9uLCBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gb24gDQpob3cgdG8gaW5zdGFsbCBhbmQgYnVpbGQgdGhlIEVESyBJSS4NCg0KUGFja2FnZSBDb250ZW50cw0KLS0tLS0tLS0tLS0tLS0tLQ0KICBCdWlsZE5vdGVzLnR4dCAtIFRoZSBidWlsZCBub3RlcyBmb3IgdGhpcyBwYWNrYWdlLg0KICBNZGVQa2cgICAgICAgICAtIEluZHVzdHJ5LXN0YW5kYXJkIGhlYWRlcnMgYW5kIGxpYnJhcmllcw0KICBUb29scyAgICAgICAgICAtIEJ1aWxkIC1zcGVjaWZpYyB0b29scyB0aGF0IGFyZSBkZXNpZ25lZCB0byBoZWxwIHRoZSANCiAgICAgICAgICAgICAgICAgICBkZXZlbG9wZXIgY3JlYXRlIGFuZCBtb2RpZnkgZHJpdmVycyBhbmQgbGlicmFyaWVzDQogIEVka01vZHVsZVBrZyAgIC0gUmVmZXJlbmNlIGRyaXZlcnMNCiAgRWRrRmF0QmluUGtnICAgLSBCaW5hcnkgRFhFIGRyaXZlcnMgZm9yIHRoZSBGYXQgMzIgZmlsZSBzeXN0ZW0NCiAgRWRrU2hlbGxCaW5Qa2cgLSBCaW5hcnkgU2hlbGwgYXBwbGljYXRpb25zIGFuZCBjb21tYW5kcw0KICBFZGtOdDMyUGtnICAgICAtIE5UMzIgRW11bGF0aW9uIHBsYXRmb3JtIHJlZmVyZW5jZQ0KICBFZGtVbml4UGtnICAgICAtIFBvc2l4L1VuaXggRW11bGF0aW9uIHBsYXRmb3JtIHJlZmVyZW5jZSAoQ3VycmVudGx5IHRoaXMNCiAgICAgICAgICAgICAgICAgICBidWlsZHMgb25seSBvbiBpYTMyIExpbnV4LCBidXQgaXMgbWVhbnQgdG8gYmUgcG9ydGFibGUuKQ0KDQpOb3RlOiBNREUgYW5kIE1ESyB0aGF0IGFwcGVhciBpbiBvdGhlciBkb2N1bWVudGF0aW9uIHJlZmVyIHRvIHRoZSBNZGVQa2cgYW5kDQpUb29scyBwYWNrYWdlcywgcmVzcGVjdGl2ZWx5LiAgV2hpbGUsIHRoZXNlIHR3byBwYWNrYWdlcyBhcmUgdGhlIG1pbmltdW0gDQpyZXF1aXJlbWVudCBmb3IgZGV2ZWxvcGluZyBFREsgSUkgUGFja2FnZXMgd2UgcmVjb21tZW5kIHRoYXQgeW91IGRvd25sb2FkIGFsbCANCm9mIHRoZSB0b3AtbGV2ZWwgZmlsZXMgbGlzdGVkIGFib3ZlLg0KDQpUaGUgZm9sbG93aW5nIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGFzIGEgc2VwYXJhdGUgcHJvamVjdCwgdW5kZXIgYSBzZXBhcmF0ZSANCmxpY2Vuc2UsIG9uIHRoZSBUaWFub0NvcmUub3JnIHdlYnNpdGU6IGh0dHBzOi8vZmF0LWRyaXZlcjIudGlhbm9jb3JlLm9yZw0KDQogIEVka0ZhdFBrZyAgICAgIC0gQSBwYWNrYWdlIGNvbnRhaW5pbmcgc291cmNlIERYRSBkcml2ZXJzIGZvciB0aGUgRmF0IDMyIGZpbGUNCiAgICAgICAgICAgICAgICAgICBzeXN0ZW0NCg0KRG9jdW1lbnRzIGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlbmFtZXMgKHRvIGRvd25sb2FkIHRoZXNlIGRvY3VtZW50cywgc2VlIJNOb3RlcyANCm9uIERvY3VtZW50YXRpb24/bGF0ZXIgaW4gdGhlc2UgUmVsZWFzZSBOb3Rlcyk6DQogIEVESyBJSSBNb2R1bGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgTGlicmFyeSBTcGVjaWZpY2F0aW9uLCB2MC41OCANCiAgICAgIChNREVfTGlicmFyeV9TcGVjXzBfNTgucnRmKQ0KICBFREsgSUkgQnVpbGQgYW5kIFBhY2thZ2luZyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbiwgdjAuNTMNCiAgICAgIChCdWlsZF9QYWNrYWdpbmdfU3BlY18wXzUzLnJ0ZikNCiAgRURLIElJIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgSW5mcmFzdHJ1Y3R1cmUgRGVzY3JpcHRpb24sIHYwLjU0DQogICAgICAoUENEX0luZnJhc3RydWN0dXJlXzBfNTQucnRmKQ0KICBFREsgSUkgTW9kdWxlIFN1cmZhY2UgQXJlYSBTcGVjaWZpY2F0aW9uLCB2MC41MQ0KICAgICAgKE1vZHVsZV9TdXJmYWNlX0FyZWFfMF81MC5ydGYpDQogIEVESyBJSSBNb2R1bGUgRGV2ZWxvcG1lbnQgRW52aXJvbm1lbnQgUGFja2FnZSBTcGVjaWZpY2F0aW9uLCB2MC41MQ0KICAgICAgKE1ERV9QYWNrYWdlX1NwZWNfMF81MS5ydGYpDQogIEVESyBJSSBDIENvZGluZyBTdGFuZGFyZHMgU3BlY2lmaWNhdGlvbiB2MC41MQ0KICAgICAgKENfQ29kaW5nX1N0YW5kYXJkc19TcGVjaWZpY2F0aW9uXyAwXzUxLnJ0ZikNCiAgRURLIElJIFN1YnZlcnNpb24gU2V0dXAgR3VpZGUNCiAgICAgIChlZGsyLXN1YnZlcnNpb24tc2V0dXAucnRmKQ0KDQpQcmUtUmVxdWlzaXRlcw0KLS0tLS0tLS0tLS0tLS0NClRoZSBmb2xsb3dpbmcgbGlzdCBvZiB0b29scyBtdXN0IGJlIGluc3RhbGxlZCBvbiB0aGUgZGV2ZWxvcG1lbnQgd29ya3N0YXRpb24NCnByaW9yIHRvIHVzaW5nIHRoZSBFREsgSUkuDQoNCkNvbXBpbGVyIFRvb2wgQ2hhaW4NCiAgICAgIE1pY3Jvc29mdCogVmlzdWFsIFN0dWRpbyAuTkVUIDIwMDMqICAoaHR0cDovL3d3dy5taWNyb3NvZnQuY29tKQ0KICAgIG9yDQogICAgICBBIHNwZWNpYWwgR0NDIHZlcnNpb24gNC54IG9yIGxhdGVyIChodHRwOi8vZ2NjLmdudS5vcmcpLiBTZWUgYmVsb3cuDQoNCkFzc2VtYmxlciBUb29sIENoYWluDQogICAgICBNaWNyb3NvZnQgTWFjcm8gQXNzZW1ibGVyLCB2ZXJzaW9uIDYuMTUgb3IgbGF0ZXINCiAgICBvcg0KICAgICAgR05VIGJpbnV0aWxzIDIuMTYuMSBvciBsYXRlcg0KICAgICAgKEh0dHA6Ly9mdHAuZ251Lm9yZy9nbnUvYmludXRpbHMpDQoNCkphdmEgRGV2ZWxvcG1lbnQgS2l0ICggSmF2YSA1LjAgb3IgbGF0ZXIpDQogICAgICBTdW4qIGpkay0xLjUuMF8wNiBvciBsYXRlciAoaHR0cDovL2phdmEuc3VuLmNvbSkNCiAgICBvcg0KICAgICAgQmVhIFN5c3RlbXMqIGpyb2NraXQtMjUuMi4wLWpkazEuNS4wXzAzIG9yIGxhdGVyIChodHRwOi8vd3d3LmJlYS5jb20pDQoNCkphdmEgVG9vbHMNCiAgICBBcGFjaGUtQU5ULCB2ZXJzaW9uIDEuNi41IG9yIGxhdGVyIChodHRwOi8vYW50LmFwYWNoZS5vcmcpDQogICAgQW50LWNvbnRyaWIsIHZlcnNpb24gMS4wYjIgb3IgbGF0ZXINCiAgICAgIChodHRwOi8vcHJkb3dubG9hZHMuc291cmNlZm9yZ2UubmV0L2FudC1jb250cmliL2FudC1jb250cmliLTEuMGIyLWJpbi56aXA/ZG93bmxvYWQpDQogICAgU2F4b244LCB2ZXJzaW9uIDguMS4xDQogICAgICAoaHR0cDovL3ByZG93bmxvYWRzLnNvdXJjZWZvcmdlLm5ldC9zYXhvbi9zYXhvbmI4LTEtMS56aXA/ZG93bmxvYWQpDQogICAgWE1MQmVhbnMsIHZlcnNpb24gMi4xLjAgKGh0dHA6Ly94bWxiZWFucy5hcGFjaGUub3JnKQ0KICAgICAgRE8gTk9UIGRvd25sb2FkIHRoZSBsYXRlc3QgWE1MQmVhbnMsIHZlcnNpb24gMi4yLjAuIEl0IGlzIG5vdCBjb21wYXRpYmxlIA0KICAgICAgd2l0aCBTYXhvbjgsIHZlcnNpb24gOC4xLjEuDQoNCk90aGVyIFRvb2xzDQogICAgVG9ydG9pc2VTVk4gdmVyc2lvbiAxLjMuMy4gKGh0dHA6Ly90b3J0b2lzZXN2bi50aWdyaXMub3JnLykNCg0KT3B0aW9uYWwgVG9vbHMNCi0tLS0tLS0tLS0tLS0tDQpDb21waWxlciBUb29sIENoYWluczoNCiAgICBJbnRlbChSKSBDKysgQ29tcGlsZXIgZm9yIFdpbmRvd3MqLCB2ZXIuIDkuMCBvciBsYXRlciAoaHR0cDovL3d3dy5pbnRlbC5jb20pDQogICAgSW50ZWwoUikgQyBDb21waWxlciBmb3IgRUZJIEJ5dGUgQ29kZSwgdmVyLiAxLjIgb3IgbGF0ZXIgDQogICAgICAoaHR0cDovL3d3dy5pbnRlbC5jb20vY2Qvc29mdHdhcmUvcHJvZHVjdHMvYXNtby1uYS9lbmcvY29tcGlsZXJzL2VmaWJjL2luZGV4Lmh0bSkNCiAgICBNaWNyb3NvZnQgRHJpdmVyIERldmVsb3BtZW50IEtpdCwgdmVyc2lvbiAzNzkwLjE4MzAgb3IgbGF0ZXINCiAgICAgIChodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vd2hkYy9kZXZ0b29scy9kZGsvb3JkZXJkZGtjZC5tc3B4KQ0KICAgIE1pY3Jvc29mdCBBQ1BJIFNvdXJjZSBMYW5ndWFnZSBBc3NlbWJsZXIsIFZlcnNpb24gMS4wLjEzTlQgb3IgbGF0ZXINCiAgICBJbnRlbCBBQ1BJIENvbXBvbmVudCBBcmNoaXRlY3R1cmUsIHZlcnNpb24gMjAwNjAxMTMNCg0KUHl0aG9uDQoNCiAgICBUaGVyZSBhcmUgc2V2ZXJhbCB0b29scyBpbXBsZW1lbnRlZCBpbiBQeXRob24gYW5kIHd4UHl0aG9uIFdpZGdldHMgaW4gdGhlDQogICAgVG9vbHMvUHl0aG9uIGRpcmVjdG9yeS4gVGhlc2UgYXJlIG9wdGlvbmFsIHRvb2xzLCBhbmQgYXJlIG5vdCBuZWNlc3NhcnkgaW4NCiAgICBvcmRlciB0byB1c2Ugb3IgYnVpbGQgdGhlIGVkazIgY29kZS4gIEluIG9yZGVyIHRvIHVzZSB0aGVtIHlvdSBtdXN0DQogICAgaW5zdGFsbCBQeXRob24gMi40LnggYW5kIHd4V2lkZ2V0cyAyLjgueCBmb3IgeW91ciBwbGF0Zm9ybS4gIFRoZSB0b29scw0KICAgIGhhdmUgYmVlbiB0ZXN0ZWQgYW5kIHdvcmsgY29ycmVjdGx5IG9uIE9TIFgsIExpbnV4IGFuZCBXaW5kb3dzLg0KDQogICAgVGhlcmUgaXMgYSBzY3JpcHQgY2FsbGVkIEluc3RhbGxfUHl0aG9uX09TWC5zaCB0aGF0IHdpbGwgZG93bmxvYWQgYW5kDQogICAgaW5zdGFsbCB0aGUgY29ycmVjdCB2ZXJzaW9ucyBmb3IgT1MgWC4gRm9yIG90aGVyIHBsYXRmb3JtcywgcGxlYXNlIGZpbmQNCiAgICB0aGUgaW5zdGFsbGVycyBmb3IgeW91ciBwbGF0Zm9ybSBhdCB0aGUgZm9sbG93aW5nIHNpdGVzOg0KDQogICAgLSBodHRwOi8vd3d3LnB5dGhvbi5vcmcvZG93bmxvYWQvcmVsZWFzZXMvMi40LjQvIChQeXRob24gaW50ZXJwcmV0ZXIpDQogICAgLSBodHRwOi8vd3d3Lnd4cHl0aG9uLm9yZy9kb3dubG9hZC5waHAjYmluYXJpZXMgIChQeXRob24gR1VJIGV4dGVuc2lvbnMpDQoNCiAgICBZb3VyIGxpbnV4IGRpc3RyaWJ1dGlvbiBtYXkgY29udGFpbiBwYWNrYWdlcyBvZiBweXRob24gYW5kIHd4UHl0aG9uLCB3aGljaA0KICAgIHNob3VsZCB3b3JrLCBwcm92aWRlZCB0aGV5IGFyZSBhcmUgY29tcGF0aWJsZSB3aXRoIHRoZSBhYm92ZSBzcGVjaWZpZWQNCiAgICB2ZXJzaW9ucy4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5vdGVzIG9uIFJlcXVpcmVkIFRvb2xzIChTb3VyY2UgQ29udHJvbCBTeXN0ZW0pDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIEVESyBJSSBpcyBiZWluZyBtYW5hZ2VkIGJ5IHRoZSBTdWJ2ZXJzaW9uIFNvdXJjZSBDb250cm9sIG9uIFRpYW5vY29yZS5vcmcuDQpTdWJ2ZXJzaW9uIHByb3ZpZGVzIHNwZWVkLCBzZWN1cml0eSwgYW5kIGFkZGl0aW9uYWwgZmVhdHVyZXMuIFRoZQ0KcmVjb21tZW5kZWQgY2xpZW50IGlzIFRvcnRvaXNlU1ZOIHZlcnNpb24gMS4zLjMuIA0KIChBdmFpbGFibGUgYXQgaHR0cDovL3RvcnRvaXNlc3ZuLnRpZ3Jpcy5vcmcvKQ0KDQpUaGUgY2hlY2tvdXQgcHJvY2VkdXJlcyBvbiB0aGUgVGlhbm9jb3JlLm9yZyBXZWIgc2l0ZSBpbmNsdWRlDQppbnN0cnVjdGlvbnMgZm9yIHRoZSB1c2Ugb2YgU3VidmVyc2lvbiBTb3VyY2UgQ29udHJvbC4NCg0KVGhlIFVSTCBvZiB0aGUgRURLIElJIHJlcG9zaXRvcnkgaXM6DQogIGh0dHBzOi8vZWRrMi50aWFub2NvcmUub3JnL3N2bi9lZGsyL3RydW5rL2VkazINCg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KTm90ZXMgT24gUmVxdWlyZWQgVG9vbHMgKFdpdGggZXhhbXBsZXMgZm9yIFdpbmRvd3MsIE9TIFgsIGFuZCBMaW51eCopIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClNvZnR3YXJlIEluc3RhbGxhdGlvbiBPcmRlcjoNCiAgQWZ0ZXIgaW5zdGFsbGluZyB0aGUgY29tcGlsZXIgdG9vbHMgYW5kIHlvdXIgU3VidmVyc2lvbiBjbGllbnQsIGluc3RhbGwgdGhlIA0KICBmb2xsb3dpbmcgcmVxdWlyZWQgdG9vbHMgaW4gdGhpcyBvcmRlcjogDQogICAgMS4gSmF2YSBKREsNCiAgICAyLiBBcGFjaGUtQW50DQogICAgMy4gYW50LWNvbnRyaWINCiAgICA0LiB4bWxiZWFucw0KICAgIDUuIHNheG9uOA0KDQpKYXZhIERldmVsb3BtZW50IEtpdDoNCiANCiAgIFRoZSBKYXZhIEVudmlyb25tZW50IFZhcmlhYmxlIG11c3QgYmUgc2V0IGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJ1aWxkLg0KICAgICAgIEZvciBTdW4gSkRLIChzZWUgbm90ZSBiZWxvdz86DQogICAgICAgICAgICAgIHNldCBKQVZBX0hPTUU9YzpcSmF2YVxqZGsxLjUuMF8wNiAgKFdpbmRvd3MgZXhhbXBsZSkNCiAgICAgICAgICAgICAgZXhwb3J0IEpBVkFfSE9NRT0vTGlicmFyeS9KYXZhL0hvbWUvIChPUyBYIGV4YW1wbGUpDQogICAgICAgICAgICAgIGV4cG9ydCBKQVZBX0hPTUU9L3Vzci9saWIvajJzZGsxLjUtc3VuLyAoTGludXggZXhhbXBsZSkNCiAgICAgICBGb3IgQmVhIFN5c3RlbXM6DQogICAgICAgICAgICAgIHNldCBKQVZBX0hPTUU9YzpcSmF2YVxqcm9ja2l0LVIyNi4wLjAtamRrMS41LjBfMDQNCiANCiAgP1doZW4gdXNpbmcgdGhlIFN1biBKREs1LjA6DQogICAgRHVyaW5nIGluc3RhbGxhdGlvbiwgeW91IHNob3VsZCBzcGVjaWZ5IHRoZSBpbnN0YWxsIGRpcmVjdG9yeSBhcyBDOlxKYXZhDQogICAgaW5zdGVhZCBvZiBDOlxQcm9ncmFtIEZpbGVzXChvciBzb21lIG90aGVyIGRyaXZlIGxldHRlci4pICBXaGlsZSBpbnN0YWxsaW5nDQogICAgdG8gdGhpcyBub24tc3RhbmRhcmQgbG9jYXRpb24gaXMgbm90IHJlcXVpcmVkLCBpbiBwcmFjdGljZSwgaXQgc2VlbXMgdG8gd29yayANCiAgICBtb3JlIHJlbGlhYmx5LiANCiAgICBGb3IgdGhlIEpESywgdGhlIGluc3RhbGwgcGF0aCBpcyBDOlxKYXZhXGpkazEuNS4wXzA2DQogICAgRm9yIHRoZSBKUkUsIHRoZSBpbnN0YWxsIHBhdGggaXMgQzpcSmF2YVxqcmUxLjUuMF8wNg0KICAgIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gc3BlY2lmeSBDOlxzdW5qYXZhamRrIGFuZCBDOlxzdW5qYXZhanJlLg0KDQogICAgTk9URTogWW91IGNhbm5vdCBjb21iaW5lIHRoZSBsb2NhdGlvbiBmb3IgdGhlIEpESyBhbmQgdGhlIEpSRSwgYmVjYXVzZSB0aGUgDQogICAgSlJFIGluc3RhbGwgcmVtb3ZlcyBtb3N0IG9mIHRoZSBiaW5hcmllcyBhbmQgbGlicmFyaWVzIGluc3RhbGxlZCBieSB0aGUgSkRLDQogICAgaW5zdGFsbC4NCg0KSmF2YSBUb29sczoNCiAgICBUaGUgQXBhY2hlLUFOVCByZXF1aXJlcyB0aGUgQU5UX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gYmUgc2V0IGJlZm9yZQ0KICAgIGF0dGVtcHRpbmcgdG8gYnVpbGQ6DQogICAgICAgICBzZXQgQU5UX0hPTUU9YzpcPGZ1bGwgcGF0aCB0byB3aGVyZSBhbnQgd2FzIGluc3RhbGxlZD4NCiAgICAgICAgICBleHBvcnQgQU5UX0hPTUU9fi9FeHRlcm5hbFRvb2xzL2FwYWNoZS1hbnQgKE9TIFggYW5kIExpbnV4IGV4YW1wbGUpDQoNCiAgICBUaGUgYW50LWNvbnRyaWIuamFyIGZpbGUgc2hvdWxkIGJlIGluc3RhbGxlZCBpbiB0aGUgJUFOVF9IT01FJVxsaWIgDQogICAgZGlyZWN0b3J5Lg0KDQogICAgWE1MQmVhbnMsIHJlcXVpcmVzIHRoZSBYTUxCRUFOU19IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIGJlIHNldA0KICAgIGJlZm9yZSBhdHRlbXB0aW5nIHRvIGJ1aWxkOg0KICAgICAgICAgc2V0IFhNTEJFQU5TX0hPTUU9QzpcPGZ1bGwgcGF0aCB0byB3aGVyZSB4bWxiZWFucyB3YXMgaW5zdGFsbGVkPg0KICAgICAgICAgIGV4cG9ydCBYTUxCRUFOU19IT01FPX4vRXh0ZXJuYWxUb29scy94bWxiZWFucyAoT1MgWCBhbmQgTGludXggZXhhbXBsZSkNCg0KICAgIENvcHkgdGhlIHNheG9uOC5qYXIgZmlsZSB0byB0aGUgJVhNTEJFQU5TX0hPTUUlXGxpYiBkaXJlY3RvcnkuDQoNCiAgIFRoZSBBbnQgYW5kIFhNTEJlYW4gdG9vbHMgbXVzdCBiZSBpbiB0aGUgcGF0aC4NCiAgICAgTVMgc3lzdGVtIGV4YW1wbGU6DQogICAgICAgIHNldCBQQVRIPSVQQVRIJTslQU5UX0hPTUUlXGJpbjslWE1MQkVBTlNfSE9NRSVcYmluDQogICAgIExpbnV4L09TIFggYmFzaCBzaGVsbCBleGFtcGxlOg0KICAgICAgICBleHBvcnQgUEFUSD0kUEFUSDoke0FOVF9IT01FfS9iaW46JHtYTUxCRUFOU19IT01FfS9iaW4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiBBcGFjaGUtQU5UDQotLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIEFwYWNoZS1BTlQgcHJvZ3JhbSBpcyBhIGJ1aWxkIHRvb2wgdGhhdCB1c2VzIFhNTC1iYXNlZCBwcm9qZWN0IGZpbGVzLg0KU2ltaWxhciB0byBNYWtlZmlsZXMsIHRoZXNlIHByb2plY3QgZmlsZXMgbWF5IGNvbnRhaW4gbXVsdGlwbGUgdGFyZ2V0cy4gIE1vc3QNCmJ1aWxkLnhtbCBmaWxlcyBpbiBFREsgSUkgYXJlIGF1dG8tZ2VuZXJhdGVkOyBhbnkgZWRpdHMgcGVyZm9ybWVkIG9uIHRoZQ0KYnVpbGQueG1sIGZpbGVzIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYnkgdGhlIG5leHQgYnVpbGQuDQoNClByZS1kZWZpbmVkIHRhcmdldHMgaW4gdGhlIGJ1aWxkLnhtbCBmaWxlIGluY2x1ZGU6DQogICAgYWxsICAgICAgLSBUaGlzIHRhcmdldCBidWlsZHMgYmluYXJpZXMgZm9yIGRlZmluZWQgYXJjaGl0ZWN0dXJlcy4NCiAgICBjbGVhbiAgICAtIFRoaXMgdGFyZ2V0IHJlbW92ZXMgb2JqZWN0IGZpbGVzIGdlbmVyYXRlZCBieSBjb21tYW5kcy4NCiAgICBjbGVhbmFsbCAtIFRoaXMgdGFyZ2V0IHJlbW92ZXMgYWxsIGdlbmVyYXRlZCBmaWxlcyBhbmQgZGlyZWN0b3JpZXMuDQoNClVzZSB0aGUgQU5UIG9wdGlvbiwgLWVtYWNzLCB0byByZW1vdmUgdGhlIFtjY10gY2hhcmFjdGVycyB3aGVuIGFuIGVycm9yIG9jY3Vycw0KdG8gcHJvdmlkZSBhIG1ldGhvZCBmb3IgdGhlIFZpc3VhbCBTdHVkaW8gSURFIHRvIG9wZW4gYSBmaWxlIGJ5IGRvdWJsZQ0KY2xpY2tpbmcgdGhlIG1vdXNlIG9uIHRoZSBmaWxlLiAgQWRkIC1lbWFjcyB0byB0aGUgZW5kIG9mIHRoZSBidWlsZCBjb21tYW5kLg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQSBXb3JkIG9uIHRoZSBHQ0MgVG9vbCBDaGFpbg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpFREsgSUkgd2lsbCBub3QgY29tcGlsZSB3aXRoIGEgc3RhbmRhcmQgTGludXggZ2NjIHRvb2wgY2hhaW4uIFdoaWxlIExpbnV4DQpkaXN0cmlidXRpb25zIGFyZSB1c3VhbGx5IGJhc2VkIG9uIEVMRiwgRURLIElJIHJlcXVpcmVzIGEgdmVyc2lvbiBvZiBnY2MgdGhhdA0KaXMgY29uZmlndXJlZCB0byBwcm9kdWNlIFBFLUNPRkYgaW1hZ2VzLiBZb3Ugd2lsbCBmaW5kIGEgc2NyaXB0IGluIDxSb290IG9mDQpFREsyIHRyZWU+L1Rvb2xzL2djYy90aWFub0Nyb3NzLWdjYy00LjEgdGhhdCB3aWxsIGRvd25sb2FkLCBjb25maWd1cmUsIGNvbXBpbGUsDQphbmQgaW5zdGFsbCBhIGdjYyA0LjEgY3Jvc3MtY29tcGlsZSB0b29sIGNoYWluIGZvciBFREsgSUkgZGV2ZWxvcG1lbnQuIFRoaXMNCmN1c3RvbSB0b29sIGNoYWluIHN1cHBvcnRzIHRoZSBJQS0zMiBhcmNoaXRlY3R1cmUuIEl0IGNhbiBiZSBidWlsdCBhbmQgcnVuIG9uDQpDeWd3aW4sIExpbnV4LCBhbmQgbWFueSBvdGhlciBQT1NJWC1jb21wbGlhbnQgaG9zdCBvcGVyYXRpbmcgZW52aXJvbm1lbnRzLiBUbw0KY29tcGlsZSB0aGUgY3VzdG9tIGdjYyB0b29sIGNoYWluLCB5b3UgbmVlZCB0aGUgZm9sbG93aW5nIHRvb2xzIG9uIHlvdXIgaG9zdA0KY29tcHV0ZXI6IGJhc2gsIGdjYywgZ21ha2UsIGN1cmwgKG9yIHdnZXQpLg0KDQpPbmx5IHRoZSBNZGVQa2csIEVka01vZHVsZVBrZyBhbmQgRWRrVW5peFBrZyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCBieSBnY2MNCmJ1aWxkcy4gT3RoZXIgYnVpbGRzLCBzdWNoIGFzIHRoZSBFZGtOdDMyUGtnLCB3aWxsIG5vdCBjb21waWxlIHdpdGggZ2NjLiBCeQ0KZGVmYXVsdCwgdGhlIGVkazIgd2lsbCB0cnkgdG8gYnVpbGQgdGhlIE5UMzIuZnBkLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkIGJ5DQpnY2MuIFNvLCB5b3UgbmVlZCB0byBjaGFuZ2UgdGhlIFRvb2xzL0NvbmYvdGFyZ2V0LnR4dC4NCg0KVGhlIGNyb3NzLWNvbXBpbGUgYnVpbGQgc2NyaXB0IGhhcyBiZWVuIHRlc3RlZCBvbiBDeWd3aW4sIE9TIFggYW5kIExpbnV4LiBZb3UNCnNob3VsZCBleHBlY3QgdG8gaGFjayBvbiB0aGVzZSBzY3JpcHRzIHRvIG1ha2UgdGhlbSB3b3JrIG9uIHlvdXIgc3lzdGVtLiBZb3UNCm1heSBuZWVkIHRvIGluc3RhbGwgYWRkaXRpb25hbCB0b29scyBvbiB5b3VyIHN5c3RlbSB0byBtYWtlIHRoZSBzY3JpcHRzIHdvcmsuDQoNCllvdSB3aWxsIG5lZWQNCg0KICBBIHJlY2VudCB2ZXJzaW9uICgzLjAgb3IgbGF0ZXIgc2hvdWxkIGJlIGZpbmUpIG9mIGdjYyB0aGF0IGlzIGFibGUgdG8gcHJvZHVjZQ0KICAgIGV4ZWN1dGFibGVzIGZvciB0aGUgbWFjaGluZSB0aGF0IHlvdSB3YW50IHRvIHJ1biB0aGlzIGNvbXBpbGVyIG9uICh0aGUgaG9zdA0KICAgIG1hY2hpbmUpLg0KICB3Z2V0IG9yIGN1cmwgKHdoaWNoIGVuYWJsZXMgdGhlIGRvd25sb2FkIG9mIHRoZSBnY2MgY29tcGlsZXIgc291cmNlIGNvZGUpDQogIHRhcg0KICBiemlwDQogIGd6aXANCiAgYmFzaA0KICBhbmQgcG9zc2libHkgb3RoZXJzDQoNCkNZR1dJTiBOb3Rlcw0KDQpZb3Ugc2hvdWxkIHNldHVwIGN5Z3dpbiB0byB1c2UgYmlubW9kZSBvbiBhbGwgbW91bnRzLiBXaGVuIHlvdSBpbml0aWFsbHkNCmluc3RhbGwgY3lnd2luIGl0IGdpdmVzIHlvdSB0aGUgY2hvaWNlIG9mIFVuaXggZmlsZSBtb2RlIChyZWNvbW1lbmRlZCkgb3IgRE9TDQpmaWxlIG1vZGUuIFVuaXggbW9kZSB3aWxsIGNhdXNlIGFsbCB0aGUgY3lnd2luIGRpcmVjdG9yaWVzIHRvIGJlIG1vdW50ZWQgaW4NCmJpbm1vZGUsIHdoaWxlIERPUyB3aWxsIG1vdW50IHRoZSBkaXJzIGluIHRleHRtb2RlLiBIZXJlIGlzIGFuIGV4YW1wbGUgb2YgYQ0KY3lnd2luIGluc3RhbGwgd2hlcmUgdGhlIGRpcnMgYXJlIChwcm9wZXJseSkgbW91bnRlZCBpbiBiaW5tb2RlLg0KVG8gdmlldyBtb3VudCBpbmZvcm1hdGlvbiwgdHlwZTogDQogICAgbW91bnQNCg0KQzpcY3lnd2luXGJpbiBvbiAvdXNyL2JpbiB0eXBlIHVzZXIgKGJpbm1vZGUpDQpDOlxjeWd3aW5cbGliIG9uIC91c3IvbGliIHR5cGUgdXNlciAoYmlubW9kZSkNCmM6XHdvcmtzcGFjZSBvbiAvd29ya3NwYWNlIHR5cGUgc3lzdGVtIChiaW5tb2RlKQ0KQzpcY3lnd2luIG9uIC8gdHlwZSB1c2VyIChiaW5tb2RlKQ0KDQpJZiB5b3UgdXNlIHRleHRtb2RlLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGUgYnVpbGQgd2lsbCBmYWlsIGluIGEgd2F5IHRoYXQgaXMNCmhhcmQgdG8gZGVidWcuICBUZXh0bW9kZSBpcyByZXF1aXJlZCB0byByZXRhaW4gb3IgYWRkIHRoZSBET1MgXk0gY2hhcmFjdGVycw0KaW4gRE9TIGJhdGNoIGZpbGVzIGR1cmluZyBmaWxlIGVkaXRpbmcgc2Vzc2lvbnMuDQoNCllvdSBjYW4gc3dpdGNoIGZyb20gdGV4dG1vZGUgdG8gYmlubW9kZSBmb3IgY29tcGlsYXRpb24gYnkgZXhlY3V0aW5nIHRoZSANCmZvbGxvd2luZzoNCiAgICBtb3VudCAtYiAtLWNoYW5nZS1jeWdkcml2ZS1wcmVmaXggY3lnZHJpdmUNCg0KQ3lnd2luIGlzIHByZXR0eSBzbG93LCBzbyBpdCBpcyBub3QgcmVjb21tZW5kZWQgZm9yIGxhcmdlIGJ1aWxkcy4NCg0KDQoNCg0KDQpUaGUgcGxhdGZvcm0gdG8gYmUgYnVpbHQgaXMgaWRlbnRpZmllZCBieSB0aGUgVG9vbHMvQ29uZi90YXJnZXQudHh0IGZpbGU6DQoNCiMNCiMgIFBST1BFUlRZICAgICAgICAgICAgICBUeXBlICAgICAgIFVzZSAgICAgICAgIERlc2NyaXB0aW9uDQojICAtLS0tLS0tLS0tLS0tLS0tICAgICAgLS0tLS0tLS0gICAtLS0tLS0tLSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyAgQUNUSVZFX1BMQVRGT1JNICAgICAgIEZpbGVuYW1lICAgUmVjb21tZW5kZWQgU3BlY2lmeSB0aGUgV09SS1NQQUNFIHJlbGF0aXZlIFBhdGggYW5kIEZpbGVuYW1lIA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHBsYXRmb3JtIEZQRCBmaWxlIHRoYXQgd2lsbCBiZSB1c2VkIGZvciB0aGUgYnVpbGQNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgbGluZSBpcyByZXF1aXJlZCBpZiBhbmQgb25seSBpZiB0aGUgY3VycmVudCB3b3JraW5nDQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcnkgZG9lcyBub3QgY29udGFpbiBvbmUgb3IgbW9yZSBGUEQgZmlsZXMuDQoNCkFDVElWRV9QTEFURk9STSAgICAgICA9DQogDQpZb3UgY2FuIGxlYXZlIGl0IGJsYWNrLCBhcyBhYm92ZSwgb3Igc2V0IGl0IHRvIGFueSAuZnBkIGZpbGUgaW4gdGhlIHdvcmtzcGFjZS4NCklmIHlvdSBsZWF2ZSBpdCBibGFuaywgdGhlbiB5b3UganVzdCBjZCB0byB0aGUgZGlyIHRoYXQgY29udGFpbnMgdGhlIC5mcGQgdGhhdA0KeW91IHdvdWxkIGxpa2UgdG8gYnVpbGQgKE1kZVBrZy8gb3IgRWRrTW9kdWxlUGtnLykgYW5kIHRoZW4gdHlwZSBidWlsZC4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQSBXb3JkIG9uIGNvbXBpbGluZyBvbiBMaW51eA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpJbiBvcmRlciB0byBjb21waWxlIG9uIExpbnV4LCB5b3Ugd2lsbCBuZWVkIHRvIGhhdmUgdGhlIGUyZnNwcm9ncy1kZXZlbCBwYWNrYWdlDQppbnN0YWxsZWQuICBDaGVjayB5b3VyIGRpc3RyaWJ1dGlvbiBmb3IgdGhlIHJwbSwgZGViIG9yIG90aGVyIHBhY2thZ2UgZm9ybWF0Lg0KVGhpcyBwYWNrYWdlIGNvbnRhaW5zIHRoZSB1dWlkIGxpYnJhcnkgYW5kIGhlYWRlciB0aGF0IGFyZSB1c2VkIGJ5IHNvbWUgb2YgdGhlDQpob3N0IHRvb2xzLg0KDQpJZiB5b3UgYXJlIHJ1bm5pbmcgb24geDg2XzY0IExpbnV4LCB0aGVuIHlvdSBzaG91bGQgaW5zdGFsbCBhIDY0IGJpdCB2ZXJzaW9uIG9mDQp0aGUgSmF2YSBKREsuIFRoZSB2ZXJzaW9uIHRoYXQgd2FzIHVzZWQgd2FzIGpkay0xXzVfMF8wNy1saW51eC1hbWQ2NC1ycG0uYmluLg0KSXQgbWF5IGJlIGRvd25sb2FkZWQgZnJvbSBzdW4uY29tLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQSBXb3JkIG9uIGNvbXBpbGluZyB1bmRlciBDeWd3aW4gd2l0aCBnY2MNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkN5Z3dpbiBpcyBhIFBPU0lYIHN0eWxlIG9wZXJhdGluZyBlbnZpcm9ubWVudCBmb3IgV2luZG93cy4gSXQgaXMgcG9zc2libGUgdG8NCmNvbXBpbGUgdGhlIEVESyAyIHVzaW5nIGdjYyBhbmQgY3lnd2luLiBDb21waWxpbmcgdW5kZXIgY3lnd2luIGlzIHNsb3csIGJlY2F1c2UgDQp0aGUgdW5kZXJseWluZyBmaWxlIGFjY2Vzc2VzIGFyZSBzbG93IGluIGN5Z3dpbi4gRm9yIHRoaXMgcmVhc29uLCB3ZSBkbyBub3QgDQplbmNvdXJhZ2UgdGhlIHVzZSBvZiBjeWd3aW4uIEEgdHJ1ZSB1bml4IHN5c3RlbSB3aWxsIGJlIGEgc3VwZXJpb3IgY2hvaWNlIGZvciANCnRob3NlIHdpc2hpbmcgdG8gY29tcGlsZSB3aXRoIGdjYy4NCg0KTWFrZSBzdXJlIHRoYXQgeW91IHNlbGVjdCB0aGUgZTJmc3Byb2dzIGRldmVsb3BtZW50IHBhY2thZ2Ugd2hlbiB5b3UgaW5zdGFsbA0KY3lnd2luLiBJdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBHZW5GdkltYWdlIHRvb2wuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiBnY2MgZm9yIFByb2Nlc3NvciBBcmNoaXRlY3R1cmVzDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkN1cnJlbnRseSBnY2Mgc3VwcG9ydCBpcyBsaW1pdGVkIHRvIElBLTMyIGJ1aWxkcywgZ2VuZXJhdGluZyBJQS0zMiBQRTMyIGltYWdlcy4gDQoNClRoZSBYNjQgYml0IChJbnRlbCA2NCwgZXRjLikgc3VwcG9ydCB1bmRlciB0aGUgZ2NjIGNvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIEVGSUFQSSANCmNhbGxpbmcgY29udmVudGlvbiAoYXMgZGVmaW5lZCBpbiB0aGUgVUVGSSAyLjAgc3BlY2lmaWNhdGlvbiBDaGFwdGVyIDIpLCBzbyBpdCBpcyBub3QgDQpwb3NzaWJsZSB0byBidWlsZCBhIHdvcmtpbmcgRUZJIGltYWdlIGZvciBhbiBYNjQgZW52aXJvbm1lbnQuICBTaW5jZSB0aGUgeDY0IGdjYyBkb2VzIA0Kbm90IHN1cHBvcnQgdGhlIEVGSUFQSSBjYWxsaW5nIGNvbnZlbnRpb24gdGhlIHg2NCB0b29scyBkbyBub3Qgc3VwcG9ydCBnZW5lcmF0aW5nIGEgDQpQRTMyKyBpbWFnZS4gIFRoZSBFRklBUEkgY2FsbGluZyBjb252ZW50aW9uIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgTWljcm9zb2Z0IHg2NCANCmNhbGxpbmcgY29udmVudGlvbi4NCg0KV2UgaGF2ZSBhZGRlZCBwcmVsaW5hcnkgc3VwcG9ydCBmb3IgdGhlIE1pbkdXNjQgVG9vbCBjaGFpbi4gVGhpcyBnY2MgdG9vbA0KY2hhaW4gaXMgcG9ydGVkIHRvIGZvbGxvdyB0aGUgTWljcm9zZnQgWDY0IEFCSSwgYW5kIHRoZXJlZm9yZSBpcyBjb21wYXRpYmxlDQp3aXRoIHRoZSBFRkkgc3BlY2lmaWNhdGlvbi4NCg0KT24gSXRhbml1bT9Qcm9jZXNzb3JzIHRoZSBnY2MgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBnZW5lcmF0aW5nIGEgUEUzMisgaW1hZ2UuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkEgV29yZCBvbiBFZGtVbml4UGtnIC0tIFRoZSBVbml4IHNpbXVsYXRvcg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpBIHVuaXggcG9ydCBvZiB0aGUgTnQzMiBzaW11bGF0b3IgaGFzIGJlZW4gYWRkZWQgdG8gdGhlIHByb2plY3QuIEl0IGN1cnJlbnRseQ0KYnVpbGRzIGFuZCBydW5zIG9uIDMyIGJpdCBMaW51eCwgYnV0IHNob3VsZCBiZSBwb3J0YWJsZSB0byBvdGhlciBVbml4DQp2YXJpYW50cy4gSW4gb3JkZXIgdG8gYnVpbGQgaXQsIHlvdSBzaG91bGQgdXNlIHRoZSBFTEZHQ0MgdG9vbCBjaGFpbiBkZWZpbnRpb24NCmluIHRvb2xzX2RlZi50eHQsIHdoaWNoIGlzIHNldCBpbiB0YXJnZXQudHh0LiBUaGVzZSBhcmUgdHdvIHNldHRpbmdzIHRvIG1ha2UNCmluIFRvb2xzL0NvbmYvdGFyZ2V0LnR4dDoNCg0KQUNUSVZFX1BMQVRGT1JNICAgICAgID0gRWRrVW5peFBrZy9Vbml4LmZwZA0KVE9PTF9DSEFJTl9UQUcgICAgICAgID0gRUxGR0NDDQoNCk9uY2UgdGhhdCBpcyBzZXR1cCwgdHlwZSBidWlsZCwgYW5kIHRoZW4geW91IHdpbGwgZW5kIHVwIHdpdGggdGhlIHNpbXVsYXRvciBpbg0KQnVpbGQvVW5peC9ERUJVR19FTEZHQ0MvSUEzMi9TZWNNYWluLmV4ZS4gDQoNCkluIG9yZGVyIHRvIHVzZSB0aGUgZ2RiIGRlYnVnZ2VyIHdpdGggdGhlIHNpbXVsYXRvciwgeW91IG1heSBuZWVkIHRvIGxvYWQgdGhlDQpjb3JyZWN0IHN5bWJvbCBmaWxlIGZvciB0aGUgdmFyaW91cyBtb2R1bGVzIHRoYXQgYXJlIGxvYWRlZC4gRm9yIGV4YW1wbGUsDQoNCmFkZC1zeW1ib2wtZmlsZSBFZGtNb2R1bGVQa2cvQnVzL1BjaS9QY2lCdXMvRHhlL1BjaUJ1cy9ERUJVRy8uL1BjaUJ1cy5kbGwNCjB4NDVkYzYwMDANCg0KWW91IGNhbiBzZWUgdGhlIG5hbWVzIG9mIHRoZSBzeW1ib2wgZmlsZXMgKHRoZXkgYXJlIGluIEVMRiBmb3JtYXQgZXZlbiB0aG91Z2gNCnRoZSBleHRlbnNpb24gaXMgLmRsbCkgcHJpbnRlZCBvbiB0aGUgc2NyZWVuIGFzIHRoZSBzaW11bGF0b3IgY29tZXMgdXAuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpOb3RlcyBvbiBEb2N1bWVudGF0aW9uDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIGRvY3VtZW50cyBhcmUgYmVpbmcgbWFuYWdlZCBieSB0aGUgU3VidmVyc2lvbiBTb3VyY2UgQ29udHJvbCBvbg0KVGlhbm9jb3JlLm9yZy4gIFRoZSBkb2N1bWVudCByZXBvc2l0b3J5IGlzICJkb2NzIiBhbmQgbXVzdCBiZSBjaGVja2VkIG91dA0Kc2VwYXJhdGVseSBmcm9tIHRoZSBFREsgSUkgc291cmNlIHRyZWUuIFJlZmVyIHRvIHRoZSBjaGVja291dCBwcm9jZWR1cmVzIG9uDQp0aGUgVGlhbm9jb3JlLm9yZyBXZWIgc2l0ZSBmb3IgRURLIElJLg0KDQpUaGUgVVJMIG9mIHRoZSBkb2N1bWVudCByZXBvc2l0b3J5IGlzOg0KICBodHRwczovL2VkazIudGlhbm9jb3JlLm9yZy9zdm4vZWRrMi90cnVuay9kb2NzDQoNCiANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NClF1aWNrIFN0YXJ0DQotLS0tLS0tLS0tLQ0KKGFzc3VtZXMgTWljcm9zb2Z0IFRvb2xzIGFuZCBPUyBlbnZpcm9ubWVudCwgZm9yIEdDQyBUb29scyBvciBMaW51eCwgc2VlIA0KIkRldGFpbGVkIFN0YXJ0aW5nIEluc3RydWN0aW9ucyIgYmVsb3cpDQoNCkZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGF0IGh0dHBzOi8vZWRrMi50aWFub2NvcmUub3JnL3NlcnZsZXRzL1Byb2plY3RTb3VyY2UgdG8NCmNoZWNrIG91dCB0aGUgZW50aXJlIEVESyBJSSBzb3VyY2UgdHJlZS4NCg0KSW4gYSBjb21tYW5kIHdpbmRvdywgY2hhbmdlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBFREsgSUkgc291cmNlLg0KDQpUbyB0ZXN0IHlvdXIgdG9vbCBjaGFpbiBzZXR1cCBhbmQgdG8gYnVpbGQgdGhlIHN1cHBsaWVkIHRvb2xzLCBleGVjdXRlOg0KICAgIGM6XE15V29ya1xlZGsyXD4gZWRrc2V0dXAgRm9yY2VSZWJ1aWxkDQoNCihUaGUgZWRrc2V0dXAgc2NyaXB0IGlzIHJlZmVycmVkIHRvIGFzIHRoZSBzZXR1cCBjb21tYW5kIHRocm91Z2hvdXQgdGhlIA0KcmVzdCBvZiB0aGlzIGRvY3VtZW50LikNCiAgICAgIE5PVEU6IFlvdSBzaG91bGQgcnVuIHRoZSBzZXR1cCBjb21tYW5kIGF0IHRoZSBzdGFydCBvZiBldmVyeSBzZXNzaW9uLg0KICAgICAgICAgICAgVGhpcyBjb25maWd1cmVzIHRoZSBlbnZpcm9ubWVudCB0byBpbmNsdWRlIHRoZSBUaWFub1Rvb2xzIGFuZCB0aGUNCiAgICAgICAgICAgIEphdmEgYXBwbGljYXRpb25zIGFuZCBsaWJyYXJpZXMuDQoNCllvdSB3aWxsIG5lZWQgdG8gc2V0IHRoZSBXT1JLU1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUsIG9yIHJ1biB0aGUgZWRrc2V0dXANCnNjcmlwdCAod2l0aG91dCBhbnkgYXJndW1lbnRzKSwgYW55IHRpbWUgeW91IHdhbnQgdG8gYnVpbGQuDQoNCiAgU2V0IHRoZSBXT1JLU1BBQ0UgZW52aXJvbm1lbnQgdmFyaWFibGUsIGUuZy46DQoNCiAgICBjOlw+IHNldCBXT1JLU1BBQ0U9QzpcTXlXb3JrXGVkazINCg0KWW91IG1heSBuZWVkIHRvIGVkaXQgdGhlIHRleHQgZmlsZXMgVG9vbHMvQ29uZi90YXJnZXQudHh0IGFuZA0KVG9vbHMvQ29uZi90b29sc19kZWYudHh0IChjcmVhdGVkIGJ5IGVka3NldHVwKSB1c2luZyB5b3VyIGZhdm9yaXRlIA0KdGV4dCBlZGl0b3IgdG8gZW5zdXJlIHRoYXQgdGhlIHBhdGhzIHRvIHRoZSB0b29scyB5b3Ugd2FudCB0byB1c2UgDQp0byBidWlsZCBFREsgSUkgYmluYXJpZXMgYXJlIGNvcnJlY3QuICBUaGVzZSBmaWxlcyBjb250YWluIHRoZSBkZWZhdWx0IA0KcGF0aHMgKGFzIHBlciB0aGUgZGVmYXVsdCBpbnN0YWxsYXRpb24gb2YgdGhlIHRvb2xzKSwgc28gYSBjdXN0b21pemVkIA0KaW5zdGFsbCBtYXkgcmVxdWlyZSB0aGlzIG1hbnVhbCBwcm9jZXNzLg0KDQpPbmNlIHRoaXMgaXMgY29tcGxldGVkLCB5b3UgYXJlIHJlYWR5IHRvIHRlc3QgdGhlIGJ1aWxkLCBieSBleGVjdXRpbmc6DQogICAgYzpcTXlXb3JrXGVkazJcPiBidWlsZA0KDQpUaGlzIGNvbW1hbmQgYnVpbGRzIHRoZSBhY3RpdmUgcGxhdGZvcm0gc3BlY2lmaWVkIGluIHRleHQgZmlsZSB0YXJnZXQudHh0LiBJZiANCnRoZSBhY3RpdmUgcGxhdGZvcm0gaXMgbm90IHNwZWNpZmllZCB0YXJnZXQudHh0LCB5b3UgbXVzdCBleGVjdXRlIHRoZSBidWlsZCANCmNvbW1hbmQgZnJvbSB0aGUgc3ViLWRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIEZQRCBmaWxlcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gDQphYm91dCB0aGUgYWN0aXZlIHBsYXRmb3JtIHBvbGljeSwgc2VlIHRoZSCTRURLIElJIEJ1aWxkIGFuZCBQYWNrYWdpbmcgDQpBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbi4/DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkRldGFpbGVkIFN0YXJ0aW5nIEluc3RydWN0aW9ucw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGF0IGh0dHBzOi8vZWRrMi50aWFub2NvcmUub3JnL3NlcnZsZXRzL1Byb2plY3RTb3VyY2UgdG8NCmNoZWNrIG91dCB0aGUgZW50aXJlIEVESyBJSSBzb3VyY2UgdHJlZS4NCg0KSW4gYSBjb21tYW5kIHdpbmRvdywgY2hhbmdlIHRvIHRoZSB0b3AtbGV2ZWwgZGlyZWN0b3J5IG9mIHRoZSBFREsgSUkgc291cmNlLg0KDQpJZiB0aGUgYWN0aXZlIGNvbXBpbGVyIHRvb2wgY2hhaW4gaXMgR0NDLCB5b3UgbXVzdCBzZXQgdGhlDQplbnZpcm9ubWVudCB2YXJpYWJsZSwgVE9PTF9DSEFJTiB0byAiZ2NjIiBiZWZvcmUgcnVubmluZyB0aGUNCmVka3NldHVwIHNjcmlwdC4gIEV4YW1wbGU6IGV4cG9ydCBUT09MX0NIQUlOPWdjYw0KDQpUbyB0ZXN0IHlvdXIgdG9vbCBjaGFpbiBzZXR1cCBhbmQgdG8gYnVpbGQgdGhlIHN1cHBsaWVkIHRvb2xzLCBleGVjdXRlOg0KICAgIGM6XE15V29ya1xlZGsyXD4gZWRrc2V0dXAgRm9yY2VSZWJ1aWxkDQoNCk9uIExpbnV4IHN5c3RlbXMsIHlvdSBtdXN0IHNvdXJjZSB0aGUgZWRrc2V0dXAuc2ggZmlsZSB0byBsb2FkIHRoZSBjb3JyZWN0DQpzZXR0aW5ncyBpbnRvIHlvdXIgc2hlbGwuDQoNCiAgICAuIGVka3NldHVwLnNoICMgTm90ZSB0aGUgZG90Lg0KDQpJZiB5b3UgaGF2ZSByZWNlbnRseSB1cGRhdGVkIHlvdXIgY29kZSBmcm9tIHN1YnZlcnNpb24sIHRoZSB0b29scyB3aWxsIG5lZWQgdG8NCmJlIHJlYnVpbHQgaWYgdGhlcmUgd2VyZSBhbnkgY29kZSBjaGFuZ2VzIG1hZGUgdG8gdGhlbS4gWW91IGNhbiByZXF1ZXN0IHRoYXQNCnRoZSB0b29scyBnZXQgcmVidWlsdCBieSB0eXBpbmc6DQoNCiAgICAuIGVka3NldHVwLnNoIFJlYnVpbGQgIyBVbml4LWxpa2Ugc3lzdGVtcw0KICAgIGVka3NldHVwLmJhdCBSZWJ1aWxkICAjIFdpbmRvd3MNCg0KVGhlIGVka3NldHVwIHNjcmlwdCBpcyByZWZlcnJlZCB0byBhcyB0aGUgc2V0dXAgY29tbWFuZCB0aHJvdWdob3V0IHRoZSANCnJlc3Qgb2YgdGhpcyBkb2N1bWVudC4NCiAgICAgIE5PVEU6IFlvdSBzaG91bGQgcnVuIHRoZSBzZXR1cCBjb21tYW5kIChlZGtzZXR1cClhdCB0aGUgc3RhcnQgb2YgZXZlcnkgDQogICAgICAgICAgICBzZXNzaW9uLiAgVGhpcyBjb25maWd1cmVzIHRoZSBlbnZpcm9ubWVudCB0byBpbmNsdWRlIHRoZSANCiAgICAgICAgICAgIFRpYW5vVG9vbHMgYW5kIHRoZSBKYXZhIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzLg0KDQpBbnkgY2hhbmdlcyB0byB0aGUgdG9vbCBzb3VyY2UgY29kZSBvciBYTUwgU2NoZW1hIGRvY3VtZW50cyByZXF1aXJlIHRoYXQNCnlvdSBleGVjdXRlIHRoZSBmb2xsb3dpbmc6DQogICBjOlxNeVdvcmtcZWRrMlw+IGVka3NldHVwIEZvcmNlUmVidWlsZA0KDQpZb3UgbXVzdCBzZXQgdGhlIFdPUktTUEFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgb3IgcnVuIHRoZSBlZGtzZXR1cA0Kc2NyaXB0ICh3aXRob3V0IGFueSBhcmd1bWVudHMpLCBhbnkgdGltZSB5b3Ugd2FudCB0byBidWlsZC4NCg0KICBTZXQgdGhlIFdPUktTUEFDRSBlbnZpcm9ubWVudCB2YXJpYWJsZSwgZS5nLjoNCg0KICAgIGM6XD4gc2V0IFdPUktTUEFDRT1DOlxNeVdvcmtcZWRrMg0KDQpZb3UgbWF5IG5lZWQgdG8gZWRpdCB0aGUgdGV4dCBmaWxlcyBUb29scy9Db25mL3RhcmdldC50eHQgYW5kDQpUb29scy9Db25mL3Rvb2xzX2RlZi50eHQgKGNyZWF0ZWQgYnkgZWRrc2V0dXApIHVzaW5nIHlvdXIgZmF2b3JpdGUgDQp0ZXh0IGVkaXRvciB0byBlbnN1cmUgdGhhdCB0aGUgcGF0aHMgdG8gdGhlIHRvb2xzIHlvdSB3YW50IHRvIHVzZSANCnRvIGJ1aWxkIEVESyBJSSBiaW5hcmllcyBhcmUgY29ycmVjdC4gIFRoZXNlIGZpbGVzIGNvbnRhaW4gdGhlIGRlZmF1bHQgDQpwYXRocyAoYXMgcGVyIHRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBvZiB0aGUgdG9vbHMpLCBzbyBhIGN1c3RvbWl6ZWQgDQp0b29sIGluc3RhbGxhdGlvbiBtYXkgcmVxdWlyZSB0aGlzIG1hbnVhbCBwcm9jZXNzLg0KDQpPbmNlIHRoaXMgaXMgY29tcGxldGVkLCB5b3UgYXJlIHJlYWR5IHRvIHRlc3QgdGhlIGJ1aWxkLCBieSBleGVjdXRpbmc6DQogICAgYzpcTXlXb3JrXGVkazJcPiBidWlsZA0KDQpUaGlzIGNvbW1hbmQgYnVpbGRzIHRoZSBhY3RpdmUgcGxhdGZvcm0gc3BlY2lmaWVkIGluIHRleHQgZmlsZSB0YXJnZXQudHh0LiBJZiANCnRoZSBhY3RpdmUgcGxhdGZvcm0gaXMgbm90IHNwZWNpZmllZCwgZ28gdG8gdGhlIHN1Yi1kaXJlY3RvcnkgdGhhdCBjb250YWlucyBGUEQgDQpmaWxlcyBhbmQgZXhlY3V0ZSB0aGUgYnVpbGQgY29tbWFuZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFjdGl2ZSANCnBsYXRmb3JtIHBvbGljeSwgc2VlIHRoZSCTRURLIElJIEJ1aWxkIGFuZCBQYWNrYWdpbmcgQXJjaGl0ZWN0dXJlIA0KU3BlY2lmaWNhdGlvbi4/DQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJbmRpdmlkdWFsIFBsYXRmb3JtIEJ1aWxkcw0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkFmdGVyIHJ1bm5pbmcgdGhlIHNldHVwIGNvbW1hbmQsIHlvdSBjYW4gYnVpbGQgaW5kaXZpZHVhbCBwbGF0Zm9ybXMuDQpJbiB0aGUgY29tbWFuZCB3aW5kb3c6DQogIFNldCB0aGUgYWN0aXZlIHBsYXRmb3JtIGluIHRhcmdldC50eHQsIGFuZCBleGVjdXRlIHRoaXMgY29tbWFuZDoNCiAgICBjOlw8ZGlyZWN0b3J5Plw+IGJ1aWxkDQpvcg0KICBjZCB0byB0aGUgcGxhdGZvcm0gKEZQRCBmaWxlKSB0aGF0IHlvdSB3YW50IHRvIGJ1aWxkIGFuZCBleGVjdXRlIHRoaXMgY29tbWFuZDoNCiAgICBjOlxNeVdvcmtcZWRrMlxFZGtOdDMyUGtnXD4gYnVpbGQNCg0KICBOb3RlIHRoYXQgdGhlIGFjdGl2ZSBwbGF0Zm9ybSBzcGVjaWZpZWQgaW4gdGFyZ2V0LnR4dCBvdmVycmlkZXMgdGhlIHBsYXRmb3JtIA0KICBzcGVjaWZpZWQgYnkgYW55IEZQRCBmaWxlIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4gRm9yIG1vcmUgICBpbmZvcm1hdGlvbiANCiAgYWJvdXQgYWN0aXZlIHBsYXRmb3JtIHBvbGljeSwgc2VlIHRoZSCTRURLIElJIEJ1aWxkIGFuZCBQYWNrYWdpbmcgQXJjaGl0ZWN0dXJlDQogIFNwZWNpZmljYXRpb24uPw0KDQpUbyBydW4gdGhlIE50MzIgZW11bGF0aW9uIHBsYXRmb3JtIHVuZGVyIE1pY3Jvc29mdCBXaW5kb3dzLCBnbyB0byANCjxmdWxsIGJ1aWxkIHBhdGg+XERFQlVHXE1TRlRcSUEzMiBhbmQgZXhlY3V0ZSBTZWNNYWluLmV4ZQ0KDQpUbyBleGl0IHRoZSBOdDMyIGVtdWxhdGlvbiBwbGF0Zm9ybSwgdHlwZSCTcmVzZXQ/YXQgdGhlIEVGSSBTaGVsbD4NCmNvbW1hbmQgcHJvbXB0LiAgQWx0ZXJuYXRpdmVseSwgZnJvbSB0aGUgZ3JhcGhpY2FsIGludGVyZmFjZSwgc2VsZWN0IHRoZSBCb290DQpNYWludGVuYW5jZSBNYW5hZ2VyJ3Mgk1Jlc2V0IFN5c3RlbT9jb21tYW5kLg0KDQogICAgICBOT1RFOiBXaGVuIGNyZWF0aW5nIGEgbmV3IHBsYXRmb3JtLCB0aGUgUGxhdGZvcm0gTmFtZSBpcyByZXN0cmljdGVkDQogICAgICB0byBhIHNpbmdsZSB3b3JkIGNvbnRhaW5pbmcgYWxwaGFudW1lcmljIGNoYXJhY3RlcnMsIHVuZGVyc2NvcmUsIGRhc2gsIA0KICAgICAgYW5kIHBlcmlvZC4gIFRoZSBzcGFjZSBjaGFyYWN0ZXIgYW5kIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyBhcmUgDQogICAgICBub3QgYWxsb3dlZC4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCk5vdGVzIG9uIFN5bWJvbGljIERlYnVnDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVG8gZW5hYmxlIEVGSSBTeW1ib2xpYyBEZWJ1Z2dpbmcsIG1ha2Ugc3VyZSB0aGUgdGFyZ2V0IG91dHB1dCBpcyBzZXQgdG8gREVCVUcNCmluIHRoZSB0ZXh0IGZpbGUgVG9vbHMvQ29uZi90YXJnZXQudHh0IGFuZCB0aGVuIG1vZGlmeSB0aGUgRlBEIDxCdWlsZE9wdGlvbnM+DQo8T3B0aW9ucz48T3B0aW9uIEJ1aWxkVGFyZ2V0cz0iREVCVUciIFRvb2xDb2RlPSJDQyI+IGFuZCBhcHBlbmQgdGhlIGZvbGxvd2luZw0KY29tcGlsZXIgb3B0aW9ucyB0byB0aGUgc3RyaW5nOg0KIi9EIEVGSV9HRU5FUkFURV9TWU1fRklMRSIsICIvRCBFRklfU1lNQk9MSUNfREVCVUciDQoNCihJZiB0aGUgT3B0aW9uIGxpbmUgZG9lcyBub3QgY29udGFpbiAiL0QgRUZJX0RFQlVHIiwgeW91IG11c3QgYWRkIHRoYXQNCm9wdGlvbiBhcyB3ZWxsLikNCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpJbmRpdmlkdWFsIE1vZHVsZSBCdWlsZHMNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KQWZ0ZXIgcnVubmluZyB0aGUgc2V0dXAgY29tbWFuZCwgeW91IGNhbiBidWlsZCBpbmRpdmlkdWFsIG1vZHVsZXMuDQogIEluIHRoZSBjb21tYW5kIHdpbmRvdywgY2QgdG8gdGhlIG1vZHVsZSB0aGF0IHlvdSB3YW50IHRvIGJ1aWxkLCBhbmQNCiAgZXhlY3V0ZSB0aGUgYnVpbGQgY29tbWFuZDoNCiAgICBjOlxNeVdvcmtcZWRrMlxNZGVQa2dcTGlicmFyeVxCYXNlTGliXD4gYnVpbGQNCg0KICBZb3UgbXVzdCBzZXQgdGhlIGFjdGl2ZSBwbGF0Zm9ybSBpbiB0YXJnZXQudHh0IGZvciBpbmRpdmlkdWFsIG1vZHVsZSBidWlsZHMuIA0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCkdlbmVyYWwgSW5mb3JtYXRpb246DQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gICAgDQpNZWNoYW5pc21zDQotLS0tLS0tLS0tDQpBIGJyaWVmIG92ZXJ2aWV3Og0KDQpBKSBUaGUgU3VyZmFjZSBBcmVhIFBhY2thZ2UgRGVzY3JpcHRpb24gKFNQRCkgZmlsZSBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCANCnRoZSBtb2R1bGVzIHRoYXQgdGhlIHBhY2thZ2UgY29udGFpbnMsIGluY2x1ZGluZyB0aGUgbG9jYXRpb24gb2YgYWxsIE1TQSBmaWxlcywgDQphbmQgcHVibGljIGxpYnJhcnkgbmFtZXMgYW5kIGhlYWRlcnMgdGhhdCBtaWdodCBiZSBwcm92aWRlZCBieSBhIG1vZHVsZSBpbiB0aGUNCnBhY2thZ2UuICBQYWNrYWdlcyBhcmUgZGVmaW5lZCBieSBTUEQgZmlsZXMuICAoRm91bmQgaW4gdGhlIHJvb3Qgb2YgdGhlIFBhY2thZ2UNCnN1YmRpcmVjdG9yeSAoaS5lLiBFZGtOdDMyUGtnKS4pIFRoZSBTUEQgZmlsZSBpcyBmdXJ0aGVyIGV4cGxhaW5lZCBpbiCTRURLIElJIA0KQnVpbGQgYW5kIFBhY2thZ2luZyBBcmNoaXRlY3R1cmUgU3BlY2lmaWNhdGlvbi4/DQogDQpCKSBNb2R1bGUgU3VyZmFjZSBBcmVhIERlZmluaXRpb24gKE1TQSkgZmlsZXMuICBBIGRlc2NyaXB0aW9uIG9mIGEgbW9kdWxlJ3MgDQpzdXJmYWNlIGFyZWEsIHdpdGggYWxsIG1vZHVsZSBzcGVjaWZpYyBkZWZhdWx0IGZsYWdzIGFuZCBmZWF0dXJlcyBzcGVjaWZpZWQuDQpGb3IgYWRkaXRpb25hbCBkZXRhaWxzLCBzZWUgdGhlICJFREsgSUkgTW9kdWxlIFN1cmZhY2UgQXJlYSBTcGVjaWZpY2F0aW9uIiBhbmQgDQp0aGUgIkVESyBJSSBCdWlsZCBhbmQgUGFja2FnaW5nIEFyY2hpdGVjdHVyZSBTcGVjaWZpY2F0aW9uLiINCg0KQykgRnJhbWV3b3JrIFBsYXRmb3JtIERlc2NyaXB0aW9uIChGUEQpIGZpbGVzLiAgQSBkZXNjcmlwdGlvbiBvZiBhIHBsYXRmb3JtJ3MNCnN1cmZhY2UgYXJlLCBpbmNsdWRpbmcgYSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBhcmUgbmVlZGVkIGJ5IHRoZSBwbGF0Zm9ybS4gIFRvDQpzdXBwb3J0IGluZGl2aWR1YWwgbW9kdWxlIGJ1aWxkcywgZGV2ZWxvcGVycyBhcmUgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUNCmluZm9ybWF0aW9uIGFib3V0IHNwZWNpZmljIGZsYXNoIGRldmljZXMsIG5vciBmbGFzaCBkZXZpY2UgbGF5b3V0LiAgDQpTcGVjaWZpYyBzZWN0aW9ucyBpbiB0aGUgRlBEIGZpbGUgY29udHJvbCBhc3BlY3RzIG9mIHRoZSBidWlsZCwgc3VjaCANCmFzIHRoZSBTdXBwb3J0ZWQgQXJjaGl0ZWN0dXJlcyBhbmQgQnVpbGQgVGFyZ2V0cywgYXMgd2VsbCBhcyB0aGUgdG9vbCBmbGFncyANCnRoYXQgYXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBiaW5hcnkgZmlsZXMuICBBIHZhbGlkIHBsYXRmb3JtIGZpbGUgY2FuIHNwZWNpZnkgDQp6ZXJvIG9yIG1vcmUgbW9kdWxlcywgc28gaW5kaXZpZHVhbCBtb2R1bGVzIGNhbiBiZSBjb21waWxlZCB3aXRoaW4gdGhlIGNvbnRleHQNCm9mIGEgcGxhdGZvcm0gKEZQRCkgZGVmaW5pdGlvbi4NCg0KRCkgUGxhdGZvcm0gQ29uZmlndXJhdGlvbiBEYXRhYmFzZSAoUENEKS4gIEEgcGxhdGZvcm0gZGF0YWJhc2UgdGhhdCBjb250YWlucyBhDQp2YXJpZXR5IG9mIGN1cnJlbnQgcGxhdGZvcm0gc2V0dGluZ3Mgb3IgZGlyZWN0aXZlcyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBieSBhIA0KZHJpdmVyIG9yIGFwcGxpY2F0aW9uLiAgVGhlIFBDRCBpcyBkZWZpbmVkIGJ5IHRoZSBQQ0RfUHJvdG9jb2wgKFRoaXMgaXMNCmZ1cnRoZXIgZXhwbGFpbmVkIGluIHRoZSAiRURLIElJIFBsYXRmb3JtIENvbmZpZ3VyYXRpb24gRGF0YWJhc2UgSW5mcmFzdHJ1Y3R1cmUgDQpEZXNjcmlwdGlvbi4iDQoNCkUpIExpYnJhcnkgQ2xhc3MuICBBIGxpYnJhcnkgY2xhc3MgaXMgYSBsb2dpY2FsIGdyb3VwaW5nIG9mIHNpbWlsYXIgZnVuY3Rpb25zLg0KV2hlbiBkZXZlbG9waW5nIGNvbXBvbmVudHMsIHRoZSBtb2R1bGUgc3VyZmFjZSBhcmVhIGRlY2xhcmVzIHRoZSBjbGFzcyBvZg0KbGlicmFyaWVzIHRoYXQgY2FuIGJlIHVzZWQgYnkgdGhlIGNvbXBvbmVudC4gVGhlIE1TQSBhbmQgU1BEIGZpbGVzIGNhbiBzcGVjaWZ5DQphIHJlY29tbWVuZGVkIGluc3RhbmNlIG9mIHRoZSBsaWJyYXJ5IHRoYXQgYSBwbGF0Zm9ybSBpbnRlZ3JhdG9yIChQSSkgbWF5IA0Kc2VsZWN0LCBob3dldmVyIHRoaXMgaXMgb25seSBhIHJlY29tbWVuZGF0aW9uLiAgVGhlIFBJIG1heSBjaG9vc2UgdG8gc2VsZWN0IGEgDQpkaWZmZXJlbnQgbGlicmFyeSBpbnN0YW5jZSB0byBiZSB1c2VkIGR1cmluZyBjb21waWxhdGlvbiBhbmQgbGlua2luZy4gQWxsIA0KbGlicmFyeSB0eXBlIG1vZHVsZXMgbXVzdCBpbmNsdWRlIGhlYWRlciBmaWxlcyBpbiB0aGVpciBkaXN0cmlidXRpb24gcGFja2FnZSwgDQphcyB3ZWxsIGFzIHRoZWlyIE1TQSBmaWxlcy4gQ29tcG9uZW50cywgb24gdGhlIG90aGVyIGhhbmQsIG5lZWQgcHJvdmlkZSBvbmx5IGFuIA0KTVNBIGZpbGUgYW5kIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZpbGVzIHdoZW4gZGlzdHJpYnV0aW5nIHBhY2thZ2VzLiAgVGhlIA0KTGlicmFyeSBDbGFzc2VzIGFyZSBmdXJ0aGVyIGV4cGxhaW5lZCBpbiB0aGUgIkVESyBJSSBCdWlsZCBhbmQgUGFja2FnaW5nIA0KQXJjaGl0ZWN0dXJlIFNwZWNpZmljYXRpb24uIg0KDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQpUaGUgY29tbW9uIG9wZXJhdGlvbnMgYnkgZGV2ZWxvcGVycyBvZiBuZXcgbW9kdWxlcyBhcmU6DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMSkgTWFudWFsbHkgY3JlYXRpbmcgYSBuZXcgbW9kdWxlIGluIGEgcGFja2FnZToNCiAgLSBUaGUgbW9kdWxlIHNvdXJjZSBjb2RlIG11c3QgZmlyc3QgYmUgY3JlYXRlZCBpbiBhbiBhcHByb3ByaWF0ZSBkaXJlY3RvcnkNCiAgICAodW5kZXIgdGhlIHBhY2thZ2UgdGhlIG1vZHVsZSBpcyB0byBiZSBhIHBhcnQgb2YuKSAgDQogIC0gQW4gTVNBIGZpbGUgbXVzdCBiZSBjcmVhdGVkLCBzcGVsbGluZyBvdXQgYWxsIGFzcGVjdHMgb2YgdGhlIG1vZHVsZS4NCiAgLSBUaGUgTVNBIG11c3QgYmUgYWRkZWQgdG8gdGhlIFNQRCBmb3IgdGhlIHBhY2thZ2UgdG8gaW5jbHVkZSB0aGUgbW9kdWxlLg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMikgQWRkaW5nIGFuZCBSZW1vdmluZyBtb2R1bGVzIHRvIGFuZCBmcm9tIGEgcGFja2FnZToNCg0KICAtIFNldCB1cCBlbnZpcm9ubWVudCBhcyBCdWlsZA0KICAtIEFkZGluZyBhIG1vZHVsZSB0byBhIHBhY2thZ2U6DQogICAgIC0gR2VuZXJhdGUgdGhlIE1TQSBmaWxlDQogICAgIC0gQWRkIGEgbmV3IDxGaWxlbmFtZT4gZWxlbWVudCB1bmRlciA8TXNhRmlsZXM+IGludG8NCiAgICAgICA8UGFja2FnZURpcj5cPFBhY2thZ2VOYW1lPi5zcGQsIHVzaW5nIGFyZWxhdGl2ZSBwYXRoIHRvIHRoZSBwYWNrYWdlDQogICAgIC0gQWRkIGEgbmV3IDxNb2R1bGVTQT4gZW50cnkgdW5kZXIgZWFjaCA8RnJhbWV3b3JrTW9kdWxlcz4gaW50byB0aGUNCiAgICAgICA8UGFja2FnZURpcj5cPFBhY2thZ2VOYW1lPi5mcGQgZmlsZSBpZiBuZWNlc3NhcnkuIA0KDQogICAtIFJlbW92aW5nIGEgbW9kdWxlIGZyb20gYSBwYWNrYWdlOg0KICAgICAtIENvbW1lbnQgb3V0IG9yIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyA8RmlsZW5hbWU+IGVsZW1lbnQgdW5kZXIgDQogICAgICAgPE1zYUZpbGVzPiBmcm9tIDxQYWNrYWdlRGlyPlw8UGFja2FnZU5hbWU+LnNwZA0KICAgICAtIENvbW1lbnQgb3V0IG9yIHJlbW92ZSB0aGUgY29ycmVzcG9uZGluZyA8TW9kdWxlU0E+IGVudHJ5IHVuZGVyIGVhY2gNCiAgICAgICA8RnJhbWV3b3JrTW9kdWxlcz4gZnJvbSA8UGFja2FnZURpcj5cPFBhY2thZ2VOYW1lPi5mcGQgaWYgbmVjZXNzYXJ5LiANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMykgTWFudWFsbHkgY3JlYXRpbmcgYSBwYWNrYWdlOg0KICAtIElkZW50aWZ5IHRoZSBtb2R1bGVzIHRoYXQgYXJlIHRvIGJlIG1lbWJlcnMgb2YgdGhlIHByb2plY3QuDQogIC0gSWRlbnRpZnkgdGhlIFZhcmlhYmxlcyBhbmQgR3VpZHMgcmVxdWlyZWQgaW4gYW5kIG9mIHRoZSBQYWNrYWdlIChpbmNsdWRpbmcNCiAgICBjb25zdW1wdGlvbiBhbmQgcHJvZHVjdGlvbiBpbmZvcm1hdGlvbikuDQogIC0gQ3JlYXRlIGFuIFNQRCBmaWxlIGRlZmluaW5nIHRoZXNlIG1vZHVsZXMgYW5kIGNhbGxpbmcgb3V0IHRoZWlyIE1TQSBmaWxlcy4NCiAgLSBBZGQgYSBuZXcgPEZpbGVuYW1lPiBlbGVtZW50IHVuZGVyIDxQYWNrYWdlTGlzdD4gaW50byANCiAgICBUb29sc1xDb25mXEZyYW1ld29ya0RhdGFiYXNlLmRiLCB1c2luZyB0aGUgcmVsYXRpdmUgcGF0aCB0byB0aGUgd29ya3NwYWNlLiANCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjQpIERlY2xhcmluZyBhIG5ldyBQcm90b2NvbCBpbiBhIHBhY2thZ2U6IA0KICAtIFRoaXMgcmVsZWFzZSByZXF1aXJlcyBtYW51YWwgZWRpdGluZyBvZiB0aGUgU1BEIGZpbGUsIGFkZGluZyB0aGUgcHJvdG9jb2wNCiAgICB0byB0aGUgUHJvdG9jb2xEZWNsYXJhdGlvbnMgc2VjdGlvbiBvZiB0aGUgZmlsZS4gDQogIC0gQWRkIHRoZSBQcm90b2NvbCAuaCBmaWxlIHRvIHRoZSBJbmNsdWRlXFByb3RvY29sIGRpcmVjdG9yeS4NCiAgLSBBZGQgYW4gPEVudHJ5PiB0byB0aGUgPFByb3RvY29sRGVjbGFyYXRpb25zPiBlbGVtZW50IGluIHRoZSANCiAgICA8UGFja2FnZU5hbWU+LnNwZCBmaWxlDQogICAgIC0gRWFjaCBsaW5lIGNvbnRhaW5zIFByb3RvY29sIGJhc2UgbmFtZSwgZm9sbG93ZWQgYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSANCiAgICAgICBuYW1lLCBhbmQgICAgICAgIHRoZSBoZXggdmFsdWUgb2YgdGhlIFByb3RvY29sIEdVSUQuDQoNCkV4YW1wbGUgUHJvdG9jb2wgRW50cmllcyAoTk9URTogVGhlIEd1aWQgZW50cnkgaXMgYSBzaW5nbGUgbGluZSBpbiB0aGUgU1BEIA0KZmlsZSk6DQo8UHJvdG9jb2xEZWNsYXJhdGlvbnM+DQogIDxFbnRyeSBOYW1lPSJCZHMiPg0KICAgIDxDX05hbWU+Z0VmaUJkc0FyY2hQcm90b2NvbEd1aWQ8L0NfTmFtZT4NCiAgICA8R3VpZFZhbHVlPjY2NUUzRkY2LTQ2Q0MtMTFENC05QTM4LTAwOTAyNzNGQzE0RDwvR3VpZFZhbHVlPg0KICAgIDxIZWxwVGV4dC8+DQogIDwvRW50cnk+DQogIDxFbnRyeSBOYW1lPSJDcHUiPg0KICAgIDxDX05hbWU+Z0VmaUNwdUFyY2hQcm90b2NvbEd1aWQ8L0NfTmFtZT4NCiAgICA8R3VpZFZhbHVlPjI2QkFDQ0IxLTZGNDItMTFENC1CQ0U3LTAwODBDNzNDODg4MTwvR3VpZFZhbHVlPg0KICAgIDxIZWxwVGV4dC8+DQogIDwvRW50cnk+DQo8L1Byb3RvY29sRGVjbGFyYXRpb25zPg0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjUpIERlY2xhcmluZyBhIG5ldyBQUEkgaW4gYSBwYWNrYWdlOg0KICAtIFRoaXMgcmVsZWFzZSByZXF1aXJlcyBtYW51YWwgZWRpdGluZyBvZiB0aGUgU1BEIGZpbGUNCiAgLSBBZGQgdGhlIFBQSSAuaCBmaWxlIHRvIHRoZSBJbmNsdWRlXFBwaSBkaXJlY3RvcnkuDQogIC0gQWRkIGFuIDxFbnRyeT4gdG8gdGhlIHBhY2thZ2UgPFBwaURlY2xhcmF0aW9ucz4gZWxlbWVudCBpbiB0aGUgDQogICAgPFBhY2thZ2VOYW1lPi5zcGQgZmlsZQ0KICAgICAtIEVhY2ggbGluZSBjb250YWlucyB0aGUgUFBJIGJhc2UgbmFtZSwgZm9sbG93ZWQgYnkgdGhlIGdsb2JhbCB2YXJpYWJsZSANCiAgICAgICBuYW1lIGFuZCAgICAgICAgdGhlIGhleCB2YWx1ZSBvZiB0aGUgUFBJIEdVSUQuDQoNCkV4YW1wbGUgUHBpIEVudHJpZXMgKE5PVEU6IFRoZSBHdWlkIGVudHJ5IGlzIGEgc2luZ2xlIGxpbmUgaW4gdGhlIFNQRCBmaWxlKToNCjxQcGlEZWNsYXJhdGlvbnM+DQogIDxFbnRyeSBOYW1lPSJCb290SW5SZWNvdmVyeU1vZGUiPg0KICAgIDxDX05hbWU+Z0VmaVBlaUJvb3RJblJlY292ZXJ5TW9kZVBwaUd1aWQ8L0NfTmFtZT4NCiAgICA8R3VpZFZhbHVlPjE3RUU0OTZBLUQ4RTQtNEI5QS05NEQxLUNFODI3MjMwMDg1MDwvR3VpZFZhbHVlPg0KICAgIDxIZWxwVGV4dC8+DQogIDwvRW50cnk+DQogIDxFbnRyeSBOYW1lPSJDcHVJbyI+DQogICAgPENfTmFtZT5nRWZpUGVpQ3B1SW9QcGlJblNlcnZpY2VUYWJsZUd1aWQ8L0NfTmFtZT4NCiAgICA8R3VpZFZhbHVlPkU2QUYxRjdCLUZDM0YtNDZEQS1BODI4LUEzQjQ1N0E0NDI4MjwvR3VpZFZhbHVlPg0KICAgIDxIZWxwVGV4dC8+DQogIDwvRW50cnk+DQo8L1BwaURlY2xhcmF0aW9ucz4NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNikgRGVjbGFyaW5nIGEgbmV3IEdVSUQgaW4gYSBwYWNrYWdlOg0KICAtIFRoaXMgcmVsZWFzZSByZXF1aXJlcyBtYW51YWwgZWRpdGluZyBvZiB0aGUgU1BEIGZpbGUgdG8gaW5jbHVkZSB0aGUgbmV3DQogICAgR3VpZC4gIFRoaXMgaXMgaWRlbnRpY2FsIHRvIGFkZGluZyBhIFByb3RvY29sRGVjbGFyYXRpb24gb3IgUHBpRGVjbGFyYXRpb24NCiAgICBlbGVtZW50LCBhcyBkZXNjcmliZWQgYWJvdmUuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNykgRGVjbGFyaW5nIGEgbmV3IFBDRCBlbnRyeSBpbiBhIHBhY2thZ2U6DQogIC0gVGhpcyByZWxlYXNlIHJlcXVpcmVzIG1hbnVhbCBlZGl0aW5nIG9mIHRoZSBTUEQgZmlsZSB0byBpbmNsdWRlIHRoZSBuZXcNCiAgICBQQ0QuICBOZXcgUGNkIGVudHJpZXMgYXJlIGFkZGVkIHRvIHRoZSBQY2REZWZpbml0aW9ucyBzZWN0aW9uIG9mIHRoZQ0KICAgIDxQYWNrYWdlTmFtZT4uc3BkIGZpbGUgdXNpbmcgdGhlIGZvbGxvd2luZyBleGFtcGxlIGZvciB0aGUgZm9ybWF0DQogICAgKE5PVEU6IFRoZSBoZXggPFRva2VuPiB2YWx1ZSBtdXN0IGJlIHVuaXF1ZSk6DQoNCjxQY2REZWNsYXJhdGlvbnM+DQogIDxQY2RFbnRyeSBJdGVtVHlwZT0iRklYRURfQVRfQlVJTEQiPg0KICAgIDxDX05hbWU+UGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGg8L0NfTmFtZT4NCiAgICA8VG9rZW4+MHgwMDAwMDAwMTwvVG9rZW4+DQogICAgPFRva2VuU3BhY2VHdWlkQ05hbWU+Z0VmaU1kZVBrZ1Rva2VuU3BhY2VHdWlkPC9Ub2tlblNwYWNlR3VpZENOYW1lPg0KICAgIDxEYXR1bVR5cGU+VUlOVDMyPC9EYXR1bVR5cGU+DQogICAgPFZhbGlkVXNhZ2U+RklYRURfQVRfQlVJTEQ8L1ZhbGlkVXNhZ2U+DQogICAgPERlZmF1bHRWYWx1ZT4xMDAwMDAwPC9EZWZhdWx0VmFsdWU+DQogICAgPEhlbHBUZXh0PlRoZSBtYXhpbXVtIGxlbmdoIGZvciB1bmljb2RlIHN0cmluZy48L0hlbHBUZXh0Pg0KICA8L1BjZEVudHJ5Pg0KPC9QY2REZWNsYXJhdGlvbnM+DQogIA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo4KSBEZWNsYXJpbmcgYSBuZXcgTGlicmFyeSBDbGFzczoNCiAgLSBUaGlzIHJlbGVhc2UgcmVxdWlyZXMgbWFudWFsIGVkaXRpbmcgb2YgdGhlIFNQRCBmaWxlIHRvIGluY2x1ZGUgdGhlIG5ldw0KICAgIExpYnJhcnkgQ2xhc3MuICBOZXcgTGlicmFyeSBDbGFzcyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUgDQogICAgTGlicmFyeUNsYXNzRGVjbGFyYXRpb25zIHNlY3Rpb24gb2YgdGhlIDxQYWNrYWdlTmFtZT4uc3BkIGZpbGUgdXNpbmcNCiAgICB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIHRoZSBmb3JtYXQ6DQoNCjxMaWJyYXJ5Q2xhc3NEZWNsYXJhdGlvbnM+DQogIDxMaWJyYXJ5Q2xhc3MgTmFtZT0iQmFzZUxpYiI+DQogICAgPEluY2x1ZGVIZWFkZXI+SW5jbHVkZS9MaWJyYXJ5L0Jhc2VMaWIuaDwvSW5jbHVkZUhlYWRlcj4NCiAgICA8SGVscFRleHQvPg0KICA8L0xpYnJhcnlDbGFzcz4NCiAgPExpYnJhcnlDbGFzcyBOYW1lPSJCYXNlTWVtb3J5TGliIj4NCiAgICA8SW5jbHVkZUhlYWRlcj5JbmNsdWRlL0xpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPC9JbmNsdWRlSGVhZGVyPg0KICAgIDxIZWxwVGV4dC8+DQogIDwvTGlicmFyeUNsYXNzPg0KPC9MaWJyYXJ5Q2xhc3NEZWNsYXJhdGlvbnM+DQoNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCkVESyBJSSBDaGFuZ2VzIFJlbGF0aXZlIHRvIHRoZSBvcmlnaW5hbCBFREs6DQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KVGhlIEVESyBJSSByZXByZXNlbnRzIHNpZ25pZmljYW50IGNoYW5nZXMgaW4gdGhlIHN0cnVjdHVyZSBvZiB0aGUgRURLLg0KVGhlcmVmb3JlLCBpdCBpcyB2ZXJ5IGRpZmZpY3VsdCB0byBpc29sYXRlIGFsbCBvZiB0aGUgY2hhbmdlcyBvZiB0aGlzIHZlcnNpb24gb2YNCnRoZSBFREsgd2l0aCB0aGUgb3JpZ2luYWwgRURLLg0KDQpPZiBwYXJ0aWN1bGFyIG5vdGU6DQoNCjEpIEVESyBJSSBjb250YWlucyBuZXcgaGFyZHdhcmUgZmVhdHVyZSBzdXBwb3J0IGZvciB0aGUgSUNIIFNNQlVTIExpYnJhcmllcy4NCiAgIFRoZXNlIGxpYnJhcmllcyBhcmUgcHJvdmlkZWQgdG8gbWFrZSBNZW1vcnkgUmVmZXJlbmNlIENvZGUgKE1SQykgZGV2ZWxvcG1lbnQNCiAgIGVhc2llci4NCjIpIFRoZSBNREUgbGlicmFyaWVzIHJlcHJlc2VudCBzaWduaWZpY2FudCBjaGFuZ2VzIGluIHNvdXJjZQ0KICAgKHdpdGggb25seSBsaW1pdGVkIGNoYW5nZXMgaW4gZnVuY3Rpb25hbGl0eS4pICBUaGVzZSBuZXcgbGlicmFyaWVzIGNvbmZvcm0NCiAgIHRvIHRoZSAiRURLIElJIE1vZHVsZSBEZXZlbG9wbWVudCBFbnZpcm9ubWVudCBMaWJyYXJ5IFNwZWNpZmljYXRpb24uPw0KMykgVGhlIEZhdCBCaW5hcnkgYW5kIHRoZSBFREsgU2hlbGwgQmluYXJ5IFBhY2thZ2VzIGFyZSBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsDQogICB0byB0aGUgb3JpZ2luYWwgRURLLg0KNCkgVGhlIEVESyB0b29scyBkaXJlY3RvcnkgaGFzIGJlZW4gZXhwYW5kZWQgdG8gaW5jbHVkZSBtb3JlIHRvb2xzIGFuZCBtb3JlDQogICB0b29sIGZ1bmN0aW9uYWxpdHkuDQo1KSBUaGUgRURLIE5UMzIgc2VjdGlvbiBoYXMgYmVlbiBwb3J0ZWQgdG8gdGhlIG5ldyBidWlsZCBwcm9jZXNzLCBidXQNCiAgIGZ1bmN0aW9uYWxseSByZW1haW5zIHRoZSBzYW1lIGFzIHRoZSBvcmlnaW5hbCBFREsuDQo2KSBUaGUgQXBwbGljYXRpb24gIkhlbGxvV29ybGQiIGhhcyBiZWVuIHBvcnRlZCB0byBFREsgSUkgYXMgd2VsbC4NCg0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KVmlydXMgc2Nhbm5lZCBieSBNY0FmZWUgVmlydXNTY2FuIEVudGVycHJpc2UgOC4wLjAsIFZpcnVzIERlZmluaXRpb25zIDQ4OTAsIG5vDQp2aXJ1cyBkZXRlY3RlZC4NCg0KdmltOnR3PTc4OnRzPTI6Y29tPWZiXDotIDphaQ0K